diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..000c3c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +brr_lwd_ui.css diff --git a/brr_lwd_ui.css b/brr_lwd_ui.css index 50bcbba..c108b82 100644 --- a/brr_lwd_ui.css +++ b/brr_lwd_ui.css @@ -95,6 +95,7 @@ html { height: 100%; overflow-x: hidden; overflow-y: auto; + scroll-behavior: smooth; } & .lwdui-virtual-table-row { diff --git a/db_worker.bc.js b/db_worker.bc.js index 020c32b..93b968c 100644 --- a/db_worker.bc.js +++ b/db_worker.bc.js @@ -1,13805 +1,3950 @@ // Generated by js_of_ocaml //# buildInfo:effects=false, kind=exe, use-js-string=true, version=5.8.2+5.8.2 -(function - (Object){ - typeof globalThis !== "object" - && - (this - ? get() - : (Object.defineProperty - (Object.prototype, "_T_", {configurable: true, get: get}), - _T_)); - function get(){ - var global = this || self; - global.globalThis = global; - delete Object.prototype._T_; - } - } - (Object)); -(function(globalThis){ - "use strict"; - function caml_array_blit(a1, i1, a2, i2, len){ - if(i2 <= i1) - for(var j = 1; j <= len; j++) a2[i2 + j] = a1[i1 + j]; - else - for(var j = len; j >= 1; j--) a2[i2 + j] = a1[i1 + j]; - return 0; - } - function caml_array_fill(array, ofs, len, v){ - for(var i = 0; i < len; i++) array[ofs + i + 1] = v; - return 0; - } - function caml_subarray_to_jsbytes(a, i, len){ - var f = String.fromCharCode; - if(i == 0 && len <= 4096 && len == a.length) return f.apply(null, a); - var s = ""; - for(; 0 < len; i += 1024, len -= 1024) - s += f.apply(null, a.slice(i, i + Math.min(len, 1024))); - return s; - } - function caml_convert_bytes_to_array(s){ - var a = new Uint8Array(s.l), b = s.c, l = b.length, i = 0; - for(; i < l; i++) a[i] = b.charCodeAt(i); - for(l = s.l; i < l; i++) a[i] = 0; - s.c = a; - s.t = 4; - return a; - } - function caml_blit_bytes(s1, i1, s2, i2, len){ - if(len == 0) return 0; - if(i2 == 0 && (len >= s2.l || s2.t == 2 && len >= s2.c.length)){ - s2.c = - s1.t == 4 - ? caml_subarray_to_jsbytes(s1.c, i1, len) - : i1 == 0 && s1.c.length == len ? s1.c : s1.c.substr(i1, len); - s2.t = s2.c.length == s2.l ? 0 : 2; - } - else if(s2.t == 2 && i2 == s2.c.length){ - s2.c += - s1.t == 4 - ? caml_subarray_to_jsbytes(s1.c, i1, len) - : i1 == 0 && s1.c.length == len ? s1.c : s1.c.substr(i1, len); - s2.t = s2.c.length == s2.l ? 0 : 2; - } - else{ - if(s2.t != 4) caml_convert_bytes_to_array(s2); - var c1 = s1.c, c2 = s2.c; - if(s1.t == 4) - if(i2 <= i1) - for(var i = 0; i < len; i++) c2[i2 + i] = c1[i1 + i]; - else - for(var i = len - 1; i >= 0; i--) c2[i2 + i] = c1[i1 + i]; - else{ - var l = Math.min(len, c1.length - i1); - for(var i = 0; i < l; i++) c2[i2 + i] = c1.charCodeAt(i1 + i); - for(; i < len; i++) c2[i2 + i] = 0; - } - } - return 0; - } - function caml_str_repeat(n, s){ - if(n == 0) return ""; - if(s.repeat) return s.repeat(n); - var r = "", l = 0; - for(;;){ - if(n & 1) r += s; - n >>= 1; - if(n == 0) return r; - s += s; - l++; - if(l == 9) s.slice(0, 1); - } - } - function caml_convert_string_to_bytes(s){ - if(s.t == 2) - s.c += caml_str_repeat(s.l - s.c.length, "\0"); - else - s.c = caml_subarray_to_jsbytes(s.c, 0, s.c.length); - s.t = 0; - } - function jsoo_is_ascii(s){ - if(s.length < 24){ - for(var i = 0; i < s.length; i++) if(s.charCodeAt(i) > 127) return false; - return true; - } - else - return ! /[^\x00-\x7f]/.test(s); - } - function caml_utf16_of_utf8(s){ - for(var b = "", t = "", c, c1, c2, v, i = 0, l = s.length; i < l; i++){ - c1 = s.charCodeAt(i); - if(c1 < 0x80){ - for(var j = i + 1; j < l && (c1 = s.charCodeAt(j)) < 0x80; j++) ; - if(j - i > 512){ - t.substr(0, 1); - b += t; - t = ""; - b += s.slice(i, j); - } - else - t += s.slice(i, j); - if(j == l) break; - i = j; - } - v = 1; - if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128){ - c = c2 + (c1 << 6); - if(c1 < 0xe0){ - v = c - 0x3080; - if(v < 0x80) v = 1; - } - else{ - v = 2; - if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128){ - c = c2 + (c << 6); - if(c1 < 0xf0){ - v = c - 0xe2080; - if(v < 0x800 || v >= 0xd7ff && v < 0xe000) v = 2; - } - else{ - v = 3; - if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128 && c1 < 0xf5){ - v = c2 - 0x3c82080 + (c << 6); - if(v < 0x10000 || v > 0x10ffff) v = 3; - } - } - } - } - } - if(v < 4){ - i -= v; - t += "\ufffd"; - } - else if(v > 0xffff) - t += String.fromCharCode(0xd7c0 + (v >> 10), 0xdc00 + (v & 0x3FF)); - else - t += String.fromCharCode(v); - if(t.length > 1024){t.substr(0, 1); b += t; t = "";} - } - return b + t; - } - function MlBytes(tag, contents, length){ - this.t = tag; - this.c = contents; - this.l = length; - } - MlBytes.prototype.toString = - function(){ - switch(this.t){ - case 9: - return this.c; - default: caml_convert_string_to_bytes(this); - case 0: - if(jsoo_is_ascii(this.c)){this.t = 9; return this.c;} this.t = 8; - case 8: - return this.c; - } - }; - MlBytes.prototype.toUtf16 = - function(){ - var r = this.toString(); - if(this.t == 9) return r; - return caml_utf16_of_utf8(r); - }; - MlBytes.prototype.slice = - function(){ - var content = this.t == 4 ? this.c.slice() : this.c; - return new MlBytes(this.t, content, this.l); - }; - function caml_bytes_of_jsbytes(s){return new MlBytes(0, s, s.length);} - function caml_jsbytes_of_string(x){return x;} - function caml_bytes_of_string(s){ - return caml_bytes_of_jsbytes(caml_jsbytes_of_string(s)); - } - function caml_blit_string(a, b, c, d, e){ - caml_blit_bytes(caml_bytes_of_string(a), b, c, d, e); - return 0; - } - function jsoo_sys_getenv(n){ - var process = globalThis.process; - if(process && process.env && process.env[n] != undefined) - return process.env[n]; - if(globalThis.jsoo_static_env && globalThis.jsoo_static_env[n]) - return globalThis.jsoo_static_env[n]; - } - var caml_record_backtrace_flag = 0; - (function(){ - var r = jsoo_sys_getenv("OCAMLRUNPARAM"); - if(r !== undefined){ - var l = r.split(","); - for(var i = 0; i < l.length; i++) - if(l[i] == "b"){ - caml_record_backtrace_flag = 1; - break; - } - else if(l[i].startsWith("b=")) - caml_record_backtrace_flag = + l[i].slice(2); - else - continue; - } - } - ()); - var caml_global_data = [0]; - function caml_exn_with_js_backtrace(exn, force){ - if(! exn.js_error || force || exn[0] == 248) - exn.js_error = new globalThis.Error("Js exception containing backtrace"); - return exn; - } - function caml_maybe_attach_backtrace(exn, force){ - return caml_record_backtrace_flag - ? caml_exn_with_js_backtrace(exn, force) - : exn; - } - function caml_raise_with_arg(tag, arg){ - throw caml_maybe_attach_backtrace([0, tag, arg]); - } - function caml_string_of_jsbytes(x){return x;} - function caml_raise_with_string(tag, msg){ - caml_raise_with_arg(tag, caml_string_of_jsbytes(msg)); - } - function caml_invalid_argument(msg){ - caml_raise_with_string(caml_global_data.Invalid_argument, msg); - } - function caml_bytes_bound_error(){ - caml_invalid_argument("index out of bounds"); - } - function caml_bytes_unsafe_get(s, i){ - switch(s.t & 6){ - default: if(i >= s.c.length) return 0; - case 0: - return s.c.charCodeAt(i); - case 4: - return s.c[i]; - } - } - function caml_bytes_get(s, i){ - if(i >>> 0 >= s.l) caml_bytes_bound_error(); - return caml_bytes_unsafe_get(s, i); - } - function caml_bytes_unsafe_set(s, i, c){ - c &= 0xff; - if(s.t != 4){ - if(i == s.c.length){ - s.c += String.fromCharCode(c); - if(i + 1 == s.l) s.t = 0; - return 0; - } - caml_convert_bytes_to_array(s); - } - s.c[i] = c; - return 0; - } - function caml_bytes_set(s, i, c){ - if(i >>> 0 >= s.l) caml_bytes_bound_error(); - return caml_bytes_unsafe_set(s, i, c); - } - function caml_call_gen(f, args){ - var - n = f.l >= 0 ? f.l : f.l = f.length, - argsLen = args.length, - d = n - argsLen; - if(d == 0) - return f.apply(null, args); - else if(d < 0){ - var g = f.apply(null, args.slice(0, n)); - if(typeof g !== "function") return g; - return caml_call_gen(g, args.slice(n)); - } - else{ - switch(d){ - case 1: - { - var - g = - function(x){ - var nargs = new Array(argsLen + 1); - for(var i = 0; i < argsLen; i++) nargs[i] = args[i]; - nargs[argsLen] = x; - return f.apply(null, nargs); - }; - break; - } - case 2: - { - var - g = - function(x, y){ - var nargs = new Array(argsLen + 2); - for(var i = 0; i < argsLen; i++) nargs[i] = args[i]; - nargs[argsLen] = x; - nargs[argsLen + 1] = y; - return f.apply(null, nargs); - }; - break; - } - default: - var - g = - function(){ - var - extra_args = arguments.length == 0 ? 1 : arguments.length, - nargs = new Array(args.length + extra_args); - for(var i = 0; i < args.length; i++) nargs[i] = args[i]; - for(var i = 0; i < arguments.length; i++) - nargs[args.length + i] = arguments[i]; - return caml_call_gen(f, nargs); - }; - } - g.l = d; - return g; - } - } - function caml_array_bound_error(){ - caml_invalid_argument("index out of bounds"); - } - function caml_check_bound(array, index){ - if(index >>> 0 >= array.length - 1) caml_array_bound_error(); - return array; - } - function caml_classify_float(x){ - if(isFinite(x)){ - if(Math.abs(x) >= 2.2250738585072014e-308) return 0; - if(x != 0) return 1; - return 2; - } - return isNaN(x) ? 4 : 3; - } - function caml_is_continuation_tag(t){return 0;} - var log2_ok = Math.log2 && Math.log2(1.1235582092889474E+307) == 1020; - function jsoo_floor_log2(x){ - if(log2_ok) return Math.floor(Math.log2(x)); - var i = 0; - if(x == 0) return - Infinity; - if(x >= 1) while(x >= 2){x /= 2; i++;} else while(x < 1){x *= 2; i--;} - return i; - } - function caml_int32_bits_of_float(x){ - var float32a = new Float32Array(1); - float32a[0] = x; - var int32a = new Int32Array(float32a.buffer); - return int32a[0] | 0; - } - var caml_int64_offset = Math.pow(2, - 24); - function caml_raise_constant(tag){throw tag;} - function caml_raise_zero_divide(){ - caml_raise_constant(caml_global_data.Division_by_zero); - } - function MlInt64(lo, mi, hi){ - this.lo = lo & 0xffffff; - this.mi = mi & 0xffffff; - this.hi = hi & 0xffff; - } - MlInt64.prototype.caml_custom = "_j"; - MlInt64.prototype.copy = - function(){return new MlInt64(this.lo, this.mi, this.hi);}; - MlInt64.prototype.ucompare = - function(x){ - if(this.hi > x.hi) return 1; - if(this.hi < x.hi) return - 1; - if(this.mi > x.mi) return 1; - if(this.mi < x.mi) return - 1; - if(this.lo > x.lo) return 1; - if(this.lo < x.lo) return - 1; - return 0; - }; - MlInt64.prototype.compare = - function(x){ - var hi = this.hi << 16, xhi = x.hi << 16; - if(hi > xhi) return 1; - if(hi < xhi) return - 1; - if(this.mi > x.mi) return 1; - if(this.mi < x.mi) return - 1; - if(this.lo > x.lo) return 1; - if(this.lo < x.lo) return - 1; - return 0; - }; - MlInt64.prototype.neg = - function(){ - var - lo = - this.lo, - mi = - this.mi + (lo >> 24), - hi = - this.hi + (mi >> 24); - return new MlInt64(lo, mi, hi); - }; - MlInt64.prototype.add = - function(x){ - var - lo = this.lo + x.lo, - mi = this.mi + x.mi + (lo >> 24), - hi = this.hi + x.hi + (mi >> 24); - return new MlInt64(lo, mi, hi); - }; - MlInt64.prototype.sub = - function(x){ - var - lo = this.lo - x.lo, - mi = this.mi - x.mi + (lo >> 24), - hi = this.hi - x.hi + (mi >> 24); - return new MlInt64(lo, mi, hi); - }; - MlInt64.prototype.mul = - function(x){ - var - lo = this.lo * x.lo, - mi = (lo * caml_int64_offset | 0) + this.mi * x.lo + this.lo * x.mi, - hi = - (mi * caml_int64_offset | 0) + this.hi * x.lo + this.mi * x.mi - + this.lo * x.hi; - return new MlInt64(lo, mi, hi); - }; - MlInt64.prototype.isZero = - function(){return (this.lo | this.mi | this.hi) == 0;}; - MlInt64.prototype.isNeg = function(){return this.hi << 16 < 0;}; - MlInt64.prototype.and = - function(x){ - return new MlInt64(this.lo & x.lo, this.mi & x.mi, this.hi & x.hi); - }; - MlInt64.prototype.or = - function(x){ - return new MlInt64(this.lo | x.lo, this.mi | x.mi, this.hi | x.hi); - }; - MlInt64.prototype.xor = - function(x){ - return new MlInt64(this.lo ^ x.lo, this.mi ^ x.mi, this.hi ^ x.hi); - }; - MlInt64.prototype.shift_left = - function(s){ - s = s & 63; - if(s == 0) return this; - if(s < 24) - return new - MlInt64 - (this.lo << s, - this.mi << s | this.lo >> 24 - s, - this.hi << s | this.mi >> 24 - s); - if(s < 48) - return new - MlInt64 - (0, this.lo << s - 24, this.mi << s - 24 | this.lo >> 48 - s); - return new MlInt64(0, 0, this.lo << s - 48); - }; - MlInt64.prototype.shift_right_unsigned = - function(s){ - s = s & 63; - if(s == 0) return this; - if(s < 24) - return new - MlInt64 - (this.lo >> s | this.mi << 24 - s, - this.mi >> s | this.hi << 24 - s, - this.hi >> s); - if(s < 48) - return new - MlInt64 - (this.mi >> s - 24 | this.hi << 48 - s, this.hi >> s - 24, 0); - return new MlInt64(this.hi >> s - 48, 0, 0); - }; - MlInt64.prototype.shift_right = - function(s){ - s = s & 63; - if(s == 0) return this; - var h = this.hi << 16 >> 16; - if(s < 24) - return new - MlInt64 - (this.lo >> s | this.mi << 24 - s, - this.mi >> s | h << 24 - s, - this.hi << 16 >> s >>> 16); - var sign = this.hi << 16 >> 31; - if(s < 48) - return new - MlInt64 - (this.mi >> s - 24 | this.hi << 48 - s, - this.hi << 16 >> s - 24 >> 16, - sign & 0xffff); - return new MlInt64(this.hi << 16 >> s - 32, sign, sign); - }; - MlInt64.prototype.lsl1 = - function(){ - this.hi = this.hi << 1 | this.mi >> 23; - this.mi = (this.mi << 1 | this.lo >> 23) & 0xffffff; - this.lo = this.lo << 1 & 0xffffff; - }; - MlInt64.prototype.lsr1 = - function(){ - this.lo = (this.lo >>> 1 | this.mi << 23) & 0xffffff; - this.mi = (this.mi >>> 1 | this.hi << 23) & 0xffffff; - this.hi = this.hi >>> 1; - }; - MlInt64.prototype.udivmod = - function(x){ - var - offset = 0, - modulus = this.copy(), - divisor = x.copy(), - quotient = new MlInt64(0, 0, 0); - while(modulus.ucompare(divisor) > 0){offset++; divisor.lsl1();} - while(offset >= 0){ - offset--; - quotient.lsl1(); - if(modulus.ucompare(divisor) >= 0){ - quotient.lo++; - modulus = modulus.sub(divisor); - } - divisor.lsr1(); - } - return {quotient: quotient, modulus: modulus}; - }; - MlInt64.prototype.div = - function(y){ - var x = this; - if(y.isZero()) caml_raise_zero_divide(); - var sign = x.hi ^ y.hi; - if(x.hi & 0x8000) x = x.neg(); - if(y.hi & 0x8000) y = y.neg(); - var q = x.udivmod(y).quotient; - if(sign & 0x8000) q = q.neg(); - return q; - }; - MlInt64.prototype.mod = - function(y){ - var x = this; - if(y.isZero()) caml_raise_zero_divide(); - var sign = x.hi; - if(x.hi & 0x8000) x = x.neg(); - if(y.hi & 0x8000) y = y.neg(); - var r = x.udivmod(y).modulus; - if(sign & 0x8000) r = r.neg(); - return r; - }; - MlInt64.prototype.toInt = function(){return this.lo | this.mi << 24;}; - MlInt64.prototype.toFloat = - function(){ - return (this.hi << 16) * Math.pow(2, 32) + this.mi * Math.pow(2, 24) - + this.lo; - }; - MlInt64.prototype.toArray = - function(){ - return [this.hi >> 8, - this.hi & 0xff, - this.mi >> 16, - this.mi >> 8 & 0xff, - this.mi & 0xff, - this.lo >> 16, - this.lo >> 8 & 0xff, - this.lo & 0xff]; - }; - MlInt64.prototype.lo32 = - function(){return this.lo | (this.mi & 0xff) << 24;}; - MlInt64.prototype.hi32 = - function(){return this.mi >>> 8 & 0xffff | this.hi << 16;}; - function caml_int64_create_lo_mi_hi(lo, mi, hi){return new MlInt64(lo, mi, hi); - } - function caml_int64_bits_of_float(x){ - if(! isFinite(x)){ - if(isNaN(x)) return caml_int64_create_lo_mi_hi(1, 0, 0x7ff0); - return x > 0 - ? caml_int64_create_lo_mi_hi(0, 0, 0x7ff0) - : caml_int64_create_lo_mi_hi(0, 0, 0xfff0); - } - var sign = x == 0 && 1 / x == - Infinity ? 0x8000 : x >= 0 ? 0 : 0x8000; - if(sign) x = - x; - var exp = jsoo_floor_log2(x) + 1023; - if(exp <= 0){ - exp = 0; - x /= Math.pow(2, - 1026); - } - else{ - x /= Math.pow(2, exp - 1027); - if(x < 16){x *= 2; exp -= 1;} - if(exp == 0) x /= 2; - } - var k = Math.pow(2, 24), r3 = x | 0; - x = (x - r3) * k; - var r2 = x | 0; - x = (x - r2) * k; - var r1 = x | 0; - r3 = r3 & 0xf | sign | exp << 4; - return caml_int64_create_lo_mi_hi(r1, r2, r3); - } - function caml_int64_to_bytes(x){return x.toArray();} - function caml_ba_serialize(writer, ba, sz){ - writer.write(32, ba.dims.length); - writer.write(32, ba.kind | ba.layout << 8); - if(ba.caml_custom == "_bigarr02") - for(var i = 0; i < ba.dims.length; i++) - if(ba.dims[i] < 0xffff) - writer.write(16, ba.dims[i]); - else{ - writer.write(16, 0xffff); - writer.write(32, 0); - writer.write(32, ba.dims[i]); - } - else - for(var i = 0; i < ba.dims.length; i++) writer.write(32, ba.dims[i]); - switch(ba.kind){ - case 2: - case 3: - case 12: - for(var i = 0; i < ba.data.length; i++) writer.write(8, ba.data[i]); - break; - case 4: - case 5: - for(var i = 0; i < ba.data.length; i++) writer.write(16, ba.data[i]); - break; - case 6: - for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]); - break; - case 8: - case 9: - writer.write(8, 0); - for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]); - break; - case 7: - for(var i = 0; i < ba.data.length / 2; i++){ - var b = caml_int64_to_bytes(ba.get(i)); - for(var j = 0; j < 8; j++) writer.write(8, b[j]); - } - break; - case 1: - for(var i = 0; i < ba.data.length; i++){ - var b = caml_int64_to_bytes(caml_int64_bits_of_float(ba.get(i))); - for(var j = 0; j < 8; j++) writer.write(8, b[j]); - } - break; - case 0: - for(var i = 0; i < ba.data.length; i++){ - var b = caml_int32_bits_of_float(ba.get(i)); - writer.write(32, b); - } - break; - case 10: - for(var i = 0; i < ba.data.length / 2; i++){ - var j = ba.get(i); - writer.write(32, caml_int32_bits_of_float(j[1])); - writer.write(32, caml_int32_bits_of_float(j[2])); - } - break; - case 11: - for(var i = 0; i < ba.data.length / 2; i++){ - var - complex = ba.get(i), - b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[1])); - for(var j = 0; j < 8; j++) writer.write(8, b[j]); - var b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[2])); - for(var j = 0; j < 8; j++) writer.write(8, b[j]); - } - break; - } - sz[0] = (4 + ba.dims.length) * 4; - sz[1] = (4 + ba.dims.length) * 8; - } - function caml_ba_get_size_per_element(kind){ - switch(kind){case 7:case 10:case 11: return 2;default: return 1; - } - } - function caml_ba_create_buffer(kind, size){ - var view; - switch(kind){ - case 0: - view = Float32Array; break; - case 1: - view = Float64Array; break; - case 2: - view = Int8Array; break; - case 3: - view = Uint8Array; break; - case 4: - view = Int16Array; break; - case 5: - view = Uint16Array; break; - case 6: - view = Int32Array; break; - case 7: - view = Int32Array; break; - case 8: - view = Int32Array; break; - case 9: - view = Int32Array; break; - case 10: - view = Float32Array; break; - case 11: - view = Float64Array; break; - case 12: - view = Uint8Array; break; - } - if(! view) caml_invalid_argument("Bigarray.create: unsupported kind"); - var data = new view(size * caml_ba_get_size_per_element(kind)); - return data; - } - function caml_int32_float_of_bits(x){ - var int32a = new Int32Array(1); - int32a[0] = x; - var float32a = new Float32Array(int32a.buffer); - return float32a[0]; - } - function caml_int64_of_bytes(a){ - return new - MlInt64 - (a[7] << 0 | a[6] << 8 | a[5] << 16, - a[4] << 0 | a[3] << 8 | a[2] << 16, - a[1] << 0 | a[0] << 8); - } - function caml_int64_float_of_bits(x){ - var lo = x.lo, mi = x.mi, hi = x.hi, exp = (hi & 0x7fff) >> 4; - if(exp == 2047) - return (lo | mi | hi & 0xf) == 0 - ? hi & 0x8000 ? - Infinity : Infinity - : NaN; - var k = Math.pow(2, - 24), res = (lo * k + mi) * k + (hi & 0xf); - if(exp > 0){ - res += 16; - res *= Math.pow(2, exp - 1027); - } - else - res *= Math.pow(2, - 1026); - if(hi & 0x8000) res = - res; - return res; - } - function caml_ba_get_size(dims){ - var n_dims = dims.length, size = 1; - for(var i = 0; i < n_dims; i++){ - if(dims[i] < 0) - caml_invalid_argument("Bigarray.create: negative dimension"); - size = size * dims[i]; - } - return size; - } - function caml_int64_create_lo_hi(lo, hi){ - return new - MlInt64 - (lo & 0xffffff, - lo >>> 24 & 0xff | (hi & 0xffff) << 8, - hi >>> 16 & 0xffff); - } - function caml_int64_hi32(v){return v.hi32();} - function caml_int64_lo32(v){return v.lo32();} - var caml_ba_custom_name = "_bigarr02"; - function Ml_Bigarray(kind, layout, dims, buffer){ - this.kind = kind; - this.layout = layout; - this.dims = dims; - this.data = buffer; - } - Ml_Bigarray.prototype.caml_custom = caml_ba_custom_name; - Ml_Bigarray.prototype.offset = - function(arg){ - var ofs = 0; - if(typeof arg === "number") arg = [arg]; - if(! (arg instanceof Array)) - caml_invalid_argument("bigarray.js: invalid offset"); - if(this.dims.length != arg.length) - caml_invalid_argument("Bigarray.get/set: bad number of dimensions"); - if(this.layout == 0) - for(var i = 0; i < this.dims.length; i++){ - if(arg[i] < 0 || arg[i] >= this.dims[i]) caml_array_bound_error(); - ofs = ofs * this.dims[i] + arg[i]; - } - else - for(var i = this.dims.length - 1; i >= 0; i--){ - if(arg[i] < 1 || arg[i] > this.dims[i]) caml_array_bound_error(); - ofs = ofs * this.dims[i] + (arg[i] - 1); - } - return ofs; - }; - Ml_Bigarray.prototype.get = - function(ofs){ - switch(this.kind){ - case 7: - var l = this.data[ofs * 2 + 0], h = this.data[ofs * 2 + 1]; - return caml_int64_create_lo_hi(l, h); - case 10: - case 11: - var r = this.data[ofs * 2 + 0], i = this.data[ofs * 2 + 1]; - return [254, r, i]; - default: return this.data[ofs]; - } - }; - Ml_Bigarray.prototype.set = - function(ofs, v){ - switch(this.kind){ - case 7: - this.data[ofs * 2 + 0] = caml_int64_lo32(v); - this.data[ofs * 2 + 1] = caml_int64_hi32(v); - break; - case 10: - case 11: - this.data[ofs * 2 + 0] = v[1]; this.data[ofs * 2 + 1] = v[2]; break; - default: this.data[ofs] = v; break; - } - return 0; - }; - Ml_Bigarray.prototype.fill = - function(v){ - switch(this.kind){ - case 7: - var a = caml_int64_lo32(v), b = caml_int64_hi32(v); - if(a == b) - this.data.fill(a); - else - for(var i = 0; i < this.data.length; i++) - this.data[i] = i % 2 == 0 ? a : b; - break; - case 10: - case 11: - var im = v[1], re = v[2]; - if(im == re) - this.data.fill(im); - else - for(var i = 0; i < this.data.length; i++) - this.data[i] = i % 2 == 0 ? im : re; - break; - default: this.data.fill(v); break; - } - }; - Ml_Bigarray.prototype.compare = - function(b, total){ - if(this.layout != b.layout || this.kind != b.kind){ - var k1 = this.kind | this.layout << 8, k2 = b.kind | b.layout << 8; - return k2 - k1; - } - if(this.dims.length != b.dims.length) - return b.dims.length - this.dims.length; - for(var i = 0; i < this.dims.length; i++) - if(this.dims[i] != b.dims[i]) return this.dims[i] < b.dims[i] ? - 1 : 1; - switch(this.kind){ - case 0: - case 1: - case 10: - case 11: - var x, y; - for(var i = 0; i < this.data.length; i++){ - x = this.data[i]; - y = b.data[i]; - if(x < y) return - 1; - if(x > y) return 1; - if(x != y){ - if(! total) return NaN; - if(x == x) return 1; - if(y == y) return - 1; - } - } - break; - case 7: - for(var i = 0; i < this.data.length; i += 2){ - if(this.data[i + 1] < b.data[i + 1]) return - 1; - if(this.data[i + 1] > b.data[i + 1]) return 1; - if(this.data[i] >>> 0 < b.data[i] >>> 0) return - 1; - if(this.data[i] >>> 0 > b.data[i] >>> 0) return 1; - } - break; - case 2: - case 3: - case 4: - case 5: - case 6: - case 8: - case 9: - case 12: - for(var i = 0; i < this.data.length; i++){ - if(this.data[i] < b.data[i]) return - 1; - if(this.data[i] > b.data[i]) return 1; - } - break; - } - return 0; - }; - function Ml_Bigarray_c_1_1(kind, layout, dims, buffer){ - this.kind = kind; - this.layout = layout; - this.dims = dims; - this.data = buffer; - } - Ml_Bigarray_c_1_1.prototype = new Ml_Bigarray(); - Ml_Bigarray_c_1_1.prototype.offset = - function(arg){ - if(typeof arg !== "number") - if(arg instanceof Array && arg.length == 1) - arg = arg[0]; - else - caml_invalid_argument("Ml_Bigarray_c_1_1.offset"); - if(arg < 0 || arg >= this.dims[0]) caml_array_bound_error(); - return arg; - }; - Ml_Bigarray_c_1_1.prototype.get = function(ofs){return this.data[ofs];}; - Ml_Bigarray_c_1_1.prototype.set = - function(ofs, v){this.data[ofs] = v; return 0;}; - Ml_Bigarray_c_1_1.prototype.fill = - function(v){this.data.fill(v); return 0;}; - function caml_ba_create_unsafe(kind, layout, dims, data){ - var size_per_element = caml_ba_get_size_per_element(kind); - if(caml_ba_get_size(dims) * size_per_element != data.length) - caml_invalid_argument("length doesn't match dims"); - if(layout == 0 && dims.length == 1 && size_per_element == 1) - return new Ml_Bigarray_c_1_1(kind, layout, dims, data); - return new Ml_Bigarray(kind, layout, dims, data); - } - function caml_failwith(msg){ - if(! caml_global_data.Failure) - caml_global_data.Failure = [248, caml_string_of_jsbytes("Failure"), - 3]; - caml_raise_with_string(caml_global_data.Failure, msg); - } - function caml_ba_deserialize(reader, sz, name){ - var num_dims = reader.read32s(); - if(num_dims < 0 || num_dims > 16) - caml_failwith("input_value: wrong number of bigarray dimensions"); - var - tag = reader.read32s(), - kind = tag & 0xff, - layout = tag >> 8 & 1, - dims = []; - if(name == "_bigarr02") - for(var i = 0; i < num_dims; i++){ - var size_dim = reader.read16u(); - if(size_dim == 0xffff){ - var size_dim_hi = reader.read32u(), size_dim_lo = reader.read32u(); - if(size_dim_hi != 0) - caml_failwith("input_value: bigarray dimension overflow in 32bit"); - size_dim = size_dim_lo; - } - dims.push(size_dim); - } - else - for(var i = 0; i < num_dims; i++) dims.push(reader.read32u()); - var - size = caml_ba_get_size(dims), - data = caml_ba_create_buffer(kind, size), - ba = caml_ba_create_unsafe(kind, layout, dims, data); - switch(kind){ - case 2: - for(var i = 0; i < size; i++) data[i] = reader.read8s(); break; - case 3: - case 12: - for(var i = 0; i < size; i++) data[i] = reader.read8u(); break; - case 4: - for(var i = 0; i < size; i++) data[i] = reader.read16s(); break; - case 5: - for(var i = 0; i < size; i++) data[i] = reader.read16u(); break; - case 6: - for(var i = 0; i < size; i++) data[i] = reader.read32s(); break; - case 8: - case 9: - var sixty = reader.read8u(); - if(sixty) - caml_failwith - ("input_value: cannot read bigarray with 64-bit OCaml ints"); - for(var i = 0; i < size; i++) data[i] = reader.read32s(); - break; - case 7: - var t = new Array(8); - for(var i = 0; i < size; i++){ - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - var int64 = caml_int64_of_bytes(t); - ba.set(i, int64); - } - break; - case 1: - var t = new Array(8); - for(var i = 0; i < size; i++){ - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - var f = caml_int64_float_of_bits(caml_int64_of_bytes(t)); - ba.set(i, f); - } - break; - case 0: - for(var i = 0; i < size; i++){ - var f = caml_int32_float_of_bits(reader.read32s()); - ba.set(i, f); - } - break; - case 10: - for(var i = 0; i < size; i++){ - var - re = caml_int32_float_of_bits(reader.read32s()), - im = caml_int32_float_of_bits(reader.read32s()); - ba.set(i, [254, re, im]); - } - break; - case 11: - var t = new Array(8); - for(var i = 0; i < size; i++){ - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - var re = caml_int64_float_of_bits(caml_int64_of_bytes(t)); - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - var im = caml_int64_float_of_bits(caml_int64_of_bytes(t)); - ba.set(i, [254, re, im]); - } - break; - } - sz[0] = (4 + num_dims) * 4; - return caml_ba_create_unsafe(kind, layout, dims, data); - } - function caml_ba_compare(a, b, total){return a.compare(b, total);} - function caml_mul(a, b){return Math.imul(a, b);} - function caml_hash_mix_int(h, d){ - d = caml_mul(d, 0xcc9e2d51 | 0); - d = d << 15 | d >>> 32 - 15; - d = caml_mul(d, 0x1b873593); - h ^= d; - h = h << 13 | h >>> 32 - 13; - return (h + (h << 2) | 0) + (0xe6546b64 | 0) | 0; - } - function caml_hash_mix_int64(h, v){ - h = caml_hash_mix_int(h, caml_int64_lo32(v)); - h = caml_hash_mix_int(h, caml_int64_hi32(v)); - return h; - } - function caml_hash_mix_float(h, v0){ - return caml_hash_mix_int64(h, caml_int64_bits_of_float(v0)); - } - function caml_ba_hash(ba){ - var num_elts = caml_ba_get_size(ba.dims), h = 0; - switch(ba.kind){ - case 2: - case 3: - case 12: - if(num_elts > 256) num_elts = 256; - var w = 0, i = 0; - for(i = 0; i + 4 <= ba.data.length; i += 4){ - w = - ba.data[i + 0] | ba.data[i + 1] << 8 | ba.data[i + 2] << 16 - | ba.data[i + 3] << 24; - h = caml_hash_mix_int(h, w); - } - w = 0; - switch(num_elts & 3){ - case 3: - w = ba.data[i + 2] << 16; - case 2: - w |= ba.data[i + 1] << 8; - case 1: - w |= ba.data[i + 0]; h = caml_hash_mix_int(h, w); - } - break; - case 4: - case 5: - if(num_elts > 128) num_elts = 128; - var w = 0, i = 0; - for(i = 0; i + 2 <= ba.data.length; i += 2){ - w = ba.data[i + 0] | ba.data[i + 1] << 16; - h = caml_hash_mix_int(h, w); - } - if((num_elts & 1) != 0) h = caml_hash_mix_int(h, ba.data[i]); - break; - case 6: - if(num_elts > 64) num_elts = 64; - for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); - break; - case 8: - case 9: - if(num_elts > 64) num_elts = 64; - for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); - break; - case 7: - if(num_elts > 32) num_elts = 32; - num_elts *= 2; - for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); - break; - case 10: - num_elts *= 2; - case 0: - if(num_elts > 64) num_elts = 64; - for(var i = 0; i < num_elts; i++) - h = caml_hash_mix_float(h, ba.data[i]); - break; - case 11: - num_elts *= 2; - case 1: - if(num_elts > 32) num_elts = 32; - for(var i = 0; i < num_elts; i++) - h = caml_hash_mix_float(h, ba.data[i]); - break; - } - return h; - } - function caml_int32_unmarshal(reader, size){size[0] = 4; return reader.read32s(); - } - function caml_nativeint_unmarshal(reader, size){ - switch(reader.read8u()){ - case 1: - size[0] = 4; return reader.read32s(); - case 2: - caml_failwith("input_value: native integer value too large"); - default: caml_failwith("input_value: ill-formed native integer"); - } - } - function caml_int64_unmarshal(reader, size){ - var t = new Array(8); - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - size[0] = 8; - return caml_int64_of_bytes(t); - } - function caml_int64_marshal(writer, v, sizes){ - var b = caml_int64_to_bytes(v); - for(var i = 0; i < 8; i++) writer.write(8, b[i]); - sizes[0] = 8; - sizes[1] = 8; - } - function caml_int64_compare(x, y, total){return x.compare(y);} - function caml_int64_hash(v){return v.lo32() ^ v.hi32();} - var - caml_custom_ops = - {"_j": - {deserialize: caml_int64_unmarshal, - serialize: caml_int64_marshal, - fixed_length: 8, - compare: caml_int64_compare, - hash: caml_int64_hash}, - "_i": {deserialize: caml_int32_unmarshal, fixed_length: 4}, - "_n": {deserialize: caml_nativeint_unmarshal, fixed_length: 4}, - "_bigarray": - {deserialize: - function(reader, sz){ - return caml_ba_deserialize(reader, sz, "_bigarray"); - }, - serialize: caml_ba_serialize, - compare: caml_ba_compare, - hash: caml_ba_hash}, - "_bigarr02": - {deserialize: - function(reader, sz){ - return caml_ba_deserialize(reader, sz, "_bigarr02"); - }, - serialize: caml_ba_serialize, - compare: caml_ba_compare, - hash: caml_ba_hash}}; - function caml_compare_val_get_custom(a){ - return caml_custom_ops[a.caml_custom] - && caml_custom_ops[a.caml_custom].compare; - } - function caml_compare_val_number_custom(num, custom, swap, total){ - var comp = caml_compare_val_get_custom(custom); - if(comp){ - var x = swap > 0 ? comp(custom, num, total) : comp(num, custom, total); - if(total && x != x) return swap; - if(+ x != + x) return + x; - if((x | 0) != 0) return x | 0; - } - return swap; - } - function caml_is_ml_string(s){ - return typeof s === "string" && ! /[^\x00-\xff]/.test(s); - } - function caml_is_ml_bytes(s){return s instanceof MlBytes;} - function caml_compare_val_tag(a){ - if(typeof a === "number") - return 1000; - else if(caml_is_ml_bytes(a)) - return 252; - else if(caml_is_ml_string(a)) - return 1252; - else if(a instanceof Array && a[0] === a[0] >>> 0 && a[0] <= 255){var tag = a[0] | 0; return tag == 254 ? 0 : tag;} - else if(a instanceof String) - return 12520; - else if(typeof a == "string") - return 12520; - else if(a instanceof Number) - return 1000; - else if(a && a.caml_custom) - return 1255; - else if(a && a.compare) - return 1256; - else if(typeof a == "function") - return 1247; - else if(typeof a == "symbol") return 1251; - return 1001; - } - function caml_int_compare(a, b){ - if(a < b) return - 1; - if(a == b) return 0; - return 1; - } - function caml_string_compare(s1, s2){ - return s1 < s2 ? - 1 : s1 > s2 ? 1 : 0; - } - function caml_bytes_compare(s1, s2){ - s1.t & 6 && caml_convert_string_to_bytes(s1); - s2.t & 6 && caml_convert_string_to_bytes(s2); - return s1.c < s2.c ? - 1 : s1.c > s2.c ? 1 : 0; - } - function caml_compare_val(a, b, total){ - var stack = []; - for(;;){ - if(! (total && a === b)){ - var tag_a = caml_compare_val_tag(a); - if(tag_a == 250){a = a[1]; continue;} - var tag_b = caml_compare_val_tag(b); - if(tag_b == 250){b = b[1]; continue;} - if(tag_a !== tag_b){ - if(tag_a == 1000){ - if(tag_b == 1255) - return caml_compare_val_number_custom(a, b, - 1, total); - return - 1; - } - if(tag_b == 1000){ - if(tag_a == 1255) - return caml_compare_val_number_custom(b, a, 1, total); - return 1; - } - return tag_a < tag_b ? - 1 : 1; - } - switch(tag_a){ - case 247: - caml_invalid_argument("compare: functional value"); break; - case 248: - var x = caml_int_compare(a[2], b[2]); if(x != 0) return x | 0; break; - case 249: - caml_invalid_argument("compare: functional value"); break; - case 250: - caml_invalid_argument("equal: got Forward_tag, should not happen"); - break; - case 251: - caml_invalid_argument("equal: abstract value"); break; - case 252: - if(a !== b){ - var x = caml_bytes_compare(a, b); - if(x != 0) return x | 0; - } - break; - case 253: - caml_invalid_argument("equal: got Double_tag, should not happen"); - break; - case 254: - caml_invalid_argument - ("equal: got Double_array_tag, should not happen"); - break; - case 255: - caml_invalid_argument("equal: got Custom_tag, should not happen"); - break; - case 1247: - caml_invalid_argument("compare: functional value"); break; - case 1255: - var comp = caml_compare_val_get_custom(a); - if(comp != caml_compare_val_get_custom(b)) - return a.caml_custom < b.caml_custom ? - 1 : 1; - if(! comp) caml_invalid_argument("compare: abstract value"); - var x = comp(a, b, total); - if(x != x) return total ? - 1 : x; - if(x !== (x | 0)) return - 1; - if(x != 0) return x | 0; - break; - case 1256: - var x = a.compare(b, total); - if(x != x) return total ? - 1 : x; - if(x !== (x | 0)) return - 1; - if(x != 0) return x | 0; - break; - case 1000: - a = + a; - b = + b; - if(a < b) return - 1; - if(a > b) return 1; - if(a != b){ - if(! total) return NaN; - if(a == a) return 1; - if(b == b) return - 1; - } - break; - case 1001: - if(a < b) return - 1; - if(a > b) return 1; - if(a != b){ - if(! total) return NaN; - if(a == a) return 1; - if(b == b) return - 1; - } - break; - case 1251: - if(a !== b){if(! total) return NaN; return 1;} break; - case 1252: - var a = caml_jsbytes_of_string(a), b = caml_jsbytes_of_string(b); - if(a !== b){if(a < b) return - 1; if(a > b) return 1;} - break; - case 12520: - var a = a.toString(), b = b.toString(); - if(a !== b){if(a < b) return - 1; if(a > b) return 1;} - break; - case 246: - case 254: - default: - if(caml_is_continuation_tag(tag_a)){ - caml_invalid_argument("compare: continuation value"); - break; - } - if(a.length != b.length) return a.length < b.length ? - 1 : 1; - if(a.length > 1) stack.push(a, b, 1); - break; - } - } - if(stack.length == 0) return 0; - var i = stack.pop(); - b = stack.pop(); - a = stack.pop(); - if(i + 1 < a.length) stack.push(a, b, i + 1); - a = a[i]; - b = b[i]; - } - } - function caml_compare(a, b){return caml_compare_val(a, b, true);} - function caml_convert_raw_backtrace(){return [0];} - function caml_create_bytes(len){ - if(len < 0) caml_invalid_argument("Bytes.create"); - return new MlBytes(len ? 2 : 9, "", len); - } - function caml_equal(x, y){return + (caml_compare_val(x, y, false) == 0);} - function caml_fill_bytes(s, i, l, c){ - if(l > 0) - if(i == 0 && (l >= s.l || s.t == 2 && l >= s.c.length)) - if(c == 0){ - s.c = ""; - s.t = 2; - } - else{ - s.c = caml_str_repeat(l, String.fromCharCode(c)); - s.t = l == s.l ? 0 : 2; - } - else{ - if(s.t != 4) caml_convert_bytes_to_array(s); - for(l += i; i < l; i++) s.c[i] = c; - } - return 0; - } - function caml_float_of_string(s){ - var res; - s = caml_jsbytes_of_string(s); - res = + s; - if(s.length > 0 && res === res) return res; - s = s.replace(/_/g, ""); - res = + s; - if(s.length > 0 && res === res || /^[+-]?nan$/i.test(s)) return res; - var m = /^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(s); - if(m){ - var - m3 = m[3].replace(/0+$/, ""), - mantissa = parseInt(m[1] + m[2] + m3, 16), - exponent = (m[5] | 0) - 4 * m3.length; - res = mantissa * Math.pow(2, exponent); - return res; - } - if(/^\+?inf(inity)?$/i.test(s)) return Infinity; - if(/^-inf(inity)?$/i.test(s)) return - Infinity; - caml_failwith("float_of_string"); - } - function caml_parse_format(fmt){ - fmt = caml_jsbytes_of_string(fmt); - var len = fmt.length; - if(len > 31) caml_invalid_argument("format_int: format too long"); - var - f = - {justify: "+", - signstyle: "-", - filler: " ", - alternate: false, - base: 0, - signedconv: false, - width: 0, - uppercase: false, - sign: 1, - prec: - 1, - conv: "f"}; - for(var i = 0; i < len; i++){ - var c = fmt.charAt(i); - switch(c){ - case "-": - f.justify = "-"; break; - case "+": - case " ": - f.signstyle = c; break; - case "0": - f.filler = "0"; break; - case "#": - f.alternate = true; break; - case "1": - case "2": - case "3": - case "4": - case "5": - case "6": - case "7": - case "8": - case "9": - f.width = 0; - while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.width = f.width * 10 + c; i++;} - i--; - break; - case ".": - f.prec = 0; - i++; - while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.prec = f.prec * 10 + c; i++;} - i--; - case "d": - case "i": - f.signedconv = true; - case "u": - f.base = 10; break; - case "x": - f.base = 16; break; - case "X": - f.base = 16; f.uppercase = true; break; - case "o": - f.base = 8; break; - case "e": - case "f": - case "g": - f.signedconv = true; f.conv = c; break; - case "E": - case "F": - case "G": - f.signedconv = true; - f.uppercase = true; - f.conv = c.toLowerCase(); - break; - } - } - return f; - } - function caml_finish_formatting(f, rawbuffer){ - if(f.uppercase) rawbuffer = rawbuffer.toUpperCase(); - var len = rawbuffer.length; - if(f.signedconv && (f.sign < 0 || f.signstyle != "-")) len++; - if(f.alternate){if(f.base == 8) len += 1; if(f.base == 16) len += 2;} - var buffer = ""; - if(f.justify == "+" && f.filler == " ") - for(var i = len; i < f.width; i++) buffer += " "; - if(f.signedconv) - if(f.sign < 0) - buffer += "-"; - else if(f.signstyle != "-") buffer += f.signstyle; - if(f.alternate && f.base == 8) buffer += "0"; - if(f.alternate && f.base == 16) buffer += f.uppercase ? "0X" : "0x"; - if(f.justify == "+" && f.filler == "0") - for(var i = len; i < f.width; i++) buffer += "0"; - buffer += rawbuffer; - if(f.justify == "-") for(var i = len; i < f.width; i++) buffer += " "; - return caml_string_of_jsbytes(buffer); - } - function caml_format_float(fmt, x){ - function toFixed(x, dp){ - if(Math.abs(x) < 1.0) - return x.toFixed(dp); - else{ - var e = parseInt(x.toString().split("+")[1]); - if(e > 20){ - e -= 20; - x /= Math.pow(10, e); - x += new Array(e + 1).join("0"); - if(dp > 0) x = x + "." + new Array(dp + 1).join("0"); - return x; - } - else - return x.toFixed(dp); - } - } - var s, f = caml_parse_format(fmt), prec = f.prec < 0 ? 6 : f.prec; - if(x < 0 || x == 0 && 1 / x == - Infinity){f.sign = - 1; x = - x;} - if(isNaN(x)){ - s = "nan"; - f.filler = " "; - } - else if(! isFinite(x)){ - s = "inf"; - f.filler = " "; - } - else - switch(f.conv){ - case "e": - var s = x.toExponential(prec), i = s.length; - if(s.charAt(i - 3) == "e") - s = s.slice(0, i - 1) + "0" + s.slice(i - 1); - break; - case "f": - s = toFixed(x, prec); break; - case "g": - prec = prec ? prec : 1; - s = x.toExponential(prec - 1); - var j = s.indexOf("e"), exp = + s.slice(j + 1); - if(exp < - 4 || x >= 1e21 || x.toFixed(0).length > prec){ - var i = j - 1; - while(s.charAt(i) == "0") i--; - if(s.charAt(i) == ".") i--; - s = s.slice(0, i + 1) + s.slice(j); - i = s.length; - if(s.charAt(i - 3) == "e") - s = s.slice(0, i - 1) + "0" + s.slice(i - 1); - break; - } - else{ - var p = prec; - if(exp < 0){ - p -= exp + 1; - s = x.toFixed(p); - } - else - while(s = x.toFixed(p), s.length > prec + 1) p--; - if(p){ - var i = s.length - 1; - while(s.charAt(i) == "0") i--; - if(s.charAt(i) == ".") i--; - s = s.slice(0, i + 1); - } - } - break; - } - return caml_finish_formatting(f, s); - } - function caml_format_int(fmt, i){ - if(caml_jsbytes_of_string(fmt) == "%d") - return caml_string_of_jsbytes("" + i); - var f = caml_parse_format(fmt); - if(i < 0) if(f.signedconv){f.sign = - 1; i = - i;} else i >>>= 0; - var s = i.toString(f.base); - if(f.prec >= 0){ - f.filler = " "; - var n = f.prec - s.length; - if(n > 0) s = caml_str_repeat(n, "0") + s; - } - return caml_finish_formatting(f, s); - } - var caml_oo_last_id = 0; - function caml_fresh_oo_id(){return caml_oo_last_id++;} - function caml_jsstring_of_string(s){ - if(jsoo_is_ascii(s)) return s; - return caml_utf16_of_utf8(s); - } - function fs_node_supported(){ - return typeof globalThis.process !== "undefined" - && typeof globalThis.process.versions !== "undefined" - && typeof globalThis.process.versions.node !== "undefined"; - } - function make_path_is_absolute(){ - function posix(path){ - if(path.charAt(0) === "/") return ["", path.substring(1)]; - return; - } - function win32(path){ - var - splitDeviceRe = - /^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/, - result = splitDeviceRe.exec(path), - device = result[1] || "", - isUnc = Boolean(device && device.charAt(1) !== ":"); - if(Boolean(result[2] || isUnc)){ - var root = result[1] || "", sep = result[2] || ""; - return [root, path.substring(root.length + sep.length)]; - } - return; - } - return fs_node_supported() && globalThis.process - && globalThis.process.platform - ? globalThis.process.platform === "win32" ? win32 : posix - : posix; - } - var path_is_absolute = make_path_is_absolute(); - function caml_trailing_slash(name){ - return name.slice(- 1) !== "/" ? name + "/" : name; - } - if(fs_node_supported() && globalThis.process && globalThis.process.cwd) - var caml_current_dir = globalThis.process.cwd().replace(/\\/g, "/"); - else - var caml_current_dir = "/static"; - caml_current_dir = caml_trailing_slash(caml_current_dir); - function caml_make_path(name){ - name = caml_jsstring_of_string(name); - if(! path_is_absolute(name)) name = caml_current_dir + name; - var - comp0 = path_is_absolute(name), - comp = comp0[1].split("/"), - ncomp = []; - for(var i = 0; i < comp.length; i++) - switch(comp[i]){ - case "..": - if(ncomp.length > 1) ncomp.pop(); break; - case ".": break; - case "": break; - default: ncomp.push(comp[i]); break; - } - ncomp.unshift(comp0[0]); - ncomp.orig = name; - return ncomp; - } - function caml_utf8_of_utf16(s){ - for(var b = "", t = b, c, d, i = 0, l = s.length; i < l; i++){ - c = s.charCodeAt(i); - if(c < 0x80){ - for(var j = i + 1; j < l && (c = s.charCodeAt(j)) < 0x80; j++) ; - if(j - i > 512){ - t.substr(0, 1); - b += t; - t = ""; - b += s.slice(i, j); - } - else - t += s.slice(i, j); - if(j == l) break; - i = j; - } - if(c < 0x800){ - t += String.fromCharCode(0xc0 | c >> 6); - t += String.fromCharCode(0x80 | c & 0x3f); - } - else if(c < 0xd800 || c >= 0xdfff) - t += - String.fromCharCode - (0xe0 | c >> 12, 0x80 | c >> 6 & 0x3f, 0x80 | c & 0x3f); - else if - (c >= 0xdbff || i + 1 == l || (d = s.charCodeAt(i + 1)) < 0xdc00 - || d > 0xdfff) - t += "\xef\xbf\xbd"; - else{ - i++; - c = (c << 10) + d - 0x35fdc00; - t += - String.fromCharCode - (0xf0 | c >> 18, - 0x80 | c >> 12 & 0x3f, - 0x80 | c >> 6 & 0x3f, - 0x80 | c & 0x3f); - } - if(t.length > 1024){t.substr(0, 1); b += t; t = "";} - } - return b + t; - } - function caml_string_of_jsstring(s){ - return jsoo_is_ascii(s) - ? caml_string_of_jsbytes(s) - : caml_string_of_jsbytes(caml_utf8_of_utf16(s)); - } - var - unix_error = - ["E2BIG", - "EACCES", - "EAGAIN", - "EBADF", - "EBUSY", - "ECHILD", - "EDEADLK", - "EDOM", - "EEXIST", - "EFAULT", - "EFBIG", - "EINTR", - "EINVAL", - "EIO", - "EISDIR", - "EMFILE", - "EMLINK", - "ENAMETOOLONG", - "ENFILE", - "ENODEV", - "ENOENT", - "ENOEXEC", - "ENOLCK", - "ENOMEM", - "ENOSPC", - "ENOSYS", - "ENOTDIR", - "ENOTEMPTY", - "ENOTTY", - "ENXIO", - "EPERM", - "EPIPE", - "ERANGE", - "EROFS", - "ESPIPE", - "ESRCH", - "EXDEV", - "EWOULDBLOCK", - "EINPROGRESS", - "EALREADY", - "ENOTSOCK", - "EDESTADDRREQ", - "EMSGSIZE", - "EPROTOTYPE", - "ENOPROTOOPT", - "EPROTONOSUPPORT", - "ESOCKTNOSUPPORT", - "EOPNOTSUPP", - "EPFNOSUPPORT", - "EAFNOSUPPORT", - "EADDRINUSE", - "EADDRNOTAVAIL", - "ENETDOWN", - "ENETUNREACH", - "ENETRESET", - "ECONNABORTED", - "ECONNRESET", - "ENOBUFS", - "EISCONN", - "ENOTCONN", - "ESHUTDOWN", - "ETOOMANYREFS", - "ETIMEDOUT", - "ECONNREFUSED", - "EHOSTDOWN", - "EHOSTUNREACH", - "ELOOP", - "EOVERFLOW"]; - function make_unix_err_args(code, syscall, path, errno){ - var variant = unix_error.indexOf(code); - if(variant < 0){if(errno == null) errno = - 9999; variant = [0, errno];} - var - args = - [variant, - caml_string_of_jsstring(syscall || ""), - caml_string_of_jsstring(path || "")]; - return args; - } - var caml_named_values = {}; - function caml_named_value(nm){return caml_named_values[nm];} - function caml_raise_with_args(tag, args){ - throw caml_maybe_attach_backtrace([0, tag].concat(args)); - } - function caml_bytes_of_array(a){ - if(! (a instanceof Uint8Array)) a = new Uint8Array(a); - return new MlBytes(4, a, a.length); - } - function caml_raise_sys_error(msg){ - caml_raise_with_string(caml_global_data.Sys_error, msg); - } - function caml_raise_no_such_file(name){ - caml_raise_sys_error(name + ": No such file or directory"); - } - function caml_uint8_array_of_bytes(s){ - if(s.t != 4) caml_convert_bytes_to_array(s); - return s.c; - } - function caml_ml_bytes_length(s){return s.l;} - function MlFile(){} - function MlFakeFile(content){this.data = content;} - MlFakeFile.prototype = new MlFile(); - MlFakeFile.prototype.constructor = MlFakeFile; - MlFakeFile.prototype.truncate = - function(len){ - var old = this.data; - this.data = caml_create_bytes(len | 0); - caml_blit_bytes(old, 0, this.data, 0, len); - }; - MlFakeFile.prototype.length = - function(){return caml_ml_bytes_length(this.data);}; - MlFakeFile.prototype.write = - function(offset, buf, pos, len){ - var clen = this.length(); - if(offset + len >= clen){ - var new_str = caml_create_bytes(offset + len), old_data = this.data; - this.data = new_str; - caml_blit_bytes(old_data, 0, this.data, 0, clen); - } - caml_blit_bytes(caml_bytes_of_array(buf), pos, this.data, offset, len); - return 0; - }; - MlFakeFile.prototype.read = - function(offset, buf, pos, len){ - var clen = this.length(); - if(offset + len >= clen) len = clen - offset; - if(len){ - var data = caml_create_bytes(len | 0); - caml_blit_bytes(this.data, offset, data, 0, len); - buf.set(caml_uint8_array_of_bytes(data), pos); - } - return len; - }; - function MlFakeFd(name, file, flags){ - this.file = file; - this.name = name; - this.flags = flags; - } - MlFakeFd.prototype.err_closed = - function(){ - caml_raise_sys_error(this.name + ": file descriptor already closed"); - }; - MlFakeFd.prototype.length = - function(){if(this.file) return this.file.length(); this.err_closed();}; - MlFakeFd.prototype.write = - function(offset, buf, pos, len){ - if(this.file) return this.file.write(offset, buf, pos, len); - this.err_closed(); - }; - MlFakeFd.prototype.read = - function(offset, buf, pos, len){ - if(this.file) return this.file.read(offset, buf, pos, len); - this.err_closed(); - }; - MlFakeFd.prototype.close = function(){this.file = undefined;}; - function MlFakeDevice(root, f){ - this.content = {}; - this.root = root; - this.lookupFun = f; - } - MlFakeDevice.prototype.nm = function(name){return this.root + name;}; - MlFakeDevice.prototype.create_dir_if_needed = - function(name){ - var comp = name.split("/"), res = ""; - for(var i = 0; i < comp.length - 1; i++){ - res += comp[i] + "/"; - if(this.content[res]) continue; - this.content[res] = Symbol("directory"); - } - }; - MlFakeDevice.prototype.slash = - function(name){return /\/$/.test(name) ? name : name + "/";}; - MlFakeDevice.prototype.lookup = - function(name){ - if(! this.content[name] && this.lookupFun){ - var - res = - this.lookupFun - (caml_string_of_jsbytes(this.root), caml_string_of_jsbytes(name)); - if(res !== 0){ - this.create_dir_if_needed(name); - this.content[name] = new MlFakeFile(caml_bytes_of_string(res[1])); - } - } - }; - MlFakeDevice.prototype.exists = - function(name){ - if(name == "") return 1; - var name_slash = this.slash(name); - if(this.content[name_slash]) return 1; - this.lookup(name); - return this.content[name] ? 1 : 0; - }; - MlFakeDevice.prototype.isFile = - function(name){return this.exists(name) && ! this.is_dir(name) ? 1 : 0;}; - MlFakeDevice.prototype.mkdir = - function(name, mode, raise_unix){ - var unix_error = raise_unix && caml_named_value("Unix.Unix_error"); - if(this.exists(name)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("EEXIST", "mkdir", this.nm(name))); - else - caml_raise_sys_error(name + ": File exists"); - var parent = /^(.*)\/[^/]+/.exec(name); - parent = parent && parent[1] || ""; - if(! this.exists(parent)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOENT", "mkdir", this.nm(parent))); - else - caml_raise_sys_error(parent + ": No such file or directory"); - if(! this.is_dir(parent)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOTDIR", "mkdir", this.nm(parent))); - else - caml_raise_sys_error(parent + ": Not a directory"); - this.create_dir_if_needed(this.slash(name)); - }; - MlFakeDevice.prototype.rmdir = - function(name, raise_unix){ - var - unix_error = raise_unix && caml_named_value("Unix.Unix_error"), - name_slash = name == "" ? "" : this.slash(name), - r = new RegExp("^" + name_slash + "([^/]+)"); - if(! this.exists(name)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOENT", "rmdir", this.nm(name))); - else - caml_raise_sys_error(name + ": No such file or directory"); - if(! this.is_dir(name)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOTDIR", "rmdir", this.nm(name))); - else - caml_raise_sys_error(name + ": Not a directory"); - for(var n in this.content) - if(n.match(r)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOTEMPTY", "rmdir", this.nm(name))); - else - caml_raise_sys_error(this.nm(name) + ": Directory not empty"); - delete this.content[name_slash]; - }; - MlFakeDevice.prototype.readdir = - function(name){ - var name_slash = name == "" ? "" : this.slash(name); - if(! this.exists(name)) - caml_raise_sys_error(name + ": No such file or directory"); - if(! this.is_dir(name)) caml_raise_sys_error(name + ": Not a directory"); - var r = new RegExp("^" + name_slash + "([^/]+)"), seen = {}, a = []; - for(var n in this.content){ - var m = n.match(r); - if(m && ! seen[m[1]]){seen[m[1]] = true; a.push(m[1]);} - } - return a; - }; - MlFakeDevice.prototype.opendir = - function(name, raise_unix){ - var - unix_error = raise_unix && caml_named_value("Unix.Unix_error"), - a = this.readdir(name), - c = false, - i = 0; - return {readSync: - function(){ - if(c) - if(unix_error) - caml_raise_with_args - (unix_error, - make_unix_err_args("EBADF", "closedir", this.nm(name))); - else - caml_raise_sys_error(name + ": closedir failed"); - if(i == a.length) return null; - var entry = a[i]; - i++; - return {name: entry}; - }, - closeSync: - function(){ - if(c) - if(unix_error) - caml_raise_with_args - (unix_error, - make_unix_err_args("EBADF", "closedir", this.nm(name))); - else - caml_raise_sys_error(name + ": closedir failed"); - c = true; - a = []; - }}; - }; - MlFakeDevice.prototype.is_dir = - function(name){ - if(name == "") return true; - var name_slash = this.slash(name); - return this.content[name_slash] ? 1 : 0; - }; - MlFakeDevice.prototype.unlink = - function(name){ - var ok = this.content[name] ? true : false; - delete this.content[name]; - return ok; - }; - MlFakeDevice.prototype.open = - function(name, f){ - var file; - if(f.rdonly && f.wronly) - caml_raise_sys_error - (this.nm(name) - + " : flags Open_rdonly and Open_wronly are not compatible"); - if(f.text && f.binary) - caml_raise_sys_error - (this.nm(name) - + " : flags Open_text and Open_binary are not compatible"); - this.lookup(name); - if(this.content[name]){ - if(this.is_dir(name)) - caml_raise_sys_error(this.nm(name) + " : is a directory"); - if(f.create && f.excl) - caml_raise_sys_error(this.nm(name) + " : file already exists"); - file = this.content[name]; - if(f.truncate) file.truncate(); - } - else if(f.create){ - this.create_dir_if_needed(name); - this.content[name] = new MlFakeFile(caml_create_bytes(0)); - file = this.content[name]; - } - else - caml_raise_no_such_file(this.nm(name)); - return new MlFakeFd(this.nm(name), file, f); - }; - MlFakeDevice.prototype.open = - function(name, f){ - var file; - if(f.rdonly && f.wronly) - caml_raise_sys_error - (this.nm(name) - + " : flags Open_rdonly and Open_wronly are not compatible"); - if(f.text && f.binary) - caml_raise_sys_error - (this.nm(name) - + " : flags Open_text and Open_binary are not compatible"); - this.lookup(name); - if(this.content[name]){ - if(this.is_dir(name)) - caml_raise_sys_error(this.nm(name) + " : is a directory"); - if(f.create && f.excl) - caml_raise_sys_error(this.nm(name) + " : file already exists"); - file = this.content[name]; - if(f.truncate) file.truncate(); - } - else if(f.create){ - this.create_dir_if_needed(name); - this.content[name] = new MlFakeFile(caml_create_bytes(0)); - file = this.content[name]; - } - else - caml_raise_no_such_file(this.nm(name)); - return new MlFakeFd(this.nm(name), file, f); - }; - MlFakeDevice.prototype.register = - function(name, content){ - var file; - if(this.content[name]) - caml_raise_sys_error(this.nm(name) + " : file already exists"); - if(caml_is_ml_bytes(content)) file = new MlFakeFile(content); - if(caml_is_ml_string(content)) - file = new MlFakeFile(caml_bytes_of_string(content)); - else if(content instanceof Array) - file = new MlFakeFile(caml_bytes_of_array(content)); - else if(typeof content === "string") - file = new MlFakeFile(caml_bytes_of_jsbytes(content)); - else if(content.toString){ - var - bytes = - caml_bytes_of_string(caml_string_of_jsstring(content.toString())); - file = new MlFakeFile(bytes); - } - if(file){ - this.create_dir_if_needed(name); - this.content[name] = file; - } - else - caml_raise_sys_error - (this.nm(name) + " : registering file with invalid content type"); - }; - MlFakeDevice.prototype.constructor = MlFakeDevice; - function caml_ml_string_length(s){return s.length;} - function caml_string_unsafe_get(s, i){return s.charCodeAt(i);} - function caml_uint8_array_of_string(s){ - var l = caml_ml_string_length(s), a = new Uint8Array(l), i = 0; - for(; i < l; i++) a[i] = caml_string_unsafe_get(s, i); - return a; - } - function MlNodeFd(fd, flags){ - this.fs = require("fs"); - this.fd = fd; - this.flags = flags; - } - MlNodeFd.prototype = new MlFile(); - MlNodeFd.prototype.constructor = MlNodeFd; - MlNodeFd.prototype.truncate = - function(len){ - try{this.fs.ftruncateSync(this.fd, len | 0);} - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeFd.prototype.length = - function(){ - try{return this.fs.fstatSync(this.fd).size;} - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeFd.prototype.write = - function(offset, buf, buf_offset, len){ - try{ - if(this.flags.isCharacterDevice) - this.fs.writeSync(this.fd, buf, buf_offset, len); - else - this.fs.writeSync(this.fd, buf, buf_offset, len, offset); - } - catch(err){caml_raise_sys_error(err.toString());} - return 0; - }; - MlNodeFd.prototype.read = - function(offset, a, buf_offset, len){ - try{ - if(this.flags.isCharacterDevice) - var read = this.fs.readSync(this.fd, a, buf_offset, len); - else - var read = this.fs.readSync(this.fd, a, buf_offset, len, offset); - return read; - } - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeFd.prototype.close = - function(){ - try{this.fs.closeSync(this.fd); return 0;} - catch(err){caml_raise_sys_error(err.toString());} - }; - function MlNodeDevice(root){this.fs = require("fs"); this.root = root;} - MlNodeDevice.prototype.nm = function(name){return this.root + name;}; - MlNodeDevice.prototype.exists = - function(name){ - try{return this.fs.existsSync(this.nm(name)) ? 1 : 0;} - catch(err){return 0;} - }; - MlNodeDevice.prototype.isFile = - function(name){ - try{return this.fs.statSync(this.nm(name)).isFile() ? 1 : 0;} - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeDevice.prototype.mkdir = - function(name, mode, raise_unix){ - try{this.fs.mkdirSync(this.nm(name), {mode: mode}); return 0;} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.rmdir = - function(name, raise_unix){ - try{this.fs.rmdirSync(this.nm(name)); return 0;} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.readdir = - function(name, raise_unix){ - try{return this.fs.readdirSync(this.nm(name));} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.is_dir = - function(name){ - try{return this.fs.statSync(this.nm(name)).isDirectory() ? 1 : 0;} - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeDevice.prototype.unlink = - function(name, raise_unix){ - try{ - var b = this.fs.existsSync(this.nm(name)) ? 1 : 0; - this.fs.unlinkSync(this.nm(name)); - return b; - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.open = - function(name, f, raise_unix){ - var consts = require("constants"), res = 0; - for(var key in f) - switch(key){ - case "rdonly": - res |= consts.O_RDONLY; break; - case "wronly": - res |= consts.O_WRONLY; break; - case "append": - res |= consts.O_WRONLY | consts.O_APPEND; break; - case "create": - res |= consts.O_CREAT; break; - case "truncate": - res |= consts.O_TRUNC; break; - case "excl": - res |= consts.O_EXCL; break; - case "binary": - res |= consts.O_BINARY; break; - case "text": - res |= consts.O_TEXT; break; - case "nonblock": - res |= consts.O_NONBLOCK; break; - } - try{ - var - fd = this.fs.openSync(this.nm(name), res), - isCharacterDevice = - this.fs.lstatSync(this.nm(name)).isCharacterDevice(); - f.isCharacterDevice = isCharacterDevice; - return new MlNodeFd(fd, f); - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.rename = - function(o, n, raise_unix){ - try{this.fs.renameSync(this.nm(o), this.nm(n));} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.stat = - function(name, raise_unix){ - try{ - var js_stats = this.fs.statSync(this.nm(name)); - return this.stats_from_js(js_stats); - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.lstat = - function(name, raise_unix){ - try{ - var js_stats = this.fs.lstatSync(this.nm(name)); - return this.stats_from_js(js_stats); - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.symlink = - function(to_dir, target, path, raise_unix){ - try{ - this.fs.symlinkSync - (this.nm(target), this.nm(path), to_dir ? "dir" : "file"); - return 0; - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.readlink = - function(name, raise_unix){ - try{ - var link = this.fs.readlinkSync(this.nm(name), "utf8"); - return caml_string_of_jsstring(link); - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.opendir = - function(name, raise_unix){ - try{return this.fs.opendirSync(this.nm(name));} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.raise_nodejs_error = - function(err, raise_unix){ - var unix_error = caml_named_value("Unix.Unix_error"); - if(raise_unix && unix_error){ - var - args = make_unix_err_args(err.code, err.syscall, err.path, err.errno); - caml_raise_with_args(unix_error, args); - } - else - caml_raise_sys_error(err.toString()); - }; - MlNodeDevice.prototype.stats_from_js = - function(js_stats){ - var file_kind; - if(js_stats.isFile()) - file_kind = 0; - else if(js_stats.isDirectory()) - file_kind = 1; - else if(js_stats.isCharacterDevice()) - file_kind = 2; - else if(js_stats.isBlockDevice()) - file_kind = 3; - else if(js_stats.isSymbolicLink()) - file_kind = 4; - else if(js_stats.isFIFO()) - file_kind = 5; - else if(js_stats.isSocket()) file_kind = 6; - return [0, - js_stats.dev, - js_stats.ino, - file_kind, - js_stats.mode, - js_stats.nlink, - js_stats.uid, - js_stats.gid, - js_stats.rdev, - js_stats.size, - js_stats.atimeMs, - js_stats.mtimeMs, - js_stats.ctimeMs]; - }; - MlNodeDevice.prototype.constructor = MlNodeDevice; - function caml_get_root(path){ - var x = path_is_absolute(path); - if(! x) return; - return x[0] + "/"; - } - var - caml_root = - caml_get_root(caml_current_dir) - || caml_failwith("unable to compute caml_root"), - jsoo_mount_point = []; - if(fs_node_supported()) - jsoo_mount_point.push - ({path: caml_root, device: new MlNodeDevice(caml_root)}); - else - jsoo_mount_point.push - ({path: caml_root, device: new MlFakeDevice(caml_root)}); - jsoo_mount_point.push - ({path: "/static/", device: new MlFakeDevice("/static/")}); - function resolve_fs_device(name){ - var - path = caml_make_path(name), - name = path.join("/"), - name_slash = caml_trailing_slash(name), - res; - for(var i = 0; i < jsoo_mount_point.length; i++){ - var m = jsoo_mount_point[i]; - if - (name_slash.search(m.path) == 0 - && (! res || res.path.length < m.path.length)) - res = - {path: m.path, - device: m.device, - rest: name.substring(m.path.length, name.length)}; - } - if(! res && fs_node_supported()){ - var root = caml_get_root(name); - if(root && root.match(/^[a-zA-Z]:\/$/)){ - var m = {path: root, device: new MlNodeDevice(root)}; - jsoo_mount_point.push(m); - res = - {path: m.path, - device: m.device, - rest: name.substring(m.path.length, name.length)}; - } - } - if(res) return res; - caml_raise_sys_error("no device found for " + name_slash); - } - function caml_create_file(name, content){ - var root = resolve_fs_device(name); - if(! root.device.register) caml_failwith("cannot register file"); - root.device.register(root.rest, content); - return 0; - } - function jsoo_create_file(name, content){ - var - name = caml_string_of_jsbytes(name), - content = caml_string_of_jsbytes(content); - return caml_create_file(name, content); - } - function caml_fs_init(){ - var tmp = globalThis.caml_fs_tmp; - if(tmp) - for(var i = 0; i < tmp.length; i++) - jsoo_create_file(tmp[i].name, tmp[i].content); - globalThis.jsoo_create_file = jsoo_create_file; - globalThis.caml_fs_tmp = []; - return 0; - } - function caml_get_exception_raw_backtrace(){return [0];} - function caml_greaterequal(x, y){ - return + (caml_compare_val(x, y, false) >= 0); - } - function caml_hash_mix_jsbytes(h, s){ - var len = s.length, i, w; - for(i = 0; i + 4 <= len; i += 4){ - w = - s.charCodeAt(i) | s.charCodeAt(i + 1) << 8 | s.charCodeAt(i + 2) << 16 - | s.charCodeAt(i + 3) << 24; - h = caml_hash_mix_int(h, w); - } - w = 0; - switch(len & 3){ - case 3: - w = s.charCodeAt(i + 2) << 16; - case 2: - w |= s.charCodeAt(i + 1) << 8; - case 1: - w |= s.charCodeAt(i); h = caml_hash_mix_int(h, w); - } - h ^= len; - return h; - } - function caml_hash_mix_string(h, v){ - return caml_hash_mix_jsbytes(h, caml_jsbytes_of_string(v)); - } - function caml_hash_mix_bytes_arr(h, s){ - var len = s.length, i, w; - for(i = 0; i + 4 <= len; i += 4){ - w = s[i] | s[i + 1] << 8 | s[i + 2] << 16 | s[i + 3] << 24; - h = caml_hash_mix_int(h, w); - } - w = 0; - switch(len & 3){ - case 3: - w = s[i + 2] << 16; - case 2: - w |= s[i + 1] << 8; - case 1: - w |= s[i]; h = caml_hash_mix_int(h, w); - } - h ^= len; - return h; - } - function caml_ml_bytes_content(s){ - switch(s.t & 6){ - default: caml_convert_string_to_bytes(s); - case 0: - return s.c; - case 4: - return s.c; - } - } - function caml_hash_mix_bytes(h, v){ - var content = caml_ml_bytes_content(v); - return typeof content === "string" - ? caml_hash_mix_jsbytes(h, content) - : caml_hash_mix_bytes_arr(h, content); - } - function caml_hash_mix_final(h){ - h ^= h >>> 16; - h = caml_mul(h, 0x85ebca6b | 0); - h ^= h >>> 13; - h = caml_mul(h, 0xc2b2ae35 | 0); - h ^= h >>> 16; - return h; - } - function caml_hash(count, limit, seed, obj){ - var queue, rd, wr, sz, num, h, v, i, len; - sz = limit; - if(sz < 0 || sz > 256) sz = 256; - num = count; - h = seed; - queue = [obj]; - rd = 0; - wr = 1; - while(rd < wr && num > 0){ - v = queue[rd++]; - if(v && v.caml_custom){ - if - (caml_custom_ops[v.caml_custom] && caml_custom_ops[v.caml_custom].hash){ - var hh = caml_custom_ops[v.caml_custom].hash(v); - h = caml_hash_mix_int(h, hh); - num--; - } - } - else if(v instanceof Array && v[0] === (v[0] | 0)) - switch(v[0]){ - case 248: - h = caml_hash_mix_int(h, v[2]); num--; break; - case 250: - queue[--rd] = v[1]; break; - default: - if(caml_is_continuation_tag(v[0])) break; - var tag = v.length - 1 << 10 | v[0]; - h = caml_hash_mix_int(h, tag); - for(i = 1, len = v.length; i < len; i++){if(wr >= sz) break; queue[wr++] = v[i]; - } - break; - } - else if(caml_is_ml_bytes(v)){ - h = caml_hash_mix_bytes(h, v); - num--; - } - else if(caml_is_ml_string(v)){ - h = caml_hash_mix_string(h, v); - num--; - } - else if(typeof v === "string"){ - h = caml_hash_mix_jsbytes(h, v); - num--; - } - else if(v === (v | 0)){ - h = caml_hash_mix_int(h, v + v + 1); - num--; - } - else if(typeof v === "number"){h = caml_hash_mix_float(h, v); num--;} - } - h = caml_hash_mix_final(h); - return h & 0x3FFFFFFF; - } - function caml_hexstring_of_float(x, prec, style){ - if(! isFinite(x)){ - if(isNaN(x)) return caml_string_of_jsstring("nan"); - return caml_string_of_jsstring(x > 0 ? "infinity" : "-infinity"); - } - var sign = x == 0 && 1 / x == - Infinity ? 1 : x >= 0 ? 0 : 1; - if(sign) x = - x; - var exp = 0; - if(x == 0) - ; - else if(x < 1) - while(x < 1 && exp > - 1022){x *= 2; exp--;} - else - while(x >= 2){x /= 2; exp++;} - var exp_sign = exp < 0 ? "" : "+", sign_str = ""; - if(sign) - sign_str = "-"; - else - switch(style){ - case 43: - sign_str = "+"; break; - case 32: - sign_str = " "; break; - default: break; - } - if(prec >= 0 && prec < 13){ - var cst = Math.pow(2, prec * 4); - x = Math.round(x * cst) / cst; - } - var x_str = x.toString(16); - if(prec >= 0){ - var idx = x_str.indexOf("."); - if(idx < 0) - x_str += "." + caml_str_repeat(prec, "0"); - else{ - var size = idx + 1 + prec; - if(x_str.length < size) - x_str += caml_str_repeat(size - x_str.length, "0"); - else - x_str = x_str.substr(0, size); - } - } - return caml_string_of_jsstring - (sign_str + "0x" + x_str + "p" + exp_sign + exp.toString(10)); - } - function caml_int64_is_zero(x){return + x.isZero();} - function caml_int64_of_int32(x){ - return new MlInt64(x & 0xffffff, x >> 24 & 0xffffff, x >> 31 & 0xffff); - } - function caml_int64_to_int32(x){return x.toInt();} - function caml_int64_is_negative(x){return + x.isNeg();} - function caml_int64_neg(x){return x.neg();} - function caml_int64_format(fmt, x){ - var f = caml_parse_format(fmt); - if(f.signedconv && caml_int64_is_negative(x)){f.sign = - 1; x = caml_int64_neg(x);} - var - buffer = "", - wbase = caml_int64_of_int32(f.base), - cvtbl = "0123456789abcdef"; - do{ - var p = x.udivmod(wbase); - x = p.quotient; - buffer = cvtbl.charAt(caml_int64_to_int32(p.modulus)) + buffer; - } - while - (! caml_int64_is_zero(x)); - if(f.prec >= 0){ - f.filler = " "; - var n = f.prec - buffer.length; - if(n > 0) buffer = caml_str_repeat(n, "0") + buffer; - } - return caml_finish_formatting(f, buffer); - } - function caml_js_from_array(a){return a.slice(1);} - function caml_js_meth_call(o, f, args){ - return o[caml_jsstring_of_string(f)].apply(o, caml_js_from_array(args)); - } - function caml_js_new(c, a){ - switch(a.length){ - case 1: - return new c; - case 2: - return new c(a[1]); - case 3: - return new c(a[1], a[2]); - case 4: - return new c(a[1], a[2], a[3]); - case 5: - return new c(a[1], a[2], a[3], a[4]); - case 6: - return new c(a[1], a[2], a[3], a[4], a[5]); - case 7: - return new c(a[1], a[2], a[3], a[4], a[5], a[6]); - case 8: - return new c(a[1], a[2], a[3], a[4], a[5], a[6], a[7]); - } - function F(){return c.apply(this, caml_js_from_array(a));} - F.prototype = c.prototype; - return new F; - } - function caml_js_object(a){ - var o = {}; - for(var i = 1; i < a.length; i++){ - var p = a[i]; - o[caml_jsstring_of_string(p[1])] = p[2]; - } - return o; - } - function caml_js_to_array(a){ - var len = a.length, b = new Array(len + 1); - b[0] = 0; - for(var i = 0; i < len; i++) b[i + 1] = a[i]; - return b; - } - var caml_callback = caml_call_gen; - function caml_js_wrap_callback_strict(arity, f){ - return function(){ - var - n = arguments.length, - args = new Array(arity), - len = Math.min(arguments.length, arity); - for(var i = 0; i < len; i++) args[i] = arguments[i]; - return caml_callback(f, args);}; - } - function caml_lessthan(x, y){return + (caml_compare_val(x, y, false) < 0);} - function caml_lex_array(s){ - s = caml_jsbytes_of_string(s); - var l = s.length / 2, a = new Array(l); - for(var i = 0; i < l; i++) - a[i] = (s.charCodeAt(2 * i) | s.charCodeAt(2 * i + 1) << 8) << 16 >> 16; - return a; - } - function caml_lex_engine(tbl, start_state, lexbuf){ - var - lex_buffer = 2, - lex_buffer_len = 3, - lex_start_pos = 5, - lex_curr_pos = 6, - lex_last_pos = 7, - lex_last_action = 8, - lex_eof_reached = 9, - lex_base = 1, - lex_backtrk = 2, - lex_default = 3, - lex_trans = 4, - lex_check = 5; - if(! tbl.lex_default){ - tbl.lex_base = caml_lex_array(tbl[lex_base]); - tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]); - tbl.lex_check = caml_lex_array(tbl[lex_check]); - tbl.lex_trans = caml_lex_array(tbl[lex_trans]); - tbl.lex_default = caml_lex_array(tbl[lex_default]); - } - var - c, - state = start_state, - buffer = caml_uint8_array_of_bytes(lexbuf[lex_buffer]); - if(state >= 0){ - lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos]; - lexbuf[lex_last_action] = - 1; - } - else - state = - state - 1; - for(;;){ - var base = tbl.lex_base[state]; - if(base < 0) return - base - 1; - var backtrk = tbl.lex_backtrk[state]; - if(backtrk >= 0){ - lexbuf[lex_last_pos] = lexbuf[lex_curr_pos]; - lexbuf[lex_last_action] = backtrk; - } - if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len]) - if(lexbuf[lex_eof_reached] == 0) return - state - 1; else c = 256; - else{c = buffer[lexbuf[lex_curr_pos]]; lexbuf[lex_curr_pos]++;} - if(tbl.lex_check[base + c] == state) - state = tbl.lex_trans[base + c]; - else - state = tbl.lex_default[state]; - if(state < 0){ - lexbuf[lex_curr_pos] = lexbuf[lex_last_pos]; - if(lexbuf[lex_last_action] == - 1) - caml_failwith("lexing: empty token"); - else - return lexbuf[lex_last_action]; - } - else if(c == 256) lexbuf[lex_eof_reached] = 0; - } - } - function caml_list_of_js_array(a){ - var l = 0; - for(var i = a.length - 1; i >= 0; i--){var e = a[i]; l = [0, e, l];} - return l; - } - function caml_list_to_js_array(l){ - var a = []; - for(; l !== 0; l = l[2]) a.push(l[1]); - return a; - } - function caml_make_vect(len, init){ - if(len < 0) caml_array_bound_error(); - var len = len + 1 | 0, b = new Array(len); - b[0] = 0; - for(var i = 1; i < len; i++) b[i] = init; - return b; - } - function caml_MD5Init(){ - var - buffer = new ArrayBuffer(64), - b32 = new Uint32Array(buffer), - b8 = new Uint8Array(buffer); - return {len: 0, - w: - new Uint32Array([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476]), - b32: b32, - b8: b8}; - } - var - caml_MD5Transform = - function(){ - function add(x, y){return x + y | 0;} - function xx(q, a, b, x, s, t){ - a = add(add(a, q), add(x, t)); - return add(a << s | a >>> 32 - s, b); - } - function ff(a, b, c, d, x, s, t){ - return xx(b & c | ~ b & d, a, b, x, s, t); - } - function gg(a, b, c, d, x, s, t){ - return xx(b & d | c & ~ d, a, b, x, s, t); - } - function hh(a, b, c, d, x, s, t){return xx(b ^ c ^ d, a, b, x, s, t);} - function ii(a, b, c, d, x, s, t){ - return xx(c ^ (b | ~ d), a, b, x, s, t); - } - return function(w, buffer){ - var a = w[0], b = w[1], c = w[2], d = w[3]; - a = ff(a, b, c, d, buffer[0], 7, 0xD76AA478); - d = ff(d, a, b, c, buffer[1], 12, 0xE8C7B756); - c = ff(c, d, a, b, buffer[2], 17, 0x242070DB); - b = ff(b, c, d, a, buffer[3], 22, 0xC1BDCEEE); - a = ff(a, b, c, d, buffer[4], 7, 0xF57C0FAF); - d = ff(d, a, b, c, buffer[5], 12, 0x4787C62A); - c = ff(c, d, a, b, buffer[6], 17, 0xA8304613); - b = ff(b, c, d, a, buffer[7], 22, 0xFD469501); - a = ff(a, b, c, d, buffer[8], 7, 0x698098D8); - d = ff(d, a, b, c, buffer[9], 12, 0x8B44F7AF); - c = ff(c, d, a, b, buffer[10], 17, 0xFFFF5BB1); - b = ff(b, c, d, a, buffer[11], 22, 0x895CD7BE); - a = ff(a, b, c, d, buffer[12], 7, 0x6B901122); - d = ff(d, a, b, c, buffer[13], 12, 0xFD987193); - c = ff(c, d, a, b, buffer[14], 17, 0xA679438E); - b = ff(b, c, d, a, buffer[15], 22, 0x49B40821); - a = gg(a, b, c, d, buffer[1], 5, 0xF61E2562); - d = gg(d, a, b, c, buffer[6], 9, 0xC040B340); - c = gg(c, d, a, b, buffer[11], 14, 0x265E5A51); - b = gg(b, c, d, a, buffer[0], 20, 0xE9B6C7AA); - a = gg(a, b, c, d, buffer[5], 5, 0xD62F105D); - d = gg(d, a, b, c, buffer[10], 9, 0x02441453); - c = gg(c, d, a, b, buffer[15], 14, 0xD8A1E681); - b = gg(b, c, d, a, buffer[4], 20, 0xE7D3FBC8); - a = gg(a, b, c, d, buffer[9], 5, 0x21E1CDE6); - d = gg(d, a, b, c, buffer[14], 9, 0xC33707D6); - c = gg(c, d, a, b, buffer[3], 14, 0xF4D50D87); - b = gg(b, c, d, a, buffer[8], 20, 0x455A14ED); - a = gg(a, b, c, d, buffer[13], 5, 0xA9E3E905); - d = gg(d, a, b, c, buffer[2], 9, 0xFCEFA3F8); - c = gg(c, d, a, b, buffer[7], 14, 0x676F02D9); - b = gg(b, c, d, a, buffer[12], 20, 0x8D2A4C8A); - a = hh(a, b, c, d, buffer[5], 4, 0xFFFA3942); - d = hh(d, a, b, c, buffer[8], 11, 0x8771F681); - c = hh(c, d, a, b, buffer[11], 16, 0x6D9D6122); - b = hh(b, c, d, a, buffer[14], 23, 0xFDE5380C); - a = hh(a, b, c, d, buffer[1], 4, 0xA4BEEA44); - d = hh(d, a, b, c, buffer[4], 11, 0x4BDECFA9); - c = hh(c, d, a, b, buffer[7], 16, 0xF6BB4B60); - b = hh(b, c, d, a, buffer[10], 23, 0xBEBFBC70); - a = hh(a, b, c, d, buffer[13], 4, 0x289B7EC6); - d = hh(d, a, b, c, buffer[0], 11, 0xEAA127FA); - c = hh(c, d, a, b, buffer[3], 16, 0xD4EF3085); - b = hh(b, c, d, a, buffer[6], 23, 0x04881D05); - a = hh(a, b, c, d, buffer[9], 4, 0xD9D4D039); - d = hh(d, a, b, c, buffer[12], 11, 0xE6DB99E5); - c = hh(c, d, a, b, buffer[15], 16, 0x1FA27CF8); - b = hh(b, c, d, a, buffer[2], 23, 0xC4AC5665); - a = ii(a, b, c, d, buffer[0], 6, 0xF4292244); - d = ii(d, a, b, c, buffer[7], 10, 0x432AFF97); - c = ii(c, d, a, b, buffer[14], 15, 0xAB9423A7); - b = ii(b, c, d, a, buffer[5], 21, 0xFC93A039); - a = ii(a, b, c, d, buffer[12], 6, 0x655B59C3); - d = ii(d, a, b, c, buffer[3], 10, 0x8F0CCC92); - c = ii(c, d, a, b, buffer[10], 15, 0xFFEFF47D); - b = ii(b, c, d, a, buffer[1], 21, 0x85845DD1); - a = ii(a, b, c, d, buffer[8], 6, 0x6FA87E4F); - d = ii(d, a, b, c, buffer[15], 10, 0xFE2CE6E0); - c = ii(c, d, a, b, buffer[6], 15, 0xA3014314); - b = ii(b, c, d, a, buffer[13], 21, 0x4E0811A1); - a = ii(a, b, c, d, buffer[4], 6, 0xF7537E82); - d = ii(d, a, b, c, buffer[11], 10, 0xBD3AF235); - c = ii(c, d, a, b, buffer[2], 15, 0x2AD7D2BB); - b = ii(b, c, d, a, buffer[9], 21, 0xEB86D391); - w[0] = add(a, w[0]); - w[1] = add(b, w[1]); - w[2] = add(c, w[2]); - w[3] = add(d, w[3]);}; - } - (); - function caml_MD5Update(ctx, input, input_len){ - var in_buf = ctx.len & 0x3f, input_pos = 0; - ctx.len += input_len; - if(in_buf){ - var missing = 64 - in_buf; - if(input_len < missing){ - ctx.b8.set(input.subarray(0, input_len), in_buf); - return; - } - ctx.b8.set(input.subarray(0, missing), in_buf); - caml_MD5Transform(ctx.w, ctx.b32); - input_len -= missing; - input_pos += missing; - } - while(input_len >= 64){ - ctx.b8.set(input.subarray(input_pos, input_pos + 64), 0); - caml_MD5Transform(ctx.w, ctx.b32); - input_len -= 64; - input_pos += 64; - } - if(input_len) - ctx.b8.set(input.subarray(input_pos, input_pos + input_len), 0); - } - function caml_MD5Final(ctx){ - var in_buf = ctx.len & 0x3f; - ctx.b8[in_buf] = 0x80; - in_buf++; - if(in_buf > 56){ - for(var j = in_buf; j < 64; j++) ctx.b8[j] = 0; - caml_MD5Transform(ctx.w, ctx.b32); - for(var j = 0; j < 56; j++) ctx.b8[j] = 0; - } - else - for(var j = in_buf; j < 56; j++) ctx.b8[j] = 0; - ctx.b32[14] = ctx.len << 3; - ctx.b32[15] = ctx.len >> 29 & 0x1FFFFFFF; - caml_MD5Transform(ctx.w, ctx.b32); - var t = new Uint8Array(16); - for(var i = 0; i < 4; i++) - for(var j = 0; j < 4; j++) t[i * 4 + j] = ctx.w[i] >> 8 * j & 0xFF; - return t; - } - function caml_string_of_array(a){ - return caml_string_of_jsbytes(caml_subarray_to_jsbytes(a, 0, a.length)); - } - function caml_md5_bytes(s, ofs, len){ - var ctx = caml_MD5Init(), a = caml_uint8_array_of_bytes(s); - caml_MD5Update(ctx, a.subarray(ofs, ofs + len), len); - return caml_string_of_array(caml_MD5Final(ctx)); - } - function caml_md5_string(s, ofs, len){ - return caml_md5_bytes(caml_bytes_of_string(s), ofs, len); - } - function caml_ml_debug_info_status(){return 0;} - var caml_ml_channels = new Array(); - function caml_ml_channel_get(id){return caml_ml_channels[id];} - function caml_ml_flush(chanid){ - var chan = caml_ml_channel_get(chanid); - if(! chan.opened) caml_raise_sys_error("Cannot flush a closed channel"); - if(! chan.buffer || chan.buffer_curr == 0) return 0; - if(chan.output) - chan.output(caml_subarray_to_jsbytes(chan.buffer, 0, chan.buffer_curr)); - else - chan.file.write(chan.offset, chan.buffer, 0, chan.buffer_curr); - chan.offset += chan.buffer_curr; - chan.buffer_curr = 0; - return 0; - } - function caml_sys_open_for_node(fd, flags){ - if(flags.name) - try{ - var fs = require("fs"), fd2 = fs.openSync(flags.name, "rs"); - return new MlNodeFd(fd2, flags); - } - catch(e){} - return new MlNodeFd(fd, flags); - } - var caml_sys_fds = new Array(3); - function MlFakeFd_out(fd, flags){ - MlFakeFile.call(this, caml_create_bytes(0)); - this.log = function(s){return 0;}; - if(fd == 1 && typeof console.log == "function") - this.log = console.log; - else if(fd == 2 && typeof console.error == "function") - this.log = console.error; - else if(typeof console.log == "function") this.log = console.log; - this.flags = flags; - } - MlFakeFd_out.prototype.length = function(){return 0;}; - MlFakeFd_out.prototype.write = - function(offset, buf, pos, len){ - if(this.log){ - if - (len > 0 && pos >= 0 && pos + len <= buf.length - && buf[pos + len - 1] == 10) - len--; - var src = caml_create_bytes(len); - caml_blit_bytes(caml_bytes_of_array(buf), pos, src, 0, len); - this.log(src.toUtf16()); - return 0; - } - caml_raise_sys_error(this.fd + ": file descriptor already closed"); - }; - MlFakeFd_out.prototype.read = - function(offset, buf, pos, len){ - caml_raise_sys_error(this.fd + ": file descriptor is write only"); - }; - MlFakeFd_out.prototype.close = function(){this.log = undefined;}; - function caml_sys_open_internal(file, idx){ - if(idx == undefined) idx = caml_sys_fds.length; - caml_sys_fds[idx] = file; - return idx | 0; - } - function caml_sys_open(name, flags, _perms){ - var f = {}; - while(flags){ - switch(flags[1]){ - case 0: - f.rdonly = 1; break; - case 1: - f.wronly = 1; break; - case 2: - f.append = 1; break; - case 3: - f.create = 1; break; - case 4: - f.truncate = 1; break; - case 5: - f.excl = 1; break; - case 6: - f.binary = 1; break; - case 7: - f.text = 1; break; - case 8: - f.nonblock = 1; break; - } - flags = flags[2]; - } - if(f.rdonly && f.wronly) - caml_raise_sys_error - (caml_jsbytes_of_string(name) - + " : flags Open_rdonly and Open_wronly are not compatible"); - if(f.text && f.binary) - caml_raise_sys_error - (caml_jsbytes_of_string(name) - + " : flags Open_text and Open_binary are not compatible"); - var root = resolve_fs_device(name), file = root.device.open(root.rest, f); - return caml_sys_open_internal(file, undefined); - } - (function(){ - function file(fd, flags){ - return fs_node_supported() - ? caml_sys_open_for_node(fd, flags) - : new MlFakeFd_out(fd, flags); - } - caml_sys_open_internal - (file(0, {rdonly: 1, altname: "/dev/stdin", isCharacterDevice: true}), - 0); - caml_sys_open_internal - (file(1, {buffered: 2, wronly: 1, isCharacterDevice: true}), 1); - caml_sys_open_internal - (file(2, {buffered: 2, wronly: 1, isCharacterDevice: true}), 2); - } - ()); - function caml_ml_open_descriptor_in(fd){ - var file = caml_sys_fds[fd]; - if(file.flags.wronly) caml_raise_sys_error("fd " + fd + " is writeonly"); - var - refill = null, - channel = - {file: file, - offset: file.flags.append ? file.length() : 0, - fd: fd, - opened: true, - out: false, - buffer_curr: 0, - buffer_max: 0, - buffer: new Uint8Array(65536), - refill: refill}; - caml_ml_channels[channel.fd] = channel; - return channel.fd; - } - function caml_ml_open_descriptor_out(fd){ - var file = caml_sys_fds[fd]; - if(file.flags.rdonly) caml_raise_sys_error("fd " + fd + " is readonly"); - var - buffered = file.flags.buffered !== undefined ? file.flags.buffered : 1, - channel = - {file: file, - offset: file.flags.append ? file.length() : 0, - fd: fd, - opened: true, - out: true, - buffer_curr: 0, - buffer: new Uint8Array(65536), - buffered: buffered}; - caml_ml_channels[channel.fd] = channel; - return channel.fd; - } - function caml_ml_out_channels_list(){ - var l = 0; - for(var c = 0; c < caml_ml_channels.length; c++) - if - (caml_ml_channels[c] && caml_ml_channels[c].opened - && caml_ml_channels[c].out) - l = [0, caml_ml_channels[c].fd, l]; - return l; - } - function caml_ml_output_ta(chanid, buffer, offset, len){ - var chan = caml_ml_channel_get(chanid); - if(! chan.opened) - caml_raise_sys_error("Cannot output to a closed channel"); - buffer = buffer.subarray(offset, offset + len); - if(chan.buffer_curr + buffer.length > chan.buffer.length){ - var b = new Uint8Array(chan.buffer_curr + buffer.length); - b.set(chan.buffer); - chan.buffer = b; - } - switch(chan.buffered){ - case 0: - chan.buffer.set(buffer, chan.buffer_curr); - chan.buffer_curr += buffer.length; - caml_ml_flush(chanid); - break; - case 1: - chan.buffer.set(buffer, chan.buffer_curr); - chan.buffer_curr += buffer.length; - if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid); - break; - case 2: - var id = buffer.lastIndexOf(10); - if(id < 0){ - chan.buffer.set(buffer, chan.buffer_curr); - chan.buffer_curr += buffer.length; - if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid); - } - else{ - chan.buffer.set(buffer.subarray(0, id + 1), chan.buffer_curr); - chan.buffer_curr += id + 1; - caml_ml_flush(chanid); - chan.buffer.set(buffer.subarray(id + 1), chan.buffer_curr); - chan.buffer_curr += buffer.length - id - 1; - } - break; - } - return 0; - } - function caml_ml_output_bytes(chanid, buffer, offset, len){ - var buffer = caml_uint8_array_of_bytes(buffer); - return caml_ml_output_ta(chanid, buffer, offset, len); - } - function caml_ml_output(chanid, buffer, offset, len){ - return caml_ml_output_bytes - (chanid, caml_bytes_of_string(buffer), offset, len); - } - function caml_ml_output_char(chanid, c){ - var s = caml_string_of_jsbytes(String.fromCharCode(c)); - caml_ml_output(chanid, s, 0, 1); - return 0; - } - function caml_mod(x, y){if(y == 0) caml_raise_zero_divide(); return x % y;} - function caml_notequal(x, y){ - return + (caml_compare_val(x, y, false) != 0); - } - function caml_obj_make_forward(b, v){b[0] = 250; b[1] = v; return 0;} - function caml_obj_tag(x){ - if(x instanceof Array && x[0] == x[0] >>> 0) - return x[0]; - else if(caml_is_ml_bytes(x)) - return 252; - else if(caml_is_ml_string(x)) - return 252; - else if(x instanceof Function || typeof x == "function") - return 247; - else if(x && x.caml_custom) return 255; else return 1000; - } - function caml_build_symbols(symb){ - var r = {}; - if(symb) - for(var i = 1; i < symb.length; i++) - r[caml_jsstring_of_string(symb[i][1])] = symb[i][2]; - return r; - } - function caml_register_global(n, v, name_opt){ - if(name_opt){ - var name = name_opt; - if(globalThis.toplevelReloc) - n = caml_callback(globalThis.toplevelReloc, [name]); - else if(caml_global_data.symbols){ - if(! caml_global_data.symidx) - caml_global_data.symidx = caml_build_symbols(caml_global_data.symbols); - var nid = caml_global_data.symidx[name]; - if(nid >= 0) - n = nid; - else - caml_failwith("caml_register_global: cannot locate " + name); - } - } - caml_global_data[n + 1] = v; - if(name_opt) caml_global_data[name_opt] = v; - } - function caml_register_named_value(nm, v){ - caml_named_values[caml_jsbytes_of_string(nm)] = v; - return 0; - } - function caml_string_bound_error(){ - caml_invalid_argument("index out of bounds"); - } - function caml_string_get(s, i){ - if(i >>> 0 >= caml_ml_string_length(s)) caml_string_bound_error(); - return caml_string_unsafe_get(s, i); - } - function caml_string_of_bytes(s){ - s.t & 6 && caml_convert_string_to_bytes(s); - return caml_string_of_jsbytes(s.c); - } - function caml_sys_const_max_wosize(){return 0x7FFFFFFF / 4 | 0;} - function caml_raise_not_found(){ - caml_raise_constant(caml_global_data.Not_found); - } - function caml_sys_getenv(name){ - var r = jsoo_sys_getenv(caml_jsstring_of_string(name)); - if(r === undefined) caml_raise_not_found(); - return caml_string_of_jsstring(r); - } - function caml_sys_random_seed(){ - if(globalThis.crypto) - if(globalThis.crypto.getRandomValues){ - var a = globalThis.crypto.getRandomValues(new Int32Array(4)); - return [0, a[0], a[1], a[2], a[3]]; - } - else if(globalThis.crypto.randomBytes){ - var a = new Int32Array(globalThis.crypto.randomBytes(16).buffer); - return [0, a[0], a[1], a[2], a[3]]; - } - var now = new Date().getTime(), x = now ^ 0xffffffff * Math.random(); - return [0, x]; - } - function caml_trampoline(res){ - var c = 1; - while(res && res.joo_tramp){ - res = res.joo_tramp.apply(null, res.joo_args); - c++; - } - return res; - } - function caml_trampoline_return(f, args){return {joo_tramp: f, joo_args: args}; - } - function caml_wrap_exception(e){ - { - if(e instanceof Array) return e; - var exn; - if - (globalThis.RangeError && e instanceof globalThis.RangeError - && e.message - && e.message.match(/maximum call stack/i)) - exn = caml_global_data.Stack_overflow; - else if - (globalThis.InternalError && e instanceof globalThis.InternalError - && e.message - && e.message.match(/too much recursion/i)) - exn = caml_global_data.Stack_overflow; - else if(e instanceof globalThis.Error && caml_named_value("jsError")) - exn = [0, caml_named_value("jsError"), e]; - else - exn = [0, caml_global_data.Failure, caml_string_of_jsstring(String(e))]; - if(e instanceof globalThis.Error) exn.js_error = e; - return exn; - } - } - function caml_is_special_exception(exn){ - switch(exn[2]){case - 8:case - 11:case - 12: return 1;default: return 0; - } - } - function caml_format_exception(exn){ - var r = ""; - if(exn[0] == 0){ - r += exn[1][1]; - if - (exn.length == 3 && exn[2][0] == 0 && caml_is_special_exception(exn[1])) - var bucket = exn[2], start = 1; - else - var start = 2, bucket = exn; - r += "("; - for(var i = start; i < bucket.length; i++){ - if(i > start) r += ", "; - var v = bucket[i]; - if(typeof v == "number") - r += v.toString(); - else if(v instanceof MlBytes) - r += '"' + v.toString() + '"'; - else if(typeof v == "string") - r += '"' + v.toString() + '"'; - else - r += "_"; - } - r += ")"; - } - else if(exn[0] == 248) r += exn[1]; - return r; - } - function caml_fatal_uncaught_exception(err){ - if(err instanceof Array && (err[0] == 0 || err[0] == 248)){ - var handler = caml_named_value("Printexc.handle_uncaught_exception"); - if(handler) - caml_callback(handler, [err, false]); - else{ - var - msg = caml_format_exception(err), - at_exit = caml_named_value("Pervasives.do_at_exit"); - if(at_exit) caml_callback(at_exit, [0]); - console.error("Fatal error: exception " + msg); - if(err.js_error) throw err.js_error; - } - } - else - throw err; - } - function caml_setup_uncaught_exception_handler(){ - var process = globalThis.process; - if(process && process.on) - process.on - ("uncaughtException", - function(err, origin){ - caml_fatal_uncaught_exception(err); - process.exit(2); - }); - else if(globalThis.addEventListener) - globalThis.addEventListener - ("error", - function(event){ - if(event.error) caml_fatal_uncaught_exception(event.error); - }); - } - caml_setup_uncaught_exception_handler(); - var - cst$1 = "", - cst$7 = " ", - cst_16g = "%.16g", - cst_17g = "%.17g", - cst_Li = "%Li", - cst_d = "%d", - cst_i = "%i", - cst_li = "%li", - cst_ni = "%ni", - cst_s = "%s", - cst_u = "%u", - cst_Program_not_linked_with_g_ = - "(Program not linked with -g, cannot print stack backtrace)\n", - cst$4 = ", ", - cst_characters = ", characters ", - cst = ".", - cst_0 = ".0", - cst$5 = ": ", - cst$6 = ">", - cst$3 = "@[", - cst$2 = "@{", - cst_AggregateFolder = "AggregateFolder", - cst_AirTime = "AirTime", - cst_Album = "Album", - cst_AlbumArtist = "AlbumArtist", - cst_AlbumId = "AlbumId", - cst_Artist = "Artist", - cst_Ascending = "Ascending", - cst_Assert_failure = "Assert_failure", - cst_Audio = "Audio", - cst_AudioBook = "AudioBook", - cst_BasePluginFolder = "BasePluginFolder", - cst_BasicSyncInfo = "BasicSyncInfo", - cst_Book = "Book", - cst_BoxSet = "BoxSet", - cst_Budget = "Budget", - cst_CanDelete = "CanDelete", - cst_CanDownload = "CanDownload", - cst_Channel = "Channel", - cst_ChannelFolderItem = "ChannelFolderItem", - cst_ChannelImage = "ChannelImage", - cst_ChannelInfo = "ChannelInfo", - cst_Chapters = "Chapters", - cst_ChildCount = "ChildCount", - cst_CollectionFolder = "CollectionFolder", - cst_CollectionType = "CollectionType", - cst_CommunityRating = "CommunityRating", - cst_CriticRating = "CriticRating", - cst_CumulativeRunTimeTicks = "CumulativeRunTimeTicks", - cst_CustomRating = "CustomRating", - cst_DateCreated = "DateCreated", - cst_DateLastMediaAdded = "DateLastMediaAdded", - cst_DateLastRefreshed = "DateLastRefreshed", - cst_DateLastSaved = "DateLastSaved", - cst_DatePlayed = "DatePlayed", - cst_Descending = "Descending", - cst_DisplayPreferencesId = "DisplayPreferencesId", - cst_Division_by_zero = "Division_by_zero", - cst_EnableMediaSourceDisplay = "EnableMediaSourceDisplay", - cst_End_of_file = "End_of_file", - cst_Episode = "Episode", - cst_Etag = "Etag", - cst_ExternalEtag = "ExternalEtag", - cst_ExternalSeriesId = "ExternalSeriesId", - cst_ExternalUrls = "ExternalUrls", - cst_ExtraIds = "ExtraIds", - cst_Failure = "Failure", - cst_Fatal_error_exception = "Fatal error: exception ", - cst_Fatal_error_exception_s = "Fatal error: exception %s\n", - cst_Folder = "Folder", - cst_Genre = "Genre", - cst_Genres = "Genres", - cst_Height = "Height", - cst_HomePageUrl = "HomePageUrl", - cst_Id = "Id", - cst_ImageBlurHashes = "ImageBlurHashes", - cst_InheritedParentalRatingVal = "InheritedParentalRatingValue", - cst_Invalid_argument = "Invalid_argument", - cst_IsHD = "IsHD", - cst_ItemCounts = "ItemCounts", - cst_ItemId = "ItemId", - cst_Items = "Items", - cst_LiveTvChannel = "LiveTvChannel", - cst_LiveTvProgram = "LiveTvProgram", - cst_LocalTrailerCount = "LocalTrailerCount", - cst_Locations = "Locations", - cst_ManualPlaylistsFolder = "ManualPlaylistsFolder", - cst_Match_failure = "Match_failure", - cst_MediaSourceCount = "MediaSourceCount", - cst_MediaSources = "MediaSources", - cst_MediaStreams = "MediaStreams", - cst_Movie = "Movie", - cst_MusicAlbum = "MusicAlbum", - cst_MusicArtist = "MusicArtist", - cst_MusicGenre = "MusicGenre", - cst_MusicVideo = "MusicVideo", - cst_Name = "Name", - cst_Not_found = "Not_found", - cst_OriginalTitle = "OriginalTitle", - cst_Out_of_memory = "Out_of_memory", - cst_Overview = "Overview", - cst_ParentId = "ParentId", - cst_Path = "Path", - cst_People = "People", - cst_Person = "Person", - cst_Photo = "Photo", - cst_PhotoAlbum = "PhotoAlbum", - cst_PlayAccess = "PlayAccess", - cst_PlayCount = "PlayCount", - cst_Playlist = "Playlist", - cst_PlaylistsFolder = "PlaylistsFolder", - cst_PremiereDate = "PremiereDate", - cst_PresentationUniqueKey = "PresentationUniqueKey", - cst_Primary = "Primary", - cst_PrimaryImageAspectRatio = "PrimaryImageAspectRatio", - cst_ProductionLocations = "ProductionLocations", - cst_ProductionYear = "ProductionYear", - cst_Program = "Program", - cst_ProviderIds = "ProviderIds", - cst_Random = "Random", - cst_Recording = "Recording", - cst_RecursiveItemCount = "RecursiveItemCount", - cst_RefreshState = "RefreshState", - cst_RemoteTrailers = "RemoteTrailers", - cst_Revenue = "Revenue", - cst_Runtime = "Runtime", - cst_ScreenshotImageTags = "ScreenshotImageTags", - cst_Season = "Season", - cst_SeasonUserData = "SeasonUserData", - cst_Series = "Series", - cst_SeriesPresentationUniqueKe = "SeriesPresentationUniqueKey", - cst_SeriesPrimaryImage = "SeriesPrimaryImage", - cst_SeriesStudio = "SeriesStudio", - cst_ServerId = "ServerId", - cst_ServiceName = "ServiceName", - cst_Set_bal = "Set.bal", - cst_Settings = "Settings", - cst_SortName = "SortName", - cst_SpecialEpisodeNumbers = "SpecialEpisodeNumbers", - cst_SpecialFeatureCount = "SpecialFeatureCount", - cst_Stack_overflow = "Stack_overflow", - cst_StartIndex = "StartIndex", - cst_Studio = "Studio", - cst_Studios = "Studios", - cst_SyncInfo = "SyncInfo", - cst_Sys_blocked_io = "Sys_blocked_io", - cst_Sys_error = "Sys_error", - cst_Taglines = "Taglines", - cst_Tags = "Tags", - cst_ThemeSongIds = "ThemeSongIds", - cst_ThemeVideoIds = "ThemeVideoIds", - cst_TotalRecordCount = "TotalRecordCount", - cst_Trailer = "Trailer", - cst_TvChannel = "TvChannel", - cst_TvProgram = "TvProgram", - cst_Type = "Type", - cst_Undefined_recursive_module = "Undefined_recursive_module", - cst_Unexpected_end_of_input = "Unexpected end of input", - cst_UserRootFolder = "UserRootFolder", - cst_UserView = "UserView", - cst_Video = "Video", - cst_Width = "Width", - cst_Year = "Year", - cst$0 = "\\\\", - cst_b = "\\b", - cst_n = "\\n", - cst_r = "\\r", - cst_t = "\\t", - cst_buffer_ml = "buffer.ml", - cst_camlinternalFormat_ml = "camlinternalFormat.ml", - cst_console = "console", - cst_date_added = "date_added", - cst_enableImages = "enableImages", - cst_enableUserData = "enableUserData", - cst_error = "error", - cst_false = "false", - cst_fields = "fields", - cst_fut = "fut", - cst_id = "id", - cst_ids = "ids", - cst_includeExternalContent = "includeExternalContent", - cst_includeItemTypes = "includeItemTypes", - cst_item = "item", - cst_item_Id = "item.Id", - cst_items = "items", - cst_items_by_date_added = "items_by_date_added", - cst_lib_db_stores_ml = "lib/db/stores.ml", - cst_limit = "limit", - cst_music = "music", - cst_music$0 = "music\0", - cst_name = "name", - cst_null = "null", - cst_parentId = "parentId", - cst_pathname = "pathname", - cst_recursive = "recursive", - cst_sortBy = "sortBy", - cst_sortOrder = "sortOrder", - cst_sort_name = "sort_name", - cst_sorts = "sorts", - cst_sorts_views = "sorts.views", - cst_src_core_CCString_pp_ml = "src/core/CCString.pp.ml", - cst_startIndex = "startIndex", - cst_start_index = "start_index", - cst_to = "to", - cst_total_record_count = "total_record_count", - cst_true = "true", - cst_userId = "userId", - cst_views = "views"; - function caml_call1(f, a0){ - return (f.l >= 0 ? f.l : f.l = f.length) == 1 - ? f(a0) - : caml_call_gen(f, [a0]); - } - function caml_call2(f, a0, a1){ - return (f.l >= 0 ? f.l : f.l = f.length) == 2 - ? f(a0, a1) - : caml_call_gen(f, [a0, a1]); - } - function caml_call3(f, a0, a1, a2){ - return (f.l >= 0 ? f.l : f.l = f.length) == 3 - ? f(a0, a1, a2) - : caml_call_gen(f, [a0, a1, a2]); - } - function caml_call4(f, a0, a1, a2, a3){ - return (f.l >= 0 ? f.l : f.l = f.length) == 4 - ? f(a0, a1, a2, a3) - : caml_call_gen(f, [a0, a1, a2, a3]); - } - function caml_call5(f, a0, a1, a2, a3, a4){ - return (f.l >= 0 ? f.l : f.l = f.length) == 5 - ? f(a0, a1, a2, a3, a4) - : caml_call_gen(f, [a0, a1, a2, a3, a4]); - } - function caml_call7(f, a0, a1, a2, a3, a4, a5, a6){ - return (f.l >= 0 ? f.l : f.l = f.length) == 7 - ? f(a0, a1, a2, a3, a4, a5, a6) - : caml_call_gen(f, [a0, a1, a2, a3, a4, a5, a6]); - } - var undef = undefined; - caml_fs_init(); - var - Out_of_memory = [248, cst_Out_of_memory, -1], - Sys_error = [248, cst_Sys_error, -2], - Failure = [248, cst_Failure, -3], - Invalid_argument = [248, cst_Invalid_argument, -4], - End_of_file = [248, cst_End_of_file, -5], - Division_by_zero = [248, cst_Division_by_zero, -6], - Not_found = [248, cst_Not_found, -7], - Match_failure = [248, cst_Match_failure, -8], - Stack_overflow = [248, cst_Stack_overflow, -9], - Sys_blocked_io = [248, cst_Sys_blocked_io, -10], - Assert_failure = [248, cst_Assert_failure, -11], - Undefined_recursive_module = [248, cst_Undefined_recursive_module, -12], - dummy_pos = [0, cst$1, 0, 0, -1], - zero_pos = [0, cst$1, 1, 0, 0], - partial = [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, 0]]], - locfmt = - [0, - [11, - 'File "', - [2, - 0, - [11, - '", line ', - [4, - 0, - 0, - 0, - [11, - cst_characters, - [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$5, [2, 0, 0]]]]]]]]]], - 'File "%s", line %d, characters %d-%d: %s'], - ocaml_lex_tables = - [0, - "\0\0\xfe\xff\xff\xff", - "\xff\xff\xff\xff\xff\xff", - "\x01\0\0\0\0\0", - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0", - "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0", - cst$1, - cst$1, - cst$1, - cst$1, - cst$1, - cst$1], - ocaml_lex_tables$0 = - [0, - "\0\0\xec\xff\xed\xff\x03\0\xef\xff\x10\0\xf2\xff\xf3\xff\xf4\xff\xf5\xff\0\0\x1f\0\xf9\xffU\0\x01\0\0\0\0\0\x01\0\0\0\x01\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x01\0\x04\0\xfd\xff\x0b\0\xfc\xff\x03\0\x01\0\x03\0\x02\0\x03\0\0\0\xfb\xff\x15\0a\0\n\0\x16\0\x14\0\x10\0\x16\0\f\0\b\0\xfa\xffw\0\x81\0\x8b\0\xa1\0\xab\0\xb5\0\xc1\0\xd1\0\xf0\xff\x0b\0&\0\xfc\xffA\0\xfe\xff\xff\xffn\0\xfc\xff\xa3\0\xfe\xff\xff\xff\xea\0\xf7\xff\xf8\xff0\x01\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xffG\x01~\x01\x95\x01\xf9\xff'\0\xfd\xff\xfe\xff&\0\xbb\x01\xd2\x01\xf8\x01\x0f\x02\xff\xff\xdc\0\xfd\xff\xff\xff\xf5\0'\x02m\x02\x0e\x01X\x02\xa4\x02\xbb\x02\xe1\x02\r\0\xfc\xff\xfd\xff\xfe\xff\xff\xff\x0e\0\xfd\xff\xfe\xff\xff\xff\x1e\0\xfd\xff\xfe\xff\xff\xff\x0f\0\xfd\xff\xfe\xff\xff\xff\x11\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\x13\0\xfc\xff\xfd\xff\xfe\xff\x0f\0\xff\xff\x10\0\xff\xff\b\x01\x05\0\xfd\xff\x17\0\xfe\xff\x14\0\xff\xff.\0\xfd\xff\xfe\xff*\x004\x005\0\xff\xff5\x000\0[\0\\\0\xff\xff\x1b\x01\xfa\xff\xfb\xff\x89\0h\0Y\0X\0j\0\xff\xff\x8f\0\x89\0\xb1\0\xfe\xff\xb7\0\xa8\0\xa6\0\xb7\0\x02\0\xfd\xff\xb1\0\xac\0\xbb\0\x04\0\xfc\xff5\x02\xfb\xff\xfc\xff\xfd\xffg\x01\xff\xff\xf8\x02\xfe\xff\x06\x03\x1e\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff(\x032\x03J\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff=\x03T\x03l\x03\xf9\xff\xfa\xff\xfb\xff\xf4\0x\x03\x8e\x03\xb3\0\xc2\0\x0f\0\xff\xff\xbe\0\xbc\0\xbb\0\xc1\0\xb7\0\xb3\0\xfe\xff\xbf\0\xc9\0\xc8\0\xc4\0\xcb\0\xc1\0\xbd\0\xfd\xff\x9d\x03_\x03\xae\x03\xc4\x03\xce\x03\xd8\x03\xe4\x03\xef\x03<\0\xfd\xff\xfe\xff\xff\xff\f\x04\xfc\xff\xfd\xffW\x04\xff\xff\x91\x04\xfc\xff\xfd\xff\xdd\x04\xff\xff\xe5\0\xfd\xff\xfe\xff\xff\xff\xe7\0\xfd\xff\xfe\xff\xff\xff\x02\0\xff\xff\x12\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\"\x01\xfd\xff\xfe\xff\xff\xff\0\0\xff\xff\x03\0\xfe\xff\xff\xff&\x01\xfc\xff\xfd\xff\xfe\xff\xff\xffx\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\xd0\0\xfd\xff\xfe\xff\xff\xff\xd3\0\xfd\xff\xfe\xff\xff\xff\xbd\0\xff\xff\x8f\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\r\x01\xfd\xff\xfe\xff\xff\xff_\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff2\x01\xfd\xff\xfe\xff\xff\xff\x1a\x01\xfd\xff\xfe\xff\xff\xff\xe9\0\xfd\xff\xfe\xff\xff\xff\xde\0\xfd\xff\xfe\xff\xff\xffO\x05\xed\xff\xee\xff\n\0\xf0\xff,\x01\xf3\xff\xf4\xff\xf5\xff\xf6\xff=\x01\x02\x04\xf9\xff-\x05\xd1\0\xe4\0\xd3\0\xe8\0\xe1\0\xdf\0\xf0\0\xff\xff\xeb\0\xea\0\b\x01\xfe\xff\x04\x01\x17\x01\xfd\xff6\x01\xfc\xff\x1f\x01\x1d\x01 \x01'\x011\x01-\x01\xfb\xff9\x01R\x01P\x01N\x01T\x01J\x01V\x01\xfa\xffn\x05\f\x04{\x05\x9b\x05\xa5\x05\xb1\x05\xbb\x05\xc5\x05\xf1\xff\xc7\x01M\x02\xfd\xff\xff\xff\x9a\x02\xde\x05\xd1\x05\x9b\x02\xef\x055\x06L\x06r\x06\x10\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x98\x06\xfc\xff\xfd\xff\xe3\x06\xff\xffU\x07\xf4\xff\xf5\xff\x0b\0\xf7\xffL\x02\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\x1f\x02\xf3\x053\x07d\x01s\x01h\x01\x85\x01v\x01\x9a\x01\xab\x01\xff\xff\xad\x01\xb0\x01\xbf\x01\xb9\x01\xbb\x01\xfd\x01\xe6\x01\xe6\x01\xea\x01\xf7\x01\xed\x01\xea\x01\t\x02\x13\x02\x13\x02\x0f\x02\x15\x02\x0b\x02\x07\x02\x8e\x06\x98\x06t\x07\xaa\x07\xb4\x07\xbe\x07\xc8\x07\xd2\x07\xf8\xffx\x02\xa7\x02\xfd\xff\xff\xff\xd8\x02R\x07\xdc\x07\xec\x02\xf4\x07:\bQ\bw\bL\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x9d\b\xfc\xff\xfd\xff\xe8\b\xff\xff\x87\x02x\x02\xfd\xffd\x02\xfe\xff\xb6\x02\xff\xff\x0b\x02\xff\xff\xcc\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff.\x02\xff\xff\xb2\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x17\0\xff\xff\xb7\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\xbb\x02\xfd\xff\xfe\xff\xff\xffy\x02\xfd\xff\xfe\xff\xff\xff\xb8\x02\xfc\xff\xfd\xff\xfe\xff\x13\0\xff\xff", - "\xff\xff\xff\xff\xff\xff\x11\0\xff\xff\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x13\0\x13\0\x13\0\x13\0\x13\0\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\t\0\xff\xff\t\0\xff\xff\xff\xff\x0e\0\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\x04\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\0\0\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\x03\0\x05\0\x05\0\x05\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x03\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\xff\xff\b\0\xff\xff\b\0\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff", - "\x01\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\x009\0<\0\0\0<\0\0\0\0\0A\0\0\0A\0\0\0\0\0F\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0T\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0^\0\0\0\0\0a\0\xff\xff\xff\xffa\0\xff\xff\xff\xff\xff\xff\xff\xffh\0\0\0\0\0\0\0\0\0m\0\0\0\0\0\0\0q\0\0\0\0\0\0\0u\0\0\0\0\0\0\0y\0\0\0\0\0\0\0\0\0\0\0~\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\x8a\0\0\0\x8e\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x9a\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xb2\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xbb\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc2\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc9\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\0\0\0\0\0\0\xef\0\0\0\0\0\xff\xff\0\0\xf4\0\0\0\0\0\xff\xff\0\0\xf9\0\0\0\0\0\0\0\xfd\0\0\0\0\0\0\0\xff\xff\0\0\x03\x01\0\0\0\0\0\0\0\0\b\x01\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\x11\x01\0\0\0\0\0\0\0\0\x16\x01\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\0\0 \x01\0\0\0\0\0\0\xff\xff\0\0&\x01\0\0\0\0\0\0\0\0+\x01\0\0\0\0\0\0/\x01\0\0\0\0\0\0\0\x004\x01\0\0\0\0\0\x008\x01\0\0\0\0\0\0<\x01\0\0\0\0\0\0@\x01\0\0\0\0\0\0C\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0y\x01}\x01\0\0\0\0\x80\x01\xff\xff\xff\xff\x80\x01\xff\xff\xff\xff\xff\xff\xff\xff\x87\x01\0\0\0\0\0\0\0\0\x8c\x01\0\0\0\0\xff\xff\0\0\x90\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xc1\x01\xc5\x01\0\0\0\0\xc8\x01\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x01\0\0\0\0\0\0\0\0\xd4\x01\0\0\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xdc\x01\0\0\xff\xff\0\0\xe2\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xe9\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xf0\x01\0\0\0\0\0\0\0\0\xf5\x01\0\0\0\0\0\0\xf9\x01\0\0\0\0\0\0\xfc\x01\0\0\0\0\0\0\xff\xff\0\0", - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\x03\0\x03\0\x86\0\0\0\x03\0\0\0\x86\0E\x01\x92\x01\xff\xff\0\0E\x01\x92\x01\0\0\0\0\0\0\0\0\x7f\0\x8b\0\0\0\x03\0\0\0\f\0\x03\0\xaa\0\x86\0\xaf\0\0\0\x07\0\x0b\x01E\x01\x92\x01\x0e\x01\r\x001\0\x05\0\n\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\x008\0v\0\x06\0\x81\0\x82\x009\0\xed\x01\x89\0\0\x021\0\0\x000\0\x8a\0j\0>\0\x0e\0n\0i\0\0\x001\0\x0f\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1e\x000\0\b\0r\0\xd1\0\xec\0\0\x01\r\x01\x1d\0\x16\0\xff\xff0\x000\0\x11\0\x15\0\x19\0 \0!\0#\0\x17\0\x1b\0\x10\0\x1f\0\x1c\0\"\0\x13\0\x18\0\x12\0\x1a\0\x14\0$\0)\0%\x000\0\t\0*\0+\0,\0-\0.\0/\0=\0U\x000\0&\0'\0'\0'\0'\0'\0'\0'\0'\0'\x001\0C\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0V\0\x8f\0\xff\xff(\0\x90\0\x91\0\x92\x007\0\x94\x007\0\x95\x000\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0\xff\xff0\0\x96\0\x97\0\xa1\0B\0\x9e\x005\0\x9f\x005\0\xa0\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\0\xa5\x003\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa2\0\xa3\0\xa6\0]\0\xff\xff\x02\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xff\xffM\0g\0l\0t\0\x84\0\x86\0\x87\0\x80\0\x8b\0\x86\0\xa4\0]\0\xab\0M\0\xa7\0\xa8\0\xa9\0\xac\0p\0\xad\0\xae\0\xd2\0\xe2\0\xd0\0\xd3\0\xd4\0;\0S\0\x86\0\xd5\0\xd6\0\xd7\0\xd8\0\xda\0\x8d\0\xdb\0]\0\xdc\0\xdd\0{\0\xde\0\xdf\0\xe0\0\x88\0_\0\xe1\0#\x01A\x01\xea\0\x9b\0\x05\x01a\x01\xfa\0\xff\xff\xfe\x009\x01=\x01_\x01M\0,\x01\\\x01X\x01\t\x01\x1d\x01L\0|\0!\x01\x12\x01K\0b\0\x13\x01U\x01V\x01W\x01x\x01Y\x01J\0\xe1\x005\x01y\x01I\0Z\x01H\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0b\0q\x01z\0[\x01@\0\x04\x01]\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\x9c\0p\x01^\x01`\x01b\x01c\x011\x01O\0O\0O\0O\0O\0O\0d\x01\x9d\0e\x01N\0N\0N\0N\0N\0N\0\xb7\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\x18\x01p\x01\xff\xff\x19\x01f\x01g\x01i\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0j\x01k\x010\x01(\x01l\x01m\x01n\x01P\0P\0P\0P\0P\0P\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0o\x01\x1b\x01\xff\xff\xab\x01\x1f\x01\xaa\x01\x17\x01Q\0Q\0Q\0Q\0Q\0Q\0\\\0\xa8\x01?\x01P\0P\0P\0P\0P\0P\0\xf8\0\xa5\x01\xfc\0\xa2\x01;\x01E\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\xff\xffQ\0Q\0Q\0Q\0Q\0Q\0W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0'\x01*\x01\xff\xff\xa3\x01\xa4\x01x\0\x02\x01X\0X\0X\0X\0X\0X\0\xa6\x017\x01\x99\0W\0W\0W\0W\0W\0W\0\x07\x01\xa7\x01\xa4\x01\xa9\x01\x10\x01\xa4\x01Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\x003\x01X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0a\0\x89\x01\xa4\x01\xac\x01\xb9\x01\x88\x01\xad\x01Z\0Z\0Z\0Z\0Z\0Z\0a\0\xb3\0\xae\x01Y\0Y\0Y\0Y\0Y\0Y\0.\x01\xaf\x01\xb0\x01\xb4\0\xa4\x01\xb8\x01\xb5\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0|\x01Z\0Z\0Z\0Z\0Z\0Z\0\xc0\x01\xb2\x01\x15\x01\xb3\x01a\0\xc1\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xa4\x01\xd8\x01\xff\xffa\0\xb8\x01\xd8\x01\xd1\x01a\0\xdf\x01a\0\xd0\x01\xe6\x01\0\0a\0\xdb\x01%\x01\xd8\x01\xd9\x01\0\0\xdc\x01\xd8\x01a\0\0\0\0\0\xd8\x01a\0\0\0a\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xd8\x01\0\0~\x01\0\0\0\0\0\0\0\0c\0c\0c\0c\0c\0c\0a\0\0\0\xda\x01\xfa\x01\0\0\0\0a\0\0\0|\x01|\x01a\0\0\0\xdd\x01\0\0\xfd\x01\0\0\0\0\0\0a\0\xff\xff\0\0\xc4\x01a\0\0\0a\0`\0c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xeb\x01\0\0\xf1\x01\0\0\xff\x01\xf2\x01\0\0d\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xf6\x01\x81\x01\x81\x01\xe4\x01\0\0\xc4\x01\0\0e\0e\0e\0e\0e\0e\0\0\0\xc6\x01\0\0d\0d\0d\0d\0d\0d\0\0\0\0\0\0\0\xc4\x01\xea\x01\x86\x01a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0\0\0e\0e\0e\0e\0e\0e\0a\0a\0a\0a\0a\0a\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\0\0\0\0\xc9\x01\xb1\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xbc\0\0\0a\0a\0a\0a\0a\0a\0\xc9\x01\xe3\x01\0\0\xbf\0\xce\x01{\x01\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xc3\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc6\0\xff\xff\xf8\x01\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xca\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xcd\0\xff\xff\xff\xff\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe2\0\xc3\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\x01\0\0\0\0\xce\0\xdd\x01\xef\x01\xfe\x01\0\0\xcf\0\xf4\x01\0\0\xe1\0\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\0\0\0\xe8\0\0\0\xe1\x01\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xd9\0\xff\xff\0\0\0\0\0\0\0\0\xe1\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\xe6\0\0\0\xe6\0\0\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\0\0\xe4\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xba\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\xf1\0\0\0q\x01\0\0M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01\0\0p\x01\0\0\0\0\xc1\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0p\x01\0\0\0\0\0\0\xf0\0\xc8\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\xf6\0\0\0\0\0\xf0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xee\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0E\x01F\x01\0\0\0\0E\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\x01\0\0N\x01\0\0\0\0\0\0\0\0h\x01I\x01\0\0\0\0\0\0\0\0O\x01\0\0G\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0H\x01\0\0\0\0\0\0\0\0\0\0\xf3\0\0\0\0\0\0\0\0\0\0\0\0\0P\x01w\x01\0\0w\x01\0\0Q\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\0\0J\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01S\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\x01\0\0\0\0s\x01\0\0\0\0T\x01\0\0\0\0u\x01\0\0u\x01\0\0K\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\0\0s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\xb9\x01\0\0\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xb8\x01\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\0\0\0\0D\x01\x80\x01\x80\x01\x80\x01\x7f\x01\0\0\x80\x01\0\0\0\0\xb8\x01\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\x80\x01\x7f\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\xbf\x01\x8e\x01\xbf\x01\0\0\0\0\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x92\x01\x93\x01\0\0\0\0\x92\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\x92\x01\0\0\x99\x01\0\0\0\0\0\0\0\0\xb1\x01\x96\x01\0\0\0\0\0\0\xc8\x01\x9c\x01\0\0\x94\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\x95\x01\0\0\0\0\0\0\0\0\0\0\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\0\0\x9e\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc8\x01\0\0\x97\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\xbb\x01\0\0\xa0\x01\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\x9f\x01\xc8\x01\0\0\xc8\x01\xc7\x01\0\0\xa1\x01\0\0\0\0\0\0\0\0\0\0\0\0\x98\x01\0\0\0\0\0\0\0\0\xbd\x01\0\0\xbd\x01\0\0\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\x91\x01\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\xc8\x01\xc7\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xd6\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd3\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", - "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x03\0\0\0\x86\0\xff\xff\x03\0\xff\xff\x86\0E\x01\x92\x019\0\xff\xffE\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff}\0\x8a\0\xff\xff\0\0\xff\xff\0\0\x03\0\xa9\0\x86\0\xae\0\xff\xff\0\0\n\x01E\x01\x92\x01\f\x01\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x05\0s\0\0\0}\0\x81\0\x05\0\xec\x01\x88\0\xff\x01&\0\xff\xff\n\0\x88\0f\0:\0\0\0k\0f\0\xff\xff\x0b\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1d\0&\0\0\0o\0\xd0\0\xe9\0\xff\0\f\x01\x0f\0\x11\0<\0\x0b\0\n\0\0\0\x14\0\x18\0\x1f\0 \0\"\0\x16\0\x1a\0\0\0\x0e\0\x1b\0!\0\x12\0\x17\0\0\0\x10\0\x13\0#\0(\0$\0&\0\0\0)\0*\0+\0,\0-\0.\0:\0R\0\x0b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0'\0?\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0U\0\x8c\0<\0\r\0\x8f\0\x90\0\x91\x000\0\x93\x000\0\x94\0'\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x001\x001\x001\x001\x001\x001\x001\x001\x001\x001\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0A\0'\0\x95\0\x96\0\x9c\0?\0\x9d\x003\0\x9e\x003\0\x9f\x002\x003\x003\x003\x003\x003\x003\x003\x003\x003\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x005\x005\x005\x005\x005\x005\x005\x005\x005\x005\0\x9b\x002\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa1\0\xa2\0\x9b\0[\0A\0\0\x007\x007\x007\x007\x007\x007\x007\x007\x007\x007\x009\0D\0f\0k\0s\0\x83\0\x85\0\x85\0}\0\x8a\0\x85\0\xa3\0^\0\xa5\0D\0\xa6\0\xa7\0\xa8\0\xab\0o\0\xac\0\xad\0\xce\0\xcb\0\xcf\0\xd2\0\xd3\0:\0R\0\x85\0\xd4\0\xd5\0\xd6\0\xd7\0\xd9\0\x8c\0\xda\0a\0\xdb\0\xdc\0w\0\xdd\0\xde\0\xdf\0\x85\0[\0\xcb\0\"\x01>\x01\xe9\0\x98\0\x01\x01P\x01\xf7\0<\0\xfb\x006\x01:\x01Q\x01D\0)\x01R\x01S\x01\x06\x01\x1a\x01D\0w\0\x1e\x01\x0f\x01D\0^\0\x0f\x01T\x01U\x01V\x01G\x01X\x01D\0\xcb\x002\x01G\x01D\0Y\x01D\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0a\0L\x01w\0Z\x01?\0\x01\x01\\\x01G\0G\0G\0G\0G\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0\x98\0L\x01]\x01_\x01a\x01b\x01-\x01N\0N\0N\0N\0N\0N\0c\x01\x98\0d\x01G\0G\0G\0G\0G\0G\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\x14\x01L\x01A\0\x14\x01e\x01f\x01h\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0i\x01j\x01-\x01$\x01k\x01l\x01m\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0n\x01\x1a\x01y\x01\x9d\x01\x1e\x01\x9e\x01\x14\x01P\0P\0P\0P\0P\0P\0[\0\x9f\x01>\x01O\0O\0O\0O\0O\0O\0\xf7\0\xa0\x01\xfb\0\xa1\x01:\x01D\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0^\0P\0P\0P\0P\0P\0P\0V\0V\0V\0V\0V\0V\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0$\x01)\x01a\0\xa2\x01\xa3\x01w\0\x01\x01W\0W\0W\0W\0W\0W\0\xa5\x016\x01\x98\0V\0V\0V\0V\0V\0V\0\x06\x01\xa6\x01\xa7\x01\xa8\x01\x0f\x01\xa9\x01X\0X\0X\0X\0X\0X\0X\0X\0X\0X\x002\x01W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0_\0\x85\x01\xaa\x01\xab\x01\x9a\x01\x85\x01\xac\x01Y\0Y\0Y\0Y\0Y\0Y\0_\0\xb0\0\xad\x01X\0X\0X\0X\0X\0X\0-\x01\xae\x01\xaf\x01\xb0\0\xb0\x01\x9a\x01\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0z\x01Y\0Y\0Y\0Y\0Y\0Y\0\x94\x01\xb1\x01\x14\x01\xb2\x01b\0\x94\x01\xb3\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xd8\x01\xc1\x01_\0\x9a\x01\xd8\x01\xcd\x01b\0\xde\x01_\0\xcd\x01\xe5\x01\xff\xff_\0\xda\x01$\x01\xd7\x01\xd7\x01\xff\xff\xda\x01\xd7\x01_\0\xff\xff\xff\xff\xd8\x01_\0\xff\xff_\0_\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xd7\x01\xff\xffz\x01\xff\xff\xff\xff\xff\xff\xff\xff`\0`\0`\0`\0`\0`\0b\0\xff\xff\xd7\x01\xf7\x01\xff\xff\xff\xffb\0\xff\xff}\x01\x80\x01b\0\xff\xff\xdc\x01\xff\xff\xfb\x01\xff\xff\xff\xff\xff\xffb\0y\x01\xff\xff\xc2\x01b\0\xff\xffb\0b\0`\0`\0`\0`\0`\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xe7\x01\xff\xff\xee\x01\xff\xff\xfb\x01\xee\x01\xff\xffc\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xf3\x01}\x01\x80\x01\xe0\x01\xff\xff\xc5\x01\xff\xffd\0d\0d\0d\0d\0d\0\xff\xff\xc2\x01\xff\xffc\0c\0c\0c\0c\0c\0\xff\xff\xff\xff\xff\xff\xc8\x01\xe7\x01\x85\x01e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xffd\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xff\xff\xff\xff\xc5\x01\xb0\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb9\0\xff\xffe\0e\0e\0e\0e\0e\0\xc8\x01\xe0\x01\xff\xff\xb9\0\xcd\x01z\x01\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xc0\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc0\0\xc1\x01\xf7\x01\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc7\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xc7\0}\x01\x80\x01\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xcc\0\xc2\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe7\x01\xff\xff\xff\xff\xc7\0\xdc\x01\xee\x01\xfb\x01\xff\xff\xc7\0\xf3\x01\xff\xff\xcc\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xe1\0\xff\xff\xe1\0\xff\xff\xe0\x01\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xcd\0\xc5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcc\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xe4\0\xff\xff\xe4\0\xff\xff\xe3\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xe3\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xb9\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xff\xffM\x01\xff\xffM\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01\xff\xffM\x01\xff\xff\xff\xff\xc0\0\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0M\x01\xff\xff\xff\xff\xff\xff\xed\0\xc7\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xf2\0\xff\xff\xff\xff\xf0\0\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xed\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0B\x01B\x01\xff\xff\xff\xffB\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xffO\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01p\x01\xff\xffp\x01\xff\xffB\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01\xff\xff\xff\xffB\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xff\xff\xffr\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xffs\x01\xff\xffs\x01\xff\xffB\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\xff\xffr\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01\xff\xff~\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\x81\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x9b\x01\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01~\x01\xff\xff\xff\xffB\x01~\x01\x81\x01~\x01~\x01\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\x81\x01\x81\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xb8\x01\x8a\x01\xb8\x01\xff\xff\xff\xff\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x01\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xba\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\x8f\x01\xc6\x01\xff\xff\xc6\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xbb\x01\xff\xff\xbb\x01\xff\xff\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xc9\x01\xc9\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", - cst$1, - cst$1, - cst$1, - cst$1, - cst$1, - cst$1], - tp_loc = "lib/data_source/jellyfin_api.ml.Types.order", - tp_loc$0 = "lib/data_source/jellyfin_api.ml.Types.sort", - tp_loc$1 = "lib/data_source/jellyfin_api.ml.Item.image_blur_hashes", - tp_loc$2 = "lib/data_source/jellyfin_api.ml.Item.type_", - tp_loc$3 = "lib/data_source/jellyfin_api.ml.Item.field", - tp_loc$4 = "lib/data_source/jellyfin_api.ml.Item.t", - tp_loc$5 = "lib/data_source/jellyfin_api.ml.Items.params", - tp_loc$6 = "lib/data_source/jellyfin_api.ml.Items.response", - tp_loc$7 = "lib/data_source/jellyfin_api.ml.Views.params", - tp_loc$8 = "lib/data_source/jellyfin_api.ml.Views.response", - tp_loc$9 = - "lib/data_source/jellyfin_api.ml.Virtual_folders.virtual_folder", - tp_loc$10 = "lib/db/stores.ml.Orderred_items.t", - path$0 = [0, cst_id], - name = cst_items_by_date_added, - tp_loc$11 = "lib/db/stores.ml.Items.sorts", - tp_loc$12 = "lib/db/stores.ml.Items.t", - path$2 = [0, "sorts.date_added"], - path$3 = [0, cst_item_Id], - name$0 = cst_items, - path$6 = [0, cst_ItemId], - name$1 = "virtual_folders", - name$2 = cst_items_by_date_added, - name$3 = "items_by_view_and_kind", - name$4 = "items_by_id", - name$5 = "items_by_type_and_name", - include_item_types = [0, 17, [0, 16, [0, 1, 0]]], - initial_report = [0, 0, 0]; - caml_register_global - (11, Undefined_recursive_module, cst_Undefined_recursive_module); - caml_register_global(10, Assert_failure, cst_Assert_failure); - caml_register_global(9, Sys_blocked_io, cst_Sys_blocked_io); - caml_register_global(8, Stack_overflow, cst_Stack_overflow); - caml_register_global(7, Match_failure, cst_Match_failure); - caml_register_global(6, Not_found, cst_Not_found); - caml_register_global(5, Division_by_zero, cst_Division_by_zero); - caml_register_global(4, End_of_file, cst_End_of_file); - caml_register_global(3, Invalid_argument, cst_Invalid_argument); - caml_register_global(2, Failure, cst_Failure); - caml_register_global(1, Sys_error, cst_Sys_error); - caml_register_global(0, Out_of_memory, cst_Out_of_memory); - var - _h_ = "output_substring", - _g_ = cst, - _e_ = cst_true, - _f_ = cst_false, - _a_ = "Stdlib.Exit", - _b_ = caml_int64_create_lo_mi_hi(0, 0, 32752), - _c_ = caml_int64_create_lo_mi_hi(0, 0, 65520), - _d_ = caml_int64_create_lo_mi_hi(1, 0, 32752), - _k_ = "CamlinternalLazy.Undefined", - _l_ = "result is Error _", - _n_ = cst$0, - _o_ = "\\'", - _p_ = cst_b, - _q_ = cst_t, - _r_ = cst_n, - _s_ = cst_r, - _m_ = "Char.chr", - _u_ = "List.init", - _t_ = "hd", - _x_ = "String.blit / Bytes.blit_string", - _w_ = "Bytes.blit", - _v_ = "String.sub / Bytes.sub", - _B_ = "String.contains_from / Bytes.contains_from", - _A_ = "String.index_from / Bytes.index_from", - _z_ = cst$1, - _y_ = "String.concat", - _G_ = [0, "array.ml", 322, 4], - _E_ = "Array.blit", - _D_ = "Array.fill", - _C_ = "Array.init", - _F_ = "Stdlib.Array.Bottom", - _H_ = cst_Set_bal, - _I_ = cst_Set_bal, - _J_ = cst_Set_bal, - _K_ = cst_Set_bal, - _M_ = "Stdlib.Queue.Empty", - _Q_ = "Buffer.add_substring/add_subbytes", - _P_ = "Buffer.add: cannot grow buffer", - _O_ = [0, cst_buffer_ml, 93, 2], - _N_ = [0, cst_buffer_ml, 94, 2], - ___ = "%c", - _$_ = cst_s, - _aa_ = cst_i, - _ab_ = cst_li, - _ac_ = cst_ni, - _ad_ = cst_Li, - _ae_ = "%f", - _af_ = "%B", - _ag_ = "%{", - _ah_ = "%}", - _ai_ = "%(", - _aj_ = "%)", - _ak_ = "%a", - _al_ = "%t", - _am_ = "%?", - _an_ = "%r", - _ao_ = "%_r", - _ap_ = [0, cst_camlinternalFormat_ml, 850, 23], - _aA_ = [0, cst_camlinternalFormat_ml, 814, 21], - _as_ = [0, cst_camlinternalFormat_ml, 815, 21], - _aB_ = [0, cst_camlinternalFormat_ml, 818, 21], - _at_ = [0, cst_camlinternalFormat_ml, 819, 21], - _aC_ = [0, cst_camlinternalFormat_ml, 822, 19], - _au_ = [0, cst_camlinternalFormat_ml, 823, 19], - _aD_ = [0, cst_camlinternalFormat_ml, 826, 22], - _av_ = [0, cst_camlinternalFormat_ml, 827, 22], - _aE_ = [0, cst_camlinternalFormat_ml, 831, 30], - _aw_ = [0, cst_camlinternalFormat_ml, 832, 30], - _ay_ = [0, cst_camlinternalFormat_ml, 836, 26], - _aq_ = [0, cst_camlinternalFormat_ml, 837, 26], - _az_ = [0, cst_camlinternalFormat_ml, 846, 28], - _ar_ = [0, cst_camlinternalFormat_ml, 847, 28], - _ax_ = [0, cst_camlinternalFormat_ml, 851, 23], - _bz_ = [0, cst_camlinternalFormat_ml, 1558, 4], - _bA_ = "Printf: bad conversion %[", - _bB_ = [0, cst_camlinternalFormat_ml, 1626, 39], - _bC_ = [0, cst_camlinternalFormat_ml, 1649, 31], - _bD_ = [0, cst_camlinternalFormat_ml, 1650, 31], - _bE_ = "Printf: bad conversion %_", - _bF_ = cst$2, - _bG_ = cst$3, - _bH_ = cst$2, - _bI_ = cst$3, - _by_ = "nan", - _bw_ = "neg_infinity", - _bx_ = "infinity", - _bv_ = cst, - _bu_ = [0, 103], - _bi_ = "%+nd", - _bj_ = "% nd", - _bl_ = "%+ni", - _bm_ = "% ni", - _bn_ = "%nx", - _bo_ = "%#nx", - _bp_ = "%nX", - _bq_ = "%#nX", - _br_ = "%no", - _bs_ = "%#no", - _bh_ = "%nd", - _bk_ = cst_ni, - _bt_ = "%nu", - _a7_ = "%+ld", - _a8_ = "% ld", - _a__ = "%+li", - _a$_ = "% li", - _ba_ = "%lx", - _bb_ = "%#lx", - _bc_ = "%lX", - _bd_ = "%#lX", - _be_ = "%lo", - _bf_ = "%#lo", - _a6_ = "%ld", - _a9_ = cst_li, - _bg_ = "%lu", - _aU_ = "%+Ld", - _aV_ = "% Ld", - _aX_ = "%+Li", - _aY_ = "% Li", - _aZ_ = "%Lx", - _a0_ = "%#Lx", - _a1_ = "%LX", - _a2_ = "%#LX", - _a3_ = "%Lo", - _a4_ = "%#Lo", - _aT_ = "%Ld", - _aW_ = cst_Li, - _a5_ = "%Lu", - _aH_ = "%+d", - _aI_ = "% d", - _aK_ = "%+i", - _aL_ = "% i", - _aM_ = "%x", - _aN_ = "%#x", - _aO_ = "%X", - _aP_ = "%#X", - _aQ_ = "%o", - _aR_ = "%#o", - _aG_ = cst_d, - _aJ_ = cst_i, - _aS_ = cst_u, - _R_ = "@]", - _S_ = "@}", - _U_ = "@?", - _V_ = "@\n", - _W_ = "@.", - _X_ = "@@", - _Y_ = "@%", - _Z_ = "@", - _aF_ = "CamlinternalFormat.Type_mismatch", - _bM_ = cst$1, - _bN_ = [0, [11, cst$4, [2, 0, [2, 0, 0]]], ", %s%s"], - _b__ = - [0, - [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], - cst_Fatal_error_exception_s], - _b$_ = - [0, - [11, - "Fatal error in uncaught exception handler: exception ", - [2, 0, [12, 10, 0]]], - "Fatal error in uncaught exception handler: exception %s\n"], - _b9_ = "Fatal error: out of memory in uncaught exception handler", - _b8_ = - [0, - [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], - cst_Fatal_error_exception_s], - _b5_ = [0, [2, 0, [12, 10, 0]], "%s\n"], - _b6_ = - [0, - [11, cst_Program_not_linked_with_g_, 0], - cst_Program_not_linked_with_g_], - _bX_ = "Raised at", - _bY_ = "Re-raised at", - _bZ_ = "Raised by primitive operation at", - _b0_ = "Called from", - _b1_ = " (inlined)", - _b3_ = cst$1, - _b2_ = - [0, - [2, - 0, - [12, - 32, - [2, - 0, - [11, - ' in file "', - [2, - 0, - [12, - 34, - [2, - 0, - [11, ", line ", [4, 0, 0, 0, [11, cst_characters, partial]]]]]]]]]], - '%s %s in file "%s"%s, line %d, characters %d-%d'], - _b4_ = [0, [2, 0, [11, " unknown location", 0]], "%s unknown location"], - _bS_ = "Out of memory", - _bT_ = "Stack overflow", - _bU_ = "Pattern matching failed", - _bV_ = "Assertion failed", - _bW_ = "Undefined recursive module", - _bO_ = [0, [12, 40, [2, 0, [2, 0, [12, 41, 0]]]], "(%s%s)"], - _bP_ = cst$1, - _bQ_ = cst$1, - _bR_ = [0, [12, 40, [2, 0, [12, 41, 0]]], "(%s)"], - _bL_ = [0, [4, 0, 0, 0, 0], cst_d], - _bJ_ = [0, [3, 0, 0], "%S"], - _bK_ = "_", - _b7_ = - [0, - cst$1, - "(Cannot print locations:\n bytecode executable program file not found)", - "(Cannot print locations:\n bytecode executable program file appears to be corrupt)", - "(Cannot print locations:\n bytecode executable program file has wrong magic number)", - "(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"], - _cb_ = "Fun.Finally_raised: ", - _ca_ = "Stdlib.Fun.Finally_raised", - _cc_ = "x", - _cd_ = - [0, - 987910699, - 495797812, - 364182224, - 414272206, - 318284740, - 990407751, - 383018966, - 270373319, - 840823159, - 24560019, - 536292337, - 512266505, - 189156120, - 730249596, - 143776328, - 51606627, - 140166561, - 366354223, - 1003410265, - 700563762, - 981890670, - 913149062, - 526082594, - 1021425055, - 784300257, - 667753350, - 630144451, - 949649812, - 48546892, - 415514493, - 258888527, - 511570777, - 89983870, - 283659902, - 308386020, - 242688715, - 482270760, - 865188196, - 1027664170, - 207196989, - 193777847, - 619708188, - 671350186, - 149669678, - 257044018, - 87658204, - 558145612, - 183450813, - 28133145, - 901332182, - 710253903, - 510646120, - 652377910, - 409934019, - 801085050], - _ci_ = "Hashtbl: unsupported hash table format", - _cg_ = cst$1, - _cx_ = [3, 0, 3], - _cy_ = cst, - _cu_ = cst$6, - _cv_ = "<\/", - _cw_ = cst$1, - _cr_ = cst$6, - _cs_ = "<", - _ct_ = cst$1, - _cq_ = "\n", - _cp_ = [0, cst$1], - _cl_ = cst$1, - _cm_ = cst$1, - _cn_ = cst$1, - _co_ = cst$1, - _ck_ = [0, cst$1, 0, cst$1], - _cj_ = "Stdlib.Format.String_tag", - _cz_ = "Jsoo_runtime.Error.Exn", - _cA_ = "jsError", - _cD_ = [0, "src/fut.ml", 34, 25], - _cK_ = "info", - _cJ_ = cst_error, - _cI_ = "log", - _cG_ = "search", - _cF_ = [0, 1], - _cE_ = cst_pathname, - _cL_ = "isSecureContext", - _cM_ = "cache", - _cN_ = "credentials", - _cO_ = "headers", - _cP_ = "integrity", - _cQ_ = "keepalive", - _cR_ = "method", - _cS_ = "mode", - _cT_ = "redirect", - _cU_ = "referrer", - _cV_ = "referrerPolicy", - _c6_ = "open", - _c3_ = "autoIncrement", - _c4_ = "keyPath", - _c5_ = "new object store with options:", - _c0_ = "readonly", - _c1_ = "readwrite", - _c2_ = "readwriteflush", - _cW_ = "next", - _cX_ = "nextUnique", - _cY_ = "prev", - _cZ_ = "prevUnique", - _c9_ = [0, [11, "\x1b[", [4, 0, 0, 0, [12, 109, 0]]], "\x1b[%dm"], - _c__ = "CCResult.Get_error", - _dc_ = [0, cst_src_core_CCString_pp_ml, 119, 10], - _db_ = [0, cst_src_core_CCString_pp_ml, 92, 10], - _da_ = cst$1, - _dd_ = [1, [0, 3854881, "Failed to unmarshal data"]], - _de_ = [0, "lib/codec.ml", 32, 4], - _df_ = "Yojson__Common.Json_error", - _dg_ = "Yojson__Common.End_of_array", - _dh_ = "Yojson__Common.End_of_object", - _di_ = "Yojson__Common.End_of_tuple", - _dj_ = "Yojson__Common.End_of_input", - _dS_ = [0, 737456202, 1], - _dT_ = [0, 737456202, 0], - _dU_ = cst_Unexpected_end_of_input, - _dV_ = "Invalid token", - _dW_ = cst_Unexpected_end_of_input, - _dX_ = "Invalid escape sequence", - _dY_ = cst_Unexpected_end_of_input, - _dZ_ = "Invalid low surrogate for code point beyond U+FFFF", - _d0_ = - "Missing escape sequence representing low surrogate for code point beyond U+FFFF", - _d1_ = cst_Unexpected_end_of_input, - _d2_ = "Expected ':' or '>' but found", - _d3_ = cst_Unexpected_end_of_input, - _d4_ = "Expected '>' but found", - _d5_ = cst_Unexpected_end_of_input, - _d6_ = "Unterminated comment", - _d7_ = "Expected string or identifier but found", - _d8_ = cst_Unexpected_end_of_input, - _d9_ = "Expected ',' or ']' but found", - _d__ = cst_Unexpected_end_of_input, - _d$_ = "Expected ',' or ')' but found", - _ea_ = cst_Unexpected_end_of_input, - _eb_ = "Expected ',' or '}' but found", - _ec_ = cst_Unexpected_end_of_input, - _ed_ = "Expected ':' but found", - _ee_ = cst_Unexpected_end_of_input, - _eu_ = "Expected string, got ", - _et_ = "Expected object, got ", - _ei_ = cst_null, - _ek_ = "object", - _el_ = "floatlit", - _em_ = "array", - _en_ = "tuple", - _ej_ = "bool", - _ep_ = "variant", - _eq_ = "float", - _er_ = "int", - _es_ = "string", - _eo_ = "intlit", - _eg_ = "Blank input data", - _ef_ = "Junk after end of JSON value:", - _dQ_ = [0, [2, 0, [11, " '", [2, 0, [2, 0, [12, 39, 0]]]]], "%s '%s%s'"], - _dL_ = [0, [11, "File ", [2, 0, [11, ", line", 0]]], "File %s, line"], - _dP_ = "Line", - _dM_ = [0, [11, "byte ", [4, 3, 0, 0, 0]], "byte %i"], - _dO_ = - [0, - [11, "bytes ", [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, 0]]]], - "bytes %i-%i"], - _dN_ = - [0, - [2, - 0, - [12, 32, [4, 3, 0, 0, [11, cst$4, [2, 0, [11, ":\n", [2, 0, 0]]]]]]], - "%s %i, %s:\n%s"], - _dK_ = [0, "lib/read.mll", 41, 13], - _dJ_ = cst$1, - _dI_ = cst$1, - _dE_ = "NaN value not allowed in standard JSON", - _dF_ = [0, [8, [0, 0, 3], 0, [0, 16], 0], cst_16g], - _dH_ = [0, [8, [0, 0, 3], 0, [0, 17], 0], cst_17g], - _dG_ = cst_0, - _dC_ = "Infinity value not allowed in standard JSON", - _dD_ = "-Infinity value not allowed in standard JSON", - _dy_ = "NaN", - _dz_ = [0, [8, [0, 0, 3], 0, [0, 16], 0], cst_16g], - _dB_ = [0, [8, [0, 0, 3], 0, [0, 17], 0], cst_17g], - _dA_ = cst_0, - _dw_ = "Infinity", - _dx_ = "-Infinity", - _du_ = cst_true, - _dv_ = cst_false, - _dt_ = cst_null, - _dn_ = cst_b, - _do_ = cst_t, - _dp_ = cst_n, - _dq_ = "\\f", - _dr_ = cst_r, - _ds_ = '\\"', - _dm_ = cst$0, - _dl_ = - [0, - [11, - "src=", - [3, - 0, - [11, - " start=", - [4, 3, 0, 0, [11, " len=", [4, 3, 0, 0, [12, 10, [10, 0]]]]]]]], - "src=%S start=%i len=%i\n%!"], - _dk_ = "\\u00", - _dR_ = "Yojson__Safe.Int_overflow", - _eh_ = "Yojson__Safe.Util.Type_error", - _ez_ = "list_of_yojson: list needed", - _ey_ = "int_of_yojson: integer needed", - _ex_ = "string_of_yojson: string needed", - _ew_ = "bool_of_yojson: true/false needed", - _ev_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", - _eI_ = cst$7, - _eK_ = "_of_yojson: list instead of atom for record expected", - _eJ_ = - [0, - [2, - 0, - [11, - "_of_yojson: the following record elements were undefined: ", - [2, 0, 0]]], - "%s_of_yojson: the following record elements were undefined: %s"], - _eH_ = "extra fields", - _eG_ = "duplicate fields", - _eE_ = cst$7, - _eF_ = - [0, - [2, 0, [11, "_of_yojson: ", [2, 0, [11, cst$5, [2, 0, 0]]]]], - "%s_of_yojson: %s: %s"], - _eD_ = "_of_yojson: unexpected variant constructor", - _eC_ = "_of_yojson: expected a variant type, saw an empty list", - _eB_ = "_of_yojson: expected a variant type, saw a nested list", - _eA_ = "_of_yojson: this constructor does not take arguments", - _hx_ = "An error occured while decoding response: ", - _ht_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], - _hw_ = cst$1, - _hu_ = cst$1, - _hv_ = - [0, - [11, - 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="', - [2, 0, [11, '", Version="0.1"', [2, 0, 0]]]], - 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'], - _hq_ = cst_ItemId, - _hr_ = cst_Locations, - _hs_ = cst_Name, - _hn_ = "item_id", - _ho_ = "locations", - _hp_ = cst_name, - _hl_ = [0, "Views", 0], - _hm_ = "Users", - _hi_ = cst_StartIndex, - _hj_ = cst_TotalRecordCount, - _hk_ = cst_Items, - _hf_ = cst_start_index, - _hg_ = cst_total_record_count, - _hh_ = cst_items, - _he_ = cst_includeExternalContent, - _hd_ = "include_external_content", - _hc_ = [0, cst_Items, 0], - _g$_ = cst_StartIndex, - _ha_ = cst_TotalRecordCount, - _hb_ = cst_Items, - _g8_ = cst_start_index, - _g9_ = cst_total_record_count, - _g__ = cst_items, - _gW_ = cst_enableImages, - _gX_ = cst_enableUserData, - _gY_ = cst_recursive, - _gZ_ = cst_sortBy, - _g0_ = cst_sortOrder, - _g1_ = cst_limit, - _g2_ = cst_startIndex, - _g3_ = cst_includeItemTypes, - _g4_ = cst_fields, - _g5_ = cst_userId, - _g6_ = cst_parentId, - _g7_ = cst_ids, - _gP_ = "enable_images", - _gQ_ = "enable_user_data", - _gR_ = cst_recursive, - _gS_ = "sort_by", - _gT_ = "include_item_types", - _gU_ = cst_fields, - _gV_ = "user_id", - _gO_ = cst_CollectionType, - _gF_ = cst_Type, - _gG_ = cst_ImageBlurHashes, - _gH_ = cst_ServerId, - _gI_ = cst_ParentId, - _gJ_ = cst_AlbumId, - _gK_ = cst_Path, - _gL_ = cst_Id, - _gM_ = cst_SortName, - _gN_ = cst_Name, - _gA_ = "type_", - _gB_ = "image_blur_hashes", - _gC_ = "server_id", - _gD_ = cst_id, - _gE_ = cst_name, - _gz_ = [0, "lib/data_source/jellyfin_api.ml", 192, 64], - _fC_ = [0, 848054398, [0, [0, -976970511, cst_AirTime], 0]], - _fD_ = [0, 848054398, [0, [0, -976970511, cst_BasicSyncInfo], 0]], - _fE_ = [0, 848054398, [0, [0, -976970511, cst_CanDelete], 0]], - _fF_ = [0, 848054398, [0, [0, -976970511, cst_CanDownload], 0]], - _fG_ = [0, 848054398, [0, [0, -976970511, cst_ChannelImage], 0]], - _fH_ = [0, 848054398, [0, [0, -976970511, cst_ChannelInfo], 0]], - _fI_ = [0, 848054398, [0, [0, -976970511, cst_Chapters], 0]], - _fJ_ = [0, 848054398, [0, [0, -976970511, cst_ChildCount], 0]], - _fK_ = [0, 848054398, [0, [0, -976970511, cst_CumulativeRunTimeTicks], 0]], - _fL_ = [0, 848054398, [0, [0, -976970511, cst_CustomRating], 0]], - _fM_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], - _fN_ = [0, 848054398, [0, [0, -976970511, cst_DateLastMediaAdded], 0]], - _fO_ = [0, 848054398, [0, [0, -976970511, cst_DateLastRefreshed], 0]], - _fP_ = [0, 848054398, [0, [0, -976970511, cst_DateLastSaved], 0]], - _fQ_ = [0, 848054398, [0, [0, -976970511, cst_DisplayPreferencesId], 0]], - _fR_ = - [0, 848054398, [0, [0, -976970511, cst_EnableMediaSourceDisplay], 0]], - _fS_ = [0, 848054398, [0, [0, -976970511, cst_Etag], 0]], - _fT_ = [0, 848054398, [0, [0, -976970511, cst_ExternalEtag], 0]], - _fU_ = [0, 848054398, [0, [0, -976970511, cst_ExternalSeriesId], 0]], - _fV_ = [0, 848054398, [0, [0, -976970511, cst_ExternalUrls], 0]], - _fW_ = [0, 848054398, [0, [0, -976970511, cst_ExtraIds], 0]], - _fX_ = [0, 848054398, [0, [0, -976970511, cst_Genres], 0]], - _fY_ = [0, 848054398, [0, [0, -976970511, cst_Height], 0]], - _fZ_ = [0, 848054398, [0, [0, -976970511, cst_HomePageUrl], 0]], - _f0_ = - [0, 848054398, [0, [0, -976970511, cst_InheritedParentalRatingVal], 0]], - _f1_ = [0, 848054398, [0, [0, -976970511, cst_IsHD], 0]], - _f2_ = [0, 848054398, [0, [0, -976970511, cst_ItemCounts], 0]], - _f3_ = [0, 848054398, [0, [0, -976970511, cst_LocalTrailerCount], 0]], - _f4_ = [0, 848054398, [0, [0, -976970511, cst_MediaSourceCount], 0]], - _f5_ = [0, 848054398, [0, [0, -976970511, cst_MediaSources], 0]], - _f6_ = [0, 848054398, [0, [0, -976970511, cst_MediaStreams], 0]], - _f7_ = [0, 848054398, [0, [0, -976970511, cst_OriginalTitle], 0]], - _f8_ = [0, 848054398, [0, [0, -976970511, cst_Overview], 0]], - _f9_ = [0, 848054398, [0, [0, -976970511, cst_ParentId], 0]], - _f__ = [0, 848054398, [0, [0, -976970511, cst_Path], 0]], - _f$_ = [0, 848054398, [0, [0, -976970511, cst_People], 0]], - _ga_ = [0, 848054398, [0, [0, -976970511, cst_PlayAccess], 0]], - _gb_ = [0, 848054398, [0, [0, -976970511, cst_PresentationUniqueKey], 0]], - _gc_ = - [0, 848054398, [0, [0, -976970511, cst_PrimaryImageAspectRatio], 0]], - _gd_ = [0, 848054398, [0, [0, -976970511, cst_ProductionLocations], 0]], - _ge_ = [0, 848054398, [0, [0, -976970511, cst_ProviderIds], 0]], - _gf_ = [0, 848054398, [0, [0, -976970511, cst_RecursiveItemCount], 0]], - _gg_ = [0, 848054398, [0, [0, -976970511, cst_RefreshState], 0]], - _gh_ = [0, 848054398, [0, [0, -976970511, cst_RemoteTrailers], 0]], - _gi_ = [0, 848054398, [0, [0, -976970511, cst_ScreenshotImageTags], 0]], - _gj_ = [0, 848054398, [0, [0, -976970511, cst_SeasonUserData], 0]], - _gk_ = - [0, 848054398, [0, [0, -976970511, cst_SeriesPresentationUniqueKe], 0]], - _gl_ = [0, 848054398, [0, [0, -976970511, cst_SeriesPrimaryImage], 0]], - _gm_ = [0, 848054398, [0, [0, -976970511, cst_SeriesStudio], 0]], - _gn_ = [0, 848054398, [0, [0, -976970511, cst_ServiceName], 0]], - _go_ = [0, 848054398, [0, [0, -976970511, cst_Settings], 0]], - _gp_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], - _gq_ = [0, 848054398, [0, [0, -976970511, cst_SpecialEpisodeNumbers], 0]], - _gr_ = [0, 848054398, [0, [0, -976970511, cst_SpecialFeatureCount], 0]], - _gs_ = [0, 848054398, [0, [0, -976970511, cst_Studios], 0]], - _gt_ = [0, 848054398, [0, [0, -976970511, cst_SyncInfo], 0]], - _gu_ = [0, 848054398, [0, [0, -976970511, cst_Taglines], 0]], - _gv_ = [0, 848054398, [0, [0, -976970511, cst_Tags], 0]], - _gw_ = [0, 848054398, [0, [0, -976970511, cst_ThemeSongIds], 0]], - _gx_ = [0, 848054398, [0, [0, -976970511, cst_ThemeVideoIds], 0]], - _gy_ = [0, 848054398, [0, [0, -976970511, cst_Width], 0]], - _e3_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], - _e4_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], - _e5_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], - _e6_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], - _e7_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], - _e8_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], - _e9_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], - _e__ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], - _e$_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], - _fa_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], - _fb_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], - _fc_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], - _fd_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], - _fe_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], - _ff_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], - _fg_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], - _fh_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], - _fi_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], - _fj_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], - _fk_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], - _fl_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], - _fm_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], - _fn_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], - _fo_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], - _fp_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], - _fq_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], - _fr_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], - _fs_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], - _ft_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], - _fu_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], - _fv_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], - _fw_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], - _fx_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], - _fy_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], - _fz_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], - _fA_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], - _fB_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], - _e2_ = cst_Primary, - _eN_ = [0, 848054398, [0, [0, -976970511, cst_Album], 0]], - _eO_ = [0, 848054398, [0, [0, -976970511, cst_AlbumArtist], 0]], - _eP_ = [0, 848054398, [0, [0, -976970511, cst_Artist], 0]], - _eQ_ = [0, 848054398, [0, [0, -976970511, cst_Budget], 0]], - _eR_ = [0, 848054398, [0, [0, -976970511, cst_CommunityRating], 0]], - _eS_ = [0, 848054398, [0, [0, -976970511, cst_CriticRating], 0]], - _eT_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], - _eU_ = [0, 848054398, [0, [0, -976970511, cst_DatePlayed], 0]], - _eV_ = [0, 848054398, [0, [0, -976970511, cst_PlayCount], 0]], - _eW_ = [0, 848054398, [0, [0, -976970511, cst_PremiereDate], 0]], - _eX_ = [0, 848054398, [0, [0, -976970511, cst_ProductionYear], 0]], - _eY_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], - _eZ_ = [0, 848054398, [0, [0, -976970511, cst_Random], 0]], - _e0_ = [0, 848054398, [0, [0, -976970511, cst_Revenue], 0]], - _e1_ = [0, 848054398, [0, [0, -976970511, cst_Runtime], 0]], - _eL_ = [0, 848054398, [0, [0, -976970511, cst_Descending], 0]], - _eM_ = [0, 848054398, [0, [0, -976970511, cst_Ascending], 0]], - _hW_ = [0, cst_lib_db_stores_ml, 116, 13], - _hV_ = [0, cst_lib_db_stores_ml, 107, 19], - _hS_ = [0, cst_lib_db_stores_ml, 99, 13], - _hR_ = [0, cst_lib_db_stores_ml, 93, 19], - _hN_ = [0, cst_lib_db_stores_ml, 66, 13], - _hL_ = cst_item, - _hM_ = cst_sorts, - _hJ_ = cst_item, - _hK_ = cst_sorts, - _hG_ = cst_sort_name, - _hH_ = cst_views, - _hI_ = cst_date_added, - _hD_ = cst_sort_name, - _hE_ = cst_views, - _hF_ = cst_date_added, - _hB_ = cst_item, - _hC_ = cst_id, - _hz_ = cst_item, - _hA_ = cst_id, - _hO_ = [0, cst_sorts_views], - _hP_ = [0, "item.Name"], - _hQ_ = [0, cst_item_Id], - _hT_ = [0, cst_sorts_views], - _hU_ = [0, "item.Type"], - _hX_ = [0, "sorts.sort_name"], - _hY_ = [0, "item.CollectionType"], - _is_ = [0, 1, 0], - _im_ = [0, 6, 0], - _in_ = [0, 0], - _io_ = [0, 33, [0, 34, 0]], - _iq_ = cst$1, - _ip_ = [0, 1], - _ir_ = [0, "lib/db/sync.ml", 334, 6], - _ij_ = [0, ":", 0], - _ik_ = cst_to, - _il_ = "Fetching items", - _ii_ = [0, 1], - _ih_ = [0, 34, 0], - _ig_ = [0, 33, 0], - _ie_ = [0, 1], - _if_ = [0, 0], - _ic_ = [0, 0], - _id_ = [0, 2], - _h$_ = [0, 6, 0], - _ia_ = [0, 0], - _ib_ = [0, 0], - _it_ = cst_to, - _iu_ = "Upgrading indexed_db schema from version", - _iv_ = [0, "Erasing existing stores", 0], - _iw_ = [0, 0], - _ix_ = [0, 0], - _iy_ = [0, 0], - _iz_ = "Stores created:", - _iR_ = "An error occured while loading item", - _iN_ = cst_music, - _iO_ = cst_music$0, - _iP_ = [0, 0], - _iQ_ = [0, 1], - _iM_ = "Item should exists.", - _iI_ = cst_music, - _iJ_ = cst_music$0, - _iK_ = [0, 0], - _iL_ = [0, 1], - _iD_ = [0, [2, 0, 0], cst_s], - _iE_ = cst_Audio, - _iF_ = "Audio\0", - _iG_ = [0, 0], - _iH_ = [0, 1], - _iC_ = [0, 0], - _iA_ = "tracks", - _iB_ = [0, 1]; - function erase_rel(param){ - if(typeof param === "number") return 0; - switch(param[0]){ - case 0: - var rest = param[1]; return [0, erase_rel(rest)]; - case 1: - var rest$0 = param[1]; return [1, erase_rel(rest$0)]; - case 2: - var rest$1 = param[1]; return [2, erase_rel(rest$1)]; - case 3: - var rest$2 = param[1]; return [3, erase_rel(rest$2)]; - case 4: - var rest$3 = param[1]; return [4, erase_rel(rest$3)]; - case 5: - var rest$4 = param[1]; return [5, erase_rel(rest$4)]; - case 6: - var rest$5 = param[1]; return [6, erase_rel(rest$5)]; - case 7: - var rest$6 = param[1]; return [7, erase_rel(rest$6)]; - case 8: - var rest$7 = param[2], ty = param[1]; - return [8, ty, erase_rel(rest$7)]; - case 9: - var rest$8 = param[3], ty1 = param[1]; - return [9, ty1, ty1, erase_rel(rest$8)]; - case 10: - var rest$9 = param[1]; return [10, erase_rel(rest$9)]; - case 11: - var rest$10 = param[1]; return [11, erase_rel(rest$10)]; - case 12: - var rest$11 = param[1]; return [12, erase_rel(rest$11)]; - case 13: - var rest$12 = param[1]; return [13, erase_rel(rest$12)]; - default: var rest$13 = param[1]; return [14, erase_rel(rest$13)]; - } - } - function concat_fmtty(fmtty1, fmtty2){ - if(typeof fmtty1 === "number") return fmtty2; - switch(fmtty1[0]){ - case 0: - var rest = fmtty1[1]; return [0, concat_fmtty(rest, fmtty2)]; - case 1: - var rest$0 = fmtty1[1]; return [1, concat_fmtty(rest$0, fmtty2)]; - case 2: - var rest$1 = fmtty1[1]; return [2, concat_fmtty(rest$1, fmtty2)]; - case 3: - var rest$2 = fmtty1[1]; return [3, concat_fmtty(rest$2, fmtty2)]; - case 4: - var rest$3 = fmtty1[1]; return [4, concat_fmtty(rest$3, fmtty2)]; - case 5: - var rest$4 = fmtty1[1]; return [5, concat_fmtty(rest$4, fmtty2)]; - case 6: - var rest$5 = fmtty1[1]; return [6, concat_fmtty(rest$5, fmtty2)]; - case 7: - var rest$6 = fmtty1[1]; return [7, concat_fmtty(rest$6, fmtty2)]; - case 8: - var rest$7 = fmtty1[2], ty = fmtty1[1]; - return [8, ty, concat_fmtty(rest$7, fmtty2)]; - case 9: - var rest$8 = fmtty1[3], ty2 = fmtty1[2], ty1 = fmtty1[1]; - return [9, ty1, ty2, concat_fmtty(rest$8, fmtty2)]; - case 10: - var rest$9 = fmtty1[1]; return [10, concat_fmtty(rest$9, fmtty2)]; - case 11: - var rest$10 = fmtty1[1]; return [11, concat_fmtty(rest$10, fmtty2)]; - case 12: - var rest$11 = fmtty1[1]; return [12, concat_fmtty(rest$11, fmtty2)]; - case 13: - var rest$12 = fmtty1[1]; return [13, concat_fmtty(rest$12, fmtty2)]; - default: - var rest$13 = fmtty1[1]; return [14, concat_fmtty(rest$13, fmtty2)]; - } - } - function concat_fmt(fmt1, fmt2){ - if(typeof fmt1 === "number") return fmt2; - switch(fmt1[0]){ - case 0: - var rest = fmt1[1]; return [0, concat_fmt(rest, fmt2)]; - case 1: - var rest$0 = fmt1[1]; return [1, concat_fmt(rest$0, fmt2)]; - case 2: - var rest$1 = fmt1[2], pad = fmt1[1]; - return [2, pad, concat_fmt(rest$1, fmt2)]; - case 3: - var rest$2 = fmt1[2], pad$0 = fmt1[1]; - return [3, pad$0, concat_fmt(rest$2, fmt2)]; - case 4: - var rest$3 = fmt1[4], prec = fmt1[3], pad$1 = fmt1[2], iconv = fmt1[1]; - return [4, iconv, pad$1, prec, concat_fmt(rest$3, fmt2)]; - case 5: - var - rest$4 = fmt1[4], - prec$0 = fmt1[3], - pad$2 = fmt1[2], - iconv$0 = fmt1[1]; - return [5, iconv$0, pad$2, prec$0, concat_fmt(rest$4, fmt2)]; - case 6: - var - rest$5 = fmt1[4], - prec$1 = fmt1[3], - pad$3 = fmt1[2], - iconv$1 = fmt1[1]; - return [6, iconv$1, pad$3, prec$1, concat_fmt(rest$5, fmt2)]; - case 7: - var - rest$6 = fmt1[4], - prec$2 = fmt1[3], - pad$4 = fmt1[2], - iconv$2 = fmt1[1]; - return [7, iconv$2, pad$4, prec$2, concat_fmt(rest$6, fmt2)]; - case 8: - var - rest$7 = fmt1[4], - prec$3 = fmt1[3], - pad$5 = fmt1[2], - fconv = fmt1[1]; - return [8, fconv, pad$5, prec$3, concat_fmt(rest$7, fmt2)]; - case 9: - var rest$8 = fmt1[2], pad$6 = fmt1[1]; - return [9, pad$6, concat_fmt(rest$8, fmt2)]; - case 10: - var rest$9 = fmt1[1]; return [10, concat_fmt(rest$9, fmt2)]; - case 11: - var rest$10 = fmt1[2], str = fmt1[1]; - return [11, str, concat_fmt(rest$10, fmt2)]; - case 12: - var rest$11 = fmt1[2], chr = fmt1[1]; - return [12, chr, concat_fmt(rest$11, fmt2)]; - case 13: - var rest$12 = fmt1[3], fmtty = fmt1[2], pad$7 = fmt1[1]; - return [13, pad$7, fmtty, concat_fmt(rest$12, fmt2)]; - case 14: - var rest$13 = fmt1[3], fmtty$0 = fmt1[2], pad$8 = fmt1[1]; - return [14, pad$8, fmtty$0, concat_fmt(rest$13, fmt2)]; - case 15: - var rest$14 = fmt1[1]; return [15, concat_fmt(rest$14, fmt2)]; - case 16: - var rest$15 = fmt1[1]; return [16, concat_fmt(rest$15, fmt2)]; - case 17: - var rest$16 = fmt1[2], fmting_lit = fmt1[1]; - return [17, fmting_lit, concat_fmt(rest$16, fmt2)]; - case 18: - var rest$17 = fmt1[2], fmting_gen = fmt1[1]; - return [18, fmting_gen, concat_fmt(rest$17, fmt2)]; - case 19: - var rest$18 = fmt1[1]; return [19, concat_fmt(rest$18, fmt2)]; - case 20: - var rest$19 = fmt1[3], char_set = fmt1[2], width_opt = fmt1[1]; - return [20, width_opt, char_set, concat_fmt(rest$19, fmt2)]; - case 21: - var rest$20 = fmt1[2], counter = fmt1[1]; - return [21, counter, concat_fmt(rest$20, fmt2)]; - case 22: - var rest$21 = fmt1[1]; return [22, concat_fmt(rest$21, fmt2)]; - case 23: - var rest$22 = fmt1[2], ign = fmt1[1]; - return [23, ign, concat_fmt(rest$22, fmt2)]; - default: - var rest$23 = fmt1[3], f = fmt1[2], arity = fmt1[1]; - return [24, arity, f, concat_fmt(rest$23, fmt2)]; - } - } - function make(v){return [0, v];} - function get(r){return r[1];} - function compare_and_set(r, seen, v){ - var cur = r[1]; - return cur === seen ? (r[1] = v, 1) : 0; - } - function failwith(s){ - throw caml_maybe_attach_backtrace([0, Failure, s], 1); - } - function invalid_arg(s){ - throw caml_maybe_attach_backtrace([0, Invalid_argument, s], 1); - } - var Exit = [248, _a_, caml_fresh_oo_id(0)]; - function max(x, y){return caml_greaterequal(x, y) ? x : y;} - function abs(x){return 0 <= x ? x : - x | 0;} - var - infinity = caml_int64_float_of_bits(_b_), - neg_infinity = caml_int64_float_of_bits(_c_), - nan = caml_int64_float_of_bits(_d_); - function symbol_concat(s1, s2){return s1 + s2;} - function string_of_bool(b){return b ? _e_ : _f_;} - function string_of_int(n){return "" + n;} - function valid_float_lexem(s){ - var l = caml_ml_string_length(s); - function loop(i){ - var i$0 = i; - for(;;){ - if(l <= i$0) return symbol_concat(s, _g_); - var match = caml_string_get(s, i$0); - a: - { - if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; - return s; - } - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - } - } - return loop(0); - } - function string_of_float(f){ - return valid_float_lexem(caml_format_float("%.12g", f)); - } - function symbol(l1, l2){ - if(! l1) return l2; - var tl = l1[2], hd = l1[1]; - return [0, hd, symbol(tl, l2)]; - } - caml_ml_open_descriptor_in(0); - var - stdout = caml_ml_open_descriptor_out(1), - stderr = caml_ml_open_descriptor_out(2); - function flush_all(param){ - function iter(param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var l = param$0[2], a = param$0[1]; - try{caml_ml_flush(a);} - catch(_p9_){ - var _p8_ = caml_wrap_exception(_p9_); - if(_p8_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_p8_, 0); - } - param$0 = l; - } - } - return iter(caml_ml_out_channels_list(0)); - } - function output_string(oc, s){ - caml_ml_output(oc, s, 0, caml_ml_string_length(s)); - return; - } - function output_substring(oc, s, ofs, len){ - if(0 <= ofs && 0 <= len && (caml_ml_string_length(s) - len | 0) >= ofs) - return caml_ml_output(oc, s, ofs, len); - return invalid_arg(_h_); - } - function prerr_endline(s){ - output_string(stderr, s); - caml_ml_output_char(stderr, 10); - return caml_ml_flush(stderr); - } - var exit_function = make(flush_all); - function at_exit(f){ - for(;;){ - var f_yet_to_run = make(1), old_exit = get(exit_function); - let f_yet_to_run$0 = f_yet_to_run, old_exit$0 = old_exit; - var - new_exit = - function(param){ - if(compare_and_set(f_yet_to_run$0, 1, 0)) caml_call1(f, 0); - return caml_call1(old_exit$0, 0); - }, - success = compare_and_set(exit_function, old_exit, new_exit), - _p7_ = 1 - success; - if(! _p7_) return _p7_; - } - } - function do_at_exit(param){return caml_call1(get(exit_function), 0);} - caml_register_named_value("Pervasives.do_at_exit", do_at_exit); - var max_int = 2147483647; - function _j_(_p6_){return caml_ml_flush(_p6_);} - function _i_(_p5_, _p4_){caml_ml_output_char(_p5_, _p4_); return;} - var - max_array_length = caml_sys_const_max_wosize(0), - max_string_length = (4 * max_array_length | 0) - 1 | 0; - function is_block(a){return 1 - (typeof a === "number" ? 1 : 0);} - var Undefined = [248, _k_, caml_fresh_oo_id(0)]; - function raise_undefined(param){ - throw caml_maybe_attach_backtrace(Undefined, 1); - } - function force_lazy_block(blk){ - var closure = blk[1]; - blk[1] = raise_undefined; - try{ - var result = caml_call1(closure, 0); - caml_obj_make_forward(blk, result); - return result; - } - catch(e$0){ - var e = caml_wrap_exception(e$0); - blk[1] = function(param){throw caml_maybe_attach_backtrace(e, 0);}; - throw caml_maybe_attach_backtrace(e, 0); - } - } - function value(o, default$0){ - if(! o) return default$0; - var v = o[1]; - return v; - } - function map(f, o){ - if(! o) return 0; - var v = o[1]; - return [0, caml_call1(f, v)]; - } - function get_ok(param){ - if(0 !== param[0]) return invalid_arg(_l_); - var v = param[1]; - return v; - } - function map$0(f, e){ - if(0 !== e[0]) return e; - var v = e[1]; - return [0, caml_call1(f, v)]; - } - function of_int_exn(n){ - if(0 <= n && 255 >= n) return n; - return invalid_arg(_m_); - } - function escaped(c){ - a: - { - if(40 <= c){ - if(92 === c) return _n_; - if(127 > c) break a; - } - else{ - if(32 <= c){if(39 <= c) return _o_; break a;} - if(14 > c) - switch(c){ - case 8: - return _p_; - case 9: - return _q_; - case 10: - return _r_; - case 13: - return _s_; - } - } - var s = caml_create_bytes(4); - caml_bytes_unsafe_set(s, 0, 92); - caml_bytes_unsafe_set(s, 1, 48 + (c / 100 | 0) | 0); - caml_bytes_unsafe_set(s, 2, 48 + ((c / 10 | 0) % 10 | 0) | 0); - caml_bytes_unsafe_set(s, 3, 48 + (c % 10 | 0) | 0); - return caml_string_of_bytes(s); - } - var s$0 = caml_create_bytes(1); - caml_bytes_unsafe_set(s$0, 0, c); - return caml_string_of_bytes(s$0); - } - function lowercase_ascii(c){return 25 < c - 65 >>> 0 ? c : c + 32 | 0;} - function uppercase_ascii(c){return 25 < c - 97 >>> 0 ? c : c - 32 | 0;} - function compare(c1, c2){return c1 - c2 | 0;} - function equal(c1, c2){return 0 === compare(c1, c2) ? 1 : 0;} - function hd(param){ - if(! param) return failwith(_t_); - var a = param[1]; - return a; - } - function rev_append(l1, l2){ - var l1$0 = l1, l2$0 = l2; - for(;;){ - if(! l1$0) return l2$0; - var l1$1 = l1$0[2], a = l1$0[1], l2$1 = [0, a, l2$0]; - l1$0 = l1$1; - l2$0 = l2$1; - } - } - function rev(l){return rev_append(l, 0);} - function init_tailrec_aux(acc, i, n, f){ - var acc$0 = acc, i$0 = i; - for(;;){ - if(n <= i$0) return acc$0; - var i$1 = i$0 + 1 | 0, acc$1 = [0, caml_call1(f, i$0), acc$0]; - acc$0 = acc$1; - i$0 = i$1; - } - } - function init_aux(i, n, f){ - if(n <= i) return 0; - var r = caml_call1(f, i); - return [0, r, init_aux(i + 1 | 0, n, f)]; - } - function init(len, f){ - return 0 <= len - ? 50 - < len - ? rev(init_tailrec_aux(0, 0, len, f)) - : init_aux(0, len, f) - : invalid_arg(_u_); - } - function flatten(param){ - if(! param) return 0; - var r = param[2], l = param[1]; - return symbol(l, flatten(r)); - } - function map$1(f, param){ - if(! param) return 0; - var l = param[2], a = param[1], r = caml_call1(f, a); - return [0, r, map$1(f, l)]; - } - function rev_map(f, l){ - function rmap_f(accu, param){ - var accu$0 = accu, param$0 = param; - for(;;){ - if(! param$0) return accu$0; - var - l = param$0[2], - a = param$0[1], - accu$1 = [0, caml_call1(f, a), accu$0]; - accu$0 = accu$1; - param$0 = l; - } - } - return rmap_f(0, l); - } - function iter(f, param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var l = param$0[2], a = param$0[1]; - caml_call1(f, a); - param$0 = l; - } - } - function fold_left(f, accu, l){ - var accu$0 = accu, l$0 = l; - for(;;){ - if(! l$0) return accu$0; - var l$1 = l$0[2], a = l$0[1], accu$1 = caml_call2(f, accu$0, a); - accu$0 = accu$1; - l$0 = l$1; - } - } - function exists(p, param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var l = param$0[2], a = param$0[1], _p3_ = caml_call1(p, a); - if(_p3_) return _p3_; - param$0 = l; - } - } - function memq(x, param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var l = param$0[2], a = param$0[1], _p2_ = a === x ? 1 : 0; - if(_p2_) return _p2_; - param$0 = l; - } - } - function min(x, y){return x <= y ? x : y;} - function max$0(x, y){return y <= x ? x : y;} - function to_string(x){return "" + x;} - function make$0(n, c){ - var s = caml_create_bytes(n); - caml_fill_bytes(s, 0, n, c); - return s; - } - function copy(s){ - var len = caml_ml_bytes_length(s), r = caml_create_bytes(len); - caml_blit_bytes(s, 0, r, 0, len); - return r; - } - function of_string(s){return copy(caml_bytes_of_string(s));} - function sub(s, ofs, len){ - if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs){ - var r = caml_create_bytes(len); - caml_blit_bytes(s, ofs, r, 0, len); - return r; - } - return invalid_arg(_v_); - } - function sub_string(b, ofs, len){ - return caml_string_of_bytes(sub(b, ofs, len)); - } - function blit(s1, ofs1, s2, ofs2, len){ - if - (0 <= len - && - 0 <= ofs1 - && - (caml_ml_bytes_length(s1) - len | 0) >= ofs1 - && 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2){caml_blit_bytes(s1, ofs1, s2, ofs2, len); return;} - return invalid_arg(_w_); - } - function blit_string(s1, ofs1, s2, ofs2, len){ - if - (0 <= len - && - 0 <= ofs1 - && - (caml_ml_string_length(s1) - len | 0) >= ofs1 - && 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2){caml_blit_string(s1, ofs1, s2, ofs2, len); return;} - return invalid_arg(_x_); - } - function escaped$0(s){ - var n = [0, 0], _pV_ = caml_ml_bytes_length(s) - 1 | 0, _pU_ = 0; - if(_pV_ >= 0){ - var i$0 = _pU_; - for(;;){ - var match = caml_bytes_unsafe_get(s, i$0); - a: - { - b: - { - c: - { - if(32 <= match){ - var _pZ_ = match - 34 | 0; - if(58 < _pZ_ >>> 0){ - if(93 <= _pZ_) break c; - } - else if(56 < _pZ_ - 1 >>> 0) break b; - var _p0_ = 1; - break a; - } - if(11 <= match){ - if(13 === match) break b; - } - else if(8 <= match) break b; - } - var _p0_ = 4; - break a; - } - var _p0_ = 2; - } - n[1] = n[1] + _p0_ | 0; - var _p1_ = i$0 + 1 | 0; - if(_pV_ === i$0) break; - i$0 = _p1_; - } - } - if(n[1] === caml_ml_bytes_length(s)) return copy(s); - var s$0 = caml_create_bytes(n[1]); - n[1] = 0; - var _pX_ = caml_ml_bytes_length(s) - 1 | 0, _pW_ = 0; - if(_pX_ >= 0){ - var i = _pW_; - for(;;){ - var c = caml_bytes_unsafe_get(s, i); - a: - { - b: - { - c: - { - if(35 <= c){ - if(92 !== c){if(127 <= c) break c; break b;} - } - else{ - if(32 > c){ - if(14 <= c) break c; - switch(c){ - case 8: - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 98); - break a; - case 9: - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 116); - break a; - case 10: - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 110); - break a; - case 13: - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 114); - break a; - default: break c; - } - } - if(34 > c) break b; - } - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], c); - break a; - } - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 48 + (c / 100 | 0) | 0); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 48 + ((c / 10 | 0) % 10 | 0) | 0); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 48 + (c % 10 | 0) | 0); - break a; - } - caml_bytes_unsafe_set(s$0, n[1], c); - } - n[1]++; - var _pY_ = i + 1 | 0; - if(_pX_ === i) break; - i = _pY_; - } - } - return s$0; - } - function map$2(f, s){ - var l = caml_ml_bytes_length(s); - if(0 === l) return s; - var r = caml_create_bytes(l), _pS_ = l - 1 | 0, _pR_ = 0; - if(_pS_ >= 0){ - var i = _pR_; - for(;;){ - caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i))); - var _pT_ = i + 1 | 0; - if(_pS_ === i) break; - i = _pT_; - } - } - return r; - } - function uppercase_ascii$0(s){return map$2(uppercase_ascii, s);} - function lowercase_ascii$0(s){return map$2(lowercase_ascii, s);} - function unsafe_of_string(_pQ_){return caml_bytes_of_string(_pQ_);} - function unsafe_to_string(_pP_){return caml_string_of_bytes(_pP_);} - function make$1(n, c){return unsafe_to_string(make$0(n, c));} - function ensure_ge(x, y){return y <= x ? x : invalid_arg(_y_);} - function sum_lengths(acc, seplen, param){ - var acc$0 = acc, param$0 = param; - for(;;){ - if(! param$0) return acc$0; - var hd = param$0[1]; - if(! param$0[2]) return caml_ml_string_length(hd) + acc$0 | 0; - var - tl = param$0[2], - acc$1 = - ensure_ge((caml_ml_string_length(hd) + seplen | 0) + acc$0 | 0, acc$0); - acc$0 = acc$1; - param$0 = tl; - } - } - function unsafe_blits(dst, pos, sep, seplen, param){ - var pos$0 = pos, param$0 = param; - for(;;){ - if(! param$0) return dst; - var hd = param$0[1]; - if(! param$0[2]){ - caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); - return dst; - } - var tl = param$0[2]; - caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); - caml_blit_string - (sep, 0, dst, pos$0 + caml_ml_string_length(hd) | 0, seplen); - var pos$1 = (pos$0 + caml_ml_string_length(hd) | 0) + seplen | 0; - pos$0 = pos$1; - param$0 = tl; - } - } - function concat(sep, l){ - if(! l) return _z_; - var seplen = caml_ml_string_length(sep); - return unsafe_to_string - (unsafe_blits - (caml_create_bytes(sum_lengths(0, seplen, l)), - 0, - sep, - seplen, - l)); - } - function escaped$1(s){ - function escape_if_needed(s, n, i){ - var i$0 = i; - for(;;){ - if(n <= i$0) return s; - var _pO_ = caml_string_unsafe_get(s, i$0) - 32 | 0; - a: - { - if(59 < _pO_ >>> 0){ - if(33 < _pO_ - 61 >>> 0) break a; - } - else if(2 === _pO_) break a; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - continue; - } - return unsafe_to_string(escaped$0(unsafe_of_string(s))); - } - } - return escape_if_needed(s, caml_ml_string_length(s), 0); - } - function index_rec(s, lim, i, c){ - var i$0 = i; - for(;;){ - if(lim <= i$0) throw caml_maybe_attach_backtrace(Not_found, 1); - if(caml_string_unsafe_get(s, i$0) === c) return i$0; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - } - } - function index_from(s, i, c){ - var l = caml_ml_string_length(s); - if(0 <= i && l >= i) return index_rec(s, l, i, c); - return invalid_arg(_A_); - } - function contains_from(s, i, c){ - var l = caml_ml_string_length(s); - if(0 <= i && l >= i) - try{index_rec(s, l, i, c); var _pM_ = 1; return _pM_;} - catch(_pN_){ - var _pL_ = caml_wrap_exception(_pN_); - if(_pL_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_pL_, 0); - } - return invalid_arg(_B_); - } - function contains(s, c){return contains_from(s, 0, c);} - function uppercase_ascii$1(s){ - return unsafe_to_string(uppercase_ascii$0(unsafe_of_string(s))); - } - function lowercase_ascii$1(s){ - return unsafe_to_string(lowercase_ascii$0(unsafe_of_string(s))); - } - function compare$0(x, y){return caml_string_compare(x, y);} - function symbol$0(_pK_, _pJ_){return _pK_ == _pJ_ ? 1 : 0;} - function init$0(l, f){ - if(0 === l) return [0]; - if(0 > l) return invalid_arg(_C_); - var res = caml_make_vect(l, caml_call1(f, 0)), _pH_ = l - 1 | 0, _pG_ = 1; - if(_pH_ >= 1){ - var i = _pG_; - for(;;){ - res[1 + i] = caml_call1(f, i); - var _pI_ = i + 1 | 0; - if(_pH_ === i) break; - i = _pI_; - } - } - return res; - } - function fill(a, ofs, len, v){ - if(0 <= ofs && 0 <= len && (a.length - 1 - len | 0) >= ofs){caml_array_fill(a, ofs, len, v); return;} - return invalid_arg(_D_); - } - function blit$0(a1, ofs1, a2, ofs2, len){ - if - (0 <= len - && - 0 <= ofs1 - && - (a1.length - 1 - len | 0) >= ofs1 - && 0 <= ofs2 && (a2.length - 1 - len | 0) >= ofs2){ - caml_array_blit(a1, ofs1, a2, ofs2, len); - return; - } - return invalid_arg(_E_); - } - function iter$0(f, a){ - var _pE_ = a.length - 2 | 0, _pD_ = 0; - if(_pE_ >= 0){ - var i = _pD_; - for(;;){ - caml_call1(f, a[1 + i]); - var _pF_ = i + 1 | 0; - if(_pE_ === i) break; - i = _pF_; - } - } - return; - } - function map$3(f, a){ - var l = a.length - 1; - if(0 === l) return [0]; - var - r = caml_make_vect(l, caml_call1(f, a[1])), - _pB_ = l - 1 | 0, - _pA_ = 1; - if(_pB_ >= 1){ - var i = _pA_; - for(;;){ - r[1 + i] = caml_call1(f, a[1 + i]); - var _pC_ = i + 1 | 0; - if(_pB_ === i) break; - i = _pC_; - } - } - return r; - } - function to_list(a){ - function tolist(i, res){ - var i$0 = i, res$0 = res; - for(;;){ - if(0 > i$0) return res$0; - var res$1 = [0, a[1 + i$0], res$0], i$1 = i$0 - 1 | 0; - i$0 = i$1; - res$0 = res$1; - } - } - return tolist(a.length - 2 | 0, 0); - } - function list_length(accu, param){ - var accu$0 = accu, param$0 = param; - for(;;){ - if(! param$0) return accu$0; - var t = param$0[2], accu$1 = accu$0 + 1 | 0; - accu$0 = accu$1; - param$0 = t; - } - } - function of_list(l){ - if(! l) return [0]; - var tl = l[2], hd = l[1], a = caml_make_vect(list_length(0, l), hd); - function fill(i, param){ - var i$0 = i, param$0 = param; - for(;;){ - if(! param$0) return a; - var tl = param$0[2], hd = param$0[1]; - a[1 + i$0] = hd; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - param$0 = tl; - } - } - return fill(1, tl); - } - var Bottom = [248, _F_, caml_fresh_oo_id(0)]; - function sort(cmp, a){ - function maxson(l, i){ - var i31 = ((i + i | 0) + i | 0) + 1 | 0, x = [0, i31]; - if((i31 + 2 | 0) < l){ - var _pt_ = i31 + 1 | 0, _pu_ = caml_check_bound(a, _pt_)[1 + _pt_]; - if(caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _pu_) < 0) - x[1] = i31 + 1 | 0; - var - _pv_ = i31 + 2 | 0, - _pw_ = caml_check_bound(a, _pv_)[1 + _pv_], - _px_ = x[1]; - if(caml_call2(cmp, caml_check_bound(a, _px_)[1 + _px_], _pw_) < 0) - x[1] = i31 + 2 | 0; - return x[1]; - } - if((i31 + 1 | 0) < l){ - var _py_ = i31 + 1 | 0, _pz_ = caml_check_bound(a, _py_)[1 + _py_]; - if(0 > caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _pz_)) - return i31 + 1 | 0; - } - if(i31 < l) return i31; - throw caml_maybe_attach_backtrace([0, Bottom, i], 1); - } - function trickledown(l, i, e){ - var i$0 = i; - for(;;){ - var j = maxson(l, i$0); - if(0 >= caml_call2(cmp, caml_check_bound(a, j)[1 + j], e)){caml_check_bound(a, i$0)[1 + i$0] = e; return;} - var _ps_ = caml_check_bound(a, j)[1 + j]; - caml_check_bound(a, i$0)[1 + i$0] = _ps_; - i$0 = j; - } - } - function trickle(l, i, e){ - try{trickledown(l, i, e); return;} - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] !== Bottom) throw caml_maybe_attach_backtrace(exn, 0); - var i$0 = exn[2]; - caml_check_bound(a, i$0)[1 + i$0] = e; - return; - } - } - function bubbledown(l, i){ - var i$0 = i; - for(;;){ - var j = maxson(l, i$0), _pr_ = caml_check_bound(a, j)[1 + j]; - caml_check_bound(a, i$0)[1 + i$0] = _pr_; - i$0 = j; - } - } - function bubble(l, i){ - try{var _pq_ = bubbledown(l, i); return _pq_;} - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] !== Bottom) throw caml_maybe_attach_backtrace(exn, 0); - var i$0 = exn[2]; - return i$0; - } - } - function trickleup(i, e){ - var i$0 = i; - for(;;){ - var father = (i$0 - 1 | 0) / 3 | 0; - if(i$0 === father) - throw caml_maybe_attach_backtrace([0, Assert_failure, _G_], 1); - if(0 <= caml_call2(cmp, caml_check_bound(a, father)[1 + father], e)){caml_check_bound(a, i$0)[1 + i$0] = e; return;} - var _pp_ = caml_check_bound(a, father)[1 + father]; - caml_check_bound(a, i$0)[1 + i$0] = _pp_; - if(0 >= father){caml_check_bound(a, 0)[1] = e; return;} - i$0 = father; - } - } - var l = a.length - 1, _pl_ = ((l + 1 | 0) / 3 | 0) - 1 | 0; - if(_pl_ >= 0){ - var i$0 = _pl_; - for(;;){ - trickle(l, i$0, caml_check_bound(a, i$0)[1 + i$0]); - var _po_ = i$0 - 1 | 0; - if(0 === i$0) break; - i$0 = _po_; - } - } - var _pm_ = l - 1 | 0; - if(_pm_ >= 2){ - var i = _pm_; - for(;;){ - var e$0 = caml_check_bound(a, i)[1 + i]; - a[1 + i] = caml_check_bound(a, 0)[1]; - trickleup(bubble(i, 0), e$0); - var _pn_ = i - 1 | 0; - if(2 === i) break; - i = _pn_; - } - } - if(1 < l){ - var e = caml_check_bound(a, 1)[2]; - a[2] = caml_check_bound(a, 0)[1]; - a[1] = e; - } - return; - } - function engine(tbl, state, buf){ - var - result = caml_lex_engine(tbl, state, buf), - _pi_ = 0 <= result ? 1 : 0, - _pj_ = _pi_ ? buf[12] !== dummy_pos ? 1 : 0 : _pi_; - if(_pj_){ - buf[11] = buf[12]; - var _pk_ = buf[12]; - buf[12] = [0, _pk_[1], _pk_[2], _pk_[3], buf[4] + buf[6] | 0]; - } - return result; - } - function from_string(opt, s){ - if(opt) - var sth = opt[1], with_positions = sth; - else - var with_positions = 1; - var - _pg_ = with_positions ? zero_pos : dummy_pos, - _ph_ = with_positions ? zero_pos : dummy_pos; - return [0, - function(lexbuf){lexbuf[9] = 1; return 0;}, - of_string(s), - caml_ml_string_length(s), - 0, - 0, - 0, - 0, - 0, - 1, - [0], - _ph_, - _pg_]; - } - function lexeme(lexbuf){ - var len = lexbuf[6] - lexbuf[5] | 0; - return sub_string(lexbuf[2], lexbuf[5], len); - } - function sub_lexeme(lexbuf, i1, i2){ - var len = i2 - i1 | 0; - return sub_string(lexbuf[2], i1, len); - } - function sub_lexeme_char(lexbuf, i){return caml_bytes_get(lexbuf[2], i);} - function lexeme_char(lexbuf, i){ - return caml_bytes_get(lexbuf[2], lexbuf[5] + i | 0); - } - function Make(Ord){ - function height(param){if(! param) return 0; var h = param[4]; return h;} - function create(l, v, r){ - if(l) var h = l[4], hl = h; else var hl = 0; - if(r) var h$0 = r[4], hr = h$0; else var hr = 0; - var _pf_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _pf_]; - } - function bal(l, v, r){ - if(l) var h = l[4], hl = h; else var hl = 0; - if(r) var h$0 = r[4], hr = h$0; else var hr = 0; - if((hr + 2 | 0) < hl){ - if(! l) return invalid_arg(_I_); - var lr = l[3], lv = l[2], ll = l[1], _pa_ = height(lr); - if(_pa_ <= height(ll)) return create(ll, lv, create(lr, v, r)); - if(! lr) return invalid_arg(_H_); - var lrr = lr[3], lrv = lr[2], lrl = lr[1], _pb_ = create(lrr, v, r); - return create(create(ll, lv, lrl), lrv, _pb_); - } - if((hl + 2 | 0) >= hr){ - var _pe_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _pe_]; - } - if(! r) return invalid_arg(_K_); - var rr = r[3], rv = r[2], rl = r[1], _pc_ = height(rl); - if(_pc_ <= height(rr)) return create(create(l, v, rl), rv, rr); - if(! rl) return invalid_arg(_J_); - var rlr = rl[3], rlv = rl[2], rll = rl[1], _pd_ = create(rlr, rv, rr); - return create(create(l, v, rll), rlv, _pd_); - } - function add(x, t){ - if(! t) return [0, 0, x, 0, 1]; - var r = t[3], v = t[2], l = t[1], c = caml_call2(Ord[1], x, v); - if(0 === c) return t; - if(0 <= c){var rr = add(x, r); return r === rr ? t : bal(l, v, rr);} - var ll = add(x, l); - return l === ll ? t : bal(ll, v, r); - } - function iter(f, param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var r = param$0[3], v = param$0[2], l = param$0[1]; - iter(f, l); - caml_call1(f, v); - param$0 = r; - } - } - function elements_aux(accu, param){ - var accu$0 = accu, param$0 = param; - for(;;){ - if(! param$0) return accu$0; - var - r = param$0[3], - v = param$0[2], - l = param$0[1], - accu$1 = [0, v, elements_aux(accu$0, r)]; - accu$0 = accu$1; - param$0 = l; - } - } - function elements(s){return elements_aux(0, s);} - function find_last_opt_aux(v0, f, param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var r = param$0[3], v0$0 = param$0[2], l = param$0[1]; - param$0 = caml_call1(f, v0$0) ? r : l; - } - } - function find_last_opt(f, param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var r = param$0[3], v = param$0[2], l = param$0[1]; - if(caml_call1(f, v)) return find_last_opt_aux(v, f, r); - param$0 = l; - } - } - return [0, - , - , - , - add, - , - , - , - , - , - , - , - , - , - , - , - , - 0, - , - , - , - , - , - , - , - , - , - , - , - , - , - iter, - , - , - , - , - , - , - , - elements, - , - , - , - , - , - , - , - , - , - , - find_last_opt]; - } - function _L_(_o__){ - var _o$_ = Make(_o__); - return [0, - _o$_[17], - , - , - _o$_[4], - , - , - , - , - , - , - , - , - , - _o$_[31], - , - , - , - , - , - , - , - , - _o$_[39], - , - , - , - , - , - , - , - , - , - , - , - , - _o$_[50]]; - } - function create(param){return [0, 0, 0];} - function clear(s){s[1] = 0; s[2] = 0; return;} - function push(x, s){s[1] = [0, x, s[1]]; s[2] = s[2] + 1 | 0; return 0;} - function pop_opt(s){ - var match = s[1]; - if(! match) return 0; - var tl = match[2], hd = match[1]; - s[1] = tl; - s[2] = s[2] - 1 | 0; - return [0, hd]; - } - function top_opt(s){ - var match = s[1]; - if(! match) return 0; - var hd = match[1]; - return [0, hd]; - } - function iter$1(f, s){return iter(f, s[1]);} - var Empty = [248, _M_, caml_fresh_oo_id(0)]; - function create$0(param){return [0, 0, 0, 0];} - function clear$0(q){q[1] = 0; q[2] = 0; q[3] = 0; return;} - function add(x, q){ - var cell = [0, x, 0], match = q[3]; - return match - ? (q[1] = q[1] + 1 | 0, match[2] = cell, q[3] = cell, 0) - : (q[1] = 1, q[2] = cell, q[3] = cell, 0); - } - function peek_opt(q){ - var match = q[2]; - if(! match) return 0; - var content = match[1]; - return [0, content]; - } - function take(q){ - var _o9_ = q[2]; - if(! _o9_) throw caml_maybe_attach_backtrace(Empty, 1); - if(_o9_[2]){var next = _o9_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return;} - clear$0(q); - return; - } - function take_opt(q){ - var _o8_ = q[2]; - if(! _o8_) return 0; - var content = _o8_[1]; - if(_o8_[2]){ - var next = _o8_[2]; - q[1] = q[1] - 1 | 0; - q[2] = next; - return [0, content]; - } - clear$0(q); - return [0, content]; - } - function length(q){return q[1];} - function create$1(n){ - var - n$0 = 1 <= n ? n : 1, - n$1 = max_string_length < n$0 ? max_string_length : n$0, - s = caml_create_bytes(n$1); - return [0, s, 0, n$1, s]; - } - function contents(b){return sub_string(b[1], 0, b[2]);} - function clear$1(b){b[2] = 0; return;} - function resize(b, more){ - var old_pos = b[2], old_len = b[3], new_len = [0, old_len]; - for(;;){ - if(new_len[1] >= (old_pos + more | 0)) break; - new_len[1] = 2 * new_len[1] | 0; - } - if(max_string_length < new_len[1]) - if((old_pos + more | 0) <= max_string_length) - new_len[1] = max_string_length; - else - failwith(_P_); - var new_buffer = caml_create_bytes(new_len[1]); - blit(b[1], 0, new_buffer, 0, b[2]); - b[1] = new_buffer; - b[3] = new_len[1]; - if((b[2] + more | 0) > b[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _O_], 1); - if((old_pos + more | 0) <= b[3]) return; - throw caml_maybe_attach_backtrace([0, Assert_failure, _N_], 1); - } - function add_char(b, c){ - var pos = b[2]; - if(b[3] <= pos) resize(b, 1); - caml_bytes_unsafe_set(b[1], pos, c); - b[2] = pos + 1 | 0; - return 0; - } - function add_substring(b, s, offset, len){ - var _o5_ = offset < 0 ? 1 : 0; - if(_o5_) - var _o6_ = _o5_; - else - var - _o7_ = len < 0 ? 1 : 0, - _o6_ = _o7_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); - if(_o6_) invalid_arg(_Q_); - var new_position = b[2] + len | 0; - if(b[3] < new_position) resize(b, len); - caml_blit_string(s, offset, b[1], b[2], len); - b[2] = new_position; - return 0; - } - function add_subbytes(b, s, offset, len){ - return add_substring(b, unsafe_to_string(s), offset, len); - } - function write_stringlit(b, s){ - var len = caml_ml_string_length(s), new_position = b[2] + len | 0; - if(b[3] < new_position) resize(b, len); - caml_blit_string(s, 0, b[1], b[2], len); - b[2] = new_position; - return 0; - } - function default_float_precision(fconv){return 5 === fconv[2] ? 12 : -6;} - function buffer_create(init_size){ - return [0, 0, caml_create_bytes(init_size)]; - } - function buffer_check_size(buf, overhead){ - var len = caml_ml_bytes_length(buf[2]), min_len = buf[1] + overhead | 0; - if(len < min_len){ - var - new_len = max$0(len * 2 | 0, min_len), - new_str = caml_create_bytes(new_len); - blit(buf[2], 0, new_str, 0, len); - buf[2] = new_str; - } - return; - } - function buffer_add_char(buf, c){ - buffer_check_size(buf, 1); - caml_bytes_set(buf[2], buf[1], c); - buf[1] = buf[1] + 1 | 0; - return; - } - function buffer_add_string(buf, s){ - var str_len = caml_ml_string_length(s); - buffer_check_size(buf, str_len); - blit_string(s, 0, buf[2], buf[1], str_len); - buf[1] = buf[1] + str_len | 0; - return; - } - function buffer_contents(buf){return sub_string(buf[2], 0, buf[1]);} - function char_of_fconv(opt, fconv){ - if(opt) var sth = opt[1], cF = sth; else var cF = 70; - switch(fconv[2]){ - case 0: - return 102; - case 1: - return 101; - case 2: - return 69; - case 3: - return 103; - case 4: - return 71; - case 5: - return cF; - case 6: - return 104; - case 7: - return 72; - default: return 70; - } - } - function bprint_fconv_flag(buf, fconv){ - switch(fconv[1]){ - case 0: break; - case 1: - buffer_add_char(buf, 43); break; - default: buffer_add_char(buf, 32); - } - if(8 <= fconv[2]) return buffer_add_char(buf, 35); - return; - } - function string_of_formatting_lit(formatting_lit){ - if(typeof formatting_lit === "number") - switch(formatting_lit){ - case 0: - return _R_; - case 1: - return _S_; - case 2: - return _U_; - case 3: - return _V_; - case 4: - return _W_; - case 5: - return _X_; - default: return _Y_; - } - switch(formatting_lit[0]){ - case 0: - var str = formatting_lit[1]; return str; - case 1: - var str$0 = formatting_lit[1]; return str$0; - default: - var c = formatting_lit[1]; return symbol_concat(_Z_, make$1(1, c)); - } - } - function bprint_fmtty(buf, fmtty){ - var fmtty$0 = fmtty; - for(;;){ - if(typeof fmtty$0 === "number") return; - switch(fmtty$0[0]){ - case 0: - var fmtty$1 = fmtty$0[1]; - buffer_add_string(buf, ___); - fmtty$0 = fmtty$1; - break; - case 1: - var fmtty$2 = fmtty$0[1]; - buffer_add_string(buf, _$_); - fmtty$0 = fmtty$2; - break; - case 2: - var fmtty$3 = fmtty$0[1]; - buffer_add_string(buf, _aa_); - fmtty$0 = fmtty$3; - break; - case 3: - var fmtty$4 = fmtty$0[1]; - buffer_add_string(buf, _ab_); - fmtty$0 = fmtty$4; - break; - case 4: - var fmtty$5 = fmtty$0[1]; - buffer_add_string(buf, _ac_); - fmtty$0 = fmtty$5; - break; - case 5: - var fmtty$6 = fmtty$0[1]; - buffer_add_string(buf, _ad_); - fmtty$0 = fmtty$6; - break; - case 6: - var fmtty$7 = fmtty$0[1]; - buffer_add_string(buf, _ae_); - fmtty$0 = fmtty$7; - break; - case 7: - var fmtty$8 = fmtty$0[1]; - buffer_add_string(buf, _af_); - fmtty$0 = fmtty$8; - break; - case 8: - var fmtty$9 = fmtty$0[2], sub_fmtty = fmtty$0[1]; - buffer_add_string(buf, _ag_); - bprint_fmtty(buf, sub_fmtty); - buffer_add_string(buf, _ah_); - fmtty$0 = fmtty$9; - break; - case 9: - var fmtty$10 = fmtty$0[3], sub_fmtty$0 = fmtty$0[1]; - buffer_add_string(buf, _ai_); - bprint_fmtty(buf, sub_fmtty$0); - buffer_add_string(buf, _aj_); - fmtty$0 = fmtty$10; - break; - case 10: - var fmtty$11 = fmtty$0[1]; - buffer_add_string(buf, _ak_); - fmtty$0 = fmtty$11; - break; - case 11: - var fmtty$12 = fmtty$0[1]; - buffer_add_string(buf, _al_); - fmtty$0 = fmtty$12; - break; - case 12: - var fmtty$13 = fmtty$0[1]; - buffer_add_string(buf, _am_); - fmtty$0 = fmtty$13; - break; - case 13: - var fmtty$14 = fmtty$0[1]; - buffer_add_string(buf, _an_); - fmtty$0 = fmtty$14; - break; - default: - var fmtty$15 = fmtty$0[1]; - buffer_add_string(buf, _ao_); - fmtty$0 = fmtty$15; - } - } - } - function symm(param){ - if(typeof param === "number") return 0; - switch(param[0]){ - case 0: - var rest = param[1]; return [0, symm(rest)]; - case 1: - var rest$0 = param[1]; return [1, symm(rest$0)]; - case 2: - var rest$1 = param[1]; return [2, symm(rest$1)]; - case 3: - var rest$2 = param[1]; return [3, symm(rest$2)]; - case 4: - var rest$3 = param[1]; return [4, symm(rest$3)]; - case 5: - var rest$4 = param[1]; return [5, symm(rest$4)]; - case 6: - var rest$5 = param[1]; return [6, symm(rest$5)]; - case 7: - var rest$6 = param[1]; return [7, symm(rest$6)]; - case 8: - var rest$7 = param[2], ty = param[1]; return [8, ty, symm(rest$7)]; - case 9: - var rest$8 = param[3], ty2 = param[2], ty1 = param[1]; - return [9, ty2, ty1, symm(rest$8)]; - case 10: - var rest$9 = param[1]; return [10, symm(rest$9)]; - case 11: - var rest$10 = param[1]; return [11, symm(rest$10)]; - case 12: - var rest$11 = param[1]; return [12, symm(rest$11)]; - case 13: - var rest$12 = param[1]; return [13, symm(rest$12)]; - default: var rest$13 = param[1]; return [14, symm(rest$13)]; - } - } - function fmtty_rel_det(param){ - if(typeof param === "number") - return [0, - function(param){return;}, - function(param){return;}, - function(param){return;}, - function(param){return;}]; - switch(param[0]){ - case 0: - var - rest = param[1], - match = fmtty_rel_det(rest), - de = match[4], - ed = match[3], - af = match[2], - fa = match[1]; - return [0, - function(param){fa(0); return;}, - function(param){af(0); return;}, - ed, - de]; - case 1: - var - rest$0 = param[1], - match$0 = fmtty_rel_det(rest$0), - de$0 = match$0[4], - ed$0 = match$0[3], - af$0 = match$0[2], - fa$0 = match$0[1]; - return [0, - function(param){fa$0(0); return;}, - function(param){af$0(0); return;}, - ed$0, - de$0]; - case 2: - var - rest$1 = param[1], - match$1 = fmtty_rel_det(rest$1), - de$1 = match$1[4], - ed$1 = match$1[3], - af$1 = match$1[2], - fa$1 = match$1[1]; - return [0, - function(param){fa$1(0); return;}, - function(param){af$1(0); return;}, - ed$1, - de$1]; - case 3: - var - rest$2 = param[1], - match$2 = fmtty_rel_det(rest$2), - de$2 = match$2[4], - ed$2 = match$2[3], - af$2 = match$2[2], - fa$2 = match$2[1]; - return [0, - function(param){fa$2(0); return;}, - function(param){af$2(0); return;}, - ed$2, - de$2]; - case 4: - var - rest$3 = param[1], - match$3 = fmtty_rel_det(rest$3), - de$3 = match$3[4], - ed$3 = match$3[3], - af$3 = match$3[2], - fa$3 = match$3[1]; - return [0, - function(param){fa$3(0); return;}, - function(param){af$3(0); return;}, - ed$3, - de$3]; - case 5: - var - rest$4 = param[1], - match$4 = fmtty_rel_det(rest$4), - de$4 = match$4[4], - ed$4 = match$4[3], - af$4 = match$4[2], - fa$4 = match$4[1]; - return [0, - function(param){fa$4(0); return;}, - function(param){af$4(0); return;}, - ed$4, - de$4]; - case 6: - var - rest$5 = param[1], - match$5 = fmtty_rel_det(rest$5), - de$5 = match$5[4], - ed$5 = match$5[3], - af$5 = match$5[2], - fa$5 = match$5[1]; - return [0, - function(param){fa$5(0); return;}, - function(param){af$5(0); return;}, - ed$5, - de$5]; - case 7: - var - rest$6 = param[1], - match$6 = fmtty_rel_det(rest$6), - de$6 = match$6[4], - ed$6 = match$6[3], - af$6 = match$6[2], - fa$6 = match$6[1]; - return [0, - function(param){fa$6(0); return;}, - function(param){af$6(0); return;}, - ed$6, - de$6]; - case 8: - var - rest$7 = param[2], - match$7 = fmtty_rel_det(rest$7), - de$7 = match$7[4], - ed$7 = match$7[3], - af$7 = match$7[2], - fa$7 = match$7[1]; - return [0, - function(param){fa$7(0); return;}, - function(param){af$7(0); return;}, - ed$7, - de$7]; - case 9: - var - rest$8 = param[3], - ty2 = param[2], - ty1 = param[1], - match$8 = fmtty_rel_det(rest$8), - de$8 = match$8[4], - ed$8 = match$8[3], - af$8 = match$8[2], - fa$8 = match$8[1], - ty = trans(symm(ty1), ty2), - match$9 = fmtty_rel_det(ty), - jd = match$9[4], - dj = match$9[3], - ga = match$9[2], - ag = match$9[1]; - return [0, - function(param){fa$8(0); ag(0); return;}, - function(param){ga(0); af$8(0); return;}, - function(param){ed$8(0); dj(0); return;}, - function(param){jd(0); de$8(0); return;}]; - case 10: - var - rest$9 = param[1], - match$10 = fmtty_rel_det(rest$9), - de$9 = match$10[4], - ed$9 = match$10[3], - af$9 = match$10[2], - fa$9 = match$10[1]; - return [0, - function(param){fa$9(0); return;}, - function(param){af$9(0); return;}, - ed$9, - de$9]; - case 11: - var - rest$10 = param[1], - match$11 = fmtty_rel_det(rest$10), - de$10 = match$11[4], - ed$10 = match$11[3], - af$10 = match$11[2], - fa$10 = match$11[1]; - return [0, - function(param){fa$10(0); return;}, - function(param){af$10(0); return;}, - ed$10, - de$10]; - case 12: - var - rest$11 = param[1], - match$12 = fmtty_rel_det(rest$11), - de$11 = match$12[4], - ed$11 = match$12[3], - af$11 = match$12[2], - fa$11 = match$12[1]; - return [0, - function(param){fa$11(0); return;}, - function(param){af$11(0); return;}, - ed$11, - de$11]; - case 13: - var - rest$12 = param[1], - match$13 = fmtty_rel_det(rest$12), - de$12 = match$13[4], - ed$12 = match$13[3], - af$12 = match$13[2], - fa$12 = match$13[1]; - return [0, - function(param){fa$12(0); return;}, - function(param){af$12(0); return;}, - function(param){ed$12(0); return;}, - function(param){de$12(0); return;}]; - default: - var - rest$13 = param[1], - match$14 = fmtty_rel_det(rest$13), - de$13 = match$14[4], - ed$13 = match$14[3], - af$13 = match$14[2], - fa$13 = match$14[1]; - return [0, - function(param){fa$13(0); return;}, - function(param){af$13(0); return;}, - function(param){ed$13(0); return;}, - function(param){de$13(0); return;}]; - } - } - function trans(ty1, ty2){ - a: - { - b: - { - c: - { - d: - { - e: - { - f: - { - g: - { - if(typeof ty1 !== "number"){ - switch(ty1[0]){ - case 0: - var rest1 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 0: - var rest2 = ty2[1]; return [0, trans(rest1, rest2)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 1: - var rest1$0 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 1: - var rest2$0 = ty2[1]; return [1, trans(rest1$0, rest2$0)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 2: - var rest1$1 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 2: - var rest2$1 = ty2[1]; return [2, trans(rest1$1, rest2$1)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 3: - var rest1$2 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 3: - var rest2$2 = ty2[1]; return [3, trans(rest1$2, rest2$2)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 4: - var rest1$3 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 4: - var rest2$3 = ty2[1]; return [4, trans(rest1$3, rest2$3)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 5: - var rest1$4 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 5: - var rest2$4 = ty2[1]; return [5, trans(rest1$4, rest2$4)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 6: - var rest1$5 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 6: - var rest2$5 = ty2[1]; return [6, trans(rest1$5, rest2$5)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 7: - var rest1$6 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 7: - var rest2$6 = ty2[1]; return [7, trans(rest1$6, rest2$6)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 8: - var rest1$7 = ty1[2], ty1$0 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 8: - var - rest2$7 = ty2[2], - ty2$0 = ty2[1], - _o4_ = trans(rest1$7, rest2$7); - return [8, trans(ty1$0, ty2$0), _o4_]; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ay_], 1); - case 9: - var rest1$8 = ty1[3], ty12 = ty1[2], ty11 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 8: - break f; - case 9: - var - rest2$8 = ty2[3], - ty22 = ty2[2], - ty21 = ty2[1], - ty = trans(symm(ty12), ty21), - match = fmtty_rel_det(ty), - f4 = match[4], - f2 = match[2]; - f2(0); - f4(0); - return [9, ty11, ty22, trans(rest1$8, rest2$8)]; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _az_], 1); - case 10: - var rest1$9 = ty1[1]; - if(typeof ty2 !== "number" && 10 === ty2[0]){ - var rest2$9 = ty2[1]; - return [10, trans(rest1$9, rest2$9)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aA_], 1); - case 11: - var rest1$10 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 10: - break a; - case 11: - var rest2$10 = ty2[1]; - return [11, trans(rest1$10, rest2$10)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aB_], 1); - case 12: - var rest1$11 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 10: - break a; - case 11: - break b; - case 12: - var rest2$11 = ty2[1]; - return [12, trans(rest1$11, rest2$11)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aC_], 1); - case 13: - var rest1$12 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - var rest2$12 = ty2[1]; - return [13, trans(rest1$12, rest2$12)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aD_], 1); - default: - var rest1$13 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - var rest2$13 = ty2[1]; - return [14, trans(rest1$13, rest2$13)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aE_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ax_], 1); - } - if(typeof ty2 === "number") return 0; - switch(ty2[0]){ - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - case 8: - break f; - case 9: break; - default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _ap_], 1); - } - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ar_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aq_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aw_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _av_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _au_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _at_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _as_], 1); - } - var Type_mismatch = [248, _aF_, caml_fresh_oo_id(0)]; - function type_padding(pad, fmtty){ - if(typeof pad === "number") return [0, 0, fmtty]; - if(0 === pad[0]){ - var w = pad[2], padty = pad[1]; - return [0, [0, padty, w], fmtty]; - } - if(typeof fmtty !== "number" && 2 === fmtty[0]){ - var rest = fmtty[1], padty$0 = pad[1]; - return [0, [1, padty$0], rest]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - } - function type_padprec(pad, prec, fmtty){ - var match = type_padding(pad, fmtty); - if(typeof prec !== "number"){ - var rest$1 = match[2], pad$2 = match[1], p = prec[1]; - return [0, pad$2, [0, p], rest$1]; - } - if(! prec){ - var rest$0 = match[2], pad$1 = match[1]; - return [0, pad$1, 0, rest$0]; - } - var match$0 = match[2]; - if(typeof match$0 !== "number" && 2 === match$0[0]){ - var rest = match$0[1], pad$0 = match[1]; - return [0, pad$0, 1, rest]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - } - function type_format(fmt, fmtty){ - var _o3_ = type_format_gen(fmt, fmtty); - if(typeof _o3_[2] !== "number") - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var fmt$0 = _o3_[1]; - return fmt$0; - } - function type_format_gen(fmt, fmtty){ - if(typeof fmt === "number") return [0, 0, fmtty]; - switch(fmt[0]){ - case 0: - if(typeof fmtty !== "number" && 0 === fmtty[0]){ - var - fmtty_rest = fmtty[1], - fmt_rest = fmt[1], - match = type_format_gen(fmt_rest, fmtty_rest), - fmtty$0 = match[2], - fmt$0 = match[1]; - return [0, [0, fmt$0], fmtty$0]; - } - break; - case 1: - if(typeof fmtty !== "number" && 0 === fmtty[0]){ - var - fmtty_rest$0 = fmtty[1], - fmt_rest$0 = fmt[1], - match$0 = type_format_gen(fmt_rest$0, fmtty_rest$0), - fmtty$1 = match$0[2], - fmt$1 = match$0[1]; - return [0, [1, fmt$1], fmtty$1]; - } - break; - case 2: - var - fmt_rest$1 = fmt[2], - pad = fmt[1], - match$1 = type_padding(pad, fmtty), - pad$0 = match$1[1], - match$2 = match$1[2]; - if(typeof match$2 !== "number" && 1 === match$2[0]){ - var - fmtty_rest$1 = match$2[1], - match$3 = type_format_gen(fmt_rest$1, fmtty_rest$1), - fmtty$2 = match$3[2], - fmt$2 = match$3[1]; - return [0, [2, pad$0, fmt$2], fmtty$2]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 3: - var - fmt_rest$2 = fmt[2], - pad$1 = fmt[1], - match$4 = type_padding(pad$1, fmtty), - pad$2 = match$4[1], - match$5 = match$4[2]; - if(typeof match$5 !== "number" && 1 === match$5[0]){ - var - fmtty_rest$2 = match$5[1], - match$6 = type_format_gen(fmt_rest$2, fmtty_rest$2), - fmtty$3 = match$6[2], - fmt$3 = match$6[1]; - return [0, [3, pad$2, fmt$3], fmtty$3]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 4: - var - fmt_rest$3 = fmt[4], - prec = fmt[3], - pad$3 = fmt[2], - iconv = fmt[1], - match$7 = type_padprec(pad$3, prec, fmtty), - pad$4 = match$7[1], - match$8 = match$7[3]; - if(typeof match$8 !== "number" && 2 === match$8[0]){ - var - fmtty_rest$3 = match$8[1], - prec$0 = match$7[2], - match$9 = type_format_gen(fmt_rest$3, fmtty_rest$3), - fmtty$4 = match$9[2], - fmt$4 = match$9[1]; - return [0, [4, iconv, pad$4, prec$0, fmt$4], fmtty$4]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 5: - var - fmt_rest$4 = fmt[4], - prec$1 = fmt[3], - pad$5 = fmt[2], - iconv$0 = fmt[1], - match$10 = type_padprec(pad$5, prec$1, fmtty), - pad$6 = match$10[1], - match$11 = match$10[3]; - if(typeof match$11 !== "number" && 3 === match$11[0]){ - var - fmtty_rest$4 = match$11[1], - prec$2 = match$10[2], - match$12 = type_format_gen(fmt_rest$4, fmtty_rest$4), - fmtty$5 = match$12[2], - fmt$5 = match$12[1]; - return [0, [5, iconv$0, pad$6, prec$2, fmt$5], fmtty$5]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 6: - var - fmt_rest$5 = fmt[4], - prec$3 = fmt[3], - pad$7 = fmt[2], - iconv$1 = fmt[1], - match$13 = type_padprec(pad$7, prec$3, fmtty), - pad$8 = match$13[1], - match$14 = match$13[3]; - if(typeof match$14 !== "number" && 4 === match$14[0]){ - var - fmtty_rest$5 = match$14[1], - prec$4 = match$13[2], - match$15 = type_format_gen(fmt_rest$5, fmtty_rest$5), - fmtty$6 = match$15[2], - fmt$6 = match$15[1]; - return [0, [6, iconv$1, pad$8, prec$4, fmt$6], fmtty$6]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 7: - var - fmt_rest$6 = fmt[4], - prec$5 = fmt[3], - pad$9 = fmt[2], - iconv$2 = fmt[1], - match$16 = type_padprec(pad$9, prec$5, fmtty), - pad$10 = match$16[1], - match$17 = match$16[3]; - if(typeof match$17 !== "number" && 5 === match$17[0]){ - var - fmtty_rest$6 = match$17[1], - prec$6 = match$16[2], - match$18 = type_format_gen(fmt_rest$6, fmtty_rest$6), - fmtty$7 = match$18[2], - fmt$7 = match$18[1]; - return [0, [7, iconv$2, pad$10, prec$6, fmt$7], fmtty$7]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 8: - var - fmt_rest$7 = fmt[4], - prec$7 = fmt[3], - pad$11 = fmt[2], - fconv = fmt[1], - match$19 = type_padprec(pad$11, prec$7, fmtty), - pad$12 = match$19[1], - match$20 = match$19[3]; - if(typeof match$20 !== "number" && 6 === match$20[0]){ - var - fmtty_rest$7 = match$20[1], - prec$8 = match$19[2], - match$21 = type_format_gen(fmt_rest$7, fmtty_rest$7), - fmtty$8 = match$21[2], - fmt$8 = match$21[1]; - return [0, [8, fconv, pad$12, prec$8, fmt$8], fmtty$8]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 9: - var - fmt_rest$8 = fmt[2], - pad$13 = fmt[1], - match$22 = type_padding(pad$13, fmtty), - pad$14 = match$22[1], - match$23 = match$22[2]; - if(typeof match$23 !== "number" && 7 === match$23[0]){ - var - fmtty_rest$8 = match$23[1], - match$24 = type_format_gen(fmt_rest$8, fmtty_rest$8), - fmtty$9 = match$24[2], - fmt$9 = match$24[1]; - return [0, [9, pad$14, fmt$9], fmtty$9]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 10: - var - fmt_rest$9 = fmt[1], - match$25 = type_format_gen(fmt_rest$9, fmtty), - fmtty$10 = match$25[2], - fmt$10 = match$25[1]; - return [0, [10, fmt$10], fmtty$10]; - case 11: - var - fmt_rest$10 = fmt[2], - str = fmt[1], - match$26 = type_format_gen(fmt_rest$10, fmtty), - fmtty$11 = match$26[2], - fmt$11 = match$26[1]; - return [0, [11, str, fmt$11], fmtty$11]; - case 12: - var - fmt_rest$11 = fmt[2], - chr = fmt[1], - match$27 = type_format_gen(fmt_rest$11, fmtty), - fmtty$12 = match$27[2], - fmt$12 = match$27[1]; - return [0, [12, chr, fmt$12], fmtty$12]; - case 13: - if(typeof fmtty !== "number" && 8 === fmtty[0]){ - var - fmtty_rest$9 = fmtty[2], - sub_fmtty = fmtty[1], - fmt_rest$12 = fmt[3], - sub_fmtty$0 = fmt[2], - pad_opt = fmt[1]; - if(caml_notequal([0, sub_fmtty$0], [0, sub_fmtty])) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var - match$28 = type_format_gen(fmt_rest$12, fmtty_rest$9), - fmtty$13 = match$28[2], - fmt$13 = match$28[1]; - return [0, [13, pad_opt, sub_fmtty, fmt$13], fmtty$13]; - } - break; - case 14: - if(typeof fmtty !== "number" && 9 === fmtty[0]){ - var - fmtty_rest$10 = fmtty[3], - sub_fmtty1 = fmtty[1], - fmt_rest$13 = fmt[3], - sub_fmtty$1 = fmt[2], - pad_opt$0 = fmt[1], - _o2_ = [0, erase_rel(sub_fmtty1)]; - if(caml_notequal([0, erase_rel(sub_fmtty$1)], _o2_)) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var - match$29 = type_format_gen(fmt_rest$13, erase_rel(fmtty_rest$10)), - fmtty$14 = match$29[2], - fmt$14 = match$29[1]; - return [0, [14, pad_opt$0, sub_fmtty1, fmt$14], fmtty$14]; - } - break; - case 15: - if(typeof fmtty !== "number" && 10 === fmtty[0]){ - var - fmtty_rest$11 = fmtty[1], - fmt_rest$14 = fmt[1], - match$30 = type_format_gen(fmt_rest$14, fmtty_rest$11), - fmtty$15 = match$30[2], - fmt$15 = match$30[1]; - return [0, [15, fmt$15], fmtty$15]; - } - break; - case 16: - if(typeof fmtty !== "number" && 11 === fmtty[0]){ - var - fmtty_rest$12 = fmtty[1], - fmt_rest$15 = fmt[1], - match$31 = type_format_gen(fmt_rest$15, fmtty_rest$12), - fmtty$16 = match$31[2], - fmt$16 = match$31[1]; - return [0, [16, fmt$16], fmtty$16]; - } - break; - case 17: - var - fmt_rest$16 = fmt[2], - formatting_lit = fmt[1], - match$32 = type_format_gen(fmt_rest$16, fmtty), - fmtty$17 = match$32[2], - fmt$17 = match$32[1]; - return [0, [17, formatting_lit, fmt$17], fmtty$17]; - case 18: - var fmt_rest$17 = fmt[2], formatting_gen = fmt[1]; - return type_formatting_gen(formatting_gen, fmt_rest$17, fmtty); - case 19: - if(typeof fmtty !== "number" && 13 === fmtty[0]){ - var - fmtty_rest$13 = fmtty[1], - fmt_rest$18 = fmt[1], - match$33 = type_format_gen(fmt_rest$18, fmtty_rest$13), - fmtty$18 = match$33[2], - fmt$18 = match$33[1]; - return [0, [19, fmt$18], fmtty$18]; - } - break; - case 20: - if(typeof fmtty !== "number" && 1 === fmtty[0]){ - var - fmtty_rest$14 = fmtty[1], - fmt_rest$19 = fmt[3], - char_set = fmt[2], - width_opt = fmt[1], - match$34 = type_format_gen(fmt_rest$19, fmtty_rest$14), - fmtty$19 = match$34[2], - fmt$19 = match$34[1]; - return [0, [20, width_opt, char_set, fmt$19], fmtty$19]; - } - break; - case 21: - if(typeof fmtty !== "number" && 2 === fmtty[0]){ - var - fmtty_rest$15 = fmtty[1], - fmt_rest$20 = fmt[2], - counter = fmt[1], - match$35 = type_format_gen(fmt_rest$20, fmtty_rest$15), - fmtty$20 = match$35[2], - fmt$20 = match$35[1]; - return [0, [21, counter, fmt$20], fmtty$20]; - } - break; - case 23: - var rest = fmt[2], ign = fmt[1]; - return type_ignored_param(ign, rest, fmtty); - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - } - function type_formatting_gen(formatting_gen, fmt0, fmtty0){ - if(0 === formatting_gen[0]){ - var - match = formatting_gen[1], - str = match[2], - fmt1 = match[1], - match$0 = type_format_gen(fmt1, fmtty0), - fmtty2 = match$0[2], - fmt2 = match$0[1], - match$1 = type_format_gen(fmt0, fmtty2), - fmtty3 = match$1[2], - fmt3 = match$1[1]; - return [0, [18, [0, [0, fmt2, str]], fmt3], fmtty3]; - } - var - match$2 = formatting_gen[1], - str$0 = match$2[2], - fmt1$0 = match$2[1], - match$3 = type_format_gen(fmt1$0, fmtty0), - fmtty2$0 = match$3[2], - fmt2$0 = match$3[1], - match$4 = type_format_gen(fmt0, fmtty2$0), - fmtty3$0 = match$4[2], - fmt3$0 = match$4[1]; - return [0, [18, [1, [0, fmt2$0, str$0]], fmt3$0], fmtty3$0]; - } - function type_ignored_param(ign, fmt, fmtty){ - if(typeof ign !== "number") - switch(ign[0]){ - case 0: - return type_ignored_param_one(ign, fmt, fmtty); - case 1: - return type_ignored_param_one(ign, fmt, fmtty); - case 2: - return type_ignored_param_one(ign, fmt, fmtty); - case 3: - return type_ignored_param_one(ign, fmt, fmtty); - case 4: - return type_ignored_param_one(ign, fmt, fmtty); - case 5: - return type_ignored_param_one(ign, fmt, fmtty); - case 6: - return type_ignored_param_one(ign, fmt, fmtty); - case 7: - return type_ignored_param_one(ign, fmt, fmtty); - case 8: - var sub_fmtty = ign[2], pad_opt = ign[1]; - return type_ignored_param_one([8, pad_opt, sub_fmtty], fmt, fmtty); - case 9: - var - sub_fmtty$0 = ign[2], - pad_opt$0 = ign[1], - _o1_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), - match$0 = _o1_[2], - fmtty$1 = match$0[2], - fmt$1 = match$0[1], - sub_fmtty$1 = _o1_[1]; - return [0, [23, [9, pad_opt$0, sub_fmtty$1], fmt$1], fmtty$1]; - case 10: - return type_ignored_param_one(ign, fmt, fmtty); - default: return type_ignored_param_one(ign, fmt, fmtty); - } - switch(ign){ - case 0: - return type_ignored_param_one(ign, fmt, fmtty); - case 1: - return type_ignored_param_one(ign, fmt, fmtty); - case 2: - if(typeof fmtty !== "number" && 14 === fmtty[0]){ - var - fmtty_rest = fmtty[1], - match = type_format_gen(fmt, fmtty_rest), - fmtty$0 = match[2], - fmt$0 = match[1]; - return [0, [23, 2, fmt$0], fmtty$0]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - default: return type_ignored_param_one(ign, fmt, fmtty); - } - } - function type_ignored_param_one(ign, fmt, fmtty){ - var - match = type_format_gen(fmt, fmtty), - fmtty$0 = match[2], - fmt$0 = match[1]; - return [0, [23, ign, fmt$0], fmtty$0]; - } - function type_ignored_format_substituti(sub_fmtty, fmt, fmtty){ - if(typeof sub_fmtty === "number") - return [0, 0, type_format_gen(fmt, fmtty)]; - switch(sub_fmtty[0]){ - case 0: - if(typeof fmtty !== "number" && 0 === fmtty[0]){ - var - fmtty_rest = fmtty[1], - sub_fmtty_rest = sub_fmtty[1], - match = - type_ignored_format_substituti(sub_fmtty_rest, fmt, fmtty_rest), - fmt$0 = match[2], - sub_fmtty_rest$0 = match[1]; - return [0, [0, sub_fmtty_rest$0], fmt$0]; - } - break; - case 1: - if(typeof fmtty !== "number" && 1 === fmtty[0]){ - var - fmtty_rest$0 = fmtty[1], - sub_fmtty_rest$1 = sub_fmtty[1], - match$0 = - type_ignored_format_substituti(sub_fmtty_rest$1, fmt, fmtty_rest$0), - fmt$1 = match$0[2], - sub_fmtty_rest$2 = match$0[1]; - return [0, [1, sub_fmtty_rest$2], fmt$1]; - } - break; - case 2: - if(typeof fmtty !== "number" && 2 === fmtty[0]){ - var - fmtty_rest$1 = fmtty[1], - sub_fmtty_rest$3 = sub_fmtty[1], - match$1 = - type_ignored_format_substituti(sub_fmtty_rest$3, fmt, fmtty_rest$1), - fmt$2 = match$1[2], - sub_fmtty_rest$4 = match$1[1]; - return [0, [2, sub_fmtty_rest$4], fmt$2]; - } - break; - case 3: - if(typeof fmtty !== "number" && 3 === fmtty[0]){ - var - fmtty_rest$2 = fmtty[1], - sub_fmtty_rest$5 = sub_fmtty[1], - match$2 = - type_ignored_format_substituti(sub_fmtty_rest$5, fmt, fmtty_rest$2), - fmt$3 = match$2[2], - sub_fmtty_rest$6 = match$2[1]; - return [0, [3, sub_fmtty_rest$6], fmt$3]; - } - break; - case 4: - if(typeof fmtty !== "number" && 4 === fmtty[0]){ - var - fmtty_rest$3 = fmtty[1], - sub_fmtty_rest$7 = sub_fmtty[1], - match$3 = - type_ignored_format_substituti(sub_fmtty_rest$7, fmt, fmtty_rest$3), - fmt$4 = match$3[2], - sub_fmtty_rest$8 = match$3[1]; - return [0, [4, sub_fmtty_rest$8], fmt$4]; - } - break; - case 5: - if(typeof fmtty !== "number" && 5 === fmtty[0]){ - var - fmtty_rest$4 = fmtty[1], - sub_fmtty_rest$9 = sub_fmtty[1], - match$4 = - type_ignored_format_substituti(sub_fmtty_rest$9, fmt, fmtty_rest$4), - fmt$5 = match$4[2], - sub_fmtty_rest$10 = match$4[1]; - return [0, [5, sub_fmtty_rest$10], fmt$5]; - } - break; - case 6: - if(typeof fmtty !== "number" && 6 === fmtty[0]){ - var - fmtty_rest$5 = fmtty[1], - sub_fmtty_rest$11 = sub_fmtty[1], - match$5 = - type_ignored_format_substituti - (sub_fmtty_rest$11, fmt, fmtty_rest$5), - fmt$6 = match$5[2], - sub_fmtty_rest$12 = match$5[1]; - return [0, [6, sub_fmtty_rest$12], fmt$6]; - } - break; - case 7: - if(typeof fmtty !== "number" && 7 === fmtty[0]){ - var - fmtty_rest$6 = fmtty[1], - sub_fmtty_rest$13 = sub_fmtty[1], - match$6 = - type_ignored_format_substituti - (sub_fmtty_rest$13, fmt, fmtty_rest$6), - fmt$7 = match$6[2], - sub_fmtty_rest$14 = match$6[1]; - return [0, [7, sub_fmtty_rest$14], fmt$7]; - } - break; - case 8: - if(typeof fmtty !== "number" && 8 === fmtty[0]){ - var - fmtty_rest$7 = fmtty[2], - sub2_fmtty = fmtty[1], - sub_fmtty_rest$15 = sub_fmtty[2], - sub2_fmtty$0 = sub_fmtty[1]; - if(caml_notequal([0, sub2_fmtty$0], [0, sub2_fmtty])) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var - match$7 = - type_ignored_format_substituti - (sub_fmtty_rest$15, fmt, fmtty_rest$7), - fmt$8 = match$7[2], - sub_fmtty_rest$16 = match$7[1]; - return [0, [8, sub2_fmtty, sub_fmtty_rest$16], fmt$8]; - } - break; - case 9: - if(typeof fmtty !== "number" && 9 === fmtty[0]){ - var - fmtty_rest$8 = fmtty[3], - sub2_fmtty$1 = fmtty[2], - sub1_fmtty = fmtty[1], - sub_fmtty_rest$17 = sub_fmtty[3], - sub2_fmtty$2 = sub_fmtty[2], - sub1_fmtty$0 = sub_fmtty[1], - _oZ_ = [0, erase_rel(sub1_fmtty)]; - if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _oZ_)) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var _o0_ = [0, erase_rel(sub2_fmtty$1)]; - if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _o0_)) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var - sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1), - match$8 = fmtty_rel_det(sub_fmtty$0), - f4 = match$8[4], - f2 = match$8[2]; - f2(0); - f4(0); - var - match$9 = - type_ignored_format_substituti - (erase_rel(sub_fmtty_rest$17), fmt, fmtty_rest$8), - fmt$9 = match$9[2], - sub_fmtty_rest$18 = match$9[1]; - return [0, - [9, sub1_fmtty, sub2_fmtty$1, symm(sub_fmtty_rest$18)], - fmt$9]; - } - break; - case 10: - if(typeof fmtty !== "number" && 10 === fmtty[0]){ - var - fmtty_rest$9 = fmtty[1], - sub_fmtty_rest$19 = sub_fmtty[1], - match$10 = - type_ignored_format_substituti - (sub_fmtty_rest$19, fmt, fmtty_rest$9), - fmt$10 = match$10[2], - sub_fmtty_rest$20 = match$10[1]; - return [0, [10, sub_fmtty_rest$20], fmt$10]; - } - break; - case 11: - if(typeof fmtty !== "number" && 11 === fmtty[0]){ - var - fmtty_rest$10 = fmtty[1], - sub_fmtty_rest$21 = sub_fmtty[1], - match$11 = - type_ignored_format_substituti - (sub_fmtty_rest$21, fmt, fmtty_rest$10), - fmt$11 = match$11[2], - sub_fmtty_rest$22 = match$11[1]; - return [0, [11, sub_fmtty_rest$22], fmt$11]; - } - break; - case 13: - if(typeof fmtty !== "number" && 13 === fmtty[0]){ - var - fmtty_rest$11 = fmtty[1], - sub_fmtty_rest$23 = sub_fmtty[1], - match$12 = - type_ignored_format_substituti - (sub_fmtty_rest$23, fmt, fmtty_rest$11), - fmt$12 = match$12[2], - sub_fmtty_rest$24 = match$12[1]; - return [0, [13, sub_fmtty_rest$24], fmt$12]; - } - break; - case 14: - if(typeof fmtty !== "number" && 14 === fmtty[0]){ - var - fmtty_rest$12 = fmtty[1], - sub_fmtty_rest$25 = sub_fmtty[1], - match$13 = - type_ignored_format_substituti - (sub_fmtty_rest$25, fmt, fmtty_rest$12), - fmt$13 = match$13[2], - sub_fmtty_rest$26 = match$13[1]; - return [0, [14, sub_fmtty_rest$26], fmt$13]; - } - break; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - } - function recast(fmt, fmtty){ - return type_format(fmt, erase_rel(symm(fmtty))); - } - function fix_padding(padty, width, str){ - var - len = caml_ml_string_length(str), - padty$0 = 0 <= width ? padty : 0, - width$0 = abs(width); - if(width$0 <= len) return str; - var _oY_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _oY_); - switch(padty$0){ - case 0: - blit_string(str, 0, res, 0, len); break; - case 1: - blit_string(str, 0, res, width$0 - len | 0, len); break; - default: - a: - if(0 < len){ - if - (43 !== caml_string_get(str, 0) - && 45 !== caml_string_get(str, 0) && 32 !== caml_string_get(str, 0)) - break a; - caml_bytes_set(res, 0, caml_string_get(str, 0)); - blit_string(str, 1, res, (width$0 - len | 0) + 1 | 0, len - 1 | 0); - break; - } - a: - if(1 < len && 48 === caml_string_get(str, 0)){ - if(120 !== caml_string_get(str, 1) && 88 !== caml_string_get(str, 1)) - break a; - caml_bytes_set(res, 1, caml_string_get(str, 1)); - blit_string(str, 2, res, (width$0 - len | 0) + 2 | 0, len - 2 | 0); - break; - } - blit_string(str, 0, res, width$0 - len | 0, len); - } - return unsafe_to_string(res); - } - function fix_int_precision(prec, str){ - var - prec$0 = abs(prec), - len = caml_ml_string_length(str), - c = caml_string_get(str, 0); - a: - { - b: - { - if(58 > c){ - if(32 !== c){ - if(43 > c) break a; - switch(c - 43 | 0){ - case 5: - c: - if(len < (prec$0 + 2 | 0) && 1 < len){ - if - (120 !== caml_string_get(str, 1) - && 88 !== caml_string_get(str, 1)) - break c; - var res$1 = make$0(prec$0 + 2 | 0, 48); - caml_bytes_set(res$1, 1, caml_string_get(str, 1)); - blit_string - (str, 2, res$1, (prec$0 - len | 0) + 4 | 0, len - 2 | 0); - return unsafe_to_string(res$1); - } - break b; - case 0: - case 2: break; - case 1: - case 3: - case 4: - break a; - default: break b; - } - } - if(len >= (prec$0 + 1 | 0)) break a; - var res$0 = make$0(prec$0 + 1 | 0, 48); - caml_bytes_set(res$0, 0, c); - blit_string(str, 1, res$0, (prec$0 - len | 0) + 2 | 0, len - 1 | 0); - return unsafe_to_string(res$0); - } - if(71 <= c){if(5 < c - 97 >>> 0) break a;} else if(65 > c) break a; - } - if(len < prec$0){ - var res = make$0(prec$0, 48); - blit_string(str, 0, res, prec$0 - len | 0, len); - return unsafe_to_string(res); - } - } - return str; - } - function string_to_caml_string(str){ - var - str$0 = escaped$1(str), - l = caml_ml_string_length(str$0), - res = make$0(l + 2 | 0, 34); - caml_blit_string(str$0, 0, res, 1, l); - return unsafe_to_string(res); - } - function format_of_iconv(param){ - switch(param){ - case 1: - return _aH_; - case 2: - return _aI_; - case 4: - return _aK_; - case 5: - return _aL_; - case 6: - return _aM_; - case 7: - return _aN_; - case 8: - return _aO_; - case 9: - return _aP_; - case 10: - return _aQ_; - case 11: - return _aR_; - case 0: - case 13: - return _aG_; - case 3: - case 14: - return _aJ_; - default: return _aS_; - } - } - function format_of_iconvL(param){ - switch(param){ - case 1: - return _aU_; - case 2: - return _aV_; - case 4: - return _aX_; - case 5: - return _aY_; - case 6: - return _aZ_; - case 7: - return _a0_; - case 8: - return _a1_; - case 9: - return _a2_; - case 10: - return _a3_; - case 11: - return _a4_; - case 0: - case 13: - return _aT_; - case 3: - case 14: - return _aW_; - default: return _a5_; - } - } - function format_of_iconvl(param){ - switch(param){ - case 1: - return _a7_; - case 2: - return _a8_; - case 4: - return _a__; - case 5: - return _a$_; - case 6: - return _ba_; - case 7: - return _bb_; - case 8: - return _bc_; - case 9: - return _bd_; - case 10: - return _be_; - case 11: - return _bf_; - case 0: - case 13: - return _a6_; - case 3: - case 14: - return _a9_; - default: return _bg_; - } - } - function format_of_iconvn(param){ - switch(param){ - case 1: - return _bi_; - case 2: - return _bj_; - case 4: - return _bl_; - case 5: - return _bm_; - case 6: - return _bn_; - case 7: - return _bo_; - case 8: - return _bp_; - case 9: - return _bq_; - case 10: - return _br_; - case 11: - return _bs_; - case 0: - case 13: - return _bh_; - case 3: - case 14: - return _bk_; - default: return _bt_; - } - } - function format_of_fconv(fconv, prec){ - var - prec$0 = abs(prec), - symb = char_of_fconv(_bu_, fconv), - buf = buffer_create(16); - buffer_add_char(buf, 37); - bprint_fconv_flag(buf, fconv); - buffer_add_char(buf, 46); - buffer_add_string(buf, to_string(prec$0)); - buffer_add_char(buf, symb); - return buffer_contents(buf); - } - function transform_int_alt(iconv, s){ - if(13 > iconv) return s; - var n = [0, 0], _oT_ = caml_ml_string_length(s) - 1 | 0, _oS_ = 0; - if(_oT_ >= 0){ - var i$0 = _oS_; - for(;;){ - if(9 >= caml_string_unsafe_get(s, i$0) - 48 >>> 0) n[1]++; - var _oX_ = i$0 + 1 | 0; - if(_oT_ === i$0) break; - i$0 = _oX_; - } - } - var - digits = n[1], - buf = - caml_create_bytes - (caml_ml_string_length(s) + ((digits - 1 | 0) / 3 | 0) | 0), - pos = [0, 0]; - function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++; return;} - var - left = [0, ((digits - 1 | 0) % 3 | 0) + 1 | 0], - _oV_ = caml_ml_string_length(s) - 1 | 0, - _oU_ = 0; - if(_oV_ >= 0){ - var i = _oU_; - for(;;){ - var c = caml_string_unsafe_get(s, i); - if(9 < c - 48 >>> 0) - put(c); - else{if(0 === left[1]){put(95); left[1] = 3;} left[1]--; put(c);} - var _oW_ = i + 1 | 0; - if(_oV_ === i) break; - i = _oW_; - } - } - return unsafe_to_string(buf); - } - function convert_int(iconv, n){ - return transform_int_alt - (iconv, caml_format_int(format_of_iconv(iconv), n)); - } - function convert_int32(iconv, n){ - return transform_int_alt - (iconv, caml_format_int(format_of_iconvl(iconv), n)); - } - function convert_nativeint(iconv, n){ - return transform_int_alt - (iconv, caml_format_int(format_of_iconvn(iconv), n)); - } - function convert_int64(iconv, n){ - return transform_int_alt - (iconv, caml_int64_format(format_of_iconvL(iconv), n)); - } - function convert_float(fconv, prec, x){ - function hex(param){ - switch(fconv[1]){ - case 0: - var sign = 45; break; - case 1: - var sign = 43; break; - default: var sign = 32; - } - return caml_hexstring_of_float(x, prec, sign); - } - function add_dot_if_needed(str){ - var len = caml_ml_string_length(str); - function is_valid(i){ - var i$0 = i; - for(;;){ - if(i$0 === len) return 0; - var _oR_ = caml_string_get(str, i$0) - 46 | 0; - a: - { - if(23 < _oR_ >>> 0){ - if(55 === _oR_) break a; - } - else if(21 < _oR_ - 1 >>> 0) break a; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - continue; - } - return 1; - } - } - return is_valid(0) ? str : symbol_concat(str, _bv_); - } - function caml_special_val(str){ - var match = caml_classify_float(x); - return 3 === match ? x < 0. ? _bw_ : _bx_ : 4 <= match ? _by_ : str; - } - switch(fconv[2]){ - case 5: - var str = caml_format_float(format_of_fconv(fconv, prec), x); - return caml_special_val(add_dot_if_needed(str)); - case 6: - return hex(0); - case 7: - return uppercase_ascii$1(hex(0)); - case 8: - return caml_special_val(hex(0)); - default: return caml_format_float(format_of_fconv(fconv, prec), x); - } - } - function format_caml_char(c){ - var - str = escaped(c), - l = caml_ml_string_length(str), - res = make$0(l + 2 | 0, 39); - caml_blit_string(str, 0, res, 1, l); - return unsafe_to_string(res); - } - function string_of_fmtty(fmtty){ - var buf = buffer_create(16); - bprint_fmtty(buf, fmtty); - return buffer_contents(buf); - } - function make_printf$0(counter, k, acc, fmt){ - var k$0 = k, acc$0 = acc, fmt$0 = fmt; - for(;;){ - if(typeof fmt$0 === "number") return caml_call1(k$0, acc$0); - switch(fmt$0[0]){ - case 0: - var rest = fmt$0[1]; - return function(c){ - var new_acc = [5, acc$0, c]; - return make_printf(k$0, new_acc, rest);}; - case 1: - var rest$0 = fmt$0[1]; - return function(c){ - var new_acc = [4, acc$0, format_caml_char(c)]; - return make_printf(k$0, new_acc, rest$0);}; - case 2: - var rest$1 = fmt$0[2], pad = fmt$0[1]; - return make_padding - (k$0, acc$0, rest$1, pad, function(str){return str;}); - case 3: - var rest$2 = fmt$0[2], pad$0 = fmt$0[1]; - return make_padding(k$0, acc$0, rest$2, pad$0, string_to_caml_string); - case 4: - var - rest$3 = fmt$0[4], - prec = fmt$0[3], - pad$1 = fmt$0[2], - iconv = fmt$0[1]; - return make_int_padding_precision - (k$0, acc$0, rest$3, pad$1, prec, convert_int, iconv); - case 5: - var - rest$4 = fmt$0[4], - prec$0 = fmt$0[3], - pad$2 = fmt$0[2], - iconv$0 = fmt$0[1]; - return make_int_padding_precision - (k$0, acc$0, rest$4, pad$2, prec$0, convert_int32, iconv$0); - case 6: - var - rest$5 = fmt$0[4], - prec$1 = fmt$0[3], - pad$3 = fmt$0[2], - iconv$1 = fmt$0[1]; - return make_int_padding_precision - (k$0, - acc$0, - rest$5, - pad$3, - prec$1, - convert_nativeint, - iconv$1); - case 7: - var - rest$6 = fmt$0[4], - prec$2 = fmt$0[3], - pad$4 = fmt$0[2], - iconv$2 = fmt$0[1]; - return make_int_padding_precision - (k$0, acc$0, rest$6, pad$4, prec$2, convert_int64, iconv$2); - case 8: - var - rest$7 = fmt$0[4], - prec$3 = fmt$0[3], - pad$5 = fmt$0[2], - fconv = fmt$0[1]; - return make_float_padding_precision - (k$0, acc$0, rest$7, pad$5, prec$3, fconv); - case 9: - var rest$8 = fmt$0[2], pad$6 = fmt$0[1]; - return make_padding(k$0, acc$0, rest$8, pad$6, string_of_bool); - case 10: - var rest$9 = fmt$0[1], acc$1 = [7, acc$0]; - acc$0 = acc$1; - fmt$0 = rest$9; - break; - case 11: - var rest$10 = fmt$0[2], str = fmt$0[1], acc$2 = [2, acc$0, str]; - acc$0 = acc$2; - fmt$0 = rest$10; - break; - case 12: - var rest$11 = fmt$0[2], chr = fmt$0[1], acc$3 = [3, acc$0, chr]; - acc$0 = acc$3; - fmt$0 = rest$11; - break; - case 13: - var - rest$12 = fmt$0[3], - sub_fmtty = fmt$0[2], - ty = string_of_fmtty(sub_fmtty); - return function(str){ - return make_printf(k$0, [4, acc$0, ty], rest$12);}; - case 14: - var rest$13 = fmt$0[3], fmtty = fmt$0[2]; - return function(param){ - var fmt = param[1]; - return make_printf - (k$0, acc$0, concat_fmt(recast(fmt, fmtty), rest$13));}; - case 15: - var rest$14 = fmt$0[1]; - return function(f, x){ - return make_printf - (k$0, - [6, acc$0, function(o){return caml_call2(f, o, x);}], - rest$14);}; - case 16: - var rest$15 = fmt$0[1]; - return function(f){return make_printf(k$0, [6, acc$0, f], rest$15);}; - case 17: - var - rest$16 = fmt$0[2], - fmting_lit = fmt$0[1], - acc$4 = [0, acc$0, fmting_lit]; - acc$0 = acc$4; - fmt$0 = rest$16; - break; - case 18: - var _oP_ = fmt$0[1]; - if(0 === _oP_[0]){ - var rest$17 = fmt$0[2], fmt$1 = _oP_[1][1]; - let acc = acc$0, k = k$0, rest = rest$17; - var - k$1 = - function(kacc){return make_printf(k, [1, acc, [0, kacc]], rest);}; - k$0 = k$1; - acc$0 = 0; - fmt$0 = fmt$1; - } - else{ - var rest$18 = fmt$0[2], fmt$2 = _oP_[1][1]; - let acc = acc$0, k = k$0, rest = rest$18; - var - k$2 = - function(kacc){return make_printf(k, [1, acc, [1, kacc]], rest);}; - k$0 = k$2; - acc$0 = 0; - fmt$0 = fmt$2; - } - break; - case 19: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bz_], 1); - case 20: - var rest$19 = fmt$0[3], new_acc = [8, acc$0, _bA_]; - return function(param){return make_printf(k$0, new_acc, rest$19);}; - case 21: - var rest$20 = fmt$0[2]; - return function(n){ - var new_acc = [4, acc$0, caml_format_int(cst_u, n)]; - return make_printf(k$0, new_acc, rest$20);}; - case 22: - var rest$21 = fmt$0[1]; - return function(c){ - var new_acc = [5, acc$0, c]; - return make_printf(k$0, new_acc, rest$21);}; - case 23: - var rest$22 = fmt$0[2], ign = fmt$0[1]; - if(counter >= 50) - return caml_trampoline_return - (make_ignored_param, [0, k$0, acc$0, ign, rest$22]); - var counter$1 = counter + 1 | 0; - return make_ignored_param(counter$1, k$0, acc$0, ign, rest$22); - default: - var - rest$23 = fmt$0[3], - f = fmt$0[2], - arity = fmt$0[1], - _oQ_ = caml_call1(f, 0); - if(counter >= 50) - return caml_trampoline_return - (make_custom$0, [0, k$0, acc$0, rest$23, arity, _oQ_]); - var counter$0 = counter + 1 | 0; - return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _oQ_); - } - } - } - function make_printf(k, acc, fmt){ - return caml_trampoline(make_printf$0(0, k, acc, fmt)); - } - function make_ignored_param(counter, k, acc, ign, fmt){ - if(typeof ign === "number") - switch(ign){ - case 0: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$0 = counter + 1 | 0; - return make_invalid_arg(counter$0, k, acc, fmt); - case 1: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$1 = counter + 1 | 0; - return make_invalid_arg(counter$1, k, acc, fmt); - case 2: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bB_], 1); - default: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$2 = counter + 1 | 0; - return make_invalid_arg(counter$2, k, acc, fmt); - } - switch(ign[0]){ - case 0: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$3 = counter + 1 | 0; - return make_invalid_arg(counter$3, k, acc, fmt); - case 1: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$4 = counter + 1 | 0; - return make_invalid_arg(counter$4, k, acc, fmt); - case 2: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$5 = counter + 1 | 0; - return make_invalid_arg(counter$5, k, acc, fmt); - case 3: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$6 = counter + 1 | 0; - return make_invalid_arg(counter$6, k, acc, fmt); - case 4: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$7 = counter + 1 | 0; - return make_invalid_arg(counter$7, k, acc, fmt); - case 5: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$8 = counter + 1 | 0; - return make_invalid_arg(counter$8, k, acc, fmt); - case 6: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$9 = counter + 1 | 0; - return make_invalid_arg(counter$9, k, acc, fmt); - case 7: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$10 = counter + 1 | 0; - return make_invalid_arg(counter$10, k, acc, fmt); - case 8: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$11 = counter + 1 | 0; - return make_invalid_arg(counter$11, k, acc, fmt); - case 9: - var fmtty = ign[2]; - if(counter >= 50) - return caml_trampoline_return - (make_from_fmtty$0, [0, k, acc, fmtty, fmt]); - var counter$14 = counter + 1 | 0; - return make_from_fmtty$0(counter$14, k, acc, fmtty, fmt); - case 10: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$12 = counter + 1 | 0; - return make_invalid_arg(counter$12, k, acc, fmt); - default: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$13 = counter + 1 | 0; - return make_invalid_arg(counter$13, k, acc, fmt); - } - } - function make_from_fmtty$0(counter, k, acc, fmtty, fmt){ - if(typeof fmtty !== "number") - switch(fmtty[0]){ - case 0: - var rest = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest, fmt);}; - case 1: - var rest$0 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$0, fmt);}; - case 2: - var rest$1 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$1, fmt);}; - case 3: - var rest$2 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$2, fmt);}; - case 4: - var rest$3 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$3, fmt);}; - case 5: - var rest$4 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$4, fmt);}; - case 6: - var rest$5 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$5, fmt);}; - case 7: - var rest$6 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$6, fmt);}; - case 8: - var rest$7 = fmtty[2]; - return function(param){return make_from_fmtty(k, acc, rest$7, fmt);}; - case 9: - var - rest$8 = fmtty[3], - ty2 = fmtty[2], - ty1 = fmtty[1], - ty = trans(symm(ty1), ty2); - return function(param){ - return make_from_fmtty(k, acc, concat_fmtty(ty, rest$8), fmt);}; - case 10: - var rest$9 = fmtty[1]; - return function(param, _oO_){ - return make_from_fmtty(k, acc, rest$9, fmt);}; - case 11: - var rest$10 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$10, fmt);}; - case 12: - var rest$11 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$11, fmt);}; - case 13: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bC_], 1); - default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bD_], 1); - } - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$0 = counter + 1 | 0; - return make_invalid_arg(counter$0, k, acc, fmt); - } - function make_from_fmtty(k, acc, fmtty, fmt){ - return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt)); - } - function make_invalid_arg(counter, k, acc, fmt){ - var _oN_ = [8, acc, _bE_]; - if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _oN_, fmt]); - var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _oN_, fmt); - } - function make_padding(k, acc, fmt, pad, trans){ - if(typeof pad === "number") - return function(x){ - var new_acc = [4, acc, caml_call1(trans, x)]; - return make_printf(k, new_acc, fmt);}; - if(0 === pad[0]){ - var width = pad[2], padty = pad[1]; - return function(x){ - var new_acc = [4, acc, fix_padding(padty, width, caml_call1(trans, x))]; - return make_printf(k, new_acc, fmt);}; - } - var padty$0 = pad[1]; - return function(w, x){ - var new_acc = [4, acc, fix_padding(padty$0, w, caml_call1(trans, x))]; - return make_printf(k, new_acc, fmt);}; - } - function make_int_padding_precision(k, acc, fmt, pad, prec, trans, iconv){ - if(typeof pad === "number"){ - if(typeof prec === "number") - return prec - ? function - (p, x){ - var str = fix_int_precision(p, caml_call2(trans, iconv, x)); - return make_printf(k, [4, acc, str], fmt); - } - : function - (x){ - var str = caml_call2(trans, iconv, x); - return make_printf(k, [4, acc, str], fmt); - }; - var p = prec[1]; - return function(x){ - var str = fix_int_precision(p, caml_call2(trans, iconv, x)); - return make_printf(k, [4, acc, str], fmt);}; - } - if(0 === pad[0]){ - var w = pad[2], padty = pad[1]; - if(typeof prec === "number") - return prec - ? function - (p, x){ - var - str = - fix_padding - (padty, - w, - fix_int_precision(p, caml_call2(trans, iconv, x))); - return make_printf(k, [4, acc, str], fmt); - } - : function - (x){ - var str = fix_padding(padty, w, caml_call2(trans, iconv, x)); - return make_printf(k, [4, acc, str], fmt); - }; - var p$0 = prec[1]; - return function(x){ - var - str = - fix_padding - (padty, w, fix_int_precision(p$0, caml_call2(trans, iconv, x))); - return make_printf(k, [4, acc, str], fmt);}; - } - var padty$0 = pad[1]; - if(typeof prec === "number") - return prec - ? function - (w, p, x){ - var - str = - fix_padding - (padty$0, - w, - fix_int_precision(p, caml_call2(trans, iconv, x))); - return make_printf(k, [4, acc, str], fmt); - } - : function - (w, x){ - var str = fix_padding(padty$0, w, caml_call2(trans, iconv, x)); - return make_printf(k, [4, acc, str], fmt); - }; - var p$1 = prec[1]; - return function(w, x){ - var - str = - fix_padding - (padty$0, w, fix_int_precision(p$1, caml_call2(trans, iconv, x))); - return make_printf(k, [4, acc, str], fmt);}; - } - function make_float_padding_precision(k, acc, fmt, pad, prec, fconv){ - if(typeof pad === "number"){ - if(typeof prec === "number") - return prec - ? function - (p, x){ - var str = convert_float(fconv, p, x); - return make_printf(k, [4, acc, str], fmt); - } - : function - (x){ - var - str = convert_float(fconv, default_float_precision(fconv), x); - return make_printf(k, [4, acc, str], fmt); - }; - var p = prec[1]; - return function(x){ - var str = convert_float(fconv, p, x); - return make_printf(k, [4, acc, str], fmt);}; - } - if(0 === pad[0]){ - var w = pad[2], padty = pad[1]; - if(typeof prec === "number") - return prec - ? function - (p, x){ - var str = fix_padding(padty, w, convert_float(fconv, p, x)); - return make_printf(k, [4, acc, str], fmt); - } - : function - (x){ - var - str = convert_float(fconv, default_float_precision(fconv), x), - str$0 = fix_padding(padty, w, str); - return make_printf(k, [4, acc, str$0], fmt); - }; - var p$0 = prec[1]; - return function(x){ - var str = fix_padding(padty, w, convert_float(fconv, p$0, x)); - return make_printf(k, [4, acc, str], fmt);}; - } - var padty$0 = pad[1]; - if(typeof prec === "number") - return prec - ? function - (w, p, x){ - var str = fix_padding(padty$0, w, convert_float(fconv, p, x)); - return make_printf(k, [4, acc, str], fmt); - } - : function - (w, x){ - var - str = convert_float(fconv, default_float_precision(fconv), x), - str$0 = fix_padding(padty$0, w, str); - return make_printf(k, [4, acc, str$0], fmt); - }; - var p$1 = prec[1]; - return function(w, x){ - var str = fix_padding(padty$0, w, convert_float(fconv, p$1, x)); - return make_printf(k, [4, acc, str], fmt);}; - } - function make_custom$0(counter, k, acc, rest, arity, f){ - if(arity){ - var arity$0 = arity[1]; - return function(x){ - return make_custom(k, acc, rest, arity$0, caml_call1(f, x));}; - } - var _oM_ = [4, acc, f]; - if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _oM_, rest]); - var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _oM_, rest); - } - function make_custom(k, acc, rest, arity, f){ - return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f)); - } - function output_acc(o, acc){ - var acc$0 = acc; - for(;;){ - if(typeof acc$0 === "number") return; - switch(acc$0[0]){ - case 0: - var - fmting_lit = acc$0[2], - p = acc$0[1], - s = string_of_formatting_lit(fmting_lit); - output_acc(o, p); - return output_string(o, s); - case 1: - var match = acc$0[2], p$0 = acc$0[1]; - if(0 === match[0]){ - var acc$1 = match[1]; - output_acc(o, p$0); - output_string(o, _bF_); - acc$0 = acc$1; - } - else{ - var acc$2 = match[1]; - output_acc(o, p$0); - output_string(o, _bG_); - acc$0 = acc$2; - } - break; - case 6: - var f = acc$0[2], p$3 = acc$0[1]; - output_acc(o, p$3); - return caml_call1(f, o); - case 7: - var p$4 = acc$0[1]; output_acc(o, p$4); return _j_(o); - case 8: - var msg = acc$0[2], p$5 = acc$0[1]; - output_acc(o, p$5); - return invalid_arg(msg); - case 2: - case 4: - var s$0 = acc$0[2], p$1 = acc$0[1]; - output_acc(o, p$1); - return output_string(o, s$0); - default: - var c = acc$0[2], p$2 = acc$0[1]; - output_acc(o, p$2); - return _i_(o, c); - } - } - } - function strput_acc(b, acc){ - var acc$0 = acc; - for(;;){ - if(typeof acc$0 === "number") return; - switch(acc$0[0]){ - case 0: - var - fmting_lit = acc$0[2], - p = acc$0[1], - s = string_of_formatting_lit(fmting_lit); - strput_acc(b, p); - return write_stringlit(b, s); - case 1: - var match = acc$0[2], p$0 = acc$0[1]; - if(0 === match[0]){ - var acc$1 = match[1]; - strput_acc(b, p$0); - write_stringlit(b, _bH_); - acc$0 = acc$1; - } - else{ - var acc$2 = match[1]; - strput_acc(b, p$0); - write_stringlit(b, _bI_); - acc$0 = acc$2; - } - break; - case 6: - var f = acc$0[2], p$3 = acc$0[1]; - strput_acc(b, p$3); - return write_stringlit(b, caml_call1(f, 0)); - case 7: - var acc$3 = acc$0[1]; acc$0 = acc$3; break; - case 8: - var msg = acc$0[2], p$4 = acc$0[1]; - strput_acc(b, p$4); - return invalid_arg(msg); - case 2: - case 4: - var s$0 = acc$0[2], p$1 = acc$0[1]; - strput_acc(b, p$1); - return write_stringlit(b, s$0); - default: - var c = acc$0[2], p$2 = acc$0[1]; - strput_acc(b, p$2); - return add_char(b, c); - } - } - } - function kfprintf(k, o, param){ - var fmt = param[1]; - return make_printf - (function(acc){output_acc(o, acc); return caml_call1(k, o);}, - 0, - fmt); - } - function fprintf(oc, fmt){ - return kfprintf(function(_oL_){return 0;}, oc, fmt); - } - function eprintf(fmt){return fprintf(stderr, fmt);} - function ksprintf(k, param){ - var fmt = param[1]; - function k$0(acc){ - var buf = create$1(64); - strput_acc(buf, acc); - return caml_call1(k, contents(buf)); - } - return make_printf(k$0, 0, fmt); - } - function sprintf(fmt){return ksprintf(function(s){return s;}, fmt);} - var printers = make(0); - function field(x, i){ - var f = x[1 + i]; - return is_block(f) - ? caml_obj_tag - (f) - === 252 - ? caml_call1(sprintf(_bJ_), f) - : caml_obj_tag(f) === 253 ? string_of_float(f) : _bK_ - : caml_call1(sprintf(_bL_), f); - } - function other_fields(x, i){ - if(x.length - 1 <= i) return _bM_; - var _oJ_ = other_fields(x, i + 1 | 0), _oK_ = field(x, i); - return caml_call2(sprintf(_bN_), _oK_, _oJ_); - } - function fields(x){ - var match = x.length - 1; - if(2 >= match >>> 0) - switch(match){ - case 0: - return _bP_; - case 1: - return _bQ_; - default: - var _oI_ = field(x, 1); return caml_call1(sprintf(_bR_), _oI_); - } - var _oG_ = other_fields(x, 2), _oH_ = field(x, 1); - return caml_call2(sprintf(_bO_), _oH_, _oG_); - } - function use_printers(x){ - function conv(param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var tl = param$0[2], hd = param$0[1]; - a: - { - try{var val = caml_call1(hd, x);}catch(_oF_){break a;} - if(val){var s = val[1]; return [0, s];} - } - param$0 = tl; - } - } - return conv(get(printers)); - } - function to_string_default(x){ - if(x === Out_of_memory) return _bS_; - if(x === Stack_overflow) return _bT_; - if(x[1] === Match_failure){ - var match = x[2], char$0 = match[3], line = match[2], file = match[1]; - return caml_call5 - (sprintf(locfmt), file, line, char$0, char$0 + 5 | 0, _bU_); - } - if(x[1] === Assert_failure){ - var - match$0 = x[2], - char$1 = match$0[3], - line$0 = match$0[2], - file$0 = match$0[1]; - return caml_call5 - (sprintf(locfmt), file$0, line$0, char$1, char$1 + 6 | 0, _bV_); - } - if(x[1] === Undefined_recursive_module){ - var - match$1 = x[2], - char$2 = match$1[3], - line$1 = match$1[2], - file$1 = match$1[1]; - return caml_call5 - (sprintf(locfmt), file$1, line$1, char$2, char$2 + 6 | 0, _bW_); - } - if(0 !== caml_obj_tag(x)) return x[1]; - var constructor = x[1][1]; - return symbol_concat(constructor, fields(x)); - } - function to_string$0(e){ - var match = use_printers(e); - if(! match) return to_string_default(e); - var s = match[1]; - return s; - } - function convert_raw_backtrace(bt){ - var _oE_ = [0, caml_convert_raw_backtrace(bt)]; - return _oE_; - } - function format_backtrace_slot(pos, slot){ - function info(is_raise){ - return is_raise ? 0 === pos ? _bX_ : _bY_ : 0 === pos ? _bZ_ : _b0_; - } - if(0 === slot[0]){ - var - _ow_ = slot[5], - _ox_ = slot[4], - _oy_ = slot[3], - _oz_ = slot[6] ? _b1_ : _b3_, - _oA_ = slot[2], - _oB_ = slot[7], - _oC_ = info(slot[1]); - return [0, - caml_call7 - (sprintf(_b2_), _oC_, _oB_, _oA_, _oz_, _oy_, _ox_, _ow_)]; - } - if(slot[1]) return 0; - var _oD_ = info(0); - return [0, caml_call1(sprintf(_b4_), _oD_)]; - } - function print_exception_backtrace(outchan, backtrace){ - if(! backtrace) return fprintf(outchan, _b6_); - var a = backtrace[1], _ou_ = a.length - 2 | 0, _ot_ = 0; - if(_ou_ >= 0){ - var i = _ot_; - for(;;){ - var match = format_backtrace_slot(i, caml_check_bound(a, i)[1 + i]); - if(match){var str = match[1]; caml_call1(fprintf(outchan, _b5_), str);} - var _ov_ = i + 1 | 0; - if(_ou_ === i) break; - i = _ov_; - } - } - return; - } - function print_raw_backtrace(outchan, raw_backtrace){ - return print_exception_backtrace - (outchan, convert_raw_backtrace(raw_backtrace)); - } - function register_printer(fn){ - for(;;){ - var - old_printers = get(printers), - new_printers = [0, fn, old_printers], - success = compare_and_set(printers, old_printers, new_printers), - _os_ = 1 - success; - if(! _os_) return _os_; - } - } - var errors = _b7_.slice(); - function default_uncaught_exception_han(exn, raw_backtrace){ - var _oq_ = to_string$0(exn); - caml_call1(eprintf(_b8_), _oq_); - print_raw_backtrace(stderr, raw_backtrace); - var status = caml_ml_debug_info_status(0); - if(status < 0){ - var _or_ = abs(status); - prerr_endline(caml_check_bound(errors, _or_)[1 + _or_]); - } - return _j_(stderr); - } - var empty_backtrace = [0]; - function try_get_raw_backtrace(param){ - var _op_ = caml_get_exception_raw_backtrace(0); - return _op_; - } - function handle_uncaught_exception(exn, debugger_in_use){ - try{ - var - raw_backtrace = - debugger_in_use ? empty_backtrace : try_get_raw_backtrace(0); - try{do_at_exit(0);}catch(_oo_){} - try{ - var - _om_ = default_uncaught_exception_han(exn, raw_backtrace), - _ol_ = _om_; - } - catch(exn$1){ - var - exn$0 = caml_wrap_exception(exn$1), - raw_backtrace$0 = try_get_raw_backtrace(0), - _oj_ = to_string$0(exn); - caml_call1(eprintf(_b__), _oj_); - print_raw_backtrace(stderr, raw_backtrace); - var _ok_ = to_string$0(exn$0); - caml_call1(eprintf(_b$_), _ok_); - print_raw_backtrace(stderr, raw_backtrace$0); - var _ol_ = _j_(stderr); - } - return _ol_; - } - catch(_on_){ - var _oi_ = caml_wrap_exception(_on_); - if(_oi_ === Out_of_memory) return prerr_endline(_b9_); - throw caml_maybe_attach_backtrace(_oi_, 0); - } - } - function handle_uncaught_exception$0(exn, debugger_in_use){ - try{ - var _og_ = handle_uncaught_exception(exn, debugger_in_use); - return _og_; - } - catch(_oh_){return 0;} - } - caml_register_named_value - ("Printexc.handle_uncaught_exception", handle_uncaught_exception$0); - var Finally_raised = [248, _ca_, caml_fresh_oo_id(0)]; - register_printer - (function(param){ - if(param[1] !== Finally_raised) return 0; - var exn = param[2]; - return [0, symbol_concat(_cb_, to_string$0(exn))]; - }); - function string(str){ - return caml_md5_string(str, 0, caml_ml_string_length(str)); - } - function new_state(param){return [0, caml_make_vect(55, 0), 0];} - function assign(st1, st2){ - blit$0(st2[1], 0, st1[1], 0, 55); - st1[2] = st2[2]; - return; - } - function full_init(s, seed){ - function combine(accu, x){ - return string(symbol_concat(accu, to_string(x))); - } - function extract(d){ - var - _od_ = caml_string_get(d, 3) << 24, - _oe_ = caml_string_get(d, 2) << 16, - _of_ = caml_string_get(d, 1) << 8; - return ((caml_string_get(d, 0) + _of_ | 0) + _oe_ | 0) + _od_ | 0; - } - var - seed$0 = 0 === seed.length - 1 ? [0, 0] : seed, - l = seed$0.length - 1, - i$0 = 0; - for(;;){ - caml_check_bound(s[1], i$0)[1 + i$0] = i$0; - var _oc_ = i$0 + 1 | 0; - if(54 === i$0) break; - i$0 = _oc_; - } - var accu = [0, _cc_], _n9_ = 54 + max$0(55, l) | 0, _n8_ = 0; - if(_n9_ >= 0){ - var i = _n8_; - for(;;){ - var - j = i % 55 | 0, - k = caml_mod(i, l), - _n__ = caml_check_bound(seed$0, k)[1 + k]; - accu[1] = combine(accu[1], _n__); - var - _n$_ = extract(accu[1]), - _oa_ = (caml_check_bound(s[1], j)[1 + j] ^ _n$_) & 1073741823; - caml_check_bound(s[1], j)[1 + j] = _oa_; - var _ob_ = i + 1 | 0; - if(_n9_ === i) break; - i = _ob_; - } - } - s[2] = 0; - return; - } - function make$2(seed){ - var result = new_state(0); - full_init(result, seed); - return result; - } - function make_self_init(param){return make$2(caml_sys_random_seed(0));} - function copy$0(s){ - var result = new_state(0); - assign(result, s); - return result; - } - function bits(s){ - s[2] = (s[2] + 1 | 0) % 55 | 0; - var - _n5_ = s[2], - curval = caml_check_bound(s[1], _n5_)[1 + _n5_], - _n6_ = (s[2] + 24 | 0) % 55 | 0, - newval = - caml_check_bound(s[1], _n6_)[1 + _n6_] - + (curval ^ (curval >>> 25 | 0) & 31) - | 0, - newval30 = newval & 1073741823, - _n7_ = s[2]; - caml_check_bound(s[1], _n7_)[1 + _n7_] = newval30; - return newval30; - } - var default$0 = [0, _cd_.slice(), 0]; - function full_init$0(seed){return full_init(default$0, seed);} - function self_init(param){return full_init$0(caml_sys_random_seed(0));} - function get_state(param){return copy$0(default$0);} - function ongoing_traversal(h){ - var _n3_ = h.length - 1 < 4 ? 1 : 0, _n4_ = _n3_ || (h[4] < 0 ? 1 : 0); - return _n4_; - } - try{var _iT_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _iT_;} - catch(_n1_){ - var _ce_ = caml_wrap_exception(_n1_); - if(_ce_ !== Not_found) throw caml_maybe_attach_backtrace(_ce_, 0); - try{var _iS_ = caml_sys_getenv("CAMLRUNPARAM"), _ch_ = _iS_;} - catch(_n2_){ - var _cf_ = caml_wrap_exception(_n2_); - if(_cf_ !== Not_found) throw caml_maybe_attach_backtrace(_cf_, 0); - var _ch_ = _cg_; - } - var params = _ch_; - } - var - randomized_default = contains(params, 82), - prng = [246, function(_n0_){return make_self_init(0);}]; - function power_2_above(x, n){ - var x$0 = x; - for(;;){ - if(n <= x$0) return x$0; - if(max_array_length < (x$0 * 2 | 0)) return x$0; - var x$1 = x$0 * 2 | 0; - x$0 = x$1; - } - } - function create$2(opt, initial_size){ - if(opt) - var sth = opt[1], random = sth; - else - var random = randomized_default; - var s = power_2_above(16, initial_size); - if(random) - var - _nY_ = caml_obj_tag(prng), - _nZ_ = - 250 === _nY_ ? prng[1] : 246 === _nY_ ? force_lazy_block(prng) : prng, - seed = bits(_nZ_); - else - var seed = 0; - return [0, 0, caml_make_vect(s, 0), seed, s]; - } - function clear$2(h){ - var _nX_ = 0 < h[1] ? 1 : 0; - return _nX_ ? (h[1] = 0, fill(h[2], 0, h[2].length - 1, 0)) : _nX_; - } - function insert_all_buckets(indexfun, inplace, odata, ndata){ - var nsize = ndata.length - 1, ndata_tail = caml_make_vect(nsize, 0); - function insert_bucket(cell){ - var cell$0 = cell; - for(;;){ - if(! cell$0) return; - var - key = cell$0[1], - data = cell$0[2], - next = cell$0[3], - cell$1 = inplace ? cell$0 : [0, key, data, 0], - nidx = caml_call1(indexfun, key), - match = caml_check_bound(ndata_tail, nidx)[1 + nidx]; - if(match) - match[3] = cell$1; - else - caml_check_bound(ndata, nidx)[1 + nidx] = cell$1; - caml_check_bound(ndata_tail, nidx)[1 + nidx] = cell$1; - cell$0 = next; - } - } - var _nS_ = odata.length - 2 | 0, _nR_ = 0; - if(_nS_ >= 0){ - var i$0 = _nR_; - for(;;){ - insert_bucket(caml_check_bound(odata, i$0)[1 + i$0]); - var _nW_ = i$0 + 1 | 0; - if(_nS_ === i$0) break; - i$0 = _nW_; - } - } - if(inplace){ - var _nU_ = nsize - 1 | 0, _nT_ = 0; - if(_nU_ >= 0){ - var i = _nT_; - for(;;){ - var match = caml_check_bound(ndata_tail, i)[1 + i]; - if(match) match[3] = 0; - var _nV_ = i + 1 | 0; - if(_nU_ === i) break; - i = _nV_; - } - } - } - return; - } - function resize$0(indexfun, h){ - var - odata = h[2], - osize = odata.length - 1, - nsize = osize * 2 | 0, - _nQ_ = nsize < max_array_length ? 1 : 0; - if(! _nQ_) return _nQ_; - var ndata = caml_make_vect(nsize, 0), inplace = 1 - ongoing_traversal(h); - h[2] = ndata; - return insert_all_buckets(caml_call1(indexfun, h), inplace, odata, ndata); - } - function hash(x){return caml_hash(10, 100, 0, x);} - function key_index(h, key){ - return 4 <= h.length - 1 - ? caml_hash(10, 100, h[3], key) & (h[2].length - 2 | 0) - : invalid_arg(_ci_); - } - function add$0(h, key, data){ - var - i = key_index(h, key), - bucket = [0, key, data, caml_check_bound(h[2], i)[1 + i]]; - caml_check_bound(h[2], i)[1 + i] = bucket; - h[1] = h[1] + 1 | 0; - var _nP_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; - return _nP_ ? resize$0(key_index, h) : _nP_; - } - function remove_bucket(h, i, key, prec, c){ - var prec$1 = prec, prec$0 = c; - for(;;){ - if(! prec$0) return; - var k = prec$0[1], next = prec$0[3]; - if(0 === caml_compare(k, key)){ - h[1] = h[1] - 1 | 0; - if(prec$1){prec$1[3] = next; return;} - caml_check_bound(h[2], i)[1 + i] = next; - return; - } - prec$1 = prec$0; - prec$0 = next; - } - } - function remove(h, key){ - var i = key_index(h, key); - return remove_bucket(h, i, key, 0, caml_check_bound(h[2], i)[1 + i]); - } - function find_rec(key, param){ - var param$0 = param; - for(;;){ - if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); - var k = param$0[1], data = param$0[2], next = param$0[3]; - if(0 === caml_compare(key, k)) return data; - param$0 = next; - } - } - function find(h, key){ - var - _nO_ = key_index(h, key), - match = caml_check_bound(h[2], _nO_)[1 + _nO_]; - if(! match) throw caml_maybe_attach_backtrace(Not_found, 1); - var k1 = match[1], d1 = match[2], next1 = match[3]; - if(0 === caml_compare(key, k1)) return d1; - if(! next1) throw caml_maybe_attach_backtrace(Not_found, 1); - var k2 = next1[1], d2 = next1[2], next2 = next1[3]; - if(0 === caml_compare(key, k2)) return d2; - if(! next2) throw caml_maybe_attach_backtrace(Not_found, 1); - var k3 = next2[1], d3 = next2[2], next3 = next2[3]; - return 0 === caml_compare(key, k3) ? d3 : find_rec(key, next3); - } - function find_all(h, key){ - function find_in_bucket(param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var k = param$0[1], data = param$0[2], next = param$0[3]; - if(0 === caml_compare(k, key)) return [0, data, find_in_bucket(next)]; - param$0 = next; - } - } - var _nN_ = key_index(h, key); - return find_in_bucket(caml_check_bound(h[2], _nN_)[1 + _nN_]); - } - function id(x){return x;} - var zero = 0, unknown = -1; - function is_known(n){return 0 <= n ? 1 : 0;} - var String_tag = [248, _cj_, caml_fresh_oo_id(0)]; - function pp_enqueue(state, token){ - state[13] = state[13] + token[3] | 0; - return add(token, state[28]); - } - function pp_clear_queue(state){ - state[12] = 1; - state[13] = 1; - return clear$0(state[28]); - } - var pp_infinity = 1000000010; - function pp_output_string(state, s){ - return caml_call3(state[17], s, 0, caml_ml_string_length(s)); - } - function pp_output_newline(state){return caml_call1(state[19], 0);} - function pp_output_spaces(state, n){return caml_call1(state[20], n);} - function pp_output_indent(state, n){return caml_call1(state[21], n);} - function format_pp_text(state, size, text){ - state[9] = state[9] - size | 0; - pp_output_string(state, text); - state[11] = 0; - return; - } - function format_string(state, s){ - var _nM_ = s !== cst$1 ? 1 : 0; - return _nM_ ? format_pp_text(state, caml_ml_string_length(s), s) : _nM_; - } - function break_new_line(state, param, width){ - var after = param[3], offset = param[2], before = param[1]; - format_string(state, before); - pp_output_newline(state); - state[11] = 1; - var - indent = (state[6] - width | 0) + offset | 0, - real_indent = min(state[8], indent); - state[10] = real_indent; - state[9] = state[6] - state[10] | 0; - pp_output_indent(state, state[10]); - return format_string(state, after); - } - function break_line(state, width){ - return break_new_line(state, _ck_, width); - } - function break_same_line(state, param){ - var after = param[3], width = param[2], before = param[1]; - format_string(state, before); - state[9] = state[9] - width | 0; - pp_output_spaces(state, width); - return format_string(state, after); - } - function pp_force_break_line(state){ - var match = top_opt(state[2]); - if(! match) return pp_output_newline(state); - var - match$0 = match[1], - width = match$0[2], - box_type = match$0[1], - _nL_ = state[9] < width ? 1 : 0; - if(! _nL_) return _nL_; - if(3 < box_type - 1 >>> 0) return; - return break_line(state, width); - } - function pp_skip_token(state){ - var match = take_opt(state[28]); - if(! match) return; - var match$0 = match[1], size = match$0[1], length = match$0[3]; - state[12] = state[12] - length | 0; - var _nK_ = id(size); - state[9] = state[9] + _nK_ | 0; - return; - } - function format_pp_token(state, size, param){ - if(typeof param === "number") - switch(param){ - case 0: - var match = top_opt(state[3]); - if(! match) return; - var - tabs = match[1][1], - add_tab = - function(n, ls){ - if(! ls) return [0, n, 0]; - var l = ls[2], x = ls[1]; - return caml_lessthan(n, x) ? [0, n, ls] : [0, x, add_tab(n, l)]; - }; - tabs[1] = add_tab(state[6] - state[9] | 0, tabs[1]); - return; - case 1: - pop_opt(state[2]); return; - case 2: - pop_opt(state[3]); return; - case 3: - var match$0 = top_opt(state[2]); - if(! match$0) return pp_output_newline(state); - var width = match$0[1][2]; - return break_line(state, width); - case 4: - var _nJ_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; - return _nJ_ ? pp_skip_token(state) : _nJ_; - default: - var match$1 = pop_opt(state[5]); - if(! match$1) return; - var tag_name = match$1[1], marker = caml_call1(state[25], tag_name); - return pp_output_string(state, marker); - } - switch(param[0]){ - case 0: - var s = param[1]; return format_pp_text(state, size, s); - case 1: - var - breaks = param[2], - fits = param[1], - off = breaks[2], - before = breaks[1], - match$2 = top_opt(state[2]); - if(! match$2) return; - var match$3 = match$2[1], width$0 = match$3[2], box_type = match$3[1]; - switch(box_type){ - case 0: - return break_same_line(state, fits); - case 1: - return break_new_line(state, breaks, width$0); - case 2: - return break_new_line(state, breaks, width$0); - case 3: - return state[9] < (size + caml_ml_string_length(before) | 0) - ? break_new_line(state, breaks, width$0) - : break_same_line(state, fits); - case 4: - return state[11] - ? break_same_line(state, fits) - : state - [9] - < (size + caml_ml_string_length(before) | 0) - ? break_new_line(state, breaks, width$0) - : ((state - [6] - - width$0 - | 0) - + off - | 0) - < state[10] - ? break_new_line(state, breaks, width$0) - : break_same_line(state, fits); - default: return break_same_line(state, fits); - } - case 2: - var - off$0 = param[2], - n = param[1], - insertion_point = state[6] - state[9] | 0, - match$4 = top_opt(state[3]); - if(! match$4) return; - var tabs$0 = match$4[1][1], match$5 = tabs$0[1]; - if(match$5) - var - first = match$5[1], - find = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return first; - var tail = param$0[2], head = param$0[1]; - if(insertion_point <= head) return head; - param$0 = tail; - } - }, - tab = find(tabs$0[1]); - else - var tab = insertion_point; - var offset = tab - insertion_point | 0; - return 0 <= offset - ? break_same_line(state, [0, _cm_, offset + n | 0, _cl_]) - : break_new_line - (state, [0, _co_, tab + off$0 | 0, _cn_], state[6]); - case 3: - var - ty = param[2], - off$1 = param[1], - insertion_point$0 = state[6] - state[9] | 0; - if(state[8] < insertion_point$0) pp_force_break_line(state); - var - width$1 = state[9] - off$1 | 0, - box_type$0 = 1 === ty ? 1 : state[9] < size ? ty : 5; - return push([0, box_type$0, width$1], state[2]); - case 4: - var tbox = param[1]; return push(tbox, state[3]); - default: - var - tag_name$0 = param[1], - marker$0 = caml_call1(state[24], tag_name$0); - pp_output_string(state, marker$0); - return push(tag_name$0, state[5]); - } - } - function advance_left(state){ - for(;;){ - var match = peek_opt(state[28]); - if(! match) return 0; - var - match$0 = match[1], - size = match$0[1], - length = match$0[3], - token = match$0[2], - pending_count = state[13] - state[12] | 0, - _nH_ = is_known(size), - _nI_ = _nH_ || (state[9] <= pending_count ? 1 : 0); - if(! _nI_) return _nI_; - take(state[28]); - var size$0 = is_known(size) ? id(size) : pp_infinity; - format_pp_token(state, size$0, token); - state[12] = length + state[12] | 0; - } - } - function enqueue_advance(state, tok){ - pp_enqueue(state, tok); - return advance_left(state); - } - function enqueue_string_as(state, size, s){ - return enqueue_advance(state, [0, size, [0, s], id(size)]); - } - function enqueue_string(state, s){ - return enqueue_string_as(state, id(caml_ml_string_length(s)), s); - } - function initialize_scan_stack(stack){ - clear(stack); - var queue_elem = [0, unknown, _cp_, 0]; - return push([0, -1, queue_elem], stack); - } - function set_size(state, ty){ - var match = top_opt(state[1]); - if(! match) return; - var - match$0 = match[1], - queue_elem = match$0[2], - left_total = match$0[1], - size = id(queue_elem[1]); - if(left_total < state[12]) return initialize_scan_stack(state[1]); - var _nG_ = queue_elem[2]; - if(typeof _nG_ !== "number") - switch(_nG_[0]){ - case 3: - if(1 - ty){ - queue_elem[1] = id(state[13] + size | 0); - pop_opt(state[1]); - } - return; - case 1: - case 2: - if(ty){queue_elem[1] = id(state[13] + size | 0); pop_opt(state[1]);} - return; - } - return; - } - function scan_push(state, b, token){ - pp_enqueue(state, token); - if(b) set_size(state, 1); - var elem = [0, state[13], token]; - return push(elem, state[1]); - } - function pp_open_box_gen(state, indent, br_ty){ - state[14] = state[14] + 1 | 0; - if(state[14] < state[15]){ - var size = id(- state[13] | 0), elem = [0, size, [3, indent, br_ty], 0]; - return scan_push(state, 0, elem); - } - var _nF_ = state[14] === state[15] ? 1 : 0; - return _nF_ ? enqueue_string(state, state[16]) : _nF_; - } - function pp_open_sys_box(state){return pp_open_box_gen(state, 0, 3);} - function pp_close_box(state, param){ - var _nD_ = 1 < state[14] ? 1 : 0; - if(_nD_){ - if(state[14] < state[15]){ - pp_enqueue(state, [0, zero, 1, 0]); - set_size(state, 1); - set_size(state, 0); - } - state[14] = state[14] - 1 | 0; - var _nE_ = 0; - } - else - var _nE_ = _nD_; - return _nE_; - } - function pp_close_stag(state, param){ - if(state[23]) pp_enqueue(state, [0, zero, 5, 0]); - var _nB_ = state[22]; - if(_nB_){ - var match = pop_opt(state[4]); - if(match){ - var tag_name = match[1]; - return caml_call1(state[27], tag_name); - } - var _nC_ = 0; - } - else - var _nC_ = _nB_; - return _nC_; - } - function pp_close_tag(state, param){return pp_close_stag(state, 0);} - function pp_rinit(state){ - pp_clear_queue(state); - initialize_scan_stack(state[1]); - clear(state[2]); - clear(state[3]); - clear(state[4]); - clear(state[5]); - state[10] = 0; - state[14] = 0; - state[9] = state[6]; - return pp_open_sys_box(state); - } - function clear_tag_stack(state){ - return iter$1(function(param){return pp_close_tag(state, 0);}, state[4]); - } - function pp_flush_queue(state, b){ - clear_tag_stack(state); - for(;;){ - if(1 >= state[14]){ - state[13] = pp_infinity; - advance_left(state); - if(b) pp_output_newline(state); - return pp_rinit(state); - } - pp_close_box(state, 0); - } - } - function pp_print_flush(state, param){ - pp_flush_queue(state, 0); - return caml_call1(state[18], 0); - } - function display_newline(state, param){ - return caml_call3(state[17], _cq_, 0, 1); - } - var blank_line = make$1(80, 32); - function display_blanks(state, n){ - var n$0 = n; - for(;;){ - var _nA_ = 0 < n$0 ? 1 : 0; - if(! _nA_) return _nA_; - if(80 >= n$0) return caml_call3(state[17], blank_line, 0, n$0); - caml_call3(state[17], blank_line, 0, 80); - var n$1 = n$0 - 80 | 0; - n$0 = n$1; - } - } - function default_pp_mark_open_tag(param){ - if(param[1] !== String_tag) return _ct_; - var s = param[2]; - return symbol_concat(_cs_, symbol_concat(s, _cr_)); - } - function default_pp_mark_close_tag(param){ - if(param[1] !== String_tag) return _cw_; - var s = param[2]; - return symbol_concat(_cv_, symbol_concat(s, _cu_)); - } - function default_pp_print_open_tag(_nz_){return 0;} - function default_pp_print_close_tag(_ny_){return 0;} - function pp_make_formatter(f, g, h, i, j){ - var pp_queue = create$0(0), sys_tok = [0, unknown, _cx_, 0]; - add(sys_tok, pp_queue); - var scan_stack = create(0); - initialize_scan_stack(scan_stack); - push([0, 1, sys_tok], scan_stack); - var pp_margin = 78, _nv_ = create(0), _nw_ = create(0), _nx_ = create(0); - return [0, - scan_stack, - create(0), - _nx_, - _nw_, - _nv_, - pp_margin, - 10, - 68, - pp_margin, - 0, - 1, - 1, - 1, - 1, - max_int, - _cy_, - f, - g, - h, - i, - j, - 0, - 0, - default_pp_mark_open_tag, - default_pp_mark_close_tag, - default_pp_print_open_tag, - default_pp_print_close_tag, - pp_queue]; - } - function make_formatter(output, flush){ - var - ppf = - pp_make_formatter - (output, - flush, - function(_nu_){return 0;}, - function(_nt_){return 0;}, - function(_ns_){return 0;}); - ppf[19] = function(_nr_){return display_newline(ppf, _nr_);}; - ppf[20] = function(_nq_){return display_blanks(ppf, _nq_);}; - ppf[21] = function(_np_){return display_blanks(ppf, _np_);}; - return ppf; - } - function formatter_of_out_channel(oc){ - return make_formatter - (function(_nm_, _nn_, _no_){ - return output_substring(oc, _nm_, _nn_, _no_); - }, - function(param){return _j_(oc);}); - } - function formatter_of_buffer(b){ - return make_formatter - (function(_nj_, _nk_, _nl_){ - return add_substring(b, _nj_, _nk_, _nl_); - }, - function(_ni_){return 0;}); - } - var pp_buffer_size = 512; - function pp_make_buffer(param){return create$1(pp_buffer_size);} - var - stdbuf = pp_make_buffer(0), - std_formatter = formatter_of_out_channel(stdout), - err_formatter = formatter_of_out_channel(stderr); - formatter_of_buffer(stdbuf); - function flush_standard_formatters(param){ - pp_print_flush(std_formatter, 0); - return pp_print_flush(err_formatter, 0); - } - at_exit(flush_standard_formatters); - function register_exception(name, exn){ - var slot = caml_obj_tag(exn) === 248 ? exn : exn[1]; - caml_register_named_value(name, slot); - return; - } - var Error = [248, _cz_, caml_fresh_oo_id(0)]; - register_exception(_cA_, [0, Error, [0]]); - (function(exn){throw exn;}); - var jv_global = globalThis, empty = cst$1; - function append(s0, s1){return s0.concat(s1);} - function concat$0(opt, ss){ - if(opt) var sth = opt[1], sep = sth; else var sep = empty; - return caml_list_to_js_array(ss).join(sep); - } - function slice(opt, stop, s){ - if(opt) var sth = opt[1], start = sth; else var start = 0; - if(stop) - var stop$0 = stop[1], args = [0, start, stop$0]; - else - var args = [0, start]; - return caml_js_meth_call(s, "slice", args); - } - function cuts(sep, s){return caml_list_of_js_array(s.split(sep));} - function starts_with(prefix, s){return s.startsWith(prefix) | 0;} - jv_global["Number"]; - var null$0 = null, undefined$0 = undefined; - function is_null(v){return v === null$0 ? 1 : 0;} - function is_undefined(v){return v === undefined$0 ? 1 : 0;} - function is_none(v){ - var _nh_ = is_null(v); - return _nh_ ? _nh_ : is_undefined(v); - } - function to_option(conv, v){ - return is_none(v) ? 0 : [0, caml_call1(conv, v)]; - } - function of_option(none, conv, param){ - if(! param) return none; - var v = param[1]; - return caml_call1(conv, v); - } - var global = globalThis; - function set_if_some(o, p, param){ - if(! param) return; - var v = param[1]; - o[p] = v; - return; - } - function get$0(o, p){o[p]; return;} - function set(o, p, b){o[p] = ! ! b; return;} - function set_if_some$0(o, p, param){ - if(! param) return; - var b = param[1]; - return set(o, p, b); - } - function get$1(o, p){return o[p];} - function set$0(o, p, b){o[p] = b; return;} - function set_if_some$1(o, p, param){ - if(! param) return; - var f = param[1]; - return set$0(o, p, f); - } - function create$3(n){return new global["Array"](n);} - function length$0(a){return a["length"];} - function to_array(conv, v){ - var len = length$0(v); - return init$0(len, function(i){return caml_call1(conv, v[i]);}); - } - function of_array(conv, a){ - var len = a.length - 1, ja = create$3(len), _nf_ = len - 1 | 0, _ne_ = 0; - if(_nf_ >= 0){ - var i = _ne_; - for(;;){ - ja[i] = caml_call1(conv, caml_check_bound(a, i)[1 + i]); - var _ng_ = i + 1 | 0; - if(_nf_ === i) break; - i = _ng_; - } - } - return ja; - } - function to_list$0(conv, v){ - var len = length$0(v); - return init(len, function(i){return caml_call1(conv, v[i]);}); - } - function of_list$0(conv, l){ - function loop(i, ja, param){ - var i$0 = i, param$0 = param; - for(;;){ - if(! param$0) return ja; - var vs = param$0[2], v = param$0[1]; - ja[i$0] = caml_call1(conv, v); - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - param$0 = vs; - } - } - return loop(0, create$3(0), l); - } - function v(name, msg){ - var e = new global["Error"](msg); - if(! name) return e; - var n = name[1]; - e[cst_name] = n; - return e; - } - function throw$0(name, msg){ - var e = v(name, msg); - return caml_call1(function(exn){throw exn;}, e); - } - var promise = global["Promise"]; - function create$4(f){ - function g(res, rej){ - return caml_call2 - (f, function(x){return res(x);}, function(x){return rej(x);}); - } - return new promise(caml_js_wrap_callback_strict(2, g)); - } - function resolve(v){return promise.resolve(v);} - function bind(p, res){return p.then(caml_js_wrap_callback_strict(1, res));} - function then(p, res, rej){ - return p.then - (caml_js_wrap_callback_strict(1, res), - caml_js_wrap_callback_strict(1, rej)); - } - function all(arr){return promise.all(arr);} - function _cB_(_nd_){return caml_string_of_jsstring(_nd_);} - function _cC_(_nc_){return caml_jsstring_of_string(_nc_);} - function fut(p){return {fut: p};} - function promise$0(f){return f[cst_fut];} - function promise$1(f){return f[cst_fut];} - function create$5(param){ - function not_set(param){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _cD_], 1); - } - function is_set(param){return throw$0(0, "The future is already set");} - var setter = [0, not_set]; - function set_setter(resolve, reject){setter[1] = resolve; return 0;} - var p = create$4(set_setter); - function set(v){caml_call1(setter[1], v); setter[1] = is_set; return 0;} - return [0, fut(p), set]; - } - function return$0(v){return fut(resolve(v));} - function bind$0(f, fn){ - return fut - (bind - (promise$0(f), - function(v){return promise$0(caml_call1(fn, v));})); - } - function map$4(fn, f){ - return bind$0(f, function(v){return return$0(caml_call1(fn, v));}); - } - function of_list$1(fs){ - var arr = of_list$0(promise$1, fs), all$0 = all(arr); - function to_list(l){ - return resolve(to_list$0(function(_nb_){return _nb_;}, l)); - } - return fut(bind(all$0, to_list)); - } - function ok(v){return return$0([0, v]);} - function of_promise(ok, error, p){ - function ok$0(v){return resolve([0, caml_call1(ok, v)]);} - function error$0(e){return resolve([1, caml_call1(error, e)]);} - return fut(then(p, ok$0, error$0)); - } - function of_promise$0(ok, v){ - return of_promise(ok, function(_na_){return _na_;}, v); - } - function let$0(f, fn){return map$4(fn, f);} - function let$1(f, fn){ - return function(_m$_){return bind$0(f, _m$_);} - (function(e){ - if(0 !== e[0]) return return$0(e); - var v = e[1]; - return caml_call1(fn, v); - }); - } - function let$2(f, fn){ - return map$4(function(_m__){return map$0(fn, _m__);}, f); - } - global["Event"]; - function current_target(e){return e["currentTarget"];} - function listen(opt, type, f, t){ - if(opt) var sth = opt[1], opts = sth; else var opts = {}; - var f$0 = caml_js_wrap_callback_strict(1, f); - t.addEventListener(type, f$0, opts); - return; - } - global["ArrayBuffer"]; - global["DataView"]; - global["Blob"]; - global["File"]; - var json = global["JSON"]; - function encode(v){return json.stringify(v);} - function decode(s){ - try{var v = json.parse(s);} - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); - var e = exn[2]; - return [1, e]; - } - return [0, v]; - } - global["encodeURI"]; - global["decodeURI"]; - var - encode_component = global["encodeURIComponent"], - decode_component = global["decodeURIComponent"], - url = global["URL"]; - function v$0(base, s){ - if(! base) return new url(s); - var b = base[1]; - return new url(s, b); - } - var prefix = "/"; - function path(u){return get$1(u, _cE_);} - function path_segments(u){ - function decode_seg(s){return decode_component(s);} - try{ - var - p = path(u), - p$0 = starts_with(prefix, p) ? slice(_cF_, 0, p) : p, - _m9_ = [0, map$1(decode_seg, cuts(prefix, p$0))]; - return _m9_; - } - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); - var e = exn[2]; - return [1, e]; - } - } - function with_path_segments(u, segs){ - function encode_seg(s){return append(prefix, encode_component(s));} - try{ - var u$0 = new url(u), path = concat$0(0, map$1(encode_seg, segs)); - u$0[cst_pathname] = path; - var _m8_ = [0, u$0]; - return _m8_; - } - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); - var e = exn[2]; - return [1, e]; - } - } - var usp = global["URLSearchParams"]; - function to_jstr(p){return p.toString();} - function of_obj(o){return new usp(o);} - function with_query_params(u, ps){ - var u$0 = new url(u); - set$0(u$0, _cG_, to_jstr(ps)); - return u$0; - } - function to_jstr$0(u){return u.toString();} - var global_document = global["document"]; - if(! is_none(global_document)) global_document["documentElement"]; - function call(c, meth, args){caml_js_meth_call(c, meth, args); return 0;} - var _cH_ = global[cst_console]; - function msg_to_jv_array(msg){ - function loop(a, i, param){ - var i$0 = i, param$0 = param; - for(;;){ - if(! param$0) return a; - var vs = param$0[2], v = param$0[1]; - a[i$0] = v; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - param$0 = vs; - } - } - return caml_js_to_array(loop(create$3(0), 0, msg)); - } - function log(msg){return call(_cH_, _cI_, msg_to_jv_array(msg));} - function error(msg){return call(_cH_, _cJ_, msg_to_jv_array(msg));} - function info(msg){return call(_cH_, _cK_, msg_to_jv_array(msg));} - global[cst_console]; - global["navigator"]; - global["performance"]; - global["window"]; - get$0(global, _cL_); - global["ClipboardItem"]; - global["FormData"]; - function of_jstr(_m7_){return _m7_;} - function text(r){ - return of_promise$0(function(_m6_){return _m6_;}, r.text()); - } - var headers = global["Headers"]; - function of_assoc(init, l){ - if(init) var h = init[1], args = [0, h]; else var args = [0]; - var hs = caml_js_new(headers, args); - function add(hs, param){ - var v = param[2], k = param[1]; - hs.append(k, v); - return 0; - } - iter(function(_m5_){return add(hs, _m5_);}, l); - return hs; - } - function init$1 - (body, - cache, - credentials, - headers, - integrity, - keepalive, - method, - mode, - redirect, - referrer, - referrer_policy, - signal, - param){ - var o = {}; - o["body"] = of_option(undefined$0, function(_m4_){return _m4_;}, body); - set_if_some$1(o, _cM_, cache); - set_if_some$1(o, _cN_, credentials); - set_if_some(o, _cO_, map(function(_m3_){return _m3_;}, headers)); - set_if_some$1(o, _cP_, integrity); - set_if_some$0(o, _cQ_, keepalive); - set_if_some$1(o, _cR_, method); - set_if_some$1(o, _cS_, mode); - set_if_some$1(o, _cT_, redirect); - set_if_some$1(o, _cU_, referrer); - set_if_some$1(o, _cV_, referrer_policy); - o["signal"] = of_option(undefined$0, function(_m2_){return _m2_;}, signal); - return o; - } - var request = global["Request"]; - function v$1(opt, url){ - if(opt) var sth = opt[1], init = sth; else var init = {}; - return new request(url, init); - } - global["Response"]; - var fetch = global["fetch"]; - function request$0(r){ - function _mZ_(_m1_){return _m1_;} - return function(_m0_){return of_promise$0(_mZ_, _m0_);}(fetch(r)); - } - global["MediaStream"]; - global["MediaRecorder"]; - global["MessageChannel"]; - global["BroadcastChannel"]; - var message = "message"; - function data(e){return e["data"];} - global["Notification"]; - global["WebSocket"]; - var worker = global["Worker"]; - function create$6(opt, uri){ - if(opt) var sth = opt[1], opts = sth; else var opts = undefined$0; - return new worker(uri, opts); - } - global["SharedWorker"]; - function post(opts, v){ - if(opts) var o = opts[1], opts$0 = o; else var opts$0 = undefined$0; - global.postMessage(v, opts$0); - return 0; - } - global["clients"]; - global["registration"]; - global["serviceWorker"]; - function to_jv(param){ - if(0 === param[0]){var p = param[1]; return _cC_(p);} - var keys = param[1]; - return of_array(to_jv, keys); - } - function bound(lower, upper, opt, _mY_, param){ - if(opt) var sth = opt[1], lower_open = sth; else var lower_open = 0; - if(_mY_) var sth$0 = _mY_[1], upper_open = sth$0; else var upper_open = 0; - var c = global["IDBKeyRange"]; - return c.bound(lower, upper, ! ! lower_open, ! ! upper_open); - } - function old_version(t){return t["oldVersion"];} - function new_version(t){return t["newVersion"];} - var - upgrade_needed = "upgradeneeded", - success = "success", - error$0 = cst_error; - function of_jv(f, j){return [0, j, f];} - function error$1(t){return t[1][cst_error];} - function result(t){ - var _mX_ = t[1]["result"]; - return caml_call1(t[2], _mX_); - } - function on_success(f, t){ - function f$0(ev){return caml_call2(f, ev, t);} - listen(0, success, f$0, t[1]); - return t; - } - function on_error(f, t){ - function f$0(ev){return caml_call2(f, ev, t);} - listen(0, error$0, f$0, t[1]); - return t; - } - function fut$0(t){ - var match = create$5(0), set = match[2], result_fut = match[1]; - on_success(function(param, t){return set([0, result(t)]);}, t); - on_error(function(param, t){return set([1, error$1(t)]);}, t); - return result_fut; - } - function to_string$1(param){ - switch(param){ - case 0: - return _cW_; - case 1: - return _cX_; - case 2: - return _cY_; - default: return _cZ_; - } - } - function to_jv$0(d){return _cC_(to_string$1(d));} - function Content_access(Content, Key){ - function get(key, t){ - function f(jv){ - return to_option(function(j){return caml_call1(Content[4], j);}, jv); - } - return function(_mW_){return of_jv(f, _mW_);} - (t.get(caml_call1(Key[2], key))); - } - function get_all(t){ - function f(jv){ - return to_array(function(c){return caml_call1(Content[4], c);}, jv); - } - return function(_mV_){return of_jv(f, _mV_);}(t.getAll()); - } - function get_all_keys(query, t){ - if(query) - var query$0 = query[1], args = [0, query$0]; - else - var args = [0]; - function f(jv){ - return to_array(function(c){return caml_call1(Content[1][3], c);}, jv); - } - return function(_mU_){return of_jv(f, _mU_);} - (caml_js_meth_call(t, "getAllKeys", args)); - } - function key(t){ - var _mR_ = t["key"], _mS_ = Key[3]; - return function(_mT_){return to_option(_mS_, _mT_);}(_mR_); - } - function primary_key(t){ - var _mO_ = t["primaryKey"], _mP_ = Content[1][3]; - return function(_mQ_){return to_option(_mP_, _mQ_);}(_mO_); - } - function advance(count, t){t.advance(count); return t;} - function continue$0(key, t){ - if(key) - var key$0 = key[1], args = [0, caml_call1(Content[1][2], key$0)]; - else - var args = [0]; - caml_js_meth_call(t, "continue", args); - return 0; - } - var - Cursor = [0, key, primary_key, advance, continue$0], - key$0 = Cursor[1], - primary_key$0 = Cursor[2], - advance$0 = Cursor[3], - continue$1 = Cursor[4]; - function value(t){ - function of_jv(j){return caml_call1(Content[4], j);} - var v = t["value"]; - return to_option(of_jv, v); - } - function delete$0(t){ - function _mM_(param){return 0;} - return function(_mN_){return of_jv(_mM_, _mN_);}(t.delete()); - } - function update(v, t){ - var _mJ_ = t.update(caml_call1(Content[3], v)), _mK_ = Content[1][3]; - return function(_mL_){return of_jv(_mK_, _mL_);}(_mJ_); - } - var - Cursor_with_value = - [0, - key$0, - primary_key$0, - advance$0, - continue$1, - value, - delete$0, - update]; - function open_cursor(query, direction, t){ - var direction$0 = map(to_jv$0, direction); - if(query){ - var q = query[1]; - if(direction$0) - var d = direction$0[1], _mG_ = [0, q, d]; - else - var _mG_ = [0, q]; - var args = _mG_; - } - else if(direction$0) - var d$0 = direction$0[1], args = [0, null$0, d$0]; - else - var args = [0]; - function f(jv){return to_option(function(_mI_){return _mI_;}, jv);} - return function(_mH_){return of_jv(f, _mH_);} - (caml_js_meth_call(t, "openCursor", args)); - } - return [0, , get, get_all, get_all_keys, , Cursor_with_value, open_cursor]; - } - function Make_index(P, C, K){ - var - get_all_keys = function(_mF_){return Content_access(C, _mF_);}(K)[4], - name = P[1]; - return [0, , K, , , , get_all_keys, , , , , , name]; - } - function Make_object_store(C){ - var - include = function(_mE_){return Content_access(C, _mE_);}(C[1]), - get = include[2], - get_all = include[3], - Cursor_with_value = include[6], - open_cursor = include[7]; - function create_index(I){ - return function(t){ - var - key_path = to_jv(I[3][1]), - _mD_ = t.createIndex(_cC_(I[2]), key_path); - return caml_call1(I[1], _mD_);}; - } - function index(I){ - return function(t){ - var _mC_ = t.index(_cC_(I[2])); - return caml_call1(I[1], _mC_);}; - } - function put(v, key, t){ - if(key) - var - key$0 = key[1], - _my_ = caml_call1(C[1][2], key$0), - args = [0, caml_call1(C[3], v), _my_]; - else - var args = [0, caml_call1(C[3], v)]; - var _mz_ = caml_js_meth_call(t, "put", args), _mA_ = C[1][3]; - return function(_mB_){return of_jv(_mA_, _mB_);}(_mz_); - } - return [0, - C, - , - get, - get_all, - , - , - Cursor_with_value, - open_cursor, - , - , - , - create_index, - index, - put]; - } - function string_of_mode(param){ - switch(param){ - case 0: - return _c0_; - case 1: - return _c1_; - default: return _c2_; - } - } - function object_store(S){ - return function(t){ - var _mx_ = t.objectStore(_cC_(S[2][2])); - return caml_call1(S[1], _mx_);}; - } - function create_object_store(S){ - return function(opt, db){ - if(opt) - var sth = opt[1], auto_increment = sth; - else - var auto_increment = 0; - var - opts = [0, [0, _c3_, ! ! auto_increment], 0], - key_path = to_jv(S[2][1][1]), - opts$0 = [0, [0, _c4_, key_path], opts], - options = caml_js_object(of_list(opts$0)); - info([0, _c5_, [0, options, 0]]); - var _mw_ = db.createObjectStore(_cC_(S[2][2]), options); - return caml_call1(S[1], _mw_);}; - } - function delete_object_store(t, name){ - t.deleteObjectStore(_cC_(name)); - return 0; - } - function transaction(stores, opt, t){ - if(opt) var sth = opt[1], mode = sth; else var mode = 0; - var mode$0 = _cC_(string_of_mode(mode)); - function jv_of_store(S){return _cC_(S[2][2]);} - return t.transaction(of_list$0(jv_of_store, stores), mode$0); - } - function object_store_names(t){ - return function(_mv_){return to_array(_cB_, _mv_);}(t["objectStoreNames"]); - } - function on_upgrade_needed(f, t){ - function f$0(ev){ - function _ms_(_mu_){return _mu_;} - var req = function(_mt_){return of_jv(_ms_, _mt_);}(current_target(ev)); - return caml_call2(f, ev, req); - } - listen(0, upgrade_needed, f$0, t[1]); - return t; - } - function open(name, version, t){ - if(version) - var v = version[1], args = [0, name, string_of_int(v)]; - else - var args = [0, name]; - function _mk_(_mr_, _mq_, _mp_){ - return caml_js_meth_call(_mr_, _mq_, _mp_); - } - function _ml_(_mo_){return _mo_;} - return function(_mm_){return of_jv(_ml_, _mm_);} - (function(_mn_){return _mk_(t, _c6_, _mn_);}(map$3(_cC_, args))); - } - function get_factory(opt, param){ - if(opt) var sth = opt[1], global$0 = sth; else var global$0 = global; - return global$0["indexedDB"]; - } - function _c7_(_mi_){ - var _mj_ = Make_object_store(_mi_); - return [0, - _mj_[1], - , - _mj_[7], - , - _mj_[3], - _mj_[4], - , - , - _mj_[8], - , - , - _mj_[12], - _mj_[13], - _mj_[14]]; - } - function _c8_(_mg_, _mf_, _me_){ - var _mh_ = Make_index(_mg_, _mf_, _me_); - return [0, , _mh_[2], , , , , , _mh_[6], , , , _mh_[12]]; - } - function symbol$1(_md_, _mc_){return _md_ === _mc_ ? 1 : 0;} - function symbol$2(_mb_, _ma_){return _mb_ < _ma_ ? 1 : 0;} - function symbol$3(_l$_, _l__){return _l__ < _l$_ ? 1 : 0;} - function symbol$4(_l9_, _l8_){return _l8_ <= _l9_ ? 1 : 0;} - function reverse_in_place(a){ - var len = a.length - 1; - if(symbol$3(len, 0)){ - var _l4_ = (len - 1 | 0) / 2 | 0, _l3_ = 0; - if(_l4_ >= 0){ - var k = _l3_; - for(;;){ - var t = caml_check_bound(a, k)[1 + k], _l5_ = (len - 1 | 0) - k | 0; - a[1 + k] = caml_check_bound(a, _l5_)[1 + _l5_]; - var _l6_ = (len - 1 | 0) - k | 0; - caml_check_bound(a, _l6_)[1 + _l6_] = t; - var _l7_ = k + 1 | 0; - if(_l4_ === k) break; - k = _l7_; - } - } - } - return; - } - function filter_map(f, a){ - function aux(acc, i){ - var acc$0 = acc, i$0 = i; - for(;;){ - if(symbol$1(i$0, a.length - 1)){ - var a$0 = of_list(acc$0); - reverse_in_place(a$0); - return a$0; - } - var match = caml_call1(f, caml_check_bound(a, i$0)[1 + i$0]); - if(match){ - var x = match[1], i$1 = i$0 + 1 | 0, acc$1 = [0, x, acc$0]; - acc$0 = acc$1; - i$0 = i$1; - } - else{var i$2 = i$0 + 1 | 0; i$0 = i$2;} - } - } - return aux(0, 0); - } - function filter(p, a){ - return filter_map(function(x){return caml_call1(p, x) ? [0, x] : 0;}, a); - } - function int_of_color(param){ - return 82908052 <= param - ? 749039939 - <= param - ? 756711075 <= param ? 2 : 6 - : 737308346 <= param ? 4 : 3 - : -588596599 - <= param - ? 4100401 <= param ? 1 : 7 - : -605101559 <= param ? 5 : 0; - } - function code_of_style(param){ - if(typeof param === "number") return 737455525 <= param ? 1 : 0; - if(15681 <= param[1]){var c = param[2]; return 30 + int_of_color(c) | 0;} - var c$0 = param[2]; - return 40 + int_of_color(c$0) | 0; - } - function string_of_style(a){ - var _l2_ = code_of_style(a); - return caml_call1(sprintf(_c9_), _l2_); - } - string_of_style(-101336657); - function equal$0(a, b){return a === b ? 1 : 0;} - function is_empty(param){return param ? 0 : 1;} - function symbol$5(f, l){ - if(! l) return 0; - var tl = l[2], x = l[1], x$0 = caml_call1(f, x), block = [0, x$0, 24029]; - map_dps(block, 1, f, tl); - return block; - } - function map_dps(dst, offset, f, l){ - var dst$0 = dst, offset$0 = offset, l$0 = l; - for(;;){ - if(! l$0){dst$0[1 + offset$0] = 0; return;} - var - tl = l$0[2], - x = l$0[1], - x$0 = caml_call1(f, x), - dst$1 = [0, x$0, 24029]; - dst$0[1 + offset$0] = dst$1; - dst$0 = dst$1; - offset$0 = 1; - l$0 = tl; - } - } - function filter_map$0(f, l){ - function recurse(acc, l){ - var acc$0 = acc, l$0 = l; - for(;;){ - if(! l$0) return rev(acc$0); - var l$1 = l$0[2], x = l$0[1], match = caml_call1(f, x); - if(match) - var y = match[1], acc$1 = [0, y, acc$0]; - else - var acc$1 = acc$0; - acc$0 = acc$1; - l$0 = l$1; - } - } - return recurse(0, l); - } - function iteri(f, l){ - function aux(f, i, l){ - var i$0 = i, l$0 = l; - for(;;){ - if(! l$0) return 0; - var l$1 = l$0[2], x = l$0[1]; - caml_call2(f, i$0, x); - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - l$0 = l$1; - } - } - return aux(f, 0, l); - } - function symbol$6(f, param){ - if(! param) return 0; - var x = param[1]; - return [0, caml_call1(f, x)]; - } - function is_none$0(param){return param ? 0 : 1;} - function iter$2(f, o){ - if(! o) return 0; - var x = o[1]; - return caml_call1(f, x); - } - function value$0(x, default$0){ - if(! x) return default$0; - var y = x[1]; - return y; - } - function get_exn_or(msg, param){ - if(! param) return invalid_arg(msg); - var x = param[1]; - return x; - } - make_self_init(0); - function symbol$7(f, e){ - if(0 === e[0]){var x = e[1]; return [0, caml_call1(f, x)];} - var s = e[1]; - return [1, s]; - } - function map_err(f, e){ - if(0 === e[0]) return e; - var y = e[1]; - return [1, caml_call1(f, y)]; - } - var Get_error = [248, _c__, caml_fresh_oo_id(0)]; - function get_exn(param){ - if(0 !== param[0]) throw caml_maybe_attach_backtrace(Get_error, 1); - var x = param[1]; - return x; - } - function flatten_l(l){ - function loop(acc, l){ - var acc$0 = acc, l$0 = l; - for(;;){ - if(! l$0) return [0, rev(acc$0)]; - var match = l$0[1]; - if(0 !== match[0]){var e = match[1]; return [1, e];} - var l$1 = l$0[2], x = match[1], acc$1 = [0, x, acc$0]; - acc$0 = acc$1; - l$0 = l$1; - } - } - return loop(0, l); - } - function symbol$8(e, f){return symbol$7(f, e);} - function Make$0(O){ - var S = _L_(O), empty = S[1], add = S[4], elements = S[23]; - return [0, - , - , - , - empty, - , - , - add, - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - elements]; - } - function _c$_(_l0_){ - var _l1_ = Make$0(_l0_); - return [0, - _l1_[4], - , - , - _l1_[7], - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - _l1_[51]]; - } - function length$1(_lZ_){return caml_ml_string_length(_lZ_);} - function is_empty$0(s){return symbol$0(s, _da_);} - function kmp_pattern_length(p){return caml_ml_string_length(p[2]);} - function get$2(dir){ - return dir - ? function - (s, i){ - return caml_string_get - (s, (caml_ml_string_length(s) - i | 0) - 1 | 0); - } - : function(_lY_, _lX_){return caml_string_get(_lY_, _lX_);}; - } - function kmp_compile(dir, str){ - var len = length$1(str), get = get$2(dir); - if(0 === len) return [0, [0], str]; - if(1 === len) return [0, [0, -1], str]; - var failure = caml_make_vect(len, 0); - caml_check_bound(failure, 0)[1] = -1; - var i = [0, 2], j = [0, 0]; - for(;;){ - if(! symbol$2(i[1], len)) return [0, failure, str]; - var match = j[1], _lS_ = get(str, j[1]); - if(equal(get(str, i[1] - 1 | 0), _lS_)){ - j[1]++; - var _lU_ = i[1], _lT_ = j[1]; - caml_check_bound(failure, _lU_)[1 + _lU_] = _lT_; - i[1]++; - } - else if(0 === match){ - var _lV_ = i[1]; - caml_check_bound(failure, _lV_)[1 + _lV_] = 0; - i[1]++; - } - else{ - if(! symbol$3(j[1], 0)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _db_], 1); - var _lW_ = j[1]; - j[1] = caml_check_bound(failure, _lW_)[1 + _lW_]; - } - } - } - function kmp_compile$0(s){return kmp_compile(0, s);} - function kmp_find(pattern, s, idx){ - var - len = length$1(s), - i = [0, idx], - j = [0, 0], - pat_len = kmp_pattern_length(pattern); - for(;;){ - if(symbol$2(j[1], pat_len) && symbol$2(i[1] + j[1] | 0, len)){ - var - c = caml_string_get(s, i[1] + j[1] | 0), - expected = caml_string_get(pattern[2], j[1]); - if(equal(c, expected)) - j[1]++; - else{ - var - _lR_ = j[1], - fail_offset = caml_check_bound(pattern[1], _lR_)[1 + _lR_]; - if(symbol$4(fail_offset, 0)){ - if(! symbol$2(fail_offset, j[1])) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dc_], 1); - i[1] = (i[1] + j[1] | 0) - fail_offset | 0; - j[1] = fail_offset; - } - else{j[1] = 0; i[1]++;} - } - continue; - } - return symbol$1(j[1], pat_len) ? i[1] : -1; - } - } - function compile(sub){ - return symbol$1(length$1(sub), 1) - ? [0, caml_string_get(sub, 0)] - : [1, kmp_compile$0(sub)]; - } - function find$0(opt, pattern){ - if(opt) var sth = opt[1], start = sth; else var start = 0; - return function(s){ - if(0 !== pattern[0]){ - var pattern$0 = pattern[1]; - return kmp_find(pattern$0, s, start); - } - var c = pattern[1]; - try{var _lP_ = index_from(s, start, c); return _lP_;} - catch(_lQ_){ - var _lO_ = caml_wrap_exception(_lQ_); - if(_lO_ === Not_found) return -1; - throw caml_maybe_attach_backtrace(_lO_, 0); - }}; - } - function prefix$0(pre, s){ - var len = caml_ml_string_length(pre); - if(symbol$3(len, caml_ml_string_length(s))) return 0; - function check(i){ - var i$0 = i; - for(;;){ - if(symbol$1(i$0, len)) return 1; - if(caml_string_unsafe_get(s, i$0) !== caml_string_unsafe_get(pre, i$0)) - return 0; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - } - } - return check(0); - } - make_self_init(0); - var Set = _c$_([0, compare$0]); - function to_jstr$1(t){return encode(t);} - function of_jstr$0(jstr){ - var match = decode(jstr); - if(0 === match[0]){var v = match[1]; return [0, v];} - var err = match[1]; - error([0, err, 0]); - return _dd_; - } - get_state(0); - function utf8_of_code(buf, x){ - function maxbits(n, x){return 0 === (x >>> n | 0) ? 1 : 0;} - if(maxbits(7, x)) return add_char(buf, of_int_exn(x)); - if(maxbits(11, x)){ - add_char(buf, of_int_exn(192 | (x >>> 6 | 0) & 31)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - if(maxbits(16, x)){ - add_char(buf, of_int_exn(224 | (x >>> 12 | 0) & 15)); - add_char(buf, of_int_exn(128 | (x >>> 6 | 0) & 63)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - if(maxbits(21, x)){ - add_char(buf, of_int_exn(240 | (x >>> 18 | 0) & 7)); - add_char(buf, of_int_exn(128 | (x >>> 12 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 6 | 0) & 63)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - if(maxbits(26, x)){ - add_char(buf, of_int_exn(248 | (x >>> 24 | 0) & 3)); - add_char(buf, of_int_exn(128 | (x >>> 18 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 12 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 6 | 0) & 63)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - if(! maxbits(31, x)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _de_], 1); - add_char(buf, of_int_exn(252 | (x >>> 30 | 0) & 1)); - add_char(buf, of_int_exn(128 | (x >>> 24 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 18 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 12 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 6 | 0) & 63)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - function code_of_surrogate_pair(i, j){ - var high10 = i - 55296 | 0, low10 = j - 56320 | 0; - return 65536 + (high10 << 10 | low10) | 0; - } - function utf8_of_surrogate_pair(buf, i, j){ - return utf8_of_code(buf, code_of_surrogate_pair(i, j)); - } - var Json_error = [248, _df_, caml_fresh_oo_id(0)]; - function json_error(s){ - throw caml_maybe_attach_backtrace([0, Json_error, s], 1); - } - var - End_of_array = [248, _dg_, caml_fresh_oo_id(0)], - End_of_object = [248, _dh_, caml_fresh_oo_id(0)], - End_of_tuple = [248, _di_, caml_fresh_oo_id(0)], - End_of_input = [248, _dj_, caml_fresh_oo_id(0)]; - function init_lexer(buf, fname, opt, param){ - if(opt) var sth = opt[1], lnum = sth; else var lnum = 1; - if(buf) var buf$0 = buf[1], buf$1 = buf$0; else var buf$1 = create$1(256); - return [0, buf$1, lnum, 0, fname]; - } - function read_junk$0(counter, buf, n, lexbuf){ - var _lN_ = 0; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_read_junk_rec, [0, buf, n, lexbuf, _lN_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_read_junk_rec(counter$0, buf, n, lexbuf, _lN_); - } - function read_junk(buf, n, lexbuf){ - return caml_trampoline(read_junk$0(0, buf, n, lexbuf)); - } - function ocaml_lex_read_junk_rec(counter, buf, n, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = engine(ocaml_lex_tables, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) return; - if(1 === ocaml_lex_state$1){ - if(0 >= n) return; - add_char(buf, lexeme_char(lexbuf, 0)); - var _lM_ = n - 1 | 0; - if(counter >= 50) - return caml_trampoline_return(read_junk$0, [0, buf, _lM_, lexbuf]); - var counter$0 = counter + 1 | 0; - return read_junk$0(counter$0, buf, _lM_, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_junk_without_positions(buf, n, lexbuf){ - var lex_abs_pos = lexbuf[4], lex_start_pos = lexbuf[5]; - read_junk(buf, n, lexbuf); - lexbuf[5] = lex_start_pos + 1 | 0; - lexbuf[4] = lex_abs_pos; - return; - } - function hex(n){ - var _lL_ = 10 <= n ? n + 87 | 0 : n + 48 | 0; - return of_int_exn(_lL_); - } - function write_special(src, start, stop, ob, str){ - add_substring(ob, src, start[1], stop - start[1] | 0); - write_stringlit(ob, str); - start[1] = stop + 1 | 0; - return; - } - function write_control_char(src, start, stop, ob, c){ - add_substring(ob, src, start[1], stop - start[1] | 0); - write_stringlit(ob, _dk_); - add_char(ob, hex(c >>> 4 | 0)); - add_char(ob, hex(c & 15)); - start[1] = stop + 1 | 0; - return; - } - function finish_string(src, start, ob){ - try{ - add_substring - (ob, src, start[1], caml_ml_string_length(src) - start[1] | 0); - return; - } - catch(exc$0){ - var - exc = caml_wrap_exception(exc$0), - _lJ_ = caml_ml_string_length(src) - start[1] | 0, - _lK_ = start[1]; - caml_call3(eprintf(_dl_), src, _lK_, _lJ_); - throw caml_maybe_attach_backtrace(exc, 0); - } - } - function write_string_body(ob, s){ - var start = [0, 0], _lH_ = caml_ml_string_length(s) - 1 | 0, _lG_ = 0; - if(_lH_ >= 0){ - var i = _lG_; - for(;;){ - var c = caml_string_get(s, i); - a: - if(92 === c) - write_special(s, start, i, ob, _dm_); - else{ - b: - { - c: - { - if(35 > c){ - if(8 > c) break b; - switch(c - 8 | 0){ - case 0: - write_special(s, start, i, ob, _dn_); break; - case 1: - write_special(s, start, i, ob, _do_); break; - case 2: - write_special(s, start, i, ob, _dp_); break; - case 4: - write_special(s, start, i, ob, _dq_); break; - case 5: - write_special(s, start, i, ob, _dr_); break; - case 26: - write_special(s, start, i, ob, _ds_); break; - case 24: - case 25: - break c; - default: break b; - } - break a; - } - if(127 === c) break b; - } - break a; - } - write_control_char(s, start, i, ob, c); - } - var _lI_ = i + 1 | 0; - if(_lH_ === i) break; - i = _lI_; - } - } - return finish_string(s, start, ob); - } - function write_string(ob, s){ - add_char(ob, 34); - write_string_body(ob, s); - return add_char(ob, 34); - } - function write_null(ob, param){return write_stringlit(ob, _dt_);} - function write_bool(ob, x){ - var _lF_ = x ? _du_ : _dv_; - return write_stringlit(ob, _lF_); - } - function dec(n){return of_int_exn(n + 48 | 0);} - function write_digits(s, x){ - if(0 === x) return 0; - var d = x % 10 | 0; - write_digits(s, x / 10 | 0); - return add_char(s, dec(abs(d))); - } - function write_int(ob, x){ - return 0 < x - ? write_digits(ob, x) - : 0 - <= x - ? add_char(ob, 48) - : (add_char(ob, 45), write_digits(ob, x)); - } - function float_needs_period(s){ - try{ - var _lB_ = caml_ml_string_length(s) - 1 | 0, _lA_ = 0; - if(_lB_ >= 0){ - var i = _lA_; - for(;;){ - var match = caml_string_get(s, i); - a: - { - if(48 <= match){ - if(58 > match) break a; - } - else if(45 === match) break a; - throw caml_maybe_attach_backtrace(Exit, 1); - } - var _lD_ = i + 1 | 0; - if(_lB_ === i) break; - i = _lD_; - } - } - var _lC_ = 1; - return _lC_; - } - catch(_lE_){ - var _lz_ = caml_wrap_exception(_lE_); - if(_lz_ === Exit) return 0; - throw caml_maybe_attach_backtrace(_lz_, 0); - } - } - function write_float(ob, x){ - var match = caml_classify_float(x); - if(3 === match){ - var _lx_ = 0. < x ? _dw_ : _dx_; - return write_stringlit(ob, _lx_); - } - if(4 <= match) return write_stringlit(ob, _dy_); - var - s1 = caml_call1(sprintf(_dz_), x), - s = caml_float_of_string(s1) == x ? s1 : caml_call1(sprintf(_dB_), x); - write_stringlit(ob, s); - var _ly_ = float_needs_period(s); - return _ly_ ? write_stringlit(ob, _dA_) : _ly_; - } - function write_std_float(ob, x){ - var match = caml_classify_float(x); - if(3 === match){var _lv_ = 0. < x ? _dC_ : _dD_; return json_error(_lv_);} - if(4 <= match) return json_error(_dE_); - var - s1 = caml_call1(sprintf(_dF_), x), - s = caml_float_of_string(s1) == x ? s1 : caml_call1(sprintf(_dH_), x); - write_stringlit(ob, s); - var _lw_ = float_needs_period(s); - return _lw_ ? write_stringlit(ob, _dG_) : _lw_; - } - function iter2_aux(f_elt, f_sep, x, param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var l = param$0[2], y = param$0[1]; - caml_call1(f_sep, x); - caml_call2(f_elt, x, y); - param$0 = l; - } - } - function iter2(f_elt, f_sep, x, param){ - if(! param) return; - var l = param[2], y = param[1]; - caml_call2(f_elt, x, y); - return iter2_aux(f_elt, f_sep, x, l); - } - function f_sep(ob){return add_char(ob, 44);} - function write_json(ob, x){ - if(typeof x === "number") return write_null(ob, 0); - var _lu_ = x[1]; - if(708012133 <= _lu_){ - if(726928360 === _lu_){var l = x[2]; return write_tuple(ob, l);} - if(848054398 <= _lu_){ - if(963043957 <= _lu_){var l$0 = x[2]; return write_assoc(ob, l$0);} - var l$1 = x[2]; - return write_list(ob, l$1); - } - if(737456202 <= _lu_){var b = x[2]; return write_bool(ob, b);} - var match = x[2], o = match[2], s = match[1]; - return write_variant(ob, s, o); - } - if(3654863 <= _lu_){ - if(365180284 <= _lu_){var f = x[2]; return write_float(ob, f);} - var i = x[2]; - return write_int(ob, i); - } - if(-752863768 <= _lu_){var s$0 = x[2]; return write_stringlit(ob, s$0);} - var s$1 = x[2]; - return write_string(ob, s$1); - } - function write_assoc(ob, l){ - function f_elt(ob, param){ - var x = param[2], s = param[1]; - write_string(ob, s); - add_char(ob, 58); - return write_json(ob, x); - } - add_char(ob, 123); - iter2(f_elt, f_sep, ob, l); - return add_char(ob, 125); - } - function write_list(ob, l){ - add_char(ob, 91); - iter2(write_json, f_sep, ob, l); - return add_char(ob, 93); - } - function write_tuple(ob, l){ - add_char(ob, 40); - iter2(write_json, f_sep, ob, l); - return add_char(ob, 41); - } - function write_variant(ob, s, o){ - add_char(ob, 60); - write_string(ob, s); - if(o){var x = o[1]; add_char(ob, 58); write_json(ob, x);} - return add_char(ob, 62); - } - function write_std_json(ob, x){ - if(typeof x === "number") return write_null(ob, 0); - var _lt_ = x[1]; - if(708012133 <= _lt_){ - if(726928360 === _lt_){var l = x[2]; return write_std_tuple(ob, l);} - if(848054398 <= _lt_){ - if(963043957 <= _lt_){var l$0 = x[2]; return write_std_assoc(ob, l$0);} - var l$1 = x[2]; - return write_std_list(ob, l$1); - } - if(737456202 <= _lt_){var b = x[2]; return write_bool(ob, b);} - var match = x[2], o = match[2], s = match[1]; - return write_std_variant(ob, s, o); - } - if(3654863 <= _lt_){ - if(365180284 <= _lt_){var f = x[2]; return write_std_float(ob, f);} - var i = x[2]; - return write_int(ob, i); - } - if(-752863768 <= _lt_){var s$0 = x[2]; return write_stringlit(ob, s$0);} - var s$1 = x[2]; - return write_string(ob, s$1); - } - function write_std_assoc(ob, l){ - function f_elt(ob, param){ - var x = param[2], s = param[1]; - write_string(ob, s); - add_char(ob, 58); - return write_std_json(ob, x); - } - add_char(ob, 123); - iter2(f_elt, f_sep, ob, l); - return add_char(ob, 125); - } - function write_std_list(ob, l){ - add_char(ob, 91); - iter2(write_std_json, f_sep, ob, l); - return add_char(ob, 93); - } - function write_std_tuple(ob, l){ - add_char(ob, 91); - iter2(write_std_json, f_sep, ob, l); - return add_char(ob, 93); - } - function write_std_variant(ob, s, o){ - if(! o) return write_string(ob, s); - var x = o[1]; - add_char(ob, 91); - write_string(ob, s); - add_char(ob, 44); - write_std_json(ob, x); - return add_char(ob, 93); - } - function to_buffer(opt, _ls_, ob, x){ - if(opt) var sth = opt[1], suf = sth; else var suf = _dI_; - if(_ls_) var sth$0 = _ls_[1], std = sth$0; else var std = 0; - if(std) write_std_json(ob, x); else write_json(ob, x); - return write_stringlit(ob, suf); - } - function to_string$2(buf, opt, _lr_, std, x){ - if(opt) var sth = opt[1], len = sth; else var len = 256; - if(_lr_) var sth$0 = _lr_[1], suf = sth$0; else var suf = _dJ_; - if(buf){ - var ob = buf[1]; - clear$1(ob); - var ob$0 = ob; - } - else - var ob$0 = create$1(len); - to_buffer([0, suf], std, ob$0, x); - var s = contents(ob$0); - clear$1(ob$0); - return s; - } - function engine$0(tbl, state, buf){ - var result = caml_lex_engine(tbl, state, buf); - return result; - } - function dec$0(c){return c - 48 | 0;} - function hex$0(c){ - if(65 <= c){ - if(97 <= c){ - if(103 > c) return (c - 97 | 0) + 10 | 0; - } - else if(71 > c) return (c - 65 | 0) + 10 | 0; - } - else if(9 >= c - 48 >>> 0) return c - 48 | 0; - throw caml_maybe_attach_backtrace([0, Assert_failure, _dK_], 1); - } - function custom_error(descr, v, lexbuf){ - var - offs = lexbuf[4] - 1 | 0, - bol = v[3], - pos1 = ((offs + lexbuf[5] | 0) - bol | 0) - 1 | 0, - pos2 = max(pos1, (offs + lexbuf[6] | 0) - bol | 0), - match = v[4]; - if(match) - var s = match[1], file_line = caml_call1(sprintf(_dL_), s); - else - var file_line = _dP_; - var - bytes = - pos1 === pos2 - ? caml_call1(sprintf(_dM_), pos1 + 1 | 0) - : caml_call2(sprintf(_dO_), pos1 + 1 | 0, pos2 + 1 | 0), - _lq_ = v[2], - msg = caml_call4(sprintf(_dN_), file_line, _lq_, bytes, descr); - return json_error(msg); - } - function long_error(descr, v, lexbuf){ - var junk = lexeme(lexbuf), buf_size = 32, buf = create$1(buf_size); - read_junk_without_positions(buf, buf_size, lexbuf); - var extra_junk = contents(buf); - return custom_error - (caml_call3(sprintf(_dQ_), descr, junk, extra_junk), v, lexbuf); - } - var Int_overflow = [248, _dR_, caml_fresh_oo_id(0)]; - function extract_positive_int(lexbuf){ - var - start = lexbuf[5], - stop = lexbuf[6], - s = lexbuf[2], - n = [0, 0], - _ln_ = stop - 1 | 0; - if(_ln_ >= start){ - var i = start; - for(;;){ - if(214748365 <= n[1]) - throw caml_maybe_attach_backtrace(Int_overflow, 1); - var _lo_ = dec$0(caml_bytes_get(s, i)); - n[1] = (10 * n[1] | 0) + _lo_ | 0; - var _lp_ = i + 1 | 0; - if(_ln_ === i) break; - i = _lp_; - } - } - if(0 <= n[1]) return n[1]; - throw caml_maybe_attach_backtrace(Int_overflow, 1); - } - function make_positive_int(v, lexbuf){ - try{var _ll_ = [0, 3654863, extract_positive_int(lexbuf)]; return _ll_;} - catch(_lm_){ - var _lk_ = caml_wrap_exception(_lm_); - if(_lk_ === Int_overflow) return [0, -752863768, lexeme(lexbuf)]; - throw caml_maybe_attach_backtrace(_lk_, 0); - } - } - function extract_negative_int(lexbuf){ - var - start = lexbuf[5] + 1 | 0, - stop = lexbuf[6], - s = lexbuf[2], - n = [0, 0], - _lh_ = stop - 1 | 0; - if(_lh_ >= start){ - var i = start; - for(;;){ - if(n[1] <= -214748365) - throw caml_maybe_attach_backtrace(Int_overflow, 1); - var _li_ = dec$0(caml_bytes_get(s, i)); - n[1] = (10 * n[1] | 0) - _li_ | 0; - var _lj_ = i + 1 | 0; - if(_lh_ === i) break; - i = _lj_; - } - } - if(0 < n[1]) throw caml_maybe_attach_backtrace(Int_overflow, 1); - return n[1]; - } - function make_negative_int(v, lexbuf){ - try{var _lf_ = [0, 3654863, extract_negative_int(lexbuf)]; return _lf_;} - catch(_lg_){ - var _le_ = caml_wrap_exception(_lg_); - if(_le_ === Int_overflow) return [0, -752863768, lexeme(lexbuf)]; - throw caml_maybe_attach_backtrace(_le_, 0); - } - } - function newline(v, lexbuf){ - v[2] = v[2] + 1 | 0; - v[3] = lexbuf[4] + lexbuf[6] | 0; - return; - } - function add_lexeme(buf, lexbuf){ - var len = lexbuf[6] - lexbuf[5] | 0; - return add_subbytes(buf, lexbuf[2], lexbuf[5], len); - } - function read_json$0(counter, v, lexbuf){ - var _ld_ = 0; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_read_json_rec, [0, v, lexbuf, _ld_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_read_json_rec(counter$0, v, lexbuf, _ld_); - } - function read_json(v, lexbuf){ - return caml_trampoline(read_json$0(0, v, lexbuf)); - } - function ocaml_lex_read_json_rec(counter, v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(19 < ocaml_lex_state$1 >>> 0){ - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - else - switch(ocaml_lex_state$1){ - case 0: - return _dS_; - case 1: - return _dT_; - case 2: - return 870828711; - case 3: - return [0, 365180284, nan]; - case 4: - return [0, 365180284, infinity]; - case 5: - return [0, 365180284, neg_infinity]; - case 6: - clear$1(v[1]); return [0, -976970511, finish_string$0(v, lexbuf)]; - case 7: - return make_positive_int(v, lexbuf); - case 8: - return make_negative_int(v, lexbuf); - case 9: - return [0, 365180284, caml_float_of_string(lexeme(lexbuf))]; - case 10: - var acc = [0, 0]; - try{ - read_space(v, lexbuf); - read_object_end(lexbuf); - var field_name = read_ident(v, lexbuf); - read_space(v, lexbuf); - read_colon(v, lexbuf); - read_space(v, lexbuf); - var _k4_ = acc[1]; - acc[1] = [0, [0, field_name, read_json(v, lexbuf)], _k4_]; - for(;;){ - read_space(v, lexbuf); - read_object_sep(v, lexbuf); - read_space(v, lexbuf); - var field_name$0 = read_ident(v, lexbuf); - read_space(v, lexbuf); - read_colon(v, lexbuf); - read_space(v, lexbuf); - var _k5_ = acc[1]; - acc[1] = [0, [0, field_name$0, read_json(v, lexbuf)], _k5_]; - } - } - catch(_lc_){ - var _k3_ = caml_wrap_exception(_lc_); - if(_k3_ === End_of_object) return [0, 963043957, rev(acc[1])]; - throw caml_maybe_attach_backtrace(_k3_, 0); - } - break; - case 11: - var acc$0 = [0, 0]; - try{ - read_space(v, lexbuf); - read_array_end(lexbuf); - var _k7_ = acc$0[1]; - acc$0[1] = [0, read_json(v, lexbuf), _k7_]; - for(;;){ - read_space(v, lexbuf); - read_array_sep(v, lexbuf); - read_space(v, lexbuf); - var _k8_ = acc$0[1]; - acc$0[1] = [0, read_json(v, lexbuf), _k8_]; - } - } - catch(_lb_){ - var _k6_ = caml_wrap_exception(_lb_); - if(_k6_ === End_of_array) return [0, 848054398, rev(acc$0[1])]; - throw caml_maybe_attach_backtrace(_k6_, 0); - } - break; - case 12: - var acc$1 = [0, 0]; - try{ - read_space(v, lexbuf); - read_tuple_end(lexbuf); - var _k__ = acc$1[1]; - acc$1[1] = [0, read_json(v, lexbuf), _k__]; - for(;;){ - read_space(v, lexbuf); - read_tuple_sep(v, lexbuf); - read_space(v, lexbuf); - var _k$_ = acc$1[1]; - acc$1[1] = [0, read_json(v, lexbuf), _k$_]; - } - } - catch(_la_){ - var _k9_ = caml_wrap_exception(_la_); - if(_k9_ === End_of_tuple) return [0, 726928360, rev(acc$1[1])]; - throw caml_maybe_attach_backtrace(_k9_, 0); - } - break; - case 13: - read_space(v, lexbuf); - var cons = read_ident(v, lexbuf); - read_space(v, lexbuf); - return [0, 708012133, [0, cons, finish_variant(v, lexbuf)]]; - case 14: - if(counter >= 50) - return caml_trampoline_return(read_json$0, [0, v, lexbuf]); - var counter$0 = counter + 1 | 0; - return read_json$0(counter$0, v, lexbuf); - case 15: - finish_comment(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_json$0, [0, v, lexbuf]); - var counter$1 = counter + 1 | 0; - return read_json$0(counter$1, v, lexbuf); - case 16: - newline(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_json$0, [0, v, lexbuf]); - var counter$2 = counter + 1 | 0; - return read_json$0(counter$2, v, lexbuf); - case 17: - if(counter >= 50) - return caml_trampoline_return(read_json$0, [0, v, lexbuf]); - var counter$3 = counter + 1 | 0; - return read_json$0(counter$3, v, lexbuf); - case 18: - return custom_error(_dU_, v, lexbuf); - default: return long_error(_dV_, v, lexbuf); - } - } - } - function finish_string$1(counter, v, lexbuf){ - var _k2_ = 58; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_finish_string_rec, [0, v, lexbuf, _k2_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_finish_string_rec(counter$0, v, lexbuf, _k2_); - } - function finish_string$0(v, lexbuf){ - return caml_trampoline(finish_string$1(0, v, lexbuf)); - } - function ocaml_lex_finish_string_rec(counter, v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return contents(v[1]); - case 1: - finish_escaped_char(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(finish_string$1, [0, v, lexbuf]); - var counter$0 = counter + 1 | 0; - return finish_string$1(counter$0, v, lexbuf); - case 2: - add_lexeme(v[1], lexbuf); - if(counter >= 50) - return caml_trampoline_return(finish_string$1, [0, v, lexbuf]); - var counter$1 = counter + 1 | 0; - return finish_string$1(counter$1, v, lexbuf); - default: return custom_error(_dW_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish_escaped_char(v, lexbuf){ - return ocaml_lex_finish_escaped_char_(v, lexbuf, 68); - } - function ocaml_lex_finish_escaped_char_(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(8 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - var c = sub_lexeme_char(lexbuf, lexbuf[5]); return add_char(v[1], c); - case 1: - return add_char(v[1], 8); - case 2: - return add_char(v[1], 12); - case 3: - return add_char(v[1], 10); - case 4: - return add_char(v[1], 13); - case 5: - return add_char(v[1], 9); - case 6: - var - a = sub_lexeme_char(lexbuf, lexbuf[5] + 1 | 0), - b = sub_lexeme_char(lexbuf, lexbuf[5] + 2 | 0), - c$0 = sub_lexeme_char(lexbuf, lexbuf[5] + 3 | 0), - d = sub_lexeme_char(lexbuf, lexbuf[5] + 4 | 0), - _kZ_ = hex$0(d), - _k0_ = hex$0(c$0) << 4, - _k1_ = hex$0(b) << 8, - x = hex$0(a) << 12 | _k1_ | _k0_ | _kZ_; - if(55296 <= x && 56319 >= x) - return finish_surrogate_pair(v, x, lexbuf); - return utf8_of_code(v[1], x); - case 7: - return long_error(_dX_, v, lexbuf); - default: return custom_error(_dY_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish_surrogate_pair(v, x, lexbuf){ - return ocaml_lex_finish_surrogate_pai(v, x, lexbuf, 82); - } - function ocaml_lex_finish_surrogate_pai(v, x, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(2 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - var - a = sub_lexeme_char(lexbuf, lexbuf[5] + 2 | 0), - b = sub_lexeme_char(lexbuf, lexbuf[5] + 3 | 0), - c = sub_lexeme_char(lexbuf, lexbuf[5] + 4 | 0), - d = sub_lexeme_char(lexbuf, lexbuf[5] + 5 | 0), - _kW_ = hex$0(d), - _kX_ = hex$0(c) << 4, - _kY_ = hex$0(b) << 8, - y = hex$0(a) << 12 | _kY_ | _kX_ | _kW_; - if(56320 <= y && 57343 >= y) - return utf8_of_surrogate_pair(v[1], x, y); - return long_error(_dZ_, v, lexbuf); - case 1: - return long_error(_d0_, v, lexbuf); - default: return custom_error(_d1_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish_variant(v, lexbuf){ - return ocaml_lex_finish_variant_rec(v, lexbuf, 102); - } - function ocaml_lex_finish_variant_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - var x = read_json(v, lexbuf); - read_space(v, lexbuf); - read_gt(v, lexbuf); - return [0, x]; - case 1: - return 0; - case 2: - return long_error(_d2_, v, lexbuf); - default: return custom_error(_d3_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_gt(v, lexbuf){return ocaml_lex_read_gt_rec(v, lexbuf, 111);} - function ocaml_lex_read_gt_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(2 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - return long_error(_d4_, v, lexbuf); - default: return custom_error(_d5_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish_comment$0(counter, v, lexbuf){ - var _kV_ = 125; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_finish_comment_rec, [0, v, lexbuf, _kV_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_finish_comment_rec(counter$0, v, lexbuf, _kV_); - } - function finish_comment(v, lexbuf){ - return caml_trampoline(finish_comment$0(0, v, lexbuf)); - } - function ocaml_lex_finish_comment_rec(counter, v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - return long_error(_d6_, v, lexbuf); - case 2: - newline(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(finish_comment$0, [0, v, lexbuf]); - var counter$0 = counter + 1 | 0; - return finish_comment$0(counter$0, v, lexbuf); - default: - if(counter >= 50) - return caml_trampoline_return(finish_comment$0, [0, v, lexbuf]); - var counter$1 = counter + 1 | 0; - return finish_comment$0(counter$1, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_eof(lexbuf){return ocaml_lex_read_eof_rec(lexbuf, 131);} - function ocaml_lex_read_eof_rec(lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) return 1; - if(1 === ocaml_lex_state$1) return 0; - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_space$0(counter, v, lexbuf){ - var _kU_ = 133; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_read_space_rec, [0, v, lexbuf, _kU_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_read_space_rec(counter$0, v, lexbuf, _kU_); - } - function read_space(v, lexbuf){ - return caml_trampoline(read_space$0(0, v, lexbuf)); - } - function ocaml_lex_read_space_rec(counter, v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(4 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - newline(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_space$0, [0, v, lexbuf]); - var counter$0 = counter + 1 | 0; - return read_space$0(counter$0, v, lexbuf); - case 1: - finish_comment(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_space$0, [0, v, lexbuf]); - var counter$1 = counter + 1 | 0; - return read_space$0(counter$1, v, lexbuf); - case 2: - newline(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_space$0, [0, v, lexbuf]); - var counter$2 = counter + 1 | 0; - return read_space$0(counter$2, v, lexbuf); - case 3: - if(counter >= 50) - return caml_trampoline_return(read_space$0, [0, v, lexbuf]); - var counter$3 = counter + 1 | 0; - return read_space$0(counter$3, v, lexbuf); - default: return; - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_ident(v, lexbuf){ - return ocaml_lex_read_ident_rec(v, lexbuf, 237); - } - function ocaml_lex_read_ident_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - clear$1(v[1]); return finish_string$0(v, lexbuf); - case 1: - var s = sub_lexeme(lexbuf, lexbuf[5], lexbuf[6]); return s; - case 2: - return long_error(_d7_, v, lexbuf); - default: return custom_error(_d8_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_array_end(lexbuf){ - return ocaml_lex_read_array_end_rec(lexbuf, 255); - } - function ocaml_lex_read_array_end_rec(lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) - throw caml_maybe_attach_backtrace(End_of_array, 1); - if(1 === ocaml_lex_state$1) return; - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_array_sep(v, lexbuf){ - return ocaml_lex_read_array_sep_rec(v, lexbuf, 257); - } - function ocaml_lex_read_array_sep_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - throw caml_maybe_attach_backtrace(End_of_array, 1); - case 2: - return long_error(_d9_, v, lexbuf); - default: return custom_error(_d__, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_tuple_end(lexbuf){ - return ocaml_lex_read_tuple_end_rec(lexbuf, 266); - } - function ocaml_lex_read_tuple_end_rec(lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) - throw caml_maybe_attach_backtrace(End_of_tuple, 1); - if(1 === ocaml_lex_state$1) return; - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_tuple_sep(v, lexbuf){ - return ocaml_lex_read_tuple_sep_rec(v, lexbuf, 271); - } - function ocaml_lex_read_tuple_sep_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - throw caml_maybe_attach_backtrace(End_of_tuple, 1); - case 2: - return long_error(_d$_, v, lexbuf); - default: return custom_error(_ea_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_object_end(lexbuf){ - return ocaml_lex_read_object_end_rec(lexbuf, 290); - } - function ocaml_lex_read_object_end_rec(lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) - throw caml_maybe_attach_backtrace(End_of_object, 1); - if(1 === ocaml_lex_state$1) return; - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_object_sep(v, lexbuf){ - return ocaml_lex_read_object_sep_rec(v, lexbuf, 292); - } - function ocaml_lex_read_object_sep_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - throw caml_maybe_attach_backtrace(End_of_object, 1); - case 2: - return long_error(_eb_, v, lexbuf); - default: return custom_error(_ec_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_colon(v, lexbuf){ - return ocaml_lex_read_colon_rec(v, lexbuf, 297); - } - function ocaml_lex_read_colon_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(2 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - return long_error(_ed_, v, lexbuf); - default: return custom_error(_ee_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish(v, lexbuf){ - read_space(v, lexbuf); - var _kT_ = 1 - read_eof(lexbuf); - return _kT_ ? long_error(_ef_, v, lexbuf) : _kT_; - } - function from_lexbuf(v, opt, lexbuf){ - if(opt) var sth = opt[1], stream = sth; else var stream = 0; - read_space(v, lexbuf); - if(read_eof(lexbuf)) throw caml_maybe_attach_backtrace(End_of_input, 1); - var x = read_json(v, lexbuf); - if(1 - stream) finish(v, lexbuf); - return x; - } - function from_string$0(buf, fname, lnum, s){ - try{ - var - lexbuf = from_string(0, s), - v = init_lexer(buf, fname, lnum, 0), - _kR_ = from_lexbuf(v, 0, lexbuf); - return _kR_; - } - catch(_kS_){ - var _kQ_ = caml_wrap_exception(_kS_); - if(_kQ_ === End_of_input) return json_error(_eg_); - throw caml_maybe_attach_backtrace(_kQ_, 0); - } - } - var Type_error = [248, _eh_, caml_fresh_oo_id(0)]; - function typeof$0(param){ - if(typeof param === "number") return _ei_; - var _kP_ = param[1]; - return 726928360 <= _kP_ - ? 737456202 - === _kP_ - ? _ej_ - : 928231259 - <= _kP_ - ? 963043957 <= _kP_ ? _ek_ : _el_ - : 848054398 <= _kP_ ? _em_ : _en_ - : -752863768 - === _kP_ - ? _eo_ - : 365180284 - <= _kP_ - ? 708012133 <= _kP_ ? _ep_ : _eq_ - : 3654863 <= _kP_ ? _er_ : _es_; - } - function typerr(msg, js){ - throw caml_maybe_attach_backtrace - ([0, Type_error, symbol_concat(msg, typeof$0(js)), js], 1); - } - function to_assoc(js){ - if(typeof js !== "number" && 963043957 === js[1]){var obj = js[2]; return obj;} - return typerr(_et_, js); - } - function to_string$3(js){ - if(typeof js !== "number" && -976970511 === js[1]){var s = js[2]; return s;} - return typerr(_eu_, js); - } - function yojson_of_bool(b){return [0, 737456202, b];} - function yojson_of_string(str){return [0, -976970511, str];} - function yojson_of_int(n){return [0, 3654863, n];} - function yojson_of_option(yojson_of_a, param){ - if(! param) return 870828711; - var x = param[1]; - return caml_call1(yojson_of_a, x); - } - function yojson_of_list(yojson_of_a, lst){ - return [0, 848054398, rev(rev_map(yojson_of_a, lst))]; - } - var - Of_yojson_error = [248, _ev_, caml_fresh_oo_id(0)], - record_check_extra_fields = [0, 1]; - function of_yojson_error(what, yojson){ - throw caml_maybe_attach_backtrace - ([0, Of_yojson_error, [0, Failure, what], yojson], 1); - } - function bool_of_yojson(yojson){ - if(typeof yojson !== "number" && 737456202 === yojson[1]){var v = yojson[2]; return v;} - return of_yojson_error(_ew_, yojson); - } - function string_of_yojson(yojson){ - if(typeof yojson !== "number" && -976970511 === yojson[1]){var str = yojson[2]; return str;} - return of_yojson_error(_ex_, yojson); - } - function int_of_yojson(yojson){ - if(typeof yojson !== "number" && 3654863 === yojson[1]){var v = yojson[2]; return v;} - return of_yojson_error(_ey_, yojson); - } - function option_of_yojson(a_of_yojson, yojson){ - return 870828711 === yojson ? 0 : [0, caml_call1(a_of_yojson, yojson)]; - } - function list_of_yojson(a_of_yojson, yojson){ - if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var lst = yojson[2], rev_lst = rev_map(a_of_yojson, lst); - return rev(rev_lst); - } - return of_yojson_error(_ez_, yojson); - } - function stag_no_args(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _eA_), yojson); - } - function nested_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _eB_), yojson); - } - function empty_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _eC_), yojson); - } - function unexpected_stag(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _eD_), yojson); - } - function record_superfluous_fields(what, loc, rev_fld_names, yojson){ - var - fld_names_str = concat(_eE_, rev(rev_fld_names)), - msg = caml_call3(sprintf(_eF_), loc, what, fld_names_str); - return of_yojson_error(msg, yojson); - } - function record_duplicate_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_eG_, loc, rev_fld_names, yojson); - } - function record_extra_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_eH_, loc, rev_fld_names, yojson); - } - function record_get_undefined_loop(fields, param){ - var fields$0 = fields, param$0 = param; - for(;;){ - if(! param$0) return concat(_eI_, rev(fields$0)); - var _kO_ = param$0[1]; - if(_kO_[1]){ - var rest = param$0[2], field = _kO_[2], fields$1 = [0, field, fields$0]; - fields$0 = fields$1; - param$0 = rest; - } - else{var rest$0 = param$0[2]; param$0 = rest$0;} - } - } - function record_undefined_elements(loc, yojson, lst){ - var - undefined$0 = record_get_undefined_loop(0, lst), - msg = caml_call2(sprintf(_eJ_), loc, undefined$0); - return of_yojson_error(msg, yojson); - } - function record_list_instead_atom(loc, yojson){ - var msg = symbol_concat(loc, _eK_); - return of_yojson_error(msg, yojson); - } - function symbol$9(x){return x[1];} - function jstr_of_method(param){return param ? "POST" : "GET";} - function order_of_yojson(yojson){ - if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _kK_ = yojson[2]; - if(! _kK_) return empty_list_invalid_sum(tp_loc, yojson); - var _kL_ = _kK_[1]; - if(typeof _kL_ !== "number"){ - var _kM_ = _kL_[1]; - if(-976970511 === _kM_){ - var _kN_ = _kL_[2]; - if(_kN_ === cst_Ascending) - return _kK_[2] ? stag_no_args(tp_loc, yojson) : 0; - if(_kN_ === cst_Descending) - return _kK_[2] ? stag_no_args(tp_loc, yojson) : 1; - } - else if(848054398 === _kM_) - return nested_list_invalid_sum(tp_loc, yojson); - } - } - return unexpected_stag(tp_loc, yojson); - } - function yojson_of_order(param){return param ? _eL_ : _eM_;} - function sort_of_yojson(yojson){ - if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _kG_ = yojson[2]; - if(! _kG_) return empty_list_invalid_sum(tp_loc$0, yojson); - var _kH_ = _kG_[1]; - if(typeof _kH_ !== "number"){ - var _kI_ = _kH_[1]; - if(-976970511 === _kI_){ - var - _kJ_ = _kH_[2], - switch$0 = caml_string_compare(_kJ_, cst_DatePlayed); - if(0 <= switch$0){ - if(0 >= switch$0) return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 7; - if(_kJ_ === cst_PlayCount) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 8; - if(_kJ_ === cst_PremiereDate) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 9; - if(_kJ_ === cst_ProductionYear) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 10; - if(_kJ_ === cst_Random) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 12; - if(_kJ_ === cst_Revenue) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 13; - if(_kJ_ === cst_Runtime) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 14; - if(_kJ_ === cst_SortName) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 11; - } - else{ - if(_kJ_ === cst_Album) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 0; - if(_kJ_ === cst_AlbumArtist) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 1; - if(_kJ_ === cst_Artist) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 2; - if(_kJ_ === cst_Budget) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 3; - if(_kJ_ === cst_CommunityRating) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 4; - if(_kJ_ === cst_CriticRating) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 5; - if(_kJ_ === cst_DateCreated) - return _kG_[2] ? stag_no_args(tp_loc$0, yojson) : 6; - } - } - else if(848054398 === _kI_) - return nested_list_invalid_sum(tp_loc$0, yojson); - } - } - return unexpected_stag(tp_loc$0, yojson); - } - function yojson_of_sort(param){ - switch(param){ - case 0: - return _eN_; - case 1: - return _eO_; - case 2: - return _eP_; - case 3: - return _eQ_; - case 4: - return _eR_; - case 5: - return _eS_; - case 6: - return _eT_; - case 7: - return _eU_; - case 8: - return _eV_; - case 9: - return _eW_; - case 10: - return _eX_; - case 11: - return _eY_; - case 12: - return _eZ_; - case 13: - return _e0_; - default: return _e1_; - } - } - function image_blur_hash_of_yojson(y){ - var assoc = to_assoc(y); - return map$1 - (function(param){ - var v = param[2], key = param[1]; - return [0, key, to_string$3(v)]; - }, - assoc); - } - function yojson_of_image_blur_hash(i){ - var - assoc = - map$1 - (function(param){ - var v = param[2], key = param[1]; - return [0, key, [0, -976970511, v]]; - }, - i); - return [0, 963043957, assoc]; - } - function image_blur_hashes_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - primary_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name === cst_Primary) - if(symbol$9(primary_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = image_blur_hash_of_yojson(field_yojson); - primary_field[1] = [0, fvalue]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$1, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$1, symbol$9(extra), yojson); - var primary_value = symbol$9(primary_field); - return [0, primary_value]; - } - return record_list_instead_atom(tp_loc$1, yojson); - } - function yojson_of_image_blur_hashes(param){ - var v_primary = param[1], bnds = 0; - if(v_primary) - var - v = v_primary[1], - arg = yojson_of_image_blur_hash(v), - bnd = [0, _e2_, arg], - bnds$0 = [0, bnd, bnds]; - else - var bnds$0 = bnds; - return [0, 963043957, bnds$0]; - } - function type_of_yojson(yojson){ - if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _kC_ = yojson[2]; - if(! _kC_) return empty_list_invalid_sum(tp_loc$2, yojson); - var _kD_ = _kC_[1]; - if(typeof _kD_ !== "number"){ - var _kE_ = _kD_[1]; - if(-976970511 === _kE_){ - var - _kF_ = _kD_[2], - switch$0 = caml_string_compare(_kF_, cst_MusicGenre); - if(0 <= switch$0){ - if(0 >= switch$0) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 18; - var switch$1 = caml_string_compare(_kF_, cst_Series); - if(0 <= switch$1){ - if(0 >= switch$1) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 28; - if(_kF_ === cst_Studio) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 29; - if(_kF_ === cst_Trailer) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 30; - if(_kF_ === cst_TvChannel) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 31; - if(_kF_ === cst_TvProgram) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 32; - if(_kF_ === cst_UserRootFolder) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 33; - if(_kF_ === cst_UserView) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 34; - if(_kF_ === cst_Video) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 35; - if(_kF_ === cst_Year) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 36; - } - else{ - if(_kF_ === cst_MusicVideo) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 19; - if(_kF_ === cst_Person) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 20; - if(_kF_ === cst_Photo) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 21; - if(_kF_ === cst_PhotoAlbum) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 22; - if(_kF_ === cst_Playlist) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 23; - if(_kF_ === cst_PlaylistsFolder) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 24; - if(_kF_ === cst_Program) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 25; - if(_kF_ === cst_Recording) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 26; - if(_kF_ === cst_Season) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 27; - } - } - else{ - var switch$2 = caml_string_compare(_kF_, cst_Episode); - if(0 <= switch$2){ - if(0 >= switch$2) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 9; - if(_kF_ === cst_Folder) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 10; - if(_kF_ === cst_Genre) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 11; - if(_kF_ === cst_LiveTvChannel) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 12; - if(_kF_ === cst_LiveTvProgram) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 13; - if(_kF_ === cst_ManualPlaylistsFolder) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 14; - if(_kF_ === cst_Movie) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 15; - if(_kF_ === cst_MusicAlbum) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 16; - if(_kF_ === cst_MusicArtist) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 17; - } - else{ - if(_kF_ === cst_AggregateFolder) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 0; - if(_kF_ === cst_Audio) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 1; - if(_kF_ === cst_AudioBook) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 2; - if(_kF_ === cst_BasePluginFolder) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 3; - if(_kF_ === cst_Book) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 4; - if(_kF_ === cst_BoxSet) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 5; - if(_kF_ === cst_Channel) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 6; - if(_kF_ === cst_ChannelFolderItem) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 7; - if(_kF_ === cst_CollectionFolder) - return _kC_[2] ? stag_no_args(tp_loc$2, yojson) : 8; - } - } - } - else if(848054398 === _kE_) - return nested_list_invalid_sum(tp_loc$2, yojson); - } - } - return unexpected_stag(tp_loc$2, yojson); - } - function yojson_of_type(param){ - switch(param){ - case 0: - return _e3_; - case 1: - return _e4_; - case 2: - return _e5_; - case 3: - return _e6_; - case 4: - return _e7_; - case 5: - return _e8_; - case 6: - return _e9_; - case 7: - return _e__; - case 8: - return _e$_; - case 9: - return _fa_; - case 10: - return _fb_; - case 11: - return _fc_; - case 12: - return _fd_; - case 13: - return _fe_; - case 14: - return _ff_; - case 15: - return _fg_; - case 16: - return _fh_; - case 17: - return _fi_; - case 18: - return _fj_; - case 19: - return _fk_; - case 20: - return _fl_; - case 21: - return _fm_; - case 22: - return _fn_; - case 23: - return _fo_; - case 24: - return _fp_; - case 25: - return _fq_; - case 26: - return _fr_; - case 27: - return _fs_; - case 28: - return _ft_; - case 29: - return _fu_; - case 30: - return _fv_; - case 31: - return _fw_; - case 32: - return _fx_; - case 33: - return _fy_; - case 34: - return _fz_; - case 35: - return _fA_; - default: return _fB_; - } - } - function field_of_yojson(yojson){ - if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _ky_ = yojson[2]; - if(! _ky_) return empty_list_invalid_sum(tp_loc$3, yojson); - var _kz_ = _ky_[1]; - if(typeof _kz_ !== "number"){ - var _kA_ = _kz_[1]; - if(-976970511 === _kA_){ - var - _kB_ = _kz_[2], - switch$0 = caml_string_compare(_kB_, cst_MediaStreams); - if(0 <= switch$0){ - if(0 >= switch$0) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 30; - var - switch$1 = caml_string_compare(_kB_, cst_SeriesPresentationUniqueKe); - if(0 <= switch$1){ - if(0 >= switch$1) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 46; - var switch$2 = caml_string_compare(_kB_, cst_Studios); - if(0 <= switch$2){ - if(0 >= switch$2) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 54; - if(_kB_ === cst_SyncInfo) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 55; - if(_kB_ === cst_Taglines) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 56; - if(_kB_ === cst_Tags) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 57; - if(_kB_ === cst_ThemeSongIds) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 58; - if(_kB_ === cst_ThemeVideoIds) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 59; - if(_kB_ === cst_Width) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 60; - } - else{ - if(_kB_ === cst_SeriesPrimaryImage) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 47; - if(_kB_ === cst_SeriesStudio) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 48; - if(_kB_ === cst_ServiceName) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 49; - if(_kB_ === cst_Settings) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 50; - if(_kB_ === cst_SortName) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 51; - if(_kB_ === cst_SpecialEpisodeNumbers) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 52; - if(_kB_ === cst_SpecialFeatureCount) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 53; - } - } - else{ - var - switch$3 = caml_string_compare(_kB_, cst_PrimaryImageAspectRatio); - if(0 <= switch$3){ - if(0 >= switch$3) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 38; - if(_kB_ === cst_ProductionLocations) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 39; - if(_kB_ === cst_ProviderIds) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 40; - if(_kB_ === cst_RecursiveItemCount) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 41; - if(_kB_ === cst_RefreshState) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 42; - if(_kB_ === cst_RemoteTrailers) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 43; - if(_kB_ === cst_ScreenshotImageTags) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 44; - if(_kB_ === cst_SeasonUserData) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 45; - } - else{ - if(_kB_ === cst_OriginalTitle) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 31; - if(_kB_ === cst_Overview) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 32; - if(_kB_ === cst_ParentId) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 33; - if(_kB_ === cst_Path) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 34; - if(_kB_ === cst_People) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 35; - if(_kB_ === cst_PlayAccess) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 36; - if(_kB_ === cst_PresentationUniqueKey) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 37; - } - } - } - else{ - var - switch$4 = caml_string_compare(_kB_, cst_EnableMediaSourceDisplay); - if(0 <= switch$4){ - if(0 >= switch$4) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 15; - var switch$5 = caml_string_compare(_kB_, cst_HomePageUrl); - if(0 <= switch$5){ - if(0 >= switch$5) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 23; - if(_kB_ === cst_InheritedParentalRatingVal) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 24; - if(_kB_ === cst_IsHD) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 25; - if(_kB_ === cst_ItemCounts) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 26; - if(_kB_ === cst_LocalTrailerCount) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 27; - if(_kB_ === cst_MediaSourceCount) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 28; - if(_kB_ === cst_MediaSources) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 29; - } - else{ - if(_kB_ === cst_Etag) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 16; - if(_kB_ === cst_ExternalEtag) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 17; - if(_kB_ === cst_ExternalSeriesId) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 18; - if(_kB_ === cst_ExternalUrls) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 19; - if(_kB_ === cst_ExtraIds) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 20; - if(_kB_ === cst_Genres) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 21; - if(_kB_ === cst_Height) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 22; - } - } - else{ - var switch$6 = caml_string_compare(_kB_, cst_ChildCount); - if(0 <= switch$6){ - if(0 >= switch$6) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 7; - if(_kB_ === cst_CumulativeRunTimeTicks) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 8; - if(_kB_ === cst_CustomRating) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 9; - if(_kB_ === cst_DateCreated) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 10; - if(_kB_ === cst_DateLastMediaAdded) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 11; - if(_kB_ === cst_DateLastRefreshed) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 12; - if(_kB_ === cst_DateLastSaved) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 13; - if(_kB_ === cst_DisplayPreferencesId) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 14; - } - else{ - if(_kB_ === cst_AirTime) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 0; - if(_kB_ === cst_BasicSyncInfo) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 1; - if(_kB_ === cst_CanDelete) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 2; - if(_kB_ === cst_CanDownload) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 3; - if(_kB_ === cst_ChannelImage) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 4; - if(_kB_ === cst_ChannelInfo) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 5; - if(_kB_ === cst_Chapters) - return _ky_[2] ? stag_no_args(tp_loc$3, yojson) : 6; - } - } - } - } - else if(848054398 === _kA_) - return nested_list_invalid_sum(tp_loc$3, yojson); - } - } - return unexpected_stag(tp_loc$3, yojson); - } - function yojson_of_field(param){ - var _kx_ = param; - if(31 <= _kx_) - switch(_kx_){ - case 31: - return _f7_; - case 32: - return _f8_; - case 33: - return _f9_; - case 34: - return _f__; - case 35: - return _f$_; - case 36: - return _ga_; - case 37: - return _gb_; - case 38: - return _gc_; - case 39: - return _gd_; - case 40: - return _ge_; - case 41: - return _gf_; - case 42: - return _gg_; - case 43: - return _gh_; - case 44: - return _gi_; - case 45: - return _gj_; - case 46: - return _gk_; - case 47: - return _gl_; - case 48: - return _gm_; - case 49: - return _gn_; - case 50: - return _go_; - case 51: - return _gp_; - case 52: - return _gq_; - case 53: - return _gr_; - case 54: - return _gs_; - case 55: - return _gt_; - case 56: - return _gu_; - case 57: - return _gv_; - case 58: - return _gw_; - case 59: - return _gx_; - default: return _gy_; - } - switch(_kx_){ - case 0: - return _fC_; - case 1: - return _fD_; - case 2: - return _fE_; - case 3: - return _fF_; - case 4: - return _fG_; - case 5: - return _fH_; - case 6: - return _fI_; - case 7: - return _fJ_; - case 8: - return _fK_; - case 9: - return _fL_; - case 10: - return _fM_; - case 11: - return _fN_; - case 12: - return _fO_; - case 13: - return _fP_; - case 14: - return _fQ_; - case 15: - return _fR_; - case 16: - return _fS_; - case 17: - return _fT_; - case 18: - return _fU_; - case 19: - return _fV_; - case 20: - return _fW_; - case 21: - return _fX_; - case 22: - return _fY_; - case 23: - return _fZ_; - case 24: - return _f0_; - case 25: - return _f1_; - case 26: - return _f2_; - case 27: - return _f3_; - case 28: - return _f4_; - case 29: - return _f5_; - default: return _f6_; - } - } - function type_str_of_yojson(j){ - var s = to_string$3(j); - return type_of_yojson([0, 848054398, [0, [0, -976970511, s], 0]]); - } - function yojson_of_type_str(ts){ - var match = yojson_of_type(ts); - if(typeof match !== "number" && 848054398 === match[1]){ - var _kw_ = match[2]; - if(_kw_ && ! _kw_[2]){var json = _kw_[1]; return json;} - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _gz_], 1); - } - function t_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - name_field = [0, 0], - sort_name_field = [0, 0], - id_field = [0, 0], - path_field = [0, 0], - album_id_field = [0, 0], - parent_id_field = [0, 0], - server_id_field = [0, 0], - image_blur_hashes_field = [0, 0], - type_field = [0, 0], - collection_type_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1], - switch$0 = caml_string_compare(field_name, cst_ParentId); - a: - b: - { - if(0 <= switch$0) - if(0 < switch$0) - if(field_name !== cst_Path) - if(field_name !== cst_ServerId) - if(field_name !== cst_SortName){ - if(field_name !== cst_Type) break b; - if(symbol$9(type_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = type_str_of_yojson(field_yojson); - type_field[1] = [0, fvalue]; - } - } - else if(symbol$9(sort_name_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$0 = string_of_yojson(field_yojson); - sort_name_field[1] = [0, fvalue$0]; - } - else if(symbol$9(server_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$1 = string_of_yojson(field_yojson); - server_id_field[1] = [0, fvalue$1]; - } - else if(symbol$9(path_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$2 = string_of_yojson(field_yojson); - path_field[1] = [0, fvalue$2]; - } - else if(symbol$9(parent_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$3 = option_of_yojson(string_of_yojson, field_yojson); - parent_id_field[1] = [0, fvalue$3]; - } - else if(field_name !== cst_AlbumId) - if(field_name !== cst_CollectionType) - if(field_name !== cst_Id) - if(field_name !== cst_ImageBlurHashes){ - if(field_name !== cst_Name) break b; - if(symbol$9(name_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$4 = string_of_yojson(field_yojson); - name_field[1] = [0, fvalue$4]; - } - } - else if(symbol$9(image_blur_hashes_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$5 = image_blur_hashes_of_yojson(field_yojson); - image_blur_hashes_field[1] = [0, fvalue$5]; - } - else if(symbol$9(id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$6 = string_of_yojson(field_yojson); - id_field[1] = [0, fvalue$6]; - } - else if(symbol$9(collection_type_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$7 = option_of_yojson(string_of_yojson, field_yojson); - collection_type_field[1] = [0, fvalue$7]; - } - else if(symbol$9(album_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$8 = string_of_yojson(field_yojson); - album_id_field[1] = [0, fvalue$8]; - } - break a; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$4, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$4, symbol$9(extra), yojson); - var - match = symbol$9(name_field), - sort_name_value = symbol$9(sort_name_field), - match$0 = symbol$9(id_field), - path_value = symbol$9(path_field), - album_id_value = symbol$9(album_id_field), - parent_id_value = symbol$9(parent_id_field), - match$1 = symbol$9(server_id_field), - match$2 = symbol$9(image_blur_hashes_field), - match$3 = symbol$9(type_field), - collection_type_value = symbol$9(collection_type_field); - if(match && match$0 && match$1 && match$2 && match$3){ - var - type_value = match$3[1], - image_blur_hashes_value = match$2[1], - server_id_value = match$1[1], - id_value = match$0[1], - name_value = match[1]; - if(collection_type_value) - var v = collection_type_value[1], v$0 = v; - else - var v$0 = 0; - return [0, - name_value, - sort_name_value, - id_value, - path_value, - album_id_value, - parent_id_value, - server_id_value, - image_blur_hashes_value, - type_value, - v$0]; - } - var - _ks_ = [0, [0, 0 === symbol$9(type_field) ? 1 : 0, _gA_], 0], - _kt_ = - [0, [0, 0 === symbol$9(image_blur_hashes_field) ? 1 : 0, _gB_], _ks_], - _ku_ = [0, [0, 0 === symbol$9(server_id_field) ? 1 : 0, _gC_], _kt_], - _kv_ = [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _gD_], _ku_]; - return record_undefined_elements - (tp_loc$4, - yojson, - [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _gE_], _kv_]); - } - return record_list_instead_atom(tp_loc$4, yojson); - } - function yojson_of_t(param){ - var - v_collection_type = param[10], - v_type = param[9], - v_image_blur_hashes = param[8], - v_server_id = param[7], - v_parent_id = param[6], - v_album_id = param[5], - v_path = param[4], - v_id = param[3], - v_sort_name = param[2], - v_name = param[1], - bnds = 0; - if(0 === v_collection_type) - var bnds$0 = bnds; - else - var - arg$8 = - function(_kr_){return yojson_of_option(yojson_of_string, _kr_);} - (v_collection_type), - bnd$3 = [0, _gO_, arg$8], - bnds$0 = [0, bnd$3, bnds]; - var - arg = yojson_of_type_str(v_type), - bnds$1 = [0, [0, _gF_, arg], bnds$0], - arg$0 = yojson_of_image_blur_hashes(v_image_blur_hashes), - bnds$2 = [0, [0, _gG_, arg$0], bnds$1], - arg$1 = yojson_of_string(v_server_id), - bnds$3 = [0, [0, _gH_, arg$1], bnds$2]; - if(v_parent_id) - var - v = v_parent_id[1], - arg$2 = yojson_of_option(yojson_of_string, v), - bnd = [0, _gI_, arg$2], - bnds$4 = [0, bnd, bnds$3]; - else - var bnds$4 = bnds$3; - if(v_album_id) - var - v$0 = v_album_id[1], - arg$3 = yojson_of_string(v$0), - bnd$0 = [0, _gJ_, arg$3], - bnds$5 = [0, bnd$0, bnds$4]; - else - var bnds$5 = bnds$4; - if(v_path) - var - v$1 = v_path[1], - arg$4 = yojson_of_string(v$1), - bnd$1 = [0, _gK_, arg$4], - bnds$6 = [0, bnd$1, bnds$5]; - else - var bnds$6 = bnds$5; - var - arg$5 = yojson_of_string(v_id), - bnds$7 = [0, [0, _gL_, arg$5], bnds$6]; - if(v_sort_name) - var - v$2 = v_sort_name[1], - arg$6 = yojson_of_string(v$2), - bnd$2 = [0, _gM_, arg$6], - bnds$8 = [0, bnd$2, bnds$7]; - else - var bnds$8 = bnds$7; - var - arg$7 = yojson_of_string(v_name), - bnds$9 = [0, [0, _gN_, arg$7], bnds$8]; - return [0, 963043957, bnds$9]; - } - function params_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - ids_field = [0, 0], - parent_id_field = [0, 0], - user_id_field = [0, 0], - fields_field = [0, 0], - include_item_types_field = [0, 0], - start_index_field = [0, 0], - limit_field = [0, 0], - sort_order_field = [0, 0], - sort_by_field = [0, 0], - recursive_field = [0, 0], - enable_user_data_field = [0, 0], - enable_images_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1], - switch$0 = caml_string_compare(field_name, cst_parentId); - a: - { - b: - { - if(0 <= switch$0) - if(0 < switch$0) - if(field_name !== cst_recursive) - if(field_name !== cst_sortBy) - if(field_name !== cst_sortOrder) - if(field_name !== cst_startIndex){ - if(field_name !== cst_userId) break b; - if(symbol$9(user_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = string_of_yojson(field_yojson); - user_id_field[1] = [0, fvalue]; - } - } - else if(symbol$9(start_index_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$0 = int_of_yojson(field_yojson); - start_index_field[1] = [0, fvalue$0]; - } - else if(symbol$9(sort_order_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$1 = order_of_yojson(field_yojson); - sort_order_field[1] = [0, fvalue$1]; - } - else if(symbol$9(sort_by_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$2 = list_of_yojson(sort_of_yojson, field_yojson); - sort_by_field[1] = [0, fvalue$2]; - } - else if(symbol$9(recursive_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$3 = bool_of_yojson(field_yojson); - recursive_field[1] = [0, fvalue$3]; - } - else if(symbol$9(parent_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$4 = string_of_yojson(field_yojson); - parent_id_field[1] = [0, fvalue$4]; - } - else if(field_name !== cst_enableImages) - if(field_name !== cst_enableUserData) - if(field_name !== cst_fields) - if(field_name !== cst_ids) - if(field_name !== cst_includeItemTypes){ - if(field_name !== cst_limit) break b; - if(symbol$9(limit_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$5 = int_of_yojson(field_yojson); - limit_field[1] = [0, fvalue$5]; - } - } - else if(symbol$9(include_item_types_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$6 = list_of_yojson(type_of_yojson, field_yojson); - include_item_types_field[1] = [0, fvalue$6]; - } - else if(symbol$9(ids_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$7 = list_of_yojson(string_of_yojson, field_yojson); - ids_field[1] = [0, fvalue$7]; - } - else if(symbol$9(fields_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$8 = list_of_yojson(field_of_yojson, field_yojson); - fields_field[1] = [0, fvalue$8]; - } - else if(symbol$9(enable_user_data_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$9 = bool_of_yojson(field_yojson); - enable_user_data_field[1] = [0, fvalue$9]; - } - else if(symbol$9(enable_images_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$10 = bool_of_yojson(field_yojson); - enable_images_field[1] = [0, fvalue$10]; - } - break a; - } - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$5, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$5, symbol$9(extra), yojson); - var - ids_value = symbol$9(ids_field), - parent_id_value = symbol$9(parent_id_field), - match = symbol$9(user_id_field), - match$0 = symbol$9(fields_field), - match$1 = symbol$9(include_item_types_field), - start_index_value = symbol$9(start_index_field), - limit_value = symbol$9(limit_field), - sort_order_value = symbol$9(sort_order_field), - match$2 = symbol$9(sort_by_field), - match$3 = symbol$9(recursive_field), - match$4 = symbol$9(enable_user_data_field), - match$5 = symbol$9(enable_images_field); - if - (match && match$0 && match$1 && match$2 && match$3 && match$4 && match$5){ - var - enable_images_value = match$5[1], - enable_user_data_value = match$4[1], - recursive_value = match$3[1], - sort_by_value = match$2[1], - include_item_types_value = match$1[1], - fields_value = match$0[1], - user_id_value = match[1]; - if(ids_value) var v = ids_value[1], v$0 = v; else var v$0 = 0; - return [0, - v$0, - parent_id_value, - user_id_value, - fields_value, - include_item_types_value, - start_index_value, - limit_value, - sort_order_value, - sort_by_value, - recursive_value, - enable_user_data_value, - enable_images_value]; - } - var - _kl_ = [0, [0, 0 === symbol$9(enable_images_field) ? 1 : 0, _gP_], 0], - _km_ = - [0, [0, 0 === symbol$9(enable_user_data_field) ? 1 : 0, _gQ_], _kl_], - _kn_ = [0, [0, 0 === symbol$9(recursive_field) ? 1 : 0, _gR_], _km_], - _ko_ = [0, [0, 0 === symbol$9(sort_by_field) ? 1 : 0, _gS_], _kn_], - _kp_ = - [0, [0, 0 === symbol$9(include_item_types_field) ? 1 : 0, _gT_], _ko_], - _kq_ = [0, [0, 0 === symbol$9(fields_field) ? 1 : 0, _gU_], _kp_]; - return record_undefined_elements - (tp_loc$5, - yojson, - [0, [0, 0 === symbol$9(user_id_field) ? 1 : 0, _gV_], _kq_]); - } - return record_list_instead_atom(tp_loc$5, yojson); - } - function yojson_of_params(param){ - var - v_enable_images = param[12], - v_enable_user_data = param[11], - v_recursive = param[10], - v_sort_by = param[9], - v_sort_order = param[8], - v_limit = param[7], - v_start_index = param[6], - v_include_item_types = param[5], - v_fields = param[4], - v_user_id = param[3], - v_parent_id = param[2], - v_ids = param[1], - arg = yojson_of_bool(v_enable_images), - bnds = [0, [0, _gW_, arg], 0], - arg$0 = yojson_of_bool(v_enable_user_data), - bnds$0 = [0, [0, _gX_, arg$0], bnds], - arg$1 = yojson_of_bool(v_recursive), - bnds$1 = [0, [0, _gY_, arg$1], bnds$0], - arg$2 = yojson_of_list(yojson_of_sort, v_sort_by), - bnds$2 = [0, [0, _gZ_, arg$2], bnds$1]; - if(v_sort_order) - var - v = v_sort_order[1], - arg$3 = yojson_of_order(v), - bnd = [0, _g0_, arg$3], - bnds$3 = [0, bnd, bnds$2]; - else - var bnds$3 = bnds$2; - if(v_limit) - var - v$0 = v_limit[1], - arg$4 = yojson_of_int(v$0), - bnd$0 = [0, _g1_, arg$4], - bnds$4 = [0, bnd$0, bnds$3]; - else - var bnds$4 = bnds$3; - if(v_start_index) - var - v$1 = v_start_index[1], - arg$5 = yojson_of_int(v$1), - bnd$1 = [0, _g2_, arg$5], - bnds$5 = [0, bnd$1, bnds$4]; - else - var bnds$5 = bnds$4; - var - arg$6 = yojson_of_list(yojson_of_type, v_include_item_types), - bnds$6 = [0, [0, _g3_, arg$6], bnds$5], - arg$7 = yojson_of_list(yojson_of_field, v_fields), - bnds$7 = [0, [0, _g4_, arg$7], bnds$6], - arg$8 = yojson_of_string(v_user_id), - bnds$8 = [0, [0, _g5_, arg$8], bnds$7]; - if(v_parent_id) - var - v$2 = v_parent_id[1], - arg$9 = yojson_of_string(v$2), - bnd$2 = [0, _g6_, arg$9], - bnds$9 = [0, bnd$2, bnds$8]; - else - var bnds$9 = bnds$8; - if(0 === v_ids) - var bnds$10 = bnds$9; - else - var - arg$10 = - function(_kk_){return yojson_of_list(yojson_of_string, _kk_);}(v_ids), - bnd$3 = [0, _g7_, arg$10], - bnds$10 = [0, bnd$3, bnds$9]; - return [0, 963043957, bnds$10]; - } - function response_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - items_field = [0, 0], - total_record_count_field = [0, 0], - start_index_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_Items) - if(field_name !== cst_StartIndex){ - if(field_name === cst_TotalRecordCount) - if(symbol$9(total_record_count_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = int_of_yojson(field_yojson); - total_record_count_field[1] = [0, fvalue]; - } - } - else if(symbol$9(start_index_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$0 = int_of_yojson(field_yojson); - start_index_field[1] = [0, fvalue$0]; - } - else if(symbol$9(items_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$1 = list_of_yojson(t_of_yojson, field_yojson); - items_field[1] = [0, fvalue$1]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$6, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$6, symbol$9(extra), yojson); - var - match = symbol$9(items_field), - match$0 = symbol$9(total_record_count_field), - match$1 = symbol$9(start_index_field); - if(match && match$0 && match$1){ - var - start_index_value = match$1[1], - total_record_count_value = match$0[1], - items_value = match[1]; - return [0, items_value, total_record_count_value, start_index_value]; - } - var - _ki_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _g8_], 0], - _kj_ = - [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _g9_], _ki_]; - return record_undefined_elements - (tp_loc$6, - yojson, - [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _g__], _kj_]); - } - return record_list_instead_atom(tp_loc$6, yojson); - } - function yojson_of_response(param){ - var - v_start_index = param[3], - v_total_record_count = param[2], - v_items = param[1], - arg = yojson_of_int(v_start_index), - bnds = [0, [0, _g$_, arg], 0], - arg$0 = yojson_of_int(v_total_record_count), - bnds$0 = [0, [0, _ha_, arg$0], bnds], - arg$1 = yojson_of_list(yojson_of_t, v_items), - bnds$1 = [0, [0, _hb_, arg$1], bnds$0]; - return [0, 963043957, bnds$1]; - } - var method = 0; - function endpoint(param){return _hc_;} - function params_of_yojson$0(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - include_external_content_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_includeExternalContent){ - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; - } - else if(symbol$9(include_external_content_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = bool_of_yojson(field_yojson); - include_external_content_field[1] = [0, fvalue]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$7, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$7, symbol$9(extra), yojson); - var match = symbol$9(include_external_content_field); - if(! match) - return record_undefined_elements - (tp_loc$7, - yojson, - [0, - [0, - 0 === symbol$9(include_external_content_field) ? 1 : 0, - _hd_], - 0]); - var include_external_content_value = match[1]; - return [0, include_external_content_value]; - } - return record_list_instead_atom(tp_loc$7, yojson); - } - function yojson_of_params$0(param){ - var - v_include_external_content = param[1], - arg = yojson_of_bool(v_include_external_content), - bnds = [0, [0, _he_, arg], 0]; - return [0, 963043957, bnds]; - } - function response_of_yojson$0(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - items_field = [0, 0], - total_record_count_field = [0, 0], - start_index_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_Items) - if(field_name !== cst_StartIndex){ - if(field_name === cst_TotalRecordCount) - if(symbol$9(total_record_count_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = int_of_yojson(field_yojson); - total_record_count_field[1] = [0, fvalue]; - } - } - else if(symbol$9(start_index_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$0 = int_of_yojson(field_yojson); - start_index_field[1] = [0, fvalue$0]; - } - else if(symbol$9(items_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$1 = list_of_yojson(t_of_yojson, field_yojson); - items_field[1] = [0, fvalue$1]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$8, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$8, symbol$9(extra), yojson); - var - match = symbol$9(items_field), - match$0 = symbol$9(total_record_count_field), - match$1 = symbol$9(start_index_field); - if(match && match$0 && match$1){ - var - start_index_value = match$1[1], - total_record_count_value = match$0[1], - items_value = match[1]; - return [0, items_value, total_record_count_value, start_index_value]; - } - var - _kg_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _hf_], 0], - _kh_ = - [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _hg_], _kg_]; - return record_undefined_elements - (tp_loc$8, - yojson, - [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _hh_], _kh_]); - } - return record_list_instead_atom(tp_loc$8, yojson); - } - function yojson_of_response$0(param){ - var - v_start_index = param[3], - v_total_record_count = param[2], - v_items = param[1], - arg = yojson_of_int(v_start_index), - bnds = [0, [0, _hi_, arg], 0], - arg$0 = yojson_of_int(v_total_record_count), - bnds$0 = [0, [0, _hj_, arg$0], bnds], - arg$1 = yojson_of_list(yojson_of_t, v_items), - bnds$1 = [0, [0, _hk_, arg$1], bnds$0]; - return [0, 963043957, bnds$1]; - } - function endpoint$0(pp){return [0, _hm_, [0, pp[1], _hl_]];} - function virtual_folder_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - name_field = [0, 0], - locations_field = [0, 0], - item_id_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_ItemId) - if(field_name !== cst_Locations){ - if(field_name === cst_Name) - if(symbol$9(name_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = string_of_yojson(field_yojson); - name_field[1] = [0, fvalue]; - } - } - else if(symbol$9(locations_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$0 = list_of_yojson(string_of_yojson, field_yojson); - locations_field[1] = [0, fvalue$0]; - } - else if(symbol$9(item_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$1 = string_of_yojson(field_yojson); - item_id_field[1] = [0, fvalue$1]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$9, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$9, symbol$9(extra), yojson); - var - match = symbol$9(name_field), - match$0 = symbol$9(locations_field), - match$1 = symbol$9(item_id_field); - if(match && match$0 && match$1){ - var - item_id_value = match$1[1], - locations_value = match$0[1], - name_value = match[1]; - return [0, name_value, locations_value, item_id_value]; - } - var - _ke_ = [0, [0, 0 === symbol$9(item_id_field) ? 1 : 0, _hn_], 0], - _kf_ = [0, [0, 0 === symbol$9(locations_field) ? 1 : 0, _ho_], _ke_]; - return record_undefined_elements - (tp_loc$9, - yojson, - [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _hp_], _kf_]); - } - return record_list_instead_atom(tp_loc$9, yojson); - } - function yojson_of_virtual_folder(param){ - var - v_item_id = param[3], - v_locations = param[2], - v_name = param[1], - arg = yojson_of_string(v_item_id), - bnds = [0, [0, _hq_, arg], 0], - arg$0 = yojson_of_list(yojson_of_string, v_locations), - bnds$0 = [0, [0, _hr_, arg$0], bnds], - arg$1 = yojson_of_string(v_name), - bnds$1 = [0, [0, _hs_, arg$1], bnds$0]; - return [0, 963043957, bnds$1]; - } - var session_uuid = [0, 0]; - function set_session_uuid(s){session_uuid[1] = [0, s]; return;} - function authorization(token, param){ - if(token) - var t = token[1], token$0 = caml_call1(sprintf(_ht_), t); - else - var token$0 = _hw_; - var session_uuid$0 = value(session_uuid[1], _hu_); - return caml_call2(sprintf(_hv_), session_uuid$0, token$0); - } - function request$1(base_url, token, headers, Q){ - return function(params, path_params){ - var - base_uri = v$0(0, caml_jsstring_of_string(base_url)), - base_path_segments = get_ok(path_segments(base_uri)), - endpoint_path_segments = - map$1 - (function(_kd_){return caml_jsstring_of_string(_kd_);}, - caml_call1(Q[6], path_params)), - path_segments$0 = - caml_equal(base_path_segments, [0, empty, 0]) - ? endpoint_path_segments - : flatten([0, base_path_segments, [0, endpoint_path_segments, 0]]), - uri = with_path_segments(base_uri, path_segments$0), - uri$0 = get_ok(uri), - authorization$0 = authorization(token, 0), - headers$0 = - of_assoc - (headers, - [0, - [0, "content-type", "text/json"], - [0, - [0, - "X-Emby-Authorization", - caml_jsstring_of_string(authorization$0)], - 0]]), - method = jstr_of_method(Q[5]); - if(Q[5]) - var - body = - of_jstr - (caml_jsstring_of_string - (to_string$2(0, 0, 0, 0, caml_call1(Q[1], params)))), - url = to_jstr$0(uri$0), - url$0 = url, - init = - init$1 - ([0, body], - 0, - 0, - [0, headers$0], - 0, - 0, - [0, method], - 0, - 0, - 0, - 0, - 0, - 0); - else - var - params$0 = - of_obj - (get_ok - (decode - (caml_jsstring_of_string - (to_string$2(0, 0, 0, 0, caml_call1(Q[1], params)))))), - uri_with_params = with_query_params(uri$0, params$0), - url$1 = to_jstr$0(uri_with_params), - init$0 = - init$1(0, 0, 0, [0, headers$0], 0, 0, [0, method], 0, 0, 0, 0, 0, 0), - url$0 = url$1, - init = init$0; - return let$1 - (request$0(v$1([0, init], url$0)), - function(res){ - return let$2 - (text(res), - function(json){ - var - yojson = - from_string$0(0, 0, 0, caml_string_of_jsstring(json)); - try{var _kc_ = caml_call1(Q[4], yojson); return _kc_;} - catch(e$0){ - var e = caml_wrap_exception(e$0); - log([0, _hx_, [0, json, 0]]); - log([0, e, 0]); - throw caml_maybe_attach_backtrace(e, 0); - } - }); - });}; - } - var method$0 = 0; - function get_token(t){return t[2][2];} - function query(t){ - var token = get_token(t), base_url = t[1], _j$_ = [0, token]; - return function(_ka_, _kb_){ - return request$1(base_url, _j$_, _ka_, _kb_);}; - } - function tag_of(obj){ - return is_block(obj) ? [0, caml_obj_tag(obj)] : [1, obj]; - } - function Make$1(Q){ - function Start_client(P){ - var - futures = create$2(0, 64), - listeners = create$2(0, 64), - worker = create$6(0, caml_jsstring_of_string(P[1])); - function on_message(ev){ - symbol$8 - (of_jstr$0(data(ev)), - function(message){ - if(0 === message[0]){ - var - match = message[1], - data = match[2], - uuid = match[1], - f = find(futures, uuid); - remove(futures, uuid); - return caml_call1(f, data); - } - var match$0 = message[1], v = match$0[2], e = match$0[1]; - function _j9_(f){return caml_call1(f, v);} - return function(_j__){return iter(_j9_, _j__);} - (find_all(listeners, tag_of(e))); - }); - return 0; - } - var _j7_ = 0; - (function(_j8_){return listen(_j7_, message, on_message, _j8_);}(worker)); - return; - } - function dispatch_event(e, v){return post(0, to_jstr$1([1, [0, e, v]]));} - function Make_worker(W){ - var W$0 = caml_call1(W, [0]); - function on_message(ev){ - symbol$8 - (of_jstr$0(data(ev)), - function(param){ - var data = param[2], uuid = param[1]; - return let$2 - (caml_call1(W$0[1], data), - function(result){ - var data = to_jstr$1(result); - return post(0, to_jstr$1([0, [0, uuid, data]])); - }); - }); - return 0; - } - listen(0, message, on_message, global); - return; - } - return [0, Start_client, dispatch_event, Make_worker]; - } - function _hy_(_j3_){ - var _j4_ = Make$1(_j3_), _j5_ = _j4_[3]; - return [0, , _j4_[2], function(_j6_){_j5_(_j6_); return;}]; - } - function apply(t, size, i){ - if(typeof t === "number") return 2 <= t ? (size - 1 | 0) - i | 0 : i; - var a = t[1]; - return caml_check_bound(a, i)[1 + i]; - } - function t_to_jv(encoder, t){ - return get_exn - (decode - (caml_jsstring_of_string - (to_string$2(0, 0, 0, 0, caml_call1(encoder, t))))); - } - function jv_to_t(decoder, j){ - var json = encode(j); - return [0, - caml_call1 - (decoder, from_string$0(0, 0, 0, caml_string_of_jsstring(json)))]; - } - function t_of_yojson$0(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - id_field = [0, 0], - item_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_id) - if(field_name !== cst_item){ - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; - } - else if(symbol$9(item_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = option_of_yojson(string_of_yojson, field_yojson); - item_field[1] = [0, fvalue]; - } - else if(symbol$9(id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$0 = int_of_yojson(field_yojson); - id_field[1] = [0, fvalue$0]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$10, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$10, symbol$9(extra), yojson); - var match = symbol$9(id_field), match$0 = symbol$9(item_field); - if(match && match$0){ - var item_value = match$0[1], id_value = match[1]; - return [0, id_value, item_value]; - } - var _j2_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _hz_], 0]; - return record_undefined_elements - (tp_loc$10, - yojson, - [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _hA_], _j2_]); - } - return record_list_instead_atom(tp_loc$10, yojson); - } - function yojson_of_t$0(param){ - var - v_item = param[2], - v_id = param[1], - arg = yojson_of_option(yojson_of_string, v_item), - bnds = [0, [0, _hB_, arg], 0], - arg$0 = yojson_of_int(v_id), - bnds$0 = [0, [0, _hC_, arg$0], bnds]; - return [0, 963043957, bnds$0]; - } - function to_jv$1(k){return k;} - function of_jv$0(j){return j;} - function to_jv$2(t){return t_to_jv(yojson_of_t$0, t);} - function of_jv$1(j){return get_exn(jv_to_t(t_of_yojson$0, j));} - function get_key(t){return t[1];} - function sorts_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - date_added_field = [0, 0], - views_field = [0, 0], - sort_name_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_date_added) - if(field_name !== cst_sort_name) - if(field_name !== cst_views){ - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; - } - else if(symbol$9(views_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = list_of_yojson(string_of_yojson, field_yojson); - views_field[1] = [0, fvalue]; - } - else if(symbol$9(sort_name_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$0 = string_of_yojson(field_yojson); - sort_name_field[1] = [0, fvalue$0]; - } - else if(symbol$9(date_added_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$1 = int_of_yojson(field_yojson); - date_added_field[1] = [0, fvalue$1]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$11, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$11, symbol$9(extra), yojson); - var - match = symbol$9(date_added_field), - match$0 = symbol$9(views_field), - match$1 = symbol$9(sort_name_field); - if(match && match$0 && match$1){ - var - sort_name_value = match$1[1], - views_value = match$0[1], - date_added_value = match[1]; - return [0, date_added_value, views_value, sort_name_value]; - } - var - _j0_ = [0, [0, 0 === symbol$9(sort_name_field) ? 1 : 0, _hD_], 0], - _j1_ = [0, [0, 0 === symbol$9(views_field) ? 1 : 0, _hE_], _j0_]; - return record_undefined_elements - (tp_loc$11, - yojson, - [0, [0, 0 === symbol$9(date_added_field) ? 1 : 0, _hF_], _j1_]); - } - return record_list_instead_atom(tp_loc$11, yojson); - } - function yojson_of_sorts(param){ - var - v_sort_name = param[3], - v_views = param[2], - v_date_added = param[1], - arg = yojson_of_string(v_sort_name), - bnds = [0, [0, _hG_, arg], 0], - arg$0 = yojson_of_list(yojson_of_string, v_views), - bnds$0 = [0, [0, _hH_, arg$0], bnds], - arg$1 = yojson_of_int(v_date_added), - bnds$1 = [0, [0, _hI_, arg$1], bnds$0]; - return [0, 963043957, bnds$1]; - } - function t_of_yojson$1(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - sorts_field = [0, 0], - item_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_item) - if(field_name !== cst_sorts){ - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; - } - else if(symbol$9(sorts_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue = sorts_of_yojson(field_yojson); - sorts_field[1] = [0, fvalue]; - } - else if(symbol$9(item_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; - else{ - var fvalue$0 = t_of_yojson(field_yojson); - item_field[1] = [0, fvalue$0]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$12, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$12, symbol$9(extra), yojson); - var match = symbol$9(sorts_field), match$0 = symbol$9(item_field); - if(match && match$0){ - var item_value = match$0[1], sorts_value = match[1]; - return [0, sorts_value, item_value]; - } - var _jZ_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _hJ_], 0]; - return record_undefined_elements - (tp_loc$12, - yojson, - [0, [0, 0 === symbol$9(sorts_field) ? 1 : 0, _hK_], _jZ_]); - } - return record_list_instead_atom(tp_loc$12, yojson); - } - function yojson_of_t$1(param){ - var - v_item = param[2], - v_sorts = param[1], - arg = yojson_of_t(v_item), - bnds = [0, [0, _hL_, arg], 0], - arg$0 = yojson_of_sorts(v_sorts), - bnds$0 = [0, [0, _hM_, arg$0], bnds]; - return [0, 963043957, bnds$0]; - } - function to_jv$3(param){ - var - views = param[3], - sort_name = param[2], - id = param[1], - id$0 = _cC_(id), - sort_name$0 = _cC_(sort_name), - views$0 = of_list$0(_cC_, views); - return caml_js_from_array([0, id$0, sort_name$0, views$0]); - } - function of_jv$2(j){ - var match = caml_js_to_array(j), len = match.length - 1; - if(3 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _hN_], 1); - var - id = match[1], - sort_name = match[2], - views = match[3], - id$0 = _cB_(id), - sort_name$0 = _cB_(sort_name), - views$0 = to_list$0(_cB_, views); - return [0, id$0, sort_name$0, views$0]; - } - var path$1 = [1, [0, _hQ_, _hP_, _hO_]]; - function to_jv$4(k){return k;} - function of_jv$3(j){return j;} - function to_jv$5(k){return _cC_(k);} - function of_jv$4(j){return _cB_(j);} - function to_jv$6(k){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _hR_], 1); - } - function of_jv$5(j){ - var match = caml_js_to_array(j), len = match.length - 1; - if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _hS_], 1); - var type = match[1], views = match[2], _jY_ = to_list$0(_cB_, views); - return [0, _cB_(type), _jY_]; - } - var path$4 = [1, [0, _hU_, _hT_]]; - function to_jv$7(t){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _hV_], 1); - } - function of_jv$6(j){ - var match = caml_js_to_array(j), len = match.length - 1; - if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _hW_], 1); - var - collection_type = match[1], - sort_name = match[2], - _jX_ = _cB_(sort_name); - return [0, _cB_(collection_type), _jX_]; - } - var path$5 = [1, [0, _hY_, _hX_]]; - function to_jv$8(t){return t_to_jv(yojson_of_t$1, t);} - function of_jv$7(j){return get_exn(jv_to_t(t_of_yojson$1, j));} - function get_key$0(t){return [0, t[2][3], t[1][3], t[1][2]];} - function to_jv$9(k){return _cC_(k);} - function of_jv$8(j){return _cB_(j);} - function to_jv$10(t){return t_to_jv(yojson_of_virtual_folder, t);} - function of_jv$9(j){return get_exn(jv_to_t(virtual_folder_of_yojson, j));} - function get_key$1(t){return t[3];} - var - Orderred_items_store = - _c7_ - ([0, [0, path$0, to_jv$1, of_jv$0], name, to_jv$2, of_jv$1, get_key]), - Items_store = - _c7_ - ([0, - [0, path$1, to_jv$3, of_jv$2], - name$0, - to_jv$8, - of_jv$7, - get_key$0]), - Virtual_folder_store = - _c7_ - ([0, - [0, path$6, to_jv$9, of_jv$8], - name$1, - to_jv$10, - of_jv$9, - get_key$1]), - _hZ_ = - [0, [0, path$1, to_jv$3, of_jv$2], name$0, to_jv$8, of_jv$7, get_key$0], - _h0_ = [0, name$2]; - function _h1_(_jV_, _jW_){return _c8_(_h0_, _jV_, _jW_);} - var - ItemsByDateAdded = - function(_jU_){return _h1_(_hZ_, _jU_);}([0, path$2, to_jv$4, of_jv$3]), - _h2_ = - [0, [0, path$1, to_jv$3, of_jv$2], name$0, to_jv$8, of_jv$7, get_key$0], - _h3_ = [0, name$3]; - function _h4_(_jS_, _jT_){return _c8_(_h3_, _jS_, _jT_);} - var - ItemsByViewAndKind = - function(_jR_){return _h4_(_h2_, _jR_);}([0, path$4, to_jv$6, of_jv$5]), - _h5_ = - [0, [0, path$1, to_jv$3, of_jv$2], name$0, to_jv$8, of_jv$7, get_key$0], - _h6_ = [0, name$4]; - function _h7_(_jP_, _jQ_){return _c8_(_h6_, _jP_, _jQ_);} - var - ItemsById = - function(_jO_){return _h7_(_h5_, _jO_);}([0, path$3, to_jv$5, of_jv$4]), - _h8_ = - [0, [0, path$1, to_jv$3, of_jv$2], name$0, to_jv$8, of_jv$7, get_key$0], - _h9_ = [0, name$5]; - function _h__(_jM_, _jN_){return _c8_(_h9_, _jM_, _jN_);} - var - ItemsByTypeAndName = - function(_jL_){return _h__(_h8_, _jL_);}([0, path$5, to_jv$7, of_jv$6]), - chunk_size = 500; - function fetch_total_item_count(source){ - var - _jK_ = - [0, - 0, - 0, - source[2][1][4], - 0, - include_item_types, - 0, - _ib_, - _ia_, - _h$_, - 1, - 0, - 0]; - return let$2 - (caml_call2 - (query(source) - (0, - [0, - yojson_of_params, - params_of_yojson, - yojson_of_response, - response_of_yojson, - method, - endpoint]), - _jK_, - 0), - function(res){return res[2];}); - } - function get_db_infos(idb){ - var - match = create$5(0), - set_infos = match[2], - infos = match[1], - transaction$0 = - transaction - ([0, [0, function(_jJ_){return _jJ_;}, Orderred_items_store[1]], 0], - _ic_, - idb), - store = - object_store - ([0, function(_jI_){return _jI_;}, Orderred_items_store[1]]) - (transaction$0), - req = Orderred_items_store[9].call(null, 0, _id_, store), - last_key = [0, 0]; - on_success - (function(param, q){ - var match = result(q); - if(! match) return set_infos([0, last_key[1], 0]); - var cursor = match[1]; - if(is_none$0(last_key[1])) - last_key[1] = Orderred_items_store[3][1].call(null, cursor); - var match$0 = Orderred_items_store[3][5].call(null, cursor); - if(match$0){ - var item = match$0[1]; - if(item[2]) return set_infos([0, last_key[1], [0, item]]); - } - return Orderred_items_store[3][4].call(null, 0, cursor); - }, - req); - return infos; - } - function is_db_consistent(param, last_source_item_key, db_sync_infos){ - var last_key = value$0(db_sync_infos[1], -1); - return symbol$3(last_key, last_source_item_key) ? 0 : 1; - } - function check_status(source, idb){ - return bind$0 - (get_db_infos(idb), - function(db_infos){ - return let$2 - (fetch_total_item_count(source), - function(total_item_count){ - var last_source_item_key = total_item_count - 1 | 0; - if - (! is_db_consistent(source, last_source_item_key, db_infos)) - return 2; - var match = db_infos[1]; - if(match){ - var key = match[1], item = db_infos[2]; - if(symbol$2(key, last_source_item_key)){ - if(item) - var id = item[1][1], first_unfetched_key = id + 1 | 0; - else - var first_unfetched_key = 0; - return [0, - key + 1 | 0, - first_unfetched_key, - last_source_item_key]; - } - var item$0 = db_infos[2]; - if(symbol$1(key, last_source_item_key)){ - if(! item$0) return [1, 0, last_source_item_key]; - var id$0 = item$0[1][1]; - return symbol$1(id$0, key) - ? 1 - : [1, id$0 + 1 | 0, last_source_item_key]; - } - } - else if(! db_infos[2]) - return [0, 0, 0, last_source_item_key]; - return 2; - }); - }); - } - function update_views(source, idb){ - var _jE_ = [0, source[2][1][4]]; - return let$2 - (caml_call2 - (query(source) - (0, - [0, - yojson_of_params$0, - params_of_yojson$0, - yojson_of_response$0, - response_of_yojson$0, - method$0, - endpoint$0]), - _if_, - _jE_), - function(views){ - iter - (function(item){ - var - transaction$0 = - transaction - ([0, - [0, function(_jH_){return _jH_;}, Orderred_items_store[1]], - [0, [0, function(_jG_){return _jG_;}, Items_store[1]], 0]], - _ie_, - idb), - s_items = - object_store - ([0, function(_jF_){return _jF_;}, Items_store[1]]) - (transaction$0), - sort_name = value$0(item[2], item[1]); - Items_store[14].call - (null, [0, [0, -1, 0, sort_name], item], 0, s_items); - return 0; - }, - views[1]); - return views; - }); - } - function deduce_virtual_folders_from_vi(source, views){ - function parent_ids_of_view_children(param){ - var - id = param[3], - _jD_ = [0, 0, [0, id], source[2][1][4], _ig_, 0, 0, 0, 0, 0, 0, 0, 0]; - return let$2 - (caml_call2 - (query(source) - (0, - [0, - yojson_of_params, - params_of_yojson, - yojson_of_response, - response_of_yojson, - method, - endpoint]), - _jD_, - 0), - function(res){ - return fold_left - (function(set, param){ - var parent_id = param[6]; - if(parent_id){ - var match = parent_id[1]; - if(match){ - var pid = match[1]; - return Set[4].call(null, pid, set); - } - } - return set; - }, - Set[1], - res[1]); - }); - } - function paths_of_parents(parents){ - var - _jB_ = source[2][1][4], - _jC_ = - [0, - Set[49].call(null, parents), - 0, - _jB_, - _ih_, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0]; - return let$2 - (caml_call2 - (query(source) - (0, - [0, - yojson_of_params, - params_of_yojson, - yojson_of_response, - response_of_yojson, - method, - endpoint]), - _jC_, - 0), - function(res){ - return filter_map$0 - (function(param){ - var path = param[4], id = param[3]; - return symbol$6(function(path){return [0, id, path];}, path); - }, - res[1]); - }); - } - return let$0 - (of_list$1 - (symbol$5 - (function(view){ - var id = view[3]; - return let$1 - (parent_ids_of_view_children(view), - function(parents){ - return let$2 - (paths_of_parents(parents), - function(paths){return [0, id, paths];}); - }); - }, - views[1])), - function(result){return flatten_l(result);}); - } - function views_of_path(vfolders, path){ - return filter_map$0 - (function(param){ - var locations = param[2], view_id = param[1]; - return exists - (function(param){ - var pre = param[2]; - return prefix$0(pre, path); - }, - locations) - ? [0, view_id] - : 0; - }, - vfolders); - } - function sync(opt, source){ - if(opt) - var sth = opt[1], report = sth; - else - var report = function(param){return;}; - return function(idb){ - function make_placeholders(first, last){ - var - transaction$0 = - transaction - ([0, [0, function(_jA_){return _jA_;}, Orderred_items_store[1]], 0], - _ii_, - idb), - store = - object_store - ([0, function(_jz_){return _jz_;}, Orderred_items_store[1]]) - (transaction$0); - if(last >= first){ - var i = first; - for(;;){ - Orderred_items_store[14].call(null, [0, i, 0], 0, store); - var _jy_ = i + 1 | 0; - if(last === i) break; - i = _jy_; - } - } - return; - } - function fetch_missing_items(first, last){ - return let$1 - (update_views(source, idb), - function(views){ - return let$1 - (deduce_virtual_folders_from_vi(source, views), - function(vfolders){ - info([0, _il_, [0, first, [0, _ik_, [0, last, _ij_]]]]); - var - fetch_queue = create$0(0), - total = (last - first | 0) + 1 | 0; - function enqueue(start_index, todo){ - var start_index$0 = start_index, todo$0 = todo; - for(;;){ - var _jx_ = symbol$3(todo$0, 0); - if(! _jx_) return _jx_; - var - limit = min(todo$0, chunk_size), - req = - [0, - 0, - 0, - source[2][1][4], - _io_, - include_item_types, - [0, start_index$0], - [0, limit], - _in_, - _im_, - 1, - 0, - 1]; - add(req, fetch_queue); - var - todo$1 = todo$0 - limit | 0, - start_index$1 = start_index$0 + limit | 0; - start_index$0 = start_index$1; - todo$0 = todo$1; - } - } - enqueue(first, total); - var total_queries = length(fetch_queue); - function run_queue(opt, q){ - if(opt) - var sth = opt[1], threads = sth; - else - var threads = 1; - if(! symbol$3(threads, 0)) - throw caml_maybe_attach_backtrace - ([0, Assert_failure, _ir_], 1); - function take_n(acc, n){ - var acc$0 = acc, n$0 = n; - for(;;){ - if(symbol$1(n$0, 0)) return rev(acc$0); - var match = take_opt(q); - if(! match) return rev(acc$0); - var - elt = match[1], - n$1 = n$0 - 1 | 0, - acc$1 = [0, elt, acc$0]; - acc$0 = acc$1; - n$0 = n$1; - } - } - function f(req){ - return let$2 - (caml_call2 - (query(source) - (0, - [0, - yojson_of_params, - params_of_yojson, - yojson_of_response, - response_of_yojson, - method, - endpoint]), - req, - 0), - function(param){ - var start_index = param[3], items = param[1]; - caml_call1 - (report, [0, [0, total_queries, length(fetch_queue)]]); - function idb_put(start_index, items){ - var - transaction$0 = - transaction - ([0, - [0, function(_jw_){return _jw_;}, Orderred_items_store[1]], - [0, [0, function(_jv_){return _jv_;}, Items_store[1]], 0]], - _ip_, - idb), - s_list = - object_store - ([0, function(_ju_){return _ju_;}, Orderred_items_store[1]]) - (transaction$0), - s_items = - object_store - ([0, function(_jt_){return _jt_;}, Items_store[1]]) - (transaction$0); - return iteri - (function(index, item){ - var - path = item[4], - id = item[3], - index$0 = start_index + index | 0, - path$0 = value$0(path, _iq_), - views = views_of_path(vfolders, path$0), - sort_name = value$0(item[2], item[1]); - Orderred_items_store[14].call - (null, [0, index$0, [0, id]], 0, s_list); - Items_store[14].call - (null, - [0, [0, index$0, views, sort_name], item], - 0, - s_items); - return 0; - }, - items); - } - return idb_put(start_index, items); - }); - } - var reqs = take_n(0, threads); - return bind$0 - (of_list$1(symbol$5(f, reqs)), - function(reqs){ - return is_empty(reqs) ? ok(0) : run_queue(0, q); - }); - } - return run_queue(0, fetch_queue); - }); - }); - } - return function(param){ - if(typeof param === "number") return 2 === param ? ok(0) : ok(0); - if(0 === param[0]){ - var - last_source_item_key = param[3], - first_unfetched_key = param[2], - first_missing_key = param[1]; - make_placeholders(first_missing_key, last_source_item_key); - return fetch_missing_items(first_unfetched_key, last_source_item_key); - } - var last_source_item_key$0 = param[2], first_unfetched_key$0 = param[1]; - return fetch_missing_items - (first_unfetched_key$0, last_source_item_key$0);};}; - } - function check_and_sync(report, source, idb){ - return let$1 - (check_status(source, idb), - function(status){ - var - initial = [0, status, initial_report[2]], - report$0 = - symbol$6 - (function(report){ - caml_call1(report, initial); - return function(sync_progress){ - return caml_call1(report, [0, initial[1], sync_progress]);}; - }, - report); - return let$2 - (caml_call1(sync(report$0, source)(idb), status), - function(param){ - return iter$2 - (function(report){return caml_call1(report, _is_);}, report); - }); - }); - } - var - Queries = [0], - include = _hy_(Queries), - dispatch_event = include[2], - Make_worker = include[3], - get$3 = Items_store[5], - index = Items_store[13]; - function on_upgrade_needed$0(e, q){ - var new_version$0 = new_version(e), old_version$0 = old_version(e); - info([0, _iu_, [0, old_version$0, [0, _it_, [0, new_version$0, 0]]]]); - var db = result(q), stores = object_store_names(db); - info(_iv_); - iter$0(function(_js_){return delete_object_store(db, _js_);}, stores); - var - list = - create_object_store - ([0, function(_jr_){return _jr_;}, Orderred_items_store[1]]) - (_iw_, db), - items = - create_object_store([0, function(_jq_){return _jq_;}, Items_store[1]]) - (_ix_, db), - virtual_folders = - create_object_store - ([0, function(_jp_){return _jp_;}, Virtual_folder_store[1]]) - (_iy_, db), - index_date_added = - caml_call1 - (Items_store[12].call - (null, - [0, - function(_jo_){return _jo_;}, - ItemsByDateAdded[12], - ItemsByDateAdded[2]]), - items); - caml_call1 - (Items_store[12].call - (null, - [0, - function(_jn_){return _jn_;}, - ItemsByTypeAndName[12], - ItemsByTypeAndName[2]]), - items); - caml_call1 - (Items_store[12].call - (null, - [0, - function(_jm_){return _jm_;}, - ItemsByViewAndKind[12], - ItemsByViewAndKind[2]]), - items); - caml_call1 - (Items_store[12].call - (null, [0, function(_jl_){return _jl_;}, ItemsById[12], ItemsById[2]]), - items); - return info - ([0, - _iz_, - [0, - list, - [0, items, [0, index_date_added, [0, virtual_folders, 0]]]]]); - } - function with_idb(version, name, f){ - function f$0(ev, dbr){var db = result(dbr); return caml_call1(f, db);} - (function(_ji_){return on_success(f$0, _ji_);} - (function(_jj_){return on_upgrade_needed(on_upgrade_needed$0, _jj_);} - (function(_jk_){return open(name, version, _jk_);}(get_factory(0, 0))))); - return; - } - self_init(0); - function map_error(f){ - return let$0 - (f, - function(f){ - return map_err(function(jv){return [0, 16620, jv];}, f); - }); - } - function as_fut(q){return map_error(fut$0(q));} - function fut_of_array(fs){ - function fut(p){return {fut: p};} - function promise(f){return f[cst_fut];} - var arr = of_array(promise, fs), all$0 = all(arr); - function to_array$0(l){ - return resolve(to_array(function(_jh_){return _jh_;}, l)); - } - return fut(bind(all$0, to_array$0)); - } - function Worker(symbol){ - var view_memo = create$2(0, 64), last_view = [0, [0, -1, [0]]]; - function check_db(idb, source){ - var source$0 = source[2], server_id = source[1]; - function report(status){ - clear$2(view_memo); - last_view[1] = [0, -1, [0]]; - return dispatch_event(0, [0, server_id, status]); - } - return check_and_sync([0, report], source$0, idb); - } - var match = create$5(0), set_idb = match[2], idb = match[1]; - (function(_jg_){return with_idb(_iB_, _iA_, _jg_);} - (function(idb){set_idb([0, idb]); return 0;})); - function read_only_store(param){ - return let$2 - (idb, - function(idb){ - var - _jd_ = - transaction - ([0, [0, function(_jf_){return _jf_;}, Items_store[1]], 0], - _iC_, - idb); - return object_store - ([0, function(_je_){return _je_;}, Items_store[1]]) - (_jd_); - }); - } - function get_view_keys(store, param){ - var - filters = param[4], - sort$0 = param[3], - src_views = param[2], - hash$0 = hash([0, src_views, sort$0, filters]); - if(equal$0(last_view[1][1], hash$0)) return ok(last_view[1][2]); - function _i6_(keys){ - a: - { - if(filters && ! filters[2]){ - var sub = filters[1][1]; - if(! is_empty$0(sub)){ - var - sub$0 = lowercase_ascii$1(sub), - pattern = compile(caml_call1(sprintf(_iD_), sub$0)), - _jb_ = - filter - (function(param){ - var - sort_name = param[2], - sort_name$0 = lowercase_ascii$1(sort_name); - return symbol$4(find$0(0, pattern)(sort_name$0), 0); - }, - keys), - keys$0 = _jb_; - break a; - } - } - var keys$0 = keys; - } - if(sort$0) - sort - (function(param, _jc_){ - var snb = _jc_[2], sna = param[2]; - return compare$0(sna, snb); - }, - keys$0); - last_view[1] = [0, hash$0, keys$0]; - return keys$0; - } - try{var _i__ = ok(find(view_memo, [0, src_views, sort$0])), _i9_ = _i__;} - catch(_i$_){ - var _i7_ = caml_wrap_exception(_i$_); - if(_i7_ !== Not_found) throw caml_maybe_attach_backtrace(_i7_, 0); - var - lower = of_array(_cC_, [0, _iE_]), - upper = of_array(_cC_, [0, _iF_]), - query = bound(lower, upper, _iH_, _iG_, 0), - idx = - caml_call1 - (index - ([0, - function(_ja_){return _ja_;}, - ItemsByViewAndKind[12], - ItemsByViewAndKind[2]]), - store), - _i8_ = - let$2 - (as_fut(ItemsByViewAndKind[8].call(null, [0, query], idx)), - function(all_keys){ - if(src_views) - var - src_views$0 = src_views[1], - keys = - filter - (function(param){ - var views = param[3]; - return exists - (function(v){return memq(v, src_views$0);}, views); - }, - all_keys); - else - var keys = all_keys; - add$0(view_memo, [0, src_views, sort$0], keys); - return keys; - }), - _i9_ = _i8_; - } - return let$2(_i9_, _i6_); - } - function on_query(q){ - switch(q[0]){ - case 0: - var s = q[1]; set_session_uuid(s); return ok(0); - case 1: - var l = q[1]; - return let$1 - (idb, - function(idb){ - return let$0 - (check_db(idb, hd(l)), - function(res){ - return map_err(function(jv){return [0, 16620, jv];}, res); - }); - }); - case 2: - return let$1 - (read_only_store(0), - function(store){ - return let$2 - (as_fut(Items_store[6].call(null, store)), - function(req){ - return to_list(map$3(function(i){return i[2];}, req)); - }); - }); - case 3: - return let$1 - (read_only_store(0), - function(store){ - var - index$0 = - caml_call1 - (index - ([0, - function(_i5_){return _i5_;}, - ItemsByTypeAndName[12], - ItemsByTypeAndName[2]]), - store), - lower = of_array(_cC_, [0, _iI_]), - upper = of_array(_cC_, [0, _iJ_]), - query = bound(lower, upper, _iL_, _iK_, 0); - return let$1 - (as_fut - (ItemsByTypeAndName[8].call(null, [0, query], index$0)), - function(keys){ - return let$0 - (of_list$1 - (symbol$5 - (function(k){return as_fut(get$3(k, store));}, - to_list(keys))), - function(items){ - function _i2_(l){ - return symbol$5 - (function(_i4_){return get_exn_or(_iM_, _i4_);}, l); - } - var - items$0 = - function(_i3_){return symbol$7(_i2_, _i3_);} - (flatten_l(items)); - return items$0; - }); - }); - }); - case 4: - var server_id = q[1]; - return let$1 - (read_only_store(0), - function(store){ - var - index$0 = - caml_call1 - (index - ([0, - function(_i1_){return _i1_;}, - ItemsByTypeAndName[12], - ItemsByTypeAndName[2]]), - store), - lower = of_array(_cC_, [0, _iN_]), - upper = of_array(_cC_, [0, _iO_]), - query = bound(lower, upper, _iQ_, _iP_, 0); - return let$1 - (as_fut - (ItemsByTypeAndName[8].call(null, [0, query], index$0)), - function(keys){ - return let$0 - (of_list$1 - (symbol$5 - (function(k){return as_fut(get$3(k, store));}, - to_list(keys))), - function(items){ - function _iX_(param){ - if(param){ - var item = param[1], server_id$0 = item[2][7]; - if(symbol$0(server_id$0, server_id)) return [0, item]; - } - return 0; - } - function _iY_(_i0_){return filter_map$0(_iX_, _i0_);} - var - items$0 = - function(_iZ_){return symbol$7(_iY_, _iZ_);} - (flatten_l(items)); - return items$0; - }); - }); - }); - case 5: - var request = q[1]; - return let$1 - (read_only_store(0), - function(store){ - return let$2 - (get_view_keys(store, request), - function(keys){ - var item_count = keys.length - 1; - return [0, request, 0, item_count]; - }); - }); - default: - var indexes = q[3], order = q[2], view = q[1]; - return let$1 - (read_only_store(0), - function(store){ - return let$1 - (get_view_keys(store, view[1]), - function(keys){ - return let$0 - (fut_of_array - (map$3 - (function(index){ - try{ - var - index$0 = index + view[2] | 0, - index$1 = apply(order, view[3], index$0), - key = caml_check_bound(keys, index$1)[1 + index$1], - _iV_ = - let$0 - (fut$0(get$3(key, store)), - function(result){ - if(0 !== result[0]){ - var err = result[1]; - error([0, _iR_, [0, key, [0, err, 0]]]); - return 0; - } - var match = result[1]; - if(! match) return 0; - var v = match[1]; - return [0, v]; - }); - return _iV_; - } - catch(_iW_){return return$0(0);} - }, - indexes)), - function(results){return [0, results];}); - }); - }); - } - } - return [0, , , , , , , on_query]; - } - Make_worker(function(_iU_){return [0, Worker(_iU_)[7]];}); - do_at_exit(0); - return; - } - (globalThis)); - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJkYl93b3JrZXIuYmMuanMiLCJzb3VyY2VSb290IjoiIiwibmFtZXMiOlsiY2FtbF9hcnJheV9ibGl0IiwiYTEiLCJpMSIsImEyIiwiaTIiLCJsZW4iLCJqIiwiY2FtbF9hcnJheV9maWxsIiwiYXJyYXkiLCJvZnMiLCJ2IiwiaSIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImEiLCJmIiwiU3RyaW5nIiwibnVsbCIsInMiLCJNYXRoIiwiY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IiwiVWludDhBcnJheSIsImIiLCJsIiwiY2FtbF9ibGl0X2J5dGVzIiwiczEiLCJzMiIsImMxIiwiYzIiLCJjYW1sX3N0cl9yZXBlYXQiLCJuIiwiciIsImNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMiLCJqc29vX2lzX2FzY2lpIiwiY2FtbF91dGYxNl9vZl91dGY4IiwidCIsImMiLCJNbEJ5dGVzIiwidGFnIiwiY29udGVudHMiLCJsZW5ndGgiLCJ0aGlzIiwiY29udGVudCIsImNhbWxfYnl0ZXNfb2ZfanNieXRlcyIsImNhbWxfanNieXRlc19vZl9zdHJpbmciLCJ4IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2JsaXRfc3RyaW5nIiwiZCIsImUiLCJqc29vX3N5c19nZXRlbnYiLCJwcm9jZXNzIiwiZ2xvYmFsVGhpcyIsInVuZGVmaW5lZCIsImNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnIiwiY2FtbF9nbG9iYWxfZGF0YSIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3JhaXNlX3dpdGhfYXJnIiwiYXJnIiwiY2FtbF9zdHJpbmdfb2ZfanNieXRlcyIsImNhbWxfcmFpc2Vfd2l0aF9zdHJpbmciLCJtc2ciLCJjYW1sX2ludmFsaWRfYXJndW1lbnQiLCJjYW1sX2J5dGVzX2JvdW5kX2Vycm9yIiwiY2FtbF9ieXRlc191bnNhZmVfZ2V0IiwiY2FtbF9ieXRlc19nZXQiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY2FsbF9nZW4iLCJhcmdzIiwiYXJnc0xlbiIsImciLCJuYXJncyIsIkFycmF5IiwieSIsImV4dHJhX2FyZ3MiLCJhcmd1bWVudHMiLCJjYW1sX2FycmF5X2JvdW5kX2Vycm9yIiwiY2FtbF9jaGVja19ib3VuZCIsImluZGV4IiwiY2FtbF9jbGFzc2lmeV9mbG9hdCIsImlzRmluaXRlIiwiaXNOYU4iLCJjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWciLCJsb2cyX29rIiwianNvb19mbG9vcl9sb2cyIiwiSW5maW5pdHkiLCJjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQiLCJmbG9hdDMyYSIsIkZsb2F0MzJBcnJheSIsImludDMyYSIsIkludDMyQXJyYXkiLCJjYW1sX2ludDY0X29mZnNldCIsImNhbWxfcmFpc2VfY29uc3RhbnQiLCJjYW1sX3JhaXNlX3plcm9fZGl2aWRlIiwiTWxJbnQ2NCIsImxvIiwibWkiLCJoaSIsInhoaSIsImgiLCJzaWduIiwib2Zmc2V0IiwibW9kdWx1cyIsImRpdmlzb3IiLCJxdW90aWVudCIsInEiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfaW50NjRfYml0c19vZl9mbG9hdCIsImV4cCIsImsiLCJyMyIsInIyIiwicjEiLCJjYW1sX2ludDY0X3RvX2J5dGVzIiwiY2FtbF9iYV9zZXJpYWxpemUiLCJ3cml0ZXIiLCJiYSIsInN6IiwiY29tcGxleCIsImNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQiLCJraW5kIiwiY2FtbF9iYV9jcmVhdGVfYnVmZmVyIiwic2l6ZSIsInZpZXciLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiVWludDE2QXJyYXkiLCJkYXRhIiwiY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIiwiY2FtbF9pbnQ2NF9vZl9ieXRlcyIsImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyIsIk5hTiIsInJlcyIsImNhbWxfYmFfZ2V0X3NpemUiLCJkaW1zIiwibl9kaW1zIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkiLCJjYW1sX2ludDY0X2hpMzIiLCJjYW1sX2ludDY0X2xvMzIiLCJjYW1sX2JhX2N1c3RvbV9uYW1lIiwiTWxfQmlnYXJyYXkiLCJsYXlvdXQiLCJidWZmZXIiLCJpbSIsInJlIiwidG90YWwiLCJrMSIsImsyIiwiTWxfQmlnYXJyYXlfY18xXzEiLCJjYW1sX2JhX2NyZWF0ZV91bnNhZmUiLCJzaXplX3Blcl9lbGVtZW50IiwiY2FtbF9mYWlsd2l0aCIsImNhbWxfYmFfZGVzZXJpYWxpemUiLCJyZWFkZXIiLCJuYW1lIiwibnVtX2RpbXMiLCJzaXplX2RpbSIsInNpemVfZGltX2hpIiwic2l6ZV9kaW1fbG8iLCJzaXh0eSIsImludDY0IiwiY2FtbF9iYV9jb21wYXJlIiwiY2FtbF9tdWwiLCJjYW1sX2hhc2hfbWl4X2ludCIsImNhbWxfaGFzaF9taXhfaW50NjQiLCJjYW1sX2hhc2hfbWl4X2Zsb2F0IiwidjAiLCJjYW1sX2JhX2hhc2giLCJudW1fZWx0cyIsInciLCJjYW1sX2ludDMyX3VubWFyc2hhbCIsImNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCIsImNhbWxfaW50NjRfdW5tYXJzaGFsIiwiY2FtbF9pbnQ2NF9tYXJzaGFsIiwic2l6ZXMiLCJjYW1sX2ludDY0X2NvbXBhcmUiLCJjYW1sX2ludDY0X2hhc2giLCJjYW1sX2N1c3RvbV9vcHMiLCJjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20iLCJjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20iLCJudW0iLCJjdXN0b20iLCJzd2FwIiwiY29tcCIsImNhbWxfaXNfbWxfc3RyaW5nIiwiY2FtbF9pc19tbF9ieXRlcyIsImNhbWxfY29tcGFyZV92YWxfdGFnIiwiTnVtYmVyIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfc3RyaW5nX2NvbXBhcmUiLCJjYW1sX2J5dGVzX2NvbXBhcmUiLCJjYW1sX2NvbXBhcmVfdmFsIiwic3RhY2siLCJ0YWdfYSIsInRhZ19iIiwiY2FtbF9jb21wYXJlIiwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfZXF1YWwiLCJjYW1sX2ZpbGxfYnl0ZXMiLCJjYW1sX2Zsb2F0X29mX3N0cmluZyIsIm0iLCJtMyIsIm1hbnRpc3NhIiwicGFyc2VJbnQiLCJleHBvbmVudCIsImNhbWxfcGFyc2VfZm9ybWF0IiwiZm10IiwiY2FtbF9maW5pc2hfZm9ybWF0dGluZyIsInJhd2J1ZmZlciIsImNhbWxfZm9ybWF0X2Zsb2F0IiwidG9GaXhlZCIsImRwIiwicHJlYyIsInAiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX29vX2xhc3RfaWQiLCJjYW1sX2ZyZXNoX29vX2lkIiwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmciLCJmc19ub2RlX3N1cHBvcnRlZCIsIm1ha2VfcGF0aF9pc19hYnNvbHV0ZSIsInBvc2l4IiwicGF0aCIsIndpbjMyIiwic3BsaXREZXZpY2VSZSIsInJlc3VsdCIsImRldmljZSIsImlzVW5jIiwiQm9vbGVhbiIsInJvb3QiLCJzZXAiLCJwYXRoX2lzX2Fic29sdXRlIiwiY2FtbF90cmFpbGluZ19zbGFzaCIsImNhbWxfY3VycmVudF9kaXIiLCJjYW1sX21ha2VfcGF0aCIsImNvbXAwIiwibmNvbXAiLCJjYW1sX3V0Zjhfb2ZfdXRmMTYiLCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZyIsInVuaXhfZXJyb3IiLCJtYWtlX3VuaXhfZXJyX2FyZ3MiLCJjb2RlIiwic3lzY2FsbCIsImVycm5vIiwidmFyaWFudCIsImNhbWxfbmFtZWRfdmFsdWVzIiwiY2FtbF9uYW1lZF92YWx1ZSIsIm5tIiwiY2FtbF9yYWlzZV93aXRoX2FyZ3MiLCJjYW1sX2J5dGVzX29mX2FycmF5IiwiY2FtbF9yYWlzZV9zeXNfZXJyb3IiLCJjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSIsImNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsIk1sRmlsZSIsIk1sRmFrZUZpbGUiLCJvbGQiLCJidWYiLCJwb3MiLCJjbGVuIiwibmV3X3N0ciIsIm9sZF9kYXRhIiwiTWxGYWtlRmQiLCJmaWxlIiwiZmxhZ3MiLCJNbEZha2VEZXZpY2UiLCJTeW1ib2wiLCJuYW1lX3NsYXNoIiwibW9kZSIsInJhaXNlX3VuaXgiLCJwYXJlbnQiLCJSZWdFeHAiLCJzZWVuIiwiZW50cnkiLCJvayIsImJ5dGVzIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfdW5zYWZlX2dldCIsImNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIiwiTWxOb2RlRmQiLCJmZCIsInJlcXVpcmUiLCJlcnIiLCJidWZfb2Zmc2V0IiwicmVhZCIsIk1sTm9kZURldmljZSIsImNvbnN0cyIsImtleSIsImlzQ2hhcmFjdGVyRGV2aWNlIiwibyIsImpzX3N0YXRzIiwidG9fZGlyIiwidGFyZ2V0IiwibGluayIsImZpbGVfa2luZCIsImNhbWxfZ2V0X3Jvb3QiLCJjYW1sX3Jvb3QiLCJqc29vX21vdW50X3BvaW50IiwicmVzb2x2ZV9mc19kZXZpY2UiLCJjYW1sX2NyZWF0ZV9maWxlIiwianNvb19jcmVhdGVfZmlsZSIsImNhbWxfZnNfaW5pdCIsInRtcCIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2hfbWl4X2pzYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyIiwiY2FtbF9tbF9ieXRlc19jb250ZW50IiwiY2FtbF9oYXNoX21peF9ieXRlcyIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2hhc2giLCJjb3VudCIsImxpbWl0Iiwic2VlZCIsIm9iaiIsInF1ZXVlIiwicmQiLCJ3ciIsImhoIiwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQiLCJzdHlsZSIsImV4cF9zaWduIiwic2lnbl9zdHIiLCJjc3QiLCJ4X3N0ciIsImlkeCIsImNhbWxfaW50NjRfaXNfemVybyIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwiY2FtbF9qc19mcm9tX2FycmF5IiwiY2FtbF9qc19tZXRoX2NhbGwiLCJjYW1sX2pzX25ldyIsIkYiLCJjYW1sX2pzX29iamVjdCIsImNhbWxfanNfdG9fYXJyYXkiLCJjYW1sX2NhbGxiYWNrIiwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCIsImFyaXR5IiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbGV4X2FycmF5IiwiY2FtbF9sZXhfZW5naW5lIiwidGJsIiwic3RhcnRfc3RhdGUiLCJsZXhidWYiLCJsZXhfYnVmZmVyIiwibGV4X2J1ZmZlcl9sZW4iLCJsZXhfc3RhcnRfcG9zIiwibGV4X2N1cnJfcG9zIiwibGV4X2xhc3RfcG9zIiwibGV4X2xhc3RfYWN0aW9uIiwibGV4X2VvZl9yZWFjaGVkIiwibGV4X2Jhc2UiLCJsZXhfYmFja3RyayIsImxleF9kZWZhdWx0IiwibGV4X3RyYW5zIiwibGV4X2NoZWNrIiwic3RhdGUiLCJiYXNlIiwiYmFja3RyayIsImNhbWxfbGlzdF9vZl9qc19hcnJheSIsImNhbWxfbGlzdF90b19qc19hcnJheSIsImNhbWxfbWFrZV92ZWN0IiwiaW5pdCIsImNhbWxfTUQ1SW5pdCIsIkFycmF5QnVmZmVyIiwiYjMyIiwiVWludDMyQXJyYXkiLCJiOCIsImNhbWxfTUQ1VHJhbnNmb3JtIiwiYWRkIiwieHgiLCJmZiIsImdnIiwiaWkiLCJjYW1sX01ENVVwZGF0ZSIsImN0eCIsImlucHV0IiwiaW5wdXRfbGVuIiwiaW5fYnVmIiwiaW5wdXRfcG9zIiwibWlzc2luZyIsImNhbWxfTUQ1RmluYWwiLCJjYW1sX3N0cmluZ19vZl9hcnJheSIsImNhbWxfbWQ1X2J5dGVzIiwiY2FtbF9tZDVfc3RyaW5nIiwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyIsImNhbWxfbWxfY2hhbm5lbHMiLCJjYW1sX21sX2NoYW5uZWxfZ2V0IiwiaWQiLCJjYW1sX21sX2ZsdXNoIiwiY2hhbmlkIiwiY2hhbiIsImNhbWxfc3lzX29wZW5fZm9yX25vZGUiLCJmcyIsImZkMiIsImNhbWxfc3lzX2ZkcyIsIk1sRmFrZUZkX291dCIsImNvbnNvbGUiLCJzcmMiLCJjYW1sX3N5c19vcGVuX2ludGVybmFsIiwiY2FtbF9zeXNfb3BlbiIsIl9wZXJtcyIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luIiwicmVmaWxsIiwiY2hhbm5lbCIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCIsImJ1ZmZlcmVkIiwiY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCIsImNhbWxfbWxfb3V0cHV0X3RhIiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dCIsImNhbWxfbWxfb3V0cHV0X2NoYXIiLCJjYW1sX21vZCIsImNhbWxfbm90ZXF1YWwiLCJjYW1sX29ial9tYWtlX2ZvcndhcmQiLCJjYW1sX29ial90YWciLCJGdW5jdGlvbiIsImNhbWxfYnVpbGRfc3ltYm9scyIsInN5bWIiLCJjYW1sX3JlZ2lzdGVyX2dsb2JhbCIsIm5hbWVfb3B0IiwibmlkIiwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSIsImNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF9zdHJpbmdfb2ZfYnl0ZXMiLCJjYW1sX3N5c19jb25zdF9tYXhfd29zaXplIiwiY2FtbF9yYWlzZV9ub3RfZm91bmQiLCJjYW1sX3N5c19nZXRlbnYiLCJjYW1sX3N5c19yYW5kb21fc2VlZCIsIm5vdyIsIkRhdGUiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX3RyYW1wb2xpbmVfcmV0dXJuIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24iLCJjYW1sX2Zvcm1hdF9leGNlcHRpb24iLCJidWNrZXQiLCJzdGFydCIsImNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uIiwiaGFuZGxlciIsImF0X2V4aXQiLCJjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwib3JpZ2luIiwiZXZlbnQiLCJ6ZXJvX3BvcyIsImxvY2ZtdCIsIm9jYW1sX2xleF90YWJsZXMiLCJ0cF9sb2MiLCJ0cF9sb2MkMCIsInRwX2xvYyQxIiwidHBfbG9jJDIiLCJ0cF9sb2MkMyIsInRwX2xvYyQ0IiwidHBfbG9jJDUiLCJ0cF9sb2MkNiIsInRwX2xvYyQ3IiwidHBfbG9jJDgiLCJ0cF9sb2MkOSIsInRwX2xvYyQxMCIsInBhdGgkMCIsInRwX2xvYyQxMSIsInRwX2xvYyQxMiIsInBhdGgkMiIsInBhdGgkMyIsIm5hbWUkMCIsInBhdGgkNiIsIm5hbWUkMSIsIm5hbWUkMiIsIm5hbWUkMyIsIm5hbWUkNCIsIm5hbWUkNSIsImluY2x1ZGVfaXRlbV90eXBlcyIsImluaXRpYWxfcmVwb3J0IiwiZXJhc2VfcmVsIiwicmVzdCIsInJlc3QkMCIsInJlc3QkMSIsInJlc3QkMiIsInJlc3QkMyIsInJlc3QkNCIsInJlc3QkNSIsInJlc3QkNiIsInJlc3QkNyIsInR5IiwicmVzdCQ4IiwidHkxIiwicmVzdCQ5IiwicmVzdCQxMCIsInJlc3QkMTEiLCJyZXN0JDEyIiwicmVzdCQxMyIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInBhZCQwIiwicGFkJDEiLCJpY29udiIsInByZWMkMCIsInBhZCQyIiwiaWNvbnYkMCIsInByZWMkMSIsInBhZCQzIiwiaWNvbnYkMSIsInByZWMkMiIsInBhZCQ0IiwiaWNvbnYkMiIsInByZWMkMyIsInBhZCQ1IiwiZmNvbnYiLCJwYWQkNiIsInN0ciIsImNociIsImZtdHR5IiwicGFkJDciLCJmbXR0eSQwIiwicGFkJDgiLCJyZXN0JDE0IiwicmVzdCQxNSIsInJlc3QkMTYiLCJmbXRpbmdfbGl0IiwicmVzdCQxNyIsImZtdGluZ19nZW4iLCJyZXN0JDE4IiwicmVzdCQxOSIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwicmVzdCQyMCIsImNvdW50ZXIiLCJyZXN0JDIxIiwicmVzdCQyMiIsImlnbiIsInJlc3QkMjMiLCJjdXIiLCJmYWlsd2l0aCIsImludmFsaWRfYXJnIiwibWF4IiwiYWJzIiwiaW5maW5pdHkiLCJuZWdfaW5maW5pdHkiLCJuYW4iLCJzdHJpbmdfb2ZfYm9vbCIsInN0cmluZ19vZl9pbnQiLCJ2YWxpZF9mbG9hdF9sZXhlbSIsImxvb3AiLCJpJDAiLCJpJDEiLCJzdHJpbmdfb2ZfZmxvYXQiLCJzeW1ib2wiLCJsMSIsImwyIiwidGwiLCJoZCIsInN0ZG91dCIsInN0ZGVyciIsImZsdXNoX2FsbCIsIml0ZXIiLCJvdXRwdXRfc3RyaW5nIiwib2MiLCJvdXRwdXRfc3Vic3RyaW5nIiwicHJlcnJfZW5kbGluZSIsImV4aXRfZnVuY3Rpb24iLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsImZfeWV0X3RvX3J1biQwIiwib2xkX2V4aXQkMCIsIm5ld19leGl0Iiwic3VjY2VzcyIsImRvX2F0X2V4aXQiLCJtYXhfaW50IiwiaXNfYmxvY2siLCJyYWlzZV91bmRlZmluZWQiLCJmb3JjZV9sYXp5X2Jsb2NrIiwiYmxrIiwiY2xvc3VyZSIsImUkMCIsInZhbHVlIiwiZGVmYXVsdCQwIiwibWFwIiwiZ2V0X29rIiwibWFwJDAiLCJvZl9pbnRfZXhuIiwicyQwIiwicmV2X2FwcGVuZCIsImwxJDAiLCJsMiQwIiwibDEkMSIsImwyJDEiLCJyZXYiLCJpbml0X3RhaWxyZWNfYXV4IiwiYWNjIiwiYWNjJDAiLCJhY2MkMSIsImluaXRfYXV4Iiwicm1hcF9mIiwiYWNjdSQwIiwiYWNjdSIsImwkMCIsImwkMSIsImFjY3UkMSIsInRvX3N0cmluZyIsIm9mczEiLCJvZnMyIiwiZW5zdXJlX2dlIiwic3VtX2xlbmd0aHMiLCJzZXBsZW4iLCJ1bnNhZmVfYmxpdHMiLCJkc3QiLCJwb3MkMCIsImVzY2FwZV9pZl9uZWVkZWQiLCJpbmRleF9yZWMiLCJsaW0iLCJ0b2xpc3QiLCJyZXMkMCIsInJlcyQxIiwibGlzdF9sZW5ndGgiLCJmaWxsIiwiY21wIiwibWF4c29uIiwiaTMxIiwidHJpY2tsZWRvd24iLCJ0cmlja2xlIiwiYnViYmxlZG93biIsImJ1YmJsZSIsInRyaWNrbGV1cCIsImZhdGhlciIsImVuZ2luZSIsIm9wdCIsInN0aCIsIndpdGhfcG9zaXRpb25zIiwiaGVpZ2h0IiwiY3JlYXRlIiwiaGwiLCJoJDAiLCJociIsImJhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9sYXN0X29wdF9hdXgiLCJ2MCQwIiwiZmluZF9sYXN0X29wdCIsImNsZWFyIiwicHVzaCIsInBvcF9vcHQiLCJ0b3Bfb3B0IiwiaXRlciQxIiwiY3JlYXRlJDAiLCJjbGVhciQwIiwiY2VsbCIsIm1hdGNoIiwicGVla19vcHQiLCJ0YWtlIiwibmV4dCIsInRha2Vfb3B0IiwiY3JlYXRlJDEiLCJuJDAiLCJuJDEiLCJjbGVhciQxIiwicmVzaXplIiwibW9yZSIsIm9sZF9wb3MiLCJvbGRfbGVuIiwibmV3X2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsImFkZF9zdWJzdHJpbmciLCJuZXdfcG9zaXRpb24iLCJhZGRfc3ViYnl0ZXMiLCJ3cml0ZV9zdHJpbmdsaXQiLCJkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiIsImJ1ZmZlcl9jcmVhdGUiLCJpbml0X3NpemUiLCJidWZmZXJfY2hlY2tfc2l6ZSIsIm92ZXJoZWFkIiwibWluX2xlbiIsImJ1ZmZlcl9hZGRfY2hhciIsImJ1ZmZlcl9hZGRfc3RyaW5nIiwic3RyX2xlbiIsImJ1ZmZlcl9jb250ZW50cyIsImNoYXJfb2ZfZmNvbnYiLCJjRiIsImJwcmludF9mY29udl9mbGFnIiwic3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm9ybWF0dGluZ19saXQiLCJzdHIkMCIsImJwcmludF9mbXR0eSIsImZtdHR5JDEiLCJmbXR0eSQyIiwiZm10dHkkMyIsImZtdHR5JDQiLCJmbXR0eSQ1IiwiZm10dHkkNiIsImZtdHR5JDciLCJmbXR0eSQ4IiwiZm10dHkkOSIsInN1Yl9mbXR0eSIsImZtdHR5JDEwIiwic3ViX2ZtdHR5JDAiLCJmbXR0eSQxMSIsImZtdHR5JDEyIiwiZm10dHkkMTMiLCJmbXR0eSQxNCIsImZtdHR5JDE1Iiwic3ltbSIsImZtdHR5X3JlbF9kZXQiLCJkZSIsImVkIiwiYWYiLCJmYSIsImRlJDAiLCJlZCQwIiwiYWYkMCIsImZhJDAiLCJkZSQxIiwiZWQkMSIsImFmJDEiLCJmYSQxIiwiZGUkMiIsImVkJDIiLCJhZiQyIiwiZmEkMiIsImRlJDMiLCJlZCQzIiwiYWYkMyIsImZhJDMiLCJkZSQ0IiwiZWQkNCIsImFmJDQiLCJmYSQ0IiwiZGUkNSIsImVkJDUiLCJhZiQ1IiwiZmEkNSIsImRlJDYiLCJlZCQ2IiwiYWYkNiIsImZhJDYiLCJkZSQ3IiwiZWQkNyIsImFmJDciLCJmYSQ3IiwiZGUkOCIsImVkJDgiLCJhZiQ4IiwiZmEkOCIsInRyYW5zIiwiamQiLCJkaiIsImdhIiwiYWciLCJkZSQ5IiwiZWQkOSIsImFmJDkiLCJmYSQ5IiwiZGUkMTAiLCJlZCQxMCIsImFmJDEwIiwiZmEkMTAiLCJkZSQxMSIsImVkJDExIiwiYWYkMTEiLCJmYSQxMSIsImRlJDEyIiwiZWQkMTIiLCJhZiQxMiIsImZhJDEyIiwiZGUkMTMiLCJlZCQxMyIsImFmJDEzIiwiZmEkMTMiLCJyZXN0MSIsInJlc3QyIiwicmVzdDEkMCIsInJlc3QyJDAiLCJyZXN0MSQxIiwicmVzdDIkMSIsInJlc3QxJDIiLCJyZXN0MiQyIiwicmVzdDEkMyIsInJlc3QyJDMiLCJyZXN0MSQ0IiwicmVzdDIkNCIsInJlc3QxJDUiLCJyZXN0MiQ1IiwicmVzdDEkNiIsInJlc3QyJDYiLCJyZXN0MSQ3IiwidHkxJDAiLCJyZXN0MiQ3IiwidHkyJDAiLCJyZXN0MSQ4IiwidHkxMiIsInR5MTEiLCJyZXN0MiQ4IiwidHkyMiIsInR5MjEiLCJmNCIsImYyIiwicmVzdDEkOSIsInJlc3QyJDkiLCJyZXN0MSQxMCIsInJlc3QyJDEwIiwicmVzdDEkMTEiLCJyZXN0MiQxMSIsInJlc3QxJDEyIiwicmVzdDIkMTIiLCJyZXN0MSQxMyIsInJlc3QyJDEzIiwidHlwZV9wYWRkaW5nIiwicGFkdHkiLCJwYWR0eSQwIiwidHlwZV9wYWRwcmVjIiwidHlwZV9mb3JtYXQiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJmbXQkMCIsImZtdHR5X3Jlc3QiLCJmbXRfcmVzdCIsImZtdHR5X3Jlc3QkMCIsImZtdF9yZXN0JDAiLCJmbXQkMSIsImZtdF9yZXN0JDEiLCJmbXR0eV9yZXN0JDEiLCJmbXQkMiIsImZtdF9yZXN0JDIiLCJmbXR0eV9yZXN0JDIiLCJmbXQkMyIsImZtdF9yZXN0JDMiLCJmbXR0eV9yZXN0JDMiLCJmbXQkNCIsImZtdF9yZXN0JDQiLCJmbXR0eV9yZXN0JDQiLCJmbXQkNSIsImZtdF9yZXN0JDUiLCJmbXR0eV9yZXN0JDUiLCJwcmVjJDQiLCJmbXQkNiIsImZtdF9yZXN0JDYiLCJwcmVjJDUiLCJwYWQkOSIsInBhZCQxMCIsImZtdHR5X3Jlc3QkNiIsInByZWMkNiIsImZtdCQ3IiwiZm10X3Jlc3QkNyIsInByZWMkNyIsInBhZCQxMSIsInBhZCQxMiIsImZtdHR5X3Jlc3QkNyIsInByZWMkOCIsImZtdCQ4IiwiZm10X3Jlc3QkOCIsInBhZCQxMyIsInBhZCQxNCIsImZtdHR5X3Jlc3QkOCIsImZtdCQ5IiwiZm10X3Jlc3QkOSIsImZtdCQxMCIsImZtdF9yZXN0JDEwIiwiZm10JDExIiwiZm10X3Jlc3QkMTEiLCJmbXQkMTIiLCJmbXR0eV9yZXN0JDkiLCJmbXRfcmVzdCQxMiIsInBhZF9vcHQiLCJmbXQkMTMiLCJmbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5MSIsImZtdF9yZXN0JDEzIiwic3ViX2ZtdHR5JDEiLCJwYWRfb3B0JDAiLCJmbXQkMTQiLCJmbXR0eV9yZXN0JDExIiwiZm10X3Jlc3QkMTQiLCJmbXQkMTUiLCJmbXR0eV9yZXN0JDEyIiwiZm10X3Jlc3QkMTUiLCJmbXR0eSQxNiIsImZtdCQxNiIsImZtdF9yZXN0JDE2IiwiZm10dHkkMTciLCJmbXQkMTciLCJmbXRfcmVzdCQxNyIsImZvcm1hdHRpbmdfZ2VuIiwidHlwZV9mb3JtYXR0aW5nX2dlbiIsImZtdHR5X3Jlc3QkMTMiLCJmbXRfcmVzdCQxOCIsImZtdHR5JDE4IiwiZm10JDE4IiwiZm10dHlfcmVzdCQxNCIsImZtdF9yZXN0JDE5IiwiZm10dHkkMTkiLCJmbXQkMTkiLCJmbXR0eV9yZXN0JDE1IiwiZm10X3Jlc3QkMjAiLCJmbXR0eSQyMCIsImZtdCQyMCIsInR5cGVfaWdub3JlZF9wYXJhbSIsImZtdDAiLCJmbXR0eTAiLCJmbXR0eTMiLCJmbXQzIiwiZm10MSQwIiwiZm10dHkyJDAiLCJmbXQyJDAiLCJmbXR0eTMkMCIsImZtdDMkMCIsInR5cGVfaWdub3JlZF9wYXJhbV9vbmUiLCJ0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGkiLCJzdWJfZm10dHlfcmVzdCIsInN1Yl9mbXR0eV9yZXN0JDAiLCJzdWJfZm10dHlfcmVzdCQxIiwic3ViX2ZtdHR5X3Jlc3QkMiIsInN1Yl9mbXR0eV9yZXN0JDMiLCJzdWJfZm10dHlfcmVzdCQ0Iiwic3ViX2ZtdHR5X3Jlc3QkNSIsInN1Yl9mbXR0eV9yZXN0JDYiLCJzdWJfZm10dHlfcmVzdCQ3Iiwic3ViX2ZtdHR5X3Jlc3QkOCIsInN1Yl9mbXR0eV9yZXN0JDkiLCJzdWJfZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eV9yZXN0JDExIiwic3ViX2ZtdHR5X3Jlc3QkMTIiLCJzdWJfZm10dHlfcmVzdCQxMyIsInN1Yl9mbXR0eV9yZXN0JDE0Iiwic3ViMl9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE1Iiwic3ViMl9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTYiLCJzdWIyX2ZtdHR5JDEiLCJzdWIxX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTciLCJzdWIyX2ZtdHR5JDIiLCJzdWIxX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxOCIsInN1Yl9mbXR0eV9yZXN0JDE5Iiwic3ViX2ZtdHR5X3Jlc3QkMjAiLCJzdWJfZm10dHlfcmVzdCQyMSIsInN1Yl9mbXR0eV9yZXN0JDIyIiwic3ViX2ZtdHR5X3Jlc3QkMjMiLCJzdWJfZm10dHlfcmVzdCQyNCIsInN1Yl9mbXR0eV9yZXN0JDI1Iiwic3ViX2ZtdHR5X3Jlc3QkMjYiLCJyZWNhc3QiLCJmaXhfcGFkZGluZyIsIndpZHRoIiwid2lkdGgkMCIsImZpeF9pbnRfcHJlY2lzaW9uIiwic3RyaW5nX3RvX2NhbWxfc3RyaW5nIiwiZm9ybWF0X29mX2ljb252IiwiZm9ybWF0X29mX2ljb252TCIsImZvcm1hdF9vZl9pY29udmwiLCJmb3JtYXRfb2ZfaWNvbnZuIiwiZm9ybWF0X29mX2Zjb252IiwidHJhbnNmb3JtX2ludF9hbHQiLCJkaWdpdHMiLCJwdXQiLCJsZWZ0IiwiY29udmVydF9pbnQiLCJjb252ZXJ0X2ludDMyIiwiY29udmVydF9uYXRpdmVpbnQiLCJjb252ZXJ0X2ludDY0IiwiY29udmVydF9mbG9hdCIsImhleCIsImFkZF9kb3RfaWZfbmVlZGVkIiwiaXNfdmFsaWQiLCJjYW1sX3NwZWNpYWxfdmFsIiwiZm9ybWF0X2NhbWxfY2hhciIsInN0cmluZ19vZl9mbXR0eSIsIm1ha2VfcHJpbnRmJDAiLCJrJDAiLCJuZXdfYWNjIiwibWFrZV9wcmludGYiLCJtYWtlX3BhZGRpbmciLCJtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiIsIm1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24iLCJhY2MkMiIsImFjYyQzIiwiYWNjJDQiLCJrJDEiLCJrYWNjIiwiayQyIiwibWFrZV9pZ25vcmVkX3BhcmFtIiwibWFrZV9jdXN0b20kMCIsIm1ha2VfaW52YWxpZF9hcmciLCJtYWtlX2Zyb21fZm10dHkkMCIsIm1ha2VfZnJvbV9mbXR0eSIsInAkMCIsInAkMSIsImFyaXR5JDAiLCJtYWtlX2N1c3RvbSIsIm91dHB1dF9hY2MiLCJwJDMiLCJwJDQiLCJwJDUiLCJwJDIiLCJzdHJwdXRfYWNjIiwia2ZwcmludGYiLCJmcHJpbnRmIiwiZXByaW50ZiIsImtzcHJpbnRmIiwic3ByaW50ZiIsInByaW50ZXJzIiwiZmllbGQiLCJvdGhlcl9maWVsZHMiLCJmaWVsZHMiLCJ1c2VfcHJpbnRlcnMiLCJjb252IiwidG9fc3RyaW5nX2RlZmF1bHQiLCJjaGFyJDAiLCJsaW5lIiwiY2hhciQxIiwibGluZSQwIiwiZmlsZSQwIiwiY2hhciQyIiwibGluZSQxIiwiZmlsZSQxIiwiY29uc3RydWN0b3IiLCJ0b19zdHJpbmckMCIsImNvbnZlcnRfcmF3X2JhY2t0cmFjZSIsImJ0IiwiZm9ybWF0X2JhY2t0cmFjZV9zbG90Iiwic2xvdCIsImluZm8iLCJpc19yYWlzZSIsInByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2UiLCJvdXRjaGFuIiwiYmFja3RyYWNlIiwicHJpbnRfcmF3X2JhY2t0cmFjZSIsInJhd19iYWNrdHJhY2UiLCJyZWdpc3Rlcl9wcmludGVyIiwiZm4iLCJvbGRfcHJpbnRlcnMiLCJuZXdfcHJpbnRlcnMiLCJlcnJvcnMiLCJkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW4iLCJzdGF0dXMiLCJlbXB0eV9iYWNrdHJhY2UiLCJ0cnlfZ2V0X3Jhd19iYWNrdHJhY2UiLCJoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIiwiZGVidWdnZXJfaW5fdXNlIiwiZXhuJDEiLCJleG4kMCIsInJhd19iYWNrdHJhY2UkMCIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24kMCIsIm5ld19zdGF0ZSIsImFzc2lnbiIsInN0MSIsInN0MiIsImZ1bGxfaW5pdCIsImNvbWJpbmUiLCJleHRyYWN0Iiwic2VlZCQwIiwibWFrZSQyIiwibWFrZV9zZWxmX2luaXQiLCJjb3B5JDAiLCJiaXRzIiwiY3VydmFsIiwibmV3dmFsIiwibmV3dmFsMzAiLCJvbmdvaW5nX3RyYXZlcnNhbCIsInBhcmFtcyIsInJhbmRvbWl6ZWRfZGVmYXVsdCIsInBybmciLCJwb3dlcl8yX2Fib3ZlIiwieCQwIiwieCQxIiwiaW5pdGlhbF9zaXplIiwicmFuZG9tIiwiaW5zZXJ0X2FsbF9idWNrZXRzIiwiaW5kZXhmdW4iLCJpbnBsYWNlIiwib2RhdGEiLCJuZGF0YSIsIm5zaXplIiwibmRhdGFfdGFpbCIsImluc2VydF9idWNrZXQiLCJjZWxsJDAiLCJjZWxsJDEiLCJuaWR4IiwicmVzaXplJDAiLCJvc2l6ZSIsImtleV9pbmRleCIsInJlbW92ZV9idWNrZXQiLCJmaW5kX3JlYyIsImQxIiwibmV4dDEiLCJkMiIsIm5leHQyIiwiazMiLCJkMyIsIm5leHQzIiwiZmluZF9pbl9idWNrZXQiLCJ6ZXJvIiwidW5rbm93biIsImlzX2tub3duIiwicHBfZW5xdWV1ZSIsInRva2VuIiwicHBfY2xlYXJfcXVldWUiLCJwcF9pbmZpbml0eSIsInBwX291dHB1dF9zdHJpbmciLCJwcF9vdXRwdXRfbmV3bGluZSIsInBwX291dHB1dF9zcGFjZXMiLCJwcF9vdXRwdXRfaW5kZW50IiwiZm9ybWF0X3BwX3RleHQiLCJ0ZXh0IiwiZm9ybWF0X3N0cmluZyIsImJyZWFrX25ld19saW5lIiwiYWZ0ZXIiLCJiZWZvcmUiLCJpbmRlbnQiLCJyZWFsX2luZGVudCIsImJyZWFrX2xpbmUiLCJicmVha19zYW1lX2xpbmUiLCJwcF9mb3JjZV9icmVha19saW5lIiwiYm94X3R5cGUiLCJwcF9za2lwX3Rva2VuIiwiZm9ybWF0X3BwX3Rva2VuIiwidGFicyIsImFkZF90YWIiLCJscyIsInRhZ19uYW1lIiwibWFya2VyIiwiYnJlYWtzIiwiZml0cyIsIm9mZiIsIm9mZiQwIiwiaW5zZXJ0aW9uX3BvaW50IiwidGFicyQwIiwiZmlyc3QiLCJmaW5kIiwidGFpbCIsImhlYWQiLCJ0YWIiLCJvZmYkMSIsImluc2VydGlvbl9wb2ludCQwIiwid2lkdGgkMSIsImJveF90eXBlJDAiLCJ0Ym94IiwidGFnX25hbWUkMCIsIm1hcmtlciQwIiwiYWR2YW5jZV9sZWZ0IiwicGVuZGluZ19jb3VudCIsInNpemUkMCIsImVucXVldWVfYWR2YW5jZSIsInRvayIsImVucXVldWVfc3RyaW5nX2FzIiwiZW5xdWV1ZV9zdHJpbmciLCJpbml0aWFsaXplX3NjYW5fc3RhY2siLCJxdWV1ZV9lbGVtIiwic2V0X3NpemUiLCJsZWZ0X3RvdGFsIiwic2Nhbl9wdXNoIiwiZWxlbSIsInBwX29wZW5fYm94X2dlbiIsImJyX3R5IiwicHBfb3Blbl9zeXNfYm94IiwicHBfY2xvc2VfdGFnIiwicHBfcmluaXQiLCJjbGVhcl90YWdfc3RhY2siLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2ZsdXNoIiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfYmxhbmtzIiwiZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnIiwiZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWciLCJkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyIsInBwX21ha2VfZm9ybWF0dGVyIiwicHBfcXVldWUiLCJzeXNfdG9rIiwic2Nhbl9zdGFjayIsInBwX21hcmdpbiIsIm91dHB1dCIsImZsdXNoIiwicHBmIiwiZm9ybWF0dGVyX29mX291dF9jaGFubmVsIiwicHBfYnVmZmVyX3NpemUiLCJwcF9tYWtlX2J1ZmZlciIsInN0ZF9mb3JtYXR0ZXIiLCJlcnJfZm9ybWF0dGVyIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsInRvX2p2Iiwia2V5cyIsImJvdW5kIiwibG93ZXIiLCJ1cHBlciIsImxvd2VyX29wZW4iLCJzdGgkMCIsInVwcGVyX29wZW4iLCJvbGRfdmVyc2lvbiIsIm5ld192ZXJzaW9uIiwidXBncmFkZV9uZWVkZWQiLCJlcnJvciQwIiwib2ZfanYiLCJlcnJvciQxIiwib25fc3VjY2VzcyIsImYkMCIsImV2Iiwib25fZXJyb3IiLCJmdXQkMCIsInNldCIsInJlc3VsdF9mdXQiLCJ0b19zdHJpbmckMSIsInRvX2p2JDAiLCJnZXQiLCJqdiIsImdldF9hbGwiLCJnZXRfYWxsX2tleXMiLCJxdWVyeSIsInF1ZXJ5JDAiLCJwcmltYXJ5X2tleSIsImFkdmFuY2UiLCJjb250aW51ZSQwIiwia2V5JDAiLCJwcmltYXJ5X2tleSQwIiwiYWR2YW5jZSQwIiwiY29udGludWUkMSIsImRlbGV0ZSQwIiwidXBkYXRlIiwib3Blbl9jdXJzb3IiLCJkaXJlY3Rpb24iLCJkaXJlY3Rpb24kMCIsImQkMCIsImNyZWF0ZV9pbmRleCIsIkkiLCJrZXlfcGF0aCIsInN0cmluZ19vZl9tb2RlIiwib2JqZWN0X3N0b3JlIiwiUyIsImNyZWF0ZV9vYmplY3Rfc3RvcmUiLCJhdXRvX2luY3JlbWVudCIsIm9wdHMiLCJvcHRzJDAiLCJvcHRpb25zIiwiZGVsZXRlX29iamVjdF9zdG9yZSIsInRyYW5zYWN0aW9uIiwic3RvcmVzIiwibW9kZSQwIiwianZfb2Zfc3RvcmUiLCJvYmplY3Rfc3RvcmVfbmFtZXMiLCJvbl91cGdyYWRlX25lZWRlZCIsInJlcSIsIm9wZW4iLCJ2ZXJzaW9uIiwiZ2V0X2ZhY3RvcnkiLCJnbG9iYWwkMCIsImF1eCIsImEkMCIsImkkMiIsImludF9vZl9jb2xvciIsImNvZGVfb2Zfc3R5bGUiLCJjJDAiLCJzdHJpbmdfb2Zfc3R5bGUiLCJlcXVhbCQwIiwicmVjdXJzZSIsInN5bWJvbCQ2IiwiaXNfbm9uZSQwIiwiaXRlciQyIiwidmFsdWUkMCIsImdldF9leG5fb3IiLCJzeW1ib2wkNyIsIm1hcF9lcnIiLCJnZXRfZXhuIiwiZmxhdHRlbl9sIiwic3ltYm9sJDgiLCJrbXBfcGF0dGVybl9sZW5ndGgiLCJnZXQkMiIsImRpciIsImttcF9jb21waWxlIiwiZmFpbHVyZSIsImttcF9jb21waWxlJDAiLCJrbXBfZmluZCIsInBhdHRlcm4iLCJwYXRfbGVuIiwiZXhwZWN0ZWQiLCJmYWlsX29mZnNldCIsImNvbXBpbGUiLCJzdWIiLCJmaW5kJDAiLCJwYXR0ZXJuJDAiLCJwcmUiLCJjaGVjayIsInRvX2pzdHIkMSIsIm9mX2pzdHIkMCIsImpzdHIiLCJ1dGY4X29mX2NvZGUiLCJtYXhiaXRzIiwiY29kZV9vZl9zdXJyb2dhdGVfcGFpciIsImhpZ2gxMCIsImxvdzEwIiwidXRmOF9vZl9zdXJyb2dhdGVfcGFpciIsImpzb25fZXJyb3IiLCJmbmFtZSIsImxudW0iLCJidWYkMCIsImJ1ZiQxIiwicmVhZF9qdW5rJDAiLCJvY2FtbF9sZXhfcmVhZF9qdW5rX3JlYyIsInJlYWRfanVuayIsIm9jYW1sX2xleF9zdGF0ZSIsIm9jYW1sX2xleF9zdGF0ZSQwIiwib2NhbWxfbGV4X3N0YXRlJDEiLCJ3cml0ZV9zcGVjaWFsIiwic3RvcCIsIm9iIiwid3JpdGVfY29udHJvbF9jaGFyIiwiZmluaXNoX3N0cmluZyIsImV4YyQwIiwiZXhjIiwid3JpdGVfc3RyaW5nX2JvZHkiLCJ3cml0ZV9zdHJpbmciLCJ3cml0ZV9udWxsIiwid3JpdGVfYm9vbCIsImRlYyIsIndyaXRlX2RpZ2l0cyIsIndyaXRlX2ludCIsImZsb2F0X25lZWRzX3BlcmlvZCIsIndyaXRlX2Zsb2F0Iiwid3JpdGVfc3RkX2Zsb2F0IiwiaXRlcjJfYXV4IiwiZl9lbHQiLCJmX3NlcCIsIml0ZXIyIiwid3JpdGVfanNvbiIsIndyaXRlX3R1cGxlIiwid3JpdGVfYXNzb2MiLCJ3cml0ZV9saXN0Iiwid3JpdGVfdmFyaWFudCIsInMkMSIsIndyaXRlX3N0ZF9qc29uIiwid3JpdGVfc3RkX3R1cGxlIiwid3JpdGVfc3RkX2Fzc29jIiwid3JpdGVfc3RkX2xpc3QiLCJ3cml0ZV9zdGRfdmFyaWFudCIsInRvX2J1ZmZlciIsInN1ZiIsInN0ZCIsInRvX3N0cmluZyQyIiwib2IkMCIsInlvanNvbl9vZl9ib29sIiwieW9qc29uX29mX3N0cmluZyIsInlvanNvbl9vZl9pbnQiLCJ5b2pzb25fb2Zfb3B0aW9uIiwieW9qc29uX29mX2EiLCJ5b2pzb25fb2ZfbGlzdCIsImxzdCIsInJlY29yZF9jaGVja19leHRyYV9maWVsZHMiLCJvZl95b2pzb25fZXJyb3IiLCJ3aGF0IiwieW9qc29uIiwiYm9vbF9vZl95b2pzb24iLCJzdHJpbmdfb2ZfeW9qc29uIiwiaW50X29mX3lvanNvbiIsIm9wdGlvbl9vZl95b2pzb24iLCJhX29mX3lvanNvbiIsImxpc3Rfb2ZfeW9qc29uIiwicmV2X2xzdCIsInN0YWdfbm9fYXJncyIsImxvYyIsIm5lc3RlZF9saXN0X2ludmFsaWRfc3VtIiwiZW1wdHlfbGlzdF9pbnZhbGlkX3N1bSIsInVuZXhwZWN0ZWRfc3RhZyIsInJlY29yZF9zdXBlcmZsdW91c19maWVsZHMiLCJyZXZfZmxkX25hbWVzIiwiZmxkX25hbWVzX3N0ciIsInJlY29yZF9kdXBsaWNhdGVfZmllbGRzIiwicmVjb3JkX2V4dHJhX2ZpZWxkcyIsInJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AiLCJmaWVsZHMkMCIsInJlY29yZF91bmRlZmluZWRfZWxlbWVudHMiLCJ1bmRlZmluZWQkMCIsInJlY29yZF9saXN0X2luc3RlYWRfYXRvbSIsInN5bWJvbCQ5IiwianN0cl9vZl9tZXRob2QiLCJvcmRlcl9vZl95b2pzb24iLCJ5b2pzb25fb2Zfb3JkZXIiLCJzb3J0X29mX3lvanNvbiIsInlvanNvbl9vZl9zb3J0IiwiaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiIsImFzc29jIiwieW9qc29uX29mX2ltYWdlX2JsdXJfaGFzaCIsImltYWdlX2JsdXJfaGFzaGVzX29mX3lvanNvbiIsImZpZWxkX3lvanNvbnMiLCJwcmltYXJ5X2ZpZWxkIiwiZHVwbGljYXRlcyIsImV4dHJhIiwiZmllbGRfeW9qc29uIiwiZmllbGRfbmFtZSIsImZ2YWx1ZSIsInByaW1hcnlfdmFsdWUiLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3ByaW1hcnkiLCJibmRzIiwiYm5kIiwiYm5kcyQwIiwidHlwZV9vZl95b2pzb24iLCJ5b2pzb25fb2ZfdHlwZSIsImZpZWxkX29mX3lvanNvbiIsInlvanNvbl9vZl9maWVsZCIsInR5cGVfc3RyX29mX3lvanNvbiIsInlvanNvbl9vZl90eXBlX3N0ciIsInRzIiwianNvbiIsInRfb2ZfeW9qc29uIiwibmFtZV9maWVsZCIsInNvcnRfbmFtZV9maWVsZCIsImlkX2ZpZWxkIiwicGF0aF9maWVsZCIsImFsYnVtX2lkX2ZpZWxkIiwicGFyZW50X2lkX2ZpZWxkIiwic2VydmVyX2lkX2ZpZWxkIiwiaW1hZ2VfYmx1cl9oYXNoZXNfZmllbGQiLCJ0eXBlX2ZpZWxkIiwiY29sbGVjdGlvbl90eXBlX2ZpZWxkIiwiZnZhbHVlJDAiLCJmdmFsdWUkMSIsImZ2YWx1ZSQyIiwiZnZhbHVlJDMiLCJmdmFsdWUkNCIsImZ2YWx1ZSQ1IiwiZnZhbHVlJDYiLCJmdmFsdWUkNyIsImZ2YWx1ZSQ4Iiwic29ydF9uYW1lX3ZhbHVlIiwicGF0aF92YWx1ZSIsImFsYnVtX2lkX3ZhbHVlIiwicGFyZW50X2lkX3ZhbHVlIiwiY29sbGVjdGlvbl90eXBlX3ZhbHVlIiwidHlwZV92YWx1ZSIsImltYWdlX2JsdXJfaGFzaGVzX3ZhbHVlIiwic2VydmVyX2lkX3ZhbHVlIiwiaWRfdmFsdWUiLCJuYW1lX3ZhbHVlIiwidiQwIiwieW9qc29uX29mX3QiLCJ2X2NvbGxlY3Rpb25fdHlwZSIsInZfdHlwZSIsInZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3NlcnZlcl9pZCIsInZfcGFyZW50X2lkIiwidl9hbGJ1bV9pZCIsInZfcGF0aCIsInZfaWQiLCJ2X3NvcnRfbmFtZSIsInZfbmFtZSIsImFyZyQ4IiwiYm5kJDMiLCJibmRzJDEiLCJhcmckMCIsImJuZHMkMiIsImFyZyQxIiwiYm5kcyQzIiwiYXJnJDIiLCJibmRzJDQiLCJhcmckMyIsImJuZCQwIiwiYm5kcyQ1IiwidiQxIiwiYXJnJDQiLCJibmQkMSIsImJuZHMkNiIsImFyZyQ1IiwiYm5kcyQ3IiwidiQyIiwiYXJnJDYiLCJibmQkMiIsImJuZHMkOCIsImFyZyQ3IiwiYm5kcyQ5IiwicGFyYW1zX29mX3lvanNvbiIsImlkc19maWVsZCIsInVzZXJfaWRfZmllbGQiLCJmaWVsZHNfZmllbGQiLCJpbmNsdWRlX2l0ZW1fdHlwZXNfZmllbGQiLCJzdGFydF9pbmRleF9maWVsZCIsImxpbWl0X2ZpZWxkIiwic29ydF9vcmRlcl9maWVsZCIsInNvcnRfYnlfZmllbGQiLCJyZWN1cnNpdmVfZmllbGQiLCJlbmFibGVfdXNlcl9kYXRhX2ZpZWxkIiwiZW5hYmxlX2ltYWdlc19maWVsZCIsImZ2YWx1ZSQ5IiwiZnZhbHVlJDEwIiwiaWRzX3ZhbHVlIiwic3RhcnRfaW5kZXhfdmFsdWUiLCJsaW1pdF92YWx1ZSIsInNvcnRfb3JkZXJfdmFsdWUiLCJlbmFibGVfaW1hZ2VzX3ZhbHVlIiwiZW5hYmxlX3VzZXJfZGF0YV92YWx1ZSIsInJlY3Vyc2l2ZV92YWx1ZSIsInNvcnRfYnlfdmFsdWUiLCJpbmNsdWRlX2l0ZW1fdHlwZXNfdmFsdWUiLCJmaWVsZHNfdmFsdWUiLCJ1c2VyX2lkX3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyIsInZfZW5hYmxlX2ltYWdlcyIsInZfZW5hYmxlX3VzZXJfZGF0YSIsInZfcmVjdXJzaXZlIiwidl9zb3J0X2J5Iiwidl9zb3J0X29yZGVyIiwidl9saW1pdCIsInZfc3RhcnRfaW5kZXgiLCJ2X2luY2x1ZGVfaXRlbV90eXBlcyIsInZfZmllbGRzIiwidl91c2VyX2lkIiwidl9pZHMiLCJhcmckOSIsImJuZHMkMTAiLCJhcmckMTAiLCJyZXNwb25zZV9vZl95b2pzb24iLCJpdGVtc19maWVsZCIsInRvdGFsX3JlY29yZF9jb3VudF9maWVsZCIsInRvdGFsX3JlY29yZF9jb3VudF92YWx1ZSIsIml0ZW1zX3ZhbHVlIiwieW9qc29uX29mX3Jlc3BvbnNlIiwidl90b3RhbF9yZWNvcmRfY291bnQiLCJ2X2l0ZW1zIiwibWV0aG9kIiwiZW5kcG9pbnQiLCJwYXJhbXNfb2ZfeW9qc29uJDAiLCJpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnRfZmllbGQiLCJpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnRfdmFsdWUiLCJ5b2pzb25fb2ZfcGFyYW1zJDAiLCJ2X2luY2x1ZGVfZXh0ZXJuYWxfY29udGVudCIsInJlc3BvbnNlX29mX3lvanNvbiQwIiwieW9qc29uX29mX3Jlc3BvbnNlJDAiLCJlbmRwb2ludCQwIiwicHAiLCJ2aXJ0dWFsX2ZvbGRlcl9vZl95b2pzb24iLCJsb2NhdGlvbnNfZmllbGQiLCJpdGVtX2lkX2ZpZWxkIiwiaXRlbV9pZF92YWx1ZSIsImxvY2F0aW9uc192YWx1ZSIsInlvanNvbl9vZl92aXJ0dWFsX2ZvbGRlciIsInZfaXRlbV9pZCIsInZfbG9jYXRpb25zIiwic2Vzc2lvbl91dWlkIiwic2V0X3Nlc3Npb25fdXVpZCIsImF1dGhvcml6YXRpb24iLCJ0b2tlbiQwIiwic2Vzc2lvbl91dWlkJDAiLCJyZXF1ZXN0JDEiLCJiYXNlX3VybCIsImhlYWRlcnMiLCJRIiwicGF0aF9wYXJhbXMiLCJiYXNlX3VyaSIsImJhc2VfcGF0aF9zZWdtZW50cyIsImVuZHBvaW50X3BhdGhfc2VnbWVudHMiLCJwYXRoX3NlZ21lbnRzJDAiLCJ1cmkiLCJ1cmkkMCIsImF1dGhvcml6YXRpb24kMCIsImhlYWRlcnMkMCIsImJvZHkiLCJ1cmwkMCIsInBhcmFtcyQwIiwidXJpX3dpdGhfcGFyYW1zIiwidXJsJDEiLCJpbml0JDAiLCJtZXRob2QkMCIsImdldF90b2tlbiIsInRhZ19vZiIsImZ1dHVyZXMiLCJsaXN0ZW5lcnMiLCJ3b3JrZXIiLCJvbl9tZXNzYWdlIiwibWVzc2FnZSIsInV1aWQiLCJkaXNwYXRjaF9ldmVudCIsImFwcGx5IiwidF90b19qdiIsImVuY29kZXIiLCJqdl90b190IiwiZGVjb2RlciIsInRfb2ZfeW9qc29uJDAiLCJpdGVtX2ZpZWxkIiwiaXRlbV92YWx1ZSIsInlvanNvbl9vZl90JDAiLCJ2X2l0ZW0iLCJ0b19qdiQxIiwib2ZfanYkMCIsInRvX2p2JDIiLCJvZl9qdiQxIiwiZ2V0X2tleSIsInNvcnRzX29mX3lvanNvbiIsImRhdGVfYWRkZWRfZmllbGQiLCJ2aWV3c19maWVsZCIsInZpZXdzX3ZhbHVlIiwiZGF0ZV9hZGRlZF92YWx1ZSIsInlvanNvbl9vZl9zb3J0cyIsInZfdmlld3MiLCJ2X2RhdGVfYWRkZWQiLCJ0X29mX3lvanNvbiQxIiwic29ydHNfZmllbGQiLCJzb3J0c192YWx1ZSIsInlvanNvbl9vZl90JDEiLCJ2X3NvcnRzIiwidG9fanYkMyIsInZpZXdzIiwic29ydF9uYW1lIiwiaWQkMCIsInNvcnRfbmFtZSQwIiwidmlld3MkMCIsIm9mX2p2JDIiLCJwYXRoJDEiLCJ0b19qdiQ0Iiwib2ZfanYkMyIsInRvX2p2JDUiLCJvZl9qdiQ0IiwidG9fanYkNiIsIm9mX2p2JDUiLCJ0eXBlIiwicGF0aCQ0IiwidG9fanYkNyIsIm9mX2p2JDYiLCJjb2xsZWN0aW9uX3R5cGUiLCJwYXRoJDUiLCJ0b19qdiQ4Iiwib2ZfanYkNyIsImdldF9rZXkkMCIsInRvX2p2JDkiLCJvZl9qdiQ4IiwidG9fanYkMTAiLCJvZl9qdiQ5IiwiZ2V0X2tleSQxIiwiY2h1bmtfc2l6ZSIsImZldGNoX3RvdGFsX2l0ZW1fY291bnQiLCJzb3VyY2UiLCJnZXRfZGJfaW5mb3MiLCJpZGIiLCJzZXRfaW5mb3MiLCJpbmZvcyIsInRyYW5zYWN0aW9uJDAiLCJzdG9yZSIsImxhc3Rfa2V5IiwiY3Vyc29yIiwiaXRlbSIsImlzX2RiX2NvbnNpc3RlbnQiLCJsYXN0X3NvdXJjZV9pdGVtX2tleSIsImRiX3N5bmNfaW5mb3MiLCJjaGVja19zdGF0dXMiLCJkYl9pbmZvcyIsInRvdGFsX2l0ZW1fY291bnQiLCJmaXJzdF91bmZldGNoZWRfa2V5IiwiaXRlbSQwIiwidXBkYXRlX3ZpZXdzIiwic19pdGVtcyIsImRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aSIsInBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiIsInBhcmVudF9pZCIsInBpZCIsInBhdGhzX29mX3BhcmVudHMiLCJwYXJlbnRzIiwicGF0aHMiLCJ2aWV3c19vZl9wYXRoIiwidmZvbGRlcnMiLCJsb2NhdGlvbnMiLCJ2aWV3X2lkIiwic3luYyIsInJlcG9ydCIsIm1ha2VfcGxhY2Vob2xkZXJzIiwibGFzdCIsImZldGNoX21pc3NpbmdfaXRlbXMiLCJmZXRjaF9xdWV1ZSIsImVucXVldWUiLCJzdGFydF9pbmRleCIsInRvZG8iLCJzdGFydF9pbmRleCQwIiwidG9kbyQwIiwidG9kbyQxIiwic3RhcnRfaW5kZXgkMSIsInRvdGFsX3F1ZXJpZXMiLCJydW5fcXVldWUiLCJ0aHJlYWRzIiwidGFrZV9uIiwiZWx0IiwiaXRlbXMiLCJpZGJfcHV0Iiwic19saXN0IiwiaW5kZXgkMCIsInJlcXMiLCJmaXJzdF9taXNzaW5nX2tleSIsImxhc3Rfc291cmNlX2l0ZW1fa2V5JDAiLCJmaXJzdF91bmZldGNoZWRfa2V5JDAiLCJjaGVja19hbmRfc3luYyIsImluaXRpYWwiLCJyZXBvcnQkMCIsInN5bmNfcHJvZ3Jlc3MiLCJvbl91cGdyYWRlX25lZWRlZCQwIiwibmV3X3ZlcnNpb24kMCIsIm9sZF92ZXJzaW9uJDAiLCJkYiIsImxpc3QiLCJ2aXJ0dWFsX2ZvbGRlcnMiLCJpbmRleF9kYXRlX2FkZGVkIiwid2l0aF9pZGIiLCJkYnIiLCJtYXBfZXJyb3IiLCJhc19mdXQiLCJmdXRfb2ZfYXJyYXkiLCJmdXQiLCJwcm9taXNlIiwiYXJyIiwiYWxsJDAiLCJ0b19hcnJheSQwIiwidmlld19tZW1vIiwibGFzdF92aWV3IiwiY2hlY2tfZGIiLCJzb3VyY2UkMCIsInNlcnZlcl9pZCIsInNldF9pZGIiLCJyZWFkX29ubHlfc3RvcmUiLCJnZXRfdmlld19rZXlzIiwiZmlsdGVycyIsInNvcnQkMCIsInNyY192aWV3cyIsImhhc2gkMCIsInN1YiQwIiwia2V5cyQwIiwic25iIiwic25hIiwiYWxsX2tleXMiLCJzcmNfdmlld3MkMCIsIm9uX3F1ZXJ5IiwiaXRlbXMkMCIsInNlcnZlcl9pZCQwIiwicmVxdWVzdCIsIml0ZW1fY291bnQiLCJpbmRleGVzIiwib3JkZXIiLCJpbmRleCQxIiwicmVzdWx0cyJdLCJzb3VyY2VzIjpbIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLyttbEJ5dGVzLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK2JpZ2FycmF5LmpzIiwiL2J1aWx0aW4vK2ludHMuanMiLCIvYnVpbHRpbi8raGFzaC5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rZm9ybWF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rZnMuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2xleGluZy5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raW8uanMiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9sZXhpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGV4Yy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3lvanNvbi9sZXhlcl91dGlscy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGF0YV9zb3VyY2UvamVsbHlmaW5fYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9zdG9yZXMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3N5bmMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxBdG9taWMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGRsaWIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDSW50Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29iai5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbExhenkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9vcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9yZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDQ2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9pbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9ieXRlcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RhY2subWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9xdWV1ZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2J1ZmZlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3lvanNvbi9jb2RlYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3lvanNvbi9zYWZlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRmLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udl9lcnJvci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Z1bi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2RpZ2VzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2hhc2h0YmwubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDRm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FsbGJhY2subWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc19vZl9vY2FtbC1jb21waWxlci9ydW50aW1lL2pzb29fcnVudGltZS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9icnJlci9pbmRleGVkX2RiLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0xpc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDT3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NSZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1N0cmluZy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3RkL3N0ZC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3lvanNvbi9jb21tb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3lvanNvbl9jb252Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi9wcHhfeW9qc29uX2NvbnZfbGliLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYXRhX3NvdXJjZS9qZWxseWZpbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvd29ya2VyX2FwaS93b3JrZXJfYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi92aWV3Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9kYl93b3JrZXJfYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9kYi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vZGJfd29ya2VyL2RiX3dvcmtlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZF9leGl0Lm1sIl0sIm1hcHBpbmdzIjoiOztBLEM7O0c7OztRO1M7OztHO0k7STtJO0c7RTs7OztHQXFEQSxTQUFTQSxnQkFBZ0JDLElBQUlDLElBQUlDLElBQUlDLElBQUlDO0lBQ3ZDLEdBQUlELE1BQU1GO0tBQUksSUFDRCxJQUFGSSxPQUFPQSxLQUFLRCxLQUFLQyxLQUFLSCxHQUFHQyxLQUFLRSxLQUFLTCxHQUFHQyxLQUFLSTs7S0FDL0MsSUFDTSxJQUFGQSxJQUFJRCxLQUFLQyxRQUFRQSxLQUFLSCxHQUFHQyxLQUFLRSxLQUFLTCxHQUFHQyxLQUFLSTtJQUV0RDtHQUNGO0dBNEJBLFNBQVNDLGdCQUFnQkMsT0FBT0MsS0FBS0osS0FBS0s7SUFDeEMsSUFBVSxJQUFGQyxPQUFPQSxJQUFJTixLQUFLTSxLQUN0QkgsTUFBTUMsTUFBSUUsU0FBT0Q7SUFFbkI7R0FDRjtHQ3JCQSxTQUFTRSx5QkFBMEJDLEdBQUdGLEdBQUdOO0lBQ2pDLElBQUZTLElBQUlDO0lBQ1IsR0FBSUosVUFBVU4sZUFBZUEsT0FBT1EsVUFBVSxPQUFPQyxRQUFTRSxNQUFNSDtJQUM5RCxJQUFGSTtJQUNKLFVBQVdaLEtBQUtNLFdBQVVOO0tBQ3hCWSxLQUFLSCxRQUFTRSxNQUFNSCxRQUFRRixHQUFFQSxJQUFJTyxTQUFTYjtJQUM3QyxPQUFPWTtHQUNUO0dBcVhBLFNBQVNFLDRCQUE2QkY7SUFFcEMsSUFBSUosUUFBUU8sV0FBV0gsTUFDbkJJLElBQUlKLEtBQUtLLElBQUlELFVBQVVWO0lBQzNCLE1BQU9BLElBQUlXLEdBQUdYLEtBQUtFLEVBQUVGLEtBQUtVLGFBQWFWO0lBQ3ZDLElBQUtXLElBQUlMLEtBQUtOLElBQUlXLEdBQUdY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LHlCLE9BbkdGZCxnQkFtR0VjO0lBQUFBLHlCLE9BL0ZFWixlQStGRlk7SUFBQUEseUIsT0EvRkVaLGVBK0ZGWTtJQUlKLE9BSklBO0dBSUQ7WUN4ekJEQyx5QkQ0ekJ5QnRuQjtJQUMzQjs7YyxPMUJsbkJFQyxpQjBCaW5CeUJEOzs2QkFDcUIsV0FEckJBLElBQzZCO0dBQUM7Z0NBSW5DeGlCO0lBQ3RCOztjLE9UMzBCRStwQixjUzAwQm9CL3BCOzs0QjtHQUN3QjtPQU01QytwQztZQUNBQyxzQkFBb0IsT1R2OUJwQjVnQixTU3M5QkEyZ0IsZ0JBQ2dEO0dBR3ZDO0lBQUEsU0FIVEM7SUMzMEJBQyxnQkFFQUgseUIzQjhJQTNuQjtJMkIvSUErbkIsZ0JBQ0FKLHlCM0IrSUExbkI7RzBCbXNCZ0I7WUF5WGhCK25CO0lDNzFDQXJCLGVBZ0pBbUI7SUQ4c0NGLE9DOTFDRW5CLGVBaUpBb0I7R0Q4c0M2QjtHMUJoMUJ6QnB2QixRMEI4MEJKcXZCO1lFaDJDQUMsbUJBQW1CM2hDLE1BQ2pCdEc7SUFBSixJQUNJZytCLE9BQVUsYUFEVmgrQixlQUFBQSxNQUFBQTtJQUVKLDBCQUhxQnNHLE1BRWpCMDNCO0lBQ0o7R0FBOEI7R0N3STlCO0dEM0lFaUs7R0MrSXFCLGUsVTtHLEksd0I7MkIsTyxjOztJO0ksTztHOztJO0k7Ozs7SSxPO0c7eUIsTyxzQixjO21DLE8seUI7RztHLEksZTt1Qiw0Qjs0QixpQzs7STtJO0c7O0ksNEI7Rzs7SSxZOztJLE87O0c7O0ksWTs7STtJOzt3QixNLE87eUIsYyxPOztJLFk7O0k7O3dCLFk7MkIsVSxPOztJLFk7O0k7O3dCLDhCO3dCLG1COztJO0ksK0IsTyx1QjtHOztJLHdCLG9CLG9COzs7O00sUTtNOzs7OztJO0c7O0k7SSw2QixPLHVCO0c7Ozs7O29COztNLFU7Ozs7OztJO0c7O0k7SSxXOztJO0k7Rzs7STtJLE8seUIsVTtHO0c7OztLLE87NkIsTyxPLGUsTyxPO0k7SSxtQjtHO3VCLE8sbUI7eUIsTyxPLHNDOztJLE87YTthO0c7cUIsTyxpQjt1Qjt1QjttQixnQjt5QixrQjt5QixrQjs7STtLLE07STtJLHVCLCtDO0k7SSxxQyw4QjtJO29CLHVEO0k7Rzt3Qix1Qjs7STs7OzJCLGlCLG1CO0c7O0ksNkIsZ0IsbUI7Rzs7SSxJLGdDO0k7Syx3QztJO0k7RztrQix3Qjs7cUIsbUIsb0I7SSxvQixtQix1QjtJO0c7O0kscUM7Rzt5QixvQjs7SSxzQjs7YyxlOztjLE87YTtHOztJLDRCLE90QjlJckJ0bUI7RztHOzhCLDBCOztJO0ksVTtJO0k7RztHO0c7RztHO0c7c0IsTyxrQjs7SSxJLFE7Ozs7O0s7O0k7RztHO0c7RztJO0k7STs7SSxXOztJO0c7RztvQixzQjs7MkIsTyxvQjtJO0s7TTtNO007Szs7Ozs7O0s7O0c7OzJCLHNCLHFCO0k7SyxJLGtCO0s7SztLOzs7Ozs7Szs7RztHO3VCLE8sYTtzQixrQjs7STtJO0k7Rzt5QixPLGE7RztHLCtCO2dDLGtDLFM7Rzs7STs7O29COztNO007Ozs7O0ksTztHO3FCLDhDO3VCLDhDO3NCLDhDO0c7RztHO0c7RztHO0c7MEI7O0ksbUMsZTtHO0c7O0k7SSxTO0k7O0s7Szs7SSxvQjtJO0c7Ozs7Ozs7Ozs7Ozs7OztJO0ksa0Q7STtJO0kscUJEREFGLG1CO0k7STtJO0k7STtJO0k7SSxvRDtJO0c7Rzs7STtJO0c7RztHOzt3QjtJLHNCLGtDO0c7RztHO0c7RztHO29CLGlCO0c7RztHOztJO0k7RztHOztJO0k7STtHO0c7RztHO1l3QmxCTXltQjtJQUFRLHVCQUNUaCtCLGNBQUssWUFBTEE7UUFDRGkrQjtJQUFRLGdCQUZORCxPQUVGQztHQUE4QjtZQVFoQ0MsTUFBT0MsT0FBT0MsT0FBUTVqQjtJQUN4QixHQUR3QkEsU0FBYUMsTUFBYkQsUUFBQTZqQixhQUFhNWpCLGNBQWI0akI7SUFDeEIsYUFEMkRDLGlCQUFiQyxhQUFhRCxnQkFBYkM7SUFDdEMsSUFBSjlwQztJQUNKLE9BRElBLFFBREswcEMsT0FBT0MsV0FBUUMsZ0JBQXNCRTtHQUdvQjtZQU85REMsWUFBWWhxQyxHQUFJLE9BQUpBLGdCQUFzQztZQUNsRGlxQyxZQUFZ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Ozs7O08sTTtNLGlCOztNOzs7OztpQixNOztHOztJLEksdUQ7OzsrQjs7O0c7O0k7OztHOztJO0ksT0xxS0E3VTtHOztJO0k7SyxPOzs7STtHOztJOzs7STtJO0s7Ozs7TTs7Ozs7O1M7O1M7O1M7O1Msc0JqQmFBM0k7O1Msc0JBSkFGOztTLHNCQUVBQzs7U2lCekhBa0ksZTs7Uzs7Uzs7UyxzQjs7UztTO1U7VTtVO1U7VTtVOzs7O1c7VztXO1c7VztXO1c7Ozs7Ozs7cUMsc0JmRkFqRjs7Ozs7UztTO1U7VTs7OztXO1c7Vzs7Ozs7OztvQyxzQkFBQUE7Ozs7O1M7UztVO1U7Ozs7VztXO1c7Ozs7Ozs7b0Msc0JBQUFBOzs7OztTO1M7UztTOztTO1UsTzs7Uzs7UztTO1UsTzs7Uzs7UztTO1UsTzs7Uzs7UztVLE87O1M7O1M7aUI7OztHOztJO0k7SyxPOzs7STtHOztJOzs7STtJO0s7Ozs7OztnQmV2QkFyakI7O1M7UztVLE87O1M7O1M7UztVLE87O1M7aUI7O0s7OztHOztJO0c7O0k7STtLOzs7Ozs7Uyw0QyxPQ25DRTZvQjs7UyxPQUFBQTs7UyxPQUFBQTs7UyxPQUFBQTs7UyxPQUFBQTs7UyxPQUFBQTs7UztVO1U7VTtVO1U7VTtVOzs7VTtTLE9BREYrbUI7O1M7aUI7O0s7OztHOztJO0c7O0k7STtLOzs7Ozs7UztVO1U7VTtVO1U7VTtVOzs7VSxPQTZDQUs7Uzs7UztpQjs7Szs7O0c7O0k7Rzs7STtJO0s7Ozs7OztTO1M7UztTOztTOztTO2lCOztLOzs7RzsrQiw2Qzs7STtJO0s7Ozs7OztTOztTO2lCOztLOzs7Rzs7STtJO0ssTzs7O0k7Rzs7STs7O0k7STtLOzs7Ozs7Uzs7Uzs7UztTO1UsTzs7Uzs7UztVLE87O1M7O0s7OztHOzZCLDJDOztJO0k7Szs7O2lDO2lDO0s7OztHOztJO0k7SyxPOzs7STtHOztJOzs7STtJO0s7Ozs7OztTO1M7VSxPOztTOztTO1M7VSxPOztTOztTO1M7VSxPOztTOztTO1UsTzs7UztpQjs7Szs7O0c7O0k7Rzs7STtJO0s7Ozs7OztTRGdCQTNuQixlOztTLGtEOztTO2lCOztLOzs7Rzs7STtHOztJO0k7Szs7OztNLE07aUM7Szs7O0c7O0k7Rzs7STtJO0s7Ozs7OztTOztTLE07O1M7aUI7O0s7OztHOztJO0c7O0k7STtLOzs7O00sTTtpQztLOzs7Rzs7STtHOztJO0k7Szs7Ozs7O1M7O1MsTTs7UztpQjs7Szs7O0c7O0k7Rzs7STtJO0s7Ozs7TSxNO2lDO0s7OztHOztJO0c7O0k7STtLOzs7Ozs7Uzs7UyxNOztTO2lCOztLOzs7Rzs7STtHOztJO0k7Szs7Ozs7O1M7O1M7aUI7O0s7OztHOztJO0k7O0c7O0k7STtJLHFCLE07STttQjtJO0c7O0k7SztNO007TTtLOzs7OytCLE9zQnpEQTRuQjs7O0c7Rzs7SSw4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Rzs7SSxNOztHOztJLG1FO0k7Rzs7SSxrRTtJO0c7WUNHQWdELGVBQWVuMEMsR0FBUSxzQkFBUkEsR0FBZTtZQUM5Qm8wQyxpQkFBaUIzMEIsS0FBVSx1QkFBVkEsS0FBcUI7WUFHdEM0MEIsY0FBYzd6QyxHQUFRLG9CQUFSQSxHQUFjO1lBUTVCOHpDLGlCQUFpQkM7SSxZQUVUO1FBREhoekM7SUFBSyxPQUFBLFdBRE9nekMsYUFDWmh6Qzs7WUFjTGl6QyxlQUFlRCxhQUFhRTtJQUFNLHNCdEN5QmxDbndCLFlzQ3pCZWl3QixhQUFhRTtHQUF5RDtHQWtCekY7SUFBQTtJQUVJQztZQUVBQyxnQkFBZ0JDLE1BQUtDO0lBQVMsTUFBQTs4Q0FBZEQsT0FBS0M7R0FBdUQ7WUFRNUVDLGVBQWVEO0lBQ2pCLFVBRGlCQSxxQ0FBQUEsZUFFVHgxQyxJQUZTdzFDLFdBRUosT0FBTHgxQztJQUNELE9BWExzMUMsc0JBUWVFO0dBR2dEO1lBRy9ERSxpQkFBaUJGO0lBQ25CLFVBRG1CQSxzQ0FBQUEsZUFFVHAxQixNQUZTbzFCLFdBRUYsT0FBUHAxQjtJQUNILE9BakJMazFCLHNCQWNpQkU7R0FHNEM7WUFrQjdERyxjQUFjSDtJQUNoQixVQURnQkEsbUNBQUFBLGVBRVR4MUMsSUFGU3cxQyxXQUVKLE9BQUx4MUM7SUFDQSxPQXRDTHMxQyxz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O01BQUFsNEMsSUFBQWs0QztNQUFBaDFDLE1BTEVxMEMsMEJBS0Z2M0M7TUFBQW80QyxnQkFBQWwxQztNQUFBbTFDLGFBQUFELEtBREZEOztTQUNFRSxTQURGRjtJQUFBLHNCQUNFRTtHQUUrQztHQUVqRCxTQUFBQyxlQUFBOUM7SUFBQSxVQUFBQSxxQ0FBQUE7Z0JBQUFBO2dCQUFBLE8yQjNDRVcsdUIzQjJDRmg2QixVQUFBcTVCOzs7Ozs7Ozs7OzBCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzs7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7Ozs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7Ozs7OzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzs7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7OzJCMkI5REVRLGEzQjhERjc1QixVQUFBcTVCOzsyQjJCOURFUSxhM0I4REY3NUIsVUFBQXE1Qjs7MkIyQjlERVEsYTNCOERGNzVCLFVBQUFxNUI7Ozs7O09BQUEsTzJCL0NFVSx3QjNCK0NGLzVCLFVBQUFxNUI7OztJQUFBLE8yQnZDRVksZ0IzQnVDRmo2QixVQUFBcTVCO0dBc0NtQjtZQXRDbkIrQztJQUFBOztPQUNFOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBO2VBQ0E7O0dBQ2lCO0dBRW5CLFNBQUFDLGdCQUFBaEQ7SUFBQSxVQUFBQSxxQ0FBQUE7Z0JBQUFBO2dCQUFBLE8yQm5GRVcsdUIzQm1GRi81QixVQUFBbzVCOzs7Ozs7Ozs7OzBCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs7OzsyQjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7Ozs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7Ozs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7Ozs7Ozs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs7Ozs7Ozs7MkIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7Ozs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7Ozs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7Ozs7Ozs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs0QjJCdEdFUSxhM0JzR0Y1NUIsVUFBQW81Qjs7NEIyQnRHRVEsYTNCc0dGNTVCLFVBQUFvNUI7OzRCMkJ0R0VRLGEzQnNHRjU1QixVQUFBbzVCOzs7Ozs7T0FBQSxPMkJ2RkVVLHdCM0J1RkY5NUIsVUFBQW81Qjs7O0lBQUEsTzJCL0VFWSxnQjNCK0VGaDZCLFVBQUFvNUI7R0E4RG1CO1lBOURuQmlEO0lBQUE7Ozs7UUFnQ0U7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FB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SEZpbUQ7MEJBeUhPOUU7a0JBQ0w7MkJBcEhGK0UsY0FtSE8vRSxPQURLNkY7b0NBRUxqaUI7NEJBQ0wsSUFBSWtpQixhQURDbGlCOzRCQUVMLFdBSlVpaUIsWUFHTkM7MkJBQzZDO2lCQUFBOztZQUNqQ0MsVUFsRUNsbkQsTUFrRVJtbkQsUUFsRVFubkQsTUFrRWRrQixPQWxFY2xCO1FBc0VqQjtpQkFqSUZpbUQ7MEJBZ0lPOUU7a0JBQ0w7MkJBM0hGK0UsY0EwSE8vRSxPQUhGamdEO29DQUlFNmpDOzRCQUNMO3FDQXBLSnNnQjs7a0RBc0tnQ2huRDswQ0FDdEI7MkNBR0k7NENBRkU0bEQsVUFGZ0I1bEQsUUFQekI2Qzs0Q0FVU2ttRCxVSHhLZGpLLE1HOEpXZ0ssT0FBTmptRCxTQVNTK2lEOzRDQUtBMTRDLHVCQVZQdzVCLE1BTU9xaUIsYUFBQUE7NENBTUo7O2dEakJySVZwaEIsWWlCbUljejZCLEtBWFA0MUM7eURBYVExNUM7aURBQ0wsU0FES0E7c0RBR0d5RCxNQUhIekQ7a0RBSUQsb0JBTkE4RCxTQUtJTDtrREFDSjs7NkRBSkN6RDs2REFFUTtxREFLRjNOO2lEQUFNLFdBQU5BO2dEQUFZOzJDQVB2Qjs7c0RBUVE7eUNBQWU7eUNBeEJmb3REOzhDQU1YRyxTQXFCTCxXQXJCS0EsU0FxQks7MkJBQUE7aUJBQUE7O0lBQUE7SUFsTEMsdUJBcUZiUjs7OEJBZ0dlO0cvQ3dXakJscEM7O0UiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEFycmF5XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfc3ViIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc3ViIChhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYTJbMF09MDtcbiAgZm9yKHZhciBpMiA9IDEsIGkxPSBpKzE7IGkyIDw9IGxlbjsgaTIrKyxpMSsrICl7XG4gICAgYTJbaTJdPWFbaTFdO1xuICB9XG4gIHJldHVybiBhMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCwgbDIgPSBhMi5sZW5ndGg7XG4gIHZhciBsID0gbDErbDItMVxuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IDA7XG4gIHZhciBpID0gMSxqID0gMTtcbiAgZm9yKDtpPGwxO2krKykgYVtpXT1hMVtpXTtcbiAgZm9yKDtpPGw7aSsrLGorKykgYVtpXT1hMltqXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfY29uY2F0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfY29uY2F0KGwpIHtcbiAgdmFyIGEgPSBbMF07XG4gIHdoaWxlIChsICE9PSAwKSB7XG4gICAgdmFyIGIgPSBsWzFdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYi5sZW5ndGg7IGkrKykgYS5wdXNoKGJbaV0pO1xuICAgIGwgPSBsWzJdO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy8vLy8vLy8vLy8vLyBQZXJ2YXNpdmVcbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfc2V0IChtdXRhYmxlLCBjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc2V0IChhcnJheSwgaW5kZXgsIG5ld3ZhbCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGFycmF5W2luZGV4KzFdPW5ld3ZhbDsgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfZ2V0IG11dGFibGUgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcnJheVtpbmRleCsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KXtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICBhcnJheVtvZnMraSsxXSA9IHY7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2hlY2tfYm91bmQgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9jaGVja19ib3VuZCAoYXJyYXksIGluZGV4KSB7XG4gIGlmIChpbmRleCA+Pj4gMCA+PSBhcnJheS5sZW5ndGggLSAxKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX3ZlY3QgY29uc3QgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX3ZlY3QgKGxlbiwgaW5pdCkge1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IGluaXQ7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfZmxvYXRfdmVjdCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfZmxvYXRfdmVjdChsZW4pe1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MjU0O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gMDtcbiAgcmV0dXJuIGJcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9jcmVhdGUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2NyZWF0ZShsZW4pe1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MjU0O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gMDtcbiAgcmV0dXJuIGJcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgaWYobiA9PSAwKSByZXR1cm4gXCJcIjtcbiAgaWYgKHMucmVwZWF0KSB7cmV0dXJuIHMucmVwZWF0KG4pO30gLy8gRUNNQXNjcmlwdCA2IGFuZCBGaXJlZm94IDI0K1xuICB2YXIgciA9IFwiXCIsIGwgPSAwO1xuICBmb3IoOzspIHtcbiAgICBpZiAobiAmIDEpIHIgKz0gcztcbiAgICBuID4+PSAxO1xuICAgIGlmIChuID09IDApIHJldHVybiByO1xuICAgIHMgKz0gcztcbiAgICBsKys7XG4gICAgaWYgKGwgPT0gOSkge1xuICAgICAgcy5zbGljZSgwLDEpOyAvLyBmbGF0dGVuIHRoZSBzdHJpbmdcbiAgICAgIC8vIHRoZW4sIHRoZSBmbGF0dGVuaW5nIG9mIHRoZSB3aG9sZSBzdHJpbmcgd2lsbCBiZSBmYXN0ZXIsXG4gICAgICAvLyBhcyBpdCB3aWxsIGJlIGNvbXBvc2VkIG9mIGxhcmdlciBwaWVjZXNcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyAoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT0gMCAmJiBsZW4gPD0gNDA5NiAmJiBsZW4gPT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5IChudWxsLCBhKTtcbiAgdmFyIHMgPSBcIlwiO1xuICBmb3IgKDsgMCA8IGxlbjsgaSArPSAxMDI0LGxlbi09MTAyNClcbiAgICBzICs9IGYuYXBwbHkgKG51bGwsIGEuc2xpY2UoaSxpICsgTWF0aC5taW4obGVuLCAxMDI0KSkpO1xuICByZXR1cm4gcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91dGY4X29mX3V0ZjE2XG5mdW5jdGlvbiBjYW1sX3V0Zjhfb2ZfdXRmMTYocykge1xuICBmb3IgKHZhciBiID0gXCJcIiwgdCA9IGIsIGMsIGQsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGMwIHwgKGMgPj4gNikpO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPCAweGQ4MDAgfHwgYyA+PSAweGRmZmYpIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGUwIHwgKGMgPj4gMTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfSBlbHNlIGlmIChjID49IDB4ZGJmZiB8fCBpICsgMSA9PSBsIHx8XG4gICAgICAgICAgICAgICAoZCA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGQgPiAweGRmZmYpIHtcbiAgICAgIC8vIFVubWF0Y2hlZCBzdXJyb2dhdGUgcGFpciwgcmVwbGFjZWQgYnkgXFx1ZmZmZCAocmVwbGFjZW1lbnQgY2hhcmFjdGVyKVxuICAgICAgdCArPSBcIlxceGVmXFx4YmZcXHhiZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjID0gKGMgPDwgMTApICsgZCAtIDB4MzVmZGMwMDtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGYwIHwgKGMgPj4gMTgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gMTIpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIGNhbWxfdXRmMTZfb2ZfdXRmOChzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gXCJcIiwgYywgYzEsIGMyLCB2LCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYzEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMxIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjMSA9IHMuY2hhckNvZGVBdChqKSkgPCAweDgwOyBqKyspO1xuICAgICAgaWYgKGogLSBpID4gNTEyKSB7IHQuc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiOyBiICs9IHMuc2xpY2UoaSwgaikgfVxuICAgICAgZWxzZSB0ICs9IHMuc2xpY2UoaSwgaik7XG4gICAgICBpZiAoaiA9PSBsKSBicmVhaztcbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgICB2ID0gMTtcbiAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgYyA9IGMyICsgKGMxIDw8IDYpO1xuICAgICAgaWYgKGMxIDwgMHhlMCkge1xuICAgICAgICB2ID0gYyAtIDB4MzA4MDtcbiAgICAgICAgaWYgKHYgPCAweDgwKSB2ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHYgPSAyO1xuICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgICAgIGMgPSBjMiArIChjIDw8IDYpO1xuICAgICAgICAgIGlmIChjMSA8IDB4ZjApIHtcbiAgICAgICAgICAgIHYgPSBjIC0gMHhlMjA4MDtcbiAgICAgICAgICAgIGlmICgodiA8IDB4ODAwKSB8fCAoKHYgPj0gMHhkN2ZmKSAmJiAodiA8IDB4ZTAwMCkpKSB2ID0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdiA9IDM7XG4gICAgICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSAmJlxuICAgICAgICAgICAgICAgIChjMSA8IDB4ZjUpKSB7XG4gICAgICAgICAgICAgIHYgPSBjMiAtIDB4M2M4MjA4MCArIChjIDw8IDYpO1xuICAgICAgICAgICAgICBpZiAodiA8IDB4MTAwMDAgfHwgdiA+IDB4MTBmZmZmKSB2ID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHYgPCA0KSB7IC8vIEludmFsaWQgc2VxdWVuY2VcbiAgICAgIGkgLT0gdjtcbiAgICAgIHQgKz0gXCJcXHVmZmZkXCI7XG4gICAgfSBlbHNlIGlmICh2ID4gMHhmZmZmKVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZDdjMCArICh2ID4+IDEwKSwgMHhkYzAwICsgKHYgJiAweDNGRikpXG4gICAgZWxzZVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHYpO1xuICAgIGlmICh0Lmxlbmd0aCA+IDEwMjQpIHt0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjt9XG4gIH1cbiAgcmV0dXJuIGIrdDtcbn1cblxuLy9Qcm92aWRlczoganNvb19pc19hc2NpaVxuZnVuY3Rpb24ganNvb19pc19hc2NpaSAocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZVxuICAgIHJldHVybiAhL1teXFx4MDAtXFx4N2ZdLy50ZXN0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICBkZWZhdWx0OiAvKiBQQVJUSUFMICovXG4gICAgaWYgKGkgPj0gcy5jLmxlbmd0aCkgcmV0dXJuIDA7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jLmNoYXJDb2RlQXQoaSk7XG4gIGNhc2UgNDogLyogQVJSQVkgKi9cbiAgICByZXR1cm4gcy5jW2ldXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSwgYykge1xuICAvLyBUaGUgT0NhbWwgY29tcGlsZXIgdXNlcyBDaGFyLnVuc2FmZV9jaHIgb24gaW50ZWdlcnMgbGFyZ2VyIHRoYW4gMjU1IVxuICBjICY9IDB4ZmY7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09IHMuYy5sZW5ndGgpIHtcbiAgICAgIHMuYyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgIGlmIChpICsgMSA9PSBzLmwpIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocyk7XG4gIH1cbiAgcy5jW2ldID0gYztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSAxKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQxNihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMSkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDMpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAyKSxcbiAgICAgIGI0ID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCB8IGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSA3KSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQ2NChzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQgKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldCAocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDE2KHMsaSxpMTYpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMiA9IDB4RkYgJiBpMTYgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkxNjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0MTZcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQxNihzLGksaTE2KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQzMihzLGksaTMyKXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjQgPSAweEZGICYgaTMyID4+IDI0LFxuICAgICAgYjMgPSAweEZGICYgaTMyID4+IDE2LFxuICAgICAgYjIgPSAweEZGICYgaTMyID4+IDgsXG4gICAgICBiMSA9IDB4RkYgJiBpMzI7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMSwgYjIpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAyLCBiMyk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDMsIGI0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQzMlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MzJcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDMyKHMsaSxpMzIpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQzMihzLGksaTMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDY0KHMsaSxpNjQpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gY2FtbF9pbnQ2NF90b19ieXRlcyhpNjQpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgNyAtIGosIGFbal0pO1xuICB9XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0NjRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nIChzKSB7XG4gIHZhciB0YWcgPSA5IC8qIEJZVEVTIHwgQVNDSUkgKi87XG4gIGlmICghanNvb19pc19hc2NpaShzKSlcbiAgICB0YWcgPSA4IC8qIEJZVEVTIHwgTk9UX0FTQ0lJICovLCBzID0gY2FtbF91dGY4X29mX3V0ZjE2KHMpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXModGFnLCBzLCBzLmxlbmd0aCk7XG59XG5cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBNbEJ5dGVzICh0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgdGhpcy50PXRhZzsgdGhpcy5jPWNvbnRlbnRzOyB0aGlzLmw9bGVuZ3RoO1xufVxuTWxCeXRlcy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpe1xuICBzd2l0Y2ggKHRoaXMudCkge1xuICBjYXNlIDk6IC8qQllURVMgfCBBU0NJSSovXG4gICAgcmV0dXJuIHRoaXMuYztcbiAgZGVmYXVsdDpcbiAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICBjYXNlIDA6IC8qQllURVMgfCBVTktPV04qL1xuICAgIGlmIChqc29vX2lzX2FzY2lpKHRoaXMuYykpIHtcbiAgICAgIHRoaXMudCA9IDk7IC8qQllURVMgfCBBU0NJSSovXG4gICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgICB0aGlzLnQgPSA4OyAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgY2FzZSA4OiAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICB9XG59O1xuTWxCeXRlcy5wcm90b3R5cGUudG9VdGYxNiA9IGZ1bmN0aW9uICgpe1xuICB2YXIgciA9IHRoaXMudG9TdHJpbmcoKTtcbiAgaWYodGhpcy50ID09IDkpIHJldHVybiByXG4gIHJldHVybiBjYW1sX3V0ZjE2X29mX3V0Zjgocik7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uICgpe1xuICB2YXIgY29udGVudCA9IHRoaXMudCA9PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0aGlzLnQsY29udGVudCx0aGlzLmwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyAocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09IDIgLyogUEFSVElBTCAqLylcbiAgICBzLmMgKz0gY2FtbF9zdHJfcmVwZWF0KHMubCAtIHMuYy5sZW5ndGgsICdcXDAnKVxuICBlbHNlXG4gICAgcy5jID0gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LT1dOKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkgKHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShzLmwpO1xuICB2YXIgYiA9IHMuYywgbCA9IGIubGVuZ3RoLCBpID0gMDtcbiAgZm9yICg7IGkgPCBsOyBpKyspIGFbaV0gPSBiLmNoYXJDb2RlQXQoaSk7XG4gIGZvciAobCA9IHMubDsgaSA8IGw7IGkrKykgYVtpXSA9IDA7XG4gIHMuYyA9IGE7XG4gIHMudCA9IDQ7IC8qIEFSUkFZICovXG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyAocykge1xuICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgcmV0dXJuIHMuYztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIChzKSB7XG4gIHZhciBsID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICB2YXIgYSA9IG5ldyBVaW50OEFycmF5KGwpO1xuICB2YXIgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgaWYobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCeXRlcy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsMCxhLmxlbmd0aCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5IChhKSB7XG4gIGlmKCEgKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgIGEgPSBuZXcgVWludDhBcnJheShhKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sQnl0ZXMoNCxhLGEubGVuZ3RoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19jb21wYXJlIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfY29tcGFyZShzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDwgczIuYyk/LTE6KHMxLmMgPiBzMi5jKT8xOjA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMikge1xuICBpZihzMSA9PT0gczIpIHJldHVybiAxO1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPT0gczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19lcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMik7IH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikgeyByZXR1cm4gMS1jYW1sX2J5dGVzX2VxdWFsKHMxLCBzMik7IH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzZXF1YWwgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW4gbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzdGhhbihzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDwgczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMyLHMxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMixzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dyZWF0ZXJ0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzdGhhbihzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbGxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG4vL0FsaWFzOiBjYW1sX2ZpbGxfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2ZpbGxfYnl0ZXMocywgaSwgbCwgYykge1xuICBpZiAobCA+IDApIHtcbiAgICBpZiAoaSA9PSAwICYmIChsID49IHMubCB8fCAocy50ID09IDIgLyogUEFSVElBTCAqLyAmJiBsID49IHMuYy5sZW5ndGgpKSkge1xuICAgICAgaWYgKGMgPT0gMCkge1xuICAgICAgICBzLmMgPSBcIlwiO1xuICAgICAgICBzLnQgPSAyOyAvKiBQQVJUSUFMICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzLmMgPSBjYW1sX3N0cl9yZXBlYXQgKGwsIFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgICAgICBzLnQgPSAobCA9PSBzLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gICAgICBmb3IgKGwgKz0gaTsgaSA8IGw7IGkrKykgcy5jW2ldID0gYztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmxpdF9ieXRlcyhzMSwgaTEsIHMyLCBpMiwgbGVuKSB7XG4gIGlmIChsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIGlmICgoaTIgPT0gMCkgJiZcbiAgICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbGVuID49IHMyLmMubGVuZ3RoKSkpIHtcbiAgICBzMi5jID0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgaTIgPT0gczIuYy5sZW5ndGgpIHtcbiAgICBzMi5jICs9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzMik7XG4gICAgdmFyIGMxID0gczEuYywgYzIgPSBzMi5jO1xuICAgIGlmIChzMS50ID09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbCA9IE1hdGgubWluIChsZW4sIGMxLmxlbmd0aCAtIGkxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYmxpdF9zdHJpbmcoYSxiLGMsZCxlKSB7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhhKSxiLGMsZCxlKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19sZW5ndGggY29uc3RcbmZ1bmN0aW9uIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpIHsgcmV0dXJuIHMubCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbmNhdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb25jYXQoYSxiKSB7IHJldHVybiBhICsgYiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbmNhdFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgTWxCeXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KHMxLHMyKXtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHMxLnQsczEuYytzMi5jLHMxLmwrczIubClcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ191bnNhZmVfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIHMubGVuZ3RoXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmUgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8tMTooczEgPiBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPD0gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0Zjhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykge1xuICBpZihqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBzO1xuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocylcbiAgZWxzZSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3V0Zjhfb2ZfdXRmMTYocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7IHJldHVybiBuZXcgTWxCeXRlcygwLHMscy5sZW5ndGgpOyB9XG5cblxuLy8gVGhlIHNlY3Rpb24gYmVsb3cgc2hvdWxkIGJlIHVzZWQgd2hlbiB1c2UtanMtc3RyaW5nPWZhbHNlXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsaSxjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19lcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgeyByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIHMuYyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocyl7XG4gIHJldHVybiBzLnRvVXRmMTYoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfYnl0ZXMocykge1xuICByZXR1cm4gKHMgaW5zdGFuY2VvZiBNbEJ5dGVzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHMuY1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuICh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiAmJiAhL1teXFx4MDAtXFx4ZmZdLy50ZXN0KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfaXNfbWxfYnl0ZXMocyk7XG59XG5cbi8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGRlcHJlY2F0ZWRcblxuLy9Qcm92aWRlczogY2FtbF9qc190b19ieXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9qc190b19ieXRlX3N0cmluZyhzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX25ld19zdHJpbmcgKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF90b19qc19zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF90b19qc19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc190b19zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3RvX3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7IHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkgeyByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KSB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIFN5c1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvciAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5TeXNfZXJyb3IsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdCAoY29kZSkge1xuICBpZihnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KVxuICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KGNvZGUpO1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJGdW5jdGlvbiAnZXhpdCcgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4bil7XG4gIHN3aXRjaChleG5bMl0pIHtcbiAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICBjYXNlIC0xMTogLy8gQXNzZXJ0X2ZhaWx1cmVcbiAgY2FzZSAtMTI6IC8vIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG4gICAgcmV0dXJuIDE7XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9leGNlcHRpb24oZXhuKXtcbiAgdmFyIHIgPSBcIlwiO1xuICBpZihleG5bMF0gPT0gMCkge1xuICAgIHIgKz0gZXhuWzFdWzFdO1xuICAgIGlmKGV4bi5sZW5ndGggPT0gMyAmJiBleG5bMl1bMF0gPT0gMCAmJiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4blsxXSkpIHtcblxuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDJcbiAgICAgIHZhciBidWNrZXQgPSBleG47XG4gICAgfVxuICAgIHIgKz0gXCIoXCI7XG4gICAgZm9yKHZhciBpID0gc3RhcnQ7IGkgPCBidWNrZXQubGVuZ3RoOyBpICsrKXtcbiAgICAgIGlmKGkgPiBzdGFydCkgcis9XCIsIFwiO1xuICAgICAgdmFyIHYgPSBidWNrZXRbaV1cbiAgICAgIGlmKHR5cGVvZiB2ID09IFwibnVtYmVyXCIpXG4gICAgICAgIHIrPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmKHYgaW5zdGFuY2VvZiBNbEJ5dGVzKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0eXBlb2YgdiA9PSBcInN0cmluZ1wiKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSByICs9IFwiX1wiO1xuICAgIH1cbiAgICByICs9IFwiKVwiXG4gIH0gZWxzZSBpZiAoZXhuWzBdID09IDI0OCl7XG4gICAgciArPSBleG5bMV1cbiAgfVxuICByZXR1cm4gclxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9mb3JtYXRfZXhjZXB0aW9uLCBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpe1xuICBpZihlcnIgaW5zdGFuY2VvZiBBcnJheSAmJiAoZXJyWzBdID09IDAgfHwgZXJyWzBdID09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmKGhhbmRsZXIpIGNhbWxfY2FsbGJhY2soaGFuZGxlciwgW2VycixmYWxzZV0pO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIG1zZyA9IGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgdmFyIGF0X2V4aXQgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIpO1xuICAgICAgaWYoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYoZXJyLmpzX2Vycm9yKSB0aHJvdyBlcnIuanNfZXJyb3I7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbmZ1bmN0aW9uIGNhbWxfc2V0X3N0YXRpY19lbnYoayx2KXtcbiAgaWYoIWdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52KVxuICAgIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52ID0ge31cbiAgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZba10gPSB2O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19zeXNfZ2V0ZW52IChjb25zdClcbmZ1bmN0aW9uIGpzb29fc3lzX2dldGVudihuKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICAvL25vZGVqcyBlbnZcbiAgaWYocHJvY2Vzc1xuICAgICAmJiBwcm9jZXNzLmVudlxuICAgICAmJiBwcm9jZXNzLmVudltuXSAhPSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZihnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudlxuICAgICAmJiBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltuXSlcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0ZW52IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29fc3lzX2dldGVudlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYociA9PT0gdW5kZWZpbmVkKVxuICAgIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdW5zYWZlX2dldGVudlxuLy9SZXF1aXJlczogY2FtbF9zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52KG5hbWUpe1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIGNhbWxfYXJndiA9ICgoZnVuY3Rpb24gKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgdmFyIG1haW4gPSBcImEub3V0XCI7XG4gIHZhciBhcmdzID0gW11cblxuICBpZihwcm9jZXNzXG4gICAgICYmIHByb2Nlc3MuYXJndlxuICAgICAmJiBwcm9jZXNzLmFyZ3YubGVuZ3RoID4gMSkge1xuICAgIHZhciBhcmd2ID0gcHJvY2Vzcy5hcmd2XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspXG4gICAgYXJnczIucHVzaChjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhhcmdzW2ldKSk7XG4gIHJldHVybiBhcmdzMjtcbn0pKCkpXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbnZhciBjYW1sX2V4ZWN1dGFibGVfbmFtZSA9IGNhbWxfYXJndlsxXVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfYXJndiAoYSkge1xuICByZXR1cm4gWzAsIGNhbWxfYXJndlsxXSwgY2FtbF9hcmd2XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19hcmd2IChhKSB7XG4gIHJldHVybiBjYW1sX2FyZ3Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21vZGlmeV9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX21vZGlmeV9hcmd2KGFyZyl7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShhKXtcbiAgcmV0dXJuIGNhbWxfZXhlY3V0YWJsZV9uYW1lXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgdmFyIGNtZCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGNtZCk7XG4gIGlmICh0eXBlb2YgcmVxdWlyZSAhPSBcInVuZGVmaW5lZFwiKXtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbiAgICBpZihjaGlsZF9wcm9jZXNzICYmIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMpXG4gICAgICB0cnkge1xuICAgICAgICBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGNtZCx7c3RkaW86ICdpbmhlcml0J30pO1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICB9XG4gIGVsc2UgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZChjbWQpe1xuICByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lIG11dGFibGVcbnZhciBjYW1sX2luaXRpYWxfdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKiAwLjAwMTtcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWUgKCkge1xuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgcmV0dXJuIG5vdyAqIDAuMDAxIC0gY2FtbF9pbml0aWFsX3RpbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlblxuLy9SZXF1aXJlczogY2FtbF9zeXNfdGltZVxuZnVuY3Rpb24gY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuKGIpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQgKCkge1xuICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8pIHtcbiAgICAgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9IGVsc2UgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XG4gICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9XG4gIH1cbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHZhciB4ID0gbm93XjB4ZmZmZmZmZmYqTWF0aC5yYW5kb20oKTtcbiAgcmV0dXJuIFswLHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuICgpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSAoKSB7IHJldHVybiAoMHg3RkZGRkZGRi80KSB8IDA7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIlVuaXhcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiAoKSB7IHJldHVybiBvc190eXBlID09IFwiV2luMzJcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJDeWd3aW5cIiA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwianNfb2Zfb2NhbWxcIildO1xufVxuXG4vL1Byb3ZpZGVzOiBvc190eXBlXG52YXIgb3NfdHlwZSA9IChnbG9iYWxUaGlzLnByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09IFwid2luMzJcIikgPyBcIkN5Z3dpblwiIDogXCJVbml4XCI7XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2NvbmZpZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2NvbmZpZyAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhvc190eXBlKSwgMzIsIDBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzYXR0eShfY2hhbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3ZhcmlhbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV92YXJpYW50KF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3BhcmFtZXRlcnNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlcigpe3JldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MgKGJvb2wpIHtcbiAgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gYm9vbDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkIChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9ydW50aW1lX3dhcm5pbmdzO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfZW5hYmxlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZShfY2hhbm5lbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiU3BhY2V0aW1lIHByb2ZpbGluZyBvbmx5IHdvcmtzIGZvciBuYXRpdmUgY29kZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF94ZGdfZGVmYXVsdHNcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3hkZ19kZWZhdWx0cyhfdW5pdCkge1xuICByZXR1cm4gMDsgLy8gZW1wdHkgbGlzdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICBpZihwcm9jZXNzICYmIHByb2Nlc3Mub24pIHtcbiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCAoMik7XG4gICAgfSlcbiAgfVxuICBlbHNlIGlmKGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgIGlmKGV2ZW50LmVycm9yKXtcbiAgICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXZlbnQuZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5jYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCk7XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSBGTEFHKFwid2l0aC1qcy1lcnJvclwiKTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHIgPSBqc29vX3N5c19nZXRlbnYoXCJPQ0FNTFJVTlBBUkFNXCIpXG4gIGlmKHIgIT09IHVuZGVmaW5lZCl7XG4gICAgdmFyIGwgPSByLnNwbGl0KFwiLFwiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKyl7XG4gICAgICBpZihsW2ldID09IFwiYlwiKSB7IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gMTsgYnJlYWsgfVxuICAgICAgZWxzZSBpZiAobFtpXS5zdGFydHNXaXRoKFwiYj1cIikpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSArKGxbaV0uc2xpY2UoMikpfVxuICAgICAgZWxzZSBjb250aW51ZTtcbiAgICB9XG4gIH1cbn0pICgpXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX2JhY2t0cmFjZV9zdGF0dXMgKF91bml0KSB7IHJldHVybiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfcmVjb3JkX2JhY2t0cmFjZSAoYikgeyBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IGI7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgKCkgeyByZXR1cm4gWzBdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCgpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZV9zbG90OiBpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlKGV4biwgYnQpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrICgpIHsgcmV0dXJuIFswXTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogIWVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMClcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYuYXBwbHkobnVsbCxhcmdzLnNsaWNlKDAsbikpO1xuICAgIGlmKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsYXJncy5zbGljZShuKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgc3dpdGNoIChkKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAxKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAyKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgdmFyIGV4dHJhX2FyZ3MgPSAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKT8xOmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzLmxlbmd0aCtleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSBuYXJnc1thcmdzLmxlbmd0aCtpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgICB9O1xuICAgIH19XG4gICAgZy5sID0gZDtcbiAgICByZXR1cm4gZztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vSWY6IGVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMCkge1xuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9IGVsc2UgaWYgKGQgPCAwKSB7XG4gICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICB2YXIgayA9IGFyZ3MgW2FyZ3NMZW4gLSAxXTtcbiAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICBhcmdzW24gLSAxXSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICBpZiAodHlwZW9mIGcgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGsoZyk7XG4gICAgICB2YXIgYXJncyA9IHJlc3Quc2xpY2UoKTtcbiAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihnLCBhcmdzKTsgfTtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzIFthcmdzTGVuXTtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICBjYXNlIDE6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDI6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHksIHope1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDMpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICgpe1xuICAgICAgICB2YXIgZXh0cmFfYXJncyA9IChhcmd1bWVudHMubGVuZ3RoID09IDApPzE6YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyBleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApXG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIGldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICAgIH07XG4gICAgfX1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlc1xudmFyIGNhbWxfbmFtZWRfdmFsdWVzID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUgKGNvbnN0LG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZShubSx2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbnZhciBjYW1sX2dsb2JhbF9kYXRhID0gWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2J1aWxkX3N5bWJvbHNcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J1aWxkX3N5bWJvbHMoc3ltYikge1xuICB2YXIgciA9IHt9O1xuICBpZihzeW1iKSB7XG4gICAgZm9yKHZhciBpID0gMTsgaSA8IHN5bWIubGVuZ3RoOyBpKyspe1xuICAgICAgcltjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzeW1iW2ldWzFdKV0gPSBzeW1iW2ldWzJdXG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAoY29uc3QsIHNoYWxsb3csIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9jYWxsYmFjaywgY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZihnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MpIHtcbiAgICAgIG4gPSBjYW1sX2NhbGxiYWNrKGdsb2JhbFRoaXMudG9wbGV2ZWxSZWxvYywgW25hbWVdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKSB7XG4gICAgICBpZighY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgpIHtcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHggPSBjYW1sX2J1aWxkX3N5bWJvbHMoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKVxuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdXG4gICAgICBpZihuaWQgPj0gMClcbiAgICAgICAgbiA9IG5pZFxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3JlZ2lzdGVyX2dsb2JhbDogY2Fubm90IGxvY2F0ZSBcIiArIG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmKG5hbWVfb3B0KSBjYW1sX2dsb2JhbF9kYXRhW25hbWVfb3B0XSA9IHY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2dsb2JhbF9kYXRhIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZ2V0X2dsb2JhbF9kYXRhICgpIHsgcmV0dXJuIGNhbWxfZ2xvYmFsX2RhdGE7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykgeyByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9tYXliZV9wcmludF9zdGF0c1xuZnVuY3Rpb24gY2FtbF9tYXliZV9wcmludF9zdGF0cyh1bml0KSB7IHJldHVybiAwIH1cbiIsIi8vIEpzX29mX29jYW1sIGxpYnJhcnlcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBKc2xpYlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3B1cmVfZXhwciBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc19wdXJlX2V4cHIgKGYpIHsgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3NldCAobXV0YWJsZSwgY29uc3QsIG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2pzX3NldChvLGYsdikgeyBvW2ZdPXY7cmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLGYpIHsgcmV0dXJuIG9bZl07IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZGVsZXRlIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZGVsZXRlKG8sZikgeyBkZWxldGUgb1tmXTsgcmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sYykgeyByZXR1cm4gKG8gaW5zdGFuY2VvZiBjKSA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmUocmVzKSB7XG4gIHZhciBjID0gMTtcbiAgd2hpbGUocmVzICYmIHJlcy5qb29fdHJhbXApe1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsYXJncykge1xuICByZXR1cm4ge2pvb190cmFtcDpmLGpvb19hcmdzOmFyZ3N9O1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfc3RhY2tfZGVwdGhcbi8vSWY6IGVmZmVjdHNcbnZhciBjYW1sX3N0YWNrX2RlcHRoID0gMDtcblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2NoZWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfc3RhY2tfZGVwdGhcbmZ1bmN0aW9uIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKSB7XG4gICAgcmV0dXJuIC0tY2FtbF9zdGFja19kZXB0aCA+IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6ICFlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX2V4bl9zdGFjaywgY2FtbF9maWJlcl9zdGFjaywgY2FtbF93cmFwX2V4Y2VwdGlvbiwgY2FtbF9yZXN1bWVfc3RhY2ssIGNhbWxfZnJlc2hfb29faWQsIGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnRcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZixhcmdzKSB7XG4gIGZ1bmN0aW9uIHVuY2F1Z2h0X2VmZmVjdF9oYW5kbGVyKGVmZixrLG1zKSB7XG4gICAgLy8gUmVzdW1lcyB0aGUgY29udGludWF0aW9uIGsgYnkgcmFpc2luZyBleGNlcHRpb24gVW5oYW5kbGVkLlxuICAgIGNhbWxfcmVzdW1lX3N0YWNrKGtbMV0sbXMpO1xuICAgIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgICBpZihleG4pIGNhbWxfcmFpc2Vfd2l0aF9hcmcoZXhuLCBlZmYpO1xuICAgIGVsc2Uge1xuICAgICAgZXhuID0gWzI0OCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiRWZmZWN0LlVuaGFuZGxlZFwiKSwgY2FtbF9mcmVzaF9vb19pZCgwKV07XG4gICAgICBjYW1sX3JhaXNlX2NvbnN0YW50KGV4bik7XG4gICAgfVxuICB9XG4gIHZhciBzYXZlZF9zdGFja19kZXB0aCA9IGNhbWxfc3RhY2tfZGVwdGg7XG4gIHZhciBzYXZlZF9leG5fc3RhY2sgPSBjYW1sX2V4bl9zdGFjaztcbiAgdmFyIHNhdmVkX2ZpYmVyX3N0YWNrID0gY2FtbF9maWJlcl9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2V4bl9zdGFjayA9IDA7XG4gICAgY2FtbF9maWJlcl9zdGFjayA9XG4gICAgICB7aDpbMCwgMCwgMCwgdW5jYXVnaHRfZWZmZWN0X2hhbmRsZXJdLCByOntrOjAsIHg6MCwgZTowfX07XG4gICAgdmFyIHJlcyA9IHtqb29fdHJhbXA6IGYsXG4gICAgICAgICAgICAgICBqb29fYXJnczogYXJncy5jb25jYXQoZnVuY3Rpb24gKHgpe3JldHVybiB4O30pfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfZXhuX3N0YWNrKSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfZXhuX3N0YWNrWzFdO1xuICAgICAgICBjYW1sX2V4bl9zdGFjayA9IGNhbWxfZXhuX3N0YWNrWzJdO1xuICAgICAgICByZXMgPSB7am9vX3RyYW1wOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgam9vX2FyZ3M6IFtjYW1sX3dyYXBfZXhjZXB0aW9uKGUpXX07XG4gICAgICB9XG4gICAgfSB3aGlsZShyZXMgJiYgcmVzLmpvb19hcmdzKVxuICB9IGZpbmFsbHkge1xuICAgIGNhbWxfc3RhY2tfZGVwdGggPSBzYXZlZF9zdGFja19kZXB0aDtcbiAgICBjYW1sX2V4bl9zdGFjayA9IHNhdmVkX2V4bl9zdGFjaztcbiAgICBjYW1sX2ZpYmVyX3N0YWNrID0gc2F2ZWRfZmliZXJfc3RhY2s7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJ1c2UtanMtc3RyaW5nXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfZWZmZWN0cyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJlZmZlY3RzXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd3JhcF9leGNlcHRpb24gY29uc3QgKG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLGNhbWxfbmFtZWRfdmFsdWVcbmZ1bmN0aW9uIGNhbWxfd3JhcF9leGNlcHRpb24oZSkge1xuICBpZiAoRkxBRyhcImV4Y3dyYXBcIikpIHtcbiAgICBpZihlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZihnbG9iYWxUaGlzLlJhbmdlRXJyb3JcbiAgICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICAgJiYgZS5tZXNzYWdlXG4gICAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSkpXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmKGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAgICYmIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkludGVybmFsRXJyb3JcbiAgICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKSlcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IgJiYgY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIikpXG4gICAgICBleG4gPSBbMCxjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSxlXTtcbiAgICBlbHNlXG4gICAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICAgIGV4biA9IFswLGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoU3RyaW5nKGUpKV07XG4gICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGVycm9yIGF0IGhhbmQsIGxldCdzIHVzZSBpdC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IpXG4gICAgICBleG4uanNfZXJyb3IgPSBlO1xuICAgIHJldHVybiBleG47XG4gIH0gZWxzZVxuICAgIHJldHVybiBlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgaWYoY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcpXG4gICAgcmV0dXJuIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpO1xuICBlbHNlIHJldHVybiBleG5cbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZighZXhuLmpzX2Vycm9yIHx8IGZvcmNlIHx8IGV4blswXSA9PSAyNDgpIGV4bi5qc19lcnJvciA9IG5ldyBnbG9iYWxUaGlzLkVycm9yKFwiSnMgZXhjZXB0aW9uIGNvbnRhaW5pbmcgYmFja3RyYWNlXCIpO1xuICByZXR1cm4gZXhuO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZihleG4uanNfZXJyb3IpIHsgcmV0dXJuIFswLCBleG4uanNfZXJyb3JdOyB9XG4gIHJldHVybiAwO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Jvb2woeCkgeyByZXR1cm4gISF4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHsgcmV0dXJuICt4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fZmxvYXQgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc19mcm9tX2ludDMyXG4vL0FsaWFzOiBjYW1sX2pzX2Zyb21fbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19mbG9hdCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkgeyByZXR1cm4geHwwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGJbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGxlbjtpKyspIGJbaSsxXSA9IGFbaV07XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkoYSl7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBpPWEubGVuZ3RoIC0gMTsgaT49MDsgaS0tKXtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLGUsbF07XG4gIH1cbiAgcmV0dXJuIGxcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpe1xuICB2YXIgYSA9IFtdO1xuICBmb3IoOyBsICE9PSAwOyBsID0gbFsyXSkge1xuICAgIGEucHVzaChsWzFdKTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc192YXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdmFyKHgpIHtcbiAgdmFyIHggPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyh4KTtcbiAgLy9DaGVja3MgdGhhdCB4IGhhcyB0aGUgZm9ybSBpZGVudFsuaWRlbnRdKlxuICBpZigheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSl7XG4gICAgY29uc29sZS5lcnJvcihcImNhbWxfanNfdmFyOiBcXFwiXCIgKyB4ICsgXCJcXFwiIGlzIG5vdCBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUuIGNvbnRpbnVpbmcgLi5cIik7XG4gICAgLy9jb25zb2xlLmVycm9yKFwiSnMuVW5zYWZlLmV2YWxfc3RyaW5nXCIpXG4gIH1cbiAgcmV0dXJuIGV2YWwoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykgeyByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bl9jYWxsIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19mdW5fY2FsbChmLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gZigpO1xuICBjYXNlIDI6IHJldHVybiBmIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gZiAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX29qc19uZXdfYXJyIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9vanNfbmV3X2FycihjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAwOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjIChhWzBdKTtcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBhKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihsZW4gPiAwKXtcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gW3VuZGVmaW5lZF07XG4gICAgfVxuICAgIHZhciByZXMgPSBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICAgIHJldHVybiAocmVzIGluc3RhbmNlb2YgRnVuY3Rpb24pP2NhbWxfanNfd3JhcF9jYWxsYmFjayhyZXMpOnJlcztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5KTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZik7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX3dyYXBfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZixhcmdzKTtcbiAgICByZXR1cm4gKHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKT9jYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKTpyZXM7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLFt0aGlzLGFyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QoYXJpdHksIGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcml0eSArIDEpO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoLCBhcml0eSlcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSAtIDE7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbi8vSWY6ICFlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgcmV0dXJuIChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSB7XG4gIC8vIEZ1bmN0aW9ucyBoYXZlIGFuIGFkZGl0aW9uYWwgY29udGludWF0aW9uIHBhcmFtZXRlci4gVGhpcyBzaG91bGRcbiAgLy8gbm90IGJlIHZpc2libGUgd2hlbiBjYWxsaW5nIHRoZW0gZnJvbSBKYXZhU2NyaXB0XG4gIHJldHVybiAoKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKSkgLSAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZXF1YWxzICh4LCB5KSB7IHJldHVybiArKHggPT0geSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zdHJpY3RfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfc3RyaWN0X2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V2YWxfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V2YWxfc3RyaW5nIChzKSB7cmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19leHByIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcHVyZV9qc19leHByIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3B1cmVfanNfZXhwciAocyl7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX3B1cmVfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QgKGEpIHtcbiAgdmFyIG8gPSB7fTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHAgPSBhW2ldO1xuICAgIG9bY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocFsxXSldID0gcFsyXTtcbiAgfVxuICByZXR1cm4gbztcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUmFpc2UgZXhjZXB0aW9uXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9jb25zdGFudCAodGFnKSB7IHRocm93IHRhZzsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBhcmcpIHsgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWcsIGFyZ10pOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZ3MgKHRhZywgYXJncykgeyB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoWzAsIHRhZ10uY29uY2F0KGFyZ3MpKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nICh0YWcsIG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aCAobXNnKSB7XG4gIGlmKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlPVsyNDgsY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksLTNdO1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSwgbXNnKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkludmFsaWRfYXJndW1lbnQsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkRpdmlzaW9uX2J5X3plcm8pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfZm91bmQgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuTm90X2ZvdW5kKTsgfVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19mbG9vcl9sb2cyXG52YXIgbG9nMl9vayA9IE1hdGgubG9nMiAmJiBNYXRoLmxvZzIoMS4xMjM1NTgyMDkyODg5NDc0RSszMDcpID09IDEwMjBcbmZ1bmN0aW9uIGpzb29fZmxvb3JfbG9nMih4KSB7XG4gIGlmKGxvZzJfb2spIHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nMih4KSlcbiAgdmFyIGkgPSAwO1xuICBpZiAoeCA9PSAwKSByZXR1cm4gLUluZmluaXR5O1xuICBpZih4Pj0xKSB7d2hpbGUgKHg+PTIpIHt4Lz0yOyBpKyt9IH1cbiAgZWxzZSB7d2hpbGUgKHggPCAxKSB7eCo9MjsgaS0tfSB9O1xuICByZXR1cm4gaTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzIsIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXG5mdW5jdGlvbiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSlcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgxLCAwLCAweDdmZjApO1xuICAgIGlmICh4ID4gMClcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweDdmZjApXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4ZmZmMClcbiAgfVxuICB2YXIgc2lnbiA9ICh4PT0wICYmIDEveCA9PSAtSW5maW5pdHkpPzB4ODAwMDooeD49MCk/MDoweDgwMDA7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIC8vIEludDY0LmJpdHNfb2ZfZmxvYXQgMS4xMjM1NTgyMDkyODg5NDc0RSszMDcgPSAweDdmYjAwMDAwMDAwMDAwMDBMXG4gIC8vIHVzaW5nIE1hdGguTE9HMkUqTWF0aC5sb2coeCkgaW4gcGxhY2Ugb2YgTWF0aC5sb2cyIHJlc3VsdCBpbiBwcmVjaXNpb24gbG9zdFxuICB2YXIgZXhwID0ganNvb19mbG9vcl9sb2cyKHgpICsgMTAyMztcbiAgaWYgKGV4cCA8PSAwKSB7XG4gICAgZXhwID0gMDtcbiAgICB4IC89IE1hdGgucG93KDIsLTEwMjYpO1xuICB9IGVsc2Uge1xuICAgIHggLz0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gICAgaWYgKHggPCAxNikge1xuICAgICAgeCAqPSAyOyBleHAgLT0xOyB9XG4gICAgaWYgKGV4cCA9PSAwKSB7XG4gICAgICB4IC89IDI7IH1cbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsMjQpO1xuICB2YXIgcjMgPSB4fDA7XG4gIHggPSAoeCAtIHIzKSAqIGs7XG4gIHZhciByMiA9IHh8MDtcbiAgeCA9ICh4IC0gcjIpICogaztcbiAgdmFyIHIxID0geHwwO1xuICByMyA9IChyMyAmMHhmKSB8IHNpZ24gfCBleHAgPDwgNDtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKHIxLCByMiwgcjMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gIGZsb2F0MzJhWzBdID0geDtcbiAgdmFyIGludDMyYSA9IG5ldyBJbnQzMkFycmF5KGZsb2F0MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBpbnQzMmFbMF0gfCAwO1xufVxuXG4vL0ZQIGxpdGVyYWxzIGNhbiBiZSB3cml0dGVuIHVzaW5nIHRoZSBoZXhhZGVjaW1hbFxuLy9ub3RhdGlvbiAweDxtYW50aXNzYSBpbiBoZXg+cDxleHBvbmVudD4gZnJvbSBJU08gQzk5LlxuLy9odHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtaGV4ZmxvYXQvYmxvYi9tYXN0ZXIvaGV4ZmxvYXQuanNcbi8vUHJvdmlkZXM6IGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCAoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSkgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKFwibmFuXCIpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoKHggPiAwKT9cImluZmluaXR5XCI6XCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8xOih4Pj0wKT8wOjE7XG4gIGlmKHNpZ24pIHggPSAteDtcbiAgdmFyIGV4cCA9IDA7XG4gIGlmICh4ID09IDApIHsgfVxuICBlbHNlIGlmICh4IDwgMSkge1xuICAgIHdoaWxlICh4IDwgMSAmJiBleHAgPiAtMTAyMikgIHsgeCAqPSAyOyBleHAtLSB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikgeyB4IC89IDI7IGV4cCsrIH1cbiAgfVxuICB2YXIgZXhwX3NpZ24gPSBleHAgPCAwID8gJycgOiAnKyc7XG4gIHZhciBzaWduX3N0ciA9ICcnO1xuICBpZiAoc2lnbikgc2lnbl9zdHIgPSAnLSdcbiAgZWxzZSB7XG4gICAgc3dpdGNoKHN0eWxlKXtcbiAgICBjYXNlIDQzIC8qICcrJyAqLzogc2lnbl9zdHIgPSAnKyc7IGJyZWFrO1xuICAgIGNhc2UgMzIgLyogJyAnICovOiBzaWduX3N0ciA9ICcgJzsgYnJlYWs7XG4gICAgZGVmYXVsdDogYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwcmVjID49IDAgJiYgcHJlYyA8IDEzKSB7XG4gICAgLyogSWYgYSBwcmVjaXNpb24gaXMgZ2l2ZW4sIGFuZCBpcyBzbWFsbCwgcm91bmQgbWFudGlzc2EgYWNjb3JkaW5nbHkgKi9cbiAgICB2YXIgY3N0ID0gTWF0aC5wb3coMixwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmKHByZWMgPj0gMCl7XG4gICAgdmFyIGlkeCA9IHhfc3RyLmluZGV4T2YoJy4nKTtcbiAgICBpZihpZHg8MCkge1xuICAgICAgeF9zdHIgKz0gJy4nICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsICcwJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHgrMStwcmVjO1xuICAgICAgaWYoeF9zdHIubGVuZ3RoIDwgc2l6ZSlcbiAgICAgICAgeF9zdHIgKz0gY2FtbF9zdHJfcmVwZWF0KHNpemUgLSB4X3N0ci5sZW5ndGgsICcwJyk7XG4gICAgICBlbHNlXG4gICAgICAgIHhfc3RyID0geF9zdHIuc3Vic3RyKDAsc2l6ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoc2lnbl9zdHIgKyAnMHgnICsgeF9zdHIgKyAncCcgKyBleHBfc2lnbiArIGV4cC50b1N0cmluZygxMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgbG8gPSB4LmxvO1xuICB2YXIgbWkgPSB4Lm1pO1xuICB2YXIgaGkgPSB4LmhpO1xuICB2YXIgZXhwID0gKGhpICYgMHg3ZmZmKSA+PiA0O1xuICBpZiAoZXhwID09IDIwNDcpIHtcbiAgICBpZiAoKGxvfG1pfChoaSYweGYpKSA9PSAwKVxuICAgICAgcmV0dXJuIChoaSAmIDB4ODAwMCk/KC1JbmZpbml0eSk6SW5maW5pdHk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsLTI0KTtcbiAgdmFyIHJlcyA9IChsbyprK21pKSprKyhoaSYweGYpO1xuICBpZiAoZXhwID4gMCkge1xuICAgIHJlcyArPSAxNjtcbiAgICByZXMgKj0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gIH0gZWxzZVxuICAgIHJlcyAqPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgaWYgKGhpICYgMHg4MDAwKSByZXMgPSAtIHJlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9zdWIsY2FtbF9pbnQ2NF9vZl9pbnQzMlxuZnVuY3Rpb24gY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgKHgseSkge1xuICBpZihpc05hTih4KSB8fCBpc05hTih5KSkgcmV0dXJuIE5hTjtcbiAgaWYoeD09eSkgcmV0dXJuIHk7XG4gIGlmKHg9PTApe1xuICAgIGlmKHkgPCAwKVxuICAgICAgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpXG4gIH1cbiAgdmFyIGJpdHMgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoeCk7XG4gIHZhciBvbmUgPSBjYW1sX2ludDY0X29mX2ludDMyKDEpO1xuICBpZiAoKHg8eSkgPT0gKHg+MCkpXG4gICAgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSlcbiAgZWxzZVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X3N1YihiaXRzLCBvbmUpXG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCl7XG4gIHJldHVybiBNYXRoLnRydW5jKHgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgaW50MzJhID0gbmV3IEludDMyQXJyYXkoMSk7XG4gIGludDMyYVswXSA9IHg7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoaW50MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBmbG9hdDMyYVswXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCAoeCkge1xuICBpZiAoaXNGaW5pdGUgKHgpKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpID49IDIuMjI1MDczODU4NTA3MjAxNGUtMzA4KSByZXR1cm4gMDtcbiAgICBpZiAoeCAhPSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gaXNOYU4oeCk/NDozO1xufVxuLy9Qcm92aWRlczogY2FtbF9tb2RmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX21vZGZfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIHZhciBuZWcgPSAoMS94KSA8IDA7XG4gICAgeCA9IE1hdGguYWJzKHgpO1xuICAgIHZhciBpID0gTWF0aC5mbG9vciAoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7IGkgPSAtaTsgZiA9IC1mOyB9XG4gICAgcmV0dXJuIFswLCBmLCBpXTtcbiAgfVxuICBpZiAoaXNOYU4gKHgpKSByZXR1cm4gWzAsIE5hTiwgTmFOXTtcbiAgcmV0dXJuIFswLCAxL3gsIHhdO1xufVxuLy9Qcm92aWRlczogY2FtbF9sZGV4cF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sZGV4cF9mbG9hdCAoeCxleHApIHtcbiAgZXhwIHw9IDA7XG4gIGlmIChleHAgPiAxMDIzKSB7XG4gICAgZXhwIC09IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICBpZiAoZXhwID4gMTAyMykgeyAgLy8gaW4gY2FzZSB4IGlzIHN1Ym5vcm1hbFxuICAgICAgZXhwIC09IDEwMjM7XG4gICAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIH1cbiAgfVxuICBpZiAoZXhwIDwgLTEwMjMpIHtcbiAgICBleHAgKz0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIC0xMDIzKTtcbiAgfVxuICB4ICo9IE1hdGgucG93KDIsIGV4cCk7XG4gIHJldHVybiB4O1xufVxuLy9Qcm92aWRlczogY2FtbF9mcmV4cF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0ICh4KSB7XG4gIGlmICgoeCA9PSAwKSB8fCAhaXNGaW5pdGUoeCkpIHJldHVybiBbMCwgeCwgMF07XG4gIHZhciBuZWcgPSB4IDwgMDtcbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgdmFyIGV4cCA9IE1hdGgubWF4KC0xMDIzLCBqc29vX2Zsb29yX2xvZzIoeCkgKyAxKTtcbiAgeCAqPSBNYXRoLnBvdygyLC1leHApO1xuICB3aGlsZSAoeCA8IDAuNSkge1xuICAgIHggKj0gMjtcbiAgICBleHAtLTtcbiAgfVxuICB3aGlsZSAoeCA+PSAxKSB7XG4gICAgeCAqPSAwLjU7XG4gICAgZXhwKys7XG4gIH1cbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgcmV0dXJuIFswLCB4LCBleHBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfY29tcGFyZSAoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoeCA9PT0geCkgcmV0dXJuIDE7XG4gIGlmICh5ID09PSB5KSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0ICh4LCB5KSB7XG4gIGlmICh5ID09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4gKHkgPCAwKT8oLXgpOng7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaWduYml0X2Zsb2F0KHgpIHtcbiAgaWYgKHggPT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4gKHggPCAwKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhwbTFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwbTFfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguZXhwbTEoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZXhwMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHAyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgucG93KDIsIHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMXAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMih4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9oeXBvdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9oeXBvdF9mbG9hdCAoeCwgeSkgeyByZXR1cm4gTWF0aC5oeXBvdCh4LCB5KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxMF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxMF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5sb2cxMCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9jb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Nvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9zaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3NpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hc2luaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF90YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3RhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgudGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hdGFuaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hdGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9yb3VuZF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9yb3VuZF9mbG9hdCAoeCkge1xuICBpZiAoeCA+PSAwKSB7XG4gICAgdmFyIHkgPSBNYXRoLmZsb29yKHgpO1xuICAgIHJldHVybiAoeCAtIHkgPj0gMC41KT8oeSArIDEpOnlcbiAgfSBlbHNlIHtcbiAgICB2YXIgeSA9IE1hdGguY2VpbCh4KTtcbiAgICByZXR1cm4gKHkgLSB4ID49IDAuNSk/KHkgLSAxKTp5XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNicnQoeCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9IDEuMCAtICgoKChhNSAqIHQgKyBhNCkgKiB0ICsgYTMpICogdCArIGEyKSAqIHQgKyBhMSkgKiB0ICogTWF0aC5leHAoLXggKiB4KTtcblxuICByZXR1cm4gc2lnbiAqIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmY19mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9lcmZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfZXJmY19mbG9hdCh4KSB7XG4gIHJldHVybiAxIC0gY2FtbF9lcmZfZmxvYXQoeCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5IChhLCBiKSB7XG4gICAgdmFyIGF0ID0gU1BMSVQgKiBhO1xuICAgIHZhciBhaGkgPSBhdCAtIChhdCAtIGEpO1xuICAgIHZhciBhbG8gPSBhIC0gYWhpO1xuICAgIHZhciBidCA9IFNQTElUICogYjtcbiAgICB2YXIgYmhpID0gYnQgLSAoYnQgLSBiKTtcbiAgICB2YXIgYmxvID0gYiAtIGJoaTtcbiAgICB2YXIgcCA9IGEgKiBiO1xuICAgIHZhciBlID0gKChhaGkgKiBiaGkgLSBwKSArIGFoaSAqIGJsbyArIGFsbyAqIGJoaSkgKyBhbG8gKiBibG87XG4gICAgcmV0dXJuIHtcbiAgICAgIHA6IHAsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSAoYSAtIChzIC0gdikpICsgKGIgLSB2KTtcbiAgICByZXR1cm4ge1xuICAgICAgczogcyxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkanVzdCAoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4ID8geCAqICgxICsgKHggPCAwID8gLTEgOiArMSkgKiAoeSA8IDAgPyAtMSA6ICsxKSAqIEVQU0lMT04pIDogeDtcbiAgfTtcblxuICBpZiAoeCA9PT0gMCB8fCB4ICE9PSB4IHx8IHggPT09ICsxIC8gMCB8fCB4ID09PSAtMSAvIDAgfHxcbiAgICAgIHkgPT09IDAgfHwgeSAhPT0geSB8fCB5ID09PSArMSAvIDAgfHwgeSA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICsgejtcbiAgfVxuICBpZiAoeiA9PT0gMCkge1xuICAgIHJldHVybiB4ICogeTtcbiAgfVxuICBpZiAoeiAhPT0geiB8fCB6ID09PSArMSAvIDAgfHwgeiA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiBNYXRoLmFicyh4cyAqIHlzKSAqIDQgLyBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cbiAgaWYgKE1hdGguYWJzKHpzKSA8IE1hdGguYWJzKHhzICogeXMpICogRVBTSUxPTiAvIDQgKiBFUFNJTE9OIC8gNCkge1xuICAgIHpzID0gKHogPCAwID8gLTEgOiArMSkgKiBNSU5fVkFMVUU7XG4gIH1cblxuICB2YXIgeHkgPSBtdWx0aXBseSh4cywgeXMpO1xuICB2YXIgcyA9IGFkZCh4eS5wLCB6cyk7XG4gIHZhciB1ID0gYWRkKHh5LmUsIHMuZSk7XG4gIHZhciBpID0gYWRkKHMucywgdS5zKTtcblxuICB2YXIgZiA9IGkucyArIGFkanVzdChpLmUsIHUuZSk7XG4gIGlmIChmID09PSAwKSB7XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICB2YXIgZnMgPSBmICogc2NhbGU7XG4gIGlmIChNYXRoLmFicyhmcykgPiBNSU5fVkFMVUUpIHtcbiAgICByZXR1cm4gZnM7XG4gIH1cblxuICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdhcyBleHRyYSByb3VuZGluZyBmb3IgYSBkZW5vcm1hbGl6ZWQgdmFsdWUuXG4gIHJldHVybiBmcyArIGFkanVzdChmIC0gZnMgLyBzY2FsZSwgaS5lKSAqIHNjYWxlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2Zsb2F0IChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LGRwKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpIDwgMS4wKSB7XG4gICAgICByZXR1cm4geC50b0ZpeGVkKGRwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGUgPSBwYXJzZUludCh4LnRvU3RyaW5nKCkuc3BsaXQoJysnKVsxXSk7XG4gICAgICBpZiAoZSA+IDIwKSB7XG4gICAgICAgIGUgLT0gMjA7XG4gICAgICAgIHggLz0gTWF0aC5wb3coMTAsZSk7XG4gICAgICAgIHggKz0gKG5ldyBBcnJheShlKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIGlmKGRwID4gMCkge1xuICAgICAgICAgIHggPSB4ICsgJy4nICsgKG5ldyBBcnJheShkcCsxKSkuam9pbignMCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgICAgZWxzZSByZXR1cm4geC50b0ZpeGVkKGRwKVxuICAgIH1cbiAgfVxuICB2YXIgcywgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIHZhciBwcmVjID0gKGYucHJlYyA8IDApPzY6Zi5wcmVjO1xuICBpZiAoeCA8IDAgfHwgKHggPT0gMCAmJiAxL3ggPT0gLUluZmluaXR5KSkgeyBmLnNpZ24gPSAtMTsgeCA9IC14OyB9XG4gIGlmIChpc05hTih4KSkgeyBzID0gXCJuYW5cIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZSBpZiAoIWlzRmluaXRlKHgpKSB7IHMgPSBcImluZlwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlXG4gICAgc3dpdGNoIChmLmNvbnYpIHtcbiAgICBjYXNlICdlJzpcbiAgICAgIHZhciBzID0geC50b0V4cG9uZW50aWFsKHByZWMpO1xuICAgICAgLy8gZXhwb25lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IHR3byBkaWdpdHNcbiAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2YnOlxuICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7IGJyZWFrO1xuICAgIGNhc2UgJ2cnOlxuICAgICAgcHJlYyA9IHByZWM/cHJlYzoxO1xuICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICB2YXIgaiA9IHMuaW5kZXhPZignZScpO1xuICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgIGlmIChleHAgPCAtNCB8fCB4ID49IDFlMjEgfHwgeC50b0ZpeGVkKDApLmxlbmd0aCA+IHByZWMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICB2YXIgaSA9IGogLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgaSA9IHMubGVuZ3RoO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgaWYgKGV4cCA8IDApIHsgcCAtPSBleHAgKyAxOyBzID0geC50b0ZpeGVkKHApOyB9XG4gICAgICAgIGVsc2Ugd2hpbGUgKHMgPSB4LnRvRml4ZWQocCksIHMubGVuZ3RoID4gcHJlYyArIDEpIHAtLTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgICAgdmFyIGkgPSBzLmxlbmd0aCAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpXG4gIHJlcyA9ICtzO1xuICBpZiAoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLFwiXCIpO1xuICByZXMgPSArcztcbiAgaWYgKCgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSB8fCAvXlsrLV0/bmFuJC9pLnRlc3QocykpIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8vaS5leGVjKHMpO1xuICAvLyAgICAgICAgICAxICAgICAgICAyICAgICAgICAgICAgIDMgICAgICAgICAgIDVcbiAgaWYobSl7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCcnKTtcbiAgICB2YXIgbWFudGlzc2EgPSBwYXJzZUludChtWzFdICsgbVsyXSArIG0zLCAxNik7XG4gICAgdmFyIGV4cG9uZW50ID0gKG1bNV18MCkgLSA0Km0zLmxlbmd0aDtcbiAgICByZXMgPSBtYW50aXNzYSAqIE1hdGgucG93KDIsIGV4cG9uZW50KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmKC9eXFwrP2luZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBJbmZpbml0eTtcbiAgaWYoL14taW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIC1JbmZpbml0eTtcbiAgY2FtbF9mYWlsd2l0aChcImZsb2F0X29mX3N0cmluZ1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdXBkYXRlX2R1bW15XG5mdW5jdGlvbiBjYW1sX3VwZGF0ZV9kdW1teSAoeCwgeSkge1xuICBpZiggeS5mdW4gKSB7IHguZnVuID0geS5mdW47IHJldHVybiAwOyB9XG4gIGlmKCB0eXBlb2YgeT09PVwiZnVuY3Rpb25cIiApIHsgeC5mdW4gPSB5OyByZXR1cm4gMDsgfVxuICB2YXIgaSA9IHkubGVuZ3RoOyB3aGlsZSAoaS0tKSB4W2ldID0geVtpXTsgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYWxsb2NfZHVtbXlfaW5maXhcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfYWxsb2NfZHVtbXlfaW5maXggKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZiAoeCkgeyByZXR1cm4gY2FtbF9jYWxsX2dlbihmLmZ1biwgW3hdKSB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX2Jsb2NrIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX2Jsb2NrICh4KSB7IHJldHVybiArKHggaW5zdGFuY2VvZiBBcnJheSk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial90YWdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX29ial90YWcgKHgpIHtcbiAgaWYgKCh4IGluc3RhbmNlb2YgQXJyYXkpICYmIHhbMF0gPT0gKHhbMF0gPj4+IDApKVxuICAgIHJldHVybiB4WzBdXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSlcbiAgICByZXR1cm4gMjUyXG4gIGVsc2UgaWYgKCh4IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8IHR5cGVvZiB4ID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMjQ3XG4gIGVsc2UgaWYgKHggJiYgeC5jYW1sX2N1c3RvbSlcbiAgICByZXR1cm4gMjU1XG4gIGVsc2VcbiAgICByZXR1cm4gMTAwMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcgKHgsIHRhZykgeyB4WzBdID0gdGFnOyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sgKHRhZywgc2l6ZSkge1xuICB2YXIgbyA9IG5ldyBBcnJheShzaXplKzEpO1xuICBvWzBdPXRhZztcbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc2l6ZTsgaSsrKSBvW2ldID0gMDtcbiAgcmV0dXJuIG87XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3dpdGhfdGFnXG5mdW5jdGlvbiBjYW1sX29ial93aXRoX3RhZyh0YWcseCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IHRhZztcbiAgZm9yKHZhciBpID0gMTsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfZHVwIG11dGFibGUgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX29ial9kdXAgKHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUgKHgsIHMpIHtcbiAgaWYgKHM8PTAgfHwgcyArIDEgPiB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiT2JqLnRydW5jYXRlXCIpO1xuICBpZiAoeC5sZW5ndGggIT0gcyArIDEpIHgubGVuZ3RoID0gcyArIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9tYWtlX2ZvcndhcmRcbmZ1bmN0aW9uIGNhbWxfb2JqX21ha2VfZm9yd2FyZCAoYix2KSB7XG4gIGJbMF09MjUwO1xuICBiWzFdPXY7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXBcbmZ1bmN0aW9uIGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXAoeCxpLG9sZCxuKXtcbiAgaWYoeFtpKzFdID09IG9sZCkge1xuICAgIHhbaSsxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfaXNfc2hhcmVkXG5mdW5jdGlvbiBjYW1sX29ial9pc19zaGFyZWQoeCl7XG4gIHJldHVybiAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkICh2KSB7IHJldHVybiBbMjUwLCB2XTsgfVxuXG4vLy8vLy8vLy8vLy8vIENhbWxpbnRlcm5hbE9PXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIGNvbnN0XG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAob2ZzID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycmF5IGlzIG5vdCBzcGFyc2VcbiAgICBmb3IgKHZhciBpID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoOyBpIDwgY2FjaGVpZDsgaSsrKVxuICAgICAgY2FtbF9tZXRob2RfY2FjaGVbaV0gPSAwO1xuICB9IGVsc2UgaWYgKG1ldGhzW29mc10gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgLSAxXTtcbiAgfVxuICB2YXIgbGkgPSAzLCBoaSA9IG1ldGhzWzFdICogMiArIDEsIG1pO1xuICB3aGlsZSAobGkgPCBoaSkge1xuICAgIG1pID0gKChsaStoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSsxXSkgaGkgPSBtaS0yO1xuICAgIGVsc2UgbGkgPSBtaTtcbiAgfVxuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IGxpICsgMTtcbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gKHRhZyA9PSBtZXRoc1tsaSsxXSA/IG1ldGhzW2xpXSA6IDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29vX2xhc3RfaWRcbnZhciBjYW1sX29vX2xhc3RfaWQgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9vb19pZFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX3NldF9vb19pZCAoYikge1xuICBiWzJdPWNhbWxfb29fbGFzdF9pZCsrO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mcmVzaF9vb19pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX2ZyZXNoX29vX2lkKCkge1xuICByZXR1cm4gY2FtbF9vb19sYXN0X2lkKys7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfcmF3X2ZpZWxkKG8saSkgeyByZXR1cm4gb1tpKzFdIH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3Jhd19maWVsZChvLGksdikgeyByZXR1cm4gb1tpKzFdID0gdiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKG8pIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfYWRkX29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9vYmpfYWRkX29mZnNldCh2LG9mZnNldCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiT2JqLmFkZF9vZmZzZXQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLG8sbikge1xuICAgIGlmKGJbMF09PW8pIHsgYlswXSA9IG47IHJldHVybiAxIH1cbiAgICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmICgobyBpbnN0YW5jZW9mIEFycmF5KSAmJiBvWzBdID09IChvWzBdID4+PiAwKSAmJlxuICAgICAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDYsIDI0NCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcndhcmRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbiAgZnVuY3Rpb24gY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkKG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLDI0NCwyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZXNldF90b19sYXp5XG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eShvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywyNDQsMjQ2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZWFkX3Jlc3VsdFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVhZF9yZXN1bHQobykge1xuICByZXR1cm4gKGNhbWxfb2JqX3RhZyhvKSA9PSAyNTApP29bMV06bztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0KSB7XG4gIHJldHVybiAodCA9PSAyNDUpID8gMSA6IDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZmZzZXRcbnZhciBjYW1sX2ludDY0X29mZnNldCA9IE1hdGgucG93KDIsIC0yNCk7XG5cbi8vUHJvdmlkZXM6IE1sSW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBNbEludDY0IChsbyxtaSxoaSkge1xuICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9IG1pICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSBoaSAmIDB4ZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfalwiXG5NbEludDY0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyx0aGlzLm1pLHRoaXMuaGkpO1xufVxuXG5NbEludDY0LnByb3RvdHlwZS51Y29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIGlmICh0aGlzLmhpID4geC5oaSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmhpIDwgeC5oaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubG8gPiB4LmxvKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBoaSA9IHRoaXMuaGkgPDwgMTY7XG4gIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICBpZiAoaGkgPiB4aGkpIHJldHVybiAxO1xuICBpZiAoaGkgPCB4aGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxvID0gLSB0aGlzLmxvO1xuICB2YXIgbWkgPSAtIHRoaXMubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSAtIHRoaXMuaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSArIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpICsgeC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gLSB4LmxvO1xuICB2YXIgbWkgPSB0aGlzLm1pIC0geC5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyAqIHgubG87XG4gIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gIHZhciBoaSA9ICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMuaGkgKiB4LmxvICsgdGhpcy5taSAqIHgubWkgKyB0aGlzLmxvICogeC5oaTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMubG98dGhpcy5taXx0aGlzLmhpKSA9PSAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5oaSA8PCAxNikgPCAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gJiB4LmxvLCB0aGlzLm1pICYgeC5taSwgdGhpcy5oaSAmIHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb3x4LmxvLCB0aGlzLm1pfHgubWksIHRoaXMuaGl8eC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb154LmxvLCB0aGlzLm1pXngubWksIHRoaXMuaGleeC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9sZWZ0ID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMubG8gPDwgcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IHMpIHwgKHRoaXMubG8gPj4gKDI0IC0gcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaGkgPDwgcykgfCAodGhpcy5taSA+PiAoMjQgLSBzKSkpO1xuICB9XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IChzIC0gMjQpKSB8ICh0aGlzLmxvID4+ICg0OCAtIHMpKSk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCgwLCAwLCB0aGlzLmxvIDw8IChzIC0gNDgpKVxufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHRfdW5zaWduZWQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8ICh0aGlzLmhpIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IHMpKTtcbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubWkgPj4gKHMgLSAyNCkpIHwgKHRoaXMuaGkgPDwgKDQ4IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPj4gKHMgLSAyNCkpLFxuICAgICAgMCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAodGhpcy5oaSA+PiAocyAtIDQ4KSwgMCwgMCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9yaWdodCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICB2YXIgaCA9ICh0aGlzLmhpIDw8IDE2KSA+PiAxNjtcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICgodGhpcy5oaSA8PCAxNikgPj4gcykgPj4+IDE2KTtcbiAgdmFyIHNpZ24gPSAodGhpcy5oaSA8PCAxNikgPj4gMzE7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSA+PiAxNixcbiAgICAgIHNpZ24gJiAweGZmZmYpO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDMyKSwgc2lnbiwgc2lnbik7XG59XG5NbEludDY0LnByb3RvdHlwZS5sc2wxID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPDwgMSkgfCAodGhpcy5sbyA+PiAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubG8gPSAodGhpcy5sbyA8PCAxKSAmIDB4ZmZmZmZmO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNyMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPj4+IDEpIHwgKHRoaXMuaGkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gdGhpcy5oaSA+Pj4gMTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnVkaXZtb2QgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgdmFyIG1vZHVsdXMgPSB0aGlzLmNvcHkoKTtcbiAgdmFyIGRpdmlzb3IgPSB4LmNvcHkoKTtcbiAgdmFyIHF1b3RpZW50ID0gbmV3IE1sSW50NjQoMCwwLDApO1xuICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICBvZmZzZXQrKztcbiAgICBkaXZpc29yLmxzbDEoKTtcbiAgfVxuICB3aGlsZSAob2Zmc2V0ID49IDApIHtcbiAgICBvZmZzZXQgLS07XG4gICAgcXVvdGllbnQubHNsMSgpO1xuICAgIGlmIChtb2R1bHVzLnVjb21wYXJlKGRpdmlzb3IpID49IDApIHtcbiAgICAgIHF1b3RpZW50LmxvICsrO1xuICAgICAgbW9kdWx1cyA9IG1vZHVsdXMuc3ViKGRpdmlzb3IpO1xuICAgIH1cbiAgICBkaXZpc29yLmxzcjEoKTtcbiAgfVxuICByZXR1cm4geyBxdW90aWVudCA6IHF1b3RpZW50LCBtb2R1bHVzIDogbW9kdWx1cyB9O1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gKHkpXG57XG4gIHZhciB4ID0gdGhpcztcbiAgaWYgKHkuaXNaZXJvKCkpIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHZhciBzaWduID0geC5oaSBeIHkuaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgcSA9IHgudWRpdm1vZCh5KS5xdW90aWVudDtcbiAgaWYgKHNpZ24gJiAweDgwMDApIHEgPSBxLm5lZygpO1xuICByZXR1cm4gcTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm1vZCA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgciA9IHgudWRpdm1vZCh5KS5tb2R1bHVzO1xuICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gIHJldHVybiByO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxvIHwgKHRoaXMubWkgPDwgMjQpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9GbG9hdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgodGhpcy5oaSA8PCAxNikgKiBNYXRoLnBvdygyLCAzMikgKyB0aGlzLm1pICogTWF0aC5wb3coMiwgMjQpKSArIHRoaXMubG87XG59XG5NbEludDY0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW3RoaXMuaGkgPj4gOCxcbiAgICAgICAgICB0aGlzLmhpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pID4+IDE2LFxuICAgICAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvID4+IDE2LFxuICAgICAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvICYgMHhmZl07XG59XG5NbEludDY0LnByb3RvdHlwZS5sbzMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICgodGhpcy5taSAmIDB4ZmYpIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmhpMzIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMubWkgPj4+IDgpICYgMHhmZmZmKSB8ICh0aGlzLmhpIDw8IDE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgseSkgeyByZXR1cm4geC51Y29tcGFyZSh5KSA8IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NvbXBhcmUoeCx5LCB0b3RhbCkgeyByZXR1cm4geC5jb21wYXJlKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnICh4KSB7IHJldHVybiB4Lm5lZygpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hZGQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYWRkICh4LCB5KSB7IHJldHVybiB4LmFkZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc3ViIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3N1YiAoeCwgeSkgeyByZXR1cm4geC5zdWIoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgseSkgeyByZXR1cm4geC5tdWwoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7IHJldHVybiAreC5pc1plcm8oKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpIHsgcmV0dXJuICt4LmlzTmVnKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hbmQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYW5kICh4LCB5KSB7IHJldHVybiB4LmFuZCh5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29yICh4LCB5KSB7IHJldHVybiB4Lm9yKHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfeG9yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3hvciAoeCwgeSkgeyByZXR1cm4geC54b3IoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9sZWZ0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYgKHgsIHkpIHsgcmV0dXJuIHguZGl2KHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tb2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbW9kICh4LCB5KSB7IHJldHVybiB4Lm1vZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfaW50MzIgKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19pbnQzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMiAoeCkgeyByZXR1cm4geC50b0ludCgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19mbG9hdCAoeCkgeyByZXR1cm4geC50b0Zsb2F0ICgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mb3JtYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF90b19pbnQzMlxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc196ZXJvLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZm9ybWF0IChmbXQsIHgpIHtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoZi5zaWduZWRjb252ICYmIGNhbWxfaW50NjRfaXNfbmVnYXRpdmUoeCkpIHtcbiAgICBmLnNpZ24gPSAtMTsgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghIGNhbWxfaW50NjRfaXNfemVybyh4KSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gYnVmZmVyLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIGJ1ZmZlciA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIGJ1ZmZlcjtcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBidWZmZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3BhcnNlX2RpZ2l0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3VsdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfbXVsLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGJhc2U2NCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoYmFzZSk7XG4gIHZhciB0aHJlc2hvbGQgPVxuICAgICAgbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmZiwgMHhmZmZmKS51ZGl2bW9kKGJhc2U2NCkucXVvdGllbnQ7XG4gIHZhciBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gIGZvciAoOzspIHtcbiAgICBpKys7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIC8qIERldGVjdCBvdmVyZmxvdyBpbiBtdWx0aXBsaWNhdGlvbiBiYXNlICogcmVzICovXG4gICAgaWYgKGNhbWxfaW50NjRfdWx0KHRocmVzaG9sZCwgcmVzKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gICAgZCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gICAgcmVzID0gY2FtbF9pbnQ2NF9hZGQoY2FtbF9pbnQ2NF9tdWwoYmFzZTY0LCByZXMpLCBkKTtcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gYWRkaXRpb24gKGJhc2UgKiByZXMpICsgZCAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdChyZXMsIGQpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoYmFzZSA9PSAxMCAmJiBjYW1sX2ludDY0X3VsdChuZXcgTWxJbnQ2NCgwLCAwLCAweDgwMDApLCByZXMpKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobG8sIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICBsbyAmIDB4ZmZmZmZmLFxuICAgICgobG8gPj4+IDI0KSAmIDB4ZmYpIHwgKChoaSAmIDB4ZmZmZikgPDwgOCksXG4gICAgKGhpID4+PiAxNikgJiAweGZmZmYpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9sbzMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2xvMzIodil7IHJldHVybiB2LmxvMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGkzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oaTMyKHYpeyByZXR1cm4gdi5oaTMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGFbN10gPDwgMCB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVs0XSA8PCAwIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzFdIDw8IDAgfCAoYVswXSA8PCA4KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2J5dGVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2J5dGVzKHgpIHsgcmV0dXJuIHgudG9BcnJheSgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oYXNoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hhc2godil7XG4gIHJldHVybiAodi5sbzMyKCkpIF4gKHYuaGkzMigpKVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmQsIEFuZHkgUmF5XG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4vL1xuLy8gQmlnYXJyYXkuXG4vL1xuLy8gLSBhbGwgYmlnYXJyYXkgdHlwZXMgaW5jbHVkaW5nIEludDY0IGFuZCBDb21wbGV4LlxuLy8gLSBmb3J0cmFuICsgYyBsYXlvdXRzXG4vLyAtIHN1Yi9zbGljZS9yZXNoYXBlXG4vLyAtIHJldGFpbiBmYXN0IHBhdGggZm9yIDFkIGFycmF5IGFjY2Vzc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2luaXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYmFfaW5pdCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSB7XG4gIHZhciBuX2RpbXMgPSBkaW1zLmxlbmd0aDtcbiAgdmFyIHNpemUgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5fZGltczsgaSsrKSB7XG4gICAgaWYgKGRpbXNbaV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgc2l6ZSA9IHNpemUgKiBkaW1zW2ldO1xuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpe1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgNzogY2FzZSAxMDogY2FzZSAxMTogcmV0dXJuIDI7XG4gIGRlZmF1bHQ6IHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSl7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMDogIHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDE6ICB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAyOiAgdmlldyA9IEludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgMzogIHZpZXcgPSBVaW50OEFycmF5OyBicmVhaztcbiAgY2FzZSA0OiAgdmlldyA9IEludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDU6ICB2aWV3ID0gVWludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDY6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgNzogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA4OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDk6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTA6IHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDExOiB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAxMjogdmlldyA9IFVpbnQ4QXJyYXk7IGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPCA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycmF5XCJcblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA+PSA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycjAyXCJcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG5mdW5jdGlvbiBNbF9CaWdhcnJheSAoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcblxuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IGNhbWxfYmFfY3VzdG9tX25hbWU7XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHZhciBvZnMgPSAwO1xuICBpZih0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgaWYgKCEgKGFyZyBpbnN0YW5jZW9mIEFycmF5KSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiYmlnYXJyYXkuanM6IGludmFsaWQgb2Zmc2V0XCIpO1xuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBhcmcubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgaWYodGhpcy5sYXlvdXQgPT0gMCAvKiBjX2xheW91dCAqLykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMCB8fCBhcmdbaV0gPj0gdGhpcy5kaW1zW2ldKVxuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIGFyZ1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuZGltcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGFyZ1tpXSA8IDEgfHwgYXJnW2ldID4gdGhpcy5kaW1zW2ldKXtcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgfVxuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyAoYXJnW2ldIC0gMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvZnM7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgbCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGggPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLGgpO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIHIgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gWzI1NCwgciwgaV07XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdXG4gIH1cbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IHZbMV07XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IHZbMl07XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwXG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGEgPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgaWYoYSA9PSBiKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGEgOiBiO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciBpbSA9IHZbMV07XG4gICAgdmFyIHJlID0gdlsyXTtcbiAgICBpZihpbSA9PSByZSl7XG4gICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gaW0gOiByZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhLmZpbGwodik7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIChiLCB0b3RhbCkge1xuICBpZiAodGhpcy5sYXlvdXQgIT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9IGIua2luZCkge1xuICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICB2YXIgazIgPSAgICBiLmtpbmQgfCAoYi5sYXlvdXQgPDwgOCk7XG4gICAgcmV0dXJuIGsyIC0gazE7XG4gIH1cbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYi5kaW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBiLmRpbXMubGVuZ3RoIC0gdGhpcy5kaW1zLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAodGhpcy5kaW1zW2ldICE9IGIuZGltc1tpXSlcbiAgICAgIHJldHVybiAodGhpcy5kaW1zW2ldIDwgYi5kaW1zW2ldKSA/IC0xIDogMTtcbiAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gIGNhc2UgMTA6XG4gIGNhc2UgMTE6XG4gICAgLy8gRmxvYXRzXG4gICAgdmFyIHgsIHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHggPSB0aGlzLmRhdGFbaV07XG4gICAgICB5ID0gYi5kYXRhW2ldO1xuICAgICAgaWYgKHggPCB5KVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoeCA+IHkpXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKHggIT0geSkge1xuICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICBpZiAoeCA9PSB4KSByZXR1cm4gMTtcbiAgICAgICAgaWYgKHkgPT0geSkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKz0yKSB7XG4gICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA8IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPiBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPCAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApID4gKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAyOlxuICBjYXNlIDM6XG4gIGNhc2UgNDpcbiAgY2FzZSA1OlxuICBjYXNlIDY6XG4gIGNhc2UgODpcbiAgY2FzZSA5OlxuICBjYXNlIDEyOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldIDwgYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5X2NfMV8xXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgICA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlID0gbmV3IE1sX0JpZ2FycmF5KClcbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIGlmKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpe1xuICAgIGlmKChhcmcgaW5zdGFuY2VvZiBBcnJheSkgJiYgYXJnLmxlbmd0aCA9PSAxKVxuICAgICAgYXJnID0gYXJnWzBdO1xuICAgIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiTWxfQmlnYXJyYXlfY18xXzEub2Zmc2V0XCIpO1xuICB9XG4gIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pXG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJnO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICByZXR1cm4gdGhpcy5kYXRhW29mc107XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgdGhpcy5kYXRhW29mc10gPSB2O1xuICByZXR1cm4gMFxufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHRoaXMuZGF0YS5maWxsKHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLGIsdG90YWwpe1xuICByZXR1cm4gYS5jb21wYXJlKGIsdG90YWwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIE1sX0JpZ2FycmF5X2NfMV8xLCBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpe1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmKGNhbWxfYmFfZ2V0X3NpemUoZGltcykgKiBzaXplX3Blcl9lbGVtZW50ICE9IGRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwibGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggZGltc1wiKTtcbiAgfVxuICBpZihsYXlvdXQgPT0gMCAmJiAvLyBjX2xheW91dFxuICAgICBkaW1zLmxlbmd0aCA9PSAxICYmIC8vIEFycmF5MVxuICAgICBzaXplX3Blcl9lbGVtZW50ID09IDEpIC8vIDEtdG8tMSBtYXBwaW5nXG4gICAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5KGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG5cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGUoa2luZCwgbGF5b3V0LCBkaW1zX21sKSB7XG4gIHZhciBkaW1zID0gY2FtbF9qc19mcm9tX2FycmF5KGRpbXNfbWwpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBjYW1sX2JhX2dldF9zaXplKGRpbXMpKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NoYW5nZV9sYXlvdXRcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9jaGFuZ2VfbGF5b3V0KGJhLCBsYXlvdXQpIHtcbiAgaWYoYmEubGF5b3V0ID09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2JhLmRpbXMubGVuZ3RoIC0gaSAtIDFdO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGxheW91dCwgbmV3X2RpbXMsIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZChiYSkge1xuICByZXR1cm4gYmEua2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9sYXlvdXRcbmZ1bmN0aW9uIGNhbWxfYmFfbGF5b3V0KGJhKSB7XG4gIHJldHVybiBiYS5sYXlvdXQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbnVtX2RpbXNcbmZ1bmN0aW9uIGNhbWxfYmFfbnVtX2RpbXMoYmEpIHtcbiAgcmV0dXJuIGJhLmRpbXMubGVuZ3RoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2RpbShiYSwgaSkge1xuICBpZiAoaSA8IDAgfHwgaSA+PSBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5kaW1cIik7XG4gIHJldHVybiBiYS5kaW1zW2ldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMShiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8yXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMihiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8zXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMyhiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X2dlbmVyaWMoYmEsIGkpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpO1xuICByZXR1cm4gYmEuZ2V0KG9mcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MTYoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiAoYjEgfCAoYjIgPDwgOCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDMyKGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICByZXR1cm4gKCAoYjEgPDwgMCkgIHxcbiAgICAgICAgICAgKGIyIDw8IDgpICB8XG4gICAgICAgICAgIChiMyA8PCAxNikgfFxuICAgICAgICAgICAoYjQgPDwgMjQpICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0NjQoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHZhciBiNSA9IGJhLmdldChvZnMrNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMrNSk7XG4gIHZhciBiNyA9IGJhLmdldChvZnMrNik7XG4gIHZhciBiOCA9IGJhLmdldChvZnMrNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCxiNyxiNixiNSxiNCxiMyxiMixiMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8xKGJhLCBpMCkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChpMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8yXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8yKGJhLCBpMCwgaTEpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8zXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8zKGJhLCBpMCwgaTEsIGkyKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX3NldF9nZW5lcmljKGJhLCBpLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MTYoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDMyKGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMiwgKHYgPj4+IDE2KSAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzMsICh2ID4+PiAyNCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0NjQoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciB2ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcytpLCB2WzctaV0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8xXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8xKGJhLCBpMCwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGkwKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMV0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzMoYmEsIGkwLCBpMSwgaTIsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9IHNyYy5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZHN0LmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKGRzdC5kaW1zW2ldICE9IHNyYy5kaW1zW2ldKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBkc3QuZGF0YS5zZXQoc3JjLmRhdGEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zdWJcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3N1YihiYSwgb2ZzLCBsZW4pIHtcbiAgdmFyIGNoYW5nZWRfZGltO1xuICB2YXIgbXVsID0gMTtcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAoYmEuZGltcy5sZW5ndGggLSAxKTsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IGJhLmRpbXMubGVuZ3RoIC0gMTtcbiAgICBvZnMgPSBvZnMgLSAxO1xuICB9XG4gIGlmIChvZnMgPCAwIHx8IGxlbiA8IDAgfHwgKG9mcyArIGxlbikgPiBiYS5kaW1zW2NoYW5nZWRfZGltXSl7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc3ViOiBiYWQgc3ViLWFycmF5XCIpO1xuICB9XG4gIHZhciBuZXdfZGltcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2ldO1xuICBuZXdfZGltc1tjaGFuZ2VkX2RpbV0gPSBsZW47XG4gIG11bCAqPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIG11bCwgKG9mcyArIGxlbikgKiBtdWwpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zbGljZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zbGljZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbnVtX2luZHMgPSB2aW5kLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gW107XG4gIHZhciBzdWJfZGltcyA9IFtdO1xuICB2YXIgb2ZzO1xuXG4gIGlmIChudW1faW5kcyA+IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnNsaWNlOiB0b28gbWFueSBpbmRpY2VzXCIpO1xuXG4gIC8vIENvbXB1dGUgb2Zmc2V0IGFuZCBjaGVjayBib3VuZHNcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSB2aW5kW2ldO1xuICAgIGZvciAoOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMDtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UobnVtX2luZHMpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2JhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMgKyBpXSA9IHZpbmRbaV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBzaXplX3Blcl9lbGVtZW50LCAob2ZzICsgc2l6ZSkgKiBzaXplX3Blcl9lbGVtZW50KTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIHN1Yl9kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfcmVzaGFwZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuZnVuY3Rpb24gY2FtbF9iYV9yZXNoYXBlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBuZXdfZGltID0gW107XG4gIHZhciBudW1fZGltcyA9IHZpbmQubGVuZ3RoO1xuXG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICB9XG4gIHZhciBudW1fZWx0cyA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgIG5ld19kaW1baV0gPSB2aW5kW2ldO1xuICAgIGlmIChuZXdfZGltW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBudW1fZWx0cyA9IG51bV9lbHRzICogbmV3X2RpbVtpXTtcbiAgfVxuXG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgLy8gQ2hlY2sgdGhhdCBzaXplcyBhZ3JlZVxuICBpZiAobnVtX2VsdHMgIT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgKGJhLmtpbmQgfCAoYmEubGF5b3V0IDw8IDgpKSk7XG4gIGlmKGJhLmNhbWxfY3VzdG9tID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKGJhLmRpbXNbaV0gPCAweGZmZmYpXG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGltc1tpXSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCAweGZmZmYpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIDApO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB3cml0ZXIud3JpdGUoMzIsYmEuZGltc1tpXSlcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgd3JpdGVyLndyaXRlKDgsMCk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoYmEuZ2V0KGkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGogPSBiYS5nZXQoaSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzJdKSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGNvbXBsZXggPSBiYS5nZXQoaSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMV0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzJdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgbmFtZSl7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmXG4gIHZhciBsYXlvdXQgPSAodGFnID4+IDgpICYgMTtcbiAgdmFyIGRpbXMgPSBbXVxuICBpZihuYW1lID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZV9kaW0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgaWYoc2l6ZV9kaW0gPT0gMHhmZmZmKXtcbiAgICAgICAgdmFyIHNpemVfZGltX2hpID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgdmFyIHNpemVfZGltX2xvID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgaWYoc2l6ZV9kaW1faGkgIT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSBkaW1zLnB1c2gocmVhZGVyLnJlYWQzMnUoKSk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSk7XG4gIHZhciBiYSA9IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHZhciBzaXh0eSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICBpZihzaXh0eSkgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjYW5ub3QgcmVhZCBiaWdhcnJheSB3aXRoIDY0LWJpdCBPQ2FtbCBpbnRzXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW50NjQgPSBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xuICAgICAgYmEuc2V0KGksaW50NjQpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVha1xuICB9XG4gIHN6WzBdID0gKDQgKyBudW1fZGltcykgKiA0O1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vRGVwcmVjYXRlZFxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfZnJvbVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2Zyb20oZGF0YTEsIGRhdGEyLCBqc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKXtcbiAgaWYoZGF0YTIgfHwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSA9PSAyKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiKTtcbiAgfVxuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YTEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2hhc2ggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX2hhc2goYmEpe1xuICB2YXIgbnVtX2VsdHMgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICB2YXIgaCA9IDA7XG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMjU2KSBudW1fZWx0cyA9IDI1NjtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgNCA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCA4KSB8IChiYS5kYXRhW2krMl0gPDwgMTYpIHwgKGJhLmRhdGFbaSszXSA8PCAyNCk7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgdyA9IDA7XG4gICAgc3dpdGNoIChudW1fZWx0cyAmIDMpIHtcbiAgICBjYXNlIDM6IHcgID0gYmEuZGF0YVtpKzJdIDw8IDE2OyAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMjogdyB8PSBiYS5kYXRhW2krMV0gPDwgODsgICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAxOiB3IHw9IGJhLmRhdGFbaSswXTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDIgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTIpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgMTYpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPSAwKVxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIG51bV9lbHRzICo9IDJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYmEpe1xuICByZXR1cm4gYmEuZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGtpbmQ7XG4gIGlmICAgICAgKHRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSBraW5kID0gMDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpIGtpbmQgPSAxO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDhBcnJheSkga2luZCA9IDI7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhBcnJheSkga2luZCA9IDM7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDE2QXJyYXkpIGtpbmQgPSA0O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSBraW5kID0gNTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5OiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICByZXR1cm4ga2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZCA9IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSk7XG4gIHZhciB0YSA9XG4gICAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgICAgdGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSA/XG4gICAgICBuZXcgSW50MzJBcnJheSh0YS5idWZmZXIgLHRhLmJ5dGVPZmZzZXQsIHRhLmxlbmd0aCkgOiB0YTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCAwLCBbdGEubGVuZ3RoXSwgdGEpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT0gXCIlZFwiKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiK2kpO1xuICB2YXIgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIGlmIChpIDwgMCkgeyBpZiAoZi5zaWduZWRjb252KSB7IGYuc2lnbiA9IC0xOyBpID0gLWk7IH0gZWxzZSBpID4+Pj0gMDsgfVxuICB2YXIgcyA9IGkudG9TdHJpbmcoZi5iYXNlKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSAnICc7XG4gICAgdmFyIG4gPSBmLnByZWMgLSBzLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIHMgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBzO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKSB7XG4gIHZhciBpID0gMCwgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLCBiYXNlID0gMTAsIHNpZ24gPSAxO1xuICBpZiAobGVuID4gMCkge1xuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpKSB7XG4gICAgY2FzZSA0NTogaSsrOyBzaWduID0gLTE7IGJyZWFrO1xuICAgIGNhc2UgNDM6IGkrKzsgc2lnbiA9IDE7IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PSA0OClcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpKSB7XG4gICAgY2FzZSAxMjA6IGNhc2UgODg6IGJhc2UgPSAxNjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExMTogY2FzZSA3OTogYmFzZSA9ICA4OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgIDk4OiBjYXNlIDY2OiBiYXNlID0gIDI7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTc6IGNhc2UgODU6IGkgKz0gMjsgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gW2ksIHNpZ24sIGJhc2VdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2RpZ2l0XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2RpZ2l0KGMpIHtcbiAgaWYgKGMgPj0gNDggJiYgYyA8PSA1NykgIHJldHVybiBjIC0gNDg7XG4gIGlmIChjID49IDY1ICYmIGMgPD0gOTApICByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyAocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocyk7XG4gIHZhciBpID0gclswXSwgc2lnbiA9IHJbMV0sIGJhc2UgPSByWzJdO1xuICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICB2YXIgdGhyZXNob2xkID0gLTEgPj4+IDA7XG4gIHZhciBjID0gKGkgPCBsZW4pP2NhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk6MDtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGQ7XG4gIGZvciAoaSsrO2k8bGVuO2krKykge1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAvLyBGb3IgYmFzZSBkaWZmZXJlbnQgZnJvbSAxMCwgd2UgZXhwZWN0IGFuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uLFxuICAvLyBoZW5jZSBhbnkgdmFsdWUgb2YgJ3JlcycgKGxlc3MgdGhhbiAndGhyZXNob2xkJykgaXMgYWNjZXB0YWJsZS5cbiAgLy8gQnV0IHdlIGhhdmUgdG8gY29udmVydCB0aGUgcmVzdWx0IGJhY2sgdG8gYSBzaWduZWQgaW50ZWdlci5cbiAgcmVzID0gc2lnbiAqIHJlcztcbiAgaWYgKChiYXNlID09IDEwKSAmJiAoKHJlcyB8IDApICE9IHJlcykpXG4gICAgLyogU2lnbmVkIHJlcHJlc2VudGF0aW9uIGV4cGVjdGVkLCBhbGxvdyAtMl4obmJpdHMtMSkgdG8gMl4obmJpdHMtMSkgLSAxICovXG4gICAgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX211bCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tdWwoYSxiKXtcbiAgcmV0dXJuIE1hdGguaW11bChhLGIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2RpdlxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9kaXYoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiAoeC95KXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9tb2QoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiB4JXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNlxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoKCh4ICYgMHgwMEZGKSA8PCA4KSB8XG4gICAgICAgICAgICgoeCAmIDB4RkYwMCkgPj4gOCkpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYnN3YXBcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYnN3YXAoeCkge1xuICByZXR1cm4gKCgoeCAmIDB4MDAwMDAwRkYpIDw8IDI0KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMDAwRkYwMCkgPDwgOCkgfFxuICAgICAgICAgICgoeCAmIDB4MDBGRjAwMDApID4+PiA4KSB8XG4gICAgICAgICAgKCh4ICYgMHhGRjAwMDAwMCkgPj4+IDI0KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX3VuaXZfcGFyYW0gbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246IDwgNC4xMlxuZnVuY3Rpb24gY2FtbF9oYXNoX3VuaXZfcGFyYW0gKGNvdW50LCBsaW1pdCwgb2JqKSB7XG4gIHZhciBoYXNoX2FjY3UgPSAwO1xuICBmdW5jdGlvbiBoYXNoX2F1eCAob2JqKSB7XG4gICAgbGltaXQgLS07XG4gICAgaWYgKGNvdW50IDwgMCB8fCBsaW1pdCA8IDApIHJldHVybjtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkgJiYgb2JqWzBdID09PSAob2JqWzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKG9ialswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqWzJdKSB8IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgbGltaXQrKzsgaGFzaF9hdXgob2JqKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgb2JqWzBdKSB8IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSBvYmoubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgaGFzaF9hdXggKG9ialtpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKG9iaikpIHtcbiAgICAgIGNvdW50IC0tO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQob2JqKTtcbiAgICAgIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZvciAodmFyIGIgPSBjb250ZW50LCBsID0gYi5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgICAgfSBlbHNlIHsgLyogQVJSQVkgKi9cbiAgICAgICAgZm9yICh2YXIgYSA9IGNvbnRlbnQsIGwgPSBhLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYVtpXSkgfCAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcob2JqKSkge1xuICAgICAgdmFyIGpzYnl0ZXMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG9iaik7XG4gICAgICBmb3IgKHZhciBiID0ganNieXRlcywgbCA9IGpzYnl0ZXMubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBmb3IgKHZhciBiID0gb2JqLCBsID0gb2JqLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSAob2JqfDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBjb3VudCAtLTtcbiAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9iaikgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSArb2JqKSB7XG4gICAgICAvLyBGbG9hdFxuICAgICAgY291bnQtLTtcbiAgICAgIHZhciBwID0gY2FtbF9pbnQ2NF90b19ieXRlcyAoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IChvYmopKTtcbiAgICAgIGZvciAodmFyIGkgPSA3OyBpID49IDA7IGktLSkgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgcFtpXSkgfCAwO1xuICAgIH0gZWxzZSBpZihvYmogJiYgb2JqLmNhbWxfY3VzdG9tKSB7XG4gICAgICBpZihjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoID0gY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaChvYmopIHwgMDtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgaCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBoYXNoX2F1eCAob2JqKTtcbiAgcmV0dXJuIGhhc2hfYWNjdSAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsZCkge1xuICBkID0gY2FtbF9tdWwoZCwgMHhjYzllMmQ1MXwwKTtcbiAgZCA9ICgoZCA8PCAxNSkgfCAoZCA+Pj4gKDMyLTE1KSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9ICgoaCA8PCAxMykgfCAoaCA+Pj4gKDMyLTEzKSkpOyAgIC8vUk9UTDMyKGgsIDEzKTtcbiAgcmV0dXJuICgoKGggKyAoaCA8PCAyKSl8MCkgKyAoMHhlNjU0NmI2NHwwKSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmluYWwoaCkge1xuICBoIF49IGggPj4+IDE2O1xuICBoID0gY2FtbF9tdWwgKGgsIDB4ODVlYmNhNmJ8MCk7XG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPSBjYW1sX211bCAoaCwgMHhjMmIyYWUzNXwwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9oYXNoX21peF9pbnQ2NFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9mbG9hdCAoaCwgdjApIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50NjQoaCwgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh2MCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnQ2NFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludDY0IChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gcy5jaGFyQ29kZUF0KGkpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCA4KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMikgPDwgMTYpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSszKSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHMuY2hhckNvZGVBdChpKzIpIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gcy5jaGFyQ29kZUF0KGkrMSkgPDwgODtcbiAgY2FzZSAxOlxuICAgIHcgfD0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHNbaV1cbiAgICAgIHwgKHNbaSsxXSA8PCA4KVxuICAgICAgfCAoc1tpKzJdIDw8IDE2KVxuICAgICAgfCAoc1tpKzNdIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gc1tpKzJdIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gc1tpKzFdIDw8IDg7XG4gIGNhc2UgMTogdyB8PSBzW2ldO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlcyhoLCB2KSB7XG4gIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KHYpO1xuICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpXG4gIGVsc2UgLyogQVJSQVkgKi9cbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgY29udGVudCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHYpKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoIChjb3VudCwgbGltaXQsIHNlZWQsIG9iaikge1xuICB2YXIgcXVldWUsIHJkLCB3ciwgc3osIG51bSwgaCwgdiwgaSwgbGVuO1xuICBzeiA9IGxpbWl0O1xuICBpZiAoc3ogPCAwIHx8IHN6ID4gMjU2KSBzeiA9IDI1NjtcbiAgbnVtID0gY291bnQ7XG4gIGggPSBzZWVkO1xuICBxdWV1ZSA9IFtvYmpdOyByZCA9IDA7IHdyID0gMTtcbiAgd2hpbGUgKHJkIDwgd3IgJiYgbnVtID4gMCkge1xuICAgIHYgPSBxdWV1ZVtyZCsrXTtcbiAgICBpZiAodiAmJiB2LmNhbWxfY3VzdG9tKXtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50IChoLCBoaCk7XG4gICAgICAgIG51bSAtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKHZbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHZbMl0pO1xuICAgICAgICBudW0tLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKSB7XG4gICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdGFnKTtcbiAgICAgICAgZm9yIChpID0gMSwgbGVuID0gdi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgcXVldWVbd3IrK10gPSB2W2ldO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodnwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHYrdisxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLHYpO1xuICAgICAgbnVtLS07XG4gICAgfVxuICB9XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2hhc2hcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmluYWwsIGNhbWxfaGFzaF9taXhfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19oYXNoKGgsIHYpe1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdik7XG4gIHZhciBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNGRkZGRkZGO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9jb25zdGFudHNcbnZhciBjYW1sX21hcnNoYWxfY29uc3RhbnRzID0ge1xuICBQUkVGSVhfU01BTExfQkxPQ0s6ICAgICAgICAgMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogICAgICAgICAgIDB4NDAsXG4gIFBSRUZJWF9TTUFMTF9TVFJJTkc6ICAgICAgICAweDIwLFxuICBDT0RFX0lOVDg6ICAgICAgICAgICAgICAgICAgMHgwMCxcbiAgQ09ERV9JTlQxNjogICAgICAgICAgICAgICAgIDB4MDEsXG4gIENPREVfSU5UMzI6ICAgICAgICAgICAgICAgICAweDAyLFxuICBDT0RFX0lOVDY0OiAgICAgICAgICAgICAgICAgMHgwMyxcbiAgQ09ERV9TSEFSRUQ4OiAgICAgICAgICAgICAgIDB4MDQsXG4gIENPREVfU0hBUkVEMTY6ICAgICAgICAgICAgICAweDA1LFxuICBDT0RFX1NIQVJFRDMyOiAgICAgICAgICAgICAgMHgwNixcbiAgQ09ERV9CTE9DSzMyOiAgICAgICAgICAgICAgIDB4MDgsXG4gIENPREVfQkxPQ0s2NDogICAgICAgICAgICAgICAweDEzLFxuICBDT0RFX1NUUklORzg6ICAgICAgICAgICAgICAgMHgwOSxcbiAgQ09ERV9TVFJJTkczMjogICAgICAgICAgICAgIDB4MEEsXG4gIENPREVfRE9VQkxFX0JJRzogICAgICAgICAgICAweDBCLFxuICBDT0RFX0RPVUJMRV9MSVRUTEU6ICAgICAgICAgMHgwQyxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzogICAgIDB4MEQsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6ICAweDBFLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogICAgMHgwRixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6ICAgICAgICAgICAweDEwLFxuICBDT0RFX0lORklYUE9JTlRFUjogICAgICAgICAgMHgxMSxcbiAgQ09ERV9DVVNUT006ICAgICAgICAgICAgICAgIDB4MTIsXG4gIENPREVfQ1VTVE9NX0xFTjogICAgICAgICAgICAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogICAgICAgICAgMHgxOVxufVxuXG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBVSW50OEFycmF5UmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IHM7IHRoaXMuaSA9IGk7IH1cblVJbnQ4QXJyYXlSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuc1t0aGlzLmkrK10gPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCA4KSB8IHNbaSArIDFdXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoc1tpXSA8PCAyNCkgfCAoc1tpKzFdIDw8IDE2KSB8XG4gICAgICAgICAgICAoc1tpKzJdIDw8IDgpIHwgc1tpKzNdKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzW2ldIDw8IDI0KSB8IChzW2krMV0gPDwgMTYpIHxcbiAgICAgIChzW2krMl0gPDwgOCkgfCBzW2krM107XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbFN0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gTWxTdHJpbmdSZWFkZXIgKHMsIGkpIHsgdGhpcy5zID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTsgdGhpcy5pID0gaTsgfVxuTWxTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgocy5jaGFyQ29kZUF0KGkpIDw8IDI0KSB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKHMuY2hhckNvZGVBdChpKzIpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkrMykpID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zdWJzdHJpbmcoaSwgaSArIGxlbikpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIHZhciBzID0gdGhpcy5zO1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogQmlnU3RyaW5nUmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheSwgY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gQmlnU3RyaW5nUmVhZGVyIChicywgaSkgeyB0aGlzLnMgPSBiczsgdGhpcy5pID0gaTsgfVxuQmlnU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgOCkgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDI0ID4+IDE2KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpICAgICAgICAgKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIGFyciA9IG5ldyBBcnJheShsZW4pXG4gICAgZm9yKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKXtcbiAgICAgIGFycltqXSA9IGNhbWxfYmFfZ2V0XzEodGhpcy5zLCBpK2opO1xuICAgIH1cbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIG9mZnNldCA9IHRoaXMub2Zmc2V0KGkpO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIHRoaXMucy5kYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgfVxufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzIChhKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKGNhbWxfaW50NjRfb2ZfYnl0ZXMgKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlclxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChzLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IE1sU3RyaW5nUmVhZGVyLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyLCBjYW1sX3N0cmluZ19vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKHMsb2ZzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgTWxTdHJpbmdSZWFkZXIgKGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICBzaXplWzBdID0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMgKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyAodik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB3cml0ZXIud3JpdGUgKDgsIGJbaV0pO1xuICBzaXplc1swXSA9IDg7IHNpemVzWzFdID0gODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl91bm1hcnNoYWxcbmZ1bmN0aW9uIGNhbWxfaW50MzJfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHNpemVbMF0gPSA0O1xuICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHN3aXRjaCAocmVhZGVyLnJlYWQ4dSAoKSkge1xuICBjYXNlIDE6XG4gICAgc2l6ZVswXSA9IDQ7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICBjYXNlIDI6XG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBuYXRpdmUgaW50ZWdlciB2YWx1ZSB0b28gbGFyZ2VcIik7XG4gIGRlZmF1bHQ6IGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPVxuICAgIHtcIl9qXCI6IHtcbiAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQ2NF91bm1hcnNoYWwsXG4gICAgICBzZXJpYWxpemUgIDogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgICAgZml4ZWRfbGVuZ3RoIDogOCxcbiAgICAgIGNvbXBhcmUgOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgICBoYXNoIDogY2FtbF9pbnQ2NF9oYXNoXG4gICAgfSxcbiAgICAgXCJfaVwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9uXCI6IHtcbiAgICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9iaWdhcnJheVwiOntcbiAgICAgICBkZXNlcmlhbGl6ZSA6IChmdW5jdGlvbiAocmVhZGVyLCBzeikge3JldHVybiBjYW1sX2JhX2Rlc2VyaWFsaXplIChyZWFkZXIsc3osXCJfYmlnYXJyYXlcIil9KSxcbiAgICAgICBzZXJpYWxpemUgOiBjYW1sX2JhX3NlcmlhbGl6ZSxcbiAgICAgICBjb21wYXJlIDogY2FtbF9iYV9jb21wYXJlLFxuICAgICAgIGhhc2g6IGNhbWxfYmFfaGFzaCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyMDJcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycjAyXCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH1cbiAgICB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9mbG9hdF9vZl9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N0Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT0gMCkge1xuICAgICAgYyA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBuNyA9IG4gPDwgNztcbiAgICAgIGlmIChuICE9IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Rik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG4gIHZhciBtYWdpYyA9IHJlYWRlci5yZWFkMzJ1ICgpXG4gIHN3aXRjaChtYWdpYyl7XG4gIGNhc2UgMHg4NDk1QTZCRTogLyogSW50ZXh0X21hZ2ljX251bWJlcl9zbWFsbCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gMjA7XG4gICAgdmFyIGNvbXByZXNzZWQgPSAwO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciB1bmNvbXByZXNzZWRfZGF0YV9sZW4gPSBkYXRhX2xlbjtcbiAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfMzIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfNjQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gcmVhZGVyLnJlYWQ4dSgpICYgMHgzRjtcbiAgICB2YXIgY29tcHJlc3NlZCA9IDE7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIF9zaXplXzMyID0gcmVhZHZscSAob3ZlcmZsb3cpO1xuICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEgKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIpO1xuICAgIH1cbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkY6IC8qIEludGV4dF9tYWdpY19udW1iZXJfYmlnICovXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIpO1xuICAgIGJyZWFrXG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWs7XG4gIH1cbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gKG51bV9vYmplY3RzID4gMCk/W106bnVsbDtcbiAgdmFyIG9ial9jb3VudGVyID0gMDtcbiAgZnVuY3Rpb24gaW50ZXJuX3JlYyAocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgIGlmIChjb2RlID49IDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovKSB7XG4gICAgICBpZiAoY29kZSA+PSAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovKSB7XG4gICAgICAgIHZhciB0YWcgPSBjb2RlICYgMHhGO1xuICAgICAgICB2YXIgc2l6ZSA9IChjb2RlID4+IDQpICYgMHg3O1xuICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZVxuICAgICAgICByZXR1cm4gKGNvZGUgJiAweDNGKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvZGUgPj0gMHgyMC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFGO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoKGNvZGUpIHtcbiAgICAgICAgY2FzZSAweDAwOiAvL2NzdC5DT0RFX0lOVDg6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkOHMgKCk7XG4gICAgICAgIGNhc2UgMHgwMTogLy9jc3QuQ09ERV9JTlQxNjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQxNnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMjogLy9jc3QuQ09ERV9JTlQzMjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMzogLy9jc3QuQ09ERV9JTlQ2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGludGVnZXIgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDQ6IC8vY3N0LkNPREVfU0hBUkVEODpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNTogLy9jc3QuQ09ERV9TSEFSRUQxNjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQxNnUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDY6IC8vY3N0LkNPREVfU0hBUkVEMzI6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA4OiAvL2NzdC5DT0RFX0JMT0NLMzI6XG4gICAgICAgICAgdmFyIGhlYWRlciA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIHZhciB0YWcgPSBoZWFkZXIgJiAweEZGO1xuICAgICAgICAgIHZhciBzaXplID0gaGVhZGVyID4+IDEwO1xuICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMzogLy9jc3QuQ09ERV9CTE9DSzY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGRhdGEgYmxvY2sgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbNyAtIGldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBCOiAvL2NzdC5DT0RFX0RPVUJMRV9CSUc6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFtpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRTogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBEOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MDc6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBGOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEwOiAvL2NzdC5DT0RFX0NPREVQT0lOVEVSOlxuICAgICAgICBjYXNlIDB4MTE6IC8vY3N0LkNPREVfSU5GSVhQT0lOVEVSOlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGNvZGUgcG9pbnRlclwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgY2FzZSAweDE4OiAvL2NzdC5DT0RFX0NVU1RPTV9MRU46XG4gICAgICAgIGNhc2UgMHgxOTogLy9jc3QuQ09ERV9DVVNUT01fRklYRUQ6XG4gICAgICAgICAgdmFyIGMsIHMgPSBcIlwiO1xuICAgICAgICAgIHdoaWxlICgoYyA9IHJlYWRlci5yZWFkOHUgKCkpICE9IDApIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoYyk7XG4gICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRfc2l6ZTtcbiAgICAgICAgICBpZighb3BzKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB1bmtub3duIGN1c3RvbSBibG9jayBpZGVudGlmaWVyXCIpO1xuICAgICAgICAgIHN3aXRjaChjb2RlKXtcbiAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxOTogLy8gY3N0LkNPREVfQ1VTVE9NX0ZJWEVEXG4gICAgICAgICAgICBpZighb3BzLmZpeGVkX2xlbmd0aClcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IG9wcy5maXhlZF9sZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICAgIC8vIFNraXAgc2l6ZTY0XG4gICAgICAgICAgICByZWFkZXIucmVhZDMycygpOyByZWFkZXIucmVhZDMycygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvbGRfcG9zID0gcmVhZGVyLmk7XG4gICAgICAgICAgdmFyIHNpemUgPSBbMF07XG4gICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHNpemVbMF0pXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW5jb3JyZWN0IGxlbmd0aCBvZiBzZXJpYWxpemVkIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbWVzc2FnZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZihjb21wcmVzc2VkKSB7XG4gICAgaWYoY2FtbF9kZWNvbXByZXNzX2lucHV0KSB7XG4gICAgICB2YXIgZGF0YSA9IHJlYWRlci5yZWFkdWludDhhcnJheShkYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gbmV3IFVpbnQ4QXJyYXkodW5jb21wcmVzc2VkX2RhdGFfbGVuKTtcbiAgICAgIHZhciByZXMgPSBjYW1sX2RlY29tcHJlc3NfaW5wdXQoZGF0YSwgcmVzKTtcbiAgICAgIHZhciByZWFkZXIgPSBuZXcgVUludDhBcnJheVJlYWRlcihyZXMsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGNvbXByZXNzZWQgb2JqZWN0LCBjYW5ub3QgZGVjb21wcmVzc1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHJlcyA9IGludGVybl9yZWMgKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjIChyZWFkZXIpO1xuICB9XG4gIGlmICh0eXBlb2Ygb2ZzIT1cIm51bWJlclwiKSBvZnNbMF0gPSByZWFkZXIuaTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG4vL1ZlcnNpb246IDwgNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAyMFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNlxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAocywgb2ZzKSB7XG4gIHZhciByID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKSwgb2ZzKTtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gci5yZWFkOHUoKTtcbiAgICB2YXIgbiA9IGMgJiAweDdGO1xuICAgIHdoaWxlICgoYyAmIDB4ODApICE9IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdGKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICBzd2l0Y2goci5yZWFkMzJ1KCkpe1xuICBjYXNlIDB4ODQ5NUE2QkU6IC8qIEludGV4dF9tYWdpY19udW1iZXJfc21hbGwgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IDIwO1xuICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgIGJyZWFrO1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M0Y7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIHRoaXMgcGxhdGZvcm1cIik7XG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRjogLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi9cbiAgZGVmYXVsdDpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWtcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG52YXIgTWxPYmplY3RUYWJsZTtcbmlmICh0eXBlb2YgZ2xvYmFsVGhpcy5NYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvKiBwb2x5ZmlsbCAodXNpbmcgbGluZWFyIHNlYXJjaCkgKi9cbiAgICBmdW5jdGlvbiBOYWl2ZUxvb2t1cChvYmpzKSB7IHRoaXMub2JqcyA9IG9ianM7IH1cbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMub2Jqc1tpXSA9PT0gdikgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfTtcbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGhlcmUuIFtNbE9iamVjdFRhYmxlLnN0b3JlXSB3aWxsIHB1c2ggdG8gW3RoaXMub2Jqc10gZGlyZWN0bHkuXG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IE5haXZlTG9va3VwKHRoaXMub2Jqcyk7XG4gICAgfTtcbiAgfSgpO1xufVxuZWxzZSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBnbG9iYWxUaGlzLk1hcCgpO1xuICB9O1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5zdG9yZSA9IGZ1bmN0aW9uKHYpIHtcbiAgdGhpcy5sb29rdXAuc2V0KHYsIHRoaXMub2Jqcy5sZW5ndGgpO1xuICB0aGlzLm9ianMucHVzaCh2KTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUucmVjYWxsID0gZnVuY3Rpb24odikge1xuICB2YXIgaSA9IHRoaXMubG9va3VwLmdldCh2KTtcbiAgcmV0dXJuIChpID09PSB1bmRlZmluZWQpXG4gICAgPyB1bmRlZmluZWQgOiB0aGlzLm9ianMubGVuZ3RoIC0gaTsgICAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogTWxPYmplY3RUYWJsZSwgY2FtbF9saXN0X3RvX2pzX2FycmF5LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbnZhciBjYW1sX291dHB1dF92YWwgPSBmdW5jdGlvbiAoKXtcbiAgZnVuY3Rpb24gV3JpdGVyICgpIHsgdGhpcy5jaHVuayA9IFtdOyB9XG4gIFdyaXRlci5wcm90b3R5cGUgPSB7XG4gICAgY2h1bmtfaWR4OjIwLCBibG9ja19sZW46MCwgb2JqX2NvdW50ZXI6MCwgc2l6ZV8zMjowLCBzaXplXzY0OjAsXG4gICAgd3JpdGU6ZnVuY3Rpb24gKHNpemUsIHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9hdDpmdW5jdGlvbiAocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3BvcysrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9jb2RlOmZ1bmN0aW9uIChzaXplLCBjb2RlLCB2YWx1ZSkge1xuICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9IGNvZGU7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9zaGFyZWQ6ZnVuY3Rpb24gKG9mZnNldCkge1xuICAgICAgaWYgKG9mZnNldCA8ICgxIDw8IDgpKSB0aGlzLndyaXRlX2NvZGUoOCwgMHgwNCAvKmNzdC5DT0RFX1NIQVJFRDgqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgaWYgKG9mZnNldCA8ICgxIDw8IDE2KSkgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9LFxuICAgIHBvczpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNodW5rX2lkeCB9LFxuICAgIGZpbmFsaXplOmZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuYmxvY2tfbGVuID0gdGhpcy5jaHVua19pZHggLSAyMDtcbiAgICAgIHRoaXMuY2h1bmtfaWR4ID0gMDtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCAweDg0OTVBNkJFKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLmJsb2NrX2xlbik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5vYmpfY291bnRlcik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfNjQpO1xuICAgICAgcmV0dXJuIHRoaXMuY2h1bms7XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAodiwgZmxhZ3MpIHtcbiAgICBmbGFncyA9IGNhbWxfbGlzdF90b19qc19hcnJheShmbGFncyk7XG5cbiAgICB2YXIgbm9fc2hhcmluZyA9IChmbGFncy5pbmRleE9mKDAgLypNYXJzaGFsLk5vX3NoYXJpbmcqLykgIT09IC0xKSxcbiAgICAgICAgY2xvc3VyZXMgPSAgKGZsYWdzLmluZGV4T2YoMSAvKk1hcnNoYWwuQ2xvc3VyZXMqLykgIT09IC0xKTtcbiAgICAvKiBNYXJzaGFsLkNvbXBhdF8zMiBpcyByZWR1bmRhbnQgc2luY2UgaW50ZWdlcnMgYXJlIDMyLWJpdCBhbnl3YXkgKi9cblxuICAgIGlmIChjbG9zdXJlcylcbiAgICAgIGNvbnNvbGUud2FybihcImluIGNhbWxfb3V0cHV0X3ZhbDogZmxhZyBNYXJzaGFsLkNsb3N1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXG4gICAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIgKCk7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGludGVybl9vYmpfdGFibGUgPSBub19zaGFyaW5nID8gbnVsbCA6IG5ldyBNbE9iamVjdFRhYmxlKCk7XG5cbiAgICBmdW5jdGlvbiBtZW1vKHYpIHtcbiAgICAgIGlmIChub19zaGFyaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YXIgZXhpc3Rpbmdfb2Zmc2V0ID0gaW50ZXJuX29ial90YWJsZS5yZWNhbGwodik7XG4gICAgICBpZiAoZXhpc3Rpbmdfb2Zmc2V0KSB7IHdyaXRlci53cml0ZV9zaGFyZWQoZXhpc3Rpbmdfb2Zmc2V0KTsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGVsc2UgeyBpbnRlcm5fb2JqX3RhYmxlLnN0b3JlKHYpOyByZXR1cm4gZmFsc2U7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlcm5fcmVjICh2KSB7XG4gICAgICBpZiAodi5jYW1sX2N1c3RvbSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbmFtZSA9IHYuY2FtbF9jdXN0b207XG4gICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbbmFtZV07XG4gICAgICAgIHZhciBzel8zMl82NCA9IFswLDBdO1xuICAgICAgICBpZighb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZihvcHMuZml4ZWRfbGVuZ3RoID09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE4IC8qY3N0LkNPREVfQ1VTVE9NX0xFTiovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBoZWFkZXJfcG9zID0gd3JpdGVyLnBvcyAoKTtcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zLCAzMiwgc3pfMzJfNjRbMF0pO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgNCwgMzIsIDApOyAvLyB6ZXJvXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA4LCAzMiwgc3pfMzJfNjRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBvbGRfcG9zID0gd3JpdGVyLnBvcygpO1xuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgaWYgKG9wcy5maXhlZF9sZW5ndGggIT0gd3JpdGVyLnBvcygpIC0gb2xkX3BvcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGluY29ycmVjdCBmaXhlZCBzaXplcyBzcGVjaWZpZWQgYnkgXCIgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAyICsgKChzel8zMl82NFswXSArIDMpID4+IDIpO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAyICsgKChzel8zMl82NFsxXSArIDcpID4+IDMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICAgIGlmICh2WzBdID09IDI1MSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChBYnN0cmFjdClcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGNvbnRpbnVhdGlvbiB2YWx1ZVwiKTtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSAmJiBtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIGlmICh2WzBdIDwgMTYgJiYgdi5sZW5ndGggLSAxIDwgOClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8gKyB2WzBdICsgKCh2Lmxlbmd0aCAtIDEpPDw0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwOCAvKmNzdC5DT0RFX0JMT0NLMzIqLywgKCh2Lmxlbmd0aC0xKSA8PCAxMCkgfCB2WzBdKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gdi5sZW5ndGg7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IHYubGVuZ3RoO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxKSBzdGFjay5wdXNoICh2LCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgICBpZighKGNhbWxfaXNfbWxfYnl0ZXMoY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKSkpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogW0J5dGVzLnRdIGNhbm5vdCBzYWZlbHkgYmUgbWFyc2hhbGVkIHdpdGggWy0tZW5hYmxlIHVzZS1qcy1zdHJpbmddXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT0gKHZ8MCkpe1xuICAgICAgICAgIHZhciB0eXBlX29mX3YgPSB0eXBlb2YgdjtcbiAgICAgICAgICBpZih0eXBlX29mX3YgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChcIit0eXBlX29mX3YrXCIpXCIpO1xuICAgICAgICAgIC8vIElmIGEgZmxvYXQgaGFwcGVucyB0byBiZSBhbiBpbnRlZ2VyIGl0IGlzIHNlcmlhbGl6ZWQgYXMgYW4gaW50ZWdlclxuICAgICAgICAgIC8vIChKc19vZl9vY2FtbCBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB0eXBlIG9mIGFuIGludGVnZXIgbnVtYmVyIGlzXG4gICAgICAgICAgLy8gZmxvYXQgb3IgaW50ZWdlci4pIFRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNyYXNoZXMgd2hlblxuICAgICAgICAgIC8vIHVubWFyc2hhbGxpbmcgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bnRpbWUuXG4gICAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgICB2YXIgdCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHYpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MEMgLypjc3QuQ09ERV9ET1VCTEVfTElUVExFKi8pO1xuICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGk8ODsgaSsrKXt3cml0ZXIud3JpdGUoOCx0WzcgLSBpXSl9XG4gICAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gM1xuICAgICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDJcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID49IDAgJiYgdiA8IDB4NDApIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDBYNDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAoMSA8PCA3KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDAgLypjc3QuQ09ERV9JTlQ4Ki8sIHYpO1xuICAgICAgICAgIGVsc2UgaWYgKHYgPj0gLSgxIDw8IDE1KSAmJiB2IDwgKDEgPDwgMTUpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMTYsIDB4MDEgLypjc3QuQ09ERV9JTlQxNiovLCB2KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwMiAvKmNzdC5DT0RFX0lOVDMyKi8sIHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGV4dGVybl9yZWMgKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIHZhciB2ID0gc3RhY2sucG9wICgpO1xuICAgICAgaWYgKGkgKyAxIDwgdi5sZW5ndGgpIHN0YWNrLnB1c2ggKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWMgKHZbaV0pO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgd3JpdGVyLm9ial9jb3VudGVyID0gaW50ZXJuX29ial90YWJsZS5vYmpzLmxlbmd0aDtcbiAgICB3cml0ZXIuZmluYWxpemUoKTtcbiAgICByZXR1cm4gd3JpdGVyLmNodW5rO1xuICB9XG59ICgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfYmxpdF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyIChzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKTtcbiAgaWYgKHQubGVuZ3RoID4gbGVuKSBjYW1sX2ZhaWx3aXRoIChcIk1hcnNoYWwudG9fYnVmZmVyOiBidWZmZXIgb3ZlcmZsb3dcIik7XG4gIGNhbWxfYmxpdF9ieXRlcyh0LCAwLCBzLCBvZnMsIHQubGVuZ3RoKTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfdGFnKGEpe1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKGEpKSByZXR1cm4gMjUyOyAvLyBzdHJpbmdfdGFnXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGEpKSByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIEFycmF5ICYmIGFbMF0gPT09IChhWzBdPj4+MCkgJiYgYVswXSA8PSAyNTUpIHtcbiAgICAvLyBMb29rIGxpa2UgYW4gb2NhbWwgYmxvY2tcbiAgICB2YXIgdGFnID0gYVswXSB8IDA7XG4gICAgLy8gaWdub3JlIGRvdWJsZV9hcnJheV90YWcgYmVjYXVzZSB3ZSBjYW5ub3QgYWNjdXJhdGVseSBzZXRcbiAgICAvLyB0aGlzIHRhZyB3aGVuIHdlIGNyZWF0ZSBhbiBhcnJheSBvZiBmbG9hdC5cbiAgICByZXR1cm4gKHRhZyA9PSAyNTQpPzA6dGFnXG4gIH1cbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIFN0cmluZykgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgTnVtYmVyKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYSAmJiBhLmNhbWxfY3VzdG9tKSByZXR1cm4gMTI1NTsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKGEgJiYgYS5jb21wYXJlKSByZXR1cm4gMTI1NjsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIDEyNDc7IC8vIGxpa2UgY2xvc3VyZV90YWcgKDI0NylcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpe1xuICByZXR1cm4gY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXS5jb21wYXJlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKG51bSwgY3VzdG9tLCBzd2FwLCB0b3RhbCkge1xuICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShjdXN0b20pO1xuICBpZihjb21wKSB7XG4gICAgdmFyIHggPSAoc3dhcCA+IDApP2NvbXAoY3VzdG9tLG51bSx0b3RhbCk6Y29tcChudW0sY3VzdG9tLHRvdGFsKTtcbiAgICBpZih0b3RhbCAmJiB4ICE9IHgpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZigreCAhPSAreCkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZigoeCB8IDApICE9IDApIHJldHVybiAoeCB8IDApOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbCAoY29uc3QsIGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW50X2NvbXBhcmUsIGNhbWxfc3RyaW5nX2NvbXBhcmUsIGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20sIGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvcig7Oykge1xuICAgIGlmICghKHRvdGFsICYmIGEgPT09IGIpKSB7XG4gICAgICB2YXIgdGFnX2EgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19hID09IDI1MCkgeyBhID0gYVsxXTsgY29udGludWUgfVxuXG4gICAgICB2YXIgdGFnX2IgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhiKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19iID09IDI1MCkgeyBiID0gYlsxXTsgY29udGludWUgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmKHRhZ19hICE9PSB0YWdfYikge1xuICAgICAgICBpZih0YWdfYSA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2IgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdfYiA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2EgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0YWdfYSA8IHRhZ19iKT8tMToxO1xuICAgICAgfVxuICAgICAgc3dpdGNoKHRhZ19hKXtcbiAgICAgICAgLy8gMjQ2OiBMYXp5X3RhZyBoYW5kbGVkIGJlbGxvd1xuICAgICAgY2FzZSAyNDc6IC8vIENsb3N1cmVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjQ4OiAvLyBPYmplY3RcbiAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pO1xuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0OTogLy8gSW5maXhcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTA6IC8vIEZvcndhcmQgdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTE6IC8vQWJzdHJhY3RcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUyOiAvLyBPQ2FtbCBieXRlc1xuICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgIHZhciB4ID0gY2FtbF9ieXRlc19jb21wYXJlKGEsIGIpO1xuICAgICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUzOiAvLyBEb3VibGVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5X3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX2FycmF5X3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1NTogLy8gQ3VzdG9tX3RhZ1xuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI0NzogLy8gRnVuY3Rpb25cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTU6IC8vIEN1c3RvbVxuICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgaWYoY29tcCAhPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYikpe1xuICAgICAgICAgIHJldHVybiAoYS5jYW1sX2N1c3RvbTxiLmNhbWxfY3VzdG9tKT8tMToxO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFjb21wKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICB2YXIgeCA9IGNvbXAoYSxiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgdmFyIHggPSBhLmNvbXBhcmUoYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCkgeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMDogLy8gTnVtYmVyXG4gICAgICAgIGEgPSArYTtcbiAgICAgICAgYiA9ICtiO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAxOiAvLyBUaGUgcmVzdFxuICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAvLyAxLiBKYXZhU2NyaXB0IHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAyLiBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvL1xuICAgICAgICAvLyAoMykgd2lsbCByYWlzZSBhIFtUeXBlRXJyb3JdXG4gICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgLy8gKDIpIGFuZCAoMyksIGFmdGVyIGV2ZW50dWFsIGNvZXJjaW9uXG4gICAgICAgIC8vIC0gaWYgYSBhbmQgYiBhcmUgc3RyaW5ncywgYXBwbHkgbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uXG4gICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAvLyAgIGFuZCBhcHBseSBzdGFuZGFyZCBjb21wYXJpc29uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEV4Y2VwdGlvbjogYCE9YCB3aWxsIG5vdCBjb2VyY2UvY29udmVydCBpZiBib3RoIGEgYW5kIGIgYXJlIG9iamVjdHNcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhiKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyMDogLy8gamF2YXNjcmlwdCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICB2YXIgYiA9IGIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDY6IC8vIExhenlfdGFnXG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5XG4gICAgICBkZWZhdWx0OiAvLyBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICBpZihjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIChhLmxlbmd0aCA8IGIubGVuZ3RoKT8tMToxO1xuICAgICAgICBpZiAoYS5sZW5ndGggPiAxKSBzdGFjay5wdXNoKGEsIGIsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKSByZXR1cm4gMDtcbiAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgaWYgKGkgKyAxIDwgYS5sZW5ndGgpIHN0YWNrLnB1c2goYSwgYiwgaSArIDEpO1xuICAgIGEgPSBhW2ldO1xuICAgIGIgPSBiW2ldO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZSAoYSwgYikgeyByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdHJ1ZSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZSAoYSwgYikge1xuICBpZiAoYSA8IGIpIHJldHVybiAoLTEpOyBpZiAoYSA9PSBiKSByZXR1cm4gMDsgcmV0dXJuIDE7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID09IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbm90ZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpICE9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPj0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcnRoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVydGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPiAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDw9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc3RoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDwgMCk7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRm9ybWF0XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZm9ybWF0XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZm9ybWF0IChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID1cbiAgICAgIHsganVzdGlmeTonKycsIHNpZ25zdHlsZTonLScsIGZpbGxlcjonICcsIGFsdGVybmF0ZTpmYWxzZSxcbiAgICAgICAgYmFzZTowLCBzaWduZWRjb252OmZhbHNlLCB3aWR0aDowLCB1cHBlcmNhc2U6ZmFsc2UsXG4gICAgICAgIHNpZ246MSwgcHJlYzotMSwgY29udjonZicgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBjID0gZm10LmNoYXJBdChpKTtcbiAgICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlICctJzpcbiAgICAgIGYuanVzdGlmeSA9ICctJzsgYnJlYWs7XG4gICAgY2FzZSAnKyc6IGNhc2UgJyAnOlxuICAgICAgZi5zaWduc3R5bGUgPSBjOyBicmVhaztcbiAgICBjYXNlICcwJzpcbiAgICAgIGYuZmlsbGVyID0gJzAnOyBicmVhaztcbiAgICBjYXNlICcjJzpcbiAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOlxuICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgZi53aWR0aCA9IDA7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYud2lkdGggPSBmLndpZHRoICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJy4nOlxuICAgICAgZi5wcmVjID0gMDtcbiAgICAgIGkrKztcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi5wcmVjID0gZi5wcmVjICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICBjYXNlICdkJzogY2FzZSAnaSc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgJ3UnOlxuICAgICAgZi5iYXNlID0gMTA7IGJyZWFrO1xuICAgIGNhc2UgJ3gnOlxuICAgICAgZi5iYXNlID0gMTY7IGJyZWFrO1xuICAgIGNhc2UgJ1gnOlxuICAgICAgZi5iYXNlID0gMTY7IGYudXBwZXJjYXNlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnbyc6XG4gICAgICBmLmJhc2UgPSA4OyBicmVhaztcbiAgICBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi5jb252ID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnRSc6IGNhc2UgJ0YnOiBjYXNlICdHJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgIGYuY29udiA9IGMudG9Mb3dlckNhc2UgKCk7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCByYXdidWZmZXIpIHtcbiAgaWYgKGYudXBwZXJjYXNlKSByYXdidWZmZXIgPSByYXdidWZmZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGxlbiA9IHJhd2J1ZmZlci5sZW5ndGg7XG4gIC8qIEFkanVzdCBsZW4gdG8gcmVmbGVjdCBhZGRpdGlvbmFsIGNoYXJzIChzaWduLCBldGMpICovXG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgKGYuc2lnbiA8IDAgfHwgZi5zaWduc3R5bGUgIT0gJy0nKSkgbGVuKys7XG4gIGlmIChmLmFsdGVybmF0ZSkge1xuICAgIGlmIChmLmJhc2UgPT0gOCkgbGVuICs9IDE7XG4gICAgaWYgKGYuYmFzZSA9PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcgJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICBpZiAoZi5zaWduZWRjb252KSB7XG4gICAgaWYgKGYuc2lnbiA8IDApIGJ1ZmZlciArPSAnLSc7XG4gICAgZWxzZSBpZiAoZi5zaWduc3R5bGUgIT0gJy0nKSBidWZmZXIgKz0gZi5zaWduc3R5bGU7XG4gIH1cbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSA4KSBidWZmZXIgKz0gJzAnO1xuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDE2KSBidWZmZXIgKz0gZi51cHBlcmNhc2U/XCIwWFwiOlwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnKycgJiYgZi5maWxsZXIgPT0gJzAnKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnMCc7XG4gIGJ1ZmZlciArPSByYXdidWZmZXI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJy0nKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnICc7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGJ1ZmZlcik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9PSAndW5kZWZpbmVkJylcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiBmYWxzZVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9SZXF1aXJlczogTWxOb2RlRmQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX3dpdGhfYXJnc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKHJvb3QpIHtcbiAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZXhpc3RzU3luYyh0aGlzLm5tKG5hbWUpKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0ZpbGUoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLHttb2RlOm1vZGV9KTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucm1kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5yZWFkZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNEaXJlY3RvcnkoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGIgPSB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICAgIHRoaXMuZnMudW5saW5rU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gYjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZiwgcmFpc2VfdW5peCkge1xuICB2YXIgY29uc3RzID0gcmVxdWlyZSgnY29uc3RhbnRzJyk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGtleSBpbiBmKXtcbiAgICBzd2l0Y2goa2V5KXtcbiAgICBjYXNlIFwicmRvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1JET05MWTsgYnJlYWs7XG4gICAgY2FzZSBcIndyb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19XUk9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJhcHBlbmRcIiAgOlxuICAgICAgcmVzIHw9IGNvbnN0cy5PX1dST05MWSB8IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjcmVhdGVcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0NSRUFUOyAgICBicmVhaztcbiAgICBjYXNlIFwidHJ1bmNhdGVcIiA6IHJlcyB8PSBjb25zdHMuT19UUlVOQzsgICAgYnJlYWs7XG4gICAgY2FzZSBcImV4Y2xcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fRVhDTDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJiaW5hcnlcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTsgICBicmVhaztcbiAgICBjYXNlIFwidGV4dFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19URVhUOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm5vbmJsb2NrXCIgOiByZXMgfD0gY29uc3RzLk9fTk9OQkxPQ0s7IGJyZWFrO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHZhciBmZCA9IHRoaXMuZnMub3BlblN5bmModGhpcy5ubShuYW1lKSwgcmVzKTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJEZXZpY2UgPSB0aGlzLmZzLmxzdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0NoYXJhY3RlckRldmljZSgpO1xuICAgIGYuaXNDaGFyYWN0ZXJEZXZpY2UgPSBpc0NoYXJhY3RlckRldmljZTtcbiAgICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlbmFtZSA9IGZ1bmN0aW9uKG8sIG4sIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJlbmFtZVN5bmModGhpcy5ubShvKSwgdGhpcy5ubShuKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3RhdCA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmxzdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMubHN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN5bWxpbmsgPSBmdW5jdGlvbih0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMuc3ltbGlua1N5bmModGhpcy5ubSh0YXJnZXQpLCB0aGlzLm5tKHBhdGgpLCB0b19kaXIgPyAnZGlyJyA6ICdmaWxlJyk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCAndXRmOCcpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhsaW5rKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLm9wZW5kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJhaXNlX25vZGVqc19lcnJvciA9IGZ1bmN0aW9uKGVyciwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpIHtcbiAgICB2YXIgYXJncyA9IG1ha2VfdW5peF9lcnJfYXJncyhlcnIuY29kZSwgZXJyLnN5c2NhbGwsIGVyci5wYXRoLCBlcnIuZXJybm8pO1xuICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0c19mcm9tX2pzID0gZnVuY3Rpb24oanNfc3RhdHMpIHtcbiAgLyogPT09VW5peC5maWxlX2tpbmQ9PT1cbiAgICogdHlwZSBmaWxlX2tpbmQgPVxuICAgKiAgICAgU19SRUcgICAgICAgICAgICAgICAgICAgICAgICgqKiBSZWd1bGFyIGZpbGUgKilcbiAgICogICB8IFNfRElSICAgICAgICAgICAgICAgICAgICAgICAoKiogRGlyZWN0b3J5ICopXG4gICAqICAgfCBTX0NIUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIENoYXJhY3RlciBkZXZpY2UgKilcbiAgICogICB8IFNfQkxLICAgICAgICAgICAgICAgICAgICAgICAoKiogQmxvY2sgZGV2aWNlICopXG4gICAqICAgfCBTX0xOSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFN5bWJvbGljIGxpbmsgKilcbiAgICogICB8IFNfRklGTyAgICAgICAgICAgICAgICAgICAgICAoKiogTmFtZWQgcGlwZSAqKVxuICAgKiAgIHwgU19TT0NLICAgICAgICAgICAgICAgICAgICAgICgqKiBTb2NrZXQgKilcbiAgICovXG4gIHZhciBmaWxlX2tpbmQ7XG4gIGlmIChqc19zdGF0cy5pc0ZpbGUoKSkge1xuICAgIGZpbGVfa2luZCA9IDA7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVfa2luZCA9IDE7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDI7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNCbG9ja0RldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMztcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgZmlsZV9raW5kID0gNDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0ZJRk8oKSkge1xuICAgIGZpbGVfa2luZCA9IDU7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTb2NrZXQoKSkge1xuICAgIGZpbGVfa2luZCA9IDY7XG4gIH1cbiAgLyogPT09VW5peC5zdGF0cz09PVxuICAgKiB0eXBlIHN0YXRzID1cbiAgICogIHsgc3RfZGV2IDogaW50OyAgICAgICAgICAgICAgICgqKiBEZXZpY2UgbnVtYmVyICopXG4gICAqICAgIHN0X2lubyA6IGludDsgICAgICAgICAgICAgICAoKiogSW5vZGUgbnVtYmVyICopXG4gICAqICAgIHN0X2tpbmQgOiBmaWxlX2tpbmQ7ICAgICAgICAoKiogS2luZCBvZiB0aGUgZmlsZSAqKVxuICAgKiAgICBzdF9wZXJtIDogZmlsZV9wZXJtOyAgICAgICAgKCoqIEFjY2VzcyByaWdodHMgKilcbiAgICogICAgc3RfbmxpbmsgOiBpbnQ7ICAgICAgICAgICAgICgqKiBOdW1iZXIgb2YgbGlua3MgKilcbiAgICogICAgc3RfdWlkIDogaW50OyAgICAgICAgICAgICAgICgqKiBVc2VyIGlkIG9mIHRoZSBvd25lciAqKVxuICAgKiAgICBzdF9naWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAgKilcbiAgICogICAgc3RfcmRldiA6IGludDsgICAgICAgICAgICAgICgqKiBEZXZpY2UgSUQgKGlmIHNwZWNpYWwgZmlsZSkgKilcbiAgICogICAgc3Rfc2l6ZSA6IGludDsgICAgICAgICAgICAgICgqKiBTaXplIGluIGJ5dGVzICopXG4gICAqICAgIHN0X2F0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBhY2Nlc3MgdGltZSAqKVxuICAgKiAgICBzdF9tdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUgKilcbiAgICogICAgc3RfY3RpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IHN0YXR1cyBjaGFuZ2UgdGltZSAqKVxuICAgKiAgfVxuICAgKi9cbiAgcmV0dXJuIEJMT0NLKFxuICAgIDAsXG4gICAganNfc3RhdHMuZGV2LFxuICAgIGpzX3N0YXRzLmlubyxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAganNfc3RhdHMuc2l6ZSxcbiAgICBqc19zdGF0cy5hdGltZU1zLFxuICAgIGpzX3N0YXRzLm10aW1lTXMsXG4gICAganNfc3RhdHMuY3RpbWVNc1xuICApO1xufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKCkge1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9SZXF1aXJlczogTWxGaWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZywgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9ieXRlc19zZXQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbE5vZGVGZChmZCwgZmxhZ3Mpe1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5mZCA9IGZkO1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbE5vZGVGZC5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxOb2RlRmQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRmQ7XG5cbk1sTm9kZUZkLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5mdHJ1bmNhdGVTeW5jKHRoaXMuZmQsbGVufDApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpLnNpemU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZiwgYnVmX29mZnNldCwgbGVuKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLmZzLndyaXRlU3luYyh0aGlzLmZkLCBidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiAwO1xufVxuTWxOb2RlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYSxidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgIGVsc2VcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gICAgcmV0dXJuIHJlYWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmNsb3NlU3luYyh0aGlzLmZkKTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRmQoKXtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3Mpe1xuICBpZihmbGFncy5uYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbiAgICAgIHZhciBmZDIgPSBmcy5vcGVuU3luYyhmbGFncy5uYW1lLCBcInJzXCIpO1xuICAgICAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZDIsIGZsYWdzKTtcbiAgICB9IGNhdGNoKGUpIHsgIH1cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIER1bW15IGZpbGVzeXN0ZW1cblxuLy9Qcm92aWRlczogY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKXtcbiAgcmV0dXJuIChuYW1lLnNsaWNlKC0xKSAhPT0gXCIvXCIpID8gKG5hbWUgKyBcIi9cIikgOiBuYW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuaWYoZnNfbm9kZV9zdXBwb3J0ZWQgKCkgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QpXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZCgpLnJlcGxhY2UoL1xcXFwvZywnLycpO1xuZWxzZVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9ICBcIi9zdGF0aWNcIjtcbmNhbWxfY3VycmVudF9kaXIgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKGNhbWxfY3VycmVudF9kaXIpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9yb290XG4vL1JlcXVpcmVzOiBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX2dldF9yb290KHBhdGgpe1xuICB2YXIgeCA9IHBhdGhfaXNfYWJzb2x1dGUocGF0aCk7XG4gIGlmICgheCkgcmV0dXJuO1xuICByZXR1cm4geFswXSArIFwiL1wifVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jvb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ2V0X3Jvb3QsIGNhbWxfY3VycmVudF9kaXIsIGNhbWxfZmFpbHdpdGhcbnZhciBjYW1sX3Jvb3QgPSBjYW1sX2dldF9yb290KGNhbWxfY3VycmVudF9kaXIpIHx8IGNhbWxfZmFpbHdpdGgoXCJ1bmFibGUgdG8gY29tcHV0ZSBjYW1sX3Jvb3RcIik7XG5cblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKXsgIH1cblxuLy9Qcm92aWRlczogcGF0aF9pc19hYnNvbHV0ZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpIHtcbiAgZnVuY3Rpb24gcG9zaXgocGF0aCkge1xuICAgIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSByZXR1cm4gW1wiXCIsIHBhdGguc3Vic3RyaW5nKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9IC9eKFthLXpBLVpdOnxbXFxcXC9dezJ9W15cXFxcL10rW1xcXFwvXStbXlxcXFwvXSspPyhbXFxcXC9dKT8oW1xcc1xcU10qPykkLztcbiAgICB2YXIgcmVzdWx0ID0gc3BsaXREZXZpY2VSZS5leGVjKHBhdGgpO1xuICAgIHZhciBkZXZpY2UgPSByZXN1bHRbMV0gfHwgJyc7XG4gICAgdmFyIGlzVW5jID0gQm9vbGVhbihkZXZpY2UgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gJzonKTtcblxuICAgIC8vIFVOQyBwYXRocyBhcmUgYWx3YXlzIGFic29sdXRlXG4gICAgaWYgKEJvb2xlYW4ocmVzdWx0WzJdIHx8IGlzVW5jKSkge1xuICAgICAgdmFyIHJvb3QgPSAocmVzdWx0WzFdIHx8ICcnKTtcbiAgICAgIHZhciBzZXAgPSAocmVzdWx0WzJdIHx8ICcnKTtcbiAgICAgIHJldHVybiBbcm9vdCwgcGF0aC5zdWJzdHJpbmcocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luMzIgOiBwb3NpeDtcbiAgfVxuICBlbHNlIHJldHVybiBwb3NpeFxufVxudmFyIHBhdGhfaXNfYWJzb2x1dGUgPSBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX3BhdGhcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX21ha2VfcGF0aCAobmFtZSkge1xuICBuYW1lPWNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiggIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkgKVxuICAgIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdChcIi9cIik7XG4gIHZhciBuY29tcCA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGk8Y29tcC5sZW5ndGg7IGkrKyl7XG4gICAgc3dpdGNoKGNvbXBbaV0pe1xuICAgIGNhc2UgXCIuLlwiOiBpZihuY29tcC5sZW5ndGg+MSkgbmNvbXAucG9wKCk7IGJyZWFrO1xuICAgIGNhc2UgXCIuXCI6IGJyZWFrO1xuICAgIGNhc2UgXCJcIjogYnJlYWs7XG4gICAgZGVmYXVsdDogbmNvbXAucHVzaChjb21wW2ldKTticmVha1xuICAgIH1cbiAgfVxuICBuY29tcC51bnNoaWZ0KGNvbXAwWzBdKTtcbiAgbmNvbXAub3JpZyA9IG5hbWU7XG4gIHJldHVybiBuY29tcDtcbn1cblxuLy9Qcm92aWRlczpqc29vX21vdW50X3BvaW50XG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIE1sTm9kZURldmljZSwgY2FtbF9yb290LCBmc19ub2RlX3N1cHBvcnRlZFxudmFyIGpzb29fbW91bnRfcG9pbnQgPSBbXVxuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShjYW1sX3Jvb3QpfSk7XG59IGVsc2Uge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn1cbmpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpcIi9zdGF0aWMvXCIsIGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKFwiL3N0YXRpYy9cIil9KTtcblxuLy9Qcm92aWRlczpjYW1sX2xpc3RfbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpe1xuICB2YXIgcHJldiA9IDBcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspe1xuICAgIHZhciBvbGQgPSBwcmV2O1xuICAgIHByZXYgPSBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhqc29vX21vdW50X3BvaW50W2ldLnBhdGgpLCBvbGRdXG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IHBhdGguam9pbihcIi9cIik7XG4gIHZhciBuYW1lX3NsYXNoID0gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKTtcbiAgdmFyIHJlcztcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbSA9IGpzb29fbW91bnRfcG9pbnRbaV07XG4gICAgaWYobmFtZV9zbGFzaC5zZWFyY2gobS5wYXRoKSA9PSAwXG4gICAgICAgJiYgKCFyZXMgfHwgcmVzLnBhdGgubGVuZ3RoIDwgbS5wYXRoLmxlbmd0aCkpXG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICB9XG4gIGlmKCAhcmVzICYmIGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICB2YXIgcm9vdCA9IGNhbWxfZ2V0X3Jvb3QobmFtZSk7XG4gICAgaWYgKHJvb3QgJiYgcm9vdC5tYXRjaCgvXlthLXpBLVpdOlxcLyQvKSl7XG4gICAgICB2YXIgbSA9IHtwYXRoOnJvb3QsZGV2aWNlOm5ldyBNbE5vZGVEZXZpY2Uocm9vdCl9O1xuICAgICAganNvb19tb3VudF9wb2ludC5wdXNoKG0pO1xuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgICB9XG4gIH1cbiAgaWYoIHJlcyApIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsZil7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOm5hbWUsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UobmFtZSxmKX0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAgdmFyIGlkeCA9IC0xO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKylcbiAgICBpZihqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT0gbmFtZSkgaWR4ID0gaTtcbiAgaWYoaWR4ID4gLTEpIGpzb29fbW91bnRfcG9pbnQuc3BsaWNlKGlkeCwxKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0Y3dkXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfY3VycmVudF9kaXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jaGRpclxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIGlmKHJvb3QucmVzdCkgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhkaXIpKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9hX2RpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2FfZGlyKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2ZpbGVfZXhpc3RzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfZmlsZV9leGlzdHMgKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfYV9kaXIsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5yZWFkZGlyKHJvb3QucmVzdCk7XG4gIHZhciBsID0gbmV3IEFycmF5KGEubGVuZ3RoICsgMSk7XG4gIGxbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKylcbiAgICBsW2krMV0gPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbW92ZShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIG9rID0gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCk7XG4gIGlmKG9rID09IDApIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbmFtZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbmFtZShvLG4pe1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYob19yb290LmRldmljZSAhPSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IGNhbm5vdCBtb3ZlIGZpbGUgYmV0d2VlbiB0d28gZmlsZXN5c3RlbVwiKTtcbiAgaWYoIW9fcm9vdC5kZXZpY2UucmVuYW1lKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IG5vIGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19ta2RpcihuYW1lLCBwZXJtKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2UubWtkaXIocm9vdC5yZXN0LHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub3RfYV9kaXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3JtZGlyKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ybWRpcihyb290LnJlc3QpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZSh2ZmQsIGtpbmQsIGxheW91dCwgc2hhcmVkLCBkaW1zLCBwb3MpIHtcbiAgLy8gdmFyIGRhdGEgPSBjYW1sX3N5c19mZHNbdmZkXTtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfYmFfbWFwX2ZpbGUgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX21hcF9maWxlXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlKGFyZ3YsYXJnbil7XG4gIHJldHVybiBjYW1sX2JhX21hcF9maWxlKGFyZ3ZbMF0sYXJndlsxXSxhcmd2WzJdLGFyZ3ZbM10sYXJndls0XSxhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsY29udGVudCl7XG4gIGlmKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSlcbiAgICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KTtcbiAgZWxzZSB7XG4gICAgaWYoIWdsb2JhbFRoaXMuY2FtbF9mc190bXApIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wLnB1c2goe25hbWU6bmFtZSxjb250ZW50OmNvbnRlbnR9KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mc19pbml0XG4vL1JlcXVpcmVzOiBqc29vX2NyZWF0ZV9maWxlXG5mdW5jdGlvbiBjYW1sX2ZzX2luaXQgKCl7XG4gIHZhciB0bXA9Z2xvYmFsVGhpcy5jYW1sX2ZzX3RtcFxuICBpZih0bXApe1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0bXAubGVuZ3RoOyBpKyspe1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSx0bXBbaV0uY29udGVudCk7XG4gICAgfVxuICB9XG4gIGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSA9IGpzb29fY3JlYXRlX2ZpbGU7XG4gIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZighIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKSBjYW1sX2ZhaWx3aXRoKFwiY2Fubm90IHJlZ2lzdGVyIGZpbGVcIik7XG4gIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKHJvb3QucmVzdCxjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24ganNvb19jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpO1xuICB2YXIgY29udGVudCA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY29udGVudCk7XG4gIHJldHVybiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVhZF9maWxlX2NvbnRlbnRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVhZF9maWxlX2NvbnRlbnQgKG5hbWUpIHtcbiAgdmFyIG5hbWUgPSAodHlwZW9mIG5hbWUgPT0gXCJzdHJpbmdcIik/Y2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTpuYW1lO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3Qse3Jkb25seToxfSk7XG4gICAgdmFyIGxlbiAgPSBmaWxlLmxlbmd0aCgpO1xuICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIGZpbGUucmVhZCgwLGJ1ZiwwLGxlbik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGJ1ZilcbiAgfVxuICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5ICgpIHtcbiAgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSAoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKGNhbWxfdW5peF9nZXR0aW1lb2ZkYXkgKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ210aW1lXG4vL0FsaWFzOiB1bml4X2dtdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X2dtdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKERhdGUuVVRDKGQuZ2V0VVRDRnVsbFllYXIoKSwgMCwgMSkpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFVUQ1NlY29uZHMoKSwgZC5nZXRVVENNaW51dGVzKCksIGQuZ2V0VVRDSG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0VVRDRGF0ZSgpLCBkLmdldFVUQ01vbnRoKCksIGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RheSgpLCBkb3ksXG4gICAgICAgICAgICAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8pXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lICh0KSB7XG4gIHZhciBkID0gbmV3IERhdGUgKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSAobmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICB2YXIgamFuID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgdmFyIGp1bCA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgNiwgMSk7XG4gIHZhciBzdGRUaW1lem9uZU9mZnNldCA9IE1hdGgubWF4KGphbi5nZXRUaW1lem9uZU9mZnNldCgpLCBqdWwuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFNlY29uZHMoKSwgZC5nZXRNaW51dGVzKCksIGQuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF0ZSgpLCBkLmdldE1vbnRoKCksIGQuZ2V0RnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldERheSgpLCBkb3ksXG4gICAgICAgICAgICAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHwgMCAvKiBkYXlsaWdodCBzYXZpbmdzIHRpbWUgIGZpZWxkLiAqLylcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X21rdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvY2FsdGltZVxuLy9BbGlhczogdW5peF9ta3RpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta3RpbWUodG0pe1xuICB2YXIgZCA9IChuZXcgRGF0ZSh0bVs2XSsxOTAwLHRtWzVdLHRtWzRdLHRtWzNdLHRtWzJdLHRtWzFdKSkuZ2V0VGltZSgpO1xuICB2YXIgdCA9IE1hdGguZmxvb3IoZCAvIDEwMDApO1xuICB2YXIgdG0yID0gY2FtbF91bml4X2xvY2FsdGltZSh0KTtcbiAgcmV0dXJuIEJMT0NLKDAsdCx0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtyZXR1cm4geDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuICAgIHJldHVybiB0dHkuaXNhdHR5KGZpbGVEZXNjcmlwdG9yKT8xOjA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaXNhdHR5XG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLCBcIkVBQ0NFU1wiLCBcIkVBR0FJTlwiLCBcIkVCQURGXCIsIFwiRUJVU1lcIiwgXCJFQ0hJTERcIiwgXCJFREVBRExLXCIsIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLCBcIkVGQVVMVFwiLCBcIkVGQklHXCIsIFwiRUlOVFJcIiwgXCJFSU5WQUxcIiwgXCJFSU9cIiwgXCJFSVNESVJcIiwgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIiwgXCJFTkFNRVRPT0xPTkdcIiwgXCJFTkZJTEVcIiwgXCJFTk9ERVZcIiwgXCJFTk9FTlRcIiwgXCJFTk9FWEVDXCIsIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsIFwiRU5PU1BDXCIsIFwiRU5PU1lTXCIsIFwiRU5PVERJUlwiLCBcIkVOT1RFTVBUWVwiLCBcIkVOT1RUWVwiLCBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIiwgXCJFUElQRVwiLCBcIkVSQU5HRVwiLCBcIkVST0ZTXCIsIFwiRVNQSVBFXCIsIFwiRVNSQ0hcIiwgXCJFWERFVlwiLCBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIiwgXCJFQUxSRUFEWVwiLCBcIkVOT1RTT0NLXCIsIFwiRURFU1RBRERSUkVRXCIsIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsIFwiRU5PUFJPVE9PUFRcIiwgXCJFUFJPVE9OT1NVUFBPUlRcIiwgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsIFwiRVBGTk9TVVBQT1JUXCIsIFwiRUFGTk9TVVBQT1JUXCIsIFwiRUFERFJJTlVTRVwiLCBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLCBcIkVORVRVTlJFQUNIXCIsIFwiRU5FVFJFU0VUXCIsIFwiRUNPTk5BQk9SVEVEXCIsIFwiRUNPTk5SRVNFVFwiLCBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsIFwiRU5PVENPTk5cIiwgXCJFU0hVVERPV05cIiwgXCJFVE9PTUFOWVJFRlNcIiwgXCJFVElNRURPVVRcIiwgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIiwgXCJFSE9TVFVOUkVBQ0hcIiwgXCJFTE9PUFwiLCBcIkVPVkVSRkxPV1wiXG5dO1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5XG4gICAgfVxuICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIHZhcmlhbnRzLCBmYWxsYmFjayB0byBFVU5LTk9XTkVSUihpbnQpXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIGVycm5vKTtcbiAgfVxuICB2YXIgYXJncyA9IFtcbiAgICB2YXJpYW50LFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHN5c2NhbGwgfHwgXCJcIiksXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aCB8fCBcIlwiKVxuICBdO1xuICByZXR1cm4gYXJncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3N0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X3N0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgciA9IGNhbWxfdW5peF9zdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xzdGF0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbHN0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByID0gY2FtbF91bml4X2xzdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3ltbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3N5bWxpbmsodG9fZGlyLCBzcmMsIGRzdCkge1xuICB2YXIgc3JjX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShzcmMpO1xuICB2YXIgZHN0X3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkc3QpO1xuICBpZihzcmNfcm9vdC5kZXZpY2UgIT0gZHN0X3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3ltbGluazogY2Fubm90IHN5bWxpbmsgYmV0d2VlbiB0d28gZmlsZXN5c3RlbXNcIik7XG4gIGlmICghc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmsodG9fZGlyLCBzcmNfcm9vdC5yZXN0LCBkc3Rfcm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3JlYWRsaW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZGxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnJlYWRsaW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9yZWFkbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5yZWFkbGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF91bmxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3VubGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3VubGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudW5saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91bmxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0dWlkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dWlkKHVuaXQpIHtcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQpe1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKCk7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHB3dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldHB3dWlkKHVuaXQpIHtcbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2hhc19zeW1saW5rXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9BbGlhczogdW5peF9oYXNfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X2hhc19zeW1saW5rKHVuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCk/MTowXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9vcGVuZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UocGF0aCk7XG4gIGlmICghcm9vdC5kZXZpY2Uub3BlbmRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfb3BlbmRpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHZhciBkaXJfaGFuZGxlID0gcm9vdC5kZXZpY2Uub3BlbmRpcihyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiB7IHBvaW50ZXIgOiBkaXJfaGFuZGxlLCBwYXRoOiBwYXRoIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgICAgZW50cnkgPSBkaXJfaGFuZGxlLnBvaW50ZXIucmVhZFN5bmMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwicmVhZGRpclwiLCBkaXJfaGFuZGxlLnBhdGgpKTtcbiAgfVxuICBpZiAoZW50cnkgPT09IG51bGwpIHtcbiAgICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhlbnRyeS5uYW1lKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vQWxpYXM6IHVuaXhfY2xvc2VkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKSB7XG4gIHRyeSB7XG4gICAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIGRpcl9oYW5kbGUucGF0aCkpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZXdpbmRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpciwgY2FtbF91bml4X29wZW5kaXJcbi8vQWxpYXM6IHVuaXhfcmV3aW5kZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmV3aW5kZGlyKGRpcl9oYW5kbGUpIHtcbiAgY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xuICB2YXIgbmV3X2Rpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihkaXJfaGFuZGxlLnBhdGgpO1xuICBkaXJfaGFuZGxlLnBvaW50ZXIgPSBuZXdfZGlyX2hhbmRsZS5wb2ludGVyO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRmaXJzdFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfb3BlbmRpciwgY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kZmlyc3RcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kZmlyc3QocGF0aCkge1xuICAvLyBUaGUgV2luZG93cyBjb2RlIGFkZHMgdGhpcyBnbG9iIHRvIHRoZSBwYXRoLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdFxuICB2YXIgcGF0aF9qcyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBhdGgpO1xuICBwYXRoX2pzID0gcGF0aF9qcy5yZXBsYWNlKC8oXnxbXFxcXFxcL10pXFwqXFwuXFwqJC8sIFwiXCIpO1xuICBwYXRoID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aF9qcyk7XG4gIC8vICouKiBpcyBub3cgc3RyaXBwZWRcbiAgdmFyIGRpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKTtcbiAgdmFyIGZpcnN0X2VudHJ5ID0gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG4gIC8vIFRoZSBXaW5kb3dzIGJpbmRpbmdzIHR5cGUgZGlyX2hhbmRsZSBhcyBhbiBgaW50YCBidXQgaXQncyBub3QgaW4gSlNcbiAgcmV0dXJuIFswLCBmaXJzdF9lbnRyeSwgZGlyX2hhbmRsZV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kbmV4dFxuLy9SZXF1aXJlczogY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kbmV4dFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRuZXh0KGRpcl9oYW5kbGUpIHtcbiAgcmV0dXJuIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZGNsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vQWxpYXM6IHdpbl9maW5kY2xvc2VcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kY2xvc2UoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nICgpIHtyZXR1cm4gMDt9XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZXNcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJnc1xuZnVuY3Rpb24gTWxGYWtlRGV2aWNlIChyb290LCBmKSB7XG4gIHRoaXMuY29udGVudD17fTtcbiAgdGhpcy5yb290ID0gcm9vdDtcbiAgdGhpcy5sb29rdXBGdW4gPSBmO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuY3JlYXRlX2Rpcl9pZl9uZWVkZWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gIHZhciByZXMgPSBcIlwiO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgY29tcC5sZW5ndGggLSAxOyBpKyspe1xuICAgIHJlcyArPSBjb21wW2ldICsgXCIvXCI7XG4gICAgaWYodGhpcy5jb250ZW50W3Jlc10pIGNvbnRpbnVlO1xuICAgIHRoaXMuY29udGVudFtyZXNdID0gU3ltYm9sKFwiZGlyZWN0b3J5XCIpO1xuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnNsYXNoID0gZnVuY3Rpb24obmFtZSl7XG4gIHJldHVybiAvXFwvJC8udGVzdChuYW1lKT9uYW1lOihuYW1lICsgXCIvXCIpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5sb29rdXAgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICB2YXIgcmVzID0gdGhpcy5sb29rdXBGdW4oY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnJvb3QpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpKTtcbiAgICBpZihyZXMgIT09IDApIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV09bmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcocmVzWzFdKSk7XG4gICAgfVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgLy8gVGhlIHJvb3Qgb2YgdGhlIGRldmljZSBleGlzdHNcbiAgaWYobmFtZSA9PSBcIlwiKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBkaXJlY3RvcnkgZXhpc3RzXG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBmaWxlIGV4aXN0c1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkgJiYgIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm1rZGlyID0gZnVuY3Rpb24obmFtZSxtb2RlLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUVYSVNUXCIsIFwibWtkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogRmlsZSBleGlzdHNcIik7XG4gICAgfVxuICB9XG4gIHZhciBwYXJlbnQgPSAvXiguKilcXC9bXi9dKy8uZXhlYyhuYW1lKTtcbiAgcGFyZW50ID0gKHBhcmVudCAmJiBwYXJlbnRbMV0pIHx8ICcnO1xuICBpZighdGhpcy5leGlzdHMocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICBpZihuLm1hdGNoKHIpKSB7XG4gICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URU1QVFlcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCI6IERpcmVjdG9yeSBub3QgZW1wdHlcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJlYWRkaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgfVxuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICB2YXIgc2VlbiA9IHt9XG4gIHZhciBhID0gW107XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICB2YXIgbSA9IG4ubWF0Y2gocik7XG4gICAgaWYobSAmJiAhc2VlblttWzFdXSkge3NlZW5bbVsxXV0gPSB0cnVlOyBhLnB1c2gobVsxXSl9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcblxuICB2YXIgYSA9IHRoaXMucmVhZGRpcihuYW1lKTtcbiAgdmFyIGMgPSBmYWxzZTtcbiAgdmFyIGkgPSAwO1xuICByZXR1cm4geyByZWFkU3luYyA6IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGMpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihpID09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZW50cnkgPSBhW2ldO1xuICAgIGkrKztcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9XG4gIH0pXG4gICAgLCBjbG9zZVN5bmM6IChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoYykge1xuICAgICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjID0gdHJ1ZTtcbiAgICAgIGEgPSBbXTtcbiAgICB9KVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYobmFtZSA9PSBcIlwiKSAgcmV0dXJuIHRydWU7XG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG9rID0gdGhpcy5jb250ZW50W25hbWVdP3RydWU6ZmFsc2U7XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIHJldHVybiBvaztcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYpIHtcbiAgdmFyIGZpbGU7XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGlzIGEgZGlyZWN0b3J5XCIpO1xuICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICBpZihmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKCk7XG4gIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlICh0aGlzLm5tKG5hbWUpKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sRmFrZUZkKHRoaXMubm0obmFtZSksIGZpbGUsIGYpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIHZhciBmaWxlO1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWdpc3Rlcj0gZnVuY3Rpb24gKG5hbWUsY29udGVudCl7XG4gIHZhciBmaWxlO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV0pIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gIGlmKGNhbWxfaXNfbWxfYnl0ZXMoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNvbnRlbnQpO1xuICBpZihjYW1sX2lzX21sX3N0cmluZyhjb250ZW50KSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9hcnJheShjb250ZW50KSk7XG4gIGVsc2UgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudC50b1N0cmluZykge1xuICAgIHZhciBieXRlcyA9IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSkpO1xuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShieXRlcyk7XG4gIH1cbiAgaWYoZmlsZSl7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICB9XG4gIGVsc2UgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogcmVnaXN0ZXJpbmcgZmlsZSB3aXRoIGludmFsaWQgY29udGVudCB0eXBlXCIpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IE1sRmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbmZ1bmN0aW9uIE1sRmFrZUZpbGUoY29udGVudCl7XG4gIHRoaXMuZGF0YSA9IGNvbnRlbnQ7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZSA9IG5ldyBNbEZpbGUgKCk7XG5NbEZha2VGaWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZUZpbGVcbk1sRmFrZUZpbGUucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdmFyIG9sZCA9IHRoaXMuZGF0YTtcbiAgdGhpcy5kYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICBjYW1sX2JsaXRfYnl0ZXMob2xkLCAwLCB0aGlzLmRhdGEsIDAsIGxlbik7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aCh0aGlzLmRhdGEpO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgdmFyIG5ld19zdHIgPSBjYW1sX2NyZWF0ZV9ieXRlcyhvZmZzZXQgKyBsZW4pO1xuICAgIHZhciBvbGRfZGF0YSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGRfZGF0YSwgMCwgdGhpcy5kYXRhLCAwLCBjbGVuKTtcbiAgfVxuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBwb3MsIHRoaXMuZGF0YSwgb2Zmc2V0LCBsZW4pO1xuICByZXR1cm4gMFxufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgaWYob2Zmc2V0ICsgbGVuID49IGNsZW4pIHtcbiAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICB9XG4gIGlmKGxlbikge1xuICAgIHZhciBkYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICBidWYuc2V0KGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoZGF0YSksIHBvcyk7XG4gIH1cbiAgcmV0dXJuIGxlblxufVxuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkX291dChmZCxmbGFncykge1xuICBNbEZha2VGaWxlLmNhbGwodGhpcywgY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICB0aGlzLmxvZyA9IChmdW5jdGlvbiAocykgeyByZXR1cm4gMCB9KTtcbiAgaWYoZmQgPT0gMSAmJiB0eXBlb2YgY29uc29sZS5sb2cgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gIGVsc2UgaWYoZmQgPT0gMiAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmVycm9yO1xuICBlbHNlIGlmKHR5cGVvZiBjb25zb2xlLmxvZyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmxvZ1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMCB9XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9mZnNldCxidWYscG9zLGxlbikge1xuICBpZih0aGlzLmxvZykge1xuICAgIGlmKGxlbiA+IDBcbiAgICAgICAmJiBwb3MgPj0gMFxuICAgICAgICYmIHBvcytsZW4gPD0gYnVmLmxlbmd0aFxuICAgICAgICYmIGJ1Zltwb3MrbGVuLTFdID09IDEwKVxuICAgICAgbGVuIC0tO1xuICAgIC8vIERvIG5vdCBvdXRwdXQgdGhlIGxhc3QgXFxuIGlmIHByZXNlbnRcbiAgICAvLyBhcyBjb25zb2xlIGxvZ2dpbmcgZGlzcGxheSBhIG5ld2xpbmUgYXQgdGhlIGVuZFxuICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIHBvcywgc3JjLCAwLCBsZW4pO1xuICAgIHRoaXMubG9nKHNyYy50b1V0ZjE2KCkpO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMuZmQgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBhbHJlYWR5IGNsb3NlZFwiKTtcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5mZCAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGlzIHdyaXRlIG9ubHlcIik7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxvZyA9IHVuZGVmaW5lZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGZFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkKG5hbWUsIGZpbGUsZmxhZ3MpIHtcbiAgdGhpcy5maWxlID0gZmlsZTtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuXG5NbEZha2VGZC5wcm90b3R5cGUuZXJyX2Nsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5uYW1lICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSBjbG9zZWRcIik7XG59XG5NbEZha2VGZC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGggKClcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAob2Zmc2V0LGJ1Zixwb3MsbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS53cml0ZShvZmZzZXQsYnVmLHBvcyxsZW4pXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAob2Zmc2V0LCBidWYsIHBvcywgbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbilcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZmlsZSA9IHVuZGVmaW5lZDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKHMuY2hhckNvZGVBdCgyICogaSkgfCAocy5jaGFyQ29kZUF0KDIgKiBpICsgMSkgPDwgOCkpIDw8IDE2ID4+IDE2O1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSByZXR1cm4gLWJhc2UtMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKXtcbiAgICAgIGlmIChsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9PSAwKVxuICAgICAgICByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgYyA9IDI1NjtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIFJlYWQgbmV4dCBpbnB1dCBjaGFyICovXG4gICAgICBjID0gYnVmZmVyW2xleGJ1ZltsZXhfY3Vycl9wb3NdXTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdICsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qIE5ldyBsZXhlciBlbmdpbmUsIHdpdGggbWVtb3J5IG9mIHBvc2l0aW9ucyAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl9tZW0ocywgaSwgbWVtLCBjdXJyX3Bvcykge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChkc3QgPT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gY3Vycl9wb3M7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9sZXhfcnVuX3RhZyhzLCBpLCBtZW0pIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybiA7XG4gICAgdmFyIHNyYyA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChzcmMgPT0gMHhmZilcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSAtMTtcbiAgICBlbHNlXG4gICAgICBtZW0gW2RzdCArIDFdID0gbWVtIFtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX25ld19sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfbWVtID0gMTA7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcbiAgdmFyIGxleF9iYXNlX2NvZGUgPSA2O1xuICB2YXIgbGV4X2JhY2t0cmtfY29kZSA9IDc7XG4gIHZhciBsZXhfZGVmYXVsdF9jb2RlID0gODtcbiAgdmFyIGxleF90cmFuc19jb2RlID0gOTtcbiAgdmFyIGxleF9jaGVja19jb2RlID0gMTA7XG4gIHZhciBsZXhfY29kZSA9IDExO1xuXG4gIGlmICghdGJsLmxleF9kZWZhdWx0KSB7XG4gICAgdGJsLmxleF9iYXNlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV0pO1xuICAgIHRibC5sZXhfYmFja3RyayA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF0pO1xuICB9XG4gIGlmICghdGJsLmxleF9kZWZhdWx0X2NvZGUpIHtcbiAgICB0YmwubGV4X2Jhc2VfY29kZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VfY29kZV0pO1xuICAgIHRibC5sZXhfYmFja3Rya19jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0X2NvZGVdKTtcbiAgfVxuICBpZiAodGJsLmxleF9jb2RlID09IG51bGwpIHRibC5sZXhfY29kZSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcodGJsW2xleF9jb2RlXSk7XG5cbiAgdmFyIGMsIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMobGV4YnVmW2xleF9idWZmZXJdKTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvcig7Oykge1xuICAgIC8qIExvb2t1cCBiYXNlIGFkZHJlc3Mgb3IgYWN0aW9uIG51bWJlciBmb3IgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBiYXNlID0gdGJsLmxleF9iYXNlW3N0YXRlXTtcbiAgICBpZiAoYmFzZSA8IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2Jhc2VfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgcmV0dXJuIC1iYXNlLTE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICB2YXIgcHN0YXRlID0gc3RhdGUgO1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSwgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PSBwc3RhdGUpXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfdHJhbnNfY29kZVtiYXNlX2NvZGUgKyBjXTtcbiAgICAgIGVsc2VcbiAgICAgICAgcGNfb2ZmID0gdGJsLmxleF9kZWZhdWx0X2NvZGVbcHN0YXRlXTtcbiAgICAgIGlmIChwY19vZmYgPiAwKVxuICAgICAgICBjYW1sX2xleF9ydW5fbWVtXG4gICAgICAodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSwgbGV4YnVmW2xleF9jdXJyX3Bvc10pO1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfY2hhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1SW5pdCwgY2FtbF9NRDVVcGRhdGUsIGNhbWxfTUQ1RmluYWxcbmZ1bmN0aW9uIGNhbWxfbWQ1X2NoYW4oY2hhbmlkLHRvcmVhZCl7XG4gIHZhciBjdHggPSBjYW1sX01ENUluaXQoKTtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDQwOTYpO1xuICBpZih0b3JlYWQgPCAwKXtcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsYnVmZmVyLmxlbmd0aCk7XG4gICAgICBpZihyZWFkID09IDApIGJyZWFrO1xuICAgICAgY2FtbF9NRDVVcGRhdGUoY3R4LGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsICh0b3JlYWQgPiBidWZmZXIubGVuZ3RoID8gYnVmZmVyLmxlbmd0aCA6IHRvcmVhZCkpO1xuICAgICAgaWYocmVhZCA9PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICAgIHRvcmVhZCAtPSByZWFkXG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShjYW1sX01ENUZpbmFsKGN0eCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX21kNV9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tZDVfc3RyaW5nKHMsIG9mcywgbGVuKSB7XG4gIHJldHVybiBjYW1sX21kNV9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhzKSxvZnMsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVUcmFuc2Zvcm1cbnZhciBjYW1sX01ENVRyYW5zZm9ybSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGFkZCAoeCwgeSkgeyByZXR1cm4gKHggKyB5KSB8IDA7IH1cbiAgZnVuY3Rpb24geHgocSxhLGIseCxzLHQpIHtcbiAgICBhID0gYWRkKGFkZChhLCBxKSwgYWRkKHgsIHQpKTtcbiAgICByZXR1cm4gYWRkKChhIDw8IHMpIHwgKGEgPj4+ICgzMiAtIHMpKSwgYik7XG4gIH1cbiAgZnVuY3Rpb24gZmYoYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gZ2coYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTsgfVxuICBmdW5jdGlvbiBpaShhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdCk7IH1cblxuICByZXR1cm4gZnVuY3Rpb24gKHcsIGJ1ZmZlcikge1xuICAgIHZhciBhID0gd1swXSwgYiA9IHdbMV0sIGMgPSB3WzJdLCBkID0gd1szXTtcblxuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDBdLCA3LCAweEQ3NkFBNDc4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyAxXSwgMTIsIDB4RThDN0I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbIDJdLCAxNywgMHgyNDIwNzBEQik7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsgM10sIDIyLCAweEMxQkRDRUVFKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyA0XSwgNywgMHhGNTdDMEZBRik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNV0sIDEyLCAweDQ3ODdDNjJBKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTcsIDB4QTgzMDQ2MTMpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbIDddLCAyMiwgMHhGRDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOF0sIDcsIDB4Njk4MDk4RDgpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDldLCAxMiwgMHg4QjQ0RjdBRik7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMF0sIDE3LCAweEZGRkY1QkIxKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzExXSwgMjIsIDB4ODk1Q0Q3QkUpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA3LCAweDZCOTAxMTIyKTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWzEzXSwgMTIsIDB4RkQ5ODcxOTMpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTRdLCAxNywgMHhBNjc5NDM4RSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNV0sIDIyLCAweDQ5QjQwODIxKTtcblxuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA1LCAweEY2MUUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyA2XSwgOSwgMHhDMDQwQjM0MCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE0LCAweDI2NUU1QTUxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyAwXSwgMjAsIDB4RTlCNkM3QUEpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDVdLCA1LCAweEQ2MkYxMDVEKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweEQ4QTFFNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA0XSwgMjAsIDB4RTdEM0ZCQzgpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDldLCA1LCAweDIxRTFDREU2KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzE0XSwgOSwgMHhDMzM3MDdENik7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgM10sIDE0LCAweEY0RDUwRDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA4XSwgMjAsIDB4NDU1QTE0RUQpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbMTNdLCA1LCAweEE5RTNFOTA1KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyAyXSwgOSwgMHhGQ0VGQTNGOCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgN10sIDE0LCAweDY3NkYwMkQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OEQyQTRDOEEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNV0sIDQsIDB4RkZGQTM5NDIpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDhdLCAxMSwgMHg4NzcxRjY4MSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE2LCAweDZEOUQ2MTIyKTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzE0XSwgMjMsIDB4RkRFNTM4MEMpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA0LCAweEE0QkVFQTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyA0XSwgMTEsIDB4NEJERUNGQTkpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbIDddLCAxNiwgMHhGNkJCNEI2MCk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMF0sIDIzLCAweEJFQkZCQzcwKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzEzXSwgNCwgMHgyODlCN0VDNik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMF0sIDExLCAweEVBQTEyN0ZBKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWyAzXSwgMTYsIDB4RDRFRjMwODUpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbIDZdLCAyMywgMHgwNDg4MUQwNSk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOV0sIDQsIDB4RDlENEQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhFNkRCOTlFNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFGQTI3Q0Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWyAyXSwgMjMsIDB4QzRBQzU2NjUpO1xuXG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMF0sIDYsIDB4RjQyOTIyNDQpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbIDddLCAxMCwgMHg0MzJBRkY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweEFCOTQyM0E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA1XSwgMjEsIDB4RkM5M0EwMzkpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA2LCAweDY1NUI1OUMzKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWyAzXSwgMTAsIDB4OEYwQ0NDOTIpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNSwgMHhGRkVGRjQ3RCk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMV0sIDIxLCAweDg1ODQ1REQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyA4XSwgNiwgMHg2RkE4N0U0Rik7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNV0sIDEwLCAweEZFMkNFNkUwKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTUsIDB4QTMwMTQzMTQpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMTNdLCAyMSwgMHg0RTA4MTFBMSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNF0sIDYsIDB4Rjc1MzdFODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhCRDNBRjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsgMl0sIDE1LCAweDJBRDdEMkJCKTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA5XSwgMjEsIDB4RUI4NkQzOTEpO1xuXG4gICAgd1swXSA9IGFkZChhLCB3WzBdKTtcbiAgICB3WzFdID0gYWRkKGIsIHdbMV0pO1xuICAgIHdbMl0gPSBhZGQoYywgd1syXSk7XG4gICAgd1szXSA9IGFkZChkLCB3WzNdKTtcbiAgfX0pKClcblxuLy9Qcm92aWRlczogY2FtbF9NRDVJbml0XG5mdW5jdGlvbiBjYW1sX01ENUluaXQoKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNjQpO1xuICB2YXIgYjMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gIHZhciBiOCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gIHJldHVybiB7bGVuOjAsXG4gICAgICAgICAgdzpuZXcgVWludDMyQXJyYXkoWzB4Njc0NTIzMDEsIDB4RUZDREFCODksIDB4OThCQURDRkUsIDB4MTAzMjU0NzZdKSxcbiAgICAgICAgICBiMzI6YjMyLFxuICAgICAgICAgIGI4OmI4fVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbil7XG4gIHZhciBpbl9idWYgPSBjdHgubGVuICYgMHgzZjtcbiAgdmFyIGlucHV0X3BvcyA9IDA7XG4gIGN0eC5sZW4gKz0gaW5wdXRfbGVuO1xuICBpZihpbl9idWYpe1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYoaW5wdXRfbGVuIDwgbWlzc2luZykge1xuICAgICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLGlucHV0X2xlbiksaW5fYnVmKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KDAsbWlzc2luZyksaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUoaW5wdXRfbGVuID49IDY0KXtcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmKGlucHV0X2xlbilcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyBpbnB1dF9sZW4pLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVGaW5hbFxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1RmluYWwoY3R4KXtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZiArKztcbiAgaWYoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA2NDsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgNTY7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA1NjsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MUZGRkZGRkY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKVxuICAgICAgdFtpICogNCArIGpdID0gKGN0eC53W2ldID4+ICg4ICogaikpICYgMHhGRjtcbiAgcmV0dXJuIHQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LGEuc3ViYXJyYXkob2ZzLCBvZnMgKyBsZW4pLCBsZW4pO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoY2FtbF9NRDVGaW5hbChjdHgpKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSW9cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmRzXG52YXIgY2FtbF9zeXNfZmRzID0gbmV3IEFycmF5KDMpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jbG9zZVxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3N5c19jbG9zZShmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUpIGZpbGUuY2xvc2UoKTtcbiAgZGVsZXRlIGNhbWxfc3lzX2Zkc1tmZF07XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBNbEZha2VGZF9vdXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUsaWR4KSB7XG4gIGlmKGlkeCA9PSB1bmRlZmluZWQpe1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIH1cbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSBmaWxlO1xuICByZXR1cm4gaWR4IHwgMDtcbn1cbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW4gKG5hbWUsIGZsYWdzLCBfcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUoZmxhZ3Mpe1xuICAgIHN3aXRjaChmbGFnc1sxXSl7XG4gICAgY2FzZSAwOiBmLnJkb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAxOiBmLndyb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAyOiBmLmFwcGVuZCA9IDE7YnJlYWs7XG4gICAgY2FzZSAzOiBmLmNyZWF0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA0OiBmLnRydW5jYXRlID0gMTticmVhaztcbiAgICBjYXNlIDU6IGYuZXhjbCA9IDE7IGJyZWFrO1xuICAgIGNhc2UgNjogZi5iaW5hcnkgPSAxO2JyZWFrO1xuICAgIGNhc2UgNzogZi50ZXh0ID0gMTticmVhaztcbiAgICBjYXNlIDg6IGYubm9uYmxvY2sgPSAxO2JyZWFrO1xuICAgIH1cbiAgICBmbGFncz1mbGFnc1syXTtcbiAgfVxuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3QsZik7XG4gIHJldHVybiBjYW1sX3N5c19vcGVuX2ludGVybmFsIChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZmlsZShmZCwgZmxhZ3MpIHtcbiAgICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpXG4gIH1cbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDAse3Jkb25seToxLGFsdG5hbWU6XCIvZGV2L3N0ZGluXCIsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAwKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDEse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAxKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDIse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAyKTtcbn0pKClcblxuXG4vLyBvY2FtbCBDaGFubmVsc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZShjaGFuaWQsIG5hbWUpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ubmFtZSA9IG5hbWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxzXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBBcnJheSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdCAoY2FwdHVyZWQsIGludG8pe1xuICB2YXIgdG9fcmVzdG9yZSA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2FwdHVyZWQpO1xuICB2YXIgbmV3XyA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoaW50byk7XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2FwdHVyZWRdID0gbmV3XzsgLy8gWFhYXG4gIHJldHVybiB0b19yZXN0b3JlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmUgKGNhcHR1cmVkLCB0b19yZXN0b3JlKXtcbiAgY2FtbF9tbF9jaGFubmVsc1tjYXB0dXJlZF0gPSB0b19yZXN0b3JlOyAvLyBYWFhcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9nZXQoaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHNbaWRdOyAvLyBYWFhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCAoKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBjID0gMDsgYyA8IGNhbWxfbWxfY2hhbm5lbHMubGVuZ3RoOyBjKyspe1xuICAgIGlmKGNhbWxfbWxfY2hhbm5lbHNbY10gJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vcGVuZWQgJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vdXQpXG4gICAgICBsPVswLGNhbWxfbWxfY2hhbm5lbHNbY10uZmQsbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQgKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy5yZG9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgcmVhZG9ubHlcIik7XG4gIHZhciBidWZmZXJlZCA9IChmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQpID8gZmlsZS5mbGFncy5idWZmZXJlZCA6IDE7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDp0cnVlLFxuICAgIGJ1ZmZlcl9jdXJyOjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICBidWZmZXJlZDpidWZmZXJlZFxuICB9O1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5uZWwuZmRdPWNoYW5uZWw7XG4gIHJldHVybiBjaGFubmVsLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4gKGZkKSAge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUuZmxhZ3Mud3Jvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHdyaXRlb25seVwiKTtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDogZmFsc2UsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXJfbWF4OjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICByZWZpbGw6cmVmaWxsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFnc1xuLy9SZXF1aXJlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgZmxhZ3Mpe1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vQWxpYXM6IHdpbl9maWxlZGVzY3Jfb2ZfY2hhbm5lbFxuZnVuY3Rpb24gY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3IoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLG1vZGUpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5maWxlLmZsYWdzLnRleHQgPSAhbW9kZVxuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWxfaXNfYmluYXJ5X21vZGUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5maWxlLmZsYWdzLmJpbmFyeVxufVxuXG4vL0lucHV0IGZyb20gaW5fY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2Nsb3NlX2NoYW5uZWxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Nsb3NlXG5mdW5jdGlvbiBjYW1sX21sX2Nsb3NlX2NoYW5uZWwgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoY2hhbi5vcGVuZWQpIHtcbiAgICBjaGFuLm9wZW5lZCA9IGZhbHNlO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0KGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2hhbi5maWxlLmxlbmd0aCAoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsZikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5vdXRwdXQgPSAoZnVuY3Rpb24gKHMpIHtmKHMpfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGwoY2hhbmlkLGYpIHtcbiAgY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpLnJlZmlsbCA9IGY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWZpbGwgKGNoYW4pIHtcbiAgaWYoY2hhbi5yZWZpbGwgIT0gbnVsbCl7XG4gICAgdmFyIHN0ciA9IGNoYW4ucmVmaWxsKCk7XG4gICAgdmFyIHN0cl9hID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyX2EubGVuZ3RoID09IDApIHtcbiAgICAgIGNoYW4ucmVmaWxsID0gbnVsbFxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyLmxlbmd0aCA8IGNoYW4uYnVmZmVyX21heCArIHN0cl9hLmxlbmd0aCl7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsY2hhbi5idWZmZXJfbWF4KTtcbiAgICAgIGNoYW4ub2Zmc2V0ICs9IHN0cl9hLmxlbmd0aDtcbiAgICAgIGNoYW4uYnVmZmVyX21heCArPSBzdHJfYS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBucmVhZCA9IGNoYW4uZmlsZS5yZWFkKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgY2hhbi5idWZmZXJfbWF4LCBjaGFuLmJ1ZmZlci5sZW5ndGggLSBjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgIGNoYW4ub2Zmc2V0ICs9IG5yZWFkO1xuICAgIGNoYW4uYnVmZmVyX21heCArPSBucmVhZDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheSAoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrIChjaGFuaWQsIGJhLCBpLCBsKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgbiA9IGw7XG4gIHZhciBhdmFpbCA9IGNoYW4uYnVmZmVyX21heCAtIGNoYW4uYnVmZmVyX2N1cnI7XG4gIGlmKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbDtcbiAgfVxuICBlbHNlIGlmKGF2YWlsID4gMCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZihuID4gYXZhaWwpIG4gPSBhdmFpbDtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbiksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbjtcbiAgfVxuICByZXR1cm4gbiB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcywgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWUgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIGhlYWRlciA9IG5ldyBVaW50OEFycmF5KGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGZ1bmN0aW9uIGJsb2NrKGJ1ZmZlciwgb2Zmc2V0LCBuKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHdoaWxlKHIgPCBuKXtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgICAgICBicmVhaztcbiAgICAgIGJ1ZmZlcltvZmZzZXQrcl0gPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIrKztcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdmFyIHIgPSBibG9jayhoZWFkZXIsIDAsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGlmKHIgPT0gMClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIGVsc2UgaWYgKHIgPCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0XCIpO1xuICB2YXIgbGVuID0gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAoY2FtbF9ieXRlc19vZl9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLDApO1xuICB2YXIgciA9IGJsb2NrKGJ1ZiwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplLCBsZW4pXG4gIGlmKHIgPCBsZW4pXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0IFwiICsgciArIFwiICBcIiArIGxlbik7XG4gIHZhciBvZmZzZXQgPSBbMF07XG4gIHZhciByZXMgPSBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBvZmZzZXQpO1xuICBjaGFuLm9mZnNldCA9IGNoYW4ub2Zmc2V0ICsgb2Zmc2V0WzBdO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcFxuLy9SZXF1aXJlczogY2FtbF9pbnB1dF92YWx1ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV90b19vdXRzaWRlX2hlYXAoYykge1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZShjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9jaGFyIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICB9XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDQ7IGkrKyl7XG4gICAgcmVzID0gKHJlcyA8PCA4KSArIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJJbGxlZ2FsIHNlZWtcIik7XG4gIGlmKHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heFxuICAgICAmJiBwb3MgPD0gY2hhbi5vZmZzZXRcbiAgICAgJiYgY2hhbi5maWxlLmZsYWdzLmJpbmFyeSkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSBjaGFuLmJ1ZmZlcl9tYXggLSAoY2hhbi5vZmZzZXQgLSBwb3MpO1xuICB9IGVsc2Uge1xuICAgIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pblxuLy9SZXF1aXJlczogY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW4oY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW5fNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycikgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9wb3NfaW4oY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBwID0gY2hhbi5idWZmZXJfY3VycjtcbiAgZG8ge1xuICAgIGlmKHAgPj0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksMCk7XG4gICAgICAgIHAgLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4IC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgICAgfVxuICAgICAgaWYoY2hhbi5idWZmZXJfbWF4ID49IGNoYW4uYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsIChjaGFuKTtcbiAgICAgIGlmKHByZXZfbWF4ID09IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKGNoYW4uYnVmZmVyW3ArK10gIT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYoIWNoYW4uYnVmZmVyIHx8IGNoYW4uYnVmZmVyX2N1cnIgPT0gMCkgcmV0dXJuIDA7XG4gIGlmKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLndyaXRlKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgMCwgY2hhbi5idWZmZXJfY3Vycik7XG4gIH1cbiAgY2hhbi5vZmZzZXQgKz0gY2hhbi5idWZmZXJfY3VycjtcbiAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gIHJldHVybiAwO1xufVxuXG4vL291dHB1dCB0byBvdXRfY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF90YVxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCxjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3Qgb3V0cHV0IHRvIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbik7XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoID4gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9jdXJyICsgYnVmZmVyLmxlbmd0aCk7XG4gICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgIGNoYW4uYnVmZmVyID0gYlxuICB9XG4gIHN3aXRjaChjaGFuLmJ1ZmZlcmVkKXtcbiAgY2FzZSAwOiAvLyBVbmJ1ZmZlcmVkXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgYnJlYWtcbiAgY2FzZSAxOiAvLyBCdWZmZXJlZCAodGhlIGRlZmF1bHQpXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVhaztcbiAgY2FzZSAyOiAvLyBCdWZmZXJlZCAob25seSBmb3Igc3Rkb3V0IGFuZCBzdGRlcnIpXG4gICAgdmFyIGlkID0gYnVmZmVyLmxhc3RJbmRleE9mKDEwKVxuICAgIGlmKGlkIDwgMCkge1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aClcbiAgICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KDAsIGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aCAtIGlkIC0gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXkoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXQoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxjYW1sX2J5dGVzX29mX3N0cmluZyhidWZmZXIpLG9mZnNldCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfY2hhciAoY2hhbmlkLGMpIHtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZywgY2FtbF9tbF9vdXRwdXQsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZSAoY2hhbmlkLHYsZmxhZ3MpIHtcbiAgdmFyIHMgPSBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcodiwgZmxhZ3MpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3Mpe1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm9mZnNldCA9IHBvcztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXQoY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgKyBjaGFuLmJ1ZmZlcl9jdXJyXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LCBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dF82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQgKGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2ludCAoY2hhbmlkLGkpIHtcbiAgdmFyIGFyciA9IFsoaT4+MjQpICYgMHhGRiwoaT4+MTYpICYgMHhGRiwoaT4+OCkgJiAweEZGLGkgJiAweEZGIF07XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCw0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA/IDEgOiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX21sX3NldF9idWZmZXJlZChjaGFuaWQsdikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkuYnVmZmVyZWQgPSB2O1xuICBpZighdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMFxufVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBUaGUgcnVuLXRpbWUgbGlicmFyeSBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4ICopXG5cbnR5cGUgcG9zaXRpb24gPSB7XG4gIHBvc19mbmFtZSA6IHN0cmluZztcbiAgcG9zX2xudW0gOiBpbnQ7XG4gIHBvc19ib2wgOiBpbnQ7XG4gIHBvc19jbnVtIDogaW50O1xufVxuXG5sZXQgZHVtbXlfcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDA7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IC0xO1xufVxuXG50eXBlIGxleGJ1ZiA9XG4gIHsgcmVmaWxsX2J1ZmYgOiBsZXhidWYgLT4gdW5pdDtcbiAgICBtdXRhYmxlIGxleF9idWZmZXIgOiBieXRlcztcbiAgICBtdXRhYmxlIGxleF9idWZmZXJfbGVuIDogaW50O1xuICAgIG11dGFibGUgbGV4X2Fic19wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2N1cnJfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfYWN0aW9uIDogaW50O1xuICAgIG11dGFibGUgbGV4X2VvZl9yZWFjaGVkIDogYm9vbDtcbiAgICBtdXRhYmxlIGxleF9tZW0gOiBpbnQgYXJyYXk7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcCA6IHBvc2l0aW9uO1xuICAgIG11dGFibGUgbGV4X2N1cnJfcCA6IHBvc2l0aW9uO1xuICB9XG5cbnR5cGUgbGV4X3RhYmxlcyA9XG4gIHsgbGV4X2Jhc2U6IHN0cmluZztcbiAgICBsZXhfYmFja3Ryazogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0OiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrOiBzdHJpbmc7XG4gICAgbGV4X2Jhc2VfY29kZSA6IHN0cmluZztcbiAgICBsZXhfYmFja3Rya19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0X2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NvZGU6IHN0cmluZzt9XG5cbmV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcbmV4dGVybmFsIGNfbmV3X2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9uZXdfbGV4X2VuZ2luZVwiXG5cbmxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cblxubGV0IG5ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX25ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5sZXQgbGV4X3JlZmlsbCByZWFkX2Z1biBhdXhfYnVmZmVyIGxleGJ1ZiA9XG4gIGxldCByZWFkID1cbiAgICByZWFkX2Z1biBhdXhfYnVmZmVyIChCeXRlcy5sZW5ndGggYXV4X2J1ZmZlcikgaW5cbiAgbGV0IG4gPVxuICAgIGlmIHJlYWQgPiAwXG4gICAgdGhlbiByZWFkXG4gICAgZWxzZSAobGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlOyAwKSBpblxuICAoKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBidWZmZXI6XG4gICAgICAgIDwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLT5cbiAgICAgICAgfCAganVuayB8ICAgICAgdmFsaWQgZGF0YSAgICAgfCAgIGp1bmsgICAgfFxuICAgICAgICBeICAgICAgIF4gICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeXG4gICAgICAgIDAgICAgc3RhcnRfcG9zICAgICAgICAgICAgIGJ1ZmZlcl9lbmQgICAgQnl0ZXMubGVuZ3RoIGJ1ZmZlclxuICAqKVxuICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuID4gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyIHRoZW4gYmVnaW5cbiAgICAoKiBUaGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgblxuICAgICAgIDw9IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlclxuICAgIHRoZW4gYmVnaW5cbiAgICAgICgqIEJ1dCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaWYgd2UgcmVjbGFpbSB0aGUganVuayBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICBvZiB0aGUgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBsZXhidWYubGV4X2J1ZmZlciAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICgqIFdlIG11c3QgZ3JvdyB0aGUgYnVmZmVyLiAgRG91YmxpbmcgaXRzIHNpemUgd2lsbCBwcm92aWRlIGVub3VnaFxuICAgICAgICAgc3BhY2Ugc2luY2UgbiA8PSBTdHJpbmcubGVuZ3RoIGF1eF9idWZmZXIgPD0gU3RyaW5nLmxlbmd0aCBidWZmZXIuXG4gICAgICAgICBXYXRjaCBvdXQgZm9yIHN0cmluZyBsZW5ndGggb3ZlcmZsb3csIHRob3VnaC4gKilcbiAgICAgIGxldCBuZXdsZW4gPVxuICAgICAgICBJbnQubWluICgyICogQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgbiA+IG5ld2xlblxuICAgICAgdGhlbiBmYWlsd2l0aCBcIkxleGluZy5sZXhfcmVmaWxsOiBjYW5ub3QgZ3JvdyBidWZmZXJcIjtcbiAgICAgIGxldCBuZXdidWYgPSBCeXRlcy5jcmVhdGUgbmV3bGVuIGluXG4gICAgICAoKiBDb3B5IHRoZSB2YWxpZCBkYXRhIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldyBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIG5ld2J1ZiAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpO1xuICAgICAgbGV4YnVmLmxleF9idWZmZXIgPC0gbmV3YnVmXG4gICAgZW5kO1xuICAgICgqIFJlYWxsb2NhdGlvbiBvciBub3QsIHdlIGhhdmUgc2hpZnRlZCB0aGUgZGF0YSBsZWZ0IGJ5XG4gICAgICAgc3RhcnRfcG9zIGNoYXJhY3RlcnM7IHVwZGF0ZSB0aGUgcG9zaXRpb25zICopXG4gICAgbGV0IHMgPSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBsZXhidWYubGV4X2Fic19wb3MgKyBzO1xuICAgIGxleGJ1Zi5sZXhfY3Vycl9wb3MgPC0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9zdGFydF9wb3MgPC0gMDtcbiAgICBsZXhidWYubGV4X2xhc3RfcG9zIDwtIGxleGJ1Zi5sZXhfbGFzdF9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBzIDtcbiAgICBsZXQgdCA9IGxleGJ1Zi5sZXhfbWVtIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCB0LTEgZG9cbiAgICAgIGxldCB2ID0gdC4oaSkgaW5cbiAgICAgIGlmIHYgPj0gMCB0aGVuXG4gICAgICAgIHQuKGkpIDwtIHYtc1xuICAgIGRvbmVcbiAgZW5kO1xuICAoKiBUaGVyZSBpcyBub3cgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICBCeXRlcy5ibGl0IGF1eF9idWZmZXIgMCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X2J1ZmZlcl9sZW4gbjtcbiAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG5cblxubGV0IHplcm9fcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDE7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IDA7XG59XG5cbmxldCBmcm9tX2Z1bmN0aW9uID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBmID1cbiAgeyByZWZpbGxfYnVmZiA9IGxleF9yZWZpbGwgZiAoQnl0ZXMuY3JlYXRlIDUxMik7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAxMDI0O1xuICAgIGxleF9idWZmZXJfbGVuID0gMDtcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gZmFsc2U7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBmcm9tX2NoYW5uZWwgP3dpdGhfcG9zaXRpb25zIGljID1cbiAgZnJvbV9mdW5jdGlvbiA/d2l0aF9wb3NpdGlvbnMgKGZ1biBidWYgbiAtPiBpbnB1dCBpYyBidWYgMCBuKVxuXG5sZXQgZnJvbV9zdHJpbmcgPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIHMgPVxuICB7IHJlZmlsbF9idWZmID0gKGZ1biBsZXhidWYgLT4gbGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMub2Zfc3RyaW5nIHM7ICgqIGhhdmUgdG8gbWFrZSBhIGNvcHkgZm9yIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdW5zYWZlLXN0cmluZyBtb2RlICopXG4gICAgbGV4X2J1ZmZlcl9sZW4gPSBTdHJpbmcubGVuZ3RoIHM7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IHRydWU7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBzZXRfcG9zaXRpb24gbGV4YnVmIHBvc2l0aW9uID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgIDwtIHtwb3NpdGlvbiB3aXRoIHBvc19mbmFtZSA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19mbmFtZX07XG4gIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBwb3NpdGlvbi5wb3NfY251bVxuXG5sZXQgc2V0X2ZpbGVuYW1lIGxleGJ1ZiBmbmFtZSA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wIDwtIHtsZXhidWYubGV4X2N1cnJfcCB3aXRoIHBvc19mbmFtZSA9IGZuYW1lfVxuXG5sZXQgd2l0aF9wb3NpdGlvbnMgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zXG5cbmxldCBsZXhlbWUgbGV4YnVmID1cbiAgbGV0IGxlbiA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGxlblxuXG5sZXQgc3ViX2xleGVtZSBsZXhidWYgaTEgaTIgPVxuICBsZXQgbGVuID0gaTItaTEgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW5cblxubGV0IHN1Yl9sZXhlbWVfb3B0IGxleGJ1ZiBpMSBpMiA9XG4gIGlmIGkxID49IDAgdGhlbiBiZWdpblxuICAgIGxldCBsZW4gPSBpMi1pMSBpblxuICAgIFNvbWUgKEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuKVxuICBlbmQgZWxzZSBiZWdpblxuICAgIE5vbmVcbiAgZW5kXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPSBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaVxuXG5sZXQgc3ViX2xleGVtZV9jaGFyX29wdCBsZXhidWYgaSA9XG4gIGlmIGkgPj0gMCB0aGVuXG4gICAgU29tZSAoQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cblxubGV0IGxleGVtZV9jaGFyIGxleGJ1ZiBpID1cbiAgQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIChsZXhidWYubGV4X3N0YXJ0X3BvcyArIGkpXG5cbmxldCBsZXhlbWVfc3RhcnQgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wLnBvc19jbnVtXG5sZXQgbGV4ZW1lX2VuZCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfY251bVxuXG5sZXQgbGV4ZW1lX3N0YXJ0X3AgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wXG5sZXQgbGV4ZW1lX2VuZF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wXG5cbmxldCBuZXdfbGluZSBsZXhidWYgPVxuICBsZXQgbGNwID0gbGV4YnVmLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGV4YnVmLmxleF9jdXJyX3AgPC1cbiAgICAgIHsgbGNwIHdpdGhcbiAgICAgICAgcG9zX2xudW0gPSBsY3AucG9zX2xudW0gKyAxO1xuICAgICAgICBwb3NfYm9sID0gbGNwLnBvc19jbnVtO1xuICAgICAgfVxuXG5cblxuKCogRGlzY2FyZCBkYXRhIGxlZnQgaW4gbGV4ZXIgYnVmZmVyLiAqKVxuXG5sZXQgZmx1c2hfaW5wdXQgbGIgPVxuICBsYi5sZXhfY3Vycl9wb3MgPC0gMDtcbiAgbGIubGV4X2Fic19wb3MgPC0gMDtcbiAgbGV0IGxjcCA9IGxiLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGIubGV4X2N1cnJfcCA8LSB7emVyb19wb3Mgd2l0aCBwb3NfZm5hbWUgPSBsY3AucG9zX2ZuYW1lfTtcbiAgbGIubGV4X2J1ZmZlcl9sZW4gPC0gMDtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBQcmludGZcblxudHlwZSB0ID0gZXhuID0gLi5cblxubGV0IHByaW50ZXJzID0gQXRvbWljLm1ha2UgW11cblxubGV0IGxvY2ZtdCA9IGZvcm1hdF9vZl9zdHJpbmcgXCJGaWxlIFxcXCIlc1xcXCIsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWQ6ICVzXCJcblxubGV0IGZpZWxkIHggaSA9XG4gIGxldCBmID0gT2JqLmZpZWxkIHggaSBpblxuICBpZiBub3QgKE9iai5pc19ibG9jayBmKSB0aGVuXG4gICAgc3ByaW50ZiBcIiVkXCIgKE9iai5tYWdpYyBmIDogaW50KSAgICAgICAgICAgKCogY2FuIGFsc28gYmUgYSBjaGFyICopXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLnN0cmluZ190YWcgdGhlblxuICAgIHNwcmludGYgXCIlU1wiIChPYmoubWFnaWMgZiA6IHN0cmluZylcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouZG91YmxlX3RhZyB0aGVuXG4gICAgc3RyaW5nX29mX2Zsb2F0IChPYmoubWFnaWMgZiA6IGZsb2F0KVxuICBlbHNlXG4gICAgXCJfXCJcblxubGV0IHJlYyBvdGhlcl9maWVsZHMgeCBpID1cbiAgaWYgaSA+PSBPYmouc2l6ZSB4IHRoZW4gXCJcIlxuICBlbHNlIHNwcmludGYgXCIsICVzJXNcIiAoZmllbGQgeCBpKSAob3RoZXJfZmllbGRzIHggKGkrMSkpXG5cbmxldCBmaWVsZHMgeCA9XG4gIG1hdGNoIE9iai5zaXplIHggd2l0aFxuICB8IDAgLT4gXCJcIlxuICB8IDEgLT4gXCJcIlxuICB8IDIgLT4gc3ByaW50ZiBcIiglcylcIiAoZmllbGQgeCAxKVxuICB8IF8gLT4gc3ByaW50ZiBcIiglcyVzKVwiIChmaWVsZCB4IDEpIChvdGhlcl9maWVsZHMgeCAyKVxuXG5sZXQgdXNlX3ByaW50ZXJzIHggPVxuICBsZXQgcmVjIGNvbnYgPSBmdW5jdGlvblxuICAgIHwgaGQgOjogdGwgLT5cbiAgICAgICAgKG1hdGNoIGhkIHggd2l0aFxuICAgICAgICAgfCBOb25lIHwgZXhjZXB0aW9uIF8gLT4gY29udiB0bFxuICAgICAgICAgfCBTb21lIHMgLT4gU29tZSBzKVxuICAgIHwgW10gLT4gTm9uZSBpblxuICBjb252IChBdG9taWMuZ2V0IHByaW50ZXJzKVxuXG5sZXQgdG9fc3RyaW5nX2RlZmF1bHQgPSBmdW5jdGlvblxuICB8IE91dF9vZl9tZW1vcnkgLT4gXCJPdXQgb2YgbWVtb3J5XCJcbiAgfCBTdGFja19vdmVyZmxvdyAtPiBcIlN0YWNrIG92ZXJmbG93XCJcbiAgfCBNYXRjaF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis1KSBcIlBhdHRlcm4gbWF0Y2hpbmcgZmFpbGVkXCJcbiAgfCBBc3NlcnRfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJBc3NlcnRpb24gZmFpbGVkXCJcbiAgfCBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJVbmRlZmluZWQgcmVjdXJzaXZlIG1vZHVsZVwiXG4gIHwgeCAtPlxuICAgICAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gICAgICBpZiBPYmoudGFnIHggPD4gMCB0aGVuXG4gICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCB4IDApIDogc3RyaW5nKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgY29uc3RydWN0b3IgPVxuICAgICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCAoT2JqLmZpZWxkIHggMCkgMCkgOiBzdHJpbmcpIGluXG4gICAgICAgIGNvbnN0cnVjdG9yIF4gKGZpZWxkcyB4KVxuXG5sZXQgdG9fc3RyaW5nIGUgPVxuICBtYXRjaCB1c2VfcHJpbnRlcnMgZSB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IHRvX3N0cmluZ19kZWZhdWx0IGVcblxubGV0IHByaW50IGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBmbHVzaCBzdGRlcnI7XG4gICAgcmFpc2UgeFxuXG5sZXQgY2F0Y2ggZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZmx1c2ggc3Rkb3V0O1xuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBleGl0IDJcblxudHlwZSByYXdfYmFja3RyYWNlX3Nsb3RcbnR5cGUgcmF3X2JhY2t0cmFjZV9lbnRyeSA9IHByaXZhdGUgaW50XG50eXBlIHJhd19iYWNrdHJhY2UgPSByYXdfYmFja3RyYWNlX2VudHJ5IGFycmF5XG5cbmxldCByYXdfYmFja3RyYWNlX2VudHJpZXMgYnQgPSBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZTpcbiAgdW5pdCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZVwiXG5cbmV4dGVybmFsIHJhaXNlX3dpdGhfYmFja3RyYWNlOiBleG4gLT4gcmF3X2JhY2t0cmFjZSAtPiAnYVxuICA9IFwiJXJhaXNlX3dpdGhfYmFja3RyYWNlXCJcblxudHlwZSBiYWNrdHJhY2Vfc2xvdCA9XG4gIHwgS25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgICAgOiBib29sO1xuICAgICAgZmlsZW5hbWUgICAgOiBzdHJpbmc7XG4gICAgICBsaW5lX251bWJlciA6IGludDtcbiAgICAgIHN0YXJ0X2NoYXIgIDogaW50O1xuICAgICAgZW5kX2NoYXIgICAgOiBpbnQ7XG4gICAgICBpc19pbmxpbmUgICA6IGJvb2w7XG4gICAgICBkZWZuYW1lICAgICA6IHN0cmluZztcbiAgICB9XG4gIHwgVW5rbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSA6IGJvb2xcbiAgICB9XG5cbigqIHRvIGF2b2lkIHdhcm5pbmcgKilcbmxldCBfID0gW0tub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZTsgZmlsZW5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciA9IDA7IHN0YXJ0X2NoYXIgPSAwOyBlbmRfY2hhciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2lubGluZSA9IGZhbHNlOyBkZWZuYW1lID0gXCJcIiB9O1xuICAgICAgICAgVW5rbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2UgfV1cblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Q6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiBiYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZTpcbiAgcmF3X2JhY2t0cmFjZSAtPiBiYWNrdHJhY2Vfc2xvdCBhcnJheSA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2VcIlxuXG5sZXQgY29udmVydF9yYXdfYmFja3RyYWNlIGJ0ID1cbiAgdHJ5IFNvbWUgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidClcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgZm9ybWF0X2JhY2t0cmFjZV9zbG90IHBvcyBzbG90ID1cbiAgbGV0IGluZm8gaXNfcmFpc2UgPVxuICAgIGlmIGlzX3JhaXNlIHRoZW5cbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBhdFwiIGVsc2UgXCJSZS1yYWlzZWQgYXRcIlxuICAgIGVsc2VcbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBieSBwcmltaXRpdmUgb3BlcmF0aW9uIGF0XCIgZWxzZSBcIkNhbGxlZCBmcm9tXCJcbiAgaW5cbiAgbWF0Y2ggc2xvdCB3aXRoXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBpZiBsLmlzX3JhaXNlIHRoZW5cbiAgICAgICAgKCogY29tcGlsZXItaW5zZXJ0ZWQgcmUtcmFpc2UsIHNraXBwZWQgKikgTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBTb21lIChzcHJpbnRmIFwiJXMgdW5rbm93biBsb2NhdGlvblwiIChpbmZvIGZhbHNlKSlcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBTb21lIChzcHJpbnRmIFwiJXMgJXMgaW4gZmlsZSBcXFwiJXNcXFwiJXMsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWRcIlxuICAgICAgICAgICAgICAoaW5mbyBsLmlzX3JhaXNlKSBsLmRlZm5hbWUgbC5maWxlbmFtZVxuICAgICAgICAgICAgICAoaWYgbC5pc19pbmxpbmUgdGhlbiBcIiAoaW5saW5lZClcIiBlbHNlIFwiXCIpXG4gICAgICAgICAgICAgIGwubGluZV9udW1iZXIgbC5zdGFydF9jaGFyIGwuZW5kX2NoYXIpXG5cbmxldCBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgICBmcHJpbnRmIG91dGNoYW5cbiAgICAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gZnByaW50ZiBvdXRjaGFuIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmVcblxubGV0IHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiByYXdfYmFja3RyYWNlID1cbiAgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6IHByaW50cyB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgcHJpbnRfYmFja3RyYWNlIG91dGNoYW4gPVxuICBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5sZXQgYmFja3RyYWNlX3RvX3N0cmluZyBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAxMDI0IGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGJwcmludGYgYiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIHJhd19iYWNrdHJhY2UgPVxuICBiYWNrdHJhY2VfdG9fc3RyaW5nIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfaW5saW5lXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG5cbnR5cGUgbG9jYXRpb24gPSB7XG4gIGZpbGVuYW1lIDogc3RyaW5nO1xuICBsaW5lX251bWJlciA6IGludDtcbiAgc3RhcnRfY2hhciA6IGludDtcbiAgZW5kX2NoYXIgOiBpbnQ7XG59XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvbiA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgU29tZSB7XG4gICAgICBmaWxlbmFtZSAgICA9IGwuZmlsZW5hbWU7XG4gICAgICBsaW5lX251bWJlciA9IGwubGluZV9udW1iZXI7XG4gICAgICBzdGFydF9jaGFyICA9IGwuc3RhcnRfY2hhcjtcbiAgICAgIGVuZF9jaGFyICAgID0gbC5lbmRfY2hhcjtcbiAgICB9XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF9cbiAgfCBLbm93bl9sb2NhdGlvbiB7IGRlZm5hbWUgPSBcIlwiIH0gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gU29tZSBsLmRlZm5hbWVcblxubGV0IGJhY2t0cmFjZV9zbG90cyByYXdfYmFja3RyYWNlID1cbiAgKCogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgU29tZSBpc1xuICAgICByZXR1cm5lZCBvbmx5IGlmIGEgcGFydCBvZiB0aGUgdHJhY2UgaXMgdXNhYmxlLiBUaGlzIGdpdmVzIHVzXG4gICAgIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgY29udmVydF9yYXdfYmFja3RyYWNlLCBidXQgaXQgbWFrZXMgdGhlXG4gICAgIEFQSSBtb3JlIHVzZXItZnJpZW5kbHkgLS0gb3RoZXJ3aXNlIG1vc3QgdXNlcnMgd291bGQgaGF2ZSB0b1xuICAgICByZWltcGxlbWVudCB0aGUgXCJQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgc29ycnlcIiBsb2dpY1xuICAgICB0aGVtc2VsdmVzLiAqKVxuICBtYXRjaCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgYmFja3RyYWNlIC0+XG4gICAgICBsZXQgdXNhYmxlX3Nsb3QgPSBmdW5jdGlvblxuICAgICAgICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuICAgICAgICB8IEtub3duX2xvY2F0aW9uIF8gLT4gdHJ1ZSBpblxuICAgICAgbGV0IHJlYyBleGlzdHNfdXNhYmxlID0gZnVuY3Rpb25cbiAgICAgICAgfCAoLTEpIC0+IGZhbHNlXG4gICAgICAgIHwgaSAtPiB1c2FibGVfc2xvdCBiYWNrdHJhY2UuKGkpIHx8IGV4aXN0c191c2FibGUgKGkgLSAxKSBpblxuICAgICAgaWYgZXhpc3RzX3VzYWJsZSAoQXJyYXkubGVuZ3RoIGJhY2t0cmFjZSAtIDEpXG4gICAgICB0aGVuIFNvbWUgYmFja3RyYWNlXG4gICAgICBlbHNlIE5vbmVcblxubGV0IGJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkgZW50cnkgPVxuICBiYWNrdHJhY2Vfc2xvdHMgW3wgZW50cnkgfF1cblxubW9kdWxlIFNsb3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGZvcm1hdCA9IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdFxuICBsZXQgaXNfcmFpc2UgPSBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZVxuICBsZXQgaXNfaW5saW5lID0gYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lXG4gIGxldCBsb2NhdGlvbiA9IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uXG4gIGxldCBuYW1lID0gYmFja3RyYWNlX3Nsb3RfZGVmbmFtZVxuZW5kXG5cbmxldCByYXdfYmFja3RyYWNlX2xlbmd0aCBidCA9IEFycmF5Lmxlbmd0aCBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZSAtPiBpbnQgLT4gcmF3X2JhY2t0cmFjZV9zbG90ID0gXCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiByYXdfYmFja3RyYWNlX3Nsb3Qgb3B0aW9uXG4gID0gXCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XCJcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6XG4gICByZXR1cm5zIHRoZSAqc3RyaW5nKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBnZXRfYmFja3RyYWNlICgpID0gcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5leHRlcm5hbCByZWNvcmRfYmFja3RyYWNlOiBib29sIC0+IHVuaXQgPSBcImNhbWxfcmVjb3JkX2JhY2t0cmFjZVwiXG5leHRlcm5hbCBiYWNrdHJhY2Vfc3RhdHVzOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfYmFja3RyYWNlX3N0YXR1c1wiXG5cbmxldCByZWMgcmVnaXN0ZXJfcHJpbnRlciBmbiA9XG4gIGxldCBvbGRfcHJpbnRlcnMgPSBBdG9taWMuZ2V0IHByaW50ZXJzIGluXG4gIGxldCBuZXdfcHJpbnRlcnMgPSBmbiA6OiBvbGRfcHJpbnRlcnMgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IHByaW50ZXJzIG9sZF9wcmludGVycyBuZXdfcHJpbnRlcnMgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiByZWdpc3Rlcl9wcmludGVyIGZuXG5cbmV4dGVybmFsIGdldF9jYWxsc3RhY2s6IGludCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFja1wiXG5cbmxldCBleG5fc2xvdCB4ID1cbiAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gIGlmIE9iai50YWcgeCA9IDAgdGhlbiBPYmouZmllbGQgeCAwIGVsc2UgeFxuXG5sZXQgZXhuX3Nsb3RfaWQgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMSkgOiBpbnQpXG5cbmxldCBleG5fc2xvdF9uYW1lIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDApIDogc3RyaW5nKVxuXG5leHRlcm5hbCBnZXRfZGVidWdfaW5mb19zdGF0dXMgOiB1bml0IC0+IGludCA9IFwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1c1wiXG5cbigqIERlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHN0YXJ0dXAuaC4gU2VlIGFsc28gYmFja3RyYWNlLmMgKilcbmxldCBlcnJvcnMgPSBbfCBcIlwiO1xuICAoKiBGSUxFX05PVF9GT1VORCAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgbm90IGZvdW5kKVwiO1xuICAoKiBCQURfQllURUNPREUgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdClcIjtcbiAgKCogV1JPTkdfTUFHSUMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIpXCI7XG4gICgqIE5PX0ZEUyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgY2Fubm90IGJlIG9wZW5lZDtcXG4gXFxcbiAgICAgIC0tIHRvbyBtYW55IG9wZW4gZmlsZXMuIFRyeSBydW5uaW5nIHdpdGggT0NBTUxSVU5QQVJBTT1iPTIpXCJcbnxdXG5cbmxldCBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlID1cbiAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gIGxldCBzdGF0dXMgPSBnZXRfZGVidWdfaW5mb19zdGF0dXMgKCkgaW5cbiAgaWYgc3RhdHVzIDwgMCB0aGVuXG4gICAgcHJlcnJfZW5kbGluZSBlcnJvcnMuKGFicyBzdGF0dXMpO1xuICBmbHVzaCBzdGRlcnJcblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXJcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IGZuXG5cbmxldCBlbXB0eV9iYWNrdHJhY2UgOiByYXdfYmFja3RyYWNlID0gW3wgfF1cblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgdHJ5XG4gICAgICAhdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICB3aXRoIGV4bicgLT5cbiAgICAgIGxldCByYXdfYmFja3RyYWNlJyA9IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yIGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyOiBleGNlcHRpb24gJXNcXG5cIlxuICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZSc7XG4gICAgICBmbHVzaCBzdGRlcnJcbiAgd2l0aFxuICAgIHwgT3V0X29mX21lbW9yeSAtPlxuICAgICAgICBwcmVycl9lbmRsaW5lXG4gICAgICAgICAgXCJGYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlclwiXG5cbigqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFtjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbl0gaW5cbiAgIFtydW50aW1lL3ByaW50ZXhjLmNdIHdoaWNoIGV4cGVjdHMgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlXG4gIHdpdGggXyAtPlxuICAgICgqIFRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICopXG4gICAgKClcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiXG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblxuIiwibGV0IF9fb2NhbWxfbGV4X3RhYmxlcyA9IHtcbiAgTGV4aW5nLmxleF9iYXNlID1cbiAgIFwiXFwwMDBcXDAwMFxcMjU0XFwyNTVcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfYmFja3RyayA9XG4gICBcIlxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHQgPVxuICAgXCJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF90cmFucyA9XG4gICBcIlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDJcXDAwMFwiO1xuICBMZXhpbmcubGV4X2NoZWNrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfYmFzZV9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfYmFja3Rya19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfZGVmYXVsdF9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfdHJhbnNfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NoZWNrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9jb2RlID1cbiAgIFwiXCI7XG59XG5cbmxldCByZWMgcmVhZF9qdW5rIGJ1ZiBuIGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2p1bmtfcmVjIGJ1ZiBuIGxleGJ1ZiAwXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9qdW5rX3JlYyBidWYgbiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDIgXCJsaWIvbGV4ZXJfdXRpbHMubWxsXCJcbiAgICAgICAgKCAoKSApXG4jIDk4IFwibGliL2xleGVyX3V0aWxzLm1sXCJcblxuICB8IDEgLT5cbiMgMyBcImxpYi9sZXhlcl91dGlscy5tbGxcIlxuICAgICAgKFxuICAgICBpZiBuIDw9IDAgdGhlbiAoKVxuICAgICBlbHNlIGJlZ2luXG4gICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAoTGV4aW5nLmxleGVtZV9jaGFyIGxleGJ1ZiAwKTtcbiAgICAgICByZWFkX2p1bmsgYnVmIChuIC0gMSkgbGV4YnVmXG4gICAgIGVuZFxuICAgICApXG4jIDEwOSBcImxpYi9sZXhlcl91dGlscy5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfanVua19yZWMgYnVmIG4gbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbjs7XG5cbiMgMTEgXCJsaWIvbGV4ZXJfdXRpbHMubWxsXCJcbiBcbmxldCByZWFkX2p1bmtfd2l0aG91dF9wb3NpdGlvbnMgYnVmIG4gKGxleGJ1ZiA6IExleGluZy5sZXhidWYpID1cbiAgbGV0IGxleF9hYnNfcG9zID0gbGV4YnVmLmxleF9hYnNfcG9zIGluXG4gIGxldCBsZXhfc3RhcnRfcG9zID0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgcmVhZF9qdW5rIGJ1ZiBuIGxleGJ1ZjtcbiAgbGV4YnVmLmxleF9zdGFydF9wb3MgPC0gbGV4X3N0YXJ0X3BvcyArIDE7XG4gIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBsZXhfYWJzX3Bvc1xuXG4jIDEyNSBcImxpYi9sZXhlcl91dGlscy5tbFwiXG4iLCJvcGVuIEJyclxuXG50eXBlIG1ldGhvZCcgPSBHZXQgfCBQb3N0XG5cbmxldCBqc3RyX29mX21ldGhvZCA9IGZ1bmN0aW9uIEdldCAtPiBKc3RyLnYgXCJHRVRcIiB8IFBvc3QgLT4gSnN0ci52IFwiUE9TVFwiXG5cbm1vZHVsZSBUeXBlcyA9IHN0cnVjdFxuICB0eXBlIG9yZGVyID0gQXNjZW5kaW5nIHwgRGVzY2VuZGluZyBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBzb3J0ID1cbiAgICB8IEFsYnVtXG4gICAgfCBBbGJ1bUFydGlzdFxuICAgIHwgQXJ0aXN0XG4gICAgfCBCdWRnZXRcbiAgICB8IENvbW11bml0eVJhdGluZ1xuICAgIHwgQ3JpdGljUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZVBsYXllZFxuICAgIHwgUGxheUNvdW50XG4gICAgfCBQcmVtaWVyZURhdGVcbiAgICB8IFByb2R1Y3Rpb25ZZWFyXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgUmFuZG9tXG4gICAgfCBSZXZlbnVlXG4gICAgfCBSdW50aW1lXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cbmVuZFxuXG50eXBlIHVzZXIgPSB7XG4gIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgc2VydmVyX25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG59XG5bQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbm1vZHVsZSB0eXBlIFF1ZXJ5ID0gc2lnXG4gIHR5cGUgcGF0aF9wYXJhbXNcbiAgdHlwZSBwYXJhbXMgW0BAZGVyaXZpbmcgeW9qc29uXVxuICB0eXBlIHJlc3BvbnNlIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB2YWwgbWV0aG9kJyA6IG1ldGhvZCdcbiAgdmFsIGVuZHBvaW50IDogcGF0aF9wYXJhbXMgLT4gc3RyaW5nIGxpc3RcbmVuZFxuXG5tb2R1bGUgQXV0aGVudGljYXRlX2J5X25hbWUgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHsgdXNlcm5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiVXNlcm5hbWVcIl0gcHcgOiBzdHJpbmcgW0BrZXkgXCJQd1wiXSB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIHVzZXIgOiB1c2VyOyBbQGtleSBcIlVzZXJcIl1cbiAgICBhY2Nlc3NfdG9rZW4gOiBzdHJpbmc7IFtAa2V5IFwiQWNjZXNzVG9rZW5cIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBQb3N0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIlVzZXJzXCI7IFwiQXV0aGVudGljYXRlQnlOYW1lXCIgXVxuZW5kXG5cbm1vZHVsZSBJdGVtID0gc3RydWN0XG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoID0gKHN0cmluZyAqIHN0cmluZykgbGlzdFxuXG4gIGxldCBpbWFnZV9ibHVyX2hhc2hfb2ZfeW9qc29uIHkgPVxuICAgIGxldCBhc3NvYyA9IFlvanNvbi5TYWZlLlV0aWwudG9fYXNzb2MgeSBpblxuICAgIExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgdikpIGFzc29jXG5cbiAgbGV0IHlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2ggaSA6IFlvanNvbi5TYWZlLnQgPVxuICAgIGxldCBhc3NvYyA9IExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgYFN0cmluZyB2KSkgaSBpblxuICAgIGBBc3NvYyBhc3NvY1xuXG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoZXMgPSB7XG4gICAgcHJpbWFyeSA6IGltYWdlX2JsdXJfaGFzaCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQcmltYXJ5XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgdHlwZV8gPVxuICAgIHwgQWdncmVnYXRlRm9sZGVyXG4gICAgfCBBdWRpb1xuICAgIHwgQXVkaW9Cb29rXG4gICAgfCBCYXNlUGx1Z2luRm9sZGVyXG4gICAgfCBCb29rXG4gICAgfCBCb3hTZXRcbiAgICB8IENoYW5uZWxcbiAgICB8IENoYW5uZWxGb2xkZXJJdGVtXG4gICAgfCBDb2xsZWN0aW9uRm9sZGVyXG4gICAgfCBFcGlzb2RlXG4gICAgfCBGb2xkZXJcbiAgICB8IEdlbnJlXG4gICAgfCBMaXZlVHZDaGFubmVsXG4gICAgfCBMaXZlVHZQcm9ncmFtXG4gICAgfCBNYW51YWxQbGF5bGlzdHNGb2xkZXJcbiAgICB8IE1vdmllXG4gICAgfCBNdXNpY0FsYnVtXG4gICAgfCBNdXNpY0FydGlzdFxuICAgIHwgTXVzaWNHZW5yZVxuICAgIHwgTXVzaWNWaWRlb1xuICAgIHwgUGVyc29uXG4gICAgfCBQaG90b1xuICAgIHwgUGhvdG9BbGJ1bVxuICAgIHwgUGxheWxpc3RcbiAgICB8IFBsYXlsaXN0c0ZvbGRlclxuICAgIHwgUHJvZ3JhbVxuICAgIHwgUmVjb3JkaW5nXG4gICAgfCBTZWFzb25cbiAgICB8IFNlcmllc1xuICAgIHwgU3R1ZGlvXG4gICAgfCBUcmFpbGVyXG4gICAgfCBUdkNoYW5uZWxcbiAgICB8IFR2UHJvZ3JhbVxuICAgIHwgVXNlclJvb3RGb2xkZXJcbiAgICB8IFVzZXJWaWV3XG4gICAgfCBWaWRlb1xuICAgIHwgWWVhclxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBmaWVsZCA9XG4gICAgfCBBaXJUaW1lXG4gICAgfCBCYXNpY1N5bmNJbmZvXG4gICAgfCBDYW5EZWxldGVcbiAgICB8IENhbkRvd25sb2FkXG4gICAgfCBDaGFubmVsSW1hZ2VcbiAgICB8IENoYW5uZWxJbmZvXG4gICAgfCBDaGFwdGVyc1xuICAgIHwgQ2hpbGRDb3VudFxuICAgIHwgQ3VtdWxhdGl2ZVJ1blRpbWVUaWNrc1xuICAgIHwgQ3VzdG9tUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZUxhc3RNZWRpYUFkZGVkXG4gICAgfCBEYXRlTGFzdFJlZnJlc2hlZFxuICAgIHwgRGF0ZUxhc3RTYXZlZFxuICAgIHwgRGlzcGxheVByZWZlcmVuY2VzSWRcbiAgICB8IEVuYWJsZU1lZGlhU291cmNlRGlzcGxheVxuICAgIHwgRXRhZ1xuICAgIHwgRXh0ZXJuYWxFdGFnXG4gICAgfCBFeHRlcm5hbFNlcmllc0lkXG4gICAgfCBFeHRlcm5hbFVybHNcbiAgICB8IEV4dHJhSWRzXG4gICAgfCBHZW5yZXNcbiAgICB8IEhlaWdodFxuICAgIHwgSG9tZVBhZ2VVcmxcbiAgICB8IEluaGVyaXRlZFBhcmVudGFsUmF0aW5nVmFsdWVcbiAgICB8IElzSERcbiAgICB8IEl0ZW1Db3VudHNcbiAgICB8IExvY2FsVHJhaWxlckNvdW50XG4gICAgfCBNZWRpYVNvdXJjZUNvdW50XG4gICAgfCBNZWRpYVNvdXJjZXNcbiAgICB8IE1lZGlhU3RyZWFtc1xuICAgIHwgT3JpZ2luYWxUaXRsZVxuICAgIHwgT3ZlcnZpZXdcbiAgICB8IFBhcmVudElkXG4gICAgfCBQYXRoXG4gICAgfCBQZW9wbGVcbiAgICB8IFBsYXlBY2Nlc3NcbiAgICB8IFByZXNlbnRhdGlvblVuaXF1ZUtleVxuICAgIHwgUHJpbWFyeUltYWdlQXNwZWN0UmF0aW9cbiAgICB8IFByb2R1Y3Rpb25Mb2NhdGlvbnNcbiAgICB8IFByb3ZpZGVySWRzXG4gICAgfCBSZWN1cnNpdmVJdGVtQ291bnRcbiAgICB8IFJlZnJlc2hTdGF0ZVxuICAgIHwgUmVtb3RlVHJhaWxlcnNcbiAgICB8IFNjcmVlbnNob3RJbWFnZVRhZ3NcbiAgICB8IFNlYXNvblVzZXJEYXRhXG4gICAgfCBTZXJpZXNQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFNlcmllc1ByaW1hcnlJbWFnZVxuICAgIHwgU2VyaWVzU3R1ZGlvXG4gICAgfCBTZXJ2aWNlTmFtZVxuICAgIHwgU2V0dGluZ3NcbiAgICB8IFNvcnROYW1lXG4gICAgfCBTcGVjaWFsRXBpc29kZU51bWJlcnNcbiAgICB8IFNwZWNpYWxGZWF0dXJlQ291bnRcbiAgICB8IFN0dWRpb3NcbiAgICB8IFN5bmNJbmZvXG4gICAgfCBUYWdsaW5lc1xuICAgIHwgVGFnc1xuICAgIHwgVGhlbWVTb25nSWRzXG4gICAgfCBUaGVtZVZpZGVvSWRzXG4gICAgfCBXaWR0aFxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgKCogVGhlIFtUeXBlXSBmaWVsZCBpcyBhY3R1YWxseSBhIGpzb24gc3RyaW5nIGJ1dCB3ZSB3YW50IHRvIHNlZSBpdCBhcyBhXG4gICAgIHZhcmlhbnQgKHdoaWNoIGlzIGEgbGlzdCBvZiBvbmUgc3RyaW5nKSAqKVxuICB0eXBlIHR5cGVfc3RyID0gdHlwZV9cblxuICBsZXQgdHlwZV9zdHJfb2ZfeW9qc29uIGogPVxuICAgIGxldCBzID0gWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgaiBpblxuICAgIHR5cGVfX29mX3lvanNvbiAoYExpc3QgWyBgU3RyaW5nIHMgXSlcblxuICBsZXQgeW9qc29uX29mX3R5cGVfc3RyIHRzID1cbiAgICBtYXRjaCB5b2pzb25fb2ZfdHlwZV8gdHMgd2l0aCBgTGlzdCBbIGpzb24gXSAtPiBqc29uIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB0eXBlIHQgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgc29ydF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlNvcnROYW1lXCJdXG4gICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICBwYXRoIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlBhdGhcIl1cbiAgICBhbGJ1bV9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJBbGJ1bUlkXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbiBvcHRpb247XG4gICAgICAgICgqIFtQYXJlbnRJZF0gbWlnaHQgYWJzZW50LCBbbnVsbF0sIG9yIGEgc3RyaW5nICopXG4gICAgICAgIFtAeW9qc29uLm9wdGlvbl1cbiAgICAgICAgW0BrZXkgXCJQYXJlbnRJZFwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICAgIGltYWdlX2JsdXJfaGFzaGVzIDogaW1hZ2VfYmx1cl9oYXNoZXM7IFtAa2V5IFwiSW1hZ2VCbHVySGFzaGVzXCJdXG4gICAgdHlwZV8gOiB0eXBlX3N0cjsgW0BrZXkgXCJUeXBlXCJdXG4gICAgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nIG9wdGlvbjtcbiAgICAgICAgW0BkZWZhdWx0IE5vbmVdIFtAeW9qc29uX2Ryb3BfZGVmYXVsdCAoID0gKV0gW0BrZXkgXCJDb2xsZWN0aW9uVHlwZVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpZHMgOiBzdHJpbmcgbGlzdDsgW0BkZWZhdWx0IFtdXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiaWRzXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInBhcmVudElkXCJdXG4gICAgdXNlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJ1c2VySWRcIl1cbiAgICBmaWVsZHMgOiBJdGVtLmZpZWxkIGxpc3Q7XG4gICAgaW5jbHVkZV9pdGVtX3R5cGVzIDogSXRlbS50eXBlXyBsaXN0OyBbQGtleSBcImluY2x1ZGVJdGVtVHlwZXNcIl1cbiAgICBzdGFydF9pbmRleCA6IGludCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzdGFydEluZGV4XCJdXG4gICAgbGltaXQgOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dXG4gICAgc29ydF9vcmRlciA6IFR5cGVzLm9yZGVyIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInNvcnRPcmRlclwiXVxuICAgIHNvcnRfYnkgOiBUeXBlcy5zb3J0IGxpc3Q7IFtAa2V5IFwic29ydEJ5XCJdXG4gICAgcmVjdXJzaXZlIDogYm9vbDtcbiAgICBlbmFibGVfdXNlcl9kYXRhIDogYm9vbDsgW0BrZXkgXCJlbmFibGVVc2VyRGF0YVwiXVxuICAgIGVuYWJsZV9pbWFnZXMgOiBib29sOyBbQGtleSBcImVuYWJsZUltYWdlc1wiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IF8gPSBbIFwiSXRlbXNcIiBdXG5lbmRcblxubW9kdWxlIFZpZXdzID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB7IHVzZXJfaWQgOiBzdHJpbmcgfVxuXG4gIHR5cGUgcGFyYW1zID0ge1xuICAgIGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA6IGJvb2w7IFtAa2V5IFwiaW5jbHVkZUV4dGVybmFsQ29udGVudFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IHBwID0gWyBcIlVzZXJzXCI7IHBwLnVzZXJfaWQ7IFwiVmlld3NcIiBdXG5lbmRcblxubW9kdWxlIFZpcnR1YWxfZm9sZGVycyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgdmlydHVhbF9mb2xkZXIgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgbG9jYXRpb25zIDogc3RyaW5nIGxpc3Q7IFtAa2V5IFwiTG9jYXRpb25zXCJdXG4gICAgaXRlbV9pZCA6IHN0cmluZzsgW0BrZXkgXCJJdGVtSWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgdHlwZSByZXNwb25zZSA9IHZpcnR1YWxfZm9sZGVyIGxpc3QgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIkxpYnJhcnlcIjsgXCJWaXJ0dWFsRm9sZGVyc1wiIF1cbmVuZFxuXG5tb2R1bGUgU3lzdGVtID0gc3RydWN0XG4gIG1vZHVsZSBJbmZvID0gc3RydWN0XG4gICAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICAgdHlwZSByZXNwb25zZSA9IHtcbiAgICAgIGxvY2FsX2FkZHJlc3MgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJMb2NhbEFkcmVzc1wiXVxuICAgICAgc2VydmVyX25hbWUgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVyTmFtZVwiXVxuICAgICAgcHJvZHVjdF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiUHJvZHVjdE5hbWVcIl1cbiAgICAgIG9wZXJhdGluZ19zeXN0ZW0gOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJPcGVyYXRpbmdTeXN0ZW1cIl1cbiAgICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgfVxuICAgIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICAgIGxldCBtZXRob2QnID0gR2V0XG4gICAgbGV0IGVuZHBvaW50IF8gPSBbIFwiU3lzdGVtXCI7IFwiSW5mb1wiIF1cbiAgZW5kXG5lbmRcblxuKCogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBiZSBmaWxsZWQgYnkgdGhlIGFwcCAqKVxubGV0IHNlc3Npb25fdXVpZCA9IHJlZiBOb25lXG5sZXQgc2V0X3Nlc3Npb25fdXVpZCBzID0gc2Vzc2lvbl91dWlkIDo9IFNvbWUgc1xuXG5sZXQgYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgPVxuICBsZXQgdG9rZW4gPVxuICAgIG1hdGNoIHRva2VuIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSB0IC0+IFByaW50Zi5zcHJpbnRmIFwiLCBUb2tlbj0lU1wiIHRcbiAgaW5cbiAgbGV0IHNlc3Npb25fdXVpZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpcIlwiICFzZXNzaW9uX3V1aWQgaW5cbiAgUHJpbnRmLnNwcmludGZcbiAgICBcIk1lZGlhQnJvd3NlciBDbGllbnQ9XFxcIk9jYW1peFxcXCIsIERldmljZT1cXFwiRmlyZWZveFxcXCIsIERldmljZUlkPVxcXCIlc1xcXCIsIFxcXG4gICAgIFZlcnNpb249XFxcIjAuMVxcXCIlc1wiXG4gICAgc2Vzc2lvbl91dWlkIHRva2VuXG5cbmxldCByZXF1ZXN0ICh0eXBlIHBwIHAgcikgfmJhc2VfdXJsID90b2tlbiA/aGVhZGVyc1xuICAgIChtb2R1bGUgUSA6IFF1ZXJ5XG4gICAgICB3aXRoIHR5cGUgcGF0aF9wYXJhbXMgPSBwcFxuICAgICAgIGFuZCB0eXBlIHBhcmFtcyA9IHBcbiAgICAgICBhbmQgdHlwZSByZXNwb25zZSA9IHIpIChwYXJhbXMgOiBwKSAocGF0aF9wYXJhbXMgOiBwcCkgOiByIEZ1dC5vcl9lcnJvciA9XG4gIGxldCBvcGVuIEJycl9pby5GZXRjaCBpblxuICBsZXQgYmFzZV91cmkgPSBVcmkudiAoSnN0ci52IGJhc2VfdXJsKSBpblxuICBsZXQgYmFzZV9wYXRoX3NlZ21lbnRzID0gUmVzdWx0LmdldF9vayBAQCBVcmkucGF0aF9zZWdtZW50cyBiYXNlX3VyaSBpblxuICBsZXQgZW5kcG9pbnRfcGF0aF9zZWdtZW50cyA9IExpc3QubWFwIEpzdHIudiAoUS5lbmRwb2ludCBwYXRoX3BhcmFtcykgaW5cbiAgbGV0IHBhdGhfc2VnbWVudHMgPVxuICAgIGlmIGJhc2VfcGF0aF9zZWdtZW50cyA9IFsgSnN0ci5lbXB0eSBdIHRoZW4gZW5kcG9pbnRfcGF0aF9zZWdtZW50c1xuICAgIGVsc2UgTGlzdC5jb25jYXQgWyBiYXNlX3BhdGhfc2VnbWVudHM7IGVuZHBvaW50X3BhdGhfc2VnbWVudHMgXVxuICBpblxuICBsZXQgdXJpID0gVXJpLndpdGhfcGF0aF9zZWdtZW50cyBiYXNlX3VyaSBwYXRoX3NlZ21lbnRzIGluXG4gIGxldCB1cmkgPSBSZXN1bHQuZ2V0X29rIHVyaSBpblxuICBsZXQgYXV0aG9yaXphdGlvbiA9IGF1dGhvcml6YXRpb24gP3Rva2VuICgpIGluXG4gIGxldCBoZWFkZXJzID1cbiAgICBIZWFkZXJzLm9mX2Fzc29jID9pbml0OmhlYWRlcnNcbiAgICAgIEpzdHIuXG4gICAgICAgIFtcbiAgICAgICAgICAodiBcImNvbnRlbnQtdHlwZVwiLCB2IFwidGV4dC9qc29uXCIpO1xuICAgICAgICAgICh2IFwiWC1FbWJ5LUF1dGhvcml6YXRpb25cIiwgdiBhdXRob3JpemF0aW9uKTtcbiAgICAgICAgXVxuICBpblxuICBsZXQgbWV0aG9kJyA9IGpzdHJfb2ZfbWV0aG9kIFEubWV0aG9kJyBpblxuICBsZXQgaW5pdCwgdXJsID1cbiAgICBtYXRjaCBRLm1ldGhvZCcgd2l0aFxuICAgIHwgR2V0IC0+XG4gICAgICAgIGxldCBwYXJhbXMgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEpzb24uZGVjb2RlIHw+IFJlc3VsdC5nZXRfb2sgfD4gVXJpLlBhcmFtcy5vZl9vYmpcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVyaV93aXRoX3BhcmFtcyA9IFVyaS53aXRoX3F1ZXJ5X3BhcmFtcyB1cmkgcGFyYW1zIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgKCksIFVyaS50b19qc3RyIHVyaV93aXRoX3BhcmFtcylcbiAgICB8IFBvc3QgLT5cbiAgICAgICAgbGV0IGJvZHkgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEJvZHkub2ZfanN0clxuICAgICAgICBpblxuICAgICAgICAoUmVxdWVzdC5pbml0IH5oZWFkZXJzIH5tZXRob2QnIH5ib2R5ICgpLCBVcmkudG9fanN0ciB1cmkpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogcmVzID0gcmVxdWVzdCBAQCBSZXF1ZXN0LnYgfmluaXQgdXJsIGluXG4gIGxldCsganNvbiA9IFJlc3BvbnNlLmFzX2JvZHkgcmVzIHw+IEJvZHkudGV4dCBpblxuICBsZXQgeW9qc29uID0gWW9qc29uLlNhZmUuZnJvbV9zdHJpbmcgKEpzdHIudG9fc3RyaW5nIGpzb24pIGluXG4gIHRyeSBRLnJlc3BvbnNlX29mX3lvanNvbiB5b2pzb25cbiAgd2l0aCBlIC0+XG4gICAgQ29uc29sZS5sb2cgWyBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgZGVjb2RpbmcgcmVzcG9uc2U6IFwiOyBqc29uIF07XG4gICAgQ29uc29sZS5sb2cgWyBlIF07XG4gICAgcmFpc2UgZVxuIiwib3BlbiEgU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJycl9pb1xubW9kdWxlIEFwaSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4oKiBQcm9wb3NpdGlvbjpcbiAgIC0gVXNlIHByaW1hcnkga2V5IHRvIHByb3ZpZGUgZmlsdGVyaW5nXG4gICAtIFVzZSBpbmRleCBrZXlzIHRvIHByb3ZpZGUgc29ydHNcblxuICAgQmlnIHByaW1hcnkga2V5cyBkcml2ZSB0aGUgY29zdCBvZiBbZ2V0X2FsbF9rZXlzXSB1cC5cbiAgIFdlIGNvdWxkIGRlbGVnYXRlIHNvbWUgZmlsdGVyaW5nIHRvIHRoZSBpbmRleCBrZXlzIGlmIG5lY2Vzc2FyeS5cblxuICAgIFdlIGNvdWxkIGFsc28gdHJpZWQgdG8gcHJlLXByb2Nlc3Mgb3IgY29tcHJlc3MgdGhlIGtleXMgKilcblxubGV0IHRfdG9fanYgZW5jb2RlciB0ID1cbiAgZW5jb2RlciB0IHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLm9mX3N0cmluZyB8PiBCcnIuSnNvbi5kZWNvZGVcbiAgfD4gUmVzdWx0LmdldF9leG5cblxubGV0IGp2X3RvX3QgZGVjb2RlciBqID1cbiAgbGV0IGpzb24gPSBCcnIuSnNvbi5lbmNvZGUgaiBpblxuICBPayAoSnN0ci50b19zdHJpbmcganNvbiB8PiBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyB8PiBkZWNvZGVyKVxuXG5tb2R1bGUgT3JkZXJyZWRfaXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0geyBpZCA6IGludDsgaXRlbSA6IHN0cmluZyBvcHRpb24gfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9pbnQga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9faW50IGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJpZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cbiAgbGV0IGdldF9rZXkgdCA9IHQuaWRcbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbi5BcGlcblxuICB0eXBlIHNvcnRzID0geyBkYXRlX2FkZGVkIDogaW50OyB2aWV3cyA6IHN0cmluZyBsaXN0OyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSB0ID0geyBzb3J0cyA6IHNvcnRzOyBpdGVtIDogSXRlbS50IH0gW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBjb21wYXJlIHQgdCcgPSBTdHJpbmcuY29tcGFyZSB0LnNvcnRzLnNvcnRfbmFtZSB0Jy5zb3J0cy5zb3J0X25hbWVcblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0geyBpZCA6IHN0cmluZzsgc29ydF9uYW1lIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiB7IGlkOyBzb3J0X25hbWU7IHZpZXdzIH0gPVxuICAgICAgbGV0IGlkID0gSnYub2Zfc3RyaW5nIGlkIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gSnYub2Zfc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgbGV0IHZpZXdzID0gSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgdmlld3MgaW5cbiAgICAgIEp2Lm9mX2p2X2FycmF5IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi50b19qdl9hcnJheSBqIHdpdGhcbiAgICAgIHwgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF0gLT5cbiAgICAgICAgICBsZXQgaWQgPSBKdi50b19zdHJpbmcgaWQgaW5cbiAgICAgICAgICBsZXQgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgICAgIGxldCB2aWV3cyA9IEp2LnRvX2xpc3QgSnYudG9fc3RyaW5nIHZpZXdzIGluXG4gICAgICAgICAgeyBpZDsgc29ydF9uYW1lOyB2aWV3cyB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9XG4gICAgICBJbmRleGVkX2RiLktleV9wYXRoLihcbiAgICAgICAgUyBbfCBJZCBcIml0ZW0uSWRcIjsgSWQgXCJpdGVtLk5hbWVcIjsgSWQgXCJzb3J0cy52aWV3c1wiIHxdKVxuICBlbmRcblxuICBtb2R1bGUgS2V5X2RhdGVfYWRkZWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwic29ydHMuZGF0ZV9hZGRlZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfaWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaXRlbS5JZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdmlld19raW5kID0gc3RydWN0XG4gICAgKCogdG9kbzogdXNlIGEgZW51bSBmb3Iga2luZHMgKilcbiAgICB0eXBlIHQgPSB7IHR5cGUnIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiBfayA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgdHlwZSc7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgeyB0eXBlJyA9IEp2LnRvX3N0cmluZyB0eXBlJzsgdmlld3MgPSBKdi4odG9fbGlzdCB0b19zdHJpbmcgdmlld3MpIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5UeXBlXCI7IElkIFwic29ydHMudmlld3NcIiB8XVxuICBlbmRcblxuICBtb2R1bGUgS2V5X3R5cGVfbmFtZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuXG4gICAgbGV0IHRvX2p2IF90ID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCBjb2xsZWN0aW9uX3R5cGU7IHNvcnRfbmFtZSB8XSAtPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25fdHlwZSA9IEp2LnRvX3N0cmluZyBjb2xsZWN0aW9uX3R5cGU7XG4gICAgICAgICAgICBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uQ29sbGVjdGlvblR5cGVcIjsgSWQgXCJzb3J0cy5zb3J0X25hbWVcIiB8XVxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuXG4gIGxldCBnZXRfa2V5IHQgPVxuICAgIHtcbiAgICAgIEtleS5zb3J0X25hbWUgPSB0LnNvcnRzLnNvcnRfbmFtZTtcbiAgICAgIGlkID0gdC5pdGVtLkl0ZW0uaWQ7XG4gICAgICB2aWV3cyA9IHQuc29ydHMudmlld3M7XG4gICAgfVxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlciA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4gICgqIHRvZG86IG11bHRpc2VydmVyOiB3ZSBzaG91bGQgYWRkIGEgc2VydmVyX2lkIGtleSAqKVxuICB0eXBlIHQgPSBWaXJ0dWFsX2ZvbGRlcnMudmlydHVhbF9mb2xkZXIgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiSXRlbUlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcInZpcnR1YWxfZm9sZGVyc1wiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG4gIGxldCBnZXRfa2V5IHQgPSB0LlZpcnR1YWxfZm9sZGVycy5pdGVtX2lkXG5lbmRcblxubW9kdWxlIE9yZGVycmVkX2l0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoT3JkZXJyZWRfaXRlbXMpXG5tb2R1bGUgSXRlbXNfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChJdGVtcylcbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcl9zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKFZpcnR1YWxfZm9sZGVyKVxuXG5tb2R1bGUgSXRlbXNCeURhdGVBZGRlZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfZGF0ZV9hZGRlZClcblxubW9kdWxlIEl0ZW1zQnlWaWV3QW5kS2luZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV92aWV3X2FuZF9raW5kXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfdmlld19raW5kKVxuXG5tb2R1bGUgSXRlbXNCeUlkID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2lkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfaWQpXG5cbm1vZHVsZSBJdGVtc0J5VHlwZUFuZE5hbWUgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdHlwZV9hbmRfbmFtZVwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3R5cGVfbmFtZSlcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2lvLkluZGV4ZWRfZGJcbm1vZHVsZSBTb3VyY2UgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIE9JID0gU3RvcmVzLk9yZGVycmVkX2l0ZW1zX3N0b3JlXG5tb2R1bGUgSSA9IFN0b3Jlcy5JdGVtc19zdG9yZVxubW9kdWxlIFZGID0gU3RvcmVzLlZpcnR1YWxfZm9sZGVyX3N0b3JlXG5vcGVuIFNvdXJjZS5BcGlcblxuKCogSXRlbXMgSGllcmFyY2h5XG5cbiAgIFVzZXJSb290Rm9sZGVyIChcIk1lZGlhIEZvbGRlcnNcIiBcImU5ZDUwNzVhNTU1YzFjYmMzOTRlZWM0Y2VmMjk1Mjc0XCIpXG4gICAgICAgICAgICAgICAgICAoR2V0cyB0aGUgcm9vdCBmb2xkZXIgZnJvbSBhIHVzZXIncyBsaWJyYXJ5LiApXG4gICBeIENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIEFnZ3JlZ2F0ZUZvbGRlciAoXCJyb290XCIgXCJmMjdjYWEzN2U1MTQyMjI1Y2NlZGVkNDhmNjU1MzUwMlwiKVxuICAgXiBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpXG4gICBeIEZvbGRlcisgPC0gTXVzaWNBcnRpc3QgPC0gTXVzaWNBbGJ1bSA8LSBBdWRpb1xuXG4gICBKZWxseWZpbiBjb25zaWRlcnMgdGhhdCBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpID09IENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIFRoaXMgZXF1YWxpdHkgY2FuIGJlIHJldHJpdmVkIGJ5IHF1ZXJ5aW5nIHRoZSBcIlZpcnR1YWxGb2xkZXJzXCIgYW5kIGxvb2sgYXRcbiAgIHRoZSBsb2NhdGlvbnMnIHBhdGhzLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgbm90IGFjY2Vzc2libGUgdG8gdW5wcml2aWxlZGdlZCB1c2Vycy4uLlxuXG4gICBUbyBhY3R1YWxseSBrbm93IHdoaWNoIGZvbGRlcnMgYXJlIHBhcnQgb2YgYSB1c2VyIHZpZXcgd2UgbmVlZCB0byBxdWVyeSB0aGVcbiAgIGl0ZW1zIHRoYXQgaGF2ZSB0aGlzIHZpZXcncyBpZCBhcyBhIFtwYXJlbnRJZF0uIFRoZSBhY3R1YWwgW3BhcmVudElkXSBvZlxuICAgdGhlc2UgaXRlbXMgd2lsbCBiZSBkaWZmZXJlbnQgYW5kIGFyZSB0aGUgaWRzIGFjdHVhbCBmb2xkZXJzIHRoYXRcbiAgIGNvbnN0aXR1dGUgdGhpcyB2aWV3LlxuXG4gICBGb3Igc2ltcGxpY2l0eSAoPykgd2UgY29uc2lkZXIgdGhhdCBhbiBpdGVtIGlzIHBhcnQgb2YgYSB2aWV3IGlmIGl0cyBwYXRoIGlzXG4gICBwcmVmaXhlZCBieSBvbmUgb2YgdGhlIHZpZXcncyB2aXJ0dWFsIGZvbGRlciBsb2NhdGlvbnMuXG4qKVxuXG5sZXQgY2h1bmtfc2l6ZSA9IDUwMFxubGV0IGluY2x1ZGVfaXRlbV90eXBlcyA9IFsgU291cmNlLkFwaS5JdGVtLk11c2ljQXJ0aXN0OyBNdXNpY0FsYnVtOyBBdWRpbyBdXG5cbmxldCBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgcmVzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICB7XG4gICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkqKVxuICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgZmllbGRzID0gW107XG4gICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICBsaW1pdCA9IFNvbWUgMDtcbiAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICgpXG4gIGluXG4gIHJlcy50b3RhbF9yZWNvcmRfY291bnRcblxudHlwZSBkYl9pbmZvcyA9IHtcbiAgbGFzdF9rZXkgOiBpbnQgb3B0aW9uO1xuICBsYXN0X3ZhbHVlIDogU3RvcmVzLk9yZGVycmVkX2l0ZW1zLnQgb3B0aW9uO1xufVxuXG5sZXQgZ2V0X2RiX2luZm9zIGlkYiA9XG4gIGxldCBpbmZvcywgc2V0X2luZm9zID0gRnV0LmNyZWF0ZSAoKSBpblxuICBsZXQgdHJhbnNhY3Rpb24gPSBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZG9ubHkgaWRiIGluXG4gIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICBsZXQgcmVxID0gT0kub3Blbl9jdXJzb3IgfmRpcmVjdGlvbjpQcmV2IHN0b3JlIGluXG4gIGxldCBsYXN0X2tleSA9IHJlZiBOb25lIGluXG4gIGxldCBfID1cbiAgICBSZXF1ZXN0Lm9uX3N1Y2Nlc3MgcmVxIH5mOihmdW4gXyBxIC0+XG4gICAgICAgIG1hdGNoIFJlcXVlc3QucmVzdWx0IHEgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBOb25lIH1cbiAgICAgICAgfCBTb21lIGN1cnNvciAtPiAoXG4gICAgICAgICAgICBpZiBPcHRpb24uaXNfbm9uZSAhbGFzdF9rZXkgdGhlblxuICAgICAgICAgICAgICBsYXN0X2tleSA6PSBPSS5DdXJzb3Jfd2l0aF92YWx1ZS5rZXkgY3Vyc29yO1xuICAgICAgICAgICAgbWF0Y2ggT0kuQ3Vyc29yX3dpdGhfdmFsdWUudmFsdWUgY3Vyc29yIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSAoeyBpdGVtID0gU29tZSBfOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgICBzZXRfaW5mb3MgeyBsYXN0X2tleSA9ICFsYXN0X2tleTsgbGFzdF92YWx1ZSA9IFNvbWUgaXRlbSB9XG4gICAgICAgICAgICB8IF8gLT4gT0kuQ3Vyc29yX3dpdGhfdmFsdWUuY29udGludWUgY3Vyc29yKSlcbiAgaW5cbiAgaW5mb3NcblxubGV0IGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZTpfIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9zeW5jX2luZm9zID1cbiAgbGV0IGxhc3Rfa2V5ID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OigtMSkgZGJfc3luY19pbmZvcy5sYXN0X2tleSBpblxuICBpZiBsYXN0X2tleSA+IGxhc3Rfc291cmNlX2l0ZW1fa2V5IHRoZW5cbiAgICAoKiBUaGVyZSBhcmUgZmV3ZXIgaXRlbXMgaW4gdGhlIHNvdXJjZSB0aGFuIGV4cGVjdGVkICopXG4gICAgZmFsc2VcbiAgZWxzZVxuICAgICgqIFRvZG86IGNoZWNrIHRoYXQgdGhlIGxhc3Qga25vd24gaXRlbSBpcyB0aGUgc2FtZSB0aGFuIGluIHRoZSBzb3VyY2UgKilcbiAgICB0cnVlXG5cbnR5cGUgc3RhdHVzID1cbiAgfCBVbmtub3duXG4gIHwgSW5fc3luY1xuICB8IEluY29uc2lzdGVudFxuICB8IE5ld19pdGVtcyBvZiB7XG4gICAgICBmaXJzdF9taXNzaW5nX2tleSA6IGludDtcbiAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7XG4gICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludDtcbiAgICB9XG4gIHwgUGFydGlhbF9mZXRjaCBvZiB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IDogaW50IH1cblxudHlwZSBwcm9ncmVzcyA9IHsgdG90YWwgOiBpbnQ7IHJlbWFpbmluZyA6IGludCB9XG50eXBlIHJlcG9ydCA9IHsgc3RhdHVzIDogc3RhdHVzOyBzeW5jX3Byb2dyZXNzIDogcHJvZ3Jlc3Mgb3B0aW9uIH1cblxubGV0IGluaXRpYWxfcmVwb3J0ID0geyBzdGF0dXMgPSBVbmtub3duOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9XG5cbmxldCBzdGF0dXNfdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBVbmtub3duIC0+IFwiVW5rbm93blwiXG4gIHwgSW5fc3luYyAtPiBcIlN5bmNocm9uaXplZFwiXG4gIHwgSW5jb25zaXN0ZW50IC0+IFwiSW5jb25zaXN0ZW50XCJcbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBGb3JtYXQuc3ByaW50ZiBcIk5ldyBpdGVtczogbGFzdDogJWkgbWlzc2luZzogJWkgdW5mZXRjaGVkOiAlaVwiXG4gICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IGZpcnN0X21pc3Npbmdfa2V5IGZpcnN0X3VuZmV0Y2hlZF9rZXlcbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgPSBfIH0gLT5cbiAgICAgIEZvcm1hdC5zcHJpbnRmIFwiUGFydGlhbDogbGFzdDogJWkgdW5mZXRjaGVkOiAlaVwiIGZpcnN0X3VuZmV0Y2hlZF9rZXlcbiAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleVxuXG5sZXQgcHBfcHJvZ3Jlc3MgZm10IHsgdG90YWw7IHJlbWFpbmluZyB9ID1cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiKCVpLyVpKVwiIHJlbWFpbmluZyB0b3RhbFxuXG5sZXQgcHBfcmVwb3J0IGZtdCB7IHN0YXR1czsgc3luY19wcm9ncmVzcyB9ID1cbiAgbGV0IHN0YXR1cyA9IHN0YXR1c190b19zdHJpbmcgc3RhdHVzIGluXG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVzJWFcIiBzdGF0dXNcbiAgICAoRm9ybWF0LnBwX3ByaW50X29wdGlvbiBwcF9wcm9ncmVzcylcbiAgICBzeW5jX3Byb2dyZXNzXG5cbmxldCBsb2dfc3RhdHVzID0gZnVuY3Rpb25cbiAgfCBVbmtub3duIC0+IENvbnNvbGUuaW5mbyBbIFwiRGF0YWJhc2Ugc3RhdHVzIGlzIHVua25vd25cIiBdXG4gIHwgSW5fc3luYyAtPiBDb25zb2xlLmluZm8gWyBcIkRhdGFiYXNlIGlzIHN5bmNocm9uaXplZFwiIF1cbiAgfCBJbmNvbnNpc3RlbnQgLT4gQ29uc29sZS53YXJuIFsgXCJEYXRhYmFzZSBpcyBvdXQtb2Ytc3luY1wiIF1cbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBDb25zb2xlLmluZm9cbiAgICAgICAgW1xuICAgICAgICAgIFwiTmV3IGl0ZW1zIHdlcmUgYWRkZWQgdG8gdGhlIHNvdXJjZS5cIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X21pc3Npbmdfa2V5ICsgMTtcbiAgICAgICAgICBcIm5ldyBpdGVtc1wiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfdW5mZXRjaGVkX2tleSArIDE7XG4gICAgICAgICAgXCJ1bmZldGNoZWQgaXRlbXNcIjtcbiAgICAgICAgXVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBDb25zb2xlLmluZm9cbiAgICAgICAgW1xuICAgICAgICAgIFwiU29tZSBpdGVtcyBoYXZlIG5vdCBiZWVuIGZldGNoZWQgeWV0LlwiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfdW5mZXRjaGVkX2tleSArIDE7XG4gICAgICAgICAgXCJ1bmZldGNoZWQgaXRlbXNcIjtcbiAgICAgICAgXVxuXG5sZXQgY2hlY2tfc3RhdHVzIH5zb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQqIGRiX2luZm9zID0gZ2V0X2RiX2luZm9zIGlkYiBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHRvdGFsX2l0ZW1fY291bnQgPSBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSBpblxuICAoKiBLZXlzIHN0YXJ0IGF0IDAsIGl0J3MgbmF0dXJhbCB0byBjb3VudCBpdGVtIGJ5IHN0YXJ0aW5nIHdpdGggMCAqKVxuICBsZXQgbGFzdF9zb3VyY2VfaXRlbV9rZXkgPSB0b3RhbF9pdGVtX2NvdW50IC0gMSBpblxuICBpZiBub3QgKGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZSB+bGFzdF9zb3VyY2VfaXRlbV9rZXkgZGJfaW5mb3MpIHRoZW5cbiAgICBJbmNvbnNpc3RlbnRcbiAgZWxzZVxuICAgIG1hdGNoIGRiX2luZm9zIHdpdGhcbiAgICB8IHsgbGFzdF9rZXkgPSBOb25lOyBsYXN0X3ZhbHVlID0gTm9uZSB9IC0+XG4gICAgICAgICgqIFRoZSBkYiBoYXMgbm90IHlldCBiZWVuIHBvcHVsYXRlZCB3aXRoIHBsYWNlaG9sZGVycyAqKVxuICAgICAgICBOZXdfaXRlbXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaXJzdF9taXNzaW5nX2tleSA9IDA7XG4gICAgICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5ID0gMDtcbiAgICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgICAgIH1cbiAgICB8IHsgbGFzdF9rZXkgPSBTb21lIGtleTsgbGFzdF92YWx1ZSA9IGl0ZW0gfSB3aGVuIGtleSA8IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gICAgICAtPlxuICAgICAgICAoKiBOZXcgaXRlbXMgd2VyZSBhZGRlZCB0byB0aGUgc291cmNlIHNpbmNlIHRoZSBsYXN0IHN5bmMgKilcbiAgICAgICAgbGV0IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPVxuICAgICAgICAgIG1hdGNoIGl0ZW0gd2l0aCBOb25lIC0+IDAgfCBTb21lIHsgaWQ7IF8gfSAtPiBpZCArIDFcbiAgICAgICAgaW5cbiAgICAgICAgTmV3X2l0ZW1zXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlyc3RfbWlzc2luZ19rZXkgPSBrZXkgKyAxO1xuICAgICAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleTtcbiAgICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgICAgIH1cbiAgICB8IHsgbGFzdF9rZXkgPSBTb21lIGtleTsgbGFzdF92YWx1ZSA9IGl0ZW0gfSB3aGVuIGtleSA9IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gICAgICAtPiAoXG4gICAgICAgIG1hdGNoIGl0ZW0gd2l0aFxuICAgICAgICB8IFNvbWUgeyBpZDsgXyB9IHdoZW4gaWQgPSBrZXkgLT4gSW5fc3luY1xuICAgICAgICB8IFNvbWUgeyBpZDsgXyB9IC0+XG4gICAgICAgICAgICBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA9IGlkICsgMTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5ID0gMDsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSlcbiAgICB8IF8gLT4gSW5jb25zaXN0ZW50XG5cbmxldCB1cGRhdGVfdmlld3Mgc291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgdmlld3MgPVxuICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgIChtb2R1bGUgU291cmNlLkFwaS5WaWV3cylcbiAgICAgIHsgaW5jbHVkZV9leHRlcm5hbF9jb250ZW50ID0gZmFsc2UgfVxuICAgICAgeyB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZCB9XG4gIGluXG4gIExpc3QuaXRlciB2aWV3cy5pdGVtcyB+ZjooZnVuIChpdGVtIDogSXRlbS50KSAtPlxuICAgICAgbGV0IG9wZW4gQnJyX2lvLkluZGV4ZWRfZGIgaW5cbiAgICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSk7IChtb2R1bGUgSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgICBpblxuICAgICAgbGV0IHNfaXRlbXMgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBJKSB0cmFuc2FjdGlvbiBpblxuICAgICAgbGV0IHNvcnRfbmFtZSA9IE9wdGlvbi52YWx1ZSBpdGVtLnNvcnRfbmFtZSB+ZGVmYXVsdDppdGVtLm5hbWUgaW5cbiAgICAgIEkucHV0IHsgc29ydHMgPSB7IGRhdGVfYWRkZWQgPSAtMTsgdmlld3MgPSBbXTsgc29ydF9uYW1lIH07IGl0ZW0gfSBzX2l0ZW1zXG4gICAgICB8PiBpZ25vcmUpO1xuICB2aWV3c1xuXG5sZXQgZGVkdWNlX3ZpcnR1YWxfZm9sZGVyc19mcm9tX3ZpZXdzIHNvdXJjZSAodmlld3MgOiBWaWV3cy5yZXNwb25zZSkgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgcGFyZW50X2lkc19vZl92aWV3X2NoaWxkcmVuIHsgSXRlbS5pZDsgXyB9ID1cbiAgICBsZXQrIHJlcyA9XG4gICAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICAgIHBhcmVudF9pZCA9IFNvbWUgaWQ7XG4gICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgIGZpZWxkcyA9IFsgUGFyZW50SWQgXTtcbiAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcyA9IFtdO1xuICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgICAgbGltaXQgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9vcmRlciA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X2J5ID0gW107XG4gICAgICAgICAgICByZWN1cnNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICgpXG4gICAgaW5cbiAgICBMaXN0LmZvbGRfbGVmdCB+aW5pdDpTdHJpbmcuU2V0LmVtcHR5IHJlcy5pdGVtc1xuICAgICAgfmY6KGZ1biBzZXQgeyBJdGVtLnBhcmVudF9pZDsgXyB9IC0+XG4gICAgICAgIG1hdGNoIHBhcmVudF9pZCB3aXRoXG4gICAgICAgIHwgTm9uZSB8IFNvbWUgTm9uZSAtPiBzZXRcbiAgICAgICAgfCBTb21lIChTb21lIHBpZCkgLT4gU3RyaW5nLlNldC5hZGQgcGlkIHNldClcbiAgaW5cbiAgbGV0IHBhdGhzX29mX3BhcmVudHMgcGFyZW50cyA9XG4gICAgbGV0KyByZXMgPVxuICAgICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRzID0gU3RyaW5nLlNldC50b19saXN0IHBhcmVudHM7XG4gICAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICBmaWVsZHMgPSBbIFBhdGggXTtcbiAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcyA9IFtdO1xuICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgICAgbGltaXQgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9vcmRlciA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X2J5ID0gW107XG4gICAgICAgICAgICByZWN1cnNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICgpXG4gICAgaW5cbiAgICBMaXN0LmZpbHRlcl9tYXAgcmVzLml0ZW1zIH5mOihmdW4geyBJdGVtLmlkOyBwYXRoOyBfIH0gLT5cbiAgICAgICAgT3B0aW9uLm1hcCAoZnVuIHBhdGggLT4gKGlkLCBwYXRoKSkgcGF0aClcbiAgaW5cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQrIHJlc3VsdCA9XG4gICAgTGlzdC5tYXAgdmlld3MuaXRlbXMgfmY6KGZ1biAoeyBJdGVtLmlkOyBfIH0gYXMgdmlldykgLT5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgbGV0KiBwYXJlbnRzID0gcGFyZW50X2lkc19vZl92aWV3X2NoaWxkcmVuIHZpZXcgaW5cbiAgICAgICAgbGV0KyBwYXRocyA9IHBhdGhzX29mX3BhcmVudHMgcGFyZW50cyBpblxuICAgICAgICAoaWQsIHBhdGhzKSlcbiAgICB8PiBGdXQub2ZfbGlzdFxuICBpblxuICBSZXN1bHQuZmxhdHRlbl9sIHJlc3VsdFxuXG5sZXQgdmlld3Nfb2ZfcGF0aCAodmZvbGRlcnMgOiAoc3RyaW5nICogKHN0cmluZyAqIHN0cmluZykgbGlzdCkgbGlzdCkgcGF0aCA9XG4gICgqIFdlIGxvb2sgYXQgdGhlIHByZWZpeCBvZiBhIHBhdGggdG8gZGV0ZXJtaW5lIHdoaWNoIHZpcnR1YWxfZm9sZGVyIChhbmQgdGh1c1xuICAgICB2aWV3KSBpdCdzIGEgcGFydCBvZi4gKilcbiAgTGlzdC5maWx0ZXJfbWFwIHZmb2xkZXJzIH5mOihmdW4gKHZpZXdfaWQsIGxvY2F0aW9ucykgLT5cbiAgICAgIGlmIExpc3QuZXhpc3RzIGxvY2F0aW9ucyB+ZjooZnVuIChfLCBwcmUpIC0+IFN0cmluZy5wcmVmaXggfnByZSBwYXRoKSB0aGVuXG4gICAgICAgIFNvbWUgdmlld19pZFxuICAgICAgZWxzZSBOb25lKVxuXG5sZXQgc3luYyA/KHJlcG9ydCA9IGZ1biBfIC0+ICgpKSB+KHNvdXJjZSA6IFNvdXJjZS5jb25uZXhpb24pIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCBtYWtlX3BsYWNlaG9sZGVycyBmaXJzdCBsYXN0ID1cbiAgICAoKiB0b2RvOiBlcnJvciBoYW5kbGluZyAqKVxuICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgIGluXG4gICAgbGV0IHN0b3JlID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gICAgZm9yIGkgPSBmaXJzdCB0byBsYXN0IGRvXG4gICAgICBpZ25vcmUgQEAgT0kucHV0IHsgaWQgPSBpOyBpdGVtID0gTm9uZSB9IHN0b3JlXG4gICAgZG9uZVxuICBpblxuICBsZXQgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdCBsYXN0ID1cbiAgICBsZXQgb3BlbiBTb3VyY2UgaW5cbiAgICBsZXQqIHZpZXdzID0gdXBkYXRlX3ZpZXdzIHNvdXJjZSBpZGIgaW5cbiAgICBsZXQqIHZmb2xkZXJzID0gZGVkdWNlX3ZpcnR1YWxfZm9sZGVyc19mcm9tX3ZpZXdzIHNvdXJjZSB2aWV3cyBpblxuICAgIGxldCAoKSA9IENvbnNvbGUuaW5mbyBbIFwiRmV0Y2hpbmcgaXRlbXNcIjsgZmlyc3Q7IFwidG9cIjsgbGFzdDsgXCI6XCIgXSBpblxuICAgIGxldCBmZXRjaF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGxldCB0b3RhbCA9IGxhc3QgLSBmaXJzdCArIDEgaW5cbiAgICBsZXQgcmVjIGVucXVldWUgfnN0YXJ0X2luZGV4IHRvZG8gPVxuICAgICAgaWYgdG9kbyA+IDAgdGhlbiAoXG4gICAgICAgIGxldCBsaW1pdCA9IG1pbiB0b2RvIGNodW5rX3NpemUgaW5cbiAgICAgICAgbGV0IHJlcSA9XG4gICAgICAgICAgQXBpLkl0ZW1zLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAoKiB0b2RvIG1ha2Ugc29ydCBleHBsaWNpdCAoYnkgZGF0ZSBhZGRlZCBkYXRlKSAqKVxuICAgICAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICAgIGZpZWxkcyA9IFsgUGFyZW50SWQ7IFBhdGggXTtcbiAgICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgICAgICBzdGFydF9pbmRleCA9IFNvbWUgc3RhcnRfaW5kZXg7XG4gICAgICAgICAgICAgIGxpbWl0ID0gU29tZSBsaW1pdDtcbiAgICAgICAgICAgICAgc29ydF9vcmRlciA9IFNvbWUgQXNjZW5kaW5nO1xuICAgICAgICAgICAgICBzb3J0X2J5ID0gWyBEYXRlQ3JlYXRlZCBdO1xuICAgICAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICBpblxuICAgICAgICBRdWV1ZS5hZGQgcmVxIGZldGNoX3F1ZXVlO1xuICAgICAgICBlbnF1ZXVlIH5zdGFydF9pbmRleDooc3RhcnRfaW5kZXggKyBsaW1pdCkgKHRvZG8gLSBsaW1pdCkpXG4gICAgaW5cbiAgICBlbnF1ZXVlIH5zdGFydF9pbmRleDpmaXJzdCB0b3RhbDtcbiAgICBsZXQgdG90YWxfcXVlcmllcyA9IFF1ZXVlLmxlbmd0aCBmZXRjaF9xdWV1ZSBpblxuICAgIGxldCByZWMgcnVuX3F1ZXVlID8odGhyZWFkcyA9IDEpIHEgPVxuICAgICAgYXNzZXJ0ICh0aHJlYWRzID4gMCk7XG4gICAgICBsZXQgcmVjIHRha2VfbiBhY2MgbiA9XG4gICAgICAgIGlmIG4gPSAwIHRoZW4gTGlzdC5yZXYgYWNjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBtYXRjaCBRdWV1ZS50YWtlX29wdCBxIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgICAgICAgfCBTb21lIGVsdCAtPiB0YWtlX24gKGVsdCA6OiBhY2MpIChuIC0gMSlcbiAgICAgIGluXG4gICAgICBsZXQgZiByZXEgPVxuICAgICAgICBsZXQrIHsgQXBpLkl0ZW1zLnN0YXJ0X2luZGV4OyBpdGVtczsgXyB9ID1cbiAgICAgICAgICBxdWVyeSBzb3VyY2UgKG1vZHVsZSBBcGkuSXRlbXMpIHJlcSAoKVxuICAgICAgICBpblxuICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgIHJlcG9ydFxuICAgICAgICAgIEBAIFNvbWVcbiAgICAgICAgICAgICAgIHsgdG90YWwgPSB0b3RhbF9xdWVyaWVzOyByZW1haW5pbmcgPSBRdWV1ZS5sZW5ndGggZmV0Y2hfcXVldWUgfVxuICAgICAgICBpblxuICAgICAgICBsZXQgaWRiX3B1dCB+c3RhcnRfaW5kZXggaXRlbXMgPVxuICAgICAgICAgIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gICAgICAgICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgICAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSk7IChtb2R1bGUgSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgc19saXN0ID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gICAgICAgICAgbGV0IHNfaXRlbXMgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBJKSB0cmFuc2FjdGlvbiBpblxuICAgICAgICAgIExpc3QuaXRlcmkgaXRlbXMgfmY6KGZ1biBpbmRleCAoeyBBcGkuSXRlbS5pZDsgcGF0aDsgXyB9IGFzIGl0ZW0pIC0+XG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHN0YXJ0X2luZGV4ICsgaW5kZXggaW5cbiAgICAgICAgICAgICAgbGV0IHBhdGggPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6XCJcIiBwYXRoIGluXG4gICAgICAgICAgICAgIGxldCB2aWV3cyA9IHZpZXdzX29mX3BhdGggdmZvbGRlcnMgcGF0aCBpblxuICAgICAgICAgICAgICBsZXQgc29ydF9uYW1lID0gT3B0aW9uLnZhbHVlIGl0ZW0uc29ydF9uYW1lIH5kZWZhdWx0Oml0ZW0ubmFtZSBpblxuICAgICAgICAgICAgICBpZ25vcmUgKE9JLnB1dCB7IGlkID0gaW5kZXg7IGl0ZW0gPSBTb21lIGlkIH0gc19saXN0KTtcbiAgICAgICAgICAgICAgaWdub3JlXG4gICAgICAgICAgICAgICAgKEkucHV0XG4gICAgICAgICAgICAgICAgICAgeyBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA9IGluZGV4OyB2aWV3czsgc29ydF9uYW1lIH07IGl0ZW0gfVxuICAgICAgICAgICAgICAgICAgIHNfaXRlbXMpKVxuICAgICAgICBpblxuICAgICAgICBpZGJfcHV0IH5zdGFydF9pbmRleCBpdGVtc1xuICAgICAgaW5cbiAgICAgIGxldCByZXFzID0gdGFrZV9uIFtdIHRocmVhZHMgaW5cbiAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgIGxldCogcmVxcyA9IEZ1dC5vZl9saXN0IChMaXN0Lm1hcCB+ZiByZXFzKSBpblxuICAgICAgaWYgTGlzdC5pc19lbXB0eSByZXFzIHRoZW4gRnV0Lm9rICgpIGVsc2UgcnVuX3F1ZXVlIHFcbiAgICBpblxuICAgIHJ1bl9xdWV1ZSBmZXRjaF9xdWV1ZVxuICBpblxuICBmdW5jdGlvblxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIG1ha2VfcGxhY2Vob2xkZXJzIGZpcnN0X21pc3Npbmdfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdF91bmZldGNoZWRfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gIHwgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0gLT5cbiAgICAgIGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3RfdW5mZXRjaGVkX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICB8IEluY29uc2lzdGVudCAtPiBGdXQub2sgKClcbiAgfCBfIC0+IEZ1dC5vayAoKVxuXG5sZXQgY2hlY2tfYW5kX3N5bmMgP3JlcG9ydCB+c291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogc3RhdHVzID0gY2hlY2tfc3RhdHVzIH5zb3VyY2UgaWRiIGluXG4gIGxldCBpbml0aWFsID0geyBpbml0aWFsX3JlcG9ydCB3aXRoIHN0YXR1cyB9IGluXG4gIGxldCByZXBvcnQnID1cbiAgICBPcHRpb24ubWFwXG4gICAgICAoZnVuIHJlcG9ydCAtPlxuICAgICAgICBsZXQgKCkgPSAoKiBTZW5kIGEgZmlyc3QgcmVwb3J0ICopIHJlcG9ydCBpbml0aWFsIGluXG4gICAgICAgIGZ1biBzeW5jX3Byb2dyZXNzIC0+IHJlcG9ydCB7IGluaXRpYWwgd2l0aCBzeW5jX3Byb2dyZXNzIH0pXG4gICAgICByZXBvcnRcbiAgaW5cbiAgbGV0KyAoKSA9IHN5bmMgP3JlcG9ydDpyZXBvcnQnIH5zb3VyY2UgaWRiIHN0YXR1cyBpblxuICBPcHRpb24uaXRlclxuICAgIChmdW4gcmVwb3J0IC0+IHJlcG9ydCB7IHN0YXR1cyA9IEluX3N5bmM7IHN5bmNfcHJvZ3Jlc3MgPSBOb25lIH0pXG4gICAgcmVwb3J0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBhZGRpbmcgcG9zaXRpb24uICopXG50eXBlIHBhZHR5ID1cbiAgfCBMZWZ0ICAgKCogVGV4dCBpcyBsZWZ0IGp1c3RpZmllZCAoJy0nIG9wdGlvbikuICAgICAgICAgICAgICAgKilcbiAgfCBSaWdodCAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgKG5vICctJyBvcHRpb24pLiAgICAgICAgICAgKilcbiAgfCBaZXJvcyAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgYnkgemVyb3MgKHNlZSAnMCcgb3B0aW9uKS4gKilcblxuKCoqKilcblxuKCogSW50ZWdlciBjb252ZXJzaW9uLiAqKVxudHlwZSBpbnRfY29udiA9XG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgICAgICAgICgqICAlZCB8ICUrZCB8ICUgZCAgKilcbiAgfCBJbnRfaSB8IEludF9waSB8IEludF9zaSAgICAgICAgKCogICVpIHwgJStpIHwgJSBpICAqKVxuICB8IEludF94IHwgSW50X0N4ICAgICAgICAgICAgICAgICAoKiAgJXggfCAlI3ggICAgICAgICopXG4gIHwgSW50X1ggfCBJbnRfQ1ggICAgICAgICAgICAgICAgICgqICAlWCB8ICUjWCAgICAgICAgKilcbiAgfCBJbnRfbyB8IEludF9DbyAgICAgICAgICAgICAgICAgKCogICVvIHwgJSNvICAgICAgICAqKVxuICB8IEludF91ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJXUgICAgICAgICAgICAgICopXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1ICAgICAgICgqICAlI2QgfCAlI2kgfCAlI3UgKilcblxuKCogRmxvYXQgY29udmVyc2lvbi4gKilcbnR5cGUgZmxvYXRfZmxhZ19jb252ID1cbiAgfCBGbG9hdF9mbGFnXyAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3AgICAgICAgICAgICAgICAgICAgKCogJStbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19zICAgICAgICAgICAgICAgICAgICgqICUgW2ZlRWdHRmhIXSAqKVxudHlwZSBmbG9hdF9raW5kX2NvbnYgPVxuICB8IEZsb2F0X2YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWYgfCAlK2YgfCAlIGYgICopXG4gIHwgRmxvYXRfZSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZSB8ICUrZSB8ICUgZSAgKilcbiAgfCBGbG9hdF9FICAgICAgICAgICAgICAgICAgICAgICAgKCogICVFIHwgJStFIHwgJSBFICAqKVxuICB8IEZsb2F0X2cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWcgfCAlK2cgfCAlIGcgICopXG4gIHwgRmxvYXRfRyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRyB8ICUrRyB8ICUgRyAgKilcbiAgfCBGbG9hdF9GICAgICAgICAgICAgICAgICAgICAgICAgKCogICVGIHwgJStGIHwgJSBGICAqKVxuICB8IEZsb2F0X2ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWggfCAlK2ggfCAlIGggICopXG4gIHwgRmxvYXRfSCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlSCB8ICUrSCB8ICUgSCAgKilcbiAgfCBGbG9hdF9DRiAgICAgICAgICAgICAgICAgICAgICAgKCogICUjRnwgJSsjRnwgJSAjRiAqKVxudHlwZSBmbG9hdF9jb252ID0gZmxvYXRfZmxhZ19jb252ICogZmxvYXRfa2luZF9jb252XG5cbigqKiopXG5cbigqIENoYXIgc2V0cyAoc2VlICVbLi4uXSkgYXJlIGJpdG1hcHMgaW1wbGVtZW50ZWQgYXMgMzItY2hhciBzdHJpbmdzLiAqKVxudHlwZSBjaGFyX3NldCA9IHN0cmluZ1xuXG4oKioqKVxuXG4oKiBDb3VudGVyIHVzZWQgaW4gU2NhbmYuICopXG50eXBlIGNvdW50ZXIgPVxuICB8IExpbmVfY291bnRlciAgICAgKCogICVsICAgICAgKilcbiAgfCBDaGFyX2NvdW50ZXIgICAgICgqICAlbiAgICAgICopXG4gIHwgVG9rZW5fY291bnRlciAgICAoKiAgJU4sICVMICAqKVxuXG4oKioqKVxuXG4oKiBQYWRkaW5nIG9mIHN0cmluZ3MgYW5kIG51bWJlcnMuICopXG50eXBlICgnYSwgJ2IpIHBhZGRpbmcgPVxuICAoKiBObyBwYWRkaW5nIChleDogXCIlZFwiKSAqKVxuICB8IE5vX3BhZGRpbmcgIDogKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBMaXRlcmFsIHBhZGRpbmcgKGV4OiBcIiU4ZFwiKSAqKVxuICB8IExpdF9wYWRkaW5nIDogcGFkdHkgKiBpbnQgLT4gKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBQYWRkaW5nIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKmRcIikgKilcbiAgfCBBcmdfcGFkZGluZyA6IHBhZHR5IC0+IChpbnQgLT4gJ2EsICdhKSBwYWRkaW5nXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2QsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcGFkZGluZyBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwYWRfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBQcmVjaXNpb24gb2YgZmxvYXRzIGFuZCAnMCctcGFkZGluZyBvZiBpbnRlZ2Vycy4gKilcbnR5cGUgKCdhLCAnYikgcHJlY2lzaW9uID1cbiAgKCogTm8gcHJlY2lzaW9uIChleDogXCIlZlwiKSAqKVxuICB8IE5vX3ByZWNpc2lvbiA6ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBMaXRlcmFsIHByZWNpc2lvbiAoZXg6IFwiJS4zZlwiKSAqKVxuICB8IExpdF9wcmVjaXNpb24gOiBpbnQgLT4gKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIFByZWNpc2lvbiBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKSAqKVxuICB8IEFyZ19wcmVjaXNpb24gOiAoaW50IC0+ICdhLCAnYSkgcHJlY2lzaW9uXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2YsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcHJlY2lzaW9uIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHByZWNfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBzZWUgdGhlIEN1c3RvbSBmb3JtYXQgY29tYmluYXRvciAqKVxudHlwZSAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5ID1cbiAgfCBDdXN0b21femVybyA6ICgnYSwgc3RyaW5nLCAnYSkgY3VzdG9tX2FyaXR5XG4gIHwgQ3VzdG9tX3N1Y2MgOiAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5IC0+XG4gICAgKCdhLCAneCAtPiAnYiwgJ3ggLT4gJ2MpIGN1c3RvbV9hcml0eVxuXG4oKioqKVxuXG4oKiAgICAgICAgUmVsYXRpb25hbCBmb3JtYXQgdHlwZXNcblxuSW4gdGhlIGZpcnN0IGZvcm1hdCtnYWR0cyBpbXBsZW1lbnRhdGlvbiwgdGhlIHR5cGUgZm9yICUoLi4lKSBpbiB0aGVcbmZtdCBHQURUIHdhcyBhcyBmb2xsb3dzOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICogKCdkMSwgJ3ExLCAnZDIsICdxMikgcmVhZGVyX25iX3VuaWZpZXIgKlxuICAgICgneCwgJ2IsICdjLCAnZDEsICdxMSwgJ3UpIGZtdHR5ICpcbiAgICAoJ3UsICdiLCAnYywgJ3ExLCAnZTEsICdmKSBmbXQgLT5cbiAgICAgICgoJ3gsICdiLCAnYywgJ2QyLCAncTIsICd1KSBmb3JtYXQ2IC0+ICd4LCAnYiwgJ2MsICdkMSwgJ2UxLCAnZikgZm10XG5cbk5vdGljZSB0aGF0IHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2YgcG9zaXRpb24gaW4gdGhlIGZvcm1hdCBhcmd1bWVudFxuKCgneCwgLi4sICd1KSBmb3JtYXQ2IC0+IC4uKSBpcyBlcXVhbCB0byB0aGUgJ3UgcGFyYW1ldGVyIGluICdhXG5wb3NpdGlvbiBpbiB0aGUgZm9ybWF0IHRhaWwgKCgndSwgLi4sICdmKSBmbXQpLiBUaGlzIG1lYW5zIHRoYXQgdGhlXG50eXBlIG9mIHRoZSBleHBlY3RlZCBmb3JtYXQgcGFyYW1ldGVyIGRlcGVuZHMgb2Ygd2hlcmUgdGhlICUoLi4uJSlcbmFyZSBpbiB0aGUgZm9ybWF0IHN0cmluZzpcblxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpXCJcbiAgLSA6ICh1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiB1bml0XG4gID0gPGZ1bj5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKSVkXCJcbiAgLSA6IChpbnQgLT4gdW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCBpbnQgLT4gdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IGludCAtPiB1bml0XG4gID0gPGZ1bj5cblxuT24gdGhlIGNvbnRyYXJ5LCB0aGUgbGVnYWN5IHR5cGVyIGdpdmVzIGEgY2xldmVyIHR5cGUgdGhhdCBkb2VzIG5vdFxuZGVwZW5kIG9uIHRoZSBwb3NpdGlvbiBvZiAlKC4uJSkgaW4gdGhlIGZvcm1hdCBzdHJpbmcuIEZvciBleGFtcGxlLFxuJSglKSB3aWxsIGhhdmUgdGhlIHBvbHltb3JwaGljIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpOiBpdCBjYW5cbmJlIGNvbmNhdGVuYXRlZCB0byBhbnkgZm9ybWF0IHR5cGUsIGFuZCBvbmx5IGVuZm9yY2VzIHRoZSBjb25zdHJhaW50XG50aGF0IGl0cyAnYSBhbmQgJ2YgcGFyYW1ldGVycyBhcmUgZXF1YWwgKG5vIGZvcm1hdCBhcmd1bWVudHMpIGFuZCAnZFxuYW5kICdlIGFyZSBlcXVhbCAobm8gcmVhZGVyIGFyZ3VtZW50KS5cblxuVGhlIHdlYWtlbmluZyBvZiB0aGlzIHBhcmFtZXRlciB0eXBlIGluIHRoZSBHQURUIHZlcnNpb24gYnJva2UgdXNlclxuY29kZSAoaW4gZmFjdCBpdCBlc3NlbnRpYWxseSBtYWRlICUoLi4uJSkgdW51c2FibGUgZXhjZXB0IGF0IHRoZSBsYXN0XG5wb3NpdGlvbiBvZiBhIGZvcm1hdCkuIEluIHBhcnRpY3VsYXIsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IHdvcmtcbmFueW1vcmU6XG5cbiAgZnVuIHNlcCAtPlxuICAgIEZvcm1hdC5wcmludGYgXCJmb28lKCUpYmFyJSglKWJhelwiIHNlcCBzZXBcblxuQXMgdGhlIHR5cGUtY2hlY2tlciB3b3VsZCByZXF1aXJlIHR3byAqaW5jb21wYXRpYmxlKiB0eXBlcyBmb3IgdGhlICUoJSlcbmluIGRpZmZlcmVudCBwb3NpdGlvbnMuXG5cblRoZSBzb2x1dGlvbiB0byByZWdhaW4gYSBnZW5lcmFsIHR5cGUgZm9yICUoLi4lKSBpcyB0byBnZW5lcmFsaXplIHRoaXNcbnRlY2huaXF1ZSwgbm90IG9ubHkgb24gdGhlICdkLCAnZSBwYXJhbWV0ZXJzLCBidXQgb24gYWxsIHNpeFxucGFyYW1ldGVycyBvZiBhIGZvcm1hdDogd2UgaW50cm9kdWNlIGEgXCJyZWxhdGlvbmFsXCIgdHlwZVxuICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxud2hvc2UgdmFsdWVzIGFyZSBwcm9vZnMgdGhhdCAoJ2ExLCAuLiwgJ2YxKSBhbmQgKCdhMiwgLi4sICdmMikgbW9yYWxseVxuY29ycmVzcG9uZCB0byB0aGUgc2FtZSBmb3JtYXQgdHlwZTogJ2ExIGlzIG9idGFpbmVkIGZyb20gJ2YxLCdiMSwnYzFcbmluIHRoZSBleGFjdCBzYW1lIHdheSB0aGF0ICdhMiBpcyBvYnRhaW5lZCBmcm9tICdmMiwnYjIsJ2MyLCBldGMuXG5cbkZvciBleGFtcGxlLCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0d28gZm9ybWF0IHR5cGVzIGJlZ2lubmluZyB3aXRoIGEgQ2hhclxucGFyYW1ldGVyIGlzIGFzIGZvbGxvd3M6XG5cbnwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5JbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGUgdGVybSBzdHJ1Y3R1cmUgb2YgZm10dHlfcmVsIGlzIChhbG1vc3RbMV0pXG5pc29tb3JwaGljIHRvIHRoZSBmbXR0eSBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb246IGV2ZXJ5XG5jb25zdHJ1Y3RvciBpcyByZS1yZWFkIHdpdGggYSBiaW5hcnksIHJlbGF0aW9uYWwgdHlwZSwgaW5zdGVhZCBvZiB0aGVcbnByZXZpb3VzIHVuYXJ5IHR5cGluZy4gZm10dHkgY2FuIHRoZW4gYmUgcmUtZGVmaW5lZCBhcyB0aGUgZGlhZ29uYWwgb2ZcbmZtdHR5X3JlbDpcblxuICB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuXG5PbmNlIHdlIGhhdmUgdGhpcyBmbXR0eV9yZWwgdHlwZSBpbiBwbGFjZSwgd2UgY2FuIGdpdmUgdGhlIG1vcmVcbmdlbmVyYWwgdHlwZSB0byAlKC4uLiUpOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuV2UgYWNjZXB0IGFueSBmb3JtYXQgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2KSAodGhpcyBpc1xuY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZm9ybWF0KSwgYnV0IGFsc29cbnJlcXVpcmUgYSBwcm9vZiB0aGF0IHRoaXMgZm9ybWF0IGlzIGluIHJlbGF0aW9uIHRvIGFub3RoZXIgZm9ybWF0IHRoYXRcbmlzIGNvbmNhdGVuYWJsZSB0byB0aGUgZm9ybWF0IHRhaWwuIFdoZW4gZXhlY3V0aW5nIGEgJSguLi4lKSBmb3JtYXRcbihpbiBjYW1saW50ZXJuYWxGb3JtYXQubWw6bWFrZV9wcmludGYgb3Igc2NhbmYubWw6bWFrZV9zY2FuZiksIHdlXG50cmFuc3R5cGUgdGhlIGZvcm1hdCBhbG9uZyB0aGlzIHJlbGF0aW9uIHVzaW5nIHRoZSAncmVjYXN0JyBmdW5jdGlvblxudG8gdHJhbnNwb3NlIGJldHdlZW4gcmVsYXRlZCBmb3JtYXQgdHlwZXMuXG5cbiAgdmFsIHJlY2FzdCA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxKSBmbXRcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdFxuXG5OT1RFIFsxXTogdGhlIHR5cGluZyBvZiBGb3JtYXRfc3Vic3RfdHkgcmVxdWlyZXMgbm90IG9uZSBmb3JtYXQgdHlwZSwgYnV0XG50d28sIG9uZSB0byBlc3RhYmxpc2ggdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0IGFyZ3VtZW50IGFuZCB0aGVcbmZpcnN0IHNpeCBwYXJhbWV0ZXJzLCBhbmQgdGhlIG90aGVyIGZvciB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXRcbmFyZ3VtZW50IGFuZCB0aGUgbGFzdCBzaXggcGFyYW1ldGVycy5cblxufCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbldoZW4gd2UgZ2VuZXJhdGUgYSBmb3JtYXQgQVNULCB3ZSBnZW5lcmF0ZSBleGFjdGx5IHRoZSBzYW1lIHdpdG5lc3NcbmZvciBib3RoIHJlbGF0aW9ucywgYW5kIHRoZSB3aXRuZXNzLWNvbnZlcnNpb24gZnVuY3Rpb25zIGluXG5jYW1saW50ZXJuYWxGb3JtYXQgZG8gcmVseSBvbiB0aGlzIGludmFyaWFudC4gRm9yIGV4YW1wbGUsIHRoZVxuZnVuY3Rpb24gdGhhdCBwcm92ZXMgdGhhdCB0aGUgcmVsYXRpb24gaXMgdHJhbnNpdGl2ZVxuXG4gIHZhbCB0cmFucyA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG5cbmRvZXMgYXNzdW1lIHRoYXQgdGhlIHR3byBpbnB1dHMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIHRlcm0gc3RydWN0dXJlXG4oYW5kIGlzIG9ubHkgZXZlcnkgdXNlZCBmb3IgYXJndW1lbnQgd2l0bmVzc2VzIG9mIHRoZVxuRm9ybWF0X3N1YnN0X3R5IGNvbnN0cnVjdG9yKS5cbiopXG5cbigqIFR5cGUgb2YgYSBibG9jayB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggICAoKiBIb3Jpem9udGFsIGJsb2NrIG5vIGxpbmUgYnJlYWtpbmcgKilcbiAgfCBQcF92Ym94ICAgKCogVmVydGljYWwgYmxvY2sgZWFjaCBicmVhayBsZWFkcyB0byBhIG5ldyBsaW5lICopXG4gIHwgUHBfaHZib3ggICgqIEhvcml6b250YWwtdmVydGljYWwgYmxvY2s6IHNhbWUgYXMgdmJveCwgZXhjZXB0IGlmIHRoaXMgYmxvY2tcbiAgICAgICAgICAgICAgICAgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBvbiBhIHNpbmdsZSBsaW5lICopXG4gIHwgUHBfaG92Ym94ICgqIEhvcml6b250YWwgb3IgVmVydGljYWwgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrICopXG4gIHwgUHBfYm94ICAgICgqIEhvcml6b250YWwgb3IgSW5kZW50IGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jaywgb3JcbiAgICAgICAgICAgICAgICAgd2hlbiBpdCBsZWFkcyB0byBhIG5ldyBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBsaW5lICopXG4gIHwgUHBfZml0cyAgICgqIEludGVybmFsIHVzYWdlOiB3aGVuIGEgYmxvY2sgZml0cyBvbiBhIHNpbmdsZSBsaW5lICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGZvcm1hdHRpbmdfbGl0ID1cbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF0gICAqKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAfSAgICopXG4gIHwgQnJlYWsgb2Ygc3RyaW5nICogaW50ICogaW50ICAgICAgICAgICgqIEAsIHwgQCAgfCBAOyB8IEA7PD4gKilcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQD8gICAqKVxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXFxuICAqKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBALiAgICopXG4gIHwgTWFnaWNfc2l6ZSBvZiBzdHJpbmcgKiBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA8bj4gKilcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQEAgICAqKVxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAJSUgICopXG4gIHwgU2Nhbl9pbmRpYyBvZiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBYICAgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuID1cbiAgfCBPcGVuX3RhZyA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQHsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuICB8IE9wZW5fYm94IDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAWyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IHR5cGUgZWxlbWVudHMuICopXG4oKiBJbiBwYXJ0aWN1bGFyIHVzZWQgdG8gcmVwcmVzZW50ICUoLi4uJSkgYW5kICV7Li4uJX0gY29udGVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcbmFuZCAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsID1cbiAgfCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBTdHJpbmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChzdHJpbmcgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBzdHJpbmcgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVkICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDMyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDMyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50MzIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgTmF0aXZlaW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAobmF0aXZlaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgbmF0aXZlaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDY0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDY0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50NjQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgRmxvYXRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVmICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoZmxvYXQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBmbG9hdCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBCb29sX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChib29sIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgYm9vbCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEZvcm1hdF9hcmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcbiAgfCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9ycy4gKilcbiAgfCBBbHBoYV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICd4IC0+ICdjMSkgLT4gJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICd4IC0+ICdjMikgLT4gJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgVGhldGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAnYzEpIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAnYzIpIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEFueV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVXNlZCBmb3IgY3VzdG9tIGZvcm1hdHMgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgUmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEVuZF9vZl9mbXR0eSA6XG4gICAgICAoJ2YxLCAnYjEsICdjMSwgJ2QxLCAnZDEsICdmMSxcbiAgICAgICAnZjIsICdiMiwgJ2MyLCAnZDIsICdkMiwgJ2YyKSBmbXR0eV9yZWxcblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgZWxlbWVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCA9XG4gIHwgQ2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50MzIgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBOYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbltkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIG5hdGl2ZWludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50NjQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICAgICAgZmxvYXRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGZsb2F0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtiQl0gKilcbiAgICAgICgneCwgYm9vbCAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsdXNoIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IFN0cmluZ19saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIGFiYyAqKVxuICAgICAgc3RyaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2hhcl9saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogeCAqKVxuICAgICAgY2hhciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgRm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IEFscGhhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ3ggLT4gJ2MpIC0+ICd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFRoZXRhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ2MpIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcjogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgZm9ybWF0dGluZ19saXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXR0aW5nX2dlbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgICgnYTEsICdiLCAnYywgJ2QxLCAnZTEsICdmMSkgZm9ybWF0dGluZ19nZW4gKlxuICAgICAgKCdmMSwgJ2IsICdjLCAnZTEsICdlMiwgJ2YyKSBmbXQgLT4gKCdhMSwgJ2IsICdjLCAnZDEsICdlMiwgJ2YyKSBmbXRcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4IC0+ICdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVsuLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChzdHJpbmcgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtubE5MXSAqKVxuICAgICAgY291bnRlciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGludCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IElnbm9yZWRfcGFyYW0gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgaWdub3JlZCAqICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEN1c3RvbSBwcmludGluZyBmb3JtYXQgKFBSIzY0NTIsIEdQUiMxNDApXG5cbiAgICAgV2UgaW5jbHVkZSBhIHR5cGUgQ3VzdG9tIG9mIFwiY3VzdG9tIGNvbnZlcnRlcnNcIiwgd2hlcmUgYW5cbiAgICAgYXJiaXRyYXJ5IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgb25lIG9yIG1vcmVcbiAgICAgYXJndW1lbnRzLiBUaGVyZSBpcyBubyBzeW50YXggZm9yIGN1c3RvbSBjb252ZXJ0ZXJzLCBpdCBpcyBvbmx5XG4gICAgIGludGVuZGVkIGZvciBjdXN0b20gcHJvY2Vzc29ycyB0aGF0IHdpc2ggdG8gcmVseSBvbiB0aGVcbiAgICAgc3RkbGliLWRlZmluZWQgZm9ybWF0IEdBRFRzLlxuXG4gICAgIEZvciBpbnN0YW5jZSBhIHByZS1wcm9jZXNzb3IgY291bGQgY2hvb3NlIHRvIGludGVycHJldCBzdHJpbmdzXG4gICAgIHByZWZpeGVkIHdpdGggW1wiIVwiXSBhcyBmb3JtYXQgc3RyaW5ncyB3aGVyZSBbJXt7IC4uLiB9fV0gaXNcbiAgICAgYSBzcGVjaWFsIGZvcm0gdG8gcGFzcyBhIHRvX3N0cmluZyBmdW5jdGlvbiwgc28gdGhhdCBvbmUgY291bGRcbiAgICAgd3JpdGU6XG5cbiAgICAge1tcbiAgICAgICB0eXBlIHQgPSB7IHggOiBpbnQ7IHkgOiBpbnQgfVxuXG4gICAgICAgbGV0IHN0cmluZ19vZl90IHQgPSBQcmludGYuc3ByaW50ZiBcInsgeCA9ICVkOyB5ID0gJWQgfVwiIHQueCB0LnlcblxuICAgICAgIFByaW50Zi5wcmludGYgIVwidCA9ICV7e3N0cmluZ19vZl90fX1cIiB7IHggPSA0MjsgeSA9IDQyIH1cbiAgICAgXX1cbiAgKilcbiAgfCBDdXN0b20gOlxuICAgICAgKCdhLCAneCwgJ3kpIGN1c3RvbV9hcml0eSAqICh1bml0IC0+ICd4KSAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBlbmQgb2YgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiAqKVxuICB8IEVuZF9vZl9mb3JtYXQgOlxuICAgICAgICAoJ2YsICdiLCAnYywgJ2UsICdlLCAnZikgZm10XG5cbigqKiopXG5cbigqIFR5cGUgZm9yIGlnbm9yZWQgcGFyYW1ldGVycyAoc2VlIFwiJV9cIikuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWQgPVxuICB8IElnbm9yZWRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9zICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9TICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX25kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2YgKilcbiAgICAgIHBhZF9vcHRpb24gKiBwcmVjX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfYm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQiAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfey4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8oLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3JlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgKilcbiAgICAgICgnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1suLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1tubE5MXSAqKVxuICAgICAgY291bnRlciAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG5cbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gIEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ICogc3RyaW5nXG5cbmxldCByZWMgZXJhc2VfcmVsIDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gIChhLCBiLCBjLCBkLCBlLCBmLFxuICAgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eVxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgX3R5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkxLCBlcmFzZV9yZWwgcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwZSBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXQgdHlwZXMuICopXG4oKiBVc2VkIGJ5OlxuICAgKiByZWFkZXJfbmJfdW5pZmllcl9vZl9mbXR0eSB0byBjb3VudCByZWFkZXJzIGluIGFuIGZtdHR5LFxuICAgKiBTY2FuZi50YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIHRvIGV4dHJhY3QgcmVhZGVycyBpbnNpZGUgJSguLi4lKSxcbiAgICogQ2FtbGludGVybmFsRm9ybWF0LmZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IHRvIGV4dHJhY3QgZm9ybWF0IHR5cGUuICopXG5cbigqXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10dHkgPVxuKilcbmxldCByZWMgY29uY2F0X2ZtdHR5IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gICAgICAgZzEgajEgZzIgajJcbiAgLlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZDEsIGExLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZDIsIGEyKSBmbXR0eV9yZWwgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKGcxLCBiMSwgYzEsIGoxLCBlMSwgZjEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBlMiwgZjIpIGZtdHR5X3JlbCA9XG5mdW4gZm10dHkxIGZtdHR5MiAtPiBtYXRjaCBmbXR0eTEgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IGZtdHR5MlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdHMuICopXG5sZXQgcmVjIGNvbmNhdF9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10ID1cbmZ1biBmbXQxIGZtdDIgLT4gbWF0Y2ggZm10MSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgU3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgQ2FtbF9zdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IENoYXIgKHJlc3QpIC0+XG4gICAgQ2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBDYW1sX2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBCb29sIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBBbHBoYSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIFRoZXRhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIEN1c3RvbSAoYXJpdHksIGYsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFJlYWRlciByZXN0IC0+XG4gICAgUmVhZGVyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgRmx1c2ggKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBDaGFyX2xpdGVyYWwgICAoY2hyLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdF9hcmcgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZyAgIChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX25leHRfY2hhciAocmVzdCkgLT5cbiAgICBTY2FuX25leHRfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIElnbm9yZWRfcGFyYW0gKGlnbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGZtdDJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIEdhYnJpZWwgU2NoZXJlciwgcHJvamV0IFBhcnRvdXQsIElOUklBIFBhcmlzLVNhY2xheSAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMjAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2FtbGludGVybmFsQXRvbWljIGlzIGEgZGVwZW5kZW5jeSBvZiBTdGRsaWIsIHNvIGl0IGlzIGNvbXBpbGVkIHdpdGhcbiAgIC1ub3BlcnZhc2l2ZXMuICopXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogV2UgYXJlIG5vdCByZXVzaW5nICgnYSByZWYpIGRpcmVjdGx5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYXNvblxuICAgYWJvdXQgYXRvbWljaXR5IGlmIHdlIHdpc2ggdG86IGV2ZW4gaW4gYSBzZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLFxuICAgc2lnbmFscyBhbmQgb3RoZXIgYXN5bmNocm9ub3VzIGNhbGxiYWNrcyBtaWdodCBicmVhayBhdG9taWNpdHkuICopXG50eXBlICdhIHQgPSB7bXV0YWJsZSB2OiAnYX1cblxubGV0IG1ha2UgdiA9IHt2fVxubGV0IGdldCByID0gci52XG5sZXQgc2V0IHIgdiA9IHIudiA8LSB2XG5cbigqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBzZXQgdG8gbmV2ZXIgYmUgaW5saW5lZDogRmxhbWJkYSBpc1xuICAgYWxsb3dlZCB0byBtb3ZlIHN1cnJvdW5kaW5nIGNvZGUgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLFxuICAgaW5jbHVkaW5nIGFsbG9jYXRpb25zLiAqKVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZXhjaGFuZ2UgciB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIHY7XG4gICgqIEVORCBBVE9NSUMgKilcbiAgY3VyXG5cbmxldFtAaW5saW5lIG5ldmVyXSBjb21wYXJlX2FuZF9zZXQgciBzZWVuIHYgPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICBpZiBjdXIgPT0gc2VlbiB0aGVuIChcbiAgICByLnYgPC0gdjtcbiAgICAoKiBFTkQgQVRPTUlDICopXG4gICAgdHJ1ZVxuICApIGVsc2VcbiAgICBmYWxzZVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZmV0Y2hfYW5kX2FkZCByIG4gPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICByLnYgPC0gKGN1ciArIG4pO1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXQgaW5jciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgMSlcbmxldCBkZWNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAoLTEpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCBvciApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuXG4oKiBJbnRlZ2VyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LSApIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCAoIH4rICkgOiBpbnQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsICggLSApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgKCAqICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCAoIC8gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsICggbW9kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5cbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxuXG5leHRlcm5hbCAoIGxhbmQgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsICggbG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsICggbHhvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxuXG5sZXQgbG5vdCB4ID0geCBseG9yICgtMSlcblxuZXh0ZXJuYWwgKCBsc2wgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsICggbHNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5leHRlcm5hbCAoIGFzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuXG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcblxuKCogRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCAoIH4rLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCAoICsuICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsICggLS4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgKCAqLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCAoIC8uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsICggKiogKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Bvd2VyX2Zsb2F0XCIgXCJwb3dcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwbTEgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBtMV9mbG9hdFwiIFwiY2FtbF9leHBtMVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luaF9mbG9hdFwiIFwiY2FtbF9hc2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5oX2Zsb2F0XCIgXCJjYW1sX2F0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFic19mbG9hdCA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuZXh0ZXJuYWwgY29weXNpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZF9mbG9hdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbmV4dGVybmFsIGZsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldCByZWMgKCBAICkgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBoZCA6OiB0bCAtPiBoZCA6OiAodGwgQCBsMilcblxuKCogSS9PIG9wZXJhdGlvbnMgKilcblxudHlwZSBpbl9jaGFubmVsXG50eXBlIG91dF9jaGFubmVsXG5cbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9vdXQgOiBpbnQgLT4gb3V0X2NoYW5uZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFwiXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3JfaW4gOiBpbnQgLT4gaW5fY2hhbm5lbCA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cIlxuXG5sZXQgc3RkaW4gPSBvcGVuX2Rlc2NyaXB0b3JfaW4gMFxubGV0IHN0ZG91dCA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMVxubGV0IHN0ZGVyciA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMlxuXG4oKiBHZW5lcmFsIG91dHB1dCBmdW5jdGlvbnMgKilcblxudHlwZSBvcGVuX2ZsYWcgPVxuICAgIE9wZW5fcmRvbmx5IHwgT3Blbl93cm9ubHkgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXQgfCBPcGVuX3RydW5jIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnkgfCBPcGVuX3RleHQgfCBPcGVuX25vbmJsb2NrXG5cbmV4dGVybmFsIG9wZW5fZGVzYyA6IHN0cmluZyAtPiBvcGVuX2ZsYWcgbGlzdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX3N5c19vcGVuXCJcblxuZXh0ZXJuYWwgc2V0X291dF9jaGFubmVsX25hbWU6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9vdXRfZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0KG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X291dF9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX291dCBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl90ZXh0XSAwbzY2NiBuYW1lXG5cbmxldCBvcGVuX291dF9iaW4gbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fYmluYXJ5XSAwbzY2NiBuYW1lXG5cbmV4dGVybmFsIGZsdXNoIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9mbHVzaFwiXG5cbmV4dGVybmFsIG91dF9jaGFubmVsc19saXN0IDogdW5pdCAtPiBvdXRfY2hhbm5lbCBsaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFwiXG5cbmxldCBmbHVzaF9hbGwgKCkgPVxuICBsZXQgcmVjIGl0ZXIgPSBmdW5jdGlvblxuICAgICAgW10gLT4gKClcbiAgICB8IGE6OmwgLT5cbiAgICAgICAgYmVnaW4gdHJ5XG4gICAgICAgICAgICBmbHVzaCBhXG4gICAgICAgIHdpdGggU3lzX2Vycm9yIF8gLT5cbiAgICAgICAgICAoKSAoKiBpZ25vcmUgY2hhbm5lbHMgY2xvc2VkIGR1cmluZyBhIHByZWNlZGluZyBmbHVzaC4gKilcbiAgICAgICAgZW5kO1xuICAgICAgICBpdGVyIGxcbiAgaW4gaXRlciAob3V0X2NoYW5uZWxzX2xpc3QgKCkpXG5cbmV4dGVybmFsIHVuc2FmZV9vdXRwdXQgOiBvdXRfY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0X2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9vdXRwdXRfc3RyaW5nIDogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0XCJcblxuZXh0ZXJuYWwgb3V0cHV0X2NoYXIgOiBvdXRfY2hhbm5lbCAtPiBjaGFyIC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuXG5sZXQgb3V0cHV0X2J5dGVzIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0IG9jIHMgMCAoYnl0ZXNfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXRfc3RyaW5nIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIDAgKHN0cmluZ19sZW5ndGggcylcblxubGV0IG91dHB1dCBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dFwiXG4gIGVsc2UgdW5zYWZlX291dHB1dCBvYyBzIG9mcyBsZW5cblxubGV0IG91dHB1dF9zdWJzdHJpbmcgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IHN0cmluZ19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0X3N1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyBvZnMgbGVuXG5cbmV4dGVybmFsIG91dHB1dF9ieXRlIDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuZXh0ZXJuYWwgb3V0cHV0X2JpbmFyeV9pbnQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfaW50XCJcblxuZXh0ZXJuYWwgbWFyc2hhbF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgLT4gdW5pdCBsaXN0IC0+IHVuaXRcbiAgICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlXCJcbmxldCBvdXRwdXRfdmFsdWUgY2hhbiB2ID0gbWFyc2hhbF90b19jaGFubmVsIGNoYW4gdiBbXVxuXG5leHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XCJcbmV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX291dFwiXG5leHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX291dF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9vdXQgb2MgPSBmbHVzaCBvYzsgY2xvc2Vfb3V0X2NoYW5uZWwgb2NcbmxldCBjbG9zZV9vdXRfbm9lcnIgb2MgPVxuICAodHJ5IGZsdXNoIG9jIHdpdGggXyAtPiAoKSk7XG4gICh0cnkgY2xvc2Vfb3V0X2NoYW5uZWwgb2Mgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX291dCA6IG91dF9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBHZW5lcmFsIGlucHV0IGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBzZXRfaW5fY2hhbm5lbF9uYW1lOiBpbl9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9pbl9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9pbihvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9pbl9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX2luIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fdGV4dF0gMCBuYW1lXG5cbmxldCBvcGVuX2luX2JpbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX2JpbmFyeV0gMCBuYW1lXG5cbmV4dGVybmFsIGlucHV0X2NoYXIgOiBpbl9jaGFubmVsIC0+IGNoYXIgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5cbmV4dGVybmFsIHVuc2FmZV9pbnB1dCA6IGluX2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9pbnB1dFwiXG5cbmxldCBpbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcImlucHV0XCJcbiAgZWxzZSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWMgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBsZW4gPD0gMCB0aGVuICgpIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW4gaW5cbiAgICBpZiByID0gMFxuICAgIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyAob2ZzICsgcikgKGxlbiAtIHIpXG4gIGVuZFxuXG5sZXQgcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwicmVhbGx5X2lucHV0XCJcbiAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVhbGx5X2lucHV0X3N0cmluZyBpYyBsZW4gPVxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSBsZW4gaW5cbiAgcmVhbGx5X2lucHV0IGljIHMgMCBsZW47XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG5leHRlcm5hbCBpbnB1dF9zY2FuX2xpbmUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcIlxuXG5sZXQgaW5wdXRfbGluZSBjaGFuID1cbiAgbGV0IHJlYyBidWlsZF9yZXN1bHQgYnVmIHBvcyA9IGZ1bmN0aW9uXG4gICAgW10gLT4gYnVmXG4gIHwgaGQgOjogdGwgLT5cbiAgICAgIGxldCBsZW4gPSBieXRlc19sZW5ndGggaGQgaW5cbiAgICAgIGJ5dGVzX2JsaXQgaGQgMCBidWYgKHBvcyAtIGxlbikgbGVuO1xuICAgICAgYnVpbGRfcmVzdWx0IGJ1ZiAocG9zIC0gbGVuKSB0bCBpblxuICBsZXQgcmVjIHNjYW4gYWNjdSBsZW4gPVxuICAgIGxldCBuID0gaW5wdXRfc2Nhbl9saW5lIGNoYW4gaW5cbiAgICBpZiBuID0gMCB0aGVuIGJlZ2luICAgICAgICAgICAgICAgICAgICgqIG4gPSAwOiB3ZSBhcmUgYXQgRU9GICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICAgIHwgXyAgLT4gYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gYWNjdVxuICAgIGVuZCBlbHNlIGlmIG4gPiAwIHRoZW4gYmVnaW4gICAgICAgICAgKCogbiA+IDA6IG5ld2xpbmUgZm91bmQgaW4gYnVmZmVyICopXG4gICAgICBsZXQgcmVzID0gYnl0ZXNfY3JlYXRlIChuIC0gMSkgaW5cbiAgICAgIGlnbm9yZSAodW5zYWZlX2lucHV0IGNoYW4gcmVzIDAgKG4gLSAxKSk7XG4gICAgICBpZ25vcmUgKGlucHV0X2NoYXIgY2hhbik7ICAgICAgICAgICAoKiBza2lwIHRoZSBuZXdsaW5lICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmVzXG4gICAgICB8ICBfIC0+IGxldCBsZW4gPSBsZW4gKyBuIC0gMSBpblxuICAgICAgICAgICAgICBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiAocmVzIDo6IGFjY3UpXG4gICAgZW5kIGVsc2UgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAoKiBuIDwgMDogbmV3bGluZSBub3QgZm91bmQgKilcbiAgICAgIGxldCBiZWcgPSBieXRlc19jcmVhdGUgKC1uKSBpblxuICAgICAgaWdub3JlKHVuc2FmZV9pbnB1dCBjaGFuIGJlZyAwICgtbikpO1xuICAgICAgc2NhbiAoYmVnIDo6IGFjY3UpIChsZW4gLSBuKVxuICAgIGVuZFxuICBpbiBieXRlc191bnNhZmVfdG9fc3RyaW5nIChzY2FuIFtdIDApXG5cbmV4dGVybmFsIGlucHV0X2J5dGUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcbmV4dGVybmFsIGlucHV0X2JpbmFyeV9pbnQgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9pbnRcIlxuZXh0ZXJuYWwgaW5wdXRfdmFsdWUgOiBpbl9jaGFubmVsIC0+ICdhID0gXCJjYW1sX2lucHV0X3ZhbHVlXCJcbmV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5cIlxuZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX2luXCJcbmV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX2luX25vZXJyIGljID0gKHRyeSBjbG9zZV9pbiBpYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfaW4gOiBpbl9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgb3V0cHV0ICopXG5cbmxldCBwcmludF9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRvdXQgY1xubGV0IHByaW50X3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgc1xubGV0IHByaW50X2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3Rkb3V0IHNcbmxldCBwcmludF9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJpbnRfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmludF9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzOyBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxubGV0IHByaW50X25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGVycm9yICopXG5cbmxldCBwcmVycl9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRlcnIgY1xubGV0IHByZXJyX3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgc1xubGV0IHByZXJyX2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3RkZXJyIHNcbmxldCBwcmVycl9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJlcnJfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmVycl9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzOyBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxubGV0IHByZXJyX25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxuXG4oKiBJbnB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgaW5wdXQgKilcblxubGV0IHJlYWRfbGluZSAoKSA9IGZsdXNoIHN0ZG91dDsgaW5wdXRfbGluZSBzdGRpblxubGV0IHJlYWRfaW50ICgpID0gaW50X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2ludF9vcHQgKCkgPSBpbnRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0ICgpID0gZmxvYXRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXRfb3B0ICgpID0gZmxvYXRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcblxuKCogT3BlcmF0aW9ucyBvbiBsYXJnZSBmaWxlcyAqKVxuXG5tb2R1bGUgTGFyZ2VGaWxlID1cbiAgc3RydWN0XG4gICAgZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX291dF82NFwiXG4gICAgZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50NjRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgICBleHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5fNjRcIlxuICAgIGV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX2luXzY0XCJcbiAgICBleHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgZW5kXG5cbigqIEZvcm1hdHMgKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NlxuICAgPSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDZcbiAgID0gRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm10XG4gICAgICAgICAgICAgICAqIHN0cmluZ1xuXG50eXBlICgnYSwgJ2IsICdjLCAnZCkgZm9ybWF0NCA9ICgnYSwgJ2IsICdjLCAnYywgJ2MsICdkKSBmb3JtYXQ2XG5cbnR5cGUgKCdhLCAnYiwgJ2MpIGZvcm1hdCA9ICgnYSwgJ2IsICdjLCAnYykgZm9ybWF0NFxuXG5sZXQgc3RyaW5nX29mX2Zvcm1hdCAoRm9ybWF0IChfZm10LCBzdHIpKSA9IHN0clxuXG5leHRlcm5hbCBmb3JtYXRfb2Zfc3RyaW5nIDpcbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgKCBeXiApIChGb3JtYXQgKGZtdDEsIHN0cjEpKSAoRm9ybWF0IChmbXQyLCBzdHIyKSkgPVxuICBGb3JtYXQgKENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5jb25jYXRfZm10IGZtdDEgZm10MixcbiAgICAgICAgICBzdHIxIF4gXCIlLFwiIF4gc3RyMilcblxuKCogTWlzY2VsbGFuZW91cyAqKVxuXG5leHRlcm5hbCBzeXNfZXhpdCA6IGludCAtPiAnYSA9IFwiY2FtbF9zeXNfZXhpdFwiXG5cbmxldCBleGl0X2Z1bmN0aW9uID0gQ2FtbGludGVybmFsQXRvbWljLm1ha2UgZmx1c2hfYWxsXG5cbmxldCByZWMgYXRfZXhpdCBmID1cbiAgbGV0IG1vZHVsZSBBdG9taWMgPSBDYW1saW50ZXJuYWxBdG9taWMgaW5cbiAgKCogTVBSIzcyNTMsIE1QUiM3Nzk2OiBtYWtlIHN1cmUgXCJmXCIgaXMgZXhlY3V0ZWQgb25seSBvbmNlICopXG4gIGxldCBmX3lldF90b19ydW4gPSBBdG9taWMubWFrZSB0cnVlIGluXG4gIGxldCBvbGRfZXhpdCA9IEF0b21pYy5nZXQgZXhpdF9mdW5jdGlvbiBpblxuICBsZXQgbmV3X2V4aXQgKCkgPVxuICAgIGlmIEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZl95ZXRfdG9fcnVuIHRydWUgZmFsc2UgdGhlbiBmICgpIDtcbiAgICBvbGRfZXhpdCAoKVxuICBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZXhpdF9mdW5jdGlvbiBvbGRfZXhpdCBuZXdfZXhpdCBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIGF0X2V4aXQgZlxuXG5sZXQgZG9fYXRfZXhpdCAoKSA9IChDYW1saW50ZXJuYWxBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbmV4dGVybmFsIG1ham9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX21ham9yXCJcbmV4dGVybmFsIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgOiB1bml0IC0+IGJvb2xcbiAgPSBcImNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWRcIlxubGV0ICgpID0gaWYgbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCAoKSB0aGVuIGF0X2V4aXQgbWFqb3JcblxuKCpNT0RVTEVfQUxJQVNFUyopXG5tb2R1bGUgQXJnICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgID0gQXJyYXlcbm1vZHVsZSBBcnJheUxhYmVscyAgPSBBcnJheUxhYmVsc1xubW9kdWxlIEF0b21pYyAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICA9IEJpZ2FycmF5XG5tb2R1bGUgQm9vbCAgICAgICAgID0gQm9vbFxubW9kdWxlIEJ1ZmZlciAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICA9IEJ5dGVzXG5tb2R1bGUgQnl0ZXNMYWJlbHMgID0gQnl0ZXNMYWJlbHNcbm1vZHVsZSBDYWxsYmFjayAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICA9IENoYXJcbm1vZHVsZSBDb21wbGV4ICAgICAgPSBDb21wbGV4XG5tb2R1bGUgRGlnZXN0ICAgICAgID0gRGlnZXN0XG5tb2R1bGUgRWl0aGVyICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgID0gRXBoZW1lcm9uXG5tb2R1bGUgRmlsZW5hbWUgICAgID0gRmlsZW5hbWVcbm1vZHVsZSBGbG9hdCAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICA9IEZvcm1hdFxubW9kdWxlIEZ1biAgICAgICAgICA9IEZ1blxubW9kdWxlIEdjICAgICAgICAgICA9IEdjXG5tb2R1bGUgR2VubGV4ICAgICAgID0gR2VubGV4XG5tb2R1bGUgSGFzaHRibCAgICAgID0gSGFzaHRibFxubW9kdWxlIEluX2NoYW5uZWwgICA9IEluX2NoYW5uZWxcbm1vZHVsZSBJbnQgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgPSBJbnQzMlxubW9kdWxlIEludDY0ICAgICAgICA9IEludDY0XG5tb2R1bGUgTGF6eSAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICA9IExleGluZ1xubW9kdWxlIExpc3QgICAgICAgICA9IExpc3Rcbm1vZHVsZSBMaXN0TGFiZWxzICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgID0gTWFwXG5tb2R1bGUgTWFyc2hhbCAgICAgID0gTWFyc2hhbFxubW9kdWxlIE1vcmVMYWJlbHMgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBOYXRpdmVpbnQgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgPSBPYmpcbm1vZHVsZSBPbyAgICAgICAgICAgPSBPb1xubW9kdWxlIE9wdGlvbiAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICA9IE91dF9jaGFubmVsXG5tb2R1bGUgUGFyc2luZyAgICAgID0gUGFyc2luZ1xubW9kdWxlIFBlcnZhc2l2ZXMgICA9IFBlcnZhc2l2ZXNcbm1vZHVsZSBQcmludGV4YyAgICAgPSBQcmludGV4Y1xubW9kdWxlIFByaW50ZiAgICAgICA9IFByaW50ZlxubW9kdWxlIFF1ZXVlICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgID0gUmFuZG9tXG5tb2R1bGUgUmVzdWx0ICAgICAgID0gUmVzdWx0XG5tb2R1bGUgU2NhbmYgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZXEgICAgICAgICAgPSBTZXFcbm1vZHVsZSBTZXQgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgPSBTdGFja1xubW9kdWxlIFN0ZExhYmVscyAgICA9IFN0ZExhYmVsc1xubW9kdWxlIFN0cmVhbSAgICAgICA9IFN0cmVhbVxubW9kdWxlIFN0cmluZyAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyA9IFN0cmluZ0xhYmVsc1xubW9kdWxlIFN5cyAgICAgICAgICA9IFN5c1xubW9kdWxlIFVjaGFyICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgID0gVW5pdFxubW9kdWxlIFdlYWsgICAgICAgICA9IFdlYWtcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbmluY2x1ZGUgSW50XG5cbnR5cGUgdCA9IGludFxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5sZXQgYWRkID0gKCArIClcbmxldCBzdWIgPSAoIC0gKVxubGV0IG11bCA9ICggKiApXG5sZXQgZGl2ID0gKCAvIClcbmxldCBzdWNjID0gc3VjY1xubGV0IHByZWQgPSBwcmVkXG5sZXQgYWJzID0gYWJzXG5sZXQgbWF4X2ludCA9IG1heF9pbnRcbmxldCBtaW5faW50ID0gbWluX2ludFxubGV0IGVxdWFsIChhIDogaW50KSBiID0gU3RkbGliLiggPSApIGEgYlxubGV0IGNvbXBhcmUgKGEgOiBpbnQpIGIgPSBjb21wYXJlIGEgYlxuXG4oKiB1c2UgRk5WOlxuICAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRm93bGVyJUUyJTgwJTkzTm9sbCVFMiU4MCU5M1ZvX2hhc2hfZnVuY3Rpb24gKilcbmxldCBoYXNoIChuIDogaW50KSA6IGludCA9XG4gIGxldCBvZmZzZXRfYmFzaXMgPSAweGNiZjI5Y2U0ODQyMjIzMjVMIGluXG4gIGxldCBwcmltZSA9IDB4MTAwMDAwMDAxYjNMIGluXG5cbiAgbGV0IGggPSByZWYgb2Zmc2V0X2Jhc2lzIGluXG4gIGZvciBrID0gMCB0byA3IGRvXG4gICAgKGggOj0gSW50NjQuKG11bCAhaCBwcmltZSkpO1xuICAgICgqIGggOj0gaCB4b3IgKGstdGggYnl0ZSBvZiBuKSAqKVxuICAgIGggOj0gSW50NjQuKGxvZ3hvciAhaCAob2ZfaW50ICgobiBsc3IgKGsgKiA4KSkgbGFuZCAweGZmKSkpXG4gIGRvbmU7XG4gICgqIHRydW5jYXRlIGJhY2sgdG8gaW50IGFuZCByZW1vdmUgc2lnbiAqKVxuICBJbnQ2NC50b19pbnQgIWggbGFuZCBtYXhfaW50XG5cbmxldCByYW5nZSBpIGogeWllbGQgPVxuICBsZXQgcmVjIHVwIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIHVwIChpICsgMSkgaiB5aWVsZFxuICAgIClcbiAgYW5kIGRvd24gaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgZG93biAoaSAtIDEpIGogeWllbGRcbiAgICApXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIHlpZWxkXG4gIGVsc2VcbiAgICBkb3duIGkgaiB5aWVsZFxuXG5sZXQgcmFuZ2UnIGkgaiB5aWVsZCA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSkgeWllbGRcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKSB5aWVsZFxuXG5sZXQgc2lnbiBpID0gY29tcGFyZSBpIDBcbmxldCBuZWcgaSA9IC1pXG5cbmxldCBwb3cgYSBiID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IDEgLT4gYWNjXG4gICAgfCBuIC0+XG4gICAgICBpZiBuIG1vZCAyID0gMCB0aGVuXG4gICAgICAgIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gICAgICBlbHNlXG4gICAgICAgIGFjYyAqIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gIGluXG4gIG1hdGNoIGIgd2l0aFxuICB8IDAgLT5cbiAgICBpZiBhID0gMCB0aGVuXG4gICAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogdW5kZWZpbmVkIHZhbHVlIDBeMFwiKVxuICAgIGVsc2VcbiAgICAgIDFcbiAgfCBiIHdoZW4gYiA8IDAgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogY2FuJ3QgcmFpc2UgaW50IHRvIG5lZ2F0aXZlIHBvd2VyXCIpXG4gIHwgYiAtPiBhdXggYSBiXG5cbm1vZHVsZSBJbmZpeCA6IHNpZ1xuICB2YWwgKCA9ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8PiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPCApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPD0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCAtLSApIDogdCAtPiB0IC0+IHQgaXRlclxuICB2YWwgKCAtLV4gKSA6IHQgLT4gdCAtPiB0IGl0ZXJcbiAgdmFsICggKyApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggLSApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggfi0gKSA6IHQgLT4gdFxuICB2YWwgKCAqICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAvICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAqKiApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbW9kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsYW5kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsb3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGx4b3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCBsbm90IDogdCAtPiB0XG4gIHZhbCAoIGxzbCApIDogdCAtPiBpbnQgLT4gdFxuICB2YWwgKCBsc3IgKSA6IHQgLT4gaW50IC0+IHRcbiAgdmFsICggYXNyICkgOiB0IC0+IGludCAtPiB0XG5lbmQgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdGRsaWJcblxuICBsZXQgKCAtLSApID0gcmFuZ2VcbiAgbGV0ICggLS1eICkgPSByYW5nZSdcbiAgbGV0ICggKiogKSA9IHBvd1xuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxubGV0IG1pbiA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1pblxubGV0IG1heCA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1heFxuXG5sZXQgZmxvb3JfZGl2IGEgbiA9XG4gIGlmIGEgPCAwICYmIG4gPj0gMCB0aGVuXG4gICAgKChhICsgMSkgLyBuKSAtIDFcbiAgZWxzZSBpZiBhID4gMCAmJiBuIDwgMCB0aGVuXG4gICAgKChhIC0gMSkgLyBuKSAtIDFcbiAgZWxzZVxuICAgIGEgLyBuXG5cbmxldCBib29sX25lcSAoYSA6IGJvb2wpIGIgPSBTdGRsaWIuKCA8PiApIGEgYlxuXG5sZXQgcmVtIGEgbiA9XG4gIGxldCB5ID0gYSBtb2QgbiBpblxuICBpZiBib29sX25lcSAoeSA8IDApIChuIDwgMCkgJiYgeSA8PiAwIHRoZW5cbiAgICB5ICsgblxuICBlbHNlXG4gICAgeVxuXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gbiBzdCA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgblxubGV0IHJhbmRvbV9zbWFsbCA9IHJhbmRvbSAxMDBcbmxldCByYW5kb21fcmFuZ2UgaSBqIHN0ID0gaSArIHJhbmRvbSAoaiAtIGkpIHN0XG5sZXQgcHAgZm10ID0gRm9ybWF0LnBwX3ByaW50X2ludCBmbXRcbmxldCBtb3N0X3NpZ25pZmljYW50X2JpdCA9IC0xIGx4b3IgKC0xIGxzciAxKVxubGV0IHRvX3N0cmluZyA9IHN0cmluZ19vZl9pbnRcbmxldCBvZl9zdHJpbmcgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbmxldCBvZl9zdHJpbmdfZXhuID0gU3RkbGliLmludF9vZl9zdHJpbmdcbmxldCB0b19mbG9hdCA9IGZsb2F0X29mX2ludFxubGV0IG9mX2Zsb2F0ID0gaW50X29mX2Zsb2F0XG5cbnR5cGUgb3V0cHV0ID0gY2hhciAtPiB1bml0XG5cbigqIGFic3RyYWN0IHByaW50ZXIgKilcbmxldCB0b19iaW5hcnlfZ2VuIChvdXQgOiBvdXRwdXQpIG4gPVxuICBsZXQgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiAoXG4gICAgICBvdXQgJy0nO1xuICAgICAgLW5cbiAgICApIGVsc2VcbiAgICAgIG5cbiAgaW5cbiAgb3V0ICcwJztcbiAgb3V0ICdiJztcbiAgbGV0IHJlYyBsb29wIHN0YXJ0ZWQgYml0IG4gPVxuICAgIGlmIGJpdCA9IDAgdGhlbiAoXG4gICAgICBpZiBub3Qgc3RhcnRlZCB0aGVuIG91dCAnMCdcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGIgPSBuIGxhbmQgYml0IGluXG4gICAgICBpZiBiID0gMCB0aGVuIChcbiAgICAgICAgaWYgc3RhcnRlZCB0aGVuIG91dCAnMCc7XG4gICAgICAgIGxvb3Agc3RhcnRlZCAoYml0IGxzciAxKSBuXG4gICAgICApIGVsc2UgKFxuICAgICAgICBvdXQgJzEnO1xuICAgICAgICBsb29wIHRydWUgKGJpdCBsc3IgMSkgblxuICAgICAgKVxuICAgIClcbiAgaW5cbiAgbG9vcCBmYWxzZSBtb3N0X3NpZ25pZmljYW50X2JpdCBuXG5cbmxldCBwcF9iaW5hcnkgb3V0IG4gPSB0b19iaW5hcnlfZ2VuIChGb3JtYXQucHBfcHJpbnRfY2hhciBvdXQpIG5cblxubGV0IHRvX3N0cmluZ19iaW5hcnkgbiA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDE2IGluXG4gIHRvX2JpbmFyeV9nZW4gKEJ1ZmZlci5hZGRfY2hhciBidWYpIG47XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgcmFuZ2UgKGkgKyBzdGVwKSBqIHlpZWxkXG4gICAgKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0ludC5yYW5nZV9ieVwiKVxuICBlbHNlIGlmXG4gICAgaWYgc3RlcCA+IDAgdGhlblxuICAgICAgaSA+IGpcbiAgICBlbHNlXG4gICAgICBpIDwgalxuICB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKCgoaiAtIGkpIC8gc3RlcCAqIHN0ZXApICsgaSkgeWllbGRcblxuKCpcbiAgZnJvbSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYW1taW5nX3dlaWdodFxuXG4gIC8vVGhpcyB1c2VzIGZld2VyIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0aGFuIGFueSBvdGhlciBrbm93blxuICAvL2ltcGxlbWVudGF0aW9uIG9uIG1hY2hpbmVzIHdpdGggc2xvdyBtdWx0aXBsaWNhdGlvbi5cbiAgLy9JdCB1c2VzIDE3IGFyaXRobWV0aWMgb3BlcmF0aW9ucy5cbiAgaW50IHBvcGNvdW50XzIodWludDY0X3QgeCkge1xuICAgIHggLT0gKHggPj4gMSkgJiBtMTsgICAgICAgICAgICAgLy9wdXQgY291bnQgb2YgZWFjaCAyIGJpdHMgaW50byB0aG9zZSAyIGJpdHNcbiAgICB4ID0gKHggJiBtMikgKyAoKHggPj4gMikgJiBtMik7IC8vcHV0IGNvdW50IG9mIGVhY2ggNCBiaXRzIGludG8gdGhvc2UgNCBiaXRzXG4gICAgeCA9ICh4ICsgKHggPj4gNCkpICYgbTQ7ICAgICAgICAvL3B1dCBjb3VudCBvZiBlYWNoIDggYml0cyBpbnRvIHRob3NlIDggYml0c1xuICAgIHggKz0geCA+PiAgODsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMTYgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMTY7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDMyIGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgeCArPSB4ID4+IDMyOyAgLy9wdXQgY291bnQgb2YgZWFjaCA2NCBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHJldHVybiB4ICYgMHg3ZjtcbiAgfVxuXG4gICBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NVxuICAgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNcbiAgIG00ID0gMHgwZjBmMGYwZjBmMGYwZjBmXG4qKVxubGV0IHBvcGNvdW50IChiIDogaW50KSA6IGludCA9XG4gIGxldCBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NUwgaW5cbiAgbGV0IG0yID0gMHgzMzMzMzMzMzMzMzMzMzMzTCBpblxuICBsZXQgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZMIGluXG4gIGxldCBvcGVuIEludDY0IGluXG4gIGxldCBiID0gb2ZfaW50IGIgaW5cbiAgKCogaW50LT5pbnQ2NCAqKVxuICBsZXQgYiA9IGxvZ2FuZCBiIDB4N2ZmZmZmZmZmZmZmZmZmZkwgaW5cblxuICAoKiByZW1vdmUgc2lnbiBiaXQsIHdlIGRlYWwgd2l0aCB1aW50NjQgaGVyZSAqKVxuICBsZXQgYiA9IHN1YiBiIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxKSBtMSkgaW5cbiAgbGV0IGIgPSBhZGQgKGxvZ2FuZCBiIG0yKSAobG9nYW5kIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMikgbTIpIGluXG4gIGxldCBiID0gbG9nYW5kIChhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDQpKSBtNCBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgOCkgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDE2KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMzIpIGluXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZkwgaW5cbiAgdG9faW50IGJcblxubGV0IGxvZ2FuZCA9ICggbGFuZCApXG5sZXQgbG9nb3IgPSAoIGxvciApXG5sZXQgbG9neG9yID0gKCBseG9yIClcbmxldCBsb2dub3QgPSBsbm90XG5sZXQgc2hpZnRfbGVmdCA9ICggbHNsIClcbmxldCBzaGlmdF9yaWdodCA9ICggYXNyIClcbmxldCBzaGlmdF9yaWdodF9sb2dpY2FsID0gKCBsc3IgKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0IHJlYyBpbml0X3RhaWxyZWNfYXV4IGFjYyBpIG4gZiA9XG4gIGlmIGkgPj0gbiB0aGVuIGFjY1xuICBlbHNlIGluaXRfdGFpbHJlY19hdXggKGYgaSA6OiBhY2MpIChpKzEpIG4gZlxuXG5sZXQgcmVjIGluaXRfYXV4IGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gW11cbiAgZWxzZVxuICAgIGxldCByID0gZiBpIGluXG4gICAgciA6OiBpbml0X2F1eCAoaSsxKSBuIGZcblxubGV0IHJldl9pbml0X3RocmVzaG9sZCA9XG4gIG1hdGNoIFN5cy5iYWNrZW5kX3R5cGUgd2l0aFxuICB8IFN5cy5OYXRpdmUgfCBTeXMuQnl0ZWNvZGUgLT4gMTBfMDAwXG4gICgqIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgdGhlIHN0YWNrLCBiZXR0ZXIgYmUgc2FmZSBhbmQgYXNzdW1lIGl0J3NcbiAgICAgc21hbGwuICopXG4gIHwgU3lzLk90aGVyIF8gLT4gNTBcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGlmIGxlbiA+IHJldl9pbml0X3RocmVzaG9sZCB0aGVuIHJldiAoaW5pdF90YWlscmVjX2F1eCBbXSAwIGxlbiBmKVxuICBlbHNlIGluaXRfYXV4IDAgbGVuIGZcblxubGV0IHJlYyBmbGF0dGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGw6OnIgLT4gbCBAIGZsYXR0ZW4gclxuXG5sZXQgY29uY2F0ID0gZmxhdHRlblxuXG5sZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGE6OmwgLT4gbGV0IHIgPSBmIGEgaW4gciA6OiBtYXAgZiBsXG5cbmxldCByZWMgbWFwaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgaSBhIGluIHIgOjogbWFwaSAoaSArIDEpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldCByZWMgbWFwMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBsZXQgciA9IGYgYTEgYTIgaW4gciA6OiBtYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX2FsbCBwID1cbiAgbGV0IHJlYyBmaW5kIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2N1XG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIGZpbmQgKHggOjogYWNjdSkgbCBlbHNlIGZpbmQgYWNjdSBsIGluXG4gIGZpbmQgW11cblxubGV0IGZpbHRlciA9IGZpbmRfYWxsXG5cbmxldCBmaWx0ZXJpIHAgbCA9XG4gIGxldCByZWMgYXV4IGkgYWNjID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByZXYgYWNjXG4gIHwgeDo6bCAtPiBhdXggKGkgKyAxKSAoaWYgcCBpIHggdGhlbiB4OjphY2MgZWxzZSBhY2MpIGxcbiAgaW5cbiAgYXV4IDAgW10gbFxuXG5sZXQgZmlsdGVyX21hcCBmID1cbiAgbGV0IHJlYyBhdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBhdXggYWNjdSBsXG4gICAgICAgIHwgU29tZSB2IC0+IGF1eCAodiA6OiBhY2N1KSBsXG4gIGluXG4gIGF1eCBbXVxuXG5sZXQgY29uY2F0X21hcCBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjXG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICBsZXQgeHMgPSBmIHggaW5cbiAgICAgICBhdXggZiAocmV2X2FwcGVuZCB4cyBhY2MpIGxcbiAgaW4gYXV4IGYgW10gbFxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjY3UgbCA9XG4gIGxldCByZWMgYXV4IGFjY3UgbF9hY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGFjY3UsIHJldiBsX2FjY3VcbiAgICB8IHggOjogbCAtPlxuICAgICAgICBsZXQgYWNjdSwgeCA9IGYgYWNjdSB4IGluXG4gICAgICAgIGF1eCBhY2N1ICh4IDo6IGxfYWNjdSkgbCBpblxuICBhdXggYWNjdSBbXSBsXG5cbmxldCBwYXJ0aXRpb24gcCBsID1cbiAgbGV0IHJlYyBwYXJ0IHllcyBubyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiB5ZXMsIHJldiBubylcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gcGFydCAoeCA6OiB5ZXMpIG5vIGwgZWxzZSBwYXJ0IHllcyAoeCA6OiBubykgbCBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXAgcCBsID1cbiAgbGV0IHJlYyBwYXJ0IGxlZnQgcmlnaHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgbGVmdCwgcmV2IHJpZ2h0KVxuICB8IHggOjogbCAtPlxuICAgICBiZWdpbiBtYXRjaCBwIHggd2l0aFxuICAgICAgIHwgRWl0aGVyLkxlZnQgdiAtPiBwYXJ0ICh2IDo6IGxlZnQpIHJpZ2h0IGxcbiAgICAgICB8IEVpdGhlci5SaWdodCB2IC0+IHBhcnQgbGVmdCAodiA6OiByaWdodCkgbFxuICAgICBlbmRcbiAgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCByZWMgc3BsaXQgPSBmdW5jdGlvblxuICAgIFtdIC0+IChbXSwgW10pXG4gIHwgKHgseSk6OmwgLT5cbiAgICAgIGxldCAocngsIHJ5KSA9IHNwbGl0IGwgaW4gKHg6OnJ4LCB5OjpyeSlcblxubGV0IHJlYyBjb21iaW5lIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiAoYTEsIGEyKSA6OiBjb21iaW5lIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5jb21iaW5lXCJcblxuKCoqIHNvcnRpbmcgKilcblxubGV0IHJlYyBtZXJnZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBsMiAtPiBsMlxuICB8IGwxLCBbXSAtPiBsMVxuICB8IGgxIDo6IHQxLCBoMiA6OiB0MiAtPlxuICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgIHRoZW4gaDEgOjogbWVyZ2UgY21wIHQxIGwyXG4gICAgICBlbHNlIGgyIDo6IG1lcmdlIGNtcCBsMSB0MlxuXG5cbmxldCBzdGFibGVfc29ydCBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA8PSAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA+IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCBzb3J0ID0gc3RhYmxlX3NvcnRcbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiBOb3RlOiBvbiBhIGxpc3Qgb2YgbGVuZ3RoIGJldHdlZW4gYWJvdXQgMTAwMDAwIChkZXBlbmRpbmcgb24gdGhlIG1pbm9yXG4gICBoZWFwIHNpemUgYW5kIHRoZSB0eXBlIG9mIHRoZSBsaXN0KSBhbmQgU3lzLm1heF9hcnJheV9zaXplLCBpdCBpc1xuICAgYWN0dWFsbHkgZmFzdGVyIHRvIHVzZSB0aGUgZm9sbG93aW5nLCBidXQgaXQgbWlnaHQgYWxzbyB1c2UgbW9yZSBtZW1vcnlcbiAgIGJlY2F1c2UgdGhlIGFyZ3VtZW50IGxpc3QgY2Fubm90IGJlIGRlYWxsb2NhdGVkIGluY3JlbWVudGFsbHkuXG5cbiAgIEFsc28sIHRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIGluIHRoaXMgY29kZSBvciBpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIG9ial90cnVuY2F0ZS5cblxuZXh0ZXJuYWwgb2JqX3RydW5jYXRlIDogJ2EgYXJyYXkgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcblxubGV0IGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYSA9XG4gIGxldCBsID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGFjY3UgbiBwID1cbiAgICBpZiBwIDw9IDAgdGhlbiBhY2N1IGVsc2UgYmVnaW5cbiAgICAgIGlmIHAgPSBuIHRoZW4gYmVnaW5cbiAgICAgICAgb2JqX3RydW5jYXRlIGEgcDtcbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSAobi0xMDAwKSAocC0xKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSBuIChwLTEpXG4gICAgICBlbmRcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBbXSAobC0xMDAwKSBsXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgQXJyYXkuc3RhYmxlX3NvcnQgY21wIGE7XG4gIGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYVxuXG4qKVxuXG5cbigqKiBzb3J0aW5nICsgcmVtb3ZpbmcgZHVwbGljYXRlcyAqKVxuXG5sZXQgc29ydF91bmlxIGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlIHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjIDwgMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZV9yZXYgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RocyBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8sIFtdIC0+IDFcbiAgfCBfIDo6IGwxLCBfIDo6IGwyIC0+IGNvbXBhcmVfbGVuZ3RocyBsMSBsMlxuOztcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcbjs7XG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXQgb2Zfc2VxIHNlcSA9XG4gIGxldCByZWMgZGlyZWN0IGRlcHRoIHNlcSA6IF8gbGlzdCA9XG4gICAgaWYgZGVwdGg9MFxuICAgIHRoZW5cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIHNlcVxuICAgICAgfD4gcmV2ICgqIHRhaWxyZWMgKilcbiAgICBlbHNlIG1hdGNoIHNlcSgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgbmV4dCkgLT4geCA6OiBkaXJlY3QgKGRlcHRoLTEpIG5leHRcbiAgaW5cbiAgZGlyZWN0IDUwMCBzZXFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICBUaGlzIGlzIGEgbGFnZ2VkLUZpYm9uYWNjaSBGKDU1LCAyNCwgKykgd2l0aCBhIG1vZGlmaWVkIGFkZGl0aW9uXG4gICBmdW5jdGlvbiB0byBlbmhhbmNlIHRoZSBtaXhpbmcgb2YgYml0cy5cbiAgIElmIHdlIHVzZSBub3JtYWwgYWRkaXRpb24sIHRoZSBsb3ctb3JkZXIgYml0IGZhaWxzIHRlc3RzIDEgYW5kIDdcbiAgIG9mIHRoZSBEaWVoYXJkIHRlc3Qgc3VpdGUsIGFuZCBiaXRzIDEgYW5kIDIgYWxzbyBmYWlsIHRlc3QgNy5cbiAgIElmIHdlIHVzZSBtdWx0aXBsaWNhdGlvbiBhcyBzdWdnZXN0ZWQgYnkgTWFyc2FnbGlhLCBpdCBkb2Vzbid0IGZhcmVcbiAgIG11Y2ggYmV0dGVyLlxuICAgQnkgbWl4aW5nIHRoZSBiaXRzIG9mIG9uZSBvZiB0aGUgbnVtYmVycyBiZWZvcmUgYWRkaXRpb24gKFhPUiB0aGVcbiAgIDUgaGlnaC1vcmRlciBiaXRzIGludG8gdGhlIGxvdy1vcmRlciBiaXRzKSwgd2UgZ2V0IGEgZ2VuZXJhdG9yIHRoYXRcbiAgIHBhc3NlcyBhbGwgdGhlIERpZWhhcmQgdGVzdHMuXG4qKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgdHlwZSB0ID0geyBzdCA6IGludCBhcnJheTsgbXV0YWJsZSBpZHggOiBpbnQgfVxuXG4gIGxldCBuZXdfc3RhdGUgKCkgPSB7IHN0ID0gQXJyYXkubWFrZSA1NSAwOyBpZHggPSAwIH1cbiAgbGV0IGFzc2lnbiBzdDEgc3QyID1cbiAgICBBcnJheS5ibGl0IHN0Mi5zdCAwIHN0MS5zdCAwIDU1O1xuICAgIHN0MS5pZHggPC0gc3QyLmlkeFxuXG5cbiAgbGV0IGZ1bGxfaW5pdCBzIHNlZWQgPVxuICAgIGxldCBjb21iaW5lIGFjY3UgeCA9IERpZ2VzdC5zdHJpbmcgKGFjY3UgXiBJbnQudG9fc3RyaW5nIHgpIGluXG4gICAgbGV0IGV4dHJhY3QgZCA9XG4gICAgICBDaGFyLmNvZGUgZC5bMF0gKyAoQ2hhci5jb2RlIGQuWzFdIGxzbCA4KSArIChDaGFyLmNvZGUgZC5bMl0gbHNsIDE2KVxuICAgICAgKyAoQ2hhci5jb2RlIGQuWzNdIGxzbCAyNClcbiAgICBpblxuICAgIGxldCBzZWVkID0gaWYgQXJyYXkubGVuZ3RoIHNlZWQgPSAwIHRoZW4gW3wgMCB8XSBlbHNlIHNlZWQgaW5cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0IGRvXG4gICAgICBzLnN0LihpKSA8LSBpO1xuICAgIGRvbmU7XG4gICAgbGV0IGFjY3UgPSByZWYgXCJ4XCIgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgKyBJbnQubWF4IDU1IGwgZG9cbiAgICAgIGxldCBqID0gaSBtb2QgNTUgaW5cbiAgICAgIGxldCBrID0gaSBtb2QgbCBpblxuICAgICAgYWNjdSA6PSBjb21iaW5lICFhY2N1IHNlZWQuKGspO1xuICAgICAgcy5zdC4oaikgPC0gKHMuc3QuKGopIGx4b3IgZXh0cmFjdCAhYWNjdSkgbGFuZCAweDNGRkZGRkZGOyAgKCogUFIjNTU3NSAqKVxuICAgIGRvbmU7XG4gICAgcy5pZHggPC0gMFxuXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGZ1bGxfaW5pdCByZXN1bHQgc2VlZDtcbiAgICByZXN1bHRcblxuXG4gIGxldCBtYWtlX3NlbGZfaW5pdCAoKSA9IG1ha2UgKHJhbmRvbV9zZWVkICgpKVxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBhc3NpZ24gcmVzdWx0IHM7XG4gICAgcmVzdWx0XG5cblxuICAoKiBSZXR1cm5zIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMTA3Mzc0MTgyNCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBzLmlkeCA8LSAocy5pZHggKyAxKSBtb2QgNTU7XG4gICAgbGV0IGN1cnZhbCA9IHMuc3QuKHMuaWR4KSBpblxuICAgIGxldCBuZXd2YWwgPSBzLnN0Ligocy5pZHggKyAyNCkgbW9kIDU1KVxuICAgICAgICAgICAgICAgICArIChjdXJ2YWwgbHhvciAoKGN1cnZhbCBsc3IgMjUpIGxhbmQgMHgxRikpIGluXG4gICAgbGV0IG5ld3ZhbDMwID0gbmV3dmFsIGxhbmQgMHgzRkZGRkZGRiBpbiAgKCogUFIjNTU3NSAqKVxuICAgIHMuc3QuKHMuaWR4KSA8LSBuZXd2YWwzMDtcbiAgICBuZXd2YWwzMFxuXG5cbiAgbGV0IHJlYyBpbnRhdXggcyBuID1cbiAgICBsZXQgciA9IGJpdHMgcyBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gMHgzRkZGRkZGRiAtIG4gKyAxIHRoZW4gaW50YXV4IHMgbiBlbHNlIHZcblxuICBsZXQgaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB8fCBib3VuZCA8PSAwXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRcIlxuICAgIGVsc2UgaW50YXV4IHMgYm91bmRcblxuICBsZXQgcmVjIGludDYzYXV4IHMgbiA9XG4gICAgbGV0IG1heF9pbnRfMzIgPSAoMSBsc2wgMzApICsgMHgzRkZGRkZGRiBpbiAoKiAweDdGRkZGRkZGICopXG4gICAgbGV0IGIxID0gYml0cyBzIGluXG4gICAgbGV0IGIyID0gYml0cyBzIGluXG4gICAgbGV0IChyLCBtYXhfaW50KSA9XG4gICAgICBpZiBuIDw9IG1heF9pbnRfMzIgdGhlblxuICAgICAgICAoKiAzMSByYW5kb20gYml0cyBvbiBib3RoIDY0LWJpdCBPQ2FtbCBhbmQgSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDE1IGJpdHMgb2YgYjEgYW5kIDE2IGJpdHMgb2YgYjIuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKChiMiBsYW5kIDB4M0ZGRkMwMDApIGxzbCAxKSBsb3IgKGIxIGxzciAxNSkpXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnRfMzIpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBiMyA9IGJpdHMgcyBpblxuICAgICAgICAoKiA2MiByYW5kb20gYml0cyBvbiA2NC1iaXQgT0NhbWw7IHVucmVhY2hhYmxlIG9uIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAyMCBiaXRzIG9mIGIxIGFuZCAyMSBiaXRzIG9mIGIyIGFuZCBiMy4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKChiMyBsYW5kIDB4M0ZGRkZFMDApIGxzbCAxMikgbG9yIChiMiBsc3IgOSkpIGxzbCAyMClcbiAgICAgICAgICAgIGxvciAoYjEgbHNyIDEwKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50KVxuICAgIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiBtYXhfaW50IC0gbiArIDEgdGhlbiBpbnQ2M2F1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGZ1bGxfaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uZnVsbF9pbnRcIlxuICAgIGVsc2UgaWYgYm91bmQgPiAweDNGRkZGRkZGIHRoZW5cbiAgICAgIGludDYzYXV4IHMgYm91bmRcbiAgICBlbHNlXG4gICAgICBpbnRhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQzMmF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDMyLm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDMyLnNoaWZ0X2xlZnQgKEludDMyLm9mX2ludCAoYml0cyBzIGxhbmQgMSkpIDMwIGluXG4gICAgbGV0IHIgPSBJbnQzMi5sb2dvciBiMSBiMiBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgIGlmIEludDMyLnN1YiByIHYgPiBJbnQzMi5hZGQgKEludDMyLnN1YiBJbnQzMi5tYXhfaW50IG4pIDFsXG4gICAgdGhlbiBpbnQzMmF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50MzIgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDMyXCJcbiAgICBlbHNlIGludDMyYXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQ2NC5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcykpIDMwIGluXG4gICAgbGV0IGIzID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMgbGFuZCA3KSkgNjAgaW5cbiAgICBsZXQgciA9IEludDY0LmxvZ29yIGIxIChJbnQ2NC5sb2dvciBiMiBiMykgaW5cbiAgICBsZXQgdiA9IEludDY0LnJlbSByIG4gaW5cbiAgICBpZiBJbnQ2NC5zdWIgciB2ID4gSW50NjQuYWRkIChJbnQ2NC5zdWIgSW50NjQubWF4X2ludCBuKSAxTFxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cblxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cblxuICAoKiBSZXR1cm5zIGEgZmxvYXQgMCA8PSB4IDw9IDEgd2l0aCBhdCBtb3N0IDYwIGJpdHMgb2YgcHJlY2lzaW9uLiAqKVxuICBsZXQgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IHNjYWxlID0gMTA3Mzc0MTgyNC4wICAoKiAyXjMwICopXG4gICAgYW5kIHIxID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgYW5kIHIyID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgaW4gKHIxIC8uIHNjYWxlICsuIHIyKSAvLiBzY2FsZVxuXG5cbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgbGV0IGJvb2wgcyA9IChiaXRzIHMgbGFuZCAxID0gMClcblxuICBsZXQgYml0czMyIHMgPVxuICAgIGxldCBiMSA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIEludDMyLihsb2dvciBiMSAoc2hpZnRfbGVmdCBiMiAxNikpXG5cbiAgbGV0IGJpdHM2NCBzID1cbiAgICBsZXQgYjEgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIzID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOCkgaW4gICgqIDIyIGJpdHMgKilcbiAgICBJbnQ2NC4obG9nb3IgYjEgKGxvZ29yIChzaGlmdF9sZWZ0IGIyIDIxKSAoc2hpZnRfbGVmdCBiMyA0MikpKVxuXG4gIGxldCBuYXRpdmViaXRzID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGJpdHMzMiBzKVxuICAgIGVsc2UgZnVuIHMgLT4gSW50NjQudG9fbmF0aXZlaW50IChiaXRzNjQgcylcblxuZW5kXG5cbigqIFRoaXMgaXMgdGhlIHN0YXRlIHlvdSBnZXQgd2l0aCBbaW5pdCAyNzE4MjgxOF0gYW5kIHRoZW4gYXBwbHlpbmdcbiAgIHRoZSBcImxhbmQgMHgzRkZGRkZGRlwiIGZpbHRlciB0byB0aGVtLiAgU2VlICM1NTc1LCAjNTc5MywgIzU5NzcuICopXG5sZXQgZGVmYXVsdCA9IHtcbiAgU3RhdGUuc3QgPSBbfFxuICAgICAgMHgzYWUyNTIyYjsgMHgxZDhkNDYzNDsgMHgxNWI0ZmFkMDsgMHgxOGIxNGFjZTsgMHgxMmY4YTNjNDsgMHgzYjA4NmM0NztcbiAgICAgIDB4MTZkNDY3ZDY7IDB4MTAxZDkxYzc7IDB4MzIxZGYxNzc7IDB4MDE3NmMxOTM7IDB4MWZmNzJiZjE7IDB4MWU4ODkxMDk7XG4gICAgICAweDBiNDY0YjE4OyAweDJiODZiOTdjOyAweDA4OTFkYTQ4OyAweDAzMTM3NDYzOyAweDA4NWFjNWExOyAweDE1ZDYxZjJmO1xuICAgICAgMHgzYmNlZDM1OTsgMHgyOWMxYzEzMjsgMHgzYTg2NzY2ZTsgMHgzNjZkOGM4NjsgMHgxZjViNjIyMjsgMHgzY2UxYjU5ZjtcbiAgICAgIDB4MmViZjc4ZTE7IDB4MjdjZDFiODY7IDB4MjU4ZjNkYzM7IDB4Mzg5YTgxOTQ7IDB4MDJlNGM0NGM7IDB4MThjNDNmN2Q7XG4gICAgICAweDBmNmU1MzRmOyAweDFlN2RmMzU5OyAweDA1NWQwYjdlOyAweDEwZTg0ZTdlOyAweDEyNjE5OGU0OyAweDBlNzcyMmNiO1xuICAgICAgMHgxY2JlZGUyODsgMHgzMzkxYjk2NDsgMHgzZDQwZTkyYTsgMHgwYzU5OTMzZDsgMHgwYjhjZDBiNzsgMHgyNGVmZmYxYztcbiAgICAgIDB4MjgwM2ZkYWE7IDB4MDhlYmM3MmU7IDB4MGY1MjJlMzI7IDB4MDUzOThlZGM7IDB4MjE0NGEwNGM7IDB4MGFlZjNjYmQ7XG4gICAgICAweDAxYWQ0NzE5OyAweDM1YjkzY2Q2OyAweDJhNTU5ZDRmOyAweDFlNmZkNzY4OyAweDI2ZTI3ZjM2OyAweDE4NmYxOGMzO1xuICAgICAgMHgyZmJmOTY3YTtcbiAgICB8XTtcbiAgU3RhdGUuaWR4ID0gMDtcbn1cblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIGRlZmF1bHRcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgZGVmYXVsdCBib3VuZFxubGV0IGZ1bGxfaW50IGJvdW5kID0gU3RhdGUuZnVsbF9pbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgZGVmYXVsdCBib3VuZFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCBkZWZhdWx0IGJvdW5kXG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCBkZWZhdWx0IHNjYWxlXG5sZXQgYm9vbCAoKSA9IFN0YXRlLmJvb2wgZGVmYXVsdFxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiBkZWZhdWx0XG5sZXQgYml0czY0ICgpID0gU3RhdGUuYml0czY0IGRlZmF1bHRcbmxldCBuYXRpdmViaXRzICgpID0gU3RhdGUubmF0aXZlYml0cyBkZWZhdWx0XG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IHNlZWRcbmxldCBpbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IGRlZmF1bHRcbmxldCBzZXRfc3RhdGUgcyA9IFN0YXRlLmFzc2lnbiBkZWZhdWx0IHNcblxuKCoqKioqKioqKioqKioqKioqKioqXG5cbigqIFRlc3QgZnVuY3Rpb25zLiAgTm90IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LlxuICAgVGhlIFtjaGlzcXVhcmVdIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBuID4gMTByLlxuICAgSXQgcmV0dXJucyBhIHRyaXBsZSAobG93LCBhY3R1YWwsIGhpZ2gpLlxuICAgSWYgbG93IDw9IGFjdHVhbCA8PSBoaWdoLCB0aGUgW2ddIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCxcbiAgIG90aGVyd2lzZSBpdCBmYWlsZWQuXG5cbiAgU29tZSByZXN1bHRzOlxuXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDUwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI5OTc5MjY0MzsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAxNDE0MjEzNjsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMjQ7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAwOyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMjQ7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDE0MTQyMTM2OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMjk5NzkyNjQzOyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbi0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTk3LjUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4OS43NDAwMDAwMDAwMDUyMzg3LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDQ4NTguNTc4NjQzNzYyNjksIDUwNDUuNSwgNTE0MS40MjEzNTYyMzczMSlcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9XG4oOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTQ0LjgwNTk5OTk5OTk4MjMwNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDE5LjE5NzQ0MDAwMDAwMzU1LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU5LjMxNzc2MDAwMDAwNTM2LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDM5Ljk4NDYzOTk5OTk5NTEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU0LjM4MjA3OTk5OTk5NTc3LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDkwLjA5NjAwMDAwMDAwNSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDc2Ljc4NzIwMDAwMDAwNjEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjE3NjAwMDAwMDAwNjc1MjEsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4yMTYwMDAwMDAwMDAzNDkyLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODAuNjIyMDAwMDAwMDAzMDI2OCwgMTIwLilcblxuKilcblxuKCogUmV0dXJuIHRoZSBzdW0gb2YgdGhlIHNxdWFyZXMgb2YgdltpMCxpMVsgKilcbmxldCByZWMgc3Vtc3EgdiBpMCBpMSA9XG4gIGlmIGkwID49IGkxIHRoZW4gMC4wXG4gIGVsc2UgaWYgaTEgPSBpMCArIDEgdGhlbiBTdGRsaWIuZmxvYXQgdi4oaTApICouIFN0ZGxpYi5mbG9hdCB2LihpMClcbiAgZWxzZSBzdW1zcSB2IGkwICgoaTAraTEpLzIpICsuIHN1bXNxIHYgKChpMCtpMSkvMikgaTFcblxuXG5sZXQgY2hpc3F1YXJlIGcgbiByID1cbiAgaWYgbiA8PSAxMCAqIHIgdGhlbiBpbnZhbGlkX2FyZyBcImNoaXNxdWFyZVwiO1xuICBsZXQgZiA9IEFycmF5Lm1ha2UgciAwIGluXG4gIGZvciBpID0gMSB0byBuIGRvXG4gICAgbGV0IHQgPSBnIHIgaW5cbiAgICBmLih0KSA8LSBmLih0KSArIDFcbiAgZG9uZTtcbiAgbGV0IHQgPSBzdW1zcSBmIDAgclxuICBhbmQgciA9IFN0ZGxpYi5mbG9hdCByXG4gIGFuZCBuID0gU3RkbGliLmZsb2F0IG4gaW5cbiAgbGV0IHNyID0gMi4wICouIHNxcnQgciBpblxuICAociAtLiBzciwgICAociAqLiB0IC8uIG4pIC0uIG4sICAgciArLiBzcilcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIGxpbmVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbSBudW1iZXJzLlxuKilcbmxldCBzdCA9IHJlZiAwXG5sZXQgaW5pdF9kaWZmIHIgPSBzdCA6PSBpbnQgclxubGV0IGRpZmYgciA9XG4gIGxldCB4MSA9ICFzdFxuICBhbmQgeDIgPSBpbnQgclxuICBpblxuICBzdCA6PSB4MjtcbiAgaWYgeDEgPj0geDIgdGhlblxuICAgIHgxIC0geDJcbiAgZWxzZVxuICAgIHIgKyB4MSAtIHgyXG5cblxubGV0IHN0MSA9IHJlZiAwXG5hbmQgc3QyID0gcmVmIDBcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIHF1YWRyYXRpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbVxuICAgbnVtYmVycy5cbiopXG5sZXQgaW5pdF9kaWZmMiByID0gc3QxIDo9IGludCByOyBzdDIgOj0gaW50IHJcbmxldCBkaWZmMiByID1cbiAgbGV0IHgxID0gIXN0MVxuICBhbmQgeDIgPSAhc3QyXG4gIGFuZCB4MyA9IGludCByXG4gIGluXG4gIHN0MSA6PSB4MjtcbiAgc3QyIDo9IHgzO1xuICAoeDMgLSB4MiAtIHgyICsgeDEgKyAyKnIpIG1vZCByXG5cblxuKioqKioqKioqKioqKioqKioqKiopXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE9wZXJhdGlvbnMgb24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIG9mIHZhbHVlcyAqKVxuXG50eXBlIHRcblxudHlwZSByYXdfZGF0YSA9IG5hdGl2ZWludFxuXG5leHRlcm5hbCByZXByIDogJ2EgLT4gdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG9iaiA6IHQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBtYWdpYyA6ICdhIC0+ICdiID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgaXNfaW50IDogdCAtPiBib29sID0gXCIlb2JqX2lzX2ludFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBpc19ibG9jayBhID0gbm90IChpc19pbnQgYSlcbmV4dGVybmFsIHRhZyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial90YWdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2V0X3RhZyA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3NldF90YWdcIlxuZXh0ZXJuYWwgc2l6ZSA6IHQgLT4gaW50ID0gXCIlb2JqX3NpemVcIlxuZXh0ZXJuYWwgcmVhY2hhYmxlX3dvcmRzIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1wiXG5leHRlcm5hbCBmaWVsZCA6IHQgLT4gaW50IC0+IHQgPSBcIiVvYmpfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X2ZpZWxkIDogdCAtPiBpbnQgLT4gdCAtPiB1bml0ID0gXCIlb2JqX3NldF9maWVsZFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfZ2V0XCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfc2V0IDpcbiAgICBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfc2V0XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGRvdWJsZV9maWVsZCB4IGkgPSBmbG9hdGFycmF5X2dldCAob2JqIHggOiBmbG9hdGFycmF5KSBpXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBzZXRfZG91YmxlX2ZpZWxkIHggaSB2ID1cbiAgZmxvYXRhcnJheV9zZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaSB2XG5leHRlcm5hbCByYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSA9IFwiY2FtbF9vYmpfcmF3X2ZpZWxkXCJcbmV4dGVybmFsIHNldF9yYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9vYmpfc2V0X3Jhd19maWVsZFwiXG5cbmV4dGVybmFsIG5ld19ibG9jayA6IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9vYmpfYmxvY2tcIlxuZXh0ZXJuYWwgZHVwIDogdCAtPiB0ID0gXCJjYW1sX29ial9kdXBcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5leHRlcm5hbCBhZGRfb2Zmc2V0IDogdCAtPiBJbnQzMi50IC0+IHQgPSBcImNhbWxfb2JqX2FkZF9vZmZzZXRcIlxuZXh0ZXJuYWwgd2l0aF90YWcgOiBpbnQgLT4gdCAtPiB0ID0gXCJjYW1sX29ial93aXRoX3RhZ1wiXG5cbmxldCBmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMFxubGV0IGxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDI0NVxuXG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcbmxldCBmaW5hbF90YWcgPSBjdXN0b21fdGFnXG5cblxubGV0IGludF90YWcgPSAxMDAwXG5sZXQgb3V0X29mX2hlYXBfdGFnID0gMTAwMVxubGV0IHVuYWxpZ25lZF90YWcgPSAxMDAyXG5cbm1vZHVsZSBDbG9zdXJlID0gc3RydWN0XG4gIHR5cGUgaW5mbyA9IHtcbiAgICBhcml0eTogaW50O1xuICAgIHN0YXJ0X2VudjogaW50O1xuICB9XG5cbiAgbGV0IGluZm9fb2ZfcmF3IChpbmZvIDogbmF0aXZlaW50KSA9XG4gICAgbGV0IG9wZW4gTmF0aXZlaW50IGluXG4gICAgbGV0IGFyaXR5ID1cbiAgICAgICgqIHNpZ25lZDogbmVnYXRpdmUgZm9yIHR1cGxlZCBmdW5jdGlvbnMgKilcbiAgICAgIGlmIFN5cy53b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyA1NilcbiAgICAgIGVsc2VcbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDI0KVxuICAgIGluXG4gICAgbGV0IHN0YXJ0X2VudiA9XG4gICAgICAoKiBzdGFydF9lbnYgaXMgdW5zaWduZWQsIGJ1dCB3ZSBrbm93IGl0IGNhbiBhbHdheXMgZml0IGFuIE9DYW1sXG4gICAgICAgICBpbnRlZ2VyIHNvIHdlIHVzZSBbdG9faW50XSBpbnN0ZWFkIG9mIFt1bnNpZ25lZF90b19pbnRdLiAqKVxuICAgICAgdG9faW50IChzaGlmdF9yaWdodF9sb2dpY2FsIChzaGlmdF9sZWZ0IGluZm8gOCkgOSkgaW5cbiAgICB7IGFyaXR5OyBzdGFydF9lbnYgfVxuXG4gICgqIG5vdGU6IHdlIGV4cGVjdCBhIGNsb3N1cmUsIG5vdCBhbiBpbmZpeCBwb2ludGVyICopXG4gIGxldCBpbmZvIChvYmogOiB0KSA9XG4gICAgYXNzZXJ0ICh0YWcgb2JqID0gY2xvc3VyZV90YWcpO1xuICAgIGluZm9fb2ZfcmF3IChyYXdfZmllbGQgb2JqIDEpXG5lbmRcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbmxldCBleHRlbnNpb25fY29uc3RydWN0b3IgPSBFeHRlbnNpb25fY29uc3RydWN0b3Iub2ZfdmFsXG5sZXQgZXh0ZW5zaW9uX25hbWUgPSBFeHRlbnNpb25fY29uc3RydWN0b3IubmFtZVxubGV0IGV4dGVuc2lvbl9pZCA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5pZFxuXG5tb2R1bGUgRXBoZW1lcm9uID0gc3RydWN0XG4gIHR5cGUgb2JqX3QgPSB0XG5cbiAgdHlwZSB0ICgqKiBlcGhlbWVyb24gKilcblxuICAgKCoqIFRvIGNoYW5nZSBpbiBzeW5jIHdpdGggd2Vhay5oICopXG4gIGxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcbiAgbGV0IG1heF9lcGhlX2xlbmd0aCA9IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9lcGhlX2NyZWF0ZVwiOztcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudCwgZXhjZXB0IHdoZW4gYWZsXG4gICBpbnN0cnVtZW50YXRpb24gaXMgdHVybmVkIG9uLiAqKVxuXG5sZXQgZm9yY2UgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gICgqIFVzaW5nIFtTeXMub3BhcXVlX2lkZW50aXR5XSBwcmV2ZW50cyB0d28gcG90ZW50aWFsIHByb2JsZW1zOlxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBoYXZlIEZvcndhcmRfdGFnLCB0aGVuIGl0cyB0YWcgY291bGQgaGF2ZVxuICAgICAgIGNoYW5nZWQgZHVyaW5nIEdDLCBzbyB0aGF0IGluZm9ybWF0aW9uIG11c3QgYmUgZm9yZ290dGVuIChzZWUgR1BSIzcxM1xuICAgICAgIGFuZCBpc3N1ZSAjNzMwMSlcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgaW1tdXRhYmxlLCB0aGVuIGlmIHRoZSBjb21waWxlclxuICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBsYXN0IGJyYW5jaCBpcyBub3QgdGFrZW4gaXQgd2lsbCBpc3N1ZSBhXG4gICAgICAgd2FybmluZyA1OSAobW9kaWZpY2F0aW9uIG9mIGFuIGltbXV0YWJsZSB2YWx1ZSkgKilcbiAgbGV0IGx6diA9IFN5cy5vcGFxdWVfaWRlbnRpdHkgbHp2IGluXG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfbGF6eV9ibG9jayBsenZcblxuXG5sZXQgZm9yY2VfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAoJ2EsICdlKSB0ID0gKCdhLCAnZSkgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnZVxuXG5sZXQgb2sgdiA9IE9rIHZcbmxldCBlcnJvciBlID0gRXJyb3IgZVxubGV0IHZhbHVlIHIgfmRlZmF1bHQgPSBtYXRjaCByIHdpdGggT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5sZXQgZ2V0X29rID0gZnVuY3Rpb24gT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBFcnJvciBfXCJcbmxldCBnZXRfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGUgfCBPayBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIE9rIF9cIlxubGV0IGJpbmQgciBmID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBqb2luID0gZnVuY3Rpb24gT2sgciAtPiByIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXAgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gT2sgKGYgdikgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcF9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBFcnJvciAoZiBlKSB8IE9rIF8gYXMgdiAtPiB2XG5sZXQgZm9sZCB+b2sgfmVycm9yID0gZnVuY3Rpb24gT2sgdiAtPiBvayB2IHwgRXJyb3IgZSAtPiBlcnJvciBlXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gT2sgdiAtPiBmIHYgfCBFcnJvciBfIC0+ICgpXG5sZXQgaXRlcl9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBmIGUgfCBPayBfIC0+ICgpXG5sZXQgaXNfb2sgPSBmdW5jdGlvbiBPayBfIC0+IHRydWUgfCBFcnJvciBfIC0+IGZhbHNlXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBfIC0+IHRydWUgfCBPayBfIC0+IGZhbHNlXG5cbmxldCBlcXVhbCB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBfLCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IE9rIF8sIEVycm9yIF8gLT4gLTFcbnwgRXJyb3IgXywgT2sgXyAtPiAxXG5cbmxldCB0b19vcHRpb24gPSBmdW5jdGlvbiBPayB2IC0+IFNvbWUgdiB8IEVycm9yIF8gLT4gTm9uZVxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBPayB2IC0+IFt2XSB8IEVycm9yIF8gLT4gW11cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBPayB2IC0+IFNlcS5yZXR1cm4gdiB8IEVycm9yIF8gLT4gU2VxLmVtcHR5XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgVXRpbHMgYXJvdW5kIGNoYXJ9XG5cbiAgICBAc2luY2UgMC4xNCAqKVxuXG5pbmNsdWRlIENoYXJcblxubGV0IHBwX2J1ZiA9IEJ1ZmZlci5hZGRfY2hhclxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2NoYXJcbmxldCBvZl9pbnRfZXhuID0gQ2hhci5jaHJcbmxldCBvZl9pbnQgYyA9IHRyeSBTb21lIChvZl9pbnRfZXhuIGMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcbmxldCB0b19pbnQgPSBDaGFyLmNvZGVcbmxldCB0b19zdHJpbmcgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA9IClcbiAgbGV0ICggPD4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD4gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGNvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBjaHIgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcIkNoYXIuY2hyXCIgZWxzZSB1bnNhZmVfY2hyIG5cblxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCBlc2NhcGVkID0gZnVuY3Rpb25cbiAgfCAnXFwnJyAtPiBcIlxcXFwnXCJcbiAgfCAnXFxcXCcgLT4gXCJcXFxcXFxcXFwiXG4gIHwgJ1xcbicgLT4gXCJcXFxcblwiXG4gIHwgJ1xcdCcgLT4gXCJcXFxcdFwiXG4gIHwgJ1xccicgLT4gXCJcXFxcclwiXG4gIHwgJ1xcYicgLT4gXCJcXFxcYlwiXG4gIHwgJyAnIC4uICd+JyBhcyBjIC0+XG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAxIGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCBjO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG4gIHwgYyAtPlxuICAgICAgbGV0IG4gPSBjb2RlIGMgaW5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDQgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwICdcXFxcJztcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAxICh1bnNhZmVfY2hyICg0OCArIG4gLyAxMDApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAyICh1bnNhZmVfY2hyICg0OCArIChuIC8gMTApIG1vZCAxMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDMgKHVuc2FmZV9jaHIgKDQ4ICsgbiBtb2QgMTApKTtcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuXG5sZXQgbG93ZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onXG4gIHwgJ1xcMTkyJyAuLiAnXFwyMTQnXG4gIHwgJ1xcMjE2JyAuLiAnXFwyMjInIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onXG4gIHwgJ1xcMjI0JyAuLiAnXFwyNDYnXG4gIHwgJ1xcMjQ4JyAuLiAnXFwyNTQnIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgbG93ZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6JyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbnR5cGUgdCA9IGNoYXJcblxubGV0IGNvbXBhcmUgYzEgYzIgPSBjb2RlIGMxIC0gY29kZSBjMlxubGV0IGVxdWFsIChjMTogdCkgKGMyOiB0KSA9IGNvbXBhcmUgYzEgYzIgPSAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIHN0cmluZy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGJ5dGVzID0gXCIlYnl0ZXNfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9ibGl0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbmxldCBtYWtlIG4gYyA9XG4gIGxldCBzID0gY3JlYXRlIG4gaW5cbiAgdW5zYWZlX2ZpbGwgcyAwIG4gYztcbiAgc1xuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgcyBpIChmIGkpXG4gIGRvbmU7XG4gIHNcblxubGV0IGVtcHR5ID0gY3JlYXRlIDBcblxubGV0IGNvcHkgcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgdW5zYWZlX2JsaXQgcyAwIHIgMCBsZW47XG4gIHJcblxubGV0IHRvX3N0cmluZyBiID0gdW5zYWZlX3RvX3N0cmluZyAoY29weSBiKVxubGV0IG9mX3N0cmluZyBzID0gY29weSAodW5zYWZlX29mX3N0cmluZyBzKVxuXG5sZXQgc3ViIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLnN1YiAvIEJ5dGVzLnN1YlwiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgICB1bnNhZmVfYmxpdCBzIG9mcyByIDAgbGVuO1xuICAgIHJcbiAgZW5kXG5cbmxldCBzdWJfc3RyaW5nIGIgb2ZzIGxlbiA9IHVuc2FmZV90b19zdHJpbmcgKHN1YiBiIG9mcyBsZW4pXG5cbigqIGFkZGl0aW9uIHdpdGggYW4gb3ZlcmZsb3cgY2hlY2sgKilcbmxldCAoKyspIGEgYiA9XG4gIGxldCBjID0gYSArIGIgaW5cbiAgbWF0Y2ggYSA8IDAsIGIgPCAwLCBjIDwgMCB3aXRoXG4gIHwgdHJ1ZSAsIHRydWUgLCBmYWxzZVxuICB8IGZhbHNlLCBmYWxzZSwgdHJ1ZSAgLT4gaW52YWxpZF9hcmcgXCJCeXRlcy5leHRlbmRcIiAoKiBvdmVyZmxvdyAqKVxuICB8IF8gLT4gY1xuXG5sZXQgZXh0ZW5kIHMgbGVmdCByaWdodCA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyArKyBsZWZ0ICsrIHJpZ2h0IGluXG4gIGxldCByID0gY3JlYXRlIGxlbiBpblxuICBsZXQgKHNyY29mZiwgZHN0b2ZmKSA9IGlmIGxlZnQgPCAwIHRoZW4gLWxlZnQsIDAgZWxzZSAwLCBsZWZ0IGluXG4gIGxldCBjcHlsZW4gPSBJbnQubWluIChsZW5ndGggcyAtIHNyY29mZikgKGxlbiAtIGRzdG9mZikgaW5cbiAgaWYgY3B5bGVuID4gMCB0aGVuIHVuc2FmZV9ibGl0IHMgc3Jjb2ZmIHIgZHN0b2ZmIGNweWxlbjtcbiAgclxuXG5sZXQgZmlsbCBzIG9mcyBsZW4gYyA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmZpbGwgLyBCeXRlcy5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBzIG9mcyBsZW4gY1xuXG5sZXQgYmxpdCBzMSBvZnMxIHMyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnl0ZXMuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG5sZXQgYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IHN0cmluZ19sZW5ndGggczEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIHMyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuYmxpdCAvIEJ5dGVzLmJsaXRfc3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiQnl0ZXMuY29uY2F0XCJcblxubGV0IHJlYyBzdW1fbGVuZ3RocyBhY2Mgc2VwbGVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBoZCA6OiBbXSAtPiBsZW5ndGggaGQgKyBhY2NcbiAgfCBoZCA6OiB0bCAtPiBzdW1fbGVuZ3RocyAoZW5zdXJlX2dlIChsZW5ndGggaGQgKyBzZXBsZW4gKyBhY2MpIGFjYykgc2VwbGVuIHRsXG5cbmxldCByZWMgdW5zYWZlX2JsaXRzIGRzdCBwb3Mgc2VwIHNlcGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZHN0XG4gIHwgaGQgOjogW10gLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7IGRzdFxuICB8IGhkIDo6IHRsIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpO1xuICAgIHVuc2FmZV9ibGl0IHNlcCAwIGRzdCAocG9zICsgbGVuZ3RoIGhkKSBzZXBsZW47XG4gICAgdW5zYWZlX2JsaXRzIGRzdCAocG9zICsgbGVuZ3RoIGhkICsgc2VwbGVuKSBzZXAgc2VwbGVuIHRsXG5cbmxldCBjb25jYXQgc2VwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBlbXB0eVxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW5cbiAgICAgICAgICB1bnNhZmVfYmxpdHNcbiAgICAgICAgICAgIChjcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCBzMSBzMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBzMSBpblxuICBsZXQgbDIgPSBsZW5ndGggczIgaW5cbiAgbGV0IHIgPSBjcmVhdGUgKGwxICsgbDIpIGluXG4gIHVuc2FmZV9ibGl0IHMxIDAgciAwIGwxO1xuICB1bnNhZmVfYmxpdCBzMiAwIHIgbDEgbDI7XG4gIHJcblxuXG5leHRlcm5hbCBjaGFyX2NvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgY2hhcl9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgaXNfc3BhY2UgPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHRyaW0gcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpIDwgbGVuICYmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGxldCBqID0gcmVmIChsZW4gLSAxKSBpblxuICB3aGlsZSAhaiA+PSAhaSAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFqKSBkb1xuICAgIGRlY3IgalxuICBkb25lO1xuICBpZiAhaiA+PSAhaSB0aGVuXG4gICAgc3ViIHMgIWkgKCFqIC0gIWkgKyAxKVxuICBlbHNlXG4gICAgZW1wdHlcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgIG4gOj0gIW4gK1xuICAgICAgKG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXG4nIHwgJ1xcdCcgfCAnXFxyJyB8ICdcXGInIC0+IDJcbiAgICAgICB8ICcgJyAuLiAnficgLT4gMVxuICAgICAgIHwgXyAtPiA0KVxuICBkb25lO1xuICBpZiAhbiA9IGxlbmd0aCBzIHRoZW4gY29weSBzIGVsc2UgYmVnaW5cbiAgICBsZXQgcycgPSBjcmVhdGUgIW4gaW5cbiAgICBuIDo9IDA7XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgICAgYmVnaW4gbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAoJ1xcXCInIHwgJ1xcXFwnKSBhcyBjIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnbidcbiAgICAgIHwgJ1xcdCcgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICd0J1xuICAgICAgfCAnXFxyJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3InXG4gICAgICB8ICdcXGInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnYidcbiAgICAgIHwgKCcgJyAuLiAnficpIGFzIGMgLT4gdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8IGMgLT5cbiAgICAgICAgICBsZXQgYSA9IGNoYXJfY29kZSBjIGluXG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgLyAxMDApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgKGEgLyAxMCkgbW9kIDEwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgbW9kIDEwKSk7XG4gICAgICBlbmQ7XG4gICAgICBpbmNyIG5cbiAgICBkb25lO1xuICAgIHMnXG4gIGVuZFxuXG5sZXQgbWFwIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IHMgaSkpIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IG1hcGkgZiBzID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBsID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG8gdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDAgZG9cbiAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICBkb25lO1xuICAhclxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBzIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG5sZXQgYXBwbHkxIGYgcyA9XG4gIGlmIGxlbmd0aCBzID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY29weSBzIGluXG4gICAgdW5zYWZlX3NldCByIDAgKGYodW5zYWZlX2dldCBzIDApKTtcbiAgICByXG4gIGVuZFxuXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlX2FzY2lpIHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZV9hc2NpaSBzXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbnR5cGUgdCA9IGJ5dGVzXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfYnl0ZXNfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHNwbGl0X29uX2NoYXIgc2VwIHMgPVxuICBsZXQgciA9IHJlZiBbXSBpblxuICBsZXQgaiA9IHJlZiAobGVuZ3RoIHMpIGluXG4gIGZvciBpID0gbGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgaWYgdW5zYWZlX2dldCBzIGkgPSBzZXAgdGhlbiBiZWdpblxuICAgICAgciA6PSBzdWIgcyAoaSArIDEpICghaiAtIGkgLSAxKSA6OiAhcjtcbiAgICAgIGogOj0gaVxuICAgIGVuZFxuICBkb25lO1xuICBzdWIgcyAwICFqIDo6ICFyXG5cbigqIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGltcGxlbWVudGVkIHZpYSBvdGhlciBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqKVxuW0BAQG9jYW1sLndhcm5pbmcgXCItM1wiXVxubGV0IHVwcGVyY2FzZSBzID0gbWFwIENoYXIudXBwZXJjYXNlIHNcbmxldCBsb3dlcmNhc2UgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZSBzXG5cbmxldCBjYXBpdGFsaXplIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2Ugc1xubGV0IHVuY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlIHNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGxldCBidWYgPSByZWYgKG1ha2UgMjU2ICdcXDAwMCcpIGluXG4gIGxldCByZXNpemUgKCkgPVxuICAgICgqIHJlc2l6ZSAqKVxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1pbiAoMiAqIGxlbmd0aCAhYnVmKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICBpZiBsZW5ndGggIWJ1ZiA9IG5ld19sZW4gdGhlbiBmYWlsd2l0aCBcIkJ5dGVzLm9mX3NlcTogY2Fubm90IGdyb3cgYnl0ZXNcIjtcbiAgICBsZXQgbmV3X2J1ZiA9IG1ha2UgbmV3X2xlbiAnXFwwMDAnIGluXG4gICAgYmxpdCAhYnVmIDAgbmV3X2J1ZiAwICFuO1xuICAgIGJ1ZiA6PSBuZXdfYnVmXG4gIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBjIC0+XG4gICAgICAgaWYgIW4gPSBsZW5ndGggIWJ1ZiB0aGVuIHJlc2l6ZSgpO1xuICAgICAgIHNldCAhYnVmICFuIGM7XG4gICAgICAgaW5jciBuKVxuICAgIGk7XG4gIHN1YiAhYnVmIDAgIW5cblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuKCogVGhlIGdldF8gZnVuY3Rpb25zIGFyZSBhbGwgZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcblxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZ1XCJcbmV4dGVybmFsIGdldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9ieXRlc19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX2J5dGVzX2dldDY0XCJcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBzZXRfaW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2XCJcbmV4dGVybmFsIHNldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMlwiXG5leHRlcm5hbCBzZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjRcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuICBlbHNlIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuXG5sZXQgZ2V0X2ludDggYiBpID1cbiAgKChnZXRfdWludDggYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDgpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDgpXG5cbmxldCBnZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfaW50MTZfbmUgYiBpID1cbiAgKChnZXRfdWludDE2X25lIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfbGUgYiBpID1cbiAgKChnZXRfdWludDE2X2xlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfYmUgYiBpID1cbiAgKChnZXRfdWludDE2X2JlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MzJfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDMyX2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeFxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfYmUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4IGVsc2VcbiAgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcblxubGV0IHNldF9pbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MTZfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF91aW50OCA9IHNldF9pbnQ4XG5sZXQgc2V0X3VpbnQxNl9uZSA9IHNldF9pbnQxNl9uZVxubGV0IHNldF91aW50MTZfYmUgPSBzZXRfaW50MTZfYmVcbmxldCBzZXRfdWludDE2X2xlID0gc2V0X2ludDE2X2xlXG5cbigqIFVURiBjb2RlY3MgYW5kIHZhbGlkYXRpb25zICopXG5cbmxldCBkZWNfaW52YWxpZCA9IFVjaGFyLnV0Zl9kZWNvZGVfaW52YWxpZFxubGV0W0BpbmxpbmVdIGRlY19yZXQgbiB1ID0gVWNoYXIudXRmX2RlY29kZSBuIChVY2hhci51bnNhZmVfb2ZfaW50IHUpXG5cbigqIEluIGNhc2Ugb2YgZGVjb2RpbmcgZXJyb3IsIGlmIHdlIGVycm9yIG9uIHRoZSBmaXJzdCBieXRlLCB3ZVxuICAgY29uc3VtZSB0aGUgYnl0ZSwgb3RoZXJ3aXNlIHdlIGNvbnN1bWUgdGhlIFtuXSBieXRlcyBwcmVjZWVkaW5nXG4gICB0aGUgZXJyb3JpbmcgYnl0ZS5cblxuICAgVGhpcyBtZWFucyB0aGF0IGlmIGEgY2xpZW50IHVzZXMgZGVjb2RlcyB3aXRob3V0IGNhcmluZyBhYm91dFxuICAgdmFsaWRpdHkgaXQgbmF0dXJhbGx5IHJlcGxhY2UgYm9ndXMgZGF0YSB3aXRoIFVjaGFyLnJlcCBhY2NvcmRpbmdcbiAgIHRvIHRoZSBXSEFUV0cgRW5jb2Rpbmcgc3RhbmRhcmQuIE90aGVyIHNjaGVtZXMgYXJlIHBvc3NpYmxlIGJ5XG4gICBjb25zdWx0aW5nIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBvbiBpbnZhbGlkIGRlY29kZXMuIEZvciBtb3JlXG4gICBkZXRhaWxzIHNlZSBodHRwczovL2hzaXZvbmVuLmZpL2Jyb2tlbi11dGYtOC9cblxuICAgRm9yIHRoaXMgcmVhc29uIGluIFtnZXRfdXRmXzhfdWNoYXJdIHdlIGdyYWR1YWxseSBjaGVjayB0aGUgbmV4dFxuICAgYnl0ZSBpcyBhdmFpbGFibGUgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICBmaXJzdCBieXRlLiBDb250cmFzdCB3aXRoIFtpc192YWxpZF91dGZfOF0uICopXG5cbigqIFVURi04ICopXG5cbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3hCRiBiID0gYiBsc3IgNiA8PiAwYjEwXG5sZXRbQGlubGluZV0gbm90X2luX3hBMF90b194QkYgYiA9IGIgbHNyIDUgPD4gMGIxMDFcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g5RiBiID0gYiBsc3IgNSA8PiAwYjEwMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94OTBfdG9feEJGIGIgPSBiIDwgMHg5MCB8fCAweEJGIDwgYlxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feDhGIGIgPSBiIGxzciA0IDw+IDB4OFxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfMiBiMCBiMSA9XG4gICgoYjAgbGFuZCAweDFGKSBsc2wgNikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIgPVxuICAoKGIwIGxhbmQgMHgwRikgbHNsIDEyKSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpKVxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMyA9XG4gICgoYjAgbGFuZCAweDA3KSBsc2wgMTgpIGxvclxuICAoKGIxIGxhbmQgMHgzRikgbHNsIDEyKSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMyBsYW5kIDB4M0YpKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIGIgaSA9XG4gIGxldCBiMCA9IGdldF91aW50OCBiIGkgaW4gKCogcmFpc2VzIGlmIFtpXSBpcyBub3QgYSB2YWxpZCBpbmRleC4gKilcbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgYjAgd2l0aCAoKiBTZWUgVGhlIFVuaWNvZGUgU3RhbmRhcmQsIFRhYmxlIDMuNyAqKVxuICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBkZWNfcmV0IDEgYjBcbiAgfCAnXFx4QzInIC4uICdcXHhERicgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgZGVjX3JldCAyICh1dGZfOF91Y2hhcl8yIGIwIGIxKVxuICB8ICdcXHhFMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feEEwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFRCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g5RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEYwJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94OTBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGMScgLi4gJ1xceEYzJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGNCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g4RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCBfIC0+IGRlY19pbnZhbGlkIDFcblxubGV0IHNldF91dGZfOF91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweDAwN0YgLT5cbiAgICAgIHNldF91aW50OCBiIGkgdTtcbiAgICAgIDFcbiAgfCB1IHdoZW4gdSA8PSAweDA3RkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEMwIGxvciAodSBsc3IgNikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDIpXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhFMCBsb3IgKHUgbHNyIDEyKSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAzKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhGMCBsb3IgKHUgbHNyIDE4KSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciAxMikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgKGkgKyAyKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICA0KVxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfOCBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50OCBpblxuICAgIG1hdGNoIENoYXIudW5zYWZlX2NociAoZ2V0IGIgaSkgd2l0aFxuICAgIHwgJ1xceDAwJyAuLiAnXFx4N0YnIC0+IGxvb3AgbWF4IGIgKGkgKyAxKVxuICAgIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3hBMF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RTEnIC4uICdcXHhFQycgfCAnXFx4RUUnIC4uICdcXHhFRicgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEVEJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194OUYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjAnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDkwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGNCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDhGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8IF8gLT4gZmFsc2VcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2QkUgKilcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZiZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9iZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2TEUgKilcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZsZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9sZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IEdhbGxpdW0sIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU3RyaW5nIG9wZXJhdGlvbnMsIGJhc2VkIG9uIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMuIFdoZW4geW91IG1vZGlmeSB0aGUgb25lIGluIHRoaXMgZmlsZSB5b3UgbmVlZCB0b1xuICAgbW9kaWZ5IGl0cyBkdXBsaWNhdGUgaW4gYnl0ZXMubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGdldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlc3RyaW5nX3NhZmVfc2V0XCJcbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfc3RyaW5nXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogc3RyaW5nIC0+IGludCAtPiAgYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbm1vZHVsZSBCID0gQnl0ZXNcblxubGV0IGJ0cyA9IEIudW5zYWZlX3RvX3N0cmluZ1xubGV0IGJvcyA9IEIudW5zYWZlX29mX3N0cmluZ1xuXG5sZXQgbWFrZSBuIGMgPVxuICBCLm1ha2UgbiBjIHw+IGJ0c1xubGV0IGluaXQgbiBmID1cbiAgQi5pbml0IG4gZiB8PiBidHNcbmxldCBlbXB0eSA9IFwiXCJcbmxldCBjb3B5IHMgPVxuICBCLmNvcHkgKGJvcyBzKSB8PiBidHNcbmxldCBvZl9ieXRlcyA9IEIudG9fc3RyaW5nXG5sZXQgdG9fYnl0ZXMgPSBCLm9mX3N0cmluZ1xubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBCLnN1YiAoYm9zIHMpIG9mcyBsZW4gfD4gYnRzXG5sZXQgZmlsbCA9XG4gIEIuZmlsbFxubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCByZWMgZXNjYXBlX2lmX25lZWRlZCBzIG4gaSA9XG4gICAgaWYgaSA+PSBuIHRoZW4gcyBlbHNlXG4gICAgICBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXDAwMCcuLidcXDAzMScgfCAnXFwxMjcnLi4gJ1xcMjU1JyAtPlxuICAgICAgICAgIGJ0cyAoQi5lc2NhcGVkIChib3MgcykpXG4gICAgICB8IF8gLT4gZXNjYXBlX2lmX25lZWRlZCBzIG4gKGkrMSlcbiAgaW5cbiAgZXNjYXBlX2lmX25lZWRlZCBzIChsZW5ndGggcykgMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleCBzIGMgPSBpbmRleF9yZWMgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbSAvIEJ5dGVzLmluZGV4X2Zyb21cIiBlbHNlXG4gICAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjIHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgcmluZGV4X3JlYyBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIHJpbmRleF9yZWNfb3B0IHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yY29udGFpbnNfZnJvbSAvIEJ5dGVzLnJjb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKHJpbmRleF9yZWMgcyBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9XG4gIEIudXBwZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPVxuICBCLmxvd2VyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi51bmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9XG4gIEIudXBwZXJjYXNlIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlIHMgPVxuICBCLmxvd2VyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemUgcyA9XG4gIEIuY2FwaXRhbGl6ZSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZSBzID1cbiAgQi51bmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogc3RyaW5nIC0+IHN0cmluZyAtPiBib29sID0gXCJjYW1sX3N0cmluZ19lcXVhbFwiIFtAQG5vYWxsb2NdXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9IGJvcyBzIHw+IEIudG9fc2VxXG5cbmxldCB0b19zZXFpIHMgPSBib3MgcyB8PiBCLnRvX3NlcWlcblxubGV0IG9mX3NlcSBnID0gQi5vZl9zZXEgZyB8PiBidHNcblxuKCogVVRGIGRlY29kZXJzIGFuZCB2YWxpZGF0b3JzICopXG5cbmxldCBnZXRfdXRmXzhfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzhfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzggcyA9IEIuaXNfdmFsaWRfdXRmXzggKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmJlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmJlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmJlIChib3MgcylcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZsZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZsZSBzID0gQi5pc192YWxpZF91dGZfMTZsZSAoYm9zIHMpXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIGdldF91aW50OCA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfc3RyaW5nX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX3N0cmluZ19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9zdHJpbmdfZ2V0NjRcIlxuXG5sZXQgZ2V0X2ludDggcyBpID0gQi5nZXRfaW50OCAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2xlIHMgaSA9IEIuZ2V0X3VpbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2JlIHMgaSA9IEIuZ2V0X3VpbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbmUgcyBpID0gQi5nZXRfaW50MTZfbmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2xlIHMgaSA9IEIuZ2V0X2ludDE2X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9iZSBzIGkgPSBCLmdldF9pbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfbGUgcyBpID0gQi5nZXRfaW50MzJfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2JlIHMgaSA9IEIuZ2V0X2ludDMyX2JlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9sZSBzIGkgPSBCLmdldF9pbnQ2NF9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfYmUgcyBpID0gQi5nZXRfaW50NjRfYmUgKGJvcyBzKSBpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBhcnJheXMuICopXG50eXBlICdhIHQgPSAnYSBhcnJheVxuXG4oKiBBcnJheSBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGxlbmd0aCA6ICdhIGFycmF5IC0+IGludCA9IFwiJWFycmF5X2xlbmd0aFwiXG5leHRlcm5hbCBnZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV9zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV91bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfdW5zYWZlX3NldFwiXG5leHRlcm5hbCBtYWtlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIGNyZWF0ZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCB1bnNhZmVfc3ViIDogJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9zdWJcIlxuZXh0ZXJuYWwgYXBwZW5kX3ByaW0gOiAnYSBhcnJheSAtPiAnYSBhcnJheSAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9hcHBlbmRcIlxuZXh0ZXJuYWwgY29uY2F0IDogJ2EgYXJyYXkgbGlzdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9jb25jYXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2JsaXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfZmlsbFwiXG5leHRlcm5hbCBjcmVhdGVfZmxvYXQ6IGludCAtPiBmbG9hdCBhcnJheSA9IFwiY2FtbF9tYWtlX2Zsb2F0X3ZlY3RcIlxubGV0IG1ha2VfZmxvYXQgPSBjcmVhdGVfZmxvYXRcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGZvciB4ID0gMCB0byBwcmVkIHN4IGRvXG4gICAgdW5zYWZlX3NldCByZXMgeCAoY3JlYXRlIHN5IGluaXQpXG4gIGRvbmU7XG4gIHJlc1xuXG5sZXQgY3JlYXRlX21hdHJpeCA9IG1ha2VfbWF0cml4XG5cbmxldCBjb3B5IGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIHVuc2FmZV9zdWIgYSAwIGxcblxubGV0IGFwcGVuZCBhMSBhMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBhMSBpblxuICBpZiBsMSA9IDAgdGhlbiBjb3B5IGEyXG4gIGVsc2UgaWYgbGVuZ3RoIGEyID0gMCB0aGVuIHVuc2FmZV9zdWIgYTEgMCBsMVxuICBlbHNlIGFwcGVuZF9wcmltIGExIGEyXG5cbmxldCBzdWIgYSBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5zdWJcIlxuICBlbHNlIHVuc2FmZV9zdWIgYSBvZnMgbGVuXG5cbmxldCBmaWxsIGEgb2ZzIGxlbiB2ID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBhIG9mcyBsZW4gdlxuXG5sZXQgYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIGExIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBhMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlblxuXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGl0ZXIyIGYgYSBiID1cbiAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkgZG9uZVxuXG5sZXQgbWFwIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcCBmIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIE5vbmVcbiAgICBlbHNlXG4gICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU2V0cyBvdmVyIG9yZGVyZWQgdHlwZXMgKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUgZWx0XG4gICAgdHlwZSB0XG4gICAgdmFsIGVtcHR5OiB0XG4gICAgdmFsIGlzX2VtcHR5OiB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBlbHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGFkZDogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCBzaW5nbGV0b246IGVsdCAtPiB0XG4gICAgdmFsIHJlbW92ZTogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCB1bmlvbjogdCAtPiB0IC0+IHRcbiAgICB2YWwgaW50ZXI6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGRpc2pvaW50OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBkaWZmOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBzdWJzZXQ6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChlbHQgLT4gdW5pdCkgLT4gdCAtPiB1bml0XG4gICAgdmFsIG1hcDogKGVsdCAtPiBlbHQpIC0+IHQgLT4gdFxuICAgIHZhbCBmb2xkOiAoZWx0IC0+ICdhIC0+ICdhKSAtPiB0IC0+ICdhIC0+ICdhXG4gICAgdmFsIGZvcl9hbGw6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGV4aXN0czogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZmlsdGVyOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoZWx0IC0+IGVsdCBvcHRpb24pIC0+IHQgLT4gdFxuICAgIHZhbCBwYXJ0aXRpb246IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0ICogdFxuICAgIHZhbCBjYXJkaW5hbDogdCAtPiBpbnRcbiAgICB2YWwgZWxlbWVudHM6IHQgLT4gZWx0IGxpc3RcbiAgICB2YWwgbWluX2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWluX2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBtYXhfZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtYXhfZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGNob29zZTogdCAtPiBlbHRcbiAgICB2YWwgY2hvb3NlX29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIHNwbGl0OiBlbHQgLT4gdCAtPiB0ICogYm9vbCAqIHRcbiAgICB2YWwgZmluZDogZWx0IC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfb3B0OiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfZmlyc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfbGFzdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBvZl9saXN0OiBlbHQgbGlzdCAtPiB0XG4gICAgdmFsIHRvX3NlcV9mcm9tIDogZWx0IC0+IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3NlcSA6IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogZWx0IFNlcS50IC0+IHQgLT4gdFxuICAgIHZhbCBvZl9zZXEgOiBlbHQgU2VxLnQgLT4gdFxuICBlbmRcblxubW9kdWxlIE1ha2UoT3JkOiBPcmRlcmVkVHlwZSkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGVsdCA9IE9yZC50XG4gICAgdHlwZSB0ID0gRW1wdHkgfCBOb2RlIG9mIHtsOnQ7IHY6ZWx0OyByOnQ7IGg6aW50fVxuXG4gICAgKCogU2V0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYmFsYW5jZWQgYmluYXJ5IHRyZWVzICh0aGUgaGVpZ2h0cyBvZiB0aGVcbiAgICAgICBjaGlsZHJlbiBkaWZmZXIgYnkgYXQgbW9zdCAyICopXG5cbiAgICBsZXQgaGVpZ2h0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtofSAtPiBoXG5cbiAgICAoKiBDcmVhdGVzIGEgbmV3IG5vZGUgd2l0aCBsZWZ0IHNvbiBsLCB2YWx1ZSB2IGFuZCByaWdodCBzb24gci5cbiAgICAgICBXZSBtdXN0IGhhdmUgYWxsIGVsZW1lbnRzIG9mIGwgPCB2IDwgYWxsIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgbCBhbmQgciBtdXN0IGJlIGJhbGFuY2VkIGFuZCB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLlxuICAgICAgIElubGluZSBleHBhbnNpb24gb2YgaGVpZ2h0IGZvciBiZXR0ZXIgc3BlZWQuICopXG5cbiAgICBsZXQgY3JlYXRlIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBOb2Rle2w7IHY7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgICgqIFNhbWUgYXMgY3JlYXRlLCBidXQgcGVyZm9ybXMgb25lIHN0ZXAgb2YgcmViYWxhbmNpbmcgaWYgbmVjZXNzYXJ5LlxuICAgICAgIEFzc3VtZXMgbCBhbmQgciBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMy5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGNyZWF0ZSBmb3IgYmV0dGVyIHNwZWVkIGluIHRoZSBtb3N0IGZyZXF1ZW50IGNhc2VcbiAgICAgICB3aGVyZSBubyByZWJhbGFuY2luZyBpcyByZXF1aXJlZC4gKilcblxuICAgIGxldCBiYWwgbCB2IHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGlmIGhsID4gaHIgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9bGw7IHY9bHY7IHI9bHJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgbGwgPj0gaGVpZ2h0IGxyIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIGxsIGx2IChjcmVhdGUgbHIgdiByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgcj1scnJ9LT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGxsIGx2IGxybCkgbHJ2IChjcmVhdGUgbHJyIHYgcilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgaWYgaHIgPiBobCArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCByIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1ybDsgdj1ydjsgcj1ycn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCByciA+PSBoZWlnaHQgcmwgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmwpIHJ2IHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyByPXJscn0gLT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgdiBybGwpIHJsdiAoY3JlYXRlIHJsciBydiBycilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2VcbiAgICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBJbnNlcnRpb24gb2Ygb25lIGVsZW1lbnQgKilcblxuICAgIGxldCByZWMgYWRkIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdCBlbHNlXG4gICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gYWRkIHggbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHQgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHQgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgc2luZ2xldG9uIHggPSBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCB2IGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGVsZW1lbnRzIGluIHRoZSB0cmVlOyBpdFxuICAgICAgIGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhlIGN1cnJlbnQgbWluIChvciBtYXgpIGVsZW1lbnQuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9lbGVtZW50IHggbCkgdiByXG5cbiAgICBsZXQgcmVjIGFkZF9tYXhfZWxlbWVudCB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiAoYWRkX21heF9lbGVtZW50IHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2VsZW1lbnQgdiByXG4gICAgICB8IChfLCBFbXB0eSkgLT4gYWRkX21heF9lbGVtZW50IHYgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyByPWxyOyBoPWxofSwgTm9kZXtsPXJsOyB2PXJ2OyByPXJyOyBoPXJofSkgLT5cbiAgICAgICAgICBpZiBsaCA+IHJoICsgMiB0aGVuIGJhbCBsbCBsdiAoam9pbiBsciB2IHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgcmwpIHJ2IHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IHJcblxuICAgICgqIFNtYWxsZXN0IGFuZCBncmVhdGVzdCBlbGVtZW50IG9mIGEgc2V0ICopXG5cbiAgICBsZXQgcmVjIG1pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiB2XG4gICAgICB8IE5vZGV7bH0gLT4gbWluX2VsdCBsXG5cbiAgICBsZXQgcmVjIG1pbl9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHZ9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHRfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IHZcbiAgICAgIHwgTm9kZXtyfSAtPiBtYXhfZWx0IHJcblxuICAgIGxldCByZWMgbWF4X2VsdF9vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7djsgcj1FbXB0eX0gLT4gU29tZSB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdF9vcHQgclxuXG4gICAgKCogUmVtb3ZlIHRoZSBzbWFsbGVzdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBzZXQgKilcblxuICAgIGxldCByZWMgcmVtb3ZlX21pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGJhbCAocmVtb3ZlX21pbl9lbHQgbCkgdiByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgQXNzdW1lIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDIuICopXG5cbiAgICBsZXQgbWVyZ2UgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiBiYWwgdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBObyBhc3N1bXB0aW9uIG9uIHRoZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gam9pbiB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgKCogU3BsaXR0aW5nLiAgc3BsaXQgeCBzIHJldHVybnMgYSB0cmlwbGUgKGwsIHByZXNlbnQsIHIpIHdoZXJlXG4gICAgICAgIC0gbCBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPCB4XG4gICAgICAgIC0gciBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPiB4XG4gICAgICAgIC0gcHJlc2VudCBpcyBmYWxzZSBpZiBzIGNvbnRhaW5zIG5vIGVsZW1lbnQgZXF1YWwgdG8geCxcbiAgICAgICAgICBvciB0cnVlIGlmIHMgY29udGFpbnMgYW4gZWxlbWVudCBlcXVhbCB0byB4LiAqKVxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIGZhbHNlLCBFbXB0eSlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgdHJ1ZSwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiByKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobHIsIHByZXMsIHJyKSA9IHNwbGl0IHggciBpbiAoam9pbiBsIHYgbHIsIHByZXMsIHJyKVxuXG4gICAgKCogSW1wbGVtZW50YXRpb24gb2YgdGhlIHNldCBvcGVyYXRpb25zICopXG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBjID0gMCB8fCBtZW0geCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgcmVtb3ZlIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSBhcyB0KSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBtZXJnZSBsIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICAgIGxldCBsbCA9IHJlbW92ZSB4IGwgaW5cbiAgICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW5cbiAgICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgcmVjIHVuaW9uIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0MikgLT4gdDJcbiAgICAgIHwgKHQxLCBFbXB0eSkgLT4gdDFcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMTsgaD1oMX0sIE5vZGV7bD1sMjsgdj12Mjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgaWYgaDIgPSAxIHRoZW4gYWRkIHYyIHMxIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbGV0IChsMiwgXywgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICAgICAgam9pbiAodW5pb24gbDEgbDIpIHYxICh1bmlvbiByMSByMilcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGgxID0gMSB0aGVuIGFkZCB2MSBzMiBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDEsIF8sIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MiAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcblxuICAgIGxldCByZWMgaW50ZXIgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8IChfLCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGhcbiAgICAgICAgICAgIChsMiwgZmFsc2UsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGludGVyIGwxIGwyKSAoaW50ZXIgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBqb2luIChpbnRlciBsMSBsMikgdjEgKGludGVyIHIxIHIyKVxuXG4gICAgKCogU2FtZSBhcyBzcGxpdCwgYnV0IGNvbXB1dGUgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzXG4gICAgICAgb25seSBpZiB0aGUgcGl2b3QgZWxlbWVudCBpcyBub3QgaW4gdGhlIHNldC4gIFRoZSByaWdodCBzdWJ0cmVlXG4gICAgICAgaXMgY29tcHV0ZWQgb24gZGVtYW5kLiAqKVxuXG4gICAgdHlwZSBzcGxpdF9iaXMgPVxuICAgICAgfCBGb3VuZFxuICAgICAgfCBOb3RGb3VuZCBvZiB0ICogKHVuaXQgLT4gdClcblxuICAgIGxldCByZWMgc3BsaXRfYmlzIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vdEZvdW5kIChFbXB0eSwgKGZ1biAoKSAtPiBFbXB0eSkpXG4gICAgICB8IE5vZGV7bDsgdjsgcjsgX30gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gRm91bmRcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IGwgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobGwsIHJsKSAtPiBOb3RGb3VuZCAobGwsIChmdW4gKCkgLT4gam9pbiAocmwgKCkpIHYgcikpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWF0Y2ggc3BsaXRfYmlzIHggciB3aXRoXG4gICAgICAgICAgICB8IEZvdW5kIC0+IEZvdW5kXG4gICAgICAgICAgICB8IE5vdEZvdW5kIChsciwgcnIpIC0+IE5vdEZvdW5kIChqb2luIGwgdiBsciwgcnIpXG5cbiAgICBsZXQgcmVjIGRpc2pvaW50IHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSB8IChfLCBFbXB0eSkgLT4gdHJ1ZVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgaWYgczEgPT0gczIgdGhlbiBmYWxzZVxuICAgICAgICAgIGVsc2UgbWF0Y2ggc3BsaXRfYmlzIHYxIHQyIHdpdGhcbiAgICAgICAgICAgICAgTm90Rm91bmQobDIsIHIyKSAtPiBkaXNqb2ludCBsMSBsMiAmJiBkaXNqb2ludCByMSAocjIgKCkpXG4gICAgICAgICAgICB8IEZvdW5kIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGRpZmYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoZGlmZiBsMSBsMikgdjEgKGRpZmYgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGRpZmYgbDEgbDIpIChkaWZmIHIxIHIyKVxuXG4gICAgdHlwZSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2YgZWx0ICogdCAqIGVudW1lcmF0aW9uXG5cbiAgICBsZXQgcmVjIGNvbnNfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCByLCBlKSlcblxuICAgIGxldCByZWMgY29tcGFyZV9hdXggZTEgZTIgPVxuICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgIChFbmQsIEVuZCkgLT4gMFxuICAgICAgfCAoRW5kLCBfKSAgLT4gLTFcbiAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgfCAoTW9yZSh2MSwgcjEsIGUxKSwgTW9yZSh2MiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgaWYgYyA8PiAwXG4gICAgICAgICAgdGhlbiBjXG4gICAgICAgICAgZWxzZSBjb21wYXJlX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuXG4gICAgbGV0IGNvbXBhcmUgczEgczIgPVxuICAgICAgY29tcGFyZV9hdXggKGNvbnNfZW51bSBzMSBFbmQpIChjb25zX2VudW0gczIgRW5kKVxuXG4gICAgbGV0IGVxdWFsIHMxIHMyID1cbiAgICAgIGNvbXBhcmUgczEgczIgPSAwXG5cbiAgICBsZXQgcmVjIHN1YnNldCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIEVtcHR5LCBfIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBfLCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IE5vZGUge2w9bDE7IHY9djE7IHI9cjF9LCAoTm9kZSB7bD1sMjsgdj12Mjsgcj1yMn0gYXMgdDIpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCBsMSBsMiAmJiBzdWJzZXQgcjEgcjJcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1sMTsgdj12MTsgcj1FbXB0eTsgaD0wfSkgbDIgJiYgc3Vic2V0IHIxIHQyXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3Vic2V0IChOb2RlIHtsPUVtcHR5OyB2PXYxOyByPXIxOyBoPTB9KSByMiAmJiBzdWJzZXQgbDEgdDJcblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBpdGVyIGYgbDsgZiB2OyBpdGVyIGYgclxuXG4gICAgbGV0IHJlYyBmb2xkIGYgcyBhY2N1ID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gZm9sZCBmIHIgKGYgdiAoZm9sZCBmIGwgYWNjdSkpXG5cbiAgICBsZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHRydWVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgJiYgZm9yX2FsbCBwIGwgJiYgZm9yX2FsbCBwIHJcblxuICAgIGxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHAgdiB8fCBleGlzdHMgcCBsIHx8IGV4aXN0cyBwIHJcblxuICAgIGxldCByZWMgZmlsdGVyIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSkgYXMgdCAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdiA9IHAgdiBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdiB0aGVuXG4gICAgICAgICAgICBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIHQgZWxzZSBqb2luIGwnIHYgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBwYXJ0aXRpb24gcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IChFbXB0eSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZcbiAgICAgICAgICB0aGVuIChqb2luIGx0IHYgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiByZilcblxuICAgIGxldCByZWMgY2FyZGluYWwgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGV7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGVsZW1lbnRzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGVsZW1lbnRzX2F1eCAodiA6OiBlbGVtZW50c19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgZWxlbWVudHMgcyA9XG4gICAgICBlbGVtZW50c19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9lbHRcblxuICAgIGxldCBjaG9vc2Vfb3B0ID0gbWluX2VsdF9vcHRcblxuICAgIGxldCByZWMgZmluZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdlxuICAgICAgICAgIGVsc2UgZmluZCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3RfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX29wdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFNvbWUgdlxuICAgICAgICAgIGVsc2UgZmluZF9vcHQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCB0cnlfam9pbiBsIHYgciA9XG4gICAgICAoKiBbam9pbiBsIHYgcl0gY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gKGVsZW1lbnRzIG9mIGwgPCB2IDxcbiAgICAgICAgIGVsZW1lbnRzIG9mIHIpOyB1c2UgW3RyeV9qb2luIGwgdiByXSB3aGVuIHRoaXMgcHJvcGVydHkgbWF5XG4gICAgICAgICBub3QgaG9sZCwgYnV0IHlvdSBob3BlIGl0IGRvZXMgaG9sZCBpbiB0aGUgY29tbW9uIGNhc2UgKilcbiAgICAgIGlmIChsID0gRW1wdHkgfHwgT3JkLmNvbXBhcmUgKG1heF9lbHQgbCkgdiA8IDApXG4gICAgICAmJiAociA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIHYgKG1pbl9lbHQgcikgPCAwKVxuICAgICAgdGhlbiBqb2luIGwgdiByXG4gICAgICBlbHNlIHVuaW9uIGwgKGFkZCB2IHIpXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgbGV0IHYnID0gZiB2IGluXG4gICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgIGVsc2UgdHJ5X2pvaW4gbCcgdicgcidcblxuICAgIGxldCB0cnlfY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gdHJ5X2pvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgIGxldCByZWMgZmlsdGVyX21hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gZmlsdGVyX21hcCBmIHIgaW5cbiAgICAgICAgIGJlZ2luIG1hdGNoIHYnIHdpdGhcbiAgICAgICAgICAgfCBTb21lIHYnIC0+XG4gICAgICAgICAgICAgIGlmIGwgPT0gbCcgJiYgdiA9PSB2JyAmJiByID09IHInIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG4gICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICB0cnlfY29uY2F0IGwnIHInXG4gICAgICAgICBlbmRcblxuICAgIGxldCBvZl9zb3J0ZWRfbGlzdCBsID1cbiAgICAgIGxldCByZWMgc3ViIG4gbCA9XG4gICAgICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgICAgICB8IDAsIGwgLT4gRW1wdHksIGxcbiAgICAgICAgfCAxLCB4MCA6OiBsIC0+IE5vZGUge2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX0sIGxcbiAgICAgICAgfCAyLCB4MCA6OiB4MSA6OiBsIC0+XG4gICAgICAgICAgICBOb2Rle2w9Tm9kZXtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9OyB2PXgxOyByPUVtcHR5OyBoPTJ9LCBsXG4gICAgICAgIHwgMywgeDAgOjogeDEgOjogeDIgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTtcbiAgICAgICAgICAgICAgICAgcj1Ob2Rle2w9RW1wdHk7IHY9eDI7IHI9RW1wdHk7IGg9MX07IGg9Mn0sIGxcbiAgICAgICAgfCBuLCBsIC0+XG4gICAgICAgICAgbGV0IG5sID0gbiAvIDIgaW5cbiAgICAgICAgICBsZXQgbGVmdCwgbCA9IHN1YiBubCBsIGluXG4gICAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IG1pZCA6OiBsIC0+XG4gICAgICAgICAgICBsZXQgcmlnaHQsIGwgPSBzdWIgKG4gLSBubCAtIDEpIGwgaW5cbiAgICAgICAgICAgIGNyZWF0ZSBsZWZ0IG1pZCByaWdodCwgbFxuICAgICAgaW5cbiAgICAgIGZzdCAoc3ViIChMaXN0Lmxlbmd0aCBsKSBsKVxuXG4gICAgbGV0IG9mX2xpc3QgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gZW1wdHlcbiAgICAgIHwgW3gwXSAtPiBzaW5nbGV0b24geDBcbiAgICAgIHwgW3gwOyB4MV0gLT4gYWRkIHgxIChzaW5nbGV0b24geDApXG4gICAgICB8IFt4MDsgeDE7IHgyXSAtPiBhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzXSAtPiBhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzOyB4NF0gLT4gYWRkIHg0IChhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSkpXG4gICAgICB8IF8gLT4gb2Zfc29ydGVkX2xpc3QgKExpc3Quc29ydF91bmlxIE9yZC5jb21wYXJlIGwpXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIHMgeCAtPiBhZGQgeCBzKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgYyA9IHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID0gcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBzID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBzIGMgPSBtYXRjaCBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgcjsgdjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9IHsgbXV0YWJsZSBjIDogJ2EgbGlzdDsgbXV0YWJsZSBsZW4gOiBpbnQ7IH1cblxuZXhjZXB0aW9uIEVtcHR5XG5cbmxldCBjcmVhdGUgKCkgPSB7IGMgPSBbXTsgbGVuID0gMDsgfVxuXG5sZXQgY2xlYXIgcyA9IHMuYyA8LSBbXTsgcy5sZW4gPC0gMFxuXG5sZXQgY29weSBzID0geyBjID0gcy5jOyBsZW4gPSBzLmxlbjsgfVxuXG5sZXQgcHVzaCB4IHMgPSBzLmMgPC0geCA6OiBzLmM7IHMubGVuIDwtIHMubGVuICsgMVxuXG5sZXQgcG9wIHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgaGRcbiAgfCBbXSAgICAgLT4gcmFpc2UgRW1wdHlcblxubGV0IHBvcF9vcHQgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBTb21lIGhkXG4gIHwgW10gICAgIC0+IE5vbmVcblxubGV0IHRvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBoZFxuICB8IFtdICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCB0b3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IFNvbWUgaGRcbiAgfCBbXSAgICAtPiBOb25lXG5cbmxldCBpc19lbXB0eSBzID0gKHMuYyA9IFtdKVxuXG5sZXQgbGVuZ3RoIHMgPSBzLmxlblxuXG5sZXQgaXRlciBmIHMgPSBMaXN0Lml0ZXIgZiBzLmNcblxubGV0IGZvbGQgZiBhY2MgcyA9IExpc3QuZm9sZF9sZWZ0IGYgYWNjIHMuY1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBMaXN0LnRvX3NlcSBzLmNcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBzID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBzIGc7XG4gIHNcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgRnJhbmNvaXMgUG90dGllciwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgSmVyZW1pZSBEaW1pbm8sIEphbmUgU3RyZWV0IEV1cm9wZSAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXhjZXB0aW9uIEVtcHR5XG5cbnR5cGUgJ2EgY2VsbCA9XG4gIHwgTmlsXG4gIHwgQ29ucyBvZiB7IGNvbnRlbnQ6ICdhOyBtdXRhYmxlIG5leHQ6ICdhIGNlbGwgfVxuXG50eXBlICdhIHQgPSB7XG4gIG11dGFibGUgbGVuZ3RoOiBpbnQ7XG4gIG11dGFibGUgZmlyc3Q6ICdhIGNlbGw7XG4gIG11dGFibGUgbGFzdDogJ2EgY2VsbFxufVxuXG5sZXQgY3JlYXRlICgpID0ge1xuICBsZW5ndGggPSAwO1xuICBmaXJzdCA9IE5pbDtcbiAgbGFzdCA9IE5pbFxufVxuXG5sZXQgY2xlYXIgcSA9XG4gIHEubGVuZ3RoIDwtIDA7XG4gIHEuZmlyc3QgPC0gTmlsO1xuICBxLmxhc3QgPC0gTmlsXG5cbmxldCBhZGQgeCBxID1cbiAgbGV0IGNlbGwgPSBDb25zIHtcbiAgICBjb250ZW50ID0geDtcbiAgICBuZXh0ID0gTmlsXG4gIH0gaW5cbiAgbWF0Y2ggcS5sYXN0IHdpdGhcbiAgfCBOaWwgLT5cbiAgICBxLmxlbmd0aCA8LSAxO1xuICAgIHEuZmlyc3QgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuICB8IENvbnMgbGFzdCAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoICsgMTtcbiAgICBsYXN0Lm5leHQgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuXG5sZXQgcHVzaCA9XG4gIGFkZFxuXG5sZXQgcGVlayBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBjb250ZW50XG5cbmxldCBwZWVrX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudCB9IC0+IFNvbWUgY29udGVudFxuXG5sZXQgdG9wID1cbiAgcGVla1xuXG5sZXQgdGFrZSBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSAtPlxuICAgIGNsZWFyIHE7XG4gICAgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIGNvbnRlbnRcblxubGV0IHRha2Vfb3B0IHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gTm9uZVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIFNvbWUgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIFNvbWUgY29udGVudFxuXG5sZXQgcG9wID1cbiAgdGFrZVxuXG5sZXQgY29weSA9XG4gIGxldCByZWMgY29weSBxX3JlcyBwcmV2IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IHFfcmVzLmxhc3QgPC0gcHJldjsgcV9yZXNcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCByZXMgPSBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IGluXG4gICAgICBiZWdpbiBtYXRjaCBwcmV2IHdpdGhcbiAgICAgIHwgTmlsIC0+IHFfcmVzLmZpcnN0IDwtIHJlc1xuICAgICAgfCBDb25zIHAgLT4gcC5uZXh0IDwtIHJlc1xuICAgICAgZW5kO1xuICAgICAgY29weSBxX3JlcyByZXMgbmV4dFxuICBpblxuICBmdW4gcSAtPiBjb3B5IHsgbGVuZ3RoID0gcS5sZW5ndGg7IGZpcnN0ID0gTmlsOyBsYXN0ID0gTmlsIH0gTmlsIHEuZmlyc3RcblxubGV0IGlzX2VtcHR5IHEgPVxuICBxLmxlbmd0aCA9IDBcblxubGV0IGxlbmd0aCBxID1cbiAgcS5sZW5ndGhcblxubGV0IGl0ZXIgPVxuICBsZXQgcmVjIGl0ZXIgZiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgZiBjb250ZW50O1xuICAgICAgaXRlciBmIG5leHRcbiAgaW5cbiAgZnVuIGYgcSAtPiBpdGVyIGYgcS5maXJzdFxuXG5sZXQgZm9sZCA9XG4gIGxldCByZWMgZm9sZCBmIGFjY3UgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gYWNjdVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgY29udGVudCBpblxuICAgICAgZm9sZCBmIGFjY3UgbmV4dFxuICBpblxuICBmdW4gZiBhY2N1IHEgLT4gZm9sZCBmIGFjY3UgcS5maXJzdFxuXG5sZXQgdHJhbnNmZXIgcTEgcTIgPVxuICBpZiBxMS5sZW5ndGggPiAwIHRoZW5cbiAgICBtYXRjaCBxMi5sYXN0IHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHExLmxlbmd0aDtcbiAgICAgIHEyLmZpcnN0IDwtIHExLmZpcnN0O1xuICAgICAgcTIubGFzdCA8LSBxMS5sYXN0O1xuICAgICAgY2xlYXIgcTFcbiAgICB8IENvbnMgbGFzdCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHEyLmxlbmd0aCArIHExLmxlbmd0aDtcbiAgICAgIGxhc3QubmV4dCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcSA9XG4gIGxldCByZWMgYXV4IGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICB8IE5pbCAtPiBTZXEuTmlsXG4gICAgfCBDb25zIHsgY29udGVudD14OyBuZXh0OyB9IC0+IFNlcS5Db25zICh4LCBhdXggbmV4dClcbiAgaW5cbiAgYXV4IHEuZmlyc3RcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBxID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBxIGc7XG4gIHFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCJsZXQgdXRmOF9vZl9jb2RlIGJ1ZiB4ID1cbiAgbGV0IGFkZCA9IEJ1ZmZlci5hZGRfY2hhciBpblxuXG4gICgqIFN0cmFpZ2h0IDw9IGRvZXNuJ3Qgd29yayB3aXRoIHNpZ25lZCAzMS1iaXQgaW50cyAqKVxuICBsZXQgbWF4Yml0cyBuIHggPSB4IGxzciBuID0gMCBpblxuXG4gIGlmIG1heGJpdHMgNyB4IHRoZW4gKCogNyAqKVxuICAgIGFkZCBidWYgKENoYXIuY2hyIHgpXG4gIGVsc2UgaWYgbWF4Yml0cyAxMSB4IHRoZW4gKFxuICAgICgqIDUgKyA2ICopXG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTEwMDAwMDAgbG9yICgoeCBsc3IgNikgbGFuZCAwYjAwMDExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoeCBsYW5kIDBiMDAxMTExMTEpKSkpXG4gIGVsc2UgaWYgbWF4Yml0cyAxNiB4IHRoZW4gKFxuICAgICgqIDQgKyA2ICsgNiAqKVxuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjExMTAwMDAwIGxvciAoKHggbHNyIDEyKSBsYW5kIDBiMDAwMDExMTEpKSk7XG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgoeCBsc3IgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoeCBsYW5kIDBiMDAxMTExMTEpKSkpXG4gIGVsc2UgaWYgbWF4Yml0cyAyMSB4IHRoZW4gKFxuICAgICgqIDMgKyA2ICsgNiArIDYgKilcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMTExMDAwMCBsb3IgKCh4IGxzciAxOCkgbGFuZCAwYjAwMDAwMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHggbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgoeCBsc3IgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoeCBsYW5kIDBiMDAxMTExMTEpKSkpXG4gIGVsc2UgaWYgbWF4Yml0cyAyNiB4IHRoZW4gKFxuICAgICgqIDIgKyA2ICsgNiArIDYgKyA2ICopXG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTEwMDAgbG9yICgoeCBsc3IgMjQpIGxhbmQgMGIwMDAwMDAxMSkpKTtcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh4IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHggbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgoeCBsc3IgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoeCBsYW5kIDBiMDAxMTExMTEpKSkpXG4gIGVsc2UgKFxuICAgIGFzc2VydCAobWF4Yml0cyAzMSB4KTtcbiAgICAoKiAxICsgNiArIDYgKyA2ICsgNiArIDYgKilcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMTExMTEwMCBsb3IgKCh4IGxzciAzMCkgbGFuZCAwYjAwMDAwMDAxKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHggbHNyIDI0KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgoeCBsc3IgMTgpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh4IGxzciAxMikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHggbHNyIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHggbGFuZCAwYjAwMTExMTExKSkpKVxuXG5sZXQgY29kZV9vZl9zdXJyb2dhdGVfcGFpciBpIGogPVxuICBsZXQgaGlnaDEwID0gaSAtIDB4RDgwMCBpblxuICBsZXQgbG93MTAgPSBqIC0gMHhEQzAwIGluXG4gIDB4MTAwMDAgKyAoKGhpZ2gxMCBsc2wgMTApIGxvciBsb3cxMClcblxubGV0IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgYnVmIGkgaiA9XG4gIHV0Zjhfb2ZfY29kZSBidWYgKGNvZGVfb2Zfc3Vycm9nYXRlX3BhaXIgaSBqKVxuIiwiXG4oKiogezMgVHlwZSBvZiB0aGUgSlNPTiB0cmVlfSAqKVxuXG50eXBlIHQgPVxuICAgIFtcbiAgICB8IGBOdWxsXG4gICAgfCBgQm9vbCBvZiBib29sXG4gICAgfCBgSW50IG9mIGludFxuICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICB8IGBBc3NvYyBvZiAoc3RyaW5nICogdCkgbGlzdFxuICAgIHwgYExpc3Qgb2YgdCBsaXN0XG4gICAgfCBgVHVwbGUgb2YgdCBsaXN0XG4gICAgfCBgVmFyaWFudCBvZiAoc3RyaW5nICogdCBvcHRpb24pXG4gICAgXVxuKCoqXG5BbGwgcG9zc2libGUgY2FzZXMgZGVmaW5lZCBpbiBZb2pzb246XG4tIGBOdWxsOiBKU09OIG51bGxcbi0gYEJvb2wgb2YgYm9vbDogSlNPTiBib29sZWFuXG4tIGBJbnQgb2YgaW50OiBKU09OIG51bWJlciB3aXRob3V0IGRlY2ltYWwgcG9pbnQgb3IgZXhwb25lbnQuXG4tIGBJbnRsaXQgb2Ygc3RyaW5nOiBKU09OIG51bWJlciB3aXRob3V0IGRlY2ltYWwgcG9pbnQgb3IgZXhwb25lbnQsXG5cdCAgICBwcmVzZXJ2ZWQgYXMgYSBzdHJpbmcuXG4tIGBGbG9hdCBvZiBmbG9hdDogSlNPTiBudW1iZXIsIEluZmluaXR5LCAtSW5maW5pdHkgb3IgTmFOLlxuLSBgRmxvYXRsaXQgb2Ygc3RyaW5nOiBKU09OIG51bWJlciwgSW5maW5pdHksIC1JbmZpbml0eSBvciBOYU4sXG5cdCAgICBwcmVzZXJ2ZWQgYXMgYSBzdHJpbmcuXG4tIGBTdHJpbmcgb2Ygc3RyaW5nOiBKU09OIHN0cmluZy4gQnl0ZXMgaW4gdGhlIHJhbmdlIDEyOC0yNTUgYXJlIHByZXNlcnZlZFxuXHQgICAgYXMtaXMgd2l0aG91dCBlbmNvZGluZyB2YWxpZGF0aW9uIGZvciBib3RoIHJlYWRpbmdcblx0ICAgIGFuZCB3cml0aW5nLlxuLSBgU3RyaW5nbGl0IG9mIHN0cmluZzogSlNPTiBzdHJpbmcgbGl0ZXJhbCBpbmNsdWRpbmcgdGhlIGRvdWJsZSBxdW90ZXMuXG4tIGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdDogSlNPTiBvYmplY3QuXG4tIGBMaXN0IG9mIGpzb24gbGlzdDogSlNPTiBhcnJheS5cbi0gYFR1cGxlIG9mIGpzb24gbGlzdDogVHVwbGUgKG5vbi1zdGFuZGFyZCBleHRlbnNpb24gb2YgSlNPTikuXG5cdCAgICBTeW50YXg6IFsoXCJhYmNcIiwgMTIzKV0uXG4tIGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbik6IFZhcmlhbnQgKG5vbi1zdGFuZGFyZCBleHRlbnNpb24gb2YgSlNPTikuXG5cdCAgICBTeW50YXg6IFs8XCJGb29cIj5dIG9yIFs8XCJCYXJcIjoxMjM+XS5cbiopXG5cbigqXG4gIE5vdGUgdG8gYWR2ZW50dXJlcnM6IG9jYW1sZG9jIGRvZXMgbm90IHN1cHBvcnQgaW5saW5lIGNvbW1lbnRzXG4gIG9uIGVhY2ggcG9seW1vcnBoaWMgdmFyaWFudCwgYW5kIGNwcG8gZG9lc24ndCBhbGxvdyB0byBjb25jYXRlbmF0ZVxuICBjb21tZW50cywgc28gaXQgd291bGQgYmUgY29tcGxpY2F0ZWQgdG8gZG9jdW1lbnQgb25seSB0aGVcbiAgY2FzZXMgdGhhdCBhcmUgcHJlc2VydmVkIGJ5IGNwcG8gaW4gdGhlIHR5cGUgZGVmaW5pdGlvbi5cbiopXG5cbmxldCByZWMgdG9fYmFzaWMgOiB0IC0+IEJhc2ljLnQgPSBmdW5jdGlvblxuICB8IChgTnVsbCB8IGBCb29sIF8gfCBgSW50IF8gfCBgRmxvYXQgXyB8IGBTdHJpbmcgXykgYXMgeCAtPiB4XG4gIHwgYEludGxpdCBzIC0+IGBTdHJpbmcgc1xuICB8IGBMaXN0IGwgfCBgVHVwbGUgbCAtPiBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCB0b19iYXNpYyBsKSlcbiAgfCBgQXNzb2MgbCAtPlxuICAgICAgYEFzc29jIChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIChmdW4gKGssIHYpIC0+IChrLCB0b19iYXNpYyB2KSkgbCkpXG4gIHwgYFZhcmlhbnQgKGssIE5vbmUpIC0+IGBTdHJpbmcga1xuICB8IGBWYXJpYW50IChrLCBTb21lIHYpIC0+IGBMaXN0IFsgYFN0cmluZyBrOyB0b19iYXNpYyB2IF1cblxubGV0IGhleCBuID1cbiAgQ2hhci5jaHIgKFxuICAgIGlmIG4gPCAxMCB0aGVuIG4gKyA0OFxuICAgIGVsc2UgbiArIDg3XG4gIClcblxubGV0IHdyaXRlX3NwZWNpYWwgc3JjIHN0YXJ0IHN0b3Agb2Igc3RyID1cbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgb2Igc3JjICFzdGFydCAoc3RvcCAtICFzdGFydCk7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIHN0cjtcbiAgc3RhcnQgOj0gc3RvcCArIDFcblxubGV0IHdyaXRlX2NvbnRyb2xfY2hhciBzcmMgc3RhcnQgc3RvcCBvYiBjID1cbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgb2Igc3JjICFzdGFydCAoc3RvcCAtICFzdGFydCk7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIFwiXFxcXHUwMFwiO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgKGhleCAoQ2hhci5jb2RlIGMgbHNyIDQpKTtcbiAgQnVmZmVyLmFkZF9jaGFyIG9iIChoZXggKENoYXIuY29kZSBjIGxhbmQgMHhmKSk7XG4gIHN0YXJ0IDo9IHN0b3AgKyAxXG5cbmxldCBmaW5pc2hfc3RyaW5nIHNyYyBzdGFydCBvYiA9XG4gIHRyeVxuICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIG9iIHNyYyAhc3RhcnQgKFN0cmluZy5sZW5ndGggc3JjIC0gIXN0YXJ0KVxuICB3aXRoIGV4YyAtPlxuICAgIFByaW50Zi5lcHJpbnRmIFwic3JjPSVTIHN0YXJ0PSVpIGxlbj0laVxcbiUhXCJcbiAgICAgIHNyYyAhc3RhcnQgKFN0cmluZy5sZW5ndGggc3JjIC0gIXN0YXJ0KTtcbiAgICByYWlzZSBleGNcblxubGV0IHdyaXRlX3N0cmluZ19ib2R5IG9iIHMgPVxuICBsZXQgc3RhcnQgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICAgJ1wiJyAtPiB3cml0ZV9zcGVjaWFsIHMgc3RhcnQgaSBvYiBcIlxcXFxcXFwiXCJcbiAgICAgIHwgJ1xcXFwnIC0+IHdyaXRlX3NwZWNpYWwgcyBzdGFydCBpIG9iIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAtPiB3cml0ZV9zcGVjaWFsIHMgc3RhcnQgaSBvYiBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiB3cml0ZV9zcGVjaWFsIHMgc3RhcnQgaSBvYiBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgLT4gd3JpdGVfc3BlY2lhbCBzIHN0YXJ0IGkgb2IgXCJcXFxcblwiXG4gICAgICB8ICdcXHInIC0+IHdyaXRlX3NwZWNpYWwgcyBzdGFydCBpIG9iIFwiXFxcXHJcIlxuICAgICAgfCAnXFx0JyAtPiB3cml0ZV9zcGVjaWFsIHMgc3RhcnQgaSBvYiBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT4gd3JpdGVfY29udHJvbF9jaGFyIHMgc3RhcnQgaSBvYiBjXG4gICAgICB8IF8gLT4gKClcbiAgZG9uZTtcbiAgZmluaXNoX3N0cmluZyBzIHN0YXJ0IG9iXG5cbmxldCB3cml0ZV9zdHJpbmcgb2IgcyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnXCInO1xuICB3cml0ZV9zdHJpbmdfYm9keSBvYiBzO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ1wiJ1xuXG5sZXQganNvbl9zdHJpbmdfb2Zfc3RyaW5nIHMgPVxuICBsZXQgb2IgPSBCdWZmZXIuY3JlYXRlIDEwIGluXG4gIHdyaXRlX3N0cmluZyBvYiBzO1xuICBCdWZmZXIuY29udGVudHMgb2JcblxubGV0IHdyaXRlX251bGwgb2IgKCkgPVxuICBCdWZmZXIuYWRkX3N0cmluZyBvYiBcIm51bGxcIlxuXG5sZXQgd3JpdGVfYm9vbCBvYiB4ID1cbiAgQnVmZmVyLmFkZF9zdHJpbmcgb2IgKGlmIHggdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIilcblxubGV0IGRlYyBuID1cbiAgQ2hhci5jaHIgKG4gKyA0OClcblxubGV0IHJlYyB3cml0ZV9kaWdpdHMgcyB4ID1cbiAgaWYgeCA9IDAgdGhlbiAoKVxuICBlbHNlXG4gICAgbGV0IGQgPSB4IG1vZCAxMCBpblxuICAgIHdyaXRlX2RpZ2l0cyBzICh4IC8gMTApO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBzIChkZWMgKGFicyBkKSlcblxubGV0IHdyaXRlX2ludCBvYiB4ID1cbiAgaWYgeCA+IDAgdGhlblxuICAgIHdyaXRlX2RpZ2l0cyBvYiB4XG4gIGVsc2UgaWYgeCA8IDAgdGhlbiAoXG4gICAgQnVmZmVyLmFkZF9jaGFyIG9iICctJztcbiAgICB3cml0ZV9kaWdpdHMgb2IgeFxuICApXG4gIGVsc2VcbiAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJzAnXG5cblxubGV0IGpzb25fc3RyaW5nX29mX2ludCBpID1cbiAgc3RyaW5nX29mX2ludCBpXG5cblxuKCpcbiAgRW5zdXJlIHRoYXQgdGhlIGZsb2F0IGlzIG5vdCBwcmludGVkIGFzIGFuIGludC5cbiAgVGhpcyBpcyBub3QgcmVxdWlyZWQgYnkgSlNPTiwgYnV0IHVzZWZ1bCBpbiBvcmRlciB0byBndWFyYW50ZWVcbiAgcmV2ZXJzaWJpbGl0eS5cbiopXG5sZXQgZmxvYXRfbmVlZHNfcGVyaW9kIHMgPVxuICB0cnlcbiAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgICAgICcwJy4uJzknIHwgJy0nIC0+ICgpXG4gICAgICAgIHwgXyAtPiByYWlzZSBFeGl0XG4gICAgZG9uZTtcbiAgICB0cnVlXG4gIHdpdGggRXhpdCAtPlxuICAgIGZhbHNlXG5cbigqXG4gIEd1YXJhbnRlZXMgdGhhdCBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGRpZ2l0cyBhcmUgcHJpbnRlZCBpbiBvcmRlciB0byBhbGxvd1xuICByZXZlcnNpYmlsaXR5LlxuKilcbmxldCB3cml0ZV9mbG9hdCBvYiB4ID1cbiAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgRlBfbmFuIC0+XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBvYiBcIk5hTlwiXG4gIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIChpZiB4ID4gMC4gdGhlbiBcIkluZmluaXR5XCIgZWxzZSBcIi1JbmZpbml0eVwiKVxuICB8IF8gLT5cbiAgICAgIGxldCBzMSA9IFByaW50Zi5zcHJpbnRmIFwiJS4xNmdcIiB4IGluXG4gICAgICBsZXQgcyA9XG4gICAgICAgIGlmIGZsb2F0X29mX3N0cmluZyBzMSA9IHggdGhlbiBzMVxuICAgICAgICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJS4xN2dcIiB4XG4gICAgICBpblxuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgb2IgcztcbiAgICAgIGlmIGZsb2F0X25lZWRzX3BlcmlvZCBzIHRoZW5cbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgb2IgXCIuMFwiXG5cbmxldCB3cml0ZV9ub3JtYWxfZmxvYXRfcHJlYyBzaWduaWZpY2FudF9maWd1cmVzIG9iIHggPVxuICBsZXQgc3ByaW50ZiA9IFByaW50Zi5zcHJpbnRmIGluXG4gIGxldCBzID1cbiAgICBtYXRjaCBzaWduaWZpY2FudF9maWd1cmVzIHdpdGhcbiAgICAgICAgMSAtPiBzcHJpbnRmIFwiJS4xZ1wiIHhcbiAgICAgIHwgMiAtPiBzcHJpbnRmIFwiJS4yZ1wiIHhcbiAgICAgIHwgMyAtPiBzcHJpbnRmIFwiJS4zZ1wiIHhcbiAgICAgIHwgNCAtPiBzcHJpbnRmIFwiJS40Z1wiIHhcbiAgICAgIHwgNSAtPiBzcHJpbnRmIFwiJS41Z1wiIHhcbiAgICAgIHwgNiAtPiBzcHJpbnRmIFwiJS42Z1wiIHhcbiAgICAgIHwgNyAtPiBzcHJpbnRmIFwiJS43Z1wiIHhcbiAgICAgIHwgOCAtPiBzcHJpbnRmIFwiJS44Z1wiIHhcbiAgICAgIHwgOSAtPiBzcHJpbnRmIFwiJS45Z1wiIHhcbiAgICAgIHwgMTAgLT4gc3ByaW50ZiBcIiUuMTBnXCIgeFxuICAgICAgfCAxMSAtPiBzcHJpbnRmIFwiJS4xMWdcIiB4XG4gICAgICB8IDEyIC0+IHNwcmludGYgXCIlLjEyZ1wiIHhcbiAgICAgIHwgMTMgLT4gc3ByaW50ZiBcIiUuMTNnXCIgeFxuICAgICAgfCAxNCAtPiBzcHJpbnRmIFwiJS4xNGdcIiB4XG4gICAgICB8IDE1IC0+IHNwcmludGYgXCIlLjE1Z1wiIHhcbiAgICAgIHwgMTYgLT4gc3ByaW50ZiBcIiUuMTZnXCIgeFxuICAgICAgfCBfIC0+IHNwcmludGYgXCIlLjE3Z1wiIHhcbiAgaW5cbiAgQnVmZmVyLmFkZF9zdHJpbmcgb2IgcztcbiAgaWYgZmxvYXRfbmVlZHNfcGVyaW9kIHMgdGhlblxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIFwiLjBcIlxuXG4oKiB1c2VkIGJ5IGF0ZGdlbiAqKVxubGV0IHdyaXRlX2Zsb2F0X3ByZWMgc2lnbmlmaWNhbnRfZmlndXJlcyBvYiB4ID1cbiAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgRlBfbmFuIC0+XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBvYiBcIk5hTlwiXG4gIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIChpZiB4ID4gMC4gdGhlbiBcIkluZmluaXR5XCIgZWxzZSBcIi1JbmZpbml0eVwiKVxuICB8IF8gLT5cbiAgICAgIHdyaXRlX25vcm1hbF9mbG9hdF9wcmVjIHNpZ25pZmljYW50X2ZpZ3VyZXMgb2IgeFxuXG5sZXQganNvbl9zdHJpbmdfb2ZfZmxvYXQgeCA9XG4gIGxldCBvYiA9IEJ1ZmZlci5jcmVhdGUgMjAgaW5cbiAgd3JpdGVfZmxvYXQgb2IgeDtcbiAgQnVmZmVyLmNvbnRlbnRzIG9iXG5cblxubGV0IHdyaXRlX3N0ZF9mbG9hdCBvYiB4ID1cbiAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgRlBfbmFuIC0+XG4gICAgICBDb21tb24uanNvbl9lcnJvciBcIk5hTiB2YWx1ZSBub3QgYWxsb3dlZCBpbiBzdGFuZGFyZCBKU09OXCJcbiAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgQ29tbW9uLmpzb25fZXJyb3JcbiAgICAgICAgKGlmIHggPiAwLiB0aGVuXG4gICAgICAgICAgIFwiSW5maW5pdHkgdmFsdWUgbm90IGFsbG93ZWQgaW4gc3RhbmRhcmQgSlNPTlwiXG4gICAgICAgICBlbHNlXG4gICAgICAgICAgIFwiLUluZmluaXR5IHZhbHVlIG5vdCBhbGxvd2VkIGluIHN0YW5kYXJkIEpTT05cIilcbiAgfCBfIC0+XG4gICAgICBsZXQgczEgPSBQcmludGYuc3ByaW50ZiBcIiUuMTZnXCIgeCBpblxuICAgICAgbGV0IHMgPVxuICAgICAgICBpZiBmbG9hdF9vZl9zdHJpbmcgczEgPSB4IHRoZW4gczFcbiAgICAgICAgZWxzZSBQcmludGYuc3ByaW50ZiBcIiUuMTdnXCIgeFxuICAgICAgaW5cbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIHM7XG4gICAgICBpZiBmbG9hdF9uZWVkc19wZXJpb2QgcyB0aGVuXG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIFwiLjBcIlxuXG4oKiB1c2VkIGJ5IGF0ZGdlbiAqKVxubGV0IHdyaXRlX3N0ZF9mbG9hdF9wcmVjIHNpZ25pZmljYW50X2ZpZ3VyZXMgb2IgeCA9XG4gIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IHggd2l0aFxuICAgIEZQX25hbiAtPlxuICAgICAgQ29tbW9uLmpzb25fZXJyb3IgXCJOYU4gdmFsdWUgbm90IGFsbG93ZWQgaW4gc3RhbmRhcmQgSlNPTlwiXG4gIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgIENvbW1vbi5qc29uX2Vycm9yXG4gICAgICAgIChpZiB4ID4gMC4gdGhlblxuICAgICAgICAgICBcIkluZmluaXR5IHZhbHVlIG5vdCBhbGxvd2VkIGluIHN0YW5kYXJkIEpTT05cIlxuICAgICAgICAgZWxzZVxuICAgICAgICAgICBcIi1JbmZpbml0eSB2YWx1ZSBub3QgYWxsb3dlZCBpbiBzdGFuZGFyZCBKU09OXCIpXG4gIHwgXyAtPlxuICAgICAgd3JpdGVfbm9ybWFsX2Zsb2F0X3ByZWMgc2lnbmlmaWNhbnRfZmlndXJlcyBvYiB4XG5cbmxldCBzdGRfanNvbl9zdHJpbmdfb2ZfZmxvYXQgeCA9XG4gIGxldCBvYiA9IEJ1ZmZlci5jcmVhdGUgMjAgaW5cbiAgd3JpdGVfc3RkX2Zsb2F0IG9iIHg7XG4gIEJ1ZmZlci5jb250ZW50cyBvYlxuXG5cbmxldCB3cml0ZV9pbnRsaXQgPSBCdWZmZXIuYWRkX3N0cmluZ1xubGV0IHdyaXRlX2Zsb2F0bGl0ID0gQnVmZmVyLmFkZF9zdHJpbmdcbmxldCB3cml0ZV9zdHJpbmdsaXQgPSBCdWZmZXIuYWRkX3N0cmluZ1xuXG5sZXQgcmVjIGl0ZXIyX2F1eCBmX2VsdCBmX3NlcCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IHkgOjogbCAtPlxuICAgICAgZl9zZXAgeDtcbiAgICAgIGZfZWx0IHggeTtcbiAgICAgIGl0ZXIyX2F1eCBmX2VsdCBmX3NlcCB4IGxcblxubGV0IGl0ZXIyIGZfZWx0IGZfc2VwIHggPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgeSA6OiBsIC0+XG4gICAgICBmX2VsdCB4IHk7XG4gICAgICBpdGVyMl9hdXggZl9lbHQgZl9zZXAgeCBsXG5cbmxldCBmX3NlcCBvYiA9XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnLCdcblxubGV0IHJlYyB3cml0ZV9qc29uIG9iICh4IDogdCkgPVxuICBtYXRjaCB4IHdpdGhcbiAgICAgIGBOdWxsIC0+IHdyaXRlX251bGwgb2IgKClcbiAgICB8IGBCb29sIGIgLT4gd3JpdGVfYm9vbCBvYiBiXG4gICAgfCBgSW50IGkgLT4gd3JpdGVfaW50IG9iIGlcbiAgICB8IGBJbnRsaXQgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBvYiBzXG4gICAgfCBgRmxvYXQgZiAtPiB3cml0ZV9mbG9hdCBvYiBmXG4gICAgfCBgU3RyaW5nIHMgLT4gd3JpdGVfc3RyaW5nIG9iIHNcbiAgICB8IGBBc3NvYyBsIC0+IHdyaXRlX2Fzc29jIG9iIGxcbiAgICB8IGBMaXN0IGwgLT4gd3JpdGVfbGlzdCBvYiBsXG4gICAgfCBgVHVwbGUgbCAtPiB3cml0ZV90dXBsZSBvYiBsXG4gICAgfCBgVmFyaWFudCAocywgbykgLT4gd3JpdGVfdmFyaWFudCBvYiBzIG9cblxuYW5kIHdyaXRlX2Fzc29jIG9iIGwgPVxuICBsZXQgZl9lbHQgb2IgKHMsIHgpID1cbiAgICB3cml0ZV9zdHJpbmcgb2IgcztcbiAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJzonO1xuICAgIHdyaXRlX2pzb24gb2IgeFxuICBpblxuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ3snO1xuICBpdGVyMiBmX2VsdCBmX3NlcCBvYiBsO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ30nO1xuXG5hbmQgd3JpdGVfbGlzdCBvYiBsID1cbiAgQnVmZmVyLmFkZF9jaGFyIG9iICdbJztcbiAgaXRlcjIgd3JpdGVfanNvbiBmX3NlcCBvYiBsO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ10nXG5cbmFuZCB3cml0ZV90dXBsZSBvYiBsID1cbiAgQnVmZmVyLmFkZF9jaGFyIG9iICcoJztcbiAgaXRlcjIgd3JpdGVfanNvbiBmX3NlcCBvYiBsO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJyknXG5cbmFuZCB3cml0ZV92YXJpYW50IG9iIHMgbyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnPCc7XG4gIHdyaXRlX3N0cmluZyBvYiBzO1xuICAobWF0Y2ggbyB3aXRoXG4gICAgICAgTm9uZSAtPiAoKVxuICAgICB8IFNvbWUgeCAtPlxuICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIG9iICc6JztcbiAgICAgICAgIHdyaXRlX2pzb24gb2IgeFxuICApO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJz4nXG5cbmxldCB3cml0ZV90ID0gd3JpdGVfanNvblxuXG5sZXQgcmVjIHdyaXRlX3N0ZF9qc29uIG9iICh4IDogdCkgPVxuICBtYXRjaCB4IHdpdGhcbiAgICAgIGBOdWxsIC0+IHdyaXRlX251bGwgb2IgKClcbiAgICB8IGBCb29sIGIgLT4gd3JpdGVfYm9vbCBvYiBiXG4gICAgfCBgSW50IGkgLT4gd3JpdGVfaW50IG9iIGlcbiAgICB8IGBJbnRsaXQgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBvYiBzXG4gICAgfCBgRmxvYXQgZiAtPiB3cml0ZV9zdGRfZmxvYXQgb2IgZlxuICAgIHwgYFN0cmluZyBzIC0+IHdyaXRlX3N0cmluZyBvYiBzXG4gICAgfCBgQXNzb2MgbCAtPiB3cml0ZV9zdGRfYXNzb2Mgb2IgbFxuICAgIHwgYExpc3QgbCAtPiB3cml0ZV9zdGRfbGlzdCBvYiBsXG4gICAgfCBgVHVwbGUgbCAtPiB3cml0ZV9zdGRfdHVwbGUgb2IgbFxuICAgIHwgYFZhcmlhbnQgKHMsIG8pIC0+IHdyaXRlX3N0ZF92YXJpYW50IG9iIHMgb1xuXG5hbmQgd3JpdGVfc3RkX2Fzc29jIG9iIGwgPVxuICBsZXQgZl9lbHQgb2IgKHMsIHgpID1cbiAgICB3cml0ZV9zdHJpbmcgb2IgcztcbiAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJzonO1xuICAgIHdyaXRlX3N0ZF9qc29uIG9iIHhcbiAgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIG9iICd7JztcbiAgaXRlcjIgZl9lbHQgZl9zZXAgb2IgbDtcbiAgQnVmZmVyLmFkZF9jaGFyIG9iICd9JztcblxuYW5kIHdyaXRlX3N0ZF9saXN0IG9iIGwgPVxuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ1snO1xuICBpdGVyMiB3cml0ZV9zdGRfanNvbiBmX3NlcCBvYiBsO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ10nXG5cbmFuZCB3cml0ZV9zdGRfdHVwbGUgb2IgbCA9XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnWyc7XG4gIGl0ZXIyIHdyaXRlX3N0ZF9qc29uIGZfc2VwIG9iIGw7XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnXSdcblxuYW5kIHdyaXRlX3N0ZF92YXJpYW50IG9iIHMgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICAgICAgTm9uZSAtPiB3cml0ZV9zdHJpbmcgb2Igc1xuICAgIHwgU29tZSB4IC0+XG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBvYiAnWyc7XG4gICAgICAgIHdyaXRlX3N0cmluZyBvYiBzO1xuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJywnO1xuICAgICAgICB3cml0ZV9zdGRfanNvbiBvYiB4O1xuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJ10nXG5cblxubGV0IHRvX2J1ZmZlciA/KHN1ZiA9IFwiXCIpID8oc3RkID0gZmFsc2UpIG9iIHggPVxuICBpZiBzdGQgdGhlblxuICAgIHdyaXRlX3N0ZF9qc29uIG9iIHhcbiAgZWxzZVxuICAgIHdyaXRlX2pzb24gb2IgeDtcbiAgQnVmZmVyLmFkZF9zdHJpbmcgb2Igc3VmXG5cbmxldCB0b19zdHJpbmcgP2J1ZiA/KGxlbiA9IDI1NikgPyhzdWYgPSBcIlwiKSA/c3RkIHggPVxuICBsZXQgb2IgPVxuICAgIG1hdGNoIGJ1ZiB3aXRoXG4gICAgICAgIE5vbmUgLT4gQnVmZmVyLmNyZWF0ZSBsZW5cbiAgICAgIHwgU29tZSBvYiAtPlxuICAgICAgICAgIEJ1ZmZlci5jbGVhciBvYjtcbiAgICAgICAgICBvYlxuICBpblxuICB0b19idWZmZXIgfnN1ZiA/c3RkIG9iIHg7XG4gIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIG9iIGluXG4gIEJ1ZmZlci5jbGVhciBvYjtcbiAgc1xuXG5sZXQgdG9fY2hhbm5lbCA/YnVmID8obGVuPTQwOTYpID8oc3VmID0gXCJcIikgP3N0ZCBvYyB4ID1cbiAgbGV0IG9iID1cbiAgICBtYXRjaCBidWYgd2l0aFxuICAgICAgICBOb25lIC0+IEJ1ZmZlci5jcmVhdGUgbGVuXG4gICAgICB8IFNvbWUgb2IgLT4gQnVmZmVyLmNsZWFyIG9iOyBvYlxuICBpblxuICB0b19idWZmZXIgfnN1ZiA/c3RkIG9iIHg7XG4gIEJ1ZmZlci5vdXRwdXRfYnVmZmVyIG9jIG9iO1xuICBCdWZmZXIuY2xlYXIgb2JcblxubGV0IHRvX291dHB1dCA/YnVmID8obGVuPTQwOTYpID8oc3VmID0gXCJcIikgP3N0ZCBvdXQgeCA9XG4gIGxldCBvYiA9XG4gICAgbWF0Y2ggYnVmIHdpdGhcbiAgICAgICAgTm9uZSAtPiBCdWZmZXIuY3JlYXRlIGxlblxuICAgICAgfCBTb21lIG9iIC0+IEJ1ZmZlci5jbGVhciBvYjsgb2JcbiAgaW5cbiAgdG9fYnVmZmVyIH5zdWYgP3N0ZCBvYiB4O1xuICAoKiB0aGlzIHJlcXVpcmVzIGFuIGludCBhbmQgbmV2ZXIgdXNlcyBpdC4gVGhpcyBpcyBkb25lIHRvIHByZXNlcnZlXG4gICAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdG8gbm90IGJyZWFrIHRoZSBzaWduYXR1ciBidXQgY2FuIHNhZmVseVxuICAgICBiZSBjaGFuZ2VkIHRvIHJlcXVpcmUgdW5pdCBpbiBhIGZ1dHVyZSBjb21wYXRpYmlsaXR5LWJyZWFraW5nXG4gICAgIHJlbGVhc2UgKilcbiAgbGV0IF8gOiBpbnQgPSBvdXQjb3V0cHV0IChCdWZmZXIuY29udGVudHMgb2IpIDAgKEJ1ZmZlci5sZW5ndGggb2IpIGluXG4gIEJ1ZmZlci5jbGVhciBvYlxuXG5sZXQgdG9fZmlsZSA/bGVuID9zdGQgPyhzdWYgPSBcIlxcblwiKSBmaWxlIHggPVxuICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gIHRyeVxuICAgIHRvX2NoYW5uZWwgP2xlbiB+c3VmID9zdGQgb2MgeDtcbiAgICBjbG9zZV9vdXQgb2NcbiAgd2l0aCBlIC0+XG4gICAgY2xvc2Vfb3V0X25vZXJyIG9jO1xuICAgIHJhaXNlIGVcblxubGV0IHNlcV90b19idWZmZXIgPyhzdWYgPSBcIlxcblwiKSA/c3RkIG9iIHN0ID1cbiAgU2VxLml0ZXIgKHRvX2J1ZmZlciB+c3VmID9zdGQgb2IpIHN0XG5cbmxldCBzZXFfdG9fc3RyaW5nID9idWYgPyhsZW4gPSAyNTYpID8oc3VmID0gXCJcXG5cIikgP3N0ZCBzdCA9XG4gIGxldCBvYiA9XG4gICAgbWF0Y2ggYnVmIHdpdGhcbiAgICAgICAgTm9uZSAtPiBCdWZmZXIuY3JlYXRlIGxlblxuICAgICAgfCBTb21lIG9iIC0+XG4gICAgICAgICAgQnVmZmVyLmNsZWFyIG9iO1xuICAgICAgICAgIG9iXG4gIGluXG4gIHNlcV90b19idWZmZXIgfnN1ZiA/c3RkIG9iIHN0O1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBvYiBpblxuICBCdWZmZXIuY2xlYXIgb2I7XG4gIHNcblxubGV0IHNlcV90b19jaGFubmVsID9idWYgPyhsZW49MjA5NikgPyhzdWYgPSBcIlxcblwiKSA/c3RkIG9jIHNlcSA9XG4gIGxldCBvYiA9XG4gICAgbWF0Y2ggYnVmIHdpdGhcbiAgICAgICAgTm9uZSAtPiBCdWZmZXIuY3JlYXRlIGxlblxuICAgICAgfCBTb21lIG9iIC0+IEJ1ZmZlci5jbGVhciBvYjsgb2JcbiAgaW5cbiAgU2VxLml0ZXIgKGZ1biBqc29uIC0+XG4gICAgdG9fYnVmZmVyIH5zdWYgP3N0ZCBvYiBqc29uO1xuICAgIEJ1ZmZlci5vdXRwdXRfYnVmZmVyIG9jIG9iO1xuICAgIEJ1ZmZlci5jbGVhciBvYjtcbiAgKSBzZXFcblxubGV0IHNlcV90b19maWxlID9sZW4gPyhzdWYgPSBcIlxcblwiKSA/c3RkIGZpbGUgc3QgPVxuICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gIHRyeVxuICAgIHNlcV90b19jaGFubmVsID9sZW4gfnN1ZiA/c3RkIG9jIHN0O1xuICAgIGNsb3NlX291dCBvY1xuICB3aXRoIGUgLT5cbiAgICBjbG9zZV9vdXRfbm9lcnIgb2M7XG4gICAgcmFpc2UgZVxuXG5cbmxldCByZWMgc29ydCA9IGZ1bmN0aW9uXG4gIHwgYEFzc29jIGwgLT5cbiAgICAgIGxldCBsID0gTGlzdC5yZXYgKExpc3QucmV2X21hcCAoZnVuIChrLCB2KSAtPiAoaywgc29ydCB2KSkgbCkgaW5cbiAgICAgIGBBc3NvYyAoTGlzdC5zdGFibGVfc29ydCAoZnVuIChhLCBfKSAoYiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgYSBiKSBsKVxuICB8IGBMaXN0IGwgLT5cbiAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gIHwgYFR1cGxlIGwgLT5cbiAgICAgIGBUdXBsZSAoTGlzdC5yZXYgKExpc3QucmV2X21hcCBzb3J0IGwpKVxuICB8IGBWYXJpYW50IChrLCBTb21lIHYpIGFzIHggLT5cbiAgICAgIGxldCB2JyA9IHNvcnQgdiBpblxuICAgICAgaWYgdiA9PSB2JyB0aGVuIHhcbiAgICAgIGVsc2VcbiAgICAgICAgYFZhcmlhbnQgKGssIFNvbWUgdicpXG4gIHwgeCAtPiB4XG5cbm1vZHVsZSBQcmV0dHkgPSBzdHJ1Y3RcbigqXG4gICBQcmV0dHktcHJpbnQgSlNPTiBkYXRhIGluIGFuIGF0dGVtcHQgdG8gbWF4aW1pemUgcmVhZGFiaWxpdHkuXG5cbiAgIDEuIFdoYXQgZml0cyBvbiBvbmUgbGluZSBzdGF5cyBvbiBvbmUgbGluZS5cbiAgIDIuIFdoYXQgZG9lc24ndCBmaXQgb24gb25lIGxpbmUgZ2V0cyBwcmludGVkIG1vcmUgdmVydGljYWxseSBzbyBhcyB0byBub3RcbiAgICAgIGV4Y2VlZCBhIHJlYXNvbmFibGUgcGFnZSB3aWR0aCwgaWYgcG9zc2libGUuXG5cbiAgIEFycmF5cyBjb250YWluaW5nIG9ubHkgc2ltcGxlIGVsZW1lbnRzIChcImF0b21zXCIpIGFyZSBwcmV0dHktcHJpbnRlZCB3aXRoXG4gICBlbmQtb2YtbGluZSB3cmFwcGluZyBsaWtlIG9yZGluYXJ5IHRleHQ6XG5cbiAgICAgW1xuICAgICAgICBcImhlbGxvXCIsIFwiaGVsbG9cIiwgXCJoZWxsb1wiLCBcImhlbGxvXCIsIFwiaGVsbG9cIiwgXCJoZWxsb1wiLCBcImhlbGxvXCIsIFwiaGVsbG9cIixcbiAgICAgICAgXCJoZWxsb1wiLCBcImhlbGxvXCIsIFwiaGVsbG9cIiwgXCJoZWxsb1wiLCBcImhlbGxvXCIsIFwiaGVsbG9cIiwgXCJoZWxsb1wiLCBcImhlbGxvXCJcbiAgICAgXVxuXG4gICBPdGhlciBhcnJheXMgYXJlIHByaW50ZWQgZWl0aGVyIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5IGRlcGVuZGluZ1xuICAgb24gd2hldGhlciB0aGV5IGZpdCBvbiBhIHNpbmdsZSBsaW5lOlxuXG4gICAgIFsgeyBcImhlbGxvXCI6IFwid29ybGRcIiB9LCB7IFwiaGVsbG9cIjogXCJ3b3JsZFwiIH0sIHsgXCJoZWxsb1wiOiBcIndvcmxkXCIgfSBdXG5cbiAgIG9yXG5cbiAgICAgW1xuICAgICAgIHsgXCJoZWxsb1wiOiBcIndvcmxkXCIgfSxcbiAgICAgICB7IFwiaGVsbG9cIjogXCJ3b3JsZFwiIH0sXG4gICAgICAgeyBcImhlbGxvXCI6IFwid29ybGRcIiB9LFxuICAgICAgIHsgXCJoZWxsb1wiOiBcIndvcmxkXCIgfVxuICAgICBdXG4qKVxuXG5sZXQgcHBfbGlzdCBzZXAgcHB4IG91dCBsID1cbiAgbGV0IHBwX3NlcCBvdXQgKCkgPSBGb3JtYXQuZnByaW50ZiBvdXQgXCIlc0AgXCIgc2VwIGluXG4gIEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXAgcHB4IG91dCBsXG5cbmxldCBpc19hdG9tICh4OiBbPiB0XSkgPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBgTnVsbFxuICB8IGBCb29sIF9cbiAgfCBgSW50IF9cbiAgfCBgRmxvYXQgX1xuICB8IGBTdHJpbmcgX1xuICB8IGBJbnRsaXQgX1xuICB8IGBGbG9hdGxpdCBfXG4gIHwgYFN0cmluZ2xpdCBfXG4gIHwgYExpc3QgW11cbiAgfCBgQXNzb2MgW11cbiAgfCBgVHVwbGUgW11cbiAgfCBgVmFyaWFudCAoXywgTm9uZSkgLT4gdHJ1ZVxuICB8IGBMaXN0IF9cbiAgfCBgQXNzb2MgX1xuICB8IGBUdXBsZSBfXG4gIHwgYFZhcmlhbnQgKF8sIFNvbWUgXykgLT4gZmFsc2VcblxubGV0IGlzX2F0b21fbGlzdCBsID1cbiAgTGlzdC5mb3JfYWxsIGlzX2F0b20gbFxuXG4oKlxuICAgaW5zaWRlX2JveDogaW5kaWNhdGVzIHRoYXQgd2UncmUgYWxyZWFkeSB3aXRoaW4gYSBib3ggdGhhdCBpbXBvc2VzXG4gICBhIGNlcnRhaW4gc3R5bGUgYW5kIHdlIHNob3VsZG4ndCBjcmVhdGUgYSBuZXcgb25lLiBUaGlzIGlzIHVzZWQgZm9yXG4gICBwcmludGluZyBmaWVsZCB2YWx1ZXMgbGlrZSB0aGlzOlxuXG4gICAgIGZvbzogW1xuICAgICAgIGJhclxuICAgICBdXG5cbiAgIHJhdGhlciB0aGFuIHNvbWV0aGluZyBlbHNlIGxpa2VcblxuICAgICBmb286XG4gICAgICAgW1xuICAgICAgICAgYmFyXG4gICAgICAgXVxuKilcbmxldCByZWMgZm9ybWF0IH5pbnNpZGVfYm94IHN0ZCAob3V0OkZvcm1hdC5mb3JtYXR0ZXIpICh4OnQpIDogdW5pdCA9XG4gIG1hdGNoIHggd2l0aFxuICAgIHwgYE51bGwgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJudWxsXCJcbiAgICB8IGBCb29sIHggLT4gRm9ybWF0LnBwX3ByaW50X2Jvb2wgb3V0IHhcbiAgICB8IGBJbnQgeCAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoanNvbl9zdHJpbmdfb2ZfaW50IHgpXG4gICAgfCBgRmxvYXQgeCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgc3RkIHRoZW4gc3RkX2pzb25fc3RyaW5nX29mX2Zsb2F0IHhcbiAgICAgICAgICBlbHNlIGpzb25fc3RyaW5nX29mX2Zsb2F0IHhcbiAgICAgICAgaW5cbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgIHwgYFN0cmluZyBzIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChqc29uX3N0cmluZ19vZl9zdHJpbmcgcylcbiAgICB8IGBJbnRsaXQgcyAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBzXG4gICAgfCBgTGlzdCBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIltdXCJcbiAgICB8IGBMaXN0IGwgLT5cbiAgICAgIGlmIG5vdCBpbnNpZGVfYm94IHRoZW4gRm9ybWF0LmZwcmludGYgb3V0IFwiQFs8aHYyPlwiO1xuICAgICAgaWYgaXNfYXRvbV9saXN0IGwgdGhlblxuICAgICAgICAoKiB1c2UgbGluZSB3cmFwcGluZyBsaWtlIHdlIHdvdWxkIGRvIGZvciBhIHBhcmFncmFwaCBvZiB0ZXh0ICopXG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIltAOzwxIDA+QFs8aG92PiVhQF1AOzwxIC0yPl1cIlxuICAgICAgICAgIChwcF9saXN0IFwiLFwiIChmb3JtYXQgfmluc2lkZV9ib3g6ZmFsc2Ugc3RkKSkgbFxuICAgICAgZWxzZVxuICAgICAgICAoKiBwcmludCB0aGUgZWxlbWVudHMgaG9yaXpvbnRhbGx5IGlmIHRoZXkgZml0IG9uIHRoZSBsaW5lLFxuICAgICAgICAgICBvdGhlcndpc2UgcHJpbnQgdGhlbSBpbiBhIGNvbHVtbiAqKVxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJbQDs8MSAwPkBbPGh2PiVhQF1AOzwxIC0yPl1cIlxuICAgICAgICAgIChwcF9saXN0IFwiLFwiIChmb3JtYXQgfmluc2lkZV9ib3g6ZmFsc2Ugc3RkKSkgbDtcbiAgICAgIGlmIG5vdCBpbnNpZGVfYm94IHRoZW4gRm9ybWF0LmZwcmludGYgb3V0IFwiQF1cIjtcbiAgICB8IGBBc3NvYyBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcInt9XCJcbiAgICB8IGBBc3NvYyBsIC0+XG4gICAgICBpZiBub3QgaW5zaWRlX2JveCB0aGVuIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbPGh2Mj5cIjtcbiAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIntAOzwxIDA+JWFAOzwxIC0yPn1cIiAocHBfbGlzdCBcIixcIiAoZm9ybWF0X2ZpZWxkIHN0ZCkpIGw7XG4gICAgICBpZiBub3QgaW5zaWRlX2JveCB0aGVuIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBdXCI7XG4gICAgfCBgVHVwbGUgbCAtPlxuICAgICAgICBpZiBzdGQgdGhlblxuICAgICAgICAgIGZvcm1hdCB+aW5zaWRlX2JveCBzdGQgb3V0IChgTGlzdCBsKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgaWYgbCA9IFtdIHRoZW5cbiAgICAgICAgICAgIEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiKClcIlxuICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgaWYgbm90IGluc2lkZV9ib3ggdGhlbiBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxob3YyPlwiO1xuICAgICAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiKEAsJWFAOzwwIC0yPilcIiAocHBfbGlzdCBcIixcIiAoZm9ybWF0IH5pbnNpZGVfYm94OmZhbHNlIHN0ZCkpIGw7XG4gICAgICAgICAgICBpZiBub3QgaW5zaWRlX2JveCB0aGVuIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBdXCI7XG4gICAgICAgICAgKVxuICAgIHwgYFZhcmlhbnQgKHMsIE5vbmUpIC0+XG4gICAgICAgIGlmIHN0ZCB0aGVuXG4gICAgICAgICAgbGV0IHJlcHJlc2VudGF0aW9uID0gYFN0cmluZyBzIGluXG4gICAgICAgICAgZm9ybWF0IH5pbnNpZGVfYm94IHN0ZCBvdXQgcmVwcmVzZW50YXRpb25cbiAgICAgICAgZWxzZVxuICAgICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIjwlcz5cIiAoanNvbl9zdHJpbmdfb2Zfc3RyaW5nIHMpXG5cbiAgICB8IGBWYXJpYW50IChzLCBTb21lIHgpIC0+XG4gICAgICAgIGlmIHN0ZCB0aGVuXG4gICAgICAgICAgbGV0IHJlcHJlc2VudGF0aW9uID0gYFN0cmluZyBzIGluXG4gICAgICAgICAgZm9ybWF0IH5pbnNpZGVfYm94IHN0ZCBvdXQgKGBMaXN0IFsgcmVwcmVzZW50YXRpb247IHggXSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxldCBvcCA9IGpzb25fc3RyaW5nX29mX3N0cmluZyBzIGluXG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPEBbPGh2Mj4lczogJWFAXT5cIiBvcCAoZm9ybWF0IH5pbnNpZGVfYm94OnRydWUgc3RkKSB4XG5cbmFuZCBmb3JtYXRfZmllbGQgc3RkIG91dCAobmFtZSwgeCkgPVxuICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JXM6ICVhQF1cIiAoanNvbl9zdHJpbmdfb2Zfc3RyaW5nIG5hbWUpIChmb3JtYXQgfmluc2lkZV9ib3g6dHJ1ZSBzdGQpIHhcblxubGV0IHBwID8oc3RkID0gZmFsc2UpIG91dCB4ID1cbiAgRm9ybWF0LmZwcmludGYgb3V0IFwiQFs8aHYyPiVhQF1cIiAoZm9ybWF0IH5pbnNpZGVfYm94OnRydWUgc3RkKSAoeCA6PiB0KVxuXG5sZXQgdG9fc3RyaW5nID9zdGQgeCA9XG4gIEZvcm1hdC5hc3ByaW50ZiBcIiVhXCIgKHBwID9zdGQpIHhcblxubGV0IHRvX2NoYW5uZWwgP3N0ZCBvYyB4ID1cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgaW5cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWFAP1wiIChwcCA/c3RkKSB4XG5lbmRcblxubGV0IHJlYyBwcCBmbXQgPVxuICBmdW5jdGlvblxuICB8IGBOdWxsIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IFwiYE51bGxcIlxuICB8IGBCb29sIHggLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgQm9vbCAoQFs8aG92PlwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVCXCIgeDtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJAXSlcIlxuICB8IGBJbnQgeCAtPlxuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcImBJbnQgKEBbPGhvdj5cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlZFwiIHg7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQF0pXCJcbiAgfCBgSW50bGl0IHggLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgSW50bGl0IChAWzxob3Y+XCI7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiJVNcIiB4O1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiXG4gIHwgYEZsb2F0IHggLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgRmxvYXQgKEBbPGhvdj5cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlRlwiIHg7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQF0pXCJcbiAgfCBgU3RyaW5nIHggLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgU3RyaW5nIChAWzxob3Y+XCI7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiJVNcIiB4O1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiXG4gIHwgYEFzc29jIHhzIC0+XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiYEFzc29jIChAWzxob3Y+XCI7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQFs8Mj5bXCI7XG4gICAgaWdub3JlIChMaXN0LmZvbGRfbGVmdFxuICAgICAgKGZ1biBzZXAgKGtleSwgdmFsdWUpIC0+XG4gICAgICAgIGlmIHNlcCB0aGVuXG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgZm10IFwiO0AgXCI7XG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgZm10IFwiKEBbXCI7XG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgZm10IFwiJVNcIiBrZXk7XG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCI7XG4gICAgICAgICAgcHAgZm10IHZhbHVlO1xuICAgICAgICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiO1xuICAgICAgICAgIHRydWUpIGZhbHNlIHhzKTtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJALF1AXVwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiXG4gIHwgYExpc3QgeHMgLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgTGlzdCAoQFs8aG92PlwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbPDI+W1wiO1xuICAgIGlnbm9yZSAoTGlzdC5mb2xkX2xlZnRcbiAgICAgIChmdW4gc2VwIHggLT5cbiAgICAgICAgaWYgc2VwIHRoZW5cbiAgICAgICAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCI7QCBcIjtcbiAgICAgICAgICBwcCBmbXQgeDtcbiAgICAgICAgICB0cnVlKSBmYWxzZSB4cyk7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQCxdQF1cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJAXSlcIlxuICB8IGBUdXBsZSB0dXAgLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgVHVwbGUgKEBbPGhvdj5cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJAWzwyPltcIjtcbiAgICBpZ25vcmUgKExpc3QuZm9sZF9sZWZ0XG4gICAgICAoZnVuIHNlcCBlIC0+XG4gICAgICAgICBpZiBzZXAgdGhlblxuICAgICAgICAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCI7QCBcIjtcbiAgICAgICAgICAgcHAgZm10IGU7XG4gICAgICAgICAgIHRydWUpIGZhbHNlIHR1cCk7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQCxdQF1cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJAXSlcIlxuICB8IGBWYXJpYW50IChuYW1lLCB2YWx1ZSkgLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgVmFyaWFudCAoQFs8aG92PlwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIihAW1wiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVTXCIgbmFtZTtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIjtcbiAgICAobWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBOb25lIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IFwiTm9uZVwiXG4gICAgICB8IFNvbWUgeCAtPlxuICAgICAgICBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCBcIihTb21lIFwiO1xuICAgICAgICBwcCBmbXQgeDtcbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBmbXQgXCIpXCIpO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiXG5cbmxldCBzaG93IHggPVxuICBGb3JtYXQuYXNwcmludGYgXCIlYVwiIHBwIHhcblxubGV0IHJlYyBlcXVhbCBhIGIgPVxuICBtYXRjaCBhLCBiIHdpdGhcbiAgfCBgTnVsbCwgYE51bGwgLT4gdHJ1ZVxuICB8IGBCb29sIGEsIGBCb29sIGIgLT4gYSA9IGJcbiAgfCBgSW50IGEsIGBJbnQgYiAtPiBhID0gYlxuICAgIHwgYEludGxpdCBhLCBgSW50bGl0IGIgLT4gYSA9IGJcbiAgICB8IGBGbG9hdCBhLCBgRmxvYXQgYiAtPiBhID0gYlxuICAgIHwgYFN0cmluZyBhLCBgU3RyaW5nIGIgLT4gYSA9IGJcbiAgICB8IGBBc3NvYyB4cywgYEFzc29jIHlzIC0+XG4gICAgICBsZXQgY29tcGFyZV9rZXlzID0gZnVuIChrZXksIF8pIChrZXknLCBfKSAtPiBTdHJpbmcuY29tcGFyZSBrZXkga2V5JyBpblxuICAgICAgbGV0IHhzID0gTGlzdC5zdGFibGVfc29ydCBjb21wYXJlX2tleXMgeHMgaW5cbiAgICAgIGxldCB5cyA9IExpc3Quc3RhYmxlX3NvcnQgY29tcGFyZV9rZXlzIHlzIGluXG4gICAgICAobWF0Y2ggTGlzdC5mb3JfYWxsMiAoZnVuIChrZXksIHZhbHVlKSAoa2V5JywgdmFsdWUnKSAtPlxuICAgICAgICBtYXRjaCBrZXkgPSBrZXknIHdpdGhcbiAgICAgICAgfCBmYWxzZSAtPiBmYWxzZVxuICAgICAgICB8IHRydWUgLT4gZXF1YWwgdmFsdWUgdmFsdWUnKSB4cyB5cyB3aXRoXG4gICAgICB8IHJlc3VsdCAtPiByZXN1bHRcbiAgICAgIHwgZXhjZXB0aW9uIEludmFsaWRfYXJndW1lbnQgXyAtPlxuICAgICAgICAoKiB0aGUgbGlzdHMgd2VyZSBvZiBkaWZmZXJlbnQgbGVuZ3RocywgdGh1cyB1bmVxdWFsICopXG4gICAgICAgIGZhbHNlKVxuICAgIHwgYFR1cGxlIHhzLCBgVHVwbGUgeXNcbiAgICB8IGBMaXN0IHhzLCBgTGlzdCB5cyAtPlxuICAgICAgKG1hdGNoIExpc3QuZm9yX2FsbDIgZXF1YWwgeHMgeXMgd2l0aFxuICAgICAgfCByZXN1bHQgLT4gcmVzdWx0XG4gICAgICB8IGV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50IF8gLT5cbiAgICAgICAgKCogdGhlIGxpc3RzIHdlcmUgb2YgZGlmZmVyZW50IGxlbmd0aHMsIHRodXMgdW5lcXVhbCAqKVxuICAgICAgICBmYWxzZSlcbiAgICB8IGBWYXJpYW50IChuYW1lLCB2YWx1ZSksIGBWYXJpYW50IChuYW1lJywgdmFsdWUnKSAtPlxuICAgICAgKG1hdGNoIG5hbWUgPSBuYW1lJyB3aXRoXG4gICAgICB8IGZhbHNlIC0+IGZhbHNlXG4gICAgICB8IHRydWUgLT5cbiAgICAgICAgbWF0Y2ggdmFsdWUsIHZhbHVlJyB3aXRoXG4gICAgICAgIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gICAgICAgIHwgU29tZSB4LCBTb21lIHkgLT4gZXF1YWwgeCB5XG4gICAgICAgIHwgXyAtPiBmYWxzZSlcbiAgICB8IF8gLT4gZmFsc2VcblxubGV0IHByZXR0eV9wcmludCA/c3RkIG91dCB4ID0gUHJldHR5LnBwID9zdGQgb3V0IHhcbmxldCBwcmV0dHlfdG9fc3RyaW5nID9zdGQgeCA9IFByZXR0eS50b19zdHJpbmcgP3N0ZCB4XG5sZXQgcHJldHR5X3RvX2NoYW5uZWwgP3N0ZCBvYyB4ID0gUHJldHR5LnRvX2NoYW5uZWwgP3N0ZCBvYyB4XG5cbiMgMSBcImxpYi9yZWFkLm1sbFwiXG4gXG4gIG1vZHVsZSBMZXhpbmcgPVxuICAgICgqXG4gICAgICBXZSBvdmVycmlkZSBMZXhpbmcuZW5naW5lIGluIG9yZGVyIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IHBvc2l0aW9uXG4gICAgICByZWNvcmQgZWFjaCB0aW1lIGEgcnVsZSBpcyBtYXRjaGVkLlxuICAgICAgVGhpcyByZWR1Y2VzIHRvdGFsIHBhcnNpbmcgdGltZSBieSBhYm91dCAzMSUuXG4gICAgKilcbiAgc3RydWN0XG4gICAgaW5jbHVkZSBMZXhpbmdcblxuICAgIGV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcblxuICAgIGxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gICAgICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICAgICAgKCpcbiAgICAgIGlmIHJlc3VsdCA+PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgICAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgICAgIGVuZDtcbiAgICAgICopXG4gICAgICByZXN1bHRcbiAgZW5kXG5cbiAgKCogc2VlIGRlc2NyaXB0aW9uIGluIGNvbW1vbi5tbGkgKilcbiAgdHlwZSBsZXhlcl9zdGF0ZSA9IENvbW1vbi5MZXhlcl9zdGF0ZS50ID0ge1xuICAgIGJ1ZiA6IEJ1ZmZlci50O1xuICAgIG11dGFibGUgbG51bSA6IGludDtcbiAgICBtdXRhYmxlIGJvbCA6IGludDtcbiAgICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjtcbiAgfVxuXG4gIGxldCBkZWMgYyA9XG4gICAgQ2hhci5jb2RlIGMgLSA0OFxuXG4gIGxldCBoZXggYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgICAgICcwJy4uJzknIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcbiAgICAgIHwgJ2EnLi4nZicgLT4gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdhJyArIDEwXG4gICAgICB8ICdBJy4uJ0YnIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnQScgKyAxMFxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIGxldCBjdXN0b21fZXJyb3IgZGVzY3IgdiAobGV4YnVmIDogTGV4aW5nLmxleGJ1ZikgPVxuICAgIGxldCBvZmZzID0gbGV4YnVmLmxleF9hYnNfcG9zIC0gMSBpblxuICAgIGxldCBib2wgPSB2LmJvbCBpblxuICAgIGxldCBwb3MxID0gb2ZmcyArIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIC0gYm9sIC0gMSBpblxuICAgIGxldCBwb3MyID0gbWF4IHBvczEgKG9mZnMgKyBsZXhidWYubGV4X2N1cnJfcG9zIC0gYm9sKSBpblxuICAgIGxldCBmaWxlX2xpbmUgPVxuICAgICAgbWF0Y2ggdi5mbmFtZSB3aXRoXG4gICAgICAgICAgTm9uZSAtPiBcIkxpbmVcIlxuICAgICAgICB8IFNvbWUgcyAtPlxuICAgICAgICAgICAgUHJpbnRmLnNwcmludGYgXCJGaWxlICVzLCBsaW5lXCIgc1xuICAgIGluXG4gICAgbGV0IGJ5dGVzID1cbiAgICAgIGlmIHBvczEgPSBwb3MyIHRoZW5cbiAgICAgICAgUHJpbnRmLnNwcmludGYgXCJieXRlICVpXCIgKHBvczErMSlcbiAgICAgIGVsc2VcbiAgICAgICAgUHJpbnRmLnNwcmludGYgXCJieXRlcyAlaS0laVwiIChwb3MxKzEpIChwb3MyKzEpXG4gICAgaW5cbiAgICBsZXQgbXNnID0gUHJpbnRmLnNwcmludGYgXCIlcyAlaSwgJXM6XFxuJXNcIiBmaWxlX2xpbmUgdi5sbnVtIGJ5dGVzIGRlc2NyIGluXG4gICAgQ29tbW9uLmpzb25fZXJyb3IgbXNnXG5cblxuICBsZXQgbGV4ZXJfZXJyb3IgZGVzY3IgdiBsZXhidWYgPVxuICAgIGN1c3RvbV9lcnJvclxuICAgICAgKFByaW50Zi5zcHJpbnRmIFwiJXMgJyVzJ1wiIGRlc2NyIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikpXG4gICAgICB2IGxleGJ1ZlxuXG4gIGxldCBsb25nX2Vycm9yIGRlc2NyIHYgbGV4YnVmID1cbiAgICBsZXQganVuayA9IExleGluZy5sZXhlbWUgbGV4YnVmIGluXG4gICAgbGV0IGJ1Zl9zaXplID0gMzIgaW5cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSBidWZfc2l6ZSBpblxuICAgIGxldCAoKSA9IExleGVyX3V0aWxzLnJlYWRfanVua193aXRob3V0X3Bvc2l0aW9ucyBidWYgYnVmX3NpemUgbGV4YnVmIGluXG4gICAgbGV0IGV4dHJhX2p1bmsgPSBCdWZmZXIuY29udGVudHMgYnVmIGluXG4gICAgY3VzdG9tX2Vycm9yXG4gICAgICAoUHJpbnRmLnNwcmludGYgXCIlcyAnJXMlcydcIiBkZXNjciBqdW5rIGV4dHJhX2p1bmspXG4gICAgICB2IGxleGJ1ZlxuXG4gIGxldCBtaW4xMCA9IG1pbl9pbnQgLyAxMCAtIChpZiBtaW5faW50IG1vZCAxMCA9IDAgdGhlbiAwIGVsc2UgMSlcbiAgbGV0IG1heDEwID0gbWF4X2ludCAvIDEwICsgKGlmIG1heF9pbnQgbW9kIDEwID0gMCB0aGVuIDAgZWxzZSAxKVxuXG4gIGV4Y2VwdGlvbiBJbnRfb3ZlcmZsb3dcblxuICBsZXQgZXh0cmFjdF9wb3NpdGl2ZV9pbnQgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpID1cbiAgICBsZXQgc3RhcnQgPSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIGxldCBzdG9wID0gbGV4YnVmLmxleF9jdXJyX3BvcyBpblxuICAgIGxldCBzID0gbGV4YnVmLmxleF9idWZmZXIgaW5cbiAgICBsZXQgbiA9IHJlZiAwIGluXG4gICAgZm9yIGkgPSBzdGFydCB0byBzdG9wIC0gMSBkb1xuICAgICAgaWYgIW4gPj0gbWF4MTAgdGhlblxuICAgICAgICByYWlzZSBJbnRfb3ZlcmZsb3dcbiAgICAgIGVsc2VcbiAgICAgICAgbiA6PSAxMCAqICFuICsgZGVjIChCeXRlcy5nZXQgcyBpKVxuICAgIGRvbmU7XG4gICAgaWYgIW4gPCAwIHRoZW5cbiAgICAgIHJhaXNlIEludF9vdmVyZmxvd1xuICAgIGVsc2VcbiAgICAgICFuXG5cbiAgbGV0IG1ha2VfcG9zaXRpdmVfaW50IHYgbGV4YnVmID1cbiAgICAgIHRyeSBgSW50IChleHRyYWN0X3Bvc2l0aXZlX2ludCBsZXhidWYpXG4gICAgICB3aXRoIEludF9vdmVyZmxvdyAtPlxuICAgICAgICBgSW50bGl0IChMZXhpbmcubGV4ZW1lIGxleGJ1ZilcblxuICBsZXQgZXh0cmFjdF9uZWdhdGl2ZV9pbnQgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpICA9XG4gICAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyAxIGluXG4gICAgbGV0IHN0b3AgPSBsZXhidWYubGV4X2N1cnJfcG9zIGluXG4gICAgbGV0IHMgPSBsZXhidWYubGV4X2J1ZmZlciBpblxuICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICBmb3IgaSA9IHN0YXJ0IHRvIHN0b3AgLSAxIGRvXG4gICAgICBpZiAhbiA8PSBtaW4xMCB0aGVuXG4gICAgICAgIHJhaXNlIEludF9vdmVyZmxvd1xuICAgICAgZWxzZVxuICAgICAgICBuIDo9IDEwICogIW4gLSBkZWMgKEJ5dGVzLmdldCBzIGkpXG4gICAgZG9uZTtcbiAgICBpZiAhbiA+IDAgdGhlblxuICAgICAgcmFpc2UgSW50X292ZXJmbG93XG4gICAgZWxzZVxuICAgICAgIW5cblxuICBsZXQgbWFrZV9uZWdhdGl2ZV9pbnQgdiBsZXhidWYgPVxuICAgICAgdHJ5IGBJbnQgKGV4dHJhY3RfbmVnYXRpdmVfaW50IGxleGJ1ZilcbiAgICAgIHdpdGggSW50X292ZXJmbG93IC0+XG4gICAgICAgIGBJbnRsaXQgKExleGluZy5sZXhlbWUgbGV4YnVmKVxuXG4gIGxldCBuZXdsaW5lIHYgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpID1cbiAgICB2LmxudW0gPC0gdi5sbnVtICsgMTtcbiAgICB2LmJvbCA8LSBsZXhidWYubGV4X2Fic19wb3MgKyBsZXhidWYubGV4X2N1cnJfcG9zXG5cbiAgbGV0IGFkZF9sZXhlbWUgYnVmIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gICAgbGV0IGxlbiA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIEJ1ZmZlci5hZGRfc3ViYnl0ZXMgYnVmIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGxlblxuXG4gIGxldCBtYXBfbGV4ZW1lIGYgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpID1cbiAgICBsZXQgbGVuID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gICAgZiAoQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3BvcyBsZW4pIDAgbGVuXG5cbiAgdHlwZSB2YXJpYW50X2tpbmQgPSBbIGBFZGd5X2JyYWNrZXQgfCBgU3F1YXJlX2JyYWNrZXQgfCBgRG91YmxlX3F1b3RlIF1cblxuIyAxNTQgXCJsaWIvcmVhZC5tbFwiXG5sZXQgX19vY2FtbF9sZXhfdGFibGVzID0ge1xuICBMZXhpbmcubGV4X2Jhc2UgPVxuICAgXCJcXDAwMFxcMDAwXFwyMzZcXDI1NVxcMjM3XFwyNTVcXDAwM1xcMDAwXFwyMzlcXDI1NVxcMDE2XFwwMDBcXDI0MlxcMjU1XFwyNDNcXDI1NVxcXG4gICAgXFwyNDRcXDI1NVxcMjQ1XFwyNTVcXDAwMFxcMDAwXFwwMzFcXDAwMFxcMjQ5XFwyNTVcXDA4NVxcMDAwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwM1xcMDAwXFwyNTRcXDI1NVxcMDAxXFwwMDBcXDAwNFxcMDAwXFwyNTNcXDI1NVxcMDExXFwwMDBcXDI1MlxcMjU1XFwwMDNcXDAwMFxcXG4gICAgXFwwMDFcXDAwMFxcMDAzXFwwMDBcXDAwMlxcMDAwXFwwMDNcXDAwMFxcMDAwXFwwMDBcXDI1MVxcMjU1XFwwMjFcXDAwMFxcMDk3XFwwMDBcXFxuICAgIFxcMDEwXFwwMDBcXDAyMlxcMDAwXFwwMjBcXDAwMFxcMDE2XFwwMDBcXDAyMlxcMDAwXFwwMTJcXDAwMFxcMDA4XFwwMDBcXDI1MFxcMjU1XFxcbiAgICBcXDExOVxcMDAwXFwxMjlcXDAwMFxcMTM5XFwwMDBcXDE2MVxcMDAwXFwxNzFcXDAwMFxcMTgxXFwwMDBcXDE5M1xcMDAwXFwyMDlcXDAwMFxcXG4gICAgXFwyNDBcXDI1NVxcMDExXFwwMDBcXDAzOFxcMDAwXFwyNTJcXDI1NVxcMDY1XFwwMDBcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMTEwXFwwMDBcXFxuICAgIFxcMjUyXFwyNTVcXDE2M1xcMDAwXFwyNTRcXDI1NVxcMjU1XFwyNTVcXDIzNFxcMDAwXFwyNDdcXDI1NVxcMjQ4XFwyNTVcXDA0OFxcMDAxXFxcbiAgICBcXDI1MFxcMjU1XFwyNTFcXDI1NVxcMjUyXFwyNTVcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDA3MVxcMDAxXFwxMjZcXDAwMVxcXG4gICAgXFwxNDlcXDAwMVxcMjQ5XFwyNTVcXDAzOVxcMDAwXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDAzOFxcMDAwXFwxODdcXDAwMVxcMjEwXFwwMDFcXFxuICAgIFxcMjQ4XFwwMDFcXDAxNVxcMDAyXFwyNTVcXDI1NVxcMjIwXFwwMDBcXDI1M1xcMjU1XFwyNTVcXDI1NVxcMjQ1XFwwMDBcXDAzOVxcMDAyXFxcbiAgICBcXDEwOVxcMDAyXFwwMTRcXDAwMVxcMDg4XFwwMDJcXDE2NFxcMDAyXFwxODdcXDAwMlxcMjI1XFwwMDJcXDAxM1xcMDAwXFwyNTJcXDI1NVxcXG4gICAgXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDI1NVxcMjU1XFwwMTRcXDAwMFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDMwXFwwMDBcXFxuICAgIFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDE1XFwwMDBcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDAxN1xcMDAxXFxcbiAgICBcXDI1MVxcMjU1XFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDE5XFwwMDBcXDI1MlxcMjU1XFwyNTNcXDI1NVxcXG4gICAgXFwyNTRcXDI1NVxcMDE1XFwwMDBcXDI1NVxcMjU1XFwwMTZcXDAwMFxcMjU1XFwyNTVcXDAwOFxcMDAxXFwwMDVcXDAwMFxcMjUzXFwyNTVcXFxuICAgIFxcMDIzXFwwMDBcXDI1NFxcMjU1XFwwMjBcXDAwMFxcMjU1XFwyNTVcXDA0NlxcMDAwXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDA0MlxcMDAwXFxcbiAgICBcXDA1MlxcMDAwXFwwNTNcXDAwMFxcMjU1XFwyNTVcXDA1M1xcMDAwXFwwNDhcXDAwMFxcMDkxXFwwMDBcXDA5MlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwMjdcXDAwMVxcMjUwXFwyNTVcXDI1MVxcMjU1XFwxMzdcXDAwMFxcMTA0XFwwMDBcXDA4OVxcMDAwXFwwODhcXDAwMFxcMTA2XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDE0M1xcMDAwXFwxMzdcXDAwMFxcMTc3XFwwMDBcXDI1NFxcMjU1XFwxODNcXDAwMFxcMTY4XFwwMDBcXDE2NlxcMDAwXFxcbiAgICBcXDE4M1xcMDAwXFwwMDJcXDAwMFxcMjUzXFwyNTVcXDE3N1xcMDAwXFwxNzJcXDAwMFxcMTg3XFwwMDBcXDAwNFxcMDAwXFwyNTJcXDI1NVxcXG4gICAgXFwwNTNcXDAwMlxcMjUxXFwyNTVcXDI1MlxcMjU1XFwyNTNcXDI1NVxcMTAzXFwwMDFcXDI1NVxcMjU1XFwyNDhcXDAwMlxcMjU0XFwyNTVcXFxuICAgIFxcMDA2XFwwMDNcXDAzMFxcMDAzXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDQwXFwwMDNcXDA1MFxcMDAzXFxcbiAgICBcXDA3NFxcMDAzXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDYxXFwwMDNcXDA4NFxcMDAzXFwxMDhcXDAwM1xcXG4gICAgXFwyNDlcXDI1NVxcMjUwXFwyNTVcXDI1MVxcMjU1XFwyNDRcXDAwMFxcMTIwXFwwMDNcXDE0MlxcMDAzXFwxNzlcXDAwMFxcMTk0XFwwMDBcXFxuICAgIFxcMDE1XFwwMDBcXDI1NVxcMjU1XFwxOTBcXDAwMFxcMTg4XFwwMDBcXDE4N1xcMDAwXFwxOTNcXDAwMFxcMTgzXFwwMDBcXDE3OVxcMDAwXFxcbiAgICBcXDI1NFxcMjU1XFwxOTFcXDAwMFxcMjAxXFwwMDBcXDIwMFxcMDAwXFwxOTZcXDAwMFxcMjAzXFwwMDBcXDE5M1xcMDAwXFwxODlcXDAwMFxcXG4gICAgXFwyNTNcXDI1NVxcMTU3XFwwMDNcXDA5NVxcMDAzXFwxNzRcXDAwM1xcMTk2XFwwMDNcXDIwNlxcMDAzXFwyMTZcXDAwM1xcMjI4XFwwMDNcXFxuICAgIFxcMjM5XFwwMDNcXDA2MFxcMDAwXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDI1NVxcMjU1XFwwMTJcXDAwNFxcMjUyXFwyNTVcXDI1M1xcMjU1XFxcbiAgICBcXDA4N1xcMDA0XFwyNTVcXDI1NVxcMTQ1XFwwMDRcXDI1MlxcMjU1XFwyNTNcXDI1NVxcMjIxXFwwMDRcXDI1NVxcMjU1XFwyMjlcXDAwMFxcXG4gICAgXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDI1NVxcMjU1XFwyMzFcXDAwMFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDAyXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDAxOFxcMDAxXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDM0XFwwMDFcXDI1M1xcMjU1XFxcbiAgICBcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMjU0XFwyNTVcXDI1NVxcMjU1XFwwMzhcXDAwMVxcXG4gICAgXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMTIwXFwwMDFcXDI1MVxcMjU1XFwyNTJcXDI1NVxcMjUzXFwyNTVcXFxuICAgIFxcMjU0XFwyNTVcXDI1NVxcMjU1XFwyMDhcXDAwMFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMjExXFwwMDBcXDI1M1xcMjU1XFxcbiAgICBcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMTg5XFwwMDBcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMjUyXFwyNTVcXDI1M1xcMjU1XFwyNTRcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDEzXFwwMDFcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDA5NVxcMDAxXFwyNTJcXDI1NVxcMjUzXFwyNTVcXFxuICAgIFxcMjU0XFwyNTVcXDI1NVxcMjU1XFwwNTBcXDAwMVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDI2XFwwMDFcXDI1M1xcMjU1XFxcbiAgICBcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMjMzXFwwMDBcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDIyMlxcMDAwXFwyNTNcXDI1NVxcXG4gICAgXFwyNTRcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDA1XFwyMzdcXDI1NVxcMjM4XFwyNTVcXDAxMFxcMDAwXFwyNDBcXDI1NVxcMDQ0XFwwMDFcXFxuICAgIFxcMjQzXFwyNTVcXDI0NFxcMjU1XFwyNDVcXDI1NVxcMjQ2XFwyNTVcXDA2MVxcMDAxXFwwMDJcXDAwNFxcMjQ5XFwyNTVcXDA0NVxcMDA1XFxcbiAgICBcXDIwOVxcMDAwXFwyMjhcXDAwMFxcMjExXFwwMDBcXDIzMlxcMDAwXFwyMjVcXDAwMFxcMjIzXFwwMDBcXDI0MFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyMzVcXDAwMFxcMjM0XFwwMDBcXDAwOFxcMDAxXFwyNTRcXDI1NVxcMDA0XFwwMDFcXDAyM1xcMDAxXFwyNTNcXDI1NVxcMDU0XFwwMDFcXFxuICAgIFxcMjUyXFwyNTVcXDAzMVxcMDAxXFwwMjlcXDAwMVxcMDMyXFwwMDFcXDAzOVxcMDAxXFwwNDlcXDAwMVxcMDQ1XFwwMDFcXDI1MVxcMjU1XFxcbiAgICBcXDA1N1xcMDAxXFwwODJcXDAwMVxcMDgwXFwwMDFcXDA3OFxcMDAxXFwwODRcXDAwMVxcMDc0XFwwMDFcXDA4NlxcMDAxXFwyNTBcXDI1NVxcXG4gICAgXFwxMTBcXDAwNVxcMDEyXFwwMDRcXDEyM1xcMDA1XFwxNTVcXDAwNVxcMTY1XFwwMDVcXDE3N1xcMDA1XFwxODdcXDAwNVxcMTk3XFwwMDVcXFxuICAgIFxcMjQxXFwyNTVcXDE5OVxcMDAxXFwwNzdcXDAwMlxcMjUzXFwyNTVcXDI1NVxcMjU1XFwxNTRcXDAwMlxcMjIyXFwwMDVcXDIwOVxcMDA1XFxcbiAgICBcXDE1NVxcMDAyXFwyMzlcXDAwNVxcMDUzXFwwMDZcXDA3NlxcMDA2XFwxMTRcXDAwNlxcMDE2XFwwMDJcXDI1MlxcMjU1XFwyNTNcXDI1NVxcXG4gICAgXFwyNTRcXDI1NVxcMjU1XFwyNTVcXDE1MlxcMDA2XFwyNTJcXDI1NVxcMjUzXFwyNTVcXDIyN1xcMDA2XFwyNTVcXDI1NVxcMDg1XFwwMDdcXFxuICAgIFxcMjQ0XFwyNTVcXDI0NVxcMjU1XFwwMTFcXDAwMFxcMjQ3XFwyNTVcXDA3NlxcMDAyXFwyNTBcXDI1NVxcMjUxXFwyNTVcXDI1MlxcMjU1XFxcbiAgICBcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMDMxXFwwMDJcXDI0M1xcMDA1XFwwNTFcXDAwN1xcMTAwXFwwMDFcXDExNVxcMDAxXFwxMDRcXDAwMVxcXG4gICAgXFwxMzNcXDAwMVxcMTE4XFwwMDFcXDE1NFxcMDAxXFwxNzFcXDAwMVxcMjU1XFwyNTVcXDE3M1xcMDAxXFwxNzZcXDAwMVxcMTkxXFwwMDFcXFxuICAgIFxcMTg1XFwwMDFcXDE4N1xcMDAxXFwyNTNcXDAwMVxcMjMwXFwwMDFcXDIzMFxcMDAxXFwyMzRcXDAwMVxcMjQ3XFwwMDFcXDIzN1xcMDAxXFxcbiAgICBcXDIzNFxcMDAxXFwwMDlcXDAwMlxcMDE5XFwwMDJcXDAxOVxcMDAyXFwwMTVcXDAwMlxcMDIxXFwwMDJcXDAxMVxcMDAyXFwwMDdcXDAwMlxcXG4gICAgXFwxNDJcXDAwNlxcMTUyXFwwMDZcXDExNlxcMDA3XFwxNzBcXDAwN1xcMTgwXFwwMDdcXDE5MFxcMDA3XFwyMDBcXDAwN1xcMjEwXFwwMDdcXFxuICAgIFxcMjQ4XFwyNTVcXDEyMFxcMDAyXFwxNjdcXDAwMlxcMjUzXFwyNTVcXDI1NVxcMjU1XFwyMTZcXDAwMlxcMDgyXFwwMDdcXDIyMFxcMDA3XFxcbiAgICBcXDIzNlxcMDAyXFwyNDRcXDAwN1xcMDU4XFwwMDhcXDA4MVxcMDA4XFwxMTlcXDAwOFxcMDc2XFwwMDJcXDI1MlxcMjU1XFwyNTNcXDI1NVxcXG4gICAgXFwyNTRcXDI1NVxcMjU1XFwyNTVcXDE1N1xcMDA4XFwyNTJcXDI1NVxcMjUzXFwyNTVcXDIzMlxcMDA4XFwyNTVcXDI1NVxcMTM1XFwwMDJcXFxuICAgIFxcMTIwXFwwMDJcXDI1M1xcMjU1XFwxMDBcXDAwMlxcMjU0XFwyNTVcXDE4MlxcMDAyXFwyNTVcXDI1NVxcMDExXFwwMDJcXDI1NVxcMjU1XFxcbiAgICBcXDIwNFxcMDAyXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDQ2XFwwMDJcXDI1NVxcMjU1XFwxNzhcXDAwMlxcXG4gICAgXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDIzXFwwMDBcXDI1NVxcMjU1XFwxODNcXDAwMlxcMjUyXFwyNTVcXFxuICAgIFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMTg3XFwwMDJcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDEyMVxcMDAyXFxcbiAgICBcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDE4NFxcMDAyXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwwMTlcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmsgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAxN1xcMDAwXFwyNTVcXDI1NVxcMDE5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFwwMDdcXDAwMFxcMjU1XFwyNTVcXDAxOVxcMDAwXFwwMTlcXDAwMFxcMDE5XFwwMDBcXFxuICAgIFxcMDE5XFwwMDBcXDAxOVxcMDAwXFwwMTlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA5XFwwMDBcXDI1NVxcMjU1XFwwMDlcXDAwMFxcMjU1XFwyNTVcXDAwOVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDE0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDAwMVxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAzXFwwMDBcXDI1NVxcMjU1XFwwMDFcXDAwMFxcMjU1XFwyNTVcXDAwNFxcMDAwXFwwMDNcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDRcXDAwMFxcMDA0XFwwMDBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAzXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMlxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMDAzXFwwMDBcXDAwNVxcMDAwXFwwMDVcXDAwMFxcMDA1XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMjU1XFwyNTVcXDAwM1xcMDAwXFwyNTVcXDI1NVxcMDAzXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwwMDJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAxNlxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFwwMDdcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFxcbiAgICBcXDAxOFxcMDAwXFwwMThcXDAwMFxcMDE4XFwwMDBcXDAxOFxcMDAwXFwwMThcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwOFxcMDAwXFwyNTVcXDI1NVxcMDA4XFwwMDBcXDI1NVxcMjU1XFwwMDhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAxM1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDFcXDAwMFxcMDAxXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDlcXDAwMFxcMjU1XFwyNTVcXDAxMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcXG4gICAgXFwwMTFcXDAwMFxcMDExXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDFcXDAwMFxcMDAxXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMDA0XFwwMDBcXFxuICAgIFxcMDAzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHQgPVxuICAgXCJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMDU3XFwwMDBcXDA2MFxcMDAwXFwwMDBcXDAwMFxcMDYwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDY1XFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA2NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDk0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDk3XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwOTdcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEwNFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMDlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTEzXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTE3XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDEyMVxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTI2XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwxMzhcXDAwMFxcMDAwXFwwMDBcXDE0MlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwxNTRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwxNzhcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDE4N1xcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDE5NFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDFcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDIzNVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjQ0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNDlcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTNcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAwM1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDA4XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMTdcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDIyXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDMyXFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMzhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDQzXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA0N1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNTJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDU2XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDYwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA2NFxcMDAxXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA2N1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDEyMVxcMDAxXFwxMjVcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDEyOFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTM1XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDE0MFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMTQ0XFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDE5M1xcMDAxXFwxOTdcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDBcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDIwMFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjA3XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIxMlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDIyMFxcMDAxXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDIyNlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyMzNcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNDBcXDAwMVxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjQ1XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI0OVxcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1MlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X3RyYW5zID1cbiAgIFwiXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwM1xcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwM1xcMDAwXFwwMDNcXDAwMFxcMTM0XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwM1xcMDAwXFwwMDBcXDAwMFxcMTM0XFwwMDBcXDA2OVxcMDAxXFwxNDZcXDAwMVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwNjlcXDAwMVxcXG4gICAgXFwxNDZcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDEyN1xcMDAwXFwxMzlcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAzXFwwMDBcXDAwMFxcMDAwXFwwMTJcXDAwMFxcMDAzXFwwMDBcXDE3MFxcMDAwXFwxMzRcXDAwMFxcMTc1XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwN1xcMDAwXFwwMTFcXDAwMVxcMDY5XFwwMDFcXDE0NlxcMDAxXFwwMTRcXDAwMVxcMDEzXFwwMDBcXDA0OVxcMDAwXFwwMDVcXDAwMFxcXG4gICAgXFwwMTBcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwNTZcXDAwMFxcMTE4XFwwMDBcXDAwNlxcMDAwXFwxMjlcXDAwMFxcMTMwXFwwMDBcXDA1N1xcMDAwXFxcbiAgICBcXDIzN1xcMDAxXFwxMzdcXDAwMFxcMDAwXFwwMDJcXDA0OVxcMDAwXFwwMDBcXDAwMFxcMDQ4XFwwMDBcXDEzOFxcMDAwXFwxMDZcXDAwMFxcXG4gICAgXFwwNjJcXDAwMFxcMDE0XFwwMDBcXDExMFxcMDAwXFwxMDVcXDAwMFxcMDAwXFwwMDBcXDA0OVxcMDAwXFwwMTVcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFxcbiAgICBcXDAxMVxcMDAwXFwwMzBcXDAwMFxcMDQ4XFwwMDBcXDAwOFxcMDAwXFwxMTRcXDAwMFxcMjA5XFwwMDBcXDIzNlxcMDAwXFwwMDBcXDAwMVxcXG4gICAgXFwwMTNcXDAwMVxcMDI5XFwwMDBcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMDQ4XFwwMDBcXDA0OFxcMDAwXFwwMTdcXDAwMFxcMDIxXFwwMDBcXFxuICAgIFxcMDI1XFwwMDBcXDAzMlxcMDAwXFwwMzNcXDAwMFxcMDM1XFwwMDBcXDAyM1xcMDAwXFwwMjdcXDAwMFxcMDE2XFwwMDBcXDAzMVxcMDAwXFxcbiAgICBcXDAyOFxcMDAwXFwwMzRcXDAwMFxcMDE5XFwwMDBcXDAyNFxcMDAwXFwwMThcXDAwMFxcMDI2XFwwMDBcXDAyMFxcMDAwXFwwMzZcXDAwMFxcXG4gICAgXFwwNDFcXDAwMFxcMDM3XFwwMDBcXDA0OFxcMDAwXFwwMDlcXDAwMFxcMDQyXFwwMDBcXDA0M1xcMDAwXFwwNDRcXDAwMFxcMDQ1XFwwMDBcXFxuICAgIFxcMDQ2XFwwMDBcXDA0N1xcMDAwXFwwNjFcXDAwMFxcMDg1XFwwMDBcXDA0OFxcMDAwXFwwMzhcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFxcbiAgICBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwNDlcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXFxuICAgIFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDg2XFwwMDBcXDE0M1xcMDAwXFwyNTVcXDI1NVxcMDQwXFwwMDBcXDE0NFxcMDAwXFxcbiAgICBcXDE0NVxcMDAwXFwxNDZcXDAwMFxcMDU1XFwwMDBcXDE0OFxcMDAwXFwwNTVcXDAwMFxcMTQ5XFwwMDBcXDA0OFxcMDAwXFwwNTRcXDAwMFxcXG4gICAgXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXFxuICAgIFxcMDU0XFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFxcbiAgICBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcXG4gICAgXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDI1NVxcMjU1XFwwNDhcXDAwMFxcMTUwXFwwMDBcXFxuICAgIFxcMTUxXFwwMDBcXDE2MVxcMDAwXFwwNjZcXDAwMFxcMTU4XFwwMDBcXDA1M1xcMDAwXFwxNTlcXDAwMFxcMDUzXFwwMDBcXDE2MFxcMDAwXFxcbiAgICBcXDA1MVxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcXG4gICAgXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXFxuICAgIFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFxcbiAgICBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwxNjVcXDAwMFxcXG4gICAgXFwwNTFcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXFxuICAgIFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMTYyXFwwMDBcXDE2M1xcMDAwXFwxNjZcXDAwMFxcMDkzXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDAwMlxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcXG4gICAgXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwyNTVcXDI1NVxcMDc3XFwwMDBcXDEwM1xcMDAwXFwxMDhcXDAwMFxcMTE2XFwwMDBcXFxuICAgIFxcMTMyXFwwMDBcXDEzNFxcMDAwXFwxMzVcXDAwMFxcMTI4XFwwMDBcXDEzOVxcMDAwXFwxMzRcXDAwMFxcMTY0XFwwMDBcXDA5M1xcMDAwXFxcbiAgICBcXDE3MVxcMDAwXFwwNzdcXDAwMFxcMTY3XFwwMDBcXDE2OFxcMDAwXFwxNjlcXDAwMFxcMTcyXFwwMDBcXDExMlxcMDAwXFwxNzNcXDAwMFxcXG4gICAgXFwxNzRcXDAwMFxcMjEwXFwwMDBcXDIyNlxcMDAwXFwyMDhcXDAwMFxcMjExXFwwMDBcXDIxMlxcMDAwXFwwNTlcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMTM0XFwwMDBcXDIxM1xcMDAwXFwyMTRcXDAwMFxcMjE1XFwwMDBcXDIxNlxcMDAwXFwyMThcXDAwMFxcMTQxXFwwMDBcXDIxOVxcMDAwXFxcbiAgICBcXDA5M1xcMDAwXFwyMjBcXDAwMFxcMjIxXFwwMDBcXDEyM1xcMDAwXFwyMjJcXDAwMFxcMjIzXFwwMDBcXDIyNFxcMDAwXFwxMzZcXDAwMFxcXG4gICAgXFwwOTVcXDAwMFxcMjI1XFwwMDBcXDAzNVxcMDAxXFwwNjVcXDAwMVxcMjM0XFwwMDBcXDE1NVxcMDAwXFwwMDVcXDAwMVxcMDk3XFwwMDFcXFxuICAgIFxcMjUwXFwwMDBcXDI1NVxcMjU1XFwyNTRcXDAwMFxcMDU3XFwwMDFcXDA2MVxcMDAxXFwwOTVcXDAwMVxcMDc3XFwwMDBcXDA0NFxcMDAxXFxcbiAgICBcXDA5MlxcMDAxXFwwODhcXDAwMVxcMDA5XFwwMDFcXDAyOVxcMDAxXFwwNzZcXDAwMFxcMTI0XFwwMDBcXDAzM1xcMDAxXFwwMThcXDAwMVxcXG4gICAgXFwwNzVcXDAwMFxcMDk4XFwwMDBcXDAxOVxcMDAxXFwwODVcXDAwMVxcMDg2XFwwMDFcXDA4N1xcMDAxXFwxMjBcXDAwMVxcMDg5XFwwMDFcXFxuICAgIFxcMDc0XFwwMDBcXDIyNVxcMDAwXFwwNTNcXDAwMVxcMTIxXFwwMDFcXDA3M1xcMDAwXFwwOTBcXDAwMVxcMDcyXFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcXG4gICAgXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA5OFxcMDAwXFwxMTNcXDAwMVxcMTIyXFwwMDBcXDA5MVxcMDAxXFwwNjRcXDAwMFxcMDA0XFwwMDFcXFxuICAgIFxcMDkzXFwwMDFcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMTU2XFwwMDBcXDExMlxcMDAxXFwwOTRcXDAwMVxcMDk2XFwwMDFcXDA5OFxcMDAxXFwwOTlcXDAwMVxcMDQ5XFwwMDFcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMTAwXFwwMDFcXDE1N1xcMDAwXFxcbiAgICBcXDEwMVxcMDAxXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwxODNcXDAwMFxcXG4gICAgXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXFxuICAgIFxcMTg0XFwwMDBcXDAyNFxcMDAxXFwxMTJcXDAwMVxcMjU1XFwyNTVcXDAyNVxcMDAxXFwxMDJcXDAwMVxcMTAzXFwwMDFcXDEwNVxcMDAxXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcXG4gICAgXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXFxuICAgIFxcMTA2XFwwMDFcXDEwN1xcMDAxXFwwNDhcXDAwMVxcMDQwXFwwMDFcXDEwOFxcMDAxXFwxMDlcXDAwMVxcMTEwXFwwMDFcXDA4MFxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwODFcXDAwMFxcXG4gICAgXFwwODFcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwODFcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwODFcXDAwMFxcMTExXFwwMDFcXFxuICAgIFxcMDI3XFwwMDFcXDI1NVxcMjU1XFwxNzFcXDAwMVxcMDMxXFwwMDFcXDE3MFxcMDAxXFwwMjNcXDAwMVxcMDgxXFwwMDBcXDA4MVxcMDAwXFxcbiAgICBcXDA4MVxcMDAwXFwwODFcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwOTJcXDAwMFxcMTY4XFwwMDFcXDA2M1xcMDAxXFwwODBcXDAwMFxcXG4gICAgXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDI0OFxcMDAwXFwxNjVcXDAwMVxcMjUyXFwwMDBcXFxuICAgIFxcMTYyXFwwMDFcXDA1OVxcMDAxXFwwNjlcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFxcbiAgICBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMjU1XFwyNTVcXDA4MVxcMDAwXFwwODFcXDAwMFxcXG4gICAgXFwwODFcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwODFcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXFxuICAgIFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFxcbiAgICBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwMzlcXDAwMVxcMDQyXFwwMDFcXDI1NVxcMjU1XFwxNjNcXDAwMVxcXG4gICAgXFwxNjRcXDAwMVxcMTIwXFwwMDBcXDAwMlxcMDAxXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXFxuICAgIFxcMDg4XFwwMDBcXDE2NlxcMDAxXFwwNTVcXDAwMVxcMTUzXFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFxcbiAgICBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDA3XFwwMDFcXDE2N1xcMDAxXFwxNjRcXDAwMVxcMTY5XFwwMDFcXDAxNlxcMDAxXFwxNjRcXDAwMVxcXG4gICAgXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXFxuICAgIFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwNTFcXDAwMVxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFxcbiAgICBcXDA4OFxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwOTBcXDAwMFxcXG4gICAgXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXFxuICAgIFxcMDkwXFwwMDBcXDA5N1xcMDAwXFwxMzdcXDAwMVxcMTY0XFwwMDFcXDE3MlxcMDAxXFwxODVcXDAwMVxcMTM2XFwwMDFcXDE3M1xcMDAxXFxcbiAgICBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5N1xcMDAwXFwxNzlcXDAwMFxcXG4gICAgXFwxNzRcXDAwMVxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDQ2XFwwMDFcXFxuICAgIFxcMTc1XFwwMDFcXDE3NlxcMDAxXFwxODBcXDAwMFxcMTY0XFwwMDFcXDE4NFxcMDAxXFwxODFcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFxcbiAgICBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxMjRcXDAwMVxcXG4gICAgXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwxOTJcXDAwMVxcMTc4XFwwMDFcXFxuICAgIFxcMDIxXFwwMDFcXDE3OVxcMDAxXFwwOTdcXDAwMFxcMTkzXFwwMDFcXDE4MFxcMDAxXFwxODFcXDAwMVxcMTgyXFwwMDFcXDE4M1xcMDAxXFxcbiAgICBcXDE2NFxcMDAxXFwyMTZcXDAwMVxcMjU1XFwyNTVcXDA5N1xcMDAwXFwxODRcXDAwMVxcMjE2XFwwMDFcXDIwOVxcMDAxXFwwOTdcXDAwMFxcXG4gICAgXFwyMjNcXDAwMVxcMDk3XFwwMDBcXDIwOFxcMDAxXFwyMzBcXDAwMVxcMDAwXFwwMDBcXDA5N1xcMDAwXFwyMTlcXDAwMVxcMDM3XFwwMDFcXFxuICAgIFxcMjE2XFwwMDFcXDIxN1xcMDAxXFwwMDBcXDAwMFxcMjIwXFwwMDFcXDIxNlxcMDAxXFwwOTdcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDIxNlxcMDAxXFwwOTdcXDAwMFxcMDAwXFwwMDBcXDA5N1xcMDAwXFwwOTZcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcXG4gICAgXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMjE2XFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDEyNlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFxcbiAgICBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTdcXDAwMFxcMDAwXFwwMDBcXDIxOFxcMDAxXFwyNTBcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA5N1xcMDAwXFwwMDBcXDAwMFxcMTI0XFwwMDFcXDEyNFxcMDAxXFwwOTdcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjIxXFwwMDFcXDAwMFxcMDAwXFwyNTNcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDk3XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwxOTZcXDAwMVxcMDk3XFwwMDBcXDAwMFxcMDAwXFwwOTdcXDAwMFxcMDk2XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcXG4gICAgXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXFxuICAgIFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMjM1XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDI0MVxcMDAxXFwwMDBcXDAwMFxcMjU1XFwwMDFcXDI0MlxcMDAxXFwwMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcXG4gICAgXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXFxuICAgIFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwyNDZcXDAwMVxcMTI5XFwwMDFcXDEyOVxcMDAxXFxcbiAgICBcXDIyOFxcMDAxXFwwMDBcXDAwMFxcMTk2XFwwMDFcXDAwMFxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcXG4gICAgXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDAwMFxcMDAwXFwxOThcXDAwMVxcMDAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXFxuICAgIFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTk2XFwwMDFcXDIzNFxcMDAxXFxcbiAgICBcXDEzNFxcMDAxXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcXG4gICAgXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwMDBcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXFxuICAgIFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFxcbiAgICBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcXG4gICAgXFwxODJcXDAwMFxcMTgyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAxXFwwMDFcXDE3N1xcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXFxuICAgIFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFxcbiAgICBcXDE4OFxcMDAwXFwwMDBcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcXG4gICAgXFwyMDFcXDAwMVxcMjI3XFwwMDFcXDAwMFxcMDAwXFwxOTFcXDAwMFxcMjA2XFwwMDFcXDEyM1xcMDAxXFwxODlcXDAwMFxcMTkwXFwwMDBcXFxuICAgIFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFxcbiAgICBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcXG4gICAgXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE4OVxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXFxuICAgIFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5NVxcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFxcbiAgICBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOThcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjQ4XFwwMDFcXDE5NlxcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXFxuICAgIFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5NlxcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFxcbiAgICBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDIwMlxcMDAwXFwyMjdcXDAwMFxcXG4gICAgXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXFxuICAgIFxcMjI3XFwwMDBcXDIwNVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIwM1xcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFxcbiAgICBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIyNlxcMDAwXFwxOTVcXDAwMVxcXG4gICAgXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXFxuICAgIFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMzJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDZcXDAwMFxcMjIxXFwwMDFcXDIzOVxcMDAxXFxcbiAgICBcXDI1NFxcMDAxXFwwMDBcXDAwMFxcMjA3XFwwMDBcXDI0NFxcMDAxXFwwMDBcXDAwMFxcMjI1XFwwMDBcXDIwM1xcMDAwXFwyMDRcXDAwMFxcXG4gICAgXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXFxuICAgIFxcMjMyXFwwMDBcXDAwMFxcMDAwXFwyMzJcXDAwMFxcMDAwXFwwMDBcXDIyNVxcMDAxXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFxcbiAgICBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMTdcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIyNVxcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXFxuICAgIFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMzBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMjMwXFwwMDBcXDAwMFxcMDAwXFwyMjhcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXFxuICAgIFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFxcbiAgICBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcXG4gICAgXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXFxuICAgIFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwwMDBcXDAwMFxcMjI4XFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFxcbiAgICBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDE4NlxcMDAwXFwyMzFcXDAwMFxcXG4gICAgXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXFxuICAgIFxcMjMxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjQxXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDExM1xcMDAxXFwwMDBcXDAwMFxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcXG4gICAgXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXFxuICAgIFxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMDAwXFwwMDBcXDExMlxcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTkzXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwxMTJcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNDBcXDAwMFxcMjAwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDAwMFxcMDAwXFwyNDZcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwwMDBcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyMzhcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNDVcXDAwMFxcMDAwXFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwwNjlcXDAwMVxcMDcwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDY5XFwwMDFcXDA3NlxcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXFxuICAgIFxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNjlcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDc4XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMDRcXDAwMVxcMDczXFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAxXFwwMDBcXDAwMFxcMDcxXFwwMDFcXDA3NlxcMDAxXFxcbiAgICBcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcXG4gICAgXFwwNzdcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDI0M1xcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA4MFxcMDAxXFwxMTlcXDAwMVxcMDAwXFwwMDBcXDExOVxcMDAxXFwwMDBcXDAwMFxcMDgxXFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcXG4gICAgXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFxcbiAgICBcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMDgzXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4MlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMTE1XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTE3XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDExN1xcMDAxXFwwMDBcXDAwMFxcMDc1XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcXG4gICAgXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXFxuICAgIFxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDExNVxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcXG4gICAgXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXFxuICAgIFxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFxcbiAgICBcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwwMDBcXDAwMFxcXG4gICAgXFwxMjhcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXFxuICAgIFxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDE4NVxcMDAxXFwwMDBcXDAwMFxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFxcbiAgICBcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXFxuICAgIFxcMTg0XFwwMDFcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDEyOFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDY4XFwwMDFcXFxuICAgIFxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMTI3XFwwMDFcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDE4NFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTI4XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMTI4XFwwMDFcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMTI3XFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXFxuICAgIFxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDEzMVxcMDAxXFwxMzFcXDAwMVxcXG4gICAgXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXFxuICAgIFxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcXG4gICAgXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMzFcXDAwMVxcMTMxXFwwMDFcXFxuICAgIFxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcXG4gICAgXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXFxuICAgIFxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFxcbiAgICBcXDEyOFxcMDAxXFwxOTFcXDAwMVxcMTQyXFwwMDFcXDE5MVxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDE5MFxcMDAxXFwxOTBcXDAwMVxcXG4gICAgXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXFxuICAgIFxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFxcbiAgICBcXDE4NlxcMDAxXFwxODZcXDAwMVxcMDAwXFwwMDBcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcXG4gICAgXFwxMjhcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTQxXFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxNDFcXDAwMVxcMDAwXFwwMDBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQ2XFwwMDFcXDE0N1xcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTQ2XFwwMDFcXDE1NFxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcXG4gICAgXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIwMFxcMDAxXFwxNDZcXDAwMVxcMDAwXFwwMDBcXDE1M1xcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxNzdcXDAwMVxcMTUwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMjAwXFwwMDFcXDE1NlxcMDAxXFwwMDBcXDAwMFxcMTQ4XFwwMDFcXDE1NFxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXFxuICAgIFxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwxNDlcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwxMzlcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxNTdcXDAwMVxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTU4XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFxcbiAgICBcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDIwMFxcMDAxXFwwMDBcXDAwMFxcXG4gICAgXFwxNTFcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjAwXFwwMDFcXDE4N1xcMDAxXFwwMDBcXDAwMFxcMTYwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDE1OVxcMDAxXFwyMDBcXDAwMVxcMDAwXFwwMDBcXDIwMFxcMDAxXFwxOTlcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMTYxXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMTUyXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxODlcXDAwMVxcMDAwXFwwMDBcXDE4OVxcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwxODdcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcXG4gICAgXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXFxuICAgIFxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFxcbiAgICBcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcXG4gICAgXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXFxuICAgIFxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFxcbiAgICBcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcXG4gICAgXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDBcXDAwMVxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFxcbiAgICBcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcXG4gICAgXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTQ1XFwwMDFcXDIwMFxcMDAxXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDBcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAwXFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDIwMFxcMDAxXFwxOTlcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcXG4gICAgXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFxcbiAgICBcXDIwM1xcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcXG4gICAgXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcXG4gICAgXFwyMDNcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAwXFwwMDFcXFxuICAgIFxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFxcbiAgICBcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcXG4gICAgXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMjE0XFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMTNcXDAwMVxcMDAwXFwwMDBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMTNcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMTFcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfY2hlY2sgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAzXFwwMDBcXDAwMFxcMDAwXFwxMzRcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAzXFwwMDBcXDI1NVxcMjU1XFwxMzRcXDAwMFxcMDY5XFwwMDFcXDE0NlxcMDAxXFwwNTdcXDAwMFxcMjU1XFwyNTVcXDA2OVxcMDAxXFxcbiAgICBcXDE0NlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTI1XFwwMDBcXDEzOFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDNcXDAwMFxcMTY5XFwwMDBcXDEzNFxcMDAwXFwxNzRcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAxMFxcMDAxXFwwNjlcXDAwMVxcMTQ2XFwwMDFcXDAxMlxcMDAxXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwNVxcMDAwXFwxMTVcXDAwMFxcMDAwXFwwMDBcXDEyNVxcMDAwXFwxMjlcXDAwMFxcMDA1XFwwMDBcXFxuICAgIFxcMjM2XFwwMDFcXDEzNlxcMDAwXFwyNTVcXDAwMVxcMDM4XFwwMDBcXDI1NVxcMjU1XFwwMTBcXDAwMFxcMTM2XFwwMDBcXDEwMlxcMDAwXFxcbiAgICBcXDA1OFxcMDAwXFwwMDBcXDAwMFxcMTA3XFwwMDBcXDEwMlxcMDAwXFwyNTVcXDI1NVxcMDExXFwwMDBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcXG4gICAgXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDExXFwwMDBcXDAyOVxcMDAwXFwwMzhcXDAwMFxcMDAwXFwwMDBcXDExMVxcMDAwXFwyMDhcXDAwMFxcMjMzXFwwMDBcXDI1NVxcMDAwXFxcbiAgICBcXDAxMlxcMDAxXFwwMTVcXDAwMFxcMDE3XFwwMDBcXDA2MFxcMDAwXFwwMTFcXDAwMFxcMDEwXFwwMDBcXDAwMFxcMDAwXFwwMjBcXDAwMFxcXG4gICAgXFwwMjRcXDAwMFxcMDMxXFwwMDBcXDAzMlxcMDAwXFwwMzRcXDAwMFxcMDIyXFwwMDBcXDAyNlxcMDAwXFwwMDBcXDAwMFxcMDE0XFwwMDBcXFxuICAgIFxcMDI3XFwwMDBcXDAzM1xcMDAwXFwwMThcXDAwMFxcMDIzXFwwMDBcXDAwMFxcMDAwXFwwMTZcXDAwMFxcMDE5XFwwMDBcXDAzNVxcMDAwXFxcbiAgICBcXDA0MFxcMDAwXFwwMzZcXDAwMFxcMDM4XFwwMDBcXDAwMFxcMDAwXFwwNDFcXDAwMFxcMDQyXFwwMDBcXDA0M1xcMDAwXFwwNDRcXDAwMFxcXG4gICAgXFwwNDVcXDAwMFxcMDQ2XFwwMDBcXDA1OFxcMDAwXFwwODJcXDAwMFxcMDExXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXFxuICAgIFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAzOVxcMDAwXFxcbiAgICBcXDA2M1xcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcXG4gICAgXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwODVcXDAwMFxcMTQwXFwwMDBcXDA2MFxcMDAwXFwwMTNcXDAwMFxcMTQzXFwwMDBcXFxuICAgIFxcMTQ0XFwwMDBcXDE0NVxcMDAwXFwwNDhcXDAwMFxcMTQ3XFwwMDBcXDA0OFxcMDAwXFwxNDhcXDAwMFxcMDM5XFwwMDBcXDA0OFxcMDAwXFxcbiAgICBcXDA0OFxcMDAwXFwwNDhcXDAwMFxcMDQ4XFwwMDBcXDA0OFxcMDAwXFwwNDhcXDAwMFxcMDQ4XFwwMDBcXDA0OFxcMDAwXFwwNDhcXDAwMFxcXG4gICAgXFwwNDhcXDAwMFxcMDQ5XFwwMDBcXDA0OVxcMDAwXFwwNDlcXDAwMFxcMDQ5XFwwMDBcXDA0OVxcMDAwXFwwNDlcXDAwMFxcMDQ5XFwwMDBcXFxuICAgIFxcMDQ5XFwwMDBcXDA0OVxcMDAwXFwwNDlcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFxcbiAgICBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDY1XFwwMDBcXDAzOVxcMDAwXFwxNDlcXDAwMFxcXG4gICAgXFwxNTBcXDAwMFxcMTU2XFwwMDBcXDA2M1xcMDAwXFwxNTdcXDAwMFxcMDUxXFwwMDBcXDE1OFxcMDAwXFwwNTFcXDAwMFxcMTU5XFwwMDBcXFxuICAgIFxcMDUwXFwwMDBcXDA1MVxcMDAwXFwwNTFcXDAwMFxcMDUxXFwwMDBcXDA1MVxcMDAwXFwwNTFcXDAwMFxcMDUxXFwwMDBcXDA1MVxcMDAwXFxcbiAgICBcXDA1MVxcMDAwXFwwNTFcXDAwMFxcMDUxXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcXG4gICAgXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1M1xcMDAwXFwwNTNcXDAwMFxcMDUzXFwwMDBcXFxuICAgIFxcMDUzXFwwMDBcXDA1M1xcMDAwXFwwNTNcXDAwMFxcMDUzXFwwMDBcXDA1M1xcMDAwXFwwNTNcXDAwMFxcMDUzXFwwMDBcXDE1NVxcMDAwXFxcbiAgICBcXDA1MFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcXG4gICAgXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwxNjFcXDAwMFxcMTYyXFwwMDBcXDE1NVxcMDAwXFwwOTFcXDAwMFxcMDY1XFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA1NVxcMDAwXFwwNTVcXDAwMFxcMDU1XFwwMDBcXDA1NVxcMDAwXFwwNTVcXDAwMFxcMDU1XFwwMDBcXDA1NVxcMDAwXFxcbiAgICBcXDA1NVxcMDAwXFwwNTVcXDAwMFxcMDU1XFwwMDBcXDA1N1xcMDAwXFwwNjhcXDAwMFxcMTAyXFwwMDBcXDEwN1xcMDAwXFwxMTVcXDAwMFxcXG4gICAgXFwxMzFcXDAwMFxcMTMzXFwwMDBcXDEzM1xcMDAwXFwxMjVcXDAwMFxcMTM4XFwwMDBcXDEzM1xcMDAwXFwxNjNcXDAwMFxcMDk0XFwwMDBcXFxuICAgIFxcMTY1XFwwMDBcXDA2OFxcMDAwXFwxNjZcXDAwMFxcMTY3XFwwMDBcXDE2OFxcMDAwXFwxNzFcXDAwMFxcMTExXFwwMDBcXDE3MlxcMDAwXFxcbiAgICBcXDE3M1xcMDAwXFwyMDZcXDAwMFxcMjAzXFwwMDBcXDIwN1xcMDAwXFwyMTBcXDAwMFxcMjExXFwwMDBcXDA1OFxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwxMzNcXDAwMFxcMjEyXFwwMDBcXDIxM1xcMDAwXFwyMTRcXDAwMFxcMjE1XFwwMDBcXDIxN1xcMDAwXFwxNDBcXDAwMFxcMjE4XFwwMDBcXFxuICAgIFxcMDk3XFwwMDBcXDIxOVxcMDAwXFwyMjBcXDAwMFxcMTE5XFwwMDBcXDIyMVxcMDAwXFwyMjJcXDAwMFxcMjIzXFwwMDBcXDEzM1xcMDAwXFxcbiAgICBcXDA5MVxcMDAwXFwyMDNcXDAwMFxcMDM0XFwwMDFcXDA2MlxcMDAxXFwyMzNcXDAwMFxcMTUyXFwwMDBcXDAwMVxcMDAxXFwwODBcXDAwMVxcXG4gICAgXFwyNDdcXDAwMFxcMDYwXFwwMDBcXDI1MVxcMDAwXFwwNTRcXDAwMVxcMDU4XFwwMDFcXDA4MVxcMDAxXFwwNjhcXDAwMFxcMDQxXFwwMDFcXFxuICAgIFxcMDgyXFwwMDFcXDA4M1xcMDAxXFwwMDZcXDAwMVxcMDI2XFwwMDFcXDA2OFxcMDAwXFwxMTlcXDAwMFxcMDMwXFwwMDFcXDAxNVxcMDAxXFxcbiAgICBcXDA2OFxcMDAwXFwwOTRcXDAwMFxcMDE1XFwwMDFcXDA4NFxcMDAxXFwwODVcXDAwMVxcMDg2XFwwMDFcXDA3MVxcMDAxXFwwODhcXDAwMVxcXG4gICAgXFwwNjhcXDAwMFxcMjAzXFwwMDBcXDA1MFxcMDAxXFwwNzFcXDAwMVxcMDY4XFwwMDBcXDA4OVxcMDAxXFwwNjhcXDAwMFxcMDY4XFwwMDBcXFxuICAgIFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDk3XFwwMDBcXDA3NlxcMDAxXFwxMTlcXDAwMFxcMDkwXFwwMDFcXDA2M1xcMDAwXFwwMDFcXDAwMVxcXG4gICAgXFwwOTJcXDAwMVxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDc4XFwwMDBcXFxuICAgIFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFxcbiAgICBcXDA3OFxcMDAwXFwxNTJcXDAwMFxcMDc2XFwwMDFcXDA5M1xcMDAxXFwwOTVcXDAwMVxcMDk3XFwwMDFcXDA5OFxcMDAxXFwwNDVcXDAwMVxcXG4gICAgXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwOTlcXDAwMVxcMTUyXFwwMDBcXFxuICAgIFxcMTAwXFwwMDFcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDE4MFxcMDAwXFxcbiAgICBcXDE4MFxcMDAwXFwxODBcXDAwMFxcMTgwXFwwMDBcXDE4MFxcMDAwXFwxODBcXDAwMFxcMTgwXFwwMDBcXDE4MFxcMDAwXFwxODBcXDAwMFxcXG4gICAgXFwxODBcXDAwMFxcMDIwXFwwMDFcXDA3NlxcMDAxXFwwNjVcXDAwMFxcMDIwXFwwMDFcXDEwMVxcMDAxXFwxMDJcXDAwMVxcMTA0XFwwMDFcXFxuICAgIFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwxMDVcXDAwMVxcMTA2XFwwMDFcXDA0NVxcMDAxXFwwMzZcXDAwMVxcMTA3XFwwMDFcXDEwOFxcMDAxXFwxMDlcXDAwMVxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwxMTBcXDAwMVxcXG4gICAgXFwwMjZcXDAwMVxcMTIxXFwwMDFcXDE1N1xcMDAxXFwwMzBcXDAwMVxcMTU4XFwwMDFcXDAyMFxcMDAxXFwwODBcXDAwMFxcMDgwXFwwMDBcXFxuICAgIFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA5MVxcMDAwXFwxNTlcXDAwMVxcMDYyXFwwMDFcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMjQ3XFwwMDBcXDE2MFxcMDAxXFwyNTFcXDAwMFxcXG4gICAgXFwxNjFcXDAwMVxcMDU4XFwwMDFcXDA2OFxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXFxuICAgIFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwOTRcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwODZcXDAwMFxcXG4gICAgXFwwODZcXDAwMFxcMDg2XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXFxuICAgIFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDAzNlxcMDAxXFwwNDFcXDAwMVxcMDk3XFwwMDBcXDE2MlxcMDAxXFxcbiAgICBcXDE2M1xcMDAxXFwxMTlcXDAwMFxcMDAxXFwwMDFcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcXG4gICAgXFwwODdcXDAwMFxcMTY1XFwwMDFcXDA1NFxcMDAxXFwxNTJcXDAwMFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXFxuICAgIFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwMDZcXDAwMVxcMTY2XFwwMDFcXDE2N1xcMDAxXFwxNjhcXDAwMVxcMDE1XFwwMDFcXDE2OVxcMDAxXFxcbiAgICBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcXG4gICAgXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA1MFxcMDAxXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXFxuICAgIFxcMDg3XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OVxcMDAwXFxcbiAgICBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcXG4gICAgXFwwODlcXDAwMFxcMDk1XFwwMDBcXDEzM1xcMDAxXFwxNzBcXDAwMVxcMTcxXFwwMDFcXDE1NFxcMDAxXFwxMzNcXDAwMVxcMTcyXFwwMDFcXFxuICAgIFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDk1XFwwMDBcXDE3NlxcMDAwXFxcbiAgICBcXDE3M1xcMDAxXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwNDVcXDAwMVxcXG4gICAgXFwxNzRcXDAwMVxcMTc1XFwwMDFcXDE3NlxcMDAwXFwxNzZcXDAwMVxcMTU0XFwwMDFcXDE3NlxcMDAwXFwxNzZcXDAwMFxcMTc2XFwwMDBcXFxuICAgIFxcMTc2XFwwMDBcXDE3NlxcMDAwXFwxNzZcXDAwMFxcMTc2XFwwMDBcXDE3NlxcMDAwXFwxNzZcXDAwMFxcMTc2XFwwMDBcXDEyMlxcMDAxXFxcbiAgICBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDE0OFxcMDAxXFwxNzdcXDAwMVxcXG4gICAgXFwwMjBcXDAwMVxcMTc4XFwwMDFcXDA5OFxcMDAwXFwxNDhcXDAwMVxcMTc5XFwwMDFcXDE4MFxcMDAxXFwxODFcXDAwMVxcMTgyXFwwMDFcXFxuICAgIFxcMTgzXFwwMDFcXDIxNlxcMDAxXFwxOTNcXDAwMVxcMDk1XFwwMDBcXDE1NFxcMDAxXFwyMTZcXDAwMVxcMjA1XFwwMDFcXDA5OFxcMDAwXFxcbiAgICBcXDIyMlxcMDAxXFwwOTVcXDAwMFxcMjA1XFwwMDFcXDIyOVxcMDAxXFwyNTVcXDI1NVxcMDk1XFwwMDBcXDIxOFxcMDAxXFwwMzZcXDAwMVxcXG4gICAgXFwyMTVcXDAwMVxcMjE1XFwwMDFcXDI1NVxcMjU1XFwyMThcXDAwMVxcMjE1XFwwMDFcXDA5NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjE2XFwwMDFcXDA5NVxcMDAwXFwyNTVcXDI1NVxcMDk1XFwwMDBcXDA5NVxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFxcbiAgICBcXDA5NlxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFwyMTVcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMTIyXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwOTZcXDAwMFxcMDk2XFwwMDBcXFxuICAgIFxcMDk2XFwwMDBcXDA5NlxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5OFxcMDAwXFwyNTVcXDI1NVxcMjE1XFwwMDFcXDI0N1xcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDk4XFwwMDBcXDI1NVxcMjU1XFwxMjVcXDAwMVxcMTI4XFwwMDFcXDA5OFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyMjBcXDAwMVxcMjU1XFwyNTVcXDI1MVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwOThcXDAwMFxcMTIxXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDE5NFxcMDAxXFwwOThcXDAwMFxcMjU1XFwyNTVcXDA5OFxcMDAwXFwwOThcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFxcbiAgICBcXDA5NlxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcXG4gICAgXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwyMzFcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjM4XFwwMDFcXDI1NVxcMjU1XFwyNTFcXDAwMVxcMjM4XFwwMDFcXDI1NVxcMjU1XFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFxcbiAgICBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcXG4gICAgXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDI0M1xcMDAxXFwxMjVcXDAwMVxcMTI4XFwwMDFcXFxuICAgIFxcMjI0XFwwMDFcXDI1NVxcMjU1XFwxOTdcXDAwMVxcMjU1XFwyNTVcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFxcbiAgICBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMjU1XFwyNTVcXDE5NFxcMDAxXFwyNTVcXDI1NVxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcXG4gICAgXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDBcXDAwMVxcMjMxXFwwMDFcXFxuICAgIFxcMTMzXFwwMDFcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFxcbiAgICBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDI1NVxcMjU1XFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcXG4gICAgXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXFxuICAgIFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFxcbiAgICBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxOTdcXDAwMVxcMTc2XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcXG4gICAgXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXFxuICAgIFxcMTg1XFwwMDBcXDI1NVxcMjU1XFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFxcbiAgICBcXDIwMFxcMDAxXFwyMjRcXDAwMVxcMjU1XFwyNTVcXDE4NVxcMDAwXFwyMDVcXDAwMVxcMTIyXFwwMDFcXDE4NVxcMDAwXFwxODVcXDAwMFxcXG4gICAgXFwxODVcXDAwMFxcMTg1XFwwMDBcXDE4NVxcMDAwXFwxODVcXDAwMFxcMTg1XFwwMDBcXDE4NVxcMDAwXFwxODVcXDAwMFxcMTg1XFwwMDBcXFxuICAgIFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFxcbiAgICBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkxXFwwMDBcXDE5MVxcMDAwXFwxOTFcXDAwMFxcMTkxXFwwMDBcXDE5MVxcMDAwXFwxOTFcXDAwMFxcXG4gICAgXFwxOTFcXDAwMFxcMTkxXFwwMDBcXDE5MVxcMDAwXFwxOTFcXDAwMFxcMTkyXFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXFxuICAgIFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5MlxcMDAwXFxcbiAgICBcXDE5M1xcMDAxXFwyNDdcXDAwMVxcMTkyXFwwMDBcXDE5MlxcMDAwXFwxOTJcXDAwMFxcMTkyXFwwMDBcXDE5MlxcMDAwXFwxOTJcXDAwMFxcXG4gICAgXFwxOTJcXDAwMFxcMTkyXFwwMDBcXDE5MlxcMDAwXFwxOTJcXDAwMFxcMTk4XFwwMDBcXDE5OFxcMDAwXFwxOThcXDAwMFxcMTk4XFwwMDBcXFxuICAgIFxcMTk4XFwwMDBcXDE5OFxcMDAwXFwxOThcXDAwMFxcMTk4XFwwMDBcXDE5OFxcMDAwXFwxOThcXDAwMFxcMTk5XFwwMDBcXDIyNlxcMDAwXFxcbiAgICBcXDIyNlxcMDAwXFwyMjZcXDAwMFxcMjI2XFwwMDBcXDIyNlxcMDAwXFwyMjZcXDAwMFxcMjI2XFwwMDBcXDIyNlxcMDAwXFwyMjZcXDAwMFxcXG4gICAgXFwyMjZcXDAwMFxcMTk5XFwwMDBcXDEyNVxcMDAxXFwxMjhcXDAwMVxcMTk5XFwwMDBcXDE5OVxcMDAwXFwxOTlcXDAwMFxcMTk5XFwwMDBcXFxuICAgIFxcMTk5XFwwMDBcXDE5OVxcMDAwXFwxOTlcXDAwMFxcMTk5XFwwMDBcXDE5OVxcMDAwXFwxOTlcXDAwMFxcMjA0XFwwMDBcXDE5NFxcMDAxXFxcbiAgICBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcXG4gICAgXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIzMVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE5OVxcMDAwXFwyMjBcXDAwMVxcMjM4XFwwMDFcXFxuICAgIFxcMjUxXFwwMDFcXDI1NVxcMjU1XFwxOTlcXDAwMFxcMjQzXFwwMDFcXDI1NVxcMjU1XFwyMDRcXDAwMFxcMjA1XFwwMDBcXDIwNVxcMDAwXFxcbiAgICBcXDIwNVxcMDAwXFwyMDVcXDAwMFxcMjA1XFwwMDBcXDIwNVxcMDAwXFwyMDVcXDAwMFxcMjA1XFwwMDBcXDIwNVxcMDAwXFwyMDVcXDAwMFxcXG4gICAgXFwyMjVcXDAwMFxcMjU1XFwyNTVcXDIyNVxcMDAwXFwyNTVcXDI1NVxcMjI0XFwwMDFcXDIyNVxcMDAwXFwyMjVcXDAwMFxcMjI1XFwwMDBcXFxuICAgIFxcMjI1XFwwMDBcXDIyNVxcMDAwXFwyMjVcXDAwMFxcMjI1XFwwMDBcXDIyNVxcMDAwXFwyMjVcXDAwMFxcMjI1XFwwMDBcXDIwNVxcMDAwXFxcbiAgICBcXDE5N1xcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjA0XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcXG4gICAgXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIwMFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIyOFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyMjhcXDAwMFxcMjU1XFwyNTVcXDIyN1xcMDAwXFwyMjhcXDAwMFxcMjI4XFwwMDBcXDIyOFxcMDAwXFwyMjhcXDAwMFxcXG4gICAgXFwyMjhcXDAwMFxcMjI4XFwwMDBcXDIyOFxcMDAwXFwyMjhcXDAwMFxcMjI4XFwwMDBcXDIyOFxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXFxuICAgIFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFxcbiAgICBcXDIzMFxcMDAwXFwyMzBcXDAwMFxcMjMwXFwwMDBcXDIzMFxcMDAwXFwyMzBcXDAwMFxcMjMwXFwwMDBcXDIzMFxcMDAwXFwyMzBcXDAwMFxcXG4gICAgXFwyMzBcXDAwMFxcMjMwXFwwMDBcXDI1NVxcMjU1XFwyMjdcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXFxuICAgIFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMTg1XFwwMDBcXDIzMlxcMDAwXFxcbiAgICBcXDIzMlxcMDAwXFwyMzJcXDAwMFxcMjMyXFwwMDBcXDIzMlxcMDAwXFwyMzJcXDAwMFxcMjMyXFwwMDBcXDIzMlxcMDAwXFwyMzJcXDAwMFxcXG4gICAgXFwyMzJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMzdcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDc3XFwwMDFcXDI1NVxcMjU1XFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFxcbiAgICBcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwxMTNcXDAwMVxcMTEzXFwwMDFcXDExM1xcMDAxXFwxMTNcXDAwMVxcXG4gICAgXFwxMTNcXDAwMVxcMTEzXFwwMDFcXDExM1xcMDAxXFwxMTNcXDAwMVxcMTEzXFwwMDFcXDExM1xcMDAxXFwyNTVcXDI1NVxcMDc3XFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxOTJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFxcbiAgICBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcXG4gICAgXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXFxuICAgIFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDA3N1xcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIzN1xcMDAwXFwxOTlcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcXG4gICAgXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXFxuICAgIFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFxcbiAgICBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjU1XFwyNTVcXDI0MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI0MFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXFxuICAgIFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFxcbiAgICBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcXG4gICAgXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjQyXFwwMDBcXDI1NVxcMjU1XFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFxcbiAgICBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcXG4gICAgXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXFxuICAgIFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDIzN1xcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI0NVxcMDAwXFwyNTVcXDI1NVxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDA2NlxcMDAxXFwwNjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMDc5XFwwMDFcXDA3OVxcMDAxXFwwNzlcXDAwMVxcXG4gICAgXFwwNzlcXDAwMVxcMDc5XFwwMDFcXDA3OVxcMDAxXFwwNzlcXDAwMVxcMDc5XFwwMDFcXDA3OVxcMDAxXFwwNzlcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA2NlxcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAxXFwwNjZcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDY2XFwwMDFcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMDY2XFwwMDFcXFxuICAgIFxcMDY2XFwwMDFcXDA2NlxcMDAxXFwwNjZcXDAwMVxcMDY2XFwwMDFcXDA2NlxcMDAxXFwwNjZcXDAwMVxcMDY2XFwwMDFcXDA2NlxcMDAxXFxcbiAgICBcXDA2NlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA2NlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjQyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDY2XFwwMDFcXDExMlxcMDAxXFwyNTVcXDI1NVxcMTEyXFwwMDFcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMTEyXFwwMDFcXDExMlxcMDAxXFxcbiAgICBcXDExMlxcMDAxXFwxMTJcXDAwMVxcMTEyXFwwMDFcXDExMlxcMDAxXFwxMTJcXDAwMVxcMTEyXFwwMDFcXDExMlxcMDAxXFwxMTJcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA2NlxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXFxuICAgIFxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwwNjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDY2XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwxMTRcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMTVcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMTE1XFwwMDFcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMTE1XFwwMDFcXDExNVxcMDAxXFwxMTVcXDAwMVxcMTE1XFwwMDFcXDExNVxcMDAxXFxcbiAgICBcXDExNVxcMDAxXFwxMTVcXDAwMVxcMTE1XFwwMDFcXDExNVxcMDAxXFwxMTVcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcXG4gICAgXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMTE0XFwwMDFcXDExN1xcMDAxXFwxMTdcXDAwMVxcMTE3XFwwMDFcXDExN1xcMDAxXFwxMTdcXDAwMVxcMTE3XFwwMDFcXDExN1xcMDAxXFxcbiAgICBcXDExN1xcMDAxXFwxMTdcXDAwMVxcMTE3XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcXG4gICAgXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOVxcMDAxXFwxMTlcXDAwMVxcMTE5XFwwMDFcXFxuICAgIFxcMTE5XFwwMDFcXDExOVxcMDAxXFwxMTlcXDAwMVxcMTE5XFwwMDFcXDExOVxcMDAxXFwxMTlcXDAwMVxcMTE5XFwwMDFcXDI1NVxcMjU1XFxcbiAgICBcXDEyNlxcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcXG4gICAgXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEyNlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDEyOVxcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEyOVxcMDAxXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMTU1XFwwMDFcXDI1NVxcMjU1XFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXFxuICAgIFxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcXG4gICAgXFwxNTVcXDAwMVxcMjU1XFwyNTVcXDEyNlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMTI2XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEyNlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEyOVxcMDAxXFwxMjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNjZcXDAwMVxcXG4gICAgXFwxMjZcXDAwMVxcMTI5XFwwMDFcXDEyNlxcMDAxXFwxMjZcXDAwMVxcMjU1XFwyNTVcXDEyOVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMTU1XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMjlcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwxMjlcXDAwMVxcMjU1XFwyNTVcXDEyOVxcMDAxXFwxMjlcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcXG4gICAgXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTMwXFwwMDFcXDEzMFxcMDAxXFxcbiAgICBcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcXG4gICAgXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFxcbiAgICBcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEzMFxcMDAxXFwxMzBcXDAwMVxcXG4gICAgXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFxcbiAgICBcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwyNTVcXDI1NVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcXG4gICAgXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXFxuICAgIFxcMTMyXFwwMDFcXDE4NFxcMDAxXFwxMzhcXDAwMVxcMTg0XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTg0XFwwMDFcXDE4NFxcMDAxXFxcbiAgICBcXDE4NFxcMDAxXFwxODRcXDAwMVxcMTg0XFwwMDFcXDE4NFxcMDAxXFwxODRcXDAwMVxcMTg0XFwwMDFcXDE4NFxcMDAxXFwxODRcXDAwMVxcXG4gICAgXFwxODVcXDAwMVxcMTg1XFwwMDFcXDE4NVxcMDAxXFwxODVcXDAwMVxcMTg1XFwwMDFcXDE4NVxcMDAxXFwxODVcXDAwMVxcMTg1XFwwMDFcXFxuICAgIFxcMTg1XFwwMDFcXDE4NVxcMDAxXFwyNTVcXDI1NVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFxcbiAgICBcXDEzMlxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcXG4gICAgXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXFxuICAgIFxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFxcbiAgICBcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMzhcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXFxuICAgIFxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFxcbiAgICBcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcXG4gICAgXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE0MVxcMDAxXFwyNTVcXDI1NVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDNcXDAwMVxcMTQzXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMTU2XFwwMDFcXDE1NlxcMDAxXFwxNTZcXDAwMVxcMTU2XFwwMDFcXDE1NlxcMDAxXFxcbiAgICBcXDE1NlxcMDAxXFwxNTZcXDAwMVxcMTU2XFwwMDFcXDE1NlxcMDAxXFwxNTZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTk4XFwwMDFcXDE0M1xcMDAxXFwyNTVcXDI1NVxcMTQzXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE1NlxcMDAxXFwxNDNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwxOThcXDAwMVxcMTQzXFwwMDFcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMTQzXFwwMDFcXDE0M1xcMDAxXFwxNDNcXDAwMVxcXG4gICAgXFwxNDNcXDAwMVxcMTQzXFwwMDFcXDE0M1xcMDAxXFwxNDNcXDAwMVxcMTQzXFwwMDFcXDE0M1xcMDAxXFwxNDNcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDE0M1xcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDEzOFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE0M1xcMDAxXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXFxuICAgIFxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTk4XFwwMDFcXDI1NVxcMjU1XFxcbiAgICBcXDE0M1xcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxOThcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwxOThcXDAwMVxcMTg2XFwwMDFcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMTk4XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTQzXFwwMDFcXDE5OFxcMDAxXFwyNTVcXDI1NVxcMTk4XFwwMDFcXDE5OFxcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwxNDNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE4N1xcMDAxXFwyNTVcXDI1NVxcMTg3XFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDE4NlxcMDAxXFwxODdcXDAwMVxcMTg3XFwwMDFcXDE4N1xcMDAxXFwxODdcXDAwMVxcMTg3XFwwMDFcXDE4N1xcMDAxXFxcbiAgICBcXDE4N1xcMDAxXFwxODdcXDAwMVxcMTg3XFwwMDFcXDE4N1xcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcXG4gICAgXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODlcXDAwMVxcMTg5XFwwMDFcXFxuICAgIFxcMTg5XFwwMDFcXDE4OVxcMDAxXFwxODlcXDAwMVxcMTg5XFwwMDFcXDE4OVxcMDAxXFwxODlcXDAwMVxcMTg5XFwwMDFcXDE4OVxcMDAxXFxcbiAgICBcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcXG4gICAgXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MVxcMDAxXFwxOTFcXDAwMVxcMTkxXFwwMDFcXDE5MVxcMDAxXFwxOTFcXDAwMVxcMTkxXFwwMDFcXFxuICAgIFxcMTkxXFwwMDFcXDE5MVxcMDAxXFwxOTFcXDAwMVxcMTkxXFwwMDFcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXDE5OVxcMDAxXFxcbiAgICBcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXDIwMVxcMDAxXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXFxuICAgIFxcMTk5XFwwMDFcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMjAxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxOTlcXDAwMVxcMTk5XFwwMDFcXDE5OVxcMDAxXFxcbiAgICBcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjAxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMjAxXFwwMDFcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjAxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIwMVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDFcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjAxXFwwMDFcXDIwMVxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFxcbiAgICBcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXFxuICAgIFxcMjAyXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFxcbiAgICBcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFxcbiAgICBcXDIwMlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDRcXDAwMVxcXG4gICAgXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXFxuICAgIFxcMjA0XFwwMDFcXDI1NVxcMjU1XFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFxcbiAgICBcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDI1NVxcMjU1XFwyMTBcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXFxuICAgIFxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFxcbiAgICBcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcXG4gICAgXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIxMFxcMDAxXFwyNTVcXDI1NVxcMjEwXFwwMDFcXDIxMFxcMDAxXFxcbiAgICBcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcXG4gICAgXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXFxuICAgIFxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIxM1xcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIxMFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYXNlX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0X2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF90cmFuc19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY2hlY2tfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NvZGUgPVxuICAgXCJcIjtcbn1cblxubGV0IHJlYyByZWFkX2pzb24gdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9qc29uX3JlYyB2IGxleGJ1ZiAwXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9qc29uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTcxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGBCb29sIHRydWUgKVxuIyAxMDEzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAxNzIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggYEJvb2wgZmFsc2UgKVxuIyAxMDE4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAxNzMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggYE51bGwgKVxuIyAxMDIzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyAxNzQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgYEZsb2F0IG5hblxuICAgICAgICAgICAgICAgIClcbiMgMTAzNCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDQgLT5cbiMgMTgxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIGBGbG9hdCBpbmZpbml0eVxuICAgICAgICAgICAgICAgIClcbiMgMTA0NSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDUgLT5cbiMgMTg4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIGBGbG9hdCBuZWdfaW5maW5pdHlcbiAgICAgICAgICAgICAgICApXG4jIDEwNTYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA2IC0+XG4jIDE5NSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICAgICAgIGBTdHJpbmcgKGZpbmlzaF9zdHJpbmcgdiBsZXhidWYpXG4gICAgICAgICAgICAgICAgKVxuIyAxMDY4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNyAtPlxuIyAyMDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggbWFrZV9wb3NpdGl2ZV9pbnQgdiBsZXhidWYgKVxuIyAxMDczIFwibGliL3JlYWQubWxcIlxuXG4gIHwgOCAtPlxuIyAyMDQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggbWFrZV9uZWdhdGl2ZV9pbnQgdiBsZXhidWYgKVxuIyAxMDc4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgOSAtPlxuIyAyMDUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgYEZsb2F0IChmbG9hdF9vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKSlcbiAgICAgICAgICAgICAgICAgKVxuIyAxMDg5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTAgLT5cbiMgMjEzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBsZXQgYWNjID0gcmVmIFtdIGluXG4gICAgICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgcmVhZF9vYmplY3RfZW5kIGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZF9uYW1lID0gcmVhZF9pZGVudCB2IGxleGJ1ZiBpblxuICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfY29sb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgYWNjIDo9IChmaWVsZF9uYW1lLCByZWFkX2pzb24gdiBsZXhidWYpIDo6ICFhY2M7XG4gICAgICAgICAgICAgICAgICAgICB3aGlsZSB0cnVlIGRvXG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb2JqZWN0X3NlcCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkX25hbWUgPSByZWFkX2lkZW50IHYgbGV4YnVmIGluXG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY29sb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGFjYyA6PSAoZmllbGRfbmFtZSwgcmVhZF9qc29uIHYgbGV4YnVmKSA6OiAhYWNjO1xuICAgICAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl9vYmplY3QgLT5cbiAgICAgICAgICAgICAgICAgICAgIGBBc3NvYyAoTGlzdC5yZXYgIWFjYylcbiAgICAgICAgICAgICAgICAgKVxuIyAxMTE2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTEgLT5cbiMgMjM3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBsZXQgYWNjID0gcmVmIFtdIGluXG4gICAgICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgcmVhZF9hcnJheV9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgYWNjIDo9IHJlYWRfanNvbiB2IGxleGJ1ZiA6OiAhYWNjO1xuICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FycmF5X3NlcCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgYWNjIDo9IHJlYWRfanNvbiB2IGxleGJ1ZiA6OiAhYWNjO1xuICAgICAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl9hcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgYExpc3QgKExpc3QucmV2ICFhY2MpXG4gICAgICAgICAgICAgICAgIClcbiMgMTEzNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEyIC0+XG4jIDI1MyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgIGxldCBhY2MgPSByZWYgW10gaW5cbiAgICAgICAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3R1cGxlX2VuZCBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2pzb24gdiBsZXhidWYgOjogIWFjYztcbiAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF90dXBsZV9zZXAgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICBhY2MgOj0gcmVhZF9qc29uIHYgbGV4YnVmIDo6ICFhY2M7XG4gICAgICAgICAgICAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX3R1cGxlIC0+XG4gICAgICAgICAgICAgICAgICAgICAgIGBUdXBsZSAoTGlzdC5yZXYgIWFjYylcbiAgICAgICAgICAgICAgICAgKVxuIyAxMTU5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTMgLT5cbiMgMjc0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGxldCBjb25zID0gcmVhZF9pZGVudCB2IGxleGJ1ZiBpblxuICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGBWYXJpYW50IChjb25zLCBmaW5pc2hfdmFyaWFudCB2IGxleGJ1ZilcbiAgICAgICAgICAgICAgICAgKVxuIyAxMTczIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTQgLT5cbiMgMjg1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCByZWFkX2pzb24gdiBsZXhidWYgKVxuIyAxMTc4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTUgLT5cbiMgMjg2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBmaW5pc2hfY29tbWVudCB2IGxleGJ1ZjsgcmVhZF9qc29uIHYgbGV4YnVmIClcbiMgMTE4MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDE2IC0+XG4jIDI4NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggbmV3bGluZSB2IGxleGJ1ZjsgcmVhZF9qc29uIHYgbGV4YnVmIClcbiMgMTE4OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDE3IC0+XG4jIDI4OCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggcmVhZF9qc29uIHYgbGV4YnVmIClcbiMgMTE5MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDE4IC0+XG4jIDI4OSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDExOTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxOSAtPlxuIyAyOTAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJJbnZhbGlkIHRva2VuXCIgdiBsZXhidWYgKVxuIyAxMjAzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2pzb25fcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCBmaW5pc2hfc3RyaW5nIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdHJpbmdfcmVjIHYgbGV4YnVmIDU4XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX3N0cmluZ19yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDI5NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAoIEJ1ZmZlci5jb250ZW50cyB2LmJ1ZiApXG4jIDEyMTUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDI5NSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAoIGZpbmlzaF9lc2NhcGVkX2NoYXIgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaF9zdHJpbmcgdiBsZXhidWYgKVxuIyAxMjIxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAyOTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgKCBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoX3N0cmluZyB2IGxleGJ1ZiApXG4jIDEyMjcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDI5OSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxMjMyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9maW5pc2hfc3RyaW5nX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgbWFwX3N0cmluZyB2IGYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X21hcF9zdHJpbmdfcmVjIHYgZiBsZXhidWYgNjNcbmFuZCBfX29jYW1sX2xleF9tYXBfc3RyaW5nX3JlYyB2IGYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAzMDIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgKCBsZXQgYiA9IHYuYnVmIGluXG4gICAgICAgICAgICAgICAgICAgIGYgKEJ1ZmZlci5jb250ZW50cyBiKSAwIChCdWZmZXIubGVuZ3RoIGIpIClcbiMgMTI0NSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgMzA0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICggZmluaXNoX2VzY2FwZWRfY2hhciB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgbWFwX3N0cmluZyB2IGYgbGV4YnVmIClcbiMgMTI1MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzA2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICggYWRkX2xleGVtZSB2LmJ1ZiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgIG1hcF9zdHJpbmcgdiBmIGxleGJ1ZiApXG4jIDEyNTcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDMwOCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxMjYyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9tYXBfc3RyaW5nX3JlYyB2IGYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCBmaW5pc2hfZXNjYXBlZF9jaGFyIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9lc2NhcGVkX2NoYXJfcmVjIHYgbGV4YnVmIDY4XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX2VzY2FwZWRfY2hhcl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG5sZXRcbiMgMzEzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgY1xuIyAxMjc1IFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiBsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgaW5cbiMgMzEzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiBjIClcbiMgMTI3OSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgMzE0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICdcXGInIClcbiMgMTI4NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzE1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICdcXDAxMicgKVxuIyAxMjg5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyAzMTYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ1xcbicgKVxuIyAxMjk0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyAzMTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ1xccicgKVxuIyAxMjk5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNSAtPlxuIyAzMTggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ1xcdCcgKVxuIyAxMzA0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNiAtPlxubGV0XG4jIDMxOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgYVxuIyAxMzEwIFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMSlcbmFuZFxuIyAzMTkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYlxuIyAxMzE1IFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMilcbmFuZFxuIyAzMTkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjXG4jIDEzMjAgXCJsaWIvcmVhZC5tbFwiXG49IExleGluZy5zdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIChsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgKyAzKVxuYW5kXG4jIDMxOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFxuIyAxMzI1IFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgNCkgaW5cbiMgMzIwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbGV0IHggPVxuICAgICAgICAgICAgIChoZXggYSBsc2wgMTIpIGxvciAoaGV4IGIgbHNsIDgpIGxvciAoaGV4IGMgbHNsIDQpIGxvciBoZXggZFxuICAgICAgICAgICBpblxuICAgICAgICAgICBpZiB4ID49IDB4RDgwMCAmJiB4IDw9IDB4REJGRiB0aGVuXG4gICAgICAgICAgICAgZmluaXNoX3N1cnJvZ2F0ZV9wYWlyIHYgeCBsZXhidWZcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIENvZGVjLnV0Zjhfb2ZfY29kZSB2LmJ1ZiB4XG5cbiAgICAgICAgIClcbiMgMTMzNyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDcgLT5cbiMgMzI5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbG9uZ19lcnJvciBcIkludmFsaWQgZXNjYXBlIHNlcXVlbmNlXCIgdiBsZXhidWYgKVxuIyAxMzQyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgOCAtPlxuIyAzMzAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTM0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX2VzY2FwZWRfY2hhcl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGZpbmlzaF9zdXJyb2dhdGVfcGFpciB2IHggbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdXJyb2dhdGVfcGFpcl9yZWMgdiB4IGxleGJ1ZiA4MlxuYW5kIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdXJyb2dhdGVfcGFpcl9yZWMgdiB4IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbmxldFxuIyAzMzMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgYVxuIyAxMzYwIFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMilcbmFuZFxuIyAzMzMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiXG4jIDEzNjUgXCJsaWIvcmVhZC5tbFwiXG49IExleGluZy5zdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIChsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgKyAzKVxuYW5kXG4jIDMzMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1xuIyAxMzcwIFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgNClcbmFuZFxuIyAzMzMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFxuIyAxMzc1IFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgNSkgaW5cbiMgMzM0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbGV0IHkgPVxuICAgICAgICAgICAgIChoZXggYSBsc2wgMTIpIGxvciAoaGV4IGIgbHNsIDgpIGxvciAoaGV4IGMgbHNsIDQpIGxvciBoZXggZFxuICAgICAgICAgICBpblxuICAgICAgICAgICBpZiB5ID49IDB4REMwMCAmJiB5IDw9IDB4REZGRiB0aGVuXG4gICAgICAgICAgICAgQ29kZWMudXRmOF9vZl9zdXJyb2dhdGVfcGFpciB2LmJ1ZiB4IHlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGxvbmdfZXJyb3IgXCJJbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRlwiXG4gICAgICAgICAgICAgICB2IGxleGJ1ZlxuICAgICAgICAgKVxuIyAxMzg3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAzNDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiTWlzc2luZyBlc2NhcGUgc2VxdWVuY2UgcmVwcmVzZW50aW5nIGxvdyBzdXJyb2dhdGUgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRlwiIHYgbGV4YnVmIClcbiMgMTM5MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzQ1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDEzOTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdXJyb2dhdGVfcGFpcl9yZWMgdiB4IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX3N0cmluZ2xpdCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9maW5pc2hfc3RyaW5nbGl0X3JlYyB2IGxleGJ1ZiA5MVxuYW5kIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdHJpbmdsaXRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAzNTAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsZXQgbGVuID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gICAgICAgICAgIGxldCBzID0gQnl0ZXMuY3JlYXRlIChsZW4rMSkgaW5cbiAgICAgICAgICAgQnl0ZXMuc2V0IHMgMCAnXCInO1xuICAgICAgICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIHMgMSBsZW47XG4gICAgICAgICAgIEJ5dGVzLnRvX3N0cmluZyBzXG4gICAgICAgICApXG4jIDE0MTUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDM1NiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGxvbmdfZXJyb3IgXCJJbnZhbGlkIHN0cmluZyBsaXRlcmFsXCIgdiBsZXhidWYgKVxuIyAxNDIwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAzNTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTQyNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX3N0cmluZ2xpdF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGZpbmlzaF92YXJpYW50IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF92YXJpYW50X3JlYyB2IGxleGJ1ZiAxMDJcbmFuZCBfX29jYW1sX2xleF9maW5pc2hfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDM2MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGxldCB4ID0gcmVhZF9qc29uIHYgbGV4YnVmIGluXG4gICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgIHJlYWRfZ3QgdiBsZXhidWY7XG4gICAgICAgICAgIFNvbWUgeCApXG4jIDE0NDAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDM2NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIE5vbmUgKVxuIyAxNDQ1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAzNjUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJzonIG9yICc+JyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDE0NTAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDM2NiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNDU1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9maW5pc2hfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfbHQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9sdF9yZWMgdiBsZXhidWYgMTA3XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9sdF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDM2OSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDE0NjcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDM3MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJzwnIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTQ3MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzcxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNDc3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2x0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9ndCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2d0X3JlYyB2IGxleGJ1ZiAxMTFcbmFuZCBfX29jYW1sX2xleF9yZWFkX2d0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMzc0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggKCkgKVxuIyAxNDg5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAzNzUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJz4nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTQ5NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzc2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE0OTkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfZ3RfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2NvbW1hIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWFfcmVjIHYgbGV4YnVmIDExNVxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfY29tbWFfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAzNzkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCAoKSApXG4jIDE1MTEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDM4MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxNTE2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAzODEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTUyMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9jb21tYV9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHN0YXJ0X2FueV92YXJpYW50IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3N0YXJ0X2FueV92YXJpYW50X3JlYyB2IGxleGJ1ZiAxMTlcbmFuZCBfX29jYW1sX2xleF9zdGFydF9hbnlfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDM4NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBgRWRneV9icmFja2V0IClcbiMgMTUzMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgMzg1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIEJ1ZmZlci5jbGVhciB2LmJ1ZjtcbiAgICAgICAgICAgICAgIGBEb3VibGVfcXVvdGUgKVxuIyAxNTM5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAzODcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggYFNxdWFyZV9icmFja2V0IClcbiMgMTU0NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgMzg4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnPCcsICdcXFwiJyBvciAnWycgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxNTQ5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyAzODkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE1NTQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3N0YXJ0X2FueV92YXJpYW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX2NvbW1lbnQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfZmluaXNoX2NvbW1lbnRfcmVjIHYgbGV4YnVmIDEyNVxuYW5kIF9fb2NhbWxfbGV4X2ZpbmlzaF9jb21tZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMzkyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggKCkgKVxuIyAxNTY2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAzOTMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiVW50ZXJtaW5hdGVkIGNvbW1lbnRcIiB2IGxleGJ1ZiApXG4jIDE1NzEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDM5NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIG5ld2xpbmUgdiBsZXhidWY7IGZpbmlzaF9jb21tZW50IHYgbGV4YnVmIClcbiMgMTU3NiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgMzk1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggZmluaXNoX2NvbW1lbnQgdiBsZXhidWYgKVxuIyAxNTgxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9maW5pc2hfY29tbWVudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfZW9mIGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2VvZl9yZWMgbGV4YnVmIDEzMVxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfZW9mX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDQwMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICggdHJ1ZSApXG4jIDE1OTMgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDQwNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICggZmFsc2UgKVxuIyAxNTk4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2VvZl9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX3NwYWNlIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfc3BhY2VfcmVjIHYgbGV4YnVmIDEzM1xuYW5kIF9fb2NhbWxfbGV4X3JlYWRfc3BhY2VfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA0MDcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG5ld2xpbmUgdiBsZXhidWY7IHJlYWRfc3BhY2UgdiBsZXhidWYgKVxuIyAxNjEwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA0MDggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGZpbmlzaF9jb21tZW50IHYgbGV4YnVmOyByZWFkX3NwYWNlIHYgbGV4YnVmIClcbiMgMTYxNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNDA5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBuZXdsaW5lIHYgbGV4YnVmOyByZWFkX3NwYWNlIHYgbGV4YnVmIClcbiMgMTYyMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNDEwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCByZWFkX3NwYWNlIHYgbGV4YnVmIClcbiMgMTYyNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDQgLT5cbiMgNDExIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoKSApXG4jIDE2MzAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfc3BhY2VfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX251bGwgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9udWxsX3JlYyB2IGxleGJ1ZiAxNDBcbmFuZCBfX29jYW1sX2xleF9yZWFkX251bGxfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA0MTQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAoICgpIClcbiMgMTY0MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNDE1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ251bGwnIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTY0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNDE2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTY1MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9udWxsX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9udWxsX2lmX3Bvc3NpYmxlIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfbnVsbF9pZl9wb3NzaWJsZV9yZWMgdiBsZXhidWYgMTQ3XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9udWxsX2lmX3Bvc3NpYmxlX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNDE5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgKCB0cnVlIClcbiMgMTY2NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNDIwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgKCBmYWxzZSApXG4jIDE2NjkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfbnVsbF9pZl9wb3NzaWJsZV9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfYm9vbCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2Jvb2xfcmVjIHYgbGV4YnVmIDE1MlxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfYm9vbF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDQyMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCB0cnVlIClcbiMgMTY4MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNDI0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGZhbHNlIClcbiMgMTY4NiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNDI3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIHRydWUgKVxuIyAxNjkxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA0MjggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggZmFsc2UgKVxuIyAxNjk2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyA0MzAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTcwMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDUgLT5cbiMgNDMxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNzA2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2Jvb2xfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2ludCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2ludF9yZWMgdiBsZXhidWYgMTc2XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9pbnRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA0MzQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggdHJ5IGV4dHJhY3RfcG9zaXRpdmVfaW50IGxleGJ1ZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBJbnRfb3ZlcmZsb3cgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4ZXJfZXJyb3IgXCJJbnQgb3ZlcmZsb3dcIiB2IGxleGJ1ZiApXG4jIDE3MjAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDQzNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCB0cnkgZXh0cmFjdF9uZWdhdGl2ZV9pbnQgbGV4YnVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEludF9vdmVyZmxvdyAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhlcl9lcnJvciBcIkludCBvdmVyZmxvd1wiIHYgbGV4YnVmIClcbiMgMTcyNyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNDQwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoICgqIFN1cHBvcnQgZm9yIGRvdWJsZS1xdW90ZWQgXCJpbnRzXCIgKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlci5jbGVhciB2LmJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzID0gZmluaXNoX3N0cmluZyB2IGxleGJ1ZiBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEFueSBPQ2FtbC1jb21wbGlhbnQgaW50IHdpbGwgcGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbWJlZGRlZCB1bmRlcnNjb3JlcyAqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRfb2Zfc3RyaW5nIHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21fZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGFuIGludGVnZXIgYnV0IGZvdW5kIGEgc3RyaW5nIHRoYXQgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc24ndCBldmVuIHJlcHJlc2VudCBhbiBpbnRlZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2IGxleGJ1ZlxuICAgICAgICAgICAgICAgICAgICAgICAgIClcbiMgMTc0NSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNDU0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCBpbnRlZ2VyIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTc1MCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDQgLT5cbiMgNDU1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNzU1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2ludF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfaW50MzIgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9pbnQzMl9yZWMgdiBsZXhidWYgMTg1XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9pbnQzMl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDQ1OCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCB0cnkgSW50MzIub2Zfc3RyaW5nIChMZXhpbmcubGV4ZW1lIGxleGJ1ZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhlcl9lcnJvciBcIkludDMyIG92ZXJmbG93XCIgdiBsZXhidWYgKVxuIyAxNzY5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA0NjEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggKCogU3VwcG9ydCBmb3IgZG91YmxlLXF1b3RlZCBcImludHNcIiAqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmNsZWFyIHYuYnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHMgPSBmaW5pc2hfc3RyaW5nIHYgbGV4YnVmIGluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQW55IE9DYW1sLWNvbXBsaWFudCBpbnQgd2lsbCBwYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIG5vdGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVtYmVkZGVkIHVuZGVyc2NvcmVzICopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludDMyLm9mX3N0cmluZyBzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIF8gLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tX2Vycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBhbiBpbnQzMiBidXQgZm91bmQgYSBzdHJpbmcgdGhhdCBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2Vzbid0IGV2ZW4gcmVwcmVzZW50IGFuIGludGVnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgbGV4YnVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgKVxuIyAxNzg3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA0NzUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkIGludDMyIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTc5MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNDc2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNzk3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2ludDMyX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9pbnQ2NCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2ludDY0X3JlYyB2IGxleGJ1ZiAxOTJcbmFuZCBfX29jYW1sX2xleF9yZWFkX2ludDY0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNDc5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIHRyeSBJbnQ2NC5vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleGVyX2Vycm9yIFwiSW50MzIgb3ZlcmZsb3dcIiB2IGxleGJ1ZiApXG4jIDE4MTEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDQ4MiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCAoKiBTdXBwb3J0IGZvciBkb3VibGUtcXVvdGVkIFwiaW50c1wiICopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcyA9IGZpbmlzaF9zdHJpbmcgdiBsZXhidWYgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBBbnkgT0NhbWwtY29tcGxpYW50IGludCB3aWxsIHBhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyBoZXhhZGVjaW1hbCBhbmQgb2N0YWwgbm90YXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZW1iZWRkZWQgdW5kZXJzY29yZXMgKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50NjQub2Zfc3RyaW5nIHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21fZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGFuIGludDY0IGJ1dCBmb3VuZCBhIHN0cmluZyB0aGF0IFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNuJ3QgZXZlbiByZXByZXNlbnQgYW4gaW50ZWdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiBsZXhidWZcbiAgICAgICAgICAgICAgICAgICAgICAgICApXG4jIDE4MjkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDQ5NiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgaW50NjQgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxODM0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA0OTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE4MzkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfaW50NjRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX251bWJlciB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX251bWJlcl9yZWMgdiBsZXhidWYgMTk5XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9udW1iZXJfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA1MDAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggbmFuIClcbiMgMTg1MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNTAxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGluZmluaXR5IClcbiMgMTg1NiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNTAyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIG5lZ19pbmZpbml0eSApXG4jIDE4NjEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDUwMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCBmbG9hdF9vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKSApXG4jIDE4NjYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA0IC0+XG4jIDUwNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICAgICBsZXQgcyA9IGZpbmlzaF9zdHJpbmcgdiBsZXhidWYgaW5cbiAgICAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICAgICAoKiBBbnkgT0NhbWwtY29tcGxpYW50IGZsb2F0IHdpbGwgcGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbWJlZGRlZCB1bmRlcnNjb3Jlcy4gKilcbiAgICAgICAgICAgICAgICAgICAgZmxvYXRfb2Zfc3RyaW5nIHNcbiAgICAgICAgICAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTmFOXCIgLT4gbmFuXG4gICAgICAgICAgICAgICAgICAgICAgfCBcIkluZmluaXR5XCIgLT4gaW5maW5pdHlcbiAgICAgICAgICAgICAgICAgICAgICB8IFwiLUluZmluaXR5XCIgLT4gbmVnX2luZmluaXR5XG4gICAgICAgICAgICAgICAgICAgICAgfCBfIC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbV9lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSBudW1iZXIgYnV0IGZvdW5kIGEgc3RyaW5nIHRoYXQgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc24ndCBldmVuIHJlcHJlc2VudCBhIG51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdiBsZXhidWZcbiAgICAgICAgICAgICAgICApXG4jIDE4ODggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA1IC0+XG4jIDUyMiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgbnVtYmVyIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTg5MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDYgLT5cbiMgNTIzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxODk4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX251bWJlcl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfc3RyaW5nIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfc3RyaW5nX3JlYyB2IGxleGJ1ZiAyMzNcbmFuZCBfX29jYW1sX2xleF9yZWFkX3N0cmluZ19yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDUyNiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICBmaW5pc2hfc3RyaW5nIHYgbGV4YnVmIClcbiMgMTkxMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNTI4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnXFxcIicgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxOTE2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA1MjkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE5MjEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfc3RyaW5nX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9pZGVudCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2lkZW50X3JlYyB2IGxleGJ1ZiAyMzdcbmFuZCBfX29jYW1sX2xleF9yZWFkX2lkZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNTMyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIEJ1ZmZlci5jbGVhciB2LmJ1ZjtcbiAgICAgICAgICAgICAgIGZpbmlzaF9zdHJpbmcgdiBsZXhidWYgKVxuIyAxOTM0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxubGV0XG4jIDUzNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgc1xuIyAxOTQwIFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZSBsZXhidWYgbGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zIGxleGJ1Zi5MZXhpbmcubGV4X2N1cnJfcG9zIGluXG4jIDUzNSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBzIClcbiMgMTk0NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNTM2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCBzdHJpbmcgb3IgaWRlbnRpZmllciBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDE5NDkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDUzNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTk1NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9pZGVudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIG1hcF9pZGVudCB2IGYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X21hcF9pZGVudF9yZWMgdiBmIGxleGJ1ZiAyNDJcbmFuZCBfX29jYW1sX2xleF9tYXBfaWRlbnRfcmVjIHYgZiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU0MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICBtYXBfc3RyaW5nIHYgZiBsZXhidWYgKVxuIyAxOTY3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA1NDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbWFwX2xleGVtZSBmIGxleGJ1ZiApXG4jIDE5NzIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDU0NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgc3RyaW5nIG9yIGlkZW50aWZpZXIgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxOTc3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA1NDUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE5ODIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X21hcF9pZGVudF9yZWMgdiBmIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9zZXF1ZW5jZSByZWFkX2NlbGwgaW5pdF9hY2MgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9zZXF1ZW5jZV9yZWMgcmVhZF9jZWxsIGluaXRfYWNjIHYgbGV4YnVmIDI0N1xuYW5kIF9fb2NhbWxfbGV4X3JlYWRfc2VxdWVuY2VfcmVjIHJlYWRfY2VsbCBpbml0X2FjYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNTQ4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxldCBhY2MgPSByZWYgaW5pdF9hY2MgaW5cbiAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICByZWFkX2FycmF5X2VuZCBsZXhidWY7XG4gICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2NlbGwgIWFjYyB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgcmVhZF9hcnJheV9zZXAgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICBhY2MgOj0gcmVhZF9jZWxsICFhY2MgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX2FycmF5IC0+XG4gICAgICAgICAgICAgICAgICFhY2NcbiAgICAgICAgICAgICApXG4jIDIwMDggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDU2MyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ1snIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjAxMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNTY0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMDE4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3NlcXVlbmNlX3JlYyByZWFkX2NlbGwgaW5pdF9hY2MgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfbGlzdF9yZXYgcmVhZF9jZWxsIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfbGlzdF9yZXZfcmVjIHJlYWRfY2VsbCB2IGxleGJ1ZiAyNTFcbmFuZCBfX29jYW1sX2xleF9yZWFkX2xpc3RfcmV2X3JlYyByZWFkX2NlbGwgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU2NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsZXQgYWNjID0gcmVmIFtdIGluXG4gICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgcmVhZF9hcnJheV9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICBhY2MgOj0gcmVhZF9jZWxsIHYgbGV4YnVmIDo6ICFhY2M7XG4gICAgICAgICAgICAgICAgIHdoaWxlIHRydWUgZG9cbiAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIHJlYWRfYXJyYXlfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgYWNjIDo9IHJlYWRfY2VsbCB2IGxleGJ1ZiA6OiAhYWNjO1xuICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl9hcnJheSAtPlxuICAgICAgICAgICAgICAgICAhYWNjXG4gICAgICAgICAgICAgKVxuIyAyMDQ0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA1ODIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICdbJyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDIwNDkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDU4MyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjA1NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9saXN0X3Jldl9yZWMgcmVhZF9jZWxsIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2FycmF5X2VuZCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9hcnJheV9lbmRfcmVjIGxleGJ1ZiAyNTVcbmFuZCBfX29jYW1sX2xleF9yZWFkX2FycmF5X2VuZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA1ODYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggcmFpc2UgQ29tbW9uLkVuZF9vZl9hcnJheSApXG4jIDIwNjYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDU4NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDIwNzEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfYXJyYXlfZW5kX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfYXJyYXlfc2VwIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfYXJyYXlfc2VwX3JlYyB2IGxleGJ1ZiAyNTdcbmFuZCBfX29jYW1sX2xleF9yZWFkX2FycmF5X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU5MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDIwODMgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDU5MSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCByYWlzZSBDb21tb24uRW5kX29mX2FycmF5IClcbiMgMjA4OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNTkyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJ10nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjA5MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNTkzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMDk4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2FycmF5X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfdHVwbGUgcmVhZF9jZWxsIGluaXRfYWNjIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfcmVjIHJlYWRfY2VsbCBpbml0X2FjYyB2IGxleGJ1ZiAyNjJcbmFuZCBfX29jYW1sX2xleF9yZWFkX3R1cGxlX3JlYyByZWFkX2NlbGwgaW5pdF9hY2MgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU5NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgICAgICAgICAgICAgICAgICAgbGV0IGFjYyA9IHJlZiBpbml0X2FjYyBpblxuICAgICAgICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfdHVwbGVfZW5kIGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgYWNjIDo9IHJlYWRfY2VsbCAhcG9zICFhY2MgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGluY3IgcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSB0cnVlIGRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3R1cGxlX3NlcCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2NlbGwgIXBvcyAhYWNjIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIGluY3IgcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl90dXBsZSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAhYWNjXG4gICAgICAgICAgICAgICAgIClcbiMgMjEzMiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNjIwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnKScgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyMTM3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA2MjEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDIxNDIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfcmVjIHJlYWRfY2VsbCBpbml0X2FjYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF90dXBsZV9lbmQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfZW5kX3JlYyBsZXhidWYgMjY2XG5hbmQgX19vY2FtbF9sZXhfcmVhZF90dXBsZV9lbmRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNjI0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIHJhaXNlIENvbW1vbi5FbmRfb2ZfdHVwbGUgKVxuIyAyMTU0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA2MjUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMTU5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3R1cGxlX2VuZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX3R1cGxlX2VuZDIgdiBzdGQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfZW5kMl9yZWMgdiBzdGQgbGV4YnVmIDI2OFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfZW5kMl9yZWMgdiBzdGQgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA2MjggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggaWYgc3RkIHRoZW5cbiAgICAgICAgICAgICAgICAgbG9uZ19lcnJvciBcIkV4cGVjdGVkICcpJyBvciAnJyBidXQgZm91bmRcIiB2IGxleGJ1ZlxuICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICByYWlzZSBDb21tb24uRW5kX29mX3R1cGxlIClcbiMgMjE3NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNjMyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGlmIHN0ZCB0aGVuXG4gICAgICAgICAgICAgICAgIHJhaXNlIENvbW1vbi5FbmRfb2ZfdHVwbGVcbiAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgbG9uZ19lcnJvciBcIkV4cGVjdGVkICddJyBvciAnJyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDIxODIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDYzNiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDIxODcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfZW5kMl9yZWMgdiBzdGQgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX3R1cGxlX3NlcCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX3R1cGxlX3NlcF9yZWMgdiBsZXhidWYgMjcxXG5hbmQgX19vY2FtbF9sZXhfcmVhZF90dXBsZV9zZXBfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA2MzkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMTk5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA2NDAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggcmFpc2UgQ29tbW9uLkVuZF9vZl90dXBsZSApXG4jIDIyMDQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDY0MSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJywnIG9yICcpJyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDIyMDkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDY0MiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjIxNCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF90dXBsZV9zZXBfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX3R1cGxlX3NlcDIgdiBzdGQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfc2VwMl9yZWMgdiBzdGQgbGV4YnVmIDI3NlxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfc2VwMl9yZWMgdiBzdGQgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA2NDUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMjI2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA2NDYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggaWYgc3RkIHRoZW5cbiAgICAgICAgICAgICAgICAgbG9uZ19lcnJvciBcIkV4cGVjdGVkICcsJyBvciAnXScgYnV0IGZvdW5kXCIgdiBsZXhidWZcbiAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgcmFpc2UgQ29tbW9uLkVuZF9vZl90dXBsZSApXG4jIDIyMzQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDY1MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBpZiBzdGQgdGhlblxuICAgICAgICAgICAgICAgICByYWlzZSBDb21tb24uRW5kX29mX3R1cGxlXG4gICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJyknIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjI0MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNjU0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJyknIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjI0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDQgLT5cbiMgNjU1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMjUyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3R1cGxlX3NlcDJfcmVjIHYgc3RkIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9hYnN0cmFjdF9maWVsZHMgcmVhZF9rZXkgcmVhZF9maWVsZCBpbml0X2FjYyB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2Fic3RyYWN0X2ZpZWxkc19yZWMgcmVhZF9rZXkgcmVhZF9maWVsZCBpbml0X2FjYyB2IGxleGJ1ZiAyODJcbmFuZCBfX29jYW1sX2xleF9yZWFkX2Fic3RyYWN0X2ZpZWxkc19yZWMgcmVhZF9rZXkgcmVhZF9maWVsZCBpbml0X2FjYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNjU5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxldCBhY2MgPSByZWYgaW5pdF9hY2MgaW5cbiAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICByZWFkX29iamVjdF9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICBsZXQgZmllbGRfbmFtZSA9IHJlYWRfa2V5IHYgbGV4YnVmIGluXG4gICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgIHJlYWRfY29sb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2ZpZWxkICFhY2MgZmllbGRfbmFtZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgcmVhZF9vYmplY3Rfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkX25hbWUgPSByZWFkX2tleSB2IGxleGJ1ZiBpblxuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgcmVhZF9jb2xvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2ZpZWxkICFhY2MgZmllbGRfbmFtZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICB3aXRoIENvbW1vbi5FbmRfb2Zfb2JqZWN0IC0+XG4gICAgICAgICAgICAgICAgICFhY2NcbiAgICAgICAgICAgICApXG4jIDIyODYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDY4MiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ3snIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjI5MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNjgzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMjk2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2Fic3RyYWN0X2ZpZWxkc19yZWMgcmVhZF9rZXkgcmVhZF9maWVsZCBpbml0X2FjYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9sY3VybCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2xjdXJsX3JlYyB2IGxleGJ1ZiAyODZcbmFuZCBfX29jYW1sX2xleF9yZWFkX2xjdXJsX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNjg2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMjMwOCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNjg3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAneycgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyMzEzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA2ODggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDIzMTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfbGN1cmxfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX29iamVjdF9lbmQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfb2JqZWN0X2VuZF9yZWMgbGV4YnVmIDI5MFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfb2JqZWN0X2VuZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA2OTEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggcmFpc2UgQ29tbW9uLkVuZF9vZl9vYmplY3QgKVxuIyAyMzMwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA2OTIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMzM1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX29iamVjdF9lbmRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9vYmplY3Rfc2VwIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfb2JqZWN0X3NlcF9yZWMgdiBsZXhidWYgMjkyXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9vYmplY3Rfc2VwX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNjk1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMjM0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNjk2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIHJhaXNlIENvbW1vbi5FbmRfb2Zfb2JqZWN0IClcbiMgMjM1MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNjk3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJ30nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjM1NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNjk4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMzYyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX29iamVjdF9zZXBfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2NvbG9uIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfY29sb25fcmVjIHYgbGV4YnVmIDI5N1xuYW5kIF9fb2NhbWxfbGV4X3JlYWRfY29sb25fcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA3MDEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMzc0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA3MDIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICc6JyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDIzNzkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDcwMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjM4NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9jb2xvbl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHN0YXJ0X2FueV90dXBsZSB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9zdGFydF9hbnlfdHVwbGVfcmVjIHYgbGV4YnVmIDMwMVxuYW5kIF9fb2NhbWxfbGV4X3N0YXJ0X2FueV90dXBsZV9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDcwNiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBmYWxzZSApXG4jIDIzOTYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDcwNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCB0cnVlIClcbiMgMjQwMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNzA4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnKCcgb3IgJ1snIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjQwNiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNzA5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNDExIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9zdGFydF9hbnlfdHVwbGVfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2xwYXIgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9scGFyX3JlYyB2IGxleGJ1ZiAzMDZcbmFuZCBfX29jYW1sX2xleF9yZWFkX2xwYXJfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA3MTIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyNDIzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA3MTMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICcoJyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDI0MjggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDcxNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjQzMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9scGFyX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9ycGFyIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfcnBhcl9yZWMgdiBsZXhidWYgMzEwXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9ycGFyX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNzE3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMjQ0NSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNzE4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnKScgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyNDUwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA3MTkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDI0NTUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfcnBhcl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfbGJyIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfbGJyX3JlYyB2IGxleGJ1ZiAzMTRcbmFuZCBfX29jYW1sX2xleF9yZWFkX2xicl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDcyMiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDI0NjcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDcyMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ1snIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjQ3MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNzI0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNDc3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2xicl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfcmJyIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfcmJyX3JlYyB2IGxleGJ1ZiAzMThcbmFuZCBfX29jYW1sX2xleF9yZWFkX3Jicl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDcyNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDI0ODkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDcyOCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ10nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjQ5NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNzI5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNDk5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3Jicl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHNraXBfanNvbiB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9za2lwX2pzb25fcmVjIHYgbGV4YnVmIDMyMlxuYW5kIF9fb2NhbWxfbGV4X3NraXBfanNvbl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDczNSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MTEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDczNiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MTYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDczNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MjEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDczOCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MjYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA0IC0+XG4jIDczOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MzEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA1IC0+XG4jIDc0MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MzYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA2IC0+XG4jIDc0MSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCBmaW5pc2hfc2tpcF9zdHJpbmdsaXQgdiBsZXhidWYgKVxuIyAyNTQxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgNyAtPlxuIyA3NDIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoICgpIClcbiMgMjU0NiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDggLT5cbiMgNzQzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoICgpIClcbiMgMjU1MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDkgLT5cbiMgNzQ1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCB0cnlcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICByZWFkX29iamVjdF9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgc2tpcF9pZGVudCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICByZWFkX2NvbG9uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHNraXBfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRydWUgZG9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9vYmplY3Rfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBza2lwX2lkZW50IHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NvbG9uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBza2lwX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX29iamVjdCAtPlxuICAgICAgICAgICAgICAgICAgICAgKClcbiAgICAgICAgICAgICAgICAgKVxuIyAyNTc3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTAgLT5cbiMgNzY4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCB0cnlcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICByZWFkX2FycmF5X2VuZCBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBza2lwX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICB3aGlsZSB0cnVlIGRvXG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYXJyYXlfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBza2lwX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX2FycmF5IC0+XG4gICAgICAgICAgICAgICAgICAgICAoKVxuICAgICAgICAgICAgICAgICApXG4jIDI1OTUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxMSAtPlxuIyA3ODMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF90dXBsZV9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBza2lwX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRydWUgZG9cbiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfdHVwbGVfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9qc29uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl90dXBsZSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAoKVxuICAgICAgICAgICAgICAgICApXG4jIDI2MTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxMiAtPlxuIyA4MDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgc2tpcF9pZGVudCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBmaW5pc2hfc2tpcF92YXJpYW50IHYgbGV4YnVmXG4gICAgICAgICAgICAgICAgIClcbiMgMjYzMiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEzIC0+XG4jIDgxNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggc2tpcF9qc29uIHYgbGV4YnVmIClcbiMgMjYzNyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDE0IC0+XG4jIDgxNSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggZmluaXNoX2NvbW1lbnQgdiBsZXhidWY7IHNraXBfanNvbiB2IGxleGJ1ZiApXG4jIDI2NDIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxNSAtPlxuIyA4MTYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIG5ld2xpbmUgdiBsZXhidWY7IHNraXBfanNvbiB2IGxleGJ1ZiApXG4jIDI2NDcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxNiAtPlxuIyA4MTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIHNraXBfanNvbiB2IGxleGJ1ZiApXG4jIDI2NTIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxNyAtPlxuIyA4MTggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNjU3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTggLT5cbiMgODE5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiSW52YWxpZCB0b2tlblwiIHYgbGV4YnVmIClcbiMgMjY2MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfc2tpcF9qc29uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX3NraXBfc3RyaW5nbGl0IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9za2lwX3N0cmluZ2xpdF9yZWMgdiBsZXhidWYgMzc4XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX3NraXBfc3RyaW5nbGl0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgODI1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggKCkgKVxuIyAyNjc0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA4MjYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiSW52YWxpZCBzdHJpbmcgbGl0ZXJhbFwiIHYgbGV4YnVmIClcbiMgMjY3OSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgODI3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDI2ODQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9za2lwX3N0cmluZ2xpdF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGZpbmlzaF9za2lwX3ZhcmlhbnQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfZmluaXNoX3NraXBfdmFyaWFudF9yZWMgdiBsZXhidWYgMzg5XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX3NraXBfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDgzMCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIHNraXBfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgcmVhZF9ndCB2IGxleGJ1ZiApXG4jIDI2OTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDgzMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoICgpIClcbiMgMjcwMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgODM0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICc6JyBvciAnPicgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyNzA4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA4MzUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjcxMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX3NraXBfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHNraXBfaWRlbnQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfc2tpcF9pZGVudF9yZWMgdiBsZXhidWYgMzk0XG5hbmQgX19vY2FtbF9sZXhfc2tpcF9pZGVudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDgzOCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBmaW5pc2hfc2tpcF9zdHJpbmdsaXQgdiBsZXhidWYgKVxuIyAyNzI1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA4MzkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyNzMwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA4NDAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkIHN0cmluZyBvciBpZGVudGlmaWVyIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjczNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgODQxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNzQwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9za2lwX2lkZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX2pzb24gdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX2pzb25fcmVjIHYgbGV4YnVmIDM5OVxuYW5kIF9fb2NhbWxfbGV4X2J1ZmZlcl9qc29uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgODU0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGFkZF9sZXhlbWUgdi5idWYgbGV4YnVmIClcbiMgMjc1MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgODU2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGZpbmlzaF9idWZmZXJfc3RyaW5nbGl0IHYgbGV4YnVmIClcbiMgMjc1NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgODU3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCB0cnlcbiAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAneyc7XG4gICAgICAgICAgICAgICAgICAgICBidWZmZXJfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBidWZmZXJfb2JqZWN0X2VuZCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9pZGVudCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9jb2xvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9qc29uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9vYmplY3Rfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9pZGVudCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfY29sb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX29iamVjdCAtPlxuICAgICAgICAgICAgICAgICAgICAgKClcbiAgICAgICAgICAgICAgICAgKVxuIyAyNzg0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA4ODEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIHRyeVxuICAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIHYuYnVmICdbJztcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9hcnJheV9lbmQgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBidWZmZXJfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRydWUgZG9cbiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfYXJyYXlfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9qc29uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl9hcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgKClcbiAgICAgICAgICAgICAgICAgKVxuIyAyODAzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyA4OTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcoJztcbiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfdHVwbGVfZW5kIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfdHVwbGVfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICB3aXRoIENvbW1vbi5FbmRfb2ZfdHVwbGUgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgKClcbiAgICAgICAgICAgICAgICAgKVxuIyAyODI3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNSAtPlxuIyA5MTggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJzwnO1xuICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2lkZW50IHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgZmluaXNoX2J1ZmZlcl92YXJpYW50IHYgbGV4YnVmXG4gICAgICAgICAgICAgICAgIClcbiMgMjg0MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDYgLT5cbiMgOTMwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjsgYnVmZmVyX2pzb24gdiBsZXhidWYgKVxuIyAyODQ3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNyAtPlxuIyA5MzEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIEJ1ZmZlci5hZGRfc3RyaW5nIHYuYnVmIFwiLypcIjtcbiAgICAgICAgICAgICAgICAgICBmaW5pc2hfYnVmZmVyX2NvbW1lbnQgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgYnVmZmVyX2pzb24gdiBsZXhidWYgKVxuIyAyODU0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgOCAtPlxuIyA5MzQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAnXFxuJztcbiAgICAgICAgICAgICAgICAgICBuZXdsaW5lIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9qc29uIHYgbGV4YnVmIClcbiMgMjg2MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDkgLT5cbiMgOTM3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjsgYnVmZmVyX2pzb24gdiBsZXhidWYgKVxuIyAyODY2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTAgLT5cbiMgOTM4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjg3MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDExIC0+XG4jIDkzOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkludmFsaWQgdG9rZW5cIiB2IGxleGJ1ZiApXG4jIDI4NzYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9qc29uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX2J1ZmZlcl9zdHJpbmdsaXQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl9zdHJpbmdsaXRfcmVjIHYgbGV4YnVmIDQ1MFxuYW5kIF9fb2NhbWxfbGV4X2ZpbmlzaF9idWZmZXJfc3RyaW5nbGl0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgOTQ1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICdcIic7XG4gICAgICAgICAgIGFkZF9sZXhlbWUgdi5idWYgbGV4YnVmXG4gICAgICAgICApXG4jIDI4OTAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDk0OCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGxvbmdfZXJyb3IgXCJJbnZhbGlkIHN0cmluZyBsaXRlcmFsXCIgdiBsZXhidWYgKVxuIyAyODk1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA5NDkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjkwMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl9zdHJpbmdsaXRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCBmaW5pc2hfYnVmZmVyX3ZhcmlhbnQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl92YXJpYW50X3JlYyB2IGxleGJ1ZiA0NjFcbmFuZCBfX29jYW1sX2xleF9maW5pc2hfYnVmZmVyX3ZhcmlhbnRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA5NTIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJzonO1xuICAgICAgICAgICBidWZmZXJfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICBidWZmZXJfZ3QgdiBsZXhidWYgKVxuIyAyOTE1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA5NTYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJz4nIClcbiMgMjkyMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgOTU3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICc6JyBvciAnPicgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyOTI1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA5NTggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjkzMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl92YXJpYW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX2lkZW50IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9pZGVudF9yZWMgdiBsZXhidWYgNDY2XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2lkZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgOTYxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGZpbmlzaF9idWZmZXJfc3RyaW5nbGl0IHYgbGV4YnVmIClcbiMgMjk0MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgOTYyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGFkZF9sZXhlbWUgdi5idWYgbGV4YnVmIClcbiMgMjk0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgOTYzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCBzdHJpbmcgb3IgaWRlbnRpZmllciBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDI5NTIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDk2NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjk1NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX2lkZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX3NwYWNlIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9zcGFjZV9yZWMgdiBsZXhidWYgNDcxXG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX3NwYWNlX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgOTY3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgIGFkZF9sZXhlbWUgdi5idWYgbGV4YnVmO1xuICAgIG5ld2xpbmUgdiBsZXhidWY7XG4gICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmIClcbiMgMjk3MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgOTcxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIHYuYnVmIFwiLypcIjtcbiAgICBmaW5pc2hfYnVmZmVyX2NvbW1lbnQgdiBsZXhidWY7XG4gICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmIClcbiMgMjk4MCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgOTc1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAnXFxuJztcbiAgICBuZXdsaW5lIHYgbGV4YnVmO1xuICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZiApXG4jIDI5ODggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDk3OSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjtcbiAgICBidWZmZXJfc3BhY2UgdiBsZXhidWYgKVxuIyAyOTk1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyA5ODIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgpIClcbiMgMzAwMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX3NwYWNlX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX29iamVjdF9lbmQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX29iamVjdF9lbmRfcmVjIHYgbGV4YnVmIDQ3OFxuYW5kIF9fb2NhbWxfbGV4X2J1ZmZlcl9vYmplY3RfZW5kX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgOTg1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoXG4gICAgICBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ30nO1xuICAgICAgcmFpc2UgQ29tbW9uLkVuZF9vZl9vYmplY3QgKVxuIyAzMDE0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA5ODggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAzMDE5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9idWZmZXJfb2JqZWN0X2VuZF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGJ1ZmZlcl9vYmplY3Rfc2VwIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9vYmplY3Rfc2VwX3JlYyB2IGxleGJ1ZiA0ODBcbmFuZCBfX29jYW1sX2xleF9idWZmZXJfb2JqZWN0X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDk5MSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJywnIClcbiMgMzAzMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgOTkyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAnfSc7IHJhaXNlIENvbW1vbi5FbmRfb2Zfb2JqZWN0IClcbiMgMzAzNiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgOTkzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJ30nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMzA0MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgOTk0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAzMDQ2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9idWZmZXJfb2JqZWN0X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGJ1ZmZlcl9hcnJheV9lbmQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X2VuZF9yZWMgdiBsZXhidWYgNDg1XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X2VuZF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDk5NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ10nOyByYWlzZSBDb21tb24uRW5kX29mX2FycmF5IClcbiMgMzA1OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgOTk4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMzA2MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X2VuZF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGJ1ZmZlcl9hcnJheV9zZXAgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X3NlcF9yZWMgdiBsZXhidWYgNDg3XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDEwMDEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcsJyApXG4jIDMwNzUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDEwMDIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICddJzsgcmFpc2UgQ29tbW9uLkVuZF9vZl9hcnJheSApXG4jIDMwODAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDEwMDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICcsJyBvciAnXScgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAzMDg1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyAxMDA0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAzMDkwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9idWZmZXJfYXJyYXlfc2VwX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX3R1cGxlX2VuZCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9idWZmZXJfdHVwbGVfZW5kX3JlYyB2IGxleGJ1ZiA0OTJcbmFuZCBfX29jYW1sX2xleF9idWZmZXJfdHVwbGVfZW5kX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTAwNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKFxuICAgICAgQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcpJztcbiAgICAgIHJhaXNlIENvbW1vbi5FbmRfb2ZfdHVwbGUgKVxuIyAzMTA0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAxMDEwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMzEwOSBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX3R1cGxlX2VuZF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGJ1ZmZlcl90dXBsZV9zZXAgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX3R1cGxlX3NlcF9yZWMgdiBsZXhidWYgNDk0XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX3R1cGxlX3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDEwMTMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcsJyApXG4jIDMxMjEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDEwMTQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcpJzsgcmFpc2UgQ29tbW9uLkVuZF9vZl90dXBsZSApXG4jIDMxMjYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDEwMTUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICcsJyBvciAnKScgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAzMTMxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyAxMDE2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAzMTM2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9idWZmZXJfdHVwbGVfc2VwX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX2NvbG9uIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9jb2xvbl9yZWMgdiBsZXhidWYgNDk5XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2NvbG9uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTAxOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJzonIClcbiMgMzE0OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgMTAyMCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJzonIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMzE1MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMTAyMSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMzE1OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX2NvbG9uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX2d0IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9ndF9yZWMgdiBsZXhidWYgNTAzXG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2d0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTAyNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAnPicgKVxuIyAzMTcwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAxMDI1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICc+JyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDMxNzUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDEwMjYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMzE4MCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX2d0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX2J1ZmZlcl9jb21tZW50IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9idWZmZXJfY29tbWVudF9yZWMgdiBsZXhidWYgNTA3XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl9jb21tZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTAyOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIEJ1ZmZlci5hZGRfc3RyaW5nIHYuYnVmIFwiKi9cIiApXG4jIDMxOTIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDEwMzAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiVW50ZXJtaW5hdGVkIGNvbW1lbnRcIiB2IGxleGJ1ZiApXG4jIDMxOTcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDEwMzEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ1xcbic7XG4gICAgICAgICAgIG5ld2xpbmUgdiBsZXhidWY7XG4gICAgICAgICAgIGZpbmlzaF9idWZmZXJfY29tbWVudCB2IGxleGJ1ZiApXG4jIDMyMDQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDEwMzQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjsgZmluaXNoX2J1ZmZlcl9jb21tZW50IHYgbGV4YnVmIClcbiMgMzIwOSBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl9jb21tZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG47O1xuXG4jIDEwMzYgXCJsaWIvcmVhZC5tbGxcIlxuIFxuICBsZXQgXyA9IChyZWFkX2pzb24gOiBsZXhlcl9zdGF0ZSAtPiBMZXhpbmcubGV4YnVmIC0+IHQpXG5cbiAgbGV0IHJlYWRfdCA9IHJlYWRfanNvblxuXG4gIGxldCByZWFkX2ludDggdiBsZXhidWYgPVxuICAgIGxldCBuID0gcmVhZF9pbnQgdiBsZXhidWYgaW5cbiAgICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW5cbiAgICAgIGxleGVyX2Vycm9yIFwiSW50OCBvdmVyZmxvd1wiIHYgbGV4YnVmXG4gICAgZWxzZVxuICAgICAgY2hhcl9vZl9pbnQgblxuXG4gIGxldCByZWFkX2xpc3QgcmVhZF9jZWxsIHYgbGV4YnVmID1cbiAgICBMaXN0LnJldiAocmVhZF9saXN0X3JldiByZWFkX2NlbGwgdiBsZXhidWYpXG5cbiAgbGV0IGFycmF5X29mX3Jldl9saXN0IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICBbXSAtPiBbfCB8XVxuICAgICAgfCB4IDo6IHRsIC0+XG4gICAgICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgICAgICBsZXQgYSA9IEFycmF5Lm1ha2UgbGVuIHggaW5cbiAgICAgICAgICBsZXQgciA9IHJlZiB0bCBpblxuICAgICAgICAgIGZvciBpID0gbGVuIC0gMiBkb3dudG8gMCBkb1xuICAgICAgICAgICAgYS4oaSkgPC0gTGlzdC5oZCAhcjtcbiAgICAgICAgICAgIHIgOj0gTGlzdC50bCAhclxuICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgYVxuXG4gIGxldCByZWFkX2FycmF5IHJlYWRfY2VsbCB2IGxleGJ1ZiA9XG4gICAgbGV0IGwgPSByZWFkX2xpc3RfcmV2IHJlYWRfY2VsbCB2IGxleGJ1ZiBpblxuICAgIGFycmF5X29mX3Jldl9saXN0IGxcblxuICAoKiBSZWFkIGEgSlNPTiBvYmplY3QsIHJlYWRpbmcgdGhlIGtleXMgaW50byBPQ2FtbCBzdHJpbmdzXG4gICAgIChwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkgKilcbiAgbGV0IHJlYWRfZmllbGRzIHJlYWRfZmllbGQgaW5pdF9hY2MgdiA9XG4gICAgcmVhZF9hYnN0cmFjdF9maWVsZHMgcmVhZF9pZGVudCByZWFkX2ZpZWxkIGluaXRfYWNjIHZcblxuICBsZXQgZmluaXNoIHYgbGV4YnVmID1cbiAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgIGlmIG5vdCAocmVhZF9lb2YgbGV4YnVmKSB0aGVuXG4gICAgICBsb25nX2Vycm9yIFwiSnVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTpcIiB2IGxleGJ1ZlxuXG4gIGxldCBpbml0X2xleGVyID0gQ29tbW9uLmluaXRfbGV4ZXJcblxuICBsZXQgZnJvbV9sZXhidWYgdiA/KHN0cmVhbSA9IGZhbHNlKSBsZXhidWYgPVxuICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG5cbiAgICBsZXQgeCA9XG4gICAgICBpZiByZWFkX2VvZiBsZXhidWYgdGhlblxuICAgICAgICByYWlzZSBDb21tb24uRW5kX29mX2lucHV0XG4gICAgICBlbHNlXG4gICAgICAgIHJlYWRfanNvbiB2IGxleGJ1ZlxuICAgIGluXG5cbiAgICBpZiBub3Qgc3RyZWFtIHRoZW5cbiAgICAgIGZpbmlzaCB2IGxleGJ1ZjtcblxuICAgIHhcblxuXG4gIGxldCBmcm9tX3N0cmluZyA/YnVmID9mbmFtZSA/bG51bSBzID1cbiAgICB0cnlcbiAgICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgICAgbGV0IHYgPSBpbml0X2xleGVyID9idWYgP2ZuYW1lID9sbnVtICgpIGluXG4gICAgICBmcm9tX2xleGJ1ZiB2IGxleGJ1ZlxuICAgIHdpdGggQ29tbW9uLkVuZF9vZl9pbnB1dCAtPlxuICAgICAgQ29tbW9uLmpzb25fZXJyb3IgXCJCbGFuayBpbnB1dCBkYXRhXCJcblxuICBsZXQgZnJvbV9jaGFubmVsID9idWYgP2ZuYW1lID9sbnVtIGljID1cbiAgICB0cnlcbiAgICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGljIGluXG4gICAgICBsZXQgdiA9IGluaXRfbGV4ZXIgP2J1ZiA/Zm5hbWUgP2xudW0gKCkgaW5cbiAgICAgIGZyb21fbGV4YnVmIHYgbGV4YnVmXG4gICAgd2l0aCBDb21tb24uRW5kX29mX2lucHV0IC0+XG4gICAgICBDb21tb24uanNvbl9lcnJvciBcIkJsYW5rIGlucHV0IGRhdGFcIlxuXG4gIGxldCBmcm9tX2ZpbGUgP2J1ZiA/Zm5hbWUgP2xudW0gZmlsZSA9XG4gICAgbGV0IGljID0gb3Blbl9pbiBmaWxlIGluXG4gICAgdHJ5XG4gICAgICBsZXQgeCA9IGZyb21fY2hhbm5lbCA/YnVmID9mbmFtZSA/bG51bSBpYyBpblxuICAgICAgY2xvc2VfaW4gaWM7XG4gICAgICB4XG4gICAgd2l0aCBlIC0+XG4gICAgICBjbG9zZV9pbl9ub2VyciBpYztcbiAgICAgIHJhaXNlIGVcblxuICBleGNlcHRpb24gRmluYWxseSBvZiBleG4gKiBleG5cblxuICBsZXQgc2VxX2Zyb21fbGV4YnVmIHYgPyhmaW4gPSBmdW4gKCkgLT4gKCkpIGxleGJ1ZiA9XG4gICAgbGV0IHN0cmVhbSA9IFNvbWUgdHJ1ZSBpblxuICAgIGxldCByZWMgZiAoKSA9XG4gICAgICB0cnkgU2VxLkNvbnMgKGZyb21fbGV4YnVmIHYgP3N0cmVhbSBsZXhidWYsIGYpXG4gICAgICB3aXRoXG4gICAgICAgICAgQ29tbW9uLkVuZF9vZl9pbnB1dCAtPlxuICAgICAgICAgICAgZmluICgpO1xuICAgICAgICAgICAgU2VxLk5pbFxuICAgICAgICB8IGUgLT5cbiAgICAgICAgICAgICh0cnkgZmluICgpIHdpdGggZmluX2UgLT4gcmFpc2UgKEZpbmFsbHkgKGUsIGZpbl9lKSkpO1xuICAgICAgICAgICAgcmFpc2UgZVxuICAgIGluXG4gICAgZlxuXG4gIGxldCBzZXFfZnJvbV9zdHJpbmcgP2J1ZiA/Zm5hbWUgP2xudW0gcyA9XG4gICAgbGV0IHYgPSBpbml0X2xleGVyID9idWYgP2ZuYW1lID9sbnVtICgpIGluXG4gICAgc2VxX2Zyb21fbGV4YnVmIHYgKExleGluZy5mcm9tX3N0cmluZyBzKVxuXG4gIGxldCBzZXFfZnJvbV9jaGFubmVsID9idWYgP2ZpbiA/Zm5hbWUgP2xudW0gaWMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGljIGluXG4gICAgbGV0IHYgPSBpbml0X2xleGVyID9idWYgP2ZuYW1lID9sbnVtICgpIGluXG4gICAgc2VxX2Zyb21fbGV4YnVmIHYgP2ZpbiBsZXhidWZcblxuICBsZXQgc2VxX2Zyb21fZmlsZSA/YnVmID9mbmFtZSA/bG51bSBmaWxlID1cbiAgICBsZXQgaWMgPSBvcGVuX2luIGZpbGUgaW5cbiAgICBsZXQgZmluICgpID0gY2xvc2VfaW4gaWMgaW5cbiAgICBsZXQgZm5hbWUgPVxuICAgICAgbWF0Y2ggZm5hbWUgd2l0aFxuICAgICAgICAgIE5vbmUgLT4gU29tZSBmaWxlXG4gICAgICAgIHwgeCAtPiB4XG4gICAgaW5cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpYyBpblxuICAgIGxldCB2ID0gaW5pdF9sZXhlciA/YnVmID9mbmFtZSA/bG51bSAoKSBpblxuICAgIHNlcV9mcm9tX2xleGJ1ZiB2IH5maW4gbGV4YnVmXG5cbiAgdHlwZSBqc29uX2xpbmUgPSBbIGBKc29uIG9mIHQgfCBgRXhuIG9mIGV4biBdXG5cbiAgbGV0IGxpbmVzZXFfZnJvbV9jaGFubmVsXG4gICAgICA/YnVmID8oZmluID0gZnVuICgpIC0+ICgpKSA/Zm5hbWUgP2xudW06KGxudW0wID0gMSkgaWMgPVxuICAgIGxldCBidWYgPVxuICAgICAgbWF0Y2ggYnVmIHdpdGhcbiAgICAgICAgICBOb25lIC0+IFNvbWUgKEJ1ZmZlci5jcmVhdGUgMjU2KVxuICAgICAgICB8IFNvbWUgXyAtPiBidWZcbiAgICBpblxuICAgIGxldCByZWMgZiBsbnVtID0gZnVuICgpIC0+XG4gICAgICB0cnlcbiAgICAgICAgbGV0IGxpbmUgPSBpbnB1dF9saW5lIGljIGluXG4gICAgICAgIFNlcS5Db25zIChgSnNvbiAoZnJvbV9zdHJpbmcgP2J1ZiA/Zm5hbWUgfmxudW0gbGluZSksIGYgKGxudW0gKyAxKSlcbiAgICAgIHdpdGhcbiAgICAgICAgICBFbmRfb2ZfZmlsZSAtPiBmaW4gKCk7IFNlcS5OaWxcbiAgICAgICAgfCBlIC0+IFNlcS5Db25zIChgRXhuIGUsIGYgKGxudW0gKyAxKSlcbiAgICBpblxuICAgIGYgbG51bTBcblxuICBsZXQgbGluZXNlcV9mcm9tX2ZpbGUgP2J1ZiA/Zm5hbWUgP2xudW0gZmlsZSA9XG4gICAgbGV0IGljID0gb3Blbl9pbiBmaWxlIGluXG4gICAgbGV0IGZpbiAoKSA9IGNsb3NlX2luIGljIGluXG4gICAgbGV0IGZuYW1lID1cbiAgICAgIG1hdGNoIGZuYW1lIHdpdGhcbiAgICAgICAgICBOb25lIC0+IFNvbWUgZmlsZVxuICAgICAgICB8IHggLT4geFxuICAgIGluXG4gICAgbGluZXNlcV9mcm9tX2NoYW5uZWwgP2J1ZiB+ZmluID9mbmFtZSA/bG51bSBpY1xuXG4gIGxldCBwcmV0dGlmeSA/c3RkIHMgPVxuICAgIHByZXR0eV90b19zdHJpbmcgP3N0ZCAoZnJvbV9zdHJpbmcgcylcblxuICBsZXQgY29tcGFjdCA/c3RkOl8gcyA9XG4gICAgdG9fc3RyaW5nIChmcm9tX3N0cmluZyBzKVxuXG4jIDMzNzUgXCJsaWIvcmVhZC5tbFwiXG5cbm1vZHVsZSBVdGlsID0gc3RydWN0XG5leGNlcHRpb24gVHlwZV9lcnJvciBvZiBzdHJpbmcgKiB0XG5cbmxldCB0eXBlb2YgPSBmdW5jdGlvblxuICB8IGBBc3NvYyBfIC0+IFwib2JqZWN0XCJcbiAgfCBgQm9vbCBfIC0+IFwiYm9vbFwiXG4gIHwgYEZsb2F0IF8gLT4gXCJmbG9hdFwiXG4gIHwgYEludCBfIC0+IFwiaW50XCJcbiAgfCBgTGlzdCBfIC0+IFwiYXJyYXlcIlxuICB8IGBOdWxsIC0+IFwibnVsbFwiXG4gIHwgYFN0cmluZyBfIC0+IFwic3RyaW5nXCJcbiAgfCBgSW50bGl0IF8gLT4gXCJpbnRsaXRcIlxuICB8IGBGbG9hdGxpdCBfIC0+IFwiZmxvYXRsaXRcIlxuICB8IGBUdXBsZSBfIC0+IFwidHVwbGVcIlxuICB8IGBWYXJpYW50IF8gLT4gXCJ2YXJpYW50XCJcblxubGV0IHR5cGVyciBtc2cganMgPSByYWlzZSAoVHlwZV9lcnJvciAobXNnIF4gdHlwZW9mIGpzLCBqcykpXG5cbmV4Y2VwdGlvbiBVbmRlZmluZWQgb2Ygc3RyaW5nICogdFxuXG5sZXQgYXNzb2MgbmFtZSBvYmogPSB0cnkgTGlzdC5hc3NvYyBuYW1lIG9iaiB3aXRoIE5vdF9mb3VuZCAtPiBgTnVsbFxuXG5sZXQgbWVtYmVyIG5hbWUgPSBmdW5jdGlvblxuICB8IGBBc3NvYyBvYmogLT4gYXNzb2MgbmFtZSBvYmpcbiAgfCBqcyAtPiB0eXBlcnIgKFwiQ2FuJ3QgZ2V0IG1lbWJlciAnXCIgXiBuYW1lIF4gXCInIG9mIG5vbi1vYmplY3QgdHlwZSBcIikganNcblxubGV0IHJlYyBwYXRoIGwgb2JqID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gU29tZSBvYmpcbiAgfCBrZXkgOjogbCAtPiAoXG4gICAgICBtYXRjaCBvYmogd2l0aFxuICAgICAgfCBgQXNzb2MgYXNzb2MgLT4gKFxuICAgICAgICAgIG1hdGNoIExpc3QuYXNzb2Mga2V5IGFzc29jIHdpdGhcbiAgICAgICAgICB8IG9iaiAtPiBwYXRoIGwgb2JqXG4gICAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IE5vbmUpXG4gICAgICB8IF8gLT4gTm9uZSlcblxubGV0IGluZGV4IGkgPSBmdW5jdGlvblxuICB8IGBMaXN0IGwgYXMganMgLT5cbiAgICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgICBsZXQgd3JhcHBlZF9pbmRleCA9IGlmIGkgPCAwIHRoZW4gbGVuICsgaSBlbHNlIGkgaW5cbiAgICAgIGlmIHdyYXBwZWRfaW5kZXggPCAwIHx8IHdyYXBwZWRfaW5kZXggPj0gbGVuIHRoZW5cbiAgICAgICAgcmFpc2UgKFVuZGVmaW5lZCAoXCJJbmRleCBcIiBeIHN0cmluZ19vZl9pbnQgaSBeIFwiIG91dCBvZiBib3VuZHNcIiwganMpKVxuICAgICAgZWxzZSBMaXN0Lm50aCBsIHdyYXBwZWRfaW5kZXhcbiAgfCBqcyAtPlxuICAgICAgdHlwZXJyIChcIkNhbid0IGdldCBpbmRleCBcIiBeIHN0cmluZ19vZl9pbnQgaSBeIFwiIG9mIG5vbi1hcnJheSB0eXBlIFwiKSBqc1xuXG5sZXQgbWFwIGYgPSBmdW5jdGlvblxuICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIGYgbClcbiAgfCBqcyAtPiB0eXBlcnIgXCJDYW4ndCBtYXAgZnVuY3Rpb24gb3ZlciBub24tYXJyYXkgdHlwZSBcIiBqc1xuXG5sZXQgdG9fYXNzb2MgPSBmdW5jdGlvblxuICB8IGBBc3NvYyBvYmogLT4gb2JqXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgb2JqZWN0LCBnb3QgXCIganNcblxubGV0IHRvX29wdGlvbiBmID0gZnVuY3Rpb24gYE51bGwgLT4gTm9uZSB8IHggLT4gU29tZSAoZiB4KVxubGV0IHRvX2Jvb2wgPSBmdW5jdGlvbiBgQm9vbCBiIC0+IGIgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBib29sLCBnb3QgXCIganNcblxubGV0IHRvX2Jvb2xfb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBgQm9vbCBiIC0+IFNvbWUgYlxuICB8IGBOdWxsIC0+IE5vbmVcbiAgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBib29sIG9yIG51bGwsIGdvdCBcIiBqc1xuXG5sZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgfCBgSW50IGkgLT4gZmxvYXQgaVxuICB8IGBGbG9hdCBmIC0+IGZcbiAgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBudW1iZXIsIGdvdCBcIiBqc1xuXG5sZXQgdG9fbnVtYmVyX29wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gIHwgYE51bGwgLT4gTm9uZVxuICB8IGpzIC0+IHR5cGVyciBcIkV4cGVjdGVkIG51bWJlciBvciBudWxsLCBnb3QgXCIganNcblxubGV0IHRvX2Zsb2F0ID0gZnVuY3Rpb25cbiAgfCBgRmxvYXQgZiAtPiBmXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgZmxvYXQsIGdvdCBcIiBqc1xuXG5sZXQgdG9fZmxvYXRfb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgfCBgTnVsbCAtPiBOb25lXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgZmxvYXQgb3IgbnVsbCwgZ290IFwiIGpzXG5cbmxldCB0b19pbnQgPSBmdW5jdGlvblxuICB8IGBJbnQgaSAtPiBpXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgaW50LCBnb3QgXCIganNcblxubGV0IHRvX2ludF9vcHRpb24gPSBmdW5jdGlvblxuICB8IGBJbnQgaSAtPiBTb21lIGlcbiAgfCBgTnVsbCAtPiBOb25lXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgaW50IG9yIG51bGwsIGdvdCBcIiBqc1xuXG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIGBMaXN0IGwgLT4gbCB8IGpzIC0+IHR5cGVyciBcIkV4cGVjdGVkIGFycmF5LCBnb3QgXCIganNcblxubGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgYFN0cmluZyBzIC0+IHNcbiAgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBzdHJpbmcsIGdvdCBcIiBqc1xuXG5sZXQgdG9fc3RyaW5nX29wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgYFN0cmluZyBzIC0+IFNvbWUgc1xuICB8IGBOdWxsIC0+IE5vbmVcbiAgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBzdHJpbmcgb3IgbnVsbCwgZ290IFwiIGpzXG5cbmxldCBjb252ZXJ0X2VhY2ggZiA9IGZ1bmN0aW9uXG4gIHwgYExpc3QgbCAtPiBMaXN0Lm1hcCBmIGxcbiAgfCBqcyAtPiB0eXBlcnIgXCJDYW4ndCBjb252ZXJ0IGVhY2ggZWxlbWVudCBvZiBub24tYXJyYXkgdHlwZSBcIiBqc1xuXG5sZXQgcmVjIHJldl9maWx0ZXJfbWFwIGYgYWNjIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBhY2NcbiAgfCB4IDo6IHRsIC0+IChcbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmV2X2ZpbHRlcl9tYXAgZiBhY2MgdGxcbiAgICAgIHwgU29tZSB5IC0+IHJldl9maWx0ZXJfbWFwIGYgKHkgOjogYWNjKSB0bClcblxubGV0IGZpbHRlcl9tYXAgZiBsID0gTGlzdC5yZXYgKHJldl9maWx0ZXJfbWFwIGYgW10gbClcblxubGV0IHJlYyByZXZfZmxhdHRlbiBhY2MgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGFjY1xuICB8IHggOjogdGwgLT4gKFxuICAgICAgbWF0Y2ggeCB3aXRoXG4gICAgICB8IGBMaXN0IGwyIC0+IHJldl9mbGF0dGVuIChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKSB0bFxuICAgICAgfCBfIC0+IHJldl9mbGF0dGVuIGFjYyB0bClcblxubGV0IGZsYXR0ZW4gbCA9IExpc3QucmV2IChyZXZfZmxhdHRlbiBbXSBsKVxuXG5sZXQgZmlsdGVyX2luZGV4IGkgbCA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgbCAtPiAoIHRyeSBTb21lIChMaXN0Lm50aCBsIGkpIHdpdGggXyAtPiBOb25lKSB8IF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBmaWx0ZXJfbGlzdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYExpc3QgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcblxubGV0IGZpbHRlcl9tZW1iZXIgayBsID1cbiAgZmlsdGVyX21hcFxuICAgIChmdW5jdGlvblxuICAgICAgfCBgQXNzb2MgbCAtPiAoIHRyeSBTb21lIChMaXN0LmFzc29jIGsgbCkgd2l0aCBfIC0+IE5vbmUpIHwgXyAtPiBOb25lKVxuICAgIGxcblxubGV0IGZpbHRlcl9hc3NvYyBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEFzc29jIGwgLT4gU29tZSBsIHwgXyAtPiBOb25lKSBsXG5sZXQgZmlsdGVyX2Jvb2wgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBCb29sIHggLT4gU29tZSB4IHwgXyAtPiBOb25lKSBsXG5sZXQgZmlsdGVyX2ludCBsID1cbiAgZmlsdGVyX21hcCAoXG4gICAgICBmdW5jdGlvblxuICAgICAgfCAgYEludCB4IC0+IFNvbWUgeFxuICAgICAgfCBfIC0+IE5vbmVcbiAgICApIGxcblxubGV0IGZpbHRlcl9mbG9hdCBsID1cbiAgZmlsdGVyX21hcCAoXG4gICAgZnVuY3Rpb25cbiAgICAgIGBGbG9hdCB4IC0+IFNvbWUgeFxuICAgICAgfCBfIC0+IE5vbmVcbiAgKSBsXG5cbmxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICBmaWx0ZXJfbWFwIChcbiAgICBmdW5jdGlvblxuICAgICAgICBgSW50IHggLT4gU29tZSAoZmxvYXQgeClcbiAgICAgIHwgYEZsb2F0IHggLT4gU29tZSB4XG4gICAgICB8IF8gLT4gTm9uZVxuICApIGxcblxubGV0IGZpbHRlcl9zdHJpbmcgbCA9XG4gIGZpbHRlcl9tYXAgKFxuICAgIGZ1bmN0aW9uXG4gICAgICAgIGBTdHJpbmcgeCAtPiBTb21lIHhcbiAgICAgIHwgXyAtPiBOb25lXG4gICkgbFxuXG5sZXQga2V5cyBvID1cbiAgdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChrZXksIF8pIC0+IGtleSlcblxubGV0IHZhbHVlcyBvID1cbiAgdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChfLCB2YWx1ZSkgLT4gdmFsdWUpXG5cbmxldCBjb21iaW5lIChmaXJzdCA6IHQpIChzZWNvbmQgOiB0KSA9XG4gIG1hdGNoIChmaXJzdCwgc2Vjb25kKSB3aXRoXG4gIHwgYEFzc29jIGEsIGBBc3NvYyBiIC0+IChgQXNzb2MgKGEgQCBiKSA6IHQpXG4gIHwgYSwgYiAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkV4cGVjdGVkIHR3byBvYmplY3RzLCBjaGVjayBpbnB1dHNcIilcbmVuZFxuXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pbmVcbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdC4gV2hlbiB0aGUgZmxhZyBpcyBkaXNhYmxlZCwgaXQgd2lsbCByZWplY3QgYW55XG4gICAgICBmb3JtYXQgdGhhdCBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXG5cbiAgICAgIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlIFwiJSsgZFwiOiBzcGVjaWZ5aW5nIGJvdGggJysnIChpZiB0aGVcbiAgICAgIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGggYSAnKycgdG8gZ2V0IHRoZSBzYW1lIHdpZHRoIGFzXG4gICAgICBuZWdhdGl2ZSBudW1iZXJzKSBhbmQgJyAnIChpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aFxuICAgICAgYSBzcGFjZSkgZG9lcyBub3QgbWFrZSBzZW5zZSwgYnV0IHRoZSBsZWdhY3kgKDwgNC4wMilcbiAgICAgIGltcGxlbWVudGF0aW9uIHdhcyBoYXBweSB0byBqdXN0IGlnbm9yZSB0aGUgc3BhY2UuXG4gICopXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kIG1zZyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgbXNnXG4gIGluXG5cbiAgKCogVXNlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCAob3IgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdCkgd2FzIGVuY291bnRlcmVkXG4gICAgICB1bmV4cGVjdGVkbHkuICopXG4gIGxldCB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBlbmRfaW5kXG4gICAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1hdFwiXG4gIGluXG5cbiAgKCogVXNlZCBmb3IgJTBjOiBubyBvdGhlciB3aWR0aHMgYXJlIGltcGxlbWVudGVkICopXG4gIGxldCBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmRcbiAgICAgIFwibm9uLXplcm8gd2lkdGhzIGFyZSB1bnN1cHBvcnRlZCBmb3IgJWMgY29udmVyc2lvbnNcIlxuICBpblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gb3B0aW9uIGRlcGVuZGVuY3lcbiAgICAgcHJvYmxlbS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X3dpdGhvdXQgc3RyX2luZCBjIHMgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICclYycgd2l0aG91dCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBjIHNcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gdW5leHBlY3RlZFxuICAgICBjaGFyYWN0ZXIuICopXG4gIGxldCBleHBlY3RlZF9jaGFyYWN0ZXIgc3RyX2luZCBleHBlY3RlZCByZWFkID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzIGV4cGVjdGVkLCByZWFkICVDXCJcbiAgICAgIHN0ciBzdHJfaW5kIGV4cGVjdGVkIHJlYWRcbiAgaW5cblxuICAoKiBQYXJzZSB0aGUgc3RyaW5nIGZyb20gYmVnX2luZCAoaW5jbHVkZWQpIHRvIGVuZF9pbmQgKGV4Y2x1ZGVkKS4gKilcbiAgbGV0IHJlYyBwYXJzZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBiZWdfaW5kIGVuZF9pbmQgLT4gcGFyc2VfbGl0ZXJhbCBiZWdfaW5kIGJlZ19pbmQgZW5kX2luZFxuXG4gICgqIFJlYWQgbGl0ZXJhbCBjaGFyYWN0ZXJzIHVwIHRvICclJyBvciAnQCcgc3BlY2lhbCBjaGFyYWN0ZXJzLiAqKVxuICBhbmQgcGFyc2VfbGl0ZXJhbCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgRW5kX29mX2Zvcm1hdCBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfZm9ybWF0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9hZnRlcl9hdCAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9saXRlcmFsIGxpdF9zdGFydCAoc3RyX2luZCArIDEpIGVuZF9pbmRcblxuICAoKiBQYXJzZSBhIGZvcm1hdCBhZnRlciAnJScgKilcbiAgYW5kIHBhcnNlX2Zvcm1hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIGVuZF9pbmQgLT4gcGFyc2VfaWduIHBjdF9pbmQgKHBjdF9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgYW5kIHBhcnNlX2lnbiA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXycgLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCAoc3RyX2luZCsxKSBlbmRfaW5kIHRydWVcbiAgICAgIHwgXyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBmYWxzZVxuXG4gIGFuZCBwYXJzZV9mbGFncyA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiAoXywgXywgZSwgZikgZm10X2ViYlxuICA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBpZ24gLT5cbiAgICBsZXQgemVybyA9IHJlZiBmYWxzZSBhbmQgbWludXMgPSByZWYgZmFsc2VcbiAgICBhbmQgcGx1cyA9IHJlZiBmYWxzZSBhbmQgc3BhY2UgPSByZWYgZmFsc2VcbiAgICBhbmQgaGFzaCA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBzZXRfZmxhZyBzdHJfaW5kIGZsYWcgPVxuICAgICAgKCogaW4gbGVnYWN5IG1vZGUsIGR1cGxpY2F0ZSBmbGFncyBhcmUgYWNjZXB0ZWQgKilcbiAgICAgIGlmICFmbGFnICYmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgZHVwbGljYXRlIGZsYWcgJUNcIlxuICAgICAgICAgIHN0ciBzdHJfaW5kIHN0ci5bc3RyX2luZF07XG4gICAgICBmbGFnIDo9IHRydWU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHJlYWRfZmxhZ3Mgc3RyX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICcwJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHplcm87ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJy0nIC0+IHNldF9mbGFnIHN0cl9pbmQgbWludXM7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnKycgLT4gc2V0X2ZsYWcgc3RyX2luZCBwbHVzOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcjJyAtPiBzZXRfZmxhZyBzdHJfaW5kIGhhc2g7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnICcgLT4gc2V0X2ZsYWcgc3RyX2luZCBzcGFjZTsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZFxuICAgICAgICAgICF6ZXJvICFtaW51cyAhcGx1cyAhaGFzaCAhc3BhY2UgaWduXG4gICAgICBlbmRcbiAgICBpblxuICAgIHJlYWRfZmxhZ3Mgc3RyX2luZFxuXG4gICgqIFRyeSB0byByZWFkIGEgZGlnaXRhbCBvciBhICcqJyBwYWRkaW5nLiAqKVxuICBhbmQgcGFyc2VfcGFkZGluZyA6IHR5cGUgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHplcm8gbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhZHR5ID0gbWF0Y2ggemVybywgbWludXMgd2l0aFxuICAgICAgfCBmYWxzZSwgZmFsc2UgLT4gUmlnaHRcbiAgICAgIHwgZmFsc2UsIHRydWUgIC0+IExlZnRcbiAgICAgIHwgIHRydWUsIGZhbHNlIC0+IFplcm9zXG4gICAgICB8ICB0cnVlLCB0cnVlICAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMZWZ0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICctJyBcIjBcIiBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgbGV0IG5ld19pbmQsIHdpZHRoID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAoTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiAoQXJnX3BhZGRpbmcgcGFkdHkpXG4gICAgfCBfIC0+XG4gICAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgICB8IExlZnQgIC0+XG4gICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLScgXCJwYWRkaW5nXCI7XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIHwgWmVyb3MgLT5cbiAgICAgICAgICgqIGEgJzAnIHBhZGRpbmcgaW5kaWNhdGlvbiBub3QgZm9sbG93ZWQgYnkgYW55dGhpbmcgc2hvdWxkXG4gICAgICAgICAgIGJlIGludGVycHJldGVkIGFzIGEgUmlnaHQgcGFkZGluZyBvZiB3aWR0aCAwLiBUaGlzIGlzIHVzZWRcbiAgICAgICAgICAgYnkgc2Nhbm5pbmcgY29udmVyc2lvbnMgJTBzIGFuZCAlMGMgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgKExpdF9wYWRkaW5nIChSaWdodCwgMCkpXG4gICAgICB8IFJpZ2h0IC0+XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIGVuZFxuXG4gICgqIElzIHByZWNpc2lvbiBkZWZpbmVkPyAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcGFkZGluZyA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcuJyAtPlxuICAgICAgcGFyc2VfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkXG4gICAgfCBzeW1iIC0+XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIE5vX3ByZWNpc2lvbiBwYWQgc3ltYlxuXG4gICgqIFJlYWQgdGhlIGRpZ2l0YWwgb3IgJyonIHByZWNpc2lvbi4gKilcbiAgYW5kIHBhcnNlX3ByZWNpc2lvbiA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kID1cbiAgICAgIGxldCBuZXdfaW5kLCBwcmVjID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiBwcmVjKSBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmRcbiAgICB8ICgnKycgfCAnLScpIGFzIHN5bWIgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT5cbiAgICAgICgqIExlZ2FjeSBtb2RlIHdvdWxkIGFjY2VwdCBhbmQgaWdub3JlICcrJyBvciAnLScgYmVmb3JlIHRoZVxuICAgICAgICAgaW50ZWdlciBkZXNjcmliaW5nIHRoZSBkZXNpcmVkIHByZWNpc2lvbjsgbm90ZSB0aGF0IHRoaXNcbiAgICAgICAgIGNhbm5vdCBoYXBwZW4gZm9yIHBhZGRpbmcgd2lkdGgsIGFzICcrJyBhbmQgJy0nIGFscmVhZHkgaGF2ZVxuICAgICAgICAgYSBzZW1hbnRpY3MgdGhlcmUuXG5cbiAgICAgICAgIFRoYXQgc2FpZCwgdGhlIGlkZWEgKHN1cHBvcnRlZCBieSB0aGlzIHR3ZWFrKSB0aGF0IHdpZHRoIGFuZFxuICAgICAgICAgcHJlY2lzaW9uIGxpdGVyYWxzIGFyZSBcImludGVnZXIgbGl0ZXJhbHNcIiBpbiB0aGUgT0NhbWwgc2Vuc2UgaXNcbiAgICAgICAgIHN0aWxsIGJsYXRhbnRseSB3cm9uZywgYXMgMTIzXzQ1NiBvciAweEZGIGFyZSByZWplY3RlZC4gKilcbiAgICAgIHBhcnNlX2xpdGVyYWwgKG1pbnVzIHx8IHN5bWIgPSAnLScpIChzdHJfaW5kICsgMSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gcGFkIEFyZ19wcmVjaXNpb25cbiAgICB8IF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIG5vdGUgdGhhdCBsZWdhY3kgaW1wbGVtZW50YXRpb24gZGlkIG5vdCBpZ25vcmUgJy4nIHdpdGhvdXRcbiAgICAgICAgICAgYSBudW1iZXIgKGFzIGl0IGRvZXMgZm9yIHBhZGRpbmcgaW5kaWNhdGlvbnMpLCBidXRcbiAgICAgICAgICAgaW50ZXJwcmV0cyBpdCBhcyAnLjAnICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIDApXG4gICAgICBlbHNlXG4gICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLicgXCJwcmVjaXNpb25cIlxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiB0IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfY29udiAodHlwZSB1KSAodHlwZSB2KSAocGFkcHJlYyA6ICh1LCB2KSBwYWRkaW5nKSA9XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIHByZWMgcGFkcHJlYyBzdHIuW3N0cl9pbmRdIGluXG4gICAgKCogaW4gbGVnYWN5IG1vZGUsIHNvbWUgZm9ybWF0cyAoJXMgYW5kICVTKSBhY2NlcHQgYSB3ZWlyZCBtaXggb2ZcbiAgICAgICBwYWRkaW5nIGFuZCBwcmVjaXNpb24sIHdoaWNoIGlzIG1lcmdlZCBhcyBhIHNpbmdsZSBwYWRkaW5nXG4gICAgICAgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpbiAlLjEwcyB0aGUgcHJlY2lzaW9uIGlzIGltcGxpY2l0bHlcbiAgICAgICB1bmRlcnN0b29kIGFzIHBhZGRpbmcgJTEwcywgYnV0IHRoZSBsZWZ0LXBhZGRpbmcgY29tcG9uZW50IG1heVxuICAgICAgIGJlIHNwZWNpZmllZCBlaXRoZXIgYXMgYSBsZWZ0IHBhZGRpbmcgb3IgYSBuZWdhdGl2ZSBwcmVjaXNpb246XG4gICAgICAgJS0uM3MgYW5kICUuLTNzIGFyZSBlcXVpdmFsZW50IHRvICUtM3MgKilcbiAgICBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAtPiAoXG4gICAgICBtYXRjaCBtaW51cywgcHJlYyB3aXRoXG4gICAgICAgIHwgXywgTm9fcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgTm9fcGFkZGluZ1xuICAgICAgICB8IGZhbHNlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKSlcbiAgICAgICAgfCB0cnVlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKExlZnQsIG4pKVxuICAgICAgICB8IGZhbHNlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIFJpZ2h0KVxuICAgICAgICB8IHRydWUsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgTGVmdClcbiAgICApXG4gICAgfCBwYWQgLT4gcGFyc2VfY29udiBwYWRcblxuICAoKiBDYXNlIGFuYWx5c2lzIG9uIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9jb252ZXJzaW9uIDogdHlwZSB4IHkgeiB0IHUgdiBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiAoeCwgeSkgcGFkZGluZyAtPlxuICAgICAgICAoeiwgdCkgcHJlY2lzaW9uIC0+ICh1LCB2KSBwYWRkaW5nIC0+IGNoYXIgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyBwYWRwcmVjIHN5bWIgLT5cbiAgICAoKiBGbGFncyB1c2VkIHRvIGNoZWNrIG9wdGlvbiB1c2FnZXMvY29tcGF0aWJpbGl0aWVzLiAqKVxuICAgIGxldCBwbHVzX3VzZWQgID0gcmVmIGZhbHNlIGFuZCBoYXNoX3VzZWQgPSByZWYgZmFsc2VcbiAgICBhbmQgc3BhY2VfdXNlZCA9IHJlZiBmYWxzZSBhbmQgaWduX3VzZWQgICA9IHJlZiBmYWxzZVxuICAgIGFuZCBwYWRfdXNlZCAgID0gcmVmIGZhbHNlIGFuZCBwcmVjX3VzZWQgID0gcmVmIGZhbHNlIGluXG5cbiAgICAoKiBBY2Nlc3MgdG8gb3B0aW9ucywgdXBkYXRlIGZsYWdzLiAqKVxuICAgIGxldCBnZXRfcGx1cyAgICAoKSA9IHBsdXNfdXNlZCAgOj0gdHJ1ZTsgcGx1c1xuICAgIGFuZCBnZXRfaGFzaCAgICgpID0gaGFzaF91c2VkIDo9IHRydWU7IGhhc2hcbiAgICBhbmQgZ2V0X3NwYWNlICAgKCkgPSBzcGFjZV91c2VkIDo9IHRydWU7IHNwYWNlXG4gICAgYW5kIGdldF9pZ24gICAgICgpID0gaWduX3VzZWQgICA6PSB0cnVlOyBpZ25cbiAgICBhbmQgZ2V0X3BhZCAgICAgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZFxuICAgIGFuZCBnZXRfcHJlYyAgICAoKSA9IHByZWNfdXNlZCAgOj0gdHJ1ZTsgcHJlY1xuICAgIGFuZCBnZXRfcGFkcHJlYyAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkcHJlYyBpblxuXG4gICAgbGV0IGdldF9pbnRfcGFkICgpIDogKHgseSkgcGFkZGluZyA9XG4gICAgICAoKiAlNS4zZCBpcyBhY2NlcHRlZCBhbmQgbWVhbmluZ2Z1bDogcGFkIHRvIGxlbmd0aCA1IHdpdGhcbiAgICAgICAgIHNwYWNlcywgYnV0IGZpcnN0IHBhZCB3aXRoIHplcm9zIHVwdG8gbGVuZ3RoIDMgKDAtcGFkZGluZ1xuICAgICAgICAgaXMgdGhlIGludGVycHJldGF0aW9uIG9mIFwicHJlY2lzaW9uXCIgZm9yIGludGVnZXIgZm9ybWF0cykuXG5cbiAgICAgICAgICUwNS4zZCBpcyByZWR1bmRhbnQ6IHBhZCB0byBsZW5ndGggNSAqd2l0aCB6ZXJvcyosIGJ1dFxuICAgICAgICAgZmlyc3QgcGFkIHdpdGggemVyb3MuLi4gVG8gYWRkIGluc3VsdCB0byB0aGUgaW5qdXJ5LCB0aGVcbiAgICAgICAgIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSAwLXBhZGRpbmcgaW5kaWNhdGlvbiBhbmRcbiAgICAgICAgIGRvZXMgdGhlIDUgcGFkZGluZyB3aXRoIHNwYWNlcyBpbnN0ZWFkLiBXZSByZXVzZSB0aGlzXG4gICAgICAgICBpbnRlcnByZXRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IHN0YXRpY2FsbHkgcmVqZWN0IHRoaXNcbiAgICAgICAgIGZvcm1hdCB3aGVuIHRoZSBsZWdhY3kgbW9kZSBpcyBkaXNhYmxlZCwgdG8gcHJvdGVjdCBzdHJpY3RcbiAgICAgICAgIHVzZXJzIGZyb20gdGhpcyBjb3JuZXIgY2FzZS4gKilcbiAgICAgICBtYXRjaCBnZXRfcGFkICgpLCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICAgICB8IHBhZCwgTm9fcHJlY2lzaW9uIC0+IHBhZFxuICAgICAgICAgfCBOb19wYWRkaW5nLCBfICAgICAtPiBOb19wYWRkaW5nXG4gICAgICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgbiksIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKVxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcywgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBMaXRfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWRcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkIGluXG5cbiAgICAoKiBDaGVjayB0aGF0IHBhZHR5IDw+IFplcm9zLiAqKVxuICAgIGxldCBjaGVja19ub18wIHN5bWIgKHR5cGUgYSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpIDogKGEsYikgcGFkZGluZyA9XG4gICAgICBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoKExlZnQgfCBSaWdodCksIF8pIC0+IHBhZFxuICAgICAgfCBBcmdfcGFkZGluZyAoTGVmdCB8IFJpZ2h0KSAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcyAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgaW5cblxuICAgICgqIEdldCBwYWRkaW5nIGFzIGEgcGFkX29wdGlvbiAoc2VlIFwiJV9cIiwgXCIle1wiLCBcIiUoXCIgYW5kIFwiJVtcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgb3B0X29mX3BhZCBjICh0eXBlIGEpICh0eXBlIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgPSBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IE5vbmVcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aCkgLT4gU29tZSB3aWR0aFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInMCdcIlxuICAgICAgfCBMaXRfcGFkZGluZyAoTGVmdCwgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIictJ1wiXG4gICAgICB8IEFyZ19wYWRkaW5nIF8gLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInKidcIlxuICAgIGluXG4gICAgbGV0IGdldF9wYWRfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWQgKCkpIGluXG4gICAgbGV0IGdldF9wYWRwcmVjX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkcHJlYyAoKSkgaW5cblxuICAgICgqIEdldCBwcmVjaXNpb24gYXMgYSBwcmVjX29wdGlvbiAoc2VlIFwiJV9mXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IGdldF9wcmVjX29wdCAoKSA9IG1hdGNoIGdldF9wcmVjICgpIHdpdGhcbiAgICAgIHwgTm9fcHJlY2lzaW9uICAgICAgIC0+IE5vbmVcbiAgICAgIHwgTGl0X3ByZWNpc2lvbiBuZGVjIC0+IFNvbWUgbmRlY1xuICAgICAgfCBBcmdfcHJlY2lzaW9uICAgICAgLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicqJ1wiXG4gICAgaW5cblxuICAgIGxldCBmbXRfcmVzdWx0ID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnLCcgLT5cbiAgICAgIHBhcnNlIHN0cl9pbmQgZW5kX2luZFxuICAgIHwgJ2MnIC0+XG4gICAgICBsZXQgY2hhcl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoQ2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgc2Nhbl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlMGMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChTY2FuX25leHRfY2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggZ2V0X3BhZF9vcHQgJ2MnIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSAwIC0+IHNjYW5fZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSBfbiAtPlxuICAgICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yXG4gICAgICAgICAgIHRoZW4gaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZFxuICAgICAgICAgICBlbHNlICgqIGxlZ2FjeSBpZ25vcmVzICVjIHdpZHRocyAqKSBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgZW5kXG4gICAgfCAnQycgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jYW1sX2NoYXIsZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChDYW1sX2NoYXIgZm10X3Jlc3QpXG4gICAgfCAncycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChTdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnUycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfY2FtbF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKENhbWxfc3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+XG4gICAgICBsZXQgaWNvbnYgPSBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IFRva2VuX2NvdW50ZXIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIHwgJ24nIHwgJ0wnIHdoZW4gc3RyX2luZD1lbmRfaW5kIHx8IG5vdCAoaXNfaW50X2Jhc2Ugc3RyLltzdHJfaW5kXSkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IGNvdW50ZXJfb2ZfY2hhciBzeW1iIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50MzIgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ24nIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpXG4gICAgICAgICAgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdMJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50NjQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2YnIHwgJ2UnIHwgJ0UnIHwgJ2cnIHwgJ0cnIHwgJ0YnIHwgJ2gnIHwgJ0gnIC0+XG4gICAgICBsZXQgZmNvbnYgPVxuICAgICAgICBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kXG4gICAgICAgICAgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zsb2F0IChnZXRfcGFkX29wdCAnXycsIGdldF9wcmVjX29wdCAoKSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoRmxvYXQgKGZjb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdiJyB8ICdCJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9ib29sIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChCb29sIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2EnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQWxwaGEgZm10X3Jlc3QpXG4gICAgfCAndCcgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChUaGV0YSBmbXRfcmVzdClcbiAgICB8ICdyJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChSZWFkZXIgZm10X3Jlc3QpXG4gICAgfCAnIScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGbHVzaCBmbXRfcmVzdClcbiAgICB8ICgnJScgfCAnQCcpIGFzIGMgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKGMsIGZtdF9yZXN0KSlcbiAgICB8ICd7JyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJ30nIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICd7Jywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnKCcgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICcpJyBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJygnLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICdbJyAtPlxuICAgICAgbGV0IG5leHRfaW5kLCBjaGFyX3NldCA9IHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdfJywgY2hhcl9zZXQpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ1snLCBjaGFyX3NldCwgZm10X3Jlc3QpKVxuICAgIHwgJy0nIHwgJysnIHwgJyMnIHwgJyAnIHwgJ18nIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBmbGFnICVDIGlzIG9ubHkgYWxsb3dlZCBhZnRlciB0aGUgJyUlJywgYmVmb3JlIHBhZGRpbmcgYW5kIHByZWNpc2lvblwiXG4gICAgICAgIHN0ciBwY3RfaW5kIHN5bWJcbiAgICB8IF8gLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGludmFsaWQgY29udmVyc2lvbiBcXFwiJSUlY1xcXCJcIiBzdHIgKHN0cl9pbmQgLSAxKSBzeW1iXG4gICAgaW5cbiAgICAoKiBDaGVjayBmb3IgdW51c2VkIG9wdGlvbnMsIGFuZCByZWplY3QgdGhlbSBhcyBpbmNvbXBhdGlibGUuXG5cbiAgICAgICBTdWNoIGNoZWNrcyBuZWVkIHRvIGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGUgbGVnYWN5XG4gICAgICAgcGFyc2VyIHNpbGVudGx5IGlnbm9yZWQgaW5jb21wYXRpYmxlIGZsYWdzLiAqKVxuICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlbiBiZWdpblxuICAgIGlmIG5vdCAhcGx1c191c2VkICYmIHBsdXMgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIjtcbiAgICBpZiBub3QgIWhhc2hfdXNlZCAmJiBoYXNoIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCI7XG4gICAgaWYgbm90ICFzcGFjZV91c2VkICYmIHNwYWNlIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCI7XG4gICAgaWYgbm90ICFwYWRfdXNlZCAgJiYgUGFkZGluZ19FQkIgcGFkIDw+IFBhZGRpbmdfRUJCIE5vX3BhZGRpbmcgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCJgcGFkZGluZydcIjtcbiAgICBpZiBub3QgIXByZWNfdXNlZCAmJiBQcmVjaXNpb25fRUJCIHByZWMgPD4gUHJlY2lzaW9uX0VCQiBOb19wcmVjaXNpb24gdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIChpZiBpZ24gdGhlbiAnXycgZWxzZSBzeW1iKVxuICAgICAgICBcImBwcmVjaXNpb24nXCI7XG4gICAgaWYgaWduICYmIHBsdXMgdGhlbiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJysnXCI7XG4gICAgZW5kO1xuICAgICgqIHRoaXMgbGFzdCB0ZXN0IG11c3Qgbm90IGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgIGFzIGlnbm9yaW5nIGl0IHdvdWxkIHR5cGljYWxseSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdHlwaW5nXG4gICAgICAgdGhhbiB3aGF0IHRoZSBsZWdhY3kgcGFyc2VyIHVzZWQgKilcbiAgICBpZiBub3QgIWlnbl91c2VkICYmIGlnbiB0aGVuXG4gICAgICBiZWdpbiBtYXRjaCBzeW1iIHdpdGhcbiAgICAgICAgKCogYXJndW1lbnQtbGVzcyBmb3JtYXRzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpbiBsZWdhY3kgbW9kZSAqKVxuICAgICAgICB8ICgnQCcgfCAnJScgfCAnIScgfCAnLCcpIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+ICgpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJ18nXCJcbiAgICAgIGVuZDtcbiAgICBmbXRfcmVzdWx0XG5cbiAgKCogUGFyc2UgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoYWZ0ZXIgJ0AnKS4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX2F0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIEVuZF9vZl9mb3JtYXQpKVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnWycgLT5cbiAgICAgICAgcGFyc2VfdGFnIGZhbHNlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX2JveCwgZm10X3Jlc3QpKVxuICAgICAgfCAneycgLT5cbiAgICAgICAgcGFyc2VfdGFnIHRydWUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICd9JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfdGFnLCBmbXRfcmVzdCkpXG4gICAgICB8ICcsJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCxcIiwgMCwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJAIFwiLCAxLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnOycgLT5cbiAgICAgICAgcGFyc2VfZ29vZF9icmVhayAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJz8nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGRmx1c2gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZvcmNlX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJy4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGbHVzaF9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBwYXJzZV9tYWdpY19zaXplIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfYXQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIHdoZW4gc3RyX2luZCArIDEgPCBlbmRfaW5kICYmIHN0ci5bc3RyX2luZCArIDFdID0gJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX3BlcmNlbnQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBmbXRfcmVzdCkpXG4gICAgICB8IGMgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgYywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8bmFtZT4gYWZ0ZXIgXCJAe1wiIG9yIFwiQFtcIi4gKilcbiAgYW5kIHBhcnNlX3RhZyA6IHR5cGUgZSBmIC4gYm9vbCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGlzX29wZW5fdGFnIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIHRyeVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIGxldCBpbmQgPSBTdHJpbmcuaW5kZXhfZnJvbSBzdHIgKHN0cl9pbmQgKyAxKSAnPicgaW5cbiAgICAgICAgaWYgaW5kID49IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgc3RyX2luZCAoaW5kIC0gc3RyX2luZCArIDEpIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKGluZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgKGluZCArIDEpIGluXG4gICAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChzdWJfZm10LCBzdWJfc3RyKSBpblxuICAgICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKEVuZF9vZl9mb3JtYXQsIFwiXCIpIGluXG4gICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDx3aWR0aCBvZmZzZXQ+IGFmdGVyIFwiQDtcIi4gKilcbiAgYW5kIHBhcnNlX2dvb2RfYnJlYWsgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbGV0IG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCA9XG4gICAgICB0cnlcbiAgICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgfHwgc3RyLltzdHJfaW5kXSA8PiAnPCcgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiAoXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgd2lkdGggPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfM10gd2l0aFxuICAgICAgICAgICAgICB8ICc+JyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfMy1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF8zICsgMSwgQnJlYWsgKHMsIHdpZHRoLCAwKVxuICAgICAgICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF80LCBvZmZzZXQgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMyBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzQgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF81XSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF81LXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzUgKyAxLCBCcmVhayAocywgd2lkdGgsIG9mZnNldClcbiAgICAgICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICApXG4gICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIHN0cl9pbmQsIEJyZWFrIChcIkA7XCIsIDEsIDApXG4gICAgaW5cbiAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSB0aGUgc2l6ZSBpbiBhIDxuPi4gKilcbiAgYW5kIHBhcnNlX21hZ2ljX3NpemUgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbWF0Y2hcbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCBzaXplID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfM10gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQgLSAyKSAoc3RyX2luZF8zIC0gc3RyX2luZCArIDMpIGluXG4gICAgICAgICAgU29tZSAoc3RyX2luZF8zICsgMSwgTWFnaWNfc2l6ZSAocywgc2l6ZSkpXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBOb25lXG4gICAgd2l0aFxuICAgIHwgU29tZSAobmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0KSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyAnPCcsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSBhbmQgY29uc3RydWN0IGEgY2hhciBzZXQuICopXG4gIGFuZCBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG5cbiAgICBsZXQgY2hhcl9zZXQgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgICBsZXQgYWRkX2NoYXIgYyA9XG4gICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYztcbiAgICBpblxuICAgIGxldCBhZGRfcmFuZ2UgYyBjJyA9XG4gICAgICBmb3IgaSA9IGludF9vZl9jaGFyIGMgdG8gaW50X29mX2NoYXIgYycgZG9cbiAgICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IChjaGFyX29mX2ludCBpKTtcbiAgICAgIGRvbmU7XG4gICAgaW5cblxuICAgIGxldCBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQgPVxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiAnJSUnIGFsb25lIGlzIG5vdCBhY2NlcHRlZCBpbiBjaGFyYWN0ZXIgc2V0cywgXFxcbiAgICAgICAgIHVzZSAlJSUlIGluc3RlYWQgYXQgcG9zaXRpb24gJWQuXCIgc3RyIHN0cl9pbmRcbiAgICBpblxuXG4gICAgKCogUGFyc2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGNoYXIgc2V0LiAqKVxuICAgIGxldCByZWMgcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBsZXQgYyA9IHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFBhcnNlIHRoZSBjb250ZW50IG9mIGEgY2hhciBzZXQgdW50aWwgdGhlIGZpcnN0ICddJy4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfY29udGVudCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBUZXN0IGZvciByYW5nZSBpbiBjaGFyIHNldC4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcbiAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgd2hlbiBjID0gJyUnIC0+XG4gICAgICAgIGFkZF9jaGFyIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBpZiBjID0gJyUnIHRoZW4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kO1xuICAgICAgICAoKiBub3RlIHRoYXQgJ0AnIGFsb25lIGlzIGFjY2VwdGVkLCBhcyBkb25lIGJ5IHRoZSBsZWdhY3lcbiAgICAgICAgICAgaW1wbGVtZW50YXRpb247IHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSByZXF1aXJlcyAlQFxuICAgICAgICAgICBzbyB3ZSBjb3VsZCB3YXJuIG9uIHRoYXQgKilcbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgYydcblxuICAgICgqIE1hbmFnZSByYW5nZSBpbiBjaGFyIHNldCAoZXhjZXB0IGlmIHRoZSAnLScgdGhlIGxhc3QgY2hhciBiZWZvcmUgJ10nKSAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICclJyAtPlxuICAgICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgLT5cbiAgICAgICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDIpIGVuZF9pbmRcbiAgICAgICAgICB8IF8gLT4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICBpblxuICAgIGxldCBzdHJfaW5kLCByZXZlcnNlID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgICAgfCAnXicgLT4gc3RyX2luZCArIDEsIHRydWVcbiAgICAgICAgfCBfIC0+IHN0cl9pbmQsIGZhbHNlIGluXG4gICAgbGV0IG5leHRfaW5kID0gcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgbGV0IGNoYXJfc2V0ID0gZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0IGluXG4gICAgbmV4dF9pbmQsIChpZiByZXZlcnNlIHRoZW4gcmV2X2NoYXJfc2V0IGNoYXJfc2V0IGVsc2UgY2hhcl9zZXQpXG5cbiAgKCogQ29uc3VtZSBhbGwgbmV4dCBzcGFjZXMsIHJhaXNlIGFuIEZhaWx1cmUgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBpZiBzdHIuW3N0cl9pbmRdID0gJyAnIHRoZW4gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBlbHNlIHN0cl9pbmRcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZSBpZiBlbmRfaW5kIGlzXG4gICAgIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgYWNjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGFjYyAqIDEwICsgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCcpIGluXG4gICAgICBpZiBuZXdfYWNjID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGludGVnZXIgJWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdCAlZFwiXG4gICAgICAgICAgc3RyIG5ld19hY2MgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCBuZXdfYWNjXG4gICAgfCBfIC0+IHN0cl9pbmQsIGFjY1xuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlXG4gICAgIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX2ludGVnZXIgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMFxuICAgIHwgJy0nIC0+IChcbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICAgIGxldCBuZXh0X2luZCwgbiA9IHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCAwIGluXG4gICAgICAgIG5leHRfaW5kLCAtblxuICAgICAgfCBjIC0+XG4gICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiZGlnaXRcIiBjXG4gICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBBZGQgYSBsaXRlcmFsIHRvIGEgZm9ybWF0IGZyb20gYSBsaXRlcmFsIGNoYXJhY3RlciBzdWItc2VxdWVuY2UuICopXG4gIGFuZCBhZGRfbGl0ZXJhbCA6IHR5cGUgYSBkIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IChhLCBfLCBfLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGZtdCAtPiBtYXRjaCBzdHJfaW5kIC0gbGl0X3N0YXJ0IHdpdGhcbiAgICB8IDAgICAgLT4gRm10X0VCQiBmbXRcbiAgICB8IDEgICAgLT4gRm10X0VCQiAoQ2hhcl9saXRlcmFsIChzdHIuW2xpdF9zdGFydF0sIGZtdCkpXG4gICAgfCBzaXplIC0+IEZtdF9FQkIgKFN0cmluZ19saXRlcmFsIChTdHJpbmcuc3ViIHN0ciBsaXRfc3RhcnQgc2l6ZSwgZm10KSlcblxuICAoKiBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdWItZm9ybWF0XG4gICAgIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIFwiJX1cIiBvciBcIiUpXCIpICopXG4gIGFuZCBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiB1bmNsb3NlZCBzdWItZm9ybWF0LCBcXFxuICAgICAgICAgZXhwZWN0ZWQgXFxcIiUlJWNcXFwiIGF0IGNoYXJhY3RlciBudW1iZXIgJWRcIiBzdHIgYyBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJyUnIC0+XG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGlmIHN0ci5bc3RyX2luZCArIDFdID0gYyB0aGVuICgqIEVuZCBvZiBmb3JtYXQgZm91bmQgKikgc3RyX2luZCBlbHNlXG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgfCAnXycgLT5cbiAgICAgICAgICAoKiBTZWFyY2ggZm9yIFwiJV8oXCIgb3IgXCIlX3tcIi4gKilcbiAgICAgICAgICBpZiBzdHJfaW5kICsgMiA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAyXSB3aXRoXG4gICAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICgqICV7Li4uJX0gc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICgqICUoLi4uJSkgc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICd9JyAtPlxuICAgICAgICAgICgqIEVycm9yOiAlKC4uLiV9LiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICcpJ1wiICd9J1xuICAgICAgICB8ICcpJyAtPlxuICAgICAgICAgICgqIEVycm9yOiAley4uLiUpLiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICd9J1wiICcpJ1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICBlbmRcbiAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAoKiBDaGVjayBpZiBzeW1iIGlzIGEgdmFsaWQgaW50IGNvbnZlcnNpb24gYWZ0ZXIgXCIlbFwiLCBcIiVuXCIgb3IgXCIlTFwiICopXG4gIGFuZCBpc19pbnRfYmFzZSBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuXG4gICgqIENvbnZlcnQgYSBjaGFyIChsLCBuIG9yIEwpIHRvIGl0cyBhc3NvY2lhdGVkIGNvdW50ZXIuICopXG4gIGFuZCBjb3VudGVyX29mX2NoYXIgc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2wnIC0+IExpbmVfY291bnRlciAgfCAnbicgLT4gQ2hhcl9jb3VudGVyXG4gICAgfCAnTCcgLT4gVG9rZW5fY291bnRlciB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgaW50X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbWF0Y2ggcGx1cywgaGFzaCwgc3BhY2UsIHN5bWIgd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9kICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfaVxuICAgIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2QnIC0+IEludF9zZCB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdpJyAtPiBJbnRfc2lcbiAgICB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfcGQgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X3BpXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAneCcgLT4gSW50X3ggIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ1gnIC0+IEludF9YXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAneCcgLT4gSW50X0N4IHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ1gnIC0+IEludF9DWFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ28nIC0+IEludF9vXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnbycgLT4gSW50X0NvXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAndScgLT4gSW50X3VcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdkJyAtPiBJbnRfQ2RcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdpJyAtPiBJbnRfQ2lcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd1JyAtPiBJbnRfQ3VcbiAgICB8IF8sIHRydWUsIF8sICd4JyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ3hcbiAgICB8IF8sIHRydWUsIF8sICdYJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ1hcbiAgICB8IF8sIHRydWUsIF8sICdvJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ29cbiAgICB8IF8sIHRydWUsIF8sICgnZCcgfCAnaScgfCAndScpIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBmYWxzZSBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCJcbiAgICB8IHRydWUsIF8sIHRydWUsIF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIHRydWUsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiXG4gICAgfCB0cnVlLCBfLCBmYWxzZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIGZhbHNlIGhhc2ggc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgZmFsc2UsIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3BhY2UsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGZsb2F0X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBsZXQgZmxhZyA9IG1hdGNoIHBsdXMsIHNwYWNlIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX1xuICAgIHwgZmFsc2UsICB0cnVlIC0+IEZsb2F0X2ZsYWdfc1xuICAgIHwgIHRydWUsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfcFxuICAgIHwgIHRydWUsICB0cnVlIC0+XG4gICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gRmxvYXRfZmxhZ19wXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIiBpblxuICAgIGxldCBraW5kID0gbWF0Y2ggaGFzaCwgc3ltYiB3aXRoXG4gICAgfCBfLCAnZicgLT4gRmxvYXRfZlxuICAgIHwgXywgJ2UnIC0+IEZsb2F0X2VcbiAgICB8IF8sICdFJyAtPiBGbG9hdF9FXG4gICAgfCBfLCAnZycgLT4gRmxvYXRfZ1xuICAgIHwgXywgJ0cnIC0+IEZsb2F0X0dcbiAgICB8IF8sICdoJyAtPiBGbG9hdF9oXG4gICAgfCBfLCAnSCcgLT4gRmxvYXRfSFxuICAgIHwgZmFsc2UsICdGJyAtPiBGbG9hdF9GXG4gICAgfCB0cnVlLCAnRicgLT4gRmxvYXRfQ0ZcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlIGluXG4gICAgZmxhZywga2luZFxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBpbmNvbXBhdGlibGUgb3B0aW9ucy4qKVxuICBhbmQgaW5jb21wYXRpYmxlX2ZsYWcgOiB0eXBlIGEgLiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nIC0+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIiwiKCogQ29udl9lcnJvcjogTW9kdWxlIGZvciBIYW5kbGluZyBFcnJvcnMgZHVyaW5nIEF1dG9tYXRlZCBZb2pzb25cbiAgIENvbnZlcnNpb25zICopXG5cbm9wZW4hIFN0ZExhYmVsc1xub3BlbiBZb2pzb25fY29udlxuXG5sZXQgc3ByaW50ZiA9IFByaW50Zi5zcHJpbnRmXG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHR1cGxlcyAqKVxuXG5sZXQgdHVwbGVfb2Zfc2l6ZV9uX2V4cGVjdGVkIGxvYyBuIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAoc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdHVwbGUgb2Ygc2l6ZSAlZCBleHBlY3RlZFwiIGxvYyBuKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHN1bSB0eXBlcyAqKVxuXG5sZXQgc3RhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBzdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIHRhZyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiBzdW0gdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiIGxvYyB0YWdcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBzdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYSBuZXN0ZWQgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhbiBlbXB0eSBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IHVuZXhwZWN0ZWRfc3RhZyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHVuZXhwZWN0ZWQgdmFyaWFudCBjb25zdHJ1Y3RvclwiKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHJlY29yZHMgKilcblxubGV0IHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIGxldCBmbGRfbmFtZXNfc3RyID0gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgcmV2X2ZsZF9uYW1lcykgfnNlcDpcIiBcIiBpblxuICBsZXQgbXNnID0gc3ByaW50ZiBcIiVzX29mX3lvanNvbjogJXM6ICVzXCIgbG9jIHdoYXQgZmxkX25hbWVzX3N0ciBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9kdXBsaWNhdGVfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJkdXBsaWNhdGUgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlY29yZF9leHRyYV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImV4dHJhIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWMgcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgPSBmdW5jdGlvblxuICB8IFtdIC0+IFN0cmluZy5jb25jYXQgKExpc3QucmV2IGZpZWxkcykgfnNlcDpcIiBcIlxuICB8ICh0cnVlLCBmaWVsZCkgOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIChmaWVsZCA6OiBmaWVsZHMpIHJlc3RcbiAgfCBfIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgcmVzdFxuOztcblxubGV0IHJlY29yZF91bmRlZmluZWRfZWxlbWVudHMgbG9jIHlvanNvbiBsc3QgPVxuICBsZXQgdW5kZWZpbmVkID0gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBbXSBsc3QgaW5cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdGhlIGZvbGxvd2luZyByZWNvcmQgZWxlbWVudHMgd2VyZSB1bmRlZmluZWQ6ICVzXCIgbG9jIHVuZGVmaW5lZFxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9saXN0X2luc3RlYWRfYXRvbSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9IGxvYyBeIFwiX29mX3lvanNvbjogbGlzdCBpbnN0ZWFkIG9mIGF0b20gZm9yIHJlY29yZCBleHBlY3RlZFwiIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX3BvbHlfZmllbGRfdmFsdWUgbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIGxvY1xuICAgIF4gXCJfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCB2YWx1ZXMgb2YgdHlwZXMgcmVzdWx0aW5nIGZyb20gcG9seW1vcnBoaWMgcmVjb3JkIFxcXG4gICAgICAgZmllbGRzXCJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHBvbHltb3JwaGljIHZhcmlhbnRzICopXG5cbmV4Y2VwdGlvbiBOb192YXJpYW50X21hdGNoXG5cbmxldCBub192YXJpYW50X21hdGNoICgpID0gcmFpc2UgTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fbWF0Y2hpbmdfdmFyaWFudF9mb3VuZCBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IG5vIG1hdGNoaW5nIHZhcmlhbnQgZm91bmRcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIGNuc3RyIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGZcbiAgICAgIFwiJXNfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIlxuICAgICAgbG9jXG4gICAgICBjbnN0clxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHB0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnIHRha2VzIGFuIGFyZ3VtZW50XCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IGEgbmVzdGVkIGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGUgZW1wdHkgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV90eXBlIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdHJ5aW5nIHRvIGNvbnZlcnQgYW4gZW1wdHkgdHlwZVwiKSB5b2pzb25cbjs7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGlkIDogJ2EgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5sZXQgY29uc3QgYyBfID0gY1xubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1lc3NhZ2UgZGlnZXN0IChNRDUpICopXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuZXh0ZXJuYWwgdW5zYWZlX3N0cmluZzogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfc3RyaW5nXCJcbmV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG5sZXQgc3RyaW5nIHN0ciA9XG4gIHVuc2FmZV9zdHJpbmcgc3RyIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG5sZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG5sZXQgc3Vic3RyaW5nIHN0ciBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfc3RyaW5nIHN0ciBvZnMgbGVuXG5cbmxldCBzdWJieXRlcyBiIG9mcyBsZW4gPSBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG5sZXQgZmlsZSBmaWxlbmFtZSA9XG4gIGxldCBpYyA9IG9wZW5faW5fYmluIGZpbGVuYW1lIGluXG4gIG1hdGNoIGNoYW5uZWwgaWMgKC0xKSB3aXRoXG4gICAgfCBkIC0+IGNsb3NlX2luIGljOyBkXG4gICAgfCBleGNlcHRpb24gZSAtPiBjbG9zZV9pbiBpYzsgcmFpc2UgZVxuXG5sZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID1cbiAgb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG5sZXQgaW5wdXQgY2hhbiA9IHJlYWxseV9pbnB1dF9zdHJpbmcgY2hhbiAxNlxuXG5sZXQgY2hhcl9oZXggbiA9XG4gIENoYXIudW5zYWZlX2NociAobiArIGlmIG4gPCAxMCB0aGVuIENoYXIuY29kZSAnMCcgZWxzZSAoQ2hhci5jb2RlICdhJyAtIDEwKSlcblxubGV0IHRvX2hleCBkID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBkIDw+IDE2IHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QudG9faGV4XCI7XG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMzIgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgbGV0IHggPSBDaGFyLmNvZGUgZC5baV0gaW5cbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKSAoY2hhcl9oZXggKHggbHNyIDQpKTtcbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKzEpIChjaGFyX2hleCAoeCBsYW5kIDB4MGYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcblxubGV0IGZyb21faGV4IHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPD4gMzIgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5mcm9tX2hleFwiO1xuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkRpZ2VzdC5mcm9tX2hleFwiKVxuICBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMTYgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgQnl0ZXMuc2V0IHJlc3VsdCBpIChDaGFyLmNociAoYnl0ZSAoMiAqIGkpKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEhhc2ggdGFibGVzICopXG5cbigqIFdlIGRvIGR5bmFtaWMgaGFzaGluZywgYW5kIHJlc2l6ZSB0aGUgdGFibGUgYW5kIHJlaGFzaCB0aGUgZWxlbWVudHNcbiAgIHdoZW4gYnVja2V0cyBiZWNvbWUgdG9vIGxvbmcuICopXG5cbnR5cGUgKCdhLCAnYikgdCA9XG4gIHsgbXV0YWJsZSBzaXplOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogbnVtYmVyIG9mIGVudHJpZXMgKilcbiAgICBtdXRhYmxlIGRhdGE6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgYXJyYXk7ICAoKiB0aGUgYnVja2V0cyAqKVxuICAgIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zaXplOiBpbnQ7ICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICB9XG5cbmFuZCAoJ2EsICdiKSBidWNrZXRsaXN0ID1cbiAgICBFbXB0eVxuICB8IENvbnMgb2YgeyBtdXRhYmxlIGtleTogJ2E7XG4gICAgICAgICAgICAgIG11dGFibGUgZGF0YTogJ2I7XG4gICAgICAgICAgICAgIG11dGFibGUgbmV4dDogKCdhLCAnYikgYnVja2V0bGlzdCB9XG5cbigqIFRoZSBzaWduIG9mIGluaXRpYWxfc2l6ZSBlbmNvZGVzIHRoZSBmYWN0IHRoYXQgYSB0cmF2ZXJzYWwgaXNcbiAgIG9uZ29pbmcgb3Igbm90LlxuXG4gICBUaGlzIGRpc2FibGVzIHRoZSBlZmZpY2llbnQgaW4gcGxhY2UgaW1wbGVtZW50YXRpb24gb2YgcmVzaXppbmcuXG4qKVxuXG5sZXQgb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICB8fCBoLmluaXRpYWxfc2l6ZSA8IDBcblxubGV0IGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIGguaW5pdGlhbF9zaXplIDwtIC0gaC5pbml0aWFsX3NpemVcblxuKCogVG8gcGljayByYW5kb20gc2VlZHMgaWYgcmVxdWVzdGVkICopXG5cbmxldCByYW5kb21pemVkX2RlZmF1bHQgPVxuICBsZXQgcGFyYW1zID1cbiAgICB0cnkgU3lzLmdldGVudiBcIk9DQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICBTdHJpbmcuY29udGFpbnMgcGFyYW1zICdSJ1xuXG5sZXQgcmFuZG9taXplZCA9IHJlZiByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IHJhbmRvbWl6ZWQgOj0gdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSAhcmFuZG9taXplZFxuXG5sZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG5sZXQgY2xlYXIgaCA9XG4gIGlmIGguc2l6ZSA+IDAgdGhlbiBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIEFycmF5LmZpbGwgaC5kYXRhIDAgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIEVtcHR5XG4gIGVuZFxuXG5sZXQgcmVzZXQgaCA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICAgIHx8IGxlbiA9IGFicyBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgY2xlYXIgaFxuICBlbHNlIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgKGFicyBoLmluaXRpYWxfc2l6ZSkgRW1wdHlcbiAgZW5kXG5cbmxldCBjb3B5X2J1Y2tldGxpc3QgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IEVtcHR5XG4gIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgbGV0IHJlYyBsb29wIHByZWMgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICB8IENvbnMgcHJlYyAtPiAgcHJlYy5uZXh0IDwtIHJcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGxvb3AgciBuZXh0XG4gICAgICBpblxuICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICBsb29wIHIgbmV4dDtcbiAgICAgIHJcblxubGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5tYXAgY29weV9idWNrZXRsaXN0IGguZGF0YSB9XG5cbmxldCBsZW5ndGggaCA9IGguc2l6ZVxuXG5sZXQgaW5zZXJ0X2FsbF9idWNrZXRzIGluZGV4ZnVuIGlucGxhY2Ugb2RhdGEgbmRhdGEgPVxuICBsZXQgbnNpemUgPSBBcnJheS5sZW5ndGggbmRhdGEgaW5cbiAgbGV0IG5kYXRhX3RhaWwgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gIGxldCByZWMgaW5zZXJ0X2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPiAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBhcyBjZWxsIC0+XG4gICAgICAgIGxldCBjZWxsID1cbiAgICAgICAgICBpZiBpbnBsYWNlIHRoZW4gY2VsbFxuICAgICAgICAgIGVsc2UgQ29ucyB7a2V5OyBkYXRhOyBuZXh0ID0gRW1wdHl9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBuaWR4ID0gaW5kZXhmdW4ga2V5IGluXG4gICAgICAgIGJlZ2luIG1hdGNoIG5kYXRhX3RhaWwuKG5pZHgpIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBuZGF0YS4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIGNlbGw7XG4gICAgICAgIGVuZDtcbiAgICAgICAgbmRhdGFfdGFpbC4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgaW5zZXJ0X2J1Y2tldCBuZXh0XG4gIGluXG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggb2RhdGEgLSAxIGRvXG4gICAgaW5zZXJ0X2J1Y2tldCBvZGF0YS4oaSlcbiAgZG9uZTtcbiAgaWYgaW5wbGFjZSB0aGVuXG4gICAgZm9yIGkgPSAwIHRvIG5zaXplIC0gMSBkb1xuICAgICAgbWF0Y2ggbmRhdGFfdGFpbC4oaSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIEVtcHR5XG4gICAgZG9uZVxuXG5sZXQgcmVzaXplIGluZGV4ZnVuIGggPVxuICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgbGV0IG9zaXplID0gQXJyYXkubGVuZ3RoIG9kYXRhIGluXG4gIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICBpZiBuc2l6ZSA8IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgbGV0IGlucGxhY2UgPSBub3QgKG9uZ29pbmdfdHJhdmVyc2FsIGgpIGluXG4gICAgaC5kYXRhIDwtIG5kYXRhOyAgICAgICAgICAoKiBzbyB0aGF0IGluZGV4ZnVuIHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICBpbnNlcnRfYWxsX2J1Y2tldHMgKGluZGV4ZnVuIGgpIGlucGxhY2Ugb2RhdGEgbmRhdGFcbiAgZW5kXG5cbmxldCBpdGVyIGYgaCA9XG4gIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+XG4gICAgICAgICgpXG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZiBrZXkgZGF0YTsgZG9fYnVja2V0IG5leHQgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIEVtcHR5XG4gICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gRW1wdHlcbiAgICAgIGVuZFxuICB8IChDb25zICh7a2V5OyBkYXRhOyBuZXh0fSBhcyBjKSkgYXMgc2xvdCAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZiBrZXkgZGF0YSB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgbmV4dFxuICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gc2xvdFxuICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBzbG90XG4gICAgICAgICAgZW5kO1xuICAgICAgICAgIGMuZGF0YSA8LSBkYXRhO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgc2xvdCBuZXh0XG4gICAgICBlbmRcblxubGV0IGZpbHRlcl9tYXBfaW5wbGFjZSBmIGggPVxuICBsZXQgZCA9IGguZGF0YSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBFbXB0eSBoLmRhdGEuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGhcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCBmb2xkIGYgaCBpbml0ID1cbiAgbGV0IHJlYyBkb19idWNrZXQgYiBhY2N1ID1cbiAgICBtYXRjaCBiIHdpdGhcbiAgICAgIEVtcHR5IC0+XG4gICAgICAgIGFjY3VcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBkb19idWNrZXQgbmV4dCAoZiBrZXkgZGF0YSBhY2N1KSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBsZXQgYWNjdSA9IHJlZiBpbml0IGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgYWNjdSA6PSBkb19idWNrZXQgZC4oaSkgIWFjY3VcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICAhYWNjdVxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxudHlwZSBzdGF0aXN0aWNzID0ge1xuICBudW1fYmluZGluZ3M6IGludDtcbiAgbnVtX2J1Y2tldHM6IGludDtcbiAgbWF4X2J1Y2tldF9sZW5ndGg6IGludDtcbiAgYnVja2V0X2hpc3RvZ3JhbTogaW50IGFycmF5XG59XG5cbmxldCByZWMgYnVja2V0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhY2N1XG4gIHwgQ29uc3tuZXh0fSAtPiBidWNrZXRfbGVuZ3RoIChhY2N1ICsgMSkgbmV4dFxuXG5sZXQgc3RhdHMgaCA9XG4gIGxldCBtYmwgPVxuICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGggMCBiKSkgMCBoLmRhdGEgaW5cbiAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICBBcnJheS5pdGVyXG4gICAgKGZ1biBiIC0+XG4gICAgICBsZXQgbCA9IGJ1Y2tldF9sZW5ndGggMCBiIGluXG4gICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICBoLmRhdGE7XG4gIHsgbnVtX2JpbmRpbmdzID0gaC5zaXplO1xuICAgIG51bV9idWNrZXRzID0gQXJyYXkubGVuZ3RoIGguZGF0YTtcbiAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICBidWNrZXRfaGlzdG9ncmFtID0gaGlzdG8gfVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHRibCA9XG4gICgqIGNhcHR1cmUgY3VycmVudCBhcnJheSwgc28gdGhhdCBldmVuIGlmIHRoZSB0YWJsZSBpcyByZXNpemVkIHdlXG4gICAgIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBzYW1lIGFycmF5ICopXG4gIGxldCB0YmxfZGF0YSA9IHRibC5kYXRhIGluXG4gICgqIHN0YXRlOiBpbmRleCAqIG5leHQgYnVja2V0IHRvIHRyYXZlcnNlICopXG4gIGxldCByZWMgYXV4IGkgYnVjayAoKSA9IG1hdGNoIGJ1Y2sgd2l0aFxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCB0YmxfZGF0YVxuICAgICAgICB0aGVuIFNlcS5OaWxcbiAgICAgICAgZWxzZSBhdXgoaSsxKSB0YmxfZGF0YS4oaSkgKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgU2VxLkNvbnMgKChrZXksIGRhdGEpLCBhdXggaSBuZXh0KVxuICBpblxuICBhdXggMCBFbXB0eVxuXG5sZXQgdG9fc2VxX2tleXMgbSA9IFNlcS5tYXAgZnN0ICh0b19zZXEgbSlcblxubGV0IHRvX3NlcV92YWx1ZXMgbSA9IFNlcS5tYXAgc25kICh0b19zZXEgbSlcblxuKCogRnVuY3RvcmlhbCBpbnRlcmZhY2UgKilcblxubW9kdWxlIHR5cGUgSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IGludCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlIDogP3JhbmRvbTpib29sIC0+IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHkgOiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQgOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsIDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXIgOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2VTZWVkZWQoSDogU2VlZGVkSGFzaGVkVHlwZSk6IChTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgdHlwZSBrZXkgPSBILnRcbiAgICB0eXBlICdhIGhhc2h0YmwgPSAoa2V5LCAnYSkgdFxuICAgIHR5cGUgJ2EgdCA9ICdhIGhhc2h0YmxcbiAgICBsZXQgY3JlYXRlID0gY3JlYXRlXG4gICAgbGV0IGNsZWFyID0gY2xlYXJcbiAgICBsZXQgcmVzZXQgPSByZXNldFxuICAgIGxldCBjb3B5ID0gY29weVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGtleSA9XG4gICAgICAoSC5oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIFtdXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE9ZDsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBkIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgICAgIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG4gICAgbGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gICAgICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICAgICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgICAgIGVuZFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgICAgIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgYWRkX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbiAgICBsZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuXG4gICAgbGV0IGl0ZXIgPSBpdGVyXG4gICAgbGV0IGZpbHRlcl9tYXBfaW5wbGFjZSA9IGZpbHRlcl9tYXBfaW5wbGFjZVxuICAgIGxldCBmb2xkID0gZm9sZFxuICAgIGxldCBsZW5ndGggPSBsZW5ndGhcbiAgICBsZXQgc3RhdHMgPSBzdGF0c1xuICAgIGxldCB0b19zZXEgPSB0b19zZXFcbiAgICBsZXQgdG9fc2VxX2tleXMgPSB0b19zZXFfa2V5c1xuICAgIGxldCB0b19zZXFfdmFsdWVzID0gdG9fc2VxX3ZhbHVlc1xuICBlbmRcblxubW9kdWxlIE1ha2UoSDogSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4oKiBQb2x5bW9ycGhpYyBoYXNoIGZ1bmN0aW9uLWJhc2VkIHRhYmxlcyAqKVxuKCogQ29kZSBpbmNsdWRlZCBiZWxvdyB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgdG8gZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsXG4gICB1c2UgLSBzZWUgIzIyMDIgKilcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5cbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5sZXQgaGFzaF9wYXJhbSBuMSBuMiB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gbjEgbjIgMCB4XG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxuXG5sZXQga2V5X2luZGV4IGgga2V5ID1cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDRcbiAgdGhlbiAoc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuICBlbHNlIGludmFsaWRfYXJnIFwiSGFzaHRibDogdW5zdXBwb3J0ZWQgaGFzaCB0YWJsZSBmb3JtYXRcIlxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaCA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiAoQXJyYXkubGVuZ3RoIGguZGF0YSkgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfb3Blbl90YWcgc3RhdGUgcyA9IHBwX29wZW5fc3RhZyBzdGF0ZSAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSA9IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKClcblxubGV0IHBwX3NldF9wcmludF90YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9wcmludF90YWdzIDwtIGJcbmxldCBwcF9zZXRfbWFya190YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9tYXJrX3RhZ3MgPC0gYlxubGV0IHBwX2dldF9wcmludF90YWdzIHN0YXRlICgpID0gc3RhdGUucHBfcHJpbnRfdGFnc1xubGV0IHBwX2dldF9tYXJrX3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJrX3RhZ3NcbmxldCBwcF9zZXRfdGFncyBzdGF0ZSBiID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYjsgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiXG5cblxuKCogSGFuZGxpbmcgdGFnIGhhbmRsaW5nIGZ1bmN0aW9uczogZ2V0L3NldCBmdW5jdGlvbnMuICopXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgbWFya19vcGVuX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnO1xuICBtYXJrX2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZztcbiAgcHJpbnRfb3Blbl9zdGFnID0gc3RhdGUucHBfcHJpbnRfb3Blbl90YWc7XG4gIHByaW50X2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWc7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fc3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV9zdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3N0YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3N0YWcgPSBwY3Q7XG4gIH0gPVxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIG1vdDtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gbWN0O1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBwb3Q7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBwY3RcblxuXG4oKiBJbml0aWFsaXplIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX3Jpbml0IHN0YXRlID1cbiAgcHBfY2xlYXJfcXVldWUgc3RhdGU7XG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9mb3JtYXRfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3Rib3hfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfbWFya19zdGFjaztcbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gMDtcbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSAwO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbjtcbiAgcHBfb3Blbl9zeXNfYm94IHN0YXRlXG5cbmxldCBjbGVhcl90YWdfc3RhY2sgc3RhdGUgPVxuICBTdGFjay5pdGVyIChmdW4gXyAtPiBwcF9jbG9zZV90YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGIgPVxuICBjbGVhcl90YWdfc3RhY2sgc3RhdGU7XG4gIHdoaWxlIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIGRvXG4gICAgcHBfY2xvc2VfYm94IHN0YXRlICgpXG4gIGRvbmU7XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHBwX2luZmluaXR5O1xuICBhZHZhbmNlX2xlZnQgc3RhdGU7XG4gIGlmIGIgdGhlbiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgcHBfcmluaXQgc3RhdGVcblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGZvcm1hdCB2YWx1ZXMgYW5kIHVzZSBib3hlcy5cblxuKilcblxuKCogVG8gZm9ybWF0IGEgc3RyaW5nLiAqKVxubGV0IHBwX3ByaW50X2FzX3NpemUgc3RhdGUgc2l6ZSBzID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgc1xuXG5cbmxldCBwcF9wcmludF9hcyBzdGF0ZSBpc2l6ZSBzID1cbiAgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSAoU2l6ZS5vZl9pbnQgaXNpemUpIHNcblxuXG5sZXQgcHBfcHJpbnRfc3RyaW5nIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbmxldCBwcF9wcmludF9ieXRlcyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKEJ5dGVzLmxlbmd0aCBzKSAoQnl0ZXMudG9fc3RyaW5nIHMpXG5cbigqIFRvIGZvcm1hdCBhbiBpbnRlZ2VyLiAqKVxubGV0IHBwX3ByaW50X2ludCBzdGF0ZSBpID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChJbnQudG9fc3RyaW5nIGkpXG5cbigqIFRvIGZvcm1hdCBhIGZsb2F0LiAqKVxubGV0IHBwX3ByaW50X2Zsb2F0IHN0YXRlIGYgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9mbG9hdCBmKVxuXG4oKiBUbyBmb3JtYXQgYSBib29sZWFuLiAqKVxubGV0IHBwX3ByaW50X2Jvb2wgc3RhdGUgYiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Jvb2wgYilcblxuKCogVG8gZm9ybWF0IGEgY2hhci4gKilcbmxldCBwcF9wcmludF9jaGFyIHN0YXRlIGMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAxIChTdHJpbmcubWFrZSAxIGMpXG5cblxuKCogT3BlbmluZyBib3hlcy4gKilcbmxldCBwcF9vcGVuX2hib3ggc3RhdGUgKCkgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9oYm94XG5hbmQgcHBfb3Blbl92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfdmJveFxuXG5hbmQgcHBfb3Blbl9odmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2h2Ym94XG5hbmQgcHBfb3Blbl9ob3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ob3Zib3hcbmFuZCBwcF9vcGVuX2JveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2JveFxuXG5cbigqIFByaW50aW5nIHF1ZXVlZCB0ZXh0LlxuXG4gICBbcHBfcHJpbnRfZmx1c2hdIHByaW50cyBhbGwgcGVuZGluZyBpdGVtcyBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYW5kXG4gICB0aGVuIGZsdXNoZXMgdGhlIGxvdyBsZXZlbCBvdXRwdXQgZGV2aWNlIG9mIHRoZSBmb3JtYXR0ZXIgdG8gYWN0dWFsbHlcbiAgIGRpc3BsYXkgcHJpbnRpbmcgbWF0ZXJpYWwuXG5cbiAgIFtwcF9wcmludF9uZXdsaW5lXSBiZWhhdmVzIGFzIFtwcF9wcmludF9mbHVzaF0gYWZ0ZXIgcHJpbnRpbmcgYW4gYWRkaXRpb25hbFxuICAgbmV3IGxpbmUuICopXG5sZXQgcHBfcHJpbnRfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIHRydWU7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuYW5kIHBwX3ByaW50X2ZsdXNoIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgZmFsc2U7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuXG5cbigqIFRvIGdldCBhIG5ld2xpbmUgd2hlbiBvbmUgZG9lcyBub3Qgd2FudCB0byBjbG9zZSB0aGUgY3VycmVudCBib3guICopXG5sZXQgcHBfZm9yY2VfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogVG8gZm9ybWF0IHNvbWV0aGluZywgb25seSBpbiBjYXNlIHRoZSBsaW5lIGhhcyBqdXN0IGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3ByaW50X2lmX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGVcbiAgICAgIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9pZl9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBHZW5lcmFsaXplZCBicmVhayBoaW50IHRoYXQgYWxsb3dzIHByaW50aW5nIHN0cmluZ3MgYmVmb3JlL2FmdGVyXG4gICBzYW1lLWxpbmUgb2Zmc2V0ICh3aWR0aCkgb3IgbmV3LWxpbmUgb2Zmc2V0ICopXG5sZXQgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlIH5maXRzIH5icmVha3MgPVxuICBsZXQgYmVmb3JlLCB3aWR0aCwgYWZ0ZXIgPSBmaXRzIGluXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IHRva2VuID0gUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSBpblxuICAgIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoIGJlZm9yZSArIHdpZHRoICsgU3RyaW5nLmxlbmd0aCBhZnRlciBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cbigqIFByaW50aW5nIGJyZWFrIGhpbnRzOlxuICAgQSBicmVhayBoaW50IGluZGljYXRlcyB3aGVyZSBhIGJveCBtYXkgYmUgYnJva2VuLlxuICAgSWYgbGluZSBpcyBicm9rZW4gdGhlbiBvZmZzZXQgaXMgYWRkZWQgdG8gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50XG4gICBib3ggZWxzZSAodGhlIHZhbHVlIG9mKSB3aWR0aCBibGFua3MgYXJlIHByaW50ZWQuICopXG5sZXQgcHBfcHJpbnRfYnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlXG4gICAgfmZpdHM6KFwiXCIsIHdpZHRoLCBcIlwiKSB+YnJlYWtzOihcIlwiLCBvZmZzZXQsIFwiXCIpXG5cblxuKCogUHJpbnQgYSBzcGFjZSA6XG4gICBhIHNwYWNlIGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBhIHNpbmdsZSBzcGFjZSBpZiB0aGUgYnJlYWsgZG9lcyBub3RcbiAgIHNwbGl0IHRoZSBsaW5lO1xuICAgYSBjdXQgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIG5vdGhpbmcgaWYgdGhlIGJyZWFrIGRvZXMgbm90IHNwbGl0IHRoZVxuICAgbGluZS4gKilcbmxldCBwcF9wcmludF9zcGFjZSBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDEgMFxuYW5kIHBwX3ByaW50X2N1dCBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDAgMFxuXG5cbigqIFRhYnVsYXRpb24gYm94ZXMuICopXG5sZXQgcHBfb3Blbl90Ym94IHN0YXRlICgpID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLnplcm8gaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YmVnaW4gKFBwX3Rib3ggKHJlZiBbXSkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqIENsb3NlIGEgdGFidWxhdGlvbiBib3guICopXG5sZXQgcHBfY2xvc2VfdGJveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF90ZW5kOyBsZW5ndGggPSAwIH0gaW5cbiAgICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW07XG4gICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDFcbiAgZW5kXG5cblxuKCogUHJpbnQgYSB0YWJ1bGF0aW9uIGJyZWFrLiAqKVxubGV0IHBwX3ByaW50X3RicmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RicmVhayAod2lkdGgsIG9mZnNldCk7IGxlbmd0aCA9IHdpZHRoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cblxubGV0IHBwX3ByaW50X3RhYiBzdGF0ZSAoKSA9IHBwX3ByaW50X3RicmVhayBzdGF0ZSAwIDBcblxubGV0IHBwX3NldF90YWIgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9zdGFiOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBjb250cm9sIHRoZSBwcmV0dHktcHJpbnRlcnNcblxuKilcblxuKCogU2V0X21heF9ib3hlcy4gKilcbmxldCBwcF9zZXRfbWF4X2JveGVzIHN0YXRlIG4gPSBpZiBuID4gMSB0aGVuIHN0YXRlLnBwX21heF9ib3hlcyA8LSBuXG5cbigqIFRvIGtub3cgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgYWxsb3dlZC4gKilcbmxldCBwcF9nZXRfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbmxldCBwcF9vdmVyX21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxuKCogRWxsaXBzaXMuICopXG5sZXQgcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgcyA9IHN0YXRlLnBwX2VsbGlwc2lzIDwtIHNcbmFuZCBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSAoKSA9IHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVG8gc2V0IHRoZSBtYXJnaW4gb2YgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfbGltaXQgbiA9XG4gIGlmIG4gPCBwcF9pbmZpbml0eSB0aGVuIG4gZWxzZSBwcmVkIHBwX2luZmluaXR5XG5cblxuKCogSW50ZXJuYWwgcHJldHR5LXByaW50ZXIgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdCA8LSBuO1xuICAgIHN0YXRlLnBwX21heF9pbmRlbnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfcmluaXQgc3RhdGVcblxuXG4oKiBJbml0aWFsbHksIHdlIGhhdmUgOlxuICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0LCBhbmRcbiAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW4uICopXG5sZXQgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbiA9XG4gIGlmIG4gPiAxIHRoZW5cbiAgICBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgKHN0YXRlLnBwX21hcmdpbiAtIG4pXG5cblxubGV0IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2luZGVudFxuXG5sZXQgcHBfc2V0X21hcmdpbiBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9tYXJnaW4gPC0gbjtcbiAgICBsZXQgbmV3X21heF9pbmRlbnQgPVxuICAgICAgKCogVHJ5IHRvIG1haW50YWluIG1heF9pbmRlbnQgdG8gaXRzIGFjdHVhbCB2YWx1ZS4gKilcbiAgICAgIGlmIHN0YXRlLnBwX21heF9pbmRlbnQgPD0gc3RhdGUucHBfbWFyZ2luXG4gICAgICB0aGVuIHN0YXRlLnBwX21heF9pbmRlbnQgZWxzZVxuICAgICAgKCogSWYgcG9zc2libGUgbWFpbnRhaW4gcHBfbWluX3NwYWNlX2xlZnQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAgICAgIGlmIHRoaXMgbGVhZHMgdG8gYSB0b28gc21hbGwgbWF4X2luZGVudCwgdGFrZSBoYWxmIG9mIHRoZVxuICAgICAgICAgbmV3IG1hcmdpbiwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEuICopXG4gICAgICAgSW50Lm1heCAoSW50Lm1heCAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQpXG4gICAgICAgICAgICAgICAgKHN0YXRlLnBwX21hcmdpbiAvIDIpKSAxIGluXG4gICAgKCogUmVidWlsZCBpbnZhcmlhbnRzLiAqKVxuICAgIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG5ld19tYXhfaW5kZW50XG5cblxuKCoqIEdlb21ldHJ5IGZ1bmN0aW9ucyBhbmQgdHlwZXMgKilcbnR5cGUgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ6aW50OyBtYXJnaW46IGludH1cblxubGV0IHZhbGlkYXRlX2dlb21ldHJ5IHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgaWYgbWF4X2luZGVudCA8IDIgdGhlblxuICAgIEVycm9yIFwibWF4X2luZGVudCA8IDJcIlxuICBlbHNlIGlmIG1hcmdpbiA8PSBtYXhfaW5kZW50IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA8PSBtYXhfaW5kZW50XCJcbiAgZWxzZSBPayAoKVxuXG5sZXQgY2hlY2tfZ2VvbWV0cnkgZ2VvbWV0cnkgPVxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgT2sgKCkgLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IHBwX2dldF9tYXJnaW4gc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJnaW5cblxubGV0IHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgcHBfc2V0X21hcmdpbiBzdGF0ZSBtYXJnaW47XG4gIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG1heF9pbmRlbnQ7XG4gICgpXG5cbmxldCBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIG1zZyAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChcIkZvcm1hdC5wcF9zZXRfZ2VvbWV0cnk6IFwiIF4gbXNnKSlcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgX21zZyAtPlxuICAgICAoKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSA9XG4gIHsgbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKTsgbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpIH1cblxubGV0IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGF0ZSB1cGRhdGUgPVxuICBsZXQgZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgaW5cbiAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgKHVwZGF0ZSBnZW9tZXRyeSlcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgICBvdXRfc3RyaW5nID0gZjtcbiAgICAgIG91dF9mbHVzaCA9IGc7XG4gICAgICBvdXRfbmV3bGluZSA9IGg7XG4gICAgICBvdXRfc3BhY2VzID0gaTtcbiAgICAgIG91dF9pbmRlbnQgPSBqO1xuICAgIH0gPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGk7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0galxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBvdXRfc3RyaW5nID0gc3RhdGUucHBfb3V0X3N0cmluZztcbiAgb3V0X2ZsdXNoID0gc3RhdGUucHBfb3V0X2ZsdXNoO1xuICBvdXRfbmV3bGluZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lO1xuICBvdXRfc3BhY2VzID0gc3RhdGUucHBfb3V0X3NwYWNlcztcbiAgb3V0X2luZGVudCA9IHN0YXRlLnBwX291dF9pbmRlbnQ7XG59XG5cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBzdHJpbmcgb3V0cHV0IGFuZCBmbHVzaCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjsgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGdcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gpXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X25ld2xpbmUgc3RhdGUgKCkgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIFwiXFxuXCIgMCAgMVxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgc3BhY2VzLiAqKVxubGV0IGJsYW5rX2xpbmUgPSBTdHJpbmcubWFrZSA4MCAnICdcbmxldCByZWMgZGlzcGxheV9ibGFua3Mgc3RhdGUgbiA9XG4gIGlmIG4gPiAwIHRoZW5cbiAgaWYgbiA8PSA4MCB0aGVuIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIG4gZWxzZVxuICBiZWdpblxuICAgIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIDgwO1xuICAgIGRpc3BsYXlfYmxhbmtzIHN0YXRlIChuIC0gODApXG4gIGVuZFxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9pbmRlbnQgPSBkaXNwbGF5X2JsYW5rc1xuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMgYXMgcHJpbnRpbmcgdG8gYSBnaXZlblxuICAgW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGF0ZSBvYyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gb3V0cHV0X3N1YnN0cmluZyBvYztcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIChmdW4gKCkgLT4gZmx1c2ggb2MpO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3Mgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgc3RhdGVcblxuKCpcblxuICBEZWZpbmluZyBzcGVjaWZpYyBmb3JtYXR0ZXJzXG5cbiopXG5cbmxldCBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjxcIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxubGV0IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjwvXCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcblxubGV0IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWcgPSBpZ25vcmVcbmxldCBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyA9IGlnbm9yZVxuXG4oKiBCdWlsZGluZyBhIGZvcm1hdHRlciBnaXZlbiBpdHMgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy5cbiAgIE90aGVyIGZpZWxkcyBnZXQgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gKilcbmxldCBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGogPVxuICAoKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZm9ybWF0dGVyIGNvbnRhaW5zIGEgZHVtbXkgYm94LiAqKVxuICBsZXQgcHBfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgbGV0IHN5c190b2sgPVxuICAgIHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF9iZWdpbiAoMCwgUHBfaG92Ym94KTsgbGVuZ3RoID0gMCB9IGluXG4gIFF1ZXVlLmFkZCBzeXNfdG9rIHBwX3F1ZXVlO1xuICBsZXQgc2Nhbl9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc2Nhbl9zdGFjaztcbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAxOyBxdWV1ZV9lbGVtID0gc3lzX3RvayB9IHNjYW5fc3RhY2s7XG4gIGxldCBwcF9tYXJnaW4gPSA3OFxuICBhbmQgcHBfbWluX3NwYWNlX2xlZnQgPSAxMCBpblxuICB7XG4gICAgcHBfc2Nhbl9zdGFjayA9IHNjYW5fc3RhY2s7XG4gICAgcHBfZm9ybWF0X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3Rib3hfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGFnX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmtfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFyZ2luID0gcHBfbWFyZ2luO1xuICAgIHBwX21pbl9zcGFjZV9sZWZ0ID0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW47XG4gICAgcHBfY3VycmVudF9pbmRlbnQgPSAwO1xuICAgIHBwX2lzX25ld19saW5lID0gdHJ1ZTtcbiAgICBwcF9sZWZ0X3RvdGFsID0gMTtcbiAgICBwcF9yaWdodF90b3RhbCA9IDE7XG4gICAgcHBfY3Vycl9kZXB0aCA9IDE7XG4gICAgcHBfbWF4X2JveGVzID0gbWF4X2ludDtcbiAgICBwcF9lbGxpcHNpcyA9IFwiLlwiO1xuICAgIHBwX291dF9zdHJpbmcgPSBmO1xuICAgIHBwX291dF9mbHVzaCA9IGc7XG4gICAgcHBfb3V0X25ld2xpbmUgPSBoO1xuICAgIHBwX291dF9zcGFjZXMgPSBpO1xuICAgIHBwX291dF9pbmRlbnQgPSBqO1xuICAgIHBwX3ByaW50X3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX29wZW5fdGFnID0gZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnO1xuICAgIHBwX21hcmtfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZztcbiAgICBwcF9wcmludF9vcGVuX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWc7XG4gICAgcHBfcHJpbnRfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWc7XG4gICAgcHBfcXVldWUgPSBwcF9xdWV1ZTtcbiAgfVxuXG5cbigqIEJ1aWxkIGEgZm9ybWF0dGVyIG91dCBvZiBpdHMgb3V0IGZ1bmN0aW9ucy4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyBvdXRfZnVucyA9XG4gIHBwX21ha2VfZm9ybWF0dGVyXG4gICAgb3V0X2Z1bnMub3V0X3N0cmluZ1xuICAgIG91dF9mdW5zLm91dF9mbHVzaFxuICAgIG91dF9mdW5zLm91dF9uZXdsaW5lXG4gICAgb3V0X2Z1bnMub3V0X3NwYWNlc1xuICAgIG91dF9mdW5zLm91dF9pbmRlbnRcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdpdGggZGVmYXVsdCBmdW5jdGlvbnMgdG8gb3V0cHV0IHNwYWNlcyxcbiAgaW5kZW50YXRpb24sIGFuZCBuZXcgbGluZXMuICopXG5sZXQgbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgbGV0IHBwZiA9IHBwX21ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCBpZ25vcmUgaWdub3JlIGlnbm9yZSBpblxuICBwcGYucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHBwZjtcbiAgcHBmLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3MgcHBmO1xuICBwcGYucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBwcGY7XG4gIHBwZlxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyA9XG4gIG1ha2VfZm9ybWF0dGVyIChvdXRwdXRfc3Vic3RyaW5nIG9jKSAoZnVuICgpIC0+IGZsdXNoIG9jKVxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtCdWZmZXIudF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX2J1ZmZlciBiID1cbiAgbWFrZV9mb3JtYXR0ZXIgKEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIpIGlnbm9yZVxuXG5cbigqIEFsbG9jYXRpbmcgYnVmZmVyIGZvciBwcmV0dHktcHJpbnRpbmcgcHVycG9zZXMuXG4gICBEZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHBwX2J1ZmZlcl9zaXplIG9yIDUxMi5cbiopXG5sZXQgcHBfYnVmZmVyX3NpemUgPSA1MTJcbmxldCBwcF9tYWtlX2J1ZmZlciAoKSA9IEJ1ZmZlci5jcmVhdGUgcHBfYnVmZmVyX3NpemVcblxuKCogVGhlIHN0YW5kYXJkIChzaGFyZWQpIGJ1ZmZlci4gKilcbmxldCBzdGRidWYgPSBwcF9tYWtlX2J1ZmZlciAoKVxuXG4oKiBQcmVkZWZpbmVkIGZvcm1hdHRlcnMgc3RhbmRhcmQgZm9ybWF0dGVyIHRvIHByaW50XG4gICB0byBbU3RkbGliLnN0ZG91dF0sIFtTdGRsaWIuc3RkZXJyXSwgYW5kIHshc3RkYnVmfS4gKilcbmxldCBzdGRfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRvdXRcbmFuZCBlcnJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRlcnJcbmFuZCBzdHJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX2J1ZmZlciBzdGRidWZcblxuXG4oKiBbZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmXSBmbHVzaGVzIGZvcm1hdHRlciBbcHBmXSxcbiAgIHRoZW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgYnVmZmVyIFtidWZdIHRoYXQgaXMgcmVzZXQuXG4gICBGb3JtYXR0ZXIgW3BwZl0gaXMgc3VwcG9zZWQgdG8gcHJpbnQgdG8gYnVmZmVyIFtidWZdLCBvdGhlcndpc2UgdGhpc1xuICAgZnVuY3Rpb24gaXMgbm90IHJlYWxseSB1c2VmdWwuICopXG5sZXQgZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmID1cbiAgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlO1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgQnVmZmVyLnJlc2V0IGJ1ZjtcbiAgc1xuXG5cbigqIEZsdXNoIFtzdHJfZm9ybWF0dGVyXSBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBbc3RkYnVmXS4gKilcbmxldCBmbHVzaF9zdHJfZm9ybWF0dGVyICgpID0gZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBzdGRidWYgc3RyX2Zvcm1hdHRlclxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmdcbiopXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZyBpcyBwcmV0dHktcHJpbnRpbmcgd2l0aCBubyBsb3cgbGV2ZWwgb3V0cHV0LlxuXG4gIFdoZW4gdXNpbmcgYSBzeW1ib2xpYyBmb3JtYXR0ZXIsIGFsbCByZWd1bGFyIHByZXR0eS1wcmludGluZyBhY3Rpdml0aWVzXG4gIG9jY3VyIGJ1dCBvdXRwdXQgbWF0ZXJpYWwgaXMgc3ltYm9saWMgYW5kIHN0b3JlZCBpbiBhIGJ1ZmZlciBvZiBvdXRwdXRcbiAgaXRlbXMuIEF0IHRoZSBlbmQgb2YgcHJldHR5LXByaW50aW5nLCBmbHVzaGluZyB0aGUgb3V0cHV0IGJ1ZmZlciBhbGxvd3NcbiAgcG9zdC1wcm9jZXNzaW5nIG9mIHN5bWJvbGljIG91dHB1dCBiZWZvcmUgbG93IGxldmVsIG91dHB1dCBvcGVyYXRpb25zLlxuKilcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfaXRlbSA9XG4gIHwgT3V0cHV0X2ZsdXNoXG4gIHwgT3V0cHV0X25ld2xpbmVcbiAgfCBPdXRwdXRfc3RyaW5nIG9mIHN0cmluZ1xuICB8IE91dHB1dF9zcGFjZXMgb2YgaW50XG4gIHwgT3V0cHV0X2luZGVudCBvZiBpbnRcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfYnVmZmVyID0ge1xuICBtdXRhYmxlIHN5bWJvbGljX291dHB1dF9jb250ZW50cyA6IHN5bWJvbGljX291dHB1dF9pdGVtIGxpc3Q7XG59XG5cbmxldCBtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIgKCkgPVxuICB7IHN5bWJvbGljX291dHB1dF9jb250ZW50cyA9IFtdIH1cblxubGV0IGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBbXVxuXG5sZXQgZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgTGlzdC5yZXYgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgaXRlbXMgPSBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgaW5cbiAgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2I7XG4gIGl0ZW1zXG5cbmxldCBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIGl0ZW0gPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIGl0ZW0gOjogc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IHN5bWJvbGljX2ZsdXNoIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfZmx1c2hcbiAgYW5kIHN5bWJvbGljX25ld2xpbmUgc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9uZXdsaW5lXG4gIGFuZCBzeW1ib2xpY19zdHJpbmcgc29iIHMgaSBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKSlcbiAgYW5kIHN5bWJvbGljX3NwYWNlcyBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3NwYWNlcyBuKVxuICBhbmQgc3ltYm9saWNfaW5kZW50IHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfaW5kZW50IG4pIGluXG5cbiAgbGV0IGYgPSBzeW1ib2xpY19zdHJpbmcgc29iXG4gIGFuZCBnID0gc3ltYm9saWNfZmx1c2ggc29iXG4gIGFuZCBoID0gc3ltYm9saWNfbmV3bGluZSBzb2JcbiAgYW5kIGkgPSBzeW1ib2xpY19zcGFjZXMgc29iXG4gIGFuZCBqID0gc3ltYm9saWNfaW5kZW50IHNvYiBpblxuICBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGpcblxuKCpcblxuICBCYXNpYyBmdW5jdGlvbnMgb24gdGhlICdzdGFuZGFyZCcgZm9ybWF0dGVyXG4gICh0aGUgZm9ybWF0dGVyIHRoYXQgcHJpbnRzIHRvIFtTdGRsaWIuc3Rkb3V0XSkuXG5cbiopXG5cbmxldCBvcGVuX2hib3ggPSBwcF9vcGVuX2hib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdmJveCA9IHBwX29wZW5fdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9odmJveCA9IHBwX29wZW5faHZib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faG92Ym94ID0gcHBfb3Blbl9ob3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fYm94ID0gcHBfb3Blbl9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX2JveCA9IHBwX2Nsb3NlX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl90YWcgPSBwcF9vcGVuX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGFnID0gcHBfY2xvc2VfdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3N0YWcgPSBwcF9vcGVuX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3N0YWcgPSBwcF9jbG9zZV9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9hcyA9IHBwX3ByaW50X2FzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zdHJpbmcgPSBwcF9wcmludF9zdHJpbmcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2J5dGVzID0gcHBfcHJpbnRfYnl0ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ludCA9IHBwX3ByaW50X2ludCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmxvYXQgPSBwcF9wcmludF9mbG9hdCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY2hhciA9IHBwX3ByaW50X2NoYXIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Jvb2wgPSBwcF9wcmludF9ib29sIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9icmVhayA9IHBwX3ByaW50X2JyZWFrIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jdXQgPSBwcF9wcmludF9jdXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3NwYWNlID0gcHBfcHJpbnRfc3BhY2Ugc3RkX2Zvcm1hdHRlclxuYW5kIGZvcmNlX25ld2xpbmUgPSBwcF9mb3JjZV9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbHVzaCA9IHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9uZXdsaW5lID0gcHBfcHJpbnRfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaWZfbmV3bGluZSA9IHBwX3ByaW50X2lmX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuXG5hbmQgb3Blbl90Ym94ID0gcHBfb3Blbl90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90Ym94ID0gcHBfY2xvc2VfdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGJyZWFrID0gcHBfcHJpbnRfdGJyZWFrIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF90YWIgPSBwcF9zZXRfdGFiIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YWIgPSBwcF9wcmludF90YWIgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21hcmdpbiA9IHBwX3NldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfaW5kZW50ID0gcHBfc2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2dlb21ldHJ5ID0gcHBfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBzYWZlX3NldF9nZW9tZXRyeSA9IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHVwZGF0ZV9nZW9tZXRyeSA9IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2JveGVzID0gcHBfc2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9ib3hlcyA9IHBwX2dldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIG92ZXJfbWF4X2JveGVzID0gcHBfb3Zlcl9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgPSBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgPSBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9wcmludF90YWdzID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9wcmludF90YWdzID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9tYXJrX3RhZ3MgPVxuICBwcF9zZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFya190YWdzID1cbiAgcHBfZ2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3RhZ3MgPVxuICBwcF9zZXRfdGFncyBzdGRfZm9ybWF0dGVyXG5cblxuKCogQ29udmVuaWVuY2UgZnVuY3Rpb25zICopXG5cbigqIFRvIGZvcm1hdCBhIGxpc3QgKilcbmxldCByZWMgcHBfcHJpbnRfbGlzdCA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgPSBmdW5jdGlvblxuICB8IFtdIC0+ICgpXG4gIHwgW3ZdIC0+IHBwX3YgcHBmIHZcbiAgfCB2IDo6IHZzIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcF92IHBwZiB2c1xuXG4oKiBUbyBmb3JtYXQgYSBzZXF1ZW5jZSAqKVxubGV0IHJlYyBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxubGV0IHBwX3ByaW50X3NlcSA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG4oKiBUbyBmb3JtYXQgZnJlZS1mbG93aW5nIHRleHQgKilcbmxldCBwcF9wcmludF90ZXh0IHBwZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbGVmdCA9IHJlZiAwIGluXG4gIGxldCByaWdodCA9IHJlZiAwIGluXG4gIGxldCBmbHVzaCAoKSA9XG4gICAgcHBfcHJpbnRfc3RyaW5nIHBwZiAoU3RyaW5nLnN1YiBzICFsZWZ0ICghcmlnaHQgLSAhbGVmdCkpO1xuICAgIGluY3IgcmlnaHQ7IGxlZnQgOj0gIXJpZ2h0O1xuICBpblxuICB3aGlsZSAoIXJpZ2h0IDw+IGxlbikgZG9cbiAgICBtYXRjaCBzLlshcmlnaHRdIHdpdGhcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgZmx1c2ggKCk7XG4gICAgICAgIHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBmbHVzaCAoKTsgcHBfcHJpbnRfc3BhY2UgcHBmICgpXG4gICAgICAoKiB0aGVyZSBpcyBubyBzcGVjaWZpYyBzdXBwb3J0IGZvciAnXFx0J1xuICAgICAgICAgYXMgaXQgaXMgdW5jbGVhciB3aGF0IGEgcmlnaHQgc2VtYW50aWNzIHdvdWxkIGJlICopXG4gICAgICB8IF8gLT4gaW5jciByaWdodFxuICBkb25lO1xuICBpZiAhbGVmdCA8PiBsZW4gdGhlbiBmbHVzaCAoKVxuXG5sZXQgcHBfcHJpbnRfb3B0aW9uID8obm9uZSA9IGZ1biBfICgpIC0+ICgpKSBwcF92IHBwZiA9IGZ1bmN0aW9uXG58IE5vbmUgLT4gbm9uZSBwcGYgKClcbnwgU29tZSB2IC0+IHBwX3YgcHBmIHZcblxubGV0IHBwX3ByaW50X3Jlc3VsdCB+b2sgfmVycm9yIHBwZiA9IGZ1bmN0aW9uXG58IE9rIHYgLT4gb2sgcHBmIHZcbnwgRXJyb3IgZSAtPiBlcnJvciBwcGYgZVxuXG5sZXQgcHBfcHJpbnRfZWl0aGVyIH5sZWZ0IH5yaWdodCBwcGYgPSBmdW5jdGlvblxufCBFaXRoZXIuTGVmdCBsIC0+IGxlZnQgcHBmIGxcbnwgRWl0aGVyLlJpZ2h0IHIgLT4gcmlnaHQgcHBmIHJcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGNvbXB1dGVfdGFnIG91dHB1dCB0YWdfYWNjID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIG91dHB1dCBwcGYgdGFnX2FjYztcbiAgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICBsZXQgbGVuID0gQnVmZmVyLmxlbmd0aCBidWYgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgZWxzZSBCdWZmZXIuc3ViIGJ1ZiAxIChsZW4gLSAyKVxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgRGVmaW5pbmcgY29udGludWF0aW9ucyB0byBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIG9mXG4gIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi5cblxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIEludGVycHJldCBhIGZvcm1hdHRpbmcgZW50aXR5IG9uIGEgZm9ybWF0dGVyLiAqKVxubGV0IG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZm10aW5nX2xpdCA9IG1hdGNoIGZtdGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfYm94IHBwZiAoKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRfZm9ybWF0dGVyIGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBlcnJfZm9ybWF0dGVyIGZtdFxuXG5sZXQga2RwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gayAoZnVuIHBwZiAtPiBvdXRwdXRfYWNjIHBwZiBhY2MpKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBkcHJpbnRmIGZtdCA9IGtkcHJpbnRmIChmdW4gaSAtPiBpKSBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBzdHJwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIGlkIGZtdFxuXG5sZXQga2FzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBvdXRwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBhc3ByaW50ZiBmbXQgPSBrYXNwcmludGYgaWQgZm10XG5cbigqIEZsdXNoaW5nIHN0YW5kYXJkIGZvcm1hdHRlcnMgYXQgZW5kIG9mIGV4ZWN1dGlvbi4gKilcblxubGV0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMgKCkgPVxuICBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyICgpO1xuICBwcF9wcmludF9mbHVzaCBlcnJfZm9ybWF0dGVyICgpXG5cbmxldCAoKSA9IGF0X2V4aXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVyc1xuXG4oKlxuXG4gIERlcHJlY2F0ZWQgc3R1ZmYuXG5cbiopXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlXG4gICAgfm91dDpmIH5mbHVzaDpnIH5uZXdsaW5lOmggfnNwYWNlczppID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaCxcbiAgIHN0YXRlLnBwX291dF9uZXdsaW5lLCBzdGF0ZS5wcF9vdXRfc3BhY2VzKVxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogZXJyb3IgcHJvbmUgZnVuY3Rpb24sIGRvIG5vdCB1c2UgaXQuXG4gICBUaGlzIGZ1bmN0aW9uIGlzIG5laXRoZXIgY29tcG9zaXRpb25hbCBub3IgaW5jcmVtZW50YWwsIHNpbmNlIGl0IGZsdXNoZXNcbiAgIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhdCBlYWNoIGNhbGwuXG4gICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZGVmaW5lIGEgZm9ybWF0dGVyIG9mIHlvdXIgb3duIHdyaXRpbmcgdG9cbiAgIHRoZSBidWZmZXIgYXJndW1lbnQsIGFzIGluXG4gICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiXG4gICB0aGVuIHVzZSB7IWZwcmludGYgcHBmfSBhcyB1c3VhbC4gKilcbmxldCBicHJpbnRmIGIgKEZvcm1hdCAoZm10LCBfKSA6ICgnYSwgZm9ybWF0dGVyLCB1bml0KSBmb3JtYXQpID1cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPSBvdXRwdXRfYWNjIHBwZiBhY2M7IHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxuKCogRGVwcmVjYXRlZCA6IGFsaWFzIGZvciBrc3ByaW50Zi4gKilcbmxldCBrcHJpbnRmID0ga3NwcmludGZcblxuXG5cbigqIERlcHJlY2F0ZWQgdGFnIGZ1bmN0aW9ucyAqKVxuXG50eXBlIGZvcm1hdHRlcl90YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fdGFnIDogdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3RhZyA6IHRhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV90YWcgOiB0YWcgLT4gdW5pdDtcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV90YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV90YWcgPSBwY3Q7XG4gICB9ID1cbiAgbGV0IHN0cmluZ2lmeSBmIGUgPSBmdW5jdGlvbiBTdHJpbmdfdGFnIHMgLT4gZiBzIHwgXyAtPiBlIGluXG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gc3RyaW5naWZ5IG1vdCBcIlwiO1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgbWN0IFwiXCI7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHN0cmluZ2lmeSBwb3QgKCk7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgcGN0ICgpXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgZm10ICgpID1cbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIGZtdCAoKSBpblxuICBsZXQgbWFya19vcGVuX3RhZyBzID0gZnVucy5tYXJrX29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgbWFya19jbG9zZV90YWcgcyA9IGZ1bnMubWFya19jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9vcGVuX3RhZyBzID0gZnVucy5wcmludF9vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X2Nsb3NlX3RhZyBzID0gZnVucy5wcmludF9jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIHttYXJrX29wZW5fdGFnOyBtYXJrX2Nsb3NlX3RhZzsgcHJpbnRfb3Blbl90YWc7IHByaW50X2Nsb3NlX3RhZ31cblxubGV0IHNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBIZWxwZXJzIGZvciBGb3JtYXR9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbmluY2x1ZGUgRm9ybWF0XG5cbnR5cGUgdCA9IEZvcm1hdC5mb3JtYXR0ZXJcbnR5cGUgLSdhIHByaW50ZXIgPSB0IC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIENvbWJpbmF0b3JzfSAqKVxuXG5sZXQgc2lsZW50IF9mbXQgXyA9ICgpXG5sZXQgcmV0dXJuIGZtdF9zdHIgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJSglKVwiIGZtdF9zdHJcbmxldCB1bml0IGZtdCAoKSA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IFwiKClcIlxubGV0IGludCBmbXQgaSA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgc3RyaW5nID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZ1xubGV0IGJvb2wgPSBGb3JtYXQucHBfcHJpbnRfYm9vbFxubGV0IGZsb2F0MyBmbXQgZiA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIiUuM2ZcIiBmXG5sZXQgZmxvYXQgZm10IGYgPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgY2hhciA9IEZvcm1hdC5wcF9wcmludF9jaGFyXG5sZXQgaW50MzIgZm10IG4gPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlbGRcIiBuXG5sZXQgaW50NjQgZm10IG4gPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlTGRcIiBuXG5sZXQgbmF0aXZlaW50IGZtdCBuID0gRm9ybWF0LmZwcmludGYgZm10IFwiJW5kXCIgblxubGV0IHN0cmluZ19xdW90ZWQgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xubGV0IGZsdXNoID0gRm9ybWF0LnBwX3ByaW50X2ZsdXNoXG5sZXQgc3BhY2UgPSBGb3JtYXQucHBfcHJpbnRfc3BhY2VcbmxldCBjdXQgPSBGb3JtYXQucHBfcHJpbnRfY3V0XG5sZXQgYnJlYWsgZm10IChtLCBuKSA9IEZvcm1hdC5wcF9wcmludF9icmVhayBmbXQgbSBuXG5sZXQgbmV3bGluZSA9IEZvcm1hdC5wcF9mb3JjZV9uZXdsaW5lXG5sZXQgc3Vic3RyaW5nIG91dCAocywgaSwgbGVuKSA6IHVuaXQgPSBzdHJpbmcgb3V0IChTdHJpbmcuc3ViIHMgaSBsZW4pXG5sZXQgdGV4dCA9IEZvcm1hdC5wcF9wcmludF90ZXh0XG5cbmxldCBzdHJpbmdfbGluZXMgb3V0IChzIDogc3RyaW5nKSA6IHVuaXQgPVxuICBmcHJpbnRmIG91dCBcIkBbPHY+XCI7XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgd2hpbGUgIWkgPCBuIGRvXG4gICAgbGV0IGogPSB0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyAhaSAnXFxuJyB3aXRoIE5vdF9mb3VuZCAtPiBuIGluXG4gICAgaWYgIWkgPiAwIHRoZW4gZnByaW50ZiBvdXQgXCJALFwiO1xuICAgIHN1YnN0cmluZyBvdXQgKHMsICFpLCBqIC0gIWkpO1xuICAgIGkgOj0gaiArIDFcbiAgZG9uZTtcbiAgZnByaW50ZiBvdXQgXCJAXVwiXG5cbmxldCBsaXN0ID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBsID1cbiAgbGV0IHJlYyBwcF9saXN0IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgeCA6OiAoXyA6OiBfIGFzIGwpIC0+XG4gICAgICBwcCBmbXQgeDtcbiAgICAgIHNlcCBmbXQgKCk7XG4gICAgICBwcF9saXN0IGxcbiAgICB8IFsgeCBdIC0+IHBwIGZtdCB4XG4gICAgfCBbXSAtPiAoKVxuICBpblxuICBwcF9saXN0IGxcblxubGV0IGFycmF5ID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBhID1cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGkgPiAwIHRoZW4gc2VwIGZtdCAoKTtcbiAgICBwcCBmbXQgYS4oaSlcbiAgZG9uZVxuXG5sZXQgYXJyYXlpID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBhID1cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGkgPiAwIHRoZW4gc2VwIGZtdCAoKTtcbiAgICBwcCBmbXQgKGksIGEuKGkpKVxuICBkb25lXG5cbmxldCBzZXEgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHAgZm10IHNlcSA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIENDU2VxLml0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIHNlcCBmbXQgKCk7XG4gICAgICBwcCBmbXQgeClcbiAgICBzZXFcblxubGV0IGl0ZXIgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHAgZm10IHNlcSA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIHNlcSAoZnVuIHggLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIHNlcCBmbXQgKCk7XG4gICAgICBwcCBmbXQgeClcblxubGV0IG9wdCBwcCBmbXQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBmbXQgXCJub25lXCJcbiAgfCBTb21lIHggLT4gRm9ybWF0LmZwcmludGYgZm10IFwic29tZSAlYVwiIHBwIHhcblxubGV0IHBhaXIgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHBhIHBwYiBmbXQgKGEsIGIpID1cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWElYSVhXCIgcHBhIGEgc2VwICgpIHBwYiBiXG5cbmxldCB0cmlwbGUgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHBhIHBwYiBwcGMgZm10IChhLCBiLCBjKSA9XG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhJWElYSVhJWFcIiBwcGEgYSBzZXAgKCkgcHBiIGIgc2VwICgpIHBwYyBjXG5cbmxldCBxdWFkID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwYSBwcGIgcHBjIHBwZCBmbXQgKGEsIGIsIGMsIGQpID1cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWElYSVhJWElYSVhJWFcIiBwcGEgYSBzZXAgKCkgcHBiIGIgc2VwICgpIHBwYyBjIHNlcCAoKSBwcGRcbiAgICBkXG5cbmxldCBhcHBlbmQgcHBhIHBwYiBmbXQgKCkgPVxuICBwcGEgZm10ICgpO1xuICBwcGIgZm10ICgpXG5cbmxldCBhcHBlbmRfbCBwcGwgZm10ICgpID0gTGlzdC5pdGVyIChmdW4gcHAgLT4gcHAgZm10ICgpKSBwcGxcblxubGV0IHdpdGhpbiBhIGIgcCBvdXQgeCA9XG4gIHN0cmluZyBvdXQgYTtcbiAgcCBvdXQgeDtcbiAgc3RyaW5nIG91dCBiXG5cbmxldCBtYXAgZiBwcCBmbXQgeCA9XG4gIHBwIGZtdCAoZiB4KTtcbiAgKClcblxubGV0IHZib3ggPyhpID0gMCkgcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl92Ym94IG91dCBpO1xuICBwcCBvdXQgeDtcbiAgRm9ybWF0LnBwX2Nsb3NlX2JveCBvdXQgKClcblxubGV0IGhvdmJveCA/KGkgPSAwKSBwcCBvdXQgeCA9XG4gIEZvcm1hdC5wcF9vcGVuX2hvdmJveCBvdXQgaTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBodmJveCA/KGkgPSAwKSBwcCBvdXQgeCA9XG4gIEZvcm1hdC5wcF9vcGVuX2h2Ym94IG91dCBpO1xuICBwcCBvdXQgeDtcbiAgRm9ybWF0LnBwX2Nsb3NlX2JveCBvdXQgKClcblxubGV0IGhib3ggcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl9oYm94IG91dCAoKTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBvZl90b19zdHJpbmcgZiBvdXQgeCA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChmIHgpXG5sZXQgZXhuID0gb2ZfdG9fc3RyaW5nIFByaW50ZXhjLnRvX3N0cmluZ1xubGV0IGNvbnN0IHBwIHggb3V0ICgpID0gcHAgb3V0IHhcblxubGV0IHNvbWUgcHAgb3V0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB4IC0+IHBwIG91dCB4XG5cbmxldCBjb25zdF9zdHJpbmcgcyBvdXQgXyA9IHN0cmluZyBvdXQgc1xubGV0IG9wYXF1ZSBvdXQgXyA9IHN0cmluZyBvdXQgXCJvcGFxdWVcIlxubGV0IGxhenlfZm9yY2UgcHAgb3V0IChsYXp5IHgpID0gcHAgb3V0IHhcblxubGV0IGxhenlfb3IgPyhkZWZhdWx0ID0gcmV0dXJuIFwiPGxhenk+XCIpIHBwIG91dCB4ID1cbiAgaWYgTGF6eS5pc192YWwgeCB0aGVuXG4gICAgcHAgb3V0IChMYXp5LmZvcmNlIHgpXG4gIGVsc2VcbiAgICBkZWZhdWx0IG91dCAoKVxuXG4oKiogezIgSU99ICopXG5cbmxldCBvdXRwdXQgZm10IHBwIHggPSBwcCBmbXQgeFxuXG5sZXQgdG9fc3RyaW5nIHBwIHggPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIHBwIGZtdCB4O1xuICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggZm10ICgpO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBmcHJpbnRmID0gRm9ybWF0LmZwcmludGZcbmxldCBzdGRvdXQgPSBGb3JtYXQuc3RkX2Zvcm1hdHRlclxubGV0IHN0ZGVyciA9IEZvcm1hdC5lcnJfZm9ybWF0dGVyXG5sZXQgb2ZfY2hhbiA9IEZvcm1hdC5mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWxcblxubGV0IHdpdGhfb3V0X2NoYW4gb2MgZiA9XG4gIGxldCBmbXQgPSBvZl9jaGFuIG9jIGluXG4gIHRyeVxuICAgIGxldCB4ID0gZiBmbXQgaW5cbiAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggZm10ICgpO1xuICAgIHhcbiAgd2l0aCBlIC0+XG4gICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICByYWlzZSBlXG5cbmxldCB0ZWUgYSBiID1cbiAgbGV0IGZhID0gRm9ybWF0LnBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBhICgpIGluXG4gIGxldCBmYiA9IEZvcm1hdC5wcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgYiAoKSBpblxuICBGb3JtYXQubWFrZV9mb3JtYXR0ZXJcbiAgICAoZnVuIHN0ciBpIGxlbiAtPlxuICAgICAgZmEuRm9ybWF0Lm91dF9zdHJpbmcgc3RyIGkgbGVuO1xuICAgICAgZmIuRm9ybWF0Lm91dF9zdHJpbmcgc3RyIGkgbGVuKVxuICAgIChmdW4gKCkgLT5cbiAgICAgIGZhLkZvcm1hdC5vdXRfZmx1c2ggKCk7XG4gICAgICBmYi5Gb3JtYXQub3V0X2ZsdXNoICgpKVxuXG5sZXQgdG9fZmlsZSBmaWxlbmFtZSBmb3JtYXQgPVxuICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIGZtdCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICAgIGNsb3NlX291dF9ub2VyciBvYylcbiAgICBmbXQgZm9ybWF0XG5cbm1vZHVsZSBBTlNJX2NvZGVzID0gc3RydWN0XG4gIHR5cGUgY29sb3IgPVxuICAgIFsgYEJsYWNrXG4gICAgfCBgUmVkXG4gICAgfCBgWWVsbG93XG4gICAgfCBgR3JlZW5cbiAgICB8IGBCbHVlXG4gICAgfCBgTWFnZW50YVxuICAgIHwgYEN5YW5cbiAgICB8IGBXaGl0ZVxuICAgIF1cblxuICBsZXQgaW50X29mX2NvbG9yXyA9IGZ1bmN0aW9uXG4gICAgfCBgQmxhY2sgLT4gMFxuICAgIHwgYFJlZCAtPiAxXG4gICAgfCBgR3JlZW4gLT4gMlxuICAgIHwgYFllbGxvdyAtPiAzXG4gICAgfCBgQmx1ZSAtPiA0XG4gICAgfCBgTWFnZW50YSAtPiA1XG4gICAgfCBgQ3lhbiAtPiA2XG4gICAgfCBgV2hpdGUgLT4gN1xuXG4gIHR5cGUgc3R5bGUgPVxuICAgIFsgYEZHIG9mIGNvbG9yICgqIGZvcmVncm91bmQgKilcbiAgICB8IGBCRyBvZiBjb2xvciAoKiBiYWNrZ3JvdW5kICopXG4gICAgfCBgQm9sZFxuICAgIHwgYFJlc2V0XG4gICAgXVxuXG4gIGxldCBjb2RlX29mX3N0eWxlIDogc3R5bGUgLT4gaW50ID0gZnVuY3Rpb25cbiAgICB8IGBGRyBjIC0+IDMwICsgaW50X29mX2NvbG9yXyBjXG4gICAgfCBgQkcgYyAtPiA0MCArIGludF9vZl9jb2xvcl8gY1xuICAgIHwgYEJvbGQgLT4gMVxuICAgIHwgYFJlc2V0IC0+IDBcblxuICBsZXQgc3RyaW5nX29mX3N0eWxlIGEgPSBQcmludGYuc3ByaW50ZiBcIlxceDFiWyVkbVwiIChjb2RlX29mX3N0eWxlIGEpXG4gIGxldCBjbGVhcl9saW5lID0gXCJcXHgxYlsyS1xcclwiXG4gIGxldCByZXNldCA9IHN0cmluZ19vZl9zdHlsZSBgUmVzZXRcblxuICBsZXQgc3RyaW5nX29mX3N0eWxlX2xpc3QgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmVzZXRcbiAgICB8IFsgYSBdIC0+IHN0cmluZ19vZl9zdHlsZSBhXG4gICAgfCBbIGE7IGIgXSAtPlxuICAgICAgUHJpbnRmLnNwcmludGYgXCJcXHgxYlslZDslZG1cIiAoY29kZV9vZl9zdHlsZSBhKSAoY29kZV9vZl9zdHlsZSBiKVxuICAgIHwgWyBhOyBiOyBjIF0gLT5cbiAgICAgIFByaW50Zi5zcHJpbnRmIFwiXFx4MWJbJWQ7JWQ7JWRtXCIgKGNvZGVfb2Zfc3R5bGUgYSkgKGNvZGVfb2Zfc3R5bGUgYilcbiAgICAgICAgKGNvZGVfb2Zfc3R5bGUgYylcbiAgICB8IGwgLT5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gICAgICBsZXQgcHBfbnVtIGMgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHN0cmluZ19vZl9pbnQgKGNvZGVfb2Zfc3R5bGUgYykpIGluXG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXHgxYltcIjtcbiAgICAgIExpc3QuaXRlcmlcbiAgICAgICAgKGZ1biBpIGMgLT5cbiAgICAgICAgICBpZiBpID4gMCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgJzsnO1xuICAgICAgICAgIHBwX251bSBjKVxuICAgICAgICBsO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwibVwiO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGV4Y2VwdGlvbiBOb19zdWNoX3N0eWxlXG5cbiAgKCogcGFyc2UgYSBzdHJpbmcgdGFnLiAqKVxuICBsZXQgc3R5bGVfb2ZfdGFnXyBzID1cbiAgICBtYXRjaCBTdHJpbmcudHJpbSBzIHdpdGhcbiAgICB8IFwicmVzZXRcIiAtPiBbIGBSZXNldCBdXG4gICAgfCBcImJsYWNrXCIgLT4gWyBgRkcgYEJsYWNrIF1cbiAgICB8IFwicmVkXCIgLT4gWyBgRkcgYFJlZCBdXG4gICAgfCBcImdyZWVuXCIgLT4gWyBgRkcgYEdyZWVuIF1cbiAgICB8IFwieWVsbG93XCIgLT4gWyBgRkcgYFllbGxvdyBdXG4gICAgfCBcImJsdWVcIiAtPiBbIGBGRyBgQmx1ZSBdXG4gICAgfCBcIm1hZ2VudGFcIiAtPiBbIGBGRyBgTWFnZW50YSBdXG4gICAgfCBcImN5YW5cIiAtPiBbIGBGRyBgQ3lhbiBdXG4gICAgfCBcIndoaXRlXCIgLT4gWyBgRkcgYFdoaXRlIF1cbiAgICB8IFwiYm9sZFwiIC0+IFsgYEJvbGQgXVxuICAgIHwgXCJCbGFja1wiIC0+IFsgYEZHIGBCbGFjazsgYEJvbGQgXVxuICAgIHwgXCJSZWRcIiAtPiBbIGBGRyBgUmVkOyBgQm9sZCBdXG4gICAgfCBcIkdyZWVuXCIgLT4gWyBgRkcgYEdyZWVuOyBgQm9sZCBdXG4gICAgfCBcIlllbGxvd1wiIC0+IFsgYEZHIGBZZWxsb3c7IGBCb2xkIF1cbiAgICB8IFwiQmx1ZVwiIC0+IFsgYEZHIGBCbHVlOyBgQm9sZCBdXG4gICAgfCBcIk1hZ2VudGFcIiAtPiBbIGBGRyBgTWFnZW50YTsgYEJvbGQgXVxuICAgIHwgXCJDeWFuXCIgLT4gWyBgRkcgYEN5YW47IGBCb2xkIF1cbiAgICB8IFwiV2hpdGVcIiAtPiBbIGBGRyBgV2hpdGU7IGBCb2xkIF1cbiAgICB8IF8gLT4gcmFpc2UgTm9fc3VjaF9zdHlsZVxuZW5kXG5cbmxldCBjb2xvcl9lbmFibGVkID0gcmVmIGZhbHNlXG5cbmxldCBtYXJrX29wZW5fc3R5bGUgc3Qgc3R5bGUgPVxuICBTdGFjay5wdXNoIHN0eWxlIHN0O1xuICBpZiAhY29sb3JfZW5hYmxlZCB0aGVuXG4gICAgQU5TSV9jb2Rlcy5zdHJpbmdfb2Zfc3R5bGVfbGlzdCBzdHlsZVxuICBlbHNlXG4gICAgXCJcIlxuXG5sZXQgbWFya19jbG9zZV9zdHlsZSBzdCA6IHN0cmluZyA9XG4gIGxldCBzdHlsZSA9XG4gICAgdHJ5XG4gICAgICBpZ25vcmUgKFN0YWNrLnBvcCBzdCk7XG4gICAgICAoKiBwb3AgY3VycmVudCBzdHlsZSAoaWYgd2VsbC1zY29wZWQg4oCmKSAqKVxuICAgICAgU3RhY2sudG9wIHN0XG4gICAgICAoKiBsb29rIGF0IHByZXZpb3VzIHN0eWxlICopXG4gICAgd2l0aCBTdGFjay5FbXB0eSAtPiBbIGBSZXNldCBdXG4gIGluXG4gIGlmICFjb2xvcl9lbmFibGVkIHRoZW5cbiAgICBBTlNJX2NvZGVzLnN0cmluZ19vZl9zdHlsZV9saXN0IHN0eWxlXG4gIGVsc2VcbiAgICBcIlwiXG5cbnR5cGUgc3RhZyArPSBTdHlsZSBvZiBBTlNJX2NvZGVzLnN0eWxlIGxpc3RcblxubGV0IHBwX29wZW5fdGFnIG91dCBzID0gcHBfb3Blbl9zdGFnIG91dCAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBvdXQgKCkgPSBwcF9jbG9zZV9zdGFnIG91dCAoKVxuXG4oKiBlaXRoZXIgcHJpbnRzIHRoZSB0YWcgb2YgW3NdIG9yIGRlbGVnYXRlIHRvIFtvcl9lbHNlXSAqKVxubGV0IG1hcmtfb3Blbl9zdGFnIHN0IH5vcl9lbHNlICh0YWcgOiBzdGFnKSA6IHN0cmluZyA9XG4gIG1hdGNoIHRhZyB3aXRoXG4gIHwgU3R5bGUgc3R5bGUgLT4gbWFya19vcGVuX3N0eWxlIHN0IHN0eWxlXG4gIHwgU3RyaW5nX3RhZyBzIC0+XG4gICAgbGV0IG9wZW4gQU5TSV9jb2RlcyBpblxuICAgICh0cnlcbiAgICAgICBsZXQgc3R5bGUgPSBzdHlsZV9vZl90YWdfIHMgaW5cbiAgICAgICBtYXJrX29wZW5fc3R5bGUgc3Qgc3R5bGVcbiAgICAgd2l0aCBOb19zdWNoX3N0eWxlIC0+IG9yX2Vsc2UgdGFnKVxuICB8IF8gLT4gb3JfZWxzZSB0YWdcblxubGV0IG1hcmtfY2xvc2Vfc3RhZyBzdCB+b3JfZWxzZSAodGFnIDogc3RhZykgOiBzdHJpbmcgPVxuICBtYXRjaCB0YWcgd2l0aFxuICB8IFN0eWxlIF8gLT4gbWFya19jbG9zZV9zdHlsZSBzdFxuICB8IFN0cmluZ190YWcgcyAtPlxuICAgIGxldCBvcGVuIEFOU0lfY29kZXMgaW5cbiAgICAoKiBjaGVjayBpZiBpdCdzIGluZGVlZCBhYm91dCBjb2xvciAqKVxuICAgIChtYXRjaCBzdHlsZV9vZl90YWdfIHMgd2l0aFxuICAgIHwgXyAtPiBtYXJrX2Nsb3NlX3N0eWxlIHN0XG4gICAgfCBleGNlcHRpb24gTm9fc3VjaF9zdHlsZSAtPiBvcl9lbHNlIHRhZylcbiAgfCBfIC0+IG9yX2Vsc2UgdGFnXG5cbmxldCB3aXRoX3N0eWxpbmcgc3RsIG91dCBmID1cbiAgcHBfb3Blbl9zdGFnIG91dCAoU3R5bGUgc3RsKTtcbiAgdHJ5XG4gICAgbGV0IHggPSBmICgpIGluXG4gICAgcHBfY2xvc2Vfc3RhZyBvdXQgKCk7XG4gICAgeFxuICB3aXRoIGUgLT5cbiAgICBwcF9jbG9zZV9zdGFnIG91dCAoKTtcbiAgICByYWlzZSBlXG5cbmxldCBzdHlsaW5nIHN0bCBwcCBvdXQgeCA9IHdpdGhfc3R5bGluZyBzdGwgb3V0IEBAIGZ1biAoKSAtPiBwcCBvdXQgeFxuXG4oKiBhZGQgY29sb3IgaGFuZGxpbmcgdG8gZm9ybWF0dGVyIFtwcGZdICopXG5sZXQgc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBwcGYgPVxuICBsZXQgc3QgPSBTdGFjay5jcmVhdGUgKCkgaW5cbiAgKCogc3RhY2sgb2Ygc3R5bGVzICopXG4gIHBwX3NldF9tYXJrX3RhZ3MgcHBmIHRydWU7XG4gICgqIGVuYWJsZSB0YWdzICopXG4gIGxldCBmdW5zID0gcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBwcGYgKCkgaW5cbiAgbGV0IGZ1bnMnID1cbiAgICB7XG4gICAgICBmdW5zIHdpdGhcbiAgICAgIG1hcmtfb3Blbl9zdGFnID0gbWFya19vcGVuX3N0YWcgc3Qgfm9yX2Vsc2U6ZnVucy5tYXJrX29wZW5fc3RhZztcbiAgICAgIG1hcmtfY2xvc2Vfc3RhZyA9IG1hcmtfY2xvc2Vfc3RhZyBzdCB+b3JfZWxzZTpmdW5zLm1hcmtfY2xvc2Vfc3RhZztcbiAgICB9XG4gIGluXG4gIHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgcHBmIGZ1bnMnXG5cbmxldCBzZXRfY29sb3JfZGVmYXVsdCA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIGZ1biBiIC0+XG4gICAgaWYgYiAmJiBub3QgIWNvbG9yX2VuYWJsZWQgdGhlbiAoXG4gICAgICBjb2xvcl9lbmFibGVkIDo9IHRydWU7XG4gICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlO1xuICAgICAgICBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIHN0ZG91dDtcbiAgICAgICAgc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBzdGRlcnJcbiAgICAgIClcbiAgICApIGVsc2UgaWYgKG5vdCBiKSAmJiAhY29sb3JfZW5hYmxlZCB0aGVuXG4gICAgICBjb2xvcl9lbmFibGVkIDo9IGZhbHNlXG5cbmxldCB3aXRoX2NvbG9yIHMgcHAgb3V0IHggPVxuICBwcF9vcGVuX3RhZyBvdXQgcztcbiAgcHAgb3V0IHg7XG4gIHBwX2Nsb3NlX3RhZyBvdXQgKClcblxubGV0IHdpdGhfY29sb3JmIHMgb3V0IGZtdCA9XG4gIHBwX29wZW5fdGFnIG91dCBzO1xuICBGb3JtYXQua2ZwcmludGYgKGZ1biBvdXQgLT4gcHBfY2xvc2VfdGFnIG91dCAoKSkgb3V0IGZtdFxuXG4oKiBjOiB3aGV0aGVyIGNvbG9ycyBhcmUgZW5hYmxlZCAqKVxubGV0IHNwcmludGZfIGMgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBpZiBjICYmICFjb2xvcl9lbmFibGVkIHRoZW4gc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBmbXQ7XG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gX2ZtdCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgZm10IGZvcm1hdFxuXG5sZXQgd2l0aF9jb2xvcl9rc2YgfmYgcyBmbXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgb3V0ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIGlmICFjb2xvcl9lbmFibGVkIHRoZW4gc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBvdXQ7XG4gIHBwX29wZW5fdGFnIG91dCBzO1xuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgcHBfY2xvc2VfdGFnIG91dCAoKTtcbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBvdXQgKCk7XG4gICAgICBmIChCdWZmZXIuY29udGVudHMgYnVmKSlcbiAgICBvdXQgZm10XG5cbmxldCB3aXRoX2NvbG9yX3NmIHMgZm10ID0gd2l0aF9jb2xvcl9rc2YgfmY6KGZ1biBzIC0+IHMpIHMgZm10XG5sZXQgc3ByaW50ZiBmbXQgPSBzcHJpbnRmXyB0cnVlIGZtdFxubGV0IHNwcmludGZfbm9fY29sb3IgZm10ID0gc3ByaW50Zl8gZmFsc2UgZm10XG5sZXQgc3ByaW50Zl9keW5fY29sb3IgfmNvbG9ycyBmbXQgPSBzcHJpbnRmXyBjb2xvcnMgZm10XG5cbmxldCBmcHJpbnRmX2R5bl9jb2xvciB+Y29sb3JzIG91dCBmbXQgPVxuICBsZXQgb2xkX3RhZ3MgPSBGb3JtYXQucHBfZ2V0X21hcmtfdGFncyBvdXQgKCkgaW5cbiAgRm9ybWF0LnBwX3NldF9tYXJrX3RhZ3Mgb3V0IGNvbG9ycztcbiAgKCogZW5hYmxlL2Rpc2FibGUgdGFncyAqKVxuICBGb3JtYXQua2ZwcmludGYgKGZ1biBvdXQgLT4gRm9ybWF0LnBwX3NldF9tYXJrX3RhZ3Mgb3V0IG9sZF90YWdzKSBvdXQgZm10XG5cbmxldCBrc3ByaW50ZiA/bWFyZ2luIH5mIGZtdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIGxldCBvdXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgaWYgIWNvbG9yX2VuYWJsZWQgdGhlbiBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIG91dDtcbiAgKG1hdGNoIG1hcmdpbiB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgbSAtPiBwcF9zZXRfbWFyZ2luIG91dCBtKTtcbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBfIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgZiAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikpXG4gICAgb3V0IGZtdFxuXG5tb2R1bGUgRHVtcCA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBwcmludGVyXG5cbiAgbGV0IHVuaXQgPSB1bml0XG4gIGxldCBpbnQgPSBpbnRcbiAgbGV0IHN0cmluZyA9IHN0cmluZ19xdW90ZWRcbiAgbGV0IGJvb2wgPSBib29sXG4gIGxldCBmbG9hdCA9IGZsb2F0XG4gIGxldCBjaGFyID0gY2hhclxuICBsZXQgaW50MzIgPSBpbnQzMlxuICBsZXQgaW50NjQgPSBpbnQ2NFxuICBsZXQgbmF0aXZlaW50ID0gbmF0aXZlaW50XG4gIGxldCBsaXN0IHBwID0gd2l0aGluIFwiW1wiIFwiXVwiIChob3Zib3ggKGxpc3QgfnNlcDoocmV0dXJuIFwiO0AsXCIpIHBwKSlcbiAgbGV0IGFycmF5IHBwID0gd2l0aGluIFwiW3xcIiBcInxdXCIgKGhvdmJveCAoYXJyYXkgfnNlcDoocmV0dXJuIFwiO0AsXCIpIHBwKSlcblxuICBsZXQgb3B0aW9uIHBwIG91dCB4ID1cbiAgICBtYXRjaCB4IHdpdGhcbiAgICB8IE5vbmUgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJOb25lXCJcbiAgICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJTb21lICVhXCIgcHAgeFxuXG4gIGxldCBwYWlyIHAxIHAyID0gd2l0aGluIFwiKFwiIFwiKVwiIChob3Zib3ggKHBhaXIgcDEgcDIpKVxuICBsZXQgdHJpcGxlIHAxIHAyIHAzID0gd2l0aGluIFwiKFwiIFwiKVwiIChob3Zib3ggKHRyaXBsZSBwMSBwMiBwMykpXG4gIGxldCBxdWFkIHAxIHAyIHAzIHA0ID0gd2l0aGluIFwiKFwiIFwiKVwiIChob3Zib3ggKHF1YWQgcDEgcDIgcDMgcDQpKVxuXG4gIGxldCByZXN1bHQnIHBvayBwZXJyb3Igb3V0ID0gZnVuY3Rpb25cbiAgICB8IE9rIHggLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiKEBbT2sgJWFAXSlcIiBwb2sgeFxuICAgIHwgRXJyb3IgZSAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQFtFcnJvciAlYUBdKVwiIHBlcnJvciBlXG5cbiAgbGV0IHJlc3VsdCBwb2sgPSByZXN1bHQnIHBvayBzdHJpbmdcbiAgbGV0IHRvX3N0cmluZyA9IHRvX3N0cmluZ1xuZW5kXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCArKyApID0gYXBwZW5kXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iLCJtb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgdHlwZSAnYSBqc19hcnJheSA9IHRcblxuICB0eXBlICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2sgPSB0XG5cbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19zdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc2J5dGVzX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuICBleHRlcm5hbCBib29sIDogYm9vbCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgdG9fYm9vbCA6IHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuICBleHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fYXJyYXkgOiB0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2pzX3RvX2FycmF5XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG4gIGV4dGVybmFsIGZsb2F0X29mX251bWJlciA6IHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9pbnQzMiA6IGludDMyIC0+IHQgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgaW50MzJfb2ZfbnVtYmVyIDogdCAtPiBpbnQzMiA9IFwiY2FtbF9qc190b19pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCBuYXRpdmVpbnRfb2ZfbnVtYmVyIDogdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCB0eXBlb2YgOiB0IC0+IHQgPSBcImNhbWxfanNfdHlwZW9mXCJcblxuICBleHRlcm5hbCBpbnN0YW5jZW9mIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbiAgZXh0ZXJuYWwgZGVidWdnZXIgOiB1bml0IC0+IHVuaXQgPSBcImRlYnVnZ2VyXCJcblxuICBleHRlcm5hbCBnZXQgOiB0IC0+IHQgLT4gdCA9IFwiY2FtbF9qc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICBleHRlcm5hbCBkZWxldGUgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19kZWxldGVcIlxuXG4gIGV4dGVybmFsIGNhbGwgOiB0IC0+IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gIGV4dGVybmFsIGZ1bl9jYWxsIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbCA6IHQgLT4gc3RyaW5nIC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gIGV4dGVybmFsIG5ld19vYmogOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19uZXdcIlxuXG4gIGV4dGVybmFsIG5ld19vYmpfYXJyIDogdCAtPiB0IGpzX2FycmF5IC0+IHQgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gIGV4dGVybmFsIG9iaiA6IChzdHJpbmcgKiB0KSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX29iamVjdFwiXG5cbiAgZXh0ZXJuYWwgZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgZXh0ZXJuYWwgZXZhbF9zdHJpbmcgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXZhbF9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICh0IGpzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIHQganNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAoJ2IgLT4gdCBqc19hcnJheSAtPiAnYSkgLT4gKCdiLCB0IGpzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHdyYXBfbWV0aF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdhLCAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja1wiXG5lbmRcblxubW9kdWxlIFN5cyA9IHN0cnVjdFxuICB0eXBlICdhIGNhbGxiYWNrID0gJ2FcblxuICBleHRlcm5hbCBjcmVhdGVfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IGNvbnRlbnQ6c3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfY3JlYXRlX2ZpbGVcIlxuXG4gIGV4dGVybmFsIHJlYWRfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IHN0cmluZyA9IFwiY2FtbF9yZWFkX2ZpbGVfY29udGVudFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfb3V0cHV0JyA6IG91dF9jaGFubmVsIC0+IChqc19zdHJpbmc6SnMudCAtPiB1bml0KSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9pbnB1dCcgOiBpbl9jaGFubmVsIC0+ICh1bml0IC0+IHN0cmluZykgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfcG9pbnQgOiB1bml0IC0+IHN0cmluZyBsaXN0ID0gXCJjYW1sX2xpc3RfbW91bnRfcG9pbnRcIlxuXG4gIGV4dGVybmFsIG1vdW50X2F1dG9sb2FkIDogc3RyaW5nIC0+IChzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb24pIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tb3VudF9hdXRvbG9hZFwiXG5cbiAgZXh0ZXJuYWwgdW5tb3VudCA6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3VubW91bnRcIlxuXG4gIHR5cGUgcmVkaXJlY3Rpb25cblxuICBleHRlcm5hbCByZWRpcmVjdF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gaW50bzpvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvblxuICAgID0gXCJjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3RcIlxuXG4gIGV4dGVybmFsIHJlc3RvcmVfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHJlZGlyZWN0aW9uIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmVcIlxuXG4gIG1vZHVsZSBDb25maWcgPSBzdHJ1Y3RcbiAgICBleHRlcm5hbCB1c2VfanNfc3RyaW5nIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1wiXG5cbiAgICBleHRlcm5hbCBlZmZlY3RzIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1wiXG4gIGVuZFxuXG4gIGxldCB2ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLnNcblxuICBsZXQgZ2l0X3ZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uZ2l0X3ZlcnNpb25cbmVuZFxuXG5tb2R1bGUgRXJyb3IgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHJhaXNlXyA6IHQgLT4gJ2FcblxuICB2YWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4blxuICAoKiogQXR0YWNoIGEgSmF2YXNTY3JpcHQgZXJyb3IgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLiAgaWYgW2ZvcmNlID0gZmFsc2VdIGFuZCBhXG4gICAgSmF2YXNTY3JpcHQgZXJyb3IgaXMgYWxyZWFkeSBhdHRhY2hlZCwgaXQgd2lsbCBkbyBub3RoaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB0b1xuICAgIHN0b3JlIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcy5cblxuICAgIEF0dGFjaGluZyBKYXZhc1NjcmlwdCBlcnJvcnMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSB3aGVuIGNvbXBpbGluZyB3aXRoXG4gICAgWy0tZW5hYmxlIHdpdGgtanMtZXJyb3JdLiAqKVxuXG4gIHZhbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb25cbiAgKCoqIEV4dHJhY3QgYSBKYXZhU2NyaXB0IGVycm9yIGF0dGFjaGVkIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbiwgaWYgYW55LiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgICAgIGluc3BlY3QgYW4gZXZlbnR1YWwgc3RhY2sgc3RyYWNlLCBlc3BlY2lhbGx5IHdoZW4gc291cmNlbWFwIGlzIGVuYWJsZWQuICopXG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG4gICgqKiBUaGUgW0Vycm9yXSBleGNlcHRpb24gd3JhcCBqYXZhc2NyaXB0IGV4Y2VwdGlvbnMgd2hlbiBjYXVnaHQgYnkgT0NhbWwgY29kZS5cbiAgICAgIEluIGNhc2UgdGhlIGphdmFzY3JpcHQgZXhjZXB0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBqYXZhc2NyaXB0IFtFcnJvcl0sXG4gICAgICBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYW5kIHdyYXBwZWQgaW50byBhIFtGYWlsdXJlXSBleGNlcHRpb24uXG4gICopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG5cbiAgbGV0IF8gPSBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gXCJqc0Vycm9yXCIgKEV4biAoT2JqLm1hZ2ljIFt8fF0pKVxuXG4gIGxldCByYWlzZV8gOiB0IC0+ICdhID0gSnMuanNfZXhwciBcIihmdW5jdGlvbiAoZXhuKSB7IHRocm93IGV4biB9KVwiXG5cbiAgZXh0ZXJuYWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uID0gXCJjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cIlxuXG4gIGV4dGVybmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG4gPSBcImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXCJcbmVuZFxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMi02MFwiXVxuXG5tb2R1bGUgRm9yX2NvbXBhdGliaWxpdHlfb25seSA9IHN0cnVjdFxuICAoKiBBZGQgcHJpbWl0aXZlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBFeGlzdGluZyB1c2VycyBtaWdodFxuICAgICBkZXBlbmQgb24gaXQgKGUuZy4gZ2VuX2pzX2FwaSksIHdlIGRvbnQgd2FudCB0aGUgb2NhbWwgY29tcGlsZXJcbiAgICAgdG8gY29tcGxhaW4gYWJvdXQgdGhlc2VzIG1pc3NpbmcgcHJpbWl0aXZlcy4gKilcblxuICBleHRlcm5hbCBjYW1sX2pzX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IEpzLnQgPSBcImNhbWxfanNfZnJvbV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19ieXRlX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF9vZl9qc19hcnJheSA6ICdhIEpzLmpzX2FycmF5IC0+ICdhIGxpc3QgPSBcImNhbWxfbGlzdF9vZl9qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X3RvX2pzX2FycmF5IDogJ2EgbGlzdCAtPiAnYSBKcy5qc19hcnJheSA9IFwiY2FtbF9saXN0X3RvX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuZW5kXG5cbm1vZHVsZSBUeXBlZF9hcnJheSA9IHN0cnVjdFxuICB0eXBlICgnYSwgJ2IpIHR5cGVkQXJyYXkgPSBKcy50XG5cbiAgdHlwZSBhcnJheUJ1ZmZlciA9IEpzLnRcblxuICB0eXBlIHVpbnQ4QXJyYXkgPSBKcy50XG5cbiAgZXh0ZXJuYWwga2luZCA6ICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYikgQmlnYXJyYXkua2luZFxuICAgID0gXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGZyb21fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50IC0+ICgnYSwgJ2IpIHR5cGVkQXJyYXlcbiAgICA9IFwiY2FtbF9iYV90b190eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnRcbiAgICA9IFwiY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5XCJcblxuICBtb2R1bGUgQmlnc3RyaW5nID0gc3RydWN0XG4gICAgdHlwZSB0ID0gKGNoYXIsIEJpZ2FycmF5LmludDhfdW5zaWduZWRfZWx0LCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuQXJyYXkxLnRcblxuICAgIGV4dGVybmFsIHRvX2FycmF5QnVmZmVyIDogdCAtPiBhcnJheUJ1ZmZlciA9IFwiYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCB0b191aW50OEFycmF5IDogdCAtPiB1aW50OEFycmF5ID0gXCJiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXlcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfYXJyYXlCdWZmZXIgOiBhcnJheUJ1ZmZlciAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHQgPSBcImJpZ3N0cmluZ19vZl90eXBlZF9hcnJheVwiXG4gIGVuZFxuXG4gIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfYXJyYXlcIlxuZW5kXG5cbm1vZHVsZSBJbnQ2NCA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGVfaW50NjRfbG9fbWlfaGkgOiBpbnQgLT4gaW50IC0+IGludCAtPiBJbnQ2NC50XG4gICAgPSBcImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXCJcbmVuZFxuIiwib3BlbiBCcnJcblxubW9kdWxlIEtleV9wYXRoID0gc3RydWN0XG4gIHR5cGUgdCA9IElkIG9mIHN0cmluZyB8IFMgb2YgdCBhcnJheVxuXG4gIGxldCByZWMgdG9fanYgPSBmdW5jdGlvblxuICAgIHwgSWQgcCAtPiBKdi5vZl9zdHJpbmcgcFxuICAgIHwgUyBrZXlzIC0+IEp2Lm9mX2FycmF5IHRvX2p2IGtleXNcbmVuZFxuXG5tb2R1bGUgS2V5X3JhbmdlID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IGJvdW5kIH5sb3dlciB+dXBwZXIgPyhsb3dlcl9vcGVuID0gZmFsc2UpID8odXBwZXJfb3BlbiA9IGZhbHNlKSAoKSA9XG4gICAgbGV0IGMgPSBKdi5nZXQgSnYuZ2xvYmFsIFwiSURCS2V5UmFuZ2VcIiBpblxuICAgIEp2LmNhbGwgYyBcImJvdW5kXCJcbiAgICAgIFt8IGxvd2VyOyB1cHBlcjsgSnYub2ZfYm9vbCBsb3dlcl9vcGVuOyBKdi5vZl9ib29sIHVwcGVyX29wZW4gfF1cbmVuZFxuXG5tb2R1bGUgRXZlbnRzID0gc3RydWN0XG4gIG1vZHVsZSBWZXJzaW9uX2NoYW5nZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IEp2LnRcblxuICAgIGxldCBvbGRfdmVyc2lvbiB0ID0gSnYudG9faW50IEBAIEp2LmdldCB0IFwib2xkVmVyc2lvblwiXG4gICAgbGV0IG5ld192ZXJzaW9uIHQgPSBKdi50b19pbnQgQEAgSnYuZ2V0IHQgXCJuZXdWZXJzaW9uXCJcbiAgZW5kXG5cbiAgbGV0IHVwZ3JhZGVfbmVlZGVkIDogVmVyc2lvbl9jaGFuZ2UudCBFdi50eXBlJyA9XG4gICAgRXYuVHlwZS5jcmVhdGUgKEpzdHIudiBcInVwZ3JhZGVuZWVkZWRcIilcblxuICBsZXQgc3VjY2VzcyA6IEV2LlR5cGUudm9pZCBFdi50eXBlJyA9IEV2LlR5cGUudm9pZCAoSnN0ci52IFwic3VjY2Vzc1wiKVxuICBsZXQgZXJyb3IgOiBFdi5UeXBlLnZvaWQgRXYudHlwZScgPSBFdi5UeXBlLnZvaWQgKEpzdHIudiBcImVycm9yXCIpXG5lbmRcblxubW9kdWxlIFJlcXVlc3QgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0geyBqdiA6IEp2LnQ7IG9mX2p2IDogSnYudCAtPiAnYSB9XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBvZl9qdiB+ZiBqID0geyBqdiA9IG9mX2p2IGo7IG9mX2p2ID0gZiB9XG4gIGxldCBlcnJvciB0ID0gSnYuZ2V0IHQuanYgXCJlcnJvclwiIHw+IEp2LnRvX2Vycm9yXG5cbiAgbGV0IHJlc3VsdCAodHlwZSBhKSAodCA6IGEgdCkgOiBhID1cbiAgICAoKiB0b2RvIHRoaXMgaXMgd3JvbmcgKilcbiAgICBKdi5nZXQgdC5qdiBcInJlc3VsdFwiIHw+IHQub2ZfanZcblxuICBsZXQgb25fc3VjY2VzcyAodHlwZSBhKSB+KGYgOiBFdi5UeXBlLnZvaWQgRXYudCAtPiBhIHQgLT4gdW5pdCkgKHQgOiBhIHQpID1cbiAgICBsZXQgZiBldiA9IGYgZXYgdCBpblxuICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXZlbnRzLnN1Y2Nlc3MgZiAoRXYudGFyZ2V0X29mX2p2IHQuanYpO1xuICAgIHRcblxuICBsZXQgb25fZXJyb3IgKHR5cGUgYSkgfihmIDogRXYuVHlwZS52b2lkIEV2LnQgLT4gYSB0IC0+IHVuaXQpICh0IDogYSB0KSA9XG4gICAgbGV0IGYgZXYgPSBmIGV2IHQgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy5lcnJvciBmIChFdi50YXJnZXRfb2ZfanYgdC5qdik7XG4gICAgdFxuXG4gIGxldCBmdXQgdCA9XG4gICAgbGV0IHJlc3VsdF9mdXQsIHNldCA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgICBsZXQgXyA9IG9uX3N1Y2Nlc3MgfmY6KGZ1biBfIHQgLT4gc2V0IChPayAocmVzdWx0IHQpKSkgdCBpblxuICAgIGxldCBfID0gb25fZXJyb3IgfmY6KGZ1biBfIHQgLT4gc2V0IChFcnJvciAoZXJyb3IgdCkpKSB0IGluXG4gICAgcmVzdWx0X2Z1dFxuZW5kXG5cbm1vZHVsZSB0eXBlIEtleSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgcGF0aCA6IEtleV9wYXRoLnRcbiAgdmFsIHRvX2p2IDogdCAtPiBKdi50XG4gIHZhbCBvZl9qdiA6IEp2LnQgLT4gdFxuZW5kXG5cbm1vZHVsZSB0eXBlIFN0b3JlX2NvbnRlbnRfaW50ZiA9IHNpZ1xuICB0eXBlIHRcblxuICBtb2R1bGUgS2V5IDogS2V5XG5cbiAgdmFsIG5hbWUgOiBzdHJpbmdcbiAgdmFsIHRvX2p2IDogdCAtPiBKdi50XG4gIHZhbCBvZl9qdiA6IEp2LnQgLT4gdFxuICB2YWwgZ2V0X2tleSA6IHQgLT4gS2V5LnRcbmVuZFxuXG5tb2R1bGUgRGlyZWN0aW9uID0gc3RydWN0XG4gIHR5cGUgdCA9IE5leHQgfCBOZXh0X3VuaXF1ZSB8IFByZXYgfCBQcmV2X3VuaXF1ZVxuXG4gIGxldCB0b19zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgTmV4dCAtPiBcIm5leHRcIlxuICAgIHwgTmV4dF91bmlxdWUgLT4gXCJuZXh0VW5pcXVlXCJcbiAgICB8IFByZXYgLT4gXCJwcmV2XCJcbiAgICB8IFByZXZfdW5pcXVlIC0+IFwicHJldlVuaXF1ZVwiXG5cbiAgbGV0IG9mX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBcIm5leHRcIiAtPiBOZXh0XG4gICAgfCBcIm5leHRVbmlxdWVcIiAtPiBOZXh0X3VuaXF1ZVxuICAgIHwgXCJwcmV2XCIgLT4gUHJldlxuICAgIHwgXCJwcmV2VW5pcXVlXCIgLT4gUHJldl91bmlxdWVcbiAgICB8IHMgLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgcylcblxuICBsZXQgdG9fanYgZCA9IEp2Lm9mX3N0cmluZyAodG9fc3RyaW5nIGQpXG4gIGxldCBvZl9qdiBqID0gb2Zfc3RyaW5nIChKdi50b19zdHJpbmcgailcbmVuZFxuXG5tb2R1bGUgQ29udGVudF9hY2Nlc3MgKENvbnRlbnQgOiBTdG9yZV9jb250ZW50X2ludGYpIChLZXkgOiBLZXkpID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgY291bnQgKCkgdCA9IEp2LmNhbGwgdCBcImNvdW50XCIgW3x8XSB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkp2LnRvX2ludFxuXG4gIGxldCBnZXQga2V5IHQgPVxuICAgIGxldCBmIGp2ID0gSnYudG9fb3B0aW9uIChmdW4gaiAtPiBDb250ZW50Lm9mX2p2IGopIGp2IGluXG4gICAgSnYuY2FsbCB0IFwiZ2V0XCIgW3wgS2V5LnRvX2p2IGtleSB8XSB8PiBSZXF1ZXN0Lm9mX2p2IH5mXG5cbiAgbGV0IGdldF9hbGwgdCA9XG4gICAgbGV0IGYganYgPSBKdi50b19hcnJheSAoZnVuIGMgLT4gQ29udGVudC5vZl9qdiBjKSBqdiBpblxuICAgIEp2LmNhbGwgdCBcImdldEFsbFwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIGxldCBnZXRfYWxsX2tleXMgP3F1ZXJ5IHQgPVxuICAgIGxldCBhcmdzID0gbWF0Y2ggcXVlcnkgd2l0aCBOb25lIC0+IFt8fF0gfCBTb21lIHF1ZXJ5IC0+IFt8IHF1ZXJ5IHxdIGluXG4gICAgbGV0IGYganYgPSBKdi50b19hcnJheSAoZnVuIGMgLT4gQ29udGVudC5LZXkub2ZfanYgYykganYgaW5cbiAgICBKdi5jYWxsIHQgXCJnZXRBbGxLZXlzXCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mXG5cbiAgbW9kdWxlIEN1cnNvciA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IEp2LnRcblxuICAgIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG4gICAgbGV0IGtleSB0ID0gSnYuZ2V0IHQgXCJrZXlcIiB8PiBKdi50b19vcHRpb24gS2V5Lm9mX2p2XG4gICAgbGV0IHByaW1hcnlfa2V5IHQgPSBKdi5nZXQgdCBcInByaW1hcnlLZXlcIiB8PiBKdi50b19vcHRpb24gQ29udGVudC5LZXkub2ZfanZcblxuICAgIGxldCBhZHZhbmNlIGNvdW50IHQgPVxuICAgICAgaWdub3JlIEBAIEp2LmNhbGwgdCBcImFkdmFuY2VcIiBbfCBKdi5vZl9pbnQgY291bnQgfF07XG4gICAgICB0XG5cbiAgICBsZXQgY29udGludWUgP2tleSB0ID1cbiAgICAgIGxldCBhcmdzID1cbiAgICAgICAgbWF0Y2gga2V5IHdpdGggTm9uZSAtPiBbfHxdIHwgU29tZSBrZXkgLT4gW3wgQ29udGVudC5LZXkudG9fanYga2V5IHxdXG4gICAgICBpblxuICAgICAgaWdub3JlIEBAIEp2LmNhbGwgdCBcImNvbnRpbnVlXCIgYXJnc1xuICBlbmRcblxuICBtb2R1bGUgQ3Vyc29yX3dpdGhfdmFsdWUgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIEN1cnNvclxuXG4gICAgbGV0IHZhbHVlIHQgPVxuICAgICAgbGV0IG9mX2p2IGogPSBDb250ZW50Lm9mX2p2IGogaW5cbiAgICAgIGxldCB2ID0gSnYuZ2V0IHQgXCJ2YWx1ZVwiIGluXG4gICAgICBKdi50b19vcHRpb24gb2ZfanYgdlxuXG4gICAgbGV0IGRlbGV0ZSB0ID0gSnYuY2FsbCB0IFwiZGVsZXRlXCIgW3x8XSB8PiBSZXF1ZXN0Lm9mX2p2IH5mOihmdW4gXyAtPiAoKSlcblxuICAgIGxldCB1cGRhdGUgdiB0ID1cbiAgICAgIEp2LmNhbGwgdCBcInVwZGF0ZVwiIFt8IENvbnRlbnQudG9fanYgdiB8XVxuICAgICAgfD4gUmVxdWVzdC5vZl9qdiB+ZjpDb250ZW50LktleS5vZl9qdlxuICBlbmRcblxuICBsZXQgb3Blbl9jdXJzb3IgP3F1ZXJ5ID9kaXJlY3Rpb24gdCA6IEN1cnNvcl93aXRoX3ZhbHVlLnQgb3B0aW9uIFJlcXVlc3QudCA9XG4gICAgbGV0IGRpcmVjdGlvbiA9IE9wdGlvbi5tYXAgRGlyZWN0aW9uLnRvX2p2IGRpcmVjdGlvbiBpblxuICAgIGxldCBhcmdzID1cbiAgICAgICgqIHRvZG86IHF1ZXJ5ICEqKVxuICAgICAgbWF0Y2ggKHF1ZXJ5LCBkaXJlY3Rpb24pIHdpdGhcbiAgICAgIHwgU29tZSBxLCBTb21lIGQgLT4gW3wgcTsgZCB8XVxuICAgICAgfCBOb25lLCBTb21lIGQgLT4gW3wgSnYubnVsbDsgZCB8XVxuICAgICAgfCBTb21lIHEsIE5vbmUgLT4gW3wgcSB8XVxuICAgICAgfCBOb25lLCBOb25lIC0+IFt8fF1cbiAgICBpblxuICAgIGxldCBmIGp2ID0gSnYudG9fb3B0aW9uIEN1cnNvcl93aXRoX3ZhbHVlLm9mX2p2IGp2IGluXG4gICAgSnYuY2FsbCB0IFwib3BlbkN1cnNvclwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIGxldCBvcGVuX2tleV9jdXJzb3IgP3F1ZXJ5ID9kaXJlY3Rpb24gdCA6IEN1cnNvcl93aXRoX3ZhbHVlLnQgb3B0aW9uIFJlcXVlc3QudFxuICAgICAgPVxuICAgIGxldCBkaXJlY3Rpb24gPSBPcHRpb24ubWFwIERpcmVjdGlvbi50b19qdiBkaXJlY3Rpb24gaW5cbiAgICBsZXQgYXJncyA9XG4gICAgICAoKiB0b2RvOiBxdWVyeSAhKilcbiAgICAgIG1hdGNoIChxdWVyeSwgZGlyZWN0aW9uKSB3aXRoXG4gICAgICB8IFNvbWUgcSwgU29tZSBkIC0+IFt8IHE7IGQgfF1cbiAgICAgIHwgTm9uZSwgU29tZSBkIC0+IFt8IEp2Lm51bGw7IGQgfF1cbiAgICAgIHwgU29tZSBxLCBOb25lIC0+IFt8IHEgfF1cbiAgICAgIHwgTm9uZSwgTm9uZSAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiBDdXJzb3Iub2ZfanYganYgaW5cbiAgICBKdi5jYWxsIHQgXCJvcGVuS2V5Q3Vyc29yXCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mXG5cbiAgKCogW2ZvbGRfa2V5XSB3aWxsIGZvbGQgb3ZlciBhbGwga2V5cyByZXR1cm5lZCBieSB0aGUgZ2l2ZW4gY3Vyc29yLlxuICAgICBOb3RlIHRoYXQgaXQgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBbZ2V0X2FsbF9rZXlzXSB0byBidWlsZCBhbiBhcnJheVxuICAgICBvZiBldmVyeSBrZXlzLiBJdCdzIG1vc3QgcHJvYmFibHkgZHVlIHRvIGEgY2FjaGluZy1iYXNlZCBvcHRpbWl6YXRpb25cbiAgICAgb2YgdGhlIFtnZXRfYWxsX2tleXNdIHJlc3VsdHMgKGF0IGxlYXN0IGluIEZpcmVmb3gpLiAqKVxuICBsZXQgZm9sZF9rZXlzIH5pbml0IH5mIGN1cnNvcl9yZXEgPVxuICAgIGxldCByZXN1bHQsIHNldF9yZXN1bHQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgbGV0IGFjYyA9IHJlZiBpbml0IGluXG4gICAgbGV0IF8gPVxuICAgICAgUmVxdWVzdC5vbl9zdWNjZXNzIGN1cnNvcl9yZXEgfmY6KGZ1biBfZXYgciAtPlxuICAgICAgICAgIG1hdGNoIFJlcXVlc3QucmVzdWx0IHIgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBzZXRfcmVzdWx0IChPayAhYWNjKVxuICAgICAgICAgIHwgU29tZSBjdXJzb3IgLT5cbiAgICAgICAgICAgICAgKCogVGhlIGN1cnNvciBzaG91bGQgbm90IGJlIG91dCBvZiByYW5nZSBhdCB0aGF0IHBvaW50IHNvIHRoZSBrZXlzXG4gICAgICAgICAgICAgICAgIHNob3VsZCBoYXZlIGEgdmFsdWUuICopXG4gICAgICAgICAgICAgIGxldCBrZXkgPSBDdXJzb3Iua2V5IGN1cnNvciB8PiBPcHRpb24uZ2V0IGluXG4gICAgICAgICAgICAgIGxldCBwcmltYXJ5X2tleSA9IEN1cnNvci5wcmltYXJ5X2tleSBjdXJzb3IgfD4gT3B0aW9uLmdldCBpblxuICAgICAgICAgICAgICBhY2MgOj0gZiAhYWNjIGtleSBwcmltYXJ5X2tleTtcbiAgICAgICAgICAgICAgQ3Vyc29yLmNvbnRpbnVlIGN1cnNvcilcbiAgICAgIHw+IFJlcXVlc3Qub25fZXJyb3IgfmY6KGZ1biBfZXYgcmVxIC0+XG4gICAgICAgICAgICAgc2V0X3Jlc3VsdCAoRXJyb3IgKFJlcXVlc3QuZXJyb3IgcmVxKSkpXG4gICAgaW5cbiAgICByZXN1bHRcbmVuZFxuXG5tb2R1bGUgdHlwZSBTdG9yZSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcblxuICBtb2R1bGUgQ29udGVudCA6IFN0b3JlX2NvbnRlbnRfaW50ZlxuZW5kXG5cbm1vZHVsZSB0eXBlIEluZGV4ID0gc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCBvZl9qdiA6IEp2LnQgLT4gdFxuICB2YWwgbmFtZSA6IHN0cmluZ1xuXG4gIG1vZHVsZSBLZXkgOiBLZXlcbmVuZFxuXG5tb2R1bGUgTWFrZV9pbmRleFxuICAgIChQIDogc2lnXG4gICAgICB2YWwgbmFtZSA6IHN0cmluZ1xuICAgIGVuZClcbiAgICAoQyA6IFN0b3JlX2NvbnRlbnRfaW50ZilcbiAgICAoSyA6IEtleSkgPVxuc3RydWN0XG4gIG1vZHVsZSBDb250ZW50ID0gQ1xuICBtb2R1bGUgS2V5ID0gS1xuICBpbmNsdWRlIENvbnRlbnRfYWNjZXNzIChDb250ZW50KSAoSylcbiAgaW5jbHVkZSBQXG5lbmRcblxubW9kdWxlIE1ha2Vfb2JqZWN0X3N0b3JlIChDIDogU3RvcmVfY29udGVudF9pbnRmKSA9IHN0cnVjdFxuICBtb2R1bGUgQ29udGVudCA9IENcbiAgaW5jbHVkZSBDb250ZW50X2FjY2VzcyAoQ29udGVudCkgKENvbnRlbnQuS2V5KVxuXG4gIGxldCBhZGQgdiA/KGtleSA6IENvbnRlbnQuS2V5LnQgb3B0aW9uKSB0IDogQ29udGVudC5LZXkudCBSZXF1ZXN0LnQgPVxuICAgIGxldCBhcmdzID1cbiAgICAgIG1hdGNoIGtleSB3aXRoXG4gICAgICB8IFNvbWUga2V5IC0+IFt8IENvbnRlbnQudG9fanYgdjsgQ29udGVudC5LZXkudG9fanYga2V5IHxdXG4gICAgICB8IE5vbmUgLT4gW3wgQ29udGVudC50b19qdiB2IHxdXG4gICAgaW5cbiAgICBKdi5jYWxsIHQgXCJhZGRcIiBhcmdzIHw+IFJlcXVlc3Qub2ZfanYgfmY6Q29udGVudC5LZXkub2ZfanZcblxuICBsZXQgY3JlYXRlX2luZGV4ICh0eXBlIHQnKSAobW9kdWxlIEkgOiBJbmRleCB3aXRoIHR5cGUgdCA9IHQnKSB0IDogdCcgPVxuICAgIGxldCBrZXlfcGF0aCA9IEtleV9wYXRoLnRvX2p2IEkuS2V5LnBhdGggaW5cbiAgICBKdi5jYWxsIHQgXCJjcmVhdGVJbmRleFwiIFt8IEp2Lm9mX3N0cmluZyBJLm5hbWU7IGtleV9wYXRoIHxdIHw+IEkub2ZfanZcblxuICBsZXQgaW5kZXggKHR5cGUgdCcpIChtb2R1bGUgSSA6IEluZGV4IHdpdGggdHlwZSB0ID0gdCcpIHQgOiB0JyA9XG4gICAgSnYuY2FsbCB0IFwiaW5kZXhcIiBbfCBKdi5vZl9zdHJpbmcgSS5uYW1lIHxdIHw+IEkub2ZfanZcblxuICBsZXQgcHV0IHYgPyhrZXkgOiBDb250ZW50LktleS50IG9wdGlvbikgdCA6IENvbnRlbnQuS2V5LnQgUmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCBrZXkgd2l0aFxuICAgICAgfCBTb21lIGtleSAtPiBbfCBDb250ZW50LnRvX2p2IHY7IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgfCBOb25lIC0+IFt8IENvbnRlbnQudG9fanYgdiB8XVxuICAgIGluXG4gICAgSnYuY2FsbCB0IFwicHV0XCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkNvbnRlbnQuS2V5Lm9mX2p2XG5lbmRcblxubW9kdWxlIFRyYW5zYWN0aW9uID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICB0eXBlIG1vZGUgPSBSZWFkb25seSB8IFJlYWR3cml0ZSB8IFJlYWR3cml0ZWZsdXNoXG5cbiAgbGV0IHN0cmluZ19vZl9tb2RlID0gZnVuY3Rpb25cbiAgICB8IFJlYWRvbmx5IC0+IFwicmVhZG9ubHlcIlxuICAgIHwgUmVhZHdyaXRlIC0+IFwicmVhZHdyaXRlXCJcbiAgICB8IFJlYWR3cml0ZWZsdXNoIC0+IFwicmVhZHdyaXRlZmx1c2hcIlxuXG4gIGxldCBtb2RlX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBcInJlYWRvbmx5XCIgLT4gUmVhZG9ubHlcbiAgICB8IFwicmVhZHdyaXRlXCIgLT4gUmVhZHdyaXRlXG4gICAgfCBcInJlYWR3cml0ZWZsdXNoXCIgLT4gUmVhZHdyaXRlZmx1c2hcbiAgICB8IHMgLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgcylcblxuICBsZXQgb2JqZWN0X3N0b3JlICh0eXBlIHQnKSAobW9kdWxlIFMgOiBTdG9yZSB3aXRoIHR5cGUgdCA9IHQnKSB0IDogdCcgPVxuICAgIEp2LmNhbGwgdCBcIm9iamVjdFN0b3JlXCIgW3wgSnYub2Zfc3RyaW5nIFMuQ29udGVudC5uYW1lIHxdIHw+IFMub2ZfanZcbmVuZFxuXG5tb2R1bGUgRGF0YWJhc2UgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnYudFxuXG4gIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBjcmVhdGVfb2JqZWN0X3N0b3JlICh0eXBlIHQnKSAobW9kdWxlIFMgOiBTdG9yZSB3aXRoIHR5cGUgdCA9IHQnKVxuICAgICAgPyhhdXRvX2luY3JlbWVudCA9IGZhbHNlKSAoZGIgOiB0KSA6IHQnID1cbiAgICBsZXQgb3B0cyA9IFsgKFwiYXV0b0luY3JlbWVudFwiLCBKdi5vZl9ib29sIGF1dG9faW5jcmVtZW50KSBdIGluXG4gICAgKCogVE9ETzogbW92ZSBhdXRvaW5jcmVtZW50IHRvIHN0b3JlX2NvbnRlbnQgKilcbiAgICBsZXQga2V5X3BhdGggPSBLZXlfcGF0aC50b19qdiBTLkNvbnRlbnQuS2V5LnBhdGggaW5cbiAgICBsZXQgb3B0cyA9IChcImtleVBhdGhcIiwga2V5X3BhdGgpIDo6IG9wdHMgaW5cbiAgICBsZXQgb3B0aW9ucyA9IEp2Lm9iaiBAQCBBcnJheS5vZl9saXN0IG9wdHMgaW5cbiAgICBDb25zb2xlLmluZm8gWyBcIm5ldyBvYmplY3Qgc3RvcmUgd2l0aCBvcHRpb25zOlwiOyBvcHRpb25zIF07XG4gICAgKCogVE9ETzoga2V5cGF0aCBzaG91bGQgYmUgb3B0aW9ubmFsICopXG4gICAgSnYuY2FsbCBkYiBcImNyZWF0ZU9iamVjdFN0b3JlXCIgW3wgSnYub2Zfc3RyaW5nIFMuQ29udGVudC5uYW1lOyBvcHRpb25zIHxdXG4gICAgfD4gUy5vZl9qdlxuXG4gIGxldCBkZWxldGVfb2JqZWN0X3N0b3JlIHQgbmFtZSA9XG4gICAgSnYuY2FsbCB0IFwiZGVsZXRlT2JqZWN0U3RvcmVcIiBbfCBKdi5vZl9zdHJpbmcgbmFtZSB8XSB8PiBpZ25vcmVcblxuICBsZXQgdHJhbnNhY3Rpb24gc3RvcmVzID8obW9kZSA9IFRyYW5zYWN0aW9uLlJlYWRvbmx5KSB0ID1cbiAgICBsZXQgbW9kZSA9IFRyYW5zYWN0aW9uLnN0cmluZ19vZl9tb2RlIG1vZGUgfD4gSnYub2Zfc3RyaW5nIGluXG4gICAgbGV0IGp2X29mX3N0b3JlIChtb2R1bGUgUyA6IFN0b3JlKSA9IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZSBpblxuICAgIEp2LmNhbGwgdCBcInRyYW5zYWN0aW9uXCIgW3wgSnYub2ZfbGlzdCBqdl9vZl9zdG9yZSBzdG9yZXM7IG1vZGUgfF1cbiAgICB8PiBUcmFuc2FjdGlvbi5vZl9qdlxuXG4gIGxldCBvYmplY3Rfc3RvcmVfbmFtZXMgdCA9XG4gICAgSnYuZ2V0IHQgXCJvYmplY3RTdG9yZU5hbWVzXCIgfD4gSnYudG9fYXJyYXkgSnYudG9fc3RyaW5nXG5lbmRcblxubW9kdWxlIE9wZW5fZGJfcmVxdWVzdCA9IHN0cnVjdFxuICB0eXBlIHQgPSBEYXRhYmFzZS50IFJlcXVlc3QudFxuXG4gIGxldCBvbl91cGdyYWRlX25lZWRlZCB+KGYgOiBFdmVudHMuVmVyc2lvbl9jaGFuZ2UudCBFdi50IC0+IHQgLT4gdW5pdCkgKHQgOiB0KVxuICAgICAgOiB0ID1cbiAgICBsZXQgZiBldiA9XG4gICAgICBsZXQgcmVxIDogdCA9XG4gICAgICAgIEV2LmN1cnJlbnRfdGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdlxuICAgICAgICB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkRhdGFiYXNlLm9mX2p2XG4gICAgICBpblxuICAgICAgZiBldiByZXFcbiAgICBpblxuICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXZlbnRzLnVwZ3JhZGVfbmVlZGVkIGYgKEV2LnRhcmdldF9vZl9qdiB0Lmp2KTtcbiAgICB0XG5cbiAgZXh0ZXJuYWwgYXNfcmVxdWVzdCA6IHQgLT4gRGF0YWJhc2UudCBSZXF1ZXN0LnQgPSBcIiVpZGVudGl0eVwiXG5lbmRcblxubW9kdWxlIEZhY3RvcnkgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnYudFxuXG4gIGxldCBvcGVuJyB+bmFtZSA/dmVyc2lvbiB0IDogT3Blbl9kYl9yZXF1ZXN0LnQgPVxuICAgIGxldCBhcmdzID1cbiAgICAgIG1hdGNoIHZlcnNpb24gd2l0aFxuICAgICAgfCBTb21lIHYgLT4gW3wgbmFtZTsgc3RyaW5nX29mX2ludCB2IHxdXG4gICAgICB8IE5vbmUgLT4gW3wgbmFtZSB8XVxuICAgIGluXG5cbiAgICBKdi5jYWxsIHQgXCJvcGVuXCIgQEAgQXJyYXkubWFwIEp2Lm9mX3N0cmluZyBhcmdzXG4gICAgfD4gUmVxdWVzdC5vZl9qdiB+ZjpEYXRhYmFzZS5vZl9qdlxuZW5kXG5cbmxldCBnZXRfZmFjdG9yeSA/KGdsb2JhbCA9IEp2Lmdsb2JhbCkgKCkgOiBGYWN0b3J5LnQgPSBKdi5nZXQgZ2xvYmFsIFwiaW5kZXhlZERCXCJcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBBcnJheSB1dGlsc30gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgQXJyYXlzfSAqKVxuXG5pbmNsdWRlIEFycmF5XG5cbmxldCBlbXB0eSA9IFt8fF1cblxubGV0IGdldF9zYWZlIGEgaSA9XG4gIGlmIGkgPj0gMCAmJiBpIDwgQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIFNvbWUgKEFycmF5LnVuc2FmZV9nZXQgYSBpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgbWFwX2lucGxhY2UgZiBhID0gQXJyYXkuaXRlcmkgKGZ1biBpIGUgLT4gQXJyYXkudW5zYWZlX3NldCBhIGkgKGYgZSkpIGFcbmxldCBtYXBpX2lucGxhY2UgZiBhID0gQXJyYXkuaXRlcmkgKGZ1biBpIGUgLT4gQXJyYXkudW5zYWZlX3NldCBhIGkgKGYgaSBlKSkgYVxubGV0IGZvbGQgPSBBcnJheS5mb2xkX2xlZnRcblxubGV0IGZvbGRpIGYgYWNjIGEgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZiBhY2MgaSBhLihpKSkgKGkgKyAxKVxuICBpblxuICBhdXggYWNjIDBcblxubGV0IGZvbGRfd2hpbGUgZiBhY2MgYSA9XG4gIGxldCByZWMgZm9sZF93aGlsZV9pIGYgYWNjIGkgPVxuICAgIGlmIGkgPCBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBhLihpKSBpblxuICAgICAgbWF0Y2ggY29udCB3aXRoXG4gICAgICB8IGBTdG9wIC0+IGFjY1xuICAgICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZV9pIGYgYWNjIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGFjY1xuICBpblxuICBmb2xkX3doaWxlX2kgZiBhY2MgMFxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgKCogbmVlZCBzcGVjaWFsIGNhc2UgZm9yIGluaXRpYWxpemluZyB0aGUgcmVzdWx0ICopXG4gIGlmIG4gPSAwIHRoZW5cbiAgICBhY2MsIFt8fF1cbiAgZWxzZSAoXG4gICAgbGV0IGFjYywgYjAgPSBmIGFjYyBhLigwKSBpblxuICAgIGxldCByZXMgPSBBcnJheS5tYWtlIG4gYjAgaW5cbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IG5ld19hY2MsIGIgPSBmICFhY2MgYS4oaSkgaW5cbiAgICAgIGFjYyA6PSBuZXdfYWNjO1xuICAgICAgcmVzLihpKSA8LSBiXG4gICAgZG9uZTtcbiAgICAhYWNjLCByZXNcbiAgKVxuXG5sZXQgc2Nhbl9sZWZ0IGYgYWNjIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZXMgPSBBcnJheS5tYWtlIChuICsgMSkgYWNjIGluXG4gIEFycmF5Lml0ZXJpXG4gICAgKGZ1biBpIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gZiByZXMuKGkpIHggaW5cbiAgICAgIHJlcy4oaSArIDEpIDwtIG5ld19hY2MpXG4gICAgYTtcbiAgcmVzXG5cbmxldCByZXZlcnNlX2luX3BsYWNlIGEgPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbGVuID4gMCB0aGVuXG4gICAgZm9yIGsgPSAwIHRvIChsZW4gLSAxKSAvIDIgZG9cbiAgICAgIGxldCB0ID0gYS4oaykgaW5cbiAgICAgIGEuKGspIDwtIGEuKGxlbiAtIDEgLSBrKTtcbiAgICAgIGEuKGxlbiAtIDEgLSBrKSA8LSB0XG4gICAgZG9uZVxuXG5sZXQgc29ydGVkIGNtcCBhID1cbiAgbGV0IGIgPSBBcnJheS5jb3B5IGEgaW5cbiAgQXJyYXkuc29ydCBjbXAgYjtcbiAgYlxuXG5sZXQgc29ydF9pbmRpY2VzIGNtcCBhID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGxldCBiID0gQXJyYXkuaW5pdCBsZW4gKGZ1biBrIC0+IGspIGluXG4gIEFycmF5LnNvcnQgKGZ1biBrMSBrMiAtPiBjbXAgYS4oazEpIGEuKGsyKSkgYjtcbiAgYlxuXG5sZXQgc29ydF9yYW5raW5nIGNtcCBhID0gc29ydF9pbmRpY2VzIGNvbXBhcmUgKHNvcnRfaW5kaWNlcyBjbXAgYSlcblxubGV0IHJldiBhID1cbiAgbGV0IGIgPSBBcnJheS5jb3B5IGEgaW5cbiAgcmV2ZXJzZV9pbl9wbGFjZSBiO1xuICBiXG5cbmV4Y2VwdGlvbiBGb3VuZFxuXG5sZXQgbWVtID8oZXEgPSBTdGRsaWIuKCA9ICkpIGVsdCBhID1cbiAgdHJ5XG4gICAgQXJyYXkuaXRlciAoZnVuIGUgLT4gaWYgZXEgZSBlbHQgdGhlbiByYWlzZV9ub3RyYWNlIEZvdW5kKSBhO1xuICAgIGZhbHNlXG4gIHdpdGggRm91bmQgLT4gdHJ1ZVxuXG5sZXQgcmVjIGZpbmRfYXV4IGYgYSBpID1cbiAgaWYgaSA+PSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgTm9uZVxuICBlbHNlIChcbiAgICBtYXRjaCBmIGkgYS4oaSkgd2l0aFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXNcbiAgICB8IE5vbmUgLT4gZmluZF9hdXggZiBhIChpICsgMSlcbiAgKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG5sZXQgZmluZF9tYXAgZiBhID0gZmluZF9hdXggKGZ1biBfIC0+IGYpIGEgMFxubGV0IGZpbmQgPSBmaW5kX21hcFxubGV0IGZpbmRfbWFwX2kgZiBhID0gZmluZF9hdXggZiBhIDBcbmxldCBmaW5kaSA9IGZpbmRfbWFwX2lcblxuW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxubGV0IGZpbmRfaWR4IHAgYSA9XG4gIGZpbmRfYXV4XG4gICAgKGZ1biBpIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgKGksIHgpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmUpXG4gICAgYSAwXG5cbmxldCBtYXggY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkXG4gICAgICAgICAoZnVuIGFjYyBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGFjYyBlbHQgPCAwIHRoZW5cbiAgICAgICAgICAgICBlbHRcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIGEuKDApIGEpXG5cbmxldCBtYXhfZXhuIGNtcCBhID1cbiAgbWF0Y2ggbWF4IGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5tYXhfZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGFyZ21heCBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRpXG4gICAgICAgICAoZnVuIGFjYyBpIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYS4oYWNjKSBlbHQgPCAwIHRoZW5cbiAgICAgICAgICAgICBpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICAwIGEpXG5cbmxldCBhcmdtYXhfZXhuIGNtcCBhID1cbiAgbWF0Y2ggYXJnbWF4IGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5hcmdtYXhfZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IG1pbiBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRcbiAgICAgICAgIChmdW4gYWNjIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYWNjIGVsdCA+IDAgdGhlblxuICAgICAgICAgICAgIGVsdFxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgYS4oMCkgYSlcblxubGV0IG1pbl9leG4gY21wIGEgPVxuICBtYXRjaCBtaW4gY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5Lm1pbl9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgYXJnbWluIGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZGlcbiAgICAgICAgIChmdW4gYWNjIGkgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhLihhY2MpIGVsdCA+IDAgdGhlblxuICAgICAgICAgICAgIGlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIDAgYSlcblxubGV0IGFyZ21pbl9leG4gY21wIGEgPVxuICBtYXRjaCBhcmdtaW4gY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5LmFyZ21pbl9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgZmlsdGVyX21hcCBmIGEgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IGEnID0gQXJyYXkub2ZfbGlzdCBhY2MgaW5cbiAgICAgIHJldmVyc2VfaW5fcGxhY2UgYSc7XG4gICAgICBhJ1xuICAgICkgZWxzZSAoXG4gICAgICBtYXRjaCBmIGEuKGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBhdXggYWNjIChpICsgMSlcbiAgICAgIHwgU29tZSB4IC0+IGF1eCAoeCA6OiBhY2MpIChpICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSAwXG5cbmxldCBmaWx0ZXIgcCBhID1cbiAgZmlsdGVyX21hcFxuICAgIChmdW4geCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSB4XG4gICAgICBlbHNlXG4gICAgICAgIE5vbmUpXG4gICAgYVxuXG4oKiBhcHBlbmQgW3JldiBhXSBpbiBmcm9udCBvZiBbYWNjXSAqKVxubGV0IHJlYyBfX3Jldl9hcHBlbmRfbGlzdCBhIGFjYyBpID1cbiAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBhY2NcbiAgZWxzZVxuICAgIF9fcmV2X2FwcGVuZF9saXN0IGEgKGEuKGkpIDo6IGFjYykgKGkgKyAxKVxuXG5sZXQgZmxhdF9tYXAgZiBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhJyA9IEFycmF5Lm9mX2xpc3QgYWNjIGluXG4gICAgICByZXZlcnNlX2luX3BsYWNlIGEnO1xuICAgICAgYSdcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGEnID0gZiBhLihpKSBpblxuICAgICAgYXV4IChfX3Jldl9hcHBlbmRfbGlzdCBhJyBhY2MgMCkgKGkgKyAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIDBcblxubGV0IG1vbm9pZF9wcm9kdWN0IGYgYTEgYTIgPVxuICBsZXQgbmExID0gbGVuZ3RoIGExIGluXG4gIGluaXRcbiAgICAobmExICogbGVuZ3RoIGEyKVxuICAgIChmdW4gaV9wcm9kIC0+XG4gICAgICBsZXQgaSA9IGlfcHJvZCBtb2QgbmExIGluXG4gICAgICBsZXQgaiA9IGlfcHJvZCAvIG5hMSBpblxuICAgICAgZiBhMS4oaSkgYTIuKGopKVxuXG5sZXQgcmVjIF9sb29rdXBfcmVjIH5jbXAgayBhIGkgaiA9XG4gIGlmIGkgPiBqIHRoZW5cbiAgICByYWlzZSBOb3RfZm91bmRcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgaWYgY21wIGsgYS4oaSkgPSAwIHRoZW5cbiAgICAgIGlcbiAgICBlbHNlXG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgZWxzZSAoXG4gICAgbGV0IG1pZGRsZSA9IChqICsgaSkgLyAyIGluXG4gICAgbWF0Y2ggY21wIGsgYS4obWlkZGxlKSB3aXRoXG4gICAgfCAwIC0+IG1pZGRsZVxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIGkgKG1pZGRsZSAtIDEpXG4gICAgfCBfIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIChtaWRkbGUgKyAxKSBqXG4gIClcblxubGV0IF9sb29rdXBfZXhuIH5jbXAgayBhIGkgaiA9XG4gIGlmIGkgPiBqIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICBtYXRjaCBjbXAgayBhLihpKSB3aXRoXG4gIHwgMCAtPiBpXG4gIHwgbiB3aGVuIG4gPCAwIC0+IHJhaXNlIE5vdF9mb3VuZCAoKiB0b28gbG93ICopXG4gIHwgXyB3aGVuIGkgPSBqIC0+IHJhaXNlIE5vdF9mb3VuZCAoKiB0b28gaGlnaCAqKVxuICB8IF8gLT5cbiAgICAobWF0Y2ggY21wIGsgYS4oaikgd2l0aFxuICAgIHwgMCAtPiBqXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gX2xvb2t1cF9yZWMgfmNtcCBrIGEgKGkgKyAxKSAoaiAtIDEpXG4gICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZClcbigqIHRvbyBoaWdoICopXG5cbmxldCBsb29rdXBfZXhuIH5jbXAgayBhID0gX2xvb2t1cF9leG4gfmNtcCBrIGEgMCAoQXJyYXkubGVuZ3RoIGEgLSAxKVxuXG5sZXQgbG9va3VwIH5jbXAgayBhID1cbiAgdHJ5IFNvbWUgKF9sb29rdXBfZXhuIH5jbXAgayBhIDAgKEFycmF5Lmxlbmd0aCBhIC0gMSkpXG4gIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxubGV0IGJzZWFyY2ggfmNtcCBrIGEgPVxuICBsZXQgcmVjIGF1eCBpIGogPVxuICAgIGlmIGkgPiBqIHRoZW5cbiAgICAgIGBKdXN0X2FmdGVyIGpcbiAgICBlbHNlIChcbiAgICAgIGxldCBtaWRkbGUgPSBpICsgKChqIC0gaSkgLyAyKSBpblxuICAgICAgKCogYXZvaWQgb3ZlcmZsb3cgKilcbiAgICAgIG1hdGNoIGNtcCBrIGEuKG1pZGRsZSkgd2l0aFxuICAgICAgfCAwIC0+IGBBdCBtaWRkbGVcbiAgICAgIHwgbiB3aGVuIG4gPCAwIC0+IGF1eCBpIChtaWRkbGUgLSAxKVxuICAgICAgfCBfIC0+IGF1eCAobWlkZGxlICsgMSkgalxuICAgIClcbiAgaW5cbiAgbGV0IG4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBuID0gMCB0aGVuXG4gICAgYEVtcHR5XG4gIGVsc2UgKFxuICAgIG1hdGNoIGNtcCBhLigwKSBrLCBjbXAgYS4obiAtIDEpIGsgd2l0aFxuICAgIHwgYywgXyB3aGVuIGMgPiAwIC0+IGBBbGxfYmlnZ2VyXG4gICAgfCBfLCBjIHdoZW4gYyA8IDAgLT4gYEFsbF9sb3dlclxuICAgIHwgXyAtPiBhdXggMCAobiAtIDEpXG4gIClcblxubGV0IHJlYyBfZm9yX2FsbDIgcCBhMSBhMiBpMSBpMiB+bGVuID1cbiAgbGVuID0gMFxuICB8fCAocCBhMS4oaTEpIGEyLihpMikgJiYgX2Zvcl9hbGwyIHAgYTEgYTIgKGkxICsgMSkgKGkyICsgMSkgfmxlbjoobGVuIC0gMSkpXG5cbmxldCBmb3JfYWxsMiBwIGEgYiA9XG4gIEFycmF5Lmxlbmd0aCBhID0gQXJyYXkubGVuZ3RoIGIgJiYgX2Zvcl9hbGwyIHAgYSBiIDAgMCB+bGVuOihBcnJheS5sZW5ndGggYSlcblxubGV0IHJlYyBfZXhpc3RzMiBwIGExIGEyIGkxIGkyIH5sZW4gPVxuICBsZW4gPiAwXG4gICYmIChwIGExLihpMSkgYTIuKGkyKSB8fCBfZXhpc3RzMiBwIGExIGEyIChpMSArIDEpIChpMiArIDEpIH5sZW46KGxlbiAtIDEpKVxuXG5sZXQgZXhpc3RzMiBwIGEgYiA9XG4gIF9leGlzdHMyIHAgYSBiIDAgMCB+bGVuOihTdGRsaWIubWluIChBcnJheS5sZW5ndGggYSkgKEFycmF5Lmxlbmd0aCBiKSlcblxubGV0IF9mb2xkMiBmIGFjYyBhIGIgaSBqIH5sZW4gPVxuICBsZXQgcmVjIGF1eCBhY2MgbyA9XG4gICAgaWYgbyA9IGxlbiB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlIChcbiAgICAgIGxldCBhY2MgPSBmIGFjYyAoQXJyYXkuZ2V0IGEgKGkgKyBvKSkgKEFycmF5LmdldCBiIChqICsgbykpIGluXG4gICAgICBhdXggYWNjIChvICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBhY2MgMFxuXG5sZXQgZm9sZDIgZiBhY2MgYSBiID1cbiAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlbiBpbnZhbGlkX2FyZyBcImZvbGQyXCI7XG4gIF9mb2xkMiBmIGFjYyBhIGIgMCAwIH5sZW46KEFycmF5Lmxlbmd0aCBhKVxuXG5sZXQgKCAtLSApIGkgaiA9XG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgQXJyYXkuaW5pdCAoaiAtIGkgKyAxKSAoZnVuIGsgLT4gaSArIGspXG4gIGVsc2VcbiAgICBBcnJheS5pbml0IChpIC0gaiArIDEpIChmdW4gayAtPiBpIC0gaylcblxubGV0ICggLS1eICkgaSBqID1cbiAgaWYgaSA9IGogdGhlblxuICAgIFt8fF1cbiAgZWxzZSBpZiBpID4gaiB0aGVuXG4gICAgQXJyYXkuaW5pdCAoaSAtIGopIChmdW4gayAtPiBpIC0gaylcbiAgZWxzZVxuICAgIEFycmF5LmluaXQgKGogLSBpKSAoZnVuIGsgLT4gaSArIGspXG5cbigqKiBhbGwgdGhlIGVsZW1lbnRzIG9mIGEsIGJ1dCB0aGUgaS10aCwgaW50byBhIGxpc3QgKilcbmxldCBleGNlcHRfaWR4IGEgaSA9XG4gIGZvbGRpXG4gICAgKGZ1biBhY2MgaiBlbHQgLT5cbiAgICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgICAgYWNjXG4gICAgICBlbHNlXG4gICAgICAgIGVsdCA6OiBhY2MpXG4gICAgW10gYVxuXG5sZXQgZXF1YWwgZXEgYSBiID1cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIHRydWVcbiAgICBlbHNlXG4gICAgICBlcSBhLihpKSBiLihpKSAmJiBhdXggKGkgKyAxKVxuICBpblxuICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmIGF1eCAwXG5cbmxldCBjb21wYXJlIGNtcCBhIGIgPVxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBiIHRoZW5cbiAgICAgICAgMFxuICAgICAgZWxzZVxuICAgICAgICAtMVxuICAgIGVsc2UgaWYgaSA9IEFycmF5Lmxlbmd0aCBiIHRoZW5cbiAgICAgIDFcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gY21wIGEuKGkpIGIuKGkpIGluXG4gICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgIGF1eCAoaSArIDEpXG4gICAgICBlbHNlXG4gICAgICAgIGNcbiAgICApXG4gIGluXG4gIGF1eCAwXG5cbigqIHN3YXAgZWxlbWVudHMgb2YgYXJyYXkgKilcbmxldCBzd2FwIGEgaSBqID1cbiAgaWYgaSA8PiBqIHRoZW4gKFxuICAgIGxldCB0bXAgPSBhLihpKSBpblxuICAgIGEuKGkpIDwtIGEuKGopO1xuICAgIGEuKGopIDwtIHRtcFxuICApXG5cbigqIHNodWZmbGUgYVtpIOKApiBqXSB1c2luZyB0aGUgZ2l2ZW4gaW50IHJhbmRvbSBnZW5lcmF0b3JcbiAgIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlci1ZYXRlc19zaHVmZmxlICopXG5sZXQgX3NodWZmbGUgX3JhbmRfaW50IGEgaSBqID1cbiAgZm9yIGsgPSBqIC0gMSBkb3dudG8gaSArIDEgZG9cbiAgICBsZXQgbCA9IF9yYW5kX2ludCAoayArIDEpIGluXG4gICAgbGV0IHRtcCA9IGEuKGwpIGluXG4gICAgYS4obCkgPC0gYS4oayk7XG4gICAgYS4oaykgPC0gdG1wXG4gIGRvbmVcblxubGV0IHNodWZmbGUgYSA9IF9zaHVmZmxlIFJhbmRvbS5pbnQgYSAwIChBcnJheS5sZW5ndGggYSlcbmxldCBzaHVmZmxlX3dpdGggc3QgYSA9IF9zaHVmZmxlIChSYW5kb20uU3RhdGUuaW50IHN0KSBhIDAgKEFycmF5Lmxlbmd0aCBhKVxuXG5sZXQgcmFuZG9tX2Nob29zZSBhID1cbiAgbGV0IG4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBuID0gMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkucmFuZG9tX2Nob29zZVwiO1xuICBmdW4gc3QgLT4gYS4oUmFuZG9tLlN0YXRlLmludCBzdCBuKVxuXG5sZXQgcmFuZG9tX2xlbiBuIGcgc3QgPSBBcnJheS5pbml0IG4gKGZ1biBfIC0+IGcgc3QpXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGxldCBuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIG4gZyBzdFxuXG5sZXQgcmFuZG9tX25vbl9lbXB0eSBnIHN0ID1cbiAgbGV0IG4gPSAxICsgUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIG4gZyBzdFxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBvdXQgKCkgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiLEAgXCIpIHBwX2l0ZW0gb3V0IGEgPVxuICBwcF9zdGFydCBvdXQgKCk7XG4gIGZvciBrID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBrID4gMCB0aGVuIHBwX3NlcCBvdXQgKCk7XG4gICAgcHBfaXRlbSBvdXQgYS4oaylcbiAgZG9uZTtcbiAgcHBfc3RvcCBvdXQgKClcblxubGV0IHBwX2kgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBvdXQgKCkgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiLEAgXCIpIHBwX2l0ZW0gb3V0IGEgPVxuICBwcF9zdGFydCBvdXQgKCk7XG4gIGZvciBrID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBrID4gMCB0aGVuIHBwX3NlcCBvdXQgKCk7XG4gICAgcHBfaXRlbSBrIG91dCBhLihrKVxuICBkb25lO1xuICBwcF9zdG9wIG91dCAoKVxuXG5sZXQgdG9fc3RyaW5nID8oc2VwID0gXCIsIFwiKSBpdGVtX3RvX3N0cmluZyBhID1cbiAgQXJyYXkudG9fbGlzdCBhIHw+IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIHw+IFN0cmluZy5jb25jYXQgc2VwXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPj0gbGVuZ3RoIGEgdGhlblxuICAgICAgU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIFNlcS5Db25zIChhLihpKSwgYXV4IChpICsgMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19pdGVyIGEgayA9IGl0ZXIgayBhXG5cbmxldCB0b19nZW4gYSA9XG4gIGxldCBrID0gcmVmIDAgaW5cbiAgZnVuICgpIC0+XG4gICAgaWYgIWsgPCBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCB4ID0gYS4oIWspIGluXG4gICAgICBpbmNyIGs7XG4gICAgICBTb21lIHhcbiAgICApIGVsc2VcbiAgICAgIE5vbmVcblxuKCoqIHsyIEdlbmVyaWMgRnVuY3Rpb25zfSAqKVxuXG5tb2R1bGUgdHlwZSBNT05PX0FSUkFZID0gc2lnXG4gIHR5cGUgZWx0XG4gIHR5cGUgdFxuXG4gIHZhbCBsZW5ndGggOiB0IC0+IGludFxuICB2YWwgZ2V0IDogdCAtPiBpbnQgLT4gZWx0XG4gIHZhbCBzZXQgOiB0IC0+IGludCAtPiBlbHQgLT4gdW5pdFxuZW5kXG5cbigqIER1YWwgUGl2b3QgUXVpY2tzb3J0IChZYXJvc2xhdnNraXkpXG4gICBmcm9tIFwiYXZlcmFnZSBjYXNlIGFuYWx5c2lzIG9mIEphdmEgNydzIER1YWwgUGl2b3QgUXVpY2tzb3J0XCIgKilcbm1vZHVsZSBTb3J0R2VuZXJpYyAoQSA6IE1PTk9fQVJSQVkpID0gc3RydWN0XG4gIG1vZHVsZSBSYW5kID0gUmFuZG9tLlN0YXRlXG5cbiAgbGV0IHNlZWRfID0gW3wgMTIzNDU2IHxdXG5cbiAgdHlwZSBzdGF0ZSA9IHtcbiAgICBtdXRhYmxlIGw6IGludDsgKCogbGVmdCBwb2ludGVyICopXG4gICAgbXV0YWJsZSBnOiBpbnQ7ICgqIHJpZ2h0IHBvaW50ZXIgKilcbiAgICBtdXRhYmxlIGs6IGludDtcbiAgfVxuXG4gIGxldCByYW5kX2lkeF8gcmFuZCBpIGogPSBpICsgUmFuZC5pbnQgcmFuZCAoaiAtIGkpXG5cbiAgbGV0IHN3YXBfIGEgaSBqID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICAoKVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHRtcCA9IEEuZ2V0IGEgaSBpblxuICAgICAgQS5zZXQgYSBpIChBLmdldCBhIGopO1xuICAgICAgQS5zZXQgYSBqIHRtcFxuICAgIClcblxuICBsZXQgc29ydCB+Y21wIGEgPVxuICAgIGxldCByZWMgaW5zZXJ0XyBhIGkgayA9XG4gICAgICBpZiBrIDwgaSB0aGVuXG4gICAgICAgICgpXG4gICAgICBlbHNlIGlmIGNtcCAoQS5nZXQgYSBrKSAoQS5nZXQgYSAoayArIDEpKSA+IDAgdGhlbiAoXG4gICAgICAgIHN3YXBfIGEgayAoayArIDEpO1xuICAgICAgICBpbnNlcnRfIGEgaSAoayAtIDEpXG4gICAgICApXG4gICAgaW5cbiAgICAoKiByZWN1cnNpdmUgcGFydCBvZiBpbnNlcnRpb24gc29ydCAqKVxuICAgIGxldCByZWMgc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIGsgPVxuICAgICAgaWYgayA8IGogdGhlbiAoXG4gICAgICAgIGluc2VydF8gYSBpIChrIC0gMSk7XG4gICAgICAgIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiAoayArIDEpXG4gICAgICApXG4gICAgaW5cbiAgICAoKiBpbnNlcnRpb24gc29ydCwgZm9yIHNtYWxsIHNsaWNlcyAqKVxuICAgIGxldCBzb3J0X2luc2VydGlvbiBhIGkgaiA9XG4gICAgICBpZiBqIC0gaSA+IDEgdGhlbiBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogKGkgKyAxKVxuICAgIGluXG4gICAgbGV0IHJhbmQgPSBSYW5kLm1ha2Ugc2VlZF8gaW5cbiAgICAoKiBzb3J0IHNsaWNlLlxuICAgICAgIFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlIHR3byBwaXZvdHMgYXJlIGVxdWFsLCBidXQgaXQncyB1bmxpa2VseS4gKilcbiAgICBsZXQgcmVjIHNvcnRfc2xpY2VfIH5zdCBhIGkgaiA9XG4gICAgICBpZiBqIC0gaSA+IDEwIHRoZW4gKFxuICAgICAgICBzdC5sIDwtIGk7XG4gICAgICAgIHN0LmcgPC0gaiAtIDE7XG4gICAgICAgIHN0LmsgPC0gaTtcbiAgICAgICAgKCogY2hvb3NlIHBpdm90cyAqKVxuICAgICAgICBsZXQgcCA9IEEuZ2V0IGEgKHJhbmRfaWR4XyByYW5kIGkgaikgaW5cbiAgICAgICAgbGV0IHEgPSBBLmdldCBhIChyYW5kX2lkeF8gcmFuZCBpIGopIGluXG4gICAgICAgICgqIGludmFyaWFudDogc3QucCA8PSBzdC5xLCBzd2FwIHRoZW0gb3RoZXJ3aXNlICopXG4gICAgICAgIGxldCBwLCBxID1cbiAgICAgICAgICBpZiBjbXAgcCBxID4gMCB0aGVuXG4gICAgICAgICAgICBxLCBwXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgcCwgcVxuICAgICAgICBpblxuICAgICAgICB3aGlsZSBzdC5rIDw9IHN0LmcgZG9cbiAgICAgICAgICBsZXQgY3VyID0gQS5nZXQgYSBzdC5rIGluXG4gICAgICAgICAgaWYgY21wIGN1ciBwIDwgMCB0aGVuIChcbiAgICAgICAgICAgICgqIGluc2VydCBpbiBsZWZ0bW9zdCBiYW5kICopXG4gICAgICAgICAgICBpZiBzdC5rIDw+IHN0LmwgdGhlbiBzd2FwXyBhIHN0Lmsgc3QubDtcbiAgICAgICAgICAgIHN0LmwgPC0gc3QubCArIDFcbiAgICAgICAgICApIGVsc2UgaWYgY21wIGN1ciBxID4gMCB0aGVuIChcbiAgICAgICAgICAgICgqIGluc2VydCBpbiByaWdodG1vc3QgYmFuZCAqKVxuICAgICAgICAgICAgd2hpbGUgc3QuayA8IHN0LmcgJiYgY21wIChBLmdldCBhIHN0LmcpIHEgPiAwIGRvXG4gICAgICAgICAgICAgIHN0LmcgPC0gc3QuZyAtIDFcbiAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICBzd2FwXyBhIHN0Lmsgc3QuZztcbiAgICAgICAgICAgIHN0LmcgPC0gc3QuZyAtIDE7XG4gICAgICAgICAgICAoKiB0aGUgZWxlbWVudCBzd2FwcGVkIGZyb20gdGhlIHJpZ2h0IG1pZ2h0IGJlIGluIHRoZSBmaXJzdCBzaXR1YXRpb24uXG4gICAgICAgICAgICAgICB0aGF0IGlzLCA8IHAgICh3ZSBrbm93IGl0J3MgPD0gcSBhbHJlYWR5KSAqKVxuICAgICAgICAgICAgaWYgY21wIChBLmdldCBhIHN0LmspIHAgPCAwIHRoZW4gKFxuICAgICAgICAgICAgICBpZiBzdC5rIDw+IHN0LmwgdGhlbiBzd2FwXyBhIHN0Lmsgc3QubDtcbiAgICAgICAgICAgICAgc3QubCA8LSBzdC5sICsgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3QuayA8LSBzdC5rICsgMVxuICAgICAgICBkb25lO1xuICAgICAgICAoKiBzYXZlIHZhbHVlcyBiZWZvcmUgcmVjdXJzaW5nICopXG4gICAgICAgIGxldCBsID0gc3QubCBhbmQgZyA9IHN0LmcgYW5kIHNvcnRfbWlkZGxlID0gY21wIHAgcSA8IDAgaW5cbiAgICAgICAgc29ydF9zbGljZV8gfnN0IGEgaSBsO1xuICAgICAgICBpZiBzb3J0X21pZGRsZSB0aGVuIHNvcnRfc2xpY2VfIH5zdCBhIGwgKGcgKyAxKTtcbiAgICAgICAgc29ydF9zbGljZV8gfnN0IGEgKGcgKyAxKSBqXG4gICAgICApIGVsc2VcbiAgICAgICAgc29ydF9pbnNlcnRpb24gYSBpIGpcbiAgICBpblxuICAgIGlmIEEubGVuZ3RoIGEgPiAwIHRoZW4gKFxuICAgICAgbGV0IHN0ID0geyBsID0gMDsgZyA9IEEubGVuZ3RoIGE7IGsgPSAwIH0gaW5cbiAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIDAgKEEubGVuZ3RoIGEpXG4gICAgKVxuZW5kXG5cbmxldCBzb3J0X2dlbmVyaWMgKHR5cGUgYXJyIGVsdClcbiAgICAobW9kdWxlIEEgOiBNT05PX0FSUkFZIHdpdGggdHlwZSB0ID0gYXJyIGFuZCB0eXBlIGVsdCA9IGVsdCkgfmNtcCBhID1cbiAgbGV0IG1vZHVsZSBTID0gU29ydEdlbmVyaWMgKEEpIGluXG4gIFMuc29ydCB+Y21wIGFcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID4+PSApIGEgZiA9IGZsYXRfbWFwIGYgYVxuICBsZXQgKCA+PnwgKSBhIGYgPSBtYXAgZiBhXG4gIGxldCAoID58PSApIGEgZiA9IG1hcCBmIGFcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcblxuICB0eXBlICdhIHQgPSAnYSBhcnJheVxuXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgYTEgYTIgPSBtb25vaWRfcHJvZHVjdCAoZnVuIHggeSAtPiB4LCB5KSBhMSBhMlxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqIGJhY2twb3J0IG5ldyBmdW5jdGlvbnMgZnJvbSBzdGRsaWIgaGVyZSAqKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RocyBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXyA6OiBfIC0+IC0xXG4gIHwgXyA6OiBfLCBbXSAtPiAxXG4gIHwgXyA6OiB0YWlsMSwgXyA6OiB0YWlsMiAtPiBjb21wYXJlX2xlbmd0aHMgdGFpbDEgdGFpbDJcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwsIG4gd2l0aFxuICB8IF8gd2hlbiBuIDwgMCAtPiAxXG4gIHwgW10sIDAgLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXyA6OiB0YWlsLCBfIC0+IGNvbXBhcmVfbGVuZ3RoX3dpdGggdGFpbCAobiAtIDEpXG5cbmxldCByZWMgYXNzb2Nfb3B0IHggPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCAoeSwgdikgOjogXyB3aGVuIFN0ZGxpYi4oID0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc29jX29wdCB4IHRhaWxcblxubGV0IHJlYyBhc3NxX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9PSApIHggeSAtPiBTb21lIHZcbiAgfCBfIDo6IHRhaWwgLT4gYXNzcV9vcHQgeCB0YWlsXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbigqIGVuZCBvZiBiYWNrcG9ydCAqKVxuXG5pbmNsdWRlIExpc3RcblxubGV0IGVtcHR5ID0gW11cblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiB0cnVlXG4gIHwgXyA6OiBfIC0+IGZhbHNlXG5cbmxldCBtZ3VhcmQgYyA9XG4gIGlmIGMgdGhlblxuICAgIFsgKCkgXVxuICBlbHNlXG4gICAgW11cblxuKCoqIG1heCBkZXB0aCBmb3IgZGlyZWN0IHJlY3Vyc2lvbiAqKVxubGV0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyA9IDEwMDBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRhaWxfbWFwIGYgbCA9XG4gICgqIFVud2luZCB0aGUgbGlzdCBvZiB0dXBsZXMsIHJlY29uc3RydWN0aW5nIHRoZSBmdWxsIGxpc3QgZnJvbnQtdG8tYmFjay5cbiAgICAgQHBhcmFtIHRhaWxfYWNjIGEgc3VmZml4IG9mIHRoZSBmaW5hbCBsaXN0OyB3ZSBhcHBlbmQgdHVwbGVzJyBjb250ZW50XG4gICAgIGF0IHRoZSBmcm9udCBvZiBpdCAqKVxuICBsZXQgcmVjIHJlYnVpbGQgdGFpbF9hY2MgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gdGFpbF9hY2NcbiAgICB8ICh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiBicyAtPlxuICAgICAgcmVidWlsZFxuICAgICAgICAoeTAgOjogeTEgOjogeTIgOjogeTMgOjogeTQgOjogeTUgOjogeTYgOjogeTcgOjogeTggOjogdGFpbF9hY2MpXG4gICAgICAgIGJzXG4gIGluXG4gICgqIENyZWF0ZSBhIGNvbXByZXNzZWQgcmV2ZXJzZS1saXN0IHJlcHJlc2VudGF0aW9uIHVzaW5nIHR1cGxlc1xuICAgICBAcGFyYW0gdHVwbGVfYWNjIGEgcmV2ZXJzZSBsaXN0IG9mIGNodW5rcyBtYXBwZWQgd2l0aCBbZl0gKilcbiAgbGV0IHJlYyBkaXZlIHR1cGxlX2FjYyA9IGZ1bmN0aW9uXG4gICAgfCB4MCA6OiB4MSA6OiB4MiA6OiB4MyA6OiB4NCA6OiB4NSA6OiB4NiA6OiB4NyA6OiB4OCA6OiB4cyAtPlxuICAgICAgbGV0IHkwID0gZiB4MCBpblxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgbGV0IHkzID0gZiB4MyBpblxuICAgICAgbGV0IHk0ID0gZiB4NCBpblxuICAgICAgbGV0IHk1ID0gZiB4NSBpblxuICAgICAgbGV0IHk2ID0gZiB4NiBpblxuICAgICAgbGV0IHk3ID0gZiB4NyBpblxuICAgICAgbGV0IHk4ID0gZiB4OCBpblxuICAgICAgZGl2ZSAoKHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIHk2LCB5NywgeTgpIDo6IHR1cGxlX2FjYykgeHNcbiAgICB8IHhzIC0+XG4gICAgICAoKiBSZXZlcnNlIGRpcmVjdGlvbiwgZmluaXNoaW5nIG9mZiB3aXRoIGEgZGlyZWN0IG1hcCAqKVxuICAgICAgbGV0IHRhaWwgPSBMaXN0Lm1hcCBmIHhzIGluXG4gICAgICByZWJ1aWxkIHRhaWwgdHVwbGVfYWNjXG4gIGluXG4gIGRpdmUgW10gbFxuXG5sZXQgbWFwIGYgbCA9XG4gIGxldCByZWMgZGlyZWN0IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIHggXSAtPiBbIGYgeCBdXG4gICAgfCBbIHgxOyB4MiBdIC0+XG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBbIHkxOyBmIHgyIF1cbiAgICB8IFsgeDE7IHgyOyB4MyBdIC0+XG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBsZXQgeTIgPSBmIHgyIGluXG4gICAgICBbIHkxOyB5MjsgZiB4MyBdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gdGFpbF9tYXAgZiBsXG4gICAgfCB4MSA6OiB4MiA6OiB4MyA6OiB4NCA6OiBsJyAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgbGV0IHkzID0gZiB4MyBpblxuICAgICAgbGV0IHk0ID0gZiB4NCBpblxuICAgICAgeTEgOjogeTIgOjogeTMgOjogeTQgOjogZGlyZWN0IGYgKGkgLSAxKSBsJ1xuICBpblxuICBkaXJlY3QgZiBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgYXBwZW5kIGwxIGwyID1cbiAgbGV0W0BpbmxpbmVdIHNhZmUgbDEgbDIgPSBMaXN0LnJldl9hcHBlbmQgKExpc3QucmV2IGwxKSBsMiBpblxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBsMlxuICAgIHwgWyB4IF0gLT4geCA6OiBsMlxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgbDEgbDJcbiAgICB8IHggOjogeSA6OiB0bDEgLT4geCA6OiB5IDo6IGRpcmVjdCAoaSAtIDEpIHRsMSBsMlxuICBpblxuICBkaXJlY3QgMTAwMCBsMSBsMlxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgbWFwIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCB4ID0gZiB4IGluXG4gICAgeCA6OiBtYXAgZiB0bFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gIHwgW10gLT4gbDJcbiAgfCB4IDo6IHRsMSAtPiB4IDo6IGFwcGVuZCB0bDEgbDJcblxuW0BAQGVsc2VfXVxuXG4oKiBUUk1DIGZ1bmN0aW9ucyBvbiA+PSA1LjEsIG5vIG5lZWQgdG8gYnJpbmcgb3VyIG93biAqKVxuXG5bQEBAZW5kaWZdXG5cbigqIFdyYXBwZXIgYXJvdW5kIFthcHBlbmRdIHRvIG9wdGltaXplIGZvciB0aGUgY2FzZSBvZiBzaG9ydCBbbDFdLFxuICAgYW5kIGZvciB0aGUgY2FzZSBvZiBbbDIgPSBbXV0gKHNhdmVzIHRoZSB3aG9sZSBjb3B5IG9mIFtsMV0hKSAqKVxubGV0W0BpbmxpbmVdIGFwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIF8gLT4gbDJcbiAgfCBfLCBbXSAtPiBsMVxuICB8IFsgeCBdLCBfIC0+IHggOjogbDJcbiAgfCB4IDo6IHkgOjogdGwxLCBfIC0+IHggOjogeSA6OiBhcHBlbmQgdGwxIGwyXG5cbmxldCAoIEAgKSA9IGFwcGVuZFxubGV0W0BpbmxpbmVdIGNvbnMnIGwgeCA9IHggOjogbFxuXG5sZXQgY29uc19tYXliZSBvIGwgPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBTb21lIHggLT4geCA6OiBsXG4gIHwgTm9uZSAtPiBsXG5cbmxldCBjb25zX3doZW4gYiB4IGwgPVxuICBpZiBiIHRoZW5cbiAgICB4IDo6IGxcbiAgZWxzZVxuICAgIGxcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGRpcmVjdF9kZXB0aF9maWx0ZXJfID0gMTBfMDAwXG5cbmxldCBmaWx0ZXIgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgbCBbXVxuICAgIHwgeCA6OiBsJyB3aGVuIG5vdCAocCB4KSAtPiBkaXJlY3QgaSBwIGwnXG4gICAgfCB4IDo6IGwnIC0+IHggOjogZGlyZWN0IChpIC0gMSkgcCBsJ1xuICBhbmQgc2FmZSBwIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyB3aGVuIG5vdCAocCB4KSAtPiBzYWZlIHAgbCcgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgcCBsJyAoeCA6OiBhY2MpXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZmlsdGVyXyBwIGxcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbHRlciBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogdGwgLT5cbiAgICBsZXQga2VlcCA9IGYgeCBpblxuICAgIGlmIGtlZXAgdGhlblxuICAgICAgeCA6OiBmaWx0ZXIgZiB0bFxuICAgIGVsc2VcbiAgICAgIGZpbHRlciBmIHRsXG5cbltAQEBlbHNlX11cbigqIHN0ZGxpYidzIGZpbHRlciB1c2VzIFRSTUMgYWZ0ZXIgNS4xICopXG5cbltAQEBlbmRpZl1cblxubGV0IGZvbGRfcmlnaHQgZiBsIGFjYyA9XG4gIGxldCByZWMgZGlyZWN0IGkgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGYgKExpc3QucmV2IGwpIGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IGRpcmVjdCAoaSAtIDEpIGYgbCcgYWNjIGluXG4gICAgICBmIHggYWNjXG4gIGFuZCBzYWZlIGYgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZiB4IGFjYyBpblxuICAgICAgc2FmZSBmIGwnIGFjY1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGYgbCBhY2NcblxubGV0IHJlYyBmb2xkX3doaWxlIGYgYWNjID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBlIDo6IGwgLT5cbiAgICBsZXQgYWNjLCBjb250ID0gZiBhY2MgZSBpblxuICAgIChtYXRjaCBjb250IHdpdGhcbiAgICB8IGBTdG9wIC0+IGFjY1xuICAgIHwgYENvbnRpbnVlIC0+IGZvbGRfd2hpbGUgZiBhY2MgbClcblxubGV0IGZvbGRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyBbXSBsXG5cbmxldCBmb2xkX21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpICh5IDo6IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyAwIFtdIGxcblxubGV0IGZvbGRfb25fbWFwIH5mIH5yZWR1Y2UgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSByZWR1Y2UgYWNjIChmIHgpIGluXG4gICAgICBhdXggYWNjIGwnXG4gIGluXG4gIGF1eCBhY2MgbFxuXG5sZXQgc2Nhbl9sZWZ0IGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBsX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGxfYWNjXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICBsZXQgbF9hY2MgPSBhY2MgOjogbF9hY2MgaW5cbiAgICAgIGF1eCBmIGFjYyBsX2FjYyB0YWlsXG4gIGluXG4gIGF1eCBmIGFjYyBbIGFjYyBdIGxcblxubGV0IHJlZHVjZSBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+IFNvbWUgKGZvbGRfbGVmdCBmIHggbClcblxubGV0IHJlZHVjZV9leG4gZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmVkdWNlX2V4blwiKVxuICB8IHggOjogbCAtPiBmb2xkX2xlZnQgZiB4IGxcblxubGV0IGZvbGRfbWFwMiBmIGFjYyBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZF9tYXAyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeDEgeDIgaW5cbiAgICAgIGF1eCBmIGFjYyAoeSA6OiBtYXBfYWNjKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIGFjYyBbXSBsMSBsMlxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChjb25zX21heWJlIHkgbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfZmlsdGVyX21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChjb25zX21heWJlIHkgbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcCBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoTGlzdC5yZXZfYXBwZW5kIHkgbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfZmxhdF9tYXBfaSBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgaSBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgaSB4IGluXG4gICAgICBhdXggZiBhY2MgKGkgKyAxKSAoTGlzdC5yZXZfYXBwZW5kIHkgbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG4oKiBrZWVwIHRoaXMgYmVjYXVzZSBpdCdzIHRhaWxyZWMgZm9yIDwgNS4xICopXG5sZXQgaW5pdCBsZW4gZiA9XG4gIGxldCByZWMgaW5kaXJlY3RfIGkgYWNjID1cbiAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgIExpc3QucmV2IGFjY1xuICAgIGVsc2UgKFxuICAgICAgbGV0IHggPSBmIGkgaW5cbiAgICAgIGluZGlyZWN0XyAoaSArIDEpICh4IDo6IGFjYylcbiAgICApXG4gIGluXG4gIGxldCByZWMgZGlyZWN0XyBpID1cbiAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgIFtdXG4gICAgZWxzZSBpZiBpIDwgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIHRoZW4gKFxuICAgICAgbGV0IHggPSBmIGkgaW5cbiAgICAgIHggOjogZGlyZWN0XyAoaSArIDEpXG4gICAgKSBlbHNlXG4gICAgICBpbmRpcmVjdF8gaSBbXVxuICBpblxuICBpZiBsZW4gPCAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcImluaXRcIlxuICBlbHNlIGlmIGxlbiA9IDAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICBkaXJlY3RfIDBcblxubGV0IHJlYyB1bmZvbGRfa29udCBmIHNlZWQgayA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBrIFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT5cbiAgICBsZXQgaycgdGwgPSBrICh2IDo6IHRsKSBpblxuICAgIHVuZm9sZF9rb250IGYgbmV4dCBrJ1xuXG5sZXRbQGlubGluZV0gdW5mb2xkIGYgc2VlZCA9XG4gIGxldCByZWMgZGlyZWN0IGkgZiBzZWVkID1cbiAgICBpZiBpID0gMCB0aGVuXG4gICAgICB1bmZvbGRfa29udCBmIHNlZWQgKGZ1biB4IC0+IHgpXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCBmIHNlZWQgd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogZGlyZWN0IChpIC0gMSkgZiBuZXh0XG4gICAgKVxuICBpblxuICBkaXJlY3QgMTAwIGYgc2VlZFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0IGluaXQgbiBmID1cbiAgbGV0W0B0YWlsX21vZF9jb25zXSByZWMgaW5pdF8gaSBuIGYgPVxuICAgIGlmIGkgPSBuIHRoZW5cbiAgICAgIFtdXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBpbml0XyAoaSArIDEpIG4gZlxuICAgIClcbiAgaW5cbiAgaW5pdF8gMCBuIGZcblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIHVuZm9sZCBmIHNlZWQgPVxuICBtYXRjaCBmIHNlZWQgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPiB2IDo6IHVuZm9sZCBmIG5leHRcblxuW0BAQGVuZGlmXVxuXG5sZXQgcmVjIGNvbXBhcmUgZiBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBfLCBbXSAtPiAxXG4gIHwgW10sIF8gLT4gLTFcbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgIGxldCBjID0gZiB4MSB4MiBpblxuICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICBjXG4gICAgZWxzZVxuICAgICAgY29tcGFyZSBmIGwxJyBsMidcblxubGV0IHJlYyBlcXVhbCBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfIHwgXywgW10gLT4gZmFsc2VcbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiBmIHgxIHgyICYmIGVxdWFsIGYgbDEnIGwyJ1xuXG5bQEBAaWZsdCA1LjFdXG5cbmxldCByZWMgZmxhdF9tYXBfa29udCBmIGwga29udCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGtvbnQgW11cbiAgfCBbIHggXSAtPlxuICAgIGxldCB4ID0gZiB4IGluXG4gICAga29udCB4XG4gIHwgeCA6OiBsJyAtPlxuICAgIGxldCB4ID0gZiB4IGluXG4gICAgbGV0IGtvbnQnIHRhaWwgPSBrb250IChhcHBlbmQgeCB0YWlsKSBpblxuICAgIGZsYXRfbWFwX2tvbnQgZiBsJyBrb250J1xuXG5sZXRbQGlubGluZV0gZmxhdF9tYXAgZiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCBbIHggXSAtPiBmIHhcbiAgfCBfIDo6IF8gLT4gZmxhdF9tYXBfa29udCBmIGwgRnVuLmlkXG5cbltAQEBlbHNlX11cblxubGV0IGZsYXRfbWFwID0gY29uY2F0X21hcFxuXG5bQEBAZW5kaWZdXG5cbmxldCBmbGF0X21hcF9pIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsIGtvbnQgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4ga29udCBbXVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IHkgPSBmIGkgeCBpblxuICAgICAgbGV0IGtvbnQnIHRhaWwgPVxuICAgICAgICBtYXRjaCB5IHdpdGhcbiAgICAgICAgfCBbXSAtPiBrb250IHRhaWxcbiAgICAgICAgfCBbIHggXSAtPiBrb250ICh4IDo6IHRhaWwpXG4gICAgICAgIHwgWyB4OyB5IF0gLT4ga29udCAoeCA6OiB5IDo6IHRhaWwpXG4gICAgICAgIHwgbCAtPiBrb250IChhcHBlbmQgbCB0YWlsKVxuICAgICAgaW5cbiAgICAgIGF1eCBmIChpICsgMSkgbCcga29udCdcbiAgaW5cbiAgYXV4IGYgMCBsIChmdW4gbCAtPiBsKVxuXG5sZXQgZmxhdHRlbiBsID0gZm9sZF9yaWdodCBhcHBlbmQgbCBbXVxuXG5sZXQgY291bnQgZiBsID1cbiAgZm9sZF9sZWZ0XG4gICAgKGZ1biBuIHggLT5cbiAgICAgIGlmIGYgeCB0aGVuXG4gICAgICAgIHN1Y2MgblxuICAgICAgZWxzZVxuICAgICAgICBuKVxuICAgIDAgbFxuXG5sZXQgY291bnRfdHJ1ZV9mYWxzZSBwIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIChvaywga28pIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIG9rICsgMSwga29cbiAgICAgIGVsc2VcbiAgICAgICAgb2ssIGtvICsgMSlcbiAgICAoMCwgMCkgbFxuXG5sZXRbQGlubGluZV0gcHJvZHVjdCBmIGwxIGwyID0gZmxhdF9tYXAgKGZ1biB4IC0+IG1hcCAoZnVuIHkgLT4gZiB4IHkpIGwyKSBsMVxuXG5sZXQgZm9sZF9wcm9kdWN0IGYgYWNjIGwxIGwyID1cbiAgTGlzdC5mb2xkX2xlZnRcbiAgICAoZnVuIGFjYyB4MSAtPiBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4MiAtPiBmIGFjYyB4MSB4MikgYWNjIGwyKVxuICAgIGFjYyBsMVxuXG5sZXQgZGlhZ29uYWwgbCA9XG4gIGxldCByZWMgZ2VuIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHkgLT4gKHgsIHkpIDo6IGFjYykgYWNjIGwnIGluXG4gICAgICBnZW4gYWNjIGwnXG4gIGluXG4gIGdlbiBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwX2VpdGhlciBmIGwgPVxuICBsZXQgcmVjIGl0ZXIgZiBsMSBsMiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGwxLCBMaXN0LnJldiBsMlxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IENDRWl0aGVyLkxlZnQgeSAtPiBpdGVyIGYgKHkgOjogbDEpIGwyIHRsXG4gICAgICB8IENDRWl0aGVyLlJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bClcbiAgaW5cbiAgaXRlciBmIFtdIFtdIGxcblxubGV0IHBhcnRpdGlvbl9maWx0ZXJfbWFwIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgYExlZnQgeSAtPiBpdGVyIGYgKHkgOjogbDEpIGwyIHRsXG4gICAgICB8IGBSaWdodCB5IC0+IGl0ZXIgZiBsMSAoeSA6OiBsMikgdGxcbiAgICAgIHwgYERyb3AgLT4gaXRlciBmIGwxIGwyIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcCA9IHBhcnRpdGlvbl9maWx0ZXJfbWFwXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBjb21iaW5lIGwxIGwyID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgbDEgbDIgW11cbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+ICh4MSwgeDIpIDo6IGRpcmVjdCAoaSAtIDEpIGwxJyBsMidcbiAgICB8IF8sIF8gLT4gaW52YWxpZF9hcmcgXCJDQ0xpc3QuY29tYmluZVwiXG4gIGFuZCBzYWZlIGwxIGwyIGFjYyA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IHNhZmUgbDEnIGwyJyBAQCAoKHgxLCB4MikgOjogYWNjKVxuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiBbXVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+ICh4MSwgeDIpIDo6IGNvbWJpbmUgbDEnIGwyJ1xuICB8IF8sIF8gLT4gaW52YWxpZF9hcmcgXCJDQ0xpc3QuY29tYmluZVwiXG5cbltAQEBlbmRpZl1cblxubGV0IGNvbWJpbmVfZ2VuIGwxIGwyID1cbiAgbGV0IGwxID0gcmVmIGwxIGluXG4gIGxldCBsMiA9IHJlZiBsMiBpblxuICBmdW4gKCkgLT5cbiAgICBtYXRjaCAhbDEsICFsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IE5vbmVcbiAgICB8IHgxIDo6IHRhaWwxLCB4MiA6OiB0YWlsMiAtPlxuICAgICAgbDEgOj0gdGFpbDE7XG4gICAgICBsMiA6PSB0YWlsMjtcbiAgICAgIFNvbWUgKHgxLCB4MilcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgXywgW10gfCBbXSwgXyAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgbDEgbDIgW11cbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+ICh4MSwgeDIpIDo6IGRpcmVjdCAoaSAtIDEpIGwxJyBsMidcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gKHgxLCB4MikgOjogYWNjIGluXG4gICAgICBzYWZlIGwxJyBsMicgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbDEgbDJcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBjb21iaW5lX3Nob3J0ZXN0IGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZV9zaG9ydGVzdCBsMScgbDInXG5cbltAQEBlbmRpZl1cblxubGV0IHNwbGl0IGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBbICh4MSwgeTEpIF0gLT4gWyB4MSBdLCBbIHkxIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpIF0gLT4gWyB4MTsgeDIgXSwgWyB5MTsgeTIgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5Mik7ICh4MywgeTMpIF0gLT4gWyB4MTsgeDI7IHgzIF0sIFsgeTE7IHkyOyB5MyBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5Myk7ICh4NCwgeTQpIF0gLT5cbiAgICAgIFsgeDE7IHgyOyB4MzsgeDQgXSwgWyB5MTsgeTI7IHkzOyB5NCBdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc3BsaXRfc2xvdyBbXSBbXSBsXG4gICAgfCAoeDEsIHkxKSA6OiAoeDIsIHkyKSA6OiAoeDMsIHkzKSA6OiAoeDQsIHk0KSA6OiAoeDUsIHk1KSA6OiBsJyAtPlxuICAgICAgbGV0IHJ4LCByeSA9IGRpcmVjdCAoaSAtIDEpIGwnIGluXG4gICAgICB4MSA6OiB4MiA6OiB4MyA6OiB4NCA6OiB4NSA6OiByeCwgeTEgOjogeTIgOjogeTMgOjogeTQgOjogeTUgOjogcnlcbiAgYW5kIHNwbGl0X3Nsb3cgYWNjMSBhY2MyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjMSwgTGlzdC5yZXYgYWNjMlxuICAgIHwgKHgxLCB4MikgOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYzEgPSB4MSA6OiBhY2MxIGFuZCBhY2MyID0geDIgOjogYWNjMiBpblxuICAgICAgc3BsaXRfc2xvdyBhY2MxIGFjYzIgdGFpbFxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxubGV0IHJldHVybiB4ID0gWyB4IF1cbmxldCBwdXJlID0gcmV0dXJuXG5sZXQgKCA8Kj4gKSBmdW5zIGwgPSBwcm9kdWN0IChmdW4gZiB4IC0+IGYgeCkgZnVucyBsXG5cbmxldCBjYXJ0ZXNpYW5fcHJvZHVjdCBsID1cbiAgKCogW2xlZnRdOiBlbGVtZW50cyBwaWNrZWQgc28gZmFyXG4gICAgIFtyaWdodF06IHNldHMgdG8gcGljayBlbGVtZW50cyBmcm9tXG4gICAgIFthY2NdOiBhY2N1bXVsYXRvciBmb3IgdGhlIHJlc3VsdCwgdG8gcGFzcyB0byBjb250aW51YXRpb25cbiAgICAgW2tdOiBjb250aW51YXRpb24gKilcbiAgbGV0IHJlYyBwcm9kX3JlYyBsZWZ0IHJpZ2h0IGsgYWNjID1cbiAgICBtYXRjaCByaWdodCB3aXRoXG4gICAgfCBbXSAtPiBrIGFjYyAoTGlzdC5yZXYgbGVmdClcbiAgICB8IGwxIDo6IHRhaWwgLT5cbiAgICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4gcHJvZF9yZWMgKHggOjogbGVmdCkgdGFpbCBrIGFjYykgYWNjIGwxXG4gIGluXG4gIHByb2RfcmVjIFtdIGwgKGZ1biBhY2MgbCcgLT4gbCcgOjogYWNjKSBbXVxuXG4oKiBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiBsaXN0cyBvZiBsaXN0cyAqKVxubGV0IG1hcF9wcm9kdWN0X2wgZiBsID1cbiAgbGV0IGwgPSBMaXN0Lm1hcCBmIGwgaW5cbiAgY2FydGVzaWFuX3Byb2R1Y3QgbFxuXG5sZXQgcmVjIHNvcnRlZF9tZW0gfmNtcCB4IGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBmYWxzZVxuICB8IHkgOjogdGFpbCAtPlxuICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICB8IDAgLT4gdHJ1ZVxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IGZhbHNlXG4gICAgfCBfIC0+IChzb3J0ZWRfbWVtIFtAdGFpbGNhbGxdKSB+Y21wIHggdGFpbClcblxubGV0IHNvcnRlZF9tZXJnZSB+Y21wIGwxIGwyID1cbiAgbGV0IHJlYyByZWN1cnNlIGNtcCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwyXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgyIDo6IGFjYykgbDEgbDInXG4gICAgICBlbHNlXG4gICAgICAgIHJlY3Vyc2UgY21wICh4MSA6OiB4MiA6OiBhY2MpIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSBjbXAgW10gbDEgbDJcblxubGV0IHNvcnRlZF9kaWZmIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgXywgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsMVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgY21wICh4MSA6OiBhY2MpIGwxJyBsMlxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgY21wIGFjYyBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSBjbXAgW10gbDEgbDJcblxubGV0IHNvcnRfdW5pcSB+Y21wIGwgPSBMaXN0LnNvcnRfdW5pcSBjbXAgbFxuXG5sZXQgaXNfc29ydGVkIH5jbXAgbCA9XG4gIGxldCByZWMgYXV4IGNtcCA9IGZ1bmN0aW9uXG4gICAgfCBbXSB8IFsgXyBdIC0+IHRydWVcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSAtPiBjbXAgeCB5IDw9IDAgJiYgYXV4IGNtcCB0YWlsXG4gIGluXG4gIGF1eCBjbXAgbFxuXG5sZXQgc29ydGVkX2luc2VydCB+Y21wID8odW5pcSA9IGZhbHNlKSB4IGwgPVxuICBsZXQgcmVjIGF1eCBjbXAgdW5pcSB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBbIHggXVxuICAgIHwgeSA6OiB0YWlsIC0+XG4gICAgICAobWF0Y2ggY21wIHggeSB3aXRoXG4gICAgICB8IDAgLT5cbiAgICAgICAgbGV0IGwnID1cbiAgICAgICAgICBpZiB1bmlxIHRoZW5cbiAgICAgICAgICAgIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB4IDo6IGxcbiAgICAgICAgaW5cbiAgICAgICAgTGlzdC5yZXZfYXBwZW5kIGxlZnQgbCdcbiAgICAgIHwgbiB3aGVuIG4gPCAwIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0ICh4IDo6IGwpXG4gICAgICB8IF8gLT4gYXV4IGNtcCB1bmlxIHggKHkgOjogbGVmdCkgdGFpbClcbiAgaW5cbiAgYXV4IGNtcCB1bmlxIHggW10gbFxuXG5sZXQgc29ydGVkX3JlbW92ZSB+Y21wID8oYWxsID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCBhbGwgeCBsZWZ0IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbGVmdFxuICAgIHwgeSA6OiB0YWlsIC0+XG4gICAgICAobWF0Y2ggY21wIHggeSB3aXRoXG4gICAgICB8IDAgLT5cbiAgICAgICAgaWYgYWxsIHRoZW5cbiAgICAgICAgICBhdXggY21wIGFsbCB4IGxlZnQgdGFpbFxuICAgICAgICBlbHNlXG4gICAgICAgICAgTGlzdC5yZXZfYXBwZW5kIGxlZnQgdGFpbFxuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgbFxuICAgICAgfCBfIC0+IGF1eCBjbXAgYWxsIHggKHkgOjogbGVmdCkgdGFpbClcbiAgaW5cbiAgYXV4IGNtcCBhbGwgeCBbXSBsXG5cbmxldCB1bmlxX3N1Y2MgfmVxIGwgPVxuICBsZXQgcmVjIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHggXSAtPiBMaXN0LnJldiAoeCA6OiBhY2MpXG4gICAgfCB4IDo6ICh5IDo6IF8gYXMgdGFpbCkgd2hlbiBlcSB4IHkgLT4gZiBhY2MgdGFpbFxuICAgIHwgeCA6OiB0YWlsIC0+IGYgKHggOjogYWNjKSB0YWlsXG4gIGluXG4gIGYgW10gbFxuXG5sZXQgZ3JvdXBfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiB+ZXEgYWNjIGN1ciBsID1cbiAgICBtYXRjaCBjdXIsIGwgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgXyA6OiBfLCBbXSAtPiBMaXN0LnJldiAoTGlzdC5yZXYgY3VyIDo6IGFjYylcbiAgICB8IFtdLCB4IDo6IHRsIC0+IGYgfmVxIGFjYyBbIHggXSB0bFxuICAgIHwgeSA6OiBfLCB4IDo6IHRsIHdoZW4gZXEgeCB5IC0+IGYgfmVxIGFjYyAoeCA6OiBjdXIpIHRsXG4gICAgfCBfLCB4IDo6IHRsIC0+IGYgfmVxIChMaXN0LnJldiBjdXIgOjogYWNjKSBbIHggXSB0bFxuICBpblxuICBmIH5lcSBbXSBbXSBsXG5cbmxldCBzb3J0ZWRfbWVyZ2VfdW5pcSB+Y21wIGwxIGwyID1cbiAgbGV0IHB1c2ggfmNtcCBhY2MgeCA9XG4gICAgbWF0Y2ggYWNjIHdpdGhcbiAgICB8IFtdIC0+IFsgeCBdXG4gICAgfCB5IDo6IF8gd2hlbiBjbXAgeCB5ID4gMCAtPiB4IDo6IGFjY1xuICAgIHwgXyAtPiBhY2NcbiAgICAoKiBkdXBsaWNhdGUsIGRvIG5vdCB5aWVsZCAqKVxuICBpblxuICBsZXQgcmVjIHJlY3Vyc2UgfmNtcCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbCB8IGwsIFtdIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKHB1c2ggfmNtcCkgYWNjIGwgaW5cbiAgICAgIExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgfmNtcCAocHVzaCB+Y21wIGFjYyB4MSkgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgyKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMidcbiAgICAoKiBkcm9wIG9uZSBvZiB0aGUgW3hdICopXG4gIGluXG4gIHJlY3Vyc2UgfmNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmZfdW5pcSB+Y21wIGwxIGwyID1cbiAgbGV0IHB1c2ggfmNtcCBhY2MgeCA9XG4gICAgbWF0Y2ggYWNjIHdpdGhcbiAgICB8IFtdIC0+IFsgeCBdXG4gICAgfCB5IDo6IF8gd2hlbiBjbXAgeCB5ID4gMCAtPiB4IDo6IGFjY1xuICAgIHwgXyAtPiBhY2NcbiAgICAoKiBkdXBsaWNhdGUsIGRvIG5vdCB5aWVsZCAqKVxuICBpblxuICBsZXQgcmVjIHJlY3Vyc2UgfmNtcCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyAtPiBMaXN0LnJldiBhY2NcbiAgICB8IGwsIFtdIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKHB1c2ggfmNtcCkgYWNjIGwgaW5cbiAgICAgIExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgfmNtcCAocHVzaCB+Y21wIGFjYyB4MSkgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSB+Y21wIGFjYyBsMScgbDInXG4gIGluXG4gIHJlY3Vyc2UgfmNtcCBbXSBsMSBsMlxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgdGFrZSBuIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIG4gbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgbiBbXSBsXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBuID4gMCB0aGVuXG4gICAgICAgIHggOjogZGlyZWN0IChpIC0gMSkgKG4gLSAxKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBbXVxuICBhbmQgc2FmZSBuIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgXyB3aGVuIG4gPSAwIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPiBzYWZlIChuIC0gMSkgKHggOjogYWNjKSBsJ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIG4gbFxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIHRha2UgbiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IGwnIC0+XG4gICAgaWYgbiA+IDAgdGhlblxuICAgICAgeCA6OiB0YWtlIChuIC0gMSkgbCdcbiAgICBlbHNlXG4gICAgICBbXVxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgZHJvcCBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IF8gd2hlbiBuID0gMCAtPiBsXG4gIHwgXyA6OiBsJyAtPiBkcm9wIChuIC0gMSkgbCdcblxubGV0IGhkX3RsID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWlsd2l0aCBcImhkX3RsXCJcbiAgfCB4IDo6IGwgLT4geCwgbFxuXG5sZXQgdGFrZV9kcm9wIG4gbCA9IHRha2UgbiBsLCBkcm9wIG4gbFxuXG5sZXQgc3VibGlzdHNfb2ZfbGVuID8obGFzdCA9IGZ1biBfIC0+IE5vbmUpID9vZmZzZXQgbiBsID1cbiAgaWYgbiA8IDEgdGhlbiBpbnZhbGlkX2FyZyBcInN1Ymxpc3RzX29mX2xlbjogbiBtdXN0IGJlID4gMFwiO1xuICBsZXQgb2Zmc2V0ID1cbiAgICBtYXRjaCBvZmZzZXQgd2l0aFxuICAgIHwgTm9uZSAtPiBuXG4gICAgfCBTb21lIG8gd2hlbiBvIDwgMSAtPiBpbnZhbGlkX2FyZyBcInN1Ymxpc3RzX29mX2xlbjogb2Zmc2V0IG11c3QgYmUgPiAwXCJcbiAgICB8IFNvbWUgbyAtPiBvXG4gIGluXG4gICgqIGFkZCBzdWItbGlzdHMgb2YgW2xdIHRvIFthY2NdICopXG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBsZXQgZ3JvdXAgPSB0YWtlIG4gbCBpblxuICAgIGlmIGlzX2VtcHR5IGdyb3VwIHRoZW5cbiAgICAgIGFjY1xuICAgICgqIHRoaXMgd2FzIHRoZSBsYXN0IGdyb3VwLCB3ZSBhcmUgZG9uZSAqKVxuICAgIGVsc2UgaWYgTGlzdC5sZW5ndGggZ3JvdXAgPCBuICgqIGxhc3QgZ3JvdXAsIHdpdGggbWlzc2luZyBlbGVtZW50cyAqKSB0aGVuIChcbiAgICAgIG1hdGNoIGxhc3QgZ3JvdXAgd2l0aFxuICAgICAgfCBOb25lIC0+IGFjY1xuICAgICAgfCBTb21lIGdyb3VwJyAtPiBncm91cCcgOjogYWNjXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBsJyA9IGRyb3Agb2Zmc2V0IGwgaW5cbiAgICAgIGF1eCAoZ3JvdXAgOjogYWNjKSBsJyAoKiBjb250aW51ZSAqKVxuICAgIClcbiAgaW5cbiAgTGlzdC5yZXYgKGF1eCBbXSBsKVxuXG5sZXQgY2h1bmtzIG4gbCA9IHN1Ymxpc3RzX29mX2xlbiB+bGFzdDooZnVuIHggLT4gU29tZSB4KSBuIGxcblxubGV0IGludGVyc3BlcnNlIHggbCA9XG4gIGxldCByZWMgYXV4X2RpcmVjdCBpIHggbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgWyBfIF0gLT4gbFxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IGF1eF90YWlscmVjIFtdIHggbFxuICAgIHwgeSA6OiB0YWlsIC0+IHkgOjogeCA6OiBhdXhfZGlyZWN0IChpIC0gMSkgeCB0YWlsXG4gIGFuZCBhdXhfdGFpbHJlYyBhY2MgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgWyB5IF0gLT4gTGlzdC5yZXYgKHkgOjogYWNjKVxuICAgIHwgeSA6OiB0YWlsIC0+IGF1eF90YWlscmVjICh4IDo6IHkgOjogYWNjKSB4IHRhaWxcbiAgaW5cbiAgYXV4X2RpcmVjdCAxXzAwMCB4IGxcblxubGV0IGludGVybGVhdmUgbDEgbDIgOiBfIGxpc3QgPVxuICBsZXQgcmVjIGF1eCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbXSwgXyAtPiBMaXN0LnJldiAoTGlzdC5yZXZfYXBwZW5kIGwyIGFjYylcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDEgYWNjKVxuICAgIHwgeDEgOjogdGwxLCB4MiA6OiB0bDIgLT4gYXV4ICh4MiA6OiB4MSA6OiBhY2MpIHRsMSB0bDJcbiAgaW5cbiAgYXV4IFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlX3doaWxlIHAgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgcCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHggOjogZGlyZWN0IChpIC0gMSkgcCBsJ1xuICAgICAgZWxzZVxuICAgICAgICBbXVxuICBhbmQgc2FmZSBwIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgc2FmZSBwICh4IDo6IGFjYykgbCdcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZV93aGlsZSBwIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBwIHggdGhlblxuICAgICAgeCA6OiB0YWtlX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBbXVxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgZHJvcF93aGlsZSBwIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBwIHggdGhlblxuICAgICAgZHJvcF93aGlsZSBwIGwnXG4gICAgZWxzZVxuICAgICAgbFxuXG5sZXQgdGFrZV9kcm9wX3doaWxlIHAgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgcCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdLCBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBbXSBsXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuIChcbiAgICAgICAgbGV0IGwxLCBsMiA9IGRpcmVjdCAoaSAtIDEpIHAgdGFpbCBpblxuICAgICAgICB4IDo6IGwxLCBsMlxuICAgICAgKSBlbHNlXG4gICAgICAgIFtdLCBsXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjLCBbXVxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSB0YWlsXG4gICAgICBlbHNlXG4gICAgICAgIExpc3QucmV2IGFjYywgbFxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIHAgbFxuXG5sZXQgbGFzdCBuIGwgPVxuICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICBpZiBsZW4gPCBuIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICBkcm9wIChsZW4gLSBuKSBsXG5cbmxldCBoZWFkX29wdCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogXyAtPiBTb21lIHhcblxubGV0IHRhaWxfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgXyA6OiB0YWlsIC0+IFNvbWUgdGFpbFxuXG5sZXQgcmVjIGxhc3Rfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgWyB4IF0gLT4gU29tZSB4XG4gIHwgXyA6OiB0YWlsIC0+IGxhc3Rfb3B0IHRhaWxcblxubGV0IGZpbmRfcHJlZCA9IGZpbmRfb3B0XG5cbmxldCBmaW5kX3ByZWRfZXhuIHAgbCA9XG4gIG1hdGNoIGZpbmRfcHJlZCBwIGwgd2l0aFxuICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgU29tZSB4IC0+IHhcblxubGV0IGZpbmRfbWFwaSBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGkgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgKG1hdGNoIGYgaSB4IHdpdGhcbiAgICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXNcbiAgICAgIHwgTm9uZSAtPiBhdXggZiAoaSArIDEpIGwnKVxuICBpblxuICBhdXggZiAwIGxcblxubGV0IGZpbmRfbWFwIGYgbCA9IGZpbmRfbWFwaSAoZnVuIF8gLT4gZikgbFxuXG5sZXQgZmluZF9pZHggcCBsID1cbiAgZmluZF9tYXBpXG4gICAgKGZ1biBpIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgKGksIHgpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmUpXG4gICAgbFxuXG5sZXQgcmVtb3ZlIH5lcSB4IGwgPVxuICBsZXQgcmVjIHJlbW92ZScgZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHkgOjogdGFpbCB3aGVuIGVxIHggeSAtPiByZW1vdmUnIGVxIHggYWNjIHRhaWxcbiAgICB8IHkgOjogdGFpbCAtPiByZW1vdmUnIGVxIHggKHkgOjogYWNjKSB0YWlsXG4gIGluXG4gIHJlbW92ZScgZXEgeCBbXSBsXG5cbmxldCBmaWx0ZXJfbWFwIGYgbCA9XG4gIGxldCByZWMgcmVjdXJzZSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MnID1cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGFjY1xuICAgICAgICB8IFNvbWUgeSAtPiB5IDo6IGFjY1xuICAgICAgaW5cbiAgICAgIHJlY3Vyc2UgYWNjJyBsJ1xuICBpblxuICByZWN1cnNlIFtdIGxcblxubGV0IGtlZXBfc29tZSBsID0gZmlsdGVyX21hcCAoZnVuIHggLT4geCkgbFxuXG5sZXQga2VlcF9vayBsID1cbiAgZmlsdGVyX21hcFxuICAgIChmdW5jdGlvblxuICAgICAgfCBPayB4IC0+IFNvbWUgeFxuICAgICAgfCBFcnJvciBfIC0+IE5vbmUpXG4gICAgbFxuXG5sZXQgYWxsX3NvbWUgbCA9XG4gIHRyeVxuICAgIFNvbWVcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IFNvbWUgeCAtPiB4XG4gICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBFeGl0KVxuICAgICAgICAgbClcbiAgd2l0aCBFeGl0IC0+IE5vbmVcblxubGV0IGFsbF9vayBsID1cbiAgbGV0IGVyciA9IHJlZiBOb25lIGluXG4gIHRyeVxuICAgIE9rXG4gICAgICAobWFwXG4gICAgICAgICAoZnVuY3Rpb25cbiAgICAgICAgICAgfCBPayB4IC0+IHhcbiAgICAgICAgICAgfCBFcnJvciBlIC0+XG4gICAgICAgICAgICAgZXJyIDo9IFNvbWUgZTtcbiAgICAgICAgICAgICByYWlzZSBFeGl0KVxuICAgICAgICAgbClcbiAgd2l0aCBFeGl0IC0+XG4gICAgKG1hdGNoICFlcnIgd2l0aFxuICAgIHwgTm9uZSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFNvbWUgZSAtPiBFcnJvciBlKVxuXG5sZXQgZ3JvdXBfYnkgKHR5cGUgaykgPyhoYXNoID0gSGFzaHRibC5oYXNoKSA/KGVxID0gU3RkbGliLiggPSApKSBsID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGtcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgKCogY29tcHV0ZSBncm91cCB0YWJsZSAqKVxuICBsZXQgdGJsID0gVGJsLmNyZWF0ZSAzMiBpblxuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCBsID0gdHJ5IFRibC5maW5kIHRibCB4IHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBUYmwucmVwbGFjZSB0YmwgeCAoeCA6OiBsKSlcbiAgICBsO1xuICBUYmwuZm9sZCAoZnVuIF8geCBhY2MgLT4geCA6OiBhY2MpIHRibCBbXVxuXG5sZXQgam9pbiB+am9pbl9yb3cgczEgczIgOiBfIHQgPVxuICBmbGF0X21hcCAoZnVuIGEgLT4gZmlsdGVyX21hcCAoam9pbl9yb3cgYSkgczIpIHMxXG5cbmxldCBqb2luX2J5ICh0eXBlIGEpID8oZXEgPSBTdGRsaWIuKCA9ICkpID8oaGFzaCA9IEhhc2h0YmwuaGFzaCkgZjEgZjIgfm1lcmdlIGMxXG4gICAgYzIgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0gYVxuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICBsZXQgdGJsID0gVGJsLmNyZWF0ZSAzMiBpblxuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCBrZXkgPSBmMSB4IGluXG4gICAgICBUYmwuYWRkIHRibCBrZXkgeClcbiAgICBjMTtcbiAgbGV0IHJlcyA9IHJlZiBbXSBpblxuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHkgLT5cbiAgICAgIGxldCBrZXkgPSBmMiB5IGluXG4gICAgICBsZXQgeHMgPSBUYmwuZmluZF9hbGwgdGJsIGtleSBpblxuICAgICAgTGlzdC5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIG1lcmdlIGtleSB4IHkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSB6IC0+IHJlcyA6PSB6IDo6ICFyZXMpXG4gICAgICAgIHhzKVxuICAgIGMyO1xuICAhcmVzXG5cbnR5cGUgKCdhLCAnYikgam9pbl9hbGxfY2VsbCA9IHtcbiAgbXV0YWJsZSBqYV9sZWZ0OiAnYSBsaXN0O1xuICBtdXRhYmxlIGphX3JpZ2h0OiAnYiBsaXN0O1xufVxuXG5sZXQgam9pbl9hbGxfYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMlxuICAgIH5tZXJnZSBjMSBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gICgqIGJ1aWxkIHRoZSBtYXAgW2tleSAtPiBjZWxsXSAqKVxuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCBrZXkgPSBmMSB4IGluXG4gICAgICB0cnlcbiAgICAgICAgbGV0IGMgPSBUYmwuZmluZCB0Ymwga2V5IGluXG4gICAgICAgIGMuamFfbGVmdCA8LSB4IDo6IGMuamFfbGVmdFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFsgeCBdOyBqYV9yaWdodCA9IFtdIH0pXG4gICAgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9yaWdodCA8LSB5IDo6IGMuamFfcmlnaHRcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+IFRibC5hZGQgdGJsIGtleSB7IGphX2xlZnQgPSBbXTsgamFfcmlnaHQgPSBbIHkgXSB9KVxuICAgIGMyO1xuICBUYmwuZm9sZFxuICAgIChmdW4ga2V5IGNlbGwgcmVzIC0+XG4gICAgICBtYXRjaCBtZXJnZSBrZXkgY2VsbC5qYV9sZWZ0IGNlbGwuamFfcmlnaHQgd2l0aFxuICAgICAgfCBOb25lIC0+IHJlc1xuICAgICAgfCBTb21lIHogLT4geiA6OiByZXMpXG4gICAgdGJsIFtdXG5cbmxldCBncm91cF9qb2luX2J5ICh0eXBlIGEpID8oZXEgPSBTdGRsaWIuKCA9ICkpID8oaGFzaCA9IEhhc2h0YmwuaGFzaCkgZiBjMSBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlciAoZnVuIHggLT4gVGJsLnJlcGxhY2UgdGJsIHggW10pIGMxO1xuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHkgLT5cbiAgICAgICgqIHByb2plY3QgW3ldIGludG8gc29tZSBlbGVtZW50IG9mIFtjMV0gKilcbiAgICAgIGxldCBrZXkgPSBmIHkgaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgbCA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgVGJsLnJlcGxhY2UgdGJsIGtleSAoeSA6OiBsKVxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gKCkpXG4gICAgYzI7XG4gIFRibC5mb2xkIChmdW4gayB2IGwgLT4gKGssIHYpIDo6IGwpIHRibCBbXVxuXG5sZXQgbWVtID8oZXEgPSBTdGRsaWIuKCA9ICkpIHggbCA9XG4gIGxldCByZWMgc2VhcmNoIGVxIHggbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmYWxzZVxuICAgIHwgeSA6OiBsJyAtPiBlcSB4IHkgfHwgc2VhcmNoIGVxIHggbCdcbiAgaW5cbiAgc2VhcmNoIGVxIHggbFxuXG5sZXQgYWRkX25vZHVwIH5lcSB4IGwgPVxuICBpZiBtZW0gfmVxIHggbCB0aGVuXG4gICAgbFxuICBlbHNlXG4gICAgeCA6OiBsXG5cbmxldCByZW1vdmVfb25lIH5lcSB4IGwgPVxuICBsZXQgcmVjIHJlbW92ZV9vbmUgfmVxIHggYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCB5IDo6IHRsIHdoZW4gZXEgeCB5IC0+IExpc3QucmV2X2FwcGVuZCBhY2MgdGxcbiAgICB8IHkgOjogdGwgLT4gcmVtb3ZlX29uZSB+ZXEgeCAoeSA6OiBhY2MpIHRsXG4gIGluXG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICByZW1vdmVfb25lIH5lcSB4IFtdIGxcbiAgZWxzZVxuICAgIGxcblxubGV0IHN1YnNldCB+ZXEgbDEgbDIgPSBMaXN0LmZvcl9hbGwgKGZ1biB0IC0+IG1lbSB+ZXEgdCBsMikgbDFcblxubGV0IHVuaXEgfmVxIGwgPVxuICBsZXQgcmVjIHVuaXEgZXEgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IHhzIHdoZW4gTGlzdC5leGlzdHMgKGVxIHgpIHhzIC0+IHVuaXEgZXEgYWNjIHhzXG4gICAgfCB4IDo6IHhzIC0+IHVuaXEgZXEgKHggOjogYWNjKSB4c1xuICBpblxuICB1bmlxIGVxIFtdIGxcblxubGV0IHVuaW9uIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgdW5pb24gZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwyXG4gICAgfCB4IDo6IHhzIHdoZW4gbWVtIH5lcSB4IGwyIC0+IHVuaW9uIGVxIGFjYyB4cyBsMlxuICAgIHwgeCA6OiB4cyAtPiB1bmlvbiBlcSAoeCA6OiBhY2MpIHhzIGwyXG4gIGluXG4gIHVuaW9uIGVxIFtdIGwxIGwyXG5cbmxldCBpbnRlciB+ZXEgbDEgbDIgPVxuICBsZXQgcmVjIGludGVyIGVxIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IHhzIHdoZW4gbWVtIH5lcSB4IGwyIC0+IGludGVyIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgICB8IF8gOjogeHMgLT4gaW50ZXIgZXEgYWNjIHhzIGwyXG4gIGluXG4gIGludGVyIGVxIFtdIGwxIGwyXG5cbmxldCBtYXBpIGYgbCA9XG4gIGxldCByID0gcmVmIDAgaW5cbiAgbWFwXG4gICAgKGZ1biB4IC0+XG4gICAgICBsZXQgeSA9IGYgIXIgeCBpblxuICAgICAgaW5jciByO1xuICAgICAgeSlcbiAgICBsXG5cbmxldCBpdGVyaSBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiAoKVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgZiBpIHg7XG4gICAgICBhdXggZiAoaSArIDEpIGwnXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgaXRlcmkyIGYgbDEgbDIgPVxuICBsZXQgcmVjIGF1eCBmIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gKClcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJpdGVyaTJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGYgaSB4MSB4MjtcbiAgICAgIGF1eCBmIChpICsgMSkgbDEnIGwyJ1xuICBpblxuICBhdXggZiAwIGwxIGwyXG5cbmxldCBmb2xkaSBmIGFjYyBsID1cbiAgbGV0IHJlYyBmb2xkaSBmIGFjYyBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4IGluXG4gICAgICBmb2xkaSBmIGFjYyAoaSArIDEpIGwnXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbFxuXG5sZXQgZm9sZGkyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBmb2xkaSBmIGFjYyBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IGFjY1xuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcImZvbGRpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIGkgeDEgeDIgaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbDEnIGwyJ1xuICBpblxuICBmb2xkaSBmIGFjYyAwIGwxIGwyXG5cbmxldCByZWMgZ2V0X2F0X2lkeF9yZWMgaSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgeCA6OiBfIHdoZW4gaSA9IDAgLT4geFxuICB8IF8gOjogbCcgLT4gZ2V0X2F0X2lkeF9yZWMgKGkgLSAxKSBsJ1xuXG5sZXQgZ2V0X2F0X2lkeF9leG4gaSBsID1cbiAgbGV0IGkgPVxuICAgIGlmIGkgPCAwIHRoZW5cbiAgICAgIGxlbmd0aCBsICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgZ2V0X2F0X2lkeF9yZWMgaSBsXG5cbmxldCBnZXRfYXRfaWR4IGkgbCA9IHRyeSBTb21lIChnZXRfYXRfaWR4X2V4biBpIGwpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxubGV0IHNldF9hdF9pZHggaSB4IGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogbCcpXG4gICAgfCB5IDo6IGwnIC0+IGF1eCBsJyAoeSA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgbGV0IGkgPVxuICAgIGlmIGkgPCAwIHRoZW5cbiAgICAgIGxlbmd0aCBsMCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsMCBbXSBpXG5cbmxldCBpbnNlcnRfYXRfaWR4IGkgeCBsID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSB4ID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgWyB4IF1cbiAgICB8IHkgOjogbCcgd2hlbiBpID0gMCAtPiBMaXN0LnJldl9hcHBlbmQgYWNjICh4IDo6IHkgOjogbCcpXG4gICAgfCB5IDo6IGwnIC0+IGF1eCBsJyAoeSA6OiBhY2MpIChpIC0gMSkgeFxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBhdXggbCBbXSBpIHhcblxubGV0IHJlbW92ZV9hdF9pZHggaSBsMCA9XG4gIGxldCByZWMgYXV4IGwgYWNjIGkgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gbDBcbiAgICB8IF8gOjogbCcgd2hlbiBpID0gMCAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwnXG4gICAgfCB5IDo6IGwnIC0+IGF1eCBsJyAoeSA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgbGV0IGkgPVxuICAgIGlmIGkgPCAwIHRoZW5cbiAgICAgIGxlbmd0aCBsMCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsMCBbXSBpXG5cbmxldCByYW5nZV9ieSB+c3RlcCBpIGogPVxuICBsZXQgcmVjIHJhbmdlIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgcmFuZ2UgaSAoaiAtIHN0ZXApIChqIDo6IGFjYylcbiAgaW5cbiAgaWYgc3RlcCA9IDAgdGhlblxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiQ0NMaXN0LnJhbmdlX2J5XCIpXG4gIGVsc2UgaWZcbiAgICBpZiBzdGVwID4gMCB0aGVuXG4gICAgICBpID4galxuICAgIGVsc2VcbiAgICAgIGkgPCBqXG4gIHRoZW5cbiAgICBbXVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoKChqIC0gaSkgLyBzdGVwICogc3RlcCkgKyBpKSBbXVxuXG5sZXQgcmFuZ2UgaSBqID1cbiAgbGV0IHJlYyB1cCBpIGogYWNjID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICBpIDo6IGFjY1xuICAgIGVsc2VcbiAgICAgIHVwIGkgKGogLSAxKSAoaiA6OiBhY2MpXG4gIGFuZCBkb3duIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgZG93biBpIChqICsgMSkgKGogOjogYWNjKVxuICBpblxuICBpZiBpIDw9IGogdGhlblxuICAgIHVwIGkgaiBbXVxuICBlbHNlXG4gICAgZG93biBpIGogW11cblxubGV0IHJhbmdlJyBpIGogPVxuICBpZiBpIDwgaiB0aGVuXG4gICAgcmFuZ2UgaSAoaiAtIDEpXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpIChqICsgMSlcblxubGV0ICggLS0gKSA9IHJhbmdlXG5sZXQgKCAtLV4gKSA9IHJhbmdlJ1xuXG5sZXQgcmVwbGljYXRlIGkgeCA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gMCB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKHggOjogYWNjKSAoaSAtIDEpXG4gIGluXG4gIGF1eCBbXSBpXG5cbmxldCByZXBlYXQgaSBsID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIExpc3QucmV2IGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoTGlzdC5yZXZfYXBwZW5kIGwgYWNjKSAoaSAtIDEpXG4gIGluXG4gIGF1eCBbXSBpXG5cbm1vZHVsZSBBc3NvYyA9IHN0cnVjdFxuICB0eXBlICgnYSwgJ2IpIHQgPSAoJ2EgKiAnYikgbGlzdFxuXG4gIGxldCByZWMgc2VhcmNoX2V4biBlcSBsIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCAoeSwgeikgOjogbCcgLT5cbiAgICAgIGlmIGVxIHggeSB0aGVuXG4gICAgICAgIHpcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX2V4biBlcSBsJyB4XG5cbiAgbGV0IGdldF9leG4gfmVxIHggbCA9IHNlYXJjaF9leG4gZXEgbCB4XG4gIGxldCBnZXQgfmVxIHggbCA9IHRyeSBTb21lIChzZWFyY2hfZXhuIGVxIGwgeCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG4gICgqIHNlYXJjaCBmb3IgYSBiaW5kaW5nIGZvciBbeF0gaW4gW2xdLCBhbmQgY2FsbHMgW2YgeCAoU29tZSB2KSByZXN0XVxuICAgICBvciBbZiB4IE5vbmUgcmVzdF0gZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgZmluZHMgdGhlIGJpbmRpbmcuXG4gICAgIFtyZXN0XSBpcyB0aGUgbGlzdCBvZiB0aGUgb3RoZXIgYmluZGluZ3MgKilcbiAgbGV0IHJlYyBzZWFyY2hfc2V0IGVxIGFjYyBsIHggfmYgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZiB4IE5vbmUgYWNjXG4gICAgfCAoeCcsIHknKSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB4JyB0aGVuXG4gICAgICAgIGYgeCAoU29tZSB5JykgKExpc3QucmV2X2FwcGVuZCBhY2MgbCcpXG4gICAgICBlbHNlXG4gICAgICAgIHNlYXJjaF9zZXQgZXEgKCh4JywgeScpIDo6IGFjYykgbCcgeCB+ZlxuXG4gIGxldCBzZXQgfmVxIHggeSBsID0gc2VhcmNoX3NldCBlcSBbXSBsIHggfmY6KGZ1biB4IF8gbCAtPiAoeCwgeSkgOjogbClcblxuICBsZXQgbWVtID8oZXEgPSBTdGRsaWIuKCA9ICkpIHggbCA9XG4gICAgdHJ5XG4gICAgICBpZ25vcmUgKHNlYXJjaF9leG4gZXEgbCB4KTtcbiAgICAgIHRydWVcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG4gIGxldCB1cGRhdGUgfmVxIGYgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBmIG9wdF95IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHJlc3QgKCogZHJvcCAqKVxuICAgICAgICB8IFNvbWUgeScgLT4gKHgsIHknKSA6OiByZXN0KVxuXG4gIGxldCByZW1vdmUgfmVxIHggbCA9XG4gICAgc2VhcmNoX3NldCBlcSBbXSBsIHggfmY6KGZ1biBfIG9wdF95IHJlc3QgLT5cbiAgICAgICAgbWF0Y2ggb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gbCAoKiBrZWVwIGFzIGlzICopXG4gICAgICAgIHwgU29tZSBfIC0+IHJlc3QpXG5cbiAgbGV0IGtleXMgbCA9IG1hcCAoZnVuIChrLCBfKSAtPiBrKSBsXG4gIGxldCB2YWx1ZXMgbCA9IG1hcCAoZnVuIChfLCB2KSAtPiB2KSBsXG4gIGxldCBtYXBfdmFsdWVzIGYgbCA9IG1hcCAoZnVuIChrLCB2KSAtPiBrLCBmIHYpIGxcbmVuZFxuXG5sZXQgYXNzb2MgPSBBc3NvYy5nZXRfZXhuXG5sZXQgYXNzb2Nfb3B0ID0gQXNzb2MuZ2V0XG5sZXQgbWVtX2Fzc29jID0gQXNzb2MubWVtXG5sZXQgcmVtb3ZlX2Fzc29jID0gQXNzb2MucmVtb3ZlXG5cbigqKiB7MiBSZWZlcmVuY2VzIG9uIExpc3RzfSAqKVxuXG5tb2R1bGUgUmVmID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIGxpc3QgcmVmXG5cbiAgbGV0IHB1c2ggbCB4ID0gbCA6PSB4IDo6ICFsXG5cbiAgbGV0IHBvcCBsID1cbiAgICBtYXRjaCAhbCB3aXRoXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGwgOj0gdGFpbDtcbiAgICAgIFNvbWUgeFxuXG4gIGxldCBwb3BfZXhuIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IGZhaWx3aXRoIFwiQ0NMaXN0LlJlZi5wb3BfZXhuXCJcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgeFxuXG4gIGxldCBjcmVhdGUgKCkgPSByZWYgW11cbiAgbGV0IGNsZWFyIGwgPSBsIDo9IFtdXG4gIGxldCBsaWZ0IGYgbCA9IGYgIWxcbiAgbGV0IHB1c2hfbGlzdCByIGwgPSByIDo9IExpc3QucmV2X2FwcGVuZCBsICFyXG5lbmRcblxuKCoqIHsyIE1vbmFkaWMgT3BlcmF0aW9uc30gKilcbm1vZHVsZSB0eXBlIE1PTkFEID0gc2lnXG4gIHR5cGUgJ2EgdFxuXG4gIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG4gIHZhbCAoID4+PSApIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuZW5kXG5cbm1vZHVsZSBUcmF2ZXJzZSAoTSA6IE1PTkFEKSA9IHN0cnVjdFxuICBvcGVuIE1cblxuICBsZXQgbWFwX20gZiBsID1cbiAgICBsZXQgcmVjIGF1eCBmIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiByZXR1cm4gKExpc3QucmV2IGFjYylcbiAgICAgIHwgeCA6OiB0YWlsIC0+IGYgeCA+Pj0gZnVuIHgnIC0+IGF1eCBmICh4JyA6OiBhY2MpIHRhaWxcbiAgICBpblxuICAgIGF1eCBmIFtdIGxcblxuICBsZXQgcmVjIG1hcF9tX3BhciBmIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTS5yZXR1cm4gW11cbiAgICB8IHggOjogdGwgLT5cbiAgICAgIGxldCB4JyA9IGYgeCBpblxuICAgICAgbGV0IHRsJyA9IG1hcF9tX3BhciBmIHRsIGluXG4gICAgICB4JyA+Pj0gZnVuIHgnIC0+XG4gICAgICB0bCcgPj49IGZ1biB0bCcgLT4gTS5yZXR1cm4gKHgnIDo6IHRsJylcblxuICBsZXQgc2VxdWVuY2VfbSBsID0gbWFwX20gKGZ1biB4IC0+IHgpIGxcblxuICBsZXQgcmVjIGZvbGRfbSBmIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IHJldHVybiBhY2NcbiAgICB8IHggOjogbCcgLT4gZiBhY2MgeCA+Pj0gZnVuIGFjYycgLT4gZm9sZF9tIGYgYWNjJyBsJ1xuZW5kXG5cbigqKiB7MiBDb252ZXJzaW9uc30gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHJhbmRvbV9sZW4gbGVuIGcgc3QgPSBpbml0IGxlbiAoZnVuIF8gLT4gZyBzdClcblxubGV0IHJhbmRvbSBnIHN0ID1cbiAgbGV0IGxlbiA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX25vbl9lbXB0eSBnIHN0ID1cbiAgbGV0IGxlbiA9IDEgKyBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbGVuIGcgc3RcblxubGV0IHJhbmRvbV9jaG9vc2UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IF8gOjogXyAtPlxuICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgZnVuIHN0IC0+XG4gICAgICBsZXQgaSA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgbGVuIGluXG4gICAgICBMaXN0Lm50aCBsIGlcblxubGV0IHJhbmRvbV9zZXF1ZW5jZSBsIHN0ID0gbWFwIChmdW4gZyAtPiBnIHN0KSBsXG5cbmxldCB0b19zdHJpbmcgPyhzdGFydCA9IFwiXCIpID8oc3RvcCA9IFwiXCIpID8oc2VwID0gXCIsIFwiKSBpdGVtX3RvX3N0cmluZyBsID1cbiAgbGV0IGwgPSBMaXN0Lm1hcCBpdGVtX3RvX3N0cmluZyBsIGluXG4gIHN0YXJ0IF4gU3RyaW5nLmNvbmNhdCBzZXAgbCBeIHN0b3BcblxubGV0IHRvX2l0ZXIgbCBrID0gTGlzdC5pdGVyIGsgbFxuXG5sZXQgcmVjIHRvX3NlcSBsICgpID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gU2VxLk5pbFxuICB8IHggOjogdGwgLT4gU2VxLkNvbnMgKHgsIHRvX3NlcSB0bClcblxubGV0IG9mX2l0ZXIgaSA9XG4gIGxldCBsID0gcmVmIFtdIGluXG4gIGkgKGZ1biB4IC0+IGwgOj0geCA6OiAhbCk7XG4gIExpc3QucmV2ICFsXG5cbmxldCBvZl9zZXFfcmV2IGwgPVxuICBsZXQgcmVjIGxvb3AgYWNjIHMgPVxuICAgIG1hdGNoIHMgKCkgd2l0aFxuICAgIHwgU2VxLk5pbCAtPiBhY2NcbiAgICB8IFNlcS5Db25zICh4LCB0bCkgLT4gbG9vcCAoeCA6OiBhY2MpIHRsXG4gIGluXG4gIGxvb3AgW10gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2Zfc2VxIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHNlcSA9XG4gICAgaWYgaSA8PSAwIHRoZW5cbiAgICAgIExpc3QucmV2IChvZl9zZXFfcmV2IHNlcSlcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgICB8IFNlcS5OaWwgLT4gW11cbiAgICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiB4IDo6IGRpcmVjdCAoaSAtIDEpIHRsXG4gICAgKVxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxuW0BAQGVuZGlmXVxuXG5sZXQgdG9fZ2VuIGwgPVxuICBsZXQgbCA9IHJlZiBsIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGwgOj0gbCc7XG4gICAgICBTb21lIHhcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IG9mX2dlbiBnID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBnID1cbiAgICBpZiBpID0gMCB0aGVuXG4gICAgICBzYWZlIFtdIGdcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUgeCAtPiB4IDo6IGRpcmVjdCAoaSAtIDEpIGdcbiAgICApXG4gIGFuZCBzYWZlIGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIHggLT4gc2FmZSAoeCA6OiBhY2MpIGdcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBnXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgb2ZfZ2VuIGcgPVxuICBtYXRjaCBnICgpIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSB4IC0+IHggOjogb2ZfZ2VuIGdcblxuW0BAQGVuZGlmXVxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0W0BpbmxpbmVdICggPnw9ICkgbCBmID0gbWFwIGYgbFxuICBsZXRbQGlubGluZV0gKCA+Pj0gKSBsIGYgPSBmbGF0X21hcCBmIGxcbiAgbGV0ICggQCApID0gKCBAIClcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoIC0tICkgPSAoIC0tIClcbiAgbGV0ICggLS1eICkgPSAoIC0tXiApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0ICggbGV0KiApID0gKCA+Pj0gKVxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbDEgbDIgPSBwcm9kdWN0IChmdW4geCB5IC0+IHgsIHkpIGwxIGwyXG4gIGxldCAoIGFuZCogKSA9ICggYW5kKyApXG4gIGxldCAoIGFuZCYgKSA9IGNvbWJpbmVfc2hvcnRlc3RcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbigqKiB7MiBJT30gKilcblxubGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIixAIFwiKSBwcF9pdGVtIGZtdCBsID1cbiAgbGV0IHJlYyBwcmludCBmbXQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCB4IDo6IChfIDo6IF8gYXMgbCkgLT5cbiAgICAgIHBwX2l0ZW0gZm10IHg7XG4gICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgcHJpbnQgZm10IGxcbiAgICB8IFsgeCBdIC0+IHBwX2l0ZW0gZm10IHhcbiAgICB8IFtdIC0+ICgpXG4gIGluXG4gIHBwX3N0YXJ0IGZtdCAoKTtcbiAgcHJpbnQgZm10IGw7XG4gIHBwX3N0b3AgZm10ICgpXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgT3B0aW9uc30gKilcblxudHlwZSAnYSB0ID0gJ2Egb3B0aW9uXG5cbmxldFtAaW5saW5lXSBtYXAgZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBOb25lXG4gIHwgU29tZSB4IC0+IFNvbWUgKGYgeClcblxubGV0IG1hcF9vciB+ZGVmYXVsdCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGRlZmF1bHRcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBtYXBfbGF6eSBkZWZhdWx0X2ZuIGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdF9mbiAoKVxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IGlzX3NvbWUgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZmFsc2VcbiAgfCBTb21lIF8gLT4gdHJ1ZVxuXG5sZXQgaXNfbm9uZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIE5vbmUgLT4gMFxuICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gIHwgTm9uZSwgU29tZSBfIC0+IC0xXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IGVxdWFsIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIE5vbmUgLT4gdHJ1ZVxuICB8IFNvbWUgXywgTm9uZSB8IE5vbmUsIFNvbWUgXyAtPiBmYWxzZVxuICB8IFNvbWUgeCwgU29tZSB5IC0+IGYgeCB5XG5cbmxldCByZXR1cm4geCA9IFNvbWUgeFxubGV0IHNvbWUgPSByZXR1cm5cbmxldCBub25lID0gTm9uZVxuXG5sZXRbQGlubGluZV0gZmxhdF9tYXAgZiBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBOb25lXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXRbQGlubGluZV0gZmxhdF9tYXBfbCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXRbQGlubGluZV0gYmluZCBvIGYgPSBmbGF0X21hcCBmIG9cbmxldCAoID4+PSApID0gYmluZFxubGV0IHB1cmUgeCA9IFNvbWUgeFxubGV0IGtfY29tcG9zZSBmIGcgeCA9IGYgeCB8PiBmbGF0X21hcCBnXG5sZXQgKCA+PT4gKSA9IGtfY29tcG9zZVxubGV0ICggPD08ICkgZiBnID0gZyA+PT4gZlxuXG5sZXQgKCA8Kj4gKSBmIHggPVxuICBtYXRjaCBmLCB4IHdpdGhcbiAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiBOb25lXG4gIHwgU29tZSBmLCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgb3JfIH5lbHNlXyBhID1cbiAgbWF0Y2ggYSB3aXRoXG4gIHwgTm9uZSAtPiBlbHNlX1xuICB8IFNvbWUgXyAtPiBhXG5cbmxldCBvcl9sYXp5IH5lbHNlXyBhID1cbiAgbWF0Y2ggYSB3aXRoXG4gIHwgTm9uZSAtPiBlbHNlXyAoKVxuICB8IFNvbWUgXyAtPiBhXG5cbmxldCAoIDwrPiApIGEgYiA9IG9yXyB+ZWxzZV86YiBhXG5sZXQgY2hvaWNlIGwgPSBMaXN0LmZvbGRfbGVmdCAoIDwrPiApIE5vbmUgbFxuXG5sZXQgbWFwMiBmIG8xIG8yID1cbiAgbWF0Y2ggbzEsIG8yIHdpdGhcbiAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiBOb25lXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gU29tZSAoZiB4IHkpXG5cbmxldCBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IGFzIG8gd2hlbiBwIHggLT4gb1xuICB8IF8gLT4gTm9uZVxuXG5sZXQgaWZfIHAgeCA9XG4gIGlmIHAgeCB0aGVuXG4gICAgU29tZSB4XG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgeCAtPiBwIHhcblxubGV0IGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgaXRlciBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgZm9sZCBmIGFjYyBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBhY2NcbiAgfCBTb21lIHggLT4gZiBhY2MgeFxuXG5sZXQgZ2V0X29yIH5kZWZhdWx0IHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IGRlZmF1bHRcbiAgfCBTb21lIHkgLT4geVxuXG5sZXQgYXBwbHlfb3IgZiB4ID1cbiAgbWF0Y2ggZiB4IHdpdGhcbiAgfCBOb25lIC0+IHhcbiAgfCBTb21lIHkgLT4geVxuXG5sZXQgKCB8Pz4gKSB4IGYgPSBhcHBseV9vciBmIHhcblxubGV0IHZhbHVlIHggfmRlZmF1bHQgPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IGRlZmF1bHRcbiAgfCBTb21lIHkgLT4geVxuXG5sZXQgZ2V0X2V4biA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NPcHRpb24uZ2V0X2V4blwiXG5cbmxldCBnZXRfZXhuX29yIG1zZyA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIG1zZ1xuXG5sZXQgZ2V0X2xhenkgZGVmYXVsdF9mbiB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB5IC0+IHlcblxubGV0IHNlcXVlbmNlX2wgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNvbWUgKExpc3QucmV2IGFjYylcbiAgICB8IFNvbWUgeCA6OiBsJyAtPiBhdXggKHggOjogYWNjKSBsJ1xuICAgIHwgTm9uZSA6OiBfIC0+IHJhaXNlIEV4aXRcbiAgaW5cbiAgdHJ5IGF1eCBbXSBsIHdpdGggRXhpdCAtPiBOb25lXG5cbmxldCB3cmFwID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCA9XG4gIHRyeSBTb21lIChmIHgpXG4gIHdpdGggZSAtPlxuICAgIGlmIGhhbmRsZXIgZSB0aGVuXG4gICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgcmFpc2UgZVxuXG5sZXQgd3JhcDIgPyhoYW5kbGVyID0gZnVuIF8gLT4gdHJ1ZSkgZiB4IHkgPVxuICB0cnkgU29tZSAoZiB4IHkpXG4gIHdpdGggZSAtPlxuICAgIGlmIGhhbmRsZXIgZSB0aGVuXG4gICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgcmFpc2UgZVxuXG5sZXQgdG9fbGlzdCBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgeCAtPiBbIHggXVxuXG5sZXQgb2ZfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuICB8IFtdIC0+IE5vbmVcblxubGV0IHRvX3Jlc3VsdCBlcnIgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgZXJyXG4gIHwgU29tZSB4IC0+IE9rIHhcblxubGV0IHRvX3Jlc3VsdF9sYXp5IGVycl9mbiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBFcnJvciAoZXJyX2ZuICgpKVxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCBvZl9yZXN1bHQgPSBmdW5jdGlvblxuICB8IEVycm9yIF8gLT4gTm9uZVxuICB8IE9rIHggLT4gU29tZSB4XG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA+fD0gKSB4IGYgPSBtYXAgZiB4XG4gIGxldCAoID4+PSApID0gKCA+Pj0gKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggPCs+ICkgPSAoIDwrPiApXG4gIGxldCAoIHw/PiApID0gKCB8Pz4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbzEgbzIgPVxuICAgIG1hdGNoIG8xLCBvMiB3aXRoXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lICh4LCB5KVxuICAgIHwgXyAtPiBOb25lXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggPj0+ICkgPSAoID49PiApXG4gIGxldCAoIDw9PCApID0gKCA8PTwgKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHJhbmRvbSBnIHN0ID1cbiAgaWYgUmFuZG9tLlN0YXRlLmJvb2wgc3QgdGhlblxuICAgIFNvbWUgKGcgc3QpXG4gIGVsc2VcbiAgICBOb25lXG5cbmV4Y2VwdGlvbiBFeGl0Q2hvaWNlXG5cbmxldCBjaG9pY2VfaXRlciBzID1cbiAgbGV0IHIgPSByZWYgTm9uZSBpblxuICAodHJ5XG4gICAgIHMgKGZ1bmN0aW9uXG4gICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgfCBTb21lIF8gYXMgbyAtPlxuICAgICAgICAgciA6PSBvO1xuICAgICAgICAgcmFpc2UgRXhpdENob2ljZSlcbiAgIHdpdGggRXhpdENob2ljZSAtPiAoKSk7XG4gICFyXG5cbmxldCByZWMgY2hvaWNlX3NlcSBzID1cbiAgbWF0Y2ggcyAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiBOb25lXG4gIHwgU2VxLkNvbnMgKFNvbWUgeCwgXykgLT4gU29tZSB4XG4gIHwgU2VxLkNvbnMgKE5vbmUsIHRsKSAtPiBjaG9pY2Vfc2VxIHRsXG5cbmxldCB0b19nZW4gbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gZnVuICgpIC0+IE5vbmVcbiAgfCBTb21lIF8gLT5cbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGZ1biAoKSAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW4gKFxuICAgICAgICBmaXJzdCA6PSBmYWxzZTtcbiAgICAgICAgb1xuICAgICAgKSBlbHNlXG4gICAgICAgIE5vbmVcblxubGV0IHRvX2l0ZXIgbyBrID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgeCAtPiBrIHhcblxubGV0IHRvX3NlcSBvICgpID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBTZXEuTmlsXG4gIHwgU29tZSB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG5cbmxldCBwcCBwcHggb3V0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiTm9uZVwiXG4gIHwgU29tZSB4IC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbU29tZSAlYUBdXCIgcHB4IHhcblxubGV0IGZsYXR0ZW4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBOb25lXG5cbmxldCByZXR1cm5faWYgYiB4ID1cbiAgaWYgYiB0aGVuXG4gICAgU29tZSB4XG4gIGVsc2VcbiAgICBOb25lXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgUmFuZG9tIEdlbmVyYXRvcnN9ICopXG5cbmluY2x1ZGUgUmFuZG9tXG5cbnR5cGUgc3RhdGUgPSBSYW5kb20uU3RhdGUudFxudHlwZSAnYSB0ID0gc3RhdGUgLT4gJ2FcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9ICdhIHRcblxubGV0IHJldHVybiB4IF9zdCA9IHhcbmxldCBmbGF0X21hcCBmIGcgc3QgPSBmIChnIHN0KSBzdFxubGV0ICggPj49ICkgZyBmIHN0ID0gZmxhdF9tYXAgZiBnIHN0XG5sZXQgbWFwIGYgZyBzdCA9IGYgKGcgc3QpXG5sZXQgKCA+fD0gKSBnIGYgc3QgPSBtYXAgZiBnIHN0XG5sZXQgZGVsYXkgZiBzdCA9IGYgKCkgc3RcblxubGV0IF9jaG9vc2VfYXJyYXkgYSBzdCA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuIGludmFsaWRfYXJnIFwiQ0NSYW5kb20uY2hvb3NlX2FycmF5XCI7XG4gIGEuKFJhbmRvbS5TdGF0ZS5pbnQgc3QgKEFycmF5Lmxlbmd0aCBhKSlcblxubGV0IGNob29zZV9hcnJheSBhIHN0ID1cbiAgdHJ5IFNvbWUgKF9jaG9vc2VfYXJyYXkgYSBzdCBzdCkgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxuXG5sZXQgY2hvb3NlIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBjaG9vc2VfYXJyYXkgYVxuXG5sZXQgY2hvb3NlX2V4biBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgZnVuIHN0IC0+IF9jaG9vc2VfYXJyYXkgYSBzdCBzdFxuXG5sZXQgY2hvb3NlX3JldHVybiBsID0gX2Nob29zZV9hcnJheSAoQXJyYXkub2ZfbGlzdCBsKVxuXG5leGNlcHRpb24gUGlja19mcm9tX2VtcHR5XG5cbmxldCBwaWNrX2xpc3QgbCA9XG4gIGxldCBuID0gTGlzdC5sZW5ndGggbCBpblxuICBpZiBuID0gMCB0aGVuIHJhaXNlIFBpY2tfZnJvbV9lbXB0eTtcbiAgZnVuIHN0IC0+IExpc3QubnRoIGwgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IHBpY2tfYXJyYXkgYSA9XG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBBcnJheS5nZXQgYSAoUmFuZG9tLlN0YXRlLmludCBzdCBuKVxuXG5sZXQgaW50IGkgc3QgPSBSYW5kb20uU3RhdGUuaW50IHN0IGlcbmxldCBzbWFsbF9pbnQgPSBpbnQgMTAwXG5sZXQgaW50X3JhbmdlIGkgaiBzdCA9IGkgKyBSYW5kb20uU3RhdGUuaW50IHN0IChqIC0gaSArIDEpXG5sZXQgZmxvYXQgZiBzdCA9IFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCBmXG5sZXQgc21hbGxfZmxvYXQgPSBmbG9hdCAxMDAuMFxubGV0IGZsb2F0X3JhbmdlIGkgaiBzdCA9IGkgKy4gUmFuZG9tLlN0YXRlLmZsb2F0IHN0IChqIC0uIGkpXG5cbigqIFRPRE86IHNhbXBsZSBmdW5jdGlvbnMgKilcblxubGV0IHJlcGxpY2F0ZSBuIGcgc3QgPVxuICBsZXQgcmVjIGF1eCBhY2MgbiA9XG4gICAgaWYgbiA9IDAgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChnIHN0IDo6IGFjYykgKG4gLSAxKVxuICBpblxuICBhdXggW10gblxuXG4oKiBTYW1wbGUgd2l0aG91dCByZXBsYWNlbWVudCB1c2luZyByZWplY3Rpb24gc2FtcGxpbmcuICopXG5sZXQgc2FtcGxlX3dpdGhvdXRfZHVwbGljYXRlcyAodHlwZSBlbHQpIH5jbXAgayAocm5nIDogZWx0IHQpIHN0ID1cbiAgbGV0IG1vZHVsZSBTID0gU2V0Lk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGVsdFxuXG4gICAgbGV0IGNvbXBhcmUgPSBjbXBcbiAgZW5kKSBpblxuICBsZXQgcmVjIGF1eCBzIGsgPVxuICAgIGlmIGsgPD0gMCB0aGVuXG4gICAgICBTLmVsZW1lbnRzIHNcbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gcm5nIHN0IGluXG4gICAgICBpZiBTLm1lbSB4IHMgdGhlblxuICAgICAgICBhdXggcyBrXG4gICAgICBlbHNlXG4gICAgICAgIGF1eCAoUy5hZGQgeCBzKSAoayAtIDEpXG4gICAgKVxuICBpblxuICBpZiBrIDw9IDAgdGhlbiBpbnZhbGlkX2FyZyBcInNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXNcIjtcbiAgYXV4IFMuZW1wdHkga1xuXG5sZXQgbGlzdF9zZXEgbCBzdCA9IExpc3QubWFwIChmdW4gZiAtPiBmIHN0KSBsXG5cbmxldCBzcGxpdCBpIHN0ID1cbiAgaWYgaSA8IDIgdGhlblxuICAgIE5vbmVcbiAgZWxzZSAoXG4gICAgbGV0IGogPSAxICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaSAtIDEpIGluXG4gICAgU29tZSAoaiwgaSAtIGopXG4gIClcblxubGV0IF9kaWZmX2xpc3Qgfmxhc3QgbCA9XG4gIGxldCByZWMgZGlmZl9saXN0IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbIGEgXSAtPiBTb21lICgobGFzdCAtIGEpIDo6IGFjYylcbiAgICB8IGEgOjogKGIgOjogXyBhcyByKSAtPiBkaWZmX2xpc3QgKChiIC0gYSkgOjogYWNjKSByXG4gICAgfCBbXSAtPiBOb25lXG4gIGluXG4gIGRpZmZfbGlzdCBbXSBsXG5cbigqIFBhcnRpdGlvbiBvZiBhbiBpbnQgaW50byBbbGVuXSBpbnRlZ2VycyB1bmlmb3JtbHkuXG4gICBXZSBmaXJzdCBzYW1wbGUgKGxlbi0xKSBwb2ludHMgZnJvbSB0aGUgc2V0IHsxLC4uaS0xfSB3aXRob3V0IHJlcGxhY2VtZW50LlxuICAgV2Ugc29ydCB0aGVzZSBwb2ludHMgYW5kIGFkZCBiYWNrIDAgYW5kIGksIHdlIGhhdmUgdGh1c1xuICAgeF8wID0gMCA8IHhfMSA8IHhfMiA8IOKApiA8IHhfe2xlbi0xfSA8IGkgPSB4X3tsZW59LlxuICAgSWYgd2UgZGVmaW5lLCB5X2sgPSB4X3trKzF9IC0geF97a30gZm9yIGsgaW4gMCDigKYgKGxlbi0xKSwgdGhlbiBieSBjb25zdHJ1Y3Rpb25cbiAgIOKIkV9rIHlfayA9IOKIkV9rICh4X3trKzF9IC0geF9rICkgPSB4X3tsZW59IC0geF8wID0gaS4gKilcbmxldCBzcGxpdF9saXN0IGkgfmxlbiBzdCA9XG4gIGlmIGxlbiA8PSAxIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uc3BsaXRfbGlzdFwiO1xuICBpZiBpID49IGxlbiB0aGVuIChcbiAgICBsZXQgeHMgPVxuICAgICAgc2FtcGxlX3dpdGhvdXRfZHVwbGljYXRlcyB+Y21wOmNvbXBhcmUgKGxlbiAtIDEpIChpbnRfcmFuZ2UgMSAoaSAtIDEpKSBzdFxuICAgIGluXG4gICAgX2RpZmZfbGlzdCB+bGFzdDppICgwIDo6IHhzKVxuICApIGVsc2VcbiAgICBOb25lXG5cbmxldCByZXRyeSA/KG1heCA9IDEwKSBnIHN0ID1cbiAgbGV0IHJlYyBhdXggbiA9XG4gICAgbWF0Y2ggZyBzdCB3aXRoXG4gICAgfCBOb25lIHdoZW4gbiA9IDAgLT4gTm9uZVxuICAgIHwgTm9uZSAtPiBhdXggKG4gLSAxKSAoKiByZXRyeSAqKVxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXNcbiAgaW5cbiAgYXV4IG1heFxuXG5sZXQgcmVjIHRyeV9zdWNjZXNzaXZlbHkgbCBzdCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IE5vbmVcbiAgfCBnIDo6IGwnIC0+XG4gICAgKG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSAtPiB0cnlfc3VjY2Vzc2l2ZWx5IGwnIHN0XG4gICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlcylcblxubGV0ICggPD8+ICkgYSBiID0gdHJ5X3N1Y2Nlc3NpdmVseSBbIGE7IGIgXVxuXG5leGNlcHRpb24gQmFja3RyYWNrXG5cbmxldCBfY2hvb3NlX2FycmF5X2NhbGwgYSBmIHN0ID1cbiAgdHJ5IGYgKF9jaG9vc2VfYXJyYXkgYSBzdCkgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gcmFpc2UgQmFja3RyYWNrXG5cbmxldCBmaXggPyhzdWIxID0gW10pID8oc3ViMiA9IFtdKSA/KHN1Ym4gPSBbXSkgfmJhc2UgZnVlbCBzdCA9XG4gIGxldCBzdWIxID0gQXJyYXkub2ZfbGlzdCBzdWIxXG4gIGFuZCBzdWIyID0gQXJyYXkub2ZfbGlzdCBzdWIyXG4gIGFuZCBzdWJuID0gQXJyYXkub2ZfbGlzdCBzdWJuIGluXG4gICgqIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aXRoIGZ1ZWwgKilcbiAgbGV0IHJlYyBtYWtlIGZ1ZWwgc3QgPVxuICAgIGlmIGZ1ZWwgPSAwIHRoZW5cbiAgICAgIHJhaXNlIEJhY2t0cmFja1xuICAgIGVsc2UgaWYgZnVlbCA9IDEgdGhlblxuICAgICAgYmFzZSBzdFxuICAgIGVsc2VcbiAgICAgIF90cnlfb3RoZXJ3aXNlIDBcbiAgICAgICAgW3xcbiAgICAgICAgICBfY2hvb3NlX2FycmF5X2NhbGwgc3ViMSAoZnVuIGYgLT4gZiAobWFrZSAoZnVlbCAtIDEpKSBzdCk7XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjIgKGZ1biBmIC0+XG4gICAgICAgICAgICAgIG1hdGNoIHNwbGl0IGZ1ZWwgc3Qgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgQmFja3RyYWNrXG4gICAgICAgICAgICAgIHwgU29tZSAoaSwgaikgLT4gZiAobWFrZSBpKSAobWFrZSBqKSBzdCk7XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1Ym4gKGZ1biAobGVuLCBmKSAtPlxuICAgICAgICAgICAgICBsZXQgbGVuID0gbGVuIHN0IGluXG4gICAgICAgICAgICAgIG1hdGNoIHNwbGl0X2xpc3QgZnVlbCB+bGVuIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgbCcgLT4gZiAoZnVuIHN0IC0+IExpc3QubWFwIChmdW4geCAtPiBtYWtlIHggc3QpIGwnKSBzdCk7XG4gICAgICAgICAgYmFzZSAoKiBiYXNlIGNhc2UgdGhlbiAqKTtcbiAgICAgICAgfF1cbiAgYW5kIF90cnlfb3RoZXJ3aXNlIGkgYSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIHJhaXNlIEJhY2t0cmFja1xuICAgIGVsc2UgKFxuICAgICAgdHJ5IGEuKGkpIHN0IHdpdGggQmFja3RyYWNrIC0+IF90cnlfb3RoZXJ3aXNlIChpICsgMSkgYVxuICAgIClcbiAgaW5cbiAgbWFrZSAoZnVlbCBzdCkgc3RcblxubGV0IHB1cmUgeCBfc3QgPSB4XG5sZXQgKCA8Kj4gKSBmIGcgc3QgPSBmIHN0IChnIHN0KVxubGV0ICggbGV0KyApID0gKCA+fD0gKVxubGV0ICggbGV0KiApID0gKCA+Pj0gKVxubGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyIHN0ID0gYTEgc3QsIGEyIHN0XG5sZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxubGV0IF9fZGVmYXVsdF9zdGF0ZSA9IFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCAoKVxubGV0IHJ1biA/KHN0ID0gX19kZWZhdWx0X3N0YXRlKSBnID0gZyBzdFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEVycm9yIE1vbmFkfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBlcXVhbCA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2Egb3JkID0gJ2EgLT4gJ2EgLT4gaW50XG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEJhc2ljc30gKilcblxudHlwZSBub25yZWMgKCsnZ29vZCwgKydiYWQpIHJlc3VsdCA9ICgnZ29vZCwgJ2JhZCkgcmVzdWx0ID1cbiAgfCBPayBvZiAnZ29vZFxuICB8IEVycm9yIG9mICdiYWRcblxudHlwZSAoKydnb29kLCArJ2JhZCkgdCA9ICgnZ29vZCwgJ2JhZCkgcmVzdWx0ID1cbiAgfCBPayBvZiAnZ29vZFxuICB8IEVycm9yIG9mICdiYWRcblxubGV0IHJldHVybiB4ID0gT2sgeFxubGV0IGZhaWwgcyA9IEVycm9yIHNcblxubGV0IGZhaWxfcHJpbnRmIGZvcm1hdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIFByaW50Zi5rYnByaW50ZiAoZnVuIGJ1ZiAtPiBmYWlsIChCdWZmZXIuY29udGVudHMgYnVmKSkgYnVmIGZvcm1hdFxuXG5sZXQgZmFpbF9mcHJpbnRmIGZvcm1hdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCBvdXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBvdXQgLT5cbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBvdXQgKCk7XG4gICAgICBmYWlsIChCdWZmZXIuY29udGVudHMgYnVmKSlcbiAgICBvdXQgZm9ybWF0XG5cbmxldCBhZGRfY3R4IG1zZyB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgRXJyb3IgZSAtPiBFcnJvciAoZSBeIFwiXFxuY29udGV4dDpcIiBeIG1zZylcbiAgfCBPayB4IC0+IE9rIHhcblxubGV0IGFkZF9jdHhmIG1zZyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCBvdXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBvdXQgZSAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGFkZF9jdHggKEJ1ZmZlci5jb250ZW50cyBidWYpIGUpXG4gICAgb3V0IG1zZ1xuXG5sZXQgb2ZfZXhuIGUgPVxuICBsZXQgbXNnID0gUHJpbnRleGMudG9fc3RyaW5nIGUgaW5cbiAgRXJyb3IgbXNnXG5cbmxldCBvZl9leG5fdHJhY2UgZSA9XG4gIGxldCByZXMgPVxuICAgIFByaW50Zi5zcHJpbnRmIFwiJXNcXG4lc1wiIChQcmludGV4Yy50b19zdHJpbmcgZSkgKFByaW50ZXhjLmdldF9iYWNrdHJhY2UgKCkpXG4gIGluXG4gIEVycm9yIHJlc1xuXG5sZXQgb3B0X21hcCBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBOb25lIC0+IE9rIE5vbmVcbiAgfCBTb21lIHggLT5cbiAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICB8IE9rIHggLT4gT2sgKFNvbWUgeClcbiAgICB8IEVycm9yIGUgLT4gRXJyb3IgZSlcblxubGV0IG1hcCBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IE9rIChmIHgpXG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBtYXBfZXJyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICB8IEVycm9yIHkgLT4gRXJyb3IgKGYgeSlcblxubGV0IG1hcDIgZiBnIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IE9rIChmIHgpXG4gIHwgRXJyb3IgcyAtPiBFcnJvciAoZyBzKVxuXG5sZXQgaXRlciBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gKClcblxubGV0IGl0ZXJfZXJyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIF8gLT4gKClcbiAgfCBFcnJvciBlcnIgLT4gZiBlcnJcblxuZXhjZXB0aW9uIEdldF9lcnJvclxuXG5sZXQgZ2V0X2V4biA9IGZ1bmN0aW9uXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgXyAtPiByYWlzZSBHZXRfZXJyb3JcblxubGV0IGdldF9vciBlIH5kZWZhdWx0ID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5cbmxldCBhcHBseV9vciBmIHggPVxuICBtYXRjaCBmIHggd2l0aFxuICB8IEVycm9yIF8gLT4geFxuICB8IE9rIHkgLT4geVxuXG5sZXQgKCB8Pz4gKSB4IGYgPSBhcHBseV9vciBmIHhcblxubGV0IGdldF9sYXp5IGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGUgLT4gZiBlXG5cbmxldCBnZXRfb3JfZmFpbHdpdGggPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIG1zZyAtPiBmYWlsd2l0aCBtc2dcblxubGV0IG1hcF9vciBmIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgY2F0Y2ggZSB+b2sgfmVyciA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHkgLT4gZXJyIHlcblxubGV0IGZsYXRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBrX2NvbXBvc2UgZiBnIHggPSBmIHggfD4gZmxhdF9tYXAgZ1xubGV0ICggPj0+ICkgPSBrX2NvbXBvc2VcbmxldCAoIDw9PCApIGYgZyA9IGcgPj0+IGZcblxubGV0IGVxdWFsIH5lcnIgZXEgYSBiID1cbiAgbWF0Y2ggYSwgYiB3aXRoXG4gIHwgT2sgeCwgT2sgeSAtPiBlcSB4IHlcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuICB8IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfmVyciBjbXAgYSBiID1cbiAgbWF0Y2ggYSwgYiB3aXRoXG4gIHwgT2sgeCwgT2sgeSAtPiBjbXAgeCB5XG4gIHwgT2sgXywgXyAtPiAxXG4gIHwgXywgT2sgXyAtPiAtMVxuICB8IEVycm9yIHMsIEVycm9yIHMnIC0+IGVyciBzIHMnXG5cbmxldCBmb2xkIH5vayB+ZXJyb3IgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHMgLT4gZXJyb3Igc1xuXG5sZXQgZm9sZF9vayBmIGFjYyByID1cbiAgbWF0Y2ggciB3aXRoXG4gIHwgT2sgeCAtPiBmIGFjYyB4XG4gIHwgRXJyb3IgXyAtPiBhY2NcblxubGV0IGlzX29rID0gZnVuY3Rpb25cbiAgfCBPayBfIC0+IHRydWVcbiAgfCBFcnJvciBfIC0+IGZhbHNlXG5cbmxldCBpc19lcnJvciA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiBmYWxzZVxuICB8IEVycm9yIF8gLT4gdHJ1ZVxuXG4oKiogezIgV3JhcHBlcnN9ICopXG5cbmxldCBndWFyZCBmID0gdHJ5IE9rIChmICgpKSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IGd1YXJkX3N0ciBmID0gdHJ5IE9rIChmICgpKSB3aXRoIGUgLT4gb2ZfZXhuIGVcbmxldCBndWFyZF9zdHJfdHJhY2UgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4bl90cmFjZSBlXG5sZXQgd3JhcDEgZiB4ID0gdHJ5IHJldHVybiAoZiB4KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAyIGYgeCB5ID0gdHJ5IHJldHVybiAoZiB4IHkpIHdpdGggZSAtPiBFcnJvciBlXG5sZXQgd3JhcDMgZiB4IHkgeiA9IHRyeSByZXR1cm4gKGYgeCB5IHopIHdpdGggZSAtPiBFcnJvciBlXG5cbigqKiB7MiBBcHBsaWNhdGl2ZX0gKilcblxubGV0IHB1cmUgPSByZXR1cm5cblxubGV0ICggPCo+ICkgZiB4ID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgRXJyb3IgcyAtPiBmYWlsIHNcbiAgfCBPayBmIC0+IG1hcCBmIHhcblxubGV0IGpvaW4gdCA9XG4gIG1hdGNoIHQgd2l0aFxuICB8IE9rIChPayBvKSAtPiBPayBvXG4gIHwgT2sgKEVycm9yIGUpIC0+IEVycm9yIGVcbiAgfCBFcnJvciBfIGFzIGUgLT4gZVxuXG5sZXQgYm90aCB4IHkgPVxuICBtYXRjaCB4LCB5IHdpdGhcbiAgfCBPayBvLCBPayBvJyAtPiBPayAobywgbycpXG4gIHwgT2sgXywgRXJyb3IgZSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgZSwgXyAtPiBFcnJvciBlXG5cbigqKiB7MiBDb2xsZWN0aW9uc30gKilcblxubGV0IG1hcF9sIGYgbCA9XG4gIGxldCByZWMgbWFwIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE9rIChMaXN0LnJldiBhY2MpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgRXJyb3IgcyAtPiBFcnJvciBzXG4gICAgICB8IE9rIHkgLT4gbWFwICh5IDo6IGFjYykgbCcpXG4gIGluXG4gIG1hcCBbXSBsXG5cbmxldCBmbGF0dGVuX2wgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgT2sgeCA6OiBsJyAtPiBsb29wICh4IDo6IGFjYykgbCdcbiAgICB8IEVycm9yIGUgOjogXyAtPiBFcnJvciBlXG4gIGluXG4gIGxvb3AgW10gbFxuXG5leGNlcHRpb24gTG9jYWxFeGl0XG5cbmxldCBmb2xkX2l0ZXIgZiBhY2Mgc2VxID1cbiAgbGV0IGVyciA9IHJlZiBOb25lIGluXG4gIHRyeVxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgc2VxIChmdW4geCAtPlxuICAgICAgICBtYXRjaCBmICFhY2MgeCB3aXRoXG4gICAgICAgIHwgRXJyb3IgcyAtPlxuICAgICAgICAgIGVyciA6PSBTb21lIHM7XG4gICAgICAgICAgcmFpc2UgTG9jYWxFeGl0XG4gICAgICAgIHwgT2sgeSAtPiBhY2MgOj0geSk7XG4gICAgT2sgIWFjY1xuICB3aXRoIExvY2FsRXhpdCAtPlxuICAgIChtYXRjaCAhZXJyIHdpdGhcbiAgICB8IE5vbmUgLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBTb21lIHMgLT4gRXJyb3IgcylcblxubGV0IGZvbGRfbCBmIGFjYyBsID0gZm9sZF9pdGVyIGYgYWNjIChmdW4gayAtPiBMaXN0Lml0ZXIgayBsKVxuXG4oKiogezIgTWlzY30gKilcblxubGV0IGNob29zZSBsID1cbiAgbGV0IHJlYyBmaW5kXyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IChPayBfIGFzIHJlcykgOjogXyAtPiByZXNcbiAgICB8IEVycm9yIF8gOjogbCcgLT4gZmluZF8gbCdcbiAgaW5cbiAgdHJ5IGZpbmRfIGxcbiAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICBsZXQgbCcgPVxuICAgICAgTGlzdC5tYXBcbiAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgfCBFcnJvciBzIC0+IHNcbiAgICAgICAgICB8IE9rIF8gLT4gYXNzZXJ0IGZhbHNlKVxuICAgICAgICBsXG4gICAgaW5cbiAgICBFcnJvciBsJ1xuXG5sZXQgcmV0cnkgbiBmID1cbiAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgbWF0Y2ggbiB3aXRoXG4gICAgfCAwIC0+IGZhaWwgKExpc3QucmV2IGFjYylcbiAgICB8IF8gLT5cbiAgICAgIChtYXRjaCBmICgpIHdpdGhcbiAgICAgIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gICAgICB8IEVycm9yIGUgLT4gcmV0cnkgKG4gLSAxKSAoZSA6OiBhY2MpKVxuICBpblxuICByZXRyeSBuIFtdXG5cbigqKiB7MiBJbmZpeH0gKilcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoID58PSApIGUgZiA9IG1hcCBmIGVcbiAgbGV0ICggPj49ICkgZSBmID0gZmxhdF9tYXAgZiBlXG4gIGxldCAoIDwqPiApID0gKCA8Kj4gKVxuICBsZXQgKCB8Pz4gKSA9ICggfD8+IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG5cbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIHgxIHgyID1cbiAgICBtYXRjaCB4MSwgeDIgd2l0aFxuICAgIHwgT2sgeCwgT2sgeSAtPiBPayAoeCwgeSlcbiAgICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuICAgIHwgXywgRXJyb3IgZSAtPiBFcnJvciBlXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggPj0+ICkgPSAoID49PiApXG4gIGxldCAoIDw9PCApID0gKCA8PTwgKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIE1vbmFkaWMgT3BlcmF0aW9uc30gKilcblxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIGxldCAoID4+PSApID0gTS4oID4+PSApXG5cbiAgbGV0IG1hcF9tIGYgZSA9XG4gICAgbWF0Y2ggZSB3aXRoXG4gICAgfCBFcnJvciBzIC0+IE0ucmV0dXJuIChFcnJvciBzKVxuICAgIHwgT2sgeCAtPiBmIHggPj49IGZ1biB5IC0+IE0ucmV0dXJuIChPayB5KVxuXG4gIGxldCBzZXF1ZW5jZV9tIG0gPSBtYXBfbSAoZnVuIHggLT4geCkgbVxuXG4gIGxldCBmb2xkX20gZiBhY2MgZSA9XG4gICAgbWF0Y2ggZSB3aXRoXG4gICAgfCBFcnJvciBfIC0+IE0ucmV0dXJuIGFjY1xuICAgIHwgT2sgeCAtPiBmIGFjYyB4ID4+PSBmdW4geSAtPiBNLnJldHVybiB5XG5cbiAgbGV0IHJldHJ5X20gbiBmID1cbiAgICBsZXQgcmVjIHJldHJ5IG4gYWNjID1cbiAgICAgIG1hdGNoIG4gd2l0aFxuICAgICAgfCAwIC0+IE0ucmV0dXJuIChmYWlsIChMaXN0LnJldiBhY2MpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIGYgKCkgPj49ICggZnVuY3Rpb25cbiAgICAgICAgfCBPayB4IC0+IE0ucmV0dXJuIChPayB4KVxuICAgICAgICB8IEVycm9yIGUgLT4gcmV0cnkgKG4gLSAxKSAoZSA6OiBhY2MpIClcbiAgICBpblxuICAgIHJldHJ5IG4gW11cbmVuZFxuXG4oKiogezIgQ29udmVyc2lvbnN9ICopXG5cbmxldCB0b19vcHQgPSBmdW5jdGlvblxuICB8IE9rIHggLT4gU29tZSB4XG4gIHwgRXJyb3IgXyAtPiBOb25lXG5cbmxldCBvZl9vcHQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgXCJvZl9vcHRcIlxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19zZXEgZSAoKSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gU2VxLkNvbnMgKHgsIFNlcS5lbXB0eSlcbiAgfCBFcnJvciBfIC0+IFNlcS5OaWxcblxubGV0IHRvX2l0ZXIgZSBrID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBrIHhcbiAgfCBFcnJvciBfIC0+ICgpXG5cbnR5cGUgKCdhLCAnYikgZXJyb3IgPVxuICBbIGBPayBvZiAnYVxuICB8IGBFcnJvciBvZiAnYlxuICBdXG5cbmxldCBvZl9lcnIgPSBmdW5jdGlvblxuICB8IGBPayB4IC0+IE9rIHhcbiAgfCBgRXJyb3IgeSAtPiBFcnJvciB5XG5cbmxldCB0b19lcnIgPSBmdW5jdGlvblxuICB8IE9rIHggLT4gYE9rIHhcbiAgfCBFcnJvciB5IC0+IGBFcnJvciB5XG5cbigqKiB7MiBJT30gKilcblxubGV0IHBwIHBwX3ggZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVzKUBdXCIgc1xuXG5sZXQgcHAnIHBwX3ggcHBfZSBmbXQgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtvayhALCVhKUBdXCIgcHBfeCB4XG4gIHwgRXJyb3IgcyAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW2Vycm9yKEAsJWEpQF1cIiBwcF9lIHNcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBXcmFwcGVyIGFyb3VuZCBTZXR9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPSBTZXQuT3JkZXJlZFR5cGVcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICBpbmNsdWRlIFNldC5TXG5cbiAgdmFsIG1pbl9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtaW5fZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgbWF4X2VsdF9vcHQgOiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IW1heF9lbHR9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBjaG9vc2Vfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFjaG9vc2V9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX29wdCA6IGVsdCAtPiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWZpbmR9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtaW5pbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfZmlyc3Rfb3B0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWZpbmRfZmlyc3R9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfZmlyc3RfbWFwIGYgc10gZmluZCB0aGUgbWluaW11bSBlbGVtZW50IFt4XSBvZiBbc10gc3VjaCB0aGF0IFtmIHggPSBTb21lIHldXG4gICAgICBhbmQgcmV0dXJuIFtTb21lIHldLiBPdGhlcndpc2UgcmV0dXJucyBbTm9uZV0uXG4gICAgICBAc2luY2UgMy4xMiAqKVxuXG4gIHZhbCBmaW5kX2xhc3QgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICgqKiBGaW5kIG1heGltdW0gZWxlbWVudCBzYXRpc2Z5aW5nIHByZWRpY2F0ZS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2xhc3R9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2xhc3RfbWFwIDogKGVsdCAtPiAnYSBvcHRpb24pIC0+IHQgLT4gJ2Egb3B0aW9uXG4gICgqKiBbZmluZF9sYXN0X21hcCBmIHNdIGZpbmQgdGhlIG1heGltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgb2ZfaXRlciA6IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEJ1aWxkIGEgc2V0IGZyb20gdGhlIGdpdmVuIFtpdGVyXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgKCoqIEJ1aWxkIGEgc2V0IGZyb20gdGhlIGdpdmVuIFtzZXFdIG9mIGVsZW1lbnRzLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCBhZGRfaXRlciA6IHQgLT4gZWx0IGl0ZXIgLT4gdFxuICAoKiogQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfc2VxIDogZWx0IFNlcS50IC0+IHQgLT4gdFxuICAoKiogQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCB0b19pdGVyIDogdCAtPiBlbHQgaXRlclxuICAoKiogW3RvX2l0ZXIgdF0gY29udmVydHMgdGhlIHNldCBbdF0gdG8gYSBbaXRlcl0gb2YgdGhlIGVsZW1lbnRzLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfbGlzdCA6IHQgLT4gZWx0IGxpc3QgLT4gdFxuICAoKiogQHNpbmNlIDAuMTQgKilcblxuICB2YWwgdG9fbGlzdCA6IHQgLT4gZWx0IGxpc3RcbiAgKCoqIFt0b19saXN0IHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgbGlzdCBvZiB0aGUgZWxlbWVudHMuICopXG5cbiAgdmFsIHRvX3N0cmluZyA6XG4gICAgP3N0YXJ0OnN0cmluZyAtPlxuICAgID9zdG9wOnN0cmluZyAtPlxuICAgID9zZXA6c3RyaW5nIC0+XG4gICAgKGVsdCAtPiBzdHJpbmcpIC0+XG4gICAgdCAtPlxuICAgIHN0cmluZ1xuICAoKiogIFByaW50IHRoZSBzZXQgaW4gYSBzdHJpbmdcbiAgICAgICBAc2luY2UgMi43ICopXG5cbiAgdmFsIHBwIDpcbiAgICA/cHBfc3RhcnQ6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3N0b3A6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3NlcDp1bml0IHByaW50ZXIgLT5cbiAgICBlbHQgcHJpbnRlciAtPlxuICAgIHQgcHJpbnRlclxuICAoKiogUHJpbnQgdGhlIHNldC4gKilcbmVuZFxuXG5tb2R1bGUgTWFrZSAoTyA6IE1hcC5PcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcbiAgbW9kdWxlIFMgPSBTZXQuTWFrZSAoTylcblxuICAoKiBiYWNrcG9ydCBmdW5jdGlvbnMgZnJvbSByZWNlbnQgc3RkbGliLlxuICAgICB0aGV5IHdpbGwgYmUgc2hhZG93ZWQgYnkgaW5jbHVzaW9uIG9mIFtTXSBpZiBwcmVzZW50LiAqKVxuXG4gIFtAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbiAgbGV0IGZpbmRfb3B0IHggcyA9IHRyeSBTb21lIChTLmZpbmQgeCBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBjaG9vc2Vfb3B0IHMgPSB0cnkgU29tZSAoUy5jaG9vc2Ugcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgbWluX2VsdF9vcHQgcyA9IHRyeSBTb21lIChTLm1pbl9lbHQgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgbWF4X2VsdF9vcHQgcyA9IHRyeSBTb21lIChTLm1heF9lbHQgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG4gIGV4Y2VwdGlvbiBGaW5kX2JpbmRpbmdfZXhpdFxuXG4gIGxldCBmaW5kX2ZpcnN0X29wdCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIGlmIGYgeCB0aGVuIChcbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHg7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdFxuICAgICAgICAgICkpXG4gICAgICAgIG07XG4gICAgICBOb25lXG4gICAgd2l0aCBGaW5kX2JpbmRpbmdfZXhpdCAtPiAhcmVzXG5cbiAgbGV0IGZpbmRfZmlyc3QgZiBtID1cbiAgICBtYXRjaCBmaW5kX2ZpcnN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgbGV0IGZpbmRfZmlyc3RfbWFwIGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgdHJ5XG4gICAgICBTLml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHJhaXNlIEZpbmRfYmluZGluZ19leGl0KVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gICgqIGxpbmVhciB0aW1lLCBtdXN0IHRyYXZlcnNlIHRoZSB3aG9sZSBzZXTigKYgKilcbiAgbGV0IGZpbmRfbGFzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICBTLml0ZXIgKGZ1biB4IC0+IGlmIGYgeCB0aGVuIHJlcyA6PSBTb21lIHgpIG07XG4gICAgIXJlc1xuXG4gIGxldCBmaW5kX2xhc3QgZiBtID1cbiAgICBtYXRjaCBmaW5kX2xhc3Rfb3B0IGYgbSB3aXRoXG4gICAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgIHwgU29tZSB4IC0+IHhcblxuICBbQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4gIGluY2x1ZGUgU1xuXG4gICgqIFVzZSBmaW5kX2xhc3Qgd2hpY2ggaXMgbGluZWFyIHRpbWUgb24gT0NhbWwgPCA0LjA1ICopXG4gIGxldCBmaW5kX2xhc3RfbWFwIGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgbGV0IF8gPVxuICAgICAgZmluZF9sYXN0X29wdFxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBmYWxzZVxuICAgICAgICAgIHwgU29tZSB5IC0+XG4gICAgICAgICAgICByZXMgOj0gU29tZSB5O1xuICAgICAgICAgICAgdHJ1ZSlcbiAgICAgICAgbVxuICAgIGluXG4gICAgIXJlc1xuXG4gIGxldCBhZGRfc2VxIHNlcSBzZXQgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgU2VxLml0ZXIgKGZ1biB4IC0+IHNldCA6PSBhZGQgeCAhc2V0KSBzZXE7XG4gICAgIXNldFxuXG4gIGxldCBvZl9zZXEgcyA9IGFkZF9zZXEgcyBlbXB0eVxuXG4gIGxldCBhZGRfaXRlciBzZXQgaSA9XG4gICAgbGV0IHNldCA9IHJlZiBzZXQgaW5cbiAgICBpIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCk7XG4gICAgIXNldFxuXG4gIGxldCBvZl9pdGVyIHMgPSBhZGRfaXRlciBlbXB0eSBzXG4gIGxldCB0b19pdGVyIHMgeWllbGQgPSBpdGVyIHlpZWxkIHNcbiAgbGV0IGFkZF9saXN0ID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBzZXQgeCAtPiBhZGQgeCBzZXQpXG4gIGxldCB0b19saXN0ID0gZWxlbWVudHNcblxuICBsZXQgdG9fc3RyaW5nID8oc3RhcnQgPSBcIlwiKSA/KHN0b3AgPSBcIlwiKSA/KHNlcCA9IFwiLFwiKSBlbHRfdG9fc3RyaW5nIGggPVxuICAgIHRvX2xpc3QgaCB8PiBDQ0xpc3QudG9fc3RyaW5nIH5zdGFydCB+c3RvcCB+c2VwIGVsdF90b19zdHJpbmdcblxuICBsZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIikgcHBfeCBmbXQgbSA9XG4gICAgcHBfc3RhcnQgZm10ICgpO1xuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgaXRlclxuICAgICAgKGZ1biB4IC0+XG4gICAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICAgIHBwX3ggZm10IHgpXG4gICAgICBtO1xuICAgIHBwX3N0b3AgZm10ICgpXG5lbmRcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBCYXNpYyBTdHJpbmcgVXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG5cbigqIHN0YW5kYXJkIGltcGxlbWVudGF0aW9ucyAqKVxuXG5pbmNsdWRlIFN0cmluZ1xuXG5sZXQgY29tcGFyZV9pbnQgKGEgOiBpbnQpIGIgPSBTdGRsaWIuY29tcGFyZSBhIGJcbmxldCBjb21wYXJlID0gU3RyaW5nLmNvbXBhcmVcbmxldCBoYXNoIHMgPSBIYXNodGJsLmhhc2ggc1xubGV0IGxlbmd0aCA9IFN0cmluZy5sZW5ndGhcbmxldCBpc19lbXB0eSBzID0gZXF1YWwgcyBcIlwiXG5cbmxldCByZXYgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgaW5pdCBuIChmdW4gaSAtPiBzLltuIC0gaSAtIDFdKVxuXG5sZXQgcmVjIF90b19saXN0IHMgYWNjIGkgbGVuID1cbiAgaWYgbGVuID0gMCB0aGVuXG4gICAgTGlzdC5yZXYgYWNjXG4gIGVsc2VcbiAgICBfdG9fbGlzdCBzIChzLltpXSA6OiBhY2MpIChpICsgMSkgKGxlbiAtIDEpXG5cbmxldCBfaXNfc3ViIH5zdWIgaSBzIGogfmxlbiA9XG4gIGxldCByZWMgY2hlY2sgayA9XG4gICAgaWYgayA9IGxlbiB0aGVuXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgQ0NDaGFyLmVxdWFsIHN1Yi5baSArIGtdIHMuW2ogKyBrXSAmJiBjaGVjayAoayArIDEpXG4gIGluXG4gIGogKyBsZW4gPD0gU3RyaW5nLmxlbmd0aCBzICYmIGNoZWNrIDBcblxubGV0IGlzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBpZiBpICsgbGVuID4gU3RyaW5nLmxlbmd0aCBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLmlzX3N1YlwiO1xuICBfaXNfc3ViIH5zdWIgaSBzIGogfmxlblxuXG50eXBlIF8gZGlyZWN0aW9uID1cbiAgfCBEaXJlY3QgOiBbIGBEaXJlY3QgXSBkaXJlY3Rpb25cbiAgfCBSZXZlcnNlIDogWyBgUmV2ZXJzZSBdIGRpcmVjdGlvblxuXG4oKiB3ZSBmb2xsb3cgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS251dGjigJNNb3JyaXPigJNQcmF0dF9hbGdvcml0aG0gKilcbm1vZHVsZSBGaW5kID0gc3RydWN0XG4gIHR5cGUgJ2Ega21wX3BhdHRlcm4gPSB7XG4gICAgZmFpbHVyZTogaW50IGFycmF5O1xuICAgIHN0cjogc3RyaW5nO1xuICB9XG4gICgqIGludmFyaWFudDogW2xlbmd0aCBmYWlsdXJlID0gbGVuZ3RoIHN0cl0uXG4gICAgIFdlIHVzZSBhIHBoYW50b20gdHlwZSB0byBhdm9pZCBtaXhpbmcgdGhlIGRpcmVjdGlvbnMuICopXG5cbiAgbGV0IGttcF9wYXR0ZXJuX2xlbmd0aCBwID0gU3RyaW5nLmxlbmd0aCBwLnN0clxuXG4gICgqIGFjY2VzcyB0aGUgW2ldLXRoIGVsZW1lbnQgb2YgW3NdIGFjY29yZGluZyB0byBkaXJlY3Rpb24gW2Rpcl0gKilcbiAgbGV0IGdldF8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPVxuICAgZnVuIH5kaXIgLT5cbiAgICBtYXRjaCBkaXIgd2l0aFxuICAgIHwgRGlyZWN0IC0+IFN0cmluZy5nZXRcbiAgICB8IFJldmVyc2UgLT4gZnVuIHMgaSAtPiBzLltTdHJpbmcubGVuZ3RoIHMgLSBpIC0gMV1cblxuICBsZXQga21wX2NvbXBpbGVfIDogdHlwZSBhLiBkaXI6YSBkaXJlY3Rpb24gLT4gc3RyaW5nIC0+IGEga21wX3BhdHRlcm4gPVxuICAgZnVuIH5kaXIgc3RyIC0+XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzdHIgaW5cbiAgICBsZXQgZ2V0ID0gZ2V0XyB+ZGlyIGluXG4gICAgKCogaG93IHRvIHJlYWQgZWxlbWVudHMgb2YgdGhlIHN0cmluZyAqKVxuICAgIG1hdGNoIGxlbiB3aXRoXG4gICAgfCAwIC0+IHsgZmFpbHVyZSA9IFt8fF07IHN0ciB9XG4gICAgfCAxIC0+IHsgZmFpbHVyZSA9IFt8IC0xIHxdOyBzdHIgfVxuICAgIHwgXyAtPlxuICAgICAgKCogYXQgbGVhc3QgMiBlbGVtZW50cywgdGhlIGFsZ29yaXRobSBjYW4gd29yayAqKVxuICAgICAgbGV0IGZhaWx1cmUgPSBBcnJheS5tYWtlIGxlbiAwIGluXG4gICAgICBmYWlsdXJlLigwKSA8LSAtMTtcbiAgICAgICgqIGk6IGN1cnJlbnQgaW5kZXggaW4gc3RyICopXG4gICAgICBsZXQgaSA9IHJlZiAyIGluXG4gICAgICAoKiBqOiBpbmRleCBvZiBjYW5kaWRhdGUgc3Vic3RyaW5nICopXG4gICAgICBsZXQgaiA9IHJlZiAwIGluXG4gICAgICB3aGlsZSAhaSA8IGxlbiBkb1xuICAgICAgICBtYXRjaCAhaiB3aXRoXG4gICAgICAgIHwgXyB3aGVuIENDQ2hhci5lcXVhbCAoZ2V0IHN0ciAoIWkgLSAxKSkgKGdldCBzdHIgIWopIC0+XG4gICAgICAgICAgKCogc3Vic3RyaW5nIHN0YXJ0aW5nIGF0ICFqIGNvbnRpbnVlcyBtYXRjaGluZyBjdXJyZW50IGNoYXIgKilcbiAgICAgICAgICBpbmNyIGo7XG4gICAgICAgICAgZmFpbHVyZS4oIWkpIDwtICFqO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IDAgLT5cbiAgICAgICAgICAoKiBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgKilcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gMDtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgKCogZmFsbGJhY2sgZm9yIHRoZSBwcmVmaXggc3RyaW5nICopXG4gICAgICAgICAgYXNzZXJ0ICghaiA+IDApO1xuICAgICAgICAgIGogOj0gZmFpbHVyZS4oIWopXG4gICAgICBkb25lO1xuICAgICAgKCogRm9ybWF0LnByaW50ZiBcIntAW2ZhaWx1cmU6JWEsIHN0cjolc0BdfUAuXCIgQ0NGb3JtYXQuKGFycmF5IGludCkgZmFpbHVyZSBzdHI7ICopXG4gICAgICB7IGZhaWx1cmU7IHN0ciB9XG5cbiAgbGV0IGttcF9jb21waWxlIHMgPSBrbXBfY29tcGlsZV8gfmRpcjpEaXJlY3Qgc1xuICBsZXQga21wX3Jjb21waWxlIHMgPSBrbXBfY29tcGlsZV8gfmRpcjpSZXZlcnNlIHNcblxuICAoKiBwcm9wZXIgc2VhcmNoIGZ1bmN0aW9uLlxuICAgICBbaV0gaW5kZXggaW4gW3NdXG4gICAgIFtqXSBpbmRleCBpbiBbcGF0dGVybl1cbiAgICAgW2xlbl0gbGVuZ3RoIG9mIFtzXSAqKVxuICBsZXQga21wX2ZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIGlkeCBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzICghaSArICFqKSBpblxuICAgICAgbGV0IGV4cGVjdGVkID0gU3RyaW5nLmdldCBwYXR0ZXJuLnN0ciAhaiBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBpZiAhaiA9IHBhdF9sZW4gdGhlblxuICAgICAgIWlcbiAgICBlbHNlXG4gICAgICAtMVxuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24sIGZyb20gdGhlIHJpZ2h0LlxuICAgICBbaV0gaW5kZXggaW4gW3NdXG4gICAgIFtqXSBpbmRleCBpbiBbcGF0dGVybl1cbiAgICAgW2xlbl0gbGVuZ3RoIG9mIFtzXSAqKVxuICBsZXQga21wX3JmaW5kIH5wYXR0ZXJuIHMgaWR4ID1cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgICBsZXQgaSA9IHJlZiAobGVuIC0gaWR4IC0gMSkgaW5cbiAgICBsZXQgaiA9IHJlZiAwIGluXG4gICAgbGV0IHBhdF9sZW4gPSBrbXBfcGF0dGVybl9sZW5ndGggcGF0dGVybiBpblxuICAgIHdoaWxlICFqIDwgcGF0X2xlbiAmJiAhaSArICFqIDwgbGVuIGRvXG4gICAgICBsZXQgYyA9IFN0cmluZy5nZXQgcyAobGVuIC0gIWkgLSAhaiAtIDEpIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPVxuICAgICAgICBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyIChTdHJpbmcubGVuZ3RoIHBhdHRlcm4uc3RyIC0gIWogLSAxKVxuICAgICAgaW5cbiAgICAgIGlmIENDQ2hhci5lcXVhbCBjIGV4cGVjdGVkIHRoZW5cbiAgICAgICAgKCogY2hhciBtYXRjaGVzICopXG4gICAgICAgIGluY3IgalxuICAgICAgZWxzZSAoXG4gICAgICAgIGxldCBmYWlsX29mZnNldCA9IHBhdHRlcm4uZmFpbHVyZS4oIWopIGluXG4gICAgICAgIGlmIGZhaWxfb2Zmc2V0ID49IDAgdGhlbiAoXG4gICAgICAgICAgYXNzZXJ0IChmYWlsX29mZnNldCA8ICFqKTtcbiAgICAgICAgICAoKiBmb2xsb3cgdGhlIGZhaWx1cmUgbGluayAqKVxuICAgICAgICAgIGkgOj0gIWkgKyAhaiAtIGZhaWxfb2Zmc2V0O1xuICAgICAgICAgIGogOj0gZmFpbF9vZmZzZXRcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgcGF0dGVybiAqKVxuICAgICAgICAgIGogOj0gMDtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIGRvbmU7XG4gICAgKCogYWRqdXN0IHJlc3VsdDogZmlyc3QsIFtyZXMgPSBzdHJpbmcubGVuZ3RoIHMgLSByZXMgLTFdIHRvIGNvbnZlcnRcbiAgICAgICBiYWNrIHRvIHJlYWwgaW5kaWNlczsgdGhlbiwgd2hhdCB3ZSBnb3QgaXMgYWN0dWFsbHkgdGhlIHBvc2l0aW9uXG4gICAgICAgb2YgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgc28gd2Ugc3VidHJhY3QgdGhlIFtsZW5ndGggb2YgdGhlIHBhdHRlcm4gLTFdXG4gICAgICAgdG8gb2J0YWluIHRoZSByZWFsIHJlc3VsdC4gKilcbiAgICBpZiAhaiA9IHBhdF9sZW4gdGhlblxuICAgICAgbGVuIC0gIWkgLSBrbXBfcGF0dGVybl9sZW5ndGggcGF0dGVyblxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgdHlwZSAnYSBwYXR0ZXJuID1cbiAgICB8IFBfY2hhciBvZiBjaGFyXG4gICAgfCBQX0tNUCBvZiAnYSBrbXBfcGF0dGVyblxuXG4gIGxldCBwYXR0ZXJuX2xlbmd0aCA9IGZ1bmN0aW9uXG4gICAgfCBQX2NoYXIgXyAtPiAxXG4gICAgfCBQX0tNUCBwIC0+IGttcF9wYXR0ZXJuX2xlbmd0aCBwXG5cbiAgbGV0IGNvbXBpbGUgc3ViIDogWyBgRGlyZWN0IF0gcGF0dGVybiA9XG4gICAgaWYgbGVuZ3RoIHN1YiA9IDEgdGhlblxuICAgICAgUF9jaGFyIHN1Yi5bMF1cbiAgICBlbHNlXG4gICAgICBQX0tNUCAoa21wX2NvbXBpbGUgc3ViKVxuXG4gIGxldCByY29tcGlsZSBzdWIgOiBbIGBSZXZlcnNlIF0gcGF0dGVybiA9XG4gICAgaWYgbGVuZ3RoIHN1YiA9IDEgdGhlblxuICAgICAgUF9jaGFyIHN1Yi5bMF1cbiAgICBlbHNlXG4gICAgICBQX0tNUCAoa21wX3Jjb21waWxlIHN1YilcblxuICBsZXQgZmluZCA/KHN0YXJ0ID0gMCkgfihwYXR0ZXJuIDogWyBgRGlyZWN0IF0gcGF0dGVybikgcyA9XG4gICAgbWF0Y2ggcGF0dGVybiB3aXRoXG4gICAgfCBQX2NoYXIgYyAtPiAodHJ5IFN0cmluZy5pbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX2ZpbmQgfnBhdHRlcm4gcyBzdGFydFxuXG4gIGxldCByZmluZCA/c3RhcnQgfihwYXR0ZXJuIDogWyBgUmV2ZXJzZSBdIHBhdHRlcm4pIHMgPVxuICAgIGxldCBzdGFydCA9XG4gICAgICBtYXRjaCBzdGFydCB3aXRoXG4gICAgICB8IFNvbWUgbiAtPiBuXG4gICAgICB8IE5vbmUgLT4gU3RyaW5nLmxlbmd0aCBzIC0gMVxuICAgIGluXG4gICAgbWF0Y2ggcGF0dGVybiB3aXRoXG4gICAgfCBQX2NoYXIgYyAtPiAodHJ5IFN0cmluZy5yaW5kZXhfZnJvbSBzIHN0YXJ0IGMgd2l0aCBOb3RfZm91bmQgLT4gLTEpXG4gICAgfCBQX0tNUCBwYXR0ZXJuIC0+IGttcF9yZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5lbmRcblxubGV0IGZpbmQgPyhzdGFydCA9IDApIH5zdWIgPVxuICBsZXQgcGF0dGVybiA9IEZpbmQuY29tcGlsZSBzdWIgaW5cbiAgZnVuIHMgLT4gRmluZC5maW5kIH5zdGFydCB+cGF0dGVybiBzXG5cbmxldCBmaW5kX2FsbCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPlxuICAgIGxldCBpID0gcmVmIHN0YXJ0IGluXG4gICAgZnVuICgpIC0+XG4gICAgICBsZXQgcmVzID0gRmluZC5maW5kIH5zdGFydDohaSB+cGF0dGVybiBzIGluXG4gICAgICBpZiByZXMgPSB+LTEgdGhlblxuICAgICAgICBOb25lXG4gICAgICBlbHNlIChcbiAgICAgICAgaSA6PSByZXMgKyAxO1xuICAgICAgICAoKiBwb3NzaWJsZSBvdmVybGFwICopXG4gICAgICAgIFNvbWUgcmVzXG4gICAgICApXG5cbmxldCBmaW5kX2FsbF9sID9zdGFydCB+c3ViIHMgPVxuICBsZXQgcmVjIGF1eCBhY2MgZyA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgIHwgU29tZSBpIC0+IGF1eCAoaSA6OiBhY2MpIGdcbiAgaW5cbiAgYXV4IFtdIChmaW5kX2FsbCA/c3RhcnQgfnN1YiBzKVxuXG5sZXQgbWVtID9zdGFydCB+c3ViIHMgPSBmaW5kID9zdGFydCB+c3ViIHMgPj0gMFxuXG5sZXQgcmZpbmQgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5yY29tcGlsZSBzdWIgaW5cbiAgZnVuIHMgLT4gRmluZC5yZmluZCB+c3RhcnQ6KFN0cmluZy5sZW5ndGggcyAtIDEpIH5wYXR0ZXJuIHNcblxuKCogUmVwbGFjZSBzdWJzdHJpbmcgW3MuW3Bvc10g4oCmIHMuW3BvcytsZW4tMV1dIGJ5IFtieV0gaW4gW3NdICopXG5sZXQgcmVwbGFjZV9hdF8gfnBvcyB+bGVuIH5ieSBzID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChsZW5ndGggcyArIGxlbmd0aCBieSAtIGxlbikgaW5cbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzIDAgcG9zO1xuICBCdWZmZXIuYWRkX3N0cmluZyBiIGJ5O1xuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgKHBvcyArIGxlbikgKFN0cmluZy5sZW5ndGggcyAtIHBvcyAtIGxlbik7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCByZXBsYWNlID8od2hpY2ggPSBgQWxsKSB+c3ViIH5ieSBzID1cbiAgaWYgaXNfZW1wdHkgc3ViIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5yZXBsYWNlXCI7XG4gIG1hdGNoIHdoaWNoIHdpdGhcbiAgfCBgTGVmdCAtPlxuICAgIGxldCBpID0gZmluZCB+c3RhcnQ6MCB+c3ViIHMgaW5cbiAgICBpZiBpID49IDAgdGhlblxuICAgICAgcmVwbGFjZV9hdF8gfnBvczppIH5sZW46KFN0cmluZy5sZW5ndGggc3ViKSB+Ynkgc1xuICAgIGVsc2VcbiAgICAgIHNcbiAgfCBgUmlnaHQgLT5cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBBbGwgLT5cbiAgICAoKiBjb21waWxlIHNlYXJjaCBwYXR0ZXJuIG9ubHkgb25jZSAqKVxuICAgIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICAgIGxldCBzdGFydCA9IHJlZiAwIGluXG4gICAgd2hpbGUgIXN0YXJ0IDwgU3RyaW5nLmxlbmd0aCBzIGRvXG4gICAgICBsZXQgaSA9IEZpbmQuZmluZCB+c3RhcnQ6IXN0YXJ0IH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIGkgPj0gMCB0aGVuIChcbiAgICAgICAgKCogYmV0d2VlbiBsYXN0IGFuZCBjdXIgb2NjdXJyZW5jZXMgKilcbiAgICAgICAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzICFzdGFydCAoaSAtICFzdGFydCk7XG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gICAgICAgIHN0YXJ0IDo9IGkgKyBTdHJpbmcubGVuZ3RoIHN1YlxuICAgICAgKSBlbHNlIChcbiAgICAgICAgKCogYWRkIHJlbWFpbmRlciAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChTdHJpbmcubGVuZ3RoIHMgLSAhc3RhcnQpO1xuICAgICAgICBzdGFydCA6PSBTdHJpbmcubGVuZ3RoIHMgKCogc3RvcCAqKVxuICAgICAgKVxuICAgIGRvbmU7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcblxubW9kdWxlIFNwbGl0ID0gc3RydWN0XG4gIHR5cGUgZHJvcF9pZl9lbXB0eSA9IHtcbiAgICBmaXJzdDogYm9vbDtcbiAgICBsYXN0OiBib29sO1xuICB9XG5cbiAgbGV0IG5vX2Ryb3AgPSB7IGZpcnN0ID0gZmFsc2U7IGxhc3QgPSBmYWxzZSB9XG4gIGxldCBkZWZhdWx0X2Ryb3AgPSBub19kcm9wXG5cbiAgdHlwZSBzcGxpdF9zdGF0ZSA9XG4gICAgfCBTcGxpdFN0b3BcbiAgICB8IFNwbGl0QXQgb2YgaW50ICgqIHByZXZpb3VzICopXG5cbiAgbGV0IHJlYyBfc3BsaXQgfmJ5IHMgc3RhdGUgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IFNwbGl0U3RvcCAtPiBOb25lXG4gICAgfCBTcGxpdEF0IHByZXYgLT4gX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2XG5cbiAgYW5kIF9zcGxpdF9zZWFyY2ggfmJ5IHMgcHJldiA9XG4gICAgbGV0IGogPSBGaW5kLmZpbmQgfnN0YXJ0OnByZXYgfnBhdHRlcm46YnkgcyBpblxuICAgIGlmIGogPCAwIHRoZW5cbiAgICAgIFNvbWUgKFNwbGl0U3RvcCwgcHJldiwgU3RyaW5nLmxlbmd0aCBzIC0gcHJldilcbiAgICBlbHNlXG4gICAgICBTb21lIChTcGxpdEF0IChqICsgRmluZC5wYXR0ZXJuX2xlbmd0aCBieSksIHByZXYsIGogLSBwcmV2KVxuXG4gIGxldCBfdHVwbGUzIHggeSB6ID0geCwgeSwgelxuXG4gIGxldCBfbWtnZW4gfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IHN0YXRlID0gcmVmIChTcGxpdEF0IDApIGluXG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyAhc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT5cbiAgICAgICAgc3RhdGUgOj0gc3RhdGUnO1xuICAgICAgICBuZXh0ICgpXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBOb25lXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIFNvbWUgKGsgcyBpIGxlbilcbiAgICBpblxuICAgIG5leHRcblxuICBsZXQgZ2VuID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgZ2VuX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rZ2VuIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rbGlzdCB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIGJ1aWxkIGFjYyBzdGF0ZSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBidWlsZCBhY2Mgc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBMaXN0LnJldiBhY2NcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IGJ1aWxkIChrIHMgaSBsZW4gOjogYWNjKSBzdGF0ZSdcbiAgICBpblxuICAgIGJ1aWxkIFtdIChTcGxpdEF0IDApXG5cbiAgbGV0IGxpc3RfID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGxpc3RfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rc2VxIH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgbWFrZSBzdGF0ZSAoKSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gbWFrZSBzdGF0ZScgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IFNlcS5Db25zIChrIHMgaSBsZW4sIG1ha2Ugc3RhdGUnKVxuICAgIGluXG4gICAgbWFrZSAoU3BsaXRBdCAwKVxuXG4gIGxldCBzZXEgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBzZXFfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtzZXEgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtfaXRlciB+ZHJvcCB+YnkgcyBmIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYXV4IHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gYXV4IHN0YXRlJ1xuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIGsgKGYgcyBpIGxlbik7XG4gICAgICAgIGF1eCBzdGF0ZSdcbiAgICBpblxuICAgIGF1eCAoU3BsaXRBdCAwKVxuXG4gIGxldCBpdGVyID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBpdGVyX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rX2l0ZXIgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBsZWZ0X2V4biB+YnkgcyA9XG4gICAgbGV0IGkgPSBmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IGxlZnQgfmJ5IHMgPSB0cnkgU29tZSAobGVmdF9leG4gfmJ5IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBsZXQgcmlnaHRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IHJpZ2h0IH5ieSBzID0gdHJ5IFNvbWUgKHJpZ2h0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuZW5kXG5cbmxldCBzcGxpdCB+YnkgcyA9IFNwbGl0Lmxpc3RfY3B5IH5ieSBzXG5cbmxldCBjb21wYXJlX3ZlcnNpb25zIGEgYiA9XG4gIGxldCBvZl9pbnQgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmUgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggb2ZfaW50IHgsIG9mX2ludCB5IHdpdGhcbiAgICAgIHwgTm9uZSwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IFN0cmluZy5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBhKSAoU3BsaXQuZ2VuX2NweSB+Ynk6XCIuXCIgYilcblxudHlwZSBuYXRfY2h1bmsgPVxuICB8IE5DX2NoYXIgb2YgY2hhclxuICB8IE5DX2ludCBvZiBpbnRcblxubGV0IGNvbXBhcmVfbmF0dXJhbCBhIGIgPVxuICAoKiBzdHJlYW0gb2YgY2h1bmtzICopXG4gIGxldCBjaHVua3MgcyA6IHVuaXQgLT4gbmF0X2NodW5rIG9wdGlvbiA9XG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCByZWMgbmV4dCAoKSA9XG4gICAgICBpZiAhaSA9IGxlbmd0aCBzIHRoZW5cbiAgICAgICAgTm9uZVxuICAgICAgZWxzZSAoXG4gICAgICAgIG1hdGNoIFN0cmluZy5nZXQgcyAhaSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIHJlYWRfaW50IChDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICBTb21lIChOQ19jaGFyIGMpXG4gICAgICApXG4gICAgYW5kIHJlYWRfaW50IG4gPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIFNvbWUgKE5DX2ludCBuKVxuICAgICAgZWxzZSAoXG4gICAgICAgIG1hdGNoIFN0cmluZy5nZXQgcyAhaSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIHJlYWRfaW50ICgoMTAgKiBuKSArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJylcbiAgICAgICAgfCBfIC0+IFNvbWUgKE5DX2ludCBuKVxuICAgICAgKVxuICAgIGluXG4gICAgbmV4dFxuICBpblxuICBsZXQgcmVjIGNtcF9yZWMgYSBiID1cbiAgICBtYXRjaCBhICgpLCBiICgpIHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gMFxuICAgIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgIHwgU29tZSB4LCBTb21lIHkgLT5cbiAgICAgIChtYXRjaCB4LCB5IHdpdGhcbiAgICAgIHwgTkNfY2hhciB4LCBOQ19jaGFyIHkgLT5cbiAgICAgICAgbGV0IGMgPSBDaGFyLmNvbXBhcmUgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGJcbiAgICAgIHwgTkNfaW50IF8sIE5DX2NoYXIgXyAtPiAxXG4gICAgICB8IE5DX2NoYXIgXywgTkNfaW50IF8gLT4gLTFcbiAgICAgIHwgTkNfaW50IHgsIE5DX2ludCB5IC0+XG4gICAgICAgIGxldCBjID0gY29tcGFyZV9pbnQgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGIpXG4gIGluXG4gIGNtcF9yZWMgKGNodW5rcyBhKSAoY2h1bmtzIGIpXG5cbmxldCBlZGl0X2Rpc3RhbmNlID8oY3V0b2ZmID0gbWF4X2ludCkgczEgczIgPVxuICBsZXQgbjEgPSBsZW5ndGggczEgaW5cbiAgbGV0IG4yID0gbGVuZ3RoIHMyIGluXG4gIGlmIG4xID0gMCB0aGVuXG4gICAgbWluIGN1dG9mZiBuMlxuICBlbHNlIGlmIG4yID0gMCB0aGVuXG4gICAgbWluIGN1dG9mZiBuMVxuICBlbHNlIGlmIGVxdWFsIHMxIHMyIHRoZW5cbiAgICAwXG4gIGVsc2UgaWYgbjEgLSBuMiA+PSBjdXRvZmYgfHwgbjIgLSBuMSA+PSBjdXRvZmYgdGhlblxuICAgIGN1dG9mZlxuICAoKiBhdCBsZWFzdCBjdXRvZmYgaW5zZXJ0cyAqKVxuICBlbHNlIChcbiAgICB0cnlcbiAgICAgICgqIGRpc3RhbmNlIHZlY3RvcnMgKHYwPXByZXZpb3VzLCB2MT1jdXJyZW50KSAqKVxuICAgICAgbGV0IHYwID0gQXJyYXkubWFrZSAobGVuZ3RoIHMyICsgMSkgMCBpblxuICAgICAgbGV0IHYxID0gQXJyYXkubWFrZSAobGVuZ3RoIHMyICsgMSkgMCBpblxuICAgICAgKCogaW5pdGlhbGl6ZSB2MDogdjAoaSkgPSBBKDApKGkpID0gZGVsZXRlIGkgY2hhcnMgZnJvbSB0ICopXG4gICAgICBsZXQgbG93ZXJfYm91bmQgPSByZWYgbWF4X2ludCBpblxuICAgICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzMiBkb1xuICAgICAgICB2MC4oaSkgPC0gaVxuICAgICAgZG9uZTtcbiAgICAgICgqIG1haW4gbG9vcCBmb3IgdGhlIGJvdHRvbSB1cCBkeW5hbWljIGFsZ29yaXRobSAqKVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzMSAtIDEgZG9cbiAgICAgICAgKCogZmlyc3QgZWRpdCBkaXN0YW5jZSBpcyB0aGUgZGVsZXRpb24gb2YgaSsxIGVsZW1lbnRzIGZyb20gcyAqKVxuICAgICAgICB2MS4oMCkgPC0gaSArIDE7XG5cbiAgICAgICAgKCogdHJ5IGFkZC9kZWxldGUvcmVwbGFjZSBvcGVyYXRpb25zICopXG4gICAgICAgIGZvciBqID0gMCB0byBsZW5ndGggczIgLSAxIGRvXG4gICAgICAgICAgbGV0IGNvc3QgPVxuICAgICAgICAgICAgaWYgQ2hhci5lcXVhbCAoU3RyaW5nLmdldCBzMSBpKSAoU3RyaW5nLmdldCBzMiBqKSB0aGVuXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgIGluXG4gICAgICAgICAgdjEuKGogKyAxKSA8LSBtaW4gKHYxLihqKSArIDEpIChtaW4gKHYwLihqICsgMSkgKyAxKSAodjAuKGopICsgY29zdCkpXG4gICAgICAgIGRvbmU7XG5cbiAgICAgICAgaWZcbiAgICAgICAgICBjdXRvZmYgPCBBcnJheS5sZW5ndGggdjFcbiAgICAgICAgICAmJiBpIDw9IDIgKiBjdXRvZmZcbiAgICAgICAgICAmJiAoMiAqIGN1dG9mZikgLSBpIDwgU3RyaW5nLmxlbmd0aCBzMlxuICAgICAgICB0aGVuXG4gICAgICAgICAgbG93ZXJfYm91bmQgOj0gbWluICFsb3dlcl9ib3VuZCB2MS4oKDIgKiBjdXRvZmYpIC0gaSk7XG4gICAgICAgICgqIGRpZCB3ZSBjb21wdXRlIHVwIHRvIHRoZSBkaWFnb25hbCAyKmN1dG9mZisxPyAqKVxuICAgICAgICBpZiBjdXRvZmYgPCBBcnJheS5sZW5ndGggdjEgJiYgaSA9IGN1dG9mZiAqIDIgJiYgIWxvd2VyX2JvdW5kID49IGN1dG9mZlxuICAgICAgICB0aGVuXG4gICAgICAgICAgcmFpc2Vfbm90cmFjZSBFeGl0O1xuXG4gICAgICAgICgqIGNvcHkgdjEgaW50byB2MCBmb3IgbmV4dCBpdGVyYXRpb24gKilcbiAgICAgICAgQXJyYXkuYmxpdCB2MSAwIHYwIDAgKGxlbmd0aCBzMiArIDEpXG4gICAgICBkb25lO1xuICAgICAgdjEuKGxlbmd0aCBzMilcbiAgICB3aXRoIEV4aXQgLT4gY3V0b2ZmXG4gIClcblxubGV0IHJlcGVhdCBzIG4gPVxuICBhc3NlcnQgKG4gPj0gMCk7XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYXNzZXJ0IChsZW4gPiAwKTtcbiAgaW5pdCAobGVuICogbikgKGZ1biBpIC0+IHMuW2kgbW9kIGxlbl0pXG5cbmxldCBwcmVmaXggfnByZSBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcHJlIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IHJlYyBjaGVjayBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgICB0cnVlXG4gICAgICBlbHNlIGlmIFN0ZGxpYi4oIDw+ICkgKFN0cmluZy51bnNhZmVfZ2V0IHMgaSkgKFN0cmluZy51bnNhZmVfZ2V0IHByZSBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHN1ZmZpeCB+c3VmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdWYgaW5cbiAgaWYgbGVuID4gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBmYWxzZVxuICBlbHNlIChcbiAgICBsZXQgb2ZmID0gU3RyaW5nLmxlbmd0aCBzIC0gbGVuIGluXG4gICAgbGV0IHJlYyBjaGVjayBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgICB0cnVlXG4gICAgICBlbHNlIGlmXG4gICAgICAgIFN0ZGxpYi4oIDw+ICkgKFN0cmluZy51bnNhZmVfZ2V0IHMgKG9mZiArIGkpKSAoU3RyaW5nLnVuc2FmZV9nZXQgc3VmIGkpXG4gICAgICB0aGVuXG4gICAgICAgIGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIGNoZWNrIChpICsgMSlcbiAgICBpblxuICAgIGNoZWNrIDBcbiAgKVxuXG5sZXQgdGFrZSBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgMCBuXG4gIGVsc2VcbiAgICBzXG5cbmxldCBkcm9wIG4gcyA9XG4gIGlmIG4gPCBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIFN0cmluZy5zdWIgcyBuIChTdHJpbmcubGVuZ3RoIHMgLSBuKVxuICBlbHNlXG4gICAgXCJcIlxuXG5sZXQgdGFrZV9kcm9wIG4gcyA9IHRha2UgbiBzLCBkcm9wIG4gc1xuXG5sZXQgY2hvcF9zdWZmaXggfnN1ZiBzID1cbiAgaWYgc3VmZml4IH5zdWYgcyB0aGVuXG4gICAgU29tZSAoU3RyaW5nLnN1YiBzIDAgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggc3VmKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGNob3BfcHJlZml4IH5wcmUgcyA9XG4gIGlmIHByZWZpeCB+cHJlIHMgdGhlblxuICAgIFNvbWVcbiAgICAgIChTdHJpbmcuc3ViIHMgKFN0cmluZy5sZW5ndGggcHJlKSAoU3RyaW5nLmxlbmd0aCBzIC0gU3RyaW5nLmxlbmd0aCBwcmUpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgYmxpdCA9IFN0cmluZy5ibGl0XG5cbmxldCBmb2xkIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBzLltpXSkgcyAoaSArIDEpXG4gIGluXG4gIGZvbGRfcmVjIGYgYWNjIHMgMFxuXG5sZXQgZm9sZGkgZiBhY2MgcyA9XG4gIGxldCByZWMgZm9sZF9yZWMgZiBhY2MgcyBpID1cbiAgICBpZiBpID0gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGZvbGRfcmVjIGYgKGYgYWNjIGkgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IHBhZCA/KHNpZGUgPSBgTGVmdCkgPyhjID0gJyAnKSBuIHMgPVxuICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgaWYgbGVuX3MgPj0gbiB0aGVuXG4gICAgc1xuICBlbHNlIChcbiAgICBsZXQgcGFkX2xlbiA9IG4gLSBsZW5fcyBpblxuICAgIG1hdGNoIHNpZGUgd2l0aFxuICAgIHwgYExlZnQgLT5cbiAgICAgIGluaXQgbiAoZnVuIGkgLT5cbiAgICAgICAgICBpZiBpIDwgcGFkX2xlbiB0aGVuXG4gICAgICAgICAgICBjXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgcy5baSAtIHBhZF9sZW5dKVxuICAgIHwgYFJpZ2h0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IGxlbl9zIHRoZW5cbiAgICAgICAgICAgIHMuW2ldXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYylcbiAgKVxuXG5sZXQgX3RvX2dlbiBzIGkwIGxlbiA9XG4gIGxldCBpID0gcmVmIGkwIGluXG4gIGZ1biAoKSAtPlxuICAgIGlmICFpID0gaTAgKyBsZW4gdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2UgKFxuICAgICAgbGV0IGMgPSBTdHJpbmcudW5zYWZlX2dldCBzICFpIGluXG4gICAgICBpbmNyIGk7XG4gICAgICBTb21lIGNcbiAgICApXG5cbmxldCB0b19nZW4gcyA9IF90b19nZW4gcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5sZXQgb2ZfY2hhciBjID0gU3RyaW5nLm1ha2UgMSBjXG5cbmxldCBvZl9nZW4gZyA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBsZXQgcmVjIGF1eCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IEJ1ZmZlci5jb250ZW50cyBiXG4gICAgfCBTb21lIGMgLT5cbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBiIGM7XG4gICAgICBhdXggKClcbiAgaW5cbiAgYXV4ICgpXG5cbmxldCB0b19pdGVyIHMgayA9IFN0cmluZy5pdGVyIGsgc1xuXG5sZXQgcmVjIF90b19zZXEgcyBpIGxlbiAoKSA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIFNlcS5OaWxcbiAgZWxzZVxuICAgIFNlcS5Db25zIChzLltpXSwgX3RvX3NlcSBzIChpICsgMSkgKGxlbiAtIDEpKVxuXG5sZXQgdG9fc2VxIHMgPSBfdG9fc2VxIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIGkgKEJ1ZmZlci5hZGRfY2hhciBiKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IG9mX3NlcSBzZXEgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgU2VxLml0ZXIgKEJ1ZmZlci5hZGRfY2hhciBiKSBzZXE7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCB0b19saXN0IHMgPSBfdG9fbGlzdCBzIFtdIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2xpc3QgbCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChMaXN0Lmxlbmd0aCBsKSBpblxuICBMaXN0Lml0ZXIgKEJ1ZmZlci5hZGRfY2hhciBidWYpIGw7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IG9mX2FycmF5IGEgPSBpbml0IChBcnJheS5sZW5ndGggYSkgKGZ1biBpIC0+IGEuKGkpKVxubGV0IHRvX2FycmF5IHMgPSBBcnJheS5pbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaSAtPiBzLltpXSlcblxubGV0IGxpbmVzX2dlbiBzID1cbiAgU3BsaXQuZ2VuX2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgbGluZXNfaXRlciBzID1cbiAgU3BsaXQuaXRlcl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX3NlcSBzID1cbiAgU3BsaXQuc2VxX2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgbGluZXMgcyA9XG4gIFNwbGl0Lmxpc3RfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBjb25jYXRfZ2VuX2J1ZiB+c2VwIGcgOiBCdWZmZXIudCA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IHJlYyBhdXggfmZpcnN0ICgpID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gYlxuICAgIHwgU29tZSBzIC0+XG4gICAgICBpZiBub3QgZmlyc3QgdGhlbiBCdWZmZXIuYWRkX3N0cmluZyBiIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgICAgIGF1eCB+Zmlyc3Q6ZmFsc2UgKClcbiAgaW5cbiAgYXV4IH5maXJzdDp0cnVlICgpXG5cbmxldCBjb25jYXRfZ2VuIH5zZXAgZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwIGcgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIGkgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpO1xuICBidWZcblxubGV0IGNvbmNhdF9pdGVyIH5zZXAgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcCBpIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9zZXFfYnVmIH5zZXAgc2VxIDogQnVmZmVyLnQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIHMgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcylcbiAgICBzZXE7XG4gIGJ1ZlxuXG5sZXQgY29uY2F0X3NlcSB+c2VwIHNlcSA9XG4gIGxldCBidWYgPSBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzIGwgPVxuICBsZXQgbGVuID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBuIHMgLT4gbiArIDEgKyBTdHJpbmcubGVuZ3RoIHMpIDAgbCBpblxuICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIGxlbiBpblxuICBsZXQgcmVjIGF1eF9ibGl0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPlxuICAgICAgYXNzZXJ0IChpID0gbGVuKTtcbiAgICAgIEJ5dGVzLnRvX3N0cmluZyBidWZcbiAgICB8IHMgOjogdGFpbCAtPlxuICAgICAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBCeXRlcy5ibGl0X3N0cmluZyBzIDAgYnVmIGkgbGVuX3M7XG4gICAgICBCeXRlcy5zZXQgYnVmIChpICsgbGVuX3MpICdcXG4nO1xuICAgICAgYXV4X2JsaXQgKGkgKyBsZW5fcyArIDEpIHRhaWxcbiAgaW5cbiAgYXV4X2JsaXQgMCBsXG5cbmxldCB1bmxpbmVzX2dlbiBnID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9nZW5fYnVmIH5zZXA6XCJcXG5cIiBnIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbic7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVubGluZXNfaXRlciBpID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9pdGVyX2J1ZiB+c2VwOlwiXFxuXCIgaSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX3NlcSBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcDpcIlxcblwiIHNlcSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBzZXQgcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IFN0cmluZy5sZW5ndGggcyB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuc2V0XCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggcykgKGZ1biBqIC0+XG4gICAgICBpZiBpID0gaiB0aGVuXG4gICAgICAgIGNcbiAgICAgIGVsc2VcbiAgICAgICAgcy5bal0pXG5cbmxldCBpdGVyID0gU3RyaW5nLml0ZXJcblxubGV0IGZpbHRlcl9tYXAgZiBzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgbWF0Y2ggZiBjIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIGMnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYycpXG4gICAgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgZmlsdGVyIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXIgKGZ1biBjIC0+IGlmIGYgYyB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5pcSBlcSBzID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBzID0gMCB0aGVuXG4gICAgc1xuICBlbHNlIChcbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgcy5bMF07XG4gICAgbGV0IF8gPVxuICAgICAgZm9sZFxuICAgICAgICAoZnVuIHByZXZpb3VzX2MgYyAtPlxuICAgICAgICAgIGlmIG5vdCAoZXEgcHJldmlvdXNfYyBjKSB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgYztcbiAgICAgICAgICBjKVxuICAgICAgICBzLlswXSBzXG4gICAgaW5cbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG4gIClcblxubGV0IGZsYXRfbWFwID9zZXAgZiBzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgaXRlcmlcbiAgICAoZnVuIGkgYyAtPlxuICAgICAgKG1hdGNoIHNlcCB3aXRoXG4gICAgICB8IFNvbWUgXyB3aGVuIGkgPSAwIC0+ICgpXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBzZXAgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcCk7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKGYgYykpXG4gICAgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5leGNlcHRpb24gTXlFeGl0XG5cbmxldCBmb3JfYWxsIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIG5vdCAocCBjKSB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICB0cnVlXG4gIHdpdGggTXlFeGl0IC0+IGZhbHNlXG5cbmxldCBleGlzdHMgcCBzID1cbiAgdHJ5XG4gICAgaXRlciAoZnVuIGMgLT4gaWYgcCBjIHRoZW4gcmFpc2UgTXlFeGl0KSBzO1xuICAgIGZhbHNlXG4gIHdpdGggTXlFeGl0IC0+IHRydWVcblxubGV0IGRyb3Bfd2hpbGUgZiBzID1cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbmd0aCBzICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBpbmNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPiAwIHRoZW5cbiAgICBzdWIgcyAhaSAobGVuZ3RoIHMgLSAhaSlcbiAgZWxzZVxuICAgIHNcblxubGV0IHJkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIChsZW5ndGggcyAtIDEpIGluXG4gIHdoaWxlICFpID49IDAgJiYgZiAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGRlY3IgaVxuICBkb25lO1xuICBpZiAhaSA8IGxlbmd0aCBzIC0gMSB0aGVuXG4gICAgc3ViIHMgMCAoIWkgKyAxKVxuICBlbHNlXG4gICAgc1xuXG4oKiBub3Rpb24gb2Ygd2hpdGVzcGFjZSBmb3IgdHJpbSAqKVxubGV0IGlzX3NwYWNlXyA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgbHRyaW0gcyA9IGRyb3Bfd2hpbGUgaXNfc3BhY2VfIHNcbmxldCBydHJpbSBzID0gcmRyb3Bfd2hpbGUgaXNfc3BhY2VfIHNcblxubGV0IG1hcDIgZiBzMSBzMiA9XG4gIGlmIGxlbmd0aCBzMSA8PiBsZW5ndGggczIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLm1hcDJcIjtcbiAgaW5pdCAoU3RyaW5nLmxlbmd0aCBzMSkgKGZ1biBpIC0+IGYgczEuW2ldIHMyLltpXSlcblxubGV0IGl0ZXIyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pdGVyMlwiO1xuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzMSAtIDEgZG9cbiAgICBmIHMxLltpXSBzMi5baV1cbiAgZG9uZVxuXG5sZXQgaXRlcmkyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pdGVyaTJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBpIHMxLltpXSBzMi5baV1cbiAgZG9uZVxuXG5sZXQgZm9sZDIgZiBhY2MgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5mb2xkMlwiO1xuICBsZXQgcmVjIGZvbGQnIGFjYyBzMSBzMiBpID1cbiAgICBpZiBpID0gU3RyaW5nLmxlbmd0aCBzMSB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkJyAoZiBhY2MgczEuW2ldIHMyLltpXSkgczEgczIgKGkgKyAxKVxuICBpblxuICBmb2xkJyBhY2MgczEgczIgMFxuXG5sZXQgZm9yX2FsbDIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgbm90IChwIGMxIGMyKSB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzMiBwIHMxIHMyID1cbiAgdHJ5XG4gICAgaXRlcjIgKGZ1biBjMSBjMiAtPiBpZiBwIGMxIGMyIHRoZW4gcmFpc2UgTXlFeGl0KSBzMSBzMjtcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbigqKiB7MiBBc2NpaSBmdW5jdGlvbnN9ICopXG5cbmxldCBlcXVhbF9jYXNlbGVzcyBzMSBzMiA6IGJvb2wgPVxuICBTdHJpbmcubGVuZ3RoIHMxID0gU3RyaW5nLmxlbmd0aCBzMlxuICAmJiBmb3JfYWxsMlxuICAgICAgIChmdW4gYzEgYzIgLT5cbiAgICAgICAgIENDQ2hhci5lcXVhbCAoQ0NDaGFyLmxvd2VyY2FzZV9hc2NpaSBjMSkgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzIpKVxuICAgICAgIHMxIHMyXG5cbmxldCB0b19oZXggKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IGlfdG9faGV4IChpIDogaW50KSA9XG4gICAgaWYgaSA8IDEwIHRoZW5cbiAgICAgIENoYXIuY2hyIChpICsgQ2hhci5jb2RlICcwJylcbiAgICBlbHNlXG4gICAgICBDaGFyLmNociAoaSAtIDEwICsgQ2hhci5jb2RlICdhJylcbiAgaW5cblxuICBsZXQgcmVzID0gQnl0ZXMuY3JlYXRlICgyICogbGVuZ3RoIHMpIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBsZXQgbiA9IENoYXIuY29kZSAoZ2V0IHMgaSkgaW5cbiAgICBCeXRlcy5zZXQgcmVzICgyICogaSkgKGlfdG9faGV4ICgobiBsYW5kIDB4ZjApIGxzciA0KSk7XG4gICAgQnl0ZXMuc2V0IHJlcyAoKDIgKiBpKSArIDEpIChpX3RvX2hleCAobiBsYW5kIDB4MGYpKVxuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG5sZXQgb2ZfaGV4X2V4biAocyA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgbl9vZl9jID0gZnVuY3Rpb25cbiAgICB8ICcwJyAuLiAnOScgYXMgYyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdhJyAuLiAnZicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdhJ1xuICAgIHwgJ0EnIC4uICdGJyBhcyBjIC0+IDEwICsgQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ0EnXG4gICAgfCBfIC0+IGludmFsaWRfYXJnIFwic3RyaW5nOiBpbnZhbGlkIGhleFwiXG4gIGluXG4gIGlmIFN0cmluZy5sZW5ndGggcyBtb2QgMiA8PiAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcInN0cmluZzogaGV4IHNlcXVlbmNlIG11c3QgYmUgb2YgZXZlbiBsZW5ndGhcIjtcbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKFN0cmluZy5sZW5ndGggcyAvIDIpICdcXHgwMCcgaW5cbiAgZm9yIGkgPSAwIHRvIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAtIDEgZG9cbiAgICBsZXQgbjEgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoMiAqIGkpKSBpblxuICAgIGxldCBuMiA9IG5fb2ZfYyAoU3RyaW5nLmdldCBzICgoMiAqIGkpICsgMSkpIGluXG4gICAgbGV0IG4gPSAobjEgbHNsIDQpIGxvciBuMiBpblxuICAgIEJ5dGVzLnNldCByZXMgaSAoQ2hhci5jaHIgbilcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleCBzID0gdHJ5IFNvbWUgKG9mX2hleF9leG4gcykgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxuXG5sZXQgcHBfYnVmIGJ1ZiBzID1cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInO1xuICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcztcbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInXG5cbmxldCBwcCBmbXQgcyA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIlxcXCIlc1xcXCJcIiBzXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA9ICkgPSBlcXVhbFxuICBsZXQgKCA8PiApIGEgYiA9IG5vdCAoZXF1YWwgYSBiKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA+PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+PSApXG4gIGxldCAoIDwgKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPCApXG4gIGxldCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw9IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCJpbmNsdWRlIENvbnRhaW5lcnNMYWJlbHNcblxubW9kdWxlIFN0cmluZyA9IHN0cnVjdFxuICBpbmNsdWRlIFN0cmluZ1xuICBtb2R1bGUgU2V0ID0gU2V0Lk1ha2UgKFN0cmluZylcbmVuZFxuXG4oKiBtb2R1bGUgWW9qc29uID0gc3RydWN0XG4gICAgIGluY2x1ZGUgSnNvbnh0LllvanNvblxuICAgZW5kICopXG5cbm1vZHVsZSBFbmNvZGluZ3MgPSBzdHJ1Y3RcbiAgbGV0IHRvX2pzdHIgdCA9IEp2LnJlcHIgdCB8PiBCcnIuSnNvbi5lbmNvZGVcbiAgbGV0IHRvX2p2IHQgPSB0b19qc3RyIHQgfD4gSnYub2ZfanN0clxuXG4gIGxldCBvZl9qc3RyIGpzdHIgPVxuICAgIG1hdGNoIEJyci5Kc29uLmRlY29kZSBqc3RyIHdpdGhcbiAgICB8IE9rIHYgLT4gT2sgKE9iai5tYWdpYyB2KVxuICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIEJyci5Db25zb2xlLmVycm9yIFsgZXJyIF07XG4gICAgICAgIEVycm9yIChgTXNnIFwiRmFpbGVkIHRvIHVubWFyc2hhbCBkYXRhXCIpXG5cbiAgbGV0IG9mX2p2IGp2ID0gSnYudG9fanN0ciBqdiB8PiBvZl9qc3RyXG5lbmRcblxubGV0IHJhbmRvbV9zdGF0ZSA9IFJhbmRvbS5nZXRfc3RhdGUgKClcbmxldCBuZXdfdXVpZF92NCAoKSA9IFV1aWRtLnY0X2dlbiByYW5kb21fc3RhdGUgKClcblxuKCoqIFt0ZWUgZiB4XSBhcHBsaWVzIFtmXSB0byBbeF0gYW5kIHJldHVybnMgW3hdICopXG5sZXQgdGVlIGYgeCA9XG4gIGxldCAoKSA9IGYgeCBpblxuICB4XG4iLCJsZXQgdmVyc2lvbiA9IFwiMi4yLjJcIlxuXG5leGNlcHRpb24gSnNvbl9lcnJvciBvZiBzdHJpbmdcblxubGV0IGpzb25fZXJyb3IgcyA9IHJhaXNlIChKc29uX2Vycm9yIHMpXG5cbmV4Y2VwdGlvbiBFbmRfb2ZfYXJyYXlcbmV4Y2VwdGlvbiBFbmRfb2Zfb2JqZWN0XG5leGNlcHRpb24gRW5kX29mX3R1cGxlXG5leGNlcHRpb24gRW5kX29mX2lucHV0XG5cbnR5cGUgbGV4ZXJfc3RhdGUgPSB7XG4gIGJ1ZiA6IEJ1ZmZlci50OyAoKiBCdWZmZXIgdXNlZCB0byBhY2N1bXVsYXRlIHN1YnN0cmluZ3MgKilcbiAgbXV0YWJsZSBsbnVtIDogaW50OyAoKiBDdXJyZW50IGxpbmUgbnVtYmVyIChzdGFydGluZyBmcm9tIDEpICopXG4gIG11dGFibGUgYm9sIDogaW50O1xuICAgICAgKCogQWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgY3VycmVudCBsaW5lXG4gICAgICAgICAoc3RhcnRpbmcgZnJvbSAwKSAqKVxuICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjsgKCogTmFtZSBkZXNjcmliaW5nIHRoZSBpbnB1dCBmaWxlICopXG59XG5cbm1vZHVsZSBMZXhlcl9zdGF0ZSA9IHN0cnVjdFxuICB0eXBlIHQgPSBsZXhlcl9zdGF0ZSA9IHtcbiAgICBidWYgOiBCdWZmZXIudDtcbiAgICBtdXRhYmxlIGxudW0gOiBpbnQ7XG4gICAgbXV0YWJsZSBib2wgOiBpbnQ7XG4gICAgbXV0YWJsZSBmbmFtZSA6IHN0cmluZyBvcHRpb247XG4gIH1cbmVuZFxuXG5sZXQgaW5pdF9sZXhlciA/YnVmID9mbmFtZSA/KGxudW0gPSAxKSAoKSA9XG4gIGxldCBidWYgPSBtYXRjaCBidWYgd2l0aCBOb25lIC0+IEJ1ZmZlci5jcmVhdGUgMjU2IHwgU29tZSBidWYgLT4gYnVmIGluXG4gIHsgYnVmOyBsbnVtOyBib2wgPSAwOyBmbmFtZSB9XG4iLCJvcGVuIFN0ZExhYmVsc1xub3BlbiBNb3JlTGFiZWxzXG5vcGVuISBZb2pzb25cblxudHlwZSB0ID0gWW9qc29uLlNhZmUudFxuXG5sZXQgeW9qc29uX29mX3VuaXQgKCkgOiB0ID0gYE51bGxcbmxldCB5b2pzb25fb2ZfYm9vbCBiIDogdCA9IGBCb29sIGJcbmxldCB5b2pzb25fb2Zfc3RyaW5nIHN0ciA6IHQgPSBgU3RyaW5nIHN0clxubGV0IHlvanNvbl9vZl9ieXRlcyBieXRlcyA6IHQgPSBgU3RyaW5nIChCeXRlcy50b19zdHJpbmcgYnl0ZXMpXG5sZXQgeW9qc29uX29mX2NoYXIgYyA6IHQgPSBgU3RyaW5nIChTdHJpbmcubWFrZSAxIGMpXG5sZXQgeW9qc29uX29mX2ludCBuIDogdCA9IGBJbnQgblxubGV0IHlvanNvbl9vZl9mbG9hdCBuIDogdCA9IGBGbG9hdCBuXG5sZXQgeW9qc29uX29mX2ludDMyIChuIDogSW50MzIudCkgOiB0ID0gYEludGxpdCAoSW50MzIudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX2ludDY0IChuIDogSW50NjQudCkgOiB0ID0gYEludGxpdCAoSW50NjQudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX25hdGl2ZWludCBuIDogdCA9IGBJbnRsaXQgKE5hdGl2ZWludC50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfcmVmIHlvanNvbl9vZl9fYSByZiA9IHlvanNvbl9vZl9fYSAhcmZcbmxldCB5b2pzb25fb2ZfbGF6eV90IHlvanNvbl9vZl9fYSBsdiA9IHlvanNvbl9vZl9fYSAoTGF6eS5mb3JjZSBsdilcblxubGV0IHlvanNvbl9vZl9vcHRpb24geW9qc29uX29mX19hID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geW9qc29uX29mX19hIHhcbiAgfCBOb25lIC0+IGBOdWxsXG47O1xuXG5sZXQgeW9qc29uX29mX3BhaXIgeW9qc29uX29mX19hIHlvanNvbl9vZl9fYiAoYSwgYikgPVxuICBgTGlzdCBbIHlvanNvbl9vZl9fYSBhOyB5b2pzb25fb2ZfX2IgYiBdXG47O1xuXG5sZXQgeW9qc29uX29mX3RyaXBsZSB5b2pzb25fb2ZfX2EgeW9qc29uX29mX19iIHlvanNvbl9vZl9fYyAoYSwgYiwgYykgPVxuICBgTGlzdCBbIHlvanNvbl9vZl9fYSBhOyB5b2pzb25fb2ZfX2IgYjsgeW9qc29uX29mX19jIGMgXVxuOztcblxuKCogTGlzdC5yZXYgKExpc3QucmV2X21hcCAuLi4pIGlzIHRhaWwgcmVjdXJzaXZlLCB0aGUgT0NhbWwgc3RhbmRhcmRcbiAgIGxpYnJhcnkgTGlzdC5tYXAgaXMgTk9ULiAqKVxubGV0IHlvanNvbl9vZl9saXN0IHlvanNvbl9vZl9fYSBsc3QgPSBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCB+Zjp5b2pzb25fb2ZfX2EgbHN0KSlcblxubGV0IHlvanNvbl9vZl9hcnJheSB5b2pzb25fb2ZfX2EgYXIgPVxuICBsZXQgbHN0X3JlZiA9IHJlZiBbXSBpblxuICBmb3IgaSA9IEFycmF5Lmxlbmd0aCBhciAtIDEgZG93bnRvIDAgZG9cbiAgICBsc3RfcmVmIDo9IHlvanNvbl9vZl9fYSBhci4oaSkgOjogIWxzdF9yZWZcbiAgZG9uZTtcbiAgYExpc3QgIWxzdF9yZWZcbjs7XG5cbmxldCB5b2pzb25fb2ZfaGFzaHRibCB5b2pzb25fb2Zfa2V5IHlvanNvbl9vZl92YWwgaHRibCA9XG4gIGxldCBjb2xsIH5rZXk6ayB+ZGF0YTp2IGFjYyA9IGBMaXN0IFsgeW9qc29uX29mX2tleSBrOyB5b2pzb25fb2ZfdmFsIHYgXSA6OiBhY2MgaW5cbiAgYExpc3QgKEhhc2h0YmwuZm9sZCBodGJsIH5pbml0OltdIH5mOmNvbGwpXG47O1xuXG5sZXQgeW9qc29uX29mX29wYXF1ZSBfID0gYFN0cmluZyBcIjxvcGFxdWU+XCJcbmxldCB5b2pzb25fb2ZfZnVuIF8gPSBgU3RyaW5nIFwiPGZ1bj5cIlxuXG5leGNlcHRpb24gT2ZfeW9qc29uX2Vycm9yIG9mIGV4biAqIHRcblxubGV0IHJlY29yZF9jaGVja19leHRyYV9maWVsZHMgPSByZWYgdHJ1ZVxubGV0IG9mX3lvanNvbl9lcnJvcl9leG4gZXhjIHlvanNvbiA9IHJhaXNlIChPZl95b2pzb25fZXJyb3IgKGV4YywgeW9qc29uKSlcbmxldCBvZl95b2pzb25fZXJyb3Igd2hhdCB5b2pzb24gPSByYWlzZSAoT2ZfeW9qc29uX2Vycm9yIChGYWlsdXJlIHdoYXQsIHlvanNvbikpXG5cbmxldCB1bml0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBOdWxsIC0+ICgpXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJ1bml0X29mX3lvanNvbjogYE51bGwgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYm9vbF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgQm9vbCB2IC0+IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImJvb2xfb2ZfeW9qc29uOiB0cnVlL2ZhbHNlIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IHN0cmluZ19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPiBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInN0cmluZ19vZl95b2pzb246IHN0cmluZyBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBieXRlc19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPiBCeXRlcy5vZl9zdHJpbmcgc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJieXRlc19vZl95b2pzb246IHN0cmluZyBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBjaGFyX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzdHIgPD4gMVxuICAgIHRoZW4gb2ZfeW9qc29uX2Vycm9yIFwiY2hhcl9vZl95b2pzb246IHN0cmluZyBtdXN0IGNvbnRhaW4gb25lIGNoYXJhY3RlciBvbmx5XCIgeW9qc29uO1xuICAgIHN0ci5bMF1cbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImNoYXJfb2ZfeW9qc29uOiBzdHJpbmcgb2Ygc2l6ZSBvbmUgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnQgdiAtPiB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGZsb2F0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBGbG9hdCB2IC0+IHZcbiAgfCBgSW50IGkgLT4gZmxvYXRfb2ZfaW50IGlcbiAgfCBgSW50bGl0IHN0ciAtPiBmbG9hdF9vZl9zdHJpbmcgc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJmbG9hdF9vZl95b2pzb246IGZsb2F0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludDMyX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IEludDMyLm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gSW50MzIub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludDMyX29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnQ2NF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBJbnQ2NC5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IEludDY0Lm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnQ2NF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgbmF0aXZlaW50X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IE5hdGl2ZWludC5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IE5hdGl2ZWludC5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwibmF0aXZlaW50X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCByZWZfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPSByZWYgKGFfX29mX3lvanNvbiB5b2pzb24pXG5sZXQgbGF6eV90X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID0gTGF6eS5mcm9tX3ZhbCAoYV9fb2ZfeW9qc29uIHlvanNvbilcblxubGV0IG9wdGlvbl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYE51bGwgLT4gTm9uZVxuICB8IGVsIC0+IFNvbWUgKGFfX29mX3lvanNvbiBlbClcbjs7XG5cbmxldCBwYWlyX29mX3lvanNvbiBhX19vZl95b2pzb24gYl9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgWyBhX3lvanNvbjsgYl95b2pzb24gXSAtPlxuICAgIGxldCBhID0gYV9fb2ZfeW9qc29uIGFfeW9qc29uIGluXG4gICAgbGV0IGIgPSBiX19vZl95b2pzb24gYl95b2pzb24gaW5cbiAgICBhLCBiXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJwYWlyX29mX3lvanNvbjogaW52YWxpZCBmb3JtYXRcIiB5b2pzb25cbjs7XG5cbmxldCB0cmlwbGVfb2ZfeW9qc29uIGFfX29mX3lvanNvbiBiX19vZl95b2pzb24gY19fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgWyBhX3lvanNvbjsgYl95b2pzb247IGNfeW9qc29uIF0gLT5cbiAgICBsZXQgYSA9IGFfX29mX3lvanNvbiBhX3lvanNvbiBpblxuICAgIGxldCBiID0gYl9fb2ZfeW9qc29uIGJfeW9qc29uIGluXG4gICAgbGV0IGMgPSBjX19vZl95b2pzb24gY195b2pzb24gaW5cbiAgICBhLCBiLCBjXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJ0cmlwbGVfb2ZfeW9qc29uOiBpbnZhbGlkIGZvcm1hdFwiIHlvanNvblxuOztcblxubGV0IGxpc3Rfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IGxzdCAtPlxuICAgIGxldCByZXZfbHN0ID0gTGlzdC5yZXZfbWFwIGxzdCB+ZjphX19vZl95b2pzb24gaW5cbiAgICBMaXN0LnJldiByZXZfbHN0XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJsaXN0X29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBhcnJheV9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgW10gLT4gW3x8XVxuICB8IGBMaXN0IChoIDo6IHQpIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIHQgKyAxIGluXG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgbGVuIChhX19vZl95b2pzb24gaCkgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IHJlc1xuICAgICAgfCBoIDo6IHQgLT5cbiAgICAgICAgcmVzLihpKSA8LSBhX19vZl95b2pzb24gaDtcbiAgICAgICAgbG9vcCAoaSArIDEpIHRcbiAgICBpblxuICAgIGxvb3AgMSB0XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJhcnJheV9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaGFzaHRibF9vZl95b2pzb24ga2V5X29mX3lvanNvbiB2YWxfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgbHN0IC0+XG4gICAgbGV0IGh0YmwgPSBIYXNodGJsLmNyZWF0ZSAwIGluXG4gICAgbGV0IGFjdCA9IGZ1bmN0aW9uXG4gICAgICB8IGBMaXN0IFsga195b2pzb247IHZfeW9qc29uIF0gLT5cbiAgICAgICAgSGFzaHRibC5hZGQgaHRibCB+a2V5OihrZXlfb2ZfeW9qc29uIGtfeW9qc29uKSB+ZGF0YToodmFsX29mX3lvanNvbiB2X3lvanNvbilcbiAgICAgIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJoYXNodGJsX29mX3lvanNvbjogdHVwbGUgbGlzdCBuZWVkZWRcIiB5b2pzb25cbiAgICBpblxuICAgIExpc3QuaXRlciBsc3QgfmY6YWN0O1xuICAgIGh0YmxcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImhhc2h0Ymxfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IG9wYXF1ZV9vZl95b2pzb24geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIFwib3BhcXVlX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgb3BhcXVlIHZhbHVlc1wiIHlvanNvblxuOztcblxubGV0IGZ1bl9vZl95b2pzb24geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIFwiZnVuX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgZnVuY3Rpb24gdmFsdWVzXCIgeW9qc29uXG47O1xuXG5tb2R1bGUgUHJpbWl0aXZlcyA9IHN0cnVjdFxuICBsZXQgeW9qc29uX29mX2FycmF5ID0geW9qc29uX29mX2FycmF5XG4gIGxldCBhcnJheV9vZl95b2pzb24gPSBhcnJheV9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9ib29sID0geW9qc29uX29mX2Jvb2xcbiAgbGV0IGJvb2xfb2ZfeW9qc29uID0gYm9vbF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9jaGFyID0geW9qc29uX29mX2NoYXJcbiAgbGV0IGNoYXJfb2ZfeW9qc29uID0gY2hhcl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9mbG9hdCA9IHlvanNvbl9vZl9mbG9hdFxuICBsZXQgZmxvYXRfb2ZfeW9qc29uID0gZmxvYXRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50ID0geW9qc29uX29mX2ludFxuICBsZXQgaW50X29mX3lvanNvbiA9IGludF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQzMiA9IHlvanNvbl9vZl9pbnQzMlxuICBsZXQgaW50MzJfb2ZfeW9qc29uID0gaW50MzJfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50NjQgPSB5b2pzb25fb2ZfaW50NjRcbiAgbGV0IGludDY0X29mX3lvanNvbiA9IGludDY0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2xpc3QgPSB5b2pzb25fb2ZfbGlzdFxuICBsZXQgbGlzdF9vZl95b2pzb24gPSBsaXN0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX25hdGl2ZWludCA9IHlvanNvbl9vZl9uYXRpdmVpbnRcbiAgbGV0IG5hdGl2ZWludF9vZl95b2pzb24gPSBuYXRpdmVpbnRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2Zfb3B0aW9uID0geW9qc29uX29mX29wdGlvblxuICBsZXQgb3B0aW9uX29mX3lvanNvbiA9IG9wdGlvbl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9yZWYgPSB5b2pzb25fb2ZfcmVmXG4gIGxldCByZWZfb2ZfeW9qc29uID0gcmVmX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3N0cmluZyA9IHlvanNvbl9vZl9zdHJpbmdcbiAgbGV0IHN0cmluZ19vZl95b2pzb24gPSBzdHJpbmdfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfYnl0ZXMgPSB5b2pzb25fb2ZfYnl0ZXNcbiAgbGV0IGJ5dGVzX29mX3lvanNvbiA9IGJ5dGVzX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3VuaXQgPSB5b2pzb25fb2ZfdW5pdFxuICBsZXQgdW5pdF9vZl95b2pzb24gPSB1bml0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2xhenlfdCA9IHlvanNvbl9vZl9sYXp5X3RcbiAgbGV0IGxhenlfdF9vZl95b2pzb24gPSBsYXp5X3Rfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaGFzaHRibCA9IHlvanNvbl9vZl9oYXNodGJsXG4gIGxldCBoYXNodGJsX29mX3lvanNvbiA9IGhhc2h0Ymxfb2ZfeW9qc29uXG5lbmRcbiIsIm1vZHVsZSBZb2pzb25fY29udl9lcnJvciA9IFlvanNvbl9jb252X2Vycm9yXG5tb2R1bGUgWW9qc29uX2NvbnYgPSBZb2pzb25fY29udlxubW9kdWxlIFlvanNvbmFibGUgPSBZb2pzb25hYmxlX2ludGZcbm1vZHVsZSBZb2pzb24gPSBZb2pzb25cblxubW9kdWxlIE9wdGlvbiA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBvcHRpb24gPVxuICAgIHwgTm9uZVxuICAgIHwgU29tZSBvZiAnYVxuZW5kXG5cbmV4dGVybmFsIGlnbm9yZSA6IF8gLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5leHRlcm5hbCBwb2x5X2VxdWFsIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxubGV0ICggISApIDogJ2EgcmVmIC0+ICdhID0gZnVuIHggLT4gIXhcbiIsIm1vZHVsZSBBcGkgPSBKZWxseWZpbl9hcGlcblxudHlwZSBjcmVkZW50aWFscyA9IHsgYmFzZV91cmwgOiBzdHJpbmc7IHVzZXJuYW1lIDogc3RyaW5nOyBwYXNzd29yZCA6IHN0cmluZyB9XG5cbnR5cGUgY29ubmV4aW9uID0ge1xuICBiYXNlX3VybCA6IHN0cmluZztcbiAgYXV0aF9yZXNwb25zZSA6IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS5yZXNwb25zZTtcbn1cblxubGV0IGdldF90b2tlbiB0ID0gdC5hdXRoX3Jlc3BvbnNlLkFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS5hY2Nlc3NfdG9rZW5cblxubGV0IGNvbm5lY3QgY3JlZGVudGlhbHMgPVxuICBsZXQgbW9kdWxlIEF1dGggPSBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IHsgYmFzZV91cmw7IHVzZXJuYW1lOyBwYXNzd29yZCB9ID0gY3JlZGVudGlhbHMgaW5cbiAgbGV0IGF1dGggPSB7IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS51c2VybmFtZTsgcHcgPSBwYXNzd29yZCB9IGluXG4gIGxldCsgYXV0aF9yZXNwb25zZSA9IEFwaS5yZXF1ZXN0IH5iYXNlX3VybCAobW9kdWxlIEF1dGgpIGF1dGggKCkgaW5cbiAgeyBiYXNlX3VybDsgYXV0aF9yZXNwb25zZSB9XG5cbmxldCBxdWVyeSB0ID1cbiAgbGV0IHRva2VuID0gZ2V0X3Rva2VuIHQgaW5cbiAgbGV0IGJhc2VfdXJsID0gdC5iYXNlX3VybCBpblxuICBKZWxseWZpbl9hcGkucmVxdWVzdCB+YmFzZV91cmwgfnRva2VuXG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJcblxudHlwZSB0YWcgPSBCbG9jayBvZiBpbnQgfCBJbnQgb2YgaW50XG5cbmxldCB0YWdfb2YgdiA9XG4gICgqIHdvdyB3b3cgd293LiBpcyB0aGF0IG9rYXl5aXNoID8qKVxuICBsZXQgb2JqID0gT2JqLnJlcHIgdiBpblxuICBpZiBPYmouaXNfYmxvY2sgb2JqIHRoZW4gQmxvY2sgKE9iai50YWcgb2JqKSBlbHNlIEludCAoT2JqLm1hZ2ljIG9iailcblxubW9kdWxlIHR5cGUgUXVlcmllcyA9IHNpZ1xuICB0eXBlICdhIHF1ZXJ5XG4gIHR5cGUgJ2EgZXZlbnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoUSA6IFF1ZXJpZXMpID0gc3RydWN0XG4gIHR5cGUgZXJyb3IgPSBbIGBKdiBvZiBKdi5FcnJvci50IHwgYE1zZyBvZiBzdHJpbmcgXVxuICB0eXBlICdhIHF1ZXJ5ID0gJ2EgUS5xdWVyeVxuICB0eXBlICdhIGV2ZW50ID0gJ2EgUS5ldmVudFxuICB0eXBlICdhIHdpdGhfdXVpZCA9IHsgdXVpZCA6IHN0cmluZzsgZGF0YSA6ICdhIH1cbiAgdHlwZSAnYSBtZXNzYWdlID0gQW5zd2VyIG9mICdhIHdpdGhfdXVpZCB8IEV2ZW50IG9mICgnYSBldmVudCAqICdhKVxuICB0eXBlIGxpc3RlbmVyID0gc3RyaW5nXG5cbiAgKCogdG9kbzpjaGVjayB0aGF0IHRoZSB3b3JrZXIgYW5kIHRoZSBjbGllbnQgc2hhcmUgdGhlIHNhbWUgYXBpPyAqKVxuXG4gIG1vZHVsZSBTdGFydF9jbGllbnQgKFAgOiBzaWdcbiAgICB2YWwgdXJsIDogc3RyaW5nXG4gIGVuZCkgPVxuICBzdHJ1Y3RcbiAgICBsZXQgZnV0dXJlcyA6IChzdHJpbmcsIEp2LnQgLT4gdW5pdCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNjRcbiAgICBsZXQgbGlzdGVuZXJzIDogKHRhZywgSnYudCAtPiB1bml0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGxldCB3b3JrZXIgPSBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuY3JlYXRlIEBAIEpzdHIub2Zfc3RyaW5nIFAudXJsXG5cbiAgICBsZXQgcXVlcnkgKHR5cGUgYSkgKHF1ZXJ5IDogYSBxdWVyeSkgOiAoYSwgZXJyb3IpIEZ1dC5yZXN1bHQgPVxuICAgICAgbGV0IHV1aWQgPSBuZXdfdXVpZF92NCAoKSB8PiBVdWlkbS50b19zdHJpbmcgaW5cbiAgICAgIGxldCBmdXQsIHNldCA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgICAgIGxldCBzZXQganYgPSBzZXQgQEAgRW5jb2RpbmdzLm9mX2p2IGp2IGluXG4gICAgICBsZXQgcXVlcnkgPSB7IHV1aWQ7IGRhdGEgPSBxdWVyeSB9IHw+IEVuY29kaW5ncy50b19qc3RyIGluXG4gICAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIucG9zdCB3b3JrZXIgKEp2Lm9mX2pzdHIgcXVlcnkpO1xuICAgICAgSGFzaHRibC5hZGQgZnV0dXJlcyB1dWlkIHNldDtcbiAgICAgIGZ1dFxuXG4gICAgbGV0IGxpc3RlbiAodHlwZSBhKSAoZXZlbnQgOiBhIGV2ZW50KSB+KGYgOiBhIC0+IHVuaXQpIDogbGlzdGVuZXIgPVxuICAgICAgbGV0IHV1aWQgPSBuZXdfdXVpZF92NCAoKSB8PiBVdWlkbS50b19zdHJpbmcgaW5cbiAgICAgIGxldCBzZXQganYgPSBmIChPYmoubWFnaWMganYpIGluXG4gICAgICBIYXNodGJsLmFkZCBsaXN0ZW5lcnMgKHRhZ19vZiBldmVudCkgc2V0O1xuICAgICAgdXVpZFxuXG4gICAgbGV0IG9uX21lc3NhZ2UgZXYgPVxuICAgICAgbGV0IG1lc3NhZ2UgPSBFdi5hc190eXBlIGV2IGluXG4gICAgICBsZXQgb3BlbiBSZXN1bHQgaW5cbiAgICAgIGlnbm9yZSAoKiBUT0RPOiBoYW5kbGVyIGVycm9ycyAqKVxuICAgICAgQEBcbiAgICAgIGxldCsgbWVzc2FnZSA9XG4gICAgICAgIEJycl9pby5NZXNzYWdlLkV2LmRhdGEgbWVzc2FnZSB8PiBKdi50b19qc3RyIHw+IEVuY29kaW5ncy5vZl9qc3RyXG4gICAgICBpblxuICAgICAgbWF0Y2ggbWVzc2FnZSB3aXRoXG4gICAgICB8IEV2ZW50IChlLCB2KSAtPlxuICAgICAgICAgIEhhc2h0YmwuZmluZF9hbGwgbGlzdGVuZXJzICh0YWdfb2YgZSkgfD4gTGlzdC5pdGVyIH5mOihmdW4gZiAtPiBmIHYpXG4gICAgICB8IEFuc3dlciB7IHV1aWQ7IGRhdGEgfSAtPlxuICAgICAgICAgIGxldCBmID0gSGFzaHRibC5maW5kIGZ1dHVyZXMgdXVpZCBpblxuICAgICAgICAgIEhhc2h0YmwucmVtb3ZlIGZ1dHVyZXMgdXVpZDtcbiAgICAgICAgICBmIGRhdGFcblxuICAgIGxldCBfID1cbiAgICAgIEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2VcbiAgICAgIEBAIEJycl93ZWJ3b3JrZXJzLldvcmtlci5hc190YXJnZXQgd29ya2VyXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIFdvcmtlcl9pbXBsID0gZnVuY3RvciAoKSAtPiBzaWdcbiAgICB2YWwgb25fcXVlcnkgOiAnYSBxdWVyeSAtPiAoJ2EsIGVycm9yKSBGdXQucmVzdWx0XG4gIGVuZFxuXG4gIGxldCBkaXNwYXRjaF9ldmVudCAodHlwZSBhKSAoZSA6IGEgZXZlbnQpICh2IDogYSkgPVxuICAgICgqIGxldCBkYXRhID0gRW5jb2RpbmdzLm1hcnNoYWxfdG9fanN0ciB8PiBKdi5vZl9qc3RyIGluICopXG4gICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLkcucG9zdCAoRW5jb2RpbmdzLnRvX2pzdHIgKEV2ZW50IChlLCB2KSkgfD4gSnYub2ZfanN0cilcblxuICAoKiogRXhlY3V0ZSBXJ3MgYm9keSBhbmQgY29uZmlndXJlIG1lc3NhZ2luZyAqKVxuICBtb2R1bGUgTWFrZV93b3JrZXIgKFcgOiBXb3JrZXJfaW1wbCkgPSBzdHJ1Y3RcbiAgICBvcGVuIEJyclxuICAgIG1vZHVsZSBXID0gVyAoKVxuXG4gICAgbGV0IG9uX21lc3NhZ2UgZXYgPVxuICAgICAgbGV0IG1lc3NhZ2UgPSBFdi5hc190eXBlIGV2IGluXG4gICAgICBsZXQgb3BlbiBSZXN1bHQgaW5cbiAgICAgIGlnbm9yZSAoKiBUT0RPOiBoYW5kbGVyIGVycm9ycyAqKVxuICAgICAgQEBcbiAgICAgIGxldCsgKHsgdXVpZDsgZGF0YSB9IDogJ2EgcXVlcnkgd2l0aF91dWlkKSA9XG4gICAgICAgIEJycl9pby5NZXNzYWdlLkV2LmRhdGEgbWVzc2FnZSB8PiBKdi50b19qc3RyIHw+IEVuY29kaW5ncy5vZl9qc3RyXG4gICAgICBpblxuICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgIGxldCsgcmVzdWx0ID0gVy5vbl9xdWVyeSBkYXRhIGluXG4gICAgICBsZXQgZGF0YSA9IEVuY29kaW5ncy50b19qc3RyIHJlc3VsdCB8PiBKdi5vZl9qc3RyIGluXG4gICAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuRy5wb3N0XG4gICAgICAgIChFbmNvZGluZ3MudG9fanN0ciAoQW5zd2VyIHsgdXVpZDsgZGF0YSB9KSB8PiBKdi5vZl9qc3RyKVxuXG4gICAgbGV0IF8gPSBFdi5saXN0ZW4gQnJyX2lvLk1lc3NhZ2UuRXYubWVzc2FnZSBvbl9tZXNzYWdlIEcudGFyZ2V0XG4gIGVuZFxuZW5kXG4iLCJvcGVuIFN0ZFxuXG4oKiogU29tZSBzb3J0cyByZXF1aXJlIGEgY3VzdG9tIG9yZGVyaW5nIHdoaWNoIGlzIGRvbmUgdXNpbmcgYSB0YWJsZSBvZiBpbmRleGVzLiBGb3IgZXhhbXBsZSwgdG8gZ2V0IGEgcmFuZG9tIHNvcnQgd2Ugc2ltcGxlIHNodWZmbGUgYW4gYXJyYXkgd2hpY2ggc2l6ZSBpcyB0aGUgb25lIG9mIHRoZSByZXN1bHQuICopXG5tb2R1bGUgT3JkZXIgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSW5pdGlhbCB8IEFzYyB8IERlc2MgfCBDdXN0b20gb2YgaW50IGFycmF5XG5cbiAgbGV0IHJhbmRvbSB+c2l6ZSA9XG4gICAgbGV0IHRibCA9IEFycmF5LmluaXQgc2l6ZSB+ZjpGdW4uaWQgaW5cbiAgICBsZXQgKCkgPSBBcnJheS5zaHVmZmxlIHRibCBpblxuICAgIEN1c3RvbSB0YmxcblxuICBsZXQgb2Zfc3RyaW5nIH5zaXplID0gZnVuY3Rpb25cbiAgICB8IFwicmFuZG9tXCIgLT4gcmFuZG9tIH5zaXplXG4gICAgfCBcImFzY1wiIC0+IEFzY1xuICAgIHwgXCJkZXNjXCIgLT4gRGVzY1xuICAgIHwgXyAtPiBJbml0aWFsXG5cbiAgbGV0IGFwcGx5IHQgfnNpemUgaSA9XG4gICAgbWF0Y2ggdCB3aXRoXG4gICAgfCBJbml0aWFsIHwgQXNjIC0+IGlcbiAgICB8IERlc2MgLT4gc2l6ZSAtIDEgLSBpXG4gICAgfCBDdXN0b20gYSAtPiAoKiB0b2RvIGNoZWNrIGJvdW5kcyAqKSBhLihpKVxuZW5kXG5cbm1vZHVsZSBTb3J0ID0gc3RydWN0XG4gIHR5cGUgdCA9IERhdGVfYWRkZWQgfCBOYW1lXG5cbiAgbGV0IG9mX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBcImRhdGVfYWRkZWRcIiAtPiBEYXRlX2FkZGVkXG4gICAgfCBcIm5hbWVcIiAtPiBOYW1lXG4gICAgfCBfIC0+IERhdGVfYWRkZWRcbmVuZFxuXG50eXBlICdhIHNlbGVjdGlvbiA9IEFsbCB8IE9ubHkgb2YgJ2EgbGlzdFxudHlwZSBraW5kID0gQXVkaW9cbnR5cGUgZmlsdGVyID0gU2VhcmNoIG9mIHN0cmluZ1xuXG50eXBlIHJlcSA9IHtcbiAga2luZCA6IGtpbmQ7XG4gIHNyY192aWV3cyA6IHN0cmluZyBzZWxlY3Rpb247XG4gIHNvcnQgOiBTb3J0LnQ7XG4gIGZpbHRlcnMgOiBmaWx0ZXIgbGlzdDtcbn1cblxudHlwZSB0ID0geyByZXF1ZXN0IDogcmVxOyBzdGFydF9vZmZzZXQgOiBpbnQ7IGl0ZW1fY291bnQgOiBpbnQgfVxudHlwZSByYW5nZWQgPSB7IHZpZXcgOiB0OyBmaXJzdCA6IGludDsgbGFzdCA6IGludDsgb3JkZXIgOiBPcmRlci50IH1cblxubGV0IGl0ZW1fY291bnQgdCA9IHQuaXRlbV9jb3VudCAtIHQuc3RhcnRfb2Zmc2V0XG5cbmxldCByZXEga2luZCA/KHNyY192aWV3cyA9IEFsbCkgPyhzb3J0ID0gU29ydC5EYXRlX2FkZGVkKSA/KGZpbHRlcnMgPSBbXSkgKCkgPVxuICB7IGtpbmQ7IHNyY192aWV3czsgc29ydDsgZmlsdGVycyB9XG5cbmxldCBoYXNoIHJlcSA9IEhhc2h0YmwuaGFzaCAocmVxLnNyY192aWV3cywgcmVxLmZpbHRlcnMpXG4iLCJvcGVuISBTdGRcbm1vZHVsZSBEUyA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgQXBpID0gRFMuQXBpXG5cbnR5cGUgc2VydmVyID0gc3RyaW5nICogRFMuY29ubmV4aW9uXG5cbm1vZHVsZSBRdWVyaWVzID0gc3RydWN0XG4gIHR5cGUgJ2EgcXVlcnkgPVxuICAgIHwgU2V0X3Nlc3Npb25fdXVpZCA6IHN0cmluZyAtPiB1bml0IHF1ZXJ5XG4gICAgfCBBZGRfc2VydmVycyA6IHNlcnZlciBsaXN0IC0+IHVuaXQgcXVlcnlcbiAgICB8IEdldF9hbGwgOiB1bml0IC0+IEFwaS5JdGVtLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X2xpYnJhcmllcyA6IHVuaXQgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X3NlcnZlcl9saWJyYXJpZXMgOiBzdHJpbmcgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgQ3JlYXRlX3ZpZXcgOiBWaWV3LnJlcSAtPiBWaWV3LnQgcXVlcnlcbiAgICB8IEdldCA6XG4gICAgICAgIFZpZXcudCAqIFZpZXcuT3JkZXIudCAqIGludCBhcnJheVxuICAgICAgICAtPiBTdG9yZXMuSXRlbXMudCBvcHRpb24gYXJyYXkgcXVlcnlcblxuICB0eXBlICdhIGV2ZW50ID0gU2VydmVyc19zdGF0dXNfdXBkYXRlIDogKHN0cmluZyAqIFN5bmMucmVwb3J0KSBldmVudFxuZW5kXG5cbmluY2x1ZGUgV29ya2VyX2FwaS5NYWtlIChRdWVyaWVzKVxuIiwibW9kdWxlIFN0b3JlcyA9IFN0b3Jlc1xubW9kdWxlIFN5bmMgPSBTeW5jXG5tb2R1bGUgVmlldyA9IFZpZXdcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5tb2R1bGUgT0kgPSBTdG9yZXMuT3JkZXJyZWRfaXRlbXNfc3RvcmVcbm1vZHVsZSBJID0gU3RvcmVzLkl0ZW1zX3N0b3JlXG5tb2R1bGUgVkYgPSBTdG9yZXMuVmlydHVhbF9mb2xkZXJfc3RvcmVcbm1vZHVsZSBXb3JrZXJfYXBpID0gRGJfd29ya2VyX2FwaVxuXG5tb2R1bGUgSXRlbV9zdG9yZSA9IHN0cnVjdFxuICBpbmNsdWRlIFN0b3Jlcy5JdGVtc19zdG9yZVxuXG4gIG1vZHVsZSBJbmRleCA9IHN0cnVjdFxuICAgIG1vZHVsZSBJZCA9IFN0b3Jlcy5JdGVtc0J5SWRcbiAgICBtb2R1bGUgRGF0ZV9hZGRlZCA9IFN0b3Jlcy5JdGVtc0J5RGF0ZUFkZGVkXG4gICAgbW9kdWxlIFR5cGVfTmFtZSA9IFN0b3Jlcy5JdGVtc0J5VHlwZUFuZE5hbWVcbiAgICBtb2R1bGUgS2luZF9WaWV3ID0gU3RvcmVzLkl0ZW1zQnlWaWV3QW5kS2luZFxuICBlbmRcbmVuZFxuXG5sZXQgb25fdXBncmFkZV9uZWVkZWQgZSBxID1cbiAgbGV0IG9wZW4gQnJyX2lvLkluZGV4ZWRfZGIgaW5cbiAgbGV0IG9sZF92ZXJzaW9uLCBuZXdfdmVyc2lvbiA9XG4gICAgbGV0IHYgPSBFdi5hc190eXBlIGUgaW5cbiAgICBFdmVudHMuVmVyc2lvbl9jaGFuZ2UuKG9sZF92ZXJzaW9uIHYsIG5ld192ZXJzaW9uIHYpXG4gIGluXG4gIENvbnNvbGUuaW5mb1xuICAgIFtcbiAgICAgIFwiVXBncmFkaW5nIGluZGV4ZWRfZGIgc2NoZW1hIGZyb20gdmVyc2lvblwiOyBvbGRfdmVyc2lvbjsgXCJ0b1wiOyBuZXdfdmVyc2lvbjtcbiAgICBdO1xuICBsZXQgZGIgPSBSZXF1ZXN0LnJlc3VsdCBxIGluXG4gIGxldCBzdG9yZXMgPSBEYXRhYmFzZS5vYmplY3Rfc3RvcmVfbmFtZXMgZGIgaW5cbiAgQ29uc29sZS5pbmZvIFsgXCJFcmFzaW5nIGV4aXN0aW5nIHN0b3Jlc1wiIF07XG4gIEFycmF5Lml0ZXIgKERhdGFiYXNlLmRlbGV0ZV9vYmplY3Rfc3RvcmUgZGIpIHN0b3JlcztcbiAgbGV0IGxpc3QgPVxuICAgIERhdGFiYXNlLmNyZWF0ZV9vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCBpdGVtcyA9XG4gICAgRGF0YWJhc2UuY3JlYXRlX29iamVjdF9zdG9yZSAobW9kdWxlIEkpIH5hdXRvX2luY3JlbWVudDpmYWxzZSBkYlxuICBpblxuICBsZXQgdmlydHVhbF9mb2xkZXJzID1cbiAgICBEYXRhYmFzZS5jcmVhdGVfb2JqZWN0X3N0b3JlIChtb2R1bGUgVkYpIH5hdXRvX2luY3JlbWVudDpmYWxzZSBkYlxuICBpblxuICBsZXQgaW5kZXhfZGF0ZV9hZGRlZCA9XG4gICAgSS5jcmVhdGVfaW5kZXggKG1vZHVsZSBTdG9yZXMuSXRlbXNCeURhdGVBZGRlZCkgaXRlbXNcbiAgaW5cbiAgbGV0IF8gPSBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5VHlwZUFuZE5hbWUpIGl0ZW1zIGluXG4gIGxldCBfID0gSS5jcmVhdGVfaW5kZXggKG1vZHVsZSBTdG9yZXMuSXRlbXNCeVZpZXdBbmRLaW5kKSBpdGVtcyBpblxuICBsZXQgXyA9IEkuY3JlYXRlX2luZGV4IChtb2R1bGUgU3RvcmVzLkl0ZW1zQnlJZCkgaXRlbXMgaW5cbiAgQ29uc29sZS5pbmZvXG4gICAgWyBcIlN0b3JlcyBjcmVhdGVkOlwiOyBsaXN0OyBpdGVtczsgaW5kZXhfZGF0ZV9hZGRlZDsgdmlydHVhbF9mb2xkZXJzIF1cblxubGV0IHdpdGhfaWRiID92ZXJzaW9uIH5uYW1lIGYgPVxuICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICBsZXQgZiBfZXYgZGJyID1cbiAgICBsZXQgZGIgPSBSZXF1ZXN0LnJlc3VsdCBkYnIgaW5cbiAgICBmIGRiXG4gIGluXG4gIGdldF9mYWN0b3J5ICgpXG4gIHw+IEZhY3Rvcnkub3Blbicgfm5hbWUgP3ZlcnNpb25cbiAgfD4gT3Blbl9kYl9yZXF1ZXN0Lm9uX3VwZ3JhZGVfbmVlZGVkIH5mOm9uX3VwZ3JhZGVfbmVlZGVkXG4gIHw+IFJlcXVlc3Qub25fc3VjY2VzcyB+ZiB8PiBpZ25vcmVcbiIsIm9wZW4hIFN0ZFxub3BlbiBEYi5Xb3JrZXJfYXBpXG5vcGVuIEJycmVyXG5vcGVuISBCcnJcbm1vZHVsZSBJREIgPSBCcnJfaW8uSW5kZXhlZF9kYlxubW9kdWxlIElTID0gRGIuSXRlbV9zdG9yZVxuXG5sZXQgKCkgPSBSYW5kb20uc2VsZl9pbml0ICgpXG5cbmxldCBtYXBfZXJyb3IgZiA9XG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KyBmID0gZiBpblxuICBSZXN1bHQubWFwX2VyciAoZnVuIGp2IC0+IGBKdiBqdikgZlxuXG5sZXQgYXNfZnV0IHEgPSBJREIuUmVxdWVzdC5mdXQgcSB8PiBtYXBfZXJyb3JcblxubGV0IGZ1dF9vZl9hcnJheSAoZnMgOiAnYSBGdXQudCBhcnJheSkgOiAnYSBhcnJheSBGdXQudCA9XG4gIGxldCBmdXQgcCA9IEp2Lm9iaiBbfCAoXCJmdXRcIiwgcCkgfF0gaW5cbiAgbGV0IHByb21pc2UnIGYgPSBKdi5nZXQgKEp2LnJlcHIgZikgXCJmdXRcIiBpblxuICBsZXQgYXJyID0gSnYub2ZfYXJyYXkgcHJvbWlzZScgZnMgaW5cbiAgbGV0IGFsbCA9IEp2LlByb21pc2UuYWxsIGFyciBpblxuICBsZXQgdG9fYXJyYXkgbCA9IEp2LlByb21pc2UucmVzb2x2ZSAoSnYudG9fYXJyYXkgT2JqLm1hZ2ljIGwpIGluXG4gIE9iai5tYWdpYyBAQCBmdXQgQEAgSnYuUHJvbWlzZS5iaW5kIGFsbCB0b19hcnJheVxuXG5tb2R1bGUgV29ya2VyICgpID0gc3RydWN0XG4gIGxldCB2aWV3X21lbW8gOlxuICAgICAgKCBzdHJpbmcgRGIuVmlldy5zZWxlY3Rpb24gKiBEYi5WaWV3LlNvcnQudCxcbiAgICAgICAgSVMuQ29udGVudC5LZXkudCBhcnJheSApXG4gICAgICBIYXNodGJsLnQgPVxuICAgIEhhc2h0YmwuY3JlYXRlIDY0XG5cbiAgbGV0IGxhc3RfdmlldyA6IChpbnQgKiBJUy5Db250ZW50LktleS50IGFycmF5KSByZWYgPSByZWYgKC0xLCBbfHxdKVxuXG4gIGxldCBjaGVja19kYiBpZGIgc291cmNlID1cbiAgICBsZXQgc2VydmVyX2lkLCBzb3VyY2UgPSBzb3VyY2UgaW5cbiAgICBsZXQgcmVwb3J0IHN0YXR1cyA9XG4gICAgICBIYXNodGJsLmNsZWFyIHZpZXdfbWVtbztcbiAgICAgIGxhc3RfdmlldyA6PSAoLTEsIFt8fF0pO1xuICAgICAgZGlzcGF0Y2hfZXZlbnQgU2VydmVyc19zdGF0dXNfdXBkYXRlIChzZXJ2ZXJfaWQsIHN0YXR1cylcbiAgICBpblxuICAgIERiLlN5bmMuY2hlY2tfYW5kX3N5bmMgfnJlcG9ydCB+c291cmNlIGlkYlxuXG4gIGxldCBpZGIgPVxuICAgIGxldCBpZGIsIHNldF9pZGIgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgbGV0IF8gPVxuICAgICAgRGIud2l0aF9pZGIgfm5hbWU6XCJ0cmFja3NcIiB+dmVyc2lvbjoxIEBAIGZ1biBpZGIgLT5cbiAgICAgIGlnbm9yZSAoc2V0X2lkYiBAQCBPayBpZGIpXG4gICAgaW5cbiAgICBpZGJcblxuICBsZXQgcmVhZF9vbmx5X3N0b3JlICgpID1cbiAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgIGxldCsgaWRiID0gaWRiIGluXG4gICAgSURCLkRhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBEYi5JKSBdIH5tb2RlOlJlYWRvbmx5IGlkYlxuICAgIHw+IElEQi5UcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBEYi5JKVxuXG4gIGxldCBnZXRfdmlld19rZXlzIHN0b3JlIHsgRGIuVmlldy5raW5kID0gXzsgc3JjX3ZpZXdzOyBzb3J0OyBmaWx0ZXJzIH0gPVxuICAgICgqIHRvZG86IHN0YWdlZCBtZW1vaXphdGlvbiArIHNwZWNpYWxpemVkIHF1ZXJpZXMgdXNpbmcgaW5kZXhlcyAqKVxuICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgbGV0IGhhc2ggPSBIYXNodGJsLmhhc2ggKHNyY192aWV3cywgc29ydCwgZmlsdGVycykgaW5cbiAgICBpZiBJbnQuZXF1YWwgKGZzdCAhbGFzdF92aWV3KSBoYXNoIHRoZW4gRnV0Lm9rIChzbmQgIWxhc3RfdmlldylcbiAgICBlbHNlXG4gICAgICBsZXQrIGtleXMgPVxuICAgICAgICB0cnkgRnV0Lm9rIEBAIEhhc2h0YmwuZmluZCB2aWV3X21lbW8gKHNyY192aWV3cywgc29ydClcbiAgICAgICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICBsZXQrIGFsbF9rZXlzID1cbiAgICAgICAgICAgIGxldCBsb3dlciA9IEp2Lm9mX2FycmF5IEp2Lm9mX3N0cmluZyBbfCBcIkF1ZGlvXCIgfF0gaW5cbiAgICAgICAgICAgIGxldCB1cHBlciA9IEp2Lm9mX2FycmF5IEp2Lm9mX3N0cmluZyBbfCBcIkF1ZGlvXFx1ezB9XCIgfF0gaW5cbiAgICAgICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgICAgIElEQi5LZXlfcmFuZ2UuYm91bmQgfmxvd2VyIH51cHBlciB+bG93ZXJfb3Blbjp0cnVlXG4gICAgICAgICAgICAgICAgfnVwcGVyX29wZW46ZmFsc2UgKClcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBsZXQgaWR4ID0gSVMuaW5kZXggKG1vZHVsZSBJUy5JbmRleC5LaW5kX1ZpZXcpIHN0b3JlIGluXG4gICAgICAgICAgICBJUy5JbmRleC5LaW5kX1ZpZXcuZ2V0X2FsbF9rZXlzIH5xdWVyeSBpZHggfD4gYXNfZnV0XG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQga2V5cyA9XG4gICAgICAgICAgICBtYXRjaCBzcmNfdmlld3Mgd2l0aFxuICAgICAgICAgICAgfCBBbGwgLT4gYWxsX2tleXNcbiAgICAgICAgICAgIHwgT25seSBzcmNfdmlld3MgLT5cbiAgICAgICAgICAgICAgICBBcnJheS5maWx0ZXIgYWxsX2tleXNcbiAgICAgICAgICAgICAgICAgIH5mOihmdW4geyBEYi5TdG9yZXMuSXRlbXMuS2V5LnZpZXdzOyBfIH0gLT5cbiAgICAgICAgICAgICAgICAgICAgTGlzdC5leGlzdHMgdmlld3MgfmY6KGZ1biB2IC0+IExpc3QubWVtcSB2IH5zZXQ6c3JjX3ZpZXdzKSlcbiAgICAgICAgICBpblxuICAgICAgICAgIEhhc2h0YmwuYWRkIHZpZXdfbWVtbyAoc3JjX3ZpZXdzLCBzb3J0KSBrZXlzO1xuICAgICAgICAgIGtleXNcbiAgICAgIGluXG4gICAgICBsZXQga2V5cyA9XG4gICAgICAgIG1hdGNoIGZpbHRlcnMgd2l0aFxuICAgICAgICB8IFsgU2VhcmNoIHN1YiBdIHdoZW4gbm90IChTdHJpbmcuaXNfZW1wdHkgc3ViKSAtPlxuICAgICAgICAgICAgbGV0IHN1YiA9IFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgc3ViIGluXG4gICAgICAgICAgICBsZXQgcGF0dGVybiA9IFN0cmluZy5GaW5kLmNvbXBpbGUgKFByaW50Zi5zcHJpbnRmIFwiJXNcIiBzdWIpIGluXG4gICAgICAgICAgICBBcnJheS5maWx0ZXIga2V5cyB+ZjooZnVuIHsgRGIuU3RvcmVzLkl0ZW1zLktleS5zb3J0X25hbWU7IF8gfSAtPlxuICAgICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHNvcnRfbmFtZSBpblxuICAgICAgICAgICAgICAgIFN0cmluZy5GaW5kLmZpbmQgfnBhdHRlcm4gc29ydF9uYW1lID49IDApXG4gICAgICAgIHwgXyAtPiBrZXlzXG4gICAgICBpblxuICAgICAgbGV0ICgpID1cbiAgICAgICAgbWF0Y2ggc29ydCB3aXRoXG4gICAgICAgIHwgTmFtZSAtPlxuICAgICAgICAgICAgQXJyYXkuc29ydCBrZXlzXG4gICAgICAgICAgICAgIH5jbXA6KGZ1blxuICAgICAgICAgICAgICAgICAgeyBEYi5TdG9yZXMuSXRlbXMuS2V5LnNvcnRfbmFtZSA9IHNuYTsgXyB9XG4gICAgICAgICAgICAgICAgICB7IERiLlN0b3Jlcy5JdGVtcy5LZXkuc29ydF9uYW1lID0gc25iOyBfIH1cbiAgICAgICAgICAgICAgICAtPiBTdHJpbmcuY29tcGFyZSBzbmEgc25iKVxuICAgICAgICB8IF8gLT4gKClcbiAgICAgIGluXG4gICAgICBsYXN0X3ZpZXcgOj0gKGhhc2gsIGtleXMpO1xuICAgICAga2V5c1xuXG4gIGxldCBvbl9xdWVyeSAodHlwZSBhKSAocSA6IGEgcXVlcnkpIDogKGEsIGVycm9yKSBGdXQucmVzdWx0ID1cbiAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgIG1hdGNoIHEgd2l0aFxuICAgIHwgU2V0X3Nlc3Npb25fdXVpZCBzIC0+XG4gICAgICAgIGxldCAoKSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaS5zZXRfc2Vzc2lvbl91dWlkIHMgaW5cbiAgICAgICAgRnV0Lm9rICgpXG4gICAgfCBBZGRfc2VydmVycyBsIC0+XG4gICAgICAgIGxldCogaWRiID0gaWRiIGluXG4gICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgbGV0KyByZXMgPSBjaGVja19kYiBpZGIgKExpc3QuaGQgbCkgaW5cbiAgICAgICAgUmVzdWx0Lm1hcF9lcnIgKGZ1biBqdiAtPiBgSnYganYpIHJlc1xuICAgIHwgR2V0X2FsbCAoKSAtPlxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCsgcmVxID0gRGIuSS5nZXRfYWxsIHN0b3JlIHw+IGFzX2Z1dCBpblxuICAgICAgICBBcnJheS5tYXAgfmY6KGZ1biBpIC0+IGkuRGIuU3RvcmVzLkl0ZW1zLml0ZW0pIHJlcSB8PiBBcnJheS50b19saXN0XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyBzZXJ2ZXJfaWQnIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcFxuICAgICAgICAgICAgICAgKExpc3QuZmlsdGVyX21hcCB+ZjooZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgfCBTb21lICh7IERiLlN0b3Jlcy5JdGVtcy5pdGVtID0geyBzZXJ2ZXJfaWQ7IF8gfTsgXyB9IGFzIGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgd2hlbiBTdHJpbmcuZXF1YWwgc2VydmVyX2lkIHNlcnZlcl9pZCcgLT5cbiAgICAgICAgICAgICAgICAgICAgIFNvbWUgaXRlbVxuICAgICAgICAgICAgICAgICB8IFNvbWUgXyB8IE5vbmUgLT4gTm9uZSkpXG4gICAgICAgIGluXG4gICAgICAgIGl0ZW1zXG4gICAgfCBHZXRfbGlicmFyaWVzICgpIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcCAoZnVuIGwgLT5cbiAgICAgICAgICAgICAgICAgTGlzdC5tYXAgbCB+ZjooT3B0aW9uLmdldF9leG5fb3IgXCJJdGVtIHNob3VsZCBleGlzdHMuXCIpKVxuICAgICAgICBpblxuICAgICAgICBpdGVtc1xuICAgIHwgQ3JlYXRlX3ZpZXcgcmVxdWVzdCAtPlxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCsga2V5cyA9IGdldF92aWV3X2tleXMgc3RvcmUgcmVxdWVzdCBpblxuICAgICAgICBsZXQgaXRlbV9jb3VudCA9IEFycmF5Lmxlbmd0aCBrZXlzIGluXG4gICAgICAgIHsgRGIuVmlldy5yZXF1ZXN0OyBzdGFydF9vZmZzZXQgPSAwOyBpdGVtX2NvdW50IH1cbiAgICB8IEdldCAodmlldywgb3JkZXIsIGluZGV4ZXMpIC0+XG4gICAgICAgICgqIFRoaXMgcmVxdWVzdCBpcyBjcml0aWNhbCB0byB2aXJ0dWFsIGxpc3RzIHBlcmZvcm1hbmNlcyBhbmQgc2hvdWxkXG4gICAgICAgICAgIGJlIGFzIGZhc3QgYXMgcG9zc2libGUuICopXG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0KiBrZXlzID0gZ2V0X3ZpZXdfa2V5cyBzdG9yZSB2aWV3LnJlcXVlc3QgaW5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICBsZXQrIHJlc3VsdHMgPVxuICAgICAgICAgIEFycmF5Lm1hcCBpbmRleGVzIH5mOihmdW4gaW5kZXggLT5cbiAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gaW5kZXggKyB2aWV3LnN0YXJ0X29mZnNldCBpblxuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9XG4gICAgICAgICAgICAgICAgICBEYi5WaWV3Lk9yZGVyLmFwcGx5IH5zaXplOnZpZXcuaXRlbV9jb3VudCBvcmRlciBpbmRleFxuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgKCogVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZSB3aGVuIGFjY2VzcyBpcyBzZXF1ZW50aWFsICopXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGtleXMuKGluZGV4KSBpblxuICAgICAgICAgICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgICAgICAgICBsZXQrIHJlc3VsdCA9IElTLmdldCBrZXkgc3RvcmUgfD4gSURCLlJlcXVlc3QuZnV0IGluXG4gICAgICAgICAgICAgICAgbWF0Y2ggcmVzdWx0IHdpdGhcbiAgICAgICAgICAgICAgICB8IE9rIE5vbmUgLT4gTm9uZVxuICAgICAgICAgICAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgICAgICAgICAgICAgIENvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICBbIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBsb2FkaW5nIGl0ZW1cIjsga2V5OyBlcnIgXTtcbiAgICAgICAgICAgICAgICAgICAgTm9uZVxuICAgICAgICAgICAgICAgIHwgT2sgKFNvbWUgdikgLT4gU29tZSB2XG4gICAgICAgICAgICAgIHdpdGggXyAtPiBGdXQucmV0dXJuIE5vbmUpXG4gICAgICAgICAgfD4gZnV0X29mX2FycmF5XG4gICAgICAgIGluXG4gICAgICAgIE9rIHJlc3VsdHNcbmVuZFxuXG5pbmNsdWRlIE1ha2Vfd29ya2VyIChXb3JrZXIpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEVuc3VyZSB0aGF0IFthdF9leGl0XSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHByb2dyYW0gKilcblxubGV0IF8gPSBkb19hdF9leGl0KClcbiJdfQ== +(function(a){typeof +globalThis!=="object"&&(this?b():(a.defineProperty(a.prototype,"_T_",{configurable:true,get:b}),_T_));function +b(){var +b=this||self;b.globalThis=b;delete +a.prototype._T_}}(Object));(function(x){"use strict";var +aG="0",oH="Budget",mC="console",fA="int_of_string",lB="%u",lC=32752,mB="member",ho=881518886,mA="ImageBlurHashes",d0=427938126,hx="fields",oF="%a",oG="%ni",bw=0xff,oE="music",hn=8100,lA="Series",fl=240,ly="LiveTvProgram",lz=0x7ff0,bQ=684370880,oC="ThemeVideoIds",oD="SeasonUserData",lx="End_of_file",dR=-211558048,oB="Out_of_memory",H=963043957,bu=870828711,ny="ProductionLocations",nw="AlbumId",nx="comment",hX="Failure",fz="Unix.Unix_error",nv="^",fy="\\b",hL="Audio",nu="Genres",dP="null",nt="DateLastRefreshed",hK="ENOTDIR",oA="Program",ns="{}",oz="src/core/CCString.pp.ml",cF=992790154,cb=17732,cP="+",oy="DateLastMediaAdded",dZ="false",ox=", characters ",dO=726928360,hJ=8097,fx=869834347,cK="SortName",mz="MusicArtist",bd=3455931,ow="MediaSources",lw="Chapters",dN=1023,cO=125,nr="Pervasives.do_at_exit",cS=-211555818,mw=30214610,mx=143365725,my="ChannelFolderItem",lv="%c",cE=65536,dT=57343,hW="recursive",lu=",@ ",mv=16620,hH=-133,hI=0xf,lt=-588596599,mu="ids",ms="ProviderIds",mt="closedir",ov="Match_failure",hm=3299808,mr=-32,ou="%s",dM=659980059,cR="illegal",mq="MusicAlbum",f="",ot="pathname",ls="SeriesStudio",mp="Year",nq="Photo",hV="fut",lr="infinity",a6=434236056,lq="CollectionFolder",np="fd ",mn="Id",mo=": ",os="']')",mm="ChildCount",lp="Playlist",ml=0xe0,fw="object",dY="end",no="sortOrder",hG='\\"',nn=0xf0,lo="Sys_error",aU=0x80,or="EEXIST",nm="PhotoAlbum",hl=1073741823,oq=826371656,nl="(','",op="Studios",hF="e",nk="PremiereDate",hE="ENOENT",oo="Locations",mk="Undefined_recursive_module",om="RecursiveItemCount",on="Height",aV=2147483647,mj="AirTime",fk="\\t",fr="item",hU=224,ol="%.16g",bc=0x8000,fj="array",ok="SpecialEpisodeNumbers",ln=0x800,lm="@{",nj="Division_by_zero",hT="surrogate",lk="MusicGenre",ll="(Program not linked with -g, cannot print stack backtrace)\n",ni="Channel",hk=55296,oj=192,bP=0x3f,G=106380200,mi=114,mg="Taglines",mh="CustomRating",hj=56320,lj="total_record_count",mf="Settings",hi=" : file already exists",E=128,fv=": No such file or directory",md="CanDelete",me=" dst=",mc="enableUserData",hD=56319,ca=255,bt=256,li="Revenue",hh="id",fq=100,ng="OriginalTitle",nh="DisplayPreferencesId",h=848054398,e=-976970511,oh="PresentationUniqueKey",oi="[]",mb="SpecialFeatureCount",ma=3456159,og=":",dL="true",hg="src/jsonm.ml",fc=102,dK="Items",hC=-97,of="Printexc.handle_uncaught_exception",oe="Type",od="BasicSyncInfo",hS=" : flags Open_rdonly and Open_wronly are not compatible",cJ=123,nf="IsHD",oc="item.Id",hR="sorts",oa="LiveTvChannel",ob="@;",n$="Genre",lh=2047,l_="PlayAccess",l$=">",lg=237,hB="separator",ne="([^/]+)",fi="Name",hf="sort_name",cI=127,be=0xffff,l9="Sys_blocked_io",nd="CanDownload",n_="ExternalEtag",nc="MusicVideo",aO="Unexpected end of input",lf="Etag",l8="People",n9="_",fp="\\n",n8="AggregateFolder",fh="_bigarr02",le="DateLastSaved",hw="not",aW=" ",hQ="compare: functional value",hv="mkdir",n7="parentId",dX=1000,he=191,nb="to",l7="@[",fu="\\\\",n6="Primary",ld=-67383738,hd="fs",l6="BoxSet",lc="ExternalSeriesId",l5=225181919,cQ=-826170817,n4=14596,n5="/static/",fb="StartIndex",na="ExtraIds",m$="%i",dW="lib/db/stores.ml",lb=65279,l4="Assert_failure",m_="SeriesPresentationUniqueKey",m9="0x",dJ=14610,l3=131,n3="Movie",m7="PlayCount",m8=0xdfff,l2="start_index",al=365180284,n1="%X",n2="OCAMLRUNPARAM",m6=": closedir failed",n0=122,m5=17718,hP="in",la="ServerId",m4="Not_found",nZ=".0",dQ="src/uutf.ml",m3="Studio",hO="views",nY="CommunityRating",hu="items",m2="EnableMediaSourceDisplay",l1=429931233,R=852405675,nX="ThemeSongIds",m1="%Li",nW="Recording",k$="Invalid_argument",l0="lone",cN=254,fg="Set.bal",nV="HomePageUrl",bs=0xffffff,fo="DateCreated",ht=120,lZ=1027,cH=1024,m0="MediaSourceCount",lY=246,k_="Trailer",lX="Season",mZ="Video",nU="includeItemTypes",hc=512,b_=-752863768,hA=", ",nT="SyncInfo",mY="Descending",k8="%li",k9=1026,mX=133,mW="BasePluginFolder",k7="b",k6="Person",fa="\\r",lW="AlbumArtist",hb="nan",lV="stream",mV="%.17g",nS="ScreenshotImageTags",bR="or",ha="rmdir",lU="Album",hs="Fatal error: exception ",mU="Cstruct.blit_from_string src=",ft=1017453041,Z="camlinternalFormat.ml",mT="startIndex",k5="'}')",mS="DatePlayed",lT="CriticRating",mR=" ",dV=708012133,nR="RefreshState",w=248,nQ=24029,hr="ItemId",mP="ChannelInfo",mQ="low",nP=713199754,mO="PrimaryImageAspectRatio",hq="date_added",nO="ENOTEMPTY",e$="character",nN=726711616,hN=1255,cD="value",nM="sortBy",lS=508493173,hz=" : flags Open_text and Open_binary are not compatible",a="@ ",lR="Ascending",nL="Overview",fs="JSON",lP="Book",lQ="Stack_overflow",hy=": Not a directory",nK="Random",mN="ExternalUrls",ff="Path",hM="string",dU=-48,k4=" : is a directory",fn="error",nJ=732461442,e_=1006505782,k3="userId",bO=".",nI="TvProgram",k2="ServiceName",dI=-364210971,cG="",mM="music\0",k0=438511779,k1="CollectionType",cM="name",mL="Artist",nH="Folder",nG="limit",ak=737456202,lO=-10,kZ="ItemCounts",lN="UserView",mK="ProductionYear",nF="CumulativeRunTimeTicks",lM="LocalTrailerCount",g$=",",fe="ParentId",g_="index out of bounds",a7="/",fd=605782321,lL="Tags",dS=252,kY="Runtime",g9="%d",bv=3654863,nE="Episode",mI="PlaylistsFolder",mJ=": file descriptor already closed",b$="-",nD="Width",g8="EBADF",g7=" len=",nC="includeExternalContent",aN=-633954146,lK="RemoteTrailers",mH=12520,lJ="enableImages",kX="items_by_date_added",lH=153884648,lI="Fatal error: exception %s\n",nA="sorts.views",nB="InheritedParentalRatingValue",lG="ChannelImage",e9=250,fm="TotalRecordCount",kW="MediaStreams",lF="input",hp="jsError",e8=103,cL='"',kV="%.0f",mG=0xdc00,mF="TvChannel",lE="UserRootFolder",mE="SeriesPrimaryImage",mD="buffer.ml",nz="AudioBook",lD="ManualPlaylistsFolder";function +Hj(a,b,c,d,e){if(d<=b)for(var +f=1;f<=e;f++)c[d+f]=a[b+f];else +for(var +f=e;f>=1;f--)c[d+f]=a[b+f];return 0}function +Hk(a,b,c,d){for(var +e=0;ea.hi)return 1;if(this.hia.mi)return 1;if(this.mia.lo)return 1;if(this.loc)return 1;if(ba.mi)return 1;if(this.mia.lo)return 1;if(this.lo>24),c=-this.hi+(b>>24);return new +o(a,b,c)};o.prototype.add=function(a){var +b=this.lo+a.lo,c=this.mi+a.mi+(b>>24),d=this.hi+a.hi+(c>>24);return new +o(b,c,d)};o.prototype.sub=function(a){var +b=this.lo-a.lo,c=this.mi-a.mi+(b>>24),d=this.hi-a.hi+(c>>24);return new +o(b,c,d)};o.prototype.mul=function(a){var +b=this.lo*a.lo,c=(b*oW|0)+this.mi*a.lo+this.lo*a.mi,d=(c*oW|0)+this.hi*a.lo+this.mi*a.mi+this.lo*a.hi;return new +o(b,c,d)};o.prototype.isZero=function(){return(this.lo|this.mi|this.hi)==0};o.prototype.isNeg=function(){return this.hi<<16<0};o.prototype.and=function(a){return new +o(this.lo&a.lo,this.mi&a.mi,this.hi&a.hi)};o.prototype.or=function(a){return new +o(this.lo|a.lo,this.mi|a.mi,this.hi|a.hi)};o.prototype.xor=function(a){return new +o(this.lo^a.lo,this.mi^a.mi,this.hi^a.hi)};o.prototype.shift_left=function(a){a=a&63;if(a==0)return this;if(a<24)return new +o(this.lo<>24-a,this.hi<>24-a);if(a<48)return new +o(0,this.lo<>48-a);return new +o(0,0,this.lo<>a|this.mi<<24-a,this.mi>>a|this.hi<<24-a,this.hi>>a);if(a<48)return new +o(this.mi>>a-24|this.hi<<48-a,this.hi>>a-24,0);return new +o(this.hi>>a-48,0,0)};o.prototype.shift_right=function(a){a=a&63;if(a==0)return this;var +c=this.hi<<16>>16;if(a<24)return new +o(this.lo>>a|this.mi<<24-a,this.mi>>a|c<<24-a,this.hi<<16>>a>>>16);var +b=this.hi<<16>>31;if(a<48)return new +o(this.mi>>a-24|this.hi<<48-a,this.hi<<16>>a-24>>16,b&be);return new +o(this.hi<<16>>a-32,b,b)};o.prototype.lsl1=function(){this.hi=this.hi<<1|this.mi>>23;this.mi=(this.mi<<1|this.lo>>23)&bs;this.lo=this.lo<<1&bs};o.prototype.lsr1=function(){this.lo=(this.lo>>>1|this.mi<<23)&bs;this.mi=(this.mi>>>1|this.hi<<23)&bs;this.hi=this.hi>>>1};o.prototype.udivmod=function(a){var +d=0,c=this.copy(),b=a.copy(),e=new +o(0,0,0);while(c.ucompare(b)>0){d++;b.lsl1()}while(d>=0){d--;e.lsl1();if(c.ucompare(b)>=0){e.lo++;c=c.sub(b)}b.lsr1()}return{quotient:e,modulus:c}};o.prototype.div=function(a){var +b=this;if(a.isZero())ic();var +d=b.hi^a.hi;if(b.hi&bc)b=b.neg();if(a.hi&bc)a=a.neg();var +c=b.udivmod(a).quotient;if(d&bc)c=c.neg();return c};o.prototype.mod=function(a){var +b=this;if(a.isZero())ic();var +d=b.hi;if(b.hi&bc)b=b.neg();if(a.hi&bc)a=a.neg();var +c=b.udivmod(a).modulus;if(d&bc)c=c.neg();return c};o.prototype.toInt=function(){return this.lo|this.mi<<24};o.prototype.toFloat=function(){return(this.hi<<16)*Math.pow(2,32)+this.mi*Math.pow(2,24)+this.lo};o.prototype.toArray=function(){return[this.hi>>8,this.hi&bw,this.mi>>16,this.mi>>8&bw,this.mi&bw,this.lo>>16,this.lo>>8&bw,this.lo&bw]};o.prototype.lo32=function(){return this.lo|(this.mi&bw)<<24};o.prototype.hi32=function(){return this.mi>>>8&be|this.hi<<16};function +HL(a,b){return new +o(a&bs,a>>>24&bw|(b&be)<<8,b>>>16&be)}function +h8(a){return a.hi32()}function +h9(a){return a.lo32()}function +cd(){Q(g_)}var +Hm=fh;function +bS(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}bS.prototype.caml_custom=Hm;bS.prototype.offset=function(a){var +c=0;if(typeof +a==="number")a=[a];if(!(a +instanceof +Array))Q("bigarray.js: invalid offset");if(this.dims.length!=a.length)Q("Bigarray.get/set: bad number of dimensions");if(this.layout==0)for(var +b=0;b=this.dims[b])cd();c=c*this.dims[b]+a[b]}else +for(var +b=this.dims.length-1;b>=0;b--){if(a[b]<1||a[b]>this.dims[b])cd();c=c*this.dims[b]+(a[b]-1)}return c};bS.prototype.get=function(a){switch(this.kind){case +7:var +d=this.data[a*2+0],b=this.data[a*2+1];return HL(d,b);case +10:case +11:var +e=this.data[a*2+0],c=this.data[a*2+1];return[cN,e,c];default:return this.data[a]}};bS.prototype.set=function(a,b){switch(this.kind){case +7:this.data[a*2+0]=h9(b);this.data[a*2+1]=h8(b);break;case +10:case +11:this.data[a*2+0]=b[1];this.data[a*2+1]=b[2];break;default:this.data[a]=b;break}return 0};bS.prototype.fill=function(a){switch(this.kind){case +7:var +c=h9(a),e=h8(a);if(c==e)this.data.fill(c);else +for(var +b=0;be)return 1;if(d!=e){if(!b)return NaN;if(d==d)return 1;if(e==e)return-1}}break;case +7:for(var +c=0;ca.data[c+1])return 1;if(this.data[c]>>>0>>0)return-1;if(this.data[c]>>>0>a.data[c]>>>0)return 1}break;case +2:case +3:case +4:case +5:case +6:case +8:case +9:case +12:for(var +c=0;ca.data[c])return 1}break}return 0};function +cT(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}cT.prototype=new +bS();cT.prototype.offset=function(a){if(typeof +a!=="number")if(a +instanceof +Array&&a.length==1)a=a[0];else +Q("Ml_Bigarray_c_1_1.offset");if(a<0||a>=this.dims[0])cd();return a};cT.prototype.get=function(a){return this.data[a]};cT.prototype.set=function(a,b){this.data[a]=b;return 0};cT.prototype.fill=function(a){this.data.fill(a);return 0};function +hY(a,b,c,d){var +e=oM(a);if(fC(c)*e!=d.length)Q("length doesn't match dims");if(b==0&&c.length==1&&e==1)return new +cT(a,b,c,d);return new +bS(a,b,c,d)}function +fK(a){return a.slice(1)}function +Hl(a,b,c){var +d=fK(c),e=oK(a,fC(d));return hY(a,b,d,e)}function +Hn(a,b){if(b<0||b>=a.dims.length)Q("Bigarray.dim");return a.dims[b]}function +Ho(a){return Hn(a,0)}function +Hp(a,b){return a.get(a.offset(b))}function +ea(a,b,c){var +d=String.fromCharCode;if(b==0&&c<=4096&&c==a.length)return d.apply(null,a);var +e=f;for(;0=c.l||c.t==2&&e>=c.c.length)){c.c=a.t==4?ea(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else if(c.t==2&&d==c.c.length){c.c+=a.t==4?ea(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else{if(c.t!=4)fF(c);var +g=a.c,h=c.c;if(a.t==4)if(d<=b)for(var +f=0;f=0;f--)h[d+f]=g[b+f];else{var +i=Math.min(e,g.length-b);for(var +f=0;f>=1;if(a==0)return d;b+=b;c++;if(c==9)b.slice(0,1)}}function +d3(a){if(a.t==2)a.c+=cZ(a.l-a.c.length,"\0");else +a.c=ea(a.c,0,a.c.length);a.t=0}function +ig(a){if(a.length<24){for(var +b=0;bcI)return false;return true}else +return!/[^\x00-\x7f]/.test(a)}function +o_(a){for(var +k=f,d=f,h,g,i,b,c=0,j=a.length;chc){d.substr(0,1);k+=d;d=f;k+=a.slice(c,e)}else +d+=a.slice(c,e);if(e==j)break;c=e}b=1;if(++c=0xd7ff&&b<0xe000)b=2}else{b=3;if(++c0x10ffff)b=3}}}}}if(b<4){c-=b;d+="\ufffd"}else if(b>be)d+=String.fromCharCode(0xd7c0+(b>>10),mG+(b&0x3FF));else +d+=String.fromCharCode(b);if(d.length>cH){d.substr(0,1);k+=d;d=f}}return k+d}function +bx(a,b,c){this.t=a;this.c=b;this.l=c}bx.prototype.toString=function(){switch(this.t){case +9:return this.c;default:d3(this);case +0:if(ig(this.c)){this.t=9;return this.c}this.t=8;case +8:return this.c}};bx.prototype.toUtf16=function(){var +a=this.toString();if(this.t==9)return a;return o_(a)};bx.prototype.slice=function(){var +a=this.t==4?this.c.slice():this.c;return new +bx(this.t,a,this.l)};function +oQ(a){return new +bx(0,a,a.length)}function +a9(a){return a}function +bU(a){return oQ(a9(a))}function +bT(a,b,c,d,e){aX(bU(a),b,c,d,e);return 0}function +n(a){return a.length}function +aR(a,b){return a.charCodeAt(b)}function +o9(a){var +d=n(a),c=new +Uint8Array(d),b=0;for(;bn(a))cd();if(f+e>c.data.length)cd();var +g=o9(a).slice(b,b+e);c.data.set(g,f);return 0}var +Hr=Hq;function +oP(){Q(g_)}function +d2(a,b){switch(a.t&6){default:if(b>=a.c.length)return 0;case +0:return a.c.charCodeAt(b);case +4:return a.c[b]}}function +fD(a,b){if(b>>>0>=a.l)oP();return d2(a,b)}function +M(a,b,c){c&=bw;if(a.t!=4){if(b==a.c.length){a.c+=String.fromCharCode(c);if(b+1==a.l)a.t=0;return 0}fF(a)}a.c[b]=c;return 0}function +cU(a,b,c){if(b>>>0>=a.l)oP();return M(a,b,c)}function +by(d,c){var +f=d.l>=0?d.l:d.l=d.length,e=c.length,b=f-e;if(b==0)return d.apply(null,c);else if(b<0){var +a=d.apply(null,c.slice(0,f));if(typeof +a!=="function")return a;return by(a,c.slice(f))}else{switch(b){case +1:{var +a=function(a){var +f=new +Array(e+1);for(var +b=0;b>>0>=a.length-1)cd();return a}function +h0(a){if(isFinite(a)){if(Math.abs(a)>=2.2250738585072014e-308)return 0;if(a!=0)return 1;return 2}return isNaN(a)?4:3}function +oX(a){return 0}var +Is=Math.log2&&Math.log2(1.1235582092889474E+307)==1020;function +Ir(a){if(Is)return Math.floor(Math.log2(a));var +b=0;if(a==0)return-Infinity;if(a>=1)while(a>=2){a/=2;b++}else +while(a<1){a*=2;b--}return b}function +h6(a){var +b=new +Float32Array(1);b[0]=a;var +c=new +Int32Array(b.buffer);return c[0]|0}function +ce(a,b,c){return new +o(a,b,c)}function +fH(a){if(!isFinite(a)){if(isNaN(a))return ce(1,0,lz);return a>0?ce(0,0,lz):ce(0,0,0xfff0)}var +f=a==0&&1/a==-Infinity?bc:a>=0?0:bc;if(f)a=-a;var +b=Ir(a)+dN;if(b<=0){b=0;a/=Math.pow(2,-k9)}else{a/=Math.pow(2,b-lZ);if(a<16){a*=2;b-=1}if(b==0)a/=2}var +d=Math.pow(2,24),c=a|0;a=(a-c)*d;var +e=a|0;a=(a-e)*d;var +g=a|0;c=c&hI|f|b<<4;return ce(g,e,c)}function +d8(a){return a.toArray()}function +oO(a,b,c){a.write(32,b.dims.length);a.write(32,b.kind|b.layout<<8);if(b.caml_custom==fh)for(var +d=0;d>4;if(d==lh)return(f|g|c&hI)==0?c&bc?-Infinity:Infinity:NaN;var +e=Math.pow(2,-24),b=(f*e+g)*e+(c&hI);if(d>0){b+=16;b*=Math.pow(2,d-lZ)}else +b*=Math.pow(2,-k9);if(c&bc)b=-b;return b}function +aH(a){if(!am.Failure)am.Failure=[w,aQ(hX),-3];ib(am.Failure,a)}function +oL(a,b,c){var +k=a.read32s();if(k<0||k>16)aH("input_value: wrong number of bigarray dimensions");var +r=a.read32s(),l=r&bw,q=r>>8&1,j=[];if(c==fh)for(var +d=0;d>>32-15;b=fM(b,0x1b873593);a^=b;a=a<<13|a>>>32-13;return(a+(a<<2)|0)+(0xe6546b64|0)|0}function +HG(a,b){a=an(a,h9(b));a=an(a,h8(b));return a}function +h4(a,b){return HG(a,fH(b))}function +oN(a){var +c=fC(a.dims),d=0;switch(a.kind){case +2:case +3:case +12:if(c>bt)c=bt;var +e=0,b=0;for(b=0;b+4<=a.data.length;b+=4){e=a.data[b+0]|a.data[b+1]<<8|a.data[b+2]<<16|a.data[b+3]<<24;d=an(d,e)}e=0;switch(c&3){case +3:e=a.data[b+2]<<16;case +2:e|=a.data[b+1]<<8;case +1:e|=a.data[b+0];d=an(d,e)}break;case +4:case +5:if(c>E)c=E;var +e=0,b=0;for(b=0;b+2<=a.data.length;b+=2){e=a.data[b+0]|a.data[b+1]<<16;d=an(d,e)}if((c&1)!=0)d=an(d,a.data[b]);break;case +6:if(c>64)c=64;for(var +b=0;b64)c=64;for(var +b=0;b32)c=32;c*=2;for(var +b=0;b64)c=64;for(var +b=0;b32)c=32;for(var +b=0;b0?f(b,a,d):f(a,b,d);if(d&&e!=e)return c;if(+e!=+e)return+e;if((e|0)!=0)return e|0}return c}function +fJ(a){return typeof +a==="string"&&!/[^\x00-\xff]/.test(a)}function +fI(a){return a +instanceof +bx}function +oS(a){if(typeof +a==="number")return dX;else if(fI(a))return dS;else if(fJ(a))return 1252;else if(a +instanceof +Array&&a[0]===a[0]>>>0&&a[0]<=ca){var +b=a[0]|0;return b==cN?0:b}else if(a +instanceof +String)return mH;else if(typeof +a=="string")return mH;else if(a +instanceof +Number)return dX;else if(a&&a.caml_custom)return hN;else if(a&&a.compare)return 1256;else if(typeof +a=="function")return 1247;else if(typeof +a=="symbol")return 1251;return 1001}function +HV(a,b){if(ab?1:0}function +Ht(a,b){a.t&6&&d3(a);b.t&6&&d3(b);return a.cb.c?1:0}function +cW(a,b,c){var +f=[];for(;;){if(!(c&&a===b)){var +e=oS(a);if(e==e9){a=a[1];continue}var +g=oS(b);if(g==e9){b=b[1];continue}if(e!==g){if(e==dX){if(g==hN)return oR(a,b,-1,c);return-1}if(g==dX){if(e==hN)return oR(b,a,1,c);return 1}return eb)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case +1001:if(ab)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case +1251:if(a!==b){if(!c)return NaN;return 1}break;case +1252:var +a=a9(a),b=a9(b);if(a!==b){if(ab)return 1}break;case +12520:var +a=a.toString(),b=b.toString();if(a!==b){if(ab)return 1}break;case +246:case +254:default:if(oX(e)){Q("compare: continuation value");break}if(a.length!=b.length)return a.length1)f.push(a,b,1);break}}if(f.length==0)return 0;var +h=f.pop();b=f.pop();a=f.pop();if(h+10)if(b==0&&(c>=a.l||a.t==2&&c>=a.c.length))if(d==0){a.c=f;a.t=2}else{a.c=cZ(c,String.fromCharCode(d));a.t=c==a.l?0:2}else{if(a.t!=4)fF(a);for(c+=b;b0&&b===b)return b;a=a.replace(/_/g,f);b=+a;if(a.length>0&&b===b||/^[+-]?nan$/i.test(a))return b;var +c=/^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(a);if(c){var +d=c[3].replace(/0+$/,f),g=parseInt(c[1]+c[2]+d,16),e=(c[5]|0)-4*d.length;b=g*Math.pow(2,e);return b}if(/^\+?inf(inity)?$/i.test(a))return Infinity;if(/^-inf(inity)?$/i.test(a))return-Infinity;aH("float_of_string")}function +ia(a){a=a9(a);var +e=a.length;if(e>31)Q("format_int: format too long");var +b={justify:cP,signstyle:b$,filler:aW,alternate:false,base:0,signedconv:false,width:0,uppercase:false,sign:1,prec:-1,conv:"f"};for(var +d=0;d=0&&c<=9){b.width=b.width*10+c;d++}d--;break;case".":b.prec=0;d++;while(c=a.charCodeAt(d)-48,c>=0&&c<=9){b.prec=b.prec*10+c;d++}d--;case"d":case"i":b.signedconv=true;case"u":b.base=10;break;case"x":b.base=16;break;case"X":b.base=16;b.uppercase=true;break;case"o":b.base=8;break;case"e":case"f":case"g":b.signedconv=true;b.conv=c;break;case"E":case"F":case"G":b.signedconv=true;b.uppercase=true;b.conv=c.toLowerCase();break}}return b}function +h2(a,b){if(a.uppercase)b=b.toUpperCase();var +e=b.length;if(a.signedconv&&(a.sign<0||a.signstyle!=b$))e++;if(a.alternate){if(a.base==8)e+=1;if(a.base==16)e+=2}var +c=f;if(a.justify==cP&&a.filler==aW)for(var +d=e;d20){c-=20;a/=Math.pow(10,c);a+=new +Array(c+1).join(aG);if(b>0)a=a+bO+new +Array(b+1).join(aG);return a}else +return a.toFixed(b)}}var +c,f=ia(a),e=f.prec<0?6:f.prec;if(b<0||b==0&&1/b==-Infinity){f.sign=-1;b=-b}if(isNaN(b)){c=hb;f.filler=aW}else if(!isFinite(b)){c="inf";f.filler=aW}else +switch(f.conv){case"e":var +c=b.toExponential(e),d=c.length;if(c.charAt(d-3)==hF)c=c.slice(0,d-1)+aG+c.slice(d-1);break;case"f":c=j(b,e);break;case"g":e=e?e:1;c=b.toExponential(e-1);var +i=c.indexOf(hF),h=+c.slice(i+1);if(h<-4||b>=1e21||b.toFixed(0).length>e){var +d=i-1;while(c.charAt(d)==aG)d--;if(c.charAt(d)==bO)d--;c=c.slice(0,d+1)+c.slice(i);d=c.length;if(c.charAt(d-3)==hF)c=c.slice(0,d-1)+aG+c.slice(d-1);break}else{var +g=e;if(h<0){g-=h+1;c=b.toFixed(g)}else +while(c=b.toFixed(g),c.length>e+1)g--;if(g){var +d=c.length-1;while(c.charAt(d)==aG)d--;if(c.charAt(d)==bO)d--;c=c.slice(0,d+1)}}break}return h2(f,c)}function +d6(a,b){if(a9(a)==g9)return aQ(f+b);var +c=ia(a);if(b<0)if(c.signedconv){c.sign=-1;b=-b}else +b>>>=0;var +d=b.toString(c.base);if(c.prec>=0){c.filler=aW;var +e=c.prec-d.length;if(e>0)d=cZ(e,aG)+d}return h2(c,d)}var +Ig=0;function +aa(){return Ig++}function +aP(a){if(ig(a))return a;return o_(a)}function +ec(){return typeof +x.process!=="undefined"&&typeof +x.process.versions!=="undefined"&&typeof +x.process.versions.node!=="undefined"}function +It(){function +a(a){if(a.charAt(0)===a7)return[f,a.substring(1)];return}function +b(a){var +h=/^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/,b=h.exec(a),c=b[1]||f,e=Boolean(c&&c.charAt(1)!==og);if(Boolean(b[2]||e)){var +d=b[1]||f,g=b[2]||f;return[d,a.substring(d.length+g.length)]}return}return ec()&&x.process&&x.process.platform?x.process.platform==="win32"?b:a:a}var +ih=It();function +o8(a){return a.slice(-1)!==a7?a+a7:a}if(ec()&&x.process&&x.process.cwd)var +d4=x.process.cwd().replace(/\\/g,a7);else +var +d4="/static";d4=o8(d4);function +H4(a){a=aP(a);if(!ih(a))a=d4+a;var +e=ih(a),d=e[1].split(a7),b=[];for(var +c=0;c1)b.pop();break;case".":break;case"":break;default:b.push(d[c]);break}b.unshift(e[0]);b.orig=a;return b}function +Iq(a){for(var +g=f,c=g,b,i,d=0,h=a.length;dhc){c.substr(0,1);g+=c;c=f;g+=a.slice(d,e)}else +c+=a.slice(d,e);if(e==h)break;d=e}if(b>6);c+=String.fromCharCode(aU|b&bP)}else if(b<0xd800||b>=m8)c+=String.fromCharCode(ml|b>>12,aU|b>>6&bP,aU|b&bP);else if(b>=0xdbff||d+1==h||(i=a.charCodeAt(d+1))m8)c+="\xef\xbf\xbd";else{d++;b=(b<<10)+i-0x35fdc00;c+=String.fromCharCode(nn|b>>18,aU|b>>12&bP,aU|b>>6&bP,aU|b&bP)}if(c.length>cH){c.substr(0,1);g+=c;c=f}}return g+c}function +aZ(a){return ig(a)?aQ(a):aQ(Iq(a))}var +Iu=["E2BIG","EACCES","EAGAIN",g8,"EBUSY","ECHILD","EDEADLK","EDOM",or,"EFAULT","EFBIG","EINTR","EINVAL","EIO","EISDIR","EMFILE","EMLINK","ENAMETOOLONG","ENFILE","ENODEV",hE,"ENOEXEC","ENOLCK","ENOMEM","ENOSPC","ENOSYS",hK,nO,"ENOTTY","ENXIO","EPERM","EPIPE","ERANGE","EROFS","ESPIPE","ESRCH","EXDEV","EWOULDBLOCK","EINPROGRESS","EALREADY","ENOTSOCK","EDESTADDRREQ","EMSGSIZE","EPROTOTYPE","ENOPROTOOPT","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EOPNOTSUPP","EPFNOSUPPORT","EAFNOSUPPORT","EADDRINUSE","EADDRNOTAVAIL","ENETDOWN","ENETUNREACH","ENETRESET","ECONNABORTED","ECONNRESET","ENOBUFS","EISCONN","ENOTCONN","ESHUTDOWN","ETOOMANYREFS","ETIMEDOUT","ECONNREFUSED","EHOSTDOWN","EHOSTUNREACH","ELOOP","EOVERFLOW"];function +bB(a,b,c,d){var +e=Iu.indexOf(a);if(e<0){if(d==null)d=-9999;e=[0,d]}var +g=[e,aZ(b||f),aZ(c||f)];return g}var +o2={};function +bX(a){return o2[a]}function +bz(a,b){throw i([0,a].concat(b))}function +hZ(a){if(!(a +instanceof +Uint8Array))a=new +Uint8Array(a);return new +bx(4,a,a.length)}function +u(a){ib(am.Sys_error,a)}function +o5(a){u(a+fv)}function +eb(a){if(a.t!=4)fF(a);return a.c}function +ao(a){return a.l}function +oI(){}function +au(a){this.data=a}au.prototype=new +oI();au.prototype.constructor=au;au.prototype.truncate=function(a){var +b=this.data;this.data=K(a|0);aX(b,0,this.data,0,a)};au.prototype.length=function(){return ao(this.data)};au.prototype.write=function(a,b,c,d){var +e=this.length();if(a+d>=e){var +f=K(a+d),g=this.data;this.data=f;aX(g,0,this.data,0,e)}aX(hZ(b),c,this.data,a,d);return 0};au.prototype.read=function(a,b,c,d){var +e=this.length();if(a+d>=e)d=e-a;if(d){var +f=K(d|0);aX(this.data,a,f,0,d);b.set(eb(f),c)}return d};function +cc(a,b,c){this.file=b;this.name=a;this.flags=c}cc.prototype.err_closed=function(){u(this.name+mJ)};cc.prototype.length=function(){if(this.file)return this.file.length();this.err_closed()};cc.prototype.write=function(a,b,c,d){if(this.file)return this.file.write(a,b,c,d);this.err_closed()};cc.prototype.read=function(a,b,c,d){if(this.file)return this.file.read(a,b,c,d);this.err_closed()};cc.prototype.close=function(){this.file=undefined};function +$(a,b){this.content={};this.root=a;this.lookupFun=b}$.prototype.nm=function(a){return this.root+a};$.prototype.create_dir_if_needed=function(a){var +d=a.split(a7),c=f;for(var +b=0;b=0)}function +h5(a,b){var +e=b.length,c,d;for(c=0;c+4<=e;c+=4){d=b.charCodeAt(c)|b.charCodeAt(c+1)<<8|b.charCodeAt(c+2)<<16|b.charCodeAt(c+3)<<24;a=an(a,d)}d=0;switch(e&3){case +3:d=b.charCodeAt(c+2)<<16;case +2:d|=b.charCodeAt(c+1)<<8;case +1:d|=b.charCodeAt(c);a=an(a,d)}a^=e;return a}function +HH(a,b){return h5(a,a9(b))}function +HE(a,b){var +e=b.length,c,d;for(c=0;c+4<=e;c+=4){d=b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24;a=an(a,d)}d=0;switch(e&3){case +3:d=b[c+2]<<16;case +2:d|=b[c+1]<<8;case +1:d|=b[c];a=an(a,d)}a^=e;return a}function +H7(a){switch(a.t&6){default:d3(a);case +0:return a.c;case +4:return a.c}}function +HD(a,b){var +c=H7(b);return typeof +c==="string"?h5(a,c):HE(a,c)}function +HF(a){a^=a>>>16;a=fM(a,0x85ebca6b|0);a^=a>>>13;a=fM(a,0xc2b2ae35|0);a^=a>>>16;return a}function +oV(a,b,c,d){var +j,k,l,h,g,f,e,i,m;h=b;if(h<0||h>bt)h=bt;g=a;f=c;j=[d];k=0;l=1;while(k0){e=j[k++];if(e&&e.caml_custom){if(d5[e.caml_custom]&&d5[e.caml_custom].hash){var +n=d5[e.caml_custom].hash(e);f=an(f,n);g--}}else if(e +instanceof +Array&&e[0]===(e[0]|0))switch(e[0]){case +248:f=an(f,e[2]);g--;break;case +250:j[--k]=e[1];break;default:if(oX(e[0]))break;var +o=e.length-1<<10|e[0];f=an(f,o);for(i=1,m=e.length;i=h)break;j[l++]=e[i]}break}else if(fI(e)){f=HD(f,e);g--}else if(fJ(e)){f=HH(f,e);g--}else if(typeof +e==="string"){f=h5(f,e);g--}else if(e===(e|0)){f=an(f,e+e+1);g--}else if(typeof +e==="number"){f=h4(f,e);g--}}f=HF(f);return f&0x3FFFFFFF}function +HI(a,b,c){if(!isFinite(a)){if(isNaN(a))return aZ(hb);return aZ(a>0?lr:"-infinity")}var +k=a==0&&1/a==-Infinity?1:a>=0?0:1;if(k)a=-a;var +e=0;if(a==0);else if(a<1)while(a<1&&e>-1022){a*=2;e--}else +while(a>=2){a/=2;e++}var +l=e<0?f:cP,g=f;if(k)g=b$;else +switch(c){case +43:g=cP;break;case +32:g=aW;break;default:break}if(b>=0&&b<13){var +i=Math.pow(2,b*4);a=Math.round(a*i)/i}var +d=a.toString(16);if(b>=0){var +j=d.indexOf(bO);if(j<0)d+=bO+cZ(b,aG);else{var +h=j+1+b;if(d.length>24&bs,a>>31&be)}function +HT(a){return a.toInt()}function +HO(a){return+a.isNeg()}function +HR(a){return a.neg()}function +HM(a,b){var +c=ia(a);if(c.signedconv&&HO(b)){c.sign=-1;b=HR(b)}var +d=f,i=HS(c.base),h="0123456789abcdef";do{var +g=b.udivmod(i);b=g.quotient;d=h.charAt(HT(g.modulus))+d}while(!HP(b));if(c.prec>=0){c.filler=aW;var +e=c.prec-d.length;if(e>0)d=cZ(e,aG)+d}return h2(c,d)}function +Ih(a){var +b=0,e=n(a),c=10,d=1;if(e>0)switch(aR(a,b)){case +45:b++;d=-1;break;case +43:b++;d=1;break}if(b+1=48&&a<=57)return a-48;if(a>=65&&a<=90)return a-55;if(a>=97&&a<=n0)return a-87;return-1}function +HW(a){var +h=Ih(a),d=h[0],i=h[1],e=h[2],g=n(a),j=-1>>>0,f=d=e)aH(fA);var +b=c;for(d++;d=e)break;b=e*b+c;if(b>j)aH(fA)}if(d!=g)aH(fA);b=i*b;if(e==10&&(b|0)!=b)aH(fA);return b|0}function +cf(a,b,c){return a[aP(b)].apply(a,fK(c))}function +HY(a,b){switch(b.length){case +1:return new +a;case +2:return new +a(b[1]);case +3:return new +a(b[1],b[2]);case +4:return new +a(b[1],b[2],b[3]);case +5:return new +a(b[1],b[2],b[3],b[4]);case +6:return new +a(b[1],b[2],b[3],b[4],b[5]);case +7:return new +a(b[1],b[2],b[3],b[4],b[5],b[6]);case +8:return new +a(b[1],b[2],b[3],b[4],b[5],b[6],b[7])}function +c(){return a.apply(this,fK(b))}c.prototype=a.prototype;return new +c}function +HZ(a){var +c={};for(var +b=1;b>16;return c}function +oY(a,b,c){var +o=2,p=3,s=5,e=6,i=7,h=8,k=9,n=1,m=2,r=3,t=4,q=5;if(!a.lex_default){a.lex_base=d_(a[n]);a.lex_backtrk=d_(a[m]);a.lex_check=d_(a[q]);a.lex_trans=d_(a[t]);a.lex_default=d_(a[r])}var +f,d=b,l=eb(c[o]);if(d>=0){c[i]=c[s]=c[e];c[h]=-1}else +d=-d-1;for(;;){var +g=a.lex_base[d];if(g<0)return-g-1;var +j=a.lex_backtrk[d];if(j>=0){c[i]=c[e];c[h]=j}if(c[e]>=c[p])if(c[k]==0)return-d-1;else +f=bt;else{f=l[c[e]];c[e]++}if(a.lex_check[g+f]==d)d=a.lex_trans[g+f];else +d=a.lex_default[d];if(d<0){c[e]=c[i];if(c[h]==-1)aH("lexing: empty token");else +return c[h]}else if(f==bt)c[k]=0}}function +H2(a){var +c=0;for(var +b=a.length-1;b>=0;b--){var +d=a[b];c=[0,d,c]}return c}function +H3(a){var +b=[];for(;a!==0;a=a[2])b.push(a[1]);return b}function +bV(a,b){if(a<0)cd();var +a=a+1|0,c=new +Array(a);c[0]=0;for(var +d=1;d>>32-e,c)}function +g(a,b,c,d,e,f,g){return l(b&c|~b&d,a,b,e,f,g)}function +h(a,b,c,d,e,f,g){return l(b&d|c&~d,a,b,e,f,g)}function +i(a,b,c,d,e,f,g){return l(b^c^d,a,b,e,f,g)}function +j(a,b,c,d,e,f,g){return l(c^(b|~d),a,b,e,f,g)}return function(a,b){var +c=a[0],d=a[1],e=a[2],f=a[3];c=g(c,d,e,f,b[0],7,0xD76AA478);f=g(f,c,d,e,b[1],12,0xE8C7B756);e=g(e,f,c,d,b[2],17,0x242070DB);d=g(d,e,f,c,b[3],22,0xC1BDCEEE);c=g(c,d,e,f,b[4],7,0xF57C0FAF);f=g(f,c,d,e,b[5],12,0x4787C62A);e=g(e,f,c,d,b[6],17,0xA8304613);d=g(d,e,f,c,b[7],22,0xFD469501);c=g(c,d,e,f,b[8],7,0x698098D8);f=g(f,c,d,e,b[9],12,0x8B44F7AF);e=g(e,f,c,d,b[10],17,0xFFFF5BB1);d=g(d,e,f,c,b[11],22,0x895CD7BE);c=g(c,d,e,f,b[12],7,0x6B901122);f=g(f,c,d,e,b[13],12,0xFD987193);e=g(e,f,c,d,b[14],17,0xA679438E);d=g(d,e,f,c,b[15],22,0x49B40821);c=h(c,d,e,f,b[1],5,0xF61E2562);f=h(f,c,d,e,b[6],9,0xC040B340);e=h(e,f,c,d,b[11],14,0x265E5A51);d=h(d,e,f,c,b[0],20,0xE9B6C7AA);c=h(c,d,e,f,b[5],5,0xD62F105D);f=h(f,c,d,e,b[10],9,0x02441453);e=h(e,f,c,d,b[15],14,0xD8A1E681);d=h(d,e,f,c,b[4],20,0xE7D3FBC8);c=h(c,d,e,f,b[9],5,0x21E1CDE6);f=h(f,c,d,e,b[14],9,0xC33707D6);e=h(e,f,c,d,b[3],14,0xF4D50D87);d=h(d,e,f,c,b[8],20,0x455A14ED);c=h(c,d,e,f,b[13],5,0xA9E3E905);f=h(f,c,d,e,b[2],9,0xFCEFA3F8);e=h(e,f,c,d,b[7],14,0x676F02D9);d=h(d,e,f,c,b[12],20,0x8D2A4C8A);c=i(c,d,e,f,b[5],4,0xFFFA3942);f=i(f,c,d,e,b[8],11,0x8771F681);e=i(e,f,c,d,b[11],16,0x6D9D6122);d=i(d,e,f,c,b[14],23,0xFDE5380C);c=i(c,d,e,f,b[1],4,0xA4BEEA44);f=i(f,c,d,e,b[4],11,0x4BDECFA9);e=i(e,f,c,d,b[7],16,0xF6BB4B60);d=i(d,e,f,c,b[10],23,0xBEBFBC70);c=i(c,d,e,f,b[13],4,0x289B7EC6);f=i(f,c,d,e,b[0],11,0xEAA127FA);e=i(e,f,c,d,b[3],16,0xD4EF3085);d=i(d,e,f,c,b[6],23,0x04881D05);c=i(c,d,e,f,b[9],4,0xD9D4D039);f=i(f,c,d,e,b[12],11,0xE6DB99E5);e=i(e,f,c,d,b[15],16,0x1FA27CF8);d=i(d,e,f,c,b[2],23,0xC4AC5665);c=j(c,d,e,f,b[0],6,0xF4292244);f=j(f,c,d,e,b[7],10,0x432AFF97);e=j(e,f,c,d,b[14],15,0xAB9423A7);d=j(d,e,f,c,b[5],21,0xFC93A039);c=j(c,d,e,f,b[12],6,0x655B59C3);f=j(f,c,d,e,b[3],10,0x8F0CCC92);e=j(e,f,c,d,b[10],15,0xFFEFF47D);d=j(d,e,f,c,b[1],21,0x85845DD1);c=j(c,d,e,f,b[8],6,0x6FA87E4F);f=j(f,c,d,e,b[15],10,0xFE2CE6E0);e=j(e,f,c,d,b[6],15,0xA3014314);d=j(d,e,f,c,b[13],21,0x4E0811A1);c=j(c,d,e,f,b[4],6,0xF7537E82);f=j(f,c,d,e,b[11],10,0xBD3AF235);e=j(e,f,c,d,b[2],15,0x2AD7D2BB);d=j(d,e,f,c,b[9],21,0xEB86D391);a[0]=k(c,a[0]);a[1]=k(d,a[1]);a[2]=k(e,a[2]);a[3]=k(f,a[3])}}();function +Hi(a,b,c){var +e=a.len&bP,d=0;a.len+=c;if(e){var +f=64-e;if(c=64){a.b8.set(b.subarray(d,d+64),0);fB(a.w,a.b32);c-=64;d+=64}if(c)a.b8.set(b.subarray(d,d+c),0)}function +Hg(a){var +c=a.len&bP;a.b8[c]=aU;c++;if(c>56){for(var +b=c;b<64;b++)a.b8[b]=0;fB(a.w,a.b32);for(var +b=0;b<56;b++)a.b8[b]=0}else +for(var +b=c;b<56;b++)a.b8[b]=0;a.b32[14]=a.len<<3;a.b32[15]=a.len>>29&0x1FFFFFFF;fB(a.w,a.b32);var +e=new +Uint8Array(16);for(var +d=0;d<4;d++)for(var +b=0;b<4;b++)e[d*4+b]=a.w[d]>>8*b&0xFF;return e}function +In(a){return aQ(ea(a,0,a.length))}function +H5(a,b,c){var +d=Hh(),e=eb(a);Hi(d,e.subarray(b,b+c),c);return In(Hg(d))}function +H6(a,b,c){return H5(bU(a),b,c)}function +H8(){return 0}var +bW=new +Array();function +h_(a){return bW[a]}function +cg(a){var +b=h_(a);if(!b.opened)u("Cannot flush a closed channel");if(!b.buffer||b.buffer_curr==0)return 0;if(b.output)b.output(ea(b.buffer,0,b.buffer_curr));else +b.file.write(b.offset,b.buffer,0,b.buffer_curr);b.offset+=b.buffer_curr;b.buffer_curr=0;return 0}function +Ik(a){if(a.refill!=null){var +e=a.refill(),b=o9(e);if(b.length==0)a.refill=null;else{if(a.buffer.length0){b.set(e.buffer.subarray(e.buffer_curr,e.buffer_curr+f),c);e.buffer_curr+=f;g=f}else{e.buffer_curr=0;e.buffer_max=0;Ik(e);var +f=e.buffer_max-e.buffer_curr;if(g>f)g=f;b.set(e.buffer.subarray(e.buffer_curr,e.buffer_curr+g),c);e.buffer_curr+=g}return g|0}function +H9(a,b,c,d){var +e=eb(b);return H_(a,e,c,d)}function +Ip(a,b){if(b.name)try{var +d=require(hd),c=d.openSync(b.name,"rs");return new +a8(c,b)}catch(f){}return new +a8(a,b)}var +fP=new +Array(3);function +d1(a,b){au.call(this,K(0));this.log=function(a){return 0};if(a==1&&typeof +console.log=="function")this.log=console.log;else if(a==2&&typeof +console.error=="function")this.log=console.error;else if(typeof +console.log=="function")this.log=console.log;this.flags=b}d1.prototype.length=function(){return 0};d1.prototype.write=function(a,b,c,d){if(this.log){if(d>0&&c>=0&&c+d<=b.length&&b[c+d-1]==10)d--;var +e=K(d);aX(hZ(b),c,e,0,d);this.log(e.toUtf16());return 0}u(this.fd+mJ)};d1.prototype.read=function(a,b,c,d){u(this.fd+": file descriptor is write only")};d1.prototype.close=function(){this.log=undefined};function +fQ(a,b){if(b==undefined)b=fP.length;fP[b]=a;return b|0}function +Iw(a,b,c){var +d={};while(b){switch(b[1]){case +0:d.rdonly=1;break;case +1:d.wronly=1;break;case +2:d.append=1;break;case +3:d.create=1;break;case +4:d.truncate=1;break;case +5:d.excl=1;break;case +6:d.binary=1;break;case +7:d.text=1;break;case +8:d.nonblock=1;break}b=b[2]}if(d.rdonly&&d.wronly)u(a9(a)+hS);if(d.text&&d.binary)u(a9(a)+hz);var +e=pb(a),f=e.device.open(e.rest,d);return fQ(f,undefined)}(function(){function +a(a,b){return ec()?Ip(a,b):new +d1(a,b)}fQ(a(0,{rdonly:1,altname:"/dev/stdin",isCharacterDevice:true}),0);fQ(a(1,{buffered:2,wronly:1,isCharacterDevice:true}),1);fQ(a(2,{buffered:2,wronly:1,isCharacterDevice:true}),2)}());function +H$(a){var +b=fP[a];if(b.flags.wronly)u(np+a+" is writeonly");var +d=null,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:false,buffer_curr:0,buffer_max:0,buffer:new +Uint8Array(cE),refill:d};bW[c.fd]=c;return c.fd}function +oZ(a){var +b=fP[a];if(b.flags.rdonly)u(np+a+" is readonly");var +d=b.flags.buffered!==undefined?b.flags.buffered:1,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:true,buffer_curr:0,buffer:new +Uint8Array(cE),buffered:d};bW[c.fd]=c;return c.fd}function +Ia(){var +b=0;for(var +a=0;ae.buffer.length){var +g=new +Uint8Array(e.buffer_curr+b.length);g.set(e.buffer);e.buffer=g}switch(e.buffered){case +0:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;cg(a);break;case +1:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)cg(a);break;case +2:var +f=b.lastIndexOf(10);if(f<0){e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)cg(a)}else{e.buffer.set(b.subarray(0,f+1),e.buffer_curr);e.buffer_curr+=f+1;cg(a);e.buffer.set(b.subarray(f+1),e.buffer_curr);e.buffer_curr+=b.length-f-1}break}return 0}function +Ib(a,b,c,d){var +b=eb(b);return Ic(a,b,c,d)}function +h$(a,b,c,d){return Ib(a,bU(b),c,d)}function +o0(a,b){var +c=aQ(String.fromCharCode(b));h$(a,c,0,1);return 0}function +Id(a,b){if(b==0)ic();return a%b}function +o1(a){if(isFinite(a)){var +d=1/a<0;a=Math.abs(a);var +b=Math.floor(a),c=a-b;if(d){b=-b;c=-c}return[0,c,b]}if(isNaN(a))return[0,NaN,NaN];return[0,1/a,a]}function +d$(a,b){return+(cW(a,b,false)!=0)}function +If(a,b){a[0]=e9;a[1]=b;return 0}function +cY(a){if(a +instanceof +Array&&a[0]==a[0]>>>0)return a[0];else if(fI(a))return dS;else if(fJ(a))return dS;else if(a +instanceof +Function||typeof +a=="function")return 247;else if(a&&a.caml_custom)return ca;else +return dX}function +Hs(a){var +c={};if(a)for(var +b=1;b=0)a=e;else +aH("caml_register_global: cannot locate "+d)}}am[a+1]=b;if(c)am[c]=b}function +ie(a,b){o2[a9(a)]=b;return 0}function +Im(){Q(g_)}function +z(a,b){if(b>>>0>=n(a))Im();return aR(a,b)}function +fO(a){a.t&6&&d3(a);return aQ(a.c)}function +Io(){return 0x7FFFFFFF/4|0}function +Ii(){o4(am.Not_found)}function +o6(a){var +b=pa(aP(a));if(b===undefined)Ii();return aZ(b)}function +o7(){if(x.crypto)if(x.crypto.getRandomValues){var +a=x.crypto.getRandomValues(new +Int32Array(4));return[0,a[0],a[1],a[2],a[3]]}else if(x.crypto.randomBytes){var +a=new +Int32Array(x.crypto.randomBytes(16).buffer);return[0,a[0],a[1],a[2],a[3]]}var +b=new +Date().getTime(),c=b^0xffffffff*Math.random();return[0,c]}function +bA(a){var +b=1;while(a&&a.joo_tramp){a=a.joo_tramp.apply(null,a.joo_args);b++}return a}function +p(a,b){return{joo_tramp:a,joo_args:b}}function +J(a){{if(a +instanceof +Array)return a;var +b;if(x.RangeError&&a +instanceof +x.RangeError&&a.message&&a.message.match(/maximum call stack/i))b=am.Stack_overflow;else if(x.InternalError&&a +instanceof +x.InternalError&&a.message&&a.message.match(/too much recursion/i))b=am.Stack_overflow;else if(a +instanceof +x.Error&&bX(hp))b=[0,bX(hp),a];else +b=[0,am.Failure,aZ(String(a))];if(a +instanceof +x.Error)b.js_error=a;return b}}function +HX(a){switch(a[2]){case-8:case-11:case-12:return 1;default:return 0}}function +Hz(a){var +b=f;if(a[0]==0){b+=a[1][1];if(a.length==3&&a[2][0]==0&&HX(a[1]))var +e=a[2],g=1;else +var +g=2,e=a;b+="(";for(var +d=g;dg)b+=hA;var +c=e[d];if(typeof +c=="number")b+=c.toString();else if(c +instanceof +bx)b+=cL+c.toString()+cL;else if(typeof +c=="string")b+=cL+c.toString()+cL;else +b+=n9}b+=")"}else if(a[0]==w)b+=a[1];return b}function +oT(a){if(a +instanceof +Array&&(a[0]==0||a[0]==w)){var +c=bX(of);if(c)fE(c,[a,false]);else{var +d=Hz(a),b=bX(nr);if(b)fE(b,[0]);console.error(hs+d);if(a.js_error)throw a.js_error}}else +throw a}function +Il(){var +c=x.process;if(c&&c.on)c.on("uncaughtException",function(a,b){oT(a);c.exit(2)});else if(x.addEventListener)x.addEventListener(fn,function(a){if(a.error)oT(a.error)})}Il();function +g(a,b){return(a.l>=0?a.l:a.l=a.length)==1?a(b):by(a,[b])}function +m(a,b,c){return(a.l>=0?a.l:a.l=a.length)==2?a(b,c):by(a,[b,c])}function +br(a,b,c,d){return(a.l>=0?a.l:a.l=a.length)==3?a(b,c,d):by(a,[b,c,d])}function +dH(a,b,c,d,e){return(a.l>=0?a.l:a.l=a.length)==4?a(b,c,d,e):by(a,[b,c,d,e])}function +cC(a,b,c,d,e,f){return(a.l>=0?a.l:a.l=a.length)==5?a(b,c,d,e,f):by(a,[b,c,d,e,f])}function +Hf(a,b,c,d,e,f,g,h){return(a.l>=0?a.l:a.l=a.length)==7?a(b,c,d,e,f,g,h):by(a,[b,c,d,e,f,g,h])}var +Iv=undefined;HA();var +fU=[w,oB,-1],im=[w,lo,-2],c1=[w,hX,-3],ii=[w,k$,-4],a0=[w,m4,-7],ik=[w,ov,-8],il=[w,lQ,-9],q=[w,l4,-11],io=[w,mk,-12],f4=[0,f,0,0,-1],iM=[0,f,1,0,0],G5=[4,0,0,0,[12,45,[4,0,0,0,0]]],gb=[0,[11,'File "',[2,0,[11,'", line ',[4,0,0,0,[11,ox,[4,0,0,0,[12,45,[4,0,0,0,[11,mo,[2,0,0]]]]]]]]]],'File "%s", line %d, characters %d-%d: %s'],G6=[17,[0,a,1,0],[11,lV,[17,0,0]]],G7=[17,[0,a,1,0],[12,40,0]],G8=[11,"('\"'",[17,[0,a,1,0],[11,bR,[17,[0,a,1,0],[11,k5,[17,0,0]]]]]],G9=[0,a,1,0],G_=[11,nl,[17,[0,a,1,0],[11,bR,[17,[0,a,1,0],[11,k5,[17,0,0]]]]]],G$=[0,a,1,0],Ha=[11,bR,[17,[0,a,1,0],[11,os,[17,0,0]]]],Hb=[0,a,1,0],Hc=[11,nl,[17,[0,a,1,0],[11,bR,[17,[0,a,1,0],[11,os,[17,0,0]]]]]],Hd=[0,a,1,0],He=[17,[0,a,1,0],[12,40,[15,[12,41,[17,0,0]]]]],j$=[0,G,[0,a6,-991563951]],ka=[0,G,[0,a6,oq]],aj=[0,"\0\0\xec\xff\xed\xff\x03\0\xef\xff\x10\0\xf2\xff\xf3\xff\xf4\xff\xf5\xff\0\0\x1f\0\xf9\xffU\0\x01\0\0\0\0\0\x01\0\0\0\x01\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x01\0\x04\0\xfd\xff\x0b\0\xfc\xff\x03\0\x01\0\x03\0\x02\0\x03\0\0\0\xfb\xff\x15\0a\0\n\0\x16\0\x14\0\x10\0\x16\0\f\0\b\0\xfa\xffw\0\x81\0\x8b\0\xa1\0\xab\0\xb5\0\xc1\0\xd1\0\xf0\xff\x0b\0&\0\xfc\xffA\0\xfe\xff\xff\xffn\0\xfc\xff\xa3\0\xfe\xff\xff\xff\xea\0\xf7\xff\xf8\xff0\x01\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xffG\x01~\x01\x95\x01\xf9\xff'\0\xfd\xff\xfe\xff&\0\xbb\x01\xd2\x01\xf8\x01\x0f\x02\xff\xff\xdc\0\xfd\xff\xff\xff\xf5\0'\x02m\x02\x0e\x01X\x02\xa4\x02\xbb\x02\xe1\x02\r\0\xfc\xff\xfd\xff\xfe\xff\xff\xff\x0e\0\xfd\xff\xfe\xff\xff\xff\x1e\0\xfd\xff\xfe\xff\xff\xff\x0f\0\xfd\xff\xfe\xff\xff\xff\x11\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\x13\0\xfc\xff\xfd\xff\xfe\xff\x0f\0\xff\xff\x10\0\xff\xff\b\x01\x05\0\xfd\xff\x17\0\xfe\xff\x14\0\xff\xff.\0\xfd\xff\xfe\xff*\x004\x005\0\xff\xff5\x000\0[\0\\\0\xff\xff\x1b\x01\xfa\xff\xfb\xff\x89\0h\0Y\0X\0j\0\xff\xff\x8f\0\x89\0\xb1\0\xfe\xff\xb7\0\xa8\0\xa6\0\xb7\0\x02\0\xfd\xff\xb1\0\xac\0\xbb\0\x04\0\xfc\xff5\x02\xfb\xff\xfc\xff\xfd\xffg\x01\xff\xff\xf8\x02\xfe\xff\x06\x03\x1e\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff(\x032\x03J\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff=\x03T\x03l\x03\xf9\xff\xfa\xff\xfb\xff\xf4\0x\x03\x8e\x03\xb3\0\xc2\0\x0f\0\xff\xff\xbe\0\xbc\0\xbb\0\xc1\0\xb7\0\xb3\0\xfe\xff\xbf\0\xc9\0\xc8\0\xc4\0\xcb\0\xc1\0\xbd\0\xfd\xff\x9d\x03_\x03\xae\x03\xc4\x03\xce\x03\xd8\x03\xe4\x03\xef\x03<\0\xfd\xff\xfe\xff\xff\xff\f\x04\xfc\xff\xfd\xffW\x04\xff\xff\x91\x04\xfc\xff\xfd\xff\xdd\x04\xff\xff\xe5\0\xfd\xff\xfe\xff\xff\xff\xe7\0\xfd\xff\xfe\xff\xff\xff\x02\0\xff\xff\x12\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\"\x01\xfd\xff\xfe\xff\xff\xff\0\0\xff\xff\x03\0\xfe\xff\xff\xff&\x01\xfc\xff\xfd\xff\xfe\xff\xff\xffx\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\xd0\0\xfd\xff\xfe\xff\xff\xff\xd3\0\xfd\xff\xfe\xff\xff\xff\xbd\0\xff\xff\x8f\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\r\x01\xfd\xff\xfe\xff\xff\xff_\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff2\x01\xfd\xff\xfe\xff\xff\xff\x1a\x01\xfd\xff\xfe\xff\xff\xff\xe9\0\xfd\xff\xfe\xff\xff\xff\xde\0\xfd\xff\xfe\xff\xff\xffO\x05\xed\xff\xee\xff\n\0\xf0\xff,\x01\xf3\xff\xf4\xff\xf5\xff\xf6\xff=\x01\x02\x04\xf9\xff-\x05\xd1\0\xe4\0\xd3\0\xe8\0\xe1\0\xdf\0\xf0\0\xff\xff\xeb\0\xea\0\b\x01\xfe\xff\x04\x01\x17\x01\xfd\xff6\x01\xfc\xff\x1f\x01\x1d\x01 \x01'\x011\x01-\x01\xfb\xff9\x01R\x01P\x01N\x01T\x01J\x01V\x01\xfa\xffn\x05\f\x04{\x05\x9b\x05\xa5\x05\xb1\x05\xbb\x05\xc5\x05\xf1\xff\xc7\x01M\x02\xfd\xff\xff\xff\x9a\x02\xde\x05\xd1\x05\x9b\x02\xef\x055\x06L\x06r\x06\x10\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x98\x06\xfc\xff\xfd\xff\xe3\x06\xff\xffU\x07\xf4\xff\xf5\xff\x0b\0\xf7\xffL\x02\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\x1f\x02\xf3\x053\x07d\x01s\x01h\x01\x85\x01v\x01\x9a\x01\xab\x01\xff\xff\xad\x01\xb0\x01\xbf\x01\xb9\x01\xbb\x01\xfd\x01\xe6\x01\xe6\x01\xea\x01\xf7\x01\xed\x01\xea\x01\t\x02\x13\x02\x13\x02\x0f\x02\x15\x02\x0b\x02\x07\x02\x8e\x06\x98\x06t\x07\xaa\x07\xb4\x07\xbe\x07\xc8\x07\xd2\x07\xf8\xffx\x02\xa7\x02\xfd\xff\xff\xff\xd8\x02R\x07\xdc\x07\xec\x02\xf4\x07:\bQ\bw\bL\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x9d\b\xfc\xff\xfd\xff\xe8\b\xff\xff\x87\x02x\x02\xfd\xffd\x02\xfe\xff\xb6\x02\xff\xff\x0b\x02\xff\xff\xcc\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff.\x02\xff\xff\xb2\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x17\0\xff\xff\xb7\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\xbb\x02\xfd\xff\xfe\xff\xff\xffy\x02\xfd\xff\xfe\xff\xff\xff\xb8\x02\xfc\xff\xfd\xff\xfe\xff\x13\0\xff\xff","\xff\xff\xff\xff\xff\xff\x11\0\xff\xff\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x13\0\x13\0\x13\0\x13\0\x13\0\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\t\0\xff\xff\t\0\xff\xff\xff\xff\x0e\0\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\x04\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\0\0\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\x03\0\x05\0\x05\0\x05\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x03\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\xff\xff\b\0\xff\xff\b\0\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff","\x01\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\x009\0<\0\0\0<\0\0\0\0\0A\0\0\0A\0\0\0\0\0F\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0T\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0^\0\0\0\0\0a\0\xff\xff\xff\xffa\0\xff\xff\xff\xff\xff\xff\xff\xffh\0\0\0\0\0\0\0\0\0m\0\0\0\0\0\0\0q\0\0\0\0\0\0\0u\0\0\0\0\0\0\0y\0\0\0\0\0\0\0\0\0\0\0~\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\x8a\0\0\0\x8e\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x9a\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xb2\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xbb\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc2\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc9\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\0\0\0\0\0\0\xef\0\0\0\0\0\xff\xff\0\0\xf4\0\0\0\0\0\xff\xff\0\0\xf9\0\0\0\0\0\0\0\xfd\0\0\0\0\0\0\0\xff\xff\0\0\x03\x01\0\0\0\0\0\0\0\0\b\x01\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\x11\x01\0\0\0\0\0\0\0\0\x16\x01\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\0\0 \x01\0\0\0\0\0\0\xff\xff\0\0&\x01\0\0\0\0\0\0\0\0+\x01\0\0\0\0\0\0/\x01\0\0\0\0\0\0\0\x004\x01\0\0\0\0\0\x008\x01\0\0\0\0\0\0<\x01\0\0\0\0\0\0@\x01\0\0\0\0\0\0C\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0y\x01}\x01\0\0\0\0\x80\x01\xff\xff\xff\xff\x80\x01\xff\xff\xff\xff\xff\xff\xff\xff\x87\x01\0\0\0\0\0\0\0\0\x8c\x01\0\0\0\0\xff\xff\0\0\x90\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xc1\x01\xc5\x01\0\0\0\0\xc8\x01\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x01\0\0\0\0\0\0\0\0\xd4\x01\0\0\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xdc\x01\0\0\xff\xff\0\0\xe2\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xe9\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xf0\x01\0\0\0\0\0\0\0\0\xf5\x01\0\0\0\0\0\0\xf9\x01\0\0\0\0\0\0\xfc\x01\0\0\0\0\0\0\xff\xff\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\x03\0\x03\0\x86\0\0\0\x03\0\0\0\x86\0E\x01\x92\x01\xff\xff\0\0E\x01\x92\x01\0\0\0\0\0\0\0\0\x7f\0\x8b\0\0\0\x03\0\0\0\f\0\x03\0\xaa\0\x86\0\xaf\0\0\0\x07\0\x0b\x01E\x01\x92\x01\x0e\x01\r\x001\0\x05\0\n\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\x008\0v\0\x06\0\x81\0\x82\x009\0\xed\x01\x89\0\0\x021\0\0\x000\0\x8a\0j\0>\0\x0e\0n\0i\0\0\x001\0\x0f\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1e\x000\0\b\0r\0\xd1\0\xec\0\0\x01\r\x01\x1d\0\x16\0\xff\xff0\x000\0\x11\0\x15\0\x19\0 \0!\0#\0\x17\0\x1b\0\x10\0\x1f\0\x1c\0\"\0\x13\0\x18\0\x12\0\x1a\0\x14\0$\0)\0%\x000\0\t\0*\0+\0,\0-\0.\0/\0=\0U\x000\0&\0'\0'\0'\0'\0'\0'\0'\0'\0'\x001\0C\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0V\0\x8f\0\xff\xff(\0\x90\0\x91\0\x92\x007\0\x94\x007\0\x95\x000\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0\xff\xff0\0\x96\0\x97\0\xa1\0B\0\x9e\x005\0\x9f\x005\0\xa0\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\0\xa5\x003\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa2\0\xa3\0\xa6\0]\0\xff\xff\x02\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xff\xffM\0g\0l\0t\0\x84\0\x86\0\x87\0\x80\0\x8b\0\x86\0\xa4\0]\0\xab\0M\0\xa7\0\xa8\0\xa9\0\xac\0p\0\xad\0\xae\0\xd2\0\xe2\0\xd0\0\xd3\0\xd4\0;\0S\0\x86\0\xd5\0\xd6\0\xd7\0\xd8\0\xda\0\x8d\0\xdb\0]\0\xdc\0\xdd\0{\0\xde\0\xdf\0\xe0\0\x88\0_\0\xe1\0#\x01A\x01\xea\0\x9b\0\x05\x01a\x01\xfa\0\xff\xff\xfe\x009\x01=\x01_\x01M\0,\x01\\\x01X\x01\t\x01\x1d\x01L\0|\0!\x01\x12\x01K\0b\0\x13\x01U\x01V\x01W\x01x\x01Y\x01J\0\xe1\x005\x01y\x01I\0Z\x01H\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0b\0q\x01z\0[\x01@\0\x04\x01]\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\x9c\0p\x01^\x01`\x01b\x01c\x011\x01O\0O\0O\0O\0O\0O\0d\x01\x9d\0e\x01N\0N\0N\0N\0N\0N\0\xb7\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\x18\x01p\x01\xff\xff\x19\x01f\x01g\x01i\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0j\x01k\x010\x01(\x01l\x01m\x01n\x01P\0P\0P\0P\0P\0P\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0o\x01\x1b\x01\xff\xff\xab\x01\x1f\x01\xaa\x01\x17\x01Q\0Q\0Q\0Q\0Q\0Q\0\\\0\xa8\x01?\x01P\0P\0P\0P\0P\0P\0\xf8\0\xa5\x01\xfc\0\xa2\x01;\x01E\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\xff\xffQ\0Q\0Q\0Q\0Q\0Q\0W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0'\x01*\x01\xff\xff\xa3\x01\xa4\x01x\0\x02\x01X\0X\0X\0X\0X\0X\0\xa6\x017\x01\x99\0W\0W\0W\0W\0W\0W\0\x07\x01\xa7\x01\xa4\x01\xa9\x01\x10\x01\xa4\x01Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\x003\x01X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0a\0\x89\x01\xa4\x01\xac\x01\xb9\x01\x88\x01\xad\x01Z\0Z\0Z\0Z\0Z\0Z\0a\0\xb3\0\xae\x01Y\0Y\0Y\0Y\0Y\0Y\0.\x01\xaf\x01\xb0\x01\xb4\0\xa4\x01\xb8\x01\xb5\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0|\x01Z\0Z\0Z\0Z\0Z\0Z\0\xc0\x01\xb2\x01\x15\x01\xb3\x01a\0\xc1\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xa4\x01\xd8\x01\xff\xffa\0\xb8\x01\xd8\x01\xd1\x01a\0\xdf\x01a\0\xd0\x01\xe6\x01\0\0a\0\xdb\x01%\x01\xd8\x01\xd9\x01\0\0\xdc\x01\xd8\x01a\0\0\0\0\0\xd8\x01a\0\0\0a\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xd8\x01\0\0~\x01\0\0\0\0\0\0\0\0c\0c\0c\0c\0c\0c\0a\0\0\0\xda\x01\xfa\x01\0\0\0\0a\0\0\0|\x01|\x01a\0\0\0\xdd\x01\0\0\xfd\x01\0\0\0\0\0\0a\0\xff\xff\0\0\xc4\x01a\0\0\0a\0`\0c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xeb\x01\0\0\xf1\x01\0\0\xff\x01\xf2\x01\0\0d\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xf6\x01\x81\x01\x81\x01\xe4\x01\0\0\xc4\x01\0\0e\0e\0e\0e\0e\0e\0\0\0\xc6\x01\0\0d\0d\0d\0d\0d\0d\0\0\0\0\0\0\0\xc4\x01\xea\x01\x86\x01a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0\0\0e\0e\0e\0e\0e\0e\0a\0a\0a\0a\0a\0a\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\0\0\0\0\xc9\x01\xb1\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xbc\0\0\0a\0a\0a\0a\0a\0a\0\xc9\x01\xe3\x01\0\0\xbf\0\xce\x01{\x01\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xc3\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc6\0\xff\xff\xf8\x01\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xca\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xcd\0\xff\xff\xff\xff\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe2\0\xc3\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\x01\0\0\0\0\xce\0\xdd\x01\xef\x01\xfe\x01\0\0\xcf\0\xf4\x01\0\0\xe1\0\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\0\0\0\xe8\0\0\0\xe1\x01\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xd9\0\xff\xff\0\0\0\0\0\0\0\0\xe1\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\xe6\0\0\0\xe6\0\0\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\0\0\xe4\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xba\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\xf1\0\0\0q\x01\0\0M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01\0\0p\x01\0\0\0\0\xc1\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0p\x01\0\0\0\0\0\0\xf0\0\xc8\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\xf6\0\0\0\0\0\xf0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xee\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0E\x01F\x01\0\0\0\0E\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\x01\0\0N\x01\0\0\0\0\0\0\0\0h\x01I\x01\0\0\0\0\0\0\0\0O\x01\0\0G\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0H\x01\0\0\0\0\0\0\0\0\0\0\xf3\0\0\0\0\0\0\0\0\0\0\0\0\0P\x01w\x01\0\0w\x01\0\0Q\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\0\0J\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01S\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\x01\0\0\0\0s\x01\0\0\0\0T\x01\0\0\0\0u\x01\0\0u\x01\0\0K\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\0\0s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\xb9\x01\0\0\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xb8\x01\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\0\0\0\0D\x01\x80\x01\x80\x01\x80\x01\x7f\x01\0\0\x80\x01\0\0\0\0\xb8\x01\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\x80\x01\x7f\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\xbf\x01\x8e\x01\xbf\x01\0\0\0\0\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x92\x01\x93\x01\0\0\0\0\x92\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\x92\x01\0\0\x99\x01\0\0\0\0\0\0\0\0\xb1\x01\x96\x01\0\0\0\0\0\0\xc8\x01\x9c\x01\0\0\x94\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\x95\x01\0\0\0\0\0\0\0\0\0\0\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\0\0\x9e\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc8\x01\0\0\x97\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\xbb\x01\0\0\xa0\x01\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\x9f\x01\xc8\x01\0\0\xc8\x01\xc7\x01\0\0\xa1\x01\0\0\0\0\0\0\0\0\0\0\0\0\x98\x01\0\0\0\0\0\0\0\0\xbd\x01\0\0\xbd\x01\0\0\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\x91\x01\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\xc8\x01\xc7\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xd6\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd3\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x03\0\0\0\x86\0\xff\xff\x03\0\xff\xff\x86\0E\x01\x92\x019\0\xff\xffE\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff}\0\x8a\0\xff\xff\0\0\xff\xff\0\0\x03\0\xa9\0\x86\0\xae\0\xff\xff\0\0\n\x01E\x01\x92\x01\f\x01\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x05\0s\0\0\0}\0\x81\0\x05\0\xec\x01\x88\0\xff\x01&\0\xff\xff\n\0\x88\0f\0:\0\0\0k\0f\0\xff\xff\x0b\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1d\0&\0\0\0o\0\xd0\0\xe9\0\xff\0\f\x01\x0f\0\x11\0<\0\x0b\0\n\0\0\0\x14\0\x18\0\x1f\0 \0\"\0\x16\0\x1a\0\0\0\x0e\0\x1b\0!\0\x12\0\x17\0\0\0\x10\0\x13\0#\0(\0$\0&\0\0\0)\0*\0+\0,\0-\0.\0:\0R\0\x0b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0'\0?\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0U\0\x8c\0<\0\r\0\x8f\0\x90\0\x91\x000\0\x93\x000\0\x94\0'\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x001\x001\x001\x001\x001\x001\x001\x001\x001\x001\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0A\0'\0\x95\0\x96\0\x9c\0?\0\x9d\x003\0\x9e\x003\0\x9f\x002\x003\x003\x003\x003\x003\x003\x003\x003\x003\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x005\x005\x005\x005\x005\x005\x005\x005\x005\x005\0\x9b\x002\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa1\0\xa2\0\x9b\0[\0A\0\0\x007\x007\x007\x007\x007\x007\x007\x007\x007\x007\x009\0D\0f\0k\0s\0\x83\0\x85\0\x85\0}\0\x8a\0\x85\0\xa3\0^\0\xa5\0D\0\xa6\0\xa7\0\xa8\0\xab\0o\0\xac\0\xad\0\xce\0\xcb\0\xcf\0\xd2\0\xd3\0:\0R\0\x85\0\xd4\0\xd5\0\xd6\0\xd7\0\xd9\0\x8c\0\xda\0a\0\xdb\0\xdc\0w\0\xdd\0\xde\0\xdf\0\x85\0[\0\xcb\0\"\x01>\x01\xe9\0\x98\0\x01\x01P\x01\xf7\0<\0\xfb\x006\x01:\x01Q\x01D\0)\x01R\x01S\x01\x06\x01\x1a\x01D\0w\0\x1e\x01\x0f\x01D\0^\0\x0f\x01T\x01U\x01V\x01G\x01X\x01D\0\xcb\x002\x01G\x01D\0Y\x01D\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0a\0L\x01w\0Z\x01?\0\x01\x01\\\x01G\0G\0G\0G\0G\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0\x98\0L\x01]\x01_\x01a\x01b\x01-\x01N\0N\0N\0N\0N\0N\0c\x01\x98\0d\x01G\0G\0G\0G\0G\0G\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\x14\x01L\x01A\0\x14\x01e\x01f\x01h\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0i\x01j\x01-\x01$\x01k\x01l\x01m\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0n\x01\x1a\x01y\x01\x9d\x01\x1e\x01\x9e\x01\x14\x01P\0P\0P\0P\0P\0P\0[\0\x9f\x01>\x01O\0O\0O\0O\0O\0O\0\xf7\0\xa0\x01\xfb\0\xa1\x01:\x01D\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0^\0P\0P\0P\0P\0P\0P\0V\0V\0V\0V\0V\0V\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0$\x01)\x01a\0\xa2\x01\xa3\x01w\0\x01\x01W\0W\0W\0W\0W\0W\0\xa5\x016\x01\x98\0V\0V\0V\0V\0V\0V\0\x06\x01\xa6\x01\xa7\x01\xa8\x01\x0f\x01\xa9\x01X\0X\0X\0X\0X\0X\0X\0X\0X\0X\x002\x01W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0_\0\x85\x01\xaa\x01\xab\x01\x9a\x01\x85\x01\xac\x01Y\0Y\0Y\0Y\0Y\0Y\0_\0\xb0\0\xad\x01X\0X\0X\0X\0X\0X\0-\x01\xae\x01\xaf\x01\xb0\0\xb0\x01\x9a\x01\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0z\x01Y\0Y\0Y\0Y\0Y\0Y\0\x94\x01\xb1\x01\x14\x01\xb2\x01b\0\x94\x01\xb3\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xd8\x01\xc1\x01_\0\x9a\x01\xd8\x01\xcd\x01b\0\xde\x01_\0\xcd\x01\xe5\x01\xff\xff_\0\xda\x01$\x01\xd7\x01\xd7\x01\xff\xff\xda\x01\xd7\x01_\0\xff\xff\xff\xff\xd8\x01_\0\xff\xff_\0_\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xd7\x01\xff\xffz\x01\xff\xff\xff\xff\xff\xff\xff\xff`\0`\0`\0`\0`\0`\0b\0\xff\xff\xd7\x01\xf7\x01\xff\xff\xff\xffb\0\xff\xff}\x01\x80\x01b\0\xff\xff\xdc\x01\xff\xff\xfb\x01\xff\xff\xff\xff\xff\xffb\0y\x01\xff\xff\xc2\x01b\0\xff\xffb\0b\0`\0`\0`\0`\0`\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xe7\x01\xff\xff\xee\x01\xff\xff\xfb\x01\xee\x01\xff\xffc\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xf3\x01}\x01\x80\x01\xe0\x01\xff\xff\xc5\x01\xff\xffd\0d\0d\0d\0d\0d\0\xff\xff\xc2\x01\xff\xffc\0c\0c\0c\0c\0c\0\xff\xff\xff\xff\xff\xff\xc8\x01\xe7\x01\x85\x01e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xffd\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xff\xff\xff\xff\xc5\x01\xb0\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb9\0\xff\xffe\0e\0e\0e\0e\0e\0\xc8\x01\xe0\x01\xff\xff\xb9\0\xcd\x01z\x01\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xc0\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc0\0\xc1\x01\xf7\x01\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc7\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xc7\0}\x01\x80\x01\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xcc\0\xc2\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe7\x01\xff\xff\xff\xff\xc7\0\xdc\x01\xee\x01\xfb\x01\xff\xff\xc7\0\xf3\x01\xff\xff\xcc\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xe1\0\xff\xff\xe1\0\xff\xff\xe0\x01\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xcd\0\xc5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcc\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xe4\0\xff\xff\xe4\0\xff\xff\xe3\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xe3\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xb9\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xff\xffM\x01\xff\xffM\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01\xff\xffM\x01\xff\xff\xff\xff\xc0\0\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0M\x01\xff\xff\xff\xff\xff\xff\xed\0\xc7\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xf2\0\xff\xff\xff\xff\xf0\0\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xed\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0B\x01B\x01\xff\xff\xff\xffB\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xffO\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01p\x01\xff\xffp\x01\xff\xffB\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01\xff\xff\xff\xffB\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xff\xff\xffr\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xffs\x01\xff\xffs\x01\xff\xffB\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\xff\xffr\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01\xff\xff~\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\x81\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x9b\x01\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01~\x01\xff\xff\xff\xffB\x01~\x01\x81\x01~\x01~\x01\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\x81\x01\x81\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xb8\x01\x8a\x01\xb8\x01\xff\xff\xff\xff\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x01\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xba\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\x8f\x01\xc6\x01\xff\xff\xc6\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xbb\x01\xff\xff\xbb\x01\xff\xff\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xc9\x01\xc9\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",f,f,f,f,f,f],du="lib/data_source/jellyfin_api.ml.Types.order",af="lib/data_source/jellyfin_api.ml.Types.sort",gZ="lib/data_source/jellyfin_api.ml.Item.image_blur_hashes",t="lib/data_source/jellyfin_api.ml.Item.type_",j="lib/data_source/jellyfin_api.ml.Item.field",eU="lib/data_source/jellyfin_api.ml.Item.t",eV="lib/data_source/jellyfin_api.ml.Items.params",eY="lib/data_source/jellyfin_api.ml.Items.response",e3="lib/data_source/jellyfin_api.ml.Views.params",e4="lib/data_source/jellyfin_api.ml.Views.response",e5="lib/data_source/jellyfin_api.ml.Virtual_folders.virtual_folder",e6="lib/db/stores.ml.Items.sorts",e7="lib/db/stores.ml.Items.t",dz=hu,kN=[0,17,[0,16,[0,1,0]]];aY(11,io,mk);aY(10,q,l4);aY(9,[w,l9,lO],l9);aY(8,il,lQ);aY(7,ik,ov);aY(6,a0,m4);aY(5,[w,nj,-6],nj);aY(4,[w,lx,-5],lx);aY(3,ii,k$);aY(2,c1,hX);aY(1,im,lo);aY(0,fU,oB);var +pw=lF,pu="output_substring",pq=bO,pm=dL,pn=dZ,pc="Stdlib.Exit",pf=ce(0,0,lC),ph=ce(0,0,65520),pj=ce(1,0,lC),pz="CamlinternalLazy.Undefined",pG=fu,pH="\\'",pI=fy,pJ=fk,pK=fp,pL=fa,pE="Char.chr",pQ=" is not an Unicode scalar value",pX="List.init",pT="hd",p3="String.blit / Bytes.blit_string",p2="Bytes.blit",p1="String.sub / Bytes.sub",qf="String.contains_from / Bytes.contains_from",qd="String.index_from / Bytes.index_from",qa=f,p9="String.concat",qs=[0,"array.ml",322,4],qn="Array.blit",ql="Array.fill",qj="Array.init",qq="Stdlib.Array.Bottom",qy=fg,qz=fg,qA=fg,qB=fg,qE="Stdlib.Queue.Empty",qP="Buffer.add_substring/add_subbytes",qO="Buffer.add: cannot grow buffer",qN=[0,mD,93,2],qM=[0,mD,94,2],qJ="Buffer.sub",q1=lv,q2=ou,q3=m$,q4=k8,q5=oG,q6=m1,q7="%f",q8="%B",q9="%{",q_="%}",q$="%(",ra="%)",rb=oF,rc="%t",rd="%?",re="%r",rf="%_r",rg=[0,Z,850,23],rr=[0,Z,814,21],rj=[0,Z,815,21],rs=[0,Z,818,21],rk=[0,Z,819,21],rt=[0,Z,822,19],rl=[0,Z,823,19],ru=[0,Z,826,22],rm=[0,Z,827,22],rv=[0,Z,831,30],rn=[0,Z,832,30],rp=[0,Z,836,26],rh=[0,Z,837,26],rq=[0,Z,846,28],ri=[0,Z,847,28],ro=[0,Z,851,23],sH=[0,Z,1558,4],sI="Printf: bad conversion %[",sJ=[0,Z,1626,39],sK=[0,Z,1649,31],sL=[0,Z,1650,31],sM="Printf: bad conversion %_",sN=lm,sO=l7,sP=lm,sQ=l7,sT=[0,[11,"invalid box description ",[3,0,0]],"invalid box description %S"],sS=[0,0,4],sC=hb,sA="neg_infinity",sB=lr,sz=bO,su=[0,e8],si="%+nd",sj="% nd",sl="%+ni",sm="% ni",sn="%nx",so="%#nx",sp="%nX",sq="%#nX",sr="%no",ss="%#no",sh="%nd",sk=oG,st="%nu",r6="%+ld",r7="% ld",r9="%+li",r_="% li",r$="%lx",sa="%#lx",sb="%lX",sc="%#lX",sd="%lo",se="%#lo",r5="%ld",r8=k8,sf="%lu",rS="%+Ld",rT="% Ld",rV="%+Li",rW="% Li",rX="%Lx",rY="%#Lx",rZ="%LX",r0="%#LX",r1="%Lo",r2="%#Lo",rR="%Ld",rU=m1,r3="%Lu",rE="%+d",rF="% d",rH="%+i",rI="% i",rJ="%x",rK="%#x",rL=n1,rM="%#X",rN="%o",rO="%#o",rD=g9,rG=m$,rP=lB,qT="@]",qU="@}",qV="@?",qW="@\n",qX="@.",qY="@@",qZ="@%",q0="@",rw="CamlinternalFormat.Type_mismatch",sY=f,sZ=[0,[11,hA,[2,0,[2,0,0]]],", %s%s"],tv=[0,[11,hs,[2,0,[12,10,0]]],lI],tw=[0,[11,"Fatal error in uncaught exception handler: exception ",[2,0,[12,10,0]]],"Fatal error in uncaught exception handler: exception %s\n"],tu="Fatal error: out of memory in uncaught exception handler",tr=[0,[11,hs,[2,0,[12,10,0]]],lI],tl=[0,[2,0,[12,10,0]],"%s\n"],tm=[0,[11,ll,0],ll],tc="Raised at",td="Re-raised at",te="Raised by primitive operation at",tf="Called from",tg=" (inlined)",ti=f,th=[0,[2,0,[12,32,[2,0,[11,' in file "',[2,0,[12,34,[2,0,[11,", line ",[4,0,0,0,[11,ox,G5]]]]]]]]]],'%s %s in file "%s"%s, line %d, characters %d-%d'],tj=[0,[2,0,[11," unknown location",0]],"%s unknown location"],s7="Out of memory",s8="Stack overflow",s9="Pattern matching failed",s_="Assertion failed",s$="Undefined recursive module",s1=[0,[12,40,[2,0,[2,0,[12,41,0]]]],"(%s%s)"],s2=f,s3=f,s4=[0,[12,40,[2,0,[12,41,0]]],"(%s)"],sX=[0,[4,0,0,0,0],g9],sV=[0,[3,0,0],"%S"],sW=n9,to=[0,f,"(Cannot print locations:\n bytecode executable program file not found)","(Cannot print locations:\n bytecode executable program file appears to be corrupt)","(Cannot print locations:\n bytecode executable program file has wrong magic number)","(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"],tz="Fun.Finally_raised: ",tx="Stdlib.Fun.Finally_raised",tC="x",tG=[0,987910699,495797812,364182224,414272206,318284740,990407751,383018966,270373319,840823159,24560019,536292337,512266505,189156120,730249596,143776328,51606627,140166561,366354223,1003410265,700563762,981890670,913149062,526082594,1021425055,784300257,667753350,630144451,949649812,48546892,415514493,258888527,511570777,89983870,283659902,308386020,242688715,482270760,865188196,1027664170,207196989,193777847,619708188,671350186,149669678,257044018,87658204,558145612,183450813,28133145,901332182,710253903,510646120,652377910,409934019,801085050],tS="Hashtbl: unsupported hash table format",tL=f,uA=[3,0,3],uB=bO,uu=l$,uv="<\/",uw=f,uq=l$,ur="<",us=f,uo="\n",ui=f,uj=f,uk=f,ul=f,t$=[0,f],t6=f,t7=f,t8=f,t9=f,t2=[0,f,0,f],tY="Stdlib.Format.String_tag",uN="Jsoo_runtime.Error.Exn",uO=hp,u6=[0,"src/fut.ml",34,25],vm="info",vl=fn,vk="log",vj="search",vd=[0,1],vb=ot,vn="isSecureContext",vs="cache",vt="credentials",vu="headers",vv="integrity",vw="keepalive",vx="method",vy="mode",vz="redirect",vA="referrer",vB="referrerPolicy",v8="open",v1="autoIncrement",v2="keyPath",v3="new object store with options:",vY="readonly",vZ="readwrite",v0="readwriteflush",vQ="next",vR="nextUnique",vS="prev",vT="prevUnique",wb=[0,[11,"\x1b[",[4,0,0,0,[12,109,0]]],"\x1b[%dm"],wj="CCResult.Get_error",wv=[0,oz,119,10],ws=[0,oz,92,10],wo=f,wL=[0,[17,[0,ob,1,0],0],ob],wK=[0,[12,32,0],aW],wJ=[0,[11,mR,0],mR],wM=[0,[15,[4,6,0,[0,2],[15,0]]],"%a%.2x%a"],wE=[0,[11,mU,[15,[11,me,[15,[11," dst-off=",[4,0,0,0,[11,g7,[4,0,0,0,0]]]]]]]],"Cstruct.blit_from_string src=%a dst=%a dst-off=%d len=%d"],wC=[0,[11,mU,[15,[11,me,[15,[11," src-off=",[4,0,0,0,[11,g7,[4,0,0,0,0]]]]]]]],"Cstruct.blit_from_string src=%a dst=%a src-off=%d len=%d"],wA=[0,[12,91,[4,0,0,0,[12,93,0]]],"[%d]"],wz=[0,[12,91,[4,0,0,0,[12,44,[4,0,0,0,[11,"](",[4,0,0,0,[12,41,0]]]]]]],"[%d,%d](%d)"],wN=[0,[17,3,[15,[17,4,0]]],"@\n%a@."],wO=f,xk=[0,[8,[0,0,0],0,[0,0],0],kV],w5=[0,[12,44,0],g$],xa=[0,[15,[12,58,[15,0]]],"%a:%a"],w$=[0,[12,44,0],g$],w4=[0,[11,dP,0],dP],w7=[0,[11,dL,0],dL],w8=[0,[11,dZ,0],dZ],w9=[0,[8,[0,0,0],0,[0,0],0],kV],w_=[0,[8,[0,0,3],0,0,0],"%g"],xb=[0,[12,cJ,[15,[12,cO,0]]],"{%a}"],w6=[0,[12,91,[15,[12,93,0]]],"[%a]"],xc=[0,[12,44,[17,[0,a,1,0],0]],lu],xg=[0,[18,[1,[0,[11,cG,0],cG]],[15,[12,58,[17,[0,a,1,0],[15,[17,0,0]]]]]],"@[%a:@ %a@]"],xf=[0,[12,44,[17,[0,a,1,0],0]],lu],xh=[0,[18,[1,[0,[11,cG,0],cG]],[11,"{ ",[15,[11," }",[17,0,0]]]]],"@[{ %a }@]"],xi=[0,[11,ns,0],ns],xd=[0,[18,[1,[0,[11,cG,0],cG]],[11,"[ ",[15,[11," ]",[17,0,0]]]]],"@[[ %a ]@]"],xe=[0,[11,oi,0],oi],wT=[0,[12,34,0],cL],wX=[0,[0,0],lv],wW=[0,[11,fu,0],fu],wZ=[0,[11,fy,0],fy],w0=[0,[11,fk,0],fk],w1=[0,[11,fp,0],fp],w2=[0,[11,fa,0],fa],wV=[0,[11,hG,0],hG],wY=[0,[11,"\\u",[4,6,[0,2,4],0,0]],"\\u%04x"],wU=[0,[12,34,0],cL],xI=[0,dQ,363,9],xB=[0,cS,hm],xw=[0,dR,hm],xC=[0,bQ,hm],xA=[0,bQ,d0],xx=[0,dR,d0],xy=[0,dQ,153,55],xz=[0,bQ,d0],xD=[0,dQ,152,55],xE=[0,dQ,154,55],xF=[0,bQ,bd],xu=[0,dQ,ht,9],xm=[0,[11,"invalid bounds (index ",[4,0,0,0,[11,", length ",[4,0,0,0,[12,41,0]]]]],"invalid bounds (index %d, length %d)"],xt=[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0],yX=[0,aN,[0,ak,1]],yY=[0,aN,bu],yZ=[0,aN,[0,ak,0]],y1=[0,aN,dJ],y0=[0,aN,cb],za=[0,hg,397,27],y6=[0,aN,m5],y3=[0,aN,n4],yV=[0,hg,211,8],yU=[0,hg,204,45],yq=[0,[18,[1,[0,0,f]],[11,cR,[17,[0,a,1,0],[11,"initial",[17,[0,a,1,0],[11,"BOM",[17,[0,a,1,0],[11,hP,[17,[0,a,1,0],[11,e$,G6]]]]]]]]]],"@[illegal@ initial@ BOM@ in@ character@ stream@]"],yr=[0,[18,[1,[0,0,f]],[11,cR,[17,[0,a,1,0],[11,"escape,",[17,[0,a,1,0],0]]]]],"@[illegal@ escape,@ "],yt=[0,[15,[17,[0,a,1,0],[11,hw,[17,[0,a,1,0],[11,"an",[17,[0,a,1,0],[11,"escaped",[17,[0,a,1,0],[11,e$,[17,0,0]]]]]]]]]],"%a@ not@ an@ escaped@ character@]"],yu=[0,[15,[17,[0,a,1,0],[11,l0,[17,[0,a,1,0],[11,mQ,[17,[0,a,1,0],[11,hT,[17,0,0]]]]]]]],"%a@ lone@ low@ surrogate@]"],yv=[0,[15,[17,[0,a,1,0],[11,l0,[17,[0,a,1,0],[11,"high",[17,[0,a,1,0],[11,hT,[17,0,0]]]]]]]],"%a@ lone@ high@ surrogate@]"],yw=[0,[15,[17,[0,a,1,0],[11,hw,[17,[0,a,1,0],[12,97,[17,[0,a,1,0],[11,"hex",[17,[0,a,1,0],[11,"digit",[17,0,0]]]]]]]]]],"%a@ not@ a@ hex@ digit@]"],ys=[0,[15,[17,[0,a,1,0],[11,hw,[17,[0,a,1,0],[12,97,[17,[0,a,1,0],[11,mQ,[17,[0,a,1,0],[11,hT,[17,0,0]]]]]]]]]],"%a@ not@ a@ low@ surrogate@]"],yx=[0,[18,[1,[0,0,f]],[11,cR,[17,[0,a,1,0],[11,"bytes",[17,[0,a,1,0],[11,hP,[17,[0,a,1,0],[11,e$,[17,[0,a,1,0],[11,lV,G7]]]]]]]]]],"@[illegal@ bytes@ in@ character@ stream@ ("],yy=[0,[4,8,[0,2,2],0,0],"%02X"],yA=[0,[12,32,[4,8,[0,2,2],0,0]]," %02X"],yz=[0,[12,41,[17,0,0]],")@]"],yB=[0,[18,[1,[0,0,f]],[11,"expected",[17,[0,a,1,0],0]]],"@[expected@ "],yC=[0,[11,mB,[17,[0,a,1,0],[11,cM,[17,0,0]]]],"member@ name@]"],yD=[0,[11,fs,[17,[0,a,1,0],[11,"text (JSON value)",[17,0,0]]]],"JSON@ text (JSON value)@]"],yE=[0,[11,cM,[17,[0,a,1,0],[11,hB,[17,[0,a,1,0],[11,"(':')",[17,0,0]]]]]],"name@ separator@ (':')@]"],yF=[0,[11,dY,[17,[0,a,1,0],[11,"of",[17,[0,a,1,0],[11,lF,[17,0,0]]]]]],"end@ of@ input@]"],yG=[0,[11,"JavaScript",[17,[0,a,1,0],[11,nx,[17,0,0]]]],"JavaScript@ comment@]"],yH=[0,[11,fs,[17,[0,a,1,0],[11,cD,[17,0,0]]]],"JSON@ value@]"],yI=[0,[11,mB,[17,[0,a,1,0],[11,cM,[17,[0,a,1,0],[11,bR,[17,[0,a,1,0],[11,fw,[17,[0,a,1,0],[11,dY,[17,G9,G8]]]]]]]]]],"member@ name@ or@ object@ end@ ('\"'@ or@ '}')@]"],yJ=[0,[11,cD,[17,[0,a,1,0],[11,hB,[17,[0,a,1,0],[11,bR,[17,[0,a,1,0],[11,fw,[17,[0,a,1,0],[11,dY,[17,G$,G_]]]]]]]]]],"value@ separator@ or@ object@ end@ (','@ or@ '}')@]"],yK=[0,[11,cD,[17,[0,a,1,0],[11,bR,[17,[0,a,1,0],[11,fj,[17,[0,a,1,0],[11,dY,[17,[0,a,1,0],[11,"(value",[17,Hb,Ha]]]]]]]]]],"value@ or@ array@ end@ (value@ or@ ']')@]"],yL=[0,[11,cD,[17,[0,a,1,0],[11,hB,[17,[0,a,1,0],[11,bR,[17,[0,a,1,0],[11,fj,[17,[0,a,1,0],[11,dY,[17,Hd,Hc]]]]]]]]]],"value@ separator@ or@ array@ end@ (','@ or@ ']')@]"],yM=[0,[18,[1,[0,0,f]],[11,cR,[17,[0,a,1,0],[11,"number",[17,[0,a,1,0],[12,40,[2,0,[12,41,[17,0,0]]]]]]]]],"@[illegal@ number@ (%s)@]"],yS=[0,[18,[1,[0,0,f]],[11,cR,[17,[0,a,1,0],[11,"literal",[17,[0,a,1,0],[12,40,[2,0,[12,41,[17,0,0]]]]]]]]],"@[illegal@ literal@ (%s)@]"],yT=[0,[18,[1,[0,0,f]],[11,cR,[17,[0,a,1,0],[11,e$,[17,[0,a,1,0],[11,hP,[17,[0,a,1,0],[11,fs,[17,[0,a,1,0],[11,hM,He]]]]]]]]]],"@[illegal@ character@ in@ JSON@ string@ (%a)@]"],yN=[0,[18,[1,[0,0,f]],[11,"unclosed",[17,[0,a,1,0],0]]],"@[unclosed@ "],yO=[0,[11,fw,[17,0,0]],"object@]"],yP=[0,[11,fj,[17,0,0]],"array@]"],yQ=[0,[11,nx,[17,0,0]],"comment@]"],yR=[0,[11,hM,[17,0,0]],"string@]"],yo=[0,[12,39,[2,0,[11,"' (",[15,[12,41,0]]]]],"'%s' (%a)"],yn=[0,[11,"U+",[4,8,[0,2,4],0,0]],"U+%04X"],x4=[0,G,-543455433],x$=[0,G,[0,dI,cQ]],ya=[0,G,[0,dI,e]],yb=[0,G,[0,dI,dJ]],yc=[0,G,[0,dI,cb]],yf=[0,G,[0,a6,cQ]],yg=[0,G,[0,a6,fx]],yh=[0,G,[0,a6,nP]],yi=[0,G,[0,a6,[0,nN,1]]],yj=[0,G,[0,a6,[0,nN,0]]],yk=[0,G,[0,a6,[0,ho,1]]],yl=[0,G,[0,a6,[0,ho,0]]],ym=[0,G,[0,a6,ma]],zu="not a valid JSON array/object",zr=[0,[11,"JSON.of_buffer ",[2,0,0]],"JSON.of_buffer %s"],zm=[0,[11,aO,0],aO],zn=[0,[11,"Unexpected input when parsing a ",[2,0,0]],"Unexpected input when parsing a %s"],zo=[0,[15,0],oF],zl="We expected a well-formed JSON document (array or object)",zg=cD,zh="object fields",ze=[0,"lib/ezjsonm.ml",61,19],zf=[0,ft,357123046],zd="Abort",zi="Ezjsonm.Parse_error",zy=[1,[0,3854881,"Failed to unmarshal data"]],zw=[0,1],zz=[0,"lib/codec.ml",32,4],zC="Yojson__Common.Json_error",zE="Yojson__Common.End_of_array",zF="Yojson__Common.End_of_object",zG="Yojson__Common.End_of_tuple",zH="Yojson__Common.End_of_input",zJ=[0,"\0\0\xfe\xff\xff\xff","\xff\xff\xff\xff\xff\xff","\x01\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0","\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0",f,f,f,f,f,f],A1=[0,ak,1],A2=[0,ak,0],A3=aO,A4="Invalid token",A5=aO,A6="Invalid escape sequence",A7=aO,A8="Invalid low surrogate for code point beyond U+FFFF",A9="Missing escape sequence representing low surrogate for code point beyond U+FFFF",A_=aO,A$="Expected ':' or '>' but found",Ba=aO,Bb="Expected '>' but found",Bc=aO,Bd="Unterminated comment",Be="Expected string or identifier but found",Bf=aO,Bg="Expected ',' or ']' but found",Bh=aO,Bi="Expected ',' or ')' but found",Bj=aO,Bk="Expected ',' or '}' but found",Bl=aO,Bm="Expected ':' but found",Bn=aO,BJ="Expected string, got ",BI="Expected object, got ",Bw=dP,By=fw,Bz="floatlit",BA=fj,BB="tuple",Bx="bool",BD="variant",BE="float",BF="int",BG=hM,BC="intlit",Bs="Blank input data",Bp="Junk after end of JSON value:",Ax=[0,[2,0,[11," '",[2,0,[2,0,[12,39,0]]]]],"%s '%s%s'"],As=[0,[11,"File ",[2,0,[11,", line",0]]],"File %s, line"],Aw="Line",At=[0,[11,"byte ",[4,3,0,0,0]],"byte %i"],Av=[0,[11,"bytes ",[4,3,0,0,[12,45,[4,3,0,0,0]]]],"bytes %i-%i"],Au=[0,[2,0,[12,32,[4,3,0,0,[11,hA,[2,0,[11,":\n",[2,0,0]]]]]]],"%s %i, %s:\n%s"],Ar=[0,"lib/read.mll",41,13],Aq=f,Ao=f,Aa="NaN value not allowed in standard JSON",Ab=[0,[8,[0,0,3],0,[0,16],0],ol],Ad=[0,[8,[0,0,3],0,[0,17],0],mV],Ac=nZ,z_="Infinity value not allowed in standard JSON",z$="-Infinity value not allowed in standard JSON",z5="NaN",z6=[0,[8,[0,0,3],0,[0,16],0],ol],z8=[0,[8,[0,0,3],0,[0,17],0],mV],z7=nZ,z3="Infinity",z4="-Infinity",zZ=dL,z0=dZ,zY=dP,zS=fy,zT=fk,zU=fp,zV="\\f",zW=fa,zX=hG,zR=fu,zP=[0,[11,"src=",[3,0,[11," start=",[4,3,0,0,[11,g7,[4,3,0,0,[12,10,[10,0]]]]]]]],"src=%S start=%i len=%i\n%!"],zN="\\u00",Ay="Yojson__Safe.Int_overflow",Bt="Yojson__Safe.Util.Type_error",BP="list_of_yojson: list needed",BO="int_of_yojson: integer needed",BN="string_of_yojson: string needed",BM="bool_of_yojson: true/false needed",BK="Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error",BZ=aW,B1="_of_yojson: list instead of atom for record expected",B0=[0,[2,0,[11,"_of_yojson: the following record elements were undefined: ",[2,0,0]]],"%s_of_yojson: the following record elements were undefined: %s"],BX="extra fields",BW="duplicate fields",BU=aW,BV=[0,[2,0,[11,"_of_yojson: ",[2,0,[11,mo,[2,0,0]]]]],"%s_of_yojson: %s: %s"],BT="_of_yojson: unexpected variant constructor",BS="_of_yojson: expected a variant type, saw an empty list",BR="_of_yojson: expected a variant type, saw a nested list",BQ="_of_yojson: this constructor does not take arguments",Fa="An error occured while decoding response: ",E7=[0,[11,", Token=",[3,0,0]],", Token=%S"],E_=f,E8=f,E9=[0,[11,'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="',[2,0,[11,'", Version="0.1"',[2,0,0]]]],'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'],E2=hr,E3=oo,E4=fi,EY="item_id",EZ="locations",E0=cM,EV=[0,"Views",0],EW="Users",EQ=fb,ER=fm,ES=dK,EM=l2,EN=lj,EO=hu,EK=nC,EI="include_external_content",EG=[0,dK,0],ED=fb,EE=fm,EF=dK,EA=l2,EB=lj,EC=hu,Eo=lJ,Ep=mc,Eq=hW,Er=nM,Es=no,Et=nG,Eu=mT,Ev=nU,Ew=hx,Ex=k3,Ey=n7,Ez=mu,Eh="enable_images",Ei="enable_user_data",Ej=hW,Ek="sort_by",El="include_item_types",Em=hx,En="user_id",Eg=k1,D9=oe,D_=mA,D$=la,Ea=fe,Eb=nw,Ec=ff,Ed=mn,Ee=cK,Ef=fi,D4="type_",D5="image_blur_hashes",D6="server_id",D7=hh,D8=cM,D3=[0,"lib/data_source/jellyfin_api.ml",194,64],C4=[0,h,[0,[0,e,mj],0]],C5=[0,h,[0,[0,e,od],0]],C6=[0,h,[0,[0,e,md],0]],C7=[0,h,[0,[0,e,nd],0]],C8=[0,h,[0,[0,e,lG],0]],C9=[0,h,[0,[0,e,mP],0]],C_=[0,h,[0,[0,e,lw],0]],C$=[0,h,[0,[0,e,mm],0]],Da=[0,h,[0,[0,e,nF],0]],Db=[0,h,[0,[0,e,mh],0]],Dc=[0,h,[0,[0,e,fo],0]],Dd=[0,h,[0,[0,e,oy],0]],De=[0,h,[0,[0,e,nt],0]],Df=[0,h,[0,[0,e,le],0]],Dg=[0,h,[0,[0,e,nh],0]],Dh=[0,h,[0,[0,e,m2],0]],Di=[0,h,[0,[0,e,lf],0]],Dj=[0,h,[0,[0,e,n_],0]],Dk=[0,h,[0,[0,e,lc],0]],Dl=[0,h,[0,[0,e,mN],0]],Dm=[0,h,[0,[0,e,na],0]],Dn=[0,h,[0,[0,e,nu],0]],Do=[0,h,[0,[0,e,on],0]],Dp=[0,h,[0,[0,e,nV],0]],Dq=[0,h,[0,[0,e,nB],0]],Dr=[0,h,[0,[0,e,nf],0]],Ds=[0,h,[0,[0,e,kZ],0]],Dt=[0,h,[0,[0,e,lM],0]],Du=[0,h,[0,[0,e,m0],0]],Dv=[0,h,[0,[0,e,ow],0]],Dw=[0,h,[0,[0,e,kW],0]],Dx=[0,h,[0,[0,e,ng],0]],Dy=[0,h,[0,[0,e,nL],0]],Dz=[0,h,[0,[0,e,fe],0]],DA=[0,h,[0,[0,e,ff],0]],DB=[0,h,[0,[0,e,l8],0]],DC=[0,h,[0,[0,e,l_],0]],DD=[0,h,[0,[0,e,oh],0]],DE=[0,h,[0,[0,e,mO],0]],DF=[0,h,[0,[0,e,ny],0]],DG=[0,h,[0,[0,e,ms],0]],DH=[0,h,[0,[0,e,om],0]],DI=[0,h,[0,[0,e,nR],0]],DJ=[0,h,[0,[0,e,lK],0]],DK=[0,h,[0,[0,e,nS],0]],DL=[0,h,[0,[0,e,oD],0]],DM=[0,h,[0,[0,e,m_],0]],DN=[0,h,[0,[0,e,mE],0]],DO=[0,h,[0,[0,e,ls],0]],DP=[0,h,[0,[0,e,k2],0]],DQ=[0,h,[0,[0,e,mf],0]],DR=[0,h,[0,[0,e,cK],0]],DS=[0,h,[0,[0,e,ok],0]],DT=[0,h,[0,[0,e,mb],0]],DU=[0,h,[0,[0,e,op],0]],DV=[0,h,[0,[0,e,nT],0]],DW=[0,h,[0,[0,e,mg],0]],DX=[0,h,[0,[0,e,lL],0]],DY=[0,h,[0,[0,e,nX],0]],DZ=[0,h,[0,[0,e,oC],0]],D0=[0,h,[0,[0,e,nD],0]],Cr=[0,h,[0,[0,e,n8],0]],Cs=[0,h,[0,[0,e,hL],0]],Ct=[0,h,[0,[0,e,nz],0]],Cu=[0,h,[0,[0,e,mW],0]],Cv=[0,h,[0,[0,e,lP],0]],Cw=[0,h,[0,[0,e,l6],0]],Cx=[0,h,[0,[0,e,ni],0]],Cy=[0,h,[0,[0,e,my],0]],Cz=[0,h,[0,[0,e,lq],0]],CA=[0,h,[0,[0,e,nE],0]],CB=[0,h,[0,[0,e,nH],0]],CC=[0,h,[0,[0,e,n$],0]],CD=[0,h,[0,[0,e,oa],0]],CE=[0,h,[0,[0,e,ly],0]],CF=[0,h,[0,[0,e,lD],0]],CG=[0,h,[0,[0,e,n3],0]],CH=[0,h,[0,[0,e,mq],0]],CI=[0,h,[0,[0,e,mz],0]],CJ=[0,h,[0,[0,e,lk],0]],CK=[0,h,[0,[0,e,nc],0]],CL=[0,h,[0,[0,e,k6],0]],CM=[0,h,[0,[0,e,nq],0]],CN=[0,h,[0,[0,e,nm],0]],CO=[0,h,[0,[0,e,lp],0]],CP=[0,h,[0,[0,e,mI],0]],CQ=[0,h,[0,[0,e,oA],0]],CR=[0,h,[0,[0,e,nW],0]],CS=[0,h,[0,[0,e,lX],0]],CT=[0,h,[0,[0,e,lA],0]],CU=[0,h,[0,[0,e,m3],0]],CV=[0,h,[0,[0,e,k_],0]],CW=[0,h,[0,[0,e,mF],0]],CX=[0,h,[0,[0,e,nI],0]],CY=[0,h,[0,[0,e,lE],0]],CZ=[0,h,[0,[0,e,lN],0]],C0=[0,h,[0,[0,e,mZ],0]],C1=[0,h,[0,[0,e,mp],0]],Cq=n6,B9=[0,h,[0,[0,e,lU],0]],B_=[0,h,[0,[0,e,lW],0]],B$=[0,h,[0,[0,e,mL],0]],Ca=[0,h,[0,[0,e,oH],0]],Cb=[0,h,[0,[0,e,nY],0]],Cc=[0,h,[0,[0,e,lT],0]],Cd=[0,h,[0,[0,e,fo],0]],Ce=[0,h,[0,[0,e,mS],0]],Cf=[0,h,[0,[0,e,m7],0]],Cg=[0,h,[0,[0,e,nk],0]],Ch=[0,h,[0,[0,e,mK],0]],Ci=[0,h,[0,[0,e,cK],0]],Cj=[0,h,[0,[0,e,nK],0]],Ck=[0,h,[0,[0,e,li],0]],Cl=[0,h,[0,[0,e,kY],0]],B5=[0,h,[0,[0,e,mY],0]],B6=[0,h,[0,[0,e,lR],0]],FI=[0,dW,l3,13],FH=[0,dW,n0,19],FE=[0,dW,mi,13],FD=[0,dW,108,19],Fx=[0,dW,81,13],Fv=fr,Fw=hR,Fs=fr,Ft=hR,Fo=hf,Fp=hO,Fq=hq,Fk=hf,Fl=hO,Fm=hq,Fi=f,Fg=[0,hh],Fh=kX,Fy=[0,nA],Fz=[0,"item.Name"],FA=[0,oc],FB=[0,"sorts.date_added"],FC=[0,oc],FF=[0,nA],FG=[0,"item.Type"],FJ=[0,"sorts.sort_name"],FK=[0,"item.CollectionType"],FL=[0,hr],FM="virtual_folders",FP=kX,FT="items_by_view_and_kind",FX="items_by_id",F1="items_by_type_and_name",Gw=[0,1,0],Gp=[0,6,0],Gq=[0,0],Gr=[0,33,[0,34,0]],Gt=f,Gs=[0,1],Gu=[0,"lib/db/sync.ml",334,6],Gm=[0,og,0],Gn=nb,Go="Fetching items",Gl=[0,1],Gi=[0,34,0],Gh=[0,33,0],Ge=[0,1],Gf=[0,0],F_=[0,0],F$=[0,2],F6=[0,6,0],F7=[0,0],F8=[0,0],Gb=[0,0,0],GA=nb,GB="Upgrading indexed_db schema from version",GC=[0,"Erasing existing stores",0],GD=[0,0],GE=[0,0],GF=[0,0],GG="Stores created:",G2="An error occured while loading item",GY=oE,GZ=mM,G0=[0,0],G1=[0,1],GX="Item should exists.",GT=oE,GU=mM,GV=[0,0],GW=[0,1],GO=[0,[2,0,0],ou],GP=hL,GQ="Audio\0",GR=[0,0],GS=[0,1],GN=[0,0],GL="tracks",GM=[0,1];function +L(a){if(typeof +a==="number")return 0;switch(a[0]){case +0:return[0,L(a[1])];case +1:return[1,L(a[1])];case +2:return[2,L(a[1])];case +3:return[3,L(a[1])];case +4:return[4,L(a[1])];case +5:return[5,L(a[1])];case +6:return[6,L(a[1])];case +7:return[7,L(a[1])];case +8:var +c=a[1];return[8,c,L(a[2])];case +9:var +b=a[1];return[9,b,b,L(a[3])];case +10:return[10,L(a[1])];case +11:return[11,L(a[1])];case +12:return[12,L(a[1])];case +13:return[13,L(a[1])];default:return[14,L(a[1])]}}function +ap(a,b){if(typeof +a==="number")return b;switch(a[0]){case +0:return[0,ap(a[1],b)];case +1:return[1,ap(a[1],b)];case +2:return[2,ap(a[1],b)];case +3:return[3,ap(a[1],b)];case +4:return[4,ap(a[1],b)];case +5:return[5,ap(a[1],b)];case +6:return[6,ap(a[1],b)];case +7:return[7,ap(a[1],b)];case +8:var +c=a[1];return[8,c,ap(a[2],b)];case +9:var +d=a[2],e=a[1];return[9,e,d,ap(a[3],b)];case +10:return[10,ap(a[1],b)];case +11:return[11,ap(a[1],b)];case +12:return[12,ap(a[1],b)];case +13:return[13,ap(a[1],b)];default:return[14,ap(a[1],b)]}}function +I(a,b){if(typeof +a==="number")return b;switch(a[0]){case +0:return[0,I(a[1],b)];case +1:return[1,I(a[1],b)];case +2:var +c=a[1];return[2,c,I(a[2],b)];case +3:var +d=a[1];return[3,d,I(a[2],b)];case +4:var +e=a[3],f=a[2],g=a[1];return[4,g,f,e,I(a[4],b)];case +5:var +h=a[3],i=a[2],j=a[1];return[5,j,i,h,I(a[4],b)];case +6:var +k=a[3],l=a[2],m=a[1];return[6,m,l,k,I(a[4],b)];case +7:var +n=a[3],o=a[2],p=a[1];return[7,p,o,n,I(a[4],b)];case +8:var +q=a[3],r=a[2],s=a[1];return[8,s,r,q,I(a[4],b)];case +9:var +t=a[1];return[9,t,I(a[2],b)];case +10:return[10,I(a[1],b)];case +11:var +u=a[1];return[11,u,I(a[2],b)];case +12:var +v=a[1];return[12,v,I(a[2],b)];case +13:var +w=a[2],x=a[1];return[13,x,w,I(a[3],b)];case +14:var +y=a[2],z=a[1];return[14,z,y,I(a[3],b)];case +15:return[15,I(a[1],b)];case +16:return[16,I(a[1],b)];case +17:var +A=a[1];return[17,A,I(a[2],b)];case +18:var +B=a[1];return[18,B,I(a[2],b)];case +19:return[19,I(a[1],b)];case +20:var +C=a[2],D=a[1];return[20,D,C,I(a[3],b)];case +21:var +E=a[1];return[21,E,I(a[2],b)];case +22:return[22,I(a[1],b)];case +23:var +F=a[1];return[23,F,I(a[2],b)];default:var +G=a[2],H=a[1];return[24,H,G,I(a[3],b)]}}function +fR(a){return[0,a]}function +ed(a){return a[1]}function +fS(a,b,c){return a[1]===b?(a[1]=c,1):0}function +fT(a){throw i([0,c1,a],1)}function +D(a){throw i([0,ii,a],1)}var +ij=[w,pc,aa(0)];function +ip(a,b){return H0(a,b)?a:b}function +c2(a){return 0<=a?a:-a|0}var +ee=aV;function +ag(a,b){return a+b}function +pp(b){var +e=n(b);return function(a){var +c=a;for(;;){if(e<=c)return ag(b,pq);var +d=z(b,c);a:{if(48<=d){if(58>d)break a}else if(45===d)break a;return b}c=c+1|0}}(0)}function +iq(a,b){if(!a)return b;var +c=a[1];return[0,c,iq(a[2],b)]}H$(0);var +ps=oZ(1),a_=oZ(2);function +c3(a,b){h$(a,b,0,n(b));return}function +ir(a){c3(a_,a);o0(a_,10);return cg(a_)}var +fV=fR(function(a){return function(a){var +b=a;for(;;){if(!b)return 0;var +d=b[2],e=b[1];try{cg(e)}catch(f){var +c=J(f);if(c[1]!==im)throw i(c,0)}b=d}}(Ia(0))});function +fW(a){return g(ed(fV),0)}ie(nr,fW);function +pd(a,b){return HC(a,b)?a:b}var +pe=-2147483648,pg=cX(pf),pi=cX(ph),pk=cX(pj);function +pl(a){return a?pm:pn}function +po(a){return f+a}function +pr(a){return pp(h3("%.12g",a))}function +pt(a,b,c,d){if(0<=c&&0<=d&&(n(b)-d|0)>=c)return h$(a,b,c,d);return D(pu)}function +pv(a,b,c,d){if(0<=c&&0<=d&&(ao(b)-d|0)>=c)return H9(a,b,c,d);return D(pw)}function +px(c){for(;;){var +d=fR(1),a=ed(fV);let +e=d,f=a;var +b=1-fS(fV,a,function(a){if(fS(e,1,0))g(c,0);return g(f,0)});if(!b)return b}}function +ef(a){return cg(a)}function +py(a,b){o0(a,b);return}var +fX=Io(0),c4=(4*fX|0)-1|0;function +is(a){return 1-(typeof +a==="number"?1:0)}var +pA=[w,pz,aa(0)];function +pB(a){throw i(pA,1)}function +pC(a){var +d=a[1];a[1]=pB;try{var +c=g(d,0);If(a,c);return c}catch(f){var +b=J(f);a[1]=function(a){throw i(b,0)};throw i(b,0)}}function +it(a,b){return b?[0,g(a,b[1])]:0}function +pD(a,b){return 0===b[0]?[0,g(a,b[1])]:b}function +N(a){if(0<=a&&ca>=a)return a;return D(pE)}function +pO(a,b){return a-b|0}function +iu(a,b){return 0===pO(a,b)?1:0}function +pF(a){a:{if(40<=a){if(92===a)return pG;if(cI>a)break a}else{if(32<=a){if(39<=a)return pH;break a}if(14>a)switch(a){case +8:return pI;case +9:return pJ;case +10:return pK;case +13:return pL}}var +b=K(4);M(b,0,92);M(b,1,48+(a/fq|0)|0);M(b,2,48+((a/10|0)%10|0)|0);M(b,3,48+(a%10|0)|0);return fO(b)}var +c=K(1);M(c,0,a);return fO(c)}function +pM(a){return 25>>0?a:a+32|0}function +pN(a){return 25>>0?a:a+mr|0}function +pP(a){return ag(d6(n1,a),pQ)}function +pR(a){var +b=0<=a?1:0,c=b?a<=55295?1:0:b;if(c)var +d=c;else +var +e=57344<=a?1:0,d=e?a<=1114111?1:0:e;return d}function +fY(a){return pR(a)?a:D(pP(a))}function +a1(a){return a}function +aS(a){return a}function +pU(a,b){var +c=a,d=b;for(;;){if(!c)return d;var +e=[0,c[1],d];c=c[2];d=e}}function +ay(a){return pU(a,0)}function +iv(a,b,c){if(b<=a)return 0;var +d=g(c,a);return[0,d,iv(a+1|0,b,c)]}function +pS(a){return a?a[1]:fT(pT)}function +pV(a,b,c,d){var +f=a,e=b;for(;;){if(c<=e)return f;f=[0,g(d,e),f];e=e+1|0}}function +iw(a){if(!a)return 0;var +b=a[1];return iq(b,iw(a[2]))}function +eg(a,b){if(!b)return 0;var +c=b[2],d=g(a,b[1]);return[0,d,eg(a,c)]}function +ix(e,b){return function(a,b){var +d=a,c=b;for(;;){if(!c)return d;var +f=c[2];d=[0,g(e,c[1]),d];c=f}}(0,b)}function +eh(a,b){var +c=b;for(;;){if(!c)return 0;var +d=c[2];g(a,c[1]);c=d}}function +iy(a,b){var +c=b;for(;;){if(!c)return 0;var +e=c[2],d=g(a,c[1]);if(d)return d;c=e}}function +pW(a,b){return 0<=a?50=b){var +d=K(c);aX(a,b,d,0,c);return d}return D(p1)}function +ch(a,b,c){return fO(f0(a,b,c))}function +iD(a,b,c,d,e){if(0<=e&&0<=b&&(ao(a)-e|0)>=b&&0<=d&&(ao(c)-e|0)>=d){aX(a,b,c,d,e);return}return D(p2)}function +bf(a,b,c,d,e){if(0<=e&&0<=b&&(n(a)-e|0)>=b&&0<=d&&(ao(c)-e|0)>=d){bT(a,b,c,d,e);return}return D(p3)}function +iE(a,b){var +d=ao(b);if(0===d)return b;var +e=K(d),f=d-1|0,h=0;if(f>=0){var +c=h;for(;;){M(e,c,g(a,d2(b,c)));var +i=c+1|0;if(f===c)break;c=i}}return e}function +c5(a){return bU(a)}function +av(a){return fO(a)}function +p0(a){return iC(bU(a))}function +p4(a,b){var +c=ao(a),e=ao(b),d=K(c+e|0);aX(a,0,d,0,c);aX(b,0,d,c,e);return d}function +p5(a){var +b=[0,0],j=ao(a)-1|0,l=0;if(j>=0){var +g=l;for(;;){var +e=d2(a,g);a:{b:{c:{if(32<=e){var +h=e-34|0;if(58>>0){if(93<=h)break c}else if(56>>0)break b;var +i=1;break a}if(11<=e){if(13===e)break b}else if(8<=e)break b}var +i=4;break a}var +i=2}b[1]=b[1]+i|0;var +o=g+1|0;if(j===g)break;g=o}}if(b[1]===ao(a))return iC(a);var +c=K(b[1]);b[1]=0;var +k=ao(a)-1|0,m=0;if(k>=0){var +f=m;for(;;){var +d=d2(a,f);a:{b:{c:{if(35<=d){if(92!==d){if(cI<=d)break c;break b}}else{if(32>d){if(14<=d)break c;switch(d){case +8:M(c,b[1],92);b[1]++;M(c,b[1],98);break a;case +9:M(c,b[1],92);b[1]++;M(c,b[1],116);break a;case +10:M(c,b[1],92);b[1]++;M(c,b[1],110);break a;case +13:M(c,b[1],92);b[1]++;M(c,b[1],mi);break a;default:break c}}if(34>d)break b}M(c,b[1],92);b[1]++;M(c,b[1],d);break a}M(c,b[1],92);b[1]++;M(c,b[1],48+(d/fq|0)|0);b[1]++;M(c,b[1],48+((d/10|0)%10|0)|0);b[1]++;M(c,b[1],48+(d%10|0)|0);break a}M(c,b[1],d)}b[1]++;var +n=f+1|0;if(k===f)break;f=n}}return c}function +p6(a){return iE(pN,a)}function +p7(a){return iE(pM,a)}function +c6(a,b){return av(bY(a,b))}function +iF(a,b,c){return av(f0(c5(a),b,c))}function +p8(a,b){return b<=a?a:D(p9)}function +p_(a,b,c){var +e=a,d=c;for(;;){if(!d)return e;var +f=d[1];if(!d[2])return n(f)+e|0;var +g=d[2];e=p8((n(f)+b|0)+e|0,e);d=g}}function +p$(a,b,c,d,e){var +h=b,g=e;for(;;){if(!g)return a;var +f=g[1];if(!g[2]){bT(f,0,a,h,n(f));return a}var +i=g[2];bT(f,0,a,h,n(f));bT(c,0,a,h+n(f)|0,d);h=(h+n(f)|0)+d|0;g=i}}function +iG(a,b){if(!b)return qa;var +c=n(a);return av(p$(K(p_(0,c,b)),0,a,c,b))}function +iH(a,b,c,d){var +e=c;for(;;){if(b<=e)throw i(a0,1);if(aR(a,e)===d)return e;e=e+1|0}}function +qe(a,b,c){var +d=n(a);if(0<=b&&d>=b)try{iH(a,d,b,c);var +f=1;return f}catch(f){var +e=J(f);if(e===a0)return 0;throw i(e,0)}return D(qf)}function +iI(a){return av(p7(c5(a)))}function +iJ(a,b){return aI(a,b)}function +iK(a,b){return a==b?1:0}function +qb(a){return function(a,b,c){var +d=c;for(;;){if(b<=d)return a;var +e=aR(a,d)+mr|0;a:{if(59>>0){if(33>>0)break a}else if(2===e)break a;d=d+1|0;continue}return av(p5(c5(a)))}}(a,n(a),0)}function +qc(a,b,c){var +d=n(a);if(0<=b&&d>=b)return iH(a,d,b,c);return D(qd)}function +qg(a,b){return qe(a,0,b)}function +qh(a){return av(p6(c5(a)))}function +f1(a,b){var +d=b.length-1;if(0===d)return[0];var +e=bV(d,g(a,b[1])),f=d-1|0,h=1;if(f>=1){var +c=h;for(;;){e[1+c]=g(a,b[1+c]);var +i=c+1|0;if(f===c)break;c=i}}return e}function +f2(e){return function(a,b){var +c=a,d=b;for(;;){if(0>c)return d;var +f=[0,e[1+c],d];c=c-1|0;d=f}}(e.length-2|0,0)}function +qp(a,b){var +d=a,c=b;for(;;){if(!c)return d;d=d+1|0;c=c[2]}}function +iL(a){if(!a)return[0];var +b=a[2],c=a[1],e=bV(qp(0,a),c);return function(a,b){var +d=a,c=b;for(;;){if(!c)return e;var +f=c[2];e[1+d]=c[1];d=d+1|0;c=f}}(1,b)}var +f3=[w,qq,aa(0)];function +qi(a,b){if(0===a)return[0];if(0>a)return D(qj);var +d=bV(a,g(b,0)),e=a-1|0,f=1;if(e>=1){var +c=f;for(;;){d[1+c]=g(b,c);var +h=c+1|0;if(e===c)break;c=h}}return d}function +qk(a,b,c,d){if(0<=b&&0<=c&&(a.length-1-c|0)>=b){Hk(a,b,c,d);return}return D(ql)}function +qm(a,b,c,d,e){if(0<=e&&0<=b&&(a.length-1-e|0)>=b&&0<=d&&(c.length-1-e|0)>=d){Hj(a,b,c,d,e);return}return D(qn)}function +qo(a,b){var +d=b.length-2|0,e=0;if(d>=0){var +c=e;for(;;){g(a,b[1+c]);var +f=c+1|0;if(d===c)break;c=f}}return}function +qr(f,d){function +h(a,b){var +c=((b+b|0)+b|0)+1|0,e=[0,c];if((c+2|0)m(f,k(d,c)[1+c],p))return c+1|0}if(c=m(f,k(d,g)[1+g],c)){k(d,e)[1+e]=c;return}var +i=k(d,g)[1+g];k(d,e)[1+e]=i;e=g}}function +n(a,b){var +c=b;for(;;){var +e=h(a,c),f=k(d,e)[1+e];k(d,c)[1+c]=f;c=e}}var +c=d.length-1,e=((c+1|0)/3|0)-1|0;function +l(a,b,c){try{j(a,b,c);return}catch(f){var +e=J(f);if(e[1]!==f3)throw i(e,0);var +g=e[2];k(d,g)[1+g]=c;return}}function +o(a,b){try{var +d=n(a,b);return d}catch(f){var +c=J(f);if(c[1]===f3)return c[2];throw i(c,0)}}function +p(a,b){var +c=a;for(;;){var +e=(c-1|0)/3|0;if(c===e)throw i([0,q,qs],1);if(0<=m(f,k(d,e)[1+e],b)){k(d,c)[1+c]=b;return}var +g=k(d,e)[1+e];k(d,c)[1+c]=g;if(0>=e){k(d,0)[1]=b;return}c=e}}if(e>=0){var +b=e;for(;;){l(c,b,k(d,b)[1+b]);var +u=b-1|0;if(0===b)break;b=u}}var +g=c-1|0;if(g>=2){var +a=g;for(;;){var +s=k(d,a)[1+a];d[1+a]=k(d,0)[1];p(o(a,0),s);var +t=a-1|0;if(2===a)break;a=t}}if(1=i){var +v=i<=g?g+1|0:i+1|0;return[0,a,b,c,v]}if(!c)return D(qB);var +k=c[3],m=c[2],f=c[1],r=h(f);if(r<=h(k))return d(d(a,b,f),m,k);if(!f)return D(qA);var +s=f[2],t=f[1],u=d(f[3],m,k);return d(d(a,b,t),s,u)}function +c(a,b){if(!b)return[0,0,a,0,1];var +d=b[3],e=b[2],f=b[1],g=m(k[1],a,e);if(0===g)return b;if(0<=g){var +h=c(a,d);return d===h?b:i(f,e,h)}var +j=c(a,f);return f===j?b:i(j,e,d)}function +e(a,b){var +c=b;for(;;){if(!c)return;var +d=c[3],f=c[2];e(a,c[1]);g(a,f);c=d}}function +f(a,b){var +d=a,c=b;for(;;){if(!c)return d;var +e=c[2],g=c[1];d=[0,e,f(d,c[3])];c=g}}function +j(a,b,c){var +d=c;for(;;){if(!d)return;var +e=d[3],f=d[1];d=g(b,d[2])?e:f}}return[0,,,,c,,,,,,,,,,,,,0,,,,,,,,,,,,,,e,,,,,,,,function(a){return f(0,a)},,,,,,,,,,,function(a,b){var +c=b;for(;;){if(!c)return;var +d=c[2],e=c[3],f=c[1];if(g(a,d))return j(d,a,e);c=f}}]}function +qC(a){var +b=qx(a);return[0,b[17],,,b[4],,,,,,,,,,b[31],,,,,,,,,b[39],,,,,,,,,,,,,b[50]]}function +c7(a){return[0,0,0]}function +c8(a){a[1]=0;a[2]=0;return}function +bZ(a,b){b[1]=[0,a,b[1]];b[2]=b[2]+1|0;return 0}function +ci(a){var +b=a[1];if(!b)return 0;var +c=b[1];a[1]=b[2];a[2]=a[2]-1|0;return[0,c]}function +cj(a){var +b=a[1];return b?[0,b[1]]:0}function +qD(a,b){return eh(a,b[1])}var +qF=[w,qE,aa(0)];function +iN(a){return[0,0,0,0]}function +f5(a){a[1]=0;a[2]=0;a[3]=0;return}function +f6(a,b){var +c=[0,a,0],d=b[3];return d?(b[1]=b[1]+1|0,d[2]=c,b[3]=c,0):(b[1]=1,b[2]=c,b[3]=c,0)}function +iO(a){var +b=a[2];if(!b)return 0;var +c=b[1];if(b[2]){var +d=b[2];a[1]=a[1]-1|0;a[2]=d;return[0,c]}f5(a);return[0,c]}function +iP(a){return a[1]}function +qG(a){var +b=a[2];return b?[0,b[1]]:0}function +qH(a){var +b=a[2];if(!b)throw i(qF,1);if(b[2]){var +c=b[2];a[1]=a[1]-1|0;a[2]=c;return}f5(a);return}function +a$(a){var +b=1<=a?a:1,c=c4=(d+b|0))break;c[1]=2*c[1]|0}if(c4a[3])throw i([0,q,qN],1);if((d+b|0)<=a[3])return;throw i([0,q,qM],1)}function +l(a,b){var +c=a[2];if(a[3]<=c)f7(a,1);M(a[1],c,b);a[2]=c+1|0;return 0}function +c_(a,b,c,d){var +e=c<0?1:0;if(e)var +f=e;else +var +h=d<0?1:0,f=h||((n(b)-d|0)=b)return ch(a[1],b,c);return D(qJ)}function +qK(a){return a[2]}function +qL(a){a[2]=0;a[1]=a[4];a[3]=ao(a[1]);return}function +qQ(a,b,c,d){return c_(a,av(b),c,d)}function +f8(a){return 5===a[2]?12:-6}function +iQ(a){return[0,0,K(a)]}function +iR(a,b){var +c=ao(a[2]),d=a[1]+b|0;if(ce){if(32!==e){if(43>e)break a;switch(e-43|0){case +5:c:if(c<(d+2|0)&&1=(d+1|0))break a;var +f=bY(d+1|0,48);cU(f,0,e);bf(b,1,f,(d-c|0)+2|0,c-1|0);return av(f)}if(71<=e){if(5>>0)break a}else if(65>e)break a}if(ca)return b;var +h=[0,0],i=n(b)-1|0,o=0;if(i>=0){var +d=o;for(;;){if(9>=aR(b,d)+dU>>>0)h[1]++;var +r=d+1|0;if(i===d)break;d=r}}var +j=h[1],k=K(n(b)+((j-1|0)/3|0)|0),l=[0,0];function +e(a){cU(k,l[1],a);l[1]++;return}var +f=[0,((j-1|0)%3|0)+1|0],m=n(b)-1|0,p=0;if(m>=0){var +c=p;for(;;){var +g=aR(b,c);if(9>>0)e(g);else{if(0===f[1]){e(95);f[1]=3}f[1]--;e(g)}var +q=c+1|0;if(m===c)break;c=q}}return av(k)}function +sv(a,b){return ek(a,d6(rC(a),b))}function +sw(a,b){return ek(a,d6(r4(a),b))}function +sx(a,b){return ek(a,d6(sg(a),b))}function +sy(a,b){return ek(a,HM(rQ(a),b))}function +bh(d,b,c){function +a(a){switch(d[1]){case +0:var +e=45;break;case +1:var +e=43;break;default:var +e=32}return HI(c,b,e)}function +e(a){var +b=h0(c);return 3===b?c<0.?sA:sB:4<=b?sC:a}function +f(b){var +e=n(b);return function(a){var +c=a;for(;;){if(c===e)return 0;var +d=z(b,c)-46|0;a:{if(23>>0){if(55===d)break a}else if(21>>0)break a;c=c+1|0;continue}return 1}}(0)?b:ag(b,sz)}switch(d[2]){case +5:return e(f(h3(iU(d,b),c)));case +6:return a(0);case +7:return qh(a(0));case +8:return e(a(0));default:return h3(iU(d,b),c)}}function +sD(a){var +b=pF(a),c=n(b),d=bY(c+2|0,39);bT(b,0,d,1,c);return av(d)}function +sE(a){var +b=iQ(16);f9(b,a);return iS(b)}function +dE(a,b,c,d){var +h=b,f=c,e=d;for(;;){if(typeof +e==="number")return g(h,f);switch(e[0]){case +0:var +s=e[1];return function(a){return v(h,[5,f,a],s)};case +1:var +t=e[1];return function(a){return v(h,[4,f,sD(a)],t)};case +2:return f_(h,f,e[2],e[1],function(a){return a});case +3:return f_(h,f,e[2],e[1],rB);case +4:return el(h,f,e[4],e[2],e[3],sv,e[1]);case +5:return el(h,f,e[4],e[2],e[3],sw,e[1]);case +6:return el(h,f,e[4],e[2],e[3],sx,e[1]);case +7:return el(h,f,e[4],e[2],e[3],sy,e[1]);case +8:return sF(h,f,e[4],e[2],e[3],e[1]);case +9:return f_(h,f,e[2],e[1],pl);case +10:f=[7,f];e=e[1];break;case +11:f=[2,f,e[1]];e=e[2];break;case +12:f=[3,f,e[1]];e=e[2];break;case +13:var +u=e[3],w=sE(e[2]);return function(a){return v(h,[4,f,w],u)};case +14:var +x=e[3],y=e[2];return function(a){return v(h,f,I(rA(a[1],y),x))};case +15:var +z=e[1];return function(c,b){return v(h,[6,f,function(a){return m(c,a,b)}],z)};case +16:var +A=e[1];return function(a){return v(h,[6,f,a],A)};case +17:f=[0,f,e[1]];e=e[2];break;case +18:var +j=e[1];if(0===j[0]){let +b=f,c=h,d=e[2];h=function(a){return v(c,[1,b,[0,a]],d)};f=0;e=j[1][1]}else{let +b=f,c=h,d=e[2];h=function(a){return v(c,[1,b,[1,a]],d)};f=0;e=j[1][1]}break;case +19:throw i([0,q,sH],1);case +20:var +B=e[3],C=[8,f,sI];return function(a){return v(h,C,B)};case +21:var +D=e[2];return function(a){return v(h,[4,f,d6(lB,a)],D)};case +22:var +E=e[1];return function(a){return v(h,[5,f,a],E)};case +23:var +k=e[2],l=e[1];return a<50?kP(a+1|0,h,f,l,k):p(kP,[0,h,f,l,k]);default:var +n=e[3],o=e[1],r=g(e[2],0);return a<50?g4(a+1|0,h,f,n,o,r):p(g4,[0,h,f,n,o,r])}}}function +v(a,b,c){return bA(dE(0,a,b,c))}function +kP(a,b,c,d,e){if(typeof +d==="number")switch(d){case +0:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +1:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +2:throw i([0,q,sJ],1);default:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e])}switch(d[0]){case +0:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +1:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +2:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +3:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +4:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +5:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +6:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +7:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +8:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);case +9:var +f=d[2];return a<50?g5(a+1|0,b,c,f,e):p(g5,[0,b,c,f,e]);case +10:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e]);default:return a<50?B(a+1|0,b,c,e):p(B,[0,b,c,e])}}function +g5(a,f,c,d,e){if(typeof +d==="number")return a<50?B(a+1|0,f,c,e):p(B,[0,f,c,e]);switch(d[0]){case +0:var +b=d[1];return function(a){return aJ(f,c,b,e)};case +1:var +g=d[1];return function(a){return aJ(f,c,g,e)};case +2:var +h=d[1];return function(a){return aJ(f,c,h,e)};case +3:var +j=d[1];return function(a){return aJ(f,c,j,e)};case +4:var +k=d[1];return function(a){return aJ(f,c,k,e)};case +5:var +l=d[1];return function(a){return aJ(f,c,l,e)};case +6:var +m=d[1];return function(a){return aJ(f,c,m,e)};case +7:var +n=d[1];return function(a){return aJ(f,c,n,e)};case +8:var +o=d[2];return function(a){return aJ(f,c,o,e)};case +9:var +r=d[3],s=d[2],t=X(S(d[1]),s);return function(a){return aJ(f,c,ap(t,r),e)};case +10:var +u=d[1];return function(a,b){return aJ(f,c,u,e)};case +11:var +v=d[1];return function(a){return aJ(f,c,v,e)};case +12:var +w=d[1];return function(a){return aJ(f,c,w,e)};case +13:throw i([0,q,sK],1);default:throw i([0,q,sL],1)}}function +aJ(a,b,c,d){return bA(g5(0,a,b,c,d))}function +B(a,b,c,d){var +e=[8,c,sM];return a<50?dE(a+1|0,b,e,d):p(dE,[0,b,e,d])}function +f_(h,f,c,d,e){if(typeof +d==="number")return function(a){return v(h,[4,f,g(e,a)],c)};if(0===d[0]){var +b=d[2],i=d[1];return function(a){return v(h,[4,f,aA(i,b,g(e,a))],c)}}var +j=d[1];return function(a,b){return v(h,[4,f,aA(j,a,g(e,b))],c)}}function +el(j,i,h,d,e,f,g){if(typeof +d==="number"){if(typeof +e==="number")return e?function(a,b){return v(j,[4,i,cl(a,m(f,g,b))],h)}:function(a){return v(j,[4,i,m(f,g,a)],h)};var +b=e[1];return function(a){return v(j,[4,i,cl(b,m(f,g,a))],h)}}if(0===d[0]){var +c=d[2],k=d[1];if(typeof +e==="number")return e?function(a,b){return v(j,[4,i,aA(k,c,cl(a,m(f,g,b)))],h)}:function(a){return v(j,[4,i,aA(k,c,m(f,g,a))],h)};var +n=e[1];return function(a){return v(j,[4,i,aA(k,c,cl(n,m(f,g,a)))],h)}}var +l=d[1];if(typeof +e==="number")return e?function(a,b,c){return v(j,[4,i,aA(l,a,cl(b,m(f,g,c)))],h)}:function(a,b){return v(j,[4,i,aA(l,a,m(f,g,b))],h)};var +o=e[1];return function(a,b){return v(j,[4,i,aA(l,a,cl(o,m(f,g,b)))],h)}}function +sF(i,h,g,d,e,f){if(typeof +d==="number"){if(typeof +e==="number")return e?function(a,b){return v(i,[4,h,bh(f,a,b)],g)}:function(a){return v(i,[4,h,bh(f,f8(f),a)],g)};var +b=e[1];return function(a){return v(i,[4,h,bh(f,b,a)],g)}}if(0===d[0]){var +c=d[2],j=d[1];if(typeof +e==="number")return e?function(a,b){return v(i,[4,h,aA(j,c,bh(f,a,b))],g)}:function(a){return v(i,[4,h,aA(j,c,bh(f,f8(f),a))],g)};var +l=e[1];return function(a){return v(i,[4,h,aA(j,c,bh(f,l,a))],g)}}var +k=d[1];if(typeof +e==="number")return e?function(a,b,c){return v(i,[4,h,aA(k,a,bh(f,b,c))],g)}:function(a,b){return v(i,[4,h,aA(k,a,bh(f,f8(f),b))],g)};var +m=e[1];return function(a,b){return v(i,[4,h,aA(k,a,bh(f,m,b))],g)}}function +g4(a,b,c,d,e,f){if(e){var +i=e[1];return function(a){return sG(b,c,d,i,g(f,a))}}var +h=[4,c,f];return a<50?dE(a+1|0,b,h,d):p(dE,[0,b,h,d])}function +sG(a,b,c,d,e){return bA(g4(0,a,b,c,d,e))}function +bi(a,b){var +c=b;for(;;){if(typeof +c==="number")return;switch(c[0]){case +0:var +f=c[1],h=iT(c[2]);bi(a,f);return c3(a,h);case +1:var +d=c[2],e=c[1];if(0===d[0]){var +i=d[1];bi(a,e);c3(a,sN);c=i}else{var +j=d[1];bi(a,e);c3(a,sO);c=j}break;case +6:var +m=c[2];bi(a,c[1]);return g(m,a);case +7:bi(a,c[1]);return ef(a);case +8:var +n=c[2];bi(a,c[1]);return D(n);case +2:case +4:var +k=c[2];bi(a,c[1]);return c3(a,k);default:var +l=c[2];bi(a,c[1]);return py(a,l)}}}function +bj(a,b){var +c=b;for(;;){if(typeof +c==="number")return;switch(c[0]){case +0:var +f=c[1],h=iT(c[2]);bj(a,f);return ab(a,h);case +1:var +d=c[2],e=c[1];if(0===d[0]){var +i=d[1];bj(a,e);ab(a,sP);c=i}else{var +j=d[1];bj(a,e);ab(a,sQ);c=j}break;case +6:var +n=c[2];bj(a,c[1]);return ab(a,g(n,0));case +7:c=c[1];break;case +8:var +o=c[2];bj(a,c[1]);return D(o);case +2:case +4:var +k=c[2];bj(a,c[1]);return ab(a,k);default:var +m=c[2];bj(a,c[1]);return l(a,m)}}}function +sR(a){var +c=a[1],b=a$(bt);return v(function(a){bj(b,a);return fT(ba(b))},0,c)}function +iV(c){if(c==f)return sS;var +e=n(c);function +j(a){return g(sR(sT),c)}function +k(a){var +b=a;for(;;){if(b===e)return b;var +d=z(c,b);if(9!==d&&32!==d)return b;b=b+1|0}}var +h=k(0),o=function(a,b){var +d=b;for(;;){if(d===e)return d;if(25>>0)return d;d=d+1|0}}(h,h),a=iF(c,h,o-h|0),d=k(o),l=function(a,b){var +d=b;for(;;){if(d===e)return d;var +f=z(c,d);a:{if(48<=f){if(58>f)break a}else if(45===f)break a;return d}d=d+1|0}}(d,d);if(d===l)var +m=0;else +try{var +r=HW(iF(c,d,l-d|0)),m=r}catch(f){var +p=J(f);if(p[1]!==c1)throw i(p,0);var +q=j(0),m=q}if(k(l)!==e)j(0);a:{if(a!==f&&a!==k7){if(a==="h"){var +b=0;break a}if(a==="hov"){var +b=3;break a}if(a==="hv"){var +b=2;break a}if(a!=="v"){var +b=j(0);break a}var +b=1;break a}var +b=4}return[0,m,b]}function +sU(d,b,c){return v(function(a){bi(b,a);return g(d,b)},0,c[1])}function +f$(a,b){return sU(function(a){return 0},a,b)}function +em(a){return f$(a_,a)}function +iW(c,b){return v(function(a){var +b=a$(64);bj(b,a);return g(c,ba(b))},0,b[1])}function +F(a){return iW(function(a){return a},a)}var +ga=fR(0);function +gc(a,b){var +c=a[1+b];return is(c)?cY(c)===dS?g(F(sV),c):cY(c)===253?pr(c):sW:g(F(sX),c)}function +iX(a,b){if(a.length-1<=b)return sY;var +c=iX(a,b+1|0),d=gc(a,b);return m(F(sZ),d,c)}function +s0(a){var +b=a.length-1;if(2>=b>>>0)switch(b){case +0:return s2;case +1:return s3;default:var +e=gc(a,1);return g(F(s4),e)}var +c=iX(a,2),d=gc(a,1);return m(F(s1),d,c)}function +s5(d){return function(a){var +b=a;for(;;){if(!b)return 0;var +e=b[2],f=b[1];a:{try{var +c=g(f,d)}catch(f){break a}if(c)return[0,c[1]]}b=e}}(ed(ga))}function +s6(a){if(a===fU)return s7;if(a===il)return s8;if(a[1]===ik){var +b=a[2],e=b[3],h=b[2],i=b[1];return cC(F(gb),i,h,e,e+5|0,s9)}if(a[1]===q){var +c=a[2],f=c[3],j=c[2],k=c[1];return cC(F(gb),k,j,f,f+6|0,s_)}if(a[1]===io){var +d=a[2],g=d[3],l=d[2],m=d[1];return cC(F(gb),m,l,g,g+6|0,s$)}if(0!==cY(a))return a[1];var +n=a[1][1];return ag(n,s0(a))}function +en(a){var +b=s5(a);return b?b[1]:s6(a)}function +ta(a){var +b=[0,Hu(a)];return b}function +tb(c,b){function +a(a){return a?0===c?tc:td:0===c?te:tf}if(0===b[0]){var +d=b[5],e=b[4],f=b[3],h=b[6]?tg:ti,i=b[2],j=b[7],k=a(b[1]);return[0,Hf(F(th),k,j,i,h,f,e,d)]}if(b[1])return 0;var +l=a(0);return[0,g(F(tj),l)]}function +tk(a,b){if(!b)return f$(a,tm);var +d=b[1],e=d.length-2|0,h=0;if(e>=0){var +c=h;for(;;){var +f=tb(c,k(d,c)[1+c]);if(f){var +i=f[1];g(f$(a,tl),i)}var +j=c+1|0;if(e===c)break;c=j}}return}function +gd(a,b){return tk(a,ta(b))}var +tp=to.slice();function +tq(a,b){var +e=en(a);g(em(tr),e);gd(a_,b);var +c=H8(0);if(c<0){var +d=c2(c);ir(k(tp,d)[1+d])}return ef(a_)}var +ts=[0];function +iY(a){var +b=HB(0);return b}function +tt(a,b){try{var +d=b?ts:iY(0);try{fW(0)}catch(f){}try{var +f=tq(a,d),e=f}catch(f){var +h=J(f),j=iY(0),k=en(a);g(em(tv),k);gd(a_,d);var +l=en(h);g(em(tw),l);gd(a_,j);var +e=ef(a_)}return e}catch(f){var +c=J(f);if(c===fU)return ir(tu);throw i(c,0)}}ie(of,function(a,b){try{var +c=tt(a,b);return c}catch(f){return 0}});function +tn(a){for(;;){var +b=ed(ga),c=1-fS(ga,b,[0,a,b]);if(!c)return c}}var +ty=[w,tx,aa(0)];tn(function(a){return a[1]===ty?[0,ag(tz,en(a[2]))]:0});function +tA(a){return H6(a,0,n(a))}function +iZ(a){return[0,bV(55,0),0]}function +tB(a,b){qm(b[1],0,a[1],0,55);a[2]=b[2];return}function +i0(a,b){function +l(a,b){return tA(ag(a,iB(b)))}function +m(a){var +b=z(a,3)<<24,c=z(a,2)<<16,d=z(a,1)<<8;return((z(a,0)+d|0)+c|0)+b|0}var +g=0===b.length-1?[0,0]:b,h=g.length-1,c=0;for(;;){k(a[1],c)[1+c]=c;var +s=c+1|0;if(54===c)break;c=s}var +f=[0,tC],i=54+iA(55,h)|0,n=0;if(i>=0){var +d=n;for(;;){var +e=d%55|0,j=Id(d,h),o=k(g,j)[1+j];f[1]=l(f[1],o);var +p=m(f[1]),q=(k(a[1],e)[1+e]^p)&hl;k(a[1],e)[1+e]=q;var +r=d+1|0;if(i===d)break;d=r}}a[2]=0;return}function +tD(a){var +b=iZ(0);i0(b,a);return b}function +ge(a){return tD(o7(0))}function +tE(a){var +b=iZ(0);tB(b,a);return b}function +tF(a){a[2]=(a[2]+1|0)%55|0;var +b=a[2],c=k(a[1],b)[1+b],d=(a[2]+24|0)%55|0,e=(k(a[1],d)[1+d]+(c^(c>>>25|0)&31)|0)&hl,f=a[2];k(a[1],f)[1+f]=e;return e}var +i1=[0,tG.slice(),0];function +tH(a){return i0(i1,a)}function +tI(a){return tH(o7(0))}function +tJ(a){return tE(i1)}function +tK(a){var +b=a.length-1<4?1:0,c=b||(a[4]<0?1:0);return c}try{var +G4=o6(n2),i5=G4}catch(f){var +i2=J(f);if(i2!==a0)throw i(i2,0);try{var +G3=o6("CAMLRUNPARAM"),i4=G3}catch(f){var +i3=J(f);if(i3!==a0)throw i(i3,0);var +i4=tL}var +i5=i4}var +eo=[lY,function(a){return ge(0)}],tM=qg(i5,82);function +tN(a,b){var +c=a;for(;;){if(b<=c)return c;if(fX<(c*2|0))return c;c=c*2|0}}function +gf(a,b){var +f=a?a[1]:tM,c=tN(16,b);if(f)var +d=cY(eo),g=e9===d?eo[1]:lY===d?pC(eo):eo,e=tF(g);else +var +e=0;return[0,0,bV(c,0),e,c]}function +tP(m,b,c,d){var +h=d.length-1,f=bV(h,0),i=c.length-2|0;function +n(a){var +c=a;for(;;){if(!c)return;var +i=c[1],l=c[2],n=c[3],h=b?c:[0,i,l,0],e=g(m,i),j=k(f,e)[1+e];if(j)j[3]=h;else +k(d,e)[1+e]=h;k(f,e)[1+e]=h;c=n}}var +o=0;if(i>=0){var +e=o;for(;;){n(k(c,e)[1+e]);var +r=e+1|0;if(i===e)break;e=r}}if(b){var +j=h-1|0,p=0;if(j>=0){var +a=p;for(;;){var +l=k(f,a)[1+a];if(l)l[3]=0;var +q=a+1|0;if(j===a)break;a=q}}}return}function +tQ(a,b){var +c=b[2],d=(c.length-1)*2|0,e=d>>0)return;return i$(a,d)}function +t4(a){var +b=iO(a[28]);if(!b)return;var +c=b[1],d=c[1];a[12]=a[12]-c[3]|0;var +e=ah(d);a[9]=a[9]+e|0;return}function +t5(a,b,c){if(typeof +c==="number")switch(c){case +0:var +j=cj(a[3]);if(!j)return;var +k=j[1][1],l=function(a,b){if(!b)return[0,a,0];var +c=b[1],d=b[2];return H1(a,c)?[0,a,b]:[0,c,l(a,d)]};k[1]=l(a[6]-a[9]|0,k[1]);return;case +1:ci(a[2]);return;case +2:ci(a[3]);return;case +3:var +m=cj(a[2]);return m?i$(a,m[1][2]):er(a);case +4:var +o=a[10]!==(a[6]-a[9]|0)?1:0;return o?t4(a):o;default:var +p=ci(a[5]);if(p)return gg(a,g(a[25],p[1]));return}switch(c[0]){case +0:return i_(a,b,c[1]);case +1:var +d=c[2],f=c[1],q=d[1],z=d[2],r=cj(a[2]);if(!r)return;var +s=r[1],e=s[2];switch(s[1]){case +0:return cm(a,f);case +1:return b0(a,d,e);case +2:return b0(a,d,e);case +3:return a[9]<(b+n(q)|0)?b0(a,d,e):cm(a,f);case +4:return a[11]?cm(a,f):a[9]<(b+n(q)|0)?b0(a,d,e):((a[6]-e|0)+z|0)=a[14]){a[13]=i9;ja(a);if(b)er(a);return uc(a)}gj(a,0)}}function +cn(a,b,c){var +d=a[14]=c)return br(a[17],ji,0,c);br(a[17],ji,0,80);c=c-80|0}}function +up(a){return a[1]===eq?ag(ur,ag(a[2],uq)):us}function +ut(a){return a[1]===eq?ag(uv,ag(a[2],uu)):uw}function +ux(a){return 0}function +uy(a){return 0}function +uz(a,b,c,d,e){var +g=iN(0),h=[0,i7,uA,0];f6(h,g);var +f=c7(0);gh(f);bZ([0,1,h],f);var +i=78,j=c7(0),k=c7(0),l=c7(0);return[0,f,c7(0),l,k,j,i,10,68,i,0,1,1,1,1,ee,uB,a,b,c,d,e,0,0,up,ut,ux,uy,g]}function +jk(a,b){var +c=uz(a,b,function(a){return 0},function(a){return 0},function(a){return 0});c[19]=function(a){return un(c,a)};c[20]=function(a){return jj(c,a)};c[21]=function(a){return jj(c,a)};return c}function +jl(d){return jk(function(a,b,c){return pt(d,a,b,c)},function(a){return ef(d)})}function +dc(d){return jk(function(a,b,c){return c_(d,a,b,c)},function(a){return 0})}var +uC=hc;function +gm(a){return a$(uC)}var +jm=gm(0),jn=jl(ps),uD=jl(a_),jo=dc(jm);function +uf(a,b){gk(a,1);return g(a[18],0)}function +ug(a,b){var +c=a[14]=0){var +c=h;for(;;){e[c]=g(a,k(b,c)[1+c]);var +i=c+1|0;if(f===c)break;c=i}}return e}function +gq(c,b){return pW(jw(b),function(a){return g(c,b[a])})}function +gr(f,b){return function(a,b,c){var +e=a,d=c;for(;;){if(!d)return b;var +h=d[2];b[e]=g(f,d[1]);e=e+1|0;d=h}}(0,gp(0),b)}function +u1(a,b){var +c=new +s["Error"](b);return a?(c[cM]=a[1],c):c}var +gs=s["Promise"];function +de(a){return gs.resolve(a)}function +gt(a,b){return a.then(d9(1,b))}function +jx(a){return gs.all(a)}function +a2(a){return aZ(a)}function +O(a){return aP(a)}function +uW(a,b,c){if(!c)return;a[b]=c[1];return}function +uX(a,b){a[b];return}function +uZ(a,b,c){if(c)return uY(a,b,c[1]);return}function +u0(a,b){return a[b]}function +u2(a,b){return g(function(a){throw a},u1(a,b))}function +u3(a){return new +gs(d9(2,function(c,b){return m(a,function(a){return c(a)},function(a){return b(a)})}))}function +u4(a,b,c){return a.then(d9(1,b),d9(1,c))}function +df(a){return{fut:a}}function +jy(a){return a[hV]}function +u5(a){return a[hV]}function +gu(a){var +c=[0,function(a){throw i([0,q,u6],1)}];function +b(a){return u2(0,"The future is already set")}return[0,df(u3(function(a,b){c[1]=a;return 0})),function(a){g(c[1],a);c[1]=b;return 0}]}function +ey(a){return df(de(a))}function +ez(a,b){return df(gt(jy(a),function(a){return jy(g(b,a))}))}function +jz(c,b){return ez(b,function(a){return ey(g(c,a))})}function +eA(a){return df(gt(jx(gr(u5,a)),function(a){return de(gq(function(a){return a},a))}))}function +cq(a){return ey([0,a])}function +u7(d,b,c){return df(u4(c,function(a){return de([0,g(d,a)])},function(a){return de([1,g(b,a)])}))}function +jA(a,b){return u7(a,function(a){return a},b)}function +b2(a,b){return jz(b,a)}function +aD(c,b){return function(a){return ez(c,a)}(function(a){return 0===a[0]?g(b,a[1]):ey(a)})}function +ax(a,b){return jz(function(a){return pD(b,a)},a)}s["Event"];function +dg(a,b,c,d){var +e=a?a[1]:{};d.addEventListener(b,d9(1,c),e);return}s["ArrayBuffer"];s["DataView"];function +u8(a){return a["currentTarget"]}s["Blob"];s["File"];var +jB=s[fs];function +jC(a){return jB.stringify(a)}function +gv(a){try{var +c=jB.parse(a)}catch(f){var +b=J(f);if(b[1]===ew)return[1,b[2]];throw i(b,0)}return[0,c]}s["encodeURI"];s["decodeURI"];var +u9=s["encodeURIComponent"],u_=s["decodeURIComponent"],eB=s["URL"],gw=a7;function +va(a){return u0(a,vb)}var +vf=s["URLSearchParams"];function +vg(a){return a.toString()}function +jD(a){return a.toString()}var +jE=s["document"];function +u$(a,b){return a?new +eB(b,a[1]):new +eB(b)}function +vc(a){function +d(a){return u_(a)}try{var +c=va(a),e=uT(gw,c)?uR(vd,0,c):c,f=[0,eg(d,uS(gw,e))];return f}catch(f){var +b=J(f);if(b[1]===ew)return[1,b[2]];throw i(b,0)}}function +ve(a,b){function +e(a){return uP(gw,u9(a))}try{var +d=new +eB(a);d[ot]=uQ(0,eg(e,b));var +f=[0,d];return f}catch(f){var +c=J(f);if(c[1]===ew)return[1,c[2]];throw i(c,0)}}function +vh(a){return new +vf(a)}function +vi(a,b){var +c=new +eB(a);jv(c,vj,vg(b));return c}if(!ju(jE))jE["documentElement"];function +gx(a,b,c){cf(a,b,c);return 0}var +gy=s[mC];function +gz(a){return fL(function(a,b,c){var +e=b,d=c;for(;;){if(!d)return a;var +f=d[2];a[e]=d[1];e=e+1|0;d=f}}(gp(0),0,a))}function +jF(a){return gx(gy,vk,gz(a))}function +jG(a){return gx(gy,vl,gz(a))}function +dh(a){return gx(gy,vm,gz(a))}s[mC];s["navigator"];s["performance"];s["window"];uX(s,vn);s["ClipboardItem"];s["FormData"];var +vq=s["Headers"];function +jH(a,b,c,d,e,f,g,h,i,j,k,l,m){var +n={};n["body"]=go(dd,function(a){return a},a);bC(n,vs,b);bC(n,vt,c);uW(n,vu,it(function(a){return a},d));bC(n,vv,e);uZ(n,vw,f);bC(n,vx,g);bC(n,vy,h);bC(n,vz,i);bC(n,vA,j);bC(n,vB,k);n["signal"]=go(dd,function(a){return a},l);return n}var +vC=s["Request"];s["Response"];var +vE=s["fetch"];s["MediaStream"];s["MediaRecorder"];s["MessageChannel"];s["BroadcastChannel"];var +jI="message";function +jJ(a){return a["data"]}s["Notification"];s["WebSocket"];function +vo(a){return a}function +vp(a){return jA(function(a){return a},a.text())}function +vr(a,b){var +d=a?[0,a[1]]:[0],c=HY(vq,d);function +e(a,b){a.append(b[1],b[2]);return 0}eh(function(a){return e(c,a)},b);return c}function +vD(a,b){var +c=a?a[1]:{};return new +vC(b,c)}function +vF(a){function +b(a){return a}return function(a){return jA(b,a)}(vE(a))}var +vG=s["Worker"];s["SharedWorker"];function +jK(a,b){var +c=a?a[1]:dd;s.postMessage(b,c);return 0}s["clients"];s["registration"];s["serviceWorker"];function +vH(a,b){var +c=a?a[1]:dd;return new +vG(b,c)}function +gA(a){return 0===a[0]?O(a[1]):bD(gA,a[1])}function +gB(a,b,c,d,e){var +f=c?c[1]:0,g=d?d[1]:0;return s["IDBKeyRange"].bound(a,b,!!f,!!g)}var +vK="upgradeneeded",vL="success",vM=fn;function +bk(a,b){return[0,b,a]}function +vN(a){return a[1][fn]}function +eC(a){var +b=a[1]["result"];return g(a[2],b)}function +gC(c,b){dg(0,vL,function(a){return m(c,a,b)},b[1]);return b}function +vO(c,b){dg(0,vM,function(a){return m(c,a,b)},b[1]);return b}function +jL(a){var +b=gu(0),c=b[2],d=b[1];gC(function(a,b){return c([0,eC(b)])},a);vO(function(a,b){return c([1,vN(b)])},a);return d}function +vP(a){switch(a){case +0:return vQ;case +1:return vR;case +2:return vS;default:return vT}}function +vU(a){return O(vP(a))}function +jM(c,d){var +a=[0,function(a){var +b=a["key"],c=d[3];return function(a){return cp(c,a)}(b)},function(a){var +b=a["primaryKey"],d=c[1][3];return function(a){return cp(d,a)}(b)},function(a,b){b.advance(a);return b},function(a,b){var +d=a?[0,g(c[1][2],a[1])]:[0];cf(b,"continue",d);return 0}];return[0,,function(a,b){function +e(a){return cp(function(a){return g(c[4],a)},a)}return function(a){return bk(e,a)}(b.get(g(d[2],a)))},function(a){function +b(a){return ex(function(a){return g(c[4],a)},a)}return function(a){return bk(b,a)}(a.getAll())},function(a,b){var +d=a?[0,a[1]]:[0];function +e(a){return ex(function(a){return g(c[1][3],a)},a)}return function(a){return bk(e,a)}(cf(b,"getAllKeys",d))},,[0,a[1],a[2],a[3],a[4],function(a){return cp(function(a){return g(c[4],a)},a[cD])},function(a){function +b(a){return 0}return function(a){return bk(b,a)}(a.delete())},function(a,b){var +d=b.update(g(c[3],a)),e=c[1][3];return function(a){return bk(e,a)}(d)}],function(a,b,c){var +d=it(vU,b);if(a)var +e=a[1],g=d?[0,e,d[1]]:[0,e],f=g;else +var +f=d?[0,jt,d[1]]:[0];function +h(a){return cp(function(a){return a},a)}return function(a){return bk(h,a)}(cf(c,"openCursor",f))}]}function +vV(a,b,c){var +d=function(a){return jM(b,a)}(c)[4];return[0,,c,,,,d,,,,,,a[1]]}function +vW(d){var +a=function(a){return jM(d,a)}(d[1]);return[0,d,,a[2],a[3],,,a[6],a[7],,,,function(b){return function(a){var +c=gA(b[3][1]),d=a.createIndex(O(b[2]),c);return g(b[1],d)}},function(b){return function(a){var +c=a.index(O(b[2]));return g(b[1],c)}},function(a,b,c){if(b)var +f=g(d[1][2],b[1]),e=[0,g(d[3],a),f];else +var +e=[0,g(d[3],a)];var +h=cf(c,"put",e),i=d[1][3];return function(a){return bk(i,a)}(h)}]}function +vX(a){switch(a){case +0:return vY;case +1:return vZ;default:return v0}}function +cr(b){return function(a){var +c=a.objectStore(O(b[2][2]));return g(b[1],c)}}function +gD(c){return function(a,b){var +e=a?a[1]:0,d=HZ(iL([0,[0,v2,gA(c[2][1][1])],[0,[0,v1,!!e],0]]));dh([0,v3,[0,d,0]]);var +f=b.createObjectStore(O(c[2][2]),d);return g(c[1],f)}}function +di(a,b,c){var +d=b?b[1]:0,e=O(vX(d));return c.transaction(gr(function(a){return O(a[2][2])},a),e)}function +gE(a){var +b=vW(a);return[0,b[1],,b[7],,b[3],b[4],,,b[8],,,b[12],b[13],b[14]]}function +eD(a,b,c){var +d=vV(a,b,c);return[0,,d[2],,,,,,d[6],,,,d[12]]}function +vI(a){return a["oldVersion"]}function +vJ(a){return a["newVersion"]}function +v4(a,b){a.deleteObjectStore(O(b));return 0}function +v5(a){return function(a){return ex(a2,a)}(a["objectStoreNames"])}function +v6(c,b){dg(0,vK,function(a){function +b(a){return a}return m(c,a,function(a){return bk(b,a)}(u8(a)))},b[1]);return b}function +v7(a,b,c){var +d=b?[0,a,po(b[1])]:[0,a];function +e(a,b,c){return cf(a,b,c)}function +f(a){return a}return function(a){return bk(f,a)}(function(a){return e(c,v8,a)}(f1(O,d)))}function +v9(a,b){var +c=a?a[1]:s;return c["indexedDB"]}function +b3(a,b){return a===b?1:0}function +dj(a,b){return a=0){var +b=g;for(;;){var +e=(c-1|0)-b|0,h=k(a,b)[1+b];a[1+b]=k(a,e)[1+e];var +f=(c-1|0)-b|0;k(a,f)[1+f]=h;var +i=b+1|0;if(d===b)break;b=i}}}return}function +v$(i,e){return function(a,b){var +d=a,c=b;for(;;){if(b3(c,e.length-1)){var +f=iL(d);v_(f);return f}var +h=g(i,k(e,c)[1+c]);if(h){d=[0,h[1],d];c=c+1|0}else +c=c+1|0}}(0,0)}function +jO(c,b){return v$(function(a){return g(c,a)?[0,a]:0},b)}function +gF(a,b){return Hw(a,b)}function +jP(a){return 82908052<=a?749039939<=a?756711075<=a?2:6:737308346<=a?4:3:lt<=a?4100401<=a?1:7:-605101559<=a?5:0}function +wa(a){return typeof +a==="number"?737455525<=a?1:0:15681<=a[1]?30+jP(a[2])|0:40+jP(a[2])|0}(function(a){var +b=wa(a);return g(F(wb),b)}(-101336657));function +wc(a,b){return a===b?1:0}function +bE(a,b){if(!b)return 0;var +d=b[2],c=[0,g(a,b[1]),nQ];we(c,1,a,d);return c}function +we(a,b,c,d){var +h=a,f=b,e=d;for(;;){if(!e){h[1+f]=0;return}var +j=e[2],i=[0,g(c,e[1]),nQ];h[1+f]=i;h=i;f=1;e=j}}function +gG(f,b){return function(a,b){var +d=a,c=b;for(;;){if(!c)return ay(d);var +h=c[2],e=g(f,c[1]),i=e?[0,e[1],d]:d;d=i;c=h}}(0,b)}function +wd(a){return a?0:1}function +wf(a,b){return function(a,b,c){var +e=b,d=c;for(;;){if(!d)return 0;var +f=d[2];m(a,e,d[1]);e=e+1|0;d=f}}(a,0,b)}function +jQ(a,b){return b?[0,g(a,b[1])]:0}function +dk(a,b){return a?a[1]:b}function +wg(a){return a?0:1}function +wh(a,b){return b?g(a,b[1]):0}function +wi(a,b){return b?b[1]:D(a)}ge(0);function +gH(a,b){return 0===b[0]?[0,g(a,b[1])]:[1,b[1]]}function +jR(a,b){return 0===b[0]?b:[1,g(a,b[1])]}var +wk=[w,wj,aa(0)];function +ct(a){if(0===a[0])return a[1];throw i(wk,1)}function +gI(a){return function(a,b){var +d=a,c=b;for(;;){if(!c)return[0,ay(d)];var +e=c[1];if(0!==e[0])return[1,e[1]];d=[0,e[1],d];c=c[2]}}(0,a)}function +jS(a,b){return gH(b,a)}function +wl(a){var +b=qC(a);return[0,,,,b[1],,,b[4],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,b[23]]}function +wm(a){var +b=wl(a);return[0,b[4],,,b[7],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,b[51]]}function +gJ(a){return n(a)}function +wp(a){return n(a[2])}function +wq(a){return a?function(a,b){return z(a,(n(a)-b|0)-1|0)}:function(a,b){return z(a,b)}}function +wr(a,b){var +f=gJ(b),g=wq(a);if(0===f)return[0,[0],b];if(1===f)return[0,[0,-1],b];var +e=bV(f,0);k(e,0)[1]=-1;var +d=[0,2],c=[0,0];for(;;){if(!dj(d[1],f))return[0,e,b];var +m=c[1],n=g(b,c[1]);if(iu(g(b,d[1]-1|0),n)){c[1]++;var +h=d[1],o=c[1];k(e,h)[1+h]=o;d[1]++}else if(0===m){var +j=d[1];k(e,j)[1+j]=0;d[1]++}else{if(!cs(c[1],0))throw i([0,q,ws],1);var +l=c[1];c[1]=k(e,l)[1+l]}}}function +wt(a){return wr(0,a)}function +wu(a,b,c){var +e=[0,c],d=[0,0],j=gJ(b),g=wp(a);for(;;){if(dj(d[1],g)&&dj(e[1]+d[1]|0,j)){var +l=z(b,e[1]+d[1]|0);if(iu(l,z(a[2],d[1])))d[1]++;else{var +h=d[1],f=k(a[1],h)[1+h];if(jN(f,0)){if(!dj(f,d[1]))throw i([0,q,wv],1);e[1]=(e[1]+d[1]|0)-f|0;d[1]=f}else{d[1]=0;e[1]++}}continue}return b3(d[1],g)?e[1]:-1}}function +wn(a){return iK(a,wo)}function +ww(a){return b3(gJ(a),1)?[0,z(a,0)]:[1,wt(a)]}function +wx(a,b){var +c=a?a[1]:0;return function(a){if(0!==b[0])return wu(b[1],a,c);var +e=b[1];try{var +f=qc(a,c,e);return f}catch(f){var +d=J(f);if(d===a0)return-1;throw i(d,0)}}}function +wy(d,b){var +e=n(d);return cs(e,n(b))?0:function(a){var +c=a;for(;;){if(b3(c,e))return 1;if(aR(b,c)!==aR(d,c))return 0;c=c+1|0}}(0)}ge(0);function +jT(a,b){var +c=Ho(b[1]),e=b[3],f=b[2];return br(d(a)(wz),f,e,c)}function +jU(a,b){return g(d(a)(wA),n(b))}function +jV(a){var +b=a$(20);return jq(function(a){b1(a,0);return D(ba(b))},dc(b),a)}function +jW(a){return[0,uM(uK,uL,a),0,a]}jW(0);function +wB(a,b){return dH(jV(wC),jU,a,jT,b)}function +wD(a,b){return dH(jV(wE),jU,a,jT,b)}function +wF(a,b,c,d,e){if(0<=e&&0<=b&&0<=d&&(n(a)-b|0)>=e)return(c[3]-d|0)=0){var +c=i;for(;;){var +f=c%16|0,j=Hp(b[1],b[2]+c|0);cC(d(a)(wM),g,f,j,h,f);var +k=c+1|0;if(e===c)break;c=k}}return gj(a,0)});function +wI(a,b,c,d){return wH(wF,function(a){return n(a)},a,b,c,d)}wI(0,0,0,wO);function +wP(a,b){return eg(b,a)}function +wQ(a,c){function +o(a,b){var +e=a,d=b;for(;;){if(!d)return e;var +c=d[1];e=[0,c[1],[0,c[2],[0,c[3],[0,c[4],[0,c[5],[0,c[6],[0,c[7],[0,c[8],[0,c[9],e]]]]]]]]];d=d[2]}}return function(a,b){var +e=a,d=b;for(;;){if(d){var +f=d[2];if(f){var +h=f[2];if(h){var +i=h[2];if(i){var +j=i[2];if(j){var +k=j[2];if(k){var +l=k[2];if(l){var +m=l[2];if(m){var +n=m[2];if(n){var +p=n[2],q=n[1],r=m[1],s=l[1],t=k[1],u=j[1],v=i[1],w=h[1],x=f[1],y=g(c,d[1]),z=g(c,x),A=g(c,w),B=g(c,v),C=g(c,u),D=g(c,t),E=g(c,s),F=g(c,r);e=[0,[0,y,z,A,B,C,D,E,F,g(c,q)],e];d=p;continue}}}}}}}}}return o(wP(d,c),e)}}(0,a)}function +jX(a,b,c){if(!b)return 0;var +f=b[2],d=b[1];if(!f)return[0,g(a,d),0];var +h=f[2],e=f[1];if(!h){var +z=g(a,d);return[0,z,[0,g(a,e),0]]}var +i=h[2],j=h[1];if(!i){var +x=g(a,d),y=g(a,e);return[0,x,[0,y,[0,g(a,j),0]]]}var +k=i[2],l=i[1];if(k){var +m=k[2],n=k[1],o=g(a,d),p=g(a,e),q=g(a,j),r=g(a,l),s=g(a,n),t=50=0){var +e=h;for(;;){var +c=z(b,e);a:if(34===c)d(a)(wV);else if(32<=c)if(92===c)d(a)(wW);else +g(d(a)(wX),c);else{if(14>c)switch(c){case +8:d(a)(wZ);break a;case +9:d(a)(w0);break a;case +10:d(a)(w1);break a;case +13:d(a)(w2);break a}g(d(a)(wY),c)}var +i=e+1|0;if(f===e)break;e=i}}return d(a)(wU)}var +wR=[0,function(a){if(typeof +a==="number")return bu;var +b=a[1];if(dV>b)return bv<=b?al<=b?[0,al,a[2]]:[0,al,a[2]]:b_<=b?[0,e,a[2]]:[0,e,a[2]];if(dO===b)return[0,65,a[2]];if(h<=b)return H<=b?[0,79,a[2]]:[0,65,a[2]];if(ak<=b)return[0,ak,a[2]];var +c=a[2],d=c[2],f=c[1];return d?[0,65,[0,[0,e,f],[0,d[1],0]]]:[0,e,f]},function(a){if(typeof +a==="number")return bu;var +b=a[1];return 65===b?[0,h,a[2]]:al<=b?ak<=b?[0,ak,a[2]]:[0,al,a[2]]:79<=b?[0,H,a[2]]:[0,e,a[2]]},function(a){return[0,0]}(0)];function +w3(a,b,c){var +e=a?a[1]:0,i=b?b[1]:wS;return function(a,b){function +f(a,b){var +e=g(c[1],b);if(typeof +e==="number")return d(a)(w4);var +h=e[1];if(65===h){var +n=[0,function(a,b){return d(a)(w5)}],l=e[2];return m(d(a)(w6),function(a,b){return eu(n,f,a,b)},l)}if(al<=h){if(ak<=h)return e[2]?d(a)(w7):d(a)(w8);var +j=e[2],k=o1(j),o=k[2];return k[1]==0.?g(d(a)(w9),o):g(d(a)(w_),j)}if(79>h)return m(i,a,e[2]);function +q(a,b){var +c=b[2],e=b[1];return dH(d(a)(xa),i,e,f,c)}var +r=[0,function(a,b){return d(a)(w$)}],p=e[2];return m(d(a)(xb),function(a,b){return eu(r,q,a,b)},p)}function +h(a,b){var +e=g(c[1],b);if(typeof +e!=="number"){var +j=e[1];if(65===j){var +k=e[2];if(!k)return d(a)(xe);var +n=[0,function(a,b){return d(a)(xc)}];return m(d(a)(xd),function(a,b){return eu(n,h,a,b)},k)}if(79===j){var +l=e[2];if(!l)return d(a)(xi);var +o=function(a,b){var +c=b[2],e=b[1];return dH(d(a)(xg),i,e,h,c)},p=[0,function(a,b){return d(a)(xf)}];return m(d(a)(xh),function(a,b){return eu(p,o,a,b)},l)}}return f(a,b)}return e?f(a,b):h(a,b)}}function +xj(a){function +d(a){if(typeof +a==="number")return bu;var +b=a[1];if(65===b)return[0,h,jY(d,a[2])];if(al>b)return 79<=b?[0,H,jY(function(a){var +b=a[1];return[0,b,d(a[2])]},a[2])]:[0,e,a[2]];if(ak<=b)return[0,ak,a[2]];var +f=a[2],i=o1(f),c=i[2];if(i[1]!=0.)return[0,al,f];if(-1073741824.<=c&&c<=hl)return[0,bv,c|0];return[0,b_,g(F(xk),c)]}return d(a)}function +P(a,b){return d2(a,b)}function +cu(a,b,c){M(a,b,c);return}var +jZ=aS(lb);function +T(a,b,c){return[0,dM,ch(a,b,c)]}function +eE(a,b,c,d,e){var +f=K(2),i=f0(c,d,e);if(a)var +h=1,g=0;else +var +h=0,g=1;cu(f,g,b>>>8|0);cu(f,h,b&ca);return[0,dM,av(p4(f,i))]}var +xq=aS(65533),dl=xt.slice();function +xl(a,b){return D(m(F(xm),a,b))}function +xn(a){return a}function +xo(a,b,c,d,e){aX(a,b,c,d,e);return}function +xp(a,b){return a[1+b]}function +xr(a,b){var +c=P(a,b);return cI>>0)throw i([0,q,xu],1);switch(l){case +0:return d(P(a,b));case +1:var +r=P(a,b),m=P(a,b+1|0);return 2===(m>>>6|0)?d((r&31)<<6|m&63):T(a,b,c);case +2:var +g=P(a,b),e=P(a,b+1|0),n=P(a,b+2|0),h=(g&15)<<12|(e&63)<<6|n&63;if(2!==(n>>>6|0))return T(a,b,c);if(hU===g){if(160<=e&&he>=e)return d(h);return T(a,b,c)}if(lg!==g)return 2===(e>>>6|0)?d(h):T(a,b,c);if(E<=e&&159>=e)return d(h);return T(a,b,c);default:var +j=P(a,b),f=P(a,b+1|0),o=P(a,b+2|0),p=P(a,b+3|0),k=(j&7)<<18|(f&63)<<12|(o&63)<<6|p&63;if(2===(p>>>6|0)&&2===(o>>>6|0)){if(fl===j){if(144<=f&&he>=f)return d(k);return T(a,b,c)}if(244!==j)return 2===(f>>>6|0)?d(k):T(a,b,c);if(E<=f&&143>=f)return d(k);return T(a,b,c)}return T(a,b,c)}}function +dm(a,b,c){var +e=P(a,b),d=e<<8|P(a,c);if(hk<=d&&dT>=d)return hD=e)return[0,R,aS(((a&dN)<<10|e&dN)+cE|0)];return eE(c=(c+d|0)){if(0===d)return j0(a);a[5]=b;a[6]=c;a[7]=(c+d|0)-1|0;return}return xl(c,d)}function +cv(a,b){var +c=b[1];if(typeof +c==="number"){b[18]=a;return e_}if(k0<=c[1]){var +d=pv(c[2],b[5],0,ao(b[5]));xG(b,b[5],0,d);return g(a,b)}j0(b);return g(a,b)}function +cw(a,b){a[9]=0;a[10]=b;return}function +a3(c,b){function +d(a,b){xo(a[5],a[6],a[8],a[9],b);a[6]=a[6]+b|0;a[9]=a[9]+b|0;return}var +a=bF(b);if(0>a)return g(c,b);var +e=b[10]-b[9]|0;return a=b)return 0<=b?cv(gK,a):bd;var +c=a[6];a[6]=a[6]+1|0;return y(gK,xr(a[5],c),1,a)}function +gL(a){var +b=bF(a);if(0>=b)return 0<=b?cv(gL,a):bd;var +c=a[6];a[6]=a[6]+1|0;return y(gL,xs(a[5],c),1,a)}function +eG(a){if(a[9]=c)return 0<=c?cv(aq,a):bd;var +b=xp(dl,P(a[5],a[6]));if(c=a[10])return j3(dm(a[8],0,1),a);var +b=a[9];return y(a4,T(a[8],0,a[9]),b,a)}function +j3(a,b){if(dM<=a[1])return y(a4,a,2,b);var +c=a[2];if(2<=bF(b)){var +d=b[6];b[6]=b[6]+2|0;return y(a4,eF(c,b[5],d,d+1|0),4,b)}cw(b,2);return a3(function(a){return j1(c,a)},b)}function +a4(a){var +b=bF(a);if(0>=b)return 0<=b?cv(a4,a):bd;if(2<=b){var +c=a[6];a[6]=a[6]+2|0;return j3(dm(a[5],c,c+1|0),a)}cw(a,2);return a3(j2,a)}function +j4(a,b){var +c=b[9]+2|0;return b[9]=a[10])return j6(dm(a[8],1,0),a);var +b=a[9];return y(bb,T(a[8],0,a[9]),b,a)}function +j6(a,b){if(dM<=a[1])return y(bb,a,2,b);var +c=a[2];if(2<=bF(b)){var +d=b[6];b[6]=b[6]+2|0;return y(bb,eF(c,b[5],d+1|0,d),4,b)}cw(b,2);return a3(function(a){return j4(c,a)},b)}function +bb(a){var +b=bF(a);if(0>=b)return 0<=b?cv(bb,a):bd;if(2<=b){var +c=a[6];a[6]=a[6]+2|0;return j6(dm(a[5],c+1|0,c),a)}cw(a,2);return a3(j5,a)}function +xH(a){function +d(a){var +b=P(a[8],2),c=k(dl,b)[1+b];return 0===c?y(aq,T(a[8],2,1),1,a):(a[10]=c,a[9]=1,cu(a[8],0,b),a3(eG,a))}var +b=P(a[8],0);function +f(a){var +b=P(a[8],1),e=2>>0)throw i([0,q,xI],1);switch(e){case +0:return y(c,T(a[8],0,1),1,a);case +1:return y(c,b4(a[8],0,1),1,a);case +2:return 2<=a[9]?3<=a[9]?y(d,b4(a[8],0,2),2,a):y(aq,b4(a[8],0,2),2,a):y(aq,T(a[8],0,1),1,a);case +3:if(3<=a[9])return y(aq,b4(a[8],0,3),3,a);var +g=a[9];return y(aq,T(a[8],0,a[9]),g,a);default:if(3<=a[9]){a[10]=4;return a3(eG,a)}var +h=a[9];return y(aq,T(a[8],0,a[9]),h,a)}}function +j7(a,b,c){if(b)var +j=1,i=0,h=j1,d=j2,f=a4;else +var +j=0,i=1,h=j4,d=j5,f=bb;function +e(a,b){if(3>b[9])return f(b);b[10]=2;b[9]=1;var +c=P(b[8],2);cu(b[8],0,c);return a3(a,b)}if(typeof +c!=="number")return y(function(a){return e(d,a)},[0,R,aS(c[2])],2,a);if(d0>c)return y(function(a){return e(d,a)},[0,R,jZ],2,a);var +g=dm(a[8],i,j);if(dM<=g[1])return y(function(a){return e(d,a)},g,2,a);var +k=g[2];if(3<=a[9]){var +l=function(a){return h(k,a)};return function(a){return e(l,a)}(a)}var +m=a[9];return y(f,eE(b,k,fZ,0,0),m,a)}function +xJ(a){cw(a,3);return a3(function(a){var +b=xv(a[8],0,a[9]),c=b[1];if(cS===c){var +e=b[2];a[2]=cS;a[18]=bb;return j7(a,0,e)}if(bQ<=c){var +d=b[2];a[2]=bQ;a[18]=aq;return bd===d?bd:d0<=d?xH(a):y(aq,[0,R,jZ],3,a)}var +f=b[2];a[2]=dR;a[18]=a4;return j7(a,1,f)},a)}function +aK(a){a[14]=0;a[13]=a[13]+1|0;return}function +bG(a){a[14]=a[14]+1|0;return}function +U(a){a[16]=a[16]+1|0;return}function +V(a,b){a[12]=b;return}function +xK(a,b,c,d){if(R>d[1]){c[11]=0;c[17]=b;return m(c[17],c,d)}var +e=a1(d[2]);if(lb===e){if(a){c[2]=dR;c[18]=a4}c[11]=1;c[17]=b;return g(c[18],c)}if(65534===e&&a){c[2]=cS;c[18]=bb;c[11]=1;c[17]=b;return g(c[18],c)}c[11]=0;c[17]=b;return m(c[17],c,d)}function +xL(a,b){if(R>b[1]){V(a,0);U(a);bG(a);return b}var +c=a1(b[2])+hH|0;a:{if(hn>>0){var +d=c+cJ|0;if(3>>0)break a;switch(d){case +0:var +e=a[12];V(a,0);U(a);return e?b:(aK(a),b);case +1:break a;case +2:break;default:V(a,1);U(a);aK(a);return b}}else if(hJ>=c-1>>>0)break a;V(a,0);U(a);aK(a);return b}V(a,0);U(a);bG(a);return b}function +xM(a,b){if(R>b[1]){V(a,0);U(a);bG(a);return b}var +c=a1(b[2])+hH|0;a:{if(hn>>0){var +d=c+cJ|0;if(3>>0)break a;switch(d){case +0:var +e=a[12];V(a,0);return e?g(a[18],a):(U(a),aK(a),[0,R,a[4]]);case +1:break a;case +2:break;default:V(a,1);U(a);aK(a);return[0,R,a[4]]}}else if(hJ>=c-1>>>0)break a;V(a,0);U(a);aK(a);return[0,R,a[4]]}V(a,0);U(a);bG(a);return b}function +xN(a,b){if(R>b[1]){V(a,0);U(a);bG(a);return b}var +c=a1(b[2]);a:{if(14<=c){if(8232<=c){if(8234>c)break a}else if(mX===c){V(a,0);U(a);aK(a);return[0,R,a[4]]}}else if(10<=c)switch(c+lO|0){case +0:var +d=a[12];V(a,0);return d?g(a[18],a):(U(a),aK(a),[0,R,a[4]]);case +1:break;case +2:break a;default:V(a,1);U(a);aK(a);return[0,R,a[4]]}V(a,0);U(a);bG(a);return b}V(a,0);U(a);aK(a);return b}function +xO(a,b){if(R>b[1]){V(a,0);U(a);bG(a);return b}var +c=a1(b[2])+hH|0;a:{if(hn>>0){var +d=c+cJ|0;if(3>>0)break a;switch(d){case +0:var +e=a[12];V(a,0);return e?g(a[18],a):(U(a),aK(a),[0,R,a[4]]);case +1:break a;case +2:break;default:V(a,1);U(a);aK(a);return[0,R,a[4]]}}else if(hJ>=c-1>>>0)break a;V(a,0);U(a);aK(a);return b}V(a,0);U(a);bG(a);return b}function +xP(a){return mx<=a?423112016<=a?bQ<=a?aq:gK:338302576<=a?gL:a4:cS<=a?bb:a4}function +gM(a){return a[13]}function +gN(a){return a[14]}function +gO(d,b){var +a=a1(b);function +c(a){return l(d,xn(a))}return cI>>18|0),c(E|(a>>>12|0)&63),c(E|(a>>>6|0)&63),c(E|a&63)):(c(hU|a>>>12|0),c(E|(a>>>6|0)&63),c(E|a&63)):(c(oj|a>>>6|0),c(E|a&63)):c(a)}function +xQ(a,b,c){if(a){var +d=a[1],k=d[1];if(3895880===k)var +f=d[2],e=xN;else if(fd<=k)var +f=d[2],e=xO;else +var +f=d[2],e=xM}else +var +f=aS(10),e=xL;if(b)var +l=b[1],m=xP(l),g=l;else +var +m=xJ,g=bQ;if(typeof +c==="number")var +j=0,i=1,h=fZ;else if(k0<=c[1])var +j=0,i=1,h=K(cE);else +var +o=c[2],j=n(o)-1|0,i=0,h=c5(o);var +p=mx===g?1:0;return[0,c,g,a,f,h,i,j,K(4),0,0,0,0,1,0,0,0,function(a,b){return xK(p,e,a,b)},m]}function +xR(a){return g(a[18],a)}function +xS(a){return a[11]}var +j8=44,eH=a1(xq),xU=10,xV=34,xW=93,xX=cO,xY=47,xZ=92,x0=42;function +x1(a){var +b=a<=31?1:0;if(b)var +c=b;else +var +d=34===a?1:0,c=d||(92===a?1:0);return c}function +x2(a){var +b=48<=a?1:0,c=b?a<=57?1:0:b;return c}function +x3(a){var +c=48<=a?1:0,d=c?a<=57?1:0:c;if(d)var +b=d;else{var +e=65<=a?1:0,f=e?a<=70?1:0:e;if(f)var +b=f;else +var +g=97<=a?1:0,b=g?a<=fc?1:0:g}return b}function +eI(a){a:{if(11<=a){if(32===a)break a}else if(9<=a)break a;return 0}return 1}function +j9(a){a:{if(44<=a){var +b=a-45|0;if(79>>0){if(81<=b)break a}else if(48!==b)break a}else +if(11<=a){if(32!==a)break a}else if(9>a)break a;return 1}return 0}function +x5(a){return[0,G,[0,cF,[0,-542918501,fY(a)]]]}function +x6(a){return[0,G,[0,cF,[0,lS,fY(a)]]]}function +x7(a){return[0,G,[0,cF,[0,lH,a]]]}function +x8(a){return[0,G,[0,cF,[0,l1,a]]]}function +j_(a){return[0,G,[0,cF,[0,l5,a]]]}function +x9(a){return[0,G,[0,-635137946,fY(a)]]}function +x_(a){return[0,G,[0,nJ,a]]}function +yd(a){return[0,G,[0,mw,a]]}function +ye(a){return[0,G,[0,ld,a]]}function +dn(a,b){return g(d(a)(yn),b)}function +gP(a,b){if(31>=a1(b))return dn(a,a1(b));var +c=a$(4);gO(c,b);var +e=a1(b),f=ba(c);return br(d(a)(yo),f,dn,e)}function +aE(a,b){var +c=aS(b);return gO(a[2],c)}function +bH(a){var +b=aS(a[8]);return gO(a[2],b)}function +b5(a){var +b=ba(a[2]);c9(a[2]);return b}function +kb(a){var +b=gN(a[1]);return[0,gM(a[1]),b]}function +aL(a){a[4]=gM(a[1]);a[5]=gN(a[1]);return}function +Y(a){a[6]=gM(a[1]);a[7]=gN(a[1]);return}function +kc(a){var +b=a[9];if(!b)throw i([0,q,yU],1);var +c=b[1][2],d=c[2];a[4]=c[1];a[5]=d;return Y(a)}function +kd(a){aL(a);Y(a);var +c=a[9];if(!c)throw i([0,q,yV],1);var +b=c[2];if(!b){a[10]=0;a[9]=0;return}if(cb<=b[1][1]){a[10]=1;a[9]=b;return}a[10]=0;a[9]=b;return}function +cx(a){return bd}function +A(a,b,c){c[12]=b;return a}function +r(c,b){var +a=xR(b[1]);if(typeof +a==="number")return e_<=a?A(e_,function(a){return r(c,a)},b):(b[8]=ee,g(c,b));if(R<=a[1]){b[8]=a1(a[2]);return g(c,b)}var +d=a[2];b[8]=eH;Y(b);return A(x_(d),c,b)}function +ke(c,b){if(b[8]!==10&&b[8]!==aV){bH(b);return r(function(a){return ke(c,a)},b)}Y(b);return A([0,cQ,[0,83,b5(b)]],function(a){return r(c,a)},b)}function +dp(a,b,c){if(c[8]===aV){Y(c);return A(x$,cx,c)}if(a){if(c[8]===47){Y(c);return A([0,cQ,[0,77,b5(c)]],function(a){return r(b,a)},c)}if(c[8]===42){bH(c);var +d=1;return r(function(a){return dp(d,b,a)},c)}aE(c,x0);bH(c);var +e=0;return r(function(a){return dp(e,b,a)},c)}if(c[8]===42){var +f=1;return r(function(a){return dp(f,b,a)},c)}bH(c);var +g=0;return r(function(a){return dp(g,b,a)},c)}function +yW(c,b){if(b[8]===47)return r(function(a){return ke(c,a)},b);if(b[8]===42){var +d=0;return r(function(a){return dp(d,c,a)},b)}Y(b);return A(yf,c,b)}function +kf(c,b){return eI(b[8])?(Y(b),bH(b),r(function(a){return kf(c,a)},b)):A([0,lt,b5(b)],c,b)}function +gQ(c,b){if(eI(b[8])){aL(b);return kf(function(a){return gQ(c,a)},b)}if(b[8]!==47)return g(c,b);aL(b);function +d(a){return gQ(c,a)}return r(function(a){return yW(d,a)},b)}function +kg(c,b){return eI(b[8])?r(function(a){return kg(c,a)},b):g(c,b)}function +bl(a,b){return b[3]?gQ(a,b):kg(a,b)}function +gR(h,b,c,d,e){function +f(a,b,c){aE(c,eH);return A(a,b,c)}if(0=b)return hD=b){aE(e,((k&dN)<<10|b&dN)+cE|0);return g(d,e)}return f(x7(b),d,e)}function +kh(c,b){var +a=b[8];if(34===a){aE(b,xV);return r(c,b)}if(92<=a){if(118>a)switch(a-92|0){case +0:aE(b,xZ);return r(c,b);case +6:aE(b,8);return r(c,b);case +10:aE(b,12);return r(c,b);case +18:aE(b,xU);return r(c,b);case +22:aE(b,13);return r(c,b);case +24:aE(b,9);return r(c,b);case +25:var +d=4,e=0,f=0;return r(function(a){return gR(f,e,d,c,a)},b)}}else if(47===a){aE(b,xY);return r(c,b)}Y(b);aE(b,eH);return A(x6(a),function(a){return r(c,a)},b)}function +dq(c,b){if(b[8]===aV){Y(b);return A(ya,cx,b)}if(!x1(b[8])){bH(b);return r(function(a){return dq(c,a)},b)}if(b[8]===34){Y(b);return r(c,b)}if(b[8]===92){var +d=function(a){return dq(c,a)};return r(function(a){return kh(d,a)},b)}Y(b);aE(b,eH);function +e(a){return dq(c,a)}return A(x9(b[8]),function(a){return r(e,a)},b)}function +ki(c,b){if(!j9(b[8])&&b[8]!==aV){Y(b);bH(b);return r(function(a){return ki(c,a)},b)}var +a=b5(b);try{var +e=A([0,aN,[0,al,fG(a)]],c,b);return e}catch(f){var +d=J(f);if(d[1]===c1)return A(yd(a),c,b);throw i(d,0)}}function +kj(c,b){if(!j9(b[8])&&b[8]!==aV){Y(b);bH(b);return r(function(a){return kj(c,a)},b)}var +a=b5(b);return a!==dZ?a!==dP?a!==dL?A(ye(a),c,b):A(yX,c,b):A(yY,c,b):A(yZ,c,b)}function +eJ(a,b,c){var +d=c[8];a:{if(e8<=d){var +f=d-110|0;if(6>>0){if(13!==f)break a;aL(c);Y(c);c[11]=1;c[10]=1;var +g=c[9];c[9]=[0,[0,cb,kb(c)],g];return A(y0,function(a){return r(b,a)},c)}if(4>=f-1>>>0)break a}else{if(34===d){aL(c);var +h=function(a,b){return A([0,aN,[0,e,b5(b)]],a,b)},i=function(a){return h(b,a)};return r(function(a){return dq(i,a)},c)}if(91===d){aL(c);Y(c);c[11]=1;var +j=c[9];c[9]=[0,[0,dJ,kb(c)],j];return A(y1,function(a){return r(b,a)},c)}if(fc>d)break a}aL(c);return kj(b,c)}if(!x2(d)&&d!==45)return m(a,b,c);aL(c);return ki(b,c)}function +eK(f,b,c,d,e){if(e[8]!==f&&e[8]!==b&&e[8]!==aV){Y(e);return r(function(a){return eK(f,b,c,d,a)},e)}return A(c,d,e)}function +y2(c,b){function +d(a,b,c){aL(c);return eK(j8,xW,a,b,c)}var +a=b[11];b[11]=0;if(b[8]===aV){kc(b);return A(yb,cx,b)}if(b[8]===93){kd(b);return A(y3,function(a){return r(c,a)},b)}if(a)return eJ(function(a,b){return d(yi,a,b)},c,b);if(b[8]!==44)return d(yj,c,b);function +e(a,b){return d(j$,a,b)}function +f(a){return eJ(e,c,a)}return r(function(a){return bl(f,a)},b)}function +eL(a,b,c){aL(c);c[10]=1;return eK(j8,xX,a,b,c)}function +y4(c,b){b[10]=1;if(b[8]!==58)return eL(yh,c,b);function +d(a,b){return eL(j$,a,b)}function +e(a){return eJ(d,c,a)}return r(function(a){return bl(e,a)},b)}function +y5(c,b){function +d(a,b,c){function +d(a,b){return A([0,aN,[0,fx,b5(b)]],a,b)}if(c[8]!==34)return eL(a,b,c);aL(c);function +e(a){return d(b,a)}return r(function(a){return dq(e,a)},c)}var +a=b[11];b[11]=0;b[10]=0;if(b[8]===aV){kc(b);return A(yc,cx,b)}if(b[8]===cO){kd(b);return A(y6,function(a){return r(c,a)},b)}if(a)return d(yk,c,b);if(b[8]!==44)return eL(yl,c,b);function +e(a){return d(yg,c,a)}return r(function(a){return bl(e,a)},b)}function +y7(a,b){return b[8]===aV?A(bd,cx,b):function(a,b){aL(b);return eK(ee,ee,ym,a,b)}(cx,b)}function +dr(a){var +b=a[9];return b?cb<=b[1][1]?a[10]?bl(function(a){return y5(dr,a)},a):bl(function(a){return y4(dr,a)},a):bl(function(a){return y2(dr,a)},a):bl(function(a){return y7(dr,a)},a)}function +kk(d,b,c){if(!eI(c[8])&&c[8]!==aV){Y(c);return r(function(a){return kk(d,b,a)},c)}return A(d,b,c)}function +kl(a,b){function +c(c,b){aL(b);function +d(a){return kl(c,a)}return kk(ka,function(a){return bl(d,a)},b)}return b[8]!==aV?eJ(c,a,b):A(ka,a,b)}var +xT=2147483646;function +y8(a){function +b(a,b){return xS(b[1])?A(x4,a,b):g(a,b)}function +c(a){return kl(dr,a)}function +d(a){return bl(c,a)}return r(function(a){return b(d,a)},a)}var +y9=[0,fd,aS(10)];function +yp(a,b){if(typeof +b==="number")return d(a)(yq);var +e=b[1];if(mw>e){if(dI===e){var +k=b[2];d(a)(yN);return dJ<=k?cb<=k?d(a)(yO):d(a)(yP):cQ<=k?d(a)(yQ):d(a)(yR)}if(ld<=e){var +A=b[2];return g(d(a)(yS),A)}var +B=b[2];return m(d(a)(yT),gP,B)}if(nJ>e){if(a6<=e){var +c=b[2];d(a)(yB);return typeof +c==="number"?ma<=c?oq<=c?fx<=c?d(a)(yC):d(a)(yD):nP<=c?d(a)(yE):d(a)(yF):cQ<=c?d(a)(yG):d(a)(yH):ho<=c[1]?c[2]?d(a)(yI):d(a)(yJ):c[2]?d(a)(yK):d(a)(yL)}var +y=b[2];return g(d(a)(yM),y)}if(cF<=e){var +f=b[2];d(a)(yr);var +h=f[1];if(lH===h){var +p=f[2];return m(d(a)(ys),dn,p)}if(l1<=h){if(lS<=h){var +q=f[2];return m(d(a)(yt),gP,q)}var +r=f[2];return m(d(a)(yu),dn,r)}if(l5<=h){var +s=f[2];return m(d(a)(yv),dn,s)}var +t=f[2];return m(d(a)(yw),gP,t)}var +j=b[2],l=n(j);d(a)(yx);if(0=1){var +i=v;for(;;){var +w=z(j,i);g(d(a)(yA),w);var +x=i+1|0;if(o===i)break;i=x}}return d(a)(yz)}function +y_(a,b){var +c=xQ([0,y9],a,b);return[0,c,a$(cH),0,1,0,1,0,xT,0,0,0,y8]}function +y$(a){a[3]=0;var +b=g(a[12],a);if(typeof +b!=="number"){var +c=b[1];if(aN!==c&&G>c)throw i([0,q,za],1)}return b}function +zb(a){return[0,[0,a[4],a[5]],[0,a[6],a[7]]]}var +km=[w,zi,aa(0)];function +zc(a){var +c=y_(0,a),g=[w,zd,aa(0)];function +l(a){return zb(c)}function +h(a){var +b=y$(c);if(typeof +b==="number"){if(e_<=b)throw i([0,q,ze],1);throw i([0,g,zf],1)}if(G>b[1])return b[2];var +d=b[2];throw i([0,g,[0,G,[0,l(0),d]]],1)}function +f(a,b,c){a:{if(typeof +b==="number"){if(dJ===b){var +h=0;return a<50?k(a+1|0,h,c):p(k,[0,h,c])}if(cb===b){var +m=0;return a<50?j(a+1|0,m,c):p(j,[0,m,c])}if(bu===b)break a}else{var +f=b[1];if(e===f||al===f||ak===f)break a}throw i([0,g,[0,ft,[0,aN,[0,l(0),b,zg]]]],1)}return a<50?d(a+1|0,b,c):p(d,[0,b,c])}function +k(a,b,c){var +e=h(0);if(n4===e){var +g=[0,65,ay(b)];return a<50?d(a+1|0,g,c):p(d,[0,g,c])}var +i=[0,b,c];return a<50?f(a+1|0,e,i):p(f,[0,e,i])}function +j(a,b,c){var +e=h(0);if(typeof +e==="number"){if(m5===e){var +j=[0,79,ay(b)];return a<50?d(a+1|0,j,c):p(d,[0,j,c])}}else if(fx===e[1]){var +k=[1,e[2],b,c],m=h(0);return a<50?f(a+1|0,m,k):p(f,[0,m,k])}throw i([0,g,[0,ft,[0,aN,[0,l(0),e,zh]]]],1)}function +d(a,b,c){if(typeof +c==="number")return b;if(0===c[0]){var +d=c[2],e=[0,b,c[1]];return a<50?k(a+1|0,e,d):p(k,[0,e,d])}var +f=c[3],g=[0,[0,c[1],b],c[2]];return a<50?j(a+1|0,g,f):p(j,[0,g,f])}function +m(a,b){return bA(f(0,a,b))}try{var +n=[0,m(h(0),0)];return n}catch(f){var +b=J(f);if(b[1]===g)return[1,b[2]];throw i(b,0)}}function +zj(c,b){return iW(function(a){throw i([0,km,c,a],1)},b)}function +zk(a){var +b=a[1];if(381139274===b)return zl;if(ft>b){var +e=a[2][2];return m(uI(zo),yp,e)}var +c=a[2];if(typeof +c==="number")return jr(zm);var +d=c[2][3];return g(jr(zn),d)}function +zp(a){return zc(a)}function +zq(a){var +b=zp(a);if(0===b[0])return b[1];var +c=zk(b[1]);return g(zj(bu,zr),c)}function +zs(a){return zq([0,e,a])}function +zt(a){a:if(typeof +a!=="number"){var +b=a[1];if(65!==b&&79!==b)break a;return a}throw i([0,km,a,zu],1)}function +zv(a){return zt(zs(a))}var +gS=wm([0,iJ]);function +kn(a){w3(zw,0,wR)(jo,a);return uE(0)}function +gT(a){return jC(a)}function +ko(a){var +b=gv(a);return 0===b[0]?[0,b[1]]:(jG([0,b[1],0]),zy)}tJ(0);function +zx(a){return xj(zv(a))}function +kp(a,b){function +c(a,b){return 0===(b>>>a|0)?1:0}if(c(7,b))return l(a,N(b));if(c(11,b)){l(a,N(oj|(b>>>6|0)&31));return l(a,N(E|b&63))}if(c(16,b)){l(a,N(hU|(b>>>12|0)&15));l(a,N(E|(b>>>6|0)&63));return l(a,N(E|b&63))}if(c(21,b)){l(a,N(fl|(b>>>18|0)&7));l(a,N(E|(b>>>12|0)&63));l(a,N(E|(b>>>6|0)&63));return l(a,N(E|b&63))}if(c(26,b)){l(a,N(w|(b>>>24|0)&3));l(a,N(E|(b>>>18|0)&63));l(a,N(E|(b>>>12|0)&63));l(a,N(E|(b>>>6|0)&63));return l(a,N(E|b&63))}if(!c(31,b))throw i([0,q,zz],1);l(a,N(dS|(b>>>30|0)&1));l(a,N(E|(b>>>24|0)&63));l(a,N(E|(b>>>18|0)&63));l(a,N(E|(b>>>12|0)&63));l(a,N(E|(b>>>6|0)&63));return l(a,N(E|b&63))}function +zA(a,b){return cE+((a-55296|0)<<10|b-56320|0)|0}function +zB(a,b,c){return kp(a,zA(b,c))}var +zD=[w,zC,aa(0)];function +eM(a){throw i([0,zD,a],1)}var +gU=[w,zE,aa(0)],gV=[w,zF,aa(0)],gW=[w,zG,aa(0)],kq=[w,zH,aa(0)];function +zI(a,b,c,d){var +e=c?c[1]:1,f=a?a[1]:a$(bt);return[0,f,e,0,b]}function +g6(a,b,c,d){var +e=0;return a<50?kQ(a+1|0,b,c,d,e):p(kQ,[0,b,c,d,e])}function +zK(a,b,c){return bA(g6(0,a,b,c))}function +kQ(a,b,c,d,e){var +h=e;for(;;){var +f=qt(zJ,h,d);if(0===f)return;if(1===f){if(0>=c)return;l(b,qw(d,0));var +i=c-1|0;return a<50?g6(a+1|0,b,i,d):p(g6,[0,b,i,d])}g(d[1],d);h=f}}function +zL(a,b,c){var +d=c[4],e=c[5];zK(a,b,c);c[5]=e+1|0;c[4]=d;return}function +kr(a){var +b=10<=a?a+87|0:a+48|0;return N(b)}function +b6(a,b,c,d,e){c_(d,a,b[1],c-b[1]|0);ab(d,e);b[1]=c+1|0;return}function +zM(a,b,c,d,e){c_(d,a,b[1],c-b[1]|0);ab(d,zN);l(d,kr(e>>>4|0));l(d,kr(e&15));b[1]=c+1|0;return}function +zO(a,b,c){try{c_(c,a,b[1],n(a)-b[1]|0);return}catch(f){var +d=J(f),e=n(a)-b[1]|0,g=b[1];br(em(zP),a,g,e);throw i(d,0)}}function +zQ(a,b){var +d=[0,0],f=n(b)-1|0,g=0;if(f>=0){var +c=g;for(;;){var +e=z(b,c);a:if(92===e)b6(b,d,c,a,zR);else{b:{c:{if(35>e){if(8>e)break b;switch(e-8|0){case +0:b6(b,d,c,a,zS);break;case +1:b6(b,d,c,a,zT);break;case +2:b6(b,d,c,a,zU);break;case +4:b6(b,d,c,a,zV);break;case +5:b6(b,d,c,a,zW);break;case +26:b6(b,d,c,a,zX);break;case +24:case +25:break c;default:break b}break a}if(cI===e)break b}break a}zM(b,d,c,a,e)}var +h=c+1|0;if(f===c)break;c=h}}return zO(b,d,a)}function +b7(a,b){l(a,34);zQ(a,b);return l(a,34)}function +ks(a,b){return ab(a,zY)}function +kt(a,b){var +c=b?zZ:z0;return ab(a,c)}function +z1(a){return N(a+48|0)}function +gX(a,b){return 0===b?0:(gX(a,b/10|0),l(a,z1(c2(b%10|0))))}function +ku(a,b){return 0=0){var +b=f;for(;;){var +c=z(a,b);a:{if(48<=c){if(58>c)break a}else if(45===c)break a;throw i(ij,1)}var +h=b+1|0;if(e===b)break;b=h}}var +g=1;return g}catch(f){var +d=J(f);if(d===ij)return 0;throw i(d,0)}}function +z2(a,b){var +c=h0(b);if(3===c){var +h=0.c)return bv<=c?al<=c?z2(a,b[2]):ku(a,b[2]):b_<=c?ab(a,b[2]):b7(a,b[2]);if(dO===c)return Ah(a,b[2]);if(h<=c)return H<=c?Af(a,b[2]):Ag(a,b[2]);if(ak<=c)return kt(a,b[2]);var +d=b[2];return Ai(a,d[1],d[2])}function +Af(a,b){l(a,cJ);cy(function(a,b){var +c=b[2];b7(a,b[1]);l(a,58);return ds(a,c)},cz,a,b);return l(a,cO)}function +Ag(a,b){l(a,91);cy(ds,cz,a,b);return l(a,93)}function +Ah(a,b){l(a,40);cy(ds,cz,a,b);return l(a,41)}function +Ai(a,b,c){l(a,60);b7(a,b);if(c){var +d=c[1];l(a,58);ds(a,d)}return l(a,62)}function +dt(a,b){if(typeof +b==="number")return ks(a,0);var +c=b[1];if(dV>c)return bv<=c?al<=c?z9(a,b[2]):ku(a,b[2]):b_<=c?ab(a,b[2]):b7(a,b[2]);if(dO===c)return Al(a,b[2]);if(h<=c)return H<=c?Aj(a,b[2]):Ak(a,b[2]);if(ak<=c)return kt(a,b[2]);var +d=b[2];return Am(a,d[1],d[2])}function +Aj(a,b){l(a,cJ);cy(function(a,b){var +c=b[2];b7(a,b[1]);l(a,58);return dt(a,c)},cz,a,b);return l(a,cO)}function +Ak(a,b){l(a,91);cy(dt,cz,a,b);return l(a,93)}function +Al(a,b){l(a,91);cy(dt,cz,a,b);return l(a,93)}function +Am(a,b,c){if(!c)return b7(a,b);var +d=c[1];l(a,91);b7(a,b);l(a,44);dt(a,d);return l(a,93)}function +An(a,b,c,d){var +e=a?a[1]:Ao,f=b?b[1]:0;if(f)dt(c,d);else +ds(c,d);return ab(c,e)}function +ai(a,b,c){return oY(a,b,c)}function +kw(a){return a+dU|0}function +bI(a){if(65<=a){if(97<=a){if(e8>a)return(a-97|0)+10|0}else if(71>a)return(a-65|0)+10|0}else if(9>=a+dU>>>0)return a-48|0;throw i([0,q,Ar],1)}function +aT(a,b,c){var +e=c[4]-1|0,f=b[3],d=((e+c[5]|0)-f|0)-1|0,h=pd(d,(e+c[6]|0)-f|0),i=b[4];if(i)var +k=i[1],j=g(F(As),k);else +var +j=Aw;var +l=d===h?g(F(At),d+1|0):m(F(Av),d+1|0,h+1|0),n=b[2];return eM(dH(F(Au),j,n,l,a))}function +aM(a,b,c){var +d=32,f=ei(c),e=a$(d);zL(e,d,c);var +g=ba(e);return aT(br(F(Ax),a,f,g),b,c)}function +Ap(a,b,c,d,e){var +h=b?b[1]:bt,i=c?c[1]:Aq;if(a){var +g=a[1];c9(g);var +f=g}else +var +f=a$(h);An([0,i],d,f,e);var +j=ba(f);c9(f);return j}var +cA=[w,Ay,aa(0)];function +Az(a){var +d=a[5],b=[0,0],e=a[6]-1|0,f=a[2];if(e>=d){var +c=d;for(;;){if(214748365<=b[1])throw i(cA,1);var +g=kw(fD(f,c));b[1]=(10*b[1]|0)+g|0;var +h=c+1|0;if(e===c)break;c=h}}if(0<=b[1])return b[1];throw i(cA,1)}function +AA(a,b){try{var +d=[0,bv,Az(b)];return d}catch(f){var +c=J(f);if(c===cA)return[0,b_,ei(b)];throw i(c,0)}}function +AB(a){var +d=a[5]+1|0,b=[0,0],e=a[6]-1|0,f=a[2];if(e>=d){var +c=d;for(;;){if(b[1]<=-214748365)throw i(cA,1);var +g=kw(fD(f,c));b[1]=(10*b[1]|0)-g|0;var +h=c+1|0;if(e===c)break;c=h}}if(0>>0){g(c[1],c);m=f}else +switch(f){case +0:return A1;case +1:return A2;case +2:return bu;case +3:return[0,al,pk];case +4:return[0,al,pg];case +5:return[0,al,pi];case +6:c9(b[1]);return[0,e,kx(b,c)];case +7:return AA(b,c);case +8:return AC(b,c);case +9:return[0,al,fG(ei(c))];case +10:var +j=[0,0];try{ae(b,c);AW(c);var +r=gY(b,c);ae(b,c);kA(b,c);ae(b,c);var +s=j[1];j[1]=[0,[0,r,bJ(b,c)],s];for(;;){ae(b,c);AY(b,c);ae(b,c);var +t=gY(b,c);ae(b,c);kA(b,c);ae(b,c);var +u=j[1];j[1]=[0,[0,t,bJ(b,c)],u]}}catch(f){var +n=J(f);if(n===gV)return[0,H,ay(j[1])];throw i(n,0)}break;case +11:var +k=[0,0];try{ae(b,c);AO(c);var +v=k[1];k[1]=[0,bJ(b,c),v];for(;;){ae(b,c);AQ(b,c);ae(b,c);var +w=k[1];k[1]=[0,bJ(b,c),w]}}catch(f){var +o=J(f);if(o===gU)return[0,h,ay(k[1])];throw i(o,0)}break;case +12:var +l=[0,0];try{ae(b,c);AS(c);var +x=l[1];l[1]=[0,bJ(b,c),x];for(;;){ae(b,c);AU(b,c);ae(b,c);var +y=l[1];l[1]=[0,bJ(b,c),y]}}catch(f){var +q=J(f);if(q===gW)return[0,dO,ay(l[1])];throw i(q,0)}break;case +13:ae(b,c);var +z=gY(b,c);ae(b,c);return[0,dV,[0,z,AI(b,c)]];case +14:return a<50?bq(a+1|0,b,c):p(bq,[0,b,c]);case +15:ky(b,c);return a<50?bq(a+1|0,b,c):p(bq,[0,b,c]);case +16:eN(b,c);return a<50?bq(a+1|0,b,c):p(bq,[0,b,c]);case +17:return a<50?bq(a+1|0,b,c):p(bq,[0,b,c]);case +18:return aT(A3,b,c);default:return aM(A4,b,c)}}}function +dG(a,b,c){var +d=58;return a<50?kT(a+1|0,b,c,d):p(kT,[0,b,c,d])}function +kx(a,b){return bA(dG(0,a,b))}function +kT(a,b,c,d){var +f=d;for(;;){var +e=ai(aj,f,c);if(3>=e>>>0)switch(e){case +0:return ba(b[1]);case +1:AE(b,c);return a<50?dG(a+1|0,b,c):p(dG,[0,b,c]);case +2:AD(b[1],c);return a<50?dG(a+1|0,b,c):p(dG,[0,b,c]);default:return aT(A5,b,c)}g(c[1],c);f=e}}function +AE(a,b){return AF(a,b,68)}function +AF(a,b,c){var +f=c;for(;;){var +e=ai(aj,f,b);if(8>=e>>>0)switch(e){case +0:var +h=bg(b,b[5]);return l(a[1],h);case +1:return l(a[1],8);case +2:return l(a[1],12);case +3:return l(a[1],10);case +4:return l(a[1],13);case +5:return l(a[1],9);case +6:var +i=bg(b,b[5]+1|0),j=bg(b,b[5]+2|0),k=bg(b,b[5]+3|0),m=bI(bg(b,b[5]+4|0)),n=bI(k)<<4,o=bI(j)<<8,d=bI(i)<<12|o|n|m;if(hk<=d&&hD>=d)return AG(a,d,b);return kp(a[1],d);case +7:return aM(A6,a,b);default:return aT(A7,a,b)}g(b[1],b);f=e}}function +AG(a,b,c){return AH(a,b,c,82)}function +AH(a,b,c,d){var +h=d;for(;;){var +e=ai(aj,h,c);if(2>=e>>>0)switch(e){case +0:var +i=bg(c,c[5]+2|0),j=bg(c,c[5]+3|0),k=bg(c,c[5]+4|0),l=bI(bg(c,c[5]+5|0)),m=bI(k)<<4,n=bI(j)<<8,f=bI(i)<<12|n|m|l;if(hj<=f&&dT>=f)return zB(a[1],b,f);return aM(A8,a,c);case +1:return aM(A9,a,c);default:return aT(A_,a,c)}g(c[1],c);h=e}}function +AI(a,b){return AJ(a,b,fc)}function +AJ(a,b,c){var +e=c;for(;;){var +d=ai(aj,e,b);if(3>=d>>>0)switch(d){case +0:var +f=bJ(a,b);ae(a,b);AK(a,b);return[0,f];case +1:return 0;case +2:return aM(A$,a,b);default:return aT(Ba,a,b)}g(b[1],b);e=d}}function +AK(a,b){return AL(a,b,111)}function +AL(a,b,c){var +e=c;for(;;){var +d=ai(aj,e,b);if(2>=d>>>0)switch(d){case +0:return;case +1:return aM(Bb,a,b);default:return aT(Bc,a,b)}g(b[1],b);e=d}}function +dF(a,b,c){var +d=cO;return a<50?kS(a+1|0,b,c,d):p(kS,[0,b,c,d])}function +ky(a,b){return bA(dF(0,a,b))}function +kS(a,b,c,d){var +f=d;for(;;){var +e=ai(aj,f,c);if(3>=e>>>0)switch(e){case +0:return;case +1:return aM(Bd,b,c);case +2:eN(b,c);return a<50?dF(a+1|0,b,c):p(dF,[0,b,c]);default:return a<50?dF(a+1|0,b,c):p(dF,[0,b,c])}g(c[1],c);f=e}}function +kz(a){return AM(a,l3)}function +AM(a,b){var +d=b;for(;;){var +c=ai(aj,d,a);if(0===c)return 1;if(1===c)return 0;g(a[1],a);d=c}}function +bp(a,b,c){var +d=mX;return a<50?kR(a+1|0,b,c,d):p(kR,[0,b,c,d])}function +ae(a,b){return bA(bp(0,a,b))}function +kR(a,b,c,d){var +f=d;for(;;){var +e=ai(aj,f,c);if(4>=e>>>0)switch(e){case +0:eN(b,c);return a<50?bp(a+1|0,b,c):p(bp,[0,b,c]);case +1:ky(b,c);return a<50?bp(a+1|0,b,c):p(bp,[0,b,c]);case +2:eN(b,c);return a<50?bp(a+1|0,b,c):p(bp,[0,b,c]);case +3:return a<50?bp(a+1|0,b,c):p(bp,[0,b,c]);default:return}g(c[1],c);f=e}}function +gY(a,b){return AN(a,b,lg)}function +AN(a,b,c){var +e=c;for(;;){var +d=ai(aj,e,b);if(3>=d>>>0)switch(d){case +0:c9(a[1]);return kx(a,b);case +1:return qv(b,b[5],b[6]);case +2:return aM(Be,a,b);default:return aT(Bf,a,b)}g(b[1],b);e=d}}function +AO(a){return AP(a,ca)}function +AP(a,b){var +d=b;for(;;){var +c=ai(aj,d,a);if(0===c)throw i(gU,1);if(1===c)return;g(a[1],a);d=c}}function +AQ(a,b){return AR(a,b,257)}function +AR(a,b,c){var +e=c;for(;;){var +d=ai(aj,e,b);if(3>=d>>>0)switch(d){case +0:return;case +1:throw i(gU,1);case +2:return aM(Bg,a,b);default:return aT(Bh,a,b)}g(b[1],b);e=d}}function +AS(a){return AT(a,266)}function +AT(a,b){var +d=b;for(;;){var +c=ai(aj,d,a);if(0===c)throw i(gW,1);if(1===c)return;g(a[1],a);d=c}}function +AU(a,b){return AV(a,b,271)}function +AV(a,b,c){var +e=c;for(;;){var +d=ai(aj,e,b);if(3>=d>>>0)switch(d){case +0:return;case +1:throw i(gW,1);case +2:return aM(Bi,a,b);default:return aT(Bj,a,b)}g(b[1],b);e=d}}function +AW(a){return AX(a,290)}function +AX(a,b){var +d=b;for(;;){var +c=ai(aj,d,a);if(0===c)throw i(gV,1);if(1===c)return;g(a[1],a);d=c}}function +AY(a,b){return AZ(a,b,292)}function +AZ(a,b,c){var +e=c;for(;;){var +d=ai(aj,e,b);if(3>=d>>>0)switch(d){case +0:return;case +1:throw i(gV,1);case +2:return aM(Bk,a,b);default:return aT(Bl,a,b)}g(b[1],b);e=d}}function +kA(a,b){return A0(a,b,297)}function +A0(a,b,c){var +e=c;for(;;){var +d=ai(aj,e,b);if(2>=d>>>0)switch(d){case +0:return;case +1:return aM(Bm,a,b);default:return aT(Bn,a,b)}g(b[1],b);e=d}}function +Bo(a,b){ae(a,b);var +c=1-kz(b);return c?aM(Bp,a,b):c}function +Bq(a,b,c){var +d=b?b[1]:0;ae(a,c);if(kz(c))throw i(kq,1);var +e=bJ(a,c);if(1-d)Bo(a,c);return e}var +Bu=[w,Bt,aa(0)];function +Bv(a){if(typeof +a==="number")return Bw;var +b=a[1];return dO<=b?ak===b?Bx:928231259<=b?H<=b?By:Bz:h<=b?BA:BB:b_===b?BC:al<=b?dV<=b?BD:BE:bv<=b?BF:BG}function +kB(a,b){throw i([0,Bu,ag(a,Bv(b)),b],1)}function +kC(a){if(typeof +a!=="number"&&e===a[1])return a[2];return kB(BJ,a)}function +Br(a,b,c,d){try{var +f=qu(0,d),g=Bq(zI(a,b,c,0),0,f);return g}catch(f){var +e=J(f);if(e===kq)return eM(Bs);throw i(e,0)}}function +BH(a){if(typeof +a!=="number"&&H===a[1])return a[2];return kB(BI,a)}function +eO(a){return[0,ak,a]}function +ar(a){return[0,e,a]}function +b8(a){return[0,bv,a]}function +kD(a,b){return b?g(a,b[1]):bu}function +bK(a,b){return[0,h,ay(ix(a,b))]}var +eP=[0,1],BL=[w,BK,aa(0)];function +a5(a,b){throw i([0,BL,[0,c1,a],b],1)}function +eQ(a){if(typeof +a!=="number"&&ak===a[1])return a[2];return a5(BM,a)}function +as(a){if(typeof +a!=="number"&&e===a[1])return a[2];return a5(BN,a)}function +b9(a){if(typeof +a!=="number"&&bv===a[1])return a[2];return a5(BO,a)}function +kE(a,b){return bu===b?0:[0,g(a,b)]}function +bL(a,b){if(typeof +b!=="number"&&h===b[1])return ay(ix(a,b[2]));return a5(BP,b)}function +c(a,b){return a5(ag(a,BQ),b)}function +eR(a,b){return a5(ag(a,BR),b)}function +eS(a,b){return a5(ag(a,BS),b)}function +eT(a,b){return a5(ag(a,BT),b)}function +kF(a,b,c,d){var +e=iG(BU,ay(c));return a5(br(F(BV),b,a,e),d)}function +bm(a,b,c){return kF(BW,a,b,c)}function +bn(a,b,c){return kF(BX,a,b,c)}function +BY(a,b){var +d=a,c=b;for(;;){if(!c)return iG(BZ,ay(d));var +e=c[1];if(e[1]){d=[0,e[2],d];c=c[2]}else +c=c[2]}}function +bM(a,b,c){var +d=BY(0,c);return a5(m(F(B0),a,d),b)}function +bo(a,b){return a5(ag(a,B1),b)}function +b(a){return a[1]}function +B3(a){if(typeof +a!=="number"&&h===a[1]){var +b=a[2];if(!b)return eS(du,a);var +d=b[1];if(typeof +d!=="number"){var +f=d[1];if(e===f){var +g=d[2];if(g===lR)return b[2]?c(du,a):0;if(g===mY)return b[2]?c(du,a):1}else if(h===f)return eR(du,a)}}return eT(du,a)}function +B4(a){return a?B5:B6}function +B7(a){if(typeof +a!=="number"&&h===a[1]){var +b=a[2];if(!b)return eS(af,a);var +f=b[1];if(typeof +f!=="number"){var +g=f[1];if(e===g){var +d=f[2],i=aI(d,mS);if(0<=i){if(0>=i)return b[2]?c(af,a):7;if(d===m7)return b[2]?c(af,a):8;if(d===nk)return b[2]?c(af,a):9;if(d===mK)return b[2]?c(af,a):10;if(d===nK)return b[2]?c(af,a):12;if(d===li)return b[2]?c(af,a):13;if(d===kY)return b[2]?c(af,a):14;if(d===cK)return b[2]?c(af,a):11}else{if(d===lU)return b[2]?c(af,a):0;if(d===lW)return b[2]?c(af,a):1;if(d===mL)return b[2]?c(af,a):2;if(d===oH)return b[2]?c(af,a):3;if(d===nY)return b[2]?c(af,a):4;if(d===lT)return b[2]?c(af,a):5;if(d===fo)return b[2]?c(af,a):6}}else if(h===g)return eR(af,a)}}return eT(af,a)}function +B8(a){switch(a){case +0:return B9;case +1:return B_;case +2:return B$;case +3:return Ca;case +4:return Cb;case +5:return Cc;case +6:return Cd;case +7:return Ce;case +8:return Cf;case +9:return Cg;case +10:return Ch;case +11:return Ci;case +12:return Cj;case +13:return Ck;default:return Cl}}function +Cm(a){return bE(function(a){var +b=a[1];return[0,b,kC(a[2])]},BH(a))}function +Cn(a){return[0,H,bE(function(a){return[0,a[1],[0,e,a[2]]]},a)]}function +Co(a){if(typeof +a!=="number"&&H===a[1]){var +e=[0,0],c=[0,0],d=[0,0];(function(a){var +d=a;for(;;){if(!d)return;var +f=d[1],g=f[1],h=d[2],i=f[2];if(g===n6)if(b(e))c[1]=[0,g,b(c)];else +e[1]=[0,Cm(i)];d=h}}(a[2]));return b(c)?bm(gZ,b(c),a):b(d)?bn(gZ,b(d),a):[0,b(e)]}return bo(gZ,a)}function +Cp(a){var +b=a[1],c=0,d=b?[0,[0,Cq,Cn(b[1])],c]:c;return[0,H,d]}function +kG(a){if(typeof +a!=="number"&&h===a[1]){var +b=a[2];if(!b)return eS(t,a);var +f=b[1];if(typeof +f!=="number"){var +g=f[1];if(e===g){var +d=f[2],i=aI(d,lk);if(0<=i){if(0>=i)return b[2]?c(t,a):18;var +j=aI(d,lA);if(0<=j){if(0>=j)return b[2]?c(t,a):28;if(d===m3)return b[2]?c(t,a):29;if(d===k_)return b[2]?c(t,a):30;if(d===mF)return b[2]?c(t,a):31;if(d===nI)return b[2]?c(t,a):32;if(d===lE)return b[2]?c(t,a):33;if(d===lN)return b[2]?c(t,a):34;if(d===mZ)return b[2]?c(t,a):35;if(d===mp)return b[2]?c(t,a):36}else{if(d===nc)return b[2]?c(t,a):19;if(d===k6)return b[2]?c(t,a):20;if(d===nq)return b[2]?c(t,a):21;if(d===nm)return b[2]?c(t,a):22;if(d===lp)return b[2]?c(t,a):23;if(d===mI)return b[2]?c(t,a):24;if(d===oA)return b[2]?c(t,a):25;if(d===nW)return b[2]?c(t,a):26;if(d===lX)return b[2]?c(t,a):27}}else{var +k=aI(d,nE);if(0<=k){if(0>=k)return b[2]?c(t,a):9;if(d===nH)return b[2]?c(t,a):10;if(d===n$)return b[2]?c(t,a):11;if(d===oa)return b[2]?c(t,a):12;if(d===ly)return b[2]?c(t,a):13;if(d===lD)return b[2]?c(t,a):14;if(d===n3)return b[2]?c(t,a):15;if(d===mq)return b[2]?c(t,a):16;if(d===mz)return b[2]?c(t,a):17}else{if(d===n8)return b[2]?c(t,a):0;if(d===hL)return b[2]?c(t,a):1;if(d===nz)return b[2]?c(t,a):2;if(d===mW)return b[2]?c(t,a):3;if(d===lP)return b[2]?c(t,a):4;if(d===l6)return b[2]?c(t,a):5;if(d===ni)return b[2]?c(t,a):6;if(d===my)return b[2]?c(t,a):7;if(d===lq)return b[2]?c(t,a):8}}}else if(h===g)return eR(t,a)}}return eT(t,a)}function +kH(a){switch(a){case +0:return Cr;case +1:return Cs;case +2:return Ct;case +3:return Cu;case +4:return Cv;case +5:return Cw;case +6:return Cx;case +7:return Cy;case +8:return Cz;case +9:return CA;case +10:return CB;case +11:return CC;case +12:return CD;case +13:return CE;case +14:return CF;case +15:return CG;case +16:return CH;case +17:return CI;case +18:return CJ;case +19:return CK;case +20:return CL;case +21:return CM;case +22:return CN;case +23:return CO;case +24:return CP;case +25:return CQ;case +26:return CR;case +27:return CS;case +28:return CT;case +29:return CU;case +30:return CV;case +31:return CW;case +32:return CX;case +33:return CY;case +34:return CZ;case +35:return C0;default:return C1}}function +C2(a){if(typeof +a!=="number"&&h===a[1]){var +b=a[2];if(!b)return eS(j,a);var +f=b[1];if(typeof +f!=="number"){var +g=f[1];if(e===g){var +d=f[2],i=aI(d,kW);if(0<=i){if(0>=i)return b[2]?c(j,a):30;var +k=aI(d,m_);if(0<=k){if(0>=k)return b[2]?c(j,a):46;var +l=aI(d,op);if(0<=l){if(0>=l)return b[2]?c(j,a):54;if(d===nT)return b[2]?c(j,a):55;if(d===mg)return b[2]?c(j,a):56;if(d===lL)return b[2]?c(j,a):57;if(d===nX)return b[2]?c(j,a):58;if(d===oC)return b[2]?c(j,a):59;if(d===nD)return b[2]?c(j,a):60}else{if(d===mE)return b[2]?c(j,a):47;if(d===ls)return b[2]?c(j,a):48;if(d===k2)return b[2]?c(j,a):49;if(d===mf)return b[2]?c(j,a):50;if(d===cK)return b[2]?c(j,a):51;if(d===ok)return b[2]?c(j,a):52;if(d===mb)return b[2]?c(j,a):53}}else{var +m=aI(d,mO);if(0<=m){if(0>=m)return b[2]?c(j,a):38;if(d===ny)return b[2]?c(j,a):39;if(d===ms)return b[2]?c(j,a):40;if(d===om)return b[2]?c(j,a):41;if(d===nR)return b[2]?c(j,a):42;if(d===lK)return b[2]?c(j,a):43;if(d===nS)return b[2]?c(j,a):44;if(d===oD)return b[2]?c(j,a):45}else{if(d===ng)return b[2]?c(j,a):31;if(d===nL)return b[2]?c(j,a):32;if(d===fe)return b[2]?c(j,a):33;if(d===ff)return b[2]?c(j,a):34;if(d===l8)return b[2]?c(j,a):35;if(d===l_)return b[2]?c(j,a):36;if(d===oh)return b[2]?c(j,a):37}}}else{var +n=aI(d,m2);if(0<=n){if(0>=n)return b[2]?c(j,a):15;var +o=aI(d,nV);if(0<=o){if(0>=o)return b[2]?c(j,a):23;if(d===nB)return b[2]?c(j,a):24;if(d===nf)return b[2]?c(j,a):25;if(d===kZ)return b[2]?c(j,a):26;if(d===lM)return b[2]?c(j,a):27;if(d===m0)return b[2]?c(j,a):28;if(d===ow)return b[2]?c(j,a):29}else{if(d===lf)return b[2]?c(j,a):16;if(d===n_)return b[2]?c(j,a):17;if(d===lc)return b[2]?c(j,a):18;if(d===mN)return b[2]?c(j,a):19;if(d===na)return b[2]?c(j,a):20;if(d===nu)return b[2]?c(j,a):21;if(d===on)return b[2]?c(j,a):22}}else{var +p=aI(d,mm);if(0<=p){if(0>=p)return b[2]?c(j,a):7;if(d===nF)return b[2]?c(j,a):8;if(d===mh)return b[2]?c(j,a):9;if(d===fo)return b[2]?c(j,a):10;if(d===oy)return b[2]?c(j,a):11;if(d===nt)return b[2]?c(j,a):12;if(d===le)return b[2]?c(j,a):13;if(d===nh)return b[2]?c(j,a):14}else{if(d===mj)return b[2]?c(j,a):0;if(d===od)return b[2]?c(j,a):1;if(d===md)return b[2]?c(j,a):2;if(d===nd)return b[2]?c(j,a):3;if(d===lG)return b[2]?c(j,a):4;if(d===mP)return b[2]?c(j,a):5;if(d===lw)return b[2]?c(j,a):6}}}}else if(h===g)return eR(j,a)}}return eT(j,a)}function +C3(a){var +b=a;if(31<=b)switch(b){case +31:return Dx;case +32:return Dy;case +33:return Dz;case +34:return DA;case +35:return DB;case +36:return DC;case +37:return DD;case +38:return DE;case +39:return DF;case +40:return DG;case +41:return DH;case +42:return DI;case +43:return DJ;case +44:return DK;case +45:return DL;case +46:return DM;case +47:return DN;case +48:return DO;case +49:return DP;case +50:return DQ;case +51:return DR;case +52:return DS;case +53:return DT;case +54:return DU;case +55:return DV;case +56:return DW;case +57:return DX;case +58:return DY;case +59:return DZ;default:return D0}switch(b){case +0:return C4;case +1:return C5;case +2:return C6;case +3:return C7;case +4:return C8;case +5:return C9;case +6:return C_;case +7:return C$;case +8:return Da;case +9:return Db;case +10:return Dc;case +11:return Dd;case +12:return De;case +13:return Df;case +14:return Dg;case +15:return Dh;case +16:return Di;case +17:return Dj;case +18:return Dk;case +19:return Dl;case +20:return Dm;case +21:return Dn;case +22:return Do;case +23:return Dp;case +24:return Dq;case +25:return Dr;case +26:return Ds;case +27:return Dt;case +28:return Du;case +29:return Dv;default:return Dw}}function +D1(a){return kG([0,h,[0,[0,e,kC(a)],0]])}function +D2(a){var +b=kH(a);if(typeof +b!=="number"&&h===b[1]){var +c=b[2];if(c&&!c[2])return c[1]}throw i([0,q,D3],1)}function +g0(a){if(typeof +a!=="number"&&H===a[1]){var +f=[0,0],l=[0,0],g=[0,0],m=[0,0],n=[0,0],o=[0,0],h=[0,0],i=[0,0],j=[0,0],p=[0,0],c=[0,0],d=[0,0];(function(a){var +k=a;for(;;){if(!k)return;var +q=k[1],e=q[2],d=q[1],r=aI(d,fe);a:b:{var +s=k[2];if(0<=r)if(0=a){var +c=a;for(;;){aF[14].call(null,[0,c,0],0,f);var +g=c+1|0;if(b===c)break;c=g}}return}function +b(f,b){return aD(Gd(c,e),function(a){return aD(Gg(c,a),function(k){dh([0,Go,[0,f,[0,Gn,[0,b,Gm]]]]);var +d=iN(0);(function(a,b){var +f=a,e=b;for(;;){var +h=cs(e,0);if(!h)return h;var +g=iz(e,F4);f6([0,0,0,c[2][1][4],Gr,kN,[0,f],[0,g],Gq,Gp,1,0,1],d);f=f+g|0;e=e-g|0}}(f,(b-f|0)+1|0));var +l=iP(d);function +h(a,f){var +b=a?a[1]:1;if(cs(b,0))return ez(eA(bE(function(a){return ax(m(dv(c)(0,[0,eX,eW,e0,eZ,e1,e2]),a,0),function(a){var +b=a[3],c=a[1];g(j,[0,[0,l,iP(d)]]);return function(d,b){var +a=di([0,[0,function(a){return a},aF[1]],[0,[0,function(a){return a},at[1]],0]],Gs,e),f=cr([0,function(a){return a},aF[1]])(a),g=cr([0,function(a){return a},at[1]])(a);return wf(function(a,b){var +c=d+a|0,e=b[3],h=Gj(k,dk(b[4],Gt)),i=dk(b[2],b[1]);aF[14].call(null,[0,c,[0,e]],0,f);at[14].call(null,[0,[0,c,h,i],b],0,g);return 0},b)}(b,c)})},function(a,b){var +c=a,d=b;for(;;){if(b3(d,0))return ay(c);var +e=iO(f);if(!e)return ay(c);c=[0,e[1],c];d=d-1|0}}(0,b))),function(a){return wd(a)?cq(0):h(0,f)});throw i([0,q,Gu],1)}return h(0,d)})})}return function(a){if(typeof +a==="number")return 2===a?cq(0):cq(0);if(0!==a[0])return b(a[1],a[2]);var +c=a[3],e=a[2];d(a[1],c);return b(e,c)}}}var +kO=Fe([0]);function +Gv(d,b,c){return aD(Gc(b,c),function(a){var +e=[0,a,Gb[2]];return ax(g(Gk(jQ(function(b){g(b,e);return function(a){return g(b,[0,e[1],a])}},d),b)(c),a),function(a){return wh(function(a){return g(a,Gw)},d)})})}var +Gx=kO[2],Gy=kO[3],g2=at[5],g3=at[13];function +Gz(a,b){var +e=vJ(a);dh([0,GB,[0,vI(a),[0,GA,[0,e,0]]]]);var +c=eC(b),f=v5(c);dh(GC);qo(function(a){return v4(c,a)},f);var +h=gD([0,function(a){return a},aF[1]])(GD,c),d=gD([0,function(a){return a},at[1]])(GE,c),i=gD([0,function(a){return a},FN[1]])(GF,c),j=g(at[12].call(null,[0,function(a){return a},kL[12],kL[2]]),d);g(at[12].call(null,[0,function(a){return a},bN[12],bN[2]]),d);g(at[12].call(null,[0,function(a){return a},dD[12],dD[2]]),d);g(at[12].call(null,[0,function(a){return a},kM[12],kM[2]]),d);return dh([0,GG,[0,h,[0,d,[0,j,[0,i,0]]]]])}function +GH(d,b,c){function +e(a,b){return g(c,eC(b))}(function(a){return gC(e,a)}(function(a){return v6(Gz,a)}(function(a){return v7(b,d,a)}(v9(0,0)))));return}tI(0);function +GI(a){return b2(a,function(a){return jR(function(a){return[0,mv,a]},a)})}function +cB(a){return GI(jL(a))}function +GJ(a){return function(a){return{fut:a}}(gt(jx(bD(function(a){return a[hV]},a)),function(a){return de(ex(function(a){return a},a))}))}function +GK(a){var +j=gf(0,64),d=[0,[0,-1,[0]]],c=gu(0),e=c[1],l=c[2];(function(a){return GH(GM,GL,a)}(function(a){l([0,a]);return 0}));function +h(a,b){var +c=b[1];return Gv([0,function(a){tO(j);d[1]=[0,-1,[0]];return Gx(0,[0,c,a])}],b[2],a)}function +b(a){return ax(e,function(a){var +b=di([0,[0,function(a){return a},at[1]],0],GN,a);return cr([0,function(a){return a},at[1]])(b)})}function +f(a,b){var +e=b[4],h=b[3],c=b[2],f=tR([0,c,h,e]);if(wc(d[1][1],f))return cq(d[1][2]);function +m(a){a:{if(e&&!e[2]){var +c=e[1][1];if(!wn(c)){var +i=iI(c),j=ww(g(F(GO),i)),k=jO(function(a){var +b=iI(a[2]);return jN(wx(0,j)(b),0)},a),b=k;break a}}var +b=a}if(h)qr(function(a,b){return iJ(a[2],b[2])},b);d[1]=[0,f,b];return b}try{var +r=cq(i6(j,[0,c,h])),l=r}catch(f){var +k=J(f);if(k!==a0)throw i(k,0);var +n=bD(O,[0,GP]),o=gB(n,bD(O,[0,GQ]),GS,GR,0),p=g(g3([0,function(a){return a},dD[12],dD[2]]),a),q=ax(cB(dD[8].call(null,[0,o],p)),function(a){if(c)var +d=c[1],b=jO(function(a){return iy(function(a){return pZ(a,d)},a[3])},a);else +var +b=a;tT(j,[0,c,h],b);return b}),l=q}return ax(l,m)}return[0,,,,,,,function(a){switch(a[0]){case +0:E5(a[1]);return cq(0);case +1:var +i=a[1];return aD(e,function(a){return b2(h(a,pS(i)),function(a){return jR(function(a){return[0,mv,a]},a)})});case +2:return aD(b(0),function(a){return ax(cB(at[6].call(null,a)),function(a){return f2(f1(function(a){return a[2]},a))})});case +3:return aD(b(0),function(b){var +a=g(g3([0,function(a){return a},bN[12],bN[2]]),b),c=bD(O,[0,GT]),d=[0,gB(c,bD(O,[0,GU]),GW,GV,0)];return aD(cB(bN[8].call(null,d,a)),function(a){return b2(eA(bE(function(a){return cB(g2(a,b))},f2(a))),function(a){function +b(a){return bE(function(a){return wi(GX,a)},a)}return function(a){return gH(b,a)}(gI(a))})})});case +4:var +j=a[1];return aD(b(0),function(b){var +a=g(g3([0,function(a){return a},bN[12],bN[2]]),b),c=bD(O,[0,GY]),d=[0,gB(c,bD(O,[0,GZ]),G1,G0,0)];return aD(cB(bN[8].call(null,d,a)),function(a){return b2(eA(bE(function(a){return cB(g2(a,b))},f2(a))),function(a){function +b(a){if(a){var +b=a[1];if(iK(b[2][7],j))return[0,b]}return 0}function +c(a){return gG(b,a)}return function(a){return gH(c,a)}(gI(a))})})});case +5:var +d=a[1];return aD(b(0),function(a){return ax(f(a,d),function(a){return[0,d,0,a.length-1]})});default:var +c=a[1],l=a[3],m=a[2];return aD(b(0),function(b){return aD(f(b,c[1]),function(f){return b2(GJ(f1(function(a){try{var +d=Ff(m,c[3],a+c[2]|0),e=k(f,d)[1+d],g=b2(jL(g2(e,b)),function(a){if(0===a[0]){var +b=a[1];return b?[0,b[1]]:0}jG([0,G2,[0,e,[0,a[1],0]]]);return 0});return g}catch(f){return ey(0)}},l)),function(a){return[0,a]})})})}}]}Gy(function(a){return[0,GK(a)[7]]});fW(0);return}(globalThis)); diff --git a/main.bc.js b/main.bc.js index 99285ba..1362730 100644 --- a/main.bc.js +++ b/main.bc.js @@ -1,18187 +1,5078 @@ // Generated by js_of_ocaml //# buildInfo:effects=false, kind=exe, use-js-string=true, version=5.8.2+5.8.2 -(function - (Object){ - typeof globalThis !== "object" - && - (this - ? get() - : (Object.defineProperty - (Object.prototype, "_T_", {configurable: true, get: get}), - _T_)); - function get(){ - var global = this || self; - global.globalThis = global; - delete Object.prototype._T_; - } - } - (Object)); -(function(globalThis){ - "use strict"; - function caml_array_blit(a1, i1, a2, i2, len){ - if(i2 <= i1) - for(var j = 1; j <= len; j++) a2[i2 + j] = a1[i1 + j]; - else - for(var j = len; j >= 1; j--) a2[i2 + j] = a1[i1 + j]; - return 0; - } - function caml_array_sub(a, i, len){ - var a2 = new Array(len + 1); - a2[0] = 0; - for(var i2 = 1, i1 = i + 1; i2 <= len; i2++, i1++) a2[i2] = a[i1]; - return a2; - } - function caml_subarray_to_jsbytes(a, i, len){ - var f = String.fromCharCode; - if(i == 0 && len <= 4096 && len == a.length) return f.apply(null, a); - var s = ""; - for(; 0 < len; i += 1024, len -= 1024) - s += f.apply(null, a.slice(i, i + Math.min(len, 1024))); - return s; - } - function caml_convert_bytes_to_array(s){ - var a = new Uint8Array(s.l), b = s.c, l = b.length, i = 0; - for(; i < l; i++) a[i] = b.charCodeAt(i); - for(l = s.l; i < l; i++) a[i] = 0; - s.c = a; - s.t = 4; - return a; - } - function caml_blit_bytes(s1, i1, s2, i2, len){ - if(len == 0) return 0; - if(i2 == 0 && (len >= s2.l || s2.t == 2 && len >= s2.c.length)){ - s2.c = - s1.t == 4 - ? caml_subarray_to_jsbytes(s1.c, i1, len) - : i1 == 0 && s1.c.length == len ? s1.c : s1.c.substr(i1, len); - s2.t = s2.c.length == s2.l ? 0 : 2; - } - else if(s2.t == 2 && i2 == s2.c.length){ - s2.c += - s1.t == 4 - ? caml_subarray_to_jsbytes(s1.c, i1, len) - : i1 == 0 && s1.c.length == len ? s1.c : s1.c.substr(i1, len); - s2.t = s2.c.length == s2.l ? 0 : 2; - } - else{ - if(s2.t != 4) caml_convert_bytes_to_array(s2); - var c1 = s1.c, c2 = s2.c; - if(s1.t == 4) - if(i2 <= i1) - for(var i = 0; i < len; i++) c2[i2 + i] = c1[i1 + i]; - else - for(var i = len - 1; i >= 0; i--) c2[i2 + i] = c1[i1 + i]; - else{ - var l = Math.min(len, c1.length - i1); - for(var i = 0; i < l; i++) c2[i2 + i] = c1.charCodeAt(i1 + i); - for(; i < len; i++) c2[i2 + i] = 0; - } - } - return 0; - } - function caml_str_repeat(n, s){ - if(n == 0) return ""; - if(s.repeat) return s.repeat(n); - var r = "", l = 0; - for(;;){ - if(n & 1) r += s; - n >>= 1; - if(n == 0) return r; - s += s; - l++; - if(l == 9) s.slice(0, 1); - } - } - function caml_convert_string_to_bytes(s){ - if(s.t == 2) - s.c += caml_str_repeat(s.l - s.c.length, "\0"); - else - s.c = caml_subarray_to_jsbytes(s.c, 0, s.c.length); - s.t = 0; - } - function jsoo_is_ascii(s){ - if(s.length < 24){ - for(var i = 0; i < s.length; i++) if(s.charCodeAt(i) > 127) return false; - return true; - } - else - return ! /[^\x00-\x7f]/.test(s); - } - function caml_utf16_of_utf8(s){ - for(var b = "", t = "", c, c1, c2, v, i = 0, l = s.length; i < l; i++){ - c1 = s.charCodeAt(i); - if(c1 < 0x80){ - for(var j = i + 1; j < l && (c1 = s.charCodeAt(j)) < 0x80; j++) ; - if(j - i > 512){ - t.substr(0, 1); - b += t; - t = ""; - b += s.slice(i, j); - } - else - t += s.slice(i, j); - if(j == l) break; - i = j; - } - v = 1; - if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128){ - c = c2 + (c1 << 6); - if(c1 < 0xe0){ - v = c - 0x3080; - if(v < 0x80) v = 1; - } - else{ - v = 2; - if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128){ - c = c2 + (c << 6); - if(c1 < 0xf0){ - v = c - 0xe2080; - if(v < 0x800 || v >= 0xd7ff && v < 0xe000) v = 2; - } - else{ - v = 3; - if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128 && c1 < 0xf5){ - v = c2 - 0x3c82080 + (c << 6); - if(v < 0x10000 || v > 0x10ffff) v = 3; - } - } - } - } - } - if(v < 4){ - i -= v; - t += "\ufffd"; - } - else if(v > 0xffff) - t += String.fromCharCode(0xd7c0 + (v >> 10), 0xdc00 + (v & 0x3FF)); - else - t += String.fromCharCode(v); - if(t.length > 1024){t.substr(0, 1); b += t; t = "";} - } - return b + t; - } - function MlBytes(tag, contents, length){ - this.t = tag; - this.c = contents; - this.l = length; - } - MlBytes.prototype.toString = - function(){ - switch(this.t){ - case 9: - return this.c; - default: caml_convert_string_to_bytes(this); - case 0: - if(jsoo_is_ascii(this.c)){this.t = 9; return this.c;} this.t = 8; - case 8: - return this.c; - } - }; - MlBytes.prototype.toUtf16 = - function(){ - var r = this.toString(); - if(this.t == 9) return r; - return caml_utf16_of_utf8(r); - }; - MlBytes.prototype.slice = - function(){ - var content = this.t == 4 ? this.c.slice() : this.c; - return new MlBytes(this.t, content, this.l); - }; - function caml_bytes_of_jsbytes(s){return new MlBytes(0, s, s.length);} - function caml_jsbytes_of_string(x){return x;} - function caml_bytes_of_string(s){ - return caml_bytes_of_jsbytes(caml_jsbytes_of_string(s)); - } - function caml_blit_string(a, b, c, d, e){ - caml_blit_bytes(caml_bytes_of_string(a), b, c, d, e); - return 0; - } - function jsoo_sys_getenv(n){ - var process = globalThis.process; - if(process && process.env && process.env[n] != undefined) - return process.env[n]; - if(globalThis.jsoo_static_env && globalThis.jsoo_static_env[n]) - return globalThis.jsoo_static_env[n]; - } - var caml_record_backtrace_flag = 0; - (function(){ - var r = jsoo_sys_getenv("OCAMLRUNPARAM"); - if(r !== undefined){ - var l = r.split(","); - for(var i = 0; i < l.length; i++) - if(l[i] == "b"){ - caml_record_backtrace_flag = 1; - break; - } - else if(l[i].startsWith("b=")) - caml_record_backtrace_flag = + l[i].slice(2); - else - continue; - } - } - ()); - var caml_global_data = [0]; - function caml_exn_with_js_backtrace(exn, force){ - if(! exn.js_error || force || exn[0] == 248) - exn.js_error = new globalThis.Error("Js exception containing backtrace"); - return exn; - } - function caml_maybe_attach_backtrace(exn, force){ - return caml_record_backtrace_flag - ? caml_exn_with_js_backtrace(exn, force) - : exn; - } - function caml_raise_with_arg(tag, arg){ - throw caml_maybe_attach_backtrace([0, tag, arg]); - } - function caml_string_of_jsbytes(x){return x;} - function caml_raise_with_string(tag, msg){ - caml_raise_with_arg(tag, caml_string_of_jsbytes(msg)); - } - function caml_invalid_argument(msg){ - caml_raise_with_string(caml_global_data.Invalid_argument, msg); - } - function caml_bytes_bound_error(){ - caml_invalid_argument("index out of bounds"); - } - function caml_bytes_unsafe_get(s, i){ - switch(s.t & 6){ - default: if(i >= s.c.length) return 0; - case 0: - return s.c.charCodeAt(i); - case 4: - return s.c[i]; - } - } - function caml_bytes_get(s, i){ - if(i >>> 0 >= s.l) caml_bytes_bound_error(); - return caml_bytes_unsafe_get(s, i); - } - function caml_bytes_unsafe_set(s, i, c){ - c &= 0xff; - if(s.t != 4){ - if(i == s.c.length){ - s.c += String.fromCharCode(c); - if(i + 1 == s.l) s.t = 0; - return 0; - } - caml_convert_bytes_to_array(s); - } - s.c[i] = c; - return 0; - } - function caml_bytes_set(s, i, c){ - if(i >>> 0 >= s.l) caml_bytes_bound_error(); - return caml_bytes_unsafe_set(s, i, c); - } - function caml_call_gen(f, args){ - var - n = f.l >= 0 ? f.l : f.l = f.length, - argsLen = args.length, - d = n - argsLen; - if(d == 0) - return f.apply(null, args); - else if(d < 0){ - var g = f.apply(null, args.slice(0, n)); - if(typeof g !== "function") return g; - return caml_call_gen(g, args.slice(n)); - } - else{ - switch(d){ - case 1: - { - var - g = - function(x){ - var nargs = new Array(argsLen + 1); - for(var i = 0; i < argsLen; i++) nargs[i] = args[i]; - nargs[argsLen] = x; - return f.apply(null, nargs); - }; - break; - } - case 2: - { - var - g = - function(x, y){ - var nargs = new Array(argsLen + 2); - for(var i = 0; i < argsLen; i++) nargs[i] = args[i]; - nargs[argsLen] = x; - nargs[argsLen + 1] = y; - return f.apply(null, nargs); - }; - break; - } - default: - var - g = - function(){ - var - extra_args = arguments.length == 0 ? 1 : arguments.length, - nargs = new Array(args.length + extra_args); - for(var i = 0; i < args.length; i++) nargs[i] = args[i]; - for(var i = 0; i < arguments.length; i++) - nargs[args.length + i] = arguments[i]; - return caml_call_gen(f, nargs); - }; - } - g.l = d; - return g; - } - } - function caml_array_bound_error(){ - caml_invalid_argument("index out of bounds"); - } - function caml_check_bound(array, index){ - if(index >>> 0 >= array.length - 1) caml_array_bound_error(); - return array; - } - function caml_classify_float(x){ - if(isFinite(x)){ - if(Math.abs(x) >= 2.2250738585072014e-308) return 0; - if(x != 0) return 1; - return 2; - } - return isNaN(x) ? 4 : 3; - } - function caml_is_continuation_tag(t){return 0;} - var log2_ok = Math.log2 && Math.log2(1.1235582092889474E+307) == 1020; - function jsoo_floor_log2(x){ - if(log2_ok) return Math.floor(Math.log2(x)); - var i = 0; - if(x == 0) return - Infinity; - if(x >= 1) while(x >= 2){x /= 2; i++;} else while(x < 1){x *= 2; i--;} - return i; - } - function caml_int32_bits_of_float(x){ - var float32a = new Float32Array(1); - float32a[0] = x; - var int32a = new Int32Array(float32a.buffer); - return int32a[0] | 0; - } - var caml_int64_offset = Math.pow(2, - 24); - function caml_raise_constant(tag){throw tag;} - function caml_raise_zero_divide(){ - caml_raise_constant(caml_global_data.Division_by_zero); - } - function MlInt64(lo, mi, hi){ - this.lo = lo & 0xffffff; - this.mi = mi & 0xffffff; - this.hi = hi & 0xffff; - } - MlInt64.prototype.caml_custom = "_j"; - MlInt64.prototype.copy = - function(){return new MlInt64(this.lo, this.mi, this.hi);}; - MlInt64.prototype.ucompare = - function(x){ - if(this.hi > x.hi) return 1; - if(this.hi < x.hi) return - 1; - if(this.mi > x.mi) return 1; - if(this.mi < x.mi) return - 1; - if(this.lo > x.lo) return 1; - if(this.lo < x.lo) return - 1; - return 0; - }; - MlInt64.prototype.compare = - function(x){ - var hi = this.hi << 16, xhi = x.hi << 16; - if(hi > xhi) return 1; - if(hi < xhi) return - 1; - if(this.mi > x.mi) return 1; - if(this.mi < x.mi) return - 1; - if(this.lo > x.lo) return 1; - if(this.lo < x.lo) return - 1; - return 0; - }; - MlInt64.prototype.neg = - function(){ - var - lo = - this.lo, - mi = - this.mi + (lo >> 24), - hi = - this.hi + (mi >> 24); - return new MlInt64(lo, mi, hi); - }; - MlInt64.prototype.add = - function(x){ - var - lo = this.lo + x.lo, - mi = this.mi + x.mi + (lo >> 24), - hi = this.hi + x.hi + (mi >> 24); - return new MlInt64(lo, mi, hi); - }; - MlInt64.prototype.sub = - function(x){ - var - lo = this.lo - x.lo, - mi = this.mi - x.mi + (lo >> 24), - hi = this.hi - x.hi + (mi >> 24); - return new MlInt64(lo, mi, hi); - }; - MlInt64.prototype.mul = - function(x){ - var - lo = this.lo * x.lo, - mi = (lo * caml_int64_offset | 0) + this.mi * x.lo + this.lo * x.mi, - hi = - (mi * caml_int64_offset | 0) + this.hi * x.lo + this.mi * x.mi - + this.lo * x.hi; - return new MlInt64(lo, mi, hi); - }; - MlInt64.prototype.isZero = - function(){return (this.lo | this.mi | this.hi) == 0;}; - MlInt64.prototype.isNeg = function(){return this.hi << 16 < 0;}; - MlInt64.prototype.and = - function(x){ - return new MlInt64(this.lo & x.lo, this.mi & x.mi, this.hi & x.hi); - }; - MlInt64.prototype.or = - function(x){ - return new MlInt64(this.lo | x.lo, this.mi | x.mi, this.hi | x.hi); - }; - MlInt64.prototype.xor = - function(x){ - return new MlInt64(this.lo ^ x.lo, this.mi ^ x.mi, this.hi ^ x.hi); - }; - MlInt64.prototype.shift_left = - function(s){ - s = s & 63; - if(s == 0) return this; - if(s < 24) - return new - MlInt64 - (this.lo << s, - this.mi << s | this.lo >> 24 - s, - this.hi << s | this.mi >> 24 - s); - if(s < 48) - return new - MlInt64 - (0, this.lo << s - 24, this.mi << s - 24 | this.lo >> 48 - s); - return new MlInt64(0, 0, this.lo << s - 48); - }; - MlInt64.prototype.shift_right_unsigned = - function(s){ - s = s & 63; - if(s == 0) return this; - if(s < 24) - return new - MlInt64 - (this.lo >> s | this.mi << 24 - s, - this.mi >> s | this.hi << 24 - s, - this.hi >> s); - if(s < 48) - return new - MlInt64 - (this.mi >> s - 24 | this.hi << 48 - s, this.hi >> s - 24, 0); - return new MlInt64(this.hi >> s - 48, 0, 0); - }; - MlInt64.prototype.shift_right = - function(s){ - s = s & 63; - if(s == 0) return this; - var h = this.hi << 16 >> 16; - if(s < 24) - return new - MlInt64 - (this.lo >> s | this.mi << 24 - s, - this.mi >> s | h << 24 - s, - this.hi << 16 >> s >>> 16); - var sign = this.hi << 16 >> 31; - if(s < 48) - return new - MlInt64 - (this.mi >> s - 24 | this.hi << 48 - s, - this.hi << 16 >> s - 24 >> 16, - sign & 0xffff); - return new MlInt64(this.hi << 16 >> s - 32, sign, sign); - }; - MlInt64.prototype.lsl1 = - function(){ - this.hi = this.hi << 1 | this.mi >> 23; - this.mi = (this.mi << 1 | this.lo >> 23) & 0xffffff; - this.lo = this.lo << 1 & 0xffffff; - }; - MlInt64.prototype.lsr1 = - function(){ - this.lo = (this.lo >>> 1 | this.mi << 23) & 0xffffff; - this.mi = (this.mi >>> 1 | this.hi << 23) & 0xffffff; - this.hi = this.hi >>> 1; - }; - MlInt64.prototype.udivmod = - function(x){ - var - offset = 0, - modulus = this.copy(), - divisor = x.copy(), - quotient = new MlInt64(0, 0, 0); - while(modulus.ucompare(divisor) > 0){offset++; divisor.lsl1();} - while(offset >= 0){ - offset--; - quotient.lsl1(); - if(modulus.ucompare(divisor) >= 0){ - quotient.lo++; - modulus = modulus.sub(divisor); - } - divisor.lsr1(); - } - return {quotient: quotient, modulus: modulus}; - }; - MlInt64.prototype.div = - function(y){ - var x = this; - if(y.isZero()) caml_raise_zero_divide(); - var sign = x.hi ^ y.hi; - if(x.hi & 0x8000) x = x.neg(); - if(y.hi & 0x8000) y = y.neg(); - var q = x.udivmod(y).quotient; - if(sign & 0x8000) q = q.neg(); - return q; - }; - MlInt64.prototype.mod = - function(y){ - var x = this; - if(y.isZero()) caml_raise_zero_divide(); - var sign = x.hi; - if(x.hi & 0x8000) x = x.neg(); - if(y.hi & 0x8000) y = y.neg(); - var r = x.udivmod(y).modulus; - if(sign & 0x8000) r = r.neg(); - return r; - }; - MlInt64.prototype.toInt = function(){return this.lo | this.mi << 24;}; - MlInt64.prototype.toFloat = - function(){ - return (this.hi << 16) * Math.pow(2, 32) + this.mi * Math.pow(2, 24) - + this.lo; - }; - MlInt64.prototype.toArray = - function(){ - return [this.hi >> 8, - this.hi & 0xff, - this.mi >> 16, - this.mi >> 8 & 0xff, - this.mi & 0xff, - this.lo >> 16, - this.lo >> 8 & 0xff, - this.lo & 0xff]; - }; - MlInt64.prototype.lo32 = - function(){return this.lo | (this.mi & 0xff) << 24;}; - MlInt64.prototype.hi32 = - function(){return this.mi >>> 8 & 0xffff | this.hi << 16;}; - function caml_int64_create_lo_mi_hi(lo, mi, hi){return new MlInt64(lo, mi, hi); - } - function caml_int64_bits_of_float(x){ - if(! isFinite(x)){ - if(isNaN(x)) return caml_int64_create_lo_mi_hi(1, 0, 0x7ff0); - return x > 0 - ? caml_int64_create_lo_mi_hi(0, 0, 0x7ff0) - : caml_int64_create_lo_mi_hi(0, 0, 0xfff0); - } - var sign = x == 0 && 1 / x == - Infinity ? 0x8000 : x >= 0 ? 0 : 0x8000; - if(sign) x = - x; - var exp = jsoo_floor_log2(x) + 1023; - if(exp <= 0){ - exp = 0; - x /= Math.pow(2, - 1026); - } - else{ - x /= Math.pow(2, exp - 1027); - if(x < 16){x *= 2; exp -= 1;} - if(exp == 0) x /= 2; - } - var k = Math.pow(2, 24), r3 = x | 0; - x = (x - r3) * k; - var r2 = x | 0; - x = (x - r2) * k; - var r1 = x | 0; - r3 = r3 & 0xf | sign | exp << 4; - return caml_int64_create_lo_mi_hi(r1, r2, r3); - } - function caml_int64_to_bytes(x){return x.toArray();} - function caml_ba_serialize(writer, ba, sz){ - writer.write(32, ba.dims.length); - writer.write(32, ba.kind | ba.layout << 8); - if(ba.caml_custom == "_bigarr02") - for(var i = 0; i < ba.dims.length; i++) - if(ba.dims[i] < 0xffff) - writer.write(16, ba.dims[i]); - else{ - writer.write(16, 0xffff); - writer.write(32, 0); - writer.write(32, ba.dims[i]); - } - else - for(var i = 0; i < ba.dims.length; i++) writer.write(32, ba.dims[i]); - switch(ba.kind){ - case 2: - case 3: - case 12: - for(var i = 0; i < ba.data.length; i++) writer.write(8, ba.data[i]); - break; - case 4: - case 5: - for(var i = 0; i < ba.data.length; i++) writer.write(16, ba.data[i]); - break; - case 6: - for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]); - break; - case 8: - case 9: - writer.write(8, 0); - for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]); - break; - case 7: - for(var i = 0; i < ba.data.length / 2; i++){ - var b = caml_int64_to_bytes(ba.get(i)); - for(var j = 0; j < 8; j++) writer.write(8, b[j]); - } - break; - case 1: - for(var i = 0; i < ba.data.length; i++){ - var b = caml_int64_to_bytes(caml_int64_bits_of_float(ba.get(i))); - for(var j = 0; j < 8; j++) writer.write(8, b[j]); - } - break; - case 0: - for(var i = 0; i < ba.data.length; i++){ - var b = caml_int32_bits_of_float(ba.get(i)); - writer.write(32, b); - } - break; - case 10: - for(var i = 0; i < ba.data.length / 2; i++){ - var j = ba.get(i); - writer.write(32, caml_int32_bits_of_float(j[1])); - writer.write(32, caml_int32_bits_of_float(j[2])); - } - break; - case 11: - for(var i = 0; i < ba.data.length / 2; i++){ - var - complex = ba.get(i), - b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[1])); - for(var j = 0; j < 8; j++) writer.write(8, b[j]); - var b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[2])); - for(var j = 0; j < 8; j++) writer.write(8, b[j]); - } - break; - } - sz[0] = (4 + ba.dims.length) * 4; - sz[1] = (4 + ba.dims.length) * 8; - } - function caml_ba_get_size_per_element(kind){ - switch(kind){case 7:case 10:case 11: return 2;default: return 1; - } - } - function caml_ba_create_buffer(kind, size){ - var view; - switch(kind){ - case 0: - view = Float32Array; break; - case 1: - view = Float64Array; break; - case 2: - view = Int8Array; break; - case 3: - view = Uint8Array; break; - case 4: - view = Int16Array; break; - case 5: - view = Uint16Array; break; - case 6: - view = Int32Array; break; - case 7: - view = Int32Array; break; - case 8: - view = Int32Array; break; - case 9: - view = Int32Array; break; - case 10: - view = Float32Array; break; - case 11: - view = Float64Array; break; - case 12: - view = Uint8Array; break; - } - if(! view) caml_invalid_argument("Bigarray.create: unsupported kind"); - var data = new view(size * caml_ba_get_size_per_element(kind)); - return data; - } - function caml_int32_float_of_bits(x){ - var int32a = new Int32Array(1); - int32a[0] = x; - var float32a = new Float32Array(int32a.buffer); - return float32a[0]; - } - function caml_int64_of_bytes(a){ - return new - MlInt64 - (a[7] << 0 | a[6] << 8 | a[5] << 16, - a[4] << 0 | a[3] << 8 | a[2] << 16, - a[1] << 0 | a[0] << 8); - } - function caml_int64_float_of_bits(x){ - var lo = x.lo, mi = x.mi, hi = x.hi, exp = (hi & 0x7fff) >> 4; - if(exp == 2047) - return (lo | mi | hi & 0xf) == 0 - ? hi & 0x8000 ? - Infinity : Infinity - : NaN; - var k = Math.pow(2, - 24), res = (lo * k + mi) * k + (hi & 0xf); - if(exp > 0){ - res += 16; - res *= Math.pow(2, exp - 1027); - } - else - res *= Math.pow(2, - 1026); - if(hi & 0x8000) res = - res; - return res; - } - function caml_ba_get_size(dims){ - var n_dims = dims.length, size = 1; - for(var i = 0; i < n_dims; i++){ - if(dims[i] < 0) - caml_invalid_argument("Bigarray.create: negative dimension"); - size = size * dims[i]; - } - return size; - } - function caml_int64_create_lo_hi(lo, hi){ - return new - MlInt64 - (lo & 0xffffff, - lo >>> 24 & 0xff | (hi & 0xffff) << 8, - hi >>> 16 & 0xffff); - } - function caml_int64_hi32(v){return v.hi32();} - function caml_int64_lo32(v){return v.lo32();} - var caml_ba_custom_name = "_bigarr02"; - function Ml_Bigarray(kind, layout, dims, buffer){ - this.kind = kind; - this.layout = layout; - this.dims = dims; - this.data = buffer; - } - Ml_Bigarray.prototype.caml_custom = caml_ba_custom_name; - Ml_Bigarray.prototype.offset = - function(arg){ - var ofs = 0; - if(typeof arg === "number") arg = [arg]; - if(! (arg instanceof Array)) - caml_invalid_argument("bigarray.js: invalid offset"); - if(this.dims.length != arg.length) - caml_invalid_argument("Bigarray.get/set: bad number of dimensions"); - if(this.layout == 0) - for(var i = 0; i < this.dims.length; i++){ - if(arg[i] < 0 || arg[i] >= this.dims[i]) caml_array_bound_error(); - ofs = ofs * this.dims[i] + arg[i]; - } - else - for(var i = this.dims.length - 1; i >= 0; i--){ - if(arg[i] < 1 || arg[i] > this.dims[i]) caml_array_bound_error(); - ofs = ofs * this.dims[i] + (arg[i] - 1); - } - return ofs; - }; - Ml_Bigarray.prototype.get = - function(ofs){ - switch(this.kind){ - case 7: - var l = this.data[ofs * 2 + 0], h = this.data[ofs * 2 + 1]; - return caml_int64_create_lo_hi(l, h); - case 10: - case 11: - var r = this.data[ofs * 2 + 0], i = this.data[ofs * 2 + 1]; - return [254, r, i]; - default: return this.data[ofs]; - } - }; - Ml_Bigarray.prototype.set = - function(ofs, v){ - switch(this.kind){ - case 7: - this.data[ofs * 2 + 0] = caml_int64_lo32(v); - this.data[ofs * 2 + 1] = caml_int64_hi32(v); - break; - case 10: - case 11: - this.data[ofs * 2 + 0] = v[1]; this.data[ofs * 2 + 1] = v[2]; break; - default: this.data[ofs] = v; break; - } - return 0; - }; - Ml_Bigarray.prototype.fill = - function(v){ - switch(this.kind){ - case 7: - var a = caml_int64_lo32(v), b = caml_int64_hi32(v); - if(a == b) - this.data.fill(a); - else - for(var i = 0; i < this.data.length; i++) - this.data[i] = i % 2 == 0 ? a : b; - break; - case 10: - case 11: - var im = v[1], re = v[2]; - if(im == re) - this.data.fill(im); - else - for(var i = 0; i < this.data.length; i++) - this.data[i] = i % 2 == 0 ? im : re; - break; - default: this.data.fill(v); break; - } - }; - Ml_Bigarray.prototype.compare = - function(b, total){ - if(this.layout != b.layout || this.kind != b.kind){ - var k1 = this.kind | this.layout << 8, k2 = b.kind | b.layout << 8; - return k2 - k1; - } - if(this.dims.length != b.dims.length) - return b.dims.length - this.dims.length; - for(var i = 0; i < this.dims.length; i++) - if(this.dims[i] != b.dims[i]) return this.dims[i] < b.dims[i] ? - 1 : 1; - switch(this.kind){ - case 0: - case 1: - case 10: - case 11: - var x, y; - for(var i = 0; i < this.data.length; i++){ - x = this.data[i]; - y = b.data[i]; - if(x < y) return - 1; - if(x > y) return 1; - if(x != y){ - if(! total) return NaN; - if(x == x) return 1; - if(y == y) return - 1; - } - } - break; - case 7: - for(var i = 0; i < this.data.length; i += 2){ - if(this.data[i + 1] < b.data[i + 1]) return - 1; - if(this.data[i + 1] > b.data[i + 1]) return 1; - if(this.data[i] >>> 0 < b.data[i] >>> 0) return - 1; - if(this.data[i] >>> 0 > b.data[i] >>> 0) return 1; - } - break; - case 2: - case 3: - case 4: - case 5: - case 6: - case 8: - case 9: - case 12: - for(var i = 0; i < this.data.length; i++){ - if(this.data[i] < b.data[i]) return - 1; - if(this.data[i] > b.data[i]) return 1; - } - break; - } - return 0; - }; - function Ml_Bigarray_c_1_1(kind, layout, dims, buffer){ - this.kind = kind; - this.layout = layout; - this.dims = dims; - this.data = buffer; - } - Ml_Bigarray_c_1_1.prototype = new Ml_Bigarray(); - Ml_Bigarray_c_1_1.prototype.offset = - function(arg){ - if(typeof arg !== "number") - if(arg instanceof Array && arg.length == 1) - arg = arg[0]; - else - caml_invalid_argument("Ml_Bigarray_c_1_1.offset"); - if(arg < 0 || arg >= this.dims[0]) caml_array_bound_error(); - return arg; - }; - Ml_Bigarray_c_1_1.prototype.get = function(ofs){return this.data[ofs];}; - Ml_Bigarray_c_1_1.prototype.set = - function(ofs, v){this.data[ofs] = v; return 0;}; - Ml_Bigarray_c_1_1.prototype.fill = - function(v){this.data.fill(v); return 0;}; - function caml_ba_create_unsafe(kind, layout, dims, data){ - var size_per_element = caml_ba_get_size_per_element(kind); - if(caml_ba_get_size(dims) * size_per_element != data.length) - caml_invalid_argument("length doesn't match dims"); - if(layout == 0 && dims.length == 1 && size_per_element == 1) - return new Ml_Bigarray_c_1_1(kind, layout, dims, data); - return new Ml_Bigarray(kind, layout, dims, data); - } - function caml_failwith(msg){ - if(! caml_global_data.Failure) - caml_global_data.Failure = [248, caml_string_of_jsbytes("Failure"), - 3]; - caml_raise_with_string(caml_global_data.Failure, msg); - } - function caml_ba_deserialize(reader, sz, name){ - var num_dims = reader.read32s(); - if(num_dims < 0 || num_dims > 16) - caml_failwith("input_value: wrong number of bigarray dimensions"); - var - tag = reader.read32s(), - kind = tag & 0xff, - layout = tag >> 8 & 1, - dims = []; - if(name == "_bigarr02") - for(var i = 0; i < num_dims; i++){ - var size_dim = reader.read16u(); - if(size_dim == 0xffff){ - var size_dim_hi = reader.read32u(), size_dim_lo = reader.read32u(); - if(size_dim_hi != 0) - caml_failwith("input_value: bigarray dimension overflow in 32bit"); - size_dim = size_dim_lo; - } - dims.push(size_dim); - } - else - for(var i = 0; i < num_dims; i++) dims.push(reader.read32u()); - var - size = caml_ba_get_size(dims), - data = caml_ba_create_buffer(kind, size), - ba = caml_ba_create_unsafe(kind, layout, dims, data); - switch(kind){ - case 2: - for(var i = 0; i < size; i++) data[i] = reader.read8s(); break; - case 3: - case 12: - for(var i = 0; i < size; i++) data[i] = reader.read8u(); break; - case 4: - for(var i = 0; i < size; i++) data[i] = reader.read16s(); break; - case 5: - for(var i = 0; i < size; i++) data[i] = reader.read16u(); break; - case 6: - for(var i = 0; i < size; i++) data[i] = reader.read32s(); break; - case 8: - case 9: - var sixty = reader.read8u(); - if(sixty) - caml_failwith - ("input_value: cannot read bigarray with 64-bit OCaml ints"); - for(var i = 0; i < size; i++) data[i] = reader.read32s(); - break; - case 7: - var t = new Array(8); - for(var i = 0; i < size; i++){ - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - var int64 = caml_int64_of_bytes(t); - ba.set(i, int64); - } - break; - case 1: - var t = new Array(8); - for(var i = 0; i < size; i++){ - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - var f = caml_int64_float_of_bits(caml_int64_of_bytes(t)); - ba.set(i, f); - } - break; - case 0: - for(var i = 0; i < size; i++){ - var f = caml_int32_float_of_bits(reader.read32s()); - ba.set(i, f); - } - break; - case 10: - for(var i = 0; i < size; i++){ - var - re = caml_int32_float_of_bits(reader.read32s()), - im = caml_int32_float_of_bits(reader.read32s()); - ba.set(i, [254, re, im]); - } - break; - case 11: - var t = new Array(8); - for(var i = 0; i < size; i++){ - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - var re = caml_int64_float_of_bits(caml_int64_of_bytes(t)); - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - var im = caml_int64_float_of_bits(caml_int64_of_bytes(t)); - ba.set(i, [254, re, im]); - } - break; - } - sz[0] = (4 + num_dims) * 4; - return caml_ba_create_unsafe(kind, layout, dims, data); - } - function caml_ba_compare(a, b, total){return a.compare(b, total);} - function caml_mul(a, b){return Math.imul(a, b);} - function caml_hash_mix_int(h, d){ - d = caml_mul(d, 0xcc9e2d51 | 0); - d = d << 15 | d >>> 32 - 15; - d = caml_mul(d, 0x1b873593); - h ^= d; - h = h << 13 | h >>> 32 - 13; - return (h + (h << 2) | 0) + (0xe6546b64 | 0) | 0; - } - function caml_hash_mix_int64(h, v){ - h = caml_hash_mix_int(h, caml_int64_lo32(v)); - h = caml_hash_mix_int(h, caml_int64_hi32(v)); - return h; - } - function caml_hash_mix_float(h, v0){ - return caml_hash_mix_int64(h, caml_int64_bits_of_float(v0)); - } - function caml_ba_hash(ba){ - var num_elts = caml_ba_get_size(ba.dims), h = 0; - switch(ba.kind){ - case 2: - case 3: - case 12: - if(num_elts > 256) num_elts = 256; - var w = 0, i = 0; - for(i = 0; i + 4 <= ba.data.length; i += 4){ - w = - ba.data[i + 0] | ba.data[i + 1] << 8 | ba.data[i + 2] << 16 - | ba.data[i + 3] << 24; - h = caml_hash_mix_int(h, w); - } - w = 0; - switch(num_elts & 3){ - case 3: - w = ba.data[i + 2] << 16; - case 2: - w |= ba.data[i + 1] << 8; - case 1: - w |= ba.data[i + 0]; h = caml_hash_mix_int(h, w); - } - break; - case 4: - case 5: - if(num_elts > 128) num_elts = 128; - var w = 0, i = 0; - for(i = 0; i + 2 <= ba.data.length; i += 2){ - w = ba.data[i + 0] | ba.data[i + 1] << 16; - h = caml_hash_mix_int(h, w); - } - if((num_elts & 1) != 0) h = caml_hash_mix_int(h, ba.data[i]); - break; - case 6: - if(num_elts > 64) num_elts = 64; - for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); - break; - case 8: - case 9: - if(num_elts > 64) num_elts = 64; - for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); - break; - case 7: - if(num_elts > 32) num_elts = 32; - num_elts *= 2; - for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); - break; - case 10: - num_elts *= 2; - case 0: - if(num_elts > 64) num_elts = 64; - for(var i = 0; i < num_elts; i++) - h = caml_hash_mix_float(h, ba.data[i]); - break; - case 11: - num_elts *= 2; - case 1: - if(num_elts > 32) num_elts = 32; - for(var i = 0; i < num_elts; i++) - h = caml_hash_mix_float(h, ba.data[i]); - break; - } - return h; - } - function caml_int32_unmarshal(reader, size){size[0] = 4; return reader.read32s(); - } - function caml_nativeint_unmarshal(reader, size){ - switch(reader.read8u()){ - case 1: - size[0] = 4; return reader.read32s(); - case 2: - caml_failwith("input_value: native integer value too large"); - default: caml_failwith("input_value: ill-formed native integer"); - } - } - function caml_int64_unmarshal(reader, size){ - var t = new Array(8); - for(var j = 0; j < 8; j++) t[j] = reader.read8u(); - size[0] = 8; - return caml_int64_of_bytes(t); - } - function caml_int64_marshal(writer, v, sizes){ - var b = caml_int64_to_bytes(v); - for(var i = 0; i < 8; i++) writer.write(8, b[i]); - sizes[0] = 8; - sizes[1] = 8; - } - function caml_int64_compare(x, y, total){return x.compare(y);} - function caml_int64_hash(v){return v.lo32() ^ v.hi32();} - var - caml_custom_ops = - {"_j": - {deserialize: caml_int64_unmarshal, - serialize: caml_int64_marshal, - fixed_length: 8, - compare: caml_int64_compare, - hash: caml_int64_hash}, - "_i": {deserialize: caml_int32_unmarshal, fixed_length: 4}, - "_n": {deserialize: caml_nativeint_unmarshal, fixed_length: 4}, - "_bigarray": - {deserialize: - function(reader, sz){ - return caml_ba_deserialize(reader, sz, "_bigarray"); - }, - serialize: caml_ba_serialize, - compare: caml_ba_compare, - hash: caml_ba_hash}, - "_bigarr02": - {deserialize: - function(reader, sz){ - return caml_ba_deserialize(reader, sz, "_bigarr02"); - }, - serialize: caml_ba_serialize, - compare: caml_ba_compare, - hash: caml_ba_hash}}; - function caml_compare_val_get_custom(a){ - return caml_custom_ops[a.caml_custom] - && caml_custom_ops[a.caml_custom].compare; - } - function caml_compare_val_number_custom(num, custom, swap, total){ - var comp = caml_compare_val_get_custom(custom); - if(comp){ - var x = swap > 0 ? comp(custom, num, total) : comp(num, custom, total); - if(total && x != x) return swap; - if(+ x != + x) return + x; - if((x | 0) != 0) return x | 0; - } - return swap; - } - function caml_is_ml_string(s){ - return typeof s === "string" && ! /[^\x00-\xff]/.test(s); - } - function caml_is_ml_bytes(s){return s instanceof MlBytes;} - function caml_compare_val_tag(a){ - if(typeof a === "number") - return 1000; - else if(caml_is_ml_bytes(a)) - return 252; - else if(caml_is_ml_string(a)) - return 1252; - else if(a instanceof Array && a[0] === a[0] >>> 0 && a[0] <= 255){var tag = a[0] | 0; return tag == 254 ? 0 : tag;} - else if(a instanceof String) - return 12520; - else if(typeof a == "string") - return 12520; - else if(a instanceof Number) - return 1000; - else if(a && a.caml_custom) - return 1255; - else if(a && a.compare) - return 1256; - else if(typeof a == "function") - return 1247; - else if(typeof a == "symbol") return 1251; - return 1001; - } - function caml_int_compare(a, b){ - if(a < b) return - 1; - if(a == b) return 0; - return 1; - } - function caml_string_compare(s1, s2){ - return s1 < s2 ? - 1 : s1 > s2 ? 1 : 0; - } - function caml_bytes_compare(s1, s2){ - s1.t & 6 && caml_convert_string_to_bytes(s1); - s2.t & 6 && caml_convert_string_to_bytes(s2); - return s1.c < s2.c ? - 1 : s1.c > s2.c ? 1 : 0; - } - function caml_compare_val(a, b, total){ - var stack = []; - for(;;){ - if(! (total && a === b)){ - var tag_a = caml_compare_val_tag(a); - if(tag_a == 250){a = a[1]; continue;} - var tag_b = caml_compare_val_tag(b); - if(tag_b == 250){b = b[1]; continue;} - if(tag_a !== tag_b){ - if(tag_a == 1000){ - if(tag_b == 1255) - return caml_compare_val_number_custom(a, b, - 1, total); - return - 1; - } - if(tag_b == 1000){ - if(tag_a == 1255) - return caml_compare_val_number_custom(b, a, 1, total); - return 1; - } - return tag_a < tag_b ? - 1 : 1; - } - switch(tag_a){ - case 247: - caml_invalid_argument("compare: functional value"); break; - case 248: - var x = caml_int_compare(a[2], b[2]); if(x != 0) return x | 0; break; - case 249: - caml_invalid_argument("compare: functional value"); break; - case 250: - caml_invalid_argument("equal: got Forward_tag, should not happen"); - break; - case 251: - caml_invalid_argument("equal: abstract value"); break; - case 252: - if(a !== b){ - var x = caml_bytes_compare(a, b); - if(x != 0) return x | 0; - } - break; - case 253: - caml_invalid_argument("equal: got Double_tag, should not happen"); - break; - case 254: - caml_invalid_argument - ("equal: got Double_array_tag, should not happen"); - break; - case 255: - caml_invalid_argument("equal: got Custom_tag, should not happen"); - break; - case 1247: - caml_invalid_argument("compare: functional value"); break; - case 1255: - var comp = caml_compare_val_get_custom(a); - if(comp != caml_compare_val_get_custom(b)) - return a.caml_custom < b.caml_custom ? - 1 : 1; - if(! comp) caml_invalid_argument("compare: abstract value"); - var x = comp(a, b, total); - if(x != x) return total ? - 1 : x; - if(x !== (x | 0)) return - 1; - if(x != 0) return x | 0; - break; - case 1256: - var x = a.compare(b, total); - if(x != x) return total ? - 1 : x; - if(x !== (x | 0)) return - 1; - if(x != 0) return x | 0; - break; - case 1000: - a = + a; - b = + b; - if(a < b) return - 1; - if(a > b) return 1; - if(a != b){ - if(! total) return NaN; - if(a == a) return 1; - if(b == b) return - 1; - } - break; - case 1001: - if(a < b) return - 1; - if(a > b) return 1; - if(a != b){ - if(! total) return NaN; - if(a == a) return 1; - if(b == b) return - 1; - } - break; - case 1251: - if(a !== b){if(! total) return NaN; return 1;} break; - case 1252: - var a = caml_jsbytes_of_string(a), b = caml_jsbytes_of_string(b); - if(a !== b){if(a < b) return - 1; if(a > b) return 1;} - break; - case 12520: - var a = a.toString(), b = b.toString(); - if(a !== b){if(a < b) return - 1; if(a > b) return 1;} - break; - case 246: - case 254: - default: - if(caml_is_continuation_tag(tag_a)){ - caml_invalid_argument("compare: continuation value"); - break; - } - if(a.length != b.length) return a.length < b.length ? - 1 : 1; - if(a.length > 1) stack.push(a, b, 1); - break; - } - } - if(stack.length == 0) return 0; - var i = stack.pop(); - b = stack.pop(); - a = stack.pop(); - if(i + 1 < a.length) stack.push(a, b, i + 1); - a = a[i]; - b = b[i]; - } - } - function caml_compare(a, b){return caml_compare_val(a, b, true);} - function caml_convert_raw_backtrace(){return [0];} - function caml_create_bytes(len){ - if(len < 0) caml_invalid_argument("Bytes.create"); - return new MlBytes(len ? 2 : 9, "", len); - } - function caml_equal(x, y){return + (caml_compare_val(x, y, false) == 0);} - function caml_fill_bytes(s, i, l, c){ - if(l > 0) - if(i == 0 && (l >= s.l || s.t == 2 && l >= s.c.length)) - if(c == 0){ - s.c = ""; - s.t = 2; - } - else{ - s.c = caml_str_repeat(l, String.fromCharCode(c)); - s.t = l == s.l ? 0 : 2; - } - else{ - if(s.t != 4) caml_convert_bytes_to_array(s); - for(l += i; i < l; i++) s.c[i] = c; - } - return 0; - } - function caml_float_of_string(s){ - var res; - s = caml_jsbytes_of_string(s); - res = + s; - if(s.length > 0 && res === res) return res; - s = s.replace(/_/g, ""); - res = + s; - if(s.length > 0 && res === res || /^[+-]?nan$/i.test(s)) return res; - var m = /^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(s); - if(m){ - var - m3 = m[3].replace(/0+$/, ""), - mantissa = parseInt(m[1] + m[2] + m3, 16), - exponent = (m[5] | 0) - 4 * m3.length; - res = mantissa * Math.pow(2, exponent); - return res; - } - if(/^\+?inf(inity)?$/i.test(s)) return Infinity; - if(/^-inf(inity)?$/i.test(s)) return - Infinity; - caml_failwith("float_of_string"); - } - function caml_parse_format(fmt){ - fmt = caml_jsbytes_of_string(fmt); - var len = fmt.length; - if(len > 31) caml_invalid_argument("format_int: format too long"); - var - f = - {justify: "+", - signstyle: "-", - filler: " ", - alternate: false, - base: 0, - signedconv: false, - width: 0, - uppercase: false, - sign: 1, - prec: - 1, - conv: "f"}; - for(var i = 0; i < len; i++){ - var c = fmt.charAt(i); - switch(c){ - case "-": - f.justify = "-"; break; - case "+": - case " ": - f.signstyle = c; break; - case "0": - f.filler = "0"; break; - case "#": - f.alternate = true; break; - case "1": - case "2": - case "3": - case "4": - case "5": - case "6": - case "7": - case "8": - case "9": - f.width = 0; - while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.width = f.width * 10 + c; i++;} - i--; - break; - case ".": - f.prec = 0; - i++; - while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.prec = f.prec * 10 + c; i++;} - i--; - case "d": - case "i": - f.signedconv = true; - case "u": - f.base = 10; break; - case "x": - f.base = 16; break; - case "X": - f.base = 16; f.uppercase = true; break; - case "o": - f.base = 8; break; - case "e": - case "f": - case "g": - f.signedconv = true; f.conv = c; break; - case "E": - case "F": - case "G": - f.signedconv = true; - f.uppercase = true; - f.conv = c.toLowerCase(); - break; - } - } - return f; - } - function caml_finish_formatting(f, rawbuffer){ - if(f.uppercase) rawbuffer = rawbuffer.toUpperCase(); - var len = rawbuffer.length; - if(f.signedconv && (f.sign < 0 || f.signstyle != "-")) len++; - if(f.alternate){if(f.base == 8) len += 1; if(f.base == 16) len += 2;} - var buffer = ""; - if(f.justify == "+" && f.filler == " ") - for(var i = len; i < f.width; i++) buffer += " "; - if(f.signedconv) - if(f.sign < 0) - buffer += "-"; - else if(f.signstyle != "-") buffer += f.signstyle; - if(f.alternate && f.base == 8) buffer += "0"; - if(f.alternate && f.base == 16) buffer += f.uppercase ? "0X" : "0x"; - if(f.justify == "+" && f.filler == "0") - for(var i = len; i < f.width; i++) buffer += "0"; - buffer += rawbuffer; - if(f.justify == "-") for(var i = len; i < f.width; i++) buffer += " "; - return caml_string_of_jsbytes(buffer); - } - function caml_format_float(fmt, x){ - function toFixed(x, dp){ - if(Math.abs(x) < 1.0) - return x.toFixed(dp); - else{ - var e = parseInt(x.toString().split("+")[1]); - if(e > 20){ - e -= 20; - x /= Math.pow(10, e); - x += new Array(e + 1).join("0"); - if(dp > 0) x = x + "." + new Array(dp + 1).join("0"); - return x; - } - else - return x.toFixed(dp); - } - } - var s, f = caml_parse_format(fmt), prec = f.prec < 0 ? 6 : f.prec; - if(x < 0 || x == 0 && 1 / x == - Infinity){f.sign = - 1; x = - x;} - if(isNaN(x)){ - s = "nan"; - f.filler = " "; - } - else if(! isFinite(x)){ - s = "inf"; - f.filler = " "; - } - else - switch(f.conv){ - case "e": - var s = x.toExponential(prec), i = s.length; - if(s.charAt(i - 3) == "e") - s = s.slice(0, i - 1) + "0" + s.slice(i - 1); - break; - case "f": - s = toFixed(x, prec); break; - case "g": - prec = prec ? prec : 1; - s = x.toExponential(prec - 1); - var j = s.indexOf("e"), exp = + s.slice(j + 1); - if(exp < - 4 || x >= 1e21 || x.toFixed(0).length > prec){ - var i = j - 1; - while(s.charAt(i) == "0") i--; - if(s.charAt(i) == ".") i--; - s = s.slice(0, i + 1) + s.slice(j); - i = s.length; - if(s.charAt(i - 3) == "e") - s = s.slice(0, i - 1) + "0" + s.slice(i - 1); - break; - } - else{ - var p = prec; - if(exp < 0){ - p -= exp + 1; - s = x.toFixed(p); - } - else - while(s = x.toFixed(p), s.length > prec + 1) p--; - if(p){ - var i = s.length - 1; - while(s.charAt(i) == "0") i--; - if(s.charAt(i) == ".") i--; - s = s.slice(0, i + 1); - } - } - break; - } - return caml_finish_formatting(f, s); - } - function caml_format_int(fmt, i){ - if(caml_jsbytes_of_string(fmt) == "%d") - return caml_string_of_jsbytes("" + i); - var f = caml_parse_format(fmt); - if(i < 0) if(f.signedconv){f.sign = - 1; i = - i;} else i >>>= 0; - var s = i.toString(f.base); - if(f.prec >= 0){ - f.filler = " "; - var n = f.prec - s.length; - if(n > 0) s = caml_str_repeat(n, "0") + s; - } - return caml_finish_formatting(f, s); - } - var caml_oo_last_id = 0; - function caml_fresh_oo_id(){return caml_oo_last_id++;} - function caml_jsstring_of_string(s){ - if(jsoo_is_ascii(s)) return s; - return caml_utf16_of_utf8(s); - } - function fs_node_supported(){ - return typeof globalThis.process !== "undefined" - && typeof globalThis.process.versions !== "undefined" - && typeof globalThis.process.versions.node !== "undefined"; - } - function make_path_is_absolute(){ - function posix(path){ - if(path.charAt(0) === "/") return ["", path.substring(1)]; - return; - } - function win32(path){ - var - splitDeviceRe = - /^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/, - result = splitDeviceRe.exec(path), - device = result[1] || "", - isUnc = Boolean(device && device.charAt(1) !== ":"); - if(Boolean(result[2] || isUnc)){ - var root = result[1] || "", sep = result[2] || ""; - return [root, path.substring(root.length + sep.length)]; - } - return; - } - return fs_node_supported() && globalThis.process - && globalThis.process.platform - ? globalThis.process.platform === "win32" ? win32 : posix - : posix; - } - var path_is_absolute = make_path_is_absolute(); - function caml_trailing_slash(name){ - return name.slice(- 1) !== "/" ? name + "/" : name; - } - if(fs_node_supported() && globalThis.process && globalThis.process.cwd) - var caml_current_dir = globalThis.process.cwd().replace(/\\/g, "/"); - else - var caml_current_dir = "/static"; - caml_current_dir = caml_trailing_slash(caml_current_dir); - function caml_make_path(name){ - name = caml_jsstring_of_string(name); - if(! path_is_absolute(name)) name = caml_current_dir + name; - var - comp0 = path_is_absolute(name), - comp = comp0[1].split("/"), - ncomp = []; - for(var i = 0; i < comp.length; i++) - switch(comp[i]){ - case "..": - if(ncomp.length > 1) ncomp.pop(); break; - case ".": break; - case "": break; - default: ncomp.push(comp[i]); break; - } - ncomp.unshift(comp0[0]); - ncomp.orig = name; - return ncomp; - } - function caml_utf8_of_utf16(s){ - for(var b = "", t = b, c, d, i = 0, l = s.length; i < l; i++){ - c = s.charCodeAt(i); - if(c < 0x80){ - for(var j = i + 1; j < l && (c = s.charCodeAt(j)) < 0x80; j++) ; - if(j - i > 512){ - t.substr(0, 1); - b += t; - t = ""; - b += s.slice(i, j); - } - else - t += s.slice(i, j); - if(j == l) break; - i = j; - } - if(c < 0x800){ - t += String.fromCharCode(0xc0 | c >> 6); - t += String.fromCharCode(0x80 | c & 0x3f); - } - else if(c < 0xd800 || c >= 0xdfff) - t += - String.fromCharCode - (0xe0 | c >> 12, 0x80 | c >> 6 & 0x3f, 0x80 | c & 0x3f); - else if - (c >= 0xdbff || i + 1 == l || (d = s.charCodeAt(i + 1)) < 0xdc00 - || d > 0xdfff) - t += "\xef\xbf\xbd"; - else{ - i++; - c = (c << 10) + d - 0x35fdc00; - t += - String.fromCharCode - (0xf0 | c >> 18, - 0x80 | c >> 12 & 0x3f, - 0x80 | c >> 6 & 0x3f, - 0x80 | c & 0x3f); - } - if(t.length > 1024){t.substr(0, 1); b += t; t = "";} - } - return b + t; - } - function caml_string_of_jsstring(s){ - return jsoo_is_ascii(s) - ? caml_string_of_jsbytes(s) - : caml_string_of_jsbytes(caml_utf8_of_utf16(s)); - } - var - unix_error = - ["E2BIG", - "EACCES", - "EAGAIN", - "EBADF", - "EBUSY", - "ECHILD", - "EDEADLK", - "EDOM", - "EEXIST", - "EFAULT", - "EFBIG", - "EINTR", - "EINVAL", - "EIO", - "EISDIR", - "EMFILE", - "EMLINK", - "ENAMETOOLONG", - "ENFILE", - "ENODEV", - "ENOENT", - "ENOEXEC", - "ENOLCK", - "ENOMEM", - "ENOSPC", - "ENOSYS", - "ENOTDIR", - "ENOTEMPTY", - "ENOTTY", - "ENXIO", - "EPERM", - "EPIPE", - "ERANGE", - "EROFS", - "ESPIPE", - "ESRCH", - "EXDEV", - "EWOULDBLOCK", - "EINPROGRESS", - "EALREADY", - "ENOTSOCK", - "EDESTADDRREQ", - "EMSGSIZE", - "EPROTOTYPE", - "ENOPROTOOPT", - "EPROTONOSUPPORT", - "ESOCKTNOSUPPORT", - "EOPNOTSUPP", - "EPFNOSUPPORT", - "EAFNOSUPPORT", - "EADDRINUSE", - "EADDRNOTAVAIL", - "ENETDOWN", - "ENETUNREACH", - "ENETRESET", - "ECONNABORTED", - "ECONNRESET", - "ENOBUFS", - "EISCONN", - "ENOTCONN", - "ESHUTDOWN", - "ETOOMANYREFS", - "ETIMEDOUT", - "ECONNREFUSED", - "EHOSTDOWN", - "EHOSTUNREACH", - "ELOOP", - "EOVERFLOW"]; - function make_unix_err_args(code, syscall, path, errno){ - var variant = unix_error.indexOf(code); - if(variant < 0){if(errno == null) errno = - 9999; variant = [0, errno];} - var - args = - [variant, - caml_string_of_jsstring(syscall || ""), - caml_string_of_jsstring(path || "")]; - return args; - } - var caml_named_values = {}; - function caml_named_value(nm){return caml_named_values[nm];} - function caml_raise_with_args(tag, args){ - throw caml_maybe_attach_backtrace([0, tag].concat(args)); - } - function caml_bytes_of_array(a){ - if(! (a instanceof Uint8Array)) a = new Uint8Array(a); - return new MlBytes(4, a, a.length); - } - function caml_raise_sys_error(msg){ - caml_raise_with_string(caml_global_data.Sys_error, msg); - } - function caml_raise_no_such_file(name){ - caml_raise_sys_error(name + ": No such file or directory"); - } - function caml_uint8_array_of_bytes(s){ - if(s.t != 4) caml_convert_bytes_to_array(s); - return s.c; - } - function caml_ml_bytes_length(s){return s.l;} - function MlFile(){} - function MlFakeFile(content){this.data = content;} - MlFakeFile.prototype = new MlFile(); - MlFakeFile.prototype.constructor = MlFakeFile; - MlFakeFile.prototype.truncate = - function(len){ - var old = this.data; - this.data = caml_create_bytes(len | 0); - caml_blit_bytes(old, 0, this.data, 0, len); - }; - MlFakeFile.prototype.length = - function(){return caml_ml_bytes_length(this.data);}; - MlFakeFile.prototype.write = - function(offset, buf, pos, len){ - var clen = this.length(); - if(offset + len >= clen){ - var new_str = caml_create_bytes(offset + len), old_data = this.data; - this.data = new_str; - caml_blit_bytes(old_data, 0, this.data, 0, clen); - } - caml_blit_bytes(caml_bytes_of_array(buf), pos, this.data, offset, len); - return 0; - }; - MlFakeFile.prototype.read = - function(offset, buf, pos, len){ - var clen = this.length(); - if(offset + len >= clen) len = clen - offset; - if(len){ - var data = caml_create_bytes(len | 0); - caml_blit_bytes(this.data, offset, data, 0, len); - buf.set(caml_uint8_array_of_bytes(data), pos); - } - return len; - }; - function MlFakeFd(name, file, flags){ - this.file = file; - this.name = name; - this.flags = flags; - } - MlFakeFd.prototype.err_closed = - function(){ - caml_raise_sys_error(this.name + ": file descriptor already closed"); - }; - MlFakeFd.prototype.length = - function(){if(this.file) return this.file.length(); this.err_closed();}; - MlFakeFd.prototype.write = - function(offset, buf, pos, len){ - if(this.file) return this.file.write(offset, buf, pos, len); - this.err_closed(); - }; - MlFakeFd.prototype.read = - function(offset, buf, pos, len){ - if(this.file) return this.file.read(offset, buf, pos, len); - this.err_closed(); - }; - MlFakeFd.prototype.close = function(){this.file = undefined;}; - function MlFakeDevice(root, f){ - this.content = {}; - this.root = root; - this.lookupFun = f; - } - MlFakeDevice.prototype.nm = function(name){return this.root + name;}; - MlFakeDevice.prototype.create_dir_if_needed = - function(name){ - var comp = name.split("/"), res = ""; - for(var i = 0; i < comp.length - 1; i++){ - res += comp[i] + "/"; - if(this.content[res]) continue; - this.content[res] = Symbol("directory"); - } - }; - MlFakeDevice.prototype.slash = - function(name){return /\/$/.test(name) ? name : name + "/";}; - MlFakeDevice.prototype.lookup = - function(name){ - if(! this.content[name] && this.lookupFun){ - var - res = - this.lookupFun - (caml_string_of_jsbytes(this.root), caml_string_of_jsbytes(name)); - if(res !== 0){ - this.create_dir_if_needed(name); - this.content[name] = new MlFakeFile(caml_bytes_of_string(res[1])); - } - } - }; - MlFakeDevice.prototype.exists = - function(name){ - if(name == "") return 1; - var name_slash = this.slash(name); - if(this.content[name_slash]) return 1; - this.lookup(name); - return this.content[name] ? 1 : 0; - }; - MlFakeDevice.prototype.isFile = - function(name){return this.exists(name) && ! this.is_dir(name) ? 1 : 0;}; - MlFakeDevice.prototype.mkdir = - function(name, mode, raise_unix){ - var unix_error = raise_unix && caml_named_value("Unix.Unix_error"); - if(this.exists(name)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("EEXIST", "mkdir", this.nm(name))); - else - caml_raise_sys_error(name + ": File exists"); - var parent = /^(.*)\/[^/]+/.exec(name); - parent = parent && parent[1] || ""; - if(! this.exists(parent)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOENT", "mkdir", this.nm(parent))); - else - caml_raise_sys_error(parent + ": No such file or directory"); - if(! this.is_dir(parent)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOTDIR", "mkdir", this.nm(parent))); - else - caml_raise_sys_error(parent + ": Not a directory"); - this.create_dir_if_needed(this.slash(name)); - }; - MlFakeDevice.prototype.rmdir = - function(name, raise_unix){ - var - unix_error = raise_unix && caml_named_value("Unix.Unix_error"), - name_slash = name == "" ? "" : this.slash(name), - r = new RegExp("^" + name_slash + "([^/]+)"); - if(! this.exists(name)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOENT", "rmdir", this.nm(name))); - else - caml_raise_sys_error(name + ": No such file or directory"); - if(! this.is_dir(name)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOTDIR", "rmdir", this.nm(name))); - else - caml_raise_sys_error(name + ": Not a directory"); - for(var n in this.content) - if(n.match(r)) - if(unix_error) - caml_raise_with_args - (unix_error, make_unix_err_args("ENOTEMPTY", "rmdir", this.nm(name))); - else - caml_raise_sys_error(this.nm(name) + ": Directory not empty"); - delete this.content[name_slash]; - }; - MlFakeDevice.prototype.readdir = - function(name){ - var name_slash = name == "" ? "" : this.slash(name); - if(! this.exists(name)) - caml_raise_sys_error(name + ": No such file or directory"); - if(! this.is_dir(name)) caml_raise_sys_error(name + ": Not a directory"); - var r = new RegExp("^" + name_slash + "([^/]+)"), seen = {}, a = []; - for(var n in this.content){ - var m = n.match(r); - if(m && ! seen[m[1]]){seen[m[1]] = true; a.push(m[1]);} - } - return a; - }; - MlFakeDevice.prototype.opendir = - function(name, raise_unix){ - var - unix_error = raise_unix && caml_named_value("Unix.Unix_error"), - a = this.readdir(name), - c = false, - i = 0; - return {readSync: - function(){ - if(c) - if(unix_error) - caml_raise_with_args - (unix_error, - make_unix_err_args("EBADF", "closedir", this.nm(name))); - else - caml_raise_sys_error(name + ": closedir failed"); - if(i == a.length) return null; - var entry = a[i]; - i++; - return {name: entry}; - }, - closeSync: - function(){ - if(c) - if(unix_error) - caml_raise_with_args - (unix_error, - make_unix_err_args("EBADF", "closedir", this.nm(name))); - else - caml_raise_sys_error(name + ": closedir failed"); - c = true; - a = []; - }}; - }; - MlFakeDevice.prototype.is_dir = - function(name){ - if(name == "") return true; - var name_slash = this.slash(name); - return this.content[name_slash] ? 1 : 0; - }; - MlFakeDevice.prototype.unlink = - function(name){ - var ok = this.content[name] ? true : false; - delete this.content[name]; - return ok; - }; - MlFakeDevice.prototype.open = - function(name, f){ - var file; - if(f.rdonly && f.wronly) - caml_raise_sys_error - (this.nm(name) - + " : flags Open_rdonly and Open_wronly are not compatible"); - if(f.text && f.binary) - caml_raise_sys_error - (this.nm(name) - + " : flags Open_text and Open_binary are not compatible"); - this.lookup(name); - if(this.content[name]){ - if(this.is_dir(name)) - caml_raise_sys_error(this.nm(name) + " : is a directory"); - if(f.create && f.excl) - caml_raise_sys_error(this.nm(name) + " : file already exists"); - file = this.content[name]; - if(f.truncate) file.truncate(); - } - else if(f.create){ - this.create_dir_if_needed(name); - this.content[name] = new MlFakeFile(caml_create_bytes(0)); - file = this.content[name]; - } - else - caml_raise_no_such_file(this.nm(name)); - return new MlFakeFd(this.nm(name), file, f); - }; - MlFakeDevice.prototype.open = - function(name, f){ - var file; - if(f.rdonly && f.wronly) - caml_raise_sys_error - (this.nm(name) - + " : flags Open_rdonly and Open_wronly are not compatible"); - if(f.text && f.binary) - caml_raise_sys_error - (this.nm(name) - + " : flags Open_text and Open_binary are not compatible"); - this.lookup(name); - if(this.content[name]){ - if(this.is_dir(name)) - caml_raise_sys_error(this.nm(name) + " : is a directory"); - if(f.create && f.excl) - caml_raise_sys_error(this.nm(name) + " : file already exists"); - file = this.content[name]; - if(f.truncate) file.truncate(); - } - else if(f.create){ - this.create_dir_if_needed(name); - this.content[name] = new MlFakeFile(caml_create_bytes(0)); - file = this.content[name]; - } - else - caml_raise_no_such_file(this.nm(name)); - return new MlFakeFd(this.nm(name), file, f); - }; - MlFakeDevice.prototype.register = - function(name, content){ - var file; - if(this.content[name]) - caml_raise_sys_error(this.nm(name) + " : file already exists"); - if(caml_is_ml_bytes(content)) file = new MlFakeFile(content); - if(caml_is_ml_string(content)) - file = new MlFakeFile(caml_bytes_of_string(content)); - else if(content instanceof Array) - file = new MlFakeFile(caml_bytes_of_array(content)); - else if(typeof content === "string") - file = new MlFakeFile(caml_bytes_of_jsbytes(content)); - else if(content.toString){ - var - bytes = - caml_bytes_of_string(caml_string_of_jsstring(content.toString())); - file = new MlFakeFile(bytes); - } - if(file){ - this.create_dir_if_needed(name); - this.content[name] = file; - } - else - caml_raise_sys_error - (this.nm(name) + " : registering file with invalid content type"); - }; - MlFakeDevice.prototype.constructor = MlFakeDevice; - function caml_ml_string_length(s){return s.length;} - function caml_string_unsafe_get(s, i){return s.charCodeAt(i);} - function caml_uint8_array_of_string(s){ - var l = caml_ml_string_length(s), a = new Uint8Array(l), i = 0; - for(; i < l; i++) a[i] = caml_string_unsafe_get(s, i); - return a; - } - function MlNodeFd(fd, flags){ - this.fs = require("fs"); - this.fd = fd; - this.flags = flags; - } - MlNodeFd.prototype = new MlFile(); - MlNodeFd.prototype.constructor = MlNodeFd; - MlNodeFd.prototype.truncate = - function(len){ - try{this.fs.ftruncateSync(this.fd, len | 0);} - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeFd.prototype.length = - function(){ - try{return this.fs.fstatSync(this.fd).size;} - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeFd.prototype.write = - function(offset, buf, buf_offset, len){ - try{ - if(this.flags.isCharacterDevice) - this.fs.writeSync(this.fd, buf, buf_offset, len); - else - this.fs.writeSync(this.fd, buf, buf_offset, len, offset); - } - catch(err){caml_raise_sys_error(err.toString());} - return 0; - }; - MlNodeFd.prototype.read = - function(offset, a, buf_offset, len){ - try{ - if(this.flags.isCharacterDevice) - var read = this.fs.readSync(this.fd, a, buf_offset, len); - else - var read = this.fs.readSync(this.fd, a, buf_offset, len, offset); - return read; - } - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeFd.prototype.close = - function(){ - try{this.fs.closeSync(this.fd); return 0;} - catch(err){caml_raise_sys_error(err.toString());} - }; - function MlNodeDevice(root){this.fs = require("fs"); this.root = root;} - MlNodeDevice.prototype.nm = function(name){return this.root + name;}; - MlNodeDevice.prototype.exists = - function(name){ - try{return this.fs.existsSync(this.nm(name)) ? 1 : 0;} - catch(err){return 0;} - }; - MlNodeDevice.prototype.isFile = - function(name){ - try{return this.fs.statSync(this.nm(name)).isFile() ? 1 : 0;} - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeDevice.prototype.mkdir = - function(name, mode, raise_unix){ - try{this.fs.mkdirSync(this.nm(name), {mode: mode}); return 0;} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.rmdir = - function(name, raise_unix){ - try{this.fs.rmdirSync(this.nm(name)); return 0;} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.readdir = - function(name, raise_unix){ - try{return this.fs.readdirSync(this.nm(name));} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.is_dir = - function(name){ - try{return this.fs.statSync(this.nm(name)).isDirectory() ? 1 : 0;} - catch(err){caml_raise_sys_error(err.toString());} - }; - MlNodeDevice.prototype.unlink = - function(name, raise_unix){ - try{ - var b = this.fs.existsSync(this.nm(name)) ? 1 : 0; - this.fs.unlinkSync(this.nm(name)); - return b; - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.open = - function(name, f, raise_unix){ - var consts = require("constants"), res = 0; - for(var key in f) - switch(key){ - case "rdonly": - res |= consts.O_RDONLY; break; - case "wronly": - res |= consts.O_WRONLY; break; - case "append": - res |= consts.O_WRONLY | consts.O_APPEND; break; - case "create": - res |= consts.O_CREAT; break; - case "truncate": - res |= consts.O_TRUNC; break; - case "excl": - res |= consts.O_EXCL; break; - case "binary": - res |= consts.O_BINARY; break; - case "text": - res |= consts.O_TEXT; break; - case "nonblock": - res |= consts.O_NONBLOCK; break; - } - try{ - var - fd = this.fs.openSync(this.nm(name), res), - isCharacterDevice = - this.fs.lstatSync(this.nm(name)).isCharacterDevice(); - f.isCharacterDevice = isCharacterDevice; - return new MlNodeFd(fd, f); - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.rename = - function(o, n, raise_unix){ - try{this.fs.renameSync(this.nm(o), this.nm(n));} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.stat = - function(name, raise_unix){ - try{ - var js_stats = this.fs.statSync(this.nm(name)); - return this.stats_from_js(js_stats); - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.lstat = - function(name, raise_unix){ - try{ - var js_stats = this.fs.lstatSync(this.nm(name)); - return this.stats_from_js(js_stats); - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.symlink = - function(to_dir, target, path, raise_unix){ - try{ - this.fs.symlinkSync - (this.nm(target), this.nm(path), to_dir ? "dir" : "file"); - return 0; - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.readlink = - function(name, raise_unix){ - try{ - var link = this.fs.readlinkSync(this.nm(name), "utf8"); - return caml_string_of_jsstring(link); - } - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.opendir = - function(name, raise_unix){ - try{return this.fs.opendirSync(this.nm(name));} - catch(err){this.raise_nodejs_error(err, raise_unix);} - }; - MlNodeDevice.prototype.raise_nodejs_error = - function(err, raise_unix){ - var unix_error = caml_named_value("Unix.Unix_error"); - if(raise_unix && unix_error){ - var - args = make_unix_err_args(err.code, err.syscall, err.path, err.errno); - caml_raise_with_args(unix_error, args); - } - else - caml_raise_sys_error(err.toString()); - }; - MlNodeDevice.prototype.stats_from_js = - function(js_stats){ - var file_kind; - if(js_stats.isFile()) - file_kind = 0; - else if(js_stats.isDirectory()) - file_kind = 1; - else if(js_stats.isCharacterDevice()) - file_kind = 2; - else if(js_stats.isBlockDevice()) - file_kind = 3; - else if(js_stats.isSymbolicLink()) - file_kind = 4; - else if(js_stats.isFIFO()) - file_kind = 5; - else if(js_stats.isSocket()) file_kind = 6; - return [0, - js_stats.dev, - js_stats.ino, - file_kind, - js_stats.mode, - js_stats.nlink, - js_stats.uid, - js_stats.gid, - js_stats.rdev, - js_stats.size, - js_stats.atimeMs, - js_stats.mtimeMs, - js_stats.ctimeMs]; - }; - MlNodeDevice.prototype.constructor = MlNodeDevice; - function caml_get_root(path){ - var x = path_is_absolute(path); - if(! x) return; - return x[0] + "/"; - } - var - caml_root = - caml_get_root(caml_current_dir) - || caml_failwith("unable to compute caml_root"), - jsoo_mount_point = []; - if(fs_node_supported()) - jsoo_mount_point.push - ({path: caml_root, device: new MlNodeDevice(caml_root)}); - else - jsoo_mount_point.push - ({path: caml_root, device: new MlFakeDevice(caml_root)}); - jsoo_mount_point.push - ({path: "/static/", device: new MlFakeDevice("/static/")}); - function resolve_fs_device(name){ - var - path = caml_make_path(name), - name = path.join("/"), - name_slash = caml_trailing_slash(name), - res; - for(var i = 0; i < jsoo_mount_point.length; i++){ - var m = jsoo_mount_point[i]; - if - (name_slash.search(m.path) == 0 - && (! res || res.path.length < m.path.length)) - res = - {path: m.path, - device: m.device, - rest: name.substring(m.path.length, name.length)}; - } - if(! res && fs_node_supported()){ - var root = caml_get_root(name); - if(root && root.match(/^[a-zA-Z]:\/$/)){ - var m = {path: root, device: new MlNodeDevice(root)}; - jsoo_mount_point.push(m); - res = - {path: m.path, - device: m.device, - rest: name.substring(m.path.length, name.length)}; - } - } - if(res) return res; - caml_raise_sys_error("no device found for " + name_slash); - } - function caml_create_file(name, content){ - var root = resolve_fs_device(name); - if(! root.device.register) caml_failwith("cannot register file"); - root.device.register(root.rest, content); - return 0; - } - function jsoo_create_file(name, content){ - var - name = caml_string_of_jsbytes(name), - content = caml_string_of_jsbytes(content); - return caml_create_file(name, content); - } - function caml_fs_init(){ - var tmp = globalThis.caml_fs_tmp; - if(tmp) - for(var i = 0; i < tmp.length; i++) - jsoo_create_file(tmp[i].name, tmp[i].content); - globalThis.jsoo_create_file = jsoo_create_file; - globalThis.caml_fs_tmp = []; - return 0; - } - function caml_get_current_callstack(){return [0];} - function caml_get_exception_raw_backtrace(){return [0];} - function caml_greaterequal(x, y){ - return + (caml_compare_val(x, y, false) >= 0); - } - function caml_hash_mix_jsbytes(h, s){ - var len = s.length, i, w; - for(i = 0; i + 4 <= len; i += 4){ - w = - s.charCodeAt(i) | s.charCodeAt(i + 1) << 8 | s.charCodeAt(i + 2) << 16 - | s.charCodeAt(i + 3) << 24; - h = caml_hash_mix_int(h, w); - } - w = 0; - switch(len & 3){ - case 3: - w = s.charCodeAt(i + 2) << 16; - case 2: - w |= s.charCodeAt(i + 1) << 8; - case 1: - w |= s.charCodeAt(i); h = caml_hash_mix_int(h, w); - } - h ^= len; - return h; - } - function caml_hash_mix_string(h, v){ - return caml_hash_mix_jsbytes(h, caml_jsbytes_of_string(v)); - } - function caml_hash_mix_bytes_arr(h, s){ - var len = s.length, i, w; - for(i = 0; i + 4 <= len; i += 4){ - w = s[i] | s[i + 1] << 8 | s[i + 2] << 16 | s[i + 3] << 24; - h = caml_hash_mix_int(h, w); - } - w = 0; - switch(len & 3){ - case 3: - w = s[i + 2] << 16; - case 2: - w |= s[i + 1] << 8; - case 1: - w |= s[i]; h = caml_hash_mix_int(h, w); - } - h ^= len; - return h; - } - function caml_ml_bytes_content(s){ - switch(s.t & 6){ - default: caml_convert_string_to_bytes(s); - case 0: - return s.c; - case 4: - return s.c; - } - } - function caml_hash_mix_bytes(h, v){ - var content = caml_ml_bytes_content(v); - return typeof content === "string" - ? caml_hash_mix_jsbytes(h, content) - : caml_hash_mix_bytes_arr(h, content); - } - function caml_hash_mix_final(h){ - h ^= h >>> 16; - h = caml_mul(h, 0x85ebca6b | 0); - h ^= h >>> 13; - h = caml_mul(h, 0xc2b2ae35 | 0); - h ^= h >>> 16; - return h; - } - function caml_hash(count, limit, seed, obj){ - var queue, rd, wr, sz, num, h, v, i, len; - sz = limit; - if(sz < 0 || sz > 256) sz = 256; - num = count; - h = seed; - queue = [obj]; - rd = 0; - wr = 1; - while(rd < wr && num > 0){ - v = queue[rd++]; - if(v && v.caml_custom){ - if - (caml_custom_ops[v.caml_custom] && caml_custom_ops[v.caml_custom].hash){ - var hh = caml_custom_ops[v.caml_custom].hash(v); - h = caml_hash_mix_int(h, hh); - num--; - } - } - else if(v instanceof Array && v[0] === (v[0] | 0)) - switch(v[0]){ - case 248: - h = caml_hash_mix_int(h, v[2]); num--; break; - case 250: - queue[--rd] = v[1]; break; - default: - if(caml_is_continuation_tag(v[0])) break; - var tag = v.length - 1 << 10 | v[0]; - h = caml_hash_mix_int(h, tag); - for(i = 1, len = v.length; i < len; i++){if(wr >= sz) break; queue[wr++] = v[i]; - } - break; - } - else if(caml_is_ml_bytes(v)){ - h = caml_hash_mix_bytes(h, v); - num--; - } - else if(caml_is_ml_string(v)){ - h = caml_hash_mix_string(h, v); - num--; - } - else if(typeof v === "string"){ - h = caml_hash_mix_jsbytes(h, v); - num--; - } - else if(v === (v | 0)){ - h = caml_hash_mix_int(h, v + v + 1); - num--; - } - else if(typeof v === "number"){h = caml_hash_mix_float(h, v); num--;} - } - h = caml_hash_mix_final(h); - return h & 0x3FFFFFFF; - } - function caml_hexstring_of_float(x, prec, style){ - if(! isFinite(x)){ - if(isNaN(x)) return caml_string_of_jsstring("nan"); - return caml_string_of_jsstring(x > 0 ? "infinity" : "-infinity"); - } - var sign = x == 0 && 1 / x == - Infinity ? 1 : x >= 0 ? 0 : 1; - if(sign) x = - x; - var exp = 0; - if(x == 0) - ; - else if(x < 1) - while(x < 1 && exp > - 1022){x *= 2; exp--;} - else - while(x >= 2){x /= 2; exp++;} - var exp_sign = exp < 0 ? "" : "+", sign_str = ""; - if(sign) - sign_str = "-"; - else - switch(style){ - case 43: - sign_str = "+"; break; - case 32: - sign_str = " "; break; - default: break; - } - if(prec >= 0 && prec < 13){ - var cst = Math.pow(2, prec * 4); - x = Math.round(x * cst) / cst; - } - var x_str = x.toString(16); - if(prec >= 0){ - var idx = x_str.indexOf("."); - if(idx < 0) - x_str += "." + caml_str_repeat(prec, "0"); - else{ - var size = idx + 1 + prec; - if(x_str.length < size) - x_str += caml_str_repeat(size - x_str.length, "0"); - else - x_str = x_str.substr(0, size); - } - } - return caml_string_of_jsstring - (sign_str + "0x" + x_str + "p" + exp_sign + exp.toString(10)); - } - function caml_int64_is_zero(x){return + x.isZero();} - function caml_int64_of_int32(x){ - return new MlInt64(x & 0xffffff, x >> 24 & 0xffffff, x >> 31 & 0xffff); - } - function caml_int64_to_int32(x){return x.toInt();} - function caml_int64_is_negative(x){return + x.isNeg();} - function caml_int64_neg(x){return x.neg();} - function caml_int64_format(fmt, x){ - var f = caml_parse_format(fmt); - if(f.signedconv && caml_int64_is_negative(x)){f.sign = - 1; x = caml_int64_neg(x);} - var - buffer = "", - wbase = caml_int64_of_int32(f.base), - cvtbl = "0123456789abcdef"; - do{ - var p = x.udivmod(wbase); - x = p.quotient; - buffer = cvtbl.charAt(caml_int64_to_int32(p.modulus)) + buffer; - } - while - (! caml_int64_is_zero(x)); - if(f.prec >= 0){ - f.filler = " "; - var n = f.prec - buffer.length; - if(n > 0) buffer = caml_str_repeat(n, "0") + buffer; - } - return caml_finish_formatting(f, buffer); - } - function caml_parse_sign_and_base(s){ - var i = 0, len = caml_ml_string_length(s), base = 10, sign = 1; - if(len > 0) - switch(caml_string_unsafe_get(s, i)){ - case 45: - i++; sign = - 1; break; - case 43: - i++; sign = 1; break; - } - if(i + 1 < len && caml_string_unsafe_get(s, i) == 48) - switch(caml_string_unsafe_get(s, i + 1)){ - case 120: - case 88: - base = 16; i += 2; break; - case 111: - case 79: - base = 8; i += 2; break; - case 98: - case 66: - base = 2; i += 2; break; - case 117: - case 85: - i += 2; break; - } - return [i, sign, base]; - } - function caml_parse_digit(c){ - if(c >= 48 && c <= 57) return c - 48; - if(c >= 65 && c <= 90) return c - 55; - if(c >= 97 && c <= 122) return c - 87; - return - 1; - } - function caml_int_of_string(s){ - var - r = caml_parse_sign_and_base(s), - i = r[0], - sign = r[1], - base = r[2], - len = caml_ml_string_length(s), - threshold = - 1 >>> 0, - c = i < len ? caml_string_unsafe_get(s, i) : 0, - d = caml_parse_digit(c); - if(d < 0 || d >= base) caml_failwith("int_of_string"); - var res = d; - for(i++; i < len; i++){ - c = caml_string_unsafe_get(s, i); - if(c == 95) continue; - d = caml_parse_digit(c); - if(d < 0 || d >= base) break; - res = base * res + d; - if(res > threshold) caml_failwith("int_of_string"); - } - if(i != len) caml_failwith("int_of_string"); - res = sign * res; - if(base == 10 && (res | 0) != res) caml_failwith("int_of_string"); - return res | 0; - } - function caml_js_from_array(a){return a.slice(1);} - function caml_js_meth_call(o, f, args){ - return o[caml_jsstring_of_string(f)].apply(o, caml_js_from_array(args)); - } - function caml_js_new(c, a){ - switch(a.length){ - case 1: - return new c; - case 2: - return new c(a[1]); - case 3: - return new c(a[1], a[2]); - case 4: - return new c(a[1], a[2], a[3]); - case 5: - return new c(a[1], a[2], a[3], a[4]); - case 6: - return new c(a[1], a[2], a[3], a[4], a[5]); - case 7: - return new c(a[1], a[2], a[3], a[4], a[5], a[6]); - case 8: - return new c(a[1], a[2], a[3], a[4], a[5], a[6], a[7]); - } - function F(){return c.apply(this, caml_js_from_array(a));} - F.prototype = c.prototype; - return new F; - } - function caml_js_object(a){ - var o = {}; - for(var i = 1; i < a.length; i++){ - var p = a[i]; - o[caml_jsstring_of_string(p[1])] = p[2]; - } - return o; - } - function caml_js_to_array(a){ - var len = a.length, b = new Array(len + 1); - b[0] = 0; - for(var i = 0; i < len; i++) b[i + 1] = a[i]; - return b; - } - var caml_callback = caml_call_gen; - function caml_js_wrap_callback_strict(arity, f){ - return function(){ - var - n = arguments.length, - args = new Array(arity), - len = Math.min(arguments.length, arity); - for(var i = 0; i < len; i++) args[i] = arguments[i]; - return caml_callback(f, args);}; - } - function caml_lazy_make_forward(v){return [250, v];} - function caml_lessthan(x, y){return + (caml_compare_val(x, y, false) < 0);} - function caml_lex_array(s){ - s = caml_jsbytes_of_string(s); - var l = s.length / 2, a = new Array(l); - for(var i = 0; i < l; i++) - a[i] = (s.charCodeAt(2 * i) | s.charCodeAt(2 * i + 1) << 8) << 16 >> 16; - return a; - } - function caml_lex_engine(tbl, start_state, lexbuf){ - var - lex_buffer = 2, - lex_buffer_len = 3, - lex_start_pos = 5, - lex_curr_pos = 6, - lex_last_pos = 7, - lex_last_action = 8, - lex_eof_reached = 9, - lex_base = 1, - lex_backtrk = 2, - lex_default = 3, - lex_trans = 4, - lex_check = 5; - if(! tbl.lex_default){ - tbl.lex_base = caml_lex_array(tbl[lex_base]); - tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]); - tbl.lex_check = caml_lex_array(tbl[lex_check]); - tbl.lex_trans = caml_lex_array(tbl[lex_trans]); - tbl.lex_default = caml_lex_array(tbl[lex_default]); - } - var - c, - state = start_state, - buffer = caml_uint8_array_of_bytes(lexbuf[lex_buffer]); - if(state >= 0){ - lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos]; - lexbuf[lex_last_action] = - 1; - } - else - state = - state - 1; - for(;;){ - var base = tbl.lex_base[state]; - if(base < 0) return - base - 1; - var backtrk = tbl.lex_backtrk[state]; - if(backtrk >= 0){ - lexbuf[lex_last_pos] = lexbuf[lex_curr_pos]; - lexbuf[lex_last_action] = backtrk; - } - if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len]) - if(lexbuf[lex_eof_reached] == 0) return - state - 1; else c = 256; - else{c = buffer[lexbuf[lex_curr_pos]]; lexbuf[lex_curr_pos]++;} - if(tbl.lex_check[base + c] == state) - state = tbl.lex_trans[base + c]; - else - state = tbl.lex_default[state]; - if(state < 0){ - lexbuf[lex_curr_pos] = lexbuf[lex_last_pos]; - if(lexbuf[lex_last_action] == - 1) - caml_failwith("lexing: empty token"); - else - return lexbuf[lex_last_action]; - } - else if(c == 256) lexbuf[lex_eof_reached] = 0; - } - } - function caml_list_of_js_array(a){ - var l = 0; - for(var i = a.length - 1; i >= 0; i--){var e = a[i]; l = [0, e, l];} - return l; - } - function caml_list_to_js_array(l){ - var a = []; - for(; l !== 0; l = l[2]) a.push(l[1]); - return a; - } - function caml_make_vect(len, init){ - if(len < 0) caml_array_bound_error(); - var len = len + 1 | 0, b = new Array(len); - b[0] = 0; - for(var i = 1; i < len; i++) b[i] = init; - return b; - } - function caml_MD5Init(){ - var - buffer = new ArrayBuffer(64), - b32 = new Uint32Array(buffer), - b8 = new Uint8Array(buffer); - return {len: 0, - w: - new Uint32Array([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476]), - b32: b32, - b8: b8}; - } - var - caml_MD5Transform = - function(){ - function add(x, y){return x + y | 0;} - function xx(q, a, b, x, s, t){ - a = add(add(a, q), add(x, t)); - return add(a << s | a >>> 32 - s, b); - } - function ff(a, b, c, d, x, s, t){ - return xx(b & c | ~ b & d, a, b, x, s, t); - } - function gg(a, b, c, d, x, s, t){ - return xx(b & d | c & ~ d, a, b, x, s, t); - } - function hh(a, b, c, d, x, s, t){return xx(b ^ c ^ d, a, b, x, s, t);} - function ii(a, b, c, d, x, s, t){ - return xx(c ^ (b | ~ d), a, b, x, s, t); - } - return function(w, buffer){ - var a = w[0], b = w[1], c = w[2], d = w[3]; - a = ff(a, b, c, d, buffer[0], 7, 0xD76AA478); - d = ff(d, a, b, c, buffer[1], 12, 0xE8C7B756); - c = ff(c, d, a, b, buffer[2], 17, 0x242070DB); - b = ff(b, c, d, a, buffer[3], 22, 0xC1BDCEEE); - a = ff(a, b, c, d, buffer[4], 7, 0xF57C0FAF); - d = ff(d, a, b, c, buffer[5], 12, 0x4787C62A); - c = ff(c, d, a, b, buffer[6], 17, 0xA8304613); - b = ff(b, c, d, a, buffer[7], 22, 0xFD469501); - a = ff(a, b, c, d, buffer[8], 7, 0x698098D8); - d = ff(d, a, b, c, buffer[9], 12, 0x8B44F7AF); - c = ff(c, d, a, b, buffer[10], 17, 0xFFFF5BB1); - b = ff(b, c, d, a, buffer[11], 22, 0x895CD7BE); - a = ff(a, b, c, d, buffer[12], 7, 0x6B901122); - d = ff(d, a, b, c, buffer[13], 12, 0xFD987193); - c = ff(c, d, a, b, buffer[14], 17, 0xA679438E); - b = ff(b, c, d, a, buffer[15], 22, 0x49B40821); - a = gg(a, b, c, d, buffer[1], 5, 0xF61E2562); - d = gg(d, a, b, c, buffer[6], 9, 0xC040B340); - c = gg(c, d, a, b, buffer[11], 14, 0x265E5A51); - b = gg(b, c, d, a, buffer[0], 20, 0xE9B6C7AA); - a = gg(a, b, c, d, buffer[5], 5, 0xD62F105D); - d = gg(d, a, b, c, buffer[10], 9, 0x02441453); - c = gg(c, d, a, b, buffer[15], 14, 0xD8A1E681); - b = gg(b, c, d, a, buffer[4], 20, 0xE7D3FBC8); - a = gg(a, b, c, d, buffer[9], 5, 0x21E1CDE6); - d = gg(d, a, b, c, buffer[14], 9, 0xC33707D6); - c = gg(c, d, a, b, buffer[3], 14, 0xF4D50D87); - b = gg(b, c, d, a, buffer[8], 20, 0x455A14ED); - a = gg(a, b, c, d, buffer[13], 5, 0xA9E3E905); - d = gg(d, a, b, c, buffer[2], 9, 0xFCEFA3F8); - c = gg(c, d, a, b, buffer[7], 14, 0x676F02D9); - b = gg(b, c, d, a, buffer[12], 20, 0x8D2A4C8A); - a = hh(a, b, c, d, buffer[5], 4, 0xFFFA3942); - d = hh(d, a, b, c, buffer[8], 11, 0x8771F681); - c = hh(c, d, a, b, buffer[11], 16, 0x6D9D6122); - b = hh(b, c, d, a, buffer[14], 23, 0xFDE5380C); - a = hh(a, b, c, d, buffer[1], 4, 0xA4BEEA44); - d = hh(d, a, b, c, buffer[4], 11, 0x4BDECFA9); - c = hh(c, d, a, b, buffer[7], 16, 0xF6BB4B60); - b = hh(b, c, d, a, buffer[10], 23, 0xBEBFBC70); - a = hh(a, b, c, d, buffer[13], 4, 0x289B7EC6); - d = hh(d, a, b, c, buffer[0], 11, 0xEAA127FA); - c = hh(c, d, a, b, buffer[3], 16, 0xD4EF3085); - b = hh(b, c, d, a, buffer[6], 23, 0x04881D05); - a = hh(a, b, c, d, buffer[9], 4, 0xD9D4D039); - d = hh(d, a, b, c, buffer[12], 11, 0xE6DB99E5); - c = hh(c, d, a, b, buffer[15], 16, 0x1FA27CF8); - b = hh(b, c, d, a, buffer[2], 23, 0xC4AC5665); - a = ii(a, b, c, d, buffer[0], 6, 0xF4292244); - d = ii(d, a, b, c, buffer[7], 10, 0x432AFF97); - c = ii(c, d, a, b, buffer[14], 15, 0xAB9423A7); - b = ii(b, c, d, a, buffer[5], 21, 0xFC93A039); - a = ii(a, b, c, d, buffer[12], 6, 0x655B59C3); - d = ii(d, a, b, c, buffer[3], 10, 0x8F0CCC92); - c = ii(c, d, a, b, buffer[10], 15, 0xFFEFF47D); - b = ii(b, c, d, a, buffer[1], 21, 0x85845DD1); - a = ii(a, b, c, d, buffer[8], 6, 0x6FA87E4F); - d = ii(d, a, b, c, buffer[15], 10, 0xFE2CE6E0); - c = ii(c, d, a, b, buffer[6], 15, 0xA3014314); - b = ii(b, c, d, a, buffer[13], 21, 0x4E0811A1); - a = ii(a, b, c, d, buffer[4], 6, 0xF7537E82); - d = ii(d, a, b, c, buffer[11], 10, 0xBD3AF235); - c = ii(c, d, a, b, buffer[2], 15, 0x2AD7D2BB); - b = ii(b, c, d, a, buffer[9], 21, 0xEB86D391); - w[0] = add(a, w[0]); - w[1] = add(b, w[1]); - w[2] = add(c, w[2]); - w[3] = add(d, w[3]);}; - } - (); - function caml_MD5Update(ctx, input, input_len){ - var in_buf = ctx.len & 0x3f, input_pos = 0; - ctx.len += input_len; - if(in_buf){ - var missing = 64 - in_buf; - if(input_len < missing){ - ctx.b8.set(input.subarray(0, input_len), in_buf); - return; - } - ctx.b8.set(input.subarray(0, missing), in_buf); - caml_MD5Transform(ctx.w, ctx.b32); - input_len -= missing; - input_pos += missing; - } - while(input_len >= 64){ - ctx.b8.set(input.subarray(input_pos, input_pos + 64), 0); - caml_MD5Transform(ctx.w, ctx.b32); - input_len -= 64; - input_pos += 64; - } - if(input_len) - ctx.b8.set(input.subarray(input_pos, input_pos + input_len), 0); - } - function caml_MD5Final(ctx){ - var in_buf = ctx.len & 0x3f; - ctx.b8[in_buf] = 0x80; - in_buf++; - if(in_buf > 56){ - for(var j = in_buf; j < 64; j++) ctx.b8[j] = 0; - caml_MD5Transform(ctx.w, ctx.b32); - for(var j = 0; j < 56; j++) ctx.b8[j] = 0; - } - else - for(var j = in_buf; j < 56; j++) ctx.b8[j] = 0; - ctx.b32[14] = ctx.len << 3; - ctx.b32[15] = ctx.len >> 29 & 0x1FFFFFFF; - caml_MD5Transform(ctx.w, ctx.b32); - var t = new Uint8Array(16); - for(var i = 0; i < 4; i++) - for(var j = 0; j < 4; j++) t[i * 4 + j] = ctx.w[i] >> 8 * j & 0xFF; - return t; - } - function caml_string_of_array(a){ - return caml_string_of_jsbytes(caml_subarray_to_jsbytes(a, 0, a.length)); - } - function caml_md5_bytes(s, ofs, len){ - var ctx = caml_MD5Init(), a = caml_uint8_array_of_bytes(s); - caml_MD5Update(ctx, a.subarray(ofs, ofs + len), len); - return caml_string_of_array(caml_MD5Final(ctx)); - } - function caml_md5_string(s, ofs, len){ - return caml_md5_bytes(caml_bytes_of_string(s), ofs, len); - } - function caml_ml_debug_info_status(){return 0;} - var caml_ml_channels = new Array(); - function caml_ml_channel_get(id){return caml_ml_channels[id];} - function caml_ml_flush(chanid){ - var chan = caml_ml_channel_get(chanid); - if(! chan.opened) caml_raise_sys_error("Cannot flush a closed channel"); - if(! chan.buffer || chan.buffer_curr == 0) return 0; - if(chan.output) - chan.output(caml_subarray_to_jsbytes(chan.buffer, 0, chan.buffer_curr)); - else - chan.file.write(chan.offset, chan.buffer, 0, chan.buffer_curr); - chan.offset += chan.buffer_curr; - chan.buffer_curr = 0; - return 0; - } - function caml_sys_open_for_node(fd, flags){ - if(flags.name) - try{ - var fs = require("fs"), fd2 = fs.openSync(flags.name, "rs"); - return new MlNodeFd(fd2, flags); - } - catch(e){} - return new MlNodeFd(fd, flags); - } - var caml_sys_fds = new Array(3); - function MlFakeFd_out(fd, flags){ - MlFakeFile.call(this, caml_create_bytes(0)); - this.log = function(s){return 0;}; - if(fd == 1 && typeof console.log == "function") - this.log = console.log; - else if(fd == 2 && typeof console.error == "function") - this.log = console.error; - else if(typeof console.log == "function") this.log = console.log; - this.flags = flags; - } - MlFakeFd_out.prototype.length = function(){return 0;}; - MlFakeFd_out.prototype.write = - function(offset, buf, pos, len){ - if(this.log){ - if - (len > 0 && pos >= 0 && pos + len <= buf.length - && buf[pos + len - 1] == 10) - len--; - var src = caml_create_bytes(len); - caml_blit_bytes(caml_bytes_of_array(buf), pos, src, 0, len); - this.log(src.toUtf16()); - return 0; - } - caml_raise_sys_error(this.fd + ": file descriptor already closed"); - }; - MlFakeFd_out.prototype.read = - function(offset, buf, pos, len){ - caml_raise_sys_error(this.fd + ": file descriptor is write only"); - }; - MlFakeFd_out.prototype.close = function(){this.log = undefined;}; - function caml_sys_open_internal(file, idx){ - if(idx == undefined) idx = caml_sys_fds.length; - caml_sys_fds[idx] = file; - return idx | 0; - } - function caml_sys_open(name, flags, _perms){ - var f = {}; - while(flags){ - switch(flags[1]){ - case 0: - f.rdonly = 1; break; - case 1: - f.wronly = 1; break; - case 2: - f.append = 1; break; - case 3: - f.create = 1; break; - case 4: - f.truncate = 1; break; - case 5: - f.excl = 1; break; - case 6: - f.binary = 1; break; - case 7: - f.text = 1; break; - case 8: - f.nonblock = 1; break; - } - flags = flags[2]; - } - if(f.rdonly && f.wronly) - caml_raise_sys_error - (caml_jsbytes_of_string(name) - + " : flags Open_rdonly and Open_wronly are not compatible"); - if(f.text && f.binary) - caml_raise_sys_error - (caml_jsbytes_of_string(name) - + " : flags Open_text and Open_binary are not compatible"); - var root = resolve_fs_device(name), file = root.device.open(root.rest, f); - return caml_sys_open_internal(file, undefined); - } - (function(){ - function file(fd, flags){ - return fs_node_supported() - ? caml_sys_open_for_node(fd, flags) - : new MlFakeFd_out(fd, flags); - } - caml_sys_open_internal - (file(0, {rdonly: 1, altname: "/dev/stdin", isCharacterDevice: true}), - 0); - caml_sys_open_internal - (file(1, {buffered: 2, wronly: 1, isCharacterDevice: true}), 1); - caml_sys_open_internal - (file(2, {buffered: 2, wronly: 1, isCharacterDevice: true}), 2); - } - ()); - function caml_ml_open_descriptor_in(fd){ - var file = caml_sys_fds[fd]; - if(file.flags.wronly) caml_raise_sys_error("fd " + fd + " is writeonly"); - var - refill = null, - channel = - {file: file, - offset: file.flags.append ? file.length() : 0, - fd: fd, - opened: true, - out: false, - buffer_curr: 0, - buffer_max: 0, - buffer: new Uint8Array(65536), - refill: refill}; - caml_ml_channels[channel.fd] = channel; - return channel.fd; - } - function caml_ml_open_descriptor_out(fd){ - var file = caml_sys_fds[fd]; - if(file.flags.rdonly) caml_raise_sys_error("fd " + fd + " is readonly"); - var - buffered = file.flags.buffered !== undefined ? file.flags.buffered : 1, - channel = - {file: file, - offset: file.flags.append ? file.length() : 0, - fd: fd, - opened: true, - out: true, - buffer_curr: 0, - buffer: new Uint8Array(65536), - buffered: buffered}; - caml_ml_channels[channel.fd] = channel; - return channel.fd; - } - function caml_ml_out_channels_list(){ - var l = 0; - for(var c = 0; c < caml_ml_channels.length; c++) - if - (caml_ml_channels[c] && caml_ml_channels[c].opened - && caml_ml_channels[c].out) - l = [0, caml_ml_channels[c].fd, l]; - return l; - } - function caml_ml_output_ta(chanid, buffer, offset, len){ - var chan = caml_ml_channel_get(chanid); - if(! chan.opened) - caml_raise_sys_error("Cannot output to a closed channel"); - buffer = buffer.subarray(offset, offset + len); - if(chan.buffer_curr + buffer.length > chan.buffer.length){ - var b = new Uint8Array(chan.buffer_curr + buffer.length); - b.set(chan.buffer); - chan.buffer = b; - } - switch(chan.buffered){ - case 0: - chan.buffer.set(buffer, chan.buffer_curr); - chan.buffer_curr += buffer.length; - caml_ml_flush(chanid); - break; - case 1: - chan.buffer.set(buffer, chan.buffer_curr); - chan.buffer_curr += buffer.length; - if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid); - break; - case 2: - var id = buffer.lastIndexOf(10); - if(id < 0){ - chan.buffer.set(buffer, chan.buffer_curr); - chan.buffer_curr += buffer.length; - if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid); - } - else{ - chan.buffer.set(buffer.subarray(0, id + 1), chan.buffer_curr); - chan.buffer_curr += id + 1; - caml_ml_flush(chanid); - chan.buffer.set(buffer.subarray(id + 1), chan.buffer_curr); - chan.buffer_curr += buffer.length - id - 1; - } - break; - } - return 0; - } - function caml_ml_output_bytes(chanid, buffer, offset, len){ - var buffer = caml_uint8_array_of_bytes(buffer); - return caml_ml_output_ta(chanid, buffer, offset, len); - } - function caml_ml_output(chanid, buffer, offset, len){ - return caml_ml_output_bytes - (chanid, caml_bytes_of_string(buffer), offset, len); - } - function caml_ml_output_char(chanid, c){ - var s = caml_string_of_jsbytes(String.fromCharCode(c)); - caml_ml_output(chanid, s, 0, 1); - return 0; - } - function caml_mod(x, y){if(y == 0) caml_raise_zero_divide(); return x % y;} - function caml_notequal(x, y){ - return + (caml_compare_val(x, y, false) != 0); - } - function caml_obj_make_forward(b, v){b[0] = 250; b[1] = v; return 0;} - function caml_obj_tag(x){ - if(x instanceof Array && x[0] == x[0] >>> 0) - return x[0]; - else if(caml_is_ml_bytes(x)) - return 252; - else if(caml_is_ml_string(x)) - return 252; - else if(x instanceof Function || typeof x == "function") - return 247; - else if(x && x.caml_custom) return 255; else return 1000; - } - function caml_build_symbols(symb){ - var r = {}; - if(symb) - for(var i = 1; i < symb.length; i++) - r[caml_jsstring_of_string(symb[i][1])] = symb[i][2]; - return r; - } - function caml_register_global(n, v, name_opt){ - if(name_opt){ - var name = name_opt; - if(globalThis.toplevelReloc) - n = caml_callback(globalThis.toplevelReloc, [name]); - else if(caml_global_data.symbols){ - if(! caml_global_data.symidx) - caml_global_data.symidx = caml_build_symbols(caml_global_data.symbols); - var nid = caml_global_data.symidx[name]; - if(nid >= 0) - n = nid; - else - caml_failwith("caml_register_global: cannot locate " + name); - } - } - caml_global_data[n + 1] = v; - if(name_opt) caml_global_data[name_opt] = v; - } - function caml_register_named_value(nm, v){ - caml_named_values[caml_jsbytes_of_string(nm)] = v; - return 0; - } - function caml_string_bound_error(){ - caml_invalid_argument("index out of bounds"); - } - function caml_string_get(s, i){ - if(i >>> 0 >= caml_ml_string_length(s)) caml_string_bound_error(); - return caml_string_unsafe_get(s, i); - } - function caml_string_of_bytes(s){ - s.t & 6 && caml_convert_string_to_bytes(s); - return caml_string_of_jsbytes(s.c); - } - function caml_sys_const_max_wosize(){return 0x7FFFFFFF / 4 | 0;} - function caml_raise_not_found(){ - caml_raise_constant(caml_global_data.Not_found); - } - function caml_sys_getenv(name){ - var r = jsoo_sys_getenv(caml_jsstring_of_string(name)); - if(r === undefined) caml_raise_not_found(); - return caml_string_of_jsstring(r); - } - function caml_sys_random_seed(){ - if(globalThis.crypto) - if(globalThis.crypto.getRandomValues){ - var a = globalThis.crypto.getRandomValues(new Int32Array(4)); - return [0, a[0], a[1], a[2], a[3]]; - } - else if(globalThis.crypto.randomBytes){ - var a = new Int32Array(globalThis.crypto.randomBytes(16).buffer); - return [0, a[0], a[1], a[2], a[3]]; - } - var now = new Date().getTime(), x = now ^ 0xffffffff * Math.random(); - return [0, x]; - } - function caml_trampoline(res){ - var c = 1; - while(res && res.joo_tramp){ - res = res.joo_tramp.apply(null, res.joo_args); - c++; - } - return res; - } - function caml_trampoline_return(f, args){return {joo_tramp: f, joo_args: args}; - } - function caml_update_dummy(x, y){ - if(y.fun){x.fun = y.fun; return 0;} - if(typeof y === "function"){x.fun = y; return 0;} - var i = y.length; - while(i--) x[i] = y[i]; - return 0; - } - function caml_wrap_exception(e){ - { - if(e instanceof Array) return e; - var exn; - if - (globalThis.RangeError && e instanceof globalThis.RangeError - && e.message - && e.message.match(/maximum call stack/i)) - exn = caml_global_data.Stack_overflow; - else if - (globalThis.InternalError && e instanceof globalThis.InternalError - && e.message - && e.message.match(/too much recursion/i)) - exn = caml_global_data.Stack_overflow; - else if(e instanceof globalThis.Error && caml_named_value("jsError")) - exn = [0, caml_named_value("jsError"), e]; - else - exn = [0, caml_global_data.Failure, caml_string_of_jsstring(String(e))]; - if(e instanceof globalThis.Error) exn.js_error = e; - return exn; - } - } - function caml_is_special_exception(exn){ - switch(exn[2]){case - 8:case - 11:case - 12: return 1;default: return 0; - } - } - function caml_format_exception(exn){ - var r = ""; - if(exn[0] == 0){ - r += exn[1][1]; - if - (exn.length == 3 && exn[2][0] == 0 && caml_is_special_exception(exn[1])) - var bucket = exn[2], start = 1; - else - var start = 2, bucket = exn; - r += "("; - for(var i = start; i < bucket.length; i++){ - if(i > start) r += ", "; - var v = bucket[i]; - if(typeof v == "number") - r += v.toString(); - else if(v instanceof MlBytes) - r += '"' + v.toString() + '"'; - else if(typeof v == "string") - r += '"' + v.toString() + '"'; - else - r += "_"; - } - r += ")"; - } - else if(exn[0] == 248) r += exn[1]; - return r; - } - function caml_fatal_uncaught_exception(err){ - if(err instanceof Array && (err[0] == 0 || err[0] == 248)){ - var handler = caml_named_value("Printexc.handle_uncaught_exception"); - if(handler) - caml_callback(handler, [err, false]); - else{ - var - msg = caml_format_exception(err), - at_exit = caml_named_value("Pervasives.do_at_exit"); - if(at_exit) caml_callback(at_exit, [0]); - console.error("Fatal error: exception " + msg); - if(err.js_error) throw err.js_error; - } - } - else - throw err; - } - function caml_setup_uncaught_exception_handler(){ - var process = globalThis.process; - if(process && process.on) - process.on - ("uncaughtException", - function(err, origin){ - caml_fatal_uncaught_exception(err); - process.exit(2); - }); - else if(globalThis.addEventListener) - globalThis.addEventListener - ("error", - function(event){ - if(event.error) caml_fatal_uncaught_exception(event.error); - }); - } - caml_setup_uncaught_exception_handler(); - var - cst$1 = "", - cst$7 = " ", - cst_unfetched = " unfetched: ", - cst_16g = "%.16g", - cst_17g = "%.17g", - cst_Li = "%Li", - cst_d = "%d", - cst_i = "%i", - cst_li = "%li", - cst_ni = "%ni", - cst_s = "%s", - cst_s_id = "%s--id", - cst_s_Items_s_Images_Primary_w = - "%s/Items/%s/Images/Primary?width=500&format=Jpg", - cst_u = "%u", - cst_Program_not_linked_with_g_ = - "(Program not linked with -g, cannot print stack backtrace)\n", - cst$4 = ", ", - cst_characters = ", characters ", - cst_id = "--id", - cst = ".", - cst_0 = ".0", - cst_Images_Primary_width_500_f = "/Images/Primary?width=500&format=Jpg", - cst_Items = "/Items/", - cst_5rem = "5rem", - cst$5 = ": ", - cst$6 = ">", - cst$3 = "@[", - cst$2 = "@{", - cst_AccessToken = "AccessToken", - cst_AggregateFolder = "AggregateFolder", - cst_AlbumId = "AlbumId", - cst_Assert_failure = "Assert_failure", - cst_Audio = "Audio", - cst_AudioBook = "AudioBook", - cst_BasePluginFolder = "BasePluginFolder", - cst_Book = "Book", - cst_BoxSet = "BoxSet", - cst_Channel = "Channel", - cst_ChannelFolderItem = "ChannelFolderItem", - cst_CollectionFolder = "CollectionFolder", - cst_CollectionType = "CollectionType", - cst_Cover = "Cover", - cst_Division_by_zero = "Division_by_zero", - cst_End_of_file = "End_of_file", - cst_Episode = "Episode", - cst_Failed_to_unmarshal_data = "Failed to unmarshal data", - cst_Failure = "Failure", - cst_Fatal_error_exception = "Fatal error: exception ", - cst_Fatal_error_exception_s = "Fatal error: exception %s\n", - cst_Folder = "Folder", - cst_Form_submitted = "Form submitted:", - cst_Genre = "Genre", - cst_Id = "Id", - cst_ImageBlurHashes = "ImageBlurHashes", - cst_Invalid_argument = "Invalid_argument", - cst_LiveTvChannel = "LiveTvChannel", - cst_LiveTvProgram = "LiveTvProgram", - cst_Lwd_seq_rank_node_is_marke = "Lwd_seq.rank: node is marked", - cst_ManualPlaylistsFolder = "ManualPlaylistsFolder", - cst_Map_bal = "Map.bal", - cst_Match_failure = "Match_failure", - cst_Movie = "Movie", - cst_MusicAlbum = "MusicAlbum", - cst_MusicArtist = "MusicArtist", - cst_MusicGenre = "MusicGenre", - cst_MusicVideo = "MusicVideo", - cst_Name = "Name", - cst_Not_found = "Not_found", - cst_Nothing_playing = "Nothing playing", - cst_Out_of_memory = "Out_of_memory", - cst_ParentId = "ParentId", - cst_Path = "Path", - cst_Person = "Person", - cst_Photo = "Photo", - cst_PhotoAlbum = "PhotoAlbum", - cst_Playlist = "Playlist", - cst_PlaylistsFolder = "PlaylistsFolder", - cst_Primary = "Primary", - cst_Program = "Program", - cst_Pw = "Pw", - cst_Recording = "Recording", - cst_Season = "Season", - cst_Series = "Series", - cst_ServerId = "ServerId", - cst_ServerName = "ServerName", - cst_Set_bal = "Set.bal", - cst_SortName = "SortName", - cst_Stack_overflow = "Stack_overflow", - cst_Studio = "Studio", - cst_Synchronized = "Synchronized", - cst_Sys_blocked_io = "Sys_blocked_io", - cst_Sys_error = "Sys_error", - cst_Title = "Title", - cst_Trailer = "Trailer", - cst_TvChannel = "TvChannel", - cst_TvProgram = "TvProgram", - cst_Type = "Type", - cst_Undefined_recursive_module = "Undefined_recursive_module", - cst_Unexpected_end_of_input = "Unexpected end of input", - cst_User = "User", - cst_UserRootFolder = "UserRootFolder", - cst_UserView = "UserView", - cst_Username = "Username", - cst_Video = "Video", - cst_Year = "Year", - cst$0 = "\\\\", - cst_b = "\\b", - cst_n = "\\n", - cst_r = "\\r", - cst_t = "\\t", - cst_append = "append", - cst_asc = "asc", - cst_background_image_url = "background-image: url(", - cst_background_image_url_S = "background-image: url(%S)", - cst_body = "body", - cst_box = "box", - cst_buffer_ml = "buffer.ml", - cst_button = "button", - cst_camlinternalFormat_ml = "camlinternalFormat.ml", - cst_checked = "checked", - cst_class = "class", - cst_classList = "classList", - cst_click = "click", - cst_console = "console", - cst_date_added = "date_added", - cst_desc = "desc", - cst_documentElement = "documentElement", - cst_duration = "duration", - cst_em = "em", - cst_error = "error", - cst_false = "false", - cst_fut = "fut", - cst_grid_column_1_1 = "grid-column:1/-1", - cst_height = "height: ", - cst_id$0 = "id", - cst_item = "item", - cst_item_Id = "item.Id", - cst_length = "length", - cst_lib_db_stores_ml = "lib/db/stores.ml", - cst_lwd_to_remove = "lwd-to-remove", - cst_lwdui_virtual_table_row = "lwdui-virtual-table-row", - cst_name = "name", - cst_null = "null", - cst_pathname = "pathname", - cst_playbackRate = "playbackRate", - cst_pouet = "pouet", - cst_px = "px", - cst_random = "random", - cst_rem = "rem", - cst_remove = "remove", - cst_scroll = "scroll", - cst_server_id = "server_id", - cst_sort_name = "sort_name", - cst_sorts = "sorts", - cst_sorts_views = "sorts.views", - cst_src = "src", - cst_style = "style", - cst_submit = "submit", - cst_text = "text", - cst_track_png = "track.png", - cst_true = "true", - cst_type = "type", - cst_value = "value", - cst_vendor_lwd_lib_brr_lwd_elw = "vendor/lwd/lib/brr-lwd/elwd.ml", - cst_vendor_lwd_lib_lwd_lwd_ml = "vendor/lwd/lib/lwd/lwd.ml", - cst_vendor_lwd_lib_lwd_lwd_seq = "vendor/lwd/lib/lwd/lwd_seq.pp.ml", - cst_vendor_lwd_lib_lwd_lwd_tab = "vendor/lwd/lib/lwd/lwd_table.ml", - cst_views = "views", - cst_window = "window"; - function caml_call1(f, a0){ - return (f.l >= 0 ? f.l : f.l = f.length) == 1 - ? f(a0) - : caml_call_gen(f, [a0]); - } - function caml_call2(f, a0, a1){ - return (f.l >= 0 ? f.l : f.l = f.length) == 2 - ? f(a0, a1) - : caml_call_gen(f, [a0, a1]); - } - function caml_call3(f, a0, a1, a2){ - return (f.l >= 0 ? f.l : f.l = f.length) == 3 - ? f(a0, a1, a2) - : caml_call_gen(f, [a0, a1, a2]); - } - function caml_call4(f, a0, a1, a2, a3){ - return (f.l >= 0 ? f.l : f.l = f.length) == 4 - ? f(a0, a1, a2, a3) - : caml_call_gen(f, [a0, a1, a2, a3]); - } - function caml_call5(f, a0, a1, a2, a3, a4){ - return (f.l >= 0 ? f.l : f.l = f.length) == 5 - ? f(a0, a1, a2, a3, a4) - : caml_call_gen(f, [a0, a1, a2, a3, a4]); - } - function caml_call7(f, a0, a1, a2, a3, a4, a5, a6){ - return (f.l >= 0 ? f.l : f.l = f.length) == 7 - ? f(a0, a1, a2, a3, a4, a5, a6) - : caml_call_gen(f, [a0, a1, a2, a3, a4, a5, a6]); - } - var undef = undefined; - caml_fs_init(); - var - Out_of_memory = [248, cst_Out_of_memory, -1], - Sys_error = [248, cst_Sys_error, -2], - Failure = [248, cst_Failure, -3], - Invalid_argument = [248, cst_Invalid_argument, -4], - End_of_file = [248, cst_End_of_file, -5], - Division_by_zero = [248, cst_Division_by_zero, -6], - Not_found = [248, cst_Not_found, -7], - Match_failure = [248, cst_Match_failure, -8], - Stack_overflow = [248, cst_Stack_overflow, -9], - Sys_blocked_io = [248, cst_Sys_blocked_io, -10], - Assert_failure = [248, cst_Assert_failure, -11], - Undefined_recursive_module = [248, cst_Undefined_recursive_module, -12], - dummy_pos = [0, cst$1, 0, 0, -1], - zero_pos = [0, cst$1, 1, 0, 0], - partial = [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, 0]]], - locfmt = - [0, - [11, - 'File "', - [2, - 0, - [11, - '", line ', - [4, - 0, - 0, - 0, - [11, - cst_characters, - [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$5, [2, 0, 0]]]]]]]]]], - 'File "%s", line %d, characters %d-%d: %s'], - empty$2 = [0, 0], - empty$3 = [0, 0], - ocaml_lex_tables = - [0, - "\0\0\xfe\xff\xff\xff", - "\xff\xff\xff\xff\xff\xff", - "\x01\0\0\0\0\0", - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0", - "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0", - cst$1, - cst$1, - cst$1, - cst$1, - cst$1, - cst$1], - ocaml_lex_tables$0 = - [0, - "\0\0\xec\xff\xed\xff\x03\0\xef\xff\x10\0\xf2\xff\xf3\xff\xf4\xff\xf5\xff\0\0\x1f\0\xf9\xffU\0\x01\0\0\0\0\0\x01\0\0\0\x01\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x01\0\x04\0\xfd\xff\x0b\0\xfc\xff\x03\0\x01\0\x03\0\x02\0\x03\0\0\0\xfb\xff\x15\0a\0\n\0\x16\0\x14\0\x10\0\x16\0\f\0\b\0\xfa\xffw\0\x81\0\x8b\0\xa1\0\xab\0\xb5\0\xc1\0\xd1\0\xf0\xff\x0b\0&\0\xfc\xffA\0\xfe\xff\xff\xffn\0\xfc\xff\xa3\0\xfe\xff\xff\xff\xea\0\xf7\xff\xf8\xff0\x01\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xffG\x01~\x01\x95\x01\xf9\xff'\0\xfd\xff\xfe\xff&\0\xbb\x01\xd2\x01\xf8\x01\x0f\x02\xff\xff\xdc\0\xfd\xff\xff\xff\xf5\0'\x02m\x02\x0e\x01X\x02\xa4\x02\xbb\x02\xe1\x02\r\0\xfc\xff\xfd\xff\xfe\xff\xff\xff\x0e\0\xfd\xff\xfe\xff\xff\xff\x1e\0\xfd\xff\xfe\xff\xff\xff\x0f\0\xfd\xff\xfe\xff\xff\xff\x11\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\x13\0\xfc\xff\xfd\xff\xfe\xff\x0f\0\xff\xff\x10\0\xff\xff\b\x01\x05\0\xfd\xff\x17\0\xfe\xff\x14\0\xff\xff.\0\xfd\xff\xfe\xff*\x004\x005\0\xff\xff5\x000\0[\0\\\0\xff\xff\x1b\x01\xfa\xff\xfb\xff\x89\0h\0Y\0X\0j\0\xff\xff\x8f\0\x89\0\xb1\0\xfe\xff\xb7\0\xa8\0\xa6\0\xb7\0\x02\0\xfd\xff\xb1\0\xac\0\xbb\0\x04\0\xfc\xff5\x02\xfb\xff\xfc\xff\xfd\xffg\x01\xff\xff\xf8\x02\xfe\xff\x06\x03\x1e\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff(\x032\x03J\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff=\x03T\x03l\x03\xf9\xff\xfa\xff\xfb\xff\xf4\0x\x03\x8e\x03\xb3\0\xc2\0\x0f\0\xff\xff\xbe\0\xbc\0\xbb\0\xc1\0\xb7\0\xb3\0\xfe\xff\xbf\0\xc9\0\xc8\0\xc4\0\xcb\0\xc1\0\xbd\0\xfd\xff\x9d\x03_\x03\xae\x03\xc4\x03\xce\x03\xd8\x03\xe4\x03\xef\x03<\0\xfd\xff\xfe\xff\xff\xff\f\x04\xfc\xff\xfd\xffW\x04\xff\xff\x91\x04\xfc\xff\xfd\xff\xdd\x04\xff\xff\xe5\0\xfd\xff\xfe\xff\xff\xff\xe7\0\xfd\xff\xfe\xff\xff\xff\x02\0\xff\xff\x12\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\"\x01\xfd\xff\xfe\xff\xff\xff\0\0\xff\xff\x03\0\xfe\xff\xff\xff&\x01\xfc\xff\xfd\xff\xfe\xff\xff\xffx\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\xd0\0\xfd\xff\xfe\xff\xff\xff\xd3\0\xfd\xff\xfe\xff\xff\xff\xbd\0\xff\xff\x8f\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\r\x01\xfd\xff\xfe\xff\xff\xff_\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff2\x01\xfd\xff\xfe\xff\xff\xff\x1a\x01\xfd\xff\xfe\xff\xff\xff\xe9\0\xfd\xff\xfe\xff\xff\xff\xde\0\xfd\xff\xfe\xff\xff\xffO\x05\xed\xff\xee\xff\n\0\xf0\xff,\x01\xf3\xff\xf4\xff\xf5\xff\xf6\xff=\x01\x02\x04\xf9\xff-\x05\xd1\0\xe4\0\xd3\0\xe8\0\xe1\0\xdf\0\xf0\0\xff\xff\xeb\0\xea\0\b\x01\xfe\xff\x04\x01\x17\x01\xfd\xff6\x01\xfc\xff\x1f\x01\x1d\x01 \x01'\x011\x01-\x01\xfb\xff9\x01R\x01P\x01N\x01T\x01J\x01V\x01\xfa\xffn\x05\f\x04{\x05\x9b\x05\xa5\x05\xb1\x05\xbb\x05\xc5\x05\xf1\xff\xc7\x01M\x02\xfd\xff\xff\xff\x9a\x02\xde\x05\xd1\x05\x9b\x02\xef\x055\x06L\x06r\x06\x10\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x98\x06\xfc\xff\xfd\xff\xe3\x06\xff\xffU\x07\xf4\xff\xf5\xff\x0b\0\xf7\xffL\x02\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\x1f\x02\xf3\x053\x07d\x01s\x01h\x01\x85\x01v\x01\x9a\x01\xab\x01\xff\xff\xad\x01\xb0\x01\xbf\x01\xb9\x01\xbb\x01\xfd\x01\xe6\x01\xe6\x01\xea\x01\xf7\x01\xed\x01\xea\x01\t\x02\x13\x02\x13\x02\x0f\x02\x15\x02\x0b\x02\x07\x02\x8e\x06\x98\x06t\x07\xaa\x07\xb4\x07\xbe\x07\xc8\x07\xd2\x07\xf8\xffx\x02\xa7\x02\xfd\xff\xff\xff\xd8\x02R\x07\xdc\x07\xec\x02\xf4\x07:\bQ\bw\bL\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x9d\b\xfc\xff\xfd\xff\xe8\b\xff\xff\x87\x02x\x02\xfd\xffd\x02\xfe\xff\xb6\x02\xff\xff\x0b\x02\xff\xff\xcc\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff.\x02\xff\xff\xb2\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x17\0\xff\xff\xb7\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\xbb\x02\xfd\xff\xfe\xff\xff\xffy\x02\xfd\xff\xfe\xff\xff\xff\xb8\x02\xfc\xff\xfd\xff\xfe\xff\x13\0\xff\xff", - "\xff\xff\xff\xff\xff\xff\x11\0\xff\xff\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x13\0\x13\0\x13\0\x13\0\x13\0\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\t\0\xff\xff\t\0\xff\xff\xff\xff\x0e\0\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\x04\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\0\0\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\x03\0\x05\0\x05\0\x05\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x03\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\xff\xff\b\0\xff\xff\b\0\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff", - "\x01\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\x009\0<\0\0\0<\0\0\0\0\0A\0\0\0A\0\0\0\0\0F\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0T\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0^\0\0\0\0\0a\0\xff\xff\xff\xffa\0\xff\xff\xff\xff\xff\xff\xff\xffh\0\0\0\0\0\0\0\0\0m\0\0\0\0\0\0\0q\0\0\0\0\0\0\0u\0\0\0\0\0\0\0y\0\0\0\0\0\0\0\0\0\0\0~\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\x8a\0\0\0\x8e\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x9a\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xb2\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xbb\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc2\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc9\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\0\0\0\0\0\0\xef\0\0\0\0\0\xff\xff\0\0\xf4\0\0\0\0\0\xff\xff\0\0\xf9\0\0\0\0\0\0\0\xfd\0\0\0\0\0\0\0\xff\xff\0\0\x03\x01\0\0\0\0\0\0\0\0\b\x01\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\x11\x01\0\0\0\0\0\0\0\0\x16\x01\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\0\0 \x01\0\0\0\0\0\0\xff\xff\0\0&\x01\0\0\0\0\0\0\0\0+\x01\0\0\0\0\0\0/\x01\0\0\0\0\0\0\0\x004\x01\0\0\0\0\0\x008\x01\0\0\0\0\0\0<\x01\0\0\0\0\0\0@\x01\0\0\0\0\0\0C\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0y\x01}\x01\0\0\0\0\x80\x01\xff\xff\xff\xff\x80\x01\xff\xff\xff\xff\xff\xff\xff\xff\x87\x01\0\0\0\0\0\0\0\0\x8c\x01\0\0\0\0\xff\xff\0\0\x90\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xc1\x01\xc5\x01\0\0\0\0\xc8\x01\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x01\0\0\0\0\0\0\0\0\xd4\x01\0\0\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xdc\x01\0\0\xff\xff\0\0\xe2\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xe9\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xf0\x01\0\0\0\0\0\0\0\0\xf5\x01\0\0\0\0\0\0\xf9\x01\0\0\0\0\0\0\xfc\x01\0\0\0\0\0\0\xff\xff\0\0", - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\x03\0\x03\0\x86\0\0\0\x03\0\0\0\x86\0E\x01\x92\x01\xff\xff\0\0E\x01\x92\x01\0\0\0\0\0\0\0\0\x7f\0\x8b\0\0\0\x03\0\0\0\f\0\x03\0\xaa\0\x86\0\xaf\0\0\0\x07\0\x0b\x01E\x01\x92\x01\x0e\x01\r\x001\0\x05\0\n\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\x008\0v\0\x06\0\x81\0\x82\x009\0\xed\x01\x89\0\0\x021\0\0\x000\0\x8a\0j\0>\0\x0e\0n\0i\0\0\x001\0\x0f\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1e\x000\0\b\0r\0\xd1\0\xec\0\0\x01\r\x01\x1d\0\x16\0\xff\xff0\x000\0\x11\0\x15\0\x19\0 \0!\0#\0\x17\0\x1b\0\x10\0\x1f\0\x1c\0\"\0\x13\0\x18\0\x12\0\x1a\0\x14\0$\0)\0%\x000\0\t\0*\0+\0,\0-\0.\0/\0=\0U\x000\0&\0'\0'\0'\0'\0'\0'\0'\0'\0'\x001\0C\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0V\0\x8f\0\xff\xff(\0\x90\0\x91\0\x92\x007\0\x94\x007\0\x95\x000\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0\xff\xff0\0\x96\0\x97\0\xa1\0B\0\x9e\x005\0\x9f\x005\0\xa0\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\0\xa5\x003\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa2\0\xa3\0\xa6\0]\0\xff\xff\x02\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xff\xffM\0g\0l\0t\0\x84\0\x86\0\x87\0\x80\0\x8b\0\x86\0\xa4\0]\0\xab\0M\0\xa7\0\xa8\0\xa9\0\xac\0p\0\xad\0\xae\0\xd2\0\xe2\0\xd0\0\xd3\0\xd4\0;\0S\0\x86\0\xd5\0\xd6\0\xd7\0\xd8\0\xda\0\x8d\0\xdb\0]\0\xdc\0\xdd\0{\0\xde\0\xdf\0\xe0\0\x88\0_\0\xe1\0#\x01A\x01\xea\0\x9b\0\x05\x01a\x01\xfa\0\xff\xff\xfe\x009\x01=\x01_\x01M\0,\x01\\\x01X\x01\t\x01\x1d\x01L\0|\0!\x01\x12\x01K\0b\0\x13\x01U\x01V\x01W\x01x\x01Y\x01J\0\xe1\x005\x01y\x01I\0Z\x01H\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0b\0q\x01z\0[\x01@\0\x04\x01]\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\x9c\0p\x01^\x01`\x01b\x01c\x011\x01O\0O\0O\0O\0O\0O\0d\x01\x9d\0e\x01N\0N\0N\0N\0N\0N\0\xb7\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\x18\x01p\x01\xff\xff\x19\x01f\x01g\x01i\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0j\x01k\x010\x01(\x01l\x01m\x01n\x01P\0P\0P\0P\0P\0P\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0o\x01\x1b\x01\xff\xff\xab\x01\x1f\x01\xaa\x01\x17\x01Q\0Q\0Q\0Q\0Q\0Q\0\\\0\xa8\x01?\x01P\0P\0P\0P\0P\0P\0\xf8\0\xa5\x01\xfc\0\xa2\x01;\x01E\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\xff\xffQ\0Q\0Q\0Q\0Q\0Q\0W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0'\x01*\x01\xff\xff\xa3\x01\xa4\x01x\0\x02\x01X\0X\0X\0X\0X\0X\0\xa6\x017\x01\x99\0W\0W\0W\0W\0W\0W\0\x07\x01\xa7\x01\xa4\x01\xa9\x01\x10\x01\xa4\x01Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\x003\x01X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0a\0\x89\x01\xa4\x01\xac\x01\xb9\x01\x88\x01\xad\x01Z\0Z\0Z\0Z\0Z\0Z\0a\0\xb3\0\xae\x01Y\0Y\0Y\0Y\0Y\0Y\0.\x01\xaf\x01\xb0\x01\xb4\0\xa4\x01\xb8\x01\xb5\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0|\x01Z\0Z\0Z\0Z\0Z\0Z\0\xc0\x01\xb2\x01\x15\x01\xb3\x01a\0\xc1\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xa4\x01\xd8\x01\xff\xffa\0\xb8\x01\xd8\x01\xd1\x01a\0\xdf\x01a\0\xd0\x01\xe6\x01\0\0a\0\xdb\x01%\x01\xd8\x01\xd9\x01\0\0\xdc\x01\xd8\x01a\0\0\0\0\0\xd8\x01a\0\0\0a\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xd8\x01\0\0~\x01\0\0\0\0\0\0\0\0c\0c\0c\0c\0c\0c\0a\0\0\0\xda\x01\xfa\x01\0\0\0\0a\0\0\0|\x01|\x01a\0\0\0\xdd\x01\0\0\xfd\x01\0\0\0\0\0\0a\0\xff\xff\0\0\xc4\x01a\0\0\0a\0`\0c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xeb\x01\0\0\xf1\x01\0\0\xff\x01\xf2\x01\0\0d\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xf6\x01\x81\x01\x81\x01\xe4\x01\0\0\xc4\x01\0\0e\0e\0e\0e\0e\0e\0\0\0\xc6\x01\0\0d\0d\0d\0d\0d\0d\0\0\0\0\0\0\0\xc4\x01\xea\x01\x86\x01a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0\0\0e\0e\0e\0e\0e\0e\0a\0a\0a\0a\0a\0a\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\0\0\0\0\xc9\x01\xb1\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xbc\0\0\0a\0a\0a\0a\0a\0a\0\xc9\x01\xe3\x01\0\0\xbf\0\xce\x01{\x01\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xc3\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc6\0\xff\xff\xf8\x01\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xca\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xcd\0\xff\xff\xff\xff\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe2\0\xc3\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\x01\0\0\0\0\xce\0\xdd\x01\xef\x01\xfe\x01\0\0\xcf\0\xf4\x01\0\0\xe1\0\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\0\0\0\xe8\0\0\0\xe1\x01\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xd9\0\xff\xff\0\0\0\0\0\0\0\0\xe1\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\xe6\0\0\0\xe6\0\0\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\0\0\xe4\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xba\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\xf1\0\0\0q\x01\0\0M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01\0\0p\x01\0\0\0\0\xc1\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0p\x01\0\0\0\0\0\0\xf0\0\xc8\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\xf6\0\0\0\0\0\xf0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xee\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0E\x01F\x01\0\0\0\0E\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\x01\0\0N\x01\0\0\0\0\0\0\0\0h\x01I\x01\0\0\0\0\0\0\0\0O\x01\0\0G\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0H\x01\0\0\0\0\0\0\0\0\0\0\xf3\0\0\0\0\0\0\0\0\0\0\0\0\0P\x01w\x01\0\0w\x01\0\0Q\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\0\0J\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01S\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\x01\0\0\0\0s\x01\0\0\0\0T\x01\0\0\0\0u\x01\0\0u\x01\0\0K\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\0\0s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\xb9\x01\0\0\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xb8\x01\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\0\0\0\0D\x01\x80\x01\x80\x01\x80\x01\x7f\x01\0\0\x80\x01\0\0\0\0\xb8\x01\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\x80\x01\x7f\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\xbf\x01\x8e\x01\xbf\x01\0\0\0\0\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x92\x01\x93\x01\0\0\0\0\x92\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\x92\x01\0\0\x99\x01\0\0\0\0\0\0\0\0\xb1\x01\x96\x01\0\0\0\0\0\0\xc8\x01\x9c\x01\0\0\x94\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\x95\x01\0\0\0\0\0\0\0\0\0\0\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\0\0\x9e\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc8\x01\0\0\x97\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\xbb\x01\0\0\xa0\x01\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\x9f\x01\xc8\x01\0\0\xc8\x01\xc7\x01\0\0\xa1\x01\0\0\0\0\0\0\0\0\0\0\0\0\x98\x01\0\0\0\0\0\0\0\0\xbd\x01\0\0\xbd\x01\0\0\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\x91\x01\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\xc8\x01\xc7\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xd6\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd3\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", - "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x03\0\0\0\x86\0\xff\xff\x03\0\xff\xff\x86\0E\x01\x92\x019\0\xff\xffE\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff}\0\x8a\0\xff\xff\0\0\xff\xff\0\0\x03\0\xa9\0\x86\0\xae\0\xff\xff\0\0\n\x01E\x01\x92\x01\f\x01\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x05\0s\0\0\0}\0\x81\0\x05\0\xec\x01\x88\0\xff\x01&\0\xff\xff\n\0\x88\0f\0:\0\0\0k\0f\0\xff\xff\x0b\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1d\0&\0\0\0o\0\xd0\0\xe9\0\xff\0\f\x01\x0f\0\x11\0<\0\x0b\0\n\0\0\0\x14\0\x18\0\x1f\0 \0\"\0\x16\0\x1a\0\0\0\x0e\0\x1b\0!\0\x12\0\x17\0\0\0\x10\0\x13\0#\0(\0$\0&\0\0\0)\0*\0+\0,\0-\0.\0:\0R\0\x0b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0'\0?\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0U\0\x8c\0<\0\r\0\x8f\0\x90\0\x91\x000\0\x93\x000\0\x94\0'\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x001\x001\x001\x001\x001\x001\x001\x001\x001\x001\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0A\0'\0\x95\0\x96\0\x9c\0?\0\x9d\x003\0\x9e\x003\0\x9f\x002\x003\x003\x003\x003\x003\x003\x003\x003\x003\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x005\x005\x005\x005\x005\x005\x005\x005\x005\x005\0\x9b\x002\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa1\0\xa2\0\x9b\0[\0A\0\0\x007\x007\x007\x007\x007\x007\x007\x007\x007\x007\x009\0D\0f\0k\0s\0\x83\0\x85\0\x85\0}\0\x8a\0\x85\0\xa3\0^\0\xa5\0D\0\xa6\0\xa7\0\xa8\0\xab\0o\0\xac\0\xad\0\xce\0\xcb\0\xcf\0\xd2\0\xd3\0:\0R\0\x85\0\xd4\0\xd5\0\xd6\0\xd7\0\xd9\0\x8c\0\xda\0a\0\xdb\0\xdc\0w\0\xdd\0\xde\0\xdf\0\x85\0[\0\xcb\0\"\x01>\x01\xe9\0\x98\0\x01\x01P\x01\xf7\0<\0\xfb\x006\x01:\x01Q\x01D\0)\x01R\x01S\x01\x06\x01\x1a\x01D\0w\0\x1e\x01\x0f\x01D\0^\0\x0f\x01T\x01U\x01V\x01G\x01X\x01D\0\xcb\x002\x01G\x01D\0Y\x01D\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0a\0L\x01w\0Z\x01?\0\x01\x01\\\x01G\0G\0G\0G\0G\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0\x98\0L\x01]\x01_\x01a\x01b\x01-\x01N\0N\0N\0N\0N\0N\0c\x01\x98\0d\x01G\0G\0G\0G\0G\0G\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\x14\x01L\x01A\0\x14\x01e\x01f\x01h\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0i\x01j\x01-\x01$\x01k\x01l\x01m\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0n\x01\x1a\x01y\x01\x9d\x01\x1e\x01\x9e\x01\x14\x01P\0P\0P\0P\0P\0P\0[\0\x9f\x01>\x01O\0O\0O\0O\0O\0O\0\xf7\0\xa0\x01\xfb\0\xa1\x01:\x01D\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0^\0P\0P\0P\0P\0P\0P\0V\0V\0V\0V\0V\0V\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0$\x01)\x01a\0\xa2\x01\xa3\x01w\0\x01\x01W\0W\0W\0W\0W\0W\0\xa5\x016\x01\x98\0V\0V\0V\0V\0V\0V\0\x06\x01\xa6\x01\xa7\x01\xa8\x01\x0f\x01\xa9\x01X\0X\0X\0X\0X\0X\0X\0X\0X\0X\x002\x01W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0_\0\x85\x01\xaa\x01\xab\x01\x9a\x01\x85\x01\xac\x01Y\0Y\0Y\0Y\0Y\0Y\0_\0\xb0\0\xad\x01X\0X\0X\0X\0X\0X\0-\x01\xae\x01\xaf\x01\xb0\0\xb0\x01\x9a\x01\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0z\x01Y\0Y\0Y\0Y\0Y\0Y\0\x94\x01\xb1\x01\x14\x01\xb2\x01b\0\x94\x01\xb3\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xd8\x01\xc1\x01_\0\x9a\x01\xd8\x01\xcd\x01b\0\xde\x01_\0\xcd\x01\xe5\x01\xff\xff_\0\xda\x01$\x01\xd7\x01\xd7\x01\xff\xff\xda\x01\xd7\x01_\0\xff\xff\xff\xff\xd8\x01_\0\xff\xff_\0_\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xd7\x01\xff\xffz\x01\xff\xff\xff\xff\xff\xff\xff\xff`\0`\0`\0`\0`\0`\0b\0\xff\xff\xd7\x01\xf7\x01\xff\xff\xff\xffb\0\xff\xff}\x01\x80\x01b\0\xff\xff\xdc\x01\xff\xff\xfb\x01\xff\xff\xff\xff\xff\xffb\0y\x01\xff\xff\xc2\x01b\0\xff\xffb\0b\0`\0`\0`\0`\0`\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xe7\x01\xff\xff\xee\x01\xff\xff\xfb\x01\xee\x01\xff\xffc\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xf3\x01}\x01\x80\x01\xe0\x01\xff\xff\xc5\x01\xff\xffd\0d\0d\0d\0d\0d\0\xff\xff\xc2\x01\xff\xffc\0c\0c\0c\0c\0c\0\xff\xff\xff\xff\xff\xff\xc8\x01\xe7\x01\x85\x01e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xffd\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xff\xff\xff\xff\xc5\x01\xb0\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb9\0\xff\xffe\0e\0e\0e\0e\0e\0\xc8\x01\xe0\x01\xff\xff\xb9\0\xcd\x01z\x01\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xc0\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc0\0\xc1\x01\xf7\x01\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc7\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xc7\0}\x01\x80\x01\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xcc\0\xc2\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe7\x01\xff\xff\xff\xff\xc7\0\xdc\x01\xee\x01\xfb\x01\xff\xff\xc7\0\xf3\x01\xff\xff\xcc\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xe1\0\xff\xff\xe1\0\xff\xff\xe0\x01\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xcd\0\xc5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcc\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xe4\0\xff\xff\xe4\0\xff\xff\xe3\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xe3\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xb9\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xff\xffM\x01\xff\xffM\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01\xff\xffM\x01\xff\xff\xff\xff\xc0\0\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0M\x01\xff\xff\xff\xff\xff\xff\xed\0\xc7\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xf2\0\xff\xff\xff\xff\xf0\0\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xed\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0B\x01B\x01\xff\xff\xff\xffB\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xffO\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01p\x01\xff\xffp\x01\xff\xffB\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01\xff\xff\xff\xffB\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xff\xff\xffr\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xffs\x01\xff\xffs\x01\xff\xffB\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\xff\xffr\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01\xff\xff~\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\x81\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x9b\x01\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01~\x01\xff\xff\xff\xffB\x01~\x01\x81\x01~\x01~\x01\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\x81\x01\x81\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xb8\x01\x8a\x01\xb8\x01\xff\xff\xff\xff\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x01\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xba\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\x8f\x01\xc6\x01\xff\xff\xc6\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xbb\x01\xff\xff\xbb\x01\xff\xff\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xc9\x01\xc9\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", - cst$1, - cst$1, - cst$1, - cst$1, - cst$1, - cst$1], - tp_loc = "lib/data_source/jellyfin_api.ml.user", - tp_loc$0 = "lib/data_source/jellyfin_api.ml.Authenticate_by_name.params", - tp_loc$1 = "lib/data_source/jellyfin_api.ml.Authenticate_by_name.response", - tp_loc$2 = "lib/data_source/jellyfin_api.ml.Item.image_blur_hashes", - tp_loc$3 = "lib/data_source/jellyfin_api.ml.Item.type_", - tp_loc$4 = "lib/data_source/jellyfin_api.ml.Item.t", - tp_loc$5 = "lib/db/stores.ml.Items.sorts", - tp_loc$6 = "lib/db/stores.ml.Items.t", - path$1 = [0, "sorts.date_added"], - path$2 = [0, cst_item_Id], - name$3 = "items", - initial_report = [0, 0, 0], - strings = - [0, - [0, [0, 0, cst_click], "Cliquez sur le bouton !"], - [0, [0, [0, 1, cst_click], "Click on the Button !"], 0]], - url$0 = "./db_worker.bc.js", - default$1 = [0, 0, 0, 0], - album = cst$1, - artist = cst$1; - caml_register_global - (11, Undefined_recursive_module, cst_Undefined_recursive_module); - caml_register_global(10, Assert_failure, cst_Assert_failure); - caml_register_global(9, Sys_blocked_io, cst_Sys_blocked_io); - caml_register_global(8, Stack_overflow, cst_Stack_overflow); - caml_register_global(7, Match_failure, cst_Match_failure); - caml_register_global(6, Not_found, cst_Not_found); - caml_register_global(5, Division_by_zero, cst_Division_by_zero); - caml_register_global(4, End_of_file, cst_End_of_file); - caml_register_global(3, Invalid_argument, cst_Invalid_argument); - caml_register_global(2, Failure, cst_Failure); - caml_register_global(1, Sys_error, cst_Sys_error); - caml_register_global(0, Out_of_memory, cst_Out_of_memory); - var - _h_ = "output_substring", - _g_ = cst, - _e_ = cst_true, - _f_ = cst_false, - _a_ = "Stdlib.Exit", - _b_ = caml_int64_create_lo_mi_hi(0, 0, 32752), - _c_ = caml_int64_create_lo_mi_hi(0, 0, 65520), - _d_ = caml_int64_create_lo_mi_hi(1, 0, 32752), - _k_ = "CamlinternalLazy.Undefined", - _l_ = "option is None", - _m_ = "result is Error _", - _o_ = cst$0, - _p_ = "\\'", - _q_ = cst_b, - _r_ = cst_t, - _s_ = cst_n, - _t_ = cst_r, - _n_ = "Char.chr", - _v_ = "List.init", - _u_ = "hd", - _y_ = "String.blit / Bytes.blit_string", - _x_ = "Bytes.blit", - _w_ = "String.sub / Bytes.sub", - _B_ = "String.contains_from / Bytes.contains_from", - _A_ = cst$1, - _z_ = "String.concat", - _F_ = "Array.iter2: arrays must have the same length", - _E_ = "Array.blit", - _D_ = "Array.sub", - _C_ = "Array.init", - _K_ = "Set.remove_min_elt", - _L_ = [0, 0, 0, 0], - _M_ = [0, "set.ml", 570, 18], - _G_ = cst_Set_bal, - _H_ = cst_Set_bal, - _I_ = cst_Set_bal, - _J_ = cst_Set_bal, - _S_ = "Map.remove_min_elt", - _U_ = [0, 0, 0, 0], - _V_ = [0, "map.ml", 400, 10], - _O_ = cst_Map_bal, - _P_ = cst_Map_bal, - _Q_ = cst_Map_bal, - _R_ = cst_Map_bal, - _X_ = "Stdlib.Stack.Empty", - _Y_ = "Stdlib.Queue.Empty", - _ab_ = "Buffer.add_substring/add_subbytes", - _aa_ = "Buffer.add: cannot grow buffer", - _$_ = [0, cst_buffer_ml, 93, 2], - ___ = [0, cst_buffer_ml, 94, 2], - _Z_ = "Buffer.sub", - _ak_ = "%c", - _al_ = cst_s, - _am_ = cst_i, - _an_ = cst_li, - _ao_ = cst_ni, - _ap_ = cst_Li, - _aq_ = "%f", - _ar_ = "%B", - _as_ = "%{", - _at_ = "%}", - _au_ = "%(", - _av_ = "%)", - _aw_ = "%a", - _ax_ = "%t", - _ay_ = "%?", - _az_ = "%r", - _aA_ = "%_r", - _aB_ = [0, cst_camlinternalFormat_ml, 850, 23], - _aM_ = [0, cst_camlinternalFormat_ml, 814, 21], - _aE_ = [0, cst_camlinternalFormat_ml, 815, 21], - _aN_ = [0, cst_camlinternalFormat_ml, 818, 21], - _aF_ = [0, cst_camlinternalFormat_ml, 819, 21], - _aO_ = [0, cst_camlinternalFormat_ml, 822, 19], - _aG_ = [0, cst_camlinternalFormat_ml, 823, 19], - _aP_ = [0, cst_camlinternalFormat_ml, 826, 22], - _aH_ = [0, cst_camlinternalFormat_ml, 827, 22], - _aQ_ = [0, cst_camlinternalFormat_ml, 831, 30], - _aI_ = [0, cst_camlinternalFormat_ml, 832, 30], - _aK_ = [0, cst_camlinternalFormat_ml, 836, 26], - _aC_ = [0, cst_camlinternalFormat_ml, 837, 26], - _aL_ = [0, cst_camlinternalFormat_ml, 846, 28], - _aD_ = [0, cst_camlinternalFormat_ml, 847, 28], - _aJ_ = [0, cst_camlinternalFormat_ml, 851, 23], - _bL_ = [0, cst_camlinternalFormat_ml, 1558, 4], - _bM_ = "Printf: bad conversion %[", - _bN_ = [0, cst_camlinternalFormat_ml, 1626, 39], - _bO_ = [0, cst_camlinternalFormat_ml, 1649, 31], - _bP_ = [0, cst_camlinternalFormat_ml, 1650, 31], - _bQ_ = "Printf: bad conversion %_", - _bR_ = cst$2, - _bS_ = cst$3, - _bT_ = cst$2, - _bU_ = cst$3, - _bW_ = - [0, - [11, "invalid box description ", [3, 0, 0]], - "invalid box description %S"], - _bV_ = [0, 0, 4], - _bK_ = "nan", - _bI_ = "neg_infinity", - _bJ_ = "infinity", - _bH_ = cst, - _bG_ = [0, 103], - _bu_ = "%+nd", - _bv_ = "% nd", - _bx_ = "%+ni", - _by_ = "% ni", - _bz_ = "%nx", - _bA_ = "%#nx", - _bB_ = "%nX", - _bC_ = "%#nX", - _bD_ = "%no", - _bE_ = "%#no", - _bt_ = "%nd", - _bw_ = cst_ni, - _bF_ = "%nu", - _bh_ = "%+ld", - _bi_ = "% ld", - _bk_ = "%+li", - _bl_ = "% li", - _bm_ = "%lx", - _bn_ = "%#lx", - _bo_ = "%lX", - _bp_ = "%#lX", - _bq_ = "%lo", - _br_ = "%#lo", - _bg_ = "%ld", - _bj_ = cst_li, - _bs_ = "%lu", - _a6_ = "%+Ld", - _a7_ = "% Ld", - _a9_ = "%+Li", - _a__ = "% Li", - _a$_ = "%Lx", - _ba_ = "%#Lx", - _bb_ = "%LX", - _bc_ = "%#LX", - _bd_ = "%Lo", - _be_ = "%#Lo", - _a5_ = "%Ld", - _a8_ = cst_Li, - _bf_ = "%Lu", - _aT_ = "%+d", - _aU_ = "% d", - _aW_ = "%+i", - _aX_ = "% i", - _aY_ = "%x", - _aZ_ = "%#x", - _a0_ = "%X", - _a1_ = "%#X", - _a2_ = "%o", - _a3_ = "%#o", - _aS_ = cst_d, - _aV_ = cst_i, - _a4_ = cst_u, - _ac_ = "@]", - _ad_ = "@}", - _ae_ = "@?", - _af_ = "@\n", - _ag_ = "@.", - _ah_ = "@@", - _ai_ = "@%", - _aj_ = "@", - _aR_ = "CamlinternalFormat.Type_mismatch", - _b0_ = cst$1, - _b1_ = [0, [11, cst$4, [2, 0, [2, 0, 0]]], ", %s%s"], - _cm_ = - [0, - [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], - cst_Fatal_error_exception_s], - _cn_ = - [0, - [11, - "Fatal error in uncaught exception handler: exception ", - [2, 0, [12, 10, 0]]], - "Fatal error in uncaught exception handler: exception %s\n"], - _cl_ = "Fatal error: out of memory in uncaught exception handler", - _ck_ = - [0, - [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], - cst_Fatal_error_exception_s], - _ch_ = [0, [2, 0, [12, 10, 0]], "%s\n"], - _ci_ = - [0, - [11, cst_Program_not_linked_with_g_, 0], - cst_Program_not_linked_with_g_], - _b$_ = "Raised at", - _ca_ = "Re-raised at", - _cb_ = "Raised by primitive operation at", - _cc_ = "Called from", - _cd_ = " (inlined)", - _cf_ = cst$1, - _ce_ = - [0, - [2, - 0, - [12, - 32, - [2, - 0, - [11, - ' in file "', - [2, - 0, - [12, - 34, - [2, - 0, - [11, ", line ", [4, 0, 0, 0, [11, cst_characters, partial]]]]]]]]]], - '%s %s in file "%s"%s, line %d, characters %d-%d'], - _cg_ = [0, [2, 0, [11, " unknown location", 0]], "%s unknown location"], - _b6_ = "Out of memory", - _b7_ = "Stack overflow", - _b8_ = "Pattern matching failed", - _b9_ = "Assertion failed", - _b__ = "Undefined recursive module", - _b2_ = [0, [12, 40, [2, 0, [2, 0, [12, 41, 0]]]], "(%s%s)"], - _b3_ = cst$1, - _b4_ = cst$1, - _b5_ = [0, [12, 40, [2, 0, [12, 41, 0]]], "(%s)"], - _bZ_ = [0, [4, 0, 0, 0, 0], cst_d], - _bX_ = [0, [3, 0, 0], "%S"], - _bY_ = "_", - _cj_ = - [0, - cst$1, - "(Cannot print locations:\n bytecode executable program file not found)", - "(Cannot print locations:\n bytecode executable program file appears to be corrupt)", - "(Cannot print locations:\n bytecode executable program file has wrong magic number)", - "(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"], - _cq_ = "Fun.Finally_raised: ", - _cp_ = "Stdlib.Fun.Finally_raised", - _cs_ = "Random.int", - _cr_ = "x", - _ct_ = - [0, - 987910699, - 495797812, - 364182224, - 414272206, - 318284740, - 990407751, - 383018966, - 270373319, - 840823159, - 24560019, - 536292337, - 512266505, - 189156120, - 730249596, - 143776328, - 51606627, - 140166561, - 366354223, - 1003410265, - 700563762, - 981890670, - 913149062, - 526082594, - 1021425055, - 784300257, - 667753350, - 630144451, - 949649812, - 48546892, - 415514493, - 258888527, - 511570777, - 89983870, - 283659902, - 308386020, - 242688715, - 482270760, - 865188196, - 1027664170, - 207196989, - 193777847, - 619708188, - 671350186, - 149669678, - 257044018, - 87658204, - 558145612, - 183450813, - 28133145, - 901332182, - 710253903, - 510646120, - 652377910, - 409934019, - 801085050], - _cy_ = "Hashtbl: unsupported hash table format", - _cw_ = cst$1, - _cR_ = [3, 0, 3], - _cS_ = cst, - _cO_ = cst$6, - _cP_ = "<\/", - _cQ_ = cst$1, - _cL_ = cst$6, - _cM_ = "<", - _cN_ = cst$1, - _cK_ = "\n", - _cG_ = cst$1, - _cH_ = cst$1, - _cI_ = cst$1, - _cJ_ = cst$1, - _cF_ = [0, cst$1], - _cB_ = cst$1, - _cC_ = cst$1, - _cD_ = cst$1, - _cE_ = cst$1, - _cA_ = [0, cst$1, 0, cst$1], - _cz_ = "Stdlib.Format.String_tag", - _cT_ = "Jsoo_runtime.Error.Exn", - _cU_ = "jsError", - _cW_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 157, 10], - _cY_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 179, 10], - _c0_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 191, 10], - _c2_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 218, 17], - _c7_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 367, 16], - _c8_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 368, 18], - _c9_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 372, 15], - _c__ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 377, 15], - _c$_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 383, 15], - _da_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 386, 10], - _db_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 362, 16], - _dc_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 517, 12], - _dd_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 459, 14], - _dj_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 686, 27], - _di_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 651, 27], - _dg_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 560, 16], - _de_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 550, 23], - _df_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 544, 14], - _c6_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 334, 9], - _c5_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 309, 9], - _c4_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 305, 9], - _c3_ = - [0, - [11, - "Lwd: unsafe mutation (variable invalidated during evaluation) at\n", - [15, 0]], - "Lwd: unsafe mutation (variable invalidated during evaluation) at\n%a"], - _c1_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 199, 14], - _cZ_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 186, 14], - _cX_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 169, 14], - _cV_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 152, 14], - _dh_ = "Lwd.Release_failure", - _dl_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 64, 12], - _dt_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 205, 18], - _ds_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 218, 9], - _dv_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 224, 18], - _du_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 237, 9], - _dw_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 240, 21], - _dx_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 250, 21], - _dy_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 260, 21], - _dz_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 296, 14], - _dP_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 553, 18], - _dQ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 557, 12], - _dR_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 546, 14], - _dO_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 538, 21], - _dN_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 531, 14], - _dM_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 523, 14], - _dL_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 492, 29], - _dK_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 499, 29], - _dJ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 462, 21], - _dF_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 420, 10], - _dG_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 423, 15], - _dH_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 435, 10], - _dI_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 457, 2], - _dC_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 371, 24], - _dD_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 391, 16], - _dE_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 394, 2], - _dB_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 315, 18], - _dA_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 317, 9], - _dr_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 193, 4], - _dq_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 199, 21], - _do_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 174, 4], - _dp_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 177, 14], - _dn_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 113, 14], - _dm_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 82, 21], - _dk_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 32, 14], - _d9_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 571, 12], - _dX_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 321, 37], - _dY_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 322, 37], - _d0_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 346, 10], - _d1_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 357, 42], - _dZ_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 337, 37], - _d3_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 375, 10], - _d4_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 383, 42], - _d2_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 338, 37], - _d6_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 425, 16], - _d8_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 513, 50], - _d7_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 480, 6], - _d5_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 395, 14], - _dU_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 174, 57], - _dV_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 182, 57], - _dW_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 238, 11], - _dS_ = cst_Lwd_seq_rank_node_is_marke, - _dT_ = cst_Lwd_seq_rank_node_is_marke, - _d$_ = [0, "src/fut.ml", 34, 25], - _ej_ = "debug", - _ei_ = "warn", - _eh_ = cst_error, - _eg_ = "log", - _ee_ = "scrollTop", - _ec_ = "search", - _eb_ = [0, 1], - _ea_ = cst_pathname, - _ek_ = "isSecureContext", - _el_ = "cache", - _em_ = "credentials", - _en_ = "headers", - _eo_ = "integrity", - _ep_ = "keepalive", - _eq_ = "method", - _er_ = "mode", - _es_ = "redirect", - _et_ = "referrer", - _eu_ = "referrerPolicy", - _ey_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 233, 16], - _ex_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 201, 16], - _ew_ = [0, 0, 0], - _ev_ = [0, 0, 0], - _ez_ = cst$4, - _eW_ = cst$1, - _eV_ = cst$1, - _eL_ = [0, [0, 15681, -937474657], 0], - _eM_ = [0, [0, 15681, 82908052], [0, 737455525, 0]], - _eN_ = [0, [0, 15681, -588596599], [0, 737455525, 0]], - _eO_ = [0, [0, 15681, 4100401], [0, 737455525, 0]], - _eP_ = [0, [0, 15681, -605101559], [0, 737455525, 0]], - _eQ_ = [0, [0, 15681, 756711075], [0, 737455525, 0]], - _eR_ = [0, [0, 15681, 749039939], [0, 737455525, 0]], - _eS_ = [0, [0, 15681, 737308346], [0, 737455525, 0]], - _eT_ = [0, [0, 15681, -937474657], [0, 737455525, 0]], - _eC_ = [0, [0, 15681, 82908052], 0], - _eD_ = [0, [0, 15681, -588596599], 0], - _eE_ = [0, -101336657, 0], - _eF_ = [0, [0, 15681, 4100401], 0], - _eG_ = [0, [0, 15681, -605101559], 0], - _eH_ = [0, [0, 15681, 756711075], 0], - _eI_ = [0, [0, 15681, 749039939], 0], - _eJ_ = [0, 737455525, 0], - _eK_ = [0, [0, 15681, 737308346], 0], - _eA_ = [0, [11, "\x1b[", [4, 0, 0, 0, [12, 109, 0]]], "\x1b[%dm"], - _eB_ = "CCFormat.ANSI_codes.No_such_style", - _eX_ = "CCFormat.Style", - _eY_ = "CCResult.Get_error", - _e1_ = "CCFQueue.Empty", - _e3_ = "content-box", - _e4_ = "border-box", - _e5_ = "device-pixel-content-box", - _e7_ = cst_duration, - _e8_ = cst_playbackRate, - _e9_ = "position", - _e6_ = "Set metadata", - _ff_ = "not implemented", - _fc_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_px, 0]], "%fpx"], - _fd_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_rem, 0]], "%frem"], - _fe_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_em, 0]], "%fem"], - _e$_ = cst_px, - _fa_ = cst_rem, - _fb_ = cst_em, - _fg_ = "Common.Utils.Forward_ref.Not_set", - _fh_ = "Common.Utils.Forward_ref.Already_set", - _fi_ = [1, [0, 3854881, cst_Failed_to_unmarshal_data]], - _fk_ = [1, -358247754], - _fj_ = - [0, - [11, "Multiple persitent var are using the key ", [2, 0, 0]], - "Multiple persitent var are using the key %s"], - _fm_ = cst$1, - _fl_ = [0, [12, 91, [2, 0, [11, "] ", [2, 0, 0]]]], "[%s] %s"], - _fn_ = "TODO not implemented", - _fo_ = [0, 80, cst_button], - _fp_ = [0, 80, [0, "lwdui-controlled-scroll-wrapper"]], - _fq_ = [0, 80, "lwdui-controlled-scroll-controls"], - _fr_ = "Show playing", - _fu_ = cst_submit, - _ft_ = "password", - _fs_ = cst_text, - _fx_ = [0, 80, cst_text], - _fv_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], - _fw_ = [0, [2, 0, 0], cst_s], - _fz_ = [0, 80, cst_text], - _fy_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], - _fC_ = [0, 80, "checkbox"], - _fA_ = - [0, - [2, 0, [12, 45, [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, [11, "-id", 0]]]]]], - "%s-%i-%i-id"], - _fB_ = - [0, - [2, 0, [12, 45, [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, 0]]]]], - "%s-%i-%i"], - _fH_ = [0, [11, cst_height, [2, 0, 0]], "height: %s"], - _fG_ = cst$7, - _fD_ = [0, cst$7], - _fE_ = "grid-template-columns", - _fF_ = [0, [2, 0, [11, cst$5, [2, 0, [12, 59, 0]]]], "%s: %s;"], - _fI_ = [1, 4.], - _fO_ = [0, 80, cst_lwdui_virtual_table_row], - _fM_ = "Row height", - _fN_ = "Visible height:", - _fK_ = - [0, - [11, "height: calc(", [2, 0, [11, " * ", [4, 3, 0, 0, [11, ");", 0]]]]], - "height: calc(%s * %i);"], - _fL_ = - [0, - [11, cst_height, [2, 0, [11, " !important;", 0]]], - "height: %s !important;"], - _fP_ = [0, 80, [0, "lwdui-lazy-table-content"]], - _fQ_ = [0, 80, [0, "lwdui-lazy-table-content-wrapper"]], - _fR_ = [0, "lwdui-lazy-table", 0], - _fJ_ = "virtual table", - _fS_ = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", - _fT_ = [1, [0, 3854881, cst_Failed_to_unmarshal_data]], - _fU_ = [0, "lib/codec.ml", 32, 4], - _fV_ = "Yojson__Common.Json_error", - _fW_ = "Yojson__Common.End_of_array", - _fX_ = "Yojson__Common.End_of_object", - _fY_ = "Yojson__Common.End_of_tuple", - _fZ_ = "Yojson__Common.End_of_input", - _gw_ = [0, 737456202, 1], - _gx_ = [0, 737456202, 0], - _gy_ = cst_Unexpected_end_of_input, - _gz_ = "Invalid token", - _gA_ = cst_Unexpected_end_of_input, - _gB_ = "Invalid escape sequence", - _gC_ = cst_Unexpected_end_of_input, - _gD_ = "Invalid low surrogate for code point beyond U+FFFF", - _gE_ = - "Missing escape sequence representing low surrogate for code point beyond U+FFFF", - _gF_ = cst_Unexpected_end_of_input, - _gG_ = "Expected ':' or '>' but found", - _gH_ = cst_Unexpected_end_of_input, - _gI_ = "Expected '>' but found", - _gJ_ = cst_Unexpected_end_of_input, - _gK_ = "Unterminated comment", - _gL_ = "Expected string or identifier but found", - _gM_ = cst_Unexpected_end_of_input, - _gN_ = "Expected ',' or ']' but found", - _gO_ = cst_Unexpected_end_of_input, - _gP_ = "Expected ',' or ')' but found", - _gQ_ = cst_Unexpected_end_of_input, - _gR_ = "Expected ',' or '}' but found", - _gS_ = cst_Unexpected_end_of_input, - _gT_ = "Expected ':' but found", - _gU_ = cst_Unexpected_end_of_input, - _g__ = "Expected string, got ", - _g9_ = "Expected object, got ", - _gY_ = cst_null, - _g0_ = "object", - _g1_ = "floatlit", - _g2_ = "array", - _g3_ = "tuple", - _gZ_ = "bool", - _g5_ = "variant", - _g6_ = "float", - _g7_ = "int", - _g8_ = "string", - _g4_ = "intlit", - _gW_ = "Blank input data", - _gV_ = "Junk after end of JSON value:", - _gu_ = [0, [2, 0, [11, " '", [2, 0, [2, 0, [12, 39, 0]]]]], "%s '%s%s'"], - _gp_ = [0, [11, "File ", [2, 0, [11, ", line", 0]]], "File %s, line"], - _gt_ = "Line", - _gq_ = [0, [11, "byte ", [4, 3, 0, 0, 0]], "byte %i"], - _gs_ = - [0, - [11, "bytes ", [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, 0]]]], - "bytes %i-%i"], - _gr_ = - [0, - [2, - 0, - [12, 32, [4, 3, 0, 0, [11, cst$4, [2, 0, [11, ":\n", [2, 0, 0]]]]]]], - "%s %i, %s:\n%s"], - _go_ = [0, "lib/read.mll", 41, 13], - _gn_ = cst$1, - _gm_ = cst$1, - _gi_ = "NaN value not allowed in standard JSON", - _gj_ = [0, [8, [0, 0, 3], 0, [0, 16], 0], cst_16g], - _gl_ = [0, [8, [0, 0, 3], 0, [0, 17], 0], cst_17g], - _gk_ = cst_0, - _gg_ = "Infinity value not allowed in standard JSON", - _gh_ = "-Infinity value not allowed in standard JSON", - _gc_ = "NaN", - _gd_ = [0, [8, [0, 0, 3], 0, [0, 16], 0], cst_16g], - _gf_ = [0, [8, [0, 0, 3], 0, [0, 17], 0], cst_17g], - _ge_ = cst_0, - _ga_ = "Infinity", - _gb_ = "-Infinity", - _f__ = cst_true, - _f$_ = cst_false, - _f9_ = cst_null, - _f3_ = cst_b, - _f4_ = cst_t, - _f5_ = cst_n, - _f6_ = "\\f", - _f7_ = cst_r, - _f8_ = '\\"', - _f2_ = cst$0, - _f1_ = - [0, - [11, - "src=", - [3, - 0, - [11, - " start=", - [4, 3, 0, 0, [11, " len=", [4, 3, 0, 0, [12, 10, [10, 0]]]]]]]], - "src=%S start=%i len=%i\n%!"], - _f0_ = "\\u00", - _gv_ = "Yojson__Safe.Int_overflow", - _gX_ = "Yojson__Safe.Util.Type_error", - _hc_ = "list_of_yojson: list needed", - _hb_ = "int_of_yojson: integer needed", - _ha_ = "string_of_yojson: string needed", - _g$_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", - _hl_ = cst$7, - _hn_ = "_of_yojson: list instead of atom for record expected", - _hm_ = - [0, - [2, - 0, - [11, - "_of_yojson: the following record elements were undefined: ", - [2, 0, 0]]], - "%s_of_yojson: the following record elements were undefined: %s"], - _hk_ = "extra fields", - _hj_ = "duplicate fields", - _hh_ = cst$7, - _hi_ = - [0, - [2, 0, [11, "_of_yojson: ", [2, 0, [11, cst$5, [2, 0, 0]]]]], - "%s_of_yojson: %s: %s"], - _hg_ = "_of_yojson: unexpected variant constructor", - _hf_ = "_of_yojson: expected a variant type, saw an empty list", - _he_ = "_of_yojson: expected a variant type, saw a nested list", - _hd_ = "_of_yojson: this constructor does not take arguments", - _iA_ = "An error occured while decoding response: ", - _iw_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], - _iz_ = cst$1, - _ix_ = cst$1, - _iy_ = - [0, - [11, - 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="', - [2, 0, [11, '", Version="0.1"', [2, 0, 0]]]], - 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'], - _iv_ = cst_CollectionType, - _im_ = cst_Type, - _in_ = cst_ImageBlurHashes, - _io_ = cst_ServerId, - _ip_ = cst_ParentId, - _iq_ = cst_AlbumId, - _ir_ = cst_Path, - _is_ = cst_Id, - _it_ = cst_SortName, - _iu_ = cst_Name, - _ih_ = "type_", - _ii_ = "image_blur_hashes", - _ij_ = cst_server_id, - _ik_ = cst_id$0, - _il_ = cst_name, - _ig_ = [0, "lib/data_source/jellyfin_api.ml", 192, 64], - _hH_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], - _hI_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], - _hJ_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], - _hK_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], - _hL_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], - _hM_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], - _hN_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], - _hO_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], - _hP_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], - _hQ_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], - _hR_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], - _hS_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], - _hT_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], - _hU_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], - _hV_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], - _hW_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], - _hX_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], - _hY_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], - _hZ_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], - _h0_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], - _h1_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], - _h2_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], - _h3_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], - _h4_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], - _h5_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], - _h6_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], - _h7_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], - _h8_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], - _h9_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], - _h__ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], - _h$_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], - _ia_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], - _ib_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], - _ic_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], - _id_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], - _ie_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], - _if_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], - _hG_ = cst_Primary, - _hF_ = [0, "Users", [0, "AuthenticateByName", 0]], - _hC_ = cst_ServerId, - _hD_ = cst_AccessToken, - _hE_ = cst_User, - _hz_ = cst_server_id, - _hA_ = "access_token", - _hB_ = "user", - _hx_ = cst_Pw, - _hy_ = cst_Username, - _hv_ = "pw", - _hw_ = "username", - _hr_ = cst_Id, - _hs_ = cst_ServerName, - _ht_ = cst_ServerId, - _hu_ = cst_Name, - _ho_ = cst_id$0, - _hp_ = cst_server_id, - _hq_ = cst_name, - _iV_ = [0, cst_lib_db_stores_ml, 116, 13], - _iU_ = [0, cst_lib_db_stores_ml, 107, 19], - _iR_ = [0, cst_lib_db_stores_ml, 99, 13], - _iQ_ = [0, cst_lib_db_stores_ml, 93, 19], - _iM_ = [0, cst_lib_db_stores_ml, 66, 13], - _iK_ = cst_item, - _iL_ = cst_sorts, - _iI_ = cst_item, - _iJ_ = cst_sorts, - _iF_ = cst_sort_name, - _iG_ = cst_views, - _iH_ = cst_date_added, - _iC_ = cst_sort_name, - _iD_ = cst_views, - _iE_ = cst_date_added, - _iN_ = [0, cst_sorts_views], - _iO_ = [0, "item.Name"], - _iP_ = [0, cst_item_Id], - _iS_ = [0, cst_sorts_views], - _iT_ = [0, "item.Type"], - _iW_ = [0, "sorts.sort_name"], - _iX_ = [0, "item.CollectionType"], - _ja_ = [0, [2, 0, [15, 0]], "%s%a"], - _i$_ = - [0, - [12, 40, [4, 3, 0, 0, [12, 47, [4, 3, 0, 0, [12, 41, 0]]]]], - "(%i/%i)"], - _i6_ = "Unknown", - _i7_ = cst_Synchronized, - _i8_ = "Inconsistent", - _i9_ = - [0, - [11, - "New items: last: ", - [4, - 3, - 0, - 0, - [11, - " missing: ", - [4, 3, 0, 0, [11, cst_unfetched, [4, 3, 0, 0, 0]]]]]], - "New items: last: %i missing: %i unfetched: %i"], - _i__ = - [0, - [11, - "Partial: last: ", - [4, 3, 0, 0, [11, cst_unfetched, [4, 3, 0, 0, 0]]]], - "Partial: last: %i unfetched: %i"], - _je_ = "Start offset:", - _jf_ = "Item count:", - _jg_ = "ERROR", - _jd_ = [0, [11, "Server ", [2, 0, [11, cst$5, [15, 0]]]], "Server %s: %a"], - _jc_ = cst$1, - _jw_ = "GOT L=", - _jv_ = [0, "NEW REF", 0], - _ju_ = cst_Synchronized, - _js_ = - [0, - [11, "Sync in progress: ", [4, 3, 0, 0, [12, 47, [4, 3, 0, 0, 0]]]], - "Sync in progress: %i/%i"], - _jt_ = "Desynchronized", - _jo_ = cst_Form_submitted, - _jr_ = cst_Form_submitted, - _jp_ = cst_Form_submitted, - _jq_ = cst$1, - _jh_ = "ui_servers", - _ji_ = [0, "https://demo.jellyfin.org/stable"], - _jj_ = [0, 1], - _jk_ = [0, "demo"], - _jl_ = [0, 1], - _jm_ = [0, 0], - _jn_ = [0, 80, "Connect"], - _jL_ = cst_Nothing_playing, - _jG_ = - [0, - [2, - 0, - [11, cst_Items, [2, 0, [11, cst_Images_Primary_width_500_f, 0]]]], - cst_s_Items_s_Images_Primary_w], - _jI_ = cst_track_png, - _jH_ = - [0, - [11, cst_background_image_url, [3, 0, [12, 41, 0]]], - cst_background_image_url_S], - _jE_ = - "A playback error happened. This is probably due to a codec unsupported by the browser.", - _jF_ = [0, 80, "NEXT"], - _jJ_ = [0, 80, "now-playing-cover"], - _jK_ = [0, 80, "now-playing-details"], - _jM_ = [0, 80, cst_box], - _jN_ = [0, 80, "now-playing-display"], - _jO_ = [0, 80, "player-wrapper"], - _jP_ = [0, 80, cst_box], - _jA_ = "Now playing:", - _jB_ = - [0, - [2, - 0, - [11, cst_Items, [2, 0, [11, cst_Images_Primary_width_500_f, 0]]]], - cst_s_Items_s_Images_Primary_w], - _jC_ = "image/jpeg", - _jD_ = "500x500", - _jz_ = - [0, - [2, - 0, - [11, - "/Audio/", - [2, - 0, - [11, - "/universal?api_key=", - [2, - 0, - [11, - "&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls", - 0]]]]]], - "%s/Audio/%s/universal?api_key=%s&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls"], - _jR_ = [0, "off", 0], - _jS_ = [0, "on", 0], - _jQ_ = [0, cst_button, 0], - _jT_ = [0, "draggable-table", 0], - _j5_ = "|>", - _j4_ = - [0, - [2, 0, [11, cst_Items, [2, 0, [11, "/Images/Primary?width=50", 0]]]], - "%s/Items/%s/Images/Primary?width=50"], - _j3_ = "server-error.png", - _j6_ = [2, 4.], - _jU_ = cst_Title, - _jV_ = "1fr", - _jW_ = cst_Title, - _jX_ = cst_Cover, - _jY_ = cst_5rem, - _jZ_ = cst_Cover, - _j0_ = "#", - _j1_ = cst_5rem, - _j2_ = "Order", - _kr_ = "Persist ?", - _kk_ = - [0, - [2, - 0, - [11, - cst_Items, - [2, 0, [11, "/Images/Primary?width=800&format=Jpg", 0]]]], - "%s/Items/%s/Images/Primary?width=800&format=Jpg"], - _km_ = cst_track_png, - _kl_ = - [0, - [11, cst_background_image_url, [3, 0, [12, 41, 0]]], - cst_background_image_url_S], - _kj_ = cst_Nothing_playing, - _kh_ = '""', - _ki_ = "Updating main view:", - _j9_ = cst_click, - _j7_ = "session_uuid", - _j8_ = "toto1", - _j$_ = "Welcome to OCAMIX", - _kb_ = [0, cst_pouet, 0, 0], - _kc_ = - [0, [0, cst_date_added, "Date added"], [0, [0, cst_name, cst_Name], 0]], - _kd_ = [0, "view-sort", cst_date_added, 0], - _ke_ = - [0, - [0, cst_asc, "Asc"], - [0, [0, cst_desc, "Desc"], [0, [0, cst_random, "Random"], 0]]], - _kf_ = [0, "view-order", cst_desc, 0], - _kg_ = cst_pouet, - _kq_ = [0, "main-layout"]; - function erase_rel(param){ - if(typeof param === "number") return 0; - switch(param[0]){ - case 0: - var rest = param[1]; return [0, erase_rel(rest)]; - case 1: - var rest$0 = param[1]; return [1, erase_rel(rest$0)]; - case 2: - var rest$1 = param[1]; return [2, erase_rel(rest$1)]; - case 3: - var rest$2 = param[1]; return [3, erase_rel(rest$2)]; - case 4: - var rest$3 = param[1]; return [4, erase_rel(rest$3)]; - case 5: - var rest$4 = param[1]; return [5, erase_rel(rest$4)]; - case 6: - var rest$5 = param[1]; return [6, erase_rel(rest$5)]; - case 7: - var rest$6 = param[1]; return [7, erase_rel(rest$6)]; - case 8: - var rest$7 = param[2], ty = param[1]; - return [8, ty, erase_rel(rest$7)]; - case 9: - var rest$8 = param[3], ty1 = param[1]; - return [9, ty1, ty1, erase_rel(rest$8)]; - case 10: - var rest$9 = param[1]; return [10, erase_rel(rest$9)]; - case 11: - var rest$10 = param[1]; return [11, erase_rel(rest$10)]; - case 12: - var rest$11 = param[1]; return [12, erase_rel(rest$11)]; - case 13: - var rest$12 = param[1]; return [13, erase_rel(rest$12)]; - default: var rest$13 = param[1]; return [14, erase_rel(rest$13)]; - } - } - function concat_fmtty(fmtty1, fmtty2){ - if(typeof fmtty1 === "number") return fmtty2; - switch(fmtty1[0]){ - case 0: - var rest = fmtty1[1]; return [0, concat_fmtty(rest, fmtty2)]; - case 1: - var rest$0 = fmtty1[1]; return [1, concat_fmtty(rest$0, fmtty2)]; - case 2: - var rest$1 = fmtty1[1]; return [2, concat_fmtty(rest$1, fmtty2)]; - case 3: - var rest$2 = fmtty1[1]; return [3, concat_fmtty(rest$2, fmtty2)]; - case 4: - var rest$3 = fmtty1[1]; return [4, concat_fmtty(rest$3, fmtty2)]; - case 5: - var rest$4 = fmtty1[1]; return [5, concat_fmtty(rest$4, fmtty2)]; - case 6: - var rest$5 = fmtty1[1]; return [6, concat_fmtty(rest$5, fmtty2)]; - case 7: - var rest$6 = fmtty1[1]; return [7, concat_fmtty(rest$6, fmtty2)]; - case 8: - var rest$7 = fmtty1[2], ty = fmtty1[1]; - return [8, ty, concat_fmtty(rest$7, fmtty2)]; - case 9: - var rest$8 = fmtty1[3], ty2 = fmtty1[2], ty1 = fmtty1[1]; - return [9, ty1, ty2, concat_fmtty(rest$8, fmtty2)]; - case 10: - var rest$9 = fmtty1[1]; return [10, concat_fmtty(rest$9, fmtty2)]; - case 11: - var rest$10 = fmtty1[1]; return [11, concat_fmtty(rest$10, fmtty2)]; - case 12: - var rest$11 = fmtty1[1]; return [12, concat_fmtty(rest$11, fmtty2)]; - case 13: - var rest$12 = fmtty1[1]; return [13, concat_fmtty(rest$12, fmtty2)]; - default: - var rest$13 = fmtty1[1]; return [14, concat_fmtty(rest$13, fmtty2)]; - } - } - function concat_fmt(fmt1, fmt2){ - if(typeof fmt1 === "number") return fmt2; - switch(fmt1[0]){ - case 0: - var rest = fmt1[1]; return [0, concat_fmt(rest, fmt2)]; - case 1: - var rest$0 = fmt1[1]; return [1, concat_fmt(rest$0, fmt2)]; - case 2: - var rest$1 = fmt1[2], pad = fmt1[1]; - return [2, pad, concat_fmt(rest$1, fmt2)]; - case 3: - var rest$2 = fmt1[2], pad$0 = fmt1[1]; - return [3, pad$0, concat_fmt(rest$2, fmt2)]; - case 4: - var rest$3 = fmt1[4], prec = fmt1[3], pad$1 = fmt1[2], iconv = fmt1[1]; - return [4, iconv, pad$1, prec, concat_fmt(rest$3, fmt2)]; - case 5: - var - rest$4 = fmt1[4], - prec$0 = fmt1[3], - pad$2 = fmt1[2], - iconv$0 = fmt1[1]; - return [5, iconv$0, pad$2, prec$0, concat_fmt(rest$4, fmt2)]; - case 6: - var - rest$5 = fmt1[4], - prec$1 = fmt1[3], - pad$3 = fmt1[2], - iconv$1 = fmt1[1]; - return [6, iconv$1, pad$3, prec$1, concat_fmt(rest$5, fmt2)]; - case 7: - var - rest$6 = fmt1[4], - prec$2 = fmt1[3], - pad$4 = fmt1[2], - iconv$2 = fmt1[1]; - return [7, iconv$2, pad$4, prec$2, concat_fmt(rest$6, fmt2)]; - case 8: - var - rest$7 = fmt1[4], - prec$3 = fmt1[3], - pad$5 = fmt1[2], - fconv = fmt1[1]; - return [8, fconv, pad$5, prec$3, concat_fmt(rest$7, fmt2)]; - case 9: - var rest$8 = fmt1[2], pad$6 = fmt1[1]; - return [9, pad$6, concat_fmt(rest$8, fmt2)]; - case 10: - var rest$9 = fmt1[1]; return [10, concat_fmt(rest$9, fmt2)]; - case 11: - var rest$10 = fmt1[2], str = fmt1[1]; - return [11, str, concat_fmt(rest$10, fmt2)]; - case 12: - var rest$11 = fmt1[2], chr = fmt1[1]; - return [12, chr, concat_fmt(rest$11, fmt2)]; - case 13: - var rest$12 = fmt1[3], fmtty = fmt1[2], pad$7 = fmt1[1]; - return [13, pad$7, fmtty, concat_fmt(rest$12, fmt2)]; - case 14: - var rest$13 = fmt1[3], fmtty$0 = fmt1[2], pad$8 = fmt1[1]; - return [14, pad$8, fmtty$0, concat_fmt(rest$13, fmt2)]; - case 15: - var rest$14 = fmt1[1]; return [15, concat_fmt(rest$14, fmt2)]; - case 16: - var rest$15 = fmt1[1]; return [16, concat_fmt(rest$15, fmt2)]; - case 17: - var rest$16 = fmt1[2], fmting_lit = fmt1[1]; - return [17, fmting_lit, concat_fmt(rest$16, fmt2)]; - case 18: - var rest$17 = fmt1[2], fmting_gen = fmt1[1]; - return [18, fmting_gen, concat_fmt(rest$17, fmt2)]; - case 19: - var rest$18 = fmt1[1]; return [19, concat_fmt(rest$18, fmt2)]; - case 20: - var rest$19 = fmt1[3], char_set = fmt1[2], width_opt = fmt1[1]; - return [20, width_opt, char_set, concat_fmt(rest$19, fmt2)]; - case 21: - var rest$20 = fmt1[2], counter = fmt1[1]; - return [21, counter, concat_fmt(rest$20, fmt2)]; - case 22: - var rest$21 = fmt1[1]; return [22, concat_fmt(rest$21, fmt2)]; - case 23: - var rest$22 = fmt1[2], ign = fmt1[1]; - return [23, ign, concat_fmt(rest$22, fmt2)]; - default: - var rest$23 = fmt1[3], f = fmt1[2], arity = fmt1[1]; - return [24, arity, f, concat_fmt(rest$23, fmt2)]; - } - } - function make(v){return [0, v];} - function get(r){return r[1];} - function compare_and_set(r, seen, v){ - var cur = r[1]; - return cur === seen ? (r[1] = v, 1) : 0; - } - function failwith(s){ - throw caml_maybe_attach_backtrace([0, Failure, s], 1); - } - function invalid_arg(s){ - throw caml_maybe_attach_backtrace([0, Invalid_argument, s], 1); - } - var Exit = [248, _a_, caml_fresh_oo_id(0)]; - function max(x, y){return caml_greaterequal(x, y) ? x : y;} - function abs(x){return 0 <= x ? x : - x | 0;} - function lnot(x){return x ^ -1;} - var - infinity = caml_int64_float_of_bits(_b_), - neg_infinity = caml_int64_float_of_bits(_c_), - nan = caml_int64_float_of_bits(_d_); - function symbol_concat(s1, s2){return s1 + s2;} - function string_of_bool(b){return b ? _e_ : _f_;} - function string_of_int(n){return "" + n;} - function valid_float_lexem(s){ - var l = caml_ml_string_length(s); - function loop(i){ - var i$0 = i; - for(;;){ - if(l <= i$0) return symbol_concat(s, _g_); - var match = caml_string_get(s, i$0); - a: - { - if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; - return s; - } - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - } - } - return loop(0); - } - function string_of_float(f){ - return valid_float_lexem(caml_format_float("%.12g", f)); - } - function symbol(l1, l2){ - if(! l1) return l2; - var tl = l1[2], hd = l1[1]; - return [0, hd, symbol(tl, l2)]; - } - caml_ml_open_descriptor_in(0); - var - stdout = caml_ml_open_descriptor_out(1), - stderr = caml_ml_open_descriptor_out(2); - function flush_all(param){ - function iter(param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var l = param$0[2], a = param$0[1]; - try{caml_ml_flush(a);} - catch(_yJ_){ - var _yI_ = caml_wrap_exception(_yJ_); - if(_yI_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_yI_, 0); - } - param$0 = l; - } - } - return iter(caml_ml_out_channels_list(0)); - } - function output_string(oc, s){ - caml_ml_output(oc, s, 0, caml_ml_string_length(s)); - return; - } - function output_substring(oc, s, ofs, len){ - if(0 <= ofs && 0 <= len && (caml_ml_string_length(s) - len | 0) >= ofs) - return caml_ml_output(oc, s, ofs, len); - return invalid_arg(_h_); - } - function prerr_endline(s){ - output_string(stderr, s); - caml_ml_output_char(stderr, 10); - return caml_ml_flush(stderr); - } - var exit_function = make(flush_all); - function at_exit(f){ - for(;;){ - var f_yet_to_run = make(1), old_exit = get(exit_function); - let f_yet_to_run$0 = f_yet_to_run, old_exit$0 = old_exit; - var - new_exit = - function(param){ - if(compare_and_set(f_yet_to_run$0, 1, 0)) caml_call1(f, 0); - return caml_call1(old_exit$0, 0); - }, - success = compare_and_set(exit_function, old_exit, new_exit), - _yH_ = 1 - success; - if(! _yH_) return _yH_; - } - } - function do_at_exit(param){return caml_call1(get(exit_function), 0);} - caml_register_named_value("Pervasives.do_at_exit", do_at_exit); - var max_int = 2147483647; - function _j_(_yG_){return caml_ml_flush(_yG_);} - function _i_(_yF_, _yE_){caml_ml_output_char(_yF_, _yE_); return;} - var - max_array_length = caml_sys_const_max_wosize(0), - max_string_length = (4 * max_array_length | 0) - 1 | 0; - function is_block(a){return 1 - (typeof a === "number" ? 1 : 0);} - var Undefined = [248, _k_, caml_fresh_oo_id(0)]; - function raise_undefined(param){ - throw caml_maybe_attach_backtrace(Undefined, 1); - } - function force_lazy_block(blk){ - var closure = blk[1]; - blk[1] = raise_undefined; - try{ - var result = caml_call1(closure, 0); - caml_obj_make_forward(blk, result); - return result; - } - catch(e$0){ - var e = caml_wrap_exception(e$0); - blk[1] = function(param){throw caml_maybe_attach_backtrace(e, 0);}; - throw caml_maybe_attach_backtrace(e, 0); - } - } - function from_val(v){ - var t = caml_obj_tag(v); - if(t !== 250 && t !== 246 && t !== 253) return v; - return caml_lazy_make_forward(v); - } - function value(o, default$0){ - if(! o) return default$0; - var v = o[1]; - return v; - } - function get$0(param){ - if(! param) return invalid_arg(_l_); - var v = param[1]; - return v; - } - function map(f, o){ - if(! o) return 0; - var v = o[1]; - return [0, caml_call1(f, v)]; - } - function is_some(param){return param ? 1 : 0;} - function get_ok(param){ - if(0 !== param[0]) return invalid_arg(_m_); - var v = param[1]; - return v; - } - function map$0(f, e){ - if(0 !== e[0]) return e; - var v = e[1]; - return [0, caml_call1(f, v)]; - } - function of_int_exn(n){ - if(0 <= n && 255 >= n) return n; - return invalid_arg(_n_); - } - function escaped(c){ - a: - { - if(40 <= c){ - if(92 === c) return _o_; - if(127 > c) break a; - } - else{ - if(32 <= c){if(39 <= c) return _p_; break a;} - if(14 > c) - switch(c){ - case 8: - return _q_; - case 9: - return _r_; - case 10: - return _s_; - case 13: - return _t_; - } - } - var s = caml_create_bytes(4); - caml_bytes_unsafe_set(s, 0, 92); - caml_bytes_unsafe_set(s, 1, 48 + (c / 100 | 0) | 0); - caml_bytes_unsafe_set(s, 2, 48 + ((c / 10 | 0) % 10 | 0) | 0); - caml_bytes_unsafe_set(s, 3, 48 + (c % 10 | 0) | 0); - return caml_string_of_bytes(s); - } - var s$0 = caml_create_bytes(1); - caml_bytes_unsafe_set(s$0, 0, c); - return caml_string_of_bytes(s$0); - } - function uppercase_ascii(c){return 25 < c - 97 >>> 0 ? c : c - 32 | 0;} - function length_aux(len, param){ - var len$0 = len, param$0 = param; - for(;;){ - if(! param$0) return len$0; - var l = param$0[2], len$1 = len$0 + 1 | 0; - len$0 = len$1; - param$0 = l; - } - } - function length(l){return length_aux(0, l);} - function cons(a, l){return [0, a, l];} - function hd(param){ - if(! param) return failwith(_u_); - var a = param[1]; - return a; - } - function rev_append(l1, l2){ - var l1$0 = l1, l2$0 = l2; - for(;;){ - if(! l1$0) return l2$0; - var l1$1 = l1$0[2], a = l1$0[1], l2$1 = [0, a, l2$0]; - l1$0 = l1$1; - l2$0 = l2$1; - } - } - function rev(l){return rev_append(l, 0);} - function init_tailrec_aux(acc, i, n, f){ - var acc$0 = acc, i$0 = i; - for(;;){ - if(n <= i$0) return acc$0; - var i$1 = i$0 + 1 | 0, acc$1 = [0, caml_call1(f, i$0), acc$0]; - acc$0 = acc$1; - i$0 = i$1; - } - } - function init_aux(i, n, f){ - if(n <= i) return 0; - var r = caml_call1(f, i); - return [0, r, init_aux(i + 1 | 0, n, f)]; - } - function init(len, f){ - return 0 <= len - ? 50 - < len - ? rev(init_tailrec_aux(0, 0, len, f)) - : init_aux(0, len, f) - : invalid_arg(_v_); - } - function flatten(param){ - if(! param) return 0; - var r = param[2], l = param[1]; - return symbol(l, flatten(r)); - } - function map$1(f, param){ - if(! param) return 0; - var l = param[2], a = param[1], r = caml_call1(f, a); - return [0, r, map$1(f, l)]; - } - function rev_map(f, l){ - function rmap_f(accu, param){ - var accu$0 = accu, param$0 = param; - for(;;){ - if(! param$0) return accu$0; - var - l = param$0[2], - a = param$0[1], - accu$1 = [0, caml_call1(f, a), accu$0]; - accu$0 = accu$1; - param$0 = l; - } - } - return rmap_f(0, l); - } - function iter(f, param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var l = param$0[2], a = param$0[1]; - caml_call1(f, a); - param$0 = l; - } - } - function fold_left(f, accu, l){ - var accu$0 = accu, l$0 = l; - for(;;){ - if(! l$0) return accu$0; - var l$1 = l$0[2], a = l$0[1], accu$1 = caml_call2(f, accu$0, a); - accu$0 = accu$1; - l$0 = l$1; - } - } - function for_all(p, param){ - var param$0 = param; - for(;;){ - if(! param$0) return 1; - var l = param$0[2], a = param$0[1], _yD_ = caml_call1(p, a); - if(! _yD_) return _yD_; - param$0 = l; - } - } - function assoc_opt(x, param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var l = param$0[2], match = param$0[1], b = match[2], a = match[1]; - if(0 === caml_compare(a, x)) return [0, b]; - param$0 = l; - } - } - function assq(x, param){ - var param$0 = param; - for(;;){ - if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); - var l = param$0[2], match = param$0[1], b = match[2], a = match[1]; - if(a === x) return b; - param$0 = l; - } - } - function find_all(p){ - function find(accu, param){ - var accu$0 = accu, param$0 = param; - for(;;){ - if(! param$0) return rev(accu$0); - var l = param$0[2], x = param$0[1]; - if(caml_call1(p, x)){ - var accu$1 = [0, x, accu$0]; - accu$0 = accu$1; - param$0 = l; - } - else - param$0 = l; - } - } - var _yB_ = 0; - return function(_yC_){return find(_yB_, _yC_);}; - } - function filter_map(f){ - function aux(accu, param){ - var accu$0 = accu, param$0 = param; - for(;;){ - if(! param$0) return rev(accu$0); - var l = param$0[2], x = param$0[1], match = caml_call1(f, x); - if(match){ - var v = match[1], accu$1 = [0, v, accu$0]; - accu$0 = accu$1; - param$0 = l; - } - else - param$0 = l; - } - } - var _yz_ = 0; - return function(_yA_){return aux(_yz_, _yA_);}; - } - function partition(p, l){ - function part(yes, no, param){ - var yes$0 = yes, no$0 = no, param$0 = param; - for(;;){ - if(! param$0){var _yy_ = rev(no$0); return [0, rev(yes$0), _yy_];} - var l = param$0[2], x = param$0[1]; - if(caml_call1(p, x)){ - var yes$1 = [0, x, yes$0]; - yes$0 = yes$1; - param$0 = l; - } - else{var no$1 = [0, x, no$0]; no$0 = no$1; param$0 = l;} - } - } - return part(0, 0, l); - } - function sort_uniq(cmp, l){ - function rev_merge(l1, l2, accu){ - var l1$0 = l1, l2$0 = l2, accu$0 = accu; - for(;;){ - if(! l1$0) return rev_append(l2$0, accu$0); - if(! l2$0) return rev_append(l1$0, accu$0); - var - t2 = l2$0[2], - h2 = l2$0[1], - t1 = l1$0[2], - h1 = l1$0[1], - c = caml_call2(cmp, h1, h2); - if(0 === c){ - var accu$1 = [0, h1, accu$0]; - l1$0 = t1; - l2$0 = t2; - accu$0 = accu$1; - } - else if(0 <= c){ - var accu$2 = [0, h2, accu$0]; - l2$0 = t2; - accu$0 = accu$2; - } - else{var accu$3 = [0, h1, accu$0]; l1$0 = t1; accu$0 = accu$3;} - } - } - function rev_merge_rev(l1, l2, accu){ - var l1$0 = l1, l2$0 = l2, accu$0 = accu; - for(;;){ - if(! l1$0) return rev_append(l2$0, accu$0); - if(! l2$0) return rev_append(l1$0, accu$0); - var - t2 = l2$0[2], - h2 = l2$0[1], - t1 = l1$0[2], - h1 = l1$0[1], - c = caml_call2(cmp, h1, h2); - if(0 === c){ - var accu$1 = [0, h1, accu$0]; - l1$0 = t1; - l2$0 = t2; - accu$0 = accu$1; - } - else if(0 < c){ - var accu$2 = [0, h1, accu$0]; - l1$0 = t1; - accu$0 = accu$2; - } - else{var accu$3 = [0, h2, accu$0]; l2$0 = t2; accu$0 = accu$3;} - } - } - function sort(n, l){ - if(2 === n){ - if(l){ - var match = l[2]; - if(match){ - var - tl = match[2], - x2 = match[1], - x1 = l[1], - c = caml_call2(cmp, x1, x2), - s = - 0 === c - ? [0, x1, 0] - : 0 <= c ? [0, x2, [0, x1, 0]] : [0, x1, [0, x2, 0]]; - return [0, s, tl]; - } - } - } - else if(3 === n && l){ - var _ys_ = l[2]; - if(_ys_){ - var match$2 = _ys_[2]; - if(match$2){ - var - tl$1 = match$2[2], - x3 = match$2[1], - x2$0 = _ys_[1], - x1$0 = l[1], - c$0 = caml_call2(cmp, x1$0, x2$0); - if(0 === c$0) - var - c$1 = caml_call2(cmp, x2$0, x3), - _yt_ = - 0 === c$1 - ? [0, x2$0, 0] - : 0 <= c$1 ? [0, x3, [0, x2$0, 0]] : [0, x2$0, [0, x3, 0]], - s$0 = _yt_; - else if(0 <= c$0){ - var c$2 = caml_call2(cmp, x1$0, x3); - if(0 === c$2) - var _yu_ = [0, x2$0, [0, x1$0, 0]]; - else if(0 <= c$2) - var - c$3 = caml_call2(cmp, x2$0, x3), - _yv_ = - 0 === c$3 - ? [0, x2$0, [0, x1$0, 0]] - : 0 - <= c$3 - ? [0, x3, [0, x2$0, [0, x1$0, 0]]] - : [0, x2$0, [0, x3, [0, x1$0, 0]]], - _yu_ = _yv_; - else - var _yu_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; - var s$0 = _yu_; - } - else{ - var c$4 = caml_call2(cmp, x2$0, x3); - if(0 === c$4) - var _yw_ = [0, x1$0, [0, x2$0, 0]]; - else if(0 <= c$4) - var - c$5 = caml_call2(cmp, x1$0, x3), - _yx_ = - 0 === c$5 - ? [0, x1$0, [0, x2$0, 0]] - : 0 - <= c$5 - ? [0, x3, [0, x1$0, [0, x2$0, 0]]] - : [0, x1$0, [0, x3, [0, x2$0, 0]]], - _yw_ = _yx_; - else - var _yw_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; - var s$0 = _yw_; - } - return [0, s$0, tl$1]; - } - } - } - var - n1 = n >> 1, - n2 = n - n1 | 0, - match$0 = rev_sort(n1, l), - l2 = match$0[2], - s1 = match$0[1], - match$1 = rev_sort(n2, l2), - tl$0 = match$1[2], - s2 = match$1[1]; - return [0, rev_merge_rev(s1, s2, 0), tl$0]; - } - function rev_sort(n, l){ - if(2 === n){ - if(l){ - var match = l[2]; - if(match){ - var - tl = match[2], - x2 = match[1], - x1 = l[1], - c = caml_call2(cmp, x1, x2), - s = - 0 === c - ? [0, x1, 0] - : 0 < c ? [0, x1, [0, x2, 0]] : [0, x2, [0, x1, 0]]; - return [0, s, tl]; - } - } - } - else if(3 === n && l){ - var _ym_ = l[2]; - if(_ym_){ - var match$2 = _ym_[2]; - if(match$2){ - var - tl$1 = match$2[2], - x3 = match$2[1], - x2$0 = _ym_[1], - x1$0 = l[1], - c$0 = caml_call2(cmp, x1$0, x2$0); - if(0 === c$0) - var - c$1 = caml_call2(cmp, x2$0, x3), - _yn_ = - 0 === c$1 - ? [0, x2$0, 0] - : 0 < c$1 ? [0, x2$0, [0, x3, 0]] : [0, x3, [0, x2$0, 0]], - s$0 = _yn_; - else if(0 < c$0){ - var c$2 = caml_call2(cmp, x2$0, x3); - if(0 === c$2) - var _yo_ = [0, x1$0, [0, x2$0, 0]]; - else if(0 < c$2) - var _yo_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; - else - var - c$3 = caml_call2(cmp, x1$0, x3), - _yp_ = - 0 === c$3 - ? [0, x1$0, [0, x2$0, 0]] - : 0 - < c$3 - ? [0, x1$0, [0, x3, [0, x2$0, 0]]] - : [0, x3, [0, x1$0, [0, x2$0, 0]]], - _yo_ = _yp_; - var s$0 = _yo_; - } - else{ - var c$4 = caml_call2(cmp, x1$0, x3); - if(0 === c$4) - var _yq_ = [0, x2$0, [0, x1$0, 0]]; - else if(0 < c$4) - var _yq_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; - else - var - c$5 = caml_call2(cmp, x2$0, x3), - _yr_ = - 0 === c$5 - ? [0, x2$0, [0, x1$0, 0]] - : 0 - < c$5 - ? [0, x2$0, [0, x3, [0, x1$0, 0]]] - : [0, x3, [0, x2$0, [0, x1$0, 0]]], - _yq_ = _yr_; - var s$0 = _yq_; - } - return [0, s$0, tl$1]; - } - } - } - var - n1 = n >> 1, - n2 = n - n1 | 0, - match$0 = sort(n1, l), - l2 = match$0[2], - s1 = match$0[1], - match$1 = sort(n2, l2), - tl$0 = match$1[2], - s2 = match$1[1]; - return [0, rev_merge(s1, s2, 0), tl$0]; - } - var len = length(l); - return 2 <= len ? sort(len, l)[1] : l; - } - function compare(_yl_, _yk_){return caml_int_compare(_yl_, _yk_);} - function min(x, y){return x <= y ? x : y;} - function max$0(x, y){return y <= x ? x : y;} - function to_string(x){return "" + x;} - function make$0(n, c){ - var s = caml_create_bytes(n); - caml_fill_bytes(s, 0, n, c); - return s; - } - var empty = caml_create_bytes(0); - function copy(s){ - var len = caml_ml_bytes_length(s), r = caml_create_bytes(len); - caml_blit_bytes(s, 0, r, 0, len); - return r; - } - function of_string(s){return copy(caml_bytes_of_string(s));} - function sub(s, ofs, len){ - if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs){ - var r = caml_create_bytes(len); - caml_blit_bytes(s, ofs, r, 0, len); - return r; - } - return invalid_arg(_w_); - } - function sub_string(b, ofs, len){ - return caml_string_of_bytes(sub(b, ofs, len)); - } - function blit(s1, ofs1, s2, ofs2, len){ - if - (0 <= len - && - 0 <= ofs1 - && - (caml_ml_bytes_length(s1) - len | 0) >= ofs1 - && 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2){caml_blit_bytes(s1, ofs1, s2, ofs2, len); return;} - return invalid_arg(_x_); - } - function blit_string(s1, ofs1, s2, ofs2, len){ - if - (0 <= len - && - 0 <= ofs1 - && - (caml_ml_string_length(s1) - len | 0) >= ofs1 - && 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2){caml_blit_string(s1, ofs1, s2, ofs2, len); return;} - return invalid_arg(_y_); - } - function is_space(param){ - var _yj_ = param - 9 | 0; - a: - { - if(4 < _yj_ >>> 0){if(23 !== _yj_) break a;} else if(2 === _yj_) break a; - return 1; - } - return 0; - } - function trim(s){ - var len = caml_ml_bytes_length(s), i = [0, 0]; - for(;;){ - if(i[1] >= len) break; - if(! is_space(caml_bytes_unsafe_get(s, i[1]))) break; - i[1]++; - } - var j = [0, len - 1 | 0]; - for(;;){ - if(i[1] <= j[1] && is_space(caml_bytes_unsafe_get(s, j[1]))){j[1]--; continue;} - return i[1] <= j[1] ? sub(s, i[1], (j[1] - i[1] | 0) + 1 | 0) : empty; - } - } - function escaped$0(s){ - var n = [0, 0], _yc_ = caml_ml_bytes_length(s) - 1 | 0, _yb_ = 0; - if(_yc_ >= 0){ - var i$0 = _yb_; - for(;;){ - var match = caml_bytes_unsafe_get(s, i$0); - a: - { - b: - { - c: - { - if(32 <= match){ - var _yg_ = match - 34 | 0; - if(58 < _yg_ >>> 0){ - if(93 <= _yg_) break c; - } - else if(56 < _yg_ - 1 >>> 0) break b; - var _yh_ = 1; - break a; - } - if(11 <= match){ - if(13 === match) break b; - } - else if(8 <= match) break b; - } - var _yh_ = 4; - break a; - } - var _yh_ = 2; - } - n[1] = n[1] + _yh_ | 0; - var _yi_ = i$0 + 1 | 0; - if(_yc_ === i$0) break; - i$0 = _yi_; - } - } - if(n[1] === caml_ml_bytes_length(s)) return copy(s); - var s$0 = caml_create_bytes(n[1]); - n[1] = 0; - var _ye_ = caml_ml_bytes_length(s) - 1 | 0, _yd_ = 0; - if(_ye_ >= 0){ - var i = _yd_; - for(;;){ - var c = caml_bytes_unsafe_get(s, i); - a: - { - b: - { - c: - { - if(35 <= c){ - if(92 !== c){if(127 <= c) break c; break b;} - } - else{ - if(32 > c){ - if(14 <= c) break c; - switch(c){ - case 8: - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 98); - break a; - case 9: - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 116); - break a; - case 10: - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 110); - break a; - case 13: - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 114); - break a; - default: break c; - } - } - if(34 > c) break b; - } - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], c); - break a; - } - caml_bytes_unsafe_set(s$0, n[1], 92); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 48 + (c / 100 | 0) | 0); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 48 + ((c / 10 | 0) % 10 | 0) | 0); - n[1]++; - caml_bytes_unsafe_set(s$0, n[1], 48 + (c % 10 | 0) | 0); - break a; - } - caml_bytes_unsafe_set(s$0, n[1], c); - } - n[1]++; - var _yf_ = i + 1 | 0; - if(_ye_ === i) break; - i = _yf_; - } - } - return s$0; - } - function map$2(f, s){ - var l = caml_ml_bytes_length(s); - if(0 === l) return s; - var r = caml_create_bytes(l), _x$_ = l - 1 | 0, _x__ = 0; - if(_x$_ >= 0){ - var i = _x__; - for(;;){ - caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i))); - var _ya_ = i + 1 | 0; - if(_x$_ === i) break; - i = _ya_; - } - } - return r; - } - function uppercase_ascii$0(s){return map$2(uppercase_ascii, s);} - function unsafe_of_string(_x9_){return caml_bytes_of_string(_x9_);} - function unsafe_to_string(_x8_){return caml_string_of_bytes(_x8_);} - function make$1(n, c){return unsafe_to_string(make$0(n, c));} - function sub$0(s, ofs, len){ - return unsafe_to_string(sub(unsafe_of_string(s), ofs, len)); - } - function ensure_ge(x, y){return y <= x ? x : invalid_arg(_z_);} - function sum_lengths(acc, seplen, param){ - var acc$0 = acc, param$0 = param; - for(;;){ - if(! param$0) return acc$0; - var hd = param$0[1]; - if(! param$0[2]) return caml_ml_string_length(hd) + acc$0 | 0; - var - tl = param$0[2], - acc$1 = - ensure_ge((caml_ml_string_length(hd) + seplen | 0) + acc$0 | 0, acc$0); - acc$0 = acc$1; - param$0 = tl; - } - } - function unsafe_blits(dst, pos, sep, seplen, param){ - var pos$0 = pos, param$0 = param; - for(;;){ - if(! param$0) return dst; - var hd = param$0[1]; - if(! param$0[2]){ - caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); - return dst; - } - var tl = param$0[2]; - caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); - caml_blit_string - (sep, 0, dst, pos$0 + caml_ml_string_length(hd) | 0, seplen); - var pos$1 = (pos$0 + caml_ml_string_length(hd) | 0) + seplen | 0; - pos$0 = pos$1; - param$0 = tl; - } - } - function concat(sep, l){ - if(! l) return _A_; - var seplen = caml_ml_string_length(sep); - return unsafe_to_string - (unsafe_blits - (caml_create_bytes(sum_lengths(0, seplen, l)), - 0, - sep, - seplen, - l)); - } - function is_space$0(param){ - var _x7_ = param - 9 | 0; - a: - { - if(4 < _x7_ >>> 0){if(23 !== _x7_) break a;} else if(2 === _x7_) break a; - return 1; - } - return 0; - } - function trim$0(s){ - if(s == cst$1) return s; - if - (! - is_space$0(caml_string_unsafe_get(s, 0)) - && - ! - is_space$0(caml_string_unsafe_get(s, caml_ml_string_length(s) - 1 | 0))) - return s; - return unsafe_to_string(trim(unsafe_of_string(s))); - } - function escaped$1(s){ - function escape_if_needed(s, n, i){ - var i$0 = i; - for(;;){ - if(n <= i$0) return s; - var _x6_ = caml_string_unsafe_get(s, i$0) - 32 | 0; - a: - { - if(59 < _x6_ >>> 0){ - if(33 < _x6_ - 61 >>> 0) break a; - } - else if(2 === _x6_) break a; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - continue; - } - return unsafe_to_string(escaped$0(unsafe_of_string(s))); - } - } - return escape_if_needed(s, caml_ml_string_length(s), 0); - } - function index_rec(s, lim, i, c){ - var i$0 = i; - for(;;){ - if(lim <= i$0) throw caml_maybe_attach_backtrace(Not_found, 1); - if(caml_string_unsafe_get(s, i$0) === c) return i$0; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - } - } - function contains_from(s, i, c){ - var l = caml_ml_string_length(s); - if(0 <= i && l >= i) - try{index_rec(s, l, i, c); var _x4_ = 1; return _x4_;} - catch(_x5_){ - var _x3_ = caml_wrap_exception(_x5_); - if(_x3_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_x3_, 0); - } - return invalid_arg(_B_); - } - function contains(s, c){return contains_from(s, 0, c);} - function uppercase_ascii$1(s){ - return unsafe_to_string(uppercase_ascii$0(unsafe_of_string(s))); - } - function compare$0(x, y){return caml_string_compare(x, y);} - function symbol$0(_x2_, _x1_){return _x2_ == _x1_ ? 1 : 0;} - function init$0(l, f){ - if(0 === l) return [0]; - if(0 > l) return invalid_arg(_C_); - var res = caml_make_vect(l, caml_call1(f, 0)), _xZ_ = l - 1 | 0, _xY_ = 1; - if(_xZ_ >= 1){ - var i = _xY_; - for(;;){ - res[1 + i] = caml_call1(f, i); - var _x0_ = i + 1 | 0; - if(_xZ_ === i) break; - i = _x0_; - } - } - return res; - } - function sub$1(a, ofs, len){ - if(0 <= ofs && 0 <= len && (a.length - 1 - len | 0) >= ofs) - return caml_array_sub(a, ofs, len); - return invalid_arg(_D_); - } - function blit$0(a1, ofs1, a2, ofs2, len){ - if - (0 <= len - && - 0 <= ofs1 - && - (a1.length - 1 - len | 0) >= ofs1 - && 0 <= ofs2 && (a2.length - 1 - len | 0) >= ofs2){ - caml_array_blit(a1, ofs1, a2, ofs2, len); - return; - } - return invalid_arg(_E_); - } - function iter2(f, a, b){ - if(a.length - 1 !== b.length - 1) return invalid_arg(_F_); - var _xW_ = a.length - 2 | 0, _xV_ = 0; - if(_xW_ >= 0){ - var i = _xV_; - for(;;){ - caml_call2(f, a[1 + i], b[1 + i]); - var _xX_ = i + 1 | 0; - if(_xW_ === i) break; - i = _xX_; - } - } - return 0; - } - function to_list(a){ - function tolist(i, res){ - var i$0 = i, res$0 = res; - for(;;){ - if(0 > i$0) return res$0; - var res$1 = [0, a[1 + i$0], res$0], i$1 = i$0 - 1 | 0; - i$0 = i$1; - res$0 = res$1; - } - } - return tolist(a.length - 2 | 0, 0); - } - function list_length(accu, param){ - var accu$0 = accu, param$0 = param; - for(;;){ - if(! param$0) return accu$0; - var t = param$0[2], accu$1 = accu$0 + 1 | 0; - accu$0 = accu$1; - param$0 = t; - } - } - function of_list(l){ - if(! l) return [0]; - var tl = l[2], hd = l[1], a = caml_make_vect(list_length(0, l), hd); - function fill(i, param){ - var i$0 = i, param$0 = param; - for(;;){ - if(! param$0) return a; - var tl = param$0[2], hd = param$0[1]; - a[1 + i$0] = hd; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - param$0 = tl; - } - } - return fill(1, tl); - } - function fold_right(f, a, x){ - var r = [0, x], _xT_ = a.length - 2 | 0; - if(_xT_ >= 0){ - var i = _xT_; - for(;;){ - r[1] = caml_call2(f, a[1 + i], r[1]); - var _xU_ = i - 1 | 0; - if(0 === i) break; - i = _xU_; - } - } - return r[1]; - } - function engine(tbl, state, buf){ - var - result = caml_lex_engine(tbl, state, buf), - _xQ_ = 0 <= result ? 1 : 0, - _xR_ = _xQ_ ? buf[12] !== dummy_pos ? 1 : 0 : _xQ_; - if(_xR_){ - buf[11] = buf[12]; - var _xS_ = buf[12]; - buf[12] = [0, _xS_[1], _xS_[2], _xS_[3], buf[4] + buf[6] | 0]; - } - return result; - } - function from_string(opt, s){ - if(opt) - var sth = opt[1], with_positions = sth; - else - var with_positions = 1; - var - _xO_ = with_positions ? zero_pos : dummy_pos, - _xP_ = with_positions ? zero_pos : dummy_pos; - return [0, - function(lexbuf){lexbuf[9] = 1; return 0;}, - of_string(s), - caml_ml_string_length(s), - 0, - 0, - 0, - 0, - 0, - 1, - [0], - _xP_, - _xO_]; - } - function lexeme(lexbuf){ - var len = lexbuf[6] - lexbuf[5] | 0; - return sub_string(lexbuf[2], lexbuf[5], len); - } - function sub_lexeme(lexbuf, i1, i2){ - var len = i2 - i1 | 0; - return sub_string(lexbuf[2], i1, len); - } - function sub_lexeme_char(lexbuf, i){return caml_bytes_get(lexbuf[2], i);} - function lexeme_char(lexbuf, i){ - return caml_bytes_get(lexbuf[2], lexbuf[5] + i | 0); - } - function Make(Ord){ - function height(param){if(! param) return 0; var h = param[4]; return h;} - function create(l, v, r){ - if(l) var h = l[4], hl = h; else var hl = 0; - if(r) var h$0 = r[4], hr = h$0; else var hr = 0; - var _xN_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _xN_]; - } - function bal(l, v, r){ - if(l) var h = l[4], hl = h; else var hl = 0; - if(r) var h$0 = r[4], hr = h$0; else var hr = 0; - if((hr + 2 | 0) < hl){ - if(! l) return invalid_arg(_H_); - var lr = l[3], lv = l[2], ll = l[1], _xI_ = height(lr); - if(_xI_ <= height(ll)) return create(ll, lv, create(lr, v, r)); - if(! lr) return invalid_arg(_G_); - var lrr = lr[3], lrv = lr[2], lrl = lr[1], _xJ_ = create(lrr, v, r); - return create(create(ll, lv, lrl), lrv, _xJ_); - } - if((hl + 2 | 0) >= hr){ - var _xM_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _xM_]; - } - if(! r) return invalid_arg(_J_); - var rr = r[3], rv = r[2], rl = r[1], _xK_ = height(rl); - if(_xK_ <= height(rr)) return create(create(l, v, rl), rv, rr); - if(! rl) return invalid_arg(_I_); - var rlr = rl[3], rlv = rl[2], rll = rl[1], _xL_ = create(rlr, rv, rr); - return create(create(l, v, rll), rlv, _xL_); - } - function add(x, t){ - if(! t) return [0, 0, x, 0, 1]; - var r = t[3], v = t[2], l = t[1], c = caml_call2(Ord[1], x, v); - if(0 === c) return t; - if(0 <= c){var rr = add(x, r); return r === rr ? t : bal(l, v, rr);} - var ll = add(x, l); - return l === ll ? t : bal(ll, v, r); - } - function singleton(x){return [0, 0, x, 0, 1];} - function add_min_element(x, param){ - if(! param) return singleton(x); - var r = param[3], v = param[2], l = param[1]; - return bal(add_min_element(x, l), v, r); - } - function add_max_element(x, param){ - if(! param) return singleton(x); - var r = param[3], v = param[2], l = param[1]; - return bal(l, v, add_max_element(x, r)); - } - function join(l, v, r){ - if(! l) return add_min_element(v, r); - if(! r) return add_max_element(v, l); - var - rh = r[4], - rr = r[3], - rv = r[2], - rl = r[1], - lh = l[4], - lr = l[3], - lv = l[2], - ll = l[1]; - return (rh + 2 | 0) < lh - ? bal(ll, lv, join(lr, v, r)) - : (lh - + 2 - | 0) - < rh - ? bal(join(l, v, rl), rv, rr) - : create(l, v, r); - } - function min_elt(param){ - var param$0 = param; - for(;;){ - if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); - var l = param$0[1]; - if(! l){var v = param$0[2]; return v;} - param$0 = l; - } - } - function remove_min_elt(param){ - if(! param) return invalid_arg(_K_); - var l = param[1]; - if(l){ - var r = param[3], v = param[2]; - return bal(remove_min_elt(l), v, r); - } - var r$0 = param[3]; - return r$0; - } - function merge(t1, t2){ - if(! t1) return t2; - if(! t2) return t1; - var _xH_ = remove_min_elt(t2); - return bal(t1, min_elt(t2), _xH_); - } - function concat(t1, t2){ - if(! t1) return t2; - if(! t2) return t1; - var _xG_ = remove_min_elt(t2); - return join(t1, min_elt(t2), _xG_); - } - function split(x, param){ - if(! param) return _L_; - var - r = param[3], - v = param[2], - l = param[1], - c = caml_call2(Ord[1], x, v); - if(0 === c) return [0, l, 1, r]; - if(0 <= c){ - var match = split(x, r), rr = match[3], pres = match[2], lr = match[1]; - return [0, join(l, v, lr), pres, rr]; - } - var - match$0 = split(x, l), - rl = match$0[3], - pres$0 = match$0[2], - ll = match$0[1]; - return [0, ll, pres$0, join(rl, v, r)]; - } - var empty = 0; - function is_empty(param){return param ? 0 : 1;} - function remove(x, t){ - if(! t) return 0; - var r = t[3], v = t[2], l = t[1], c = caml_call2(Ord[1], x, v); - if(0 === c) return merge(l, r); - if(0 <= c){var rr = remove(x, r); return r === rr ? t : bal(l, v, rr);} - var ll = remove(x, l); - return l === ll ? t : bal(ll, v, r); - } - function union(s1, s2){ - if(! s1) return s2; - if(! s2) return s1; - var - h2 = s2[4], - r2 = s2[3], - v2 = s2[2], - l2 = s2[1], - h1 = s1[4], - r1 = s1[3], - v1 = s1[2], - l1 = s1[1]; - if(h2 <= h1){ - if(1 === h2) return add(v2, s1); - var - match = split(v1, s2), - r2$0 = match[3], - l2$0 = match[1], - _xE_ = union(r1, r2$0); - return join(union(l1, l2$0), v1, _xE_); - } - if(1 === h1) return add(v1, s2); - var - match$0 = split(v2, s1), - r1$0 = match$0[3], - l1$0 = match$0[1], - _xF_ = union(r1$0, r2); - return join(union(l1$0, l2), v2, _xF_); - } - function inter(s1, s2){ - if(! s1) return 0; - if(! s2) return 0; - var - r1 = s1[3], - v1 = s1[2], - l1 = s1[1], - _xB_ = split(v1, s2), - l2 = _xB_[1]; - if(_xB_[2]){ - var r2 = _xB_[3], _xC_ = inter(r1, r2); - return join(inter(l1, l2), v1, _xC_); - } - var r2$0 = _xB_[3], _xD_ = inter(r1, r2$0); - return concat(inter(l1, l2), _xD_); - } - function diff(s1, s2){ - if(! s1) return 0; - if(! s2) return s1; - var - r1 = s1[3], - v1 = s1[2], - l1 = s1[1], - _xy_ = split(v1, s2), - l2 = _xy_[1]; - if(_xy_[2]){ - var r2 = _xy_[3], _xz_ = diff(r1, r2); - return concat(diff(l1, l2), _xz_); - } - var r2$0 = _xy_[3], _xA_ = diff(r1, r2$0); - return join(diff(l1, l2), v1, _xA_); - } - function cons_enum(s, e){ - var s$0 = s, e$0 = e; - for(;;){ - if(! s$0) return e$0; - var r = s$0[3], v = s$0[2], l = s$0[1], e$1 = [0, v, r, e$0]; - s$0 = l; - e$0 = e$1; - } - } - function compare_aux(e1, e2){ - var e1$0 = e1, e2$0 = e2; - for(;;){ - if(! e1$0) return e2$0 ? -1 : 0; - if(! e2$0) return 1; - var - e2$1 = e2$0[3], - r2 = e2$0[2], - v2 = e2$0[1], - e1$1 = e1$0[3], - r1 = e1$0[2], - v1 = e1$0[1], - c = caml_call2(Ord[1], v1, v2); - if(0 !== c) return c; - var e2$2 = cons_enum(r2, e2$1), e1$2 = cons_enum(r1, e1$1); - e1$0 = e1$2; - e2$0 = e2$2; - } - } - function compare(s1, s2){ - var _xx_ = cons_enum(s2, 0); - return compare_aux(cons_enum(s1, 0), _xx_); - } - function equal(s1, s2){return 0 === compare(s1, s2) ? 1 : 0;} - function subset(s1, s2){ - var s1$0 = s1, s2$0 = s2; - for(;;){ - if(! s1$0) return 1; - if(! s2$0) return 0; - var - r2 = s2$0[3], - v2 = s2$0[2], - l2 = s2$0[1], - r1 = s1$0[3], - v1 = s1$0[2], - l1 = s1$0[1], - c = caml_call2(Ord[1], v1, v2); - if(0 === c){ - var _xu_ = subset(l1, l2); - if(! _xu_) return _xu_; - s1$0 = r1; - s2$0 = r2; - } - else if(0 <= c){ - var _xv_ = subset([0, 0, v1, r1, 0], r2); - if(! _xv_) return _xv_; - s1$0 = l1; - } - else{ - var _xw_ = subset([0, l1, v1, 0, 0], l2); - if(! _xw_) return _xw_; - s1$0 = r1; - } - } - } - function iter(f, param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var r = param$0[3], v = param$0[2], l = param$0[1]; - iter(f, l); - caml_call1(f, v); - param$0 = r; - } - } - function fold(f, s, accu){ - var s$0 = s, accu$0 = accu; - for(;;){ - if(! s$0) return accu$0; - var - r = s$0[3], - v = s$0[2], - l = s$0[1], - accu$1 = caml_call2(f, v, fold(f, l, accu$0)); - s$0 = r; - accu$0 = accu$1; - } - } - function cardinal(param){ - if(! param) return; - var r = param[3], l = param[1]; - cardinal(r); - cardinal(l); - return; - } - function elements_aux(accu, param){ - var accu$0 = accu, param$0 = param; - for(;;){ - if(! param$0) return accu$0; - var - r = param$0[3], - v = param$0[2], - l = param$0[1], - accu$1 = [0, v, elements_aux(accu$0, r)]; - accu$0 = accu$1; - param$0 = l; - } - } - function elements(s){return elements_aux(0, s);} - function find_last_opt_aux(v0, f, param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var r = param$0[3], v0$0 = param$0[2], l = param$0[1]; - param$0 = caml_call1(f, v0$0) ? r : l; - } - } - function find_last_opt(f, param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var r = param$0[3], v = param$0[2], l = param$0[1]; - if(caml_call1(f, v)) return find_last_opt_aux(v, f, r); - param$0 = l; - } - } - function of_sorted_list(l){ - function sub(n, l){ - if(3 >= n >>> 0) - switch(n){ - case 0: - return [0, 0, l]; - case 1: - if(l){var l$3 = l[2], x0 = l[1]; return [0, [0, 0, x0, 0, 1], l$3];} - break; - case 2: - if(l){ - var match$1 = l[2]; - if(match$1){ - var l$4 = match$1[2], x1 = match$1[1], x0$0 = l[1]; - return [0, [0, [0, 0, x0$0, 0, 1], x1, 0, 2], l$4]; - } - } - break; - default: - if(l){ - var _xt_ = l[2]; - if(_xt_){ - var match$2 = _xt_[2]; - if(match$2){ - var - l$5 = match$2[2], - x2 = match$2[1], - x1$0 = _xt_[1], - x0$1 = l[1]; - return [0, - [0, [0, 0, x0$1, 0, 1], x1$0, [0, 0, x2, 0, 1], 2], - l$5]; - } - } - } - } - var nl = n / 2 | 0, match = sub(nl, l), l$0 = match[2], left = match[1]; - if(! l$0) - throw caml_maybe_attach_backtrace([0, Assert_failure, _M_], 1); - var - l$1 = l$0[2], - mid = l$0[1], - match$0 = sub((n - nl | 0) - 1 | 0, l$1), - l$2 = match$0[2], - right = match$0[1]; - return [0, create(left, mid, right), l$2]; - } - return sub(length(l), l)[1]; - } - function of_list(l){ - if(! l) return empty; - var _xp_ = l[2], x0 = l[1]; - if(! _xp_) return singleton(x0); - var _xq_ = _xp_[2], x1 = _xp_[1]; - if(! _xq_) return add(x1, singleton(x0)); - var _xr_ = _xq_[2], x2 = _xq_[1]; - if(! _xr_) return add(x2, add(x1, singleton(x0))); - var _xs_ = _xr_[2], x3 = _xr_[1]; - if(! _xs_) return add(x3, add(x2, add(x1, singleton(x0)))); - if(_xs_[2]) return of_sorted_list(sort_uniq(Ord[1], l)); - var x4 = _xs_[1]; - return add(x4, add(x3, add(x2, add(x1, singleton(x0))))); - } - return [0, - , - , - , - add, - , - , - , - , - , - , - , - , - , - , - , - , - empty, - is_empty, - , - remove, - union, - inter, - , - , - diff, - , - , - compare, - equal, - subset, - iter, - fold, - , - , - , - , - cardinal, - , - elements, - , - , - , - , - , - , - , - , - , - , - find_last_opt, - , - , - , - , - , - , - of_list]; - } - function _N_(_xn_){ - var _xo_ = Make(_xn_); - return [0, - _xo_[17], - _xo_[18], - , - _xo_[4], - , - _xo_[20], - _xo_[21], - _xo_[22], - , - _xo_[25], - _xo_[28], - _xo_[29], - _xo_[30], - _xo_[31], - , - _xo_[32], - , - , - , - , - , - _xo_[37], - _xo_[39], - , - , - , - , - , - , - , - , - , - , - , - , - _xo_[50], - _xo_[57]]; - } - function Make$0(Ord){ - function height(param){if(! param) return 0; var h = param[5]; return h;} - function create(l, x, d, r){ - var - hl = height(l), - hr = height(r), - _xm_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, x, d, r, _xm_]; - } - function singleton(x, d){return [0, 0, x, d, 0, 1];} - function bal(l, x, d, r){ - if(l) var h = l[5], hl = h; else var hl = 0; - if(r) var h$0 = r[5], hr = h$0; else var hr = 0; - if((hr + 2 | 0) < hl){ - if(! l) return invalid_arg(_P_); - var lr = l[4], ld = l[3], lv = l[2], ll = l[1], _xh_ = height(lr); - if(_xh_ <= height(ll)) return create(ll, lv, ld, create(lr, x, d, r)); - if(! lr) return invalid_arg(_O_); - var - lrr = lr[4], - lrd = lr[3], - lrv = lr[2], - lrl = lr[1], - _xi_ = create(lrr, x, d, r); - return create(create(ll, lv, ld, lrl), lrv, lrd, _xi_); - } - if((hl + 2 | 0) >= hr){ - var _xl_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, x, d, r, _xl_]; - } - if(! r) return invalid_arg(_R_); - var rr = r[4], rd = r[3], rv = r[2], rl = r[1], _xj_ = height(rl); - if(_xj_ <= height(rr)) return create(create(l, x, d, rl), rv, rd, rr); - if(! rl) return invalid_arg(_Q_); - var - rlr = rl[4], - rld = rl[3], - rlv = rl[2], - rll = rl[1], - _xk_ = create(rlr, rv, rd, rr); - return create(create(l, x, d, rll), rlv, rld, _xk_); - } - function add(x, data, m){ - if(! m) return [0, 0, x, data, 0, 1]; - var - h = m[5], - r = m[4], - d = m[3], - v = m[2], - l = m[1], - c = caml_call2(Ord[1], x, v); - if(0 === c) return d === data ? m : [0, l, x, data, r, h]; - if(0 <= c){ - var rr = add(x, data, r); - return r === rr ? m : bal(l, v, d, rr); - } - var ll = add(x, data, l); - return l === ll ? m : bal(ll, v, d, r); - } - function find(x, param){ - var param$0 = param; - for(;;){ - if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); - var - r = param$0[4], - d = param$0[3], - v = param$0[2], - l = param$0[1], - c = caml_call2(Ord[1], x, v); - if(0 === c) return d; - var r$0 = 0 <= c ? r : l; - param$0 = r$0; - } - } - function find_opt(x, param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var - r = param$0[4], - d = param$0[3], - v = param$0[2], - l = param$0[1], - c = caml_call2(Ord[1], x, v); - if(0 === c) return [0, d]; - var r$0 = 0 <= c ? r : l; - param$0 = r$0; - } - } - function mem(x, param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - r = param$0[4], - v = param$0[2], - l = param$0[1], - c = caml_call2(Ord[1], x, v), - _xg_ = 0 === c ? 1 : 0; - if(_xg_) return _xg_; - var r$0 = 0 <= c ? r : l; - param$0 = r$0; - } - } - function min_binding(param){ - var param$0 = param; - for(;;){ - if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); - var l = param$0[1]; - if(! l){var d = param$0[3], v = param$0[2]; return [0, v, d];} - param$0 = l; - } - } - function remove_min_binding(param){ - if(! param) return invalid_arg(_S_); - var l = param[1]; - if(l){ - var r = param[4], d = param[3], v = param[2]; - return bal(remove_min_binding(l), v, d, r); - } - var r$0 = param[4]; - return r$0; - } - function _w8_(t1, t2){ - if(! t1) return t2; - if(! t2) return t1; - var match = min_binding(t2), d = match[2], x = match[1]; - return bal(t1, x, d, remove_min_binding(t2)); - } - function remove(x, m){ - if(! m) return 0; - var r = m[4], d = m[3], v = m[2], l = m[1], c = caml_call2(Ord[1], x, v); - if(0 === c) return _w8_(l, r); - if(0 <= c){ - var rr = remove(x, r); - return r === rr ? m : bal(l, v, d, rr); - } - var ll = remove(x, l); - return l === ll ? m : bal(ll, v, d, r); - } - function iter(f, param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var r = param$0[4], d = param$0[3], v = param$0[2], l = param$0[1]; - iter(f, l); - caml_call2(f, v, d); - param$0 = r; - } - } - function fold(f, m, accu){ - var m$0 = m, accu$0 = accu; - for(;;){ - if(! m$0) return accu$0; - var - r = m$0[4], - d = m$0[3], - v = m$0[2], - l = m$0[1], - accu$1 = caml_call3(f, v, d, fold(f, l, accu$0)); - m$0 = r; - accu$0 = accu$1; - } - } - function for_all(p, param){ - var param$0 = param; - for(;;){ - if(! param$0) return 1; - var - r = param$0[4], - d = param$0[3], - v = param$0[2], - l = param$0[1], - _xd_ = caml_call2(p, v, d); - if(_xd_){ - var _xe_ = for_all(p, l); - if(_xe_){param$0 = r; continue;} - var _xf_ = _xe_; - } - else - var _xf_ = _xd_; - return _xf_; - } - } - function add_min_binding(k, x, param){ - if(! param) return singleton(k, x); - var r = param[4], d = param[3], v = param[2], l = param[1]; - return bal(add_min_binding(k, x, l), v, d, r); - } - function add_max_binding(k, x, param){ - if(! param) return singleton(k, x); - var r = param[4], d = param[3], v = param[2], l = param[1]; - return bal(l, v, d, add_max_binding(k, x, r)); - } - function join(l, v, d, r){ - if(! l) return add_min_binding(v, d, r); - if(! r) return add_max_binding(v, d, l); - var - rh = r[5], - rr = r[4], - rd = r[3], - rv = r[2], - rl = r[1], - lh = l[5], - lr = l[4], - ld = l[3], - lv = l[2], - ll = l[1]; - return (rh + 2 | 0) < lh - ? bal(ll, lv, ld, join(lr, v, d, r)) - : (lh - + 2 - | 0) - < rh - ? bal(join(l, v, d, rl), rv, rd, rr) - : create(l, v, d, r); - } - function concat(t1, t2){ - if(! t1) return t2; - if(! t2) return t1; - var match = min_binding(t2), d = match[2], x = match[1]; - return join(t1, x, d, remove_min_binding(t2)); - } - function concat_or_join(t1, v, d, t2){ - if(! d) return concat(t1, t2); - var d$0 = d[1]; - return join(t1, v, d$0, t2); - } - function split(x, param){ - if(! param) return _U_; - var - r = param[4], - d = param[3], - v = param[2], - l = param[1], - c = caml_call2(Ord[1], x, v); - if(0 === c) return [0, l, [0, d], r]; - if(0 <= c){ - var match = split(x, r), rr = match[3], pres = match[2], lr = match[1]; - return [0, join(l, v, d, lr), pres, rr]; - } - var - match$0 = split(x, l), - rl = match$0[3], - pres$0 = match$0[2], - ll = match$0[1]; - return [0, ll, pres$0, join(rl, v, d, r)]; - } - function merge(f, s1, s2){ - if(s1){ - var h1 = s1[5], r1 = s1[4], d1 = s1[3], v1 = s1[2], l1 = s1[1]; - if(height(s2) <= h1){ - var - match = split(v1, s2), - r2 = match[3], - d2 = match[2], - l2 = match[1], - _w$_ = merge(f, r1, r2), - _xa_ = caml_call3(f, v1, [0, d1], d2); - return concat_or_join(merge(f, l1, l2), v1, _xa_, _w$_); - } - } - else if(! s2) return 0; - if(! s2) throw caml_maybe_attach_backtrace([0, Assert_failure, _V_], 1); - var - r2$0 = s2[4], - d2$0 = s2[3], - v2 = s2[2], - l2$0 = s2[1], - match$0 = split(v2, s1), - r1$0 = match$0[3], - d1$0 = match$0[2], - l1$0 = match$0[1], - _xb_ = merge(f, r1$0, r2$0), - _xc_ = caml_call3(f, v2, d1$0, [0, d2$0]); - return concat_or_join(merge(f, l1$0, l2$0), v2, _xc_, _xb_); - } - function cons_enum(m, e){ - var m$0 = m, e$0 = e; - for(;;){ - if(! m$0) return e$0; - var - r = m$0[4], - d = m$0[3], - v = m$0[2], - l = m$0[1], - e$1 = [0, v, d, r, e$0]; - m$0 = l; - e$0 = e$1; - } - } - function compare(cmp, m1, m2){ - function compare_aux(e1, e2){ - var e1$0 = e1, e2$0 = e2; - for(;;){ - if(! e1$0){if(e2$0) return; return;} - if(! e2$0) return; - var - e2$1 = e2$0[4], - r2 = e2$0[3], - d2 = e2$0[2], - v2 = e2$0[1], - e1$1 = e1$0[4], - r1 = e1$0[3], - d1 = e1$0[2], - v1 = e1$0[1], - c = caml_call2(Ord[1], v1, v2); - if(0 !== c) return c; - var c$0 = caml_call2(cmp, d1, d2); - if(0 !== c$0) return c$0; - var e2$2 = cons_enum(r2, e2$1), e1$2 = cons_enum(r1, e1$1); - e1$0 = e1$2; - e2$0 = e2$2; - } - } - var _w__ = cons_enum(m2, 0); - return compare_aux(cons_enum(m1, 0), _w__); - } - function equal(cmp, m1, m2){ - function equal_aux(e1, e2){ - var e1$0 = e1, e2$0 = e2; - for(;;){ - if(! e1$0){if(e2$0) return; return;} - if(! e2$0) return; - var - e2$1 = e2$0[4], - r2 = e2$0[3], - d2 = e2$0[2], - v2 = e2$0[1], - e1$1 = e1$0[4], - r1 = e1$0[3], - d1 = e1$0[2], - v1 = e1$0[1]; - if(0 === caml_call2(Ord[1], v1, v2) && caml_call2(cmp, d1, d2)){ - var e2$2 = cons_enum(r2, e2$1), e1$2 = cons_enum(r1, e1$1); - e1$0 = e1$2; - e2$0 = e2$2; - continue; - } - return; - } - } - var _w9_ = cons_enum(m2, 0); - return equal_aux(cons_enum(m1, 0), _w9_); - } - function cardinal(param){ - if(! param) return; - var r = param[4], l = param[1]; - cardinal(r); - cardinal(l); - return; - } - return [0, - , - , - , - , - 0, - , - add, - find, - , - , - , - , - , - , - , - , - find_opt, - mem, - , - , - , - , - , - remove, - , - iter, - , - , - fold, - for_all, - , - , - , - , - , - , - , - merge, - , - , - , - , - , - compare, - equal, - cardinal]; - } - function _W_(_w6_){ - var _w7_ = Make$0(_w6_); - return [0, - _w7_[5], - , - _w7_[18], - _w7_[7], - , - , - _w7_[24], - _w7_[38], - , - _w7_[44], - _w7_[45], - _w7_[26], - _w7_[29], - _w7_[30], - , - , - , - , - _w7_[46], - , - , - , - , - , - , - , - , - _w7_[8], - _w7_[17]]; - } - var Empty = [248, _X_, caml_fresh_oo_id(0)]; - function create(param){return [0, 0, 0];} - function clear(s){s[1] = 0; s[2] = 0; return;} - function push(x, s){s[1] = [0, x, s[1]]; s[2] = s[2] + 1 | 0; return 0;} - function pop(s){ - var match = s[1]; - if(! match) throw caml_maybe_attach_backtrace(Empty, 1); - var tl = match[2]; - s[1] = tl; - s[2] = s[2] - 1 | 0; - return; - } - function pop_opt(s){ - var match = s[1]; - if(! match) return 0; - var tl = match[2], hd = match[1]; - s[1] = tl; - s[2] = s[2] - 1 | 0; - return [0, hd]; - } - function top(s){ - if(s[1]) return; - throw caml_maybe_attach_backtrace(Empty, 1); - } - function top_opt(s){ - var match = s[1]; - if(! match) return 0; - var hd = match[1]; - return [0, hd]; - } - function iter$0(f, s){return iter(f, s[1]);} - var Empty$0 = [248, _Y_, caml_fresh_oo_id(0)]; - function create$0(param){return [0, 0, 0, 0];} - function clear$0(q){q[1] = 0; q[2] = 0; q[3] = 0; return;} - function add(x, q){ - var cell = [0, x, 0], match = q[3]; - return match - ? (q[1] = q[1] + 1 | 0, match[2] = cell, q[3] = cell, 0) - : (q[1] = 1, q[2] = cell, q[3] = cell, 0); - } - function peek_opt(q){ - var match = q[2]; - if(! match) return 0; - var content = match[1]; - return [0, content]; - } - function take(q){ - var _w5_ = q[2]; - if(! _w5_) throw caml_maybe_attach_backtrace(Empty$0, 1); - var content = _w5_[1]; - if(_w5_[2]){ - var next = _w5_[2]; - q[1] = q[1] - 1 | 0; - q[2] = next; - return content; - } - clear$0(q); - return content; - } - function take_opt(q){ - var _w4_ = q[2]; - if(! _w4_) return 0; - var content = _w4_[1]; - if(_w4_[2]){ - var next = _w4_[2]; - q[1] = q[1] - 1 | 0; - q[2] = next; - return [0, content]; - } - clear$0(q); - return [0, content]; - } - function is_empty(q){return 0 === q[1] ? 1 : 0;} - function create$1(n){ - var - n$0 = 1 <= n ? n : 1, - n$1 = max_string_length < n$0 ? max_string_length : n$0, - s = caml_create_bytes(n$1); - return [0, s, 0, n$1, s]; - } - function contents(b){return sub_string(b[1], 0, b[2]);} - function sub$2(b, ofs, len){ - if(0 <= ofs && 0 <= len && (b[2] - len | 0) >= ofs) - return sub_string(b[1], ofs, len); - return invalid_arg(_Z_); - } - function length$0(b){return b[2];} - function clear$1(b){b[2] = 0; return;} - function reset(b){ - b[2] = 0; - b[1] = b[4]; - b[3] = caml_ml_bytes_length(b[1]); - return; - } - function resize(b, more){ - var old_pos = b[2], old_len = b[3], new_len = [0, old_len]; - for(;;){ - if(new_len[1] >= (old_pos + more | 0)) break; - new_len[1] = 2 * new_len[1] | 0; - } - if(max_string_length < new_len[1]) - if((old_pos + more | 0) <= max_string_length) - new_len[1] = max_string_length; - else - failwith(_aa_); - var new_buffer = caml_create_bytes(new_len[1]); - blit(b[1], 0, new_buffer, 0, b[2]); - b[1] = new_buffer; - b[3] = new_len[1]; - if((b[2] + more | 0) > b[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _$_], 1); - if((old_pos + more | 0) <= b[3]) return; - throw caml_maybe_attach_backtrace([0, Assert_failure, ___], 1); - } - function add_char(b, c){ - var pos = b[2]; - if(b[3] <= pos) resize(b, 1); - caml_bytes_unsafe_set(b[1], pos, c); - b[2] = pos + 1 | 0; - return 0; - } - function add_substring(b, s, offset, len){ - var _w1_ = offset < 0 ? 1 : 0; - if(_w1_) - var _w2_ = _w1_; - else - var - _w3_ = len < 0 ? 1 : 0, - _w2_ = _w3_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); - if(_w2_) invalid_arg(_ab_); - var new_position = b[2] + len | 0; - if(b[3] < new_position) resize(b, len); - caml_blit_string(s, offset, b[1], b[2], len); - b[2] = new_position; - return 0; - } - function add_subbytes(b, s, offset, len){ - return add_substring(b, unsafe_to_string(s), offset, len); - } - function write_stringlit(b, s){ - var len = caml_ml_string_length(s), new_position = b[2] + len | 0; - if(b[3] < new_position) resize(b, len); - caml_blit_string(s, 0, b[1], b[2], len); - b[2] = new_position; - return 0; - } - function default_float_precision(fconv){return 5 === fconv[2] ? 12 : -6;} - function buffer_create(init_size){ - return [0, 0, caml_create_bytes(init_size)]; - } - function buffer_check_size(buf, overhead){ - var len = caml_ml_bytes_length(buf[2]), min_len = buf[1] + overhead | 0; - if(len < min_len){ - var - new_len = max$0(len * 2 | 0, min_len), - new_str = caml_create_bytes(new_len); - blit(buf[2], 0, new_str, 0, len); - buf[2] = new_str; - } - return; - } - function buffer_add_char(buf, c){ - buffer_check_size(buf, 1); - caml_bytes_set(buf[2], buf[1], c); - buf[1] = buf[1] + 1 | 0; - return; - } - function buffer_add_string(buf, s){ - var str_len = caml_ml_string_length(s); - buffer_check_size(buf, str_len); - blit_string(s, 0, buf[2], buf[1], str_len); - buf[1] = buf[1] + str_len | 0; - return; - } - function buffer_contents(buf){return sub_string(buf[2], 0, buf[1]);} - function char_of_fconv(opt, fconv){ - if(opt) var sth = opt[1], cF = sth; else var cF = 70; - switch(fconv[2]){ - case 0: - return 102; - case 1: - return 101; - case 2: - return 69; - case 3: - return 103; - case 4: - return 71; - case 5: - return cF; - case 6: - return 104; - case 7: - return 72; - default: return 70; - } - } - function bprint_fconv_flag(buf, fconv){ - switch(fconv[1]){ - case 0: break; - case 1: - buffer_add_char(buf, 43); break; - default: buffer_add_char(buf, 32); - } - if(8 <= fconv[2]) return buffer_add_char(buf, 35); - return; - } - function string_of_formatting_lit(formatting_lit){ - if(typeof formatting_lit === "number") - switch(formatting_lit){ - case 0: - return _ac_; - case 1: - return _ad_; - case 2: - return _ae_; - case 3: - return _af_; - case 4: - return _ag_; - case 5: - return _ah_; - default: return _ai_; - } - switch(formatting_lit[0]){ - case 0: - var str = formatting_lit[1]; return str; - case 1: - var str$0 = formatting_lit[1]; return str$0; - default: - var c = formatting_lit[1]; return symbol_concat(_aj_, make$1(1, c)); - } - } - function bprint_fmtty(buf, fmtty){ - var fmtty$0 = fmtty; - for(;;){ - if(typeof fmtty$0 === "number") return; - switch(fmtty$0[0]){ - case 0: - var fmtty$1 = fmtty$0[1]; - buffer_add_string(buf, _ak_); - fmtty$0 = fmtty$1; - break; - case 1: - var fmtty$2 = fmtty$0[1]; - buffer_add_string(buf, _al_); - fmtty$0 = fmtty$2; - break; - case 2: - var fmtty$3 = fmtty$0[1]; - buffer_add_string(buf, _am_); - fmtty$0 = fmtty$3; - break; - case 3: - var fmtty$4 = fmtty$0[1]; - buffer_add_string(buf, _an_); - fmtty$0 = fmtty$4; - break; - case 4: - var fmtty$5 = fmtty$0[1]; - buffer_add_string(buf, _ao_); - fmtty$0 = fmtty$5; - break; - case 5: - var fmtty$6 = fmtty$0[1]; - buffer_add_string(buf, _ap_); - fmtty$0 = fmtty$6; - break; - case 6: - var fmtty$7 = fmtty$0[1]; - buffer_add_string(buf, _aq_); - fmtty$0 = fmtty$7; - break; - case 7: - var fmtty$8 = fmtty$0[1]; - buffer_add_string(buf, _ar_); - fmtty$0 = fmtty$8; - break; - case 8: - var fmtty$9 = fmtty$0[2], sub_fmtty = fmtty$0[1]; - buffer_add_string(buf, _as_); - bprint_fmtty(buf, sub_fmtty); - buffer_add_string(buf, _at_); - fmtty$0 = fmtty$9; - break; - case 9: - var fmtty$10 = fmtty$0[3], sub_fmtty$0 = fmtty$0[1]; - buffer_add_string(buf, _au_); - bprint_fmtty(buf, sub_fmtty$0); - buffer_add_string(buf, _av_); - fmtty$0 = fmtty$10; - break; - case 10: - var fmtty$11 = fmtty$0[1]; - buffer_add_string(buf, _aw_); - fmtty$0 = fmtty$11; - break; - case 11: - var fmtty$12 = fmtty$0[1]; - buffer_add_string(buf, _ax_); - fmtty$0 = fmtty$12; - break; - case 12: - var fmtty$13 = fmtty$0[1]; - buffer_add_string(buf, _ay_); - fmtty$0 = fmtty$13; - break; - case 13: - var fmtty$14 = fmtty$0[1]; - buffer_add_string(buf, _az_); - fmtty$0 = fmtty$14; - break; - default: - var fmtty$15 = fmtty$0[1]; - buffer_add_string(buf, _aA_); - fmtty$0 = fmtty$15; - } - } - } - function symm(param){ - if(typeof param === "number") return 0; - switch(param[0]){ - case 0: - var rest = param[1]; return [0, symm(rest)]; - case 1: - var rest$0 = param[1]; return [1, symm(rest$0)]; - case 2: - var rest$1 = param[1]; return [2, symm(rest$1)]; - case 3: - var rest$2 = param[1]; return [3, symm(rest$2)]; - case 4: - var rest$3 = param[1]; return [4, symm(rest$3)]; - case 5: - var rest$4 = param[1]; return [5, symm(rest$4)]; - case 6: - var rest$5 = param[1]; return [6, symm(rest$5)]; - case 7: - var rest$6 = param[1]; return [7, symm(rest$6)]; - case 8: - var rest$7 = param[2], ty = param[1]; return [8, ty, symm(rest$7)]; - case 9: - var rest$8 = param[3], ty2 = param[2], ty1 = param[1]; - return [9, ty2, ty1, symm(rest$8)]; - case 10: - var rest$9 = param[1]; return [10, symm(rest$9)]; - case 11: - var rest$10 = param[1]; return [11, symm(rest$10)]; - case 12: - var rest$11 = param[1]; return [12, symm(rest$11)]; - case 13: - var rest$12 = param[1]; return [13, symm(rest$12)]; - default: var rest$13 = param[1]; return [14, symm(rest$13)]; - } - } - function fmtty_rel_det(param){ - if(typeof param === "number") - return [0, - function(param){return;}, - function(param){return;}, - function(param){return;}, - function(param){return;}]; - switch(param[0]){ - case 0: - var - rest = param[1], - match = fmtty_rel_det(rest), - de = match[4], - ed = match[3], - af = match[2], - fa = match[1]; - return [0, - function(param){fa(0); return;}, - function(param){af(0); return;}, - ed, - de]; - case 1: - var - rest$0 = param[1], - match$0 = fmtty_rel_det(rest$0), - de$0 = match$0[4], - ed$0 = match$0[3], - af$0 = match$0[2], - fa$0 = match$0[1]; - return [0, - function(param){fa$0(0); return;}, - function(param){af$0(0); return;}, - ed$0, - de$0]; - case 2: - var - rest$1 = param[1], - match$1 = fmtty_rel_det(rest$1), - de$1 = match$1[4], - ed$1 = match$1[3], - af$1 = match$1[2], - fa$1 = match$1[1]; - return [0, - function(param){fa$1(0); return;}, - function(param){af$1(0); return;}, - ed$1, - de$1]; - case 3: - var - rest$2 = param[1], - match$2 = fmtty_rel_det(rest$2), - de$2 = match$2[4], - ed$2 = match$2[3], - af$2 = match$2[2], - fa$2 = match$2[1]; - return [0, - function(param){fa$2(0); return;}, - function(param){af$2(0); return;}, - ed$2, - de$2]; - case 4: - var - rest$3 = param[1], - match$3 = fmtty_rel_det(rest$3), - de$3 = match$3[4], - ed$3 = match$3[3], - af$3 = match$3[2], - fa$3 = match$3[1]; - return [0, - function(param){fa$3(0); return;}, - function(param){af$3(0); return;}, - ed$3, - de$3]; - case 5: - var - rest$4 = param[1], - match$4 = fmtty_rel_det(rest$4), - de$4 = match$4[4], - ed$4 = match$4[3], - af$4 = match$4[2], - fa$4 = match$4[1]; - return [0, - function(param){fa$4(0); return;}, - function(param){af$4(0); return;}, - ed$4, - de$4]; - case 6: - var - rest$5 = param[1], - match$5 = fmtty_rel_det(rest$5), - de$5 = match$5[4], - ed$5 = match$5[3], - af$5 = match$5[2], - fa$5 = match$5[1]; - return [0, - function(param){fa$5(0); return;}, - function(param){af$5(0); return;}, - ed$5, - de$5]; - case 7: - var - rest$6 = param[1], - match$6 = fmtty_rel_det(rest$6), - de$6 = match$6[4], - ed$6 = match$6[3], - af$6 = match$6[2], - fa$6 = match$6[1]; - return [0, - function(param){fa$6(0); return;}, - function(param){af$6(0); return;}, - ed$6, - de$6]; - case 8: - var - rest$7 = param[2], - match$7 = fmtty_rel_det(rest$7), - de$7 = match$7[4], - ed$7 = match$7[3], - af$7 = match$7[2], - fa$7 = match$7[1]; - return [0, - function(param){fa$7(0); return;}, - function(param){af$7(0); return;}, - ed$7, - de$7]; - case 9: - var - rest$8 = param[3], - ty2 = param[2], - ty1 = param[1], - match$8 = fmtty_rel_det(rest$8), - de$8 = match$8[4], - ed$8 = match$8[3], - af$8 = match$8[2], - fa$8 = match$8[1], - ty = trans(symm(ty1), ty2), - match$9 = fmtty_rel_det(ty), - jd = match$9[4], - dj = match$9[3], - ga = match$9[2], - ag = match$9[1]; - return [0, - function(param){fa$8(0); ag(0); return;}, - function(param){ga(0); af$8(0); return;}, - function(param){ed$8(0); dj(0); return;}, - function(param){jd(0); de$8(0); return;}]; - case 10: - var - rest$9 = param[1], - match$10 = fmtty_rel_det(rest$9), - de$9 = match$10[4], - ed$9 = match$10[3], - af$9 = match$10[2], - fa$9 = match$10[1]; - return [0, - function(param){fa$9(0); return;}, - function(param){af$9(0); return;}, - ed$9, - de$9]; - case 11: - var - rest$10 = param[1], - match$11 = fmtty_rel_det(rest$10), - de$10 = match$11[4], - ed$10 = match$11[3], - af$10 = match$11[2], - fa$10 = match$11[1]; - return [0, - function(param){fa$10(0); return;}, - function(param){af$10(0); return;}, - ed$10, - de$10]; - case 12: - var - rest$11 = param[1], - match$12 = fmtty_rel_det(rest$11), - de$11 = match$12[4], - ed$11 = match$12[3], - af$11 = match$12[2], - fa$11 = match$12[1]; - return [0, - function(param){fa$11(0); return;}, - function(param){af$11(0); return;}, - ed$11, - de$11]; - case 13: - var - rest$12 = param[1], - match$13 = fmtty_rel_det(rest$12), - de$12 = match$13[4], - ed$12 = match$13[3], - af$12 = match$13[2], - fa$12 = match$13[1]; - return [0, - function(param){fa$12(0); return;}, - function(param){af$12(0); return;}, - function(param){ed$12(0); return;}, - function(param){de$12(0); return;}]; - default: - var - rest$13 = param[1], - match$14 = fmtty_rel_det(rest$13), - de$13 = match$14[4], - ed$13 = match$14[3], - af$13 = match$14[2], - fa$13 = match$14[1]; - return [0, - function(param){fa$13(0); return;}, - function(param){af$13(0); return;}, - function(param){ed$13(0); return;}, - function(param){de$13(0); return;}]; - } - } - function trans(ty1, ty2){ - a: - { - b: - { - c: - { - d: - { - e: - { - f: - { - g: - { - if(typeof ty1 !== "number"){ - switch(ty1[0]){ - case 0: - var rest1 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 0: - var rest2 = ty2[1]; return [0, trans(rest1, rest2)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 1: - var rest1$0 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 1: - var rest2$0 = ty2[1]; return [1, trans(rest1$0, rest2$0)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 2: - var rest1$1 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 2: - var rest2$1 = ty2[1]; return [2, trans(rest1$1, rest2$1)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 3: - var rest1$2 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 3: - var rest2$2 = ty2[1]; return [3, trans(rest1$2, rest2$2)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 4: - var rest1$3 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 4: - var rest2$3 = ty2[1]; return [4, trans(rest1$3, rest2$3)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 5: - var rest1$4 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 5: - var rest2$4 = ty2[1]; return [5, trans(rest1$4, rest2$4)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 6: - var rest1$5 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 6: - var rest2$5 = ty2[1]; return [6, trans(rest1$5, rest2$5)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 7: - var rest1$6 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 7: - var rest2$6 = ty2[1]; return [7, trans(rest1$6, rest2$6)]; - case 8: - break f; - case 9: - break g; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - break; - case 8: - var rest1$7 = ty1[2], ty1$0 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 8: - var - rest2$7 = ty2[2], - ty2$0 = ty2[1], - _w0_ = trans(rest1$7, rest2$7); - return [8, trans(ty1$0, ty2$0), _w0_]; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aK_], 1); - case 9: - var rest1$8 = ty1[3], ty12 = ty1[2], ty11 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 8: - break f; - case 9: - var - rest2$8 = ty2[3], - ty22 = ty2[2], - ty21 = ty2[1], - ty = trans(symm(ty12), ty21), - match = fmtty_rel_det(ty), - f4 = match[4], - f2 = match[2]; - f2(0); - f4(0); - return [9, ty11, ty22, trans(rest1$8, rest2$8)]; - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aL_], 1); - case 10: - var rest1$9 = ty1[1]; - if(typeof ty2 !== "number" && 10 === ty2[0]){ - var rest2$9 = ty2[1]; - return [10, trans(rest1$9, rest2$9)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aM_], 1); - case 11: - var rest1$10 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 10: - break a; - case 11: - var rest2$10 = ty2[1]; - return [11, trans(rest1$10, rest2$10)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aN_], 1); - case 12: - var rest1$11 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 10: - break a; - case 11: - break b; - case 12: - var rest2$11 = ty2[1]; - return [12, trans(rest1$11, rest2$11)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aO_], 1); - case 13: - var rest1$12 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - var rest2$12 = ty2[1]; - return [13, trans(rest1$12, rest2$12)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aP_], 1); - default: - var rest1$13 = ty1[1]; - if(typeof ty2 !== "number") - switch(ty2[0]){ - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - var rest2$13 = ty2[1]; - return [14, trans(rest1$13, rest2$13)]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aQ_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aJ_], 1); - } - if(typeof ty2 === "number") return 0; - switch(ty2[0]){ - case 10: - break a; - case 11: - break b; - case 12: - break c; - case 13: - break d; - case 14: - break e; - case 8: - break f; - case 9: break; - default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _aB_], 1); - } - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aD_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aC_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aI_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aH_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aG_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aF_], 1); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aE_], 1); - } - var Type_mismatch = [248, _aR_, caml_fresh_oo_id(0)]; - function type_padding(pad, fmtty){ - if(typeof pad === "number") return [0, 0, fmtty]; - if(0 === pad[0]){ - var w = pad[2], padty = pad[1]; - return [0, [0, padty, w], fmtty]; - } - if(typeof fmtty !== "number" && 2 === fmtty[0]){ - var rest = fmtty[1], padty$0 = pad[1]; - return [0, [1, padty$0], rest]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - } - function type_padprec(pad, prec, fmtty){ - var match = type_padding(pad, fmtty); - if(typeof prec !== "number"){ - var rest$1 = match[2], pad$2 = match[1], p = prec[1]; - return [0, pad$2, [0, p], rest$1]; - } - if(! prec){ - var rest$0 = match[2], pad$1 = match[1]; - return [0, pad$1, 0, rest$0]; - } - var match$0 = match[2]; - if(typeof match$0 !== "number" && 2 === match$0[0]){ - var rest = match$0[1], pad$0 = match[1]; - return [0, pad$0, 1, rest]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - } - function type_format(fmt, fmtty){ - var _wZ_ = type_format_gen(fmt, fmtty); - if(typeof _wZ_[2] !== "number") - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var fmt$0 = _wZ_[1]; - return fmt$0; - } - function type_format_gen(fmt, fmtty){ - if(typeof fmt === "number") return [0, 0, fmtty]; - switch(fmt[0]){ - case 0: - if(typeof fmtty !== "number" && 0 === fmtty[0]){ - var - fmtty_rest = fmtty[1], - fmt_rest = fmt[1], - match = type_format_gen(fmt_rest, fmtty_rest), - fmtty$0 = match[2], - fmt$0 = match[1]; - return [0, [0, fmt$0], fmtty$0]; - } - break; - case 1: - if(typeof fmtty !== "number" && 0 === fmtty[0]){ - var - fmtty_rest$0 = fmtty[1], - fmt_rest$0 = fmt[1], - match$0 = type_format_gen(fmt_rest$0, fmtty_rest$0), - fmtty$1 = match$0[2], - fmt$1 = match$0[1]; - return [0, [1, fmt$1], fmtty$1]; - } - break; - case 2: - var - fmt_rest$1 = fmt[2], - pad = fmt[1], - match$1 = type_padding(pad, fmtty), - pad$0 = match$1[1], - match$2 = match$1[2]; - if(typeof match$2 !== "number" && 1 === match$2[0]){ - var - fmtty_rest$1 = match$2[1], - match$3 = type_format_gen(fmt_rest$1, fmtty_rest$1), - fmtty$2 = match$3[2], - fmt$2 = match$3[1]; - return [0, [2, pad$0, fmt$2], fmtty$2]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 3: - var - fmt_rest$2 = fmt[2], - pad$1 = fmt[1], - match$4 = type_padding(pad$1, fmtty), - pad$2 = match$4[1], - match$5 = match$4[2]; - if(typeof match$5 !== "number" && 1 === match$5[0]){ - var - fmtty_rest$2 = match$5[1], - match$6 = type_format_gen(fmt_rest$2, fmtty_rest$2), - fmtty$3 = match$6[2], - fmt$3 = match$6[1]; - return [0, [3, pad$2, fmt$3], fmtty$3]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 4: - var - fmt_rest$3 = fmt[4], - prec = fmt[3], - pad$3 = fmt[2], - iconv = fmt[1], - match$7 = type_padprec(pad$3, prec, fmtty), - pad$4 = match$7[1], - match$8 = match$7[3]; - if(typeof match$8 !== "number" && 2 === match$8[0]){ - var - fmtty_rest$3 = match$8[1], - prec$0 = match$7[2], - match$9 = type_format_gen(fmt_rest$3, fmtty_rest$3), - fmtty$4 = match$9[2], - fmt$4 = match$9[1]; - return [0, [4, iconv, pad$4, prec$0, fmt$4], fmtty$4]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 5: - var - fmt_rest$4 = fmt[4], - prec$1 = fmt[3], - pad$5 = fmt[2], - iconv$0 = fmt[1], - match$10 = type_padprec(pad$5, prec$1, fmtty), - pad$6 = match$10[1], - match$11 = match$10[3]; - if(typeof match$11 !== "number" && 3 === match$11[0]){ - var - fmtty_rest$4 = match$11[1], - prec$2 = match$10[2], - match$12 = type_format_gen(fmt_rest$4, fmtty_rest$4), - fmtty$5 = match$12[2], - fmt$5 = match$12[1]; - return [0, [5, iconv$0, pad$6, prec$2, fmt$5], fmtty$5]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 6: - var - fmt_rest$5 = fmt[4], - prec$3 = fmt[3], - pad$7 = fmt[2], - iconv$1 = fmt[1], - match$13 = type_padprec(pad$7, prec$3, fmtty), - pad$8 = match$13[1], - match$14 = match$13[3]; - if(typeof match$14 !== "number" && 4 === match$14[0]){ - var - fmtty_rest$5 = match$14[1], - prec$4 = match$13[2], - match$15 = type_format_gen(fmt_rest$5, fmtty_rest$5), - fmtty$6 = match$15[2], - fmt$6 = match$15[1]; - return [0, [6, iconv$1, pad$8, prec$4, fmt$6], fmtty$6]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 7: - var - fmt_rest$6 = fmt[4], - prec$5 = fmt[3], - pad$9 = fmt[2], - iconv$2 = fmt[1], - match$16 = type_padprec(pad$9, prec$5, fmtty), - pad$10 = match$16[1], - match$17 = match$16[3]; - if(typeof match$17 !== "number" && 5 === match$17[0]){ - var - fmtty_rest$6 = match$17[1], - prec$6 = match$16[2], - match$18 = type_format_gen(fmt_rest$6, fmtty_rest$6), - fmtty$7 = match$18[2], - fmt$7 = match$18[1]; - return [0, [7, iconv$2, pad$10, prec$6, fmt$7], fmtty$7]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 8: - var - fmt_rest$7 = fmt[4], - prec$7 = fmt[3], - pad$11 = fmt[2], - fconv = fmt[1], - match$19 = type_padprec(pad$11, prec$7, fmtty), - pad$12 = match$19[1], - match$20 = match$19[3]; - if(typeof match$20 !== "number" && 6 === match$20[0]){ - var - fmtty_rest$7 = match$20[1], - prec$8 = match$19[2], - match$21 = type_format_gen(fmt_rest$7, fmtty_rest$7), - fmtty$8 = match$21[2], - fmt$8 = match$21[1]; - return [0, [8, fconv, pad$12, prec$8, fmt$8], fmtty$8]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 9: - var - fmt_rest$8 = fmt[2], - pad$13 = fmt[1], - match$22 = type_padding(pad$13, fmtty), - pad$14 = match$22[1], - match$23 = match$22[2]; - if(typeof match$23 !== "number" && 7 === match$23[0]){ - var - fmtty_rest$8 = match$23[1], - match$24 = type_format_gen(fmt_rest$8, fmtty_rest$8), - fmtty$9 = match$24[2], - fmt$9 = match$24[1]; - return [0, [9, pad$14, fmt$9], fmtty$9]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - case 10: - var - fmt_rest$9 = fmt[1], - match$25 = type_format_gen(fmt_rest$9, fmtty), - fmtty$10 = match$25[2], - fmt$10 = match$25[1]; - return [0, [10, fmt$10], fmtty$10]; - case 11: - var - fmt_rest$10 = fmt[2], - str = fmt[1], - match$26 = type_format_gen(fmt_rest$10, fmtty), - fmtty$11 = match$26[2], - fmt$11 = match$26[1]; - return [0, [11, str, fmt$11], fmtty$11]; - case 12: - var - fmt_rest$11 = fmt[2], - chr = fmt[1], - match$27 = type_format_gen(fmt_rest$11, fmtty), - fmtty$12 = match$27[2], - fmt$12 = match$27[1]; - return [0, [12, chr, fmt$12], fmtty$12]; - case 13: - if(typeof fmtty !== "number" && 8 === fmtty[0]){ - var - fmtty_rest$9 = fmtty[2], - sub_fmtty = fmtty[1], - fmt_rest$12 = fmt[3], - sub_fmtty$0 = fmt[2], - pad_opt = fmt[1]; - if(caml_notequal([0, sub_fmtty$0], [0, sub_fmtty])) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var - match$28 = type_format_gen(fmt_rest$12, fmtty_rest$9), - fmtty$13 = match$28[2], - fmt$13 = match$28[1]; - return [0, [13, pad_opt, sub_fmtty, fmt$13], fmtty$13]; - } - break; - case 14: - if(typeof fmtty !== "number" && 9 === fmtty[0]){ - var - fmtty_rest$10 = fmtty[3], - sub_fmtty1 = fmtty[1], - fmt_rest$13 = fmt[3], - sub_fmtty$1 = fmt[2], - pad_opt$0 = fmt[1], - _wY_ = [0, erase_rel(sub_fmtty1)]; - if(caml_notequal([0, erase_rel(sub_fmtty$1)], _wY_)) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var - match$29 = type_format_gen(fmt_rest$13, erase_rel(fmtty_rest$10)), - fmtty$14 = match$29[2], - fmt$14 = match$29[1]; - return [0, [14, pad_opt$0, sub_fmtty1, fmt$14], fmtty$14]; - } - break; - case 15: - if(typeof fmtty !== "number" && 10 === fmtty[0]){ - var - fmtty_rest$11 = fmtty[1], - fmt_rest$14 = fmt[1], - match$30 = type_format_gen(fmt_rest$14, fmtty_rest$11), - fmtty$15 = match$30[2], - fmt$15 = match$30[1]; - return [0, [15, fmt$15], fmtty$15]; - } - break; - case 16: - if(typeof fmtty !== "number" && 11 === fmtty[0]){ - var - fmtty_rest$12 = fmtty[1], - fmt_rest$15 = fmt[1], - match$31 = type_format_gen(fmt_rest$15, fmtty_rest$12), - fmtty$16 = match$31[2], - fmt$16 = match$31[1]; - return [0, [16, fmt$16], fmtty$16]; - } - break; - case 17: - var - fmt_rest$16 = fmt[2], - formatting_lit = fmt[1], - match$32 = type_format_gen(fmt_rest$16, fmtty), - fmtty$17 = match$32[2], - fmt$17 = match$32[1]; - return [0, [17, formatting_lit, fmt$17], fmtty$17]; - case 18: - var fmt_rest$17 = fmt[2], formatting_gen = fmt[1]; - return type_formatting_gen(formatting_gen, fmt_rest$17, fmtty); - case 19: - if(typeof fmtty !== "number" && 13 === fmtty[0]){ - var - fmtty_rest$13 = fmtty[1], - fmt_rest$18 = fmt[1], - match$33 = type_format_gen(fmt_rest$18, fmtty_rest$13), - fmtty$18 = match$33[2], - fmt$18 = match$33[1]; - return [0, [19, fmt$18], fmtty$18]; - } - break; - case 20: - if(typeof fmtty !== "number" && 1 === fmtty[0]){ - var - fmtty_rest$14 = fmtty[1], - fmt_rest$19 = fmt[3], - char_set = fmt[2], - width_opt = fmt[1], - match$34 = type_format_gen(fmt_rest$19, fmtty_rest$14), - fmtty$19 = match$34[2], - fmt$19 = match$34[1]; - return [0, [20, width_opt, char_set, fmt$19], fmtty$19]; - } - break; - case 21: - if(typeof fmtty !== "number" && 2 === fmtty[0]){ - var - fmtty_rest$15 = fmtty[1], - fmt_rest$20 = fmt[2], - counter = fmt[1], - match$35 = type_format_gen(fmt_rest$20, fmtty_rest$15), - fmtty$20 = match$35[2], - fmt$20 = match$35[1]; - return [0, [21, counter, fmt$20], fmtty$20]; - } - break; - case 23: - var rest = fmt[2], ign = fmt[1]; - return type_ignored_param(ign, rest, fmtty); - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - } - function type_formatting_gen(formatting_gen, fmt0, fmtty0){ - if(0 === formatting_gen[0]){ - var - match = formatting_gen[1], - str = match[2], - fmt1 = match[1], - match$0 = type_format_gen(fmt1, fmtty0), - fmtty2 = match$0[2], - fmt2 = match$0[1], - match$1 = type_format_gen(fmt0, fmtty2), - fmtty3 = match$1[2], - fmt3 = match$1[1]; - return [0, [18, [0, [0, fmt2, str]], fmt3], fmtty3]; - } - var - match$2 = formatting_gen[1], - str$0 = match$2[2], - fmt1$0 = match$2[1], - match$3 = type_format_gen(fmt1$0, fmtty0), - fmtty2$0 = match$3[2], - fmt2$0 = match$3[1], - match$4 = type_format_gen(fmt0, fmtty2$0), - fmtty3$0 = match$4[2], - fmt3$0 = match$4[1]; - return [0, [18, [1, [0, fmt2$0, str$0]], fmt3$0], fmtty3$0]; - } - function type_ignored_param(ign, fmt, fmtty){ - if(typeof ign !== "number") - switch(ign[0]){ - case 0: - return type_ignored_param_one(ign, fmt, fmtty); - case 1: - return type_ignored_param_one(ign, fmt, fmtty); - case 2: - return type_ignored_param_one(ign, fmt, fmtty); - case 3: - return type_ignored_param_one(ign, fmt, fmtty); - case 4: - return type_ignored_param_one(ign, fmt, fmtty); - case 5: - return type_ignored_param_one(ign, fmt, fmtty); - case 6: - return type_ignored_param_one(ign, fmt, fmtty); - case 7: - return type_ignored_param_one(ign, fmt, fmtty); - case 8: - var sub_fmtty = ign[2], pad_opt = ign[1]; - return type_ignored_param_one([8, pad_opt, sub_fmtty], fmt, fmtty); - case 9: - var - sub_fmtty$0 = ign[2], - pad_opt$0 = ign[1], - _wX_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), - match$0 = _wX_[2], - fmtty$1 = match$0[2], - fmt$1 = match$0[1], - sub_fmtty$1 = _wX_[1]; - return [0, [23, [9, pad_opt$0, sub_fmtty$1], fmt$1], fmtty$1]; - case 10: - return type_ignored_param_one(ign, fmt, fmtty); - default: return type_ignored_param_one(ign, fmt, fmtty); - } - switch(ign){ - case 0: - return type_ignored_param_one(ign, fmt, fmtty); - case 1: - return type_ignored_param_one(ign, fmt, fmtty); - case 2: - if(typeof fmtty !== "number" && 14 === fmtty[0]){ - var - fmtty_rest = fmtty[1], - match = type_format_gen(fmt, fmtty_rest), - fmtty$0 = match[2], - fmt$0 = match[1]; - return [0, [23, 2, fmt$0], fmtty$0]; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - default: return type_ignored_param_one(ign, fmt, fmtty); - } - } - function type_ignored_param_one(ign, fmt, fmtty){ - var - match = type_format_gen(fmt, fmtty), - fmtty$0 = match[2], - fmt$0 = match[1]; - return [0, [23, ign, fmt$0], fmtty$0]; - } - function type_ignored_format_substituti(sub_fmtty, fmt, fmtty){ - if(typeof sub_fmtty === "number") - return [0, 0, type_format_gen(fmt, fmtty)]; - switch(sub_fmtty[0]){ - case 0: - if(typeof fmtty !== "number" && 0 === fmtty[0]){ - var - fmtty_rest = fmtty[1], - sub_fmtty_rest = sub_fmtty[1], - match = - type_ignored_format_substituti(sub_fmtty_rest, fmt, fmtty_rest), - fmt$0 = match[2], - sub_fmtty_rest$0 = match[1]; - return [0, [0, sub_fmtty_rest$0], fmt$0]; - } - break; - case 1: - if(typeof fmtty !== "number" && 1 === fmtty[0]){ - var - fmtty_rest$0 = fmtty[1], - sub_fmtty_rest$1 = sub_fmtty[1], - match$0 = - type_ignored_format_substituti(sub_fmtty_rest$1, fmt, fmtty_rest$0), - fmt$1 = match$0[2], - sub_fmtty_rest$2 = match$0[1]; - return [0, [1, sub_fmtty_rest$2], fmt$1]; - } - break; - case 2: - if(typeof fmtty !== "number" && 2 === fmtty[0]){ - var - fmtty_rest$1 = fmtty[1], - sub_fmtty_rest$3 = sub_fmtty[1], - match$1 = - type_ignored_format_substituti(sub_fmtty_rest$3, fmt, fmtty_rest$1), - fmt$2 = match$1[2], - sub_fmtty_rest$4 = match$1[1]; - return [0, [2, sub_fmtty_rest$4], fmt$2]; - } - break; - case 3: - if(typeof fmtty !== "number" && 3 === fmtty[0]){ - var - fmtty_rest$2 = fmtty[1], - sub_fmtty_rest$5 = sub_fmtty[1], - match$2 = - type_ignored_format_substituti(sub_fmtty_rest$5, fmt, fmtty_rest$2), - fmt$3 = match$2[2], - sub_fmtty_rest$6 = match$2[1]; - return [0, [3, sub_fmtty_rest$6], fmt$3]; - } - break; - case 4: - if(typeof fmtty !== "number" && 4 === fmtty[0]){ - var - fmtty_rest$3 = fmtty[1], - sub_fmtty_rest$7 = sub_fmtty[1], - match$3 = - type_ignored_format_substituti(sub_fmtty_rest$7, fmt, fmtty_rest$3), - fmt$4 = match$3[2], - sub_fmtty_rest$8 = match$3[1]; - return [0, [4, sub_fmtty_rest$8], fmt$4]; - } - break; - case 5: - if(typeof fmtty !== "number" && 5 === fmtty[0]){ - var - fmtty_rest$4 = fmtty[1], - sub_fmtty_rest$9 = sub_fmtty[1], - match$4 = - type_ignored_format_substituti(sub_fmtty_rest$9, fmt, fmtty_rest$4), - fmt$5 = match$4[2], - sub_fmtty_rest$10 = match$4[1]; - return [0, [5, sub_fmtty_rest$10], fmt$5]; - } - break; - case 6: - if(typeof fmtty !== "number" && 6 === fmtty[0]){ - var - fmtty_rest$5 = fmtty[1], - sub_fmtty_rest$11 = sub_fmtty[1], - match$5 = - type_ignored_format_substituti - (sub_fmtty_rest$11, fmt, fmtty_rest$5), - fmt$6 = match$5[2], - sub_fmtty_rest$12 = match$5[1]; - return [0, [6, sub_fmtty_rest$12], fmt$6]; - } - break; - case 7: - if(typeof fmtty !== "number" && 7 === fmtty[0]){ - var - fmtty_rest$6 = fmtty[1], - sub_fmtty_rest$13 = sub_fmtty[1], - match$6 = - type_ignored_format_substituti - (sub_fmtty_rest$13, fmt, fmtty_rest$6), - fmt$7 = match$6[2], - sub_fmtty_rest$14 = match$6[1]; - return [0, [7, sub_fmtty_rest$14], fmt$7]; - } - break; - case 8: - if(typeof fmtty !== "number" && 8 === fmtty[0]){ - var - fmtty_rest$7 = fmtty[2], - sub2_fmtty = fmtty[1], - sub_fmtty_rest$15 = sub_fmtty[2], - sub2_fmtty$0 = sub_fmtty[1]; - if(caml_notequal([0, sub2_fmtty$0], [0, sub2_fmtty])) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var - match$7 = - type_ignored_format_substituti - (sub_fmtty_rest$15, fmt, fmtty_rest$7), - fmt$8 = match$7[2], - sub_fmtty_rest$16 = match$7[1]; - return [0, [8, sub2_fmtty, sub_fmtty_rest$16], fmt$8]; - } - break; - case 9: - if(typeof fmtty !== "number" && 9 === fmtty[0]){ - var - fmtty_rest$8 = fmtty[3], - sub2_fmtty$1 = fmtty[2], - sub1_fmtty = fmtty[1], - sub_fmtty_rest$17 = sub_fmtty[3], - sub2_fmtty$2 = sub_fmtty[2], - sub1_fmtty$0 = sub_fmtty[1], - _wV_ = [0, erase_rel(sub1_fmtty)]; - if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _wV_)) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var _wW_ = [0, erase_rel(sub2_fmtty$1)]; - if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _wW_)) - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var - sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1), - match$8 = fmtty_rel_det(sub_fmtty$0), - f4 = match$8[4], - f2 = match$8[2]; - f2(0); - f4(0); - var - match$9 = - type_ignored_format_substituti - (erase_rel(sub_fmtty_rest$17), fmt, fmtty_rest$8), - fmt$9 = match$9[2], - sub_fmtty_rest$18 = match$9[1]; - return [0, - [9, sub1_fmtty, sub2_fmtty$1, symm(sub_fmtty_rest$18)], - fmt$9]; - } - break; - case 10: - if(typeof fmtty !== "number" && 10 === fmtty[0]){ - var - fmtty_rest$9 = fmtty[1], - sub_fmtty_rest$19 = sub_fmtty[1], - match$10 = - type_ignored_format_substituti - (sub_fmtty_rest$19, fmt, fmtty_rest$9), - fmt$10 = match$10[2], - sub_fmtty_rest$20 = match$10[1]; - return [0, [10, sub_fmtty_rest$20], fmt$10]; - } - break; - case 11: - if(typeof fmtty !== "number" && 11 === fmtty[0]){ - var - fmtty_rest$10 = fmtty[1], - sub_fmtty_rest$21 = sub_fmtty[1], - match$11 = - type_ignored_format_substituti - (sub_fmtty_rest$21, fmt, fmtty_rest$10), - fmt$11 = match$11[2], - sub_fmtty_rest$22 = match$11[1]; - return [0, [11, sub_fmtty_rest$22], fmt$11]; - } - break; - case 13: - if(typeof fmtty !== "number" && 13 === fmtty[0]){ - var - fmtty_rest$11 = fmtty[1], - sub_fmtty_rest$23 = sub_fmtty[1], - match$12 = - type_ignored_format_substituti - (sub_fmtty_rest$23, fmt, fmtty_rest$11), - fmt$12 = match$12[2], - sub_fmtty_rest$24 = match$12[1]; - return [0, [13, sub_fmtty_rest$24], fmt$12]; - } - break; - case 14: - if(typeof fmtty !== "number" && 14 === fmtty[0]){ - var - fmtty_rest$12 = fmtty[1], - sub_fmtty_rest$25 = sub_fmtty[1], - match$13 = - type_ignored_format_substituti - (sub_fmtty_rest$25, fmt, fmtty_rest$12), - fmt$13 = match$13[2], - sub_fmtty_rest$26 = match$13[1]; - return [0, [14, sub_fmtty_rest$26], fmt$13]; - } - break; - } - throw caml_maybe_attach_backtrace(Type_mismatch, 1); - } - function recast(fmt, fmtty){ - return type_format(fmt, erase_rel(symm(fmtty))); - } - function fix_padding(padty, width, str){ - var - len = caml_ml_string_length(str), - padty$0 = 0 <= width ? padty : 0, - width$0 = abs(width); - if(width$0 <= len) return str; - var _wU_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _wU_); - switch(padty$0){ - case 0: - blit_string(str, 0, res, 0, len); break; - case 1: - blit_string(str, 0, res, width$0 - len | 0, len); break; - default: - a: - if(0 < len){ - if - (43 !== caml_string_get(str, 0) - && 45 !== caml_string_get(str, 0) && 32 !== caml_string_get(str, 0)) - break a; - caml_bytes_set(res, 0, caml_string_get(str, 0)); - blit_string(str, 1, res, (width$0 - len | 0) + 1 | 0, len - 1 | 0); - break; - } - a: - if(1 < len && 48 === caml_string_get(str, 0)){ - if(120 !== caml_string_get(str, 1) && 88 !== caml_string_get(str, 1)) - break a; - caml_bytes_set(res, 1, caml_string_get(str, 1)); - blit_string(str, 2, res, (width$0 - len | 0) + 2 | 0, len - 2 | 0); - break; - } - blit_string(str, 0, res, width$0 - len | 0, len); - } - return unsafe_to_string(res); - } - function fix_int_precision(prec, str){ - var - prec$0 = abs(prec), - len = caml_ml_string_length(str), - c = caml_string_get(str, 0); - a: - { - b: - { - if(58 > c){ - if(32 !== c){ - if(43 > c) break a; - switch(c - 43 | 0){ - case 5: - c: - if(len < (prec$0 + 2 | 0) && 1 < len){ - if - (120 !== caml_string_get(str, 1) - && 88 !== caml_string_get(str, 1)) - break c; - var res$1 = make$0(prec$0 + 2 | 0, 48); - caml_bytes_set(res$1, 1, caml_string_get(str, 1)); - blit_string - (str, 2, res$1, (prec$0 - len | 0) + 4 | 0, len - 2 | 0); - return unsafe_to_string(res$1); - } - break b; - case 0: - case 2: break; - case 1: - case 3: - case 4: - break a; - default: break b; - } - } - if(len >= (prec$0 + 1 | 0)) break a; - var res$0 = make$0(prec$0 + 1 | 0, 48); - caml_bytes_set(res$0, 0, c); - blit_string(str, 1, res$0, (prec$0 - len | 0) + 2 | 0, len - 1 | 0); - return unsafe_to_string(res$0); - } - if(71 <= c){if(5 < c - 97 >>> 0) break a;} else if(65 > c) break a; - } - if(len < prec$0){ - var res = make$0(prec$0, 48); - blit_string(str, 0, res, prec$0 - len | 0, len); - return unsafe_to_string(res); - } - } - return str; - } - function string_to_caml_string(str){ - var - str$0 = escaped$1(str), - l = caml_ml_string_length(str$0), - res = make$0(l + 2 | 0, 34); - caml_blit_string(str$0, 0, res, 1, l); - return unsafe_to_string(res); - } - function format_of_iconv(param){ - switch(param){ - case 1: - return _aT_; - case 2: - return _aU_; - case 4: - return _aW_; - case 5: - return _aX_; - case 6: - return _aY_; - case 7: - return _aZ_; - case 8: - return _a0_; - case 9: - return _a1_; - case 10: - return _a2_; - case 11: - return _a3_; - case 0: - case 13: - return _aS_; - case 3: - case 14: - return _aV_; - default: return _a4_; - } - } - function format_of_iconvL(param){ - switch(param){ - case 1: - return _a6_; - case 2: - return _a7_; - case 4: - return _a9_; - case 5: - return _a__; - case 6: - return _a$_; - case 7: - return _ba_; - case 8: - return _bb_; - case 9: - return _bc_; - case 10: - return _bd_; - case 11: - return _be_; - case 0: - case 13: - return _a5_; - case 3: - case 14: - return _a8_; - default: return _bf_; - } - } - function format_of_iconvl(param){ - switch(param){ - case 1: - return _bh_; - case 2: - return _bi_; - case 4: - return _bk_; - case 5: - return _bl_; - case 6: - return _bm_; - case 7: - return _bn_; - case 8: - return _bo_; - case 9: - return _bp_; - case 10: - return _bq_; - case 11: - return _br_; - case 0: - case 13: - return _bg_; - case 3: - case 14: - return _bj_; - default: return _bs_; - } - } - function format_of_iconvn(param){ - switch(param){ - case 1: - return _bu_; - case 2: - return _bv_; - case 4: - return _bx_; - case 5: - return _by_; - case 6: - return _bz_; - case 7: - return _bA_; - case 8: - return _bB_; - case 9: - return _bC_; - case 10: - return _bD_; - case 11: - return _bE_; - case 0: - case 13: - return _bt_; - case 3: - case 14: - return _bw_; - default: return _bF_; - } - } - function format_of_fconv(fconv, prec){ - var - prec$0 = abs(prec), - symb = char_of_fconv(_bG_, fconv), - buf = buffer_create(16); - buffer_add_char(buf, 37); - bprint_fconv_flag(buf, fconv); - buffer_add_char(buf, 46); - buffer_add_string(buf, to_string(prec$0)); - buffer_add_char(buf, symb); - return buffer_contents(buf); - } - function transform_int_alt(iconv, s){ - if(13 > iconv) return s; - var n = [0, 0], _wP_ = caml_ml_string_length(s) - 1 | 0, _wO_ = 0; - if(_wP_ >= 0){ - var i$0 = _wO_; - for(;;){ - if(9 >= caml_string_unsafe_get(s, i$0) - 48 >>> 0) n[1]++; - var _wT_ = i$0 + 1 | 0; - if(_wP_ === i$0) break; - i$0 = _wT_; - } - } - var - digits = n[1], - buf = - caml_create_bytes - (caml_ml_string_length(s) + ((digits - 1 | 0) / 3 | 0) | 0), - pos = [0, 0]; - function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++; return;} - var - left = [0, ((digits - 1 | 0) % 3 | 0) + 1 | 0], - _wR_ = caml_ml_string_length(s) - 1 | 0, - _wQ_ = 0; - if(_wR_ >= 0){ - var i = _wQ_; - for(;;){ - var c = caml_string_unsafe_get(s, i); - if(9 < c - 48 >>> 0) - put(c); - else{if(0 === left[1]){put(95); left[1] = 3;} left[1]--; put(c);} - var _wS_ = i + 1 | 0; - if(_wR_ === i) break; - i = _wS_; - } - } - return unsafe_to_string(buf); - } - function convert_int(iconv, n){ - return transform_int_alt - (iconv, caml_format_int(format_of_iconv(iconv), n)); - } - function convert_int32(iconv, n){ - return transform_int_alt - (iconv, caml_format_int(format_of_iconvl(iconv), n)); - } - function convert_nativeint(iconv, n){ - return transform_int_alt - (iconv, caml_format_int(format_of_iconvn(iconv), n)); - } - function convert_int64(iconv, n){ - return transform_int_alt - (iconv, caml_int64_format(format_of_iconvL(iconv), n)); - } - function convert_float(fconv, prec, x){ - function hex(param){ - switch(fconv[1]){ - case 0: - var sign = 45; break; - case 1: - var sign = 43; break; - default: var sign = 32; - } - return caml_hexstring_of_float(x, prec, sign); - } - function add_dot_if_needed(str){ - var len = caml_ml_string_length(str); - function is_valid(i){ - var i$0 = i; - for(;;){ - if(i$0 === len) return 0; - var _wN_ = caml_string_get(str, i$0) - 46 | 0; - a: - { - if(23 < _wN_ >>> 0){ - if(55 === _wN_) break a; - } - else if(21 < _wN_ - 1 >>> 0) break a; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - continue; - } - return 1; - } - } - return is_valid(0) ? str : symbol_concat(str, _bH_); - } - function caml_special_val(str){ - var match = caml_classify_float(x); - return 3 === match ? x < 0. ? _bI_ : _bJ_ : 4 <= match ? _bK_ : str; - } - switch(fconv[2]){ - case 5: - var str = caml_format_float(format_of_fconv(fconv, prec), x); - return caml_special_val(add_dot_if_needed(str)); - case 6: - return hex(0); - case 7: - return uppercase_ascii$1(hex(0)); - case 8: - return caml_special_val(hex(0)); - default: return caml_format_float(format_of_fconv(fconv, prec), x); - } - } - function format_caml_char(c){ - var - str = escaped(c), - l = caml_ml_string_length(str), - res = make$0(l + 2 | 0, 39); - caml_blit_string(str, 0, res, 1, l); - return unsafe_to_string(res); - } - function string_of_fmtty(fmtty){ - var buf = buffer_create(16); - bprint_fmtty(buf, fmtty); - return buffer_contents(buf); - } - function make_printf$0(counter, k, acc, fmt){ - var k$0 = k, acc$0 = acc, fmt$0 = fmt; - for(;;){ - if(typeof fmt$0 === "number") return caml_call1(k$0, acc$0); - switch(fmt$0[0]){ - case 0: - var rest = fmt$0[1]; - return function(c){ - var new_acc = [5, acc$0, c]; - return make_printf(k$0, new_acc, rest);}; - case 1: - var rest$0 = fmt$0[1]; - return function(c){ - var new_acc = [4, acc$0, format_caml_char(c)]; - return make_printf(k$0, new_acc, rest$0);}; - case 2: - var rest$1 = fmt$0[2], pad = fmt$0[1]; - return make_padding - (k$0, acc$0, rest$1, pad, function(str){return str;}); - case 3: - var rest$2 = fmt$0[2], pad$0 = fmt$0[1]; - return make_padding(k$0, acc$0, rest$2, pad$0, string_to_caml_string); - case 4: - var - rest$3 = fmt$0[4], - prec = fmt$0[3], - pad$1 = fmt$0[2], - iconv = fmt$0[1]; - return make_int_padding_precision - (k$0, acc$0, rest$3, pad$1, prec, convert_int, iconv); - case 5: - var - rest$4 = fmt$0[4], - prec$0 = fmt$0[3], - pad$2 = fmt$0[2], - iconv$0 = fmt$0[1]; - return make_int_padding_precision - (k$0, acc$0, rest$4, pad$2, prec$0, convert_int32, iconv$0); - case 6: - var - rest$5 = fmt$0[4], - prec$1 = fmt$0[3], - pad$3 = fmt$0[2], - iconv$1 = fmt$0[1]; - return make_int_padding_precision - (k$0, - acc$0, - rest$5, - pad$3, - prec$1, - convert_nativeint, - iconv$1); - case 7: - var - rest$6 = fmt$0[4], - prec$2 = fmt$0[3], - pad$4 = fmt$0[2], - iconv$2 = fmt$0[1]; - return make_int_padding_precision - (k$0, acc$0, rest$6, pad$4, prec$2, convert_int64, iconv$2); - case 8: - var - rest$7 = fmt$0[4], - prec$3 = fmt$0[3], - pad$5 = fmt$0[2], - fconv = fmt$0[1]; - return make_float_padding_precision - (k$0, acc$0, rest$7, pad$5, prec$3, fconv); - case 9: - var rest$8 = fmt$0[2], pad$6 = fmt$0[1]; - return make_padding(k$0, acc$0, rest$8, pad$6, string_of_bool); - case 10: - var rest$9 = fmt$0[1], acc$1 = [7, acc$0]; - acc$0 = acc$1; - fmt$0 = rest$9; - break; - case 11: - var rest$10 = fmt$0[2], str = fmt$0[1], acc$2 = [2, acc$0, str]; - acc$0 = acc$2; - fmt$0 = rest$10; - break; - case 12: - var rest$11 = fmt$0[2], chr = fmt$0[1], acc$3 = [3, acc$0, chr]; - acc$0 = acc$3; - fmt$0 = rest$11; - break; - case 13: - var - rest$12 = fmt$0[3], - sub_fmtty = fmt$0[2], - ty = string_of_fmtty(sub_fmtty); - return function(str){ - return make_printf(k$0, [4, acc$0, ty], rest$12);}; - case 14: - var rest$13 = fmt$0[3], fmtty = fmt$0[2]; - return function(param){ - var fmt = param[1]; - return make_printf - (k$0, acc$0, concat_fmt(recast(fmt, fmtty), rest$13));}; - case 15: - var rest$14 = fmt$0[1]; - return function(f, x){ - return make_printf - (k$0, - [6, acc$0, function(o){return caml_call2(f, o, x);}], - rest$14);}; - case 16: - var rest$15 = fmt$0[1]; - return function(f){return make_printf(k$0, [6, acc$0, f], rest$15);}; - case 17: - var - rest$16 = fmt$0[2], - fmting_lit = fmt$0[1], - acc$4 = [0, acc$0, fmting_lit]; - acc$0 = acc$4; - fmt$0 = rest$16; - break; - case 18: - var _wL_ = fmt$0[1]; - if(0 === _wL_[0]){ - var rest$17 = fmt$0[2], fmt$1 = _wL_[1][1]; - let acc = acc$0, k = k$0, rest = rest$17; - var - k$1 = - function(kacc){return make_printf(k, [1, acc, [0, kacc]], rest);}; - k$0 = k$1; - acc$0 = 0; - fmt$0 = fmt$1; - } - else{ - var rest$18 = fmt$0[2], fmt$2 = _wL_[1][1]; - let acc = acc$0, k = k$0, rest = rest$18; - var - k$2 = - function(kacc){return make_printf(k, [1, acc, [1, kacc]], rest);}; - k$0 = k$2; - acc$0 = 0; - fmt$0 = fmt$2; - } - break; - case 19: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bL_], 1); - case 20: - var rest$19 = fmt$0[3], new_acc = [8, acc$0, _bM_]; - return function(param){return make_printf(k$0, new_acc, rest$19);}; - case 21: - var rest$20 = fmt$0[2]; - return function(n){ - var new_acc = [4, acc$0, caml_format_int(cst_u, n)]; - return make_printf(k$0, new_acc, rest$20);}; - case 22: - var rest$21 = fmt$0[1]; - return function(c){ - var new_acc = [5, acc$0, c]; - return make_printf(k$0, new_acc, rest$21);}; - case 23: - var rest$22 = fmt$0[2], ign = fmt$0[1]; - if(counter >= 50) - return caml_trampoline_return - (make_ignored_param, [0, k$0, acc$0, ign, rest$22]); - var counter$1 = counter + 1 | 0; - return make_ignored_param(counter$1, k$0, acc$0, ign, rest$22); - default: - var - rest$23 = fmt$0[3], - f = fmt$0[2], - arity = fmt$0[1], - _wM_ = caml_call1(f, 0); - if(counter >= 50) - return caml_trampoline_return - (make_custom$0, [0, k$0, acc$0, rest$23, arity, _wM_]); - var counter$0 = counter + 1 | 0; - return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _wM_); - } - } - } - function make_printf(k, acc, fmt){ - return caml_trampoline(make_printf$0(0, k, acc, fmt)); - } - function make_ignored_param(counter, k, acc, ign, fmt){ - if(typeof ign === "number") - switch(ign){ - case 0: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$0 = counter + 1 | 0; - return make_invalid_arg(counter$0, k, acc, fmt); - case 1: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$1 = counter + 1 | 0; - return make_invalid_arg(counter$1, k, acc, fmt); - case 2: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bN_], 1); - default: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$2 = counter + 1 | 0; - return make_invalid_arg(counter$2, k, acc, fmt); - } - switch(ign[0]){ - case 0: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$3 = counter + 1 | 0; - return make_invalid_arg(counter$3, k, acc, fmt); - case 1: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$4 = counter + 1 | 0; - return make_invalid_arg(counter$4, k, acc, fmt); - case 2: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$5 = counter + 1 | 0; - return make_invalid_arg(counter$5, k, acc, fmt); - case 3: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$6 = counter + 1 | 0; - return make_invalid_arg(counter$6, k, acc, fmt); - case 4: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$7 = counter + 1 | 0; - return make_invalid_arg(counter$7, k, acc, fmt); - case 5: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$8 = counter + 1 | 0; - return make_invalid_arg(counter$8, k, acc, fmt); - case 6: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$9 = counter + 1 | 0; - return make_invalid_arg(counter$9, k, acc, fmt); - case 7: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$10 = counter + 1 | 0; - return make_invalid_arg(counter$10, k, acc, fmt); - case 8: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$11 = counter + 1 | 0; - return make_invalid_arg(counter$11, k, acc, fmt); - case 9: - var fmtty = ign[2]; - if(counter >= 50) - return caml_trampoline_return - (make_from_fmtty$0, [0, k, acc, fmtty, fmt]); - var counter$14 = counter + 1 | 0; - return make_from_fmtty$0(counter$14, k, acc, fmtty, fmt); - case 10: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$12 = counter + 1 | 0; - return make_invalid_arg(counter$12, k, acc, fmt); - default: - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$13 = counter + 1 | 0; - return make_invalid_arg(counter$13, k, acc, fmt); - } - } - function make_from_fmtty$0(counter, k, acc, fmtty, fmt){ - if(typeof fmtty !== "number") - switch(fmtty[0]){ - case 0: - var rest = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest, fmt);}; - case 1: - var rest$0 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$0, fmt);}; - case 2: - var rest$1 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$1, fmt);}; - case 3: - var rest$2 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$2, fmt);}; - case 4: - var rest$3 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$3, fmt);}; - case 5: - var rest$4 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$4, fmt);}; - case 6: - var rest$5 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$5, fmt);}; - case 7: - var rest$6 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$6, fmt);}; - case 8: - var rest$7 = fmtty[2]; - return function(param){return make_from_fmtty(k, acc, rest$7, fmt);}; - case 9: - var - rest$8 = fmtty[3], - ty2 = fmtty[2], - ty1 = fmtty[1], - ty = trans(symm(ty1), ty2); - return function(param){ - return make_from_fmtty(k, acc, concat_fmtty(ty, rest$8), fmt);}; - case 10: - var rest$9 = fmtty[1]; - return function(param, _wK_){ - return make_from_fmtty(k, acc, rest$9, fmt);}; - case 11: - var rest$10 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$10, fmt);}; - case 12: - var rest$11 = fmtty[1]; - return function(param){return make_from_fmtty(k, acc, rest$11, fmt);}; - case 13: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bO_], 1); - default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bP_], 1); - } - if(counter >= 50) - return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); - var counter$0 = counter + 1 | 0; - return make_invalid_arg(counter$0, k, acc, fmt); - } - function make_from_fmtty(k, acc, fmtty, fmt){ - return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt)); - } - function make_invalid_arg(counter, k, acc, fmt){ - var _wJ_ = [8, acc, _bQ_]; - if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _wJ_, fmt]); - var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _wJ_, fmt); - } - function make_padding(k, acc, fmt, pad, trans){ - if(typeof pad === "number") - return function(x){ - var new_acc = [4, acc, caml_call1(trans, x)]; - return make_printf(k, new_acc, fmt);}; - if(0 === pad[0]){ - var width = pad[2], padty = pad[1]; - return function(x){ - var new_acc = [4, acc, fix_padding(padty, width, caml_call1(trans, x))]; - return make_printf(k, new_acc, fmt);}; - } - var padty$0 = pad[1]; - return function(w, x){ - var new_acc = [4, acc, fix_padding(padty$0, w, caml_call1(trans, x))]; - return make_printf(k, new_acc, fmt);}; - } - function make_int_padding_precision(k, acc, fmt, pad, prec, trans, iconv){ - if(typeof pad === "number"){ - if(typeof prec === "number") - return prec - ? function - (p, x){ - var str = fix_int_precision(p, caml_call2(trans, iconv, x)); - return make_printf(k, [4, acc, str], fmt); - } - : function - (x){ - var str = caml_call2(trans, iconv, x); - return make_printf(k, [4, acc, str], fmt); - }; - var p = prec[1]; - return function(x){ - var str = fix_int_precision(p, caml_call2(trans, iconv, x)); - return make_printf(k, [4, acc, str], fmt);}; - } - if(0 === pad[0]){ - var w = pad[2], padty = pad[1]; - if(typeof prec === "number") - return prec - ? function - (p, x){ - var - str = - fix_padding - (padty, - w, - fix_int_precision(p, caml_call2(trans, iconv, x))); - return make_printf(k, [4, acc, str], fmt); - } - : function - (x){ - var str = fix_padding(padty, w, caml_call2(trans, iconv, x)); - return make_printf(k, [4, acc, str], fmt); - }; - var p$0 = prec[1]; - return function(x){ - var - str = - fix_padding - (padty, w, fix_int_precision(p$0, caml_call2(trans, iconv, x))); - return make_printf(k, [4, acc, str], fmt);}; - } - var padty$0 = pad[1]; - if(typeof prec === "number") - return prec - ? function - (w, p, x){ - var - str = - fix_padding - (padty$0, - w, - fix_int_precision(p, caml_call2(trans, iconv, x))); - return make_printf(k, [4, acc, str], fmt); - } - : function - (w, x){ - var str = fix_padding(padty$0, w, caml_call2(trans, iconv, x)); - return make_printf(k, [4, acc, str], fmt); - }; - var p$1 = prec[1]; - return function(w, x){ - var - str = - fix_padding - (padty$0, w, fix_int_precision(p$1, caml_call2(trans, iconv, x))); - return make_printf(k, [4, acc, str], fmt);}; - } - function make_float_padding_precision(k, acc, fmt, pad, prec, fconv){ - if(typeof pad === "number"){ - if(typeof prec === "number") - return prec - ? function - (p, x){ - var str = convert_float(fconv, p, x); - return make_printf(k, [4, acc, str], fmt); - } - : function - (x){ - var - str = convert_float(fconv, default_float_precision(fconv), x); - return make_printf(k, [4, acc, str], fmt); - }; - var p = prec[1]; - return function(x){ - var str = convert_float(fconv, p, x); - return make_printf(k, [4, acc, str], fmt);}; - } - if(0 === pad[0]){ - var w = pad[2], padty = pad[1]; - if(typeof prec === "number") - return prec - ? function - (p, x){ - var str = fix_padding(padty, w, convert_float(fconv, p, x)); - return make_printf(k, [4, acc, str], fmt); - } - : function - (x){ - var - str = convert_float(fconv, default_float_precision(fconv), x), - str$0 = fix_padding(padty, w, str); - return make_printf(k, [4, acc, str$0], fmt); - }; - var p$0 = prec[1]; - return function(x){ - var str = fix_padding(padty, w, convert_float(fconv, p$0, x)); - return make_printf(k, [4, acc, str], fmt);}; - } - var padty$0 = pad[1]; - if(typeof prec === "number") - return prec - ? function - (w, p, x){ - var str = fix_padding(padty$0, w, convert_float(fconv, p, x)); - return make_printf(k, [4, acc, str], fmt); - } - : function - (w, x){ - var - str = convert_float(fconv, default_float_precision(fconv), x), - str$0 = fix_padding(padty$0, w, str); - return make_printf(k, [4, acc, str$0], fmt); - }; - var p$1 = prec[1]; - return function(w, x){ - var str = fix_padding(padty$0, w, convert_float(fconv, p$1, x)); - return make_printf(k, [4, acc, str], fmt);}; - } - function make_custom$0(counter, k, acc, rest, arity, f){ - if(arity){ - var arity$0 = arity[1]; - return function(x){ - return make_custom(k, acc, rest, arity$0, caml_call1(f, x));}; - } - var _wI_ = [4, acc, f]; - if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _wI_, rest]); - var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _wI_, rest); - } - function make_custom(k, acc, rest, arity, f){ - return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f)); - } - function output_acc(o, acc){ - var acc$0 = acc; - for(;;){ - if(typeof acc$0 === "number") return; - switch(acc$0[0]){ - case 0: - var - fmting_lit = acc$0[2], - p = acc$0[1], - s = string_of_formatting_lit(fmting_lit); - output_acc(o, p); - return output_string(o, s); - case 1: - var match = acc$0[2], p$0 = acc$0[1]; - if(0 === match[0]){ - var acc$1 = match[1]; - output_acc(o, p$0); - output_string(o, _bR_); - acc$0 = acc$1; - } - else{ - var acc$2 = match[1]; - output_acc(o, p$0); - output_string(o, _bS_); - acc$0 = acc$2; - } - break; - case 6: - var f = acc$0[2], p$3 = acc$0[1]; - output_acc(o, p$3); - return caml_call1(f, o); - case 7: - var p$4 = acc$0[1]; output_acc(o, p$4); return _j_(o); - case 8: - var msg = acc$0[2], p$5 = acc$0[1]; - output_acc(o, p$5); - return invalid_arg(msg); - case 2: - case 4: - var s$0 = acc$0[2], p$1 = acc$0[1]; - output_acc(o, p$1); - return output_string(o, s$0); - default: - var c = acc$0[2], p$2 = acc$0[1]; - output_acc(o, p$2); - return _i_(o, c); - } - } - } - function strput_acc(b, acc){ - var acc$0 = acc; - for(;;){ - if(typeof acc$0 === "number") return; - switch(acc$0[0]){ - case 0: - var - fmting_lit = acc$0[2], - p = acc$0[1], - s = string_of_formatting_lit(fmting_lit); - strput_acc(b, p); - return write_stringlit(b, s); - case 1: - var match = acc$0[2], p$0 = acc$0[1]; - if(0 === match[0]){ - var acc$1 = match[1]; - strput_acc(b, p$0); - write_stringlit(b, _bT_); - acc$0 = acc$1; - } - else{ - var acc$2 = match[1]; - strput_acc(b, p$0); - write_stringlit(b, _bU_); - acc$0 = acc$2; - } - break; - case 6: - var f = acc$0[2], p$3 = acc$0[1]; - strput_acc(b, p$3); - return write_stringlit(b, caml_call1(f, 0)); - case 7: - var acc$3 = acc$0[1]; acc$0 = acc$3; break; - case 8: - var msg = acc$0[2], p$4 = acc$0[1]; - strput_acc(b, p$4); - return invalid_arg(msg); - case 2: - case 4: - var s$0 = acc$0[2], p$1 = acc$0[1]; - strput_acc(b, p$1); - return write_stringlit(b, s$0); - default: - var c = acc$0[2], p$2 = acc$0[1]; - strput_acc(b, p$2); - return add_char(b, c); - } - } - } - function failwith_message(param){ - var fmt = param[1], buf = create$1(256); - function k(acc){strput_acc(buf, acc); return failwith(contents(buf));} - return make_printf(k, 0, fmt); - } - function open_box_of_string(str){ - if(str == cst$1) return _bV_; - var len = caml_ml_string_length(str); - function invalid_box(param){ - return caml_call1(failwith_message(_bW_), str); - } - function parse_spaces(i){ - var i$0 = i; - for(;;){ - if(i$0 === len) return i$0; - var match = caml_string_get(str, i$0); - if(9 !== match && 32 !== match) return i$0; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - } - } - function parse_lword(i, j){ - var j$0 = j; - for(;;){ - if(j$0 === len) return j$0; - if(25 < caml_string_get(str, j$0) - 97 >>> 0) return j$0; - var j$1 = j$0 + 1 | 0; - j$0 = j$1; - } - } - function parse_int(i, j){ - var j$0 = j; - for(;;){ - if(j$0 === len) return j$0; - var match = caml_string_get(str, j$0); - a: - { - if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; - return j$0; - } - var j$1 = j$0 + 1 | 0; - j$0 = j$1; - } - } - var - wstart = parse_spaces(0), - wend = parse_lword(wstart, wstart), - box_name = sub$0(str, wstart, wend - wstart | 0), - nstart = parse_spaces(wend), - nend = parse_int(nstart, nstart); - if(nstart === nend) - var indent = 0; - else - try{ - var - _wG_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), - indent = _wG_; - } - catch(_wH_){ - var _wE_ = caml_wrap_exception(_wH_); - if(_wE_[1] !== Failure) throw caml_maybe_attach_backtrace(_wE_, 0); - var _wF_ = invalid_box(0), indent = _wF_; - } - var exp_end = parse_spaces(nend); - if(exp_end !== len) invalid_box(0); - a: - { - if(box_name !== cst$1 && box_name !== "b"){ - if(box_name === "h"){var box_type = 0; break a;} - if(box_name === "hov"){var box_type = 3; break a;} - if(box_name === "hv"){var box_type = 2; break a;} - if(box_name !== "v"){var box_type = invalid_box(0); break a;} - var box_type = 1; - break a; - } - var box_type = 4; - } - return [0, indent, box_type]; - } - function kfprintf(k, o, param){ - var fmt = param[1]; - return make_printf - (function(acc){output_acc(o, acc); return caml_call1(k, o);}, - 0, - fmt); - } - function fprintf(oc, fmt){ - return kfprintf(function(_wD_){return 0;}, oc, fmt); - } - function eprintf(fmt){return fprintf(stderr, fmt);} - function ksprintf(k, param){ - var fmt = param[1]; - function k$0(acc){ - var buf = create$1(64); - strput_acc(buf, acc); - return caml_call1(k, contents(buf)); - } - return make_printf(k$0, 0, fmt); - } - function sprintf(fmt){return ksprintf(function(s){return s;}, fmt);} - var printers = make(0); - function field(x, i){ - var f = x[1 + i]; - return is_block(f) - ? caml_obj_tag - (f) - === 252 - ? caml_call1(sprintf(_bX_), f) - : caml_obj_tag(f) === 253 ? string_of_float(f) : _bY_ - : caml_call1(sprintf(_bZ_), f); - } - function other_fields(x, i){ - if(x.length - 1 <= i) return _b0_; - var _wB_ = other_fields(x, i + 1 | 0), _wC_ = field(x, i); - return caml_call2(sprintf(_b1_), _wC_, _wB_); - } - function fields(x){ - var match = x.length - 1; - if(2 >= match >>> 0) - switch(match){ - case 0: - return _b3_; - case 1: - return _b4_; - default: - var _wA_ = field(x, 1); return caml_call1(sprintf(_b5_), _wA_); - } - var _wy_ = other_fields(x, 2), _wz_ = field(x, 1); - return caml_call2(sprintf(_b2_), _wz_, _wy_); - } - function use_printers(x){ - function conv(param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var tl = param$0[2], hd = param$0[1]; - a: - { - try{var val = caml_call1(hd, x);}catch(_wx_){break a;} - if(val){var s = val[1]; return [0, s];} - } - param$0 = tl; - } - } - return conv(get(printers)); - } - function to_string_default(x){ - if(x === Out_of_memory) return _b6_; - if(x === Stack_overflow) return _b7_; - if(x[1] === Match_failure){ - var match = x[2], char$0 = match[3], line = match[2], file = match[1]; - return caml_call5 - (sprintf(locfmt), file, line, char$0, char$0 + 5 | 0, _b8_); - } - if(x[1] === Assert_failure){ - var - match$0 = x[2], - char$1 = match$0[3], - line$0 = match$0[2], - file$0 = match$0[1]; - return caml_call5 - (sprintf(locfmt), file$0, line$0, char$1, char$1 + 6 | 0, _b9_); - } - if(x[1] === Undefined_recursive_module){ - var - match$1 = x[2], - char$2 = match$1[3], - line$1 = match$1[2], - file$1 = match$1[1]; - return caml_call5 - (sprintf(locfmt), file$1, line$1, char$2, char$2 + 6 | 0, _b__); - } - if(0 !== caml_obj_tag(x)) return x[1]; - var constructor = x[1][1]; - return symbol_concat(constructor, fields(x)); - } - function to_string$0(e){ - var match = use_printers(e); - if(! match) return to_string_default(e); - var s = match[1]; - return s; - } - function convert_raw_backtrace(bt){ - var _ww_ = [0, caml_convert_raw_backtrace(bt)]; - return _ww_; - } - function format_backtrace_slot(pos, slot){ - function info(is_raise){ - return is_raise ? 0 === pos ? _b$_ : _ca_ : 0 === pos ? _cb_ : _cc_; - } - if(0 === slot[0]){ - var - _wo_ = slot[5], - _wp_ = slot[4], - _wq_ = slot[3], - _wr_ = slot[6] ? _cd_ : _cf_, - _ws_ = slot[2], - _wt_ = slot[7], - _wu_ = info(slot[1]); - return [0, - caml_call7 - (sprintf(_ce_), _wu_, _wt_, _ws_, _wr_, _wq_, _wp_, _wo_)]; - } - if(slot[1]) return 0; - var _wv_ = info(0); - return [0, caml_call1(sprintf(_cg_), _wv_)]; - } - function print_exception_backtrace(outchan, backtrace){ - if(! backtrace) return fprintf(outchan, _ci_); - var a = backtrace[1], _wm_ = a.length - 2 | 0, _wl_ = 0; - if(_wm_ >= 0){ - var i = _wl_; - for(;;){ - var match = format_backtrace_slot(i, caml_check_bound(a, i)[1 + i]); - if(match){var str = match[1]; caml_call1(fprintf(outchan, _ch_), str);} - var _wn_ = i + 1 | 0; - if(_wm_ === i) break; - i = _wn_; - } - } - return 0; - } - function print_raw_backtrace(outchan, raw_backtrace){ - return print_exception_backtrace - (outchan, convert_raw_backtrace(raw_backtrace)); - } - function register_printer(fn){ - for(;;){ - var - old_printers = get(printers), - new_printers = [0, fn, old_printers], - success = compare_and_set(printers, old_printers, new_printers), - _wk_ = 1 - success; - if(! _wk_) return _wk_; - } - } - var errors = _cj_.slice(); - function default_uncaught_exception_han(exn, raw_backtrace){ - var _wi_ = to_string$0(exn); - caml_call1(eprintf(_ck_), _wi_); - print_raw_backtrace(stderr, raw_backtrace); - var status = caml_ml_debug_info_status(0); - if(status < 0){ - var _wj_ = abs(status); - prerr_endline(caml_check_bound(errors, _wj_)[1 + _wj_]); - } - return _j_(stderr); - } - var empty_backtrace = [0]; - function try_get_raw_backtrace(param){ - var _wh_ = caml_get_exception_raw_backtrace(0); - return _wh_; - } - function handle_uncaught_exception(exn, debugger_in_use){ - try{ - var - raw_backtrace = - debugger_in_use ? empty_backtrace : try_get_raw_backtrace(0); - try{do_at_exit(0);}catch(_wg_){} - try{ - var - _we_ = default_uncaught_exception_han(exn, raw_backtrace), - _wd_ = _we_; - } - catch(exn$1){ - var - exn$0 = caml_wrap_exception(exn$1), - raw_backtrace$0 = try_get_raw_backtrace(0), - _wb_ = to_string$0(exn); - caml_call1(eprintf(_cm_), _wb_); - print_raw_backtrace(stderr, raw_backtrace); - var _wc_ = to_string$0(exn$0); - caml_call1(eprintf(_cn_), _wc_); - print_raw_backtrace(stderr, raw_backtrace$0); - var _wd_ = _j_(stderr); - } - return _wd_; - } - catch(_wf_){ - var _wa_ = caml_wrap_exception(_wf_); - if(_wa_ === Out_of_memory) return prerr_endline(_cl_); - throw caml_maybe_attach_backtrace(_wa_, 0); - } - } - function handle_uncaught_exception$0(exn, debugger_in_use){ - try{ - var _v__ = handle_uncaught_exception(exn, debugger_in_use); - return _v__; - } - catch(_v$_){return 0;} - } - caml_register_named_value - ("Printexc.handle_uncaught_exception", handle_uncaught_exception$0); - function _co_(_v9_){return caml_get_exception_raw_backtrace(_v9_);} - var Finally_raised = [248, _cp_, caml_fresh_oo_id(0)]; - register_printer - (function(param){ - if(param[1] !== Finally_raised) return 0; - var exn = param[2]; - return [0, symbol_concat(_cq_, to_string$0(exn))]; - }); - function string(str){ - return caml_md5_string(str, 0, caml_ml_string_length(str)); - } - function new_state(param){return [0, caml_make_vect(55, 0), 0];} - function assign(st1, st2){ - blit$0(st2[1], 0, st1[1], 0, 55); - st1[2] = st2[2]; - return; - } - function full_init(s, seed){ - function combine(accu, x){ - return string(symbol_concat(accu, to_string(x))); - } - function extract(d){ - var - _v6_ = caml_string_get(d, 3) << 24, - _v7_ = caml_string_get(d, 2) << 16, - _v8_ = caml_string_get(d, 1) << 8; - return ((caml_string_get(d, 0) + _v8_ | 0) + _v7_ | 0) + _v6_ | 0; - } - var - seed$0 = 0 === seed.length - 1 ? [0, 0] : seed, - l = seed$0.length - 1, - i$0 = 0; - for(;;){ - caml_check_bound(s[1], i$0)[1 + i$0] = i$0; - var _v5_ = i$0 + 1 | 0; - if(54 === i$0) break; - i$0 = _v5_; - } - var accu = [0, _cr_], _v0_ = 54 + max$0(55, l) | 0, _vZ_ = 0; - if(_v0_ >= 0){ - var i = _vZ_; - for(;;){ - var - j = i % 55 | 0, - k = caml_mod(i, l), - _v1_ = caml_check_bound(seed$0, k)[1 + k]; - accu[1] = combine(accu[1], _v1_); - var - _v2_ = extract(accu[1]), - _v3_ = (caml_check_bound(s[1], j)[1 + j] ^ _v2_) & 1073741823; - caml_check_bound(s[1], j)[1 + j] = _v3_; - var _v4_ = i + 1 | 0; - if(_v0_ === i) break; - i = _v4_; - } - } - s[2] = 0; - return; - } - function make$2(seed){ - var result = new_state(0); - full_init(result, seed); - return result; - } - function make_self_init(param){return make$2(caml_sys_random_seed(0));} - function copy$0(s){ - var result = new_state(0); - assign(result, s); - return result; - } - function bits(s){ - s[2] = (s[2] + 1 | 0) % 55 | 0; - var - _vW_ = s[2], - curval = caml_check_bound(s[1], _vW_)[1 + _vW_], - _vX_ = (s[2] + 24 | 0) % 55 | 0, - newval = - caml_check_bound(s[1], _vX_)[1 + _vX_] - + (curval ^ (curval >>> 25 | 0) & 31) - | 0, - newval30 = newval & 1073741823, - _vY_ = s[2]; - caml_check_bound(s[1], _vY_)[1 + _vY_] = newval30; - return newval30; - } - function intaux(s, n){ - for(;;){ - var r = bits(s), v = caml_mod(r, n); - if(((1073741823 - n | 0) + 1 | 0) >= (r - v | 0)) return v; - } - } - function int$0(s, bound){ - if(1073741823 >= bound && 0 < bound) return intaux(s, bound); - return invalid_arg(_cs_); - } - var default$0 = [0, _ct_.slice(), 0]; - function int$1(bound){return int$0(default$0, bound);} - function get_state(param){return copy$0(default$0);} - function ongoing_traversal(h){ - var _vU_ = h.length - 1 < 4 ? 1 : 0, _vV_ = _vU_ || (h[4] < 0 ? 1 : 0); - return _vV_; - } - try{var _kt_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _kt_;} - catch(_vS_){ - var _cu_ = caml_wrap_exception(_vS_); - if(_cu_ !== Not_found) throw caml_maybe_attach_backtrace(_cu_, 0); - try{var _ks_ = caml_sys_getenv("CAMLRUNPARAM"), _cx_ = _ks_;} - catch(_vT_){ - var _cv_ = caml_wrap_exception(_vT_); - if(_cv_ !== Not_found) throw caml_maybe_attach_backtrace(_cv_, 0); - var _cx_ = _cw_; - } - var params = _cx_; - } - var - randomized_default = contains(params, 82), - prng = [246, function(_vR_){return make_self_init(0);}]; - function power_2_above(x, n){ - var x$0 = x; - for(;;){ - if(n <= x$0) return x$0; - if(max_array_length < (x$0 * 2 | 0)) return x$0; - var x$1 = x$0 * 2 | 0; - x$0 = x$1; - } - } - function create$2(opt, initial_size){ - if(opt) - var sth = opt[1], random = sth; - else - var random = randomized_default; - var s = power_2_above(16, initial_size); - if(random) - var - _vP_ = caml_obj_tag(prng), - _vQ_ = - 250 === _vP_ ? prng[1] : 246 === _vP_ ? force_lazy_block(prng) : prng, - seed = bits(_vQ_); - else - var seed = 0; - return [0, 0, caml_make_vect(s, 0), seed, s]; - } - function insert_all_buckets(indexfun, inplace, odata, ndata){ - var nsize = ndata.length - 1, ndata_tail = caml_make_vect(nsize, 0); - function insert_bucket(cell){ - var cell$0 = cell; - for(;;){ - if(! cell$0) return; - var - key = cell$0[1], - data = cell$0[2], - next = cell$0[3], - cell$1 = inplace ? cell$0 : [0, key, data, 0], - nidx = caml_call1(indexfun, key), - match = caml_check_bound(ndata_tail, nidx)[1 + nidx]; - if(match) - match[3] = cell$1; - else - caml_check_bound(ndata, nidx)[1 + nidx] = cell$1; - caml_check_bound(ndata_tail, nidx)[1 + nidx] = cell$1; - cell$0 = next; - } - } - var _vK_ = odata.length - 2 | 0, _vJ_ = 0; - if(_vK_ >= 0){ - var i$0 = _vJ_; - for(;;){ - insert_bucket(caml_check_bound(odata, i$0)[1 + i$0]); - var _vO_ = i$0 + 1 | 0; - if(_vK_ === i$0) break; - i$0 = _vO_; - } - } - if(inplace){ - var _vM_ = nsize - 1 | 0, _vL_ = 0; - if(_vM_ >= 0){ - var i = _vL_; - for(;;){ - var match = caml_check_bound(ndata_tail, i)[1 + i]; - if(match) match[3] = 0; - var _vN_ = i + 1 | 0; - if(_vM_ === i) break; - i = _vN_; - } - } - } - return; - } - function resize$0(indexfun, h){ - var - odata = h[2], - osize = odata.length - 1, - nsize = osize * 2 | 0, - _vI_ = nsize < max_array_length ? 1 : 0; - if(! _vI_) return _vI_; - var ndata = caml_make_vect(nsize, 0), inplace = 1 - ongoing_traversal(h); - h[2] = ndata; - return insert_all_buckets(caml_call1(indexfun, h), inplace, odata, ndata); - } - function key_index(h, key){ - return 4 <= h.length - 1 - ? caml_hash(10, 100, h[3], key) & (h[2].length - 2 | 0) - : invalid_arg(_cy_); - } - function add$0(h, key, data){ - var - i = key_index(h, key), - bucket = [0, key, data, caml_check_bound(h[2], i)[1 + i]]; - caml_check_bound(h[2], i)[1 + i] = bucket; - h[1] = h[1] + 1 | 0; - var _vH_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; - return _vH_ ? resize$0(key_index, h) : _vH_; - } - function remove_bucket(h, i, key, prec, c){ - var prec$1 = prec, prec$0 = c; - for(;;){ - if(! prec$0) return; - var k = prec$0[1], next = prec$0[3]; - if(0 === caml_compare(k, key)){ - h[1] = h[1] - 1 | 0; - if(prec$1){prec$1[3] = next; return;} - caml_check_bound(h[2], i)[1 + i] = next; - return; - } - prec$1 = prec$0; - prec$0 = next; - } - } - function remove(h, key){ - var i = key_index(h, key); - return remove_bucket(h, i, key, 0, caml_check_bound(h[2], i)[1 + i]); - } - function find_rec(key, param){ - var param$0 = param; - for(;;){ - if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); - var k = param$0[1], data = param$0[2], next = param$0[3]; - if(0 === caml_compare(key, k)) return data; - param$0 = next; - } - } - function find(h, key){ - var - _vG_ = key_index(h, key), - match = caml_check_bound(h[2], _vG_)[1 + _vG_]; - if(! match) throw caml_maybe_attach_backtrace(Not_found, 1); - var k1 = match[1], d1 = match[2], next1 = match[3]; - if(0 === caml_compare(key, k1)) return d1; - if(! next1) throw caml_maybe_attach_backtrace(Not_found, 1); - var k2 = next1[1], d2 = next1[2], next2 = next1[3]; - if(0 === caml_compare(key, k2)) return d2; - if(! next2) throw caml_maybe_attach_backtrace(Not_found, 1); - var k3 = next2[1], d3 = next2[2], next3 = next2[3]; - return 0 === caml_compare(key, k3) ? d3 : find_rec(key, next3); - } - function find_all$0(h, key){ - function find_in_bucket(param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var k = param$0[1], data = param$0[2], next = param$0[3]; - if(0 === caml_compare(k, key)) return [0, data, find_in_bucket(next)]; - param$0 = next; - } - } - var _vF_ = key_index(h, key); - return find_in_bucket(caml_check_bound(h[2], _vF_)[1 + _vF_]); - } - function replace_bucket(key, data, param){ - var slot = param; - for(;;){ - if(! slot) return 1; - var k = slot[1], next = slot[3]; - if(0 === caml_compare(k, key)){slot[1] = key; slot[2] = data; return 0;} - slot = next; - } - } - function replace(h, key, data){ - var i = key_index(h, key), l = caml_check_bound(h[2], i)[1 + i]; - if(replace_bucket(key, data, l)){ - caml_check_bound(h[2], i)[1 + i] = [0, key, data, l]; - h[1] = h[1] + 1 | 0; - if(h[2].length - 1 << 1 < h[1]) return resize$0(key_index, h); - } - return; - } - function mem(h, key){ - function mem_in_bucket(param){ - var param$0 = param; - for(;;){ - if(! param$0) return 0; - var - k = param$0[1], - next = param$0[3], - _vE_ = 0 === caml_compare(k, key) ? 1 : 0; - if(_vE_) return _vE_; - param$0 = next; - } - } - var _vD_ = key_index(h, key); - return mem_in_bucket(caml_check_bound(h[2], _vD_)[1 + _vD_]); - } - function id(x){return x;} - var zero = 0, unknown = -1; - function is_known(n){return 0 <= n ? 1 : 0;} - var String_tag = [248, _cz_, caml_fresh_oo_id(0)]; - function pp_enqueue(state, token){ - state[13] = state[13] + token[3] | 0; - return add(token, state[28]); - } - function pp_clear_queue(state){ - state[12] = 1; - state[13] = 1; - return clear$0(state[28]); - } - var pp_infinity = 1000000010; - function pp_output_string(state, s){ - return caml_call3(state[17], s, 0, caml_ml_string_length(s)); - } - function pp_output_newline(state){return caml_call1(state[19], 0);} - function pp_output_spaces(state, n){return caml_call1(state[20], n);} - function pp_output_indent(state, n){return caml_call1(state[21], n);} - function format_pp_text(state, size, text){ - state[9] = state[9] - size | 0; - pp_output_string(state, text); - state[11] = 0; - return; - } - function format_string(state, s){ - var _vC_ = s !== cst$1 ? 1 : 0; - return _vC_ ? format_pp_text(state, caml_ml_string_length(s), s) : _vC_; - } - function break_new_line(state, param, width){ - var after = param[3], offset = param[2], before = param[1]; - format_string(state, before); - pp_output_newline(state); - state[11] = 1; - var - indent = (state[6] - width | 0) + offset | 0, - real_indent = min(state[8], indent); - state[10] = real_indent; - state[9] = state[6] - state[10] | 0; - pp_output_indent(state, state[10]); - return format_string(state, after); - } - function break_line(state, width){ - return break_new_line(state, _cA_, width); - } - function break_same_line(state, param){ - var after = param[3], width = param[2], before = param[1]; - format_string(state, before); - state[9] = state[9] - width | 0; - pp_output_spaces(state, width); - return format_string(state, after); - } - function pp_force_break_line(state){ - var match = top_opt(state[2]); - if(! match) return pp_output_newline(state); - var - match$0 = match[1], - width = match$0[2], - box_type = match$0[1], - _vB_ = state[9] < width ? 1 : 0; - if(! _vB_) return _vB_; - if(3 < box_type - 1 >>> 0) return; - return break_line(state, width); - } - function pp_skip_token(state){ - var match = take_opt(state[28]); - if(! match) return; - var match$0 = match[1], size = match$0[1], length = match$0[3]; - state[12] = state[12] - length | 0; - var _vA_ = id(size); - state[9] = state[9] + _vA_ | 0; - return; - } - function format_pp_token(state, size, param){ - if(typeof param === "number") - switch(param){ - case 0: - var match = top_opt(state[3]); - if(! match) return; - var - tabs = match[1][1], - add_tab = - function(n, ls){ - if(! ls) return [0, n, 0]; - var l = ls[2], x = ls[1]; - return caml_lessthan(n, x) ? [0, n, ls] : [0, x, add_tab(n, l)]; - }; - tabs[1] = add_tab(state[6] - state[9] | 0, tabs[1]); - return; - case 1: - pop_opt(state[2]); return; - case 2: - pop_opt(state[3]); return; - case 3: - var match$0 = top_opt(state[2]); - if(! match$0) return pp_output_newline(state); - var width = match$0[1][2]; - return break_line(state, width); - case 4: - var _vz_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; - return _vz_ ? pp_skip_token(state) : _vz_; - default: - var match$1 = pop_opt(state[5]); - if(! match$1) return; - var tag_name = match$1[1], marker = caml_call1(state[25], tag_name); - return pp_output_string(state, marker); - } - switch(param[0]){ - case 0: - var s = param[1]; return format_pp_text(state, size, s); - case 1: - var - breaks = param[2], - fits = param[1], - off = breaks[2], - before = breaks[1], - match$2 = top_opt(state[2]); - if(! match$2) return; - var match$3 = match$2[1], width$0 = match$3[2], box_type = match$3[1]; - switch(box_type){ - case 0: - return break_same_line(state, fits); - case 1: - return break_new_line(state, breaks, width$0); - case 2: - return break_new_line(state, breaks, width$0); - case 3: - return state[9] < (size + caml_ml_string_length(before) | 0) - ? break_new_line(state, breaks, width$0) - : break_same_line(state, fits); - case 4: - return state[11] - ? break_same_line(state, fits) - : state - [9] - < (size + caml_ml_string_length(before) | 0) - ? break_new_line(state, breaks, width$0) - : ((state - [6] - - width$0 - | 0) - + off - | 0) - < state[10] - ? break_new_line(state, breaks, width$0) - : break_same_line(state, fits); - default: return break_same_line(state, fits); - } - case 2: - var - off$0 = param[2], - n = param[1], - insertion_point = state[6] - state[9] | 0, - match$4 = top_opt(state[3]); - if(! match$4) return; - var tabs$0 = match$4[1][1], match$5 = tabs$0[1]; - if(match$5) - var - first = match$5[1], - find = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return first; - var tail = param$0[2], head = param$0[1]; - if(insertion_point <= head) return head; - param$0 = tail; - } - }, - tab = find(tabs$0[1]); - else - var tab = insertion_point; - var offset = tab - insertion_point | 0; - return 0 <= offset - ? break_same_line(state, [0, _cC_, offset + n | 0, _cB_]) - : break_new_line - (state, [0, _cE_, tab + off$0 | 0, _cD_], state[6]); - case 3: - var - ty = param[2], - off$1 = param[1], - insertion_point$0 = state[6] - state[9] | 0; - if(state[8] < insertion_point$0) pp_force_break_line(state); - var - width$1 = state[9] - off$1 | 0, - box_type$0 = 1 === ty ? 1 : state[9] < size ? ty : 5; - return push([0, box_type$0, width$1], state[2]); - case 4: - var tbox = param[1]; return push(tbox, state[3]); - default: - var - tag_name$0 = param[1], - marker$0 = caml_call1(state[24], tag_name$0); - pp_output_string(state, marker$0); - return push(tag_name$0, state[5]); - } - } - function advance_left(state){ - for(;;){ - var match = peek_opt(state[28]); - if(! match) return 0; - var - match$0 = match[1], - size = match$0[1], - length = match$0[3], - token = match$0[2], - pending_count = state[13] - state[12] | 0, - _vx_ = is_known(size), - _vy_ = _vx_ || (state[9] <= pending_count ? 1 : 0); - if(! _vy_) return _vy_; - take(state[28]); - var size$0 = is_known(size) ? id(size) : pp_infinity; - format_pp_token(state, size$0, token); - state[12] = length + state[12] | 0; - } - } - function enqueue_advance(state, tok){ - pp_enqueue(state, tok); - return advance_left(state); - } - function enqueue_string_as(state, size, s){ - return enqueue_advance(state, [0, size, [0, s], id(size)]); - } - function enqueue_string(state, s){ - return enqueue_string_as(state, id(caml_ml_string_length(s)), s); - } - function initialize_scan_stack(stack){ - clear(stack); - var queue_elem = [0, unknown, _cF_, 0]; - return push([0, -1, queue_elem], stack); - } - function set_size(state, ty){ - var match = top_opt(state[1]); - if(! match) return; - var - match$0 = match[1], - queue_elem = match$0[2], - left_total = match$0[1], - size = id(queue_elem[1]); - if(left_total < state[12]) return initialize_scan_stack(state[1]); - var _vw_ = queue_elem[2]; - if(typeof _vw_ !== "number") - switch(_vw_[0]){ - case 3: - if(1 - ty){ - queue_elem[1] = id(state[13] + size | 0); - pop_opt(state[1]); - } - return; - case 1: - case 2: - if(ty){queue_elem[1] = id(state[13] + size | 0); pop_opt(state[1]);} - return; - } - return; - } - function scan_push(state, b, token){ - pp_enqueue(state, token); - if(b) set_size(state, 1); - var elem = [0, state[13], token]; - return push(elem, state[1]); - } - function pp_open_box_gen(state, indent, br_ty){ - state[14] = state[14] + 1 | 0; - if(state[14] < state[15]){ - var size = id(- state[13] | 0), elem = [0, size, [3, indent, br_ty], 0]; - return scan_push(state, 0, elem); - } - var _vv_ = state[14] === state[15] ? 1 : 0; - return _vv_ ? enqueue_string(state, state[16]) : _vv_; - } - function pp_open_sys_box(state){return pp_open_box_gen(state, 0, 3);} - function pp_close_box(state, param){ - var _vt_ = 1 < state[14] ? 1 : 0; - if(_vt_){ - if(state[14] < state[15]){ - pp_enqueue(state, [0, zero, 1, 0]); - set_size(state, 1); - set_size(state, 0); - } - state[14] = state[14] - 1 | 0; - var _vu_ = 0; - } - else - var _vu_ = _vt_; - return _vu_; - } - function pp_open_stag(state, tag_name){ - if(state[22]){push(tag_name, state[4]); caml_call1(state[26], tag_name);} - var _vs_ = state[23]; - if(! _vs_) return _vs_; - var token = [5, tag_name]; - return pp_enqueue(state, [0, zero, token, 0]); - } - function pp_close_stag(state, param){ - if(state[23]) pp_enqueue(state, [0, zero, 5, 0]); - var _vq_ = state[22]; - if(_vq_){ - var match = pop_opt(state[4]); - if(match){ - var tag_name = match[1]; - return caml_call1(state[27], tag_name); - } - var _vr_ = 0; - } - else - var _vr_ = _vq_; - return _vr_; - } - function pp_close_tag(state, param){return pp_close_stag(state, 0);} - function pp_set_mark_tags(state, b){state[23] = b; return;} - function pp_get_formatter_stag_function(state, param){ - return [0, state[24], state[25], state[26], state[27]]; - } - function pp_set_formatter_stag_function(state, param){ - var pct = param[4], pot = param[3], mct = param[2], mot = param[1]; - state[24] = mot; - state[25] = mct; - state[26] = pot; - state[27] = pct; - return; - } - function pp_rinit(state){ - pp_clear_queue(state); - initialize_scan_stack(state[1]); - clear(state[2]); - clear(state[3]); - clear(state[4]); - clear(state[5]); - state[10] = 0; - state[14] = 0; - state[9] = state[6]; - return pp_open_sys_box(state); - } - function clear_tag_stack(state){ - return iter$0(function(param){return pp_close_tag(state, 0);}, state[4]); - } - function pp_flush_queue(state, b){ - clear_tag_stack(state); - for(;;){ - if(1 >= state[14]){ - state[13] = pp_infinity; - advance_left(state); - if(b) pp_output_newline(state); - return pp_rinit(state); - } - pp_close_box(state, 0); - } - } - function pp_print_as_size(state, size, s){ - var _vp_ = state[14] < state[15] ? 1 : 0; - return _vp_ ? enqueue_string_as(state, size, s) : _vp_; - } - function pp_print_as(state, isize, s){ - return pp_print_as_size(state, id(isize), s); - } - function pp_print_string(state, s){ - return pp_print_as(state, caml_ml_string_length(s), s); - } - function pp_print_char(state, c){ - return pp_print_as(state, 1, make$1(1, c)); - } - function pp_print_newline(state, param){ - pp_flush_queue(state, 1); - return caml_call1(state[18], 0); - } - function pp_print_flush(state, param){ - pp_flush_queue(state, 0); - return caml_call1(state[18], 0); - } - function pp_force_newline(state, param){ - var _vo_ = state[14] < state[15] ? 1 : 0; - return _vo_ ? enqueue_advance(state, [0, zero, 3, 0]) : _vo_; - } - function pp_print_custom_break(state, fits, breaks){ - var - after = fits[3], - width = fits[2], - before = fits[1], - _vn_ = state[14] < state[15] ? 1 : 0; - if(! _vn_) return _vn_; - var - size = id(- state[13] | 0), - token = [1, fits, breaks], - length = - (caml_ml_string_length(before) + width | 0) - + caml_ml_string_length(after) - | 0, - elem = [0, size, token, length]; - return scan_push(state, 1, elem); - } - function pp_print_break(state, width, offset){ - return pp_print_custom_break - (state, [0, _cJ_, width, _cI_], [0, _cH_, offset, _cG_]); - } - function display_newline(state, param){ - return caml_call3(state[17], _cK_, 0, 1); - } - var blank_line = make$1(80, 32); - function display_blanks(state, n){ - var n$0 = n; - for(;;){ - var _vm_ = 0 < n$0 ? 1 : 0; - if(! _vm_) return _vm_; - if(80 >= n$0) return caml_call3(state[17], blank_line, 0, n$0); - caml_call3(state[17], blank_line, 0, 80); - var n$1 = n$0 - 80 | 0; - n$0 = n$1; - } - } - function default_pp_mark_open_tag(param){ - if(param[1] !== String_tag) return _cN_; - var s = param[2]; - return symbol_concat(_cM_, symbol_concat(s, _cL_)); - } - function default_pp_mark_close_tag(param){ - if(param[1] !== String_tag) return _cQ_; - var s = param[2]; - return symbol_concat(_cP_, symbol_concat(s, _cO_)); - } - function default_pp_print_open_tag(_vl_){return 0;} - function default_pp_print_close_tag(_vk_){return 0;} - function pp_make_formatter(f, g, h, i, j){ - var pp_queue = create$0(0), sys_tok = [0, unknown, _cR_, 0]; - add(sys_tok, pp_queue); - var scan_stack = create(0); - initialize_scan_stack(scan_stack); - push([0, 1, sys_tok], scan_stack); - var pp_margin = 78, _vh_ = create(0), _vi_ = create(0), _vj_ = create(0); - return [0, - scan_stack, - create(0), - _vj_, - _vi_, - _vh_, - pp_margin, - 10, - 68, - pp_margin, - 0, - 1, - 1, - 1, - 1, - max_int, - _cS_, - f, - g, - h, - i, - j, - 0, - 0, - default_pp_mark_open_tag, - default_pp_mark_close_tag, - default_pp_print_open_tag, - default_pp_print_close_tag, - pp_queue]; - } - function make_formatter(output, flush){ - var - ppf = - pp_make_formatter - (output, - flush, - function(_vg_){return 0;}, - function(_vf_){return 0;}, - function(_ve_){return 0;}); - ppf[19] = function(_vd_){return display_newline(ppf, _vd_);}; - ppf[20] = function(_vc_){return display_blanks(ppf, _vc_);}; - ppf[21] = function(_vb_){return display_blanks(ppf, _vb_);}; - return ppf; - } - function formatter_of_out_channel(oc){ - return make_formatter - (function(_u__, _u$_, _va_){ - return output_substring(oc, _u__, _u$_, _va_); - }, - function(param){return _j_(oc);}); - } - function formatter_of_buffer(b){ - return make_formatter - (function(_u7_, _u8_, _u9_){ - return add_substring(b, _u7_, _u8_, _u9_); - }, - function(_u6_){return 0;}); - } - var pp_buffer_size = 512; - function pp_make_buffer(param){return create$1(pp_buffer_size);} - var - stdbuf = pp_make_buffer(0), - std_formatter = formatter_of_out_channel(stdout), - err_formatter = formatter_of_out_channel(stderr); - formatter_of_buffer(stdbuf); - function flush_buffer_formatter(buf, ppf){ - pp_flush_queue(ppf, 0); - var s = contents(buf); - reset(buf); - return s; - } - function pp_print_option(opt, pp_v, ppf, param){ - if(opt) - var sth = opt[1], none = sth; - else - var none = function(param, _u5_){return 0;}; - if(! param) return caml_call2(none, ppf, 0); - var v = param[1]; - return caml_call2(pp_v, ppf, v); - } - function compute_tag(output, tag_acc){ - var buf = create$1(16), ppf = formatter_of_buffer(buf); - caml_call2(output, ppf, tag_acc); - pp_print_flush(ppf, 0); - var len = length$0(buf); - return 2 <= len ? sub$2(buf, 1, len - 2 | 0) : contents(buf); - } - function output_formatting_lit(ppf, fmting_lit){ - if(typeof fmting_lit === "number") - switch(fmting_lit){ - case 0: - return pp_close_box(ppf, 0); - case 1: - return pp_close_tag(ppf, 0); - case 2: - return pp_print_flush(ppf, 0); - case 3: - return pp_force_newline(ppf, 0); - case 4: - return pp_print_newline(ppf, 0); - case 5: - return pp_print_char(ppf, 64); - default: return pp_print_char(ppf, 37); - } - switch(fmting_lit[0]){ - case 0: - var offset = fmting_lit[3], width = fmting_lit[2]; - return pp_print_break(ppf, width, offset); - case 1: - return 0; - default: - var c = fmting_lit[1]; - pp_print_char(ppf, 64); - return pp_print_char(ppf, c); - } - } - function output_acc$0(ppf, acc){ - if(typeof acc === "number") return 0; - a: - { - b: - { - c: - { - switch(acc[0]){ - case 0: - var f = acc[2], p = acc[1]; - output_acc$0(ppf, p); - return output_formatting_lit(ppf, f); - case 1: - var match = acc[2], p$0 = acc[1]; - if(0 === match[0]){ - var acc$0 = match[1]; - output_acc$0(ppf, p$0); - return pp_open_stag - (ppf, [0, String_tag, compute_tag(output_acc$0, acc$0)]); - } - var acc$1 = match[1]; - output_acc$0(ppf, p$0); - var - match$0 = open_box_of_string(compute_tag(output_acc$0, acc$1)), - bty = match$0[2], - indent = match$0[1]; - return pp_open_box_gen(ppf, indent, bty); - case 2: - var _uW_ = acc[1]; - if(typeof _uW_ !== "number" && 0 === _uW_[0]){ - var _uX_ = _uW_[2]; - if(typeof _uX_ !== "number" && 1 === _uX_[0]){ - var s$0 = acc[2], size = _uX_[2], p$2 = _uW_[1]; - break b; - } - } - var s = acc[2], p$1 = _uW_; - break a; - case 3: - var _uY_ = acc[1]; - if(typeof _uY_ !== "number" && 0 === _uY_[0]){ - var _uZ_ = _uY_[2]; - if(typeof _uZ_ !== "number" && 1 === _uZ_[0]){ - var c$0 = acc[2], size$0 = _uZ_[2], p$4 = _uY_[1]; - break; - } - } - var c = acc[2], p$3 = _uY_; - break c; - case 4: - var _u1_ = acc[1]; - if(typeof _u1_ !== "number" && 0 === _u1_[0]){ - var _u2_ = _u1_[2]; - if(typeof _u2_ !== "number" && 1 === _u2_[0]){ - var s$0 = acc[2], size = _u2_[2], p$2 = _u1_[1]; - break b; - } - } - var s = acc[2], p$1 = _u1_; - break a; - case 5: - var _u3_ = acc[1]; - if(typeof _u3_ !== "number" && 0 === _u3_[0]){ - var _u4_ = _u3_[2]; - if(typeof _u4_ !== "number" && 1 === _u4_[0]){ - var c$0 = acc[2], size$0 = _u4_[2], p$4 = _u3_[1]; - break; - } - } - var c = acc[2], p$3 = _u3_; - break c; - case 6: - var f$0 = acc[2], p$5 = acc[1]; - output_acc$0(ppf, p$5); - return caml_call1(f$0, ppf); - case 7: - var p$6 = acc[1]; - output_acc$0(ppf, p$6); - return pp_print_flush(ppf, 0); - default: - var msg = acc[2], p$7 = acc[1]; - output_acc$0(ppf, p$7); - return invalid_arg(msg); - } - output_acc$0(ppf, p$4); - var _u0_ = make$1(1, c$0); - return pp_print_as_size(ppf, id(size$0), _u0_); - } - output_acc$0(ppf, p$3); - return pp_print_char(ppf, c); - } - output_acc$0(ppf, p$2); - return pp_print_as_size(ppf, id(size), s$0); - } - output_acc$0(ppf, p$1); - return pp_print_string(ppf, s); - } - function kfprintf$0(k, ppf, param){ - var fmt = param[1]; - return make_printf - (function(acc){output_acc$0(ppf, acc); return caml_call1(k, ppf);}, - 0, - fmt); - } - function fprintf$0(ppf){ - function _uT_(_uV_){return 0;} - return function(_uU_){return kfprintf$0(_uT_, ppf, _uU_);}; - } - function kasprintf(k, param){ - var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b); - function k$0(acc){ - output_acc$0(ppf, acc); - return caml_call1(k, flush_buffer_formatter(b, ppf)); - } - return make_printf(k$0, 0, fmt); - } - function asprintf(fmt){return kasprintf(id, fmt);} - function flush_standard_formatters(param){ - pp_print_flush(std_formatter, 0); - return pp_print_flush(err_formatter, 0); - } - at_exit(flush_standard_formatters); - function register_exception(name, exn){ - var slot = caml_obj_tag(exn) === 248 ? exn : exn[1]; - caml_register_named_value(name, slot); - return; - } - var Error = [248, _cT_, caml_fresh_oo_id(0)]; - register_exception(_cU_, [0, Error, [0]]); - (function(exn){throw exn;}); - function any(_uS_){return _uS_;} - function return$0(x){return [0, x];} - function pure(x){return [0, x];} - function is_pure(x){ - if(0 !== x[0]) return 0; - var x$0 = x[1]; - return [0, x$0]; - } - var dummy = [0, any(0)]; - function operator(desc){return [1, 0, 0, 0, desc];} - function func(x, f){ - if(0 !== x[0]) return operator([0, x, f]); - var vx = x[1]; - return [0, caml_call1(f, vx)]; - } - function map2(x, y, f){ - if(0 === x[0]){ - var vx = x[1]; - if(0 === y[0]){var vy = y[1]; return [0, caml_call2(f, vx, vy)];} - } - return operator([1, x, y, f]); - } - function pair(x, y){ - if(0 === x[0]){ - var vx = x[1]; - if(0 === y[0]){var vy = y[1]; return [0, [0, vx, vy]];} - } - return operator([2, x, y]); - } - function join(child){ - if(0 !== child[0]) return operator([4, child, 0]); - var v = child[1]; - return v; - } - function bind(x, f){return join(func(x, f));} - function add_idx(obj, idx, param){ - switch(param[0]){ - case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _cV_], 1); - case 1: - param[3] = [0, idx, obj, param[3]]; return; - default: param[2] = [0, idx, obj, param[2]]; return; - } - } - function rem_idx_rec(obj, self){ - if(! self) - throw caml_maybe_attach_backtrace([0, Assert_failure, _cW_], 1); - if(self[2] === obj) return [0, self[1], self[3]]; - var match = rem_idx_rec(obj, self[3]), result = match[2], idx = match[1]; - self[3] = result; - return [0, idx, self]; - } - function rem_idx(obj, param){ - switch(param[0]){ - case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _cX_], 1); - case 1: - var - match = rem_idx_rec(obj, param[3]), - trace_idx = match[2], - idx = match[1]; - param[3] = trace_idx; - return idx; - default: - var - match$0 = rem_idx_rec(obj, param[2]), - trace_idx$0 = match$0[2], - idx$0 = match$0[1]; - param[2] = trace_idx$0; - return idx$0; - } - } - function mov_idx_rec(obj, oldidx, newidx, param){ - var t = param; - for(;;){ - if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _cY_], 1); - if(t[1] === oldidx && t[2] === obj){t[1] = newidx; return;} - t = t[3]; - } - } - function mov_idx(obj, oldidx, newidx, param){ - switch(param[0]){ - case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _cZ_], 1); - case 1: - return mov_idx_rec(obj, oldidx, newidx, param[3]); - default: return mov_idx_rec(obj, oldidx, newidx, param[2]); - } - } - function get_idx_rec(obj, param){ - var t = param; - for(;;){ - if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _c0_], 1); - if(t[2] === obj) return t[1]; - t = t[3]; - } - } - function get_idx(obj, param){ - switch(param[0]){ - case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _c1_], 1); - case 1: - return get_idx_rec(obj, param[3]); - default: return get_idx_rec(obj, param[2]); - } - } - function invalidate_node$0(counter, status, sensitivity, node){ - switch(node[0]){ - case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _c2_], 1); - case 1: - var _uM_ = node[1]; - if(typeof _uM_ === "number" && ! _uM_){ - if(! sensitivity) return; - if(status[1]) return; - status[1] = 1; - return; - } - var _uN_ = node[4]; - if(7 === _uN_[0]){ - var _uQ_ = _uN_[2]; - if(1 === _uQ_[0]){ - var _uR_ = _uQ_[1]; - if(typeof _uR_ === "number"){ - if(! _uR_ && sensitivity){ - if(status[1]) return; - status[1] = 1; - return; - } - } - else if(sensitivity) return; - } - } - var _uO_ = node[1]; - a: - { - if(typeof _uO_ === "number" && _uO_){var sensitivity$0 = 1; break a;} - var sensitivity$0 = sensitivity; - } - node[1] = 0; - var _uP_ = node[2]; - if(counter >= 50) - return caml_trampoline_return - (invalidate_trace, [0, status, sensitivity$0, _uP_]); - var counter$0 = counter + 1 | 0; - return invalidate_trace(counter$0, status, sensitivity$0, _uP_); - default: - var value = node[1]; - node[1] = 0; - if(typeof value === "number"){ - if(! value) return; - status[1] = 2; - return; - } - var x = value[1]; - if(sensitivity) status[1] = 2; - return caml_call1(node[3], x); - } - } - function invalidate_node(status, sensitivity, node){ - return caml_trampoline(invalidate_node$0(0, status, sensitivity, node)); - } - function invalidate_trace(counter, status, sensitivity, t){ - if(typeof t === "number") return; - switch(t[0]){ - case 0: - var x = t[1]; - if(counter >= 50) - return caml_trampoline_return - (invalidate_node$0, [0, status, sensitivity, x]); - var counter$0 = counter + 1 | 0; - return invalidate_node$0(counter$0, status, sensitivity, x); - case 1: - var y = t[2], x$0 = t[1]; - invalidate_node(status, sensitivity, x$0); - if(counter >= 50) - return caml_trampoline_return - (invalidate_node$0, [0, status, sensitivity, y]); - var counter$1 = counter + 1 | 0; - return invalidate_node$0(counter$1, status, sensitivity, y); - case 2: - var z = t[3], y$0 = t[2], x$1 = t[1]; - invalidate_node(status, sensitivity, x$1); - invalidate_node(status, sensitivity, y$0); - if(counter >= 50) - return caml_trampoline_return - (invalidate_node$0, [0, status, sensitivity, z]); - var counter$2 = counter + 1 | 0; - return invalidate_node$0(counter$2, status, sensitivity, z); - case 3: - var w = t[4], z$0 = t[3], y$1 = t[2], x$2 = t[1]; - invalidate_node(status, sensitivity, x$2); - invalidate_node(status, sensitivity, y$1); - invalidate_node(status, sensitivity, z$0); - if(counter >= 50) - return caml_trampoline_return - (invalidate_node$0, [0, status, sensitivity, w]); - var counter$3 = counter + 1 | 0; - return invalidate_node$0(counter$3, status, sensitivity, w); - default: - var active = t[1]; - t[1] = 0; - var _uK_ = active - 1 | 0, _uJ_ = 0; - if(_uK_ >= 0){ - var i = _uJ_; - for(;;){ - invalidate_node - (status, sensitivity, caml_check_bound(t[3], i)[1 + i]); - var _uL_ = i + 1 | 0; - if(_uK_ === i) break; - i = _uL_; - } - } - return; - } - } - function default_unsafe_mutation_logger(param){ - var callstack = caml_get_current_callstack(20); - return caml_call2(fprintf(stderr, _c3_), print_raw_backtrace, callstack); - } - function do_invalidate(sensitivity, node){ - var status = [0, 0]; - invalidate_node(status, sensitivity, node); - var unsafe = 2 <= status[1] ? 1 : 0; - return unsafe ? default_unsafe_mutation_logger(0) : unsafe; - } - function var$0(x){return operator([5, x]);} - function get$1(x){return x;} - function symbol$1(vx, x){ - if(1 === vx[0]){ - var match = vx[4]; - if(5 === match[0]){match[1] = x; return do_invalidate(0, vx);} - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _c4_], 1); - } - function peek(param){ - if(1 === param[0]){ - var match = param[4]; - if(5 === match[0]) return match[1]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _c5_], 1); - } - function update(f, v){return symbol$1(v, caml_call1(f, peek(v)));} - function prim(acquire, release){return operator([6, acquire, release]);} - function get_prim(x){return x;} - function invalidate(x){ - if(1 === x[0]){ - var value = x[1], p = x[4]; - if(6 === p[0]){ - if(typeof value === "number") return value ? do_invalidate(1, x) : 0; - var v = value[1]; - do_invalidate(0, x); - return caml_call2(p[2], x, v); - } - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _c6_], 1); - } - function sub_release(failures, origin, self){ - var failures$0 = failures, origin$1 = origin, origin$0 = self; - for(;;) - switch(origin$0[0]){ - case 0: - return failures$0; - case 1: - var trace = origin$0[2]; - if(typeof trace === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _c7_], 1); - switch(trace[0]){ - case 0: - var x = trace[1]; - if(x !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _c8_], 1); - var trace$0 = 0; - break; - case 1: - var y = trace[2], x$4 = trace[1]; - if(x$4 === origin$1) - var _uD_ = [0, y]; - else{ - if(y !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _c9_], 1); - var _uD_ = [0, x$4]; - } - var trace$0 = _uD_; - break; - case 2: - var z = trace[3], y$0 = trace[2], x$5 = trace[1]; - if(x$5 === origin$1) - var _uE_ = [1, y$0, z]; - else if(y$0 === origin$1) - var _uE_ = [1, x$5, z]; - else{ - if(z !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _c__], 1); - var _uE_ = [1, x$5, y$0]; - } - var trace$0 = _uE_; - break; - case 3: - var w = trace[4], z$0 = trace[3], y$1 = trace[2], x$6 = trace[1]; - if(x$6 === origin$1) - var _uF_ = [2, y$1, z$0, w]; - else if(y$1 === origin$1) - var _uF_ = [2, x$6, z$0, w]; - else if(z$0 === origin$1) - var _uF_ = [2, x$6, y$1, w]; - else{ - if(w !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _c$_], 1); - var _uF_ = [2, x$6, y$1, z$0]; - } - var trace$0 = _uF_; - break; - default: - var revidx = rem_idx(origin$0, origin$1); - if(caml_check_bound(trace[3], revidx)[1 + revidx] !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _da_], 1); - var count = trace[2] - 1 | 0; - trace[2] = count; - if(revidx < count){ - var obj = caml_check_bound(trace[3], count)[1 + count]; - caml_check_bound(trace[3], revidx)[1 + revidx] = obj; - caml_check_bound(trace[3], count)[1 + count] = dummy; - mov_idx(origin$0, count, revidx, obj); - } - else - caml_check_bound(trace[3], revidx)[1 + revidx] = dummy; - if(count < trace[1]) trace[1] = count; - if(4 === count){ - var - a = caml_check_bound(trace[3], 0)[1], - b = caml_check_bound(trace[3], 1)[2], - c = caml_check_bound(trace[3], 2)[3], - d = caml_check_bound(trace[3], 3)[4]; - rem_idx(origin$0, a); - rem_idx(origin$0, b); - rem_idx(origin$0, c); - rem_idx(origin$0, d); - var _uG_ = [3, a, b, c, d]; - } - else{ - var len = trace[3].length - 1; - if(count <= (len >>> 2 | 0)) - var - _uH_ = sub$1(trace[3], 0, len >>> 1 | 0), - _uI_ = [4, trace[1], trace[2], _uH_]; - else - var _uI_ = trace; - var _uG_ = _uI_; - } - var trace$0 = _uG_; - } - origin$0[2] = trace$0; - if(typeof trace$0 !== "number") return failures$0; - var value = origin$0[1]; - origin$0[1] = 1; - var t = origin$0[4]; - switch(t[0]){ - case 0: - var self$0 = t[1]; origin$1 = origin$0; origin$0 = self$0; break; - case 1: - var - self$1 = t[2], - x$0 = t[1], - failures$1 = sub_release(failures$0, origin$0, x$0); - failures$0 = failures$1; - origin$1 = origin$0; - origin$0 = self$1; - break; - case 2: - var - self$2 = t[2], - x$1 = t[1], - failures$2 = sub_release(failures$0, origin$0, x$1); - failures$0 = failures$2; - origin$1 = origin$0; - origin$0 = self$2; - break; - case 3: - var - self$3 = t[2], - x$2 = t[1], - failures$3 = sub_release(failures$0, origin$0, x$2); - failures$0 = failures$3; - origin$1 = origin$0; - origin$0 = self$3; - break; - case 4: - var - child = t[1], - intermediate = t[2], - failures$4 = sub_release(failures$0, origin$0, child); - if(! intermediate) return failures$4; - var child$0 = intermediate[1]; - t[2] = 0; - failures$0 = failures$4; - origin$1 = origin$0; - origin$0 = child$0; - break; - case 5: - return failures$0; - case 6: - if(typeof value === "number") return failures$0; - var x$3 = value[1]; - try{caml_call2(t[2], origin$0, x$3); return failures$0;} - catch(exn$0){ - var exn = caml_wrap_exception(exn$0), bt = _co_(0); - return [0, [0, exn, bt], failures$0]; - } - default: - var - wrt = t[2], - self$4 = t[1], - failures$5 = sub_release(failures$0, origin$0, wrt); - failures$0 = failures$5; - origin$1 = origin$0; - origin$0 = self$4; - } - break; - default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _db_], 1); - } - } - function sub_acquire(origin, self){ - var origin$1 = origin, origin$0 = self; - for(;;) - switch(origin$0[0]){ - case 0: - return; - case 1: - var - acquire = typeof origin$0[2] === "number" ? 1 : 0, - trace = origin$0[2]; - if(typeof trace === "number") - var trace$0 = [0, origin$1]; - else - switch(trace[0]){ - case 0: - var x$2 = trace[1], trace$0 = [1, origin$1, x$2]; break; - case 1: - var y = trace[2], x$3 = trace[1], trace$0 = [2, origin$1, x$3, y]; - break; - case 2: - var - z = trace[3], - y$0 = trace[2], - x$4 = trace[1], - trace$0 = [3, origin$1, x$4, y$0, z]; - break; - case 3: - var - w = trace[4], - z$0 = trace[3], - y$1 = trace[2], - x$5 = trace[1], - entries = [0, x$5, y$1, z$0, w, origin$1, dummy, dummy, dummy], - i = 0; - for(;;){ - add_idx(origin$0, i, caml_check_bound(entries, i)[1 + i]); - var _uC_ = i + 1 | 0; - if(4 === i) break; - i = _uC_; - } - var trace$0 = [4, 5, 5, entries]; - break; - default: - var index = trace[2]; - if(index < trace[3].length - 1){ - trace[2] = trace[2] + 1 | 0; - var trace$1 = trace, entries$0 = trace[3]; - } - else{ - var entries$1 = caml_make_vect(index * 2 | 0, dummy); - blit$0(trace[3], 0, entries$1, 0, index); - var - trace$1 = [4, trace[1], index + 1 | 0, entries$1], - entries$0 = entries$1; - } - caml_check_bound(entries$0, index)[1 + index] = origin$1; - add_idx(origin$0, index, origin$1); - var trace$0 = trace$1; - } - origin$0[2] = trace$0; - if(! acquire) return acquire; - var match = origin$0[4]; - switch(match[0]){ - case 0: - var self$0 = match[1]; - origin$1 = origin$0; - origin$0 = self$0; - break; - case 1: - var self$1 = match[2], x = match[1]; - sub_acquire(origin$0, x); - origin$1 = origin$0; - origin$0 = self$1; - break; - case 2: - var self$2 = match[2], x$0 = match[1]; - sub_acquire(origin$0, x$0); - origin$1 = origin$0; - origin$0 = self$2; - break; - case 3: - var self$3 = match[2], x$1 = match[1]; - sub_acquire(origin$0, x$1); - origin$1 = origin$0; - origin$0 = self$3; - break; - case 4: - var child = match[1], intermediate = match[2]; - sub_acquire(origin$0, child); - if(intermediate) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dc_], 1); - return; - case 5: - return; - case 6: - return; - default: - var self$4 = match[2], doc = match[1]; - sub_acquire(origin$0, doc); - origin$1 = origin$0; - origin$0 = self$4; - } - break; - default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dd_], 1); - } - } - function activate_tracing(self, origin, tn){ - if(typeof tn !== "number" && 4 === tn[0]){ - var idx = get_idx(self, origin), active = tn[1]; - if(active <= idx) tn[1] = active + 1 | 0; - var _uB_ = active < idx ? 1 : 0; - if(! _uB_) return _uB_; - var old = caml_check_bound(tn[3], active)[1 + active]; - caml_check_bound(tn[3], idx)[1 + idx] = old; - caml_check_bound(tn[3], active)[1 + active] = origin; - mov_idx(self, active, idx, old); - return mov_idx(self, idx, active, origin); - } - return; - } - function sub_is_damaged(param){ - switch(param[0]){ - case 0: - return 0; - case 1: - var value = param[1]; - if(typeof value !== "number") return 0; - if(value) - throw caml_maybe_attach_backtrace([0, Assert_failure, _de_], 1); - return 1; - default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _df_], 1); - } - } - function sub_sample(queue){ - function aux(origin, self){ - switch(self[0]){ - case 0: - var x = self[1]; return x; - case 1: - var match = self[1]; - if(typeof match !== "number"){ - var value = match[1]; - activate_tracing(self, origin, self[2]); - return value; - } - self[1] = 1; - var x$0 = self[4]; - switch(x$0[0]){ - case 0: - var - f = x$0[2], - x$1 = x$0[1], - result = caml_call1(f, aux(self, x$1)); - break; - case 1: - var - f$0 = x$0[3], - y = x$0[2], - x$2 = x$0[1], - _ux_ = aux(self, y), - result = caml_call2(f$0, aux(self, x$2), _ux_); - break; - case 2: - var - y$0 = x$0[2], - x$3 = x$0[1], - _uy_ = aux(self, y$0), - result = [0, aux(self, x$3), _uy_]; - break; - case 3: - var - x$4 = x$0[2], - f$1 = x$0[1], - _uz_ = aux(self, x$4), - result = caml_call1(aux(self, f$1), _uz_); - break; - case 4: - var intermediate = aux(self, x$0[1]), match$0 = x$0[2]; - if(match$0){ - var x$5 = match$0[1]; - if(x$5 !== intermediate){ - queue[1] = [0, self, x$5, queue[1]]; - x$0[2] = [0, intermediate]; - sub_acquire(self, intermediate); - } - } - else{x$0[2] = [0, intermediate]; sub_acquire(self, intermediate);} - var result = aux(self, intermediate); - break; - case 5: - var result = x$0[1]; break; - case 6: - var result = caml_call1(x$0[1], self); break; - default: - var wrt = x$0[2], doc = x$0[1]; - aux(self, wrt); - var result$0 = aux(self, doc); - if(sub_is_damaged(wrt)) - var _uA_ = aux(origin, self); - else{ - if(sub_is_damaged(doc)) do_invalidate(1, self); - var _uA_ = result$0; - } - var result = _uA_; - } - var _uw_ = self[1]; - a: - if(typeof _uw_ === "number" && _uw_){self[1] = [0, result]; break a;} - activate_tracing(self, origin, self[2]); - return result; - default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dg_], 1); - } - } - return aux; - } - function observe(opt, child){ - if(opt) - var sth = opt[1], on_invalidate = sth; - else - var on_invalidate = function(_uv_){return 0;}; - var root = [2, 0, 0, on_invalidate, 0, child]; - return root; - } - var Release_failure = [248, _dh_, caml_fresh_oo_id(0)]; - function raw_flush_release_queue(queue){ - function aux(failures, param){ - var failures$0 = failures, param$0 = param; - for(;;){ - if(! param$0) return failures$0; - var failures$1 = sub_release(failures$0, param$0[1], param$0[2]); - failures$0 = failures$1; - param$0 = param$0[3]; - } - } - return aux(0, queue); - } - function flush_release_queue(queue){ - var queue$0 = queue[1]; - queue[1] = 0; - return raw_flush_release_queue(queue$0); - } - function sample(queue, self){ - if(2 !== self[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _di_], 1); - var match = self[1]; - if(typeof match !== "number"){var value$0 = match[1]; return value$0;} - if(1 - self[4]){self[4] = 1; sub_acquire(self, self[5]);} - self[1] = 1; - var _ut_ = self[5], value = sub_sample(queue)(self, _ut_), _uu_ = self[1]; - a: - if(typeof _uu_ === "number" && _uu_){self[1] = [0, value]; break a;} - return value; - } - function set_on_invalidate(x, f){ - if(2 !== x[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dj_], 1); - x[3] = f; - return 0; - } - function flush_or_fail(main_exn, queue){ - var failures = flush_release_queue(queue); - if(failures) - throw caml_maybe_attach_backtrace - ([0, Release_failure, main_exn, failures], 1); - return; - } - function quick_sample(root){ - var queue = [0, 0]; - try{var result = sample(queue, root);} - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - flush_or_fail([0, exn], queue); - throw caml_maybe_attach_backtrace(exn, 0); - } - flush_or_fail(0, queue); - return result; - } - function symbol_bind(x, f){return bind(x, f);} - function map_reduce(inj, param, items){ - var plus = param[2], zero = param[1]; - function cons_monoid(c, xs, v){ - var c$0 = c, xs$0 = xs, v$0 = v; - for(;;){ - if(xs$0){ - var xs$1 = xs$0[2], match = xs$0[1], v$1 = match[2], c$1 = match[1]; - if(c$0 === c$1){ - var v$2 = caml_call2(plus, v$1, v$0), c$2 = c$0 + 1 | 0; - c$0 = c$2; - xs$0 = xs$1; - v$0 = v$2; - continue; - } - } - return [0, [0, c$0, v$0], xs$0]; - } - } - function cons_monoid$0(xs, v){ - return cons_monoid(0, xs, caml_call1(inj, v)); - } - var match = fold_left(cons_monoid$0, 0, items); - if(! match) return zero; - var xs = match[2], x = match[1][2]; - return fold_left - (function(acc, param){ - var v = param[2]; - return caml_call2(plus, v, acc); - }, - x, - xs); - } - var not_origin = [0, 0], origin = [0, 0]; - function make$3(param){return [1, 0, 0, origin, 0];} - function set_parent(parent, param){ - if(typeof param === "number") return; - if(0 !== param[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dk_], 1); - param[5] = parent; - return; - } - function make_node(set, left, right, parent){ - if(set) var value = set[1], binding = [0, value, 1]; else var binding = 0; - var node = [0, 0, left, binding, right, parent, 0]; - set_parent(node, left); - set_parent(node, right); - return node; - } - function raw_invalidate(param){ - var param$0 = param; - for(;;){ - if(typeof param$0 === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _dl_], 1); - if(0 !== param$0[0]) return iter(invalidate, param$0[4]); - if(0 === param$0[6]) return; - param$0[6] = 0; - param$0 = param$0[5]; - } - } - function append(set, parent){ - if(typeof parent !== "number" && 1 === parent[0]){ - raw_invalidate(parent); - var node = make_node(set, parent[2], 0, parent); - parent[2] = node; - return node; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dm_], 1); - } - function get$2(param){ - if(typeof param !== "number" && 0 === param[0]){ - var match = param[3]; - if(match){var value = match[1]; return [0, value];} - } - return 0; - } - function invalidate_binding(param){ - if(! param) return; - param[2] = 0; - return; - } - function set_binding(x, t){ - if(typeof t !== "number"){ - if(0 !== t[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dn_], 1); - if(typeof t[5] !== "number"){ - raw_invalidate(t); - invalidate_binding(t[3]); - t[3] = x; - return 0; - } - } - return 0; - } - function symbol$2(t, value){return set_binding([0, value, 1], t);} - function unset(t){return set_binding(0, t);} - function size(node){ - if(typeof node === "number") return 0; - if(0 !== node[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dp_], 1); - if(0 === node[6]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _do_], 1); - return node[6]; - } - function smaller_ell(smin, smax){ - var - _ur_ = smin < smax ? 1 : 0, - _us_ = _ur_ ? (smin & smax) << 1 < smax ? 1 : 0 : _ur_; - return _us_; - } - function disbalanced(smin, smax){return smaller_ell(smin, smax >>> 1 | 0);} - function reparent(parent, oldchild, newchild){ - if(typeof parent !== "number"){ - if(0 !== parent[0]){ - if(parent[2] !== oldchild) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dr_], 1); - parent[2] = newchild; - return; - } - if(parent[2] === oldchild){parent[2] = newchild; return;} - if(parent[4] === oldchild){parent[4] = newchild; return;} - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dq_], 1); - } - function rot_left$0(counter, version, sn){ - if(typeof sn !== "number" && 0 === sn[0]){ - var rn = sn[4]; - if(typeof rn !== "number" && 1 !== rn[0]){ - var parent = sn[5], rl = rn[2]; - if(typeof rl === "number") - var rl$0 = 0; - else{ - if(0 !== rl[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dt_], 1); - rl[5] = sn; - var rl$0 = rl; - } - rn[2] = sn; - sn[4] = rl$0; - sn[5] = rn; - rn[5] = parent; - reparent(parent, sn, rn); - balance(version, sn); - if(counter >= 50) - return caml_trampoline_return(balance$0, [0, version, rn]); - var counter$0 = counter + 1 | 0; - return balance$0(counter$0, version, rn); - } - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ds_], 1); - } - function rot_left(version, sn){ - return caml_trampoline(rot_left$0(0, version, sn)); - } - function rot_right$0(counter, version, sn){ - if(typeof sn !== "number" && 0 === sn[0]){ - var ln = sn[2]; - if(typeof ln !== "number" && 1 !== ln[0]){ - var parent = sn[5], lr = ln[4]; - if(typeof lr === "number") - var lr$0 = 0; - else{ - if(0 !== lr[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dv_], 1); - lr[5] = sn; - var lr$0 = lr; - } - ln[4] = sn; - sn[2] = lr$0; - sn[5] = ln; - ln[5] = parent; - reparent(parent, sn, ln); - balance(version, sn); - if(counter >= 50) - return caml_trampoline_return(balance$0, [0, version, ln]); - var counter$0 = counter + 1 | 0; - return balance$0(counter$0, version, ln); - } - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _du_], 1); - } - function rot_right(version, sn){ - return caml_trampoline(rot_right$0(0, version, sn)); - } - function inc_left(counter, version, self){ - if(typeof self !== "number" && 0 === self[0]){ - var right = self[4]; - a: - if(typeof right !== "number" && 0 === right[0]){ - var _uq_ = size(right[2]); - if(smaller_ell(size(right[4]), _uq_)){rot_right(version, right); break a;} - } - if(counter >= 50) - return caml_trampoline_return(rot_left$0, [0, version, self]); - var counter$0 = counter + 1 | 0; - return rot_left$0(counter$0, version, self); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dw_], 1); - } - function inc_right(counter, version, self){ - if(typeof self !== "number" && 0 === self[0]){ - var left = self[2]; - a: - if(typeof left !== "number" && 0 === left[0]){ - var _up_ = size(left[4]); - if(smaller_ell(size(left[2]), _up_)){rot_left(version, left); break a;} - } - if(counter >= 50) - return caml_trampoline_return(rot_right$0, [0, version, self]); - var counter$0 = counter + 1 | 0; - return rot_right$0(counter$0, version, self); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dx_], 1); - } - function balance$0(counter, version, self){ - if(typeof self !== "number" && 0 === self[0]){ - var sl = size(self[2]), sr = size(self[4]); - if(sl < sr){ - if(! disbalanced(sl, sr)){ - self[1] = version; - self[6] = (1 + sl | 0) + sr | 0; - return self; - } - if(counter >= 50) - return caml_trampoline_return(inc_left, [0, version, self]); - var counter$1 = counter + 1 | 0; - return inc_left(counter$1, version, self); - } - if(! disbalanced(sr, sl)){ - self[1] = version; - self[6] = (1 + sl | 0) + sr | 0; - return self; - } - if(counter >= 50) - return caml_trampoline_return(inc_right, [0, version, self]); - var counter$0 = counter + 1 | 0; - return inc_right(counter$0, version, self); - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dy_], 1); - } - function balance(version, self){ - return caml_trampoline(balance$0(0, version, self)); - } - function compute_sub_size(version, self){ - var self$0 = self; - for(;;){ - if(typeof self$0 === "number") return; - if(0 !== self$0[0]) return; - var _um_ = 0 === self$0[6] ? 1 : 0; - if(! _um_) return _um_; - var _un_ = self$0[2]; - if(typeof _un_ !== "number" && 0 === _un_[0] && 0 === _un_[6]){var self$2 = self$0[2]; self$0 = self$2; continue;} - var _uo_ = self$0[4]; - if(typeof _uo_ !== "number" && 0 === _uo_[0] && 0 === _uo_[6]){var self$1 = self$0[4]; self$0 = self$1; continue;} - var parent = self$0[5]; - balance(version, self$0); - self$0 = parent; - } - } - function reset_version(version, param){ - var param$0 = param; - for(;;){ - if(typeof param$0 === "number") return; - if(0 !== param$0[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dz_], 1); - param$0[1] = version; - reset_version(version, param$0[2]); - param$0 = param$0[4]; - } - } - function rebalance(r){ - if(typeof r !== "number" && 1 === r[0]){ - var _ul_ = r[2]; - if(typeof _ul_ !== "number"){ - if(0 !== _ul_[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dB_], 1); - if(0 === _ul_[6]){ - var - version = r[1] + 1 | 0, - version$0 = - version === 2147483647 - ? (r[3] = [0, 0], reset_version(0, r[2]), 0) - : version; - r[1] = version$0; - compute_sub_size(version$0, r[2]); - return version$0; - } - } - return r[1]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dA_], 1); - } - function plus(param, x, y){ - var plus = param[2], zero = param[1]; - return x === zero ? y : y === zero ? x : caml_call2(plus, x, y); - } - function extract_bindings(tree){ - function aux(acc, param){ - var acc$0 = acc, rnode = param; - for(;;){ - if(! rnode) return acc$0; - var acc$1 = aux(acc$0, rnode[6]), _uj_ = rnode[2]; - if(_uj_) - var - _uk_ = _uj_[2] ? [0, [0, rnode[2], rnode[3]], acc$1] : acc$1, - acc$2 = _uk_; - else - var acc$2 = acc$1; - acc$0 = acc$2; - rnode = rnode[5]; - } - } - return aux(0, tree); - } - function full_rebuild(red, tree){ - var bindings = [0, extract_bindings(red[3])]; - function aux(cell){ - if(typeof cell === "number") return 0; - if(0 !== cell[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dD_], 1); - var left = aux(cell[2]), binding = cell[3], _ui_ = bindings[1]; - a: - if(binding){ - if(_ui_){ - var - bindings$0 = _ui_[2], - match = _ui_[1], - reduction = match[2], - binding$0 = match[1]; - if(binding === binding$0){ - bindings[1] = bindings$0; - var reduction$0 = reduction; - break a; - } - } - if(! binding[2]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dC_], 1); - var reduction$0 = caml_call2(red[5], cell, binding[1]); - } - else - var reduction$0 = red[6][1]; - var - right = aux(cell[4]), - aggregate = left ? plus(red[6], left[4], reduction$0) : reduction$0, - aggregate$0 = right ? plus(red[6], aggregate, right[4]) : aggregate; - return [0, cell, cell[3], reduction$0, aggregate$0, left, right]; - } - var result = aux(tree); - if(0 === bindings[1]) return result; - throw caml_maybe_attach_backtrace([0, Assert_failure, _dE_], 1); - } - function extract_fringe(version, tree){ - function aux(acc, tree){ - var acc$0 = acc, rnode = tree; - for(;;){ - if(! rnode) return acc$0; - var match = rnode[1]; - if(typeof match !== "number" && 0 === match[0] && match[1] <= version) - return [0, rnode, acc$0]; - var acc$1 = aux(acc$0, rnode[6]), _ug_ = rnode[2]; - if(_ug_) - var _uh_ = _ug_[2] ? [0, rnode, acc$1] : acc$1, acc$2 = _uh_; - else - var acc$2 = acc$1; - var tree$0 = rnode[5]; - acc$0 = acc$2; - rnode = tree$0; - } - } - return aux(0, tree); - } - function incremental_rebuild(red, version, tree){ - var fringe = [0, extract_fringe(version, red[3])]; - function aux(cell){ - if(typeof cell !== "number" && 0 === cell[0]){ - if(cell[1] <= version){ - var match = fringe[1]; - if(match){ - var reduction = match[1]; - if(reduction){ - var fringe$0 = match[2]; - if(reduction[1] !== cell) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dF_], 1); - fringe[1] = fringe$0; - return reduction; - } - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dG_], 1); - } - var left = aux(cell[2]), binding = cell[3], _ue_ = fringe[1]; - a: - if(binding){ - if(_ue_){ - var rnode = _ue_[1]; - if(rnode){ - var fringe$1 = _ue_[2]; - if(binding === rnode[2]){ - fringe[1] = fringe$1; - var _uf_ = rnode[3], reduction$0 = _uf_; - break a; - } - } - } - if(! binding[2]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dH_], 1); - var reduction$0 = caml_call2(red[5], cell, binding[1]); - } - else - var reduction$0 = red[6][1]; - var - right = aux(cell[4]), - aggregate = left ? plus(red[6], left[4], reduction$0) : reduction$0, - aggregate$0 = right ? plus(red[6], aggregate, right[4]) : aggregate; - return [0, cell, cell[3], reduction$0, aggregate$0, left, right]; - } - return 0; - } - var result = aux(tree); - if(0 === fringe[1]) return result; - throw caml_maybe_attach_backtrace([0, Assert_failure, _dI_], 1); - } - function eval$0(red){ - var root = red[2]; - if(typeof root !== "number" && 1 === root[0]){ - var version = rebalance(red[2]); - if(red[4] !== root[3]){ - red[4] = root[3]; - red[3] = full_rebuild(red, root[2]); - } - else - red[3] = incremental_rebuild(red, red[1], root[2]); - red[1] = version; - var match = red[3]; - return match ? match[4] : red[6][1]; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dJ_], 1); - } - function opaque(_ud_){return _ud_;} - function map_reduce$0(mapper, monoid, source){ - var - reduction = [0, 0, source, 0, not_origin, mapper, monoid], - prim$0 = - prim - (function(self){ - var match = reduction[2]; - if(typeof match !== "number" && 1 === match[0]){ - var _uc_ = match[4]; - match[4] = [0, opaque(self), _uc_]; - return reduction; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dL_], 1); - }, - function(self, reduction){ - var match = reduction[2]; - if(typeof match !== "number" && 1 === match[0]){ - var - _t8_ = match[4], - _t9_ = opaque(self), - _t__ = function(_ub_, _ua_){return _ub_ !== _ua_ ? 1 : 0;}; - match[4] = find_all(function(_t$_){return _t__(_t9_, _t$_);})(_t8_); - return 0; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dK_], 1); - }); - return func(get_prim(prim$0), eval$0); - } - function aux(acc, self){ - var acc$0 = acc, self$0 = self; - for(;;){ - if(typeof self$0 === "number") return acc$0; - if(0 !== self$0[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dM_], 1); - var self$1 = self$0[2], acc$1 = [0, self$0]; - acc$0 = acc$1; - self$0 = self$1; - } - } - function left_most(r){return aux(0, r);} - var right_most = function _t7_(_t6_){return _t7_.fun(_t6_);}; - function aux$0(acc, self){ - var acc$0 = acc, self$0 = self; - for(;;){ - if(typeof self$0 === "number") return acc$0; - if(0 !== self$0[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dN_], 1); - var self$1 = self$0[4], acc$1 = [0, self$0]; - acc$0 = acc$1; - self$0 = self$1; - } - } - caml_update_dummy(right_most, function(r){return aux$0(0, r);}); - function first(param){ - if(typeof param !== "number" && 1 === param[0]) - return left_most(param[2]); - throw caml_maybe_attach_backtrace([0, Assert_failure, _dO_], 1); - } - function next(self){ - if(typeof self === "number") return 0; - if(0 !== self[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dR_], 1); - var x = left_most(self[4]); - if(x) return x; - function walk_root(self, parent){ - var self$0 = self, parent$0 = parent; - for(;;){ - if(typeof parent$0 === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _dP_], 1); - if(0 !== parent$0[0]) return 0; - if(parent$0[2] === self$0) return [0, parent$0]; - if(parent$0[4] !== self$0) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dQ_], 1); - var parent$1 = parent$0[5]; - self$0 = parent$0; - parent$0 = parent$1; - } - } - return walk_root(self, self[5]); - } - var empty$0 = 0; - function element(v){return [0, 0, v];} - function maxi(a, b){return a < b ? b : a;} - function rank(t){ - if(typeof t === "number") return 0; - if(0 === t[0]){if(0 !== t[1]) invalid_arg(_dS_); return 0;} - if(0 !== (t[1] & 2)) invalid_arg(_dT_); - return t[1] >>> 2 | 0; - } - function concat$0(a, b){ - if(typeof a === "number") - var x = b; - else{ - if(typeof b !== "number"){ - var _t5_ = rank(b); - return [1, (maxi(rank(a), _t5_) + 1 | 0) << 2, a, b]; - } - var x = a; - } - return x; - } - function view(param){ - return typeof param === "number" - ? 0 - : 0 === param[0] ? [0, param[2]] : [1, param[2], param[3]]; - } - var mask_old = 1, mask_new = 2, mask_both = 3; - function is_shared(m){return -1 === m ? 1 : 0;} - function is_not_shared(m){return -1 !== m ? 1 : 0;} - function is_both(m){return (m & 3) === 3 ? 1 : 0;} - function is_old(m){return (m & 3) === 1 ? 1 : 0;} - function is_new(m){return (m & 3) === 2 ? 1 : 0;} - function set_both(m){return m | 3;} - function get_index(m){return m >>> 2 | 0;} - function with_index_new(index){return index << 2 | 2;} - function unmark(m){return m & lnot(mask_both);} - function marked(s){return s[1];} - function shared(s){return s[2];} - function blocked(s){return s[3];} - function mk_stats(param){return [0, 0, 0, 0];} - function new_marked(stats){stats[1] = stats[1] + 1 | 0; return;} - function new_shared(stats){stats[2] = stats[2] + 1 | 0; return;} - function new_blocked(stats){stats[3] = stats[3] + 1 | 0; return;} - function block(stats, mask, param){ - var t = param; - for(;;){ - if(typeof t === "number") return; - if(0 === t[0]){ - var - mark = t[1], - _t1_ = (mark & 3) !== 3 ? 1 : 0, - _t2_ = _t1_ ? 0 !== (mark & 3) ? 1 : 0 : _t1_; - if(_t2_){ - if(0 !== (mark & mask)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dU_], 1); - new_marked(stats); - new_blocked(stats); - t[1] = mark | 3; - } - return; - } - var - mark$0 = t[1], - _t3_ = (mark$0 & 3) !== 3 ? 1 : 0, - _t4_ = _t3_ ? 0 !== (mark$0 & 3) ? 1 : 0 : _t3_; - if(! _t4_) return _t4_; - if(0 !== (mark$0 & mask)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dV_], 1); - new_marked(stats); - new_blocked(stats); - t[1] = mark$0 | 3; - block(stats, mask, t[2]); - t = t[3]; - } - } - function enqueue(stats, q, mask, t){ - if(typeof t === "number") return; - if(0 === t[0]){ - var mark = t[1]; - if(0 === (mark & mask)){ - new_marked(stats); - if(0 === (mark & 3)) - t[1] = mark | mask; - else{t[1] = -1; new_blocked(stats); new_shared(stats);} - } - var - _tX_ = -1 !== mark ? 1 : 0, - _tY_ = _tX_ ? (mark & 3) === 3 ? 1 : 0 : _tX_; - return _tY_ ? (t[1] = -1, new_shared(stats)) : _tY_; - } - var mark$0 = t[1]; - if(0 === (mark$0 & mask)){ - new_marked(stats); - if(0 === (mark$0 & 3)){ - t[1] = mark$0 | mask; - add(t, q); - } - else{ - t[1] = -1; - new_blocked(stats); - new_shared(stats); - block(stats, mask, t[2]); - block(stats, mask, t[3]); - } - } - var - _tZ_ = -1 !== mark$0 ? 1 : 0, - _t0_ = _tZ_ ? (mark$0 & 3) === 3 ? 1 : 0 : _tZ_; - return _t0_ ? (t[1] = -1, new_shared(stats)) : _t0_; - } - function dequeue(stats, q, mask){ - var t = take(q); - if(typeof t !== "number" && 1 === t[0]){ - var _tW_ = (t[1] & 3) === mask ? 1 : 0; - return _tW_ - ? (enqueue(stats, q, mask, t[2]), enqueue(stats, q, mask, t[3])) - : _tW_; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dW_], 1); - } - function traverse1(stats, q, mask){ - for(;;){if(is_empty(q)) return; dequeue(stats, q, mask);} - } - function traverse(sold, snew, qold, qnew){ - for(;;){ - if(is_empty(qold)) return traverse1(snew, qnew, mask_new); - if(is_empty(qnew)) return traverse1(sold, qold, mask_old); - dequeue(sold, qold, mask_old); - dequeue(snew, qnew, mask_new); - } - } - function old_stats(tr){return tr[1];} - function new_stats(tr){return tr[2];} - function unsafe_traverse(old_root, new_root){ - var - old_stats = mk_stats(0), - new_stats = mk_stats(0), - old_queue = create$0(0), - new_queue = create$0(0); - enqueue(old_stats, old_queue, mask_old, old_root); - enqueue(new_stats, new_queue, mask_new, new_root); - traverse(old_stats, new_stats, old_queue, new_queue); - return [0, old_stats, new_stats]; - } - function restore(param){ - if(typeof param === "number") return; - if(0 === param[0]){param[1] = 0; return;} - var _tV_ = rank(param[3]); - param[1] = (maxi(rank(param[2]), _tV_) + 1 | 0) << 2; - return; - } - function next_shared_index(st){ - var result = st[6]; - st[6] = result + 1 | 0; - return result; - } - function unblock(param){ - var param$0 = param; - for(;;){ - if(typeof param$0 === "number") return; - if(0 === param$0[0]){ - var t = param$0[1]; - if(typeof t !== "number" && 0 === t[0]){ - var - mark = t[1], - _tR_ = is_not_shared(mark), - _tS_ = _tR_ ? is_both(mark) : _tR_; - if(_tS_) t[1] = unmark(mark); - return; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dX_], 1); - } - var t$0 = param$0[1]; - if(typeof t$0 !== "number" && 1 === t$0[0]){ - var - r = param$0[4], - l = param$0[3], - mark$0 = t$0[1], - _tT_ = is_not_shared(mark$0), - _tU_ = _tT_ ? is_both(mark$0) : _tT_; - if(! _tU_) return _tU_; - t$0[1] = unmark(mark$0); - unblock(l); - param$0 = r; - continue; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dY_], 1); - } - } - function unmark_old(st, t){ - var t$0 = t; - for(;;){ - if(typeof t$0 === "number") return; - if(0 === t$0[0]){ - var a = t$0[1]; - if(typeof a !== "number" && 0 === a[0]){ - var b = t$0[2], mark = a[1]; - if(! is_old(mark)){ - if(is_shared(mark)){ - var index = next_shared_index(st); - caml_check_bound(st[4], index)[1 + index] = a; - caml_check_bound(st[5], index)[1 + index] = [0, t$0, 0]; - a[1] = with_index_new(index); - return; - } - if(is_new(mark)){ - var - index$0 = get_index(mark), - _tN_ = [0, t$0, caml_check_bound(st[5], index$0)[1 + index$0]]; - caml_check_bound(st[5], index$0)[1 + index$0] = _tN_; - return; - } - var _tO_ = is_both(mark); - if(_tO_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d1_], 1); - return _tO_; - } - var dropped_leaf = st[2]; - if(-1 < dropped_leaf){ - caml_check_bound(st[1], dropped_leaf)[1 + dropped_leaf] = b; - st[2] = dropped_leaf + 1 | 0; - if(st[2] > st[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d0_], 1); - } - a[1] = unmark(mark); - return; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dZ_], 1); - } - var a$0 = t$0[1]; - if(typeof a$0 !== "number" && 1 === a$0[0]){ - var b$0 = t$0[2], r = t$0[4], l = t$0[3], mark$0 = a$0[1]; - if(is_shared(mark$0)){ - var index$1 = next_shared_index(st); - caml_check_bound(st[4], index$1)[1 + index$1] = a$0; - caml_check_bound(st[5], index$1)[1 + index$1] = [0, t$0, 0]; - a$0[1] = with_index_new(index$1); - unblock(l); - return unblock(r); - } - if(! is_old(mark$0)){ - if(is_new(mark$0)){ - var - index$2 = mark$0 >>> 2 | 0, - _tP_ = [0, t$0, caml_check_bound(st[5], index$2)[1 + index$2]]; - caml_check_bound(st[5], index$2)[1 + index$2] = _tP_; - return; - } - var _tQ_ = is_both(mark$0); - if(_tQ_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d4_], 1); - return _tQ_; - } - if(-1 < st[3]){ - var dropped_join = st[3] - 1 | 0; - caml_check_bound(st[1], dropped_join)[1 + dropped_join] = b$0; - st[3] = dropped_join; - if(st[2] > st[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d3_], 1); - } - a$0[1] = unmark(mark$0); - unmark_old(st, l); - t$0 = r; - continue; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d2_], 1); - } - } - function prepare_shared(st){ - var _tK_ = st[6] - 1 | 0, _tJ_ = 0; - if(_tK_ >= 0){ - var i = _tJ_; - for(;;){ - var match = caml_check_bound(st[4], i)[1 + i]; - if(typeof match !== "number") - if(0 === match[0]) - match[1] = set_both(match[1]); - else - match[1] = set_both(match[1]); - var xs = caml_check_bound(st[5], i)[1 + i]; - if(! xs) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d5_], 1); - if(xs[2]){var _tL_ = rev(xs); caml_check_bound(st[5], i)[1 + i] = _tL_;} - var _tM_ = i + 1 | 0; - if(_tK_ === i) break; - i = _tM_; - } - } - return; - } - function unmark_new(st, t){ - if(typeof t === "number") return 0; - if(0 !== t[0]){ - var mark$0 = t[1]; - if(-1 === mark$0){ - var index$0 = next_shared_index(st); - t[1] = 0; - caml_check_bound(st[4], index$0)[1 + index$0] = t; - var l = unmark_new(st, t[2]), r = unmark_new(st, t[3]); - return [1, t, 0, l, r]; - } - if(! is_both(mark$0)){ - t[1] = unmark(t[1]); - var l$0 = unmark_new(st, t[2]), r$0 = unmark_new(st, t[3]); - return [1, t, 0, l$0, r$0]; - } - var - index$1 = mark$0 >>> 2 | 0, - match$0 = caml_check_bound(st[5], index$1)[1 + index$1]; - if(! match$0) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d6_], 1); - var xs$0 = match$0[2], x$0 = match$0[1]; - caml_check_bound(st[5], index$1)[1 + index$1] = xs$0; - if(0 === xs$0) t[1] = 0; - return x$0; - } - var mark = t[1]; - if(is_not_shared(mark) && is_both(mark)){ - var - index = mark >>> 2 | 0, - match = caml_check_bound(st[5], index)[1 + index]; - if(! match) return [0, t, 0]; - var xs = match[2], x = match[1]; - caml_check_bound(st[5], index)[1 + index] = xs; - return x; - } - t[1] = 0; - return [0, t, 0]; - } - var no_dropped = [0, 0, [0], 0, 0]; - function diff(get_dropped, xold, tnew){ - if(typeof xold === "number"){ - if(typeof tnew === "number") return [0, no_dropped, 0]; - } - else{var a$0 = xold[1]; if(a$0 === tnew) return [0, no_dropped, xold];} - if(typeof xold === "number") - var empty = empty$0; - else - var a = xold[1], empty = a; - var - traversal = unsafe_traverse(empty, tnew), - sold = old_stats(traversal), - snew = new_stats(traversal), - _tw_ = blocked(snew), - _tx_ = blocked(sold) + _tw_ | 0, - nb_dropped = marked(sold) - _tx_ | 0, - _ty_ = shared(snew), - nb_shared = shared(sold) + _ty_ | 0, - _tz_ = 0, - _tA_ = caml_make_vect(nb_shared, 0), - _tB_ = caml_make_vect(nb_shared, 0), - nb_dropped$0 = get_dropped ? nb_dropped : -1, - _tC_ = get_dropped ? 0 : -1, - _tD_ = get_dropped ? caml_make_vect(nb_dropped, 0) : [0], - st = [0, _tD_, _tC_, nb_dropped$0, _tB_, _tA_, _tz_]; - unmark_old(st, xold); - if(st[2] !== st[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d7_], 1); - prepare_shared(st); - var result = unmark_new(st, tnew), _tE_ = st[6] - 1 | 0; - if(_tE_ >= 0){ - var i$0 = _tE_; - for(;;){ - restore(caml_check_bound(st[4], i$0)[1 + i$0]); - var _tI_ = i$0 - 1 | 0; - if(0 === i$0) break; - i$0 = _tI_; - } - } - if(! get_dropped) return [0, no_dropped, result]; - var xleaf = [0, 0], xjoin = [0, 0], _tG_ = st[6] - 1 | 0, _tF_ = 0; - if(_tG_ >= 0){ - var i = _tF_; - for(;;){ - iter - (function(param){ - if(typeof param !== "number") - if(0 === param[0]){ - var match = param[2]; - if(match){var b = match[1]; xleaf[1] = [0, b, xleaf[1]]; return 0;} - } - else{ - var match$0 = param[2]; - if(match$0){ - var b$0 = match$0[1]; - xjoin[1] = [0, b$0, xjoin[1]]; - return 0; - } - } - return 0; - }, - caml_check_bound(st[5], i)[1 + i]); - var _tH_ = i + 1 | 0; - if(_tG_ === i) break; - i = _tH_; - } - } - return [0, [0, st[2], st[1], xleaf[1], xjoin[1]], result]; - } - function eval$1(map_reduce, other){ - if(typeof other === "number") return 0; - function aux(param){ - a: - if(typeof param !== "number"){ - b: - { - if(0 === param[0]){ - var t = param[1]; - if(typeof t !== "number" && 0 === t[0]){ - var _tu_ = param[2]; - if(_tu_){var b = _tu_[1]; break b;} - var result = caml_call1(map_reduce[1], t[2]); - param[2] = [0, result]; - return result; - } - break a; - } - var _tv_ = param[2]; - if(! _tv_){ - var - l = aux(param[3]), - r = aux(param[4]), - result$0 = caml_call2(map_reduce[2], l, r); - param[2] = [0, result$0]; - return result$0; - } - var b = _tv_[1]; - } - return b; - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d8_], 1); - } - return [0, aux(other)]; - } - function make$4(map, reduce){return [0, [0, map, reduce], 0];} - function reduce(param){ - var tree = param[2], map_reduce = param[1]; - return eval$1(map_reduce, tree); - } - function update$0(param, new_tree){ - var - old_tree = param[2], - map_reduce = param[1], - tree = diff(0, old_tree, new_tree)[2]; - return [0, map_reduce, tree]; - } - function update_and_get_dropped(param, new_tree){ - var - old_tree = param[2], - map_reduce = param[1], - match = diff(1, old_tree, new_tree), - tree = match[2], - dropped = match[1]; - return [0, dropped, [0, map_reduce, tree]]; - } - function fold_dropped(kind, f, dropped, acc){ - var acc$0 = [0, acc]; - if(3850876 === kind) - var bound = dropped[1], bound$0 = bound, start = 0; - else if(858694086 <= kind) - var bound$0 = dropped[2].length - 1, start = dropped[1]; - else - var bound$0 = dropped[2].length - 1, start = 0; - var _ts_ = bound$0 - 1 | 0; - if(_ts_ >= start){ - var i = start; - for(;;){ - var match = caml_check_bound(dropped[2], i)[1 + i]; - if(match){var x = match[1]; acc$0[1] = caml_call2(f, x, acc$0[1]);} - var _tt_ = i + 1 | 0; - if(_ts_ === i) break; - i = _tt_; - } - } - if(858694086 > kind) - iter - (function(x){acc$0[1] = caml_call2(f, x, acc$0[1]); return 0;}, - dropped[3]); - if(3850876 !== kind) - iter - (function(x){acc$0[1] = caml_call2(f, x, acc$0[1]); return 0;}, - dropped[4]); - return; - } - function pure_map_reduce(map, reduce, param){ - if(typeof param === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _d9_], 1); - if(0 === param[0]) return caml_call1(map, param[2]); - var _tr_ = pure_map_reduce(map, reduce, param[3]); - return caml_call2(reduce, pure_map_reduce(map, reduce, param[2]), _tr_); - } - function fold_monoid(map, param, seq){ - var reduce$0 = param[2], zero = param[1], match = is_pure(seq); - if(match){ - var other = match[1]; - return typeof other === "number" - ? pure(zero) - : pure(pure_map_reduce(map, reduce$0, other)); - } - var reducer = [0, make$4(map, reduce$0)]; - return func - (seq, - function(seq){ - var reducer$0 = update$0(reducer[1], seq); - reducer[1] = reducer$0; - var match = reduce(reducer$0); - if(! match) return zero; - var x = match[1]; - return x; - }); - } - var monoid = [0, empty$0, concat$0]; - function transform_list(ls, f){return map_reduce(f, monoid, ls);} - function of_list$0(ls){return transform_list(ls, element);} - function to_list$0(x){ - function fold(x, acc){ - var x$0 = x, acc$0 = acc; - for(;;){ - if(typeof x$0 === "number") return acc$0; - if(0 === x$0[0]) return [0, x$0[2], acc$0]; - var acc$1 = fold(x$0[3], acc$0), x$1 = x$0[2]; - x$0 = x$1; - acc$0 = acc$1; - } - } - return fold(x, 0); - } - var - lwd_empty = pure(0), - lwd_monoid = [0, lwd_empty, function(x, y){return map2(x, y, concat$0);}]; - function map$3(f, seq){ - return fold_monoid - (function(x){return element(caml_call1(f, x));}, monoid, seq); - } - function filter_map$0(f, seq){ - function select(x){ - var match = caml_call1(f, x); - if(! match) return empty$0; - var y = match[1]; - return element(y); - } - return fold_monoid(select, monoid, seq); - } - function bind$0(seq, f){return join(fold_monoid(f, lwd_monoid, seq));} - function lift(seq){ - return bind$0(seq, function(_tq_){return func(_tq_, element);}); - } - var jv_global = globalThis; - function length$1(s){return s[cst_length];} - function jstr_of_int(opt, i){ - if(opt) var sth = opt[1], base = sth; else var base = 10; - return i.toString(base); - } - var empty$1 = cst$1; - function append$0(s0, s1){return s0.concat(s1);} - function concat$1(opt, ss){ - if(opt) var sth = opt[1], sep = sth; else var sep = empty$1; - return caml_list_to_js_array(ss).join(sep); - } - function slice(opt, stop, s){ - if(opt) var sth = opt[1], start = sth; else var start = 0; - if(stop) - var stop$0 = stop[1], args = [0, start, stop$0]; - else - var args = [0, start]; - return caml_js_meth_call(s, "slice", args); - } - function cuts(sep, s){return caml_list_of_js_array(s.split(sep));} - function is_empty$0(s){return 0 === length$1(s) ? 1 : 0;} - function starts_with(prefix, s){return s.startsWith(prefix) | 0;} - function equal(_tp_, _to_){return caml_equal(_tp_, _to_);} - jv_global["Number"]; - var null$0 = null, undefined$0 = undefined; - function is_null(v){return v === null$0 ? 1 : 0;} - function is_undefined(v){return v === undefined$0 ? 1 : 0;} - function is_none(v){ - var _tn_ = is_null(v); - return _tn_ ? _tn_ : is_undefined(v); - } - function is_some$0(v){return 1 - is_none(v);} - function to_option(conv, v){ - return is_none(v) ? 0 : [0, caml_call1(conv, v)]; - } - function of_option(none, conv, param){ - if(! param) return none; - var v = param[1]; - return caml_call1(conv, v); - } - var global = globalThis; - function set_if_some(o, p, param){ - if(! param) return; - var v = param[1]; - o[p] = v; - return; - } - var true$0 = true; - function get$3(o, p){o[p]; return;} - function set(o, p, b){o[p] = ! ! b; return;} - function set_if_some$0(o, p, param){ - if(! param) return; - var b = param[1]; - return set(o, p, b); - } - function get$4(o, p){return o[p];} - function get$5(o, p){return o[p];} - function set$0(o, p, b){o[p] = b; return;} - function set_if_some$1(o, p, param){ - if(! param) return; - var f = param[1]; - return set$0(o, p, f); - } - function to_string$1(_tm_){return caml_string_of_jsstring(_tm_);} - function create$3(n){return new global["Array"](n);} - function length$2(a){return a[cst_length];} - function to_list$1(conv, v){ - var len = length$2(v); - return init(len, function(i){return caml_call1(conv, v[i]);}); - } - function of_list$1(conv, l){ - function loop(i, ja, param){ - var i$0 = i, param$0 = param; - for(;;){ - if(! param$0) return ja; - var vs = param$0[2], v = param$0[1]; - ja[i$0] = caml_call1(conv, v); - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - param$0 = vs; - } - } - return loop(0, create$3(0), l); - } - function v(name, msg){ - var e = new global["Error"](msg); - if(! name) return e; - var n = name[1]; - e[cst_name] = n; - return e; - } - function throw$0(name, msg){ - var e = v(name, msg); - return caml_call1(function(exn){throw exn;}, e); - } - var promise = global["Promise"]; - function create$4(f){ - function g(res, rej){ - return caml_call2 - (f, function(x){return res(x);}, function(x){return rej(x);}); - } - return new promise(caml_js_wrap_callback_strict(2, g)); - } - function resolve(v){return promise.resolve(v);} - function await$0(p, k){p.then(caml_js_wrap_callback_strict(1, k)); return;} - function bind$1(p, res){ - return p.then(caml_js_wrap_callback_strict(1, res)); - } - function then(p, res, rej){ - return p.then - (caml_js_wrap_callback_strict(1, res), - caml_js_wrap_callback_strict(1, rej)); - } - function call(o, m, args){ - return caml_js_meth_call(o, to_string$1(m), args); - } - function value$0(_tl_){return caml_string_of_jsstring(_tl_);} - function _d__(_tk_){return caml_jsstring_of_string(_tk_);} - function fut(p){return {fut: p};} - function promise$0(f){return f[cst_fut];} - function create$5(param){ - function not_set(param){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _d$_], 1); - } - function is_set(param){return throw$0(0, "The future is already set");} - var setter = [0, not_set]; - function set_setter(resolve, reject){setter[1] = resolve; return 0;} - var p = create$4(set_setter); - function set(v){caml_call1(setter[1], v); setter[1] = is_set; return 0;} - return [0, fut(p), set]; - } - function await$1(f, k){return await$0(promise$0(f), k);} - function return$1(v){return fut(resolve(v));} - function bind$2(f, fn){ - return fut - (bind$1 - (promise$0(f), - function(v){return promise$0(caml_call1(fn, v));})); - } - function map$4(fn, f){ - return bind$2(f, function(v){return return$1(caml_call1(fn, v));}); - } - function ok(v){return return$1([0, v]);} - function of_promise(ok, error, p){ - function ok$0(v){return resolve([0, caml_call1(ok, v)]);} - function error$0(e){return resolve([1, caml_call1(error, e)]);} - return fut(then(p, ok$0, error$0)); - } - function of_promise$0(ok, v){ - return of_promise(ok, function(_tj_){return _tj_;}, v); - } - function let$0(f, fn){ - return function(_ti_){return bind$2(f, _ti_);} - (function(e){ - if(0 !== e[0]) return return$1(e); - var v = e[1]; - return caml_call1(fn, v); - }); - } - function let$1(f, fn){ - return map$4(function(_th_){return map$0(fn, _th_);}, f); - } - global["Event"]; - function target(e){return e["target"];} - function stop_immediate_propagation(e){e.stopImmediatePropagation(); return; - } - function prevent_default(e){e.preventDefault(); return 0;} - function listen(opt, type, f, t){ - if(opt) var sth = opt[1], opts = sth; else var opts = {}; - var f$0 = caml_js_wrap_callback_strict(1, f); - function unlisten(param){ - t.removeEventListener(type, f$0, opts); - return 0; - } - t.addEventListener(type, f$0, opts); - return unlisten; - } - function unlisten(unlisten){return caml_call1(unlisten, 0);} - var - change = "change", - click = cst_click, - dom_content_loaded = "DOMContentLoaded", - ended = "ended", - error = cst_error, - keyup = "keyup", - play = "play", - scroll = cst_scroll, - wheel = "wheel"; - global["ArrayBuffer"]; - global["DataView"]; - global["Blob"]; - global["File"]; - var json = global["JSON"]; - function encode(v){return json.stringify(v);} - function decode(s){ - try{var v = json.parse(s);} - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); - var e = exn[2]; - return [1, e]; - } - return [0, v]; - } - global["encodeURI"]; - global["decodeURI"]; - var - encode_component = global["encodeURIComponent"], - decode_component = global["decodeURIComponent"], - url = global["URL"]; - function v$0(base, s){ - if(! base) return new url(s); - var b = base[1]; - return new url(s, b); - } - var prefix = "/"; - function path(u){return get$5(u, _ea_);} - function path_segments(u){ - function decode_seg(s){return decode_component(s);} - try{ - var - p = path(u), - p$0 = starts_with(prefix, p) ? slice(_eb_, 0, p) : p, - _tg_ = [0, map$1(decode_seg, cuts(prefix, p$0))]; - return _tg_; - } - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); - var e = exn[2]; - return [1, e]; - } - } - function with_path_segments(u, segs){ - function encode_seg(s){return append$0(prefix, encode_component(s));} - try{ - var u$0 = new url(u), path = concat$1(0, map$1(encode_seg, segs)); - u$0[cst_pathname] = path; - var _tf_ = [0, u$0]; - return _tf_; - } - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); - var e = exn[2]; - return [1, e]; - } - } - var usp = global["URLSearchParams"]; - function to_jstr(p){return p.toString();} - function of_obj(o){return new usp(o);} - function with_query_params(u, ps){ - var u$0 = new url(u); - set$0(u$0, _ec_, to_jstr(ps)); - return u$0; - } - function to_jstr$0(u){return u.toString();} - function v$1(n, v){return [0, n, v];} - var void$0 = [0, empty$1, empty$1]; - function if$0(b, at){return b ? at : void$0;} - function true$1(n){return [0, n, empty$1];} - function int$2(n, i){return [0, n, jstr_of_int(0, i)];} - function to_pair(_te_){return _te_;} - var - checked = cst_checked, - class$0 = cst_class, - for$0 = "for", - id$0 = cst_id$0, - name = cst_name, - placeholder = "placeholder", - required = "required", - selected = "selected", - src = cst_src, - style = cst_style, - type = cst_type, - value$1 = cst_value, - width = "width", - checked$0 = true$1(checked); - function class$1(s){return v$1(class$0, s);} - function for$1(s){return v$1(for$0, s);} - function id$1(s){return v$1(id$0, s);} - var required$0 = true$1(required), selected$0 = true$1(selected); - function src$0(s){return v$1(src, s);} - function style$0(s){return v$1(style, s);} - function type$0(s){return v$1(type, s);} - function value$2(s){return v$1(value$1, s);} - function width$0(i){return int$2(width, i);} - var global_document = global["document"]; - function document(e){return e["ownerDocument"];} - if(! is_none(global_document)) global_document[cst_documentElement]; - function _ed_(e, n){e.appendChild(n); return 0;} - function set_atts(e, ss, clss, param){ - var ss$0 = ss, clss$0 = clss, param$0 = param; - for(;;){ - if(! param$0){ - if(0 !== ss$0){ - var v$0 = concat$1([0, ";"], rev(ss$0)); - e.setAttribute(cst_style, v$0); - } - if(0 !== clss$0){ - var v$1 = concat$1([0, cst$7], rev(clss$0)); - e.setAttribute(cst_class, v$1); - } - return; - } - var at = param$0[2], match = param$0[1], v = match[2], a = match[1]; - if(is_empty$0(a)) - param$0 = at; - else if(equal(a, style)){ - var ss$1 = [0, v, ss$0]; - ss$0 = ss$1; - param$0 = at; - } - else if(equal(a, class$0)){ - var clss$1 = is_empty$0(v) ? clss$0 : [0, v, clss$0]; - clss$0 = clss$1; - param$0 = at; - } - else{e.setAttribute(a, v); param$0 = at;} - } - } - function v$2(opt, _tc_, name, cs){ - if(opt) var sth = opt[1], d = sth; else var d = global_document; - if(_tc_) var sth$0 = _tc_[1], at = sth$0; else var at = 0; - var e = d.createElement(name); - set_atts(e, 0, 0, at); - iter(function(_td_){return _ed_(e, _td_);}, cs); - return e; - } - function txt(opt, s){ - if(opt) var sth = opt[1], d = sth; else var d = global_document; - return d.createTextNode(_d__(s)); - } - function append_children(e, l){ - caml_js_meth_call(e, cst_append, of_list(l)); - return; - } - function set_at(a, v, e){ - if(is_empty$0(a)) return 0; - if(v){var v$0 = v[1]; e.setAttribute(a, v$0); return 0;} - e.removeAttribute(a); - return 0; - } - function jv_to_float(f){return is_undefined(f) ? 0. : f;} - function float$0(n){ - return [0, n, jv_to_float, function(_tb_){return _tb_;}]; - } - function prop(p, e){var _ta_ = e[p[1]]; return caml_call1(p[2], _ta_);} - function set_class(c, b, e){ - return b ? (e[cst_classList].add(c), 0) : (e[cst_classList].remove(c), 0); - } - function computed_style(opt, p, e){ - if(opt) var sth = opt[1], w = sth; else var w = global[cst_window]; - var style = w.getComputedStyle(e), v = style[p]; - return is_none(v) ? empty$1 : v; - } - function scroll_y(e){return get$4(e, _ee_);} - function scroll_into_view(opt, e){ - if(opt) var sth = opt[1], align_v = sth; else var align_v = 389604418; - var align = 389604418 <= align_v ? 1 : 0; - e.scrollIntoView(! ! align); - return 0; - } - var - audio = "audio", - button = cst_button, - div = "div", - form = "form", - h1 = "h1", - img = "img", - input = "input", - label = "label", - option = "option", - select = "select", - span = "span"; - function cons$0(name, d, at, cs){return v$2(d, at, name, cs);} - function audio$0(_s9_, _s__, _s$_){return cons$0(audio, _s9_, _s__, _s$_);} - function div$0(_s6_, _s7_, _s8_){return cons$0(div, _s6_, _s7_, _s8_);} - function h1$0(_s3_, _s4_, _s5_){return cons$0(h1, _s3_, _s4_, _s5_);} - function span$0(_s0_, _s1_, _s2_){return cons$0(span, _s0_, _s1_, _s2_);} - function root(d){return d[cst_documentElement];} - function body(d){ - var b = d[cst_body]; - return is_some$0(b) - ? b - : throw$0 - (0, - "Document body is null. Try to defer your script execution."); - } - function active_el(d){ - return to_option(function(_sZ_){return _sZ_;}, d["activeElement"]); - } - function call$0(c, meth, args){caml_js_meth_call(c, meth, args); return 0;} - var _ef_ = global[cst_console]; - function msg_to_jv_array(msg){ - function loop(a, i, param){ - var i$0 = i, param$0 = param; - for(;;){ - if(! param$0) return a; - var vs = param$0[2], v = param$0[1]; - a[i$0] = v; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - param$0 = vs; - } - } - return caml_js_to_array(loop(create$3(0), 0, msg)); - } - function log(msg){return call$0(_ef_, _eg_, msg_to_jv_array(msg));} - function error$0(msg){return call$0(_ef_, _eh_, msg_to_jv_array(msg));} - function warn(msg){return call$0(_ef_, _ei_, msg_to_jv_array(msg));} - function debug(msg){return call$0(_ef_, _ej_, msg_to_jv_array(msg));} - function as_target(w){return w;} - function now_ms(p){return p.now();} - global[cst_console]; - var - navigator = global["navigator"], - performance = global["performance"], - window = global[cst_window]; - get$3(global, _ek_); - function set_timeout(ms, f){ - return global.setTimeout(caml_js_wrap_callback_strict(1, f), ms); - } - function stop_timer(tid){global.clearTimeout(tid); return;} - function request_animation_frame(f){ - global.requestAnimationFrame(caml_js_wrap_callback_strict(1, f)); - return; - } - global["ClipboardItem"]; - global["FormData"]; - function of_jstr(_sY_){return _sY_;} - function text(r){ - return of_promise$0(function(_sX_){return _sX_;}, r.text()); - } - var headers = global["Headers"]; - function of_assoc(init, l){ - if(init) var h = init[1], args = [0, h]; else var args = [0]; - var hs = caml_js_new(headers, args); - function add(hs, param){ - var v = param[2], k = param[1]; - hs.append(k, v); - return 0; - } - iter(function(_sW_){return add(hs, _sW_);}, l); - return hs; - } - function init$1 - (body, - cache, - credentials, - headers, - integrity, - keepalive, - method, - mode, - redirect, - referrer, - referrer_policy, - signal, - param){ - var o = {}; - o[cst_body] = of_option(undefined$0, function(_sV_){return _sV_;}, body); - set_if_some$1(o, _el_, cache); - set_if_some$1(o, _em_, credentials); - set_if_some(o, _en_, map(function(_sU_){return _sU_;}, headers)); - set_if_some$1(o, _eo_, integrity); - set_if_some$0(o, _ep_, keepalive); - set_if_some$1(o, _eq_, method); - set_if_some$1(o, _er_, mode); - set_if_some$1(o, _es_, redirect); - set_if_some$1(o, _et_, referrer); - set_if_some$1(o, _eu_, referrer_policy); - o["signal"] = of_option(undefined$0, function(_sT_){return _sT_;}, signal); - return o; - } - var request = global["Request"]; - function v$3(opt, url){ - if(opt) var sth = opt[1], init = sth; else var init = {}; - return new request(url, init); - } - global["Response"]; - var fetch = global["fetch"]; - function request$0(r){ - function _sQ_(_sS_){return _sS_;} - return function(_sR_){return of_promise$0(_sQ_, _sR_);}(fetch(r)); - } - global["MediaStream"]; - global["MediaRecorder"]; - global["MessageChannel"]; - global["BroadcastChannel"]; - var message = "message"; - function data(e){return e["data"];} - global["Notification"]; - function local(w){return w["localStorage"];} - function get_item(s, k){ - function _sN_(_sP_){return _sP_;} - return function(_sO_){return to_option(_sN_, _sO_);}(s.getItem(k)); - } - function set_item(s, k, v){ - try{s.setItem(k, v); return;} - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] === Error) return; - throw caml_maybe_attach_backtrace(exn, 0); - } - } - global["WebSocket"]; - var worker = global["Worker"]; - function create$6(opt, uri){ - if(opt) var sth = opt[1], opts = sth; else var opts = undefined$0; - return new worker(uri, opts); - } - function post(opts, w, v){ - if(opts) var o = opts[1], opts$0 = o; else var opts$0 = undefined$0; - w.postMessage(v, opts$0); - return; - } - global["SharedWorker"]; - function post$0(opts, v){ - if(opts) var o = opts[1], opts$0 = o; else var opts$0 = undefined$0; - global.postMessage(v, opts$0); - return 0; - } - global["clients"]; - global["registration"]; - global["serviceWorker"]; - function handler(opts, type, func){return [0, opts, type, func];} - function is_pure_element(param){ - var _sM_ = param[1]; - if(82 === _sM_){var x = param[2]; return is_some(is_pure(x));} - if(83 > _sM_) return 1; - var x$0 = param[2]; - return is_some(is_pure(x$0)); - } - function extract_pure_element(x){return get$0(is_pure(x));} - function extract_pure_elements(xs){ - return flatten - (map$1 - (function(param){ - var _sL_ = param[1]; - if(82 === _sL_){ - var x = param[2]; - return [0, extract_pure_element(x), 0]; - } - if(83 <= _sL_){ - var x$0 = param[2]; - return to_list$0(extract_pure_element(x$0)); - } - var x$1 = param[2]; - return [0, x$1, 0]; - }, - xs)); - } - function prepare_col(col){ - if(! col) return _ev_; - var - match = partition(is_pure_element, col), - impure = match[2], - pure = match[1]; - return [0, extract_pure_elements(pure), impure]; - } - function consume_children(col){ - if(! col) return _ew_; - var _sH_ = col[1], _sI_ = _sH_[1]; - if(82 === _sI_){ - if(! col[2]){var x = _sH_[2]; return [0, 0, [0, func(x, element)]];} - } - else - if(83 <= _sI_){ - if(! col[2]){var x$0 = _sH_[2]; return [0, 0, [0, x$0]];} - } - else if(! col[2]){var x$1 = _sH_[2]; return [0, [0, x$1, 0], 0];} - return for_all(is_pure_element, col) - ? [0, - flatten - (map$1 - (function(param){ - var _sJ_ = param[1]; - if(82 === _sJ_){ - var x = param[2]; - return [0, extract_pure_element(x), 0]; - } - if(83 <= _sJ_){ - var x$0 = param[2]; - return to_list$0(extract_pure_element(x$0)); - } - var x$1 = param[2]; - return [0, x$1, 0]; - }, - col)), - 0] - : [0, - 0, - [0, - map_reduce - (function(param){ - var _sK_ = param[1]; - if(82 === _sK_){var x = param[2]; return func(x, element);} - if(83 <= _sK_){var x$0 = param[2]; return x$0;} - var x$1 = param[2]; - return pure(element(x$1)); - }, - lwd_monoid, - col)]]; - } - function child_node(node){return [0, node];} - function child_join(left, right){return [1, null$0, left, right];} - var - jv_append = cst_append, - jv_before = "before", - jv_remove = cst_remove, - jv_contains = "contains"; - function contains_focus(node){ - var match = active_el(document(node)); - if(! match) return 0; - var el = match[1]; - return call(node, jv_contains, [0, el]) | 0; - } - function update_children(self, children){ - var reducer = [0, make$4(child_node, child_join)]; - return func - (children, - function(children){ - var - match = update_and_get_dropped(reducer[1], children), - reducer$0 = match[2], - dropped = match[1]; - reducer[1] = reducer$0; - function schedule_for_removal(child, param){ - if(0 !== child[0]) return 0; - var node = child[1]; - return node[cst_lwd_to_remove] = true$0; - } - fold_dropped(3850876, schedule_for_removal, dropped, 0); - var - preserve_focus = contains_focus(self), - match$0 = reduce(reducer$0); - if(match$0){ - var - tree = match$0[1], - update = - function(acc, t){ - if(0 !== t[0]){ - if(! is_null(t[1])) return t[1]; - var acc$0 = update(acc, t[3]), acc$1 = update(acc$0, t[2]); - t[1] = acc$1; - return acc$1; - } - var node = t[1]; - delete node[cst_lwd_to_remove]; - if(node.parentNode !== self) - if(is_null(acc)) - call(self, jv_append, [0, node]); - else - call(acc, jv_before, [0, node]); - else{ - var _sD_ = node.nextSibling !== acc ? 1 : 0; - if(_sD_){ - if(preserve_focus){ - var _sE_ = contains_focus(node); - if(_sE_) - var - shift_siblings = - function(param){ - for(;;){ - var sibling = node.nextSibling; - if(sibling === acc) return 1; - if(is_null(sibling)) return 0; - call(node, jv_before, [0, sibling]); - } - }, - _sF_ = shift_siblings(0); - else - var _sF_ = _sE_; - } - else - var _sF_ = preserve_focus; - var _sG_ = 1 - _sF_; - } - else - var _sG_ = _sD_; - if(_sG_) - if(is_null(acc)) - call(self, jv_append, [0, node]); - else - call(acc, jv_before, [0, node]); - } - return node; - }; - update(null$0, tree); - } - function remove_child(child, param){ - if(0 !== child[0]) return 0; - var - node = child[1], - _sB_ = is_some$0(node[cst_lwd_to_remove]), - _sC_ = - _sB_ - ? (delete - node[cst_lwd_to_remove], - call(node, jv_remove, [0]), - 0) - : _sB_; - return _sC_; - } - fold_dropped(3850876, remove_child, dropped, 0); - return self; - }); - } - var pure_unit = pure(0), dummy_kv_at = [0, empty$1, empty$1]; - function attach_attribs(el, attribs){ - function set_kv(param){ - var v = param[2], k = param[1]; - return equal(k, class$0) ? set_class(v, 1, el) : set_at(k, [0, v], el); - } - function unset_kv(param){ - var v = param[2], k = param[1]; - return equal(k, class$0) ? set_class(v, 0, el) : set_at(k, 0, el); - } - function set_lwd_at(param){ - var prev = [0, dummy_kv_at]; - return function(at){ - if(prev[1] !== dummy_kv_at) unset_kv(prev[1]); - var pair = to_pair(at); - set_kv(pair); - prev[1] = pair; - return 0;}; - } - return map_reduce - (function(param){ - var _sz_ = param[1]; - if(82 === _sz_){ - var at = param[2]; - return func(at, set_lwd_at(0)); - } - if(83 > _sz_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ex_], 1); - var ats = param[2]; - function set_at(at){ - var kv = to_pair(at); - set_kv(kv); - return kv; - } - var - reducer = - [0, - make$4(set_at, function(param, _sA_){return dummy_kv_at;})]; - function update(ats){ - var - match = update_and_get_dropped(reducer[1], ats), - reducer$0 = match[2], - dropped = match[1]; - reducer[1] = reducer$0; - fold_dropped - (3850876, - function(kv, param){return unset_kv(kv);}, - dropped, - 0); - reduce(reducer$0); - return 0; - } - return func(ats, update); - }, - [0, pure_unit, function(param, _sy_){return pure_unit;}], - attribs); - } - function listen$0(el, param){ - var func = param[3], type = param[2], opts = param[1]; - return listen(opts, type, func, el); - } - function attach_events(el, events){ - return map_reduce - (function(param){ - var _sw_ = param[1]; - if(82 === _sw_){ - var at = param[2], cached = [0, 0]; - return func - (at, - function(h){ - var match = cached[1]; - if(match){var l = match[1]; unlisten(l);} - cached[1] = [0, listen$0(el, h)]; - return 0; - }); - } - if(83 > _sw_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ey_], 1); - var - ats = param[2], - reducer = - [0, - make$4 - (function(_sx_){return listen$0(el, _sx_);}, - function(x, y){return x;})]; - function update(ats){ - var - match = update_and_get_dropped(reducer[1], ats), - reducer$0 = match[2], - dropped = match[1]; - reducer[1] = reducer$0; - fold_dropped - (3850876, function(l, param){return unlisten(l);}, dropped, 0); - reduce(reducer$0); - return 0; - } - return func(ats, update); - }, - [0, pure_unit, function(param, _sv_){return pure_unit;}], - events); - } - function v$4(d, opt, _st_, _ss_, tag, children){ - if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_st_) var sth$0 = _st_[1], ev = sth$0; else var ev = 0; - if(_ss_) - var sth$1 = _ss_[1], on_create = sth$1; - else - var on_create = function(param){return;}; - var - match = prepare_col(at), - impure_at = match[2], - at$0 = match[1], - match$0 = prepare_col(ev), - impure_ev = match$0[2], - ev$0 = match$0[1], - match$1 = consume_children(children), - impure_children = match$1[2], - children$0 = match$1[1], - el = v$2(d, [0, at$0], tag, children$0); - caml_call1(on_create, el); - if(impure_at) - if(impure_children) - var - children$1 = impure_children[1], - _su_ = update_children(el, children$1), - result = - map2 - (attach_attribs(el, impure_at), - _su_, - function(param, el){return el;}); - else - var - result = - func(attach_attribs(el, impure_at), function(param){return el;}); - else if(impure_children) - var - children$2 = impure_children[1], - result = update_children(el, children$2); - else - var result = pure(el); - iter(function(h){listen$0(el, h); return 0;}, ev$0); - var - result$0 = - impure_ev - ? map2 - (attach_events(el, impure_ev), - result, - function(param, el){return el;}) - : result; - return result$0; - } - function cons$1(name, d, at, ev, on_create, cs){return v$4(d, at, ev, on_create, name, cs); - } - function void_cons(name, d, at, ev, on_create, param){return v$4(d, at, ev, on_create, name, 0); - } - function button$0(_sn_, _so_, _sp_, _sq_, _sr_){ - return cons$1(button, _sn_, _so_, _sp_, _sq_, _sr_); - } - function div$1(_si_, _sj_, _sk_, _sl_, _sm_){ - return cons$1(div, _si_, _sj_, _sk_, _sl_, _sm_); - } - function form$0(_sd_, _se_, _sf_, _sg_, _sh_){ - return cons$1(form, _sd_, _se_, _sf_, _sg_, _sh_); - } - function img$0(_r__, _r$_, _sa_, _sb_, _sc_){ - return void_cons(img, _r__, _r$_, _sa_, _sb_, _sc_); - } - function input$0(_r5_, _r6_, _r7_, _r8_, _r9_){ - return void_cons(input, _r5_, _r6_, _r7_, _r8_, _r9_); - } - function label$0(_r0_, _r1_, _r2_, _r3_, _r4_){ - return cons$1(label, _r0_, _r1_, _r2_, _r3_, _r4_); - } - function option$0(_rV_, _rW_, _rX_, _rY_, _rZ_){ - return cons$1(option, _rV_, _rW_, _rX_, _rY_, _rZ_); - } - function select$0(_rQ_, _rR_, _rS_, _rT_, _rU_){ - return cons$1(select, _rQ_, _rR_, _rS_, _rT_, _rU_); - } - function span$1(_rL_, _rM_, _rN_, _rO_, _rP_){ - return cons$1(span, _rL_, _rM_, _rN_, _rO_, _rP_); - } - function symbol$3(_rK_, _rJ_){return _rK_ === _rJ_ ? 1 : 0;} - function symbol$4(_rI_, _rH_){return _rI_ !== _rH_ ? 1 : 0;} - function symbol$5(_rG_, _rF_){return _rF_ < _rG_ ? 1 : 0;} - function symbol$6(_rE_, _rD_){return _rE_ <= _rD_ ? 1 : 0;} - function symbol$7(_rC_, _rB_){return _rB_ <= _rC_ ? 1 : 0;} - function symbol$8(_rA_, _rz_){return _rz_ < _rA_ ? 1 : 0;} - function shuffle(rand_int, a, i, j){ - var _rw_ = j - 1 | 0, _rx_ = i + 1 | 0; - if(_rw_ >= _rx_){ - var k = _rw_; - for(;;){ - var - l = caml_call1(rand_int, k + 1 | 0), - tmp = caml_check_bound(a, l)[1 + l]; - a[1 + l] = caml_check_bound(a, k)[1 + k]; - a[1 + k] = tmp; - var _ry_ = k - 1 | 0; - if(_rx_ === k) break; - k = _ry_; - } - } - return; - } - function shuffle$0(a){return shuffle(int$1, a, 0, a.length - 1);} - function to_string$2(opt, item_to_string, a){ - if(opt) var sth = opt[1], sep = sth; else var sep = _ez_; - return function(_ru_){return concat(sep, _ru_);} - (function(_rv_){return map$1(item_to_string, _rv_);}(to_list(a))); - } - function poly(_rt_, _rs_){return caml_equal(_rt_, _rs_);} - function is_nan(x){return 4 === caml_classify_float(x) ? 1 : 0;} - function of_string_opt(a){ - try{var _rq_ = [0, caml_float_of_string(a)]; return _rq_;} - catch(_rr_){ - var _rp_ = caml_wrap_exception(_rr_); - if(_rp_[1] === Failure) return 0; - throw caml_maybe_attach_backtrace(_rp_, 0); - } - } - function int_of_color(param){ - return 82908052 <= param - ? 749039939 - <= param - ? 756711075 <= param ? 2 : 6 - : 737308346 <= param ? 4 : 3 - : -588596599 - <= param - ? 4100401 <= param ? 1 : 7 - : -605101559 <= param ? 5 : 0; - } - function code_of_style(param){ - if(typeof param === "number") return 737455525 <= param ? 1 : 0; - if(15681 <= param[1]){var c = param[2]; return 30 + int_of_color(c) | 0;} - var c$0 = param[2]; - return 40 + int_of_color(c$0) | 0; - } - function string_of_style(a){ - var _ro_ = code_of_style(a); - return caml_call1(sprintf(_eA_), _ro_); - } - string_of_style(-101336657); - var No_such_style = [248, _eB_, caml_fresh_oo_id(0)]; - function style_of_tag(s){ - var match = trim$0(s), switch$0 = caml_string_compare(match, "blue"); - if(0 <= switch$0){ - if(0 >= switch$0) return _eK_; - if(match === "bold") return _eJ_; - if(match === "cyan") return _eI_; - if(match === "green") return _eH_; - if(match === "magenta") return _eG_; - if(match === "red") return _eF_; - if(match === "reset") return _eE_; - if(match === "white") return _eD_; - if(match === "yellow") return _eC_; - } - else{ - if(match === "Black") return _eT_; - if(match === "Blue") return _eS_; - if(match === "Cyan") return _eR_; - if(match === "Green") return _eQ_; - if(match === "Magenta") return _eP_; - if(match === "Red") return _eO_; - if(match === "White") return _eN_; - if(match === "Yellow") return _eM_; - if(match === "black") return _eL_; - } - throw caml_maybe_attach_backtrace(No_such_style, 1); - } - function mark_open_style(st, style){push(style, st); return _eV_;} - function mark_close_style(st){ - try{pop(st); top(st);} - catch(_rn_){ - var _rm_ = caml_wrap_exception(_rn_); - if(_rm_ !== Empty) throw caml_maybe_attach_backtrace(_rm_, 0); - } - return _eW_; - } - var Style = [248, _eX_, caml_fresh_oo_id(0)], _eU_ = 0; - function mark_open_stag(st, or_else, tag){ - if(tag[1] === Style){ - var style = tag[2]; - return mark_open_style(st, style); - } - if(tag[1] !== String_tag) return caml_call1(or_else, tag); - var s = tag[2]; - try{ - var style$0 = style_of_tag(s), _rk_ = mark_open_style(st, style$0); - return _rk_; - } - catch(_rl_){ - var _rj_ = caml_wrap_exception(_rl_); - if(_rj_ === No_such_style) return caml_call1(or_else, tag); - throw caml_maybe_attach_backtrace(_rj_, 0); - } - } - function mark_close_stag(st, or_else, tag){ - if(tag[1] === Style) return mark_close_style(st); - if(tag[1] !== String_tag) return caml_call1(or_else, tag); - var s = tag[2]; - try{style_of_tag(s);} - catch(_ri_){ - var _rh_ = caml_wrap_exception(_ri_); - if(_rh_ === No_such_style) return caml_call1(or_else, tag); - throw caml_maybe_attach_backtrace(_rh_, 0); - } - return mark_close_style(st); - } - function set_color_tag_handling(ppf){ - var st = create(0); - pp_set_mark_tags(ppf, 1); - var - funs = pp_get_formatter_stag_function(ppf, 0), - _rd_ = funs[2], - _re_ = funs[1], - funs$0 = - [0, - function(_rg_){return mark_open_stag(st, _re_, _rg_);}, - function(_rf_){return mark_close_stag(st, _rd_, _rf_);}, - funs[3], - funs[4]]; - return pp_set_formatter_stag_function(ppf, funs$0); - } - function sprintf$0(c, format){ - var - buf = create$1(64), - fmt = formatter_of_buffer(buf), - _rc_ = c ? _eU_ : c; - if(_rc_) set_color_tag_handling(fmt); - return kfprintf$0 - (function(fmt$0){pp_print_flush(fmt, 0); return contents(buf);}, - fmt, - format); - } - function sprintf$1(fmt){return sprintf$0(1, fmt);} - function compare$1(a, b){return compare(a, b);} - function of_string$0(s){ - try{var _ra_ = [0, caml_int_of_string(s)]; return _ra_;} - catch(_rb_){ - var _q$_ = caml_wrap_exception(_rb_); - if(_q$_[1] === Failure) return 0; - throw caml_maybe_attach_backtrace(_q$_, 0); - } - } - function of_float(_q__){return _q__ | 0;} - function get$6(tbl, x){ - try{var _q8_ = [0, find(tbl, x)]; return _q8_;} - catch(_q9_){ - var _q7_ = caml_wrap_exception(_q9_); - if(_q7_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_q7_, 0); - } - } - function get_or_add(tbl, f, k){ - try{var _q5_ = find(tbl, k); return _q5_;} - catch(_q6_){ - var _q4_ = caml_wrap_exception(_q6_); - if(_q4_ !== Not_found) throw caml_maybe_attach_backtrace(_q4_, 0); - var v = caml_call1(f, k); - add$0(tbl, k, v); - return v; - } - } - function symbol$9(f, l){ - if(! l) return 0; - var tl = l[2], x = l[1], x$0 = caml_call1(f, x), block = [0, x$0, 24029]; - map_dps(block, 1, f, tl); - return block; - } - function map_dps(dst, offset, f, l){ - var dst$0 = dst, offset$0 = offset, l$0 = l; - for(;;){ - if(! l$0){dst$0[1 + offset$0] = 0; return;} - var - tl = l$0[2], - x = l$0[1], - x$0 = caml_call1(f, x), - dst$1 = [0, x$0, 24029]; - dst$0[1 + offset$0] = dst$1; - dst$0 = dst$1; - offset$0 = 1; - l$0 = tl; - } - } - function init$2(n, f){ - function init(i, n, f){ - if(symbol$3(i, n)) return 0; - var x = caml_call1(f, i), block = [0, x, 24029]; - init_dps(block, 1, i + 1 | 0, n, f); - return block; - } - function init_dps(dst, offset, i, n, f){ - var dst$0 = dst, offset$0 = offset, i$0 = i; - for(;;){ - if(symbol$3(i$0, n)){dst$0[1 + offset$0] = 0; return;} - var x = caml_call1(f, i$0), dst$1 = [0, x, 24029]; - dst$0[1 + offset$0] = dst$1; - var i$1 = i$0 + 1 | 0; - dst$0 = dst$1; - offset$0 = 1; - i$0 = i$1; - } - } - return init(0, n, f); - } - function symbol$10(f, param){ - if(! param) return 0; - var x = param[1]; - return [0, caml_call1(f, x)]; - } - function map_or(default$0, f, param){ - if(! param) return default$0; - var x = param[1]; - return caml_call1(f, x); - } - function is_some$1(param){return param ? 1 : 0;} - function flat_map(f, o){ - if(! o) return; - var x = o[1]; - return caml_call1(f, x); - } - function symbol_bind$0(o, f){return flat_map(f, o);} - function iter$1(f, o){ - if(! o) return; - var x = o[1]; - return caml_call1(f, x); - } - function value$3(x, default$0){ - if(! x) return default$0; - var y = x[1]; - return y; - } - function to_list$2(o){if(! o) return 0; var x = o[1]; return [0, x, 0];} - function symbol$11(x, f){return symbol$10(f, x);} - make_self_init(0); - function symbol$12(f, e){ - if(0 !== e[0]) return; - var x = e[1]; - caml_call1(f, x); - return; - } - var Get_error = [248, _eY_, caml_fresh_oo_id(0)]; - function get_exn(param){ - if(0 !== param[0]) throw caml_maybe_attach_backtrace(Get_error, 1); - var x = param[1]; - return x; - } - function get_or(e, default$0){ - if(0 !== e[0]) return default$0; - var x = e[1]; - return x; - } - function flat_map$0(f, e){ - if(0 === e[0]){var x = e[1]; return caml_call1(f, x);} - var s = e[1]; - return [1, s]; - } - function symbol$13(e, f){return symbol$12(f, e);} - function symbol_bind$1(e, f){return flat_map$0(f, e);} - function Make$1(O){ - var - S = _N_(O), - empty = S[1], - union = S[7], - elements = S[23], - of_list = S[37]; - return [0, - , - , - , - empty, - , - , - , - , - , - union, - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - of_list, - , - , - , - , - , - , - , - , - , - , - elements]; - } - function _eZ_(_q2_){ - var _q3_ = Make$1(_q2_); - return [0, - _q3_[4], - , - , - , - , - , - _q3_[10], - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - _q3_[40], - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - _q3_[51]]; - } - function suffix(suf, s){ - var len = caml_ml_string_length(suf); - if(symbol$5(len, caml_ml_string_length(s))) return 0; - var off = caml_ml_string_length(s) - len | 0; - function check(i){ - var i$0 = i; - for(;;){ - if(symbol$3(i$0, len)) return 1; - if - (caml_string_unsafe_get(s, off + i$0 | 0) - !== caml_string_unsafe_get(suf, i$0)) - return 0; - var i$1 = i$0 + 1 | 0; - i$0 = i$1; - } - } - return check(0); - } - function chop_suffix(suf, s){ - return suffix(suf, s) - ? [0, - sub$0 - (s, - 0, - caml_ml_string_length(s) - caml_ml_string_length(suf) | 0)] - : 0; - } - function Make$2(K, V){return;} - function _e0_(_q1_, _q0_){Make$2(_q1_, _q0_); return;} - var Empty$1 = [248, _e1_, caml_fresh_oo_id(0)]; - function single(x){return [0, [0, x]];} - function deep(n, hd, middle, tl){return [1, n, hd, middle, tl];} - function is_empty$1(param){ - if(0 === param[0] && typeof param[1] === "number") return 1; - return 0; - } - function cons$2(x, q){ - if(0 === q[0]){ - var match = q[1]; - if(typeof match === "number") return single(x); - switch(match[0]){ - case 0: - var y = match[1]; return [0, [1, x, y]]; - case 1: - var z = match[2], y$0 = match[1]; return [0, [2, x, y$0, z]]; - default: - var z$0 = match[3], z$1 = match[2], y$1 = match[1]; - return deep(4, [1, x, y$1], empty$3, [1, z$1, z$0]); - } - } - var match$0 = q[2], n = q[1]; - if(typeof match$0 !== "number") - switch(match$0[0]){ - case 0: break; - case 1: - var tl$0 = q[4], middle$0 = q[3], z$2 = match$0[2], y$3 = match$0[1]; - return deep(n + 1 | 0, [2, x, y$3, z$2], middle$0, tl$0); - default: - var - _qX_ = q[3], - z$3 = match$0[3], - z$4 = match$0[2], - y$4 = match$0[1], - _qY_ = caml_obj_tag(_qX_), - q$0 = - 250 === _qY_ - ? _qX_[1] - : 246 === _qY_ ? force_lazy_block(_qX_) : _qX_, - tail = q[4]; - return deep - (n + 1 | 0, - [1, x, y$4], - [246, function(_qZ_){return cons$2([0, z$4, z$3], q$0);}], - tail); - } - var tl = q[4], middle = q[3], y$2 = match$0[1]; - return deep(n + 1 | 0, [1, x, y$2], middle, tl); - } - function take_back_exn(q){ - if(0 === q[0]){ - var match = q[1]; - if(typeof match === "number") - throw caml_maybe_attach_backtrace(Empty$1, 1); - switch(match[0]){ - case 0: - var x = match[1]; return [0, empty$2, x]; - case 1: - var y = match[2], x$0 = match[1]; return [0, single(x$0), y]; - default: - var z = match[3], y$0 = match[2], x$1 = match[1]; - return [0, [0, [1, x$1, y$0]], z]; - } - } - var - middle = q[3], - hd = q[2], - n = q[1], - _qV_ = caml_obj_tag(middle), - q$0 = - 250 === _qV_ - ? middle[1] - : 246 === _qV_ ? force_lazy_block(middle) : middle, - match$0 = q[4]; - if(typeof match$0 !== "number" && 0 !== match$0[0]){ - var match$2 = q[4]; - if(typeof match$2 !== "number" && 2 === match$2[0]){ - var z$1 = match$2[3], y$3 = match$2[2], x$4 = match$2[1]; - return [0, deep(n - 1 | 0, hd, middle, [1, x$4, y$3]), z$1]; - } - var y$2 = match$2[2], x$3 = match$2[1]; - return [0, deep(n - 1 | 0, hd, middle, [0, x$3]), y$2]; - } - var x$2 = match$0[1]; - if(is_empty$1(q$0)) return [0, [0, hd], x$2]; - var - _qW_ = take_back_exn(q$0), - match$1 = _qW_[2], - z$0 = match$1[2], - y$1 = match$1[1], - q$1 = _qW_[1]; - return [0, deep(n - 1 | 0, hd, from_val(q$1), [1, y$1, z$0]), x$2]; - } - function take_back(q){ - try{var _qT_ = [0, take_back_exn(q)]; return _qT_;} - catch(_qU_){ - var _qS_ = caml_wrap_exception(_qU_); - if(_qS_ === Empty$1) return 0; - throw caml_maybe_attach_backtrace(_qS_, 0); - } - } - function size_digit(param){ - if(typeof param === "number") return 0; - switch(param[0]){case 0: return 1;case 1: return 2;default: return 3; - } - } - function size$0(param){ - if(0 === param[0]){var d = param[1]; return size_digit(d);} - var n = param[1]; - return n; - } - function height(t){return t["height"];} - function _e2_(_qR_){return _qR_;} - function content_rect(t){return _e2_(t["contentRect"]);} - function string_of_box(param){ - switch(param){ - case 0: - return _e3_; - case 1: - return _e4_; - default: return _e5_; - } - } - function observe$0(t, box, target){ - if(box) - var - b = box[1], - box$0 = {box: _d__(string_of_box(b))}, - args = [0, target, box$0]; - else - var args = [0, target]; - caml_js_meth_call(t, "observe", args); - return 0; - } - function create$7(callback){ - function callback$0(entries, observer){ - var entries$0 = to_list$1(function(_qQ_){return _qQ_;}, entries); - return caml_call2(callback, entries$0, observer); - } - return new global["ResizeObserver"](callback$0); - } - function of_navigator(n){return n["mediaSession"];} - function img_to_jv(img){ - var _qO_ = _d__(img[3]), _qP_ = _d__(img[2]); - return {src: _d__(img[1]), sizes: _qP_, type: _qO_}; - } - function to_jv(t){ - var - artwork = of_list$1(img_to_jv, t[4]), - _qM_ = _d__(t[3]), - _qN_ = _d__(t[2]); - return {title: _d__(t[1]), artist: _qN_, album: _qM_, artwork: artwork}; - } - function set_metadata(t, v){ - log([0, _e6_, [0, to_jv(v), 0]]); - var _qL_ = to_jv(v), metadata = new global["MediaMetadata"](_qL_); - t["metadata"] = metadata; - return; - } - var next_track = "nexttrack", previous_track = "previoustrack"; - function set_action_handler(t, action, f){ - var callback = caml_js_wrap_callback_strict(1, f); - t.setActionHandler(action, callback); - return; - } - function set_position_state(duration, playback_rate, position, t){ - function maybe_float(name, v){ - return map(function(v){return [0, name, v];}, v); - } - var - duration$0 = maybe_float(_e7_, duration), - playback_rate$0 = maybe_float(_e8_, playback_rate), - position$0 = maybe_float(_e9_, position), - state_dict = - filter_map(function(_qK_){return _qK_;}) - ([0, duration$0, [0, playback_rate$0, [0, position$0, 0]]]), - args = state_dict ? [0, caml_js_object(of_list(state_dict))] : [0]; - caml_js_meth_call(t, "setPositionState", args); - return 0; - } - function _e__(_qJ_, _qI_, _qH_){return;} - var submit = cst_submit, pattern = "pattern"; - function persist(t){ - function _qE_(_qG_){return _qG_ | 0;} - return function(_qF_){return of_promise$0(_qE_, _qF_);}(t.persist()); - } - function manager(n){return n["storage"];} - function tee(f, x){caml_call1(f, x); return x;} - var include = _eZ_([0, compare$0]); - function of_string$1(s){ - var match = chop_suffix(_e$_, s); - if(match){ - var i = match[1], match$0 = of_string$0(i); - if(match$0){var i$0 = match$0[1]; return [0, [0, i$0]];} - var _qy_ = function(i){return [0, i];}; - return function(_qD_){return symbol$10(_qy_, _qD_);}(of_string_opt(i)); - } - var match$1 = chop_suffix(_fa_, s); - if(match$1){ - var f = match$1[1], _qz_ = function(f){return [1, f];}; - return function(_qC_){return symbol$10(_qz_, _qC_);}(of_string_opt(f)); - } - var match$2 = chop_suffix(_fb_, s); - if(! match$2) return 0; - var f$0 = match$2[1]; - function _qA_(f){return [1, f];} - return function(_qB_){return symbol$10(_qA_, _qB_);}(of_string_opt(f$0)); - } - function to_string$3(param){ - switch(param[0]){ - case 0: - var i = param[1]; return caml_call1(sprintf(_fc_), i); - case 1: - var f = param[1]; return caml_call1(sprintf(_fd_), f); - default: var f$0 = param[1]; return caml_call1(sprintf(_fe_), f$0); - } - } - function to_px(opt){ - if(opt) - var sth = opt[1], parent = sth; - else - var parent = root(global_document); - function get_font_size_in_px(parent){ - var - font_size = - caml_string_of_jsstring(computed_style(0, "font-size", parent)), - match = of_string$1(font_size); - if(! match) return 16.; - var match$0 = match[1]; - if(0 !== match$0[0]) return failwith(_ff_); - var i = match$0[1]; - return i; - } - return function(param){ - switch(param[0]){ - case 0: - var i = param[1]; return i; - case 1: - var - f = param[1], - font_size = get_font_size_in_px(root(global_document)); - return f * font_size; - default: - var f$0 = param[1], font_size$0 = get_font_size_in_px(parent); - return f$0 * font_size$0; - }}; - } - function map3(f, a, b, c){ - function _qt_(_qw_, _qx_){return map2(c, _qw_, _qx_);} - function _qu_(c, param){ - var b = param[2], a = param[1]; - return caml_call3(f, a, b, c); - } - return function(_qv_){return _qt_(_qv_, _qu_);} - (map2(a, b, function(a, b){return [0, a, b];})); - } - function triple(a, b, c){ - return map3(function(a, b, c){return [0, a, b, c];}, a, b, c); - } - var - Not_set = [248, _fg_, caml_fresh_oo_id(0)], - Already_set = [248, _fh_, caml_fresh_oo_id(0)]; - function make$5(param){return [0, 0];} - function set_exn(t, v){ - if(t[1]) throw caml_maybe_attach_backtrace(Already_set, 1); - t[1] = [0, v]; - return 0; - } - function get_exn$0(t){ - var match = t[1]; - if(! match) throw caml_maybe_attach_backtrace(Not_set, 1); - var v = match[1]; - return v; - } - function make$6(C){ - function set(lang){return symbol$1(C[1], lang);} - return [0, set]; - } - function to_jstr$1(t){return encode(t);} - function of_jstr$0(jstr){ - var match = decode(jstr); - if(0 === match[0]){var v = match[1]; return [0, v];} - var err = match[1]; - error$0([0, err, 0]); - return _fi_; - } - var keys = create$2(0, 64); - function check_key(key){ - return mem(keys, key) - ? failwith(caml_call1(sprintf(_fj_), key)) - : add$0(keys, key, 0); - } - var local_storage = local(window); - function store(key, value){ - return function(_qs_){return set_item(local_storage, key, _qs_);} - (to_jstr$1(value)); - } - function fetch$0(key){ - var match = get_item(local_storage, key); - function _qq_(encoded_value){return of_jstr$0(encoded_value);} - if(match) var v = match[1], _qr_ = [0, v]; else var _qr_ = _fk_; - return symbol_bind$1(_qr_, _qq_); - } - function initial_value(key, f){ - var match = fetch$0(key); - if(0 === match[0]){var v = match[1]; return v;} - var match$0 = match[1]; - if(typeof match$0 === "number") return caml_call1(f, 0); - var msg = match$0[2]; - warn([0, msg, 0]); - return caml_call1(f, 0); - } - function make_persistent_var(key, value){ - store(key, value); - var var$1 = var$0(value), root = observe(0, get$1(var$1)); - set_on_invalidate - (root, - function(param){ - var new_value = quick_sample(root); - store(key, new_value); - return 0; - }); - quick_sample(root); - return var$1; - } - function var_f(key, f){ - check_key(key); - var key$0 = caml_jsstring_of_string(key), value = initial_value(key$0, f); - return make_persistent_var(key$0, value); - } - function var$1(key, default$0){ - return var_f(key, function(param){return default$0;}); - } - function for_section(s){ - function log(l, opt, msg){ - if(opt) var sth = opt[1], fmt = sth; else var fmt = _fm_; - var fmt$0 = caml_call2(sprintf(_fl_), s, fmt); - return caml_call1(l, [0, fmt$0, msg]); - } - function arg(_qo_, _qp_){return log(debug, _qo_, _qp_);} - return [0, , , , function(eta){return arg(0, eta);}]; - } - var - empty$4 = include[1], - union = include[7], - of_list$2 = include[29], - to_list$3 = include[49]; - function to_at(t){ - return symbol$9 - (function(c){return [0, 80, class$1(caml_jsstring_of_string(c))];}, - to_list$3(t)); - } - var empty$5 = [0, empty$4, 0]; - function to_at$0(id, t){ - var - _ql_ = to_at(t[1]), - _qm_ = t[2], - at = function(_qn_){return rev_append(_qm_, _qn_);}(_ql_); - if(! id) return at; - var id$0 = id[1]; - return [0, [0, 80, id$1(caml_jsstring_of_string(id$0))], at]; - } - function classes(l){var _qk_ = empty$5[2]; return [0, of_list$2(l), _qk_];} - function union$0(param, _qi_){ - var - a = _qi_[2], - c = _qi_[1], - attrs = param[2], - classes = param[1], - _qj_ = rev_append(attrs, a); - return [0, union(classes, c), _qj_]; - } - function add$1(at_name, v, at){ - var _qf_ = v[1]; - if(82 === _qf_) - var - v$0 = v[2], - a = - [0, - 82, - func - (v$0, - function(v){ - return function(_qg_){return v$1(at_name, _qg_);} - (caml_jsstring_of_string(v)); - })]; - else if(83 <= _qf_) - var a = failwith(_fn_); - else - var - v$2 = v[2], - a = - [0, - 80, - function(_qh_){return v$1(at_name, _qh_);} - (caml_jsstring_of_string(v$2))]; - return [0, a, at]; - } - function add_bool(at$0, v, at){return v ? [0, [0, 80, at$0], at] : at;} - function add_opt(at_name, v, at){ - if(! v) return at; - var v$0 = v[1]; - return [0, - [0, - 80, - function(_qe_){return v$1(at_name, _qe_);} - (caml_jsstring_of_string(v$0))], - at]; - } - function map_col(f, param){ - var _qd_ = param[1]; - if(82 === _qd_){var v = param[2]; return [0, 82, func(v, f)];} - if(83 <= _qd_){var v$0 = param[2]; return [0, 83, map$3(f, v$0)];} - var v$1 = param[2]; - return [0, 80, caml_call1(f, v$1)]; - } - function of_at(param){ - if(0 === param[0]){ - var name = param[1]; - return class$1(caml_jsstring_of_string(name)); - } - var at = param[1]; - return at; - } - function cons$3(at, t){return [0, map_col(of_at, at), t];} - function class$2(n){ - return cons$3(map_col(function(n){return [0, n];}, n), 0); - } - function v$5(at){return cons$3(at, 0);} - function symbol$14(at, t){return cons$3(at, t);} - function v$6(d, opt, ev, value){ - if(opt) var sth = opt[1], at = sth; else var at = 0; - var - at$0 = - function(_qc_){return add$1(value$1, value, _qc_);} - (add$1(type, _fo_, at)); - return input$0(d, [0, at$0], ev, 0, 0); - } - function handler$0(opts, type, func){return [0, opts, type, func];} - function apply_state(state, f){return caml_call1(f, state);} - function with_state(opt, S){ - if(opt) var sth = opt[1], base = sth; else var base = empty$5; - return function(opt, d, at){ - if(opt) var sth = opt[1], state = sth; else var state = S[1]; - return function(ev, content){ - var v_state = var$0(state); - function get_state(param){return get$1(v_state);} - function set_state(t){return symbol$1(v_state, t);} - var - elt = - symbol_bind - (get_state(0), - function(state){ - function with_state(param){ - var func = param[3], type = param[2], opts = param[1]; - function func$0(ev){ - var match = caml_call2(func, state, ev); - if(typeof match === "number") - return match ? set_state(caml_call1(S[2], state)) : 0; - var s = match[1]; - return set_state(s); - } - return handler(opts, type, func$0); - } - var - at$0 = - map_or - (base, - function(at){ - return function(_qb_){return union$0(base, _qb_);} - (apply_state(state, at)); - }, - at), - at$1 = to_at$0(0, at$0); - function _p__(param){ - var _qa_ = param[1]; - if(82 === _qa_){ - var h = param[2]; - return [0, 82, func(h, with_state)]; - } - if(83 <= _qa_){ - var h$0 = param[2]; - return [0, 83, map$3(with_state, h$0)]; - } - var h$1 = param[2]; - return [0, 80, with_state(h$1)]; - } - var - ev$0 = - symbol$10(function(_p$_){return symbol$9(_p__, _p$_);}, ev); - return button$0(d, [0, at$1], ev$0, 0, caml_call1(content, state)); - }); - return [0, elt, get_state, set_state];};}; - } - function next$0(param){return param ? 0 : 1;} - var Two_state = [0, 0, next$0]; - function two_state(base){return with_state(base, Two_state);} - function js_scroll(elt, target){ - if(0 === target[0]){var x = target[1]; elt.scroll(0, x); return 0;} - var el = target[1]; - return scroll_into_view(0, el); - } - function make$7(opt, _p7_, on_create, scroll_target, elt){ - if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_p7_) var sth$0 = _p7_[1], ev = sth$0; else var ev = 0; - var - active = var$0(1), - active_class = - func - (get$1(active), - function(param){return param ? [1, class$1("locked")] : [1, void$0];}), - at$0 = symbol$14(_fp_, symbol$14([0, 82, active_class], at)), - at$1 = class$2(_fq_); - function on_click(param){return symbol$1(active, 1);} - var - handler$0 = handler(0, click, on_click), - ev$0 = [0, [0, 80, handler$0], 0], - controls = - div$1 - (0, - [0, at$1], - [0, ev$0], - 0, - [0, [0, 82, button$0(0, 0, 0, 0, [0, [0, 80, txt(0, _fr_)], 0])], 0]), - on_wheel = - handler - (0, - wheel, - function(ev){ - var _p9_ = peek(active); - return _p9_ ? symbol$1(active, 0) : _p9_; - }), - state = triple(elt, get$1(active), scroll_target), - elt$0 = - func - (state, - function(param){ - var pos = param[3], active = param[2], elt = param[1]; - if(active) - iter$1(function(_p8_){return js_scroll(elt, _p8_);}, pos); - return elt; - }); - return div$1 - (0, - [0, at$0], - [0, [0, [0, 80, on_wheel], ev]], - on_create, - [0, [0, 82, elt$0], [0, [0, 82, controls], 0]]); - } - function make_handler(value, value_change_event, default_value){ - var - var$1 = var$0(default_value), - on_change = - handler - (0, - value_change_event, - function(ev){ - var t = target(ev), v = t[cst_value]; - return symbol$1(var$1, [0, caml_call1(value, v)]); - }); - return [0, on_change, var$1]; - } - function make_input - (value, - validate, - d, - opt, - ev, - _p4_, - value_change_event, - pattern$0, - type, - default_value){ - if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_p4_) var sth$0 = _p4_[1], required = sth$0; else var required = 0; - var - type$1 = type$0(caml_jsstring_of_string(type)), - at$0 = [0, [0, 80, type$1], at], - at$1 = - function(_p5_){return add_opt(pattern, pattern$0, _p5_);} - (function(_p6_){return add_bool(required$0, required, _p6_);}(at$0)), - validate$0 = value$3(validate, function(v){return [0, v];}), - match = make_handler(value, value_change_event, default_value), - value$0 = match[2], - on_change = match[1], - ev$0 = [0, [0, 80, on_change], to_list$2(ev)], - elt = input$0(d, [0, at$1], [0, ev$0], 0, 0); - return [0, elt, value$0, validate$0]; - } - function text_input - (validate, d, opt, ev, required, pattern, placeholder$0, default_value){ - if(opt) var sth = opt[1], at = sth; else var at = 0; - var - at$0 = - function(_p2_){return add_opt(value$1, default_value, _p2_);} - (function(_p3_){return add_opt(placeholder, placeholder$0, _p3_);}(at)); - return make_input - (value$0, - validate, - d, - [0, at$0], - ev, - required, - keyup, - pattern, - _fs_, - default_value); - } - function password_input - (validate, d, opt, ev, required, pattern, placeholder$0, value){ - if(opt) var sth = opt[1], at = sth; else var at = 0; - var - at$0 = - function(_p1_){return add_opt(placeholder, placeholder$0, _p1_);}(at); - return make_input - (value$0, - validate, - d, - [0, at$0], - ev, - required, - keyup, - pattern, - _ft_, - 0); - } - function submit$0(d, opt, ev, text){ - if(opt) var sth = opt[1], at = sth; else var at = 0; - var at$0 = add$1(value$1, text, at); - return make_input - (function(_p0_){return 0;}, - 0, - d, - [0, at$0], - ev, - 0, - change, - 0, - _fu_, - 0); - } - function field$0(field, setter){ - return func(field, function(field){return [0, field, setter];}); - } - function create$8(d, at, ev, Form){ - return function(on_submit){ - var - _pT_ = - [0, - [0, empty$0, function(_pZ_){return _pZ_;}], - function(param, _pY_){ - var f = _pY_[2], elts = _pY_[1], f$0 = param[2], elts$0 = param[1]; - return [0, - concat$0(elts$0, elts), - function(t){return caml_call1(f, caml_call1(f$0, t));}]; - }]; - function _pU_(param){ - var mapper = param[2], field = param[1]; - function value(param){ - var match = peek(field[2]); - if(! match) return 0; - var v = match[1]; - return caml_call1(field[3], v); - } - return [0, - element(field[1]), - function(t){ - var _pX_ = value(0); - return caml_call1(caml_call1(mapper, t), _pX_); - }]; - } - var - fields = - function(_pW_){return fold_monoid(_pU_, _pT_, _pW_);}(lift(Form[2])), - handler$0 = - func - (fields, - function(param){ - var value = param[2]; - function on_submit$0(e){ - caml_call1(on_submit, caml_call1(value, Form[1])); - return prevent_default(e); - } - return handler(0, submit, on_submit$0); - }), - on_submit$0 = [0, 82, handler$0], - elts = func(fields, function(param){var elts = param[1]; return elts;}), - ev$0 = - map_or - ([0, on_submit$0, 0], - function(_pV_){return cons(on_submit$0, _pV_);}, - ev); - return form$0(d, at, [0, ev$0], 0, [0, [0, 83, lift(elts)], 0]);}; - } - function name$0(id, base_name){ - return id - ? caml_call1(sprintf(_fv_), base_name) - : caml_call1(sprintf(_fw_), base_name); - } - function make$8(opt, _pO_, desc){ - if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_pO_) var sth$0 = _pO_[1], ev = sth$0; else var ev = 0; - var - id = name$0(1, desc[1]), - name$1 = name$0(0, desc[1]), - var$0 = var$1(id, desc[2]), - _pP_ = desc[3]; - label$0 - (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, 0, _pP_); - var - _pQ_ = [0, 80, name$1], - at$0 = - function(_pR_){return add$1(type, _fx_, _pR_);} - (function(_pS_){return add$1(name, _pQ_, _pS_);} - (add$1(id$0, [0, 80, id], at))), - match = peek(var$0); - if(match) - var - v = match[1], - at$1 = [0, [0, 80, value$2(caml_jsstring_of_string(v))], at$0]; - else - var at$1 = at$0; - var - on_change = - handler - (0, - keyup, - function(ev){ - var t = target(ev), value = t[cst_value]; - return symbol$1(var$0, [0, value$0(value)]); - }), - ev$0 = [0, [0, 80, on_change], ev], - field = input$0(0, [0, at$1], [0, ev$0], 0, 0); - return [0, field, , get$1(var$0)]; - } - function name$1(id, base_name){ - return id ? caml_call1(sprintf(_fy_), base_name) : base_name; - } - function make$9(opt, _pJ_, desc){ - if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_pJ_) var sth$0 = _pJ_[1], ev = sth$0; else var ev = 0; - return function(options){ - var - id = name$1(1, desc[1]), - name$0 = name$1(0, desc[1]), - var$0 = var$1(id, desc[2]), - _pK_ = desc[3]; - label$0 - (0, - [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], - 0, - 0, - _pK_); - var - _pL_ = [0, 80, name$0], - at$0 = - function(_pM_){return add$1(type, _fz_, _pM_);} - (function(_pN_){return add$1(name, _pL_, _pN_);} - (add$1(id$0, [0, 80, id], at))), - on_change = - handler - (0, - change, - function(ev){ - var t = target(ev), value = t[cst_value]; - return symbol$1(var$0, value$0(value)); - }), - ev$0 = [0, [0, 80, on_change], ev], - options$0 = - map$3 - (function(param){ - var - name = param[2], - value = param[1], - at = v$5([0, 80, [1, value$2(caml_jsstring_of_string(value))]]), - selected = - func - (get$1(var$0), - function(selected){ - return [1, if$0(poly(selected, value), selected$0)]; - }), - at$0 = symbol$14([0, 82, selected], at); - return option$0(0, [0, at$0], 0, 0, [0, [0, 80, txt(0, name)], 0]); - }, - options), - field = - select$0(0, [0, at$0], [0, ev$0], 0, [0, [0, 83, lift(options$0)], 0]); - return [0, field, , get$1(var$0)];}; - } - function name$2(g, n, id, base_name){ - return id - ? caml_call3(sprintf(_fA_), base_name, g, n) - : caml_call3(sprintf(_fB_), base_name, g, n); - } - function make$10(t){ - function make_check(g, n, value, label, checked){ - var id = name$2(g, n, 1, t[1]), name$0 = name$2(g, n, 0, t[1]); - function result(checked){return checked ? [0, value] : 0;} - var - var$0 = var$1(id, result(checked)), - lbl = - label$0 - (0, - [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], - 0, - 0, - label), - _pF_ = [0, 80, name$0], - at = - function(_pH_){return add$1(type, _fC_, _pH_);} - (function(_pI_){return add$1(name, _pF_, _pI_);} - (add$1(id$0, [0, 80, id], 0))), - checked$1 = - func - (get$1(var$0), function(param){return param ? checked$0 : void$0;}), - at$0 = [0, [0, 82, checked$1], at], - on_change = - handler - (0, - change, - function(ev){ - var t = target(ev), checked = t[cst_checked]; - return symbol$1(var$0, result(checked | 0)); - }), - ev = [0, [0, 80, on_change], 0], - _pG_ = get$1(var$0); - return [0, - div$1 - (0, - 0, - 0, - 0, - [0, - [0, 82, input$0(0, [0, at$0], [0, ev], 0, 0)], - [0, [0, 82, lbl], 0]]), - _pG_]; - } - function make_all(g, desc){ - var n = [0, 0]; - return map$3 - (function(param){ - var - c = param[3], - l = param[2], - v = param[1], - match = make_check(g, n[1], v, l, c), - value = match[2], - elt = match[1]; - n[1]++; - return [0, elt, value]; - }, - desc); - } - var - all = make_all(0, t[2]), - elts = map$3(function(param){var elt = param[1]; return elt;}, all); - function _pC_(_pE_){return _pE_;} - var - value = - function(_pD_){return filter_map$0(_pC_, _pD_);} - (lift - (fold_monoid - (function(param){var v = param[2]; return element(v);}, - monoid, - all))); - return [0, div$1(0, 0, 0, 0, [0, [0, 83, lift(elts)], 0]), value]; - } - function RA_queue(Key){ - var Map = _W_(Key); - function size(t){return size$0(t[1]);} - function create(param){return [0, empty$2, Map[1]];} - function add(t, k, x){ - var _pB_ = Map[4].call(null, k, x, t[2]); - return [0, cons$2(k, t[1]), _pB_]; - } - function take_opt(t){ - var match = take_back(t[1]); - if(! match) return [0, t, 0]; - var - match$0 = match[1], - k = match$0[2], - queue = match$0[1], - x = Map[28].call(null, k, t[2]); - return [0, [0, queue, Map[7].call(null, k, t[2])], [0, [0, k, x]]]; - } - function find(t, k){return Map[29].call(null, k, t[2]);} - return [0, , size, create, , add, take_opt, find]; - } - function Make$3(Key){ - var RA_queue$0 = RA_queue(Key); - function create(size){ - var q1 = RA_queue$0[3].call(null, 0), q2 = RA_queue$0[3].call(null, 0); - return [0, q1, q2, size]; - } - function evict_one(on_evict, t){return evict_q2(on_evict, t);} - function evict_q2$0(counter, on_evict, t){ - var t$0 = t; - for(;;){ - var - _py_ = RA_queue$0[6].call(null, t$0[2]), - _pz_ = _py_[2], - q2 = _py_[1]; - if(! _pz_){ - if(counter >= 50) - return caml_trampoline_return(evict_q1, [0, on_evict, t$0]); - var counter$0 = counter + 1 | 0; - return evict_q1(counter$0, on_evict, t$0); - } - var - _pA_ = _pz_[1], - match = _pA_[2], - elt = match[1], - k = _pA_[1], - visited = match[2]; - if(! visited[1]){ - caml_call1(on_evict, elt); - return [0, t$0[1], q2, t$0[3]]; - } - var - q1 = RA_queue$0[5].call(null, t$0[1], k, [0, elt, [0, 0]]), - t$1 = [0, q1, q2, t$0[3]]; - t$0 = t$1; - } - } - function evict_q2(on_evict, t){ - return caml_trampoline(evict_q2$0(0, on_evict, t)); - } - function evict_q1(counter, on_evict, t){ - var t$0 = t; - for(;;){ - var - _pv_ = RA_queue$0[6].call(null, t$0[1]), - _pw_ = _pv_[2], - q1 = _pv_[1]; - if(! _pw_){ - if(counter >= 50) - return caml_trampoline_return(evict_q2$0, [0, on_evict, t$0]); - var counter$0 = counter + 1 | 0; - return evict_q2$0(counter$0, on_evict, t$0); - } - var - _px_ = _pw_[1], - match = _px_[2], - elt = match[1], - k = _px_[1], - visited = match[2]; - if(! visited[1]){ - caml_call1(on_evict, elt); - return [0, q1, t$0[2], t$0[3]]; - } - var - q2 = RA_queue$0[5].call(null, t$0[2], k, [0, elt, [0, 0]]), - t$1 = [0, q1, q2, t$0[3]]; - t$0 = t$1; - } - } - function evict(on_evict, t){ - var t$0 = t; - for(;;){ - var - _pu_ = RA_queue$0[2].call(null, t$0[2]), - size = RA_queue$0[2].call(null, t$0[1]) + _pu_ | 0; - if(0 < size && t$0[3] < size){ - var t$1 = evict_one(on_evict, t$0); - t$0 = t$1; - continue; - } - return t$0; - } - } - function insert(t, opt, _pr_, k, x){ - if(opt) - var sth = opt[1], on_insert = sth; - else - var on_insert = function(_pt_){return;}; - if(_pr_) - var sth$0 = _pr_[1], on_evict = sth$0; - else - var on_evict = function(_ps_){return 0;}; - var match = RA_queue$0[7].call(null, t[1], k); - if(match){var visited = match[1][2]; visited[1] = 1; return [0, t, 0];} - var match$0 = RA_queue$0[7].call(null, t[2], k); - if(match$0){ - var visited$0 = match$0[1][2]; - visited$0[1] = 1; - return [0, t, 0]; - } - var q1 = RA_queue$0[5].call(null, t[1], k, [0, x, [0, 0]]); - caml_call1(on_insert, x); - return [0, evict(on_evict, [0, q1, t[2], t[3]]), 1]; - } - return [0, create, insert]; - } - function v$7(name, css_size, content){return [0, name, css_size, content];} - function to_header(t){ - var - cells = - fold_right - (function(param, acc){ - var content = param[3]; - return [0, [0, 82, div$1(0, 0, 0, 0, content)], acc]; - }, - t, - 0); - return cells; - } - function style$1(t){ - var - template = - to_string$2 - (_fD_, function(param){var css_size = param[2]; return css_size;}, t); - return caml_call2(sprintf(_fF_), _fE_, template); - } - function style$2(t){ - var style = style$1(t[1][1]); - return concat(_fG_, [0, style, 0]); - } - function header(t){ - var - row_height = to_string$3(t[2]), - _pj_ = [0, [0, 80, class$1(cst_lwdui_virtual_table_row)], 0], - _pk_ = [0, [0, 80, class$1("lwdui-lazy-table-header")], _pj_], - at = - [0, - [0, - 80, - style$0 - (caml_jsstring_of_string(caml_call1(sprintf(_fH_), row_height)))], - _pk_], - _pm_ = [0, at], - _pl_ = to_header(t[1][1]); - return function(_pn_){ - return function(_po_, _pp_, _pq_){ - return div$1(_pn_, _pm_, _po_, _pp_, _pq_);}; - } - (0) - (0, 0, _pl_); - } - to_px(0)(_fI_); - var logger = for_section(_fJ_), Cache = Make$3([0, compare$1]); - function make$11(ui_table, opt, scroll_target){ - return function(param){ - var - render = param[3], - fetch = param[2], - total_items = param[1], - content_div = make$5(0), - wrapper_div = make$5(0), - row_size = to_string$3(ui_table[2]); - function height_n(n){return caml_call2(sprintf(_fK_), row_size, n);} - var - height$0 = caml_call1(sprintf(_fL_), row_size), - table = make$3(0), - row_index = create$2(0, 2048); - function unload(i){ - symbol_bind$0 - (get$6(row_index, i), - function(row){ - return symbol$11 - (get$2(row), - function(row_data){ - return symbol$2(row, [0, row_data[1], 0, row_data[3]]); - }); - }); - return 0; - } - function new_cache(param){return Cache[1].call(null, 50);} - var cache_ref = [0, new_cache(0)]; - function add(fetch, opt, indexes){ - var cache = cache_ref[1]; - function load(indexes){ - let$1 - (caml_call1(fetch, indexes), - function(data){ - return iter2 - (function(i, data){ - symbol_bind$0 - (get$6(row_index, i), - function(row){ - return symbol$11 - (get$2(row), - function(row_data){ - if(! data) throw caml_maybe_attach_backtrace(Not_found, 1); - var - data$0 = data[1], - _pg_ = row_data[2], - _ph_ = - 1 - function(_pi_){return poly(_pg_, _pi_);}([0, data$0]); - return _ph_ - ? symbol$2(row, [0, row_data[1], [0, data$0], row_data[3]]) - : _ph_; - }); - }); - return 0; - }, - indexes, - data); - }); - return 0; - } - var - match = - fold_left - (function(param, i){ - var - acc = param[2], - cache = param[1], - match = Cache[2].call(null, cache, 0, [0, unload], i, i), - inserted = match[2], - cache$0 = match[1]; - return inserted ? [0, cache$0, [0, i, acc]] : [0, cache$0, acc]; - }, - [0, cache, 0], - indexes), - to_load = match[2], - cache$0 = match[1]; - cache_ref[1] = cache$0; - var to_load$0 = of_list(to_load), len = to_load$0.length - 1; - return len ? load(to_load$0) : 0; - } - var table_height = var$0(0); - function compute_visible_rows(last_scroll_y){ - function height(elt){return elt["offsetHeight"];} - var - div = get_exn$0(wrapper_div), - scroll_y$0 = scroll_y(div), - direction = symbol$8(scroll_y$0, last_scroll_y[1]) ? 759637122 : 19067; - last_scroll_y[1] = scroll_y$0; - var - visible_height = height(div), - parent = get_exn$0(content_div), - _pd_ = ui_table[2], - row_height = to_px([0, parent])(_pd_); - logger[4].call - (null, [0, _fN_, [0, visible_height, [0, _fM_, [0, row_height, 0]]]]); - var - number_of_visible_rows = - of_float(Math.ceil(visible_height / row_height)), - first_visible_row = scroll_y$0 / row_height | 0, - last_visible_row = first_visible_row + number_of_visible_rows | 0, - bleeding = - 19067 === direction - ? number_of_visible_rows - : number_of_visible_rows / 2 | 0, - _pe_ = 0, - first = - function(_pf_){return max$0(_pe_, _pf_);} - (first_visible_row - bleeding | 0), - bleeding$0 = - 759637122 === direction - ? number_of_visible_rows - : number_of_visible_rows / 2 | 0, - last = last_visible_row + bleeding$0 | 0; - return init$2(last - first | 0, function(i){return first + i | 0;}); - } - function prepare(total, render){ - cache_ref[1] = new_cache(0); - var i = [0, 0], current_row = [0, first(table)]; - for(;;){ - if(! is_some$1(current_row[1]) && ! symbol$6(i[1], total - 1 | 0)) - return; - var match = current_row[1]; - if(match){ - var row = match[1]; - if(symbol$6(i[1], total - 1 | 0)){ - replace(row_index, i[1], row); - symbol$2(row, [0, i[1], 0, render]); - } - else - unset(row); - i[1]++; - current_row[1] = next(row); - } - else if(symbol$6(i[1], total - 1 | 0)){ - var set = [0, i[1], 0, render], row$0 = append([0, set], table); - add$0(row_index, i[1], row$0); - i[1]++; - current_row[1] = next(row$0); - } - } - } - var - last_scroll_y = [0, 0.], - update = - func - (fetch, - function(fetch, param){ - var visible_rows = compute_visible_rows(last_scroll_y); - return add(fetch, [0, 4 * length(visible_rows) | 0], visible_rows); - }), - populate_on_scroll = - map2 - (total_items, - update, - function(total_items, update){ - prepare(total_items, render); - return update; - }), - repopulate_deps = pair(populate_on_scroll, get$1(table_height)), - root = observe(0, repopulate_deps); - set_on_invalidate - (root, - function(param){ - var _pc_ = quick_sample(root); - if(! _pc_[2]) return 0; - var update = _pc_[1]; - return caml_call1(update, 0); - }); - quick_sample(root); - function make_spacer(n){ - var - at = [0, class$1("row_spacer"), 0], - style = style$0(caml_jsstring_of_string(height_n(n))); - return div$0(0, [0, [0, style, at]], 0); - } - function render$0(row, param){ - var - render = param[3], - content = param[2], - index = param[1], - at = add$1(class$0, _fO_, 0), - style = [0, 80, style$0(caml_jsstring_of_string(height$0))]; - if(! content) return [0, 1, empty$0, 0]; - var - data = content[1], - rendered_row = - func - (render, - function(render){ - return of_list$0 - (symbol$9 - (function(elt){return div$1(0, 0, 0, 0, [0, elt, 0]);}, - caml_call2(render, index, data))); - }); - return [0, - 0, - element - (div$1 - (0, - [0, [0, style, at]], - 0, - 0, - [0, [0, 83, lift(rendered_row)], 0])), - 0]; - } - var - rows = - map_reduce$0 - (render$0, - [0, - [0, 0, empty$0, 0], - function(param, _pa_){ - var - q = _pa_[3], - s = _pa_[2], - p = _pa_[1], - m = param[3], - s$0 = param[2], - n = param[1], - match = view(s$0), - match$0 = view(s); - if(typeof match === "number") - return typeof match$0 === "number" - ? [0, ((n + m | 0) + p | 0) + q | 0, s$0, 0] - : [0, (n + m | 0) + p | 0, s, q]; - if(typeof match$0 === "number") - return [0, n, s$0, (m + p | 0) + q | 0]; - if(symbol$5(m + p | 0, 0)) - var - spacer = pure(make_spacer(m + p | 0)), - s$1 = - function(_pb_){return concat$0(s$0, _pb_);} - (concat$0(element(spacer), s)); - else - var s$1 = concat$0(s$0, s); - return [0, n, s$1, q]; - }], - table), - table_body = - func - (rows, - function(param){ - var m = param[3], s = param[2], n = param[1]; - if(symbol$5(n, 0)) - var - first_spacer = pure(make_spacer(n)), - result = concat$0(element(first_spacer), s); - else - var result = s; - if(! symbol$5(m, 0)) return result; - var last_spacer = pure(make_spacer(m)); - return concat$0(result, element(last_spacer)); - }), - table_header = header(ui_table), - observer = - create$7 - (function(entries, param){ - var - entry = hd(entries), - rect = content_rect(entry), - height$0 = height(rect), - match = peek(table_height); - if(! match) return symbol$1(table_height, [0, height$0]); - var h = match[1]; - return symbol$4(h, height$0) - ? symbol$1(table_height, [0, height$0]) - : 0; - }), - at = v$5(_fP_); - function on_create(el){return set_exn(content_div, el);} - var - rows$0 = - div$1 - (0, [0, at], 0, [0, on_create], [0, [0, 83, lift(table_body)], 0]), - at$0 = v$5(_fQ_), - scroll_handler = - func - (populate_on_scroll, - function(update){ - return handler - (0, - scroll, - function(ev){ - var last_update = [0, 0.], timeout = [0, -1]; - function reset_ticker(div){ - var debouncing_interval = 800, now = now_ms(performance); - if(symbol$7(timeout[1], 0)) stop_timer(timeout[1]); - timeout[1] = - set_timeout - (debouncing_interval, - function(param){return caml_call1(update, div);}); - var - _o$_ = symbol$8(now - last_update[1], debouncing_interval); - return _o$_ - ? (last_update[1] = now, caml_call1(update, div)) - : _o$_; - } - function scroll_handler(div){return reset_ticker(div);} - scroll_handler(0); - return 0; - }); - }), - ev = [0, [0, 82, scroll_handler], 0]; - function on_create$0(el){return set_exn(wrapper_div, el);} - if(scroll_target) - var - scroll_target$0 = scroll_target[1], - scroll_target$1 = - func - (scroll_target$0, - function(i){ - var - parent = get_exn$0(content_div), - _o__ = ui_table[2], - row_height = of_float(to_px([0, parent])(_o__)); - return [0, [0, caml_mul(i, row_height)]]; - }), - _o5_ = - make$7([0, at$0], [0, ev], [0, on_create$0], scroll_target$1, rows$0); - else - var - _o5_ = - div$1 - (0, [0, at$0], [0, ev], [0, on_create$0], [0, [0, 82, rows$0], 0]); - function _o6_(el){return observe$0(observer, 0, el);} - function _o7_(_o9_){return tee(_o6_, _o9_);} - var - wrapper = function(_o8_){return func(_o8_, _o7_);}(_o5_), - at$1 = to_at$0(0, classes(_fR_)), - grid_style = style$2(ui_table), - s = style$0(caml_jsstring_of_string(grid_style)), - at$2 = [0, [0, 80, s], at$1], - table$0 = - div$1 - (0, - [0, at$2], - 0, - 0, - [0, [0, 82, table_header], [0, [0, 82, wrapper], 0]]); - return table$0;}; - } - function rand(s, param){return bits(s);} - make_self_init(0); - function v4_ocaml_random_uuid(rand){ - var - r0 = caml_call1(rand, 0), - r1 = caml_call1(rand, 0), - r2 = caml_call1(rand, 0), - r3 = caml_call1(rand, 0), - r4 = caml_call1(rand, 0), - u = caml_create_bytes(16), - _nz_ = 0; - function _nA_(_o4_, _o3_, _o2_){caml_bytes_set(_o4_, _o3_, _o2_); return;} - (function(_o1_){return _nA_(u, _nz_, _o1_);}(r0 & 255)); - var _nB_ = 1; - function _nC_(_o0_, _oZ_, _oY_){caml_bytes_set(_o0_, _oZ_, _oY_); return;} - (function(_oX_){return _nC_(u, _nB_, _oX_);}((r0 >>> 8 | 0) & 255)); - var _nD_ = 2; - function _nE_(_oW_, _oV_, _oU_){caml_bytes_set(_oW_, _oV_, _oU_); return;} - (function(_oT_){return _nE_(u, _nD_, _oT_);}((r0 >>> 16 | 0) & 255)); - var _nF_ = 3; - function _nG_(_oS_, _oR_, _oQ_){caml_bytes_set(_oS_, _oR_, _oQ_); return;} - (function(_oP_){return _nG_(u, _nF_, _oP_);}(r1 & 255)); - var _nH_ = 4; - function _nI_(_oO_, _oN_, _oM_){caml_bytes_set(_oO_, _oN_, _oM_); return;} - (function(_oL_){return _nI_(u, _nH_, _oL_);}((r1 >>> 8 | 0) & 255)); - var _nJ_ = 5; - function _nK_(_oK_, _oJ_, _oI_){caml_bytes_set(_oK_, _oJ_, _oI_); return;} - (function(_oH_){return _nK_(u, _nJ_, _oH_);}((r1 >>> 16 | 0) & 255)); - var _nL_ = 6; - function _nM_(_oG_, _oF_, _oE_){caml_bytes_set(_oG_, _oF_, _oE_); return;} - (function(_oD_){return _nM_(u, _nL_, _oD_);}(64 | (r1 >>> 24 | 0) & 15)); - var _nN_ = 7; - function _nO_(_oC_, _oB_, _oA_){caml_bytes_set(_oC_, _oB_, _oA_); return;} - (function(_oz_){return _nO_(u, _nN_, _oz_);}(r2 & 255)); - var _nP_ = 8; - function _nQ_(_oy_, _ox_, _ow_){caml_bytes_set(_oy_, _ox_, _ow_); return;} - (function(_ov_){return _nQ_(u, _nP_, _ov_);}(128 | (r2 >>> 24 | 0) & 63)); - var _nR_ = 9; - function _nS_(_ou_, _ot_, _os_){caml_bytes_set(_ou_, _ot_, _os_); return;} - (function(_or_){return _nS_(u, _nR_, _or_);}((r2 >>> 8 | 0) & 255)); - var _nT_ = 10; - function _nU_(_oq_, _op_, _oo_){caml_bytes_set(_oq_, _op_, _oo_); return;} - (function(_on_){return _nU_(u, _nT_, _on_);}((r2 >>> 16 | 0) & 255)); - var _nV_ = 11; - function _nW_(_om_, _ol_, _ok_){caml_bytes_set(_om_, _ol_, _ok_); return;} - (function(_oj_){return _nW_(u, _nV_, _oj_);}(r3 & 255)); - var _nX_ = 12; - function _nY_(_oi_, _oh_, _og_){caml_bytes_set(_oi_, _oh_, _og_); return;} - (function(_of_){return _nY_(u, _nX_, _of_);}((r3 >>> 8 | 0) & 255)); - var _nZ_ = 13; - function _n0_(_oe_, _od_, _oc_){caml_bytes_set(_oe_, _od_, _oc_); return;} - (function(_ob_){return _n0_(u, _nZ_, _ob_);}((r3 >>> 16 | 0) & 255)); - var _n1_ = 14; - function _n2_(_oa_, _n$_, _n__){caml_bytes_set(_oa_, _n$_, _n__); return;} - (function(_n9_){return _n2_(u, _n1_, _n9_);}(r4 & 255)); - var _n3_ = 15; - function _n4_(_n8_, _n7_, _n6_){caml_bytes_set(_n8_, _n7_, _n6_); return;} - (function(_n5_){return _n4_(u, _n3_, _n5_);}((r4 >>> 8 | 0) & 255)); - return unsafe_to_string(u); - } - function v4_gen(seed){ - function rand$0(_ny_){return rand(seed, _ny_);} - return function(param){return v4_ocaml_random_uuid(rand$0);}; - } - function to_string$4(opt, u){ - if(opt) var sth = opt[1], upper = sth; else var upper = 0; - var hbase = upper ? 55 : 87; - function hex(hbase, i){return 10 <= i ? hbase + i | 0 : 48 + i | 0;} - var s = of_string(_fS_), i = [0, 0], j = [0, 0]; - function byte$0(s, i, c){ - function _nn_(_nx_, _nw_, _nv_){ - caml_bytes_set(_nx_, _nw_, _nv_); - return; - } - (function(_nu_){return _nn_(s, i, _nu_);}(hex(hbase, c >>> 4 | 0))); - var _no_ = i + 1 | 0; - function _np_(_nt_, _ns_, _nr_){ - caml_bytes_set(_nt_, _ns_, _nr_); - return; - } - return function(_nq_){return _np_(s, _no_, _nq_);}(hex(hbase, c & 15)); - } - for(;;){ - if(4 <= j[1]) break; - var _nm_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _nm_); - i[1] = i[1] + 2 | 0; - j[1]++; - } - i[1]++; - for(;;){ - if(6 <= j[1]) break; - var _nl_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _nl_); - i[1] = i[1] + 2 | 0; - j[1]++; - } - i[1]++; - for(;;){ - if(8 <= j[1]) break; - var _nk_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _nk_); - i[1] = i[1] + 2 | 0; - j[1]++; - } - i[1]++; - for(;;){ - if(10 <= j[1]) break; - var _nj_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _nj_); - i[1] = i[1] + 2 | 0; - j[1]++; - } - i[1]++; - for(;;){ - if(16 <= j[1]) return unsafe_to_string(s); - var _ni_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _ni_); - i[1] = i[1] + 2 | 0; - j[1]++; - } - } - _eZ_([0, compare$0]); - function to_jstr$2(t){return encode(t);} - function of_jstr$1(jstr){ - var match = decode(jstr); - if(0 === match[0]){var v = match[1]; return [0, v];} - var err = match[1]; - error$0([0, err, 0]); - return _fT_; - } - function of_jv(jv){return of_jstr$1(jv);} - var random_state = get_state(0); - function new_uuid_v4(param){return v4_gen(random_state)(0);} - function utf8_of_code(buf, x){ - function maxbits(n, x){return 0 === (x >>> n | 0) ? 1 : 0;} - if(maxbits(7, x)) return add_char(buf, of_int_exn(x)); - if(maxbits(11, x)){ - add_char(buf, of_int_exn(192 | (x >>> 6 | 0) & 31)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - if(maxbits(16, x)){ - add_char(buf, of_int_exn(224 | (x >>> 12 | 0) & 15)); - add_char(buf, of_int_exn(128 | (x >>> 6 | 0) & 63)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - if(maxbits(21, x)){ - add_char(buf, of_int_exn(240 | (x >>> 18 | 0) & 7)); - add_char(buf, of_int_exn(128 | (x >>> 12 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 6 | 0) & 63)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - if(maxbits(26, x)){ - add_char(buf, of_int_exn(248 | (x >>> 24 | 0) & 3)); - add_char(buf, of_int_exn(128 | (x >>> 18 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 12 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 6 | 0) & 63)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - if(! maxbits(31, x)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _fU_], 1); - add_char(buf, of_int_exn(252 | (x >>> 30 | 0) & 1)); - add_char(buf, of_int_exn(128 | (x >>> 24 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 18 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 12 | 0) & 63)); - add_char(buf, of_int_exn(128 | (x >>> 6 | 0) & 63)); - return add_char(buf, of_int_exn(128 | x & 63)); - } - function code_of_surrogate_pair(i, j){ - var high10 = i - 55296 | 0, low10 = j - 56320 | 0; - return 65536 + (high10 << 10 | low10) | 0; - } - function utf8_of_surrogate_pair(buf, i, j){ - return utf8_of_code(buf, code_of_surrogate_pair(i, j)); - } - var Json_error = [248, _fV_, caml_fresh_oo_id(0)]; - function json_error(s){ - throw caml_maybe_attach_backtrace([0, Json_error, s], 1); - } - var - End_of_array = [248, _fW_, caml_fresh_oo_id(0)], - End_of_object = [248, _fX_, caml_fresh_oo_id(0)], - End_of_tuple = [248, _fY_, caml_fresh_oo_id(0)], - End_of_input = [248, _fZ_, caml_fresh_oo_id(0)]; - function init_lexer(buf, fname, opt, param){ - if(opt) var sth = opt[1], lnum = sth; else var lnum = 1; - if(buf) var buf$0 = buf[1], buf$1 = buf$0; else var buf$1 = create$1(256); - return [0, buf$1, lnum, 0, fname]; - } - function read_junk$0(counter, buf, n, lexbuf){ - var _nh_ = 0; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_read_junk_rec, [0, buf, n, lexbuf, _nh_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_read_junk_rec(counter$0, buf, n, lexbuf, _nh_); - } - function read_junk(buf, n, lexbuf){ - return caml_trampoline(read_junk$0(0, buf, n, lexbuf)); - } - function ocaml_lex_read_junk_rec(counter, buf, n, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = engine(ocaml_lex_tables, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) return; - if(1 === ocaml_lex_state$1){ - if(0 >= n) return; - add_char(buf, lexeme_char(lexbuf, 0)); - var _ng_ = n - 1 | 0; - if(counter >= 50) - return caml_trampoline_return(read_junk$0, [0, buf, _ng_, lexbuf]); - var counter$0 = counter + 1 | 0; - return read_junk$0(counter$0, buf, _ng_, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_junk_without_positions(buf, n, lexbuf){ - var lex_abs_pos = lexbuf[4], lex_start_pos = lexbuf[5]; - read_junk(buf, n, lexbuf); - lexbuf[5] = lex_start_pos + 1 | 0; - lexbuf[4] = lex_abs_pos; - return; - } - function hex(n){ - var _nf_ = 10 <= n ? n + 87 | 0 : n + 48 | 0; - return of_int_exn(_nf_); - } - function write_special(src, start, stop, ob, str){ - add_substring(ob, src, start[1], stop - start[1] | 0); - write_stringlit(ob, str); - start[1] = stop + 1 | 0; - return; - } - function write_control_char(src, start, stop, ob, c){ - add_substring(ob, src, start[1], stop - start[1] | 0); - write_stringlit(ob, _f0_); - add_char(ob, hex(c >>> 4 | 0)); - add_char(ob, hex(c & 15)); - start[1] = stop + 1 | 0; - return; - } - function finish_string(src, start, ob){ - try{ - add_substring - (ob, src, start[1], caml_ml_string_length(src) - start[1] | 0); - return; - } - catch(exc$0){ - var - exc = caml_wrap_exception(exc$0), - _nd_ = caml_ml_string_length(src) - start[1] | 0, - _ne_ = start[1]; - caml_call3(eprintf(_f1_), src, _ne_, _nd_); - throw caml_maybe_attach_backtrace(exc, 0); - } - } - function write_string_body(ob, s){ - var start = [0, 0], _nb_ = caml_ml_string_length(s) - 1 | 0, _na_ = 0; - if(_nb_ >= 0){ - var i = _na_; - for(;;){ - var c = caml_string_get(s, i); - a: - if(92 === c) - write_special(s, start, i, ob, _f2_); - else{ - b: - { - c: - { - if(35 > c){ - if(8 > c) break b; - switch(c - 8 | 0){ - case 0: - write_special(s, start, i, ob, _f3_); break; - case 1: - write_special(s, start, i, ob, _f4_); break; - case 2: - write_special(s, start, i, ob, _f5_); break; - case 4: - write_special(s, start, i, ob, _f6_); break; - case 5: - write_special(s, start, i, ob, _f7_); break; - case 26: - write_special(s, start, i, ob, _f8_); break; - case 24: - case 25: - break c; - default: break b; - } - break a; - } - if(127 === c) break b; - } - break a; - } - write_control_char(s, start, i, ob, c); - } - var _nc_ = i + 1 | 0; - if(_nb_ === i) break; - i = _nc_; - } - } - return finish_string(s, start, ob); - } - function write_string(ob, s){ - add_char(ob, 34); - write_string_body(ob, s); - return add_char(ob, 34); - } - function write_null(ob, param){return write_stringlit(ob, _f9_);} - function write_bool(ob, x){ - var _m$_ = x ? _f__ : _f$_; - return write_stringlit(ob, _m$_); - } - function dec(n){return of_int_exn(n + 48 | 0);} - function write_digits(s, x){ - if(0 === x) return 0; - var d = x % 10 | 0; - write_digits(s, x / 10 | 0); - return add_char(s, dec(abs(d))); - } - function write_int(ob, x){ - return 0 < x - ? write_digits(ob, x) - : 0 - <= x - ? add_char(ob, 48) - : (add_char(ob, 45), write_digits(ob, x)); - } - function float_needs_period(s){ - try{ - var _m7_ = caml_ml_string_length(s) - 1 | 0, _m6_ = 0; - if(_m7_ >= 0){ - var i = _m6_; - for(;;){ - var match = caml_string_get(s, i); - a: - { - if(48 <= match){ - if(58 > match) break a; - } - else if(45 === match) break a; - throw caml_maybe_attach_backtrace(Exit, 1); - } - var _m9_ = i + 1 | 0; - if(_m7_ === i) break; - i = _m9_; - } - } - var _m8_ = 1; - return _m8_; - } - catch(_m__){ - var _m5_ = caml_wrap_exception(_m__); - if(_m5_ === Exit) return 0; - throw caml_maybe_attach_backtrace(_m5_, 0); - } - } - function write_float(ob, x){ - var match = caml_classify_float(x); - if(3 === match){ - var _m3_ = 0. < x ? _ga_ : _gb_; - return write_stringlit(ob, _m3_); - } - if(4 <= match) return write_stringlit(ob, _gc_); - var - s1 = caml_call1(sprintf(_gd_), x), - s = caml_float_of_string(s1) == x ? s1 : caml_call1(sprintf(_gf_), x); - write_stringlit(ob, s); - var _m4_ = float_needs_period(s); - return _m4_ ? write_stringlit(ob, _ge_) : _m4_; - } - function write_std_float(ob, x){ - var match = caml_classify_float(x); - if(3 === match){var _m1_ = 0. < x ? _gg_ : _gh_; return json_error(_m1_);} - if(4 <= match) return json_error(_gi_); - var - s1 = caml_call1(sprintf(_gj_), x), - s = caml_float_of_string(s1) == x ? s1 : caml_call1(sprintf(_gl_), x); - write_stringlit(ob, s); - var _m2_ = float_needs_period(s); - return _m2_ ? write_stringlit(ob, _gk_) : _m2_; - } - function iter2_aux(f_elt, f_sep, x, param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var l = param$0[2], y = param$0[1]; - caml_call1(f_sep, x); - caml_call2(f_elt, x, y); - param$0 = l; - } - } - function iter2$0(f_elt, f_sep, x, param){ - if(! param) return; - var l = param[2], y = param[1]; - caml_call2(f_elt, x, y); - return iter2_aux(f_elt, f_sep, x, l); - } - function f_sep(ob){return add_char(ob, 44);} - function write_json(ob, x){ - if(typeof x === "number") return write_null(ob, 0); - var _m0_ = x[1]; - if(708012133 <= _m0_){ - if(726928360 === _m0_){var l = x[2]; return write_tuple(ob, l);} - if(848054398 <= _m0_){ - if(963043957 <= _m0_){var l$0 = x[2]; return write_assoc(ob, l$0);} - var l$1 = x[2]; - return write_list(ob, l$1); - } - if(737456202 <= _m0_){var b = x[2]; return write_bool(ob, b);} - var match = x[2], o = match[2], s = match[1]; - return write_variant(ob, s, o); - } - if(3654863 <= _m0_){ - if(365180284 <= _m0_){var f = x[2]; return write_float(ob, f);} - var i = x[2]; - return write_int(ob, i); - } - if(-752863768 <= _m0_){var s$0 = x[2]; return write_stringlit(ob, s$0);} - var s$1 = x[2]; - return write_string(ob, s$1); - } - function write_assoc(ob, l){ - function f_elt(ob, param){ - var x = param[2], s = param[1]; - write_string(ob, s); - add_char(ob, 58); - return write_json(ob, x); - } - add_char(ob, 123); - iter2$0(f_elt, f_sep, ob, l); - return add_char(ob, 125); - } - function write_list(ob, l){ - add_char(ob, 91); - iter2$0(write_json, f_sep, ob, l); - return add_char(ob, 93); - } - function write_tuple(ob, l){ - add_char(ob, 40); - iter2$0(write_json, f_sep, ob, l); - return add_char(ob, 41); - } - function write_variant(ob, s, o){ - add_char(ob, 60); - write_string(ob, s); - if(o){var x = o[1]; add_char(ob, 58); write_json(ob, x);} - return add_char(ob, 62); - } - function write_std_json(ob, x){ - if(typeof x === "number") return write_null(ob, 0); - var _mZ_ = x[1]; - if(708012133 <= _mZ_){ - if(726928360 === _mZ_){var l = x[2]; return write_std_tuple(ob, l);} - if(848054398 <= _mZ_){ - if(963043957 <= _mZ_){var l$0 = x[2]; return write_std_assoc(ob, l$0);} - var l$1 = x[2]; - return write_std_list(ob, l$1); - } - if(737456202 <= _mZ_){var b = x[2]; return write_bool(ob, b);} - var match = x[2], o = match[2], s = match[1]; - return write_std_variant(ob, s, o); - } - if(3654863 <= _mZ_){ - if(365180284 <= _mZ_){var f = x[2]; return write_std_float(ob, f);} - var i = x[2]; - return write_int(ob, i); - } - if(-752863768 <= _mZ_){var s$0 = x[2]; return write_stringlit(ob, s$0);} - var s$1 = x[2]; - return write_string(ob, s$1); - } - function write_std_assoc(ob, l){ - function f_elt(ob, param){ - var x = param[2], s = param[1]; - write_string(ob, s); - add_char(ob, 58); - return write_std_json(ob, x); - } - add_char(ob, 123); - iter2$0(f_elt, f_sep, ob, l); - return add_char(ob, 125); - } - function write_std_list(ob, l){ - add_char(ob, 91); - iter2$0(write_std_json, f_sep, ob, l); - return add_char(ob, 93); - } - function write_std_tuple(ob, l){ - add_char(ob, 91); - iter2$0(write_std_json, f_sep, ob, l); - return add_char(ob, 93); - } - function write_std_variant(ob, s, o){ - if(! o) return write_string(ob, s); - var x = o[1]; - add_char(ob, 91); - write_string(ob, s); - add_char(ob, 44); - write_std_json(ob, x); - return add_char(ob, 93); - } - function to_buffer(opt, _mY_, ob, x){ - if(opt) var sth = opt[1], suf = sth; else var suf = _gm_; - if(_mY_) var sth$0 = _mY_[1], std = sth$0; else var std = 0; - if(std) write_std_json(ob, x); else write_json(ob, x); - return write_stringlit(ob, suf); - } - function to_string$5(buf, opt, _mX_, std, x){ - if(opt) var sth = opt[1], len = sth; else var len = 256; - if(_mX_) var sth$0 = _mX_[1], suf = sth$0; else var suf = _gn_; - if(buf){ - var ob = buf[1]; - clear$1(ob); - var ob$0 = ob; - } - else - var ob$0 = create$1(len); - to_buffer([0, suf], std, ob$0, x); - var s = contents(ob$0); - clear$1(ob$0); - return s; - } - function engine$0(tbl, state, buf){ - var result = caml_lex_engine(tbl, state, buf); - return result; - } - function dec$0(c){return c - 48 | 0;} - function hex$0(c){ - if(65 <= c){ - if(97 <= c){ - if(103 > c) return (c - 97 | 0) + 10 | 0; - } - else if(71 > c) return (c - 65 | 0) + 10 | 0; - } - else if(9 >= c - 48 >>> 0) return c - 48 | 0; - throw caml_maybe_attach_backtrace([0, Assert_failure, _go_], 1); - } - function custom_error(descr, v, lexbuf){ - var - offs = lexbuf[4] - 1 | 0, - bol = v[3], - pos1 = ((offs + lexbuf[5] | 0) - bol | 0) - 1 | 0, - pos2 = max(pos1, (offs + lexbuf[6] | 0) - bol | 0), - match = v[4]; - if(match) - var s = match[1], file_line = caml_call1(sprintf(_gp_), s); - else - var file_line = _gt_; - var - bytes = - pos1 === pos2 - ? caml_call1(sprintf(_gq_), pos1 + 1 | 0) - : caml_call2(sprintf(_gs_), pos1 + 1 | 0, pos2 + 1 | 0), - _mW_ = v[2], - msg = caml_call4(sprintf(_gr_), file_line, _mW_, bytes, descr); - return json_error(msg); - } - function long_error(descr, v, lexbuf){ - var junk = lexeme(lexbuf), buf_size = 32, buf = create$1(buf_size); - read_junk_without_positions(buf, buf_size, lexbuf); - var extra_junk = contents(buf); - return custom_error - (caml_call3(sprintf(_gu_), descr, junk, extra_junk), v, lexbuf); - } - var Int_overflow = [248, _gv_, caml_fresh_oo_id(0)]; - function extract_positive_int(lexbuf){ - var - start = lexbuf[5], - stop = lexbuf[6], - s = lexbuf[2], - n = [0, 0], - _mT_ = stop - 1 | 0; - if(_mT_ >= start){ - var i = start; - for(;;){ - if(214748365 <= n[1]) - throw caml_maybe_attach_backtrace(Int_overflow, 1); - var _mU_ = dec$0(caml_bytes_get(s, i)); - n[1] = (10 * n[1] | 0) + _mU_ | 0; - var _mV_ = i + 1 | 0; - if(_mT_ === i) break; - i = _mV_; - } - } - if(0 <= n[1]) return n[1]; - throw caml_maybe_attach_backtrace(Int_overflow, 1); - } - function make_positive_int(v, lexbuf){ - try{var _mR_ = [0, 3654863, extract_positive_int(lexbuf)]; return _mR_;} - catch(_mS_){ - var _mQ_ = caml_wrap_exception(_mS_); - if(_mQ_ === Int_overflow) return [0, -752863768, lexeme(lexbuf)]; - throw caml_maybe_attach_backtrace(_mQ_, 0); - } - } - function extract_negative_int(lexbuf){ - var - start = lexbuf[5] + 1 | 0, - stop = lexbuf[6], - s = lexbuf[2], - n = [0, 0], - _mN_ = stop - 1 | 0; - if(_mN_ >= start){ - var i = start; - for(;;){ - if(n[1] <= -214748365) - throw caml_maybe_attach_backtrace(Int_overflow, 1); - var _mO_ = dec$0(caml_bytes_get(s, i)); - n[1] = (10 * n[1] | 0) - _mO_ | 0; - var _mP_ = i + 1 | 0; - if(_mN_ === i) break; - i = _mP_; - } - } - if(0 < n[1]) throw caml_maybe_attach_backtrace(Int_overflow, 1); - return n[1]; - } - function make_negative_int(v, lexbuf){ - try{var _mL_ = [0, 3654863, extract_negative_int(lexbuf)]; return _mL_;} - catch(_mM_){ - var _mK_ = caml_wrap_exception(_mM_); - if(_mK_ === Int_overflow) return [0, -752863768, lexeme(lexbuf)]; - throw caml_maybe_attach_backtrace(_mK_, 0); - } - } - function newline(v, lexbuf){ - v[2] = v[2] + 1 | 0; - v[3] = lexbuf[4] + lexbuf[6] | 0; - return; - } - function add_lexeme(buf, lexbuf){ - var len = lexbuf[6] - lexbuf[5] | 0; - return add_subbytes(buf, lexbuf[2], lexbuf[5], len); - } - function read_json$0(counter, v, lexbuf){ - var _mJ_ = 0; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_read_json_rec, [0, v, lexbuf, _mJ_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_read_json_rec(counter$0, v, lexbuf, _mJ_); - } - function read_json(v, lexbuf){ - return caml_trampoline(read_json$0(0, v, lexbuf)); - } - function ocaml_lex_read_json_rec(counter, v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(19 < ocaml_lex_state$1 >>> 0){ - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - else - switch(ocaml_lex_state$1){ - case 0: - return _gw_; - case 1: - return _gx_; - case 2: - return 870828711; - case 3: - return [0, 365180284, nan]; - case 4: - return [0, 365180284, infinity]; - case 5: - return [0, 365180284, neg_infinity]; - case 6: - clear$1(v[1]); return [0, -976970511, finish_string$0(v, lexbuf)]; - case 7: - return make_positive_int(v, lexbuf); - case 8: - return make_negative_int(v, lexbuf); - case 9: - return [0, 365180284, caml_float_of_string(lexeme(lexbuf))]; - case 10: - var acc = [0, 0]; - try{ - read_space(v, lexbuf); - read_object_end(lexbuf); - var field_name = read_ident(v, lexbuf); - read_space(v, lexbuf); - read_colon(v, lexbuf); - read_space(v, lexbuf); - var _my_ = acc[1]; - acc[1] = [0, [0, field_name, read_json(v, lexbuf)], _my_]; - for(;;){ - read_space(v, lexbuf); - read_object_sep(v, lexbuf); - read_space(v, lexbuf); - var field_name$0 = read_ident(v, lexbuf); - read_space(v, lexbuf); - read_colon(v, lexbuf); - read_space(v, lexbuf); - var _mz_ = acc[1]; - acc[1] = [0, [0, field_name$0, read_json(v, lexbuf)], _mz_]; - } - } - catch(_mI_){ - var _mx_ = caml_wrap_exception(_mI_); - if(_mx_ === End_of_object) return [0, 963043957, rev(acc[1])]; - throw caml_maybe_attach_backtrace(_mx_, 0); - } - break; - case 11: - var acc$0 = [0, 0]; - try{ - read_space(v, lexbuf); - read_array_end(lexbuf); - var _mB_ = acc$0[1]; - acc$0[1] = [0, read_json(v, lexbuf), _mB_]; - for(;;){ - read_space(v, lexbuf); - read_array_sep(v, lexbuf); - read_space(v, lexbuf); - var _mC_ = acc$0[1]; - acc$0[1] = [0, read_json(v, lexbuf), _mC_]; - } - } - catch(_mH_){ - var _mA_ = caml_wrap_exception(_mH_); - if(_mA_ === End_of_array) return [0, 848054398, rev(acc$0[1])]; - throw caml_maybe_attach_backtrace(_mA_, 0); - } - break; - case 12: - var acc$1 = [0, 0]; - try{ - read_space(v, lexbuf); - read_tuple_end(lexbuf); - var _mE_ = acc$1[1]; - acc$1[1] = [0, read_json(v, lexbuf), _mE_]; - for(;;){ - read_space(v, lexbuf); - read_tuple_sep(v, lexbuf); - read_space(v, lexbuf); - var _mF_ = acc$1[1]; - acc$1[1] = [0, read_json(v, lexbuf), _mF_]; - } - } - catch(_mG_){ - var _mD_ = caml_wrap_exception(_mG_); - if(_mD_ === End_of_tuple) return [0, 726928360, rev(acc$1[1])]; - throw caml_maybe_attach_backtrace(_mD_, 0); - } - break; - case 13: - read_space(v, lexbuf); - var cons = read_ident(v, lexbuf); - read_space(v, lexbuf); - return [0, 708012133, [0, cons, finish_variant(v, lexbuf)]]; - case 14: - if(counter >= 50) - return caml_trampoline_return(read_json$0, [0, v, lexbuf]); - var counter$0 = counter + 1 | 0; - return read_json$0(counter$0, v, lexbuf); - case 15: - finish_comment(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_json$0, [0, v, lexbuf]); - var counter$1 = counter + 1 | 0; - return read_json$0(counter$1, v, lexbuf); - case 16: - newline(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_json$0, [0, v, lexbuf]); - var counter$2 = counter + 1 | 0; - return read_json$0(counter$2, v, lexbuf); - case 17: - if(counter >= 50) - return caml_trampoline_return(read_json$0, [0, v, lexbuf]); - var counter$3 = counter + 1 | 0; - return read_json$0(counter$3, v, lexbuf); - case 18: - return custom_error(_gy_, v, lexbuf); - default: return long_error(_gz_, v, lexbuf); - } - } - } - function finish_string$1(counter, v, lexbuf){ - var _mw_ = 58; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_finish_string_rec, [0, v, lexbuf, _mw_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_finish_string_rec(counter$0, v, lexbuf, _mw_); - } - function finish_string$0(v, lexbuf){ - return caml_trampoline(finish_string$1(0, v, lexbuf)); - } - function ocaml_lex_finish_string_rec(counter, v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return contents(v[1]); - case 1: - finish_escaped_char(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(finish_string$1, [0, v, lexbuf]); - var counter$0 = counter + 1 | 0; - return finish_string$1(counter$0, v, lexbuf); - case 2: - add_lexeme(v[1], lexbuf); - if(counter >= 50) - return caml_trampoline_return(finish_string$1, [0, v, lexbuf]); - var counter$1 = counter + 1 | 0; - return finish_string$1(counter$1, v, lexbuf); - default: return custom_error(_gA_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish_escaped_char(v, lexbuf){ - return ocaml_lex_finish_escaped_char_(v, lexbuf, 68); - } - function ocaml_lex_finish_escaped_char_(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(8 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - var c = sub_lexeme_char(lexbuf, lexbuf[5]); return add_char(v[1], c); - case 1: - return add_char(v[1], 8); - case 2: - return add_char(v[1], 12); - case 3: - return add_char(v[1], 10); - case 4: - return add_char(v[1], 13); - case 5: - return add_char(v[1], 9); - case 6: - var - a = sub_lexeme_char(lexbuf, lexbuf[5] + 1 | 0), - b = sub_lexeme_char(lexbuf, lexbuf[5] + 2 | 0), - c$0 = sub_lexeme_char(lexbuf, lexbuf[5] + 3 | 0), - d = sub_lexeme_char(lexbuf, lexbuf[5] + 4 | 0), - _mt_ = hex$0(d), - _mu_ = hex$0(c$0) << 4, - _mv_ = hex$0(b) << 8, - x = hex$0(a) << 12 | _mv_ | _mu_ | _mt_; - if(55296 <= x && 56319 >= x) - return finish_surrogate_pair(v, x, lexbuf); - return utf8_of_code(v[1], x); - case 7: - return long_error(_gB_, v, lexbuf); - default: return custom_error(_gC_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish_surrogate_pair(v, x, lexbuf){ - return ocaml_lex_finish_surrogate_pai(v, x, lexbuf, 82); - } - function ocaml_lex_finish_surrogate_pai(v, x, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(2 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - var - a = sub_lexeme_char(lexbuf, lexbuf[5] + 2 | 0), - b = sub_lexeme_char(lexbuf, lexbuf[5] + 3 | 0), - c = sub_lexeme_char(lexbuf, lexbuf[5] + 4 | 0), - d = sub_lexeme_char(lexbuf, lexbuf[5] + 5 | 0), - _mq_ = hex$0(d), - _mr_ = hex$0(c) << 4, - _ms_ = hex$0(b) << 8, - y = hex$0(a) << 12 | _ms_ | _mr_ | _mq_; - if(56320 <= y && 57343 >= y) - return utf8_of_surrogate_pair(v[1], x, y); - return long_error(_gD_, v, lexbuf); - case 1: - return long_error(_gE_, v, lexbuf); - default: return custom_error(_gF_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish_variant(v, lexbuf){ - return ocaml_lex_finish_variant_rec(v, lexbuf, 102); - } - function ocaml_lex_finish_variant_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - var x = read_json(v, lexbuf); - read_space(v, lexbuf); - read_gt(v, lexbuf); - return [0, x]; - case 1: - return 0; - case 2: - return long_error(_gG_, v, lexbuf); - default: return custom_error(_gH_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_gt(v, lexbuf){return ocaml_lex_read_gt_rec(v, lexbuf, 111);} - function ocaml_lex_read_gt_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(2 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - return long_error(_gI_, v, lexbuf); - default: return custom_error(_gJ_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish_comment$0(counter, v, lexbuf){ - var _mp_ = 125; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_finish_comment_rec, [0, v, lexbuf, _mp_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_finish_comment_rec(counter$0, v, lexbuf, _mp_); - } - function finish_comment(v, lexbuf){ - return caml_trampoline(finish_comment$0(0, v, lexbuf)); - } - function ocaml_lex_finish_comment_rec(counter, v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - return long_error(_gK_, v, lexbuf); - case 2: - newline(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(finish_comment$0, [0, v, lexbuf]); - var counter$0 = counter + 1 | 0; - return finish_comment$0(counter$0, v, lexbuf); - default: - if(counter >= 50) - return caml_trampoline_return(finish_comment$0, [0, v, lexbuf]); - var counter$1 = counter + 1 | 0; - return finish_comment$0(counter$1, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_eof(lexbuf){return ocaml_lex_read_eof_rec(lexbuf, 131);} - function ocaml_lex_read_eof_rec(lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) return 1; - if(1 === ocaml_lex_state$1) return 0; - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_space$0(counter, v, lexbuf){ - var _mo_ = 133; - if(counter >= 50) - return caml_trampoline_return - (ocaml_lex_read_space_rec, [0, v, lexbuf, _mo_]); - var counter$0 = counter + 1 | 0; - return ocaml_lex_read_space_rec(counter$0, v, lexbuf, _mo_); - } - function read_space(v, lexbuf){ - return caml_trampoline(read_space$0(0, v, lexbuf)); - } - function ocaml_lex_read_space_rec(counter, v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(4 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - newline(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_space$0, [0, v, lexbuf]); - var counter$0 = counter + 1 | 0; - return read_space$0(counter$0, v, lexbuf); - case 1: - finish_comment(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_space$0, [0, v, lexbuf]); - var counter$1 = counter + 1 | 0; - return read_space$0(counter$1, v, lexbuf); - case 2: - newline(v, lexbuf); - if(counter >= 50) - return caml_trampoline_return(read_space$0, [0, v, lexbuf]); - var counter$2 = counter + 1 | 0; - return read_space$0(counter$2, v, lexbuf); - case 3: - if(counter >= 50) - return caml_trampoline_return(read_space$0, [0, v, lexbuf]); - var counter$3 = counter + 1 | 0; - return read_space$0(counter$3, v, lexbuf); - default: return; - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_ident(v, lexbuf){ - return ocaml_lex_read_ident_rec(v, lexbuf, 237); - } - function ocaml_lex_read_ident_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - clear$1(v[1]); return finish_string$0(v, lexbuf); - case 1: - var s = sub_lexeme(lexbuf, lexbuf[5], lexbuf[6]); return s; - case 2: - return long_error(_gL_, v, lexbuf); - default: return custom_error(_gM_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_array_end(lexbuf){ - return ocaml_lex_read_array_end_rec(lexbuf, 255); - } - function ocaml_lex_read_array_end_rec(lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) - throw caml_maybe_attach_backtrace(End_of_array, 1); - if(1 === ocaml_lex_state$1) return; - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_array_sep(v, lexbuf){ - return ocaml_lex_read_array_sep_rec(v, lexbuf, 257); - } - function ocaml_lex_read_array_sep_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - throw caml_maybe_attach_backtrace(End_of_array, 1); - case 2: - return long_error(_gN_, v, lexbuf); - default: return custom_error(_gO_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_tuple_end(lexbuf){ - return ocaml_lex_read_tuple_end_rec(lexbuf, 266); - } - function ocaml_lex_read_tuple_end_rec(lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) - throw caml_maybe_attach_backtrace(End_of_tuple, 1); - if(1 === ocaml_lex_state$1) return; - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_tuple_sep(v, lexbuf){ - return ocaml_lex_read_tuple_sep_rec(v, lexbuf, 271); - } - function ocaml_lex_read_tuple_sep_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - throw caml_maybe_attach_backtrace(End_of_tuple, 1); - case 2: - return long_error(_gP_, v, lexbuf); - default: return custom_error(_gQ_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_object_end(lexbuf){ - return ocaml_lex_read_object_end_rec(lexbuf, 290); - } - function ocaml_lex_read_object_end_rec(lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(0 === ocaml_lex_state$1) - throw caml_maybe_attach_backtrace(End_of_object, 1); - if(1 === ocaml_lex_state$1) return; - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_object_sep(v, lexbuf){ - return ocaml_lex_read_object_sep_rec(v, lexbuf, 292); - } - function ocaml_lex_read_object_sep_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(3 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - throw caml_maybe_attach_backtrace(End_of_object, 1); - case 2: - return long_error(_gR_, v, lexbuf); - default: return custom_error(_gS_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function read_colon(v, lexbuf){ - return ocaml_lex_read_colon_rec(v, lexbuf, 297); - } - function ocaml_lex_read_colon_rec(v, lexbuf, ocaml_lex_state){ - var ocaml_lex_state$0 = ocaml_lex_state; - for(;;){ - var - ocaml_lex_state$1 = - engine$0(ocaml_lex_tables$0, ocaml_lex_state$0, lexbuf); - if(2 >= ocaml_lex_state$1 >>> 0) - switch(ocaml_lex_state$1){ - case 0: - return; - case 1: - return long_error(_gT_, v, lexbuf); - default: return custom_error(_gU_, v, lexbuf); - } - caml_call1(lexbuf[1], lexbuf); - ocaml_lex_state$0 = ocaml_lex_state$1; - } - } - function finish(v, lexbuf){ - read_space(v, lexbuf); - var _mn_ = 1 - read_eof(lexbuf); - return _mn_ ? long_error(_gV_, v, lexbuf) : _mn_; - } - function from_lexbuf(v, opt, lexbuf){ - if(opt) var sth = opt[1], stream = sth; else var stream = 0; - read_space(v, lexbuf); - if(read_eof(lexbuf)) throw caml_maybe_attach_backtrace(End_of_input, 1); - var x = read_json(v, lexbuf); - if(1 - stream) finish(v, lexbuf); - return x; - } - function from_string$0(buf, fname, lnum, s){ - try{ - var - lexbuf = from_string(0, s), - v = init_lexer(buf, fname, lnum, 0), - _ml_ = from_lexbuf(v, 0, lexbuf); - return _ml_; - } - catch(_mm_){ - var _mk_ = caml_wrap_exception(_mm_); - if(_mk_ === End_of_input) return json_error(_gW_); - throw caml_maybe_attach_backtrace(_mk_, 0); - } - } - var Type_error = [248, _gX_, caml_fresh_oo_id(0)]; - function typeof$0(param){ - if(typeof param === "number") return _gY_; - var _mj_ = param[1]; - return 726928360 <= _mj_ - ? 737456202 - === _mj_ - ? _gZ_ - : 928231259 - <= _mj_ - ? 963043957 <= _mj_ ? _g0_ : _g1_ - : 848054398 <= _mj_ ? _g2_ : _g3_ - : -752863768 - === _mj_ - ? _g4_ - : 365180284 - <= _mj_ - ? 708012133 <= _mj_ ? _g5_ : _g6_ - : 3654863 <= _mj_ ? _g7_ : _g8_; - } - function typerr(msg, js){ - throw caml_maybe_attach_backtrace - ([0, Type_error, symbol_concat(msg, typeof$0(js)), js], 1); - } - function to_assoc(js){ - if(typeof js !== "number" && 963043957 === js[1]){var obj = js[2]; return obj;} - return typerr(_g9_, js); - } - function to_string$6(js){ - if(typeof js !== "number" && -976970511 === js[1]){var s = js[2]; return s;} - return typerr(_g__, js); - } - function yojson_of_string(str){return [0, -976970511, str];} - function yojson_of_int(n){return [0, 3654863, n];} - function yojson_of_option(yojson_of_a, param){ - if(! param) return 870828711; - var x = param[1]; - return caml_call1(yojson_of_a, x); - } - function yojson_of_list(yojson_of_a, lst){ - return [0, 848054398, rev(rev_map(yojson_of_a, lst))]; - } - var - Of_yojson_error = [248, _g$_, caml_fresh_oo_id(0)], - record_check_extra_fields = [0, 1]; - function of_yojson_error(what, yojson){ - throw caml_maybe_attach_backtrace - ([0, Of_yojson_error, [0, Failure, what], yojson], 1); - } - function string_of_yojson(yojson){ - if(typeof yojson !== "number" && -976970511 === yojson[1]){var str = yojson[2]; return str;} - return of_yojson_error(_ha_, yojson); - } - function int_of_yojson(yojson){ - if(typeof yojson !== "number" && 3654863 === yojson[1]){var v = yojson[2]; return v;} - return of_yojson_error(_hb_, yojson); - } - function option_of_yojson(a_of_yojson, yojson){ - return 870828711 === yojson ? 0 : [0, caml_call1(a_of_yojson, yojson)]; - } - function list_of_yojson(a_of_yojson, yojson){ - if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var lst = yojson[2], rev_lst = rev_map(a_of_yojson, lst); - return rev(rev_lst); - } - return of_yojson_error(_hc_, yojson); - } - function stag_no_args(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _hd_), yojson); - } - function nested_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _he_), yojson); - } - function empty_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _hf_), yojson); - } - function unexpected_stag(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _hg_), yojson); - } - function record_superfluous_fields(what, loc, rev_fld_names, yojson){ - var - fld_names_str = concat(_hh_, rev(rev_fld_names)), - msg = caml_call3(sprintf(_hi_), loc, what, fld_names_str); - return of_yojson_error(msg, yojson); - } - function record_duplicate_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_hj_, loc, rev_fld_names, yojson); - } - function record_extra_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_hk_, loc, rev_fld_names, yojson); - } - function record_get_undefined_loop(fields, param){ - var fields$0 = fields, param$0 = param; - for(;;){ - if(! param$0) return concat(_hl_, rev(fields$0)); - var _mi_ = param$0[1]; - if(_mi_[1]){ - var rest = param$0[2], field = _mi_[2], fields$1 = [0, field, fields$0]; - fields$0 = fields$1; - param$0 = rest; - } - else{var rest$0 = param$0[2]; param$0 = rest$0;} - } - } - function record_undefined_elements(loc, yojson, lst){ - var - undefined$0 = record_get_undefined_loop(0, lst), - msg = caml_call2(sprintf(_hm_), loc, undefined$0); - return of_yojson_error(msg, yojson); - } - function record_list_instead_atom(loc, yojson){ - var msg = symbol_concat(loc, _hn_); - return of_yojson_error(msg, yojson); - } - function symbol$15(x){return x[1];} - function jstr_of_method(param){return param ? "POST" : "GET";} - function user_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - name_field = [0, 0], - server_id_field = [0, 0], - server_name_field = [0, 0], - id_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_Id) - if(field_name !== cst_Name) - if(field_name !== cst_ServerId){ - if(field_name === cst_ServerName) - if(symbol$15(server_name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue = option_of_yojson(string_of_yojson, field_yojson); - server_name_field[1] = [0, fvalue]; - } - } - else if(symbol$15(server_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$0 = string_of_yojson(field_yojson); - server_id_field[1] = [0, fvalue$0]; - } - else if(symbol$15(name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$1 = string_of_yojson(field_yojson); - name_field[1] = [0, fvalue$1]; - } - else if(symbol$15(id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$2 = string_of_yojson(field_yojson); - id_field[1] = [0, fvalue$2]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc, symbol$15(extra), yojson); - var - match = symbol$15(name_field), - match$0 = symbol$15(server_id_field), - server_name_value = symbol$15(server_name_field), - match$1 = symbol$15(id_field); - if(match && match$0 && match$1){ - var - id_value = match$1[1], - server_id_value = match$0[1], - name_value = match[1]; - if(server_name_value) - var v = server_name_value[1], v$0 = v; - else - var v$0 = 0; - return [0, name_value, server_id_value, v$0, id_value]; - } - var - _mg_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _ho_], 0], - _mh_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _hp_], _mg_]; - return record_undefined_elements - (tp_loc, - yojson, - [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _hq_], _mh_]); - } - return record_list_instead_atom(tp_loc, yojson); - } - function yojson_of_user(param){ - var - v_id = param[4], - v_server_name = param[3], - v_server_id = param[2], - v_name = param[1], - arg = yojson_of_string(v_id), - bnds = [0, [0, _hr_, arg], 0], - arg$0 = yojson_of_option(yojson_of_string, v_server_name), - bnds$0 = [0, [0, _hs_, arg$0], bnds], - arg$1 = yojson_of_string(v_server_id), - bnds$1 = [0, [0, _ht_, arg$1], bnds$0], - arg$2 = yojson_of_string(v_name), - bnds$2 = [0, [0, _hu_, arg$2], bnds$1]; - return [0, 963043957, bnds$2]; - } - function params_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - username_field = [0, 0], - pw_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_Pw) - if(field_name !== cst_Username){ - if(symbol$15(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$15(extra)]; - } - else if(symbol$15(username_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue = string_of_yojson(field_yojson); - username_field[1] = [0, fvalue]; - } - else if(symbol$15(pw_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$0 = string_of_yojson(field_yojson); - pw_field[1] = [0, fvalue$0]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$0, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$0, symbol$15(extra), yojson); - var match = symbol$15(username_field), match$0 = symbol$15(pw_field); - if(match && match$0){ - var pw_value = match$0[1], username_value = match[1]; - return [0, username_value, pw_value]; - } - var _mf_ = [0, [0, 0 === symbol$15(pw_field) ? 1 : 0, _hv_], 0]; - return record_undefined_elements - (tp_loc$0, - yojson, - [0, [0, 0 === symbol$15(username_field) ? 1 : 0, _hw_], _mf_]); - } - return record_list_instead_atom(tp_loc$0, yojson); - } - function yojson_of_params(param){ - var - v_pw = param[2], - v_username = param[1], - arg = yojson_of_string(v_pw), - bnds = [0, [0, _hx_, arg], 0], - arg$0 = yojson_of_string(v_username), - bnds$0 = [0, [0, _hy_, arg$0], bnds]; - return [0, 963043957, bnds$0]; - } - function response_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - user_field = [0, 0], - access_token_field = [0, 0], - server_id_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_AccessToken) - if(field_name !== cst_ServerId){ - if(field_name === cst_User) - if(symbol$15(user_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue = user_of_yojson(field_yojson); - user_field[1] = [0, fvalue]; - } - } - else if(symbol$15(server_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$0 = string_of_yojson(field_yojson); - server_id_field[1] = [0, fvalue$0]; - } - else if(symbol$15(access_token_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$1 = string_of_yojson(field_yojson); - access_token_field[1] = [0, fvalue$1]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$1, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$1, symbol$15(extra), yojson); - var - match = symbol$15(user_field), - match$0 = symbol$15(access_token_field), - match$1 = symbol$15(server_id_field); - if(match && match$0 && match$1){ - var - server_id_value = match$1[1], - access_token_value = match$0[1], - user_value = match[1]; - return [0, user_value, access_token_value, server_id_value]; - } - var - _md_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _hz_], 0], - _me_ = [0, [0, 0 === symbol$15(access_token_field) ? 1 : 0, _hA_], _md_]; - return record_undefined_elements - (tp_loc$1, - yojson, - [0, [0, 0 === symbol$15(user_field) ? 1 : 0, _hB_], _me_]); - } - return record_list_instead_atom(tp_loc$1, yojson); - } - function yojson_of_response(param){ - var - v_server_id = param[3], - v_access_token = param[2], - v_user = param[1], - arg = yojson_of_string(v_server_id), - bnds = [0, [0, _hC_, arg], 0], - arg$0 = yojson_of_string(v_access_token), - bnds$0 = [0, [0, _hD_, arg$0], bnds], - arg$1 = yojson_of_user(v_user), - bnds$1 = [0, [0, _hE_, arg$1], bnds$0]; - return [0, 963043957, bnds$1]; - } - function endpoint(param){return _hF_;} - function image_blur_hash_of_yojson(y){ - var assoc = to_assoc(y); - return map$1 - (function(param){ - var v = param[2], key = param[1]; - return [0, key, to_string$6(v)]; - }, - assoc); - } - function yojson_of_image_blur_hash(i){ - var - assoc = - map$1 - (function(param){ - var v = param[2], key = param[1]; - return [0, key, [0, -976970511, v]]; - }, - i); - return [0, 963043957, assoc]; - } - function image_blur_hashes_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - primary_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name === cst_Primary) - if(symbol$15(primary_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue = image_blur_hash_of_yojson(field_yojson); - primary_field[1] = [0, fvalue]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$2, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$2, symbol$15(extra), yojson); - var primary_value = symbol$15(primary_field); - return [0, primary_value]; - } - return record_list_instead_atom(tp_loc$2, yojson); - } - function yojson_of_image_blur_hashes(param){ - var v_primary = param[1], bnds = 0; - if(v_primary) - var - v = v_primary[1], - arg = yojson_of_image_blur_hash(v), - bnd = [0, _hG_, arg], - bnds$0 = [0, bnd, bnds]; - else - var bnds$0 = bnds; - return [0, 963043957, bnds$0]; - } - function type_of_yojson(yojson){ - if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _l$_ = yojson[2]; - if(! _l$_) return empty_list_invalid_sum(tp_loc$3, yojson); - var _ma_ = _l$_[1]; - if(typeof _ma_ !== "number"){ - var _mb_ = _ma_[1]; - if(-976970511 === _mb_){ - var - _mc_ = _ma_[2], - switch$0 = caml_string_compare(_mc_, cst_MusicGenre); - if(0 <= switch$0){ - if(0 >= switch$0) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 18; - var switch$1 = caml_string_compare(_mc_, cst_Series); - if(0 <= switch$1){ - if(0 >= switch$1) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 28; - if(_mc_ === cst_Studio) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 29; - if(_mc_ === cst_Trailer) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 30; - if(_mc_ === cst_TvChannel) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 31; - if(_mc_ === cst_TvProgram) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 32; - if(_mc_ === cst_UserRootFolder) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 33; - if(_mc_ === cst_UserView) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 34; - if(_mc_ === cst_Video) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 35; - if(_mc_ === cst_Year) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 36; - } - else{ - if(_mc_ === cst_MusicVideo) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 19; - if(_mc_ === cst_Person) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 20; - if(_mc_ === cst_Photo) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 21; - if(_mc_ === cst_PhotoAlbum) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 22; - if(_mc_ === cst_Playlist) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 23; - if(_mc_ === cst_PlaylistsFolder) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 24; - if(_mc_ === cst_Program) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 25; - if(_mc_ === cst_Recording) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 26; - if(_mc_ === cst_Season) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 27; - } - } - else{ - var switch$2 = caml_string_compare(_mc_, cst_Episode); - if(0 <= switch$2){ - if(0 >= switch$2) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 9; - if(_mc_ === cst_Folder) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 10; - if(_mc_ === cst_Genre) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 11; - if(_mc_ === cst_LiveTvChannel) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 12; - if(_mc_ === cst_LiveTvProgram) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 13; - if(_mc_ === cst_ManualPlaylistsFolder) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 14; - if(_mc_ === cst_Movie) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 15; - if(_mc_ === cst_MusicAlbum) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 16; - if(_mc_ === cst_MusicArtist) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 17; - } - else{ - if(_mc_ === cst_AggregateFolder) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 0; - if(_mc_ === cst_Audio) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 1; - if(_mc_ === cst_AudioBook) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 2; - if(_mc_ === cst_BasePluginFolder) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 3; - if(_mc_ === cst_Book) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 4; - if(_mc_ === cst_BoxSet) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 5; - if(_mc_ === cst_Channel) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 6; - if(_mc_ === cst_ChannelFolderItem) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 7; - if(_mc_ === cst_CollectionFolder) - return _l$_[2] ? stag_no_args(tp_loc$3, yojson) : 8; - } - } - } - else if(848054398 === _mb_) - return nested_list_invalid_sum(tp_loc$3, yojson); - } - } - return unexpected_stag(tp_loc$3, yojson); - } - function yojson_of_type(param){ - switch(param){ - case 0: - return _hH_; - case 1: - return _hI_; - case 2: - return _hJ_; - case 3: - return _hK_; - case 4: - return _hL_; - case 5: - return _hM_; - case 6: - return _hN_; - case 7: - return _hO_; - case 8: - return _hP_; - case 9: - return _hQ_; - case 10: - return _hR_; - case 11: - return _hS_; - case 12: - return _hT_; - case 13: - return _hU_; - case 14: - return _hV_; - case 15: - return _hW_; - case 16: - return _hX_; - case 17: - return _hY_; - case 18: - return _hZ_; - case 19: - return _h0_; - case 20: - return _h1_; - case 21: - return _h2_; - case 22: - return _h3_; - case 23: - return _h4_; - case 24: - return _h5_; - case 25: - return _h6_; - case 26: - return _h7_; - case 27: - return _h8_; - case 28: - return _h9_; - case 29: - return _h__; - case 30: - return _h$_; - case 31: - return _ia_; - case 32: - return _ib_; - case 33: - return _ic_; - case 34: - return _id_; - case 35: - return _ie_; - default: return _if_; - } - } - function type_str_of_yojson(j){ - var s = to_string$6(j); - return type_of_yojson([0, 848054398, [0, [0, -976970511, s], 0]]); - } - function yojson_of_type_str(ts){ - var match = yojson_of_type(ts); - if(typeof match !== "number" && 848054398 === match[1]){ - var _l__ = match[2]; - if(_l__ && ! _l__[2]){var json = _l__[1]; return json;} - } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ig_], 1); - } - function t_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - name_field = [0, 0], - sort_name_field = [0, 0], - id_field = [0, 0], - path_field = [0, 0], - album_id_field = [0, 0], - parent_id_field = [0, 0], - server_id_field = [0, 0], - image_blur_hashes_field = [0, 0], - type_field = [0, 0], - collection_type_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1], - switch$0 = caml_string_compare(field_name, cst_ParentId); - a: - b: - { - if(0 <= switch$0) - if(0 < switch$0) - if(field_name !== cst_Path) - if(field_name !== cst_ServerId) - if(field_name !== cst_SortName){ - if(field_name !== cst_Type) break b; - if(symbol$15(type_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue = type_str_of_yojson(field_yojson); - type_field[1] = [0, fvalue]; - } - } - else if(symbol$15(sort_name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$0 = string_of_yojson(field_yojson); - sort_name_field[1] = [0, fvalue$0]; - } - else if(symbol$15(server_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$1 = string_of_yojson(field_yojson); - server_id_field[1] = [0, fvalue$1]; - } - else if(symbol$15(path_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$2 = string_of_yojson(field_yojson); - path_field[1] = [0, fvalue$2]; - } - else if(symbol$15(parent_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$3 = option_of_yojson(string_of_yojson, field_yojson); - parent_id_field[1] = [0, fvalue$3]; - } - else if(field_name !== cst_AlbumId) - if(field_name !== cst_CollectionType) - if(field_name !== cst_Id) - if(field_name !== cst_ImageBlurHashes){ - if(field_name !== cst_Name) break b; - if(symbol$15(name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$4 = string_of_yojson(field_yojson); - name_field[1] = [0, fvalue$4]; - } - } - else if(symbol$15(image_blur_hashes_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$5 = image_blur_hashes_of_yojson(field_yojson); - image_blur_hashes_field[1] = [0, fvalue$5]; - } - else if(symbol$15(id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$6 = string_of_yojson(field_yojson); - id_field[1] = [0, fvalue$6]; - } - else if(symbol$15(collection_type_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$7 = option_of_yojson(string_of_yojson, field_yojson); - collection_type_field[1] = [0, fvalue$7]; - } - else if(symbol$15(album_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$8 = string_of_yojson(field_yojson); - album_id_field[1] = [0, fvalue$8]; - } - break a; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$4, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$4, symbol$15(extra), yojson); - var - match = symbol$15(name_field), - sort_name_value = symbol$15(sort_name_field), - match$0 = symbol$15(id_field), - path_value = symbol$15(path_field), - album_id_value = symbol$15(album_id_field), - parent_id_value = symbol$15(parent_id_field), - match$1 = symbol$15(server_id_field), - match$2 = symbol$15(image_blur_hashes_field), - match$3 = symbol$15(type_field), - collection_type_value = symbol$15(collection_type_field); - if(match && match$0 && match$1 && match$2 && match$3){ - var - type_value = match$3[1], - image_blur_hashes_value = match$2[1], - server_id_value = match$1[1], - id_value = match$0[1], - name_value = match[1]; - if(collection_type_value) - var v = collection_type_value[1], v$0 = v; - else - var v$0 = 0; - return [0, - name_value, - sort_name_value, - id_value, - path_value, - album_id_value, - parent_id_value, - server_id_value, - image_blur_hashes_value, - type_value, - v$0]; - } - var - _l6_ = [0, [0, 0 === symbol$15(type_field) ? 1 : 0, _ih_], 0], - _l7_ = - [0, [0, 0 === symbol$15(image_blur_hashes_field) ? 1 : 0, _ii_], _l6_], - _l8_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _ij_], _l7_], - _l9_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _ik_], _l8_]; - return record_undefined_elements - (tp_loc$4, - yojson, - [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _il_], _l9_]); - } - return record_list_instead_atom(tp_loc$4, yojson); - } - function yojson_of_t(param){ - var - v_collection_type = param[10], - v_type = param[9], - v_image_blur_hashes = param[8], - v_server_id = param[7], - v_parent_id = param[6], - v_album_id = param[5], - v_path = param[4], - v_id = param[3], - v_sort_name = param[2], - v_name = param[1], - bnds = 0; - if(0 === v_collection_type) - var bnds$0 = bnds; - else - var - arg$8 = - function(_l5_){return yojson_of_option(yojson_of_string, _l5_);} - (v_collection_type), - bnd$3 = [0, _iv_, arg$8], - bnds$0 = [0, bnd$3, bnds]; - var - arg = yojson_of_type_str(v_type), - bnds$1 = [0, [0, _im_, arg], bnds$0], - arg$0 = yojson_of_image_blur_hashes(v_image_blur_hashes), - bnds$2 = [0, [0, _in_, arg$0], bnds$1], - arg$1 = yojson_of_string(v_server_id), - bnds$3 = [0, [0, _io_, arg$1], bnds$2]; - if(v_parent_id) - var - v = v_parent_id[1], - arg$2 = yojson_of_option(yojson_of_string, v), - bnd = [0, _ip_, arg$2], - bnds$4 = [0, bnd, bnds$3]; - else - var bnds$4 = bnds$3; - if(v_album_id) - var - v$0 = v_album_id[1], - arg$3 = yojson_of_string(v$0), - bnd$0 = [0, _iq_, arg$3], - bnds$5 = [0, bnd$0, bnds$4]; - else - var bnds$5 = bnds$4; - if(v_path) - var - v$1 = v_path[1], - arg$4 = yojson_of_string(v$1), - bnd$1 = [0, _ir_, arg$4], - bnds$6 = [0, bnd$1, bnds$5]; - else - var bnds$6 = bnds$5; - var - arg$5 = yojson_of_string(v_id), - bnds$7 = [0, [0, _is_, arg$5], bnds$6]; - if(v_sort_name) - var - v$2 = v_sort_name[1], - arg$6 = yojson_of_string(v$2), - bnd$2 = [0, _it_, arg$6], - bnds$8 = [0, bnd$2, bnds$7]; - else - var bnds$8 = bnds$7; - var - arg$7 = yojson_of_string(v_name), - bnds$9 = [0, [0, _iu_, arg$7], bnds$8]; - return [0, 963043957, bnds$9]; - } - var session_uuid = [0, 0]; - function set_session_uuid(s){session_uuid[1] = [0, s]; return;} - function authorization(token, param){ - if(token) - var t = token[1], token$0 = caml_call1(sprintf(_iw_), t); - else - var token$0 = _iz_; - var session_uuid$0 = value(session_uuid[1], _ix_); - return caml_call2(sprintf(_iy_), session_uuid$0, token$0); - } - function request$1(base_url, token, headers, Q){ - return function(params, path_params){ - var - base_uri = v$0(0, caml_jsstring_of_string(base_url)), - base_path_segments = get_ok(path_segments(base_uri)), - endpoint_path_segments = - map$1 - (function(_l4_){return caml_jsstring_of_string(_l4_);}, - caml_call1(Q[6], path_params)), - path_segments$0 = - caml_equal(base_path_segments, [0, empty$1, 0]) - ? endpoint_path_segments - : flatten([0, base_path_segments, [0, endpoint_path_segments, 0]]), - uri = with_path_segments(base_uri, path_segments$0), - uri$0 = get_ok(uri), - authorization$0 = authorization(token, 0), - headers$0 = - of_assoc - (headers, - [0, - [0, "content-type", "text/json"], - [0, - [0, - "X-Emby-Authorization", - caml_jsstring_of_string(authorization$0)], - 0]]), - method = jstr_of_method(Q[5]); - if(Q[5]) - var - body = - of_jstr - (caml_jsstring_of_string - (to_string$5(0, 0, 0, 0, caml_call1(Q[1], params)))), - url = to_jstr$0(uri$0), - url$0 = url, - init = - init$1 - ([0, body], - 0, - 0, - [0, headers$0], - 0, - 0, - [0, method], - 0, - 0, - 0, - 0, - 0, - 0); - else - var - params$0 = - of_obj - (get_ok - (decode - (caml_jsstring_of_string - (to_string$5(0, 0, 0, 0, caml_call1(Q[1], params)))))), - uri_with_params = with_query_params(uri$0, params$0), - url$1 = to_jstr$0(uri_with_params), - init$0 = - init$1(0, 0, 0, [0, headers$0], 0, 0, [0, method], 0, 0, 0, 0, 0, 0), - url$0 = url$1, - init = init$0; - return let$0 - (request$0(v$3([0, init], url$0)), - function(res){ - return let$1 - (text(res), - function(json){ - var - yojson = - from_string$0(0, 0, 0, caml_string_of_jsstring(json)); - try{var _l3_ = caml_call1(Q[4], yojson); return _l3_;} - catch(e$0){ - var e = caml_wrap_exception(e$0); - log([0, _iA_, [0, json, 0]]); - log([0, e, 0]); - throw caml_maybe_attach_backtrace(e, 0); - } - }); - });}; - } - var method = 1; - function connect(credentials){ - var - password = credentials[3], - username = credentials[2], - base_url = credentials[1], - auth = [0, username, password]; - return let$1 - (request$1 - (base_url, - 0, - 0, - [0, - yojson_of_params, - params_of_yojson, - yojson_of_response, - response_of_yojson, - method, - endpoint]) - (auth, 0), - function(auth_response){return [0, base_url, auth_response];}); - } - function tag_of(obj){ - return is_block(obj) ? [0, caml_obj_tag(obj)] : [1, obj]; - } - function Make$4(Q){ - function Start_client(P){ - var - futures = create$2(0, 64), - listeners = create$2(0, 64), - worker = create$6(0, caml_jsstring_of_string(P[1])); - function query(query){ - var - uuid = to_string$4(0, new_uuid_v4(0)), - match = create$5(0), - set = match[2], - fut = match[1]; - function set$0(jv){return set(of_jv(jv));} - var query$0 = to_jstr$2([0, uuid, query]); - post(0, worker, query$0); - add$0(futures, uuid, set$0); - return fut; - } - function listen$0(event, f){ - to_string$4(0, new_uuid_v4(0)); - function set(jv){return caml_call1(f, jv);} - add$0(listeners, tag_of(event), set); - return; - } - function on_message(ev){ - symbol$13 - (of_jstr$1(data(ev)), - function(message){ - if(0 === message[0]){ - var - match = message[1], - data = match[2], - uuid = match[1], - f = find(futures, uuid); - remove(futures, uuid); - return caml_call1(f, data); - } - var match$0 = message[1], v = match$0[2], e = match$0[1]; - function _l1_(f){return caml_call1(f, v);} - return function(_l2_){return iter(_l1_, _l2_);} - (find_all$0(listeners, tag_of(e))); - }); - return 0; - } - var _lZ_ = 0; - (function(_l0_){return listen(_lZ_, message, on_message, _l0_);}(worker)); - return [0, , , , query, listen$0]; - } - function Make_worker(W){ - var W$0 = caml_call1(W, [0]); - function on_message(ev){ - symbol$13 - (of_jstr$1(data(ev)), - function(param){ - var data = param[2], uuid = param[1]; - return let$1 - (caml_call1(W$0[1], data), - function(result){ - var data = to_jstr$2(result); - return post$0(0, to_jstr$2([0, [0, uuid, data]])); - }); - }); - return 0; - } - listen(0, message, on_message, global); - return; - } - return [0, Start_client, , Make_worker]; - } - function _iB_(_lV_){ - var _lW_ = Make$4(_lV_)[1]; - return [0, - function(_lX_){ - var _lY_ = _lW_(_lX_); - return [0, , _lY_[4], _lY_[5]]; - }]; - } - function random(size){ - var tbl = init$0(size, function(_lU_){return _lU_;}); - shuffle$0(tbl); - return [0, tbl]; - } - function of_string$2(size, param){ - return param !== cst_asc - ? param !== cst_desc ? param !== cst_random ? 0 : random(size) : 2 - : 1; - } - function of_string$3(param){ - return param !== cst_date_added ? param !== cst_name ? 0 : 1 : 0; - } - function req(kind, opt, _lT_, _lS_, param){ - if(opt) var sth = opt[1], src_views = sth; else var src_views = 0; - if(_lT_) var sth$0 = _lT_[1], sort = sth$0; else var sort = 0; - if(_lS_) var sth$1 = _lS_[1], filters = sth$1; else var filters = 0; - return [0, kind, src_views, sort, filters]; - } - function t_to_jv(encoder, t){ - return get_exn - (decode - (caml_jsstring_of_string - (to_string$5(0, 0, 0, 0, caml_call1(encoder, t))))); - } - function jv_to_t(decoder, j){ - var json = encode(j); - return [0, - caml_call1 - (decoder, from_string$0(0, 0, 0, caml_string_of_jsstring(json)))]; - } - function sorts_of_yojson(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - date_added_field = [0, 0], - views_field = [0, 0], - sort_name_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_date_added) - if(field_name !== cst_sort_name) - if(field_name !== cst_views){ - if(symbol$15(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$15(extra)]; - } - else if(symbol$15(views_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue = list_of_yojson(string_of_yojson, field_yojson); - views_field[1] = [0, fvalue]; - } - else if(symbol$15(sort_name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$0 = string_of_yojson(field_yojson); - sort_name_field[1] = [0, fvalue$0]; - } - else if(symbol$15(date_added_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$1 = int_of_yojson(field_yojson); - date_added_field[1] = [0, fvalue$1]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$5, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$5, symbol$15(extra), yojson); - var - match = symbol$15(date_added_field), - match$0 = symbol$15(views_field), - match$1 = symbol$15(sort_name_field); - if(match && match$0 && match$1){ - var - sort_name_value = match$1[1], - views_value = match$0[1], - date_added_value = match[1]; - return [0, date_added_value, views_value, sort_name_value]; - } - var - _lQ_ = [0, [0, 0 === symbol$15(sort_name_field) ? 1 : 0, _iC_], 0], - _lR_ = [0, [0, 0 === symbol$15(views_field) ? 1 : 0, _iD_], _lQ_]; - return record_undefined_elements - (tp_loc$5, - yojson, - [0, [0, 0 === symbol$15(date_added_field) ? 1 : 0, _iE_], _lR_]); - } - return record_list_instead_atom(tp_loc$5, yojson); - } - function yojson_of_sorts(param){ - var - v_sort_name = param[3], - v_views = param[2], - v_date_added = param[1], - arg = yojson_of_string(v_sort_name), - bnds = [0, [0, _iF_, arg], 0], - arg$0 = yojson_of_list(yojson_of_string, v_views), - bnds$0 = [0, [0, _iG_, arg$0], bnds], - arg$1 = yojson_of_int(v_date_added), - bnds$1 = [0, [0, _iH_, arg$1], bnds$0]; - return [0, 963043957, bnds$1]; - } - function t_of_yojson$0(yojson){ - if(typeof yojson !== "number" && 963043957 === yojson[1]){ - var - field_yojsons = yojson[2], - sorts_field = [0, 0], - item_field = [0, 0], - duplicates = [0, 0], - extra = [0, 0], - iter = - function(param){ - var param$0 = param; - for(;;){ - if(! param$0) return; - var - tail = param$0[2], - match = param$0[1], - field_yojson = match[2], - field_name = match[1]; - if(field_name !== cst_item) - if(field_name !== cst_sorts){ - if(symbol$15(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$15(extra)]; - } - else if(symbol$15(sorts_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue = sorts_of_yojson(field_yojson); - sorts_field[1] = [0, fvalue]; - } - else if(symbol$15(item_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; - else{ - var fvalue$0 = t_of_yojson(field_yojson); - item_field[1] = [0, fvalue$0]; - } - param$0 = tail; - } - }; - iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$6, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$6, symbol$15(extra), yojson); - var match = symbol$15(sorts_field), match$0 = symbol$15(item_field); - if(match && match$0){ - var item_value = match$0[1], sorts_value = match[1]; - return [0, sorts_value, item_value]; - } - var _lP_ = [0, [0, 0 === symbol$15(item_field) ? 1 : 0, _iI_], 0]; - return record_undefined_elements - (tp_loc$6, - yojson, - [0, [0, 0 === symbol$15(sorts_field) ? 1 : 0, _iJ_], _lP_]); - } - return record_list_instead_atom(tp_loc$6, yojson); - } - function yojson_of_t$0(param){ - var - v_item = param[2], - v_sorts = param[1], - arg = yojson_of_t(v_item), - bnds = [0, [0, _iK_, arg], 0], - arg$0 = yojson_of_sorts(v_sorts), - bnds$0 = [0, [0, _iL_, arg$0], bnds]; - return [0, 963043957, bnds$0]; - } - function compare$2(t$0, t){return compare$0(t$0[1][3], t[1][3]);} - function to_jv$0(param){ - var - views = param[3], - sort_name = param[2], - id = param[1], - id$0 = _d__(id), - sort_name$0 = _d__(sort_name), - views$0 = of_list$1(_d__, views); - return caml_js_from_array([0, id$0, sort_name$0, views$0]); - } - function of_jv$0(j){ - var match = caml_js_to_array(j), len = match.length - 1; - if(3 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _iM_], 1); - var - id = match[1], - sort_name = match[2], - views = match[3], - id$0 = value$0(id), - sort_name$0 = value$0(sort_name), - views$0 = to_list$1(value$0, views); - return [0, id$0, sort_name$0, views$0]; - } - var path$0 = [1, [0, _iP_, _iO_, _iN_]]; - function to_jv$1(k){return k;} - function of_jv$1(j){return j;} - function to_jv$2(k){return _d__(k);} - function of_jv$2(j){return value$0(j);} - function to_jv$3(k){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _iQ_], 1); - } - function of_jv$3(j){ - var match = caml_js_to_array(j), len = match.length - 1; - if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _iR_], 1); - var type = match[1], views = match[2], _lO_ = to_list$1(value$0, views); - return [0, value$0(type), _lO_]; - } - var path$3 = [1, [0, _iT_, _iS_]]; - function to_jv$4(t){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _iU_], 1); - } - function of_jv$4(j){ - var match = caml_js_to_array(j), len = match.length - 1; - if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _iV_], 1); - var - collection_type = match[1], - sort_name = match[2], - _lN_ = value$0(sort_name); - return [0, value$0(collection_type), _lN_]; - } - var path$4 = [1, [0, _iX_, _iW_]]; - function to_jv$5(t){return t_to_jv(yojson_of_t$0, t);} - function of_jv$5(j){return get_exn(jv_to_t(t_of_yojson$0, j));} - function get_key(t){return [0, t[2][3], t[1][3], t[1][2]];} - var - _iY_ = - [0, [0, path$0, to_jv$0, of_jv$0], name$3, to_jv$5, of_jv$5, get_key]; - function _iZ_(_lL_, _lM_){return _e__(undef, _lL_, _lM_);} - (function(_lK_){return _iZ_(_iY_, _lK_);}([0, path$1, to_jv$1, of_jv$1])); - var - _i0_ = - [0, [0, path$0, to_jv$0, of_jv$0], name$3, to_jv$5, of_jv$5, get_key]; - function _i1_(_lI_, _lJ_){return _e__(undef, _lI_, _lJ_);} - (function(_lH_){return _i1_(_i0_, _lH_);}([0, path$3, to_jv$3, of_jv$3])); - var - _i2_ = - [0, [0, path$0, to_jv$0, of_jv$0], name$3, to_jv$5, of_jv$5, get_key]; - function _i3_(_lF_, _lG_){return _e__(undef, _lF_, _lG_);} - (function(_lE_){return _i3_(_i2_, _lE_);}([0, path$2, to_jv$2, of_jv$2])); - var - _i4_ = - [0, [0, path$0, to_jv$0, of_jv$0], name$3, to_jv$5, of_jv$5, get_key]; - function _i5_(_lC_, _lD_){return _e__(undef, _lC_, _lD_);} - (function(_lB_){return _i5_(_i4_, _lB_);}([0, path$4, to_jv$4, of_jv$4])); - function status_to_string(param){ - if(typeof param === "number") - switch(param){ - case 0: - return _i6_; - case 1: - return _i7_; - default: return _i8_; - } - if(0 === param[0]){ - var - last_source_item_key = param[3], - first_unfetched_key = param[2], - first_missing_key = param[1]; - return caml_call3 - (sprintf$1(_i9_), - last_source_item_key, - first_missing_key, - first_unfetched_key); - } - var first_unfetched_key$0 = param[1]; - return caml_call2 - (sprintf$1(_i__), first_unfetched_key$0, first_unfetched_key$0); - } - function pp_progress(fmt, param){ - var remaining = param[2], total = param[1]; - return caml_call2(fprintf$0(fmt)(_i$_), remaining, total); - } - function pp_report(fmt, param){ - var - sync_progress = param[2], - status = param[1], - status$0 = status_to_string(status), - _ly_ = 0; - return caml_call3 - (fprintf$0(fmt)(_ja_), - status$0, - function(_lz_, _lA_){ - return pp_print_option(_ly_, pp_progress, _lz_, _lA_); - }, - sync_progress); - } - var - Queries = [0], - include$0 = _iB_(Queries), - Start_client = include$0[1], - _jb_ = [0, compare$0]; - function MMap(_lx_){return _e0_(_jb_, _lx_);} - MMap([0, compare$2]); - var active_layout = var$0(0), active = var$0(0); - function get$7(lang, string){ - return function(_lw_){return value(_lw_, string);} - (assoc_opt([0, lang, string], strings)); - } - var Config = [0, active, get$7], set$1 = make$6(Config)[1]; - function to_view(view){ - return map3 - (function(request, start_offset, item_count){ - return [0, request, start_offset, item_count]; - }, - view[1], - view[3], - view[2]); - } - var - include$1 = Start_client([0, url$0]), - query = include$1[2], - listen$1 = include$1[3], - servers_status = var$0([0, _jc_, initial_report]); - listen$1 - (0, - function(param){ - var report = param[2], id = param[1]; - log([0, caml_call3(asprintf(_jd_), id, pp_report, report), 0]); - return symbol$1(servers_status, [0, id, report]); - }); - function update$1(opt, var$0, next){ - if(opt) var sth = opt[1], eq = sth; else var eq = poly; - var current = peek(var$0), _lv_ = 1 - caml_call2(eq, current, next); - return _lv_ ? symbol$1(var$0, next) : _lv_; - } - var memo = create$2(0, 64); - function get_view_item_count(v){ - var item_count = get_or_add(memo, function(param){return var$0(0);}, v); - await$1 - (query([5, v]), - function(error){ - if(0 === error[0]){ - var v = error[1]; - debug([0, _jf_, [0, v[3], [0, _je_, [0, v[2], 0]]]]); - return update$1(0, item_count, v[3]); - } - debug([0, _jg_, [0, error, 0]]); - return update$1(0, item_count, 0); - }); - return get$1(item_count); - } - var connexions = var$1(_jh_, empty$0); - function connect$0(param){ - var - match = param[2], - refresh = match[3], - status = match[2], - connexion = match[1], - server_id = param[1]; - listen$1 - (0, - function(param){ - var - report = param[2], - id = param[1], - previous_status = peek(status), - _lr_ = symbol$0(server_id, id); - if(_lr_){ - symbol$1(status, report); - var _ls_ = previous_status[2], _lt_ = report[2]; - if(_ls_){ - var remaining = _ls_[1][2]; - if(! _lt_) return symbol$1(refresh, 0); - var remaining$0 = _lt_[1][2]; - if(symbol$4(remaining, remaining$0)) return symbol$1(refresh, 0); - } - var _lu_ = 0; - } - else - var _lu_ = _lr_; - return _lu_; - }); - query([1, [0, [0, server_id, connexion], 0]]); - return; - } - var - servers_with_status = - map$3 - (function(param){ - var - connexion = param[2], - id = param[1], - status = var$0(initial_report), - refresh = var$0(0), - server = [0, id, [0, connexion, status, refresh]]; - connect$0(server); - return server; - }, - get$1(connexions)); - function new_connexion(base_url, username, password){ - return let$1 - (connect([0, base_url, username, password]), - function(connexion){ - var server_id = connexion[2][3]; - return update - (function(servers){ - return concat$0(servers, element([0, server_id, connexion])); - }, - connexions); - }); - } - var - url_field = - field$0 - (pure(text_input(0, 0, 0, 0, _jj_, 0, 0, _ji_)), - function(t, v){return [0, v, t[2], t[3]];}), - username_field = - field$0 - (pure(text_input(0, 0, 0, 0, _jl_, 0, 0, _jk_)), - function(t, v){return [0, t[1], v, t[3]];}), - password_field = - field$0 - (pure(password_input(0, 0, 0, 0, _jm_, 0, 0, 0)), - function(t, v){return [0, t[1], t[2], v];}), - submit$1 = - field$0(pure(submit$0(0, 0, 0, _jn_)), function(t, v){return t;}), - fields$0 = - return$0 - (of_list$0 - ([0, - url_field, - [0, username_field, [0, password_field, [0, submit$1, 0]]]])), - Connect_form = [0, default$1, fields$0]; - function ui_form(param){ - return create$8(0, 0, 0, Connect_form) - (function(t){ - log([0, _jo_, [0, t, 0]]); - var _lp_ = t[1]; - a: - if(typeof _lp_ !== "number" && 1 !== _lp_[0]){ - var _lq_ = t[2], url = _lp_[1]; - if(typeof _lq_ !== "number" && 1 !== _lq_[0]){ - var username = _lq_[1], match = t[3]; - if(typeof match !== "number" && 1 !== match[0]){ - var password = match[1]; - log([0, _jr_, [0, url, [0, username, 0]]]); - new_connexion(url, username, password); - return 0; - } - log([0, _jp_, [0, url, [0, username, 0]]]); - new_connexion(url, username, _jq_); - return 0; - } - break a; - } - return 0; - }); - } - function ui_status(server){ - var - status = - func - (get$1(server[2]), - function(param){ - var sync_progress = param[2], status = param[1]; - if(typeof status === "number" && 1 === status && ! sync_progress) - return txt(0, _ju_); - if(! sync_progress) return txt(0, _jt_); - var - match = sync_progress[1], - remaining = match[2], - total = match[1]; - return txt - (0, caml_call2(sprintf(_js_), total - remaining | 0, total)); - }); - return status; - } - function fut_to_lwd(init, f){ - var v = var$0(init); - await$1(f, function(_lo_){return symbol$1(v, _lo_);}); - return get$1(v); - } - function seq_share(cmp, prev, next){ - function aux(prev, next){ - var match = view(prev), match$0 = view(next); - a: - if(typeof match === "number"){ - if(typeof match$0 === "number") return [0, prev, 1]; - } - else if(0 === match[0]){ - var i = match[1]; - if(typeof match$0 !== "number" && 1 !== match$0[0]){ - var i$0 = match$0[1]; - if(caml_call2(cmp, i, i$0)) return [0, prev, 1]; - break a; - } - } - else{ - var r = match[2], l = match[1]; - if(typeof match$0 !== "number" && 0 !== match$0[0]){ - var - r$0 = match$0[2], - l$0 = match$0[1], - match$1 = aux(l, l$0), - l_same = match$1[2], - l$1 = match$1[1], - match$2 = aux(r, r$0), - r_same = match$2[2], - r$1 = match$2[1]; - if(l_same && r_same) return [0, prev, 1]; - return [0, concat$0(l$1, r$1), 0]; - } - } - return [0, next, 0]; - } - return aux(prev, next)[1]; - } - function lib_diff(prev, next){ - return seq_share - (function(i$0, i){return symbol$0(i$0[2][3], i[2][3]);}, - prev, - next); - } - var - servers_libraries = - map$3 - (function(param){ - var refresh = param[2][3], server_id = param[1]; - log(_jv_); - var - previous_value = [0, 0], - v = - bind - (get$1(refresh), - function(param){ - function _lf_(_ln_){return get_or(_ln_, 0);} - function _lg_(l){log([0, _jw_, [0, l, 0]]); return l;} - var - _lh_ = - function(_lk_){return map$4(of_list$0, _lk_);} - (function(_ll_){return map$4(_lg_, _ll_);} - (function(_lm_){return map$4(_lf_, _lm_);} - (query([4, server_id])))), - _li_ = value$3(previous_value[1], empty$0); - return function(_lj_){return fut_to_lwd(_li_, _lj_);}(_lh_); - }), - views = - func - (v, - function(v){ - var - new_value = - map_or - (v, - function(prev){return lib_diff(prev, v);}, - previous_value[1]); - previous_value[1] = [0, new_value]; - return new_value; - }); - return [0, server_id, views]; - }, - servers_with_status); - function ui(param){ - var - statuses = - map$3 - (function(param){var server = param[2]; return ui_status(server);}, - servers_with_status), - ui_form$0 = - func - (servers_with_status, - function(s){ - return typeof view(s) === "number" - ? element(div$1(0, 0, 0, 0, [0, [0, 82, ui_form(0)], 0])) - : empty$0; - }), - _le_ = [0, [0, 83, lift(statuses)], 0]; - return div$1(0, 0, 0, 0, [0, [0, 83, lift(ui_form$0)], _le_]); - } - var _jx_ = var$0(0), _jy_ = var$0(0), now_playing = var$0(0); - function audio_url(server, item_id){ - var _lc_ = server[2][2], _ld_ = server[1]; - return caml_call3(sprintf(_jz_), _ld_, item_id, _lc_); - } - function Playback_controller(P){ - function set_play_url(playlist, current_index){ - if(! playlist) return ok(0); - var playlist$0 = playlist[1]; - return let$1 - (let$1 - (caml_call2(P[1], playlist$0, [0, current_index]), - function(result){ - var len = result.length - 1; - if(1 === len){ - var _la_ = result[1]; - if(_la_){ - var - item = _la_[1][2], - server_id = item[7], - album_id = item[5], - id = item[3], - name = item[1], - servers = to_list$0(peek(connexions)), - connexion = assq(server_id, servers), - url = audio_url(connexion, id); - log([0, _jA_, [0, name, [0, _d__(url), 0]]]); - var - session = of_navigator(navigator), - image_id = value$3(album_id, id), - _lb_ = connexion[1], - img_src = caml_call2(sprintf(_jB_), _lb_, image_id), - artwork = [0, [0, img_src, _jD_, _jC_], 0]; - set_metadata(session, [0, name, artist, album, artwork]); - return [0, item, url]; - } - } - throw caml_maybe_attach_backtrace(Not_found, 1); - }), - function(item){return symbol$1(now_playing, [0, item]);}); - } - function reset_playlist(playlist){ - set_play_url([0, playlist], 0); - symbol$1(_jy_, [0, playlist]); - return symbol$1(_jx_, 0); - } - function make(param){ - var - _k2_ = [0, v$1("preload", "auto"), 0], - _k3_ = [0, v$1("autoplay", cst_true), _k2_], - audio_elt = audio$0(0, [0, [0, v$1("controls", cst_true), _k3_]], 0); - function set_src(url){ - return set_at(cst_src, [0, caml_jsstring_of_string(url)], audio_elt); - } - var root = observe(0, get$1(now_playing)); - set_on_invalidate - (root, - function(param){ - var match = quick_sample(root); - if(! match) return 0; - var url = match[1][2]; - return set_src(url); - }); - quick_sample(root); - function next(param){ - var - playlist = peek(_jy_), - current_index = peek(_jx_), - next_index = current_index + 1 | 0; - set_play_url(playlist, next_index); - return symbol$1(_jx_, next_index); - } - function prev(param){ - var - playlist = peek(_jy_), - current_index = peek(_jx_), - next_index = max$0(0, current_index - 1 | 0); - set_play_url(playlist, next_index); - return symbol$1(_jx_, next_index); - } - var session = of_navigator(navigator); - function set_position_state$0(param){ - var - duration = prop(float$0(cst_duration), audio_elt), - _k$_ = 1 - is_nan(duration); - if(! _k$_) return _k$_; - var - playback_rate = prop(float$0(cst_playbackRate), audio_elt), - position = prop(float$0("currentTime"), audio_elt); - return set_position_state - ([0, duration], [0, playback_rate], [0, position], session); - } - set_action_handler(session, next_track, next); - set_action_handler(session, previous_track, prev); - function on_error(ev){ - stop_immediate_propagation(ev); - prevent_default(ev); - log([0, _jE_, [0, ev, 0]]); - return next(0); - } - function next$0(param){return next(0);} - listen(0, ended, next$0, audio_elt); - listen(0, error, on_error, audio_elt); - listen - (0, play, function(param){return set_position_state$0(0);}, audio_elt); - var - btn_next = - v$6(0, 0, [0, [0, [0, 80, handler(0, click, next$0)], 0]], _jF_), - style$0 = - func - (get$1(now_playing), - function(np){ - if(np) - var - match = np[1][1], - server_id = match[7], - album_id = match[5], - id = match[3], - image_id = value$3(album_id, id), - servers = to_list$0(peek(connexions)), - connexion = assq(server_id, servers), - _k__ = connexion[1], - src = caml_call2(sprintf(_jG_), _k__, image_id); - else - var src = _jI_; - return caml_call1(sprintf(_jH_), src); - }), - _k4_ = [0, 82, style$0], - at = - function(_k9_){return add$1(style, _k4_, _k9_);} - (add$1(class$0, _jJ_, 0)), - on_click = - handler - (0, - click, - function(param){ - var _k7_ = peek(active_layout) ? 0 : 1; - return function(_k8_){return symbol$1(active_layout, _k8_);}(_k7_); - }), - track_cover = div$1(0, [0, at], [0, [0, [0, 80, on_click], 0]], 0, 0), - at$0 = add$1(class$0, _jK_, 0), - txt$0 = - func - (get$1(now_playing), - function(param){ - if(! param) return txt(0, _jL_); - var name = param[1][1][1]; - return txt(0, name); - }), - title = span$1(0, 0, 0, 0, [0, [0, 82, txt$0], 0]), - track_details = div$1(0, [0, at$0], 0, 0, [0, [0, 82, title], 0]), - at$1 = - function(_k6_){return add$1(class$0, _jN_, _k6_);} - (add$1(class$0, _jM_, 0)), - now_playing$0 = - div$1 - (0, - [0, at$1], - 0, - 0, - [0, [0, 82, track_cover], [0, [0, 82, track_details], 0]]), - at$2 = - function(_k5_){return add$1(class$0, _jP_, _k5_);} - (add$1(class$0, _jO_, 0)); - return div$1 - (0, - [0, at$2], - 0, - 0, - [0, - [0, 82, now_playing$0], - [0, [0, 80, audio_elt], [0, [0, 82, btn_next], 0]]]); - } - return [0, , reset_playlist, make]; - } - var base = classes(_jQ_); - function at(param){return param ? classes(_jR_) : classes(_jS_);} - function make$12(on_click){ - var - on_click$0 = handler$0(0, click, on_click), - _kY_ = [0, at], - _kZ_ = [0, [0, [0, 80, on_click$0], 0]]; - return function(_k1_, _k0_){ - return caml_call1(two_state([0, base])(_k1_, _k0_, _kY_), _kZ_);}; - } - classes(_jT_); - function columns(param){ - var - _kT_ = - function(_kX_){return v$7(_jW_, _jV_, _kX_);} - ([0, [0, 80, txt(0, _jU_)], 0]), - _kU_ = - function(_kW_){return v$7(_jZ_, _jY_, _kW_);} - ([0, [0, 80, txt(0, _jX_)], 0]); - return [0, - function(_kV_){return v$7(_j2_, _j1_, _kV_);} - ([0, [0, 80, txt(0, _j0_)], 0]), - _kU_, - _kT_]; - } - function make$13(reset_playlist, fetch, scroll_target, view){ - var - _kI_ = view[4], - ranged = - map2 - (to_view(view), - _kI_, - function(view, order){return [0, view, 0, 0, order];}); - function img_url(server_id, item_id){ - var servers = to_list$0(peek(connexions)); - try{ - var - connexion = assq(server_id, servers), - _kQ_ = connexion[1], - _kR_ = caml_call2(sprintf(_j4_), _kQ_, item_id), - url = _kR_; - } - catch(_kS_){ - var _kP_ = caml_wrap_exception(_kS_); - if(_kP_ !== Not_found) throw caml_maybe_attach_backtrace(_kP_, 0); - var url = _j3_; - } - return src$0(caml_jsstring_of_string(url)); - } - function render(ranged, start_index, param){ - var - match = param[2], - image_blur_hashes = match[8], - server_id = match[7], - album_id = match[5], - id = match[3], - name = match[1]; - function play_from(ranged){ - return func - (ranged, - function(ranged, param){ - var _kO_ = ranged[1]; - caml_call1 - (reset_playlist, - [0, - [0, _kO_[1], ranged[1][2] + start_index | 0, _kO_[3]], - ranged[2], - ranged[3], - ranged[4]]); - return 0; - }); - } - var - play_on_click = - func(play_from(ranged), function(cb){return handler(0, click, cb);}); - a: - { - if(image_blur_hashes[1] && album_id){ - var - id$0 = album_id[1], - _kL_ = return$0(img_url(server_id, id$0)), - img_url$0 = _kL_; - break a; - } - var img_url$0 = return$0(src$0(cst_track_png)); - } - var - status = - func - (get$1(now_playing), - function(param){ - if(param){ - var item_id = param[1][1][3]; - if(symbol$0(item_id, id)){ - var _kN_ = [0, txt(0, _j5_), 0]; - return div$0(0, [0, [0, class$1("playing"), 0]], _kN_); - } - } - return div$0 - (0, 0, [0, txt(0, string_of_int(start_index + 1 | 0)), 0]); - }), - _kM_ = - [0, - [0, 80, div$0(0, 0, [0, span$0(0, 0, [0, txt(0, name), 0]), 0])], - 0]; - return [0, - [0, 82, status], - [0, - [0, - 82, - div$1 - (0, - 0, - [0, [0, [0, 82, play_on_click], 0]], - 0, - [0, - [0, - 82, - img$0 - (0, - [0, [0, [0, 82, img_url$0], [0, [0, 80, width$0(50)], 0]]], - 0, - 0, - 0)], - 0])], - _kM_]]; - } - function placeholder(i){return 0;} - var - ui_table = [0, [0, columns(0)], _j6_], - total_items = view[2], - fetch$0 = - func(ranged, function(ranged, i){return caml_call2(fetch, ranged, i);}), - render$0 = pure(function(_kJ_, _kK_){return render(ranged, _kJ_, _kK_);}), - data_source = [0, total_items, fetch$0, render$0]; - return make$11(ui_table, [0, placeholder], scroll_target)(data_source); - } - function make_now_playing(reset_playlist, fetch, view){ - var scroll_target = get$1(_jx_); - return make$13(reset_playlist, fetch, [0, scroll_target], view); - } - var - session_uuid$0 = - var_f(_j7_, function(param){return to_string$4(0, new_uuid_v4(0));}), - uuid = peek(session_uuid$0); - set_session_uuid(uuid); - query([0, peek(session_uuid$0)]); - function fetch$1(ranged_view, i){ - return query([6, ranged_view[1], ranged_view[4], i]); - } - var P = Playback_controller([0, fetch$1]), playlist = var$1(_j8_, 0); - function on_click(param, _kH_){ - symbol$1(playlist, peek(playlist) + 1 | 0); - set$1(1); - return 1; - } - caml_call1 - (make$12(on_click)(0, 0), - function(param){ - return [0, - [0, - 82, - func - (get$1(playlist), - function(pl){ - return txt(0, symbol_concat(_j9_, string_of_int(pl))); - })], - 0]; - }); - var - _j__ = [0, [0, 82, ui(0)], 0], - _ka_ = [0, [0, 80, h1$0(0, 0, [0, txt(0, _j$_), 0])], _j__], - status = - div$1(0, [0, [0, [0, 80, style$0(cst_grid_column_1_1)], 0]], 0, 0, _ka_), - player = P[3].call(null, 0), - player_ui = - div$1 - (0, - [0, [0, [0, 80, style$0(cst_grid_column_1_1)], 0]], - 0, - 0, - [0, [0, 82, player], 0]), - f_search = make$8(0, 0, _kb_), - options = pure(of_list$0(_kc_)), - f_sort = make$9(0, 0, _kd_)(options), - options$0 = pure(of_list$0(_ke_)), - f_order = make$9(0, 0, _kf_)(options$0), - f_sort_order = pair(f_sort[3], f_order[3]), - choices = - fold_monoid - (function(param){ - var l = param[2]; - return map$3 - (function(l){ - var _kG_ = [0, [0, 80, txt(0, l[2][1])], 0]; - return [0, l[2][3], _kG_, 1]; - }, - l); - }, - [0, - return$0(empty$0), - function(_kB_){ - function _kC_(_kE_, _kF_){return map2(_kB_, _kE_, _kF_);} - return function(_kD_){return _kC_(_kD_, concat$0);}; - }], - servers_libraries), - f_libraries = make$10([0, _kg_, join(choices)]), - filters = - div$1 - (0, - 0, - 0, - 0, - [0, - [0, 82, f_sort[1]], - [0, - [0, 82, f_order[1]], - [0, [0, 82, f_search[1]], [0, [0, 82, f_libraries[1]], 0]]]]), - f_value = f_libraries[2], - previous_value = [0, 0], - request$2 = - map3 - (function(l, t, param){ - var - s = param[1], - filters = symbol$10(function(s){return [0, [0, s], 0];}, t), - _kA_ = [0, _d__(s), 0]; - log([0, _ki_, [0, of_option(_d__(_kh_), _d__, t), _kA_]]); - var - sort = of_string$3(s), - new_view = req(0, [0, [0, to_list$0(l)]], [0, sort], filters, 0); - return map_or - (new_view, - function(old){ - return poly(old, new_view) - ? old - : (previous_value[1] = [0, new_view], new_view); - }, - previous_value[1]); - }, - f_value, - f_search[3], - f_sort_order), - item_count = - func(request$2, function(req){return get_view_item_count(req);}), - item_count$0 = join(item_count), - order = - map2 - (item_count$0, - f_sort_order, - function(item_count, param){ - var order = param[2], order$0 = of_string$2(item_count, order); - return order$0; - }), - main_view = [0, request$2, item_count$0, pure(0), order], - main_list = make$13(P[2], fetch$1, 0, main_view), - playlist$0 = - func - (get$1(_jy_), - function(param){ - if(! param) return span$1(0, 0, 0, 0, [0, [0, 80, txt(0, _kj_)], 0]); - var - playlist = param[1], - _kx_ = pure(playlist[4]), - _ky_ = pure(playlist[1][2]), - _kz_ = pure(playlist[1][3]), - view = [0, pure(playlist[1][1]), _kz_, _ky_, _kx_]; - return make_now_playing(P[2], fetch$1, view); - }), - now_playing$0 = join(playlist$0), - display_none = - func - (get$1(active_layout), - function(param){return param ? void$0 : class$1("display-none");}), - style$3 = - func - (get$1(now_playing), - function(np){ - if(np) - var - match = np[1][1], - server_id = match[7], - album_id = match[5], - id = match[3], - image_id = value$3(album_id, id), - servers = to_list$0(peek(connexions)), - connexion = assq(server_id, servers), - _kw_ = connexion[1], - src = caml_call2(sprintf(_kk_), _kw_, image_id); - else - var src = _km_; - return style$0 - (caml_jsstring_of_string(caml_call1(sprintf(_kl_), src))); - }), - at$0 = [0, [0, 82, display_none], [0, [0, 80, class$1("big-cover")], 0]], - big_cover = - div$1 - (0, - [0, at$0], - 0, - 0, - [0, [0, 82, div$1(0, [0, [0, [0, 82, style$3], 0]], 0, 0, 0)], 0]), - _kn_ = - [0, - [0, - 82, - div$1 - (0, - [0, [0, [0, 80, class$1("playlist")], 0]], - 0, - 0, - [0, [0, 82, now_playing$0], 0])], - [0, [0, 82, player_ui], 0]], - _ko_ = - [0, - [0, 82, big_cover], - [0, - [0, 82, filters], - [0, [0, 82, div$1(0, 0, 0, 0, [0, [0, 82, main_list], 0])], 0]]], - _kp_ = - [0, - [0, 82, status], - [0, - [0, - 82, - div$1(0, [0, [0, [0, 80, class$1("item-list")], 0]], 0, 0, _ko_)], - _kn_]], - app = - div$1 - (0, - [0, function(_kv_){return to_at$0(_kq_, _kv_);}(classes(0))], - 0, - 0, - _kp_), - is_storage_persistent = persist(manager(navigator)); - function on_load(param){ - log([0, _kr_, [0, is_storage_persistent, 0]]); - var app$0 = observe(0, app); - function on_invalidate(param){ - request_animation_frame(function(param){quick_sample(app$0); return 0;}); - return 0; - } - var _ku_ = [0, quick_sample(app$0), 0]; - append_children(body(global_document), _ku_); - return set_on_invalidate(app$0, on_invalidate); - } - listen(0, dom_content_loaded, on_load, as_target(window)); - do_at_exit(0); - return; - } - (globalThis)); - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtYWluLmJjLmpzIiwic291cmNlUm9vdCI6IiIsIm5hbWVzIjpbImNhbWxfYXJyYXlfYmxpdCIsImExIiwiaTEiLCJhMiIsImkyIiwibGVuIiwiaiIsImNhbWxfYXJyYXlfc3ViIiwiYSIsImkiLCJBcnJheSIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImYiLCJTdHJpbmciLCJudWxsIiwicyIsIk1hdGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJVaW50OEFycmF5IiwiYiIsImwiLCJjYW1sX2JsaXRfYnl0ZXMiLCJzMSIsInMyIiwiYzEiLCJjMiIsImNhbWxfc3RyX3JlcGVhdCIsIm4iLCJyIiwiY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJ0IiwiYyIsInYiLCJNbEJ5dGVzIiwidGFnIiwiY29udGVudHMiLCJsZW5ndGgiLCJ0aGlzIiwiY29udGVudCIsImNhbWxfYnl0ZXNfb2ZfanNieXRlcyIsImNhbWxfanNieXRlc19vZl9zdHJpbmciLCJ4IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2JsaXRfc3RyaW5nIiwiZCIsImUiLCJqc29vX3N5c19nZXRlbnYiLCJwcm9jZXNzIiwiZ2xvYmFsVGhpcyIsInVuZGVmaW5lZCIsImNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnIiwiY2FtbF9nbG9iYWxfZGF0YSIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3JhaXNlX3dpdGhfYXJnIiwiYXJnIiwiY2FtbF9zdHJpbmdfb2ZfanNieXRlcyIsImNhbWxfcmFpc2Vfd2l0aF9zdHJpbmciLCJtc2ciLCJjYW1sX2ludmFsaWRfYXJndW1lbnQiLCJjYW1sX2J5dGVzX2JvdW5kX2Vycm9yIiwiY2FtbF9ieXRlc191bnNhZmVfZ2V0IiwiY2FtbF9ieXRlc19nZXQiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY2FsbF9nZW4iLCJhcmdzIiwiYXJnc0xlbiIsImciLCJuYXJncyIsInkiLCJleHRyYV9hcmdzIiwiYXJndW1lbnRzIiwiY2FtbF9hcnJheV9ib3VuZF9lcnJvciIsImNhbWxfY2hlY2tfYm91bmQiLCJhcnJheSIsImluZGV4IiwiY2FtbF9jbGFzc2lmeV9mbG9hdCIsImlzRmluaXRlIiwiaXNOYU4iLCJjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWciLCJsb2cyX29rIiwianNvb19mbG9vcl9sb2cyIiwiSW5maW5pdHkiLCJjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQiLCJmbG9hdDMyYSIsIkZsb2F0MzJBcnJheSIsImludDMyYSIsIkludDMyQXJyYXkiLCJjYW1sX2ludDY0X29mZnNldCIsImNhbWxfcmFpc2VfY29uc3RhbnQiLCJjYW1sX3JhaXNlX3plcm9fZGl2aWRlIiwiTWxJbnQ2NCIsImxvIiwibWkiLCJoaSIsInhoaSIsImgiLCJzaWduIiwib2Zmc2V0IiwibW9kdWx1cyIsImRpdmlzb3IiLCJxdW90aWVudCIsInEiLCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSIsImNhbWxfaW50NjRfYml0c19vZl9mbG9hdCIsImV4cCIsImsiLCJyMyIsInIyIiwicjEiLCJjYW1sX2ludDY0X3RvX2J5dGVzIiwiY2FtbF9iYV9zZXJpYWxpemUiLCJ3cml0ZXIiLCJiYSIsInN6IiwiY29tcGxleCIsImNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQiLCJraW5kIiwiY2FtbF9iYV9jcmVhdGVfYnVmZmVyIiwic2l6ZSIsInZpZXciLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiVWludDE2QXJyYXkiLCJkYXRhIiwiY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIiwiY2FtbF9pbnQ2NF9vZl9ieXRlcyIsImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyIsIk5hTiIsInJlcyIsImNhbWxfYmFfZ2V0X3NpemUiLCJkaW1zIiwibl9kaW1zIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkiLCJjYW1sX2ludDY0X2hpMzIiLCJjYW1sX2ludDY0X2xvMzIiLCJjYW1sX2JhX2N1c3RvbV9uYW1lIiwiTWxfQmlnYXJyYXkiLCJsYXlvdXQiLCJidWZmZXIiLCJvZnMiLCJpbSIsInJlIiwidG90YWwiLCJrMSIsImsyIiwiTWxfQmlnYXJyYXlfY18xXzEiLCJjYW1sX2JhX2NyZWF0ZV91bnNhZmUiLCJzaXplX3Blcl9lbGVtZW50IiwiY2FtbF9mYWlsd2l0aCIsImNhbWxfYmFfZGVzZXJpYWxpemUiLCJyZWFkZXIiLCJuYW1lIiwibnVtX2RpbXMiLCJzaXplX2RpbSIsInNpemVfZGltX2hpIiwic2l6ZV9kaW1fbG8iLCJzaXh0eSIsImludDY0IiwiY2FtbF9iYV9jb21wYXJlIiwiY2FtbF9tdWwiLCJjYW1sX2hhc2hfbWl4X2ludCIsImNhbWxfaGFzaF9taXhfaW50NjQiLCJjYW1sX2hhc2hfbWl4X2Zsb2F0IiwidjAiLCJjYW1sX2JhX2hhc2giLCJudW1fZWx0cyIsInciLCJjYW1sX2ludDMyX3VubWFyc2hhbCIsImNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCIsImNhbWxfaW50NjRfdW5tYXJzaGFsIiwiY2FtbF9pbnQ2NF9tYXJzaGFsIiwic2l6ZXMiLCJjYW1sX2ludDY0X2NvbXBhcmUiLCJjYW1sX2ludDY0X2hhc2giLCJjYW1sX2N1c3RvbV9vcHMiLCJjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20iLCJjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20iLCJudW0iLCJjdXN0b20iLCJzd2FwIiwiY29tcCIsImNhbWxfaXNfbWxfc3RyaW5nIiwiY2FtbF9pc19tbF9ieXRlcyIsImNhbWxfY29tcGFyZV92YWxfdGFnIiwiTnVtYmVyIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfc3RyaW5nX2NvbXBhcmUiLCJjYW1sX2J5dGVzX2NvbXBhcmUiLCJjYW1sX2NvbXBhcmVfdmFsIiwic3RhY2siLCJ0YWdfYSIsInRhZ19iIiwiY2FtbF9jb21wYXJlIiwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfZXF1YWwiLCJjYW1sX2ZpbGxfYnl0ZXMiLCJjYW1sX2Zsb2F0X29mX3N0cmluZyIsIm0iLCJtMyIsIm1hbnRpc3NhIiwicGFyc2VJbnQiLCJleHBvbmVudCIsImNhbWxfcGFyc2VfZm9ybWF0IiwiZm10IiwiY2FtbF9maW5pc2hfZm9ybWF0dGluZyIsInJhd2J1ZmZlciIsImNhbWxfZm9ybWF0X2Zsb2F0IiwidG9GaXhlZCIsImRwIiwicHJlYyIsInAiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX29vX2xhc3RfaWQiLCJjYW1sX2ZyZXNoX29vX2lkIiwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmciLCJmc19ub2RlX3N1cHBvcnRlZCIsIm1ha2VfcGF0aF9pc19hYnNvbHV0ZSIsInBvc2l4IiwicGF0aCIsIndpbjMyIiwic3BsaXREZXZpY2VSZSIsInJlc3VsdCIsImRldmljZSIsImlzVW5jIiwiQm9vbGVhbiIsInJvb3QiLCJzZXAiLCJwYXRoX2lzX2Fic29sdXRlIiwiY2FtbF90cmFpbGluZ19zbGFzaCIsImNhbWxfY3VycmVudF9kaXIiLCJjYW1sX21ha2VfcGF0aCIsImNvbXAwIiwibmNvbXAiLCJjYW1sX3V0Zjhfb2ZfdXRmMTYiLCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZyIsInVuaXhfZXJyb3IiLCJtYWtlX3VuaXhfZXJyX2FyZ3MiLCJjb2RlIiwic3lzY2FsbCIsImVycm5vIiwidmFyaWFudCIsImNhbWxfbmFtZWRfdmFsdWVzIiwiY2FtbF9uYW1lZF92YWx1ZSIsIm5tIiwiY2FtbF9yYWlzZV93aXRoX2FyZ3MiLCJjYW1sX2J5dGVzX29mX2FycmF5IiwiY2FtbF9yYWlzZV9zeXNfZXJyb3IiLCJjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSIsImNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsIk1sRmlsZSIsIk1sRmFrZUZpbGUiLCJvbGQiLCJidWYiLCJwb3MiLCJjbGVuIiwibmV3X3N0ciIsIm9sZF9kYXRhIiwiTWxGYWtlRmQiLCJmaWxlIiwiZmxhZ3MiLCJNbEZha2VEZXZpY2UiLCJTeW1ib2wiLCJuYW1lX3NsYXNoIiwibW9kZSIsInJhaXNlX3VuaXgiLCJwYXJlbnQiLCJSZWdFeHAiLCJzZWVuIiwiZW50cnkiLCJvayIsImJ5dGVzIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfdW5zYWZlX2dldCIsImNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIiwiTWxOb2RlRmQiLCJmZCIsInJlcXVpcmUiLCJlcnIiLCJidWZfb2Zmc2V0IiwicmVhZCIsIk1sTm9kZURldmljZSIsImNvbnN0cyIsImtleSIsImlzQ2hhcmFjdGVyRGV2aWNlIiwibyIsImpzX3N0YXRzIiwidG9fZGlyIiwidGFyZ2V0IiwibGluayIsImZpbGVfa2luZCIsImNhbWxfZ2V0X3Jvb3QiLCJjYW1sX3Jvb3QiLCJqc29vX21vdW50X3BvaW50IiwicmVzb2x2ZV9mc19kZXZpY2UiLCJjYW1sX2NyZWF0ZV9maWxlIiwianNvb19jcmVhdGVfZmlsZSIsImNhbWxfZnNfaW5pdCIsInRtcCIsImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrIiwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UiLCJjYW1sX2dyZWF0ZXJlcXVhbCIsImNhbWxfaGFzaF9taXhfanNieXRlcyIsImNhbWxfaGFzaF9taXhfc3RyaW5nIiwiY2FtbF9oYXNoX21peF9ieXRlc19hcnIiLCJjYW1sX21sX2J5dGVzX2NvbnRlbnQiLCJjYW1sX2hhc2hfbWl4X2J5dGVzIiwiY2FtbF9oYXNoX21peF9maW5hbCIsImNhbWxfaGFzaCIsImNvdW50IiwibGltaXQiLCJzZWVkIiwib2JqIiwicXVldWUiLCJyZCIsIndyIiwiaGgiLCJjYW1sX2hleHN0cmluZ19vZl9mbG9hdCIsInN0eWxlIiwiZXhwX3NpZ24iLCJzaWduX3N0ciIsImNzdCIsInhfc3RyIiwiaWR4IiwiY2FtbF9pbnQ2NF9pc196ZXJvIiwiY2FtbF9pbnQ2NF9vZl9pbnQzMiIsImNhbWxfaW50NjRfdG9faW50MzIiLCJjYW1sX2ludDY0X2lzX25lZ2F0aXZlIiwiY2FtbF9pbnQ2NF9uZWciLCJjYW1sX2ludDY0X2Zvcm1hdCIsIndiYXNlIiwiY3Z0YmwiLCJjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UiLCJiYXNlIiwiY2FtbF9wYXJzZV9kaWdpdCIsImNhbWxfaW50X29mX3N0cmluZyIsInRocmVzaG9sZCIsImNhbWxfanNfZnJvbV9hcnJheSIsImNhbWxfanNfbWV0aF9jYWxsIiwiY2FtbF9qc19uZXciLCJGIiwiY2FtbF9qc19vYmplY3QiLCJjYW1sX2pzX3RvX2FycmF5IiwiY2FtbF9jYWxsYmFjayIsImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3QiLCJhcml0eSIsImNhbWxfbGF6eV9tYWtlX2ZvcndhcmQiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9sZXhfYXJyYXkiLCJjYW1sX2xleF9lbmdpbmUiLCJ0YmwiLCJzdGFydF9zdGF0ZSIsImxleGJ1ZiIsImxleF9idWZmZXIiLCJsZXhfYnVmZmVyX2xlbiIsImxleF9zdGFydF9wb3MiLCJsZXhfY3Vycl9wb3MiLCJsZXhfbGFzdF9wb3MiLCJsZXhfbGFzdF9hY3Rpb24iLCJsZXhfZW9mX3JlYWNoZWQiLCJsZXhfYmFzZSIsImxleF9iYWNrdHJrIiwibGV4X2RlZmF1bHQiLCJsZXhfdHJhbnMiLCJsZXhfY2hlY2siLCJzdGF0ZSIsImJhY2t0cmsiLCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXkiLCJjYW1sX2xpc3RfdG9fanNfYXJyYXkiLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX01ENUluaXQiLCJBcnJheUJ1ZmZlciIsImIzMiIsIlVpbnQzMkFycmF5IiwiYjgiLCJjYW1sX01ENVRyYW5zZm9ybSIsImFkZCIsInh4IiwiZmYiLCJnZyIsImlpIiwiY2FtbF9NRDVVcGRhdGUiLCJjdHgiLCJpbnB1dCIsImlucHV0X2xlbiIsImluX2J1ZiIsImlucHV0X3BvcyIsIm1pc3NpbmciLCJjYW1sX01ENUZpbmFsIiwiY2FtbF9zdHJpbmdfb2ZfYXJyYXkiLCJjYW1sX21kNV9ieXRlcyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMiLCJjYW1sX21sX2NoYW5uZWxzIiwiY2FtbF9tbF9jaGFubmVsX2dldCIsImlkIiwiY2FtbF9tbF9mbHVzaCIsImNoYW5pZCIsImNoYW4iLCJjYW1sX3N5c19vcGVuX2Zvcl9ub2RlIiwiZnMiLCJmZDIiLCJjYW1sX3N5c19mZHMiLCJNbEZha2VGZF9vdXQiLCJjb25zb2xlIiwic3JjIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImNhbWxfc3lzX29wZW4iLCJfcGVybXMiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsInJlZmlsbCIsImNoYW5uZWwiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQiLCJidWZmZXJlZCIsImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QiLCJjYW1sX21sX291dHB1dF90YSIsImNhbWxfbWxfb3V0cHV0X2J5dGVzIiwiY2FtbF9tbF9vdXRwdXQiLCJjYW1sX21sX291dHB1dF9jaGFyIiwiY2FtbF9tb2QiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9vYmpfbWFrZV9mb3J3YXJkIiwiY2FtbF9vYmpfdGFnIiwiRnVuY3Rpb24iLCJjYW1sX2J1aWxkX3N5bWJvbHMiLCJzeW1iIiwiY2FtbF9yZWdpc3Rlcl9nbG9iYWwiLCJuYW1lX29wdCIsIm5pZCIsImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUiLCJjYW1sX3N0cmluZ19ib3VuZF9lcnJvciIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfcmFpc2Vfbm90X2ZvdW5kIiwiY2FtbF9zeXNfZ2V0ZW52IiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJub3ciLCJEYXRlIiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfdXBkYXRlX2R1bW15IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24iLCJjYW1sX2Zvcm1hdF9leGNlcHRpb24iLCJidWNrZXQiLCJzdGFydCIsImNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uIiwiaGFuZGxlciIsImF0X2V4aXQiLCJjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwib3JpZ2luIiwiZXZlbnQiLCJ6ZXJvX3BvcyIsImxvY2ZtdCIsImVtcHR5JDIiLCJlbXB0eSQzIiwib2NhbWxfbGV4X3RhYmxlcyIsInRwX2xvYyIsInRwX2xvYyQwIiwidHBfbG9jJDEiLCJ0cF9sb2MkMiIsInRwX2xvYyQzIiwidHBfbG9jJDQiLCJ0cF9sb2MkNSIsInRwX2xvYyQ2IiwicGF0aCQxIiwicGF0aCQyIiwibmFtZSQzIiwiaW5pdGlhbF9yZXBvcnQiLCJzdHJpbmdzIiwidXJsJDAiLCJkZWZhdWx0JDEiLCJhbGJ1bSIsImFydGlzdCIsImVyYXNlX3JlbCIsInJlc3QiLCJyZXN0JDAiLCJyZXN0JDEiLCJyZXN0JDIiLCJyZXN0JDMiLCJyZXN0JDQiLCJyZXN0JDUiLCJyZXN0JDYiLCJyZXN0JDciLCJ0eSIsInJlc3QkOCIsInR5MSIsInJlc3QkOSIsInJlc3QkMTAiLCJyZXN0JDExIiwicmVzdCQxMiIsInJlc3QkMTMiLCJjb25jYXRfZm10dHkiLCJmbXR0eTEiLCJmbXR0eTIiLCJ0eTIiLCJjb25jYXRfZm10IiwiZm10MSIsImZtdDIiLCJwYWQiLCJwYWQkMCIsInBhZCQxIiwiaWNvbnYiLCJwcmVjJDAiLCJwYWQkMiIsImljb252JDAiLCJwcmVjJDEiLCJwYWQkMyIsImljb252JDEiLCJwcmVjJDIiLCJwYWQkNCIsImljb252JDIiLCJwcmVjJDMiLCJwYWQkNSIsImZjb252IiwicGFkJDYiLCJzdHIiLCJjaHIiLCJmbXR0eSIsInBhZCQ3IiwiZm10dHkkMCIsInBhZCQ4IiwicmVzdCQxNCIsInJlc3QkMTUiLCJyZXN0JDE2IiwiZm10aW5nX2xpdCIsInJlc3QkMTciLCJmbXRpbmdfZ2VuIiwicmVzdCQxOCIsInJlc3QkMTkiLCJjaGFyX3NldCIsIndpZHRoX29wdCIsInJlc3QkMjAiLCJjb3VudGVyIiwicmVzdCQyMSIsInJlc3QkMjIiLCJpZ24iLCJyZXN0JDIzIiwiY3VyIiwiZmFpbHdpdGgiLCJpbnZhbGlkX2FyZyIsIm1heCIsImFicyIsImxub3QiLCJpbmZpbml0eSIsIm5lZ19pbmZpbml0eSIsIm5hbiIsInN0cmluZ19vZl9ib29sIiwic3RyaW5nX29mX2ludCIsInZhbGlkX2Zsb2F0X2xleGVtIiwibG9vcCIsImkkMCIsImkkMSIsInN0cmluZ19vZl9mbG9hdCIsInN5bWJvbCIsImwxIiwibDIiLCJ0bCIsImhkIiwic3Rkb3V0Iiwic3RkZXJyIiwiZmx1c2hfYWxsIiwiaXRlciIsIm91dHB1dF9zdHJpbmciLCJvYyIsIm91dHB1dF9zdWJzdHJpbmciLCJwcmVycl9lbmRsaW5lIiwiZXhpdF9mdW5jdGlvbiIsImZfeWV0X3RvX3J1biIsIm9sZF9leGl0IiwiZl95ZXRfdG9fcnVuJDAiLCJvbGRfZXhpdCQwIiwibmV3X2V4aXQiLCJzdWNjZXNzIiwiZG9fYXRfZXhpdCIsIm1heF9pbnQiLCJpc19ibG9jayIsInJhaXNlX3VuZGVmaW5lZCIsImZvcmNlX2xhenlfYmxvY2siLCJibGsiLCJjbG9zdXJlIiwiZSQwIiwiZnJvbV92YWwiLCJ2YWx1ZSIsImRlZmF1bHQkMCIsImdldCQwIiwibWFwIiwiaXNfc29tZSIsImdldF9vayIsIm1hcCQwIiwib2ZfaW50X2V4biIsInMkMCIsImxlbmd0aF9hdXgiLCJsZW4kMCIsImNvbnMiLCJyZXZfYXBwZW5kIiwibDEkMCIsImwyJDAiLCJsMSQxIiwibDIkMSIsInJldiIsImluaXRfdGFpbHJlY19hdXgiLCJhY2MiLCJhY2MkMCIsImFjYyQxIiwiaW5pdF9hdXgiLCJybWFwX2YiLCJhY2N1JDAiLCJhY2N1IiwibCQwIiwibCQxIiwiYWNjdSQxIiwiZmluZCIsImF1eCIsInBhcnQiLCJ5ZXMkMCIsIm5vJDAiLCJjbXAiLCJyZXZfbWVyZ2UiLCJ0MiIsImgyIiwidDEiLCJoMSIsImFjY3UkMiIsImFjY3UkMyIsInJldl9tZXJnZV9yZXYiLCJzb3J0IiwieDIiLCJ4MSIsInRsJDEiLCJ4MyIsIngyJDAiLCJ4MSQwIiwiYyQwIiwiYyQxIiwiYyQyIiwiYyQzIiwiYyQ0IiwiYyQ1IiwibjEiLCJuMiIsInJldl9zb3J0IiwidGwkMCIsImNvbXBhcmUiLCJ0b19zdHJpbmciLCJvZnMxIiwib2ZzMiIsImlzX3NwYWNlIiwiZW5zdXJlX2dlIiwic3VtX2xlbmd0aHMiLCJzZXBsZW4iLCJ1bnNhZmVfYmxpdHMiLCJkc3QiLCJwb3MkMCIsImlzX3NwYWNlJDAiLCJlc2NhcGVfaWZfbmVlZGVkIiwiaW5kZXhfcmVjIiwibGltIiwidG9saXN0IiwicmVzJDAiLCJyZXMkMSIsImxpc3RfbGVuZ3RoIiwiZmlsbCIsImVuZ2luZSIsIm9wdCIsInN0aCIsIndpdGhfcG9zaXRpb25zIiwiaGVpZ2h0IiwiY3JlYXRlIiwiaGwiLCJoJDAiLCJociIsImJhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsInNpbmdsZXRvbiIsImFkZF9taW5fZWxlbWVudCIsImFkZF9tYXhfZWxlbWVudCIsImpvaW4iLCJyaCIsImxoIiwibWluX2VsdCIsInJlbW92ZV9taW5fZWx0IiwiciQwIiwibWVyZ2UiLCJjb25jYXQiLCJzcGxpdCIsInByZXMiLCJwcmVzJDAiLCJlbXB0eSIsImlzX2VtcHR5IiwicmVtb3ZlIiwidW5pb24iLCJ2MiIsInYxIiwicjIkMCIsInIxJDAiLCJpbnRlciIsImRpZmYiLCJjb25zX2VudW0iLCJlJDEiLCJjb21wYXJlX2F1eCIsImUxIiwiZTIiLCJlMSQwIiwiZTIkMCIsImUyJDEiLCJlMSQxIiwiZTIkMiIsImUxJDIiLCJlcXVhbCIsInN1YnNldCIsInMxJDAiLCJzMiQwIiwiZm9sZCIsImNhcmRpbmFsIiwiZWxlbWVudHNfYXV4IiwiZWxlbWVudHMiLCJmaW5kX2xhc3Rfb3B0X2F1eCIsInYwJDAiLCJmaW5kX2xhc3Rfb3B0Iiwib2Zfc29ydGVkX2xpc3QiLCJzdWIiLCJsJDMiLCJ4MCIsImwkNCIsIngwJDAiLCJsJDUiLCJ4MCQxIiwibmwiLCJsZWZ0IiwibWlkIiwibCQyIiwicmlnaHQiLCJvZl9saXN0IiwieDQiLCJsZCIsImxyZCIsInJsZCIsImZpbmRfb3B0IiwibWVtIiwibWluX2JpbmRpbmciLCJyZW1vdmVfbWluX2JpbmRpbmciLCJtJDAiLCJmb3JfYWxsIiwiYWRkX21pbl9iaW5kaW5nIiwiYWRkX21heF9iaW5kaW5nIiwiY29uY2F0X29yX2pvaW4iLCJkJDAiLCJkMSIsImQyIiwiZDIkMCIsImQxJDAiLCJtMSIsIm0yIiwiZXF1YWxfYXV4IiwiY2xlYXIiLCJwdXNoIiwicG9wIiwicG9wX29wdCIsInRvcCIsInRvcF9vcHQiLCJpdGVyJDAiLCJjcmVhdGUkMCIsImNsZWFyJDAiLCJjZWxsIiwibWF0Y2giLCJwZWVrX29wdCIsInRha2UiLCJuZXh0IiwidGFrZV9vcHQiLCJjcmVhdGUkMSIsIm4kMCIsIm4kMSIsInN1YiQyIiwibGVuZ3RoJDAiLCJjbGVhciQxIiwicmVzZXQiLCJyZXNpemUiLCJtb3JlIiwib2xkX3BvcyIsIm9sZF9sZW4iLCJuZXdfbGVuIiwibmV3X2J1ZmZlciIsImFkZF9jaGFyIiwiYWRkX3N1YnN0cmluZyIsIm5ld19wb3NpdGlvbiIsImFkZF9zdWJieXRlcyIsIndyaXRlX3N0cmluZ2xpdCIsImRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIiwiYnVmZmVyX2NyZWF0ZSIsImluaXRfc2l6ZSIsImJ1ZmZlcl9jaGVja19zaXplIiwib3ZlcmhlYWQiLCJtaW5fbGVuIiwiYnVmZmVyX2FkZF9jaGFyIiwiYnVmZmVyX2FkZF9zdHJpbmciLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9mY29udiIsImNGIiwiYnByaW50X2Zjb252X2ZsYWciLCJzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQiLCJmb3JtYXR0aW5nX2xpdCIsInN0ciQwIiwiYnByaW50X2ZtdHR5IiwiZm10dHkkMSIsImZtdHR5JDIiLCJmbXR0eSQzIiwiZm10dHkkNCIsImZtdHR5JDUiLCJmbXR0eSQ2IiwiZm10dHkkNyIsImZtdHR5JDgiLCJmbXR0eSQ5Iiwic3ViX2ZtdHR5IiwiZm10dHkkMTAiLCJzdWJfZm10dHkkMCIsImZtdHR5JDExIiwiZm10dHkkMTIiLCJmbXR0eSQxMyIsImZtdHR5JDE0IiwiZm10dHkkMTUiLCJzeW1tIiwiZm10dHlfcmVsX2RldCIsImRlIiwiZWQiLCJhZiIsImZhIiwiZGUkMCIsImVkJDAiLCJhZiQwIiwiZmEkMCIsImRlJDEiLCJlZCQxIiwiYWYkMSIsImZhJDEiLCJkZSQyIiwiZWQkMiIsImFmJDIiLCJmYSQyIiwiZGUkMyIsImVkJDMiLCJhZiQzIiwiZmEkMyIsImRlJDQiLCJlZCQ0IiwiYWYkNCIsImZhJDQiLCJkZSQ1IiwiZWQkNSIsImFmJDUiLCJmYSQ1IiwiZGUkNiIsImVkJDYiLCJhZiQ2IiwiZmEkNiIsImRlJDciLCJlZCQ3IiwiYWYkNyIsImZhJDciLCJkZSQ4IiwiZWQkOCIsImFmJDgiLCJmYSQ4IiwidHJhbnMiLCJqZCIsImRqIiwiZ2EiLCJhZyIsImRlJDkiLCJlZCQ5IiwiYWYkOSIsImZhJDkiLCJkZSQxMCIsImVkJDEwIiwiYWYkMTAiLCJmYSQxMCIsImRlJDExIiwiZWQkMTEiLCJhZiQxMSIsImZhJDExIiwiZGUkMTIiLCJlZCQxMiIsImFmJDEyIiwiZmEkMTIiLCJkZSQxMyIsImVkJDEzIiwiYWYkMTMiLCJmYSQxMyIsInJlc3QxIiwicmVzdDIiLCJyZXN0MSQwIiwicmVzdDIkMCIsInJlc3QxJDEiLCJyZXN0MiQxIiwicmVzdDEkMiIsInJlc3QyJDIiLCJyZXN0MSQzIiwicmVzdDIkMyIsInJlc3QxJDQiLCJyZXN0MiQ0IiwicmVzdDEkNSIsInJlc3QyJDUiLCJyZXN0MSQ2IiwicmVzdDIkNiIsInJlc3QxJDciLCJ0eTEkMCIsInJlc3QyJDciLCJ0eTIkMCIsInJlc3QxJDgiLCJ0eTEyIiwidHkxMSIsInJlc3QyJDgiLCJ0eTIyIiwidHkyMSIsImY0IiwiZjIiLCJyZXN0MSQ5IiwicmVzdDIkOSIsInJlc3QxJDEwIiwicmVzdDIkMTAiLCJyZXN0MSQxMSIsInJlc3QyJDExIiwicmVzdDEkMTIiLCJyZXN0MiQxMiIsInJlc3QxJDEzIiwicmVzdDIkMTMiLCJ0eXBlX3BhZGRpbmciLCJwYWR0eSIsInBhZHR5JDAiLCJ0eXBlX3BhZHByZWMiLCJ0eXBlX2Zvcm1hdCIsInR5cGVfZm9ybWF0X2dlbiIsImZtdCQwIiwiZm10dHlfcmVzdCIsImZtdF9yZXN0IiwiZm10dHlfcmVzdCQwIiwiZm10X3Jlc3QkMCIsImZtdCQxIiwiZm10X3Jlc3QkMSIsImZtdHR5X3Jlc3QkMSIsImZtdCQyIiwiZm10X3Jlc3QkMiIsImZtdHR5X3Jlc3QkMiIsImZtdCQzIiwiZm10X3Jlc3QkMyIsImZtdHR5X3Jlc3QkMyIsImZtdCQ0IiwiZm10X3Jlc3QkNCIsImZtdHR5X3Jlc3QkNCIsImZtdCQ1IiwiZm10X3Jlc3QkNSIsImZtdHR5X3Jlc3QkNSIsInByZWMkNCIsImZtdCQ2IiwiZm10X3Jlc3QkNiIsInByZWMkNSIsInBhZCQ5IiwicGFkJDEwIiwiZm10dHlfcmVzdCQ2IiwicHJlYyQ2IiwiZm10JDciLCJmbXRfcmVzdCQ3IiwicHJlYyQ3IiwicGFkJDExIiwicGFkJDEyIiwiZm10dHlfcmVzdCQ3IiwicHJlYyQ4IiwiZm10JDgiLCJmbXRfcmVzdCQ4IiwicGFkJDEzIiwicGFkJDE0IiwiZm10dHlfcmVzdCQ4IiwiZm10JDkiLCJmbXRfcmVzdCQ5IiwiZm10JDEwIiwiZm10X3Jlc3QkMTAiLCJmbXQkMTEiLCJmbXRfcmVzdCQxMSIsImZtdCQxMiIsImZtdHR5X3Jlc3QkOSIsImZtdF9yZXN0JDEyIiwicGFkX29wdCIsImZtdCQxMyIsImZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHkxIiwiZm10X3Jlc3QkMTMiLCJzdWJfZm10dHkkMSIsInBhZF9vcHQkMCIsImZtdCQxNCIsImZtdHR5X3Jlc3QkMTEiLCJmbXRfcmVzdCQxNCIsImZtdCQxNSIsImZtdHR5X3Jlc3QkMTIiLCJmbXRfcmVzdCQxNSIsImZtdHR5JDE2IiwiZm10JDE2IiwiZm10X3Jlc3QkMTYiLCJmbXR0eSQxNyIsImZtdCQxNyIsImZtdF9yZXN0JDE3IiwiZm9ybWF0dGluZ19nZW4iLCJ0eXBlX2Zvcm1hdHRpbmdfZ2VuIiwiZm10dHlfcmVzdCQxMyIsImZtdF9yZXN0JDE4IiwiZm10dHkkMTgiLCJmbXQkMTgiLCJmbXR0eV9yZXN0JDE0IiwiZm10X3Jlc3QkMTkiLCJmbXR0eSQxOSIsImZtdCQxOSIsImZtdHR5X3Jlc3QkMTUiLCJmbXRfcmVzdCQyMCIsImZtdHR5JDIwIiwiZm10JDIwIiwidHlwZV9pZ25vcmVkX3BhcmFtIiwiZm10MCIsImZtdHR5MCIsImZtdHR5MyIsImZtdDMiLCJmbXQxJDAiLCJmbXR0eTIkMCIsImZtdDIkMCIsImZtdHR5MyQwIiwiZm10MyQwIiwidHlwZV9pZ25vcmVkX3BhcmFtX29uZSIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsInN1Yl9mbXR0eV9yZXN0Iiwic3ViX2ZtdHR5X3Jlc3QkMCIsInN1Yl9mbXR0eV9yZXN0JDEiLCJzdWJfZm10dHlfcmVzdCQyIiwic3ViX2ZtdHR5X3Jlc3QkMyIsInN1Yl9mbXR0eV9yZXN0JDQiLCJzdWJfZm10dHlfcmVzdCQ1Iiwic3ViX2ZtdHR5X3Jlc3QkNiIsInN1Yl9mbXR0eV9yZXN0JDciLCJzdWJfZm10dHlfcmVzdCQ4Iiwic3ViX2ZtdHR5X3Jlc3QkOSIsInN1Yl9mbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5X3Jlc3QkMTEiLCJzdWJfZm10dHlfcmVzdCQxMiIsInN1Yl9mbXR0eV9yZXN0JDEzIiwic3ViX2ZtdHR5X3Jlc3QkMTQiLCJzdWIyX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTUiLCJzdWIyX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxNiIsInN1YjJfZm10dHkkMSIsInN1YjFfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNyIsInN1YjJfZm10dHkkMiIsInN1YjFfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE4Iiwic3ViX2ZtdHR5X3Jlc3QkMTkiLCJzdWJfZm10dHlfcmVzdCQyMCIsInN1Yl9mbXR0eV9yZXN0JDIxIiwic3ViX2ZtdHR5X3Jlc3QkMjIiLCJzdWJfZm10dHlfcmVzdCQyMyIsInN1Yl9mbXR0eV9yZXN0JDI0Iiwic3ViX2ZtdHR5X3Jlc3QkMjUiLCJzdWJfZm10dHlfcmVzdCQyNiIsInJlY2FzdCIsImZpeF9wYWRkaW5nIiwid2lkdGgiLCJ3aWR0aCQwIiwiZml4X2ludF9wcmVjaXNpb24iLCJzdHJpbmdfdG9fY2FtbF9zdHJpbmciLCJmb3JtYXRfb2ZfaWNvbnYiLCJmb3JtYXRfb2ZfaWNvbnZMIiwiZm9ybWF0X29mX2ljb252bCIsImZvcm1hdF9vZl9pY29udm4iLCJmb3JtYXRfb2ZfZmNvbnYiLCJ0cmFuc2Zvcm1faW50X2FsdCIsImRpZ2l0cyIsInB1dCIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJhZGRfZG90X2lmX25lZWRlZCIsImlzX3ZhbGlkIiwiY2FtbF9zcGVjaWFsX3ZhbCIsImZvcm1hdF9jYW1sX2NoYXIiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiQwIiwiayQwIiwibmV3X2FjYyIsIm1ha2VfcHJpbnRmIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIiwiYWNjJDIiLCJhY2MkMyIsImFjYyQ0IiwiayQxIiwia2FjYyIsImskMiIsIm1ha2VfaWdub3JlZF9wYXJhbSIsIm1ha2VfY3VzdG9tJDAiLCJtYWtlX2ludmFsaWRfYXJnIiwibWFrZV9mcm9tX2ZtdHR5JDAiLCJtYWtlX2Zyb21fZm10dHkiLCJwJDAiLCJwJDEiLCJhcml0eSQwIiwibWFrZV9jdXN0b20iLCJvdXRwdXRfYWNjIiwicCQzIiwicCQ0IiwicCQ1IiwicCQyIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsInBhcnNlX2x3b3JkIiwiaiQwIiwiaiQxIiwicGFyc2VfaW50Iiwid3N0YXJ0Iiwid2VuZCIsImJveF9uYW1lIiwibnN0YXJ0IiwibmVuZCIsImluZGVudCIsImV4cF9lbmQiLCJib3hfdHlwZSIsImtmcHJpbnRmIiwiZnByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsInNwcmludGYiLCJwcmludGVycyIsImZpZWxkIiwib3RoZXJfZmllbGRzIiwiZmllbGRzIiwidXNlX3ByaW50ZXJzIiwiY29udiIsInRvX3N0cmluZ19kZWZhdWx0IiwiY2hhciQwIiwibGluZSIsImNoYXIkMSIsImxpbmUkMCIsImZpbGUkMCIsImNoYXIkMiIsImxpbmUkMSIsImZpbGUkMSIsImNvbnN0cnVjdG9yIiwidG9fc3RyaW5nJDAiLCJjb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJidCIsImZvcm1hdF9iYWNrdHJhY2Vfc2xvdCIsInNsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJwcmludF9leGNlcHRpb25fYmFja3RyYWNlIiwib3V0Y2hhbiIsImJhY2t0cmFjZSIsInByaW50X3Jhd19iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwiZXJyb3JzIiwiZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuIiwic3RhdHVzIiwiZW1wdHlfYmFja3RyYWNlIiwidHJ5X2dldF9yYXdfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsImV4biQxIiwiZXhuJDAiLCJyYXdfYmFja3RyYWNlJDAiLCJoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJDAiLCJuZXdfc3RhdGUiLCJhc3NpZ24iLCJzdDEiLCJzdDIiLCJmdWxsX2luaXQiLCJjb21iaW5lIiwiZXh0cmFjdCIsInNlZWQkMCIsIm1ha2UkMiIsIm1ha2Vfc2VsZl9pbml0IiwiY29weSQwIiwiYml0cyIsImN1cnZhbCIsIm5ld3ZhbCIsIm5ld3ZhbDMwIiwiaW50YXV4IiwiaW50JDAiLCJib3VuZCIsImludCQxIiwib25nb2luZ190cmF2ZXJzYWwiLCJwYXJhbXMiLCJyYW5kb21pemVkX2RlZmF1bHQiLCJwcm5nIiwicG93ZXJfMl9hYm92ZSIsIngkMCIsIngkMSIsImluaXRpYWxfc2l6ZSIsInJhbmRvbSIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJpbnNlcnRfYnVja2V0IiwiY2VsbCQwIiwiY2VsbCQxIiwibmlkeCIsInJlc2l6ZSQwIiwib3NpemUiLCJrZXlfaW5kZXgiLCJyZW1vdmVfYnVja2V0IiwiZmluZF9yZWMiLCJuZXh0MSIsIm5leHQyIiwiazMiLCJkMyIsIm5leHQzIiwiZmluZF9pbl9idWNrZXQiLCJyZXBsYWNlX2J1Y2tldCIsIm1lbV9pbl9idWNrZXQiLCJ6ZXJvIiwidW5rbm93biIsImlzX2tub3duIiwicHBfZW5xdWV1ZSIsInRva2VuIiwicHBfY2xlYXJfcXVldWUiLCJwcF9pbmZpbml0eSIsInBwX291dHB1dF9zdHJpbmciLCJwcF9vdXRwdXRfbmV3bGluZSIsInBwX291dHB1dF9zcGFjZXMiLCJwcF9vdXRwdXRfaW5kZW50IiwiZm9ybWF0X3BwX3RleHQiLCJ0ZXh0IiwiZm9ybWF0X3N0cmluZyIsImJyZWFrX25ld19saW5lIiwiYWZ0ZXIiLCJiZWZvcmUiLCJyZWFsX2luZGVudCIsImJyZWFrX2xpbmUiLCJicmVha19zYW1lX2xpbmUiLCJwcF9mb3JjZV9icmVha19saW5lIiwicHBfc2tpcF90b2tlbiIsImZvcm1hdF9wcF90b2tlbiIsInRhYnMiLCJhZGRfdGFiIiwibHMiLCJ0YWdfbmFtZSIsIm1hcmtlciIsImJyZWFrcyIsImZpdHMiLCJvZmYiLCJvZmYkMCIsImluc2VydGlvbl9wb2ludCIsInRhYnMkMCIsImZpcnN0IiwidGFpbCIsImhlYWQiLCJ0YWIiLCJvZmYkMSIsImluc2VydGlvbl9wb2ludCQwIiwid2lkdGgkMSIsImJveF90eXBlJDAiLCJ0Ym94IiwidGFnX25hbWUkMCIsIm1hcmtlciQwIiwiYWR2YW5jZV9sZWZ0IiwicGVuZGluZ19jb3VudCIsInNpemUkMCIsImVucXVldWVfYWR2YW5jZSIsInRvayIsImVucXVldWVfc3RyaW5nX2FzIiwiZW5xdWV1ZV9zdHJpbmciLCJpbml0aWFsaXplX3NjYW5fc3RhY2siLCJxdWV1ZV9lbGVtIiwic2V0X3NpemUiLCJsZWZ0X3RvdGFsIiwic2Nhbl9wdXNoIiwiZWxlbSIsInBwX29wZW5fYm94X2dlbiIsImJyX3R5IiwicHBfb3Blbl9zeXNfYm94IiwicHBfY2xvc2VfdGFnIiwicGN0IiwicG90IiwibWN0IiwibW90IiwicHBfcmluaXQiLCJjbGVhcl90YWdfc3RhY2siLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJpc2l6ZSIsInBwX3ByaW50X3N0cmluZyIsInBwX3ByaW50X2NoYXIiLCJwcF9wcmludF9mbHVzaCIsInBwX2ZvcmNlX25ld2xpbmUiLCJkaXNwbGF5X25ld2xpbmUiLCJibGFua19saW5lIiwiZGlzcGxheV9ibGFua3MiLCJkZWZhdWx0X3BwX21hcmtfb3Blbl90YWciLCJkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnIiwiZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnIiwicHBfbWFrZV9mb3JtYXR0ZXIiLCJwcF9xdWV1ZSIsInN5c190b2siLCJzY2FuX3N0YWNrIiwicHBfbWFyZ2luIiwib3V0cHV0IiwiZmx1c2giLCJwcGYiLCJmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwiLCJwcF9idWZmZXJfc2l6ZSIsInBwX21ha2VfYnVmZmVyIiwic3RkX2Zvcm1hdHRlciIsImVycl9mb3JtYXR0ZXIiLCJmbHVzaF9idWZmZXJfZm9ybWF0dGVyIiwicHBfdiIsIm5vbmUiLCJjb21wdXRlX3RhZyIsInRhZ19hY2MiLCJvdXRwdXRfZm9ybWF0dGluZ19saXQiLCJvdXRwdXRfYWNjJDAiLCJidHkiLCJmJDAiLCJwJDYiLCJwJDciLCJmcHJpbnRmJDAiLCJmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzIiwicmVnaXN0ZXJfZXhjZXB0aW9uIiwiYW55IiwiZHVtbXkiLCJvcGVyYXRvciIsImRlc2MiLCJ2eCIsInZ5IiwiY2hpbGQiLCJhZGRfaWR4IiwicGFyYW0iLCJyZW1faWR4X3JlYyIsInNlbGYiLCJyZW1faWR4IiwidHJhY2VfaWR4IiwidHJhY2VfaWR4JDAiLCJpZHgkMCIsIm1vdl9pZHhfcmVjIiwib2xkaWR4IiwibmV3aWR4IiwibW92X2lkeCIsImdldF9pZHhfcmVjIiwiZ2V0X2lkeCIsImludmFsaWRhdGVfbm9kZSQwIiwic2Vuc2l0aXZpdHkiLCJub2RlIiwic2Vuc2l0aXZpdHkkMCIsImludmFsaWRhdGVfdHJhY2UiLCJpbnZhbGlkYXRlX25vZGUiLCJ6IiwieSQwIiwieiQwIiwieSQxIiwieCQyIiwiYWN0aXZlIiwiY2FsbHN0YWNrIiwiZG9faW52YWxpZGF0ZSIsInVuc2FmZSIsImFjcXVpcmUiLCJyZWxlYXNlIiwic3ViX3JlbGVhc2UiLCJmYWlsdXJlcyQwIiwib3JpZ2luJDEiLCJvcmlnaW4kMCIsInRyYWNlIiwidHJhY2UkMCIsIngkNCIsIngkNSIsIngkNiIsInJldmlkeCIsInNlbGYkMCIsInNlbGYkMSIsInNlbGYkMiIsInNlbGYkMyIsImludGVybWVkaWF0ZSIsImZhaWx1cmVzJDQiLCJjaGlsZCQwIiwieCQzIiwid3J0Iiwic2VsZiQ0Iiwic3ViX2FjcXVpcmUiLCJlbnRyaWVzIiwidHJhY2UkMSIsImVudHJpZXMkMCIsImVudHJpZXMkMSIsImRvYyIsImFjdGl2YXRlX3RyYWNpbmciLCJ0biIsInN1Yl9pc19kYW1hZ2VkIiwic3ViX3NhbXBsZSIsImYkMSIsInJlc3VsdCQwIiwib25faW52YWxpZGF0ZSIsInJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIiwicGFyYW0kMCIsImZhaWx1cmVzJDEiLCJxdWV1ZSQwIiwidmFsdWUkMCIsImZsdXNoX29yX2ZhaWwiLCJtYWluX2V4biIsImZhaWx1cmVzIiwibWFwX3JlZHVjZSIsImluaiIsIml0ZW1zIiwicGx1cyIsImNvbnNfbW9ub2lkIiwieHMiLCJ4cyQwIiwidiQwIiwieHMkMSIsInYkMSIsInYkMiIsImNvbnNfbW9ub2lkJDAiLCJub3Rfb3JpZ2luIiwibWFrZSQzIiwic2V0X3BhcmVudCIsIm1ha2Vfbm9kZSIsInNldCIsImJpbmRpbmciLCJyYXdfaW52YWxpZGF0ZSIsImFwcGVuZCIsImdldCQyIiwiaW52YWxpZGF0ZV9iaW5kaW5nIiwic2V0X2JpbmRpbmciLCJ1bnNldCIsInNtYWxsZXJfZWxsIiwic21pbiIsInNtYXgiLCJkaXNiYWxhbmNlZCIsInJlcGFyZW50Iiwib2xkY2hpbGQiLCJuZXdjaGlsZCIsInJvdF9sZWZ0JDAiLCJ2ZXJzaW9uIiwic24iLCJybiIsInJsJDAiLCJiYWxhbmNlIiwiYmFsYW5jZSQwIiwicm90X2xlZnQiLCJyb3RfcmlnaHQkMCIsImxuIiwibHIkMCIsInJvdF9yaWdodCIsImluY19sZWZ0IiwiaW5jX3JpZ2h0Iiwic2wiLCJzciIsImNvbXB1dGVfc3ViX3NpemUiLCJyZXNldF92ZXJzaW9uIiwicmViYWxhbmNlIiwidmVyc2lvbiQwIiwiZXh0cmFjdF9iaW5kaW5ncyIsInRyZWUiLCJybm9kZSIsImZ1bGxfcmVidWlsZCIsInJlZCIsImJpbmRpbmdzIiwiYmluZGluZ3MkMCIsInJlZHVjdGlvbiIsImJpbmRpbmckMCIsInJlZHVjdGlvbiQwIiwiYWdncmVnYXRlIiwiYWdncmVnYXRlJDAiLCJleHRyYWN0X2ZyaW5nZSIsImluY3JlbWVudGFsX3JlYnVpbGQiLCJmcmluZ2UiLCJmcmluZ2UkMCIsImZyaW5nZSQxIiwiZXZhbCQwIiwib3BhcXVlIiwibWFwX3JlZHVjZSQwIiwibWFwcGVyIiwibW9ub2lkIiwic291cmNlIiwicHJpbSQwIiwibGVmdF9tb3N0IiwicmlnaHRfbW9zdCIsImF1eCQwIiwid2Fsa19yb290IiwicGFyZW50JDAiLCJlbXB0eSQwIiwiZWxlbWVudCIsIm1heGkiLCJyYW5rIiwiY29uY2F0JDAiLCJtYXNrX29sZCIsIm1hc2tfbmV3IiwibWFza19ib3RoIiwiaXNfc2hhcmVkIiwiaXNfbm90X3NoYXJlZCIsImlzX2JvdGgiLCJpc19vbGQiLCJpc19uZXciLCJzZXRfYm90aCIsImdldF9pbmRleCIsIndpdGhfaW5kZXhfbmV3IiwidW5tYXJrIiwibWFya2VkIiwic2hhcmVkIiwiYmxvY2tlZCIsIm1rX3N0YXRzIiwibmV3X21hcmtlZCIsInN0YXRzIiwibmV3X3NoYXJlZCIsIm5ld19ibG9ja2VkIiwiYmxvY2siLCJtYXNrIiwibWFyayIsIm1hcmskMCIsImVucXVldWUiLCJkZXF1ZXVlIiwidHJhdmVyc2UxIiwidHJhdmVyc2UiLCJzb2xkIiwic25ldyIsInFvbGQiLCJxbmV3Iiwib2xkX3N0YXRzIiwidHIiLCJuZXdfc3RhdHMiLCJ1bnNhZmVfdHJhdmVyc2UiLCJvbGRfcm9vdCIsIm5ld19yb290Iiwib2xkX3F1ZXVlIiwibmV3X3F1ZXVlIiwicmVzdG9yZSIsIm5leHRfc2hhcmVkX2luZGV4Iiwic3QiLCJ1bmJsb2NrIiwidCQwIiwidW5tYXJrX29sZCIsImluZGV4JDAiLCJkcm9wcGVkX2xlYWYiLCJhJDAiLCJiJDAiLCJpbmRleCQxIiwiaW5kZXgkMiIsImRyb3BwZWRfam9pbiIsInByZXBhcmVfc2hhcmVkIiwidW5tYXJrX25ldyIsIm5vX2Ryb3BwZWQiLCJnZXRfZHJvcHBlZCIsInhvbGQiLCJ0bmV3IiwidHJhdmVyc2FsIiwibmJfZHJvcHBlZCIsIm5iX3NoYXJlZCIsIm5iX2Ryb3BwZWQkMCIsInhsZWFmIiwieGpvaW4iLCJldmFsJDEiLCJvdGhlciIsIm1ha2UkNCIsInJlZHVjZSIsInVwZGF0ZSQwIiwibmV3X3RyZWUiLCJvbGRfdHJlZSIsInVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQiLCJkcm9wcGVkIiwiZm9sZF9kcm9wcGVkIiwiYm91bmQkMCIsInB1cmVfbWFwX3JlZHVjZSIsImZvbGRfbW9ub2lkIiwic2VxIiwicmVkdWNlJDAiLCJyZWR1Y2VyIiwicmVkdWNlciQwIiwidHJhbnNmb3JtX2xpc3QiLCJvZl9saXN0JDAiLCJ0b19saXN0JDAiLCJsd2RfZW1wdHkiLCJsd2RfbW9ub2lkIiwibWFwJDMiLCJmaWx0ZXJfbWFwJDAiLCJzZWxlY3QiLCJiaW5kJDAiLCJsaWZ0Iiwib3B0cyIsInR5cGUiLCJmdW5jIiwiaXNfcHVyZV9lbGVtZW50IiwiZXh0cmFjdF9wdXJlX2VsZW1lbnQiLCJleHRyYWN0X3B1cmVfZWxlbWVudHMiLCJwcmVwYXJlX2NvbCIsImNvbCIsImltcHVyZSIsInB1cmUiLCJjb25zdW1lX2NoaWxkcmVuIiwiY2hpbGRfbm9kZSIsImNoaWxkX2pvaW4iLCJqdl9hcHBlbmQiLCJqdl9iZWZvcmUiLCJqdl9yZW1vdmUiLCJqdl9jb250YWlucyIsImNvbnRhaW5zX2ZvY3VzIiwiZWwiLCJ1cGRhdGVfY2hpbGRyZW4iLCJjaGlsZHJlbiIsInNjaGVkdWxlX2Zvcl9yZW1vdmFsIiwicHJlc2VydmVfZm9jdXMiLCJ1cGRhdGUiLCJzaGlmdF9zaWJsaW5ncyIsInNpYmxpbmciLCJyZW1vdmVfY2hpbGQiLCJwdXJlX3VuaXQiLCJkdW1teV9rdl9hdCIsImF0dGFjaF9hdHRyaWJzIiwiYXR0cmlicyIsInNldF9rdiIsInVuc2V0X2t2Iiwic2V0X2x3ZF9hdCIsInByZXYiLCJhdCIsInBhaXIiLCJhdHMiLCJzZXRfYXQiLCJrdiIsImxpc3RlbiQwIiwiYXR0YWNoX2V2ZW50cyIsImV2ZW50cyIsImNhY2hlZCIsInYkNCIsInN0aCQwIiwiZXYiLCJzdGgkMSIsIm9uX2NyZWF0ZSIsImltcHVyZV9hdCIsImF0JDAiLCJpbXB1cmVfZXYiLCJldiQwIiwiaW1wdXJlX2NoaWxkcmVuIiwiY2hpbGRyZW4kMCIsImNoaWxkcmVuJDEiLCJjaGlsZHJlbiQyIiwiY29ucyQxIiwiY3MiLCJ2b2lkX2NvbnMiLCJidXR0b24kMCIsImRpdiQxIiwiZm9ybSQwIiwiaW1nJDAiLCJpbnB1dCQwIiwibGFiZWwkMCIsIm9wdGlvbiQwIiwic2VsZWN0JDAiLCJzcGFuJDEiLCJzaHVmZmxlIiwicmFuZF9pbnQiLCJpdGVtX3RvX3N0cmluZyIsImlzX25hbiIsIm9mX3N0cmluZ19vcHQiLCJpbnRfb2ZfY29sb3IiLCJjb2RlX29mX3N0eWxlIiwic3RyaW5nX29mX3N0eWxlIiwic3R5bGVfb2ZfdGFnIiwibWFya19vcGVuX3N0eWxlIiwibWFya19jbG9zZV9zdHlsZSIsIm1hcmtfb3Blbl9zdGFnIiwib3JfZWxzZSIsInN0eWxlJDAiLCJtYXJrX2Nsb3NlX3N0YWciLCJzZXRfY29sb3JfdGFnX2hhbmRsaW5nIiwiZnVucyIsImZ1bnMkMCIsInNwcmludGYkMCIsImZvcm1hdCIsInNwcmludGYkMSIsImNvbXBhcmUkMSIsIm9mX3N0cmluZyQwIiwib2ZfZmxvYXQiLCJzeW1ib2wkMTAiLCJtYXBfb3IiLCJpc19zb21lJDEiLCJmbGF0X21hcCIsInN5bWJvbF9iaW5kJDAiLCJpdGVyJDEiLCJ2YWx1ZSQzIiwidG9fbGlzdCQyIiwic3ltYm9sJDExIiwic3ltYm9sJDEyIiwiZ2V0X2V4biIsImdldF9vciIsImZsYXRfbWFwJDAiLCJzeW1ib2wkMTMiLCJzeW1ib2xfYmluZCQxIiwic3VmIiwiY2hlY2siLCJzaW5nbGUiLCJkZWVwIiwibWlkZGxlIiwiaXNfZW1wdHkkMSIsImNvbnMkMiIsInokMSIsIm1pZGRsZSQwIiwieiQyIiwieSQzIiwieiQzIiwieiQ0IiwieSQ0IiwicSQwIiwieSQyIiwidGFrZV9iYWNrX2V4biIsInEkMSIsInRha2VfYmFjayIsInNpemVfZGlnaXQiLCJjb250ZW50X3JlY3QiLCJzdHJpbmdfb2ZfYm94Iiwib2JzZXJ2ZSQwIiwiYm94IiwiYm94JDAiLCJjcmVhdGUkNyIsImNhbGxiYWNrIiwiY2FsbGJhY2skMCIsIm9ic2VydmVyIiwib2ZfbmF2aWdhdG9yIiwiaW1nX3RvX2p2IiwiaW1nIiwidG9fanYiLCJhcnR3b3JrIiwic2V0X21ldGFkYXRhIiwibWV0YWRhdGEiLCJuZXh0X3RyYWNrIiwicHJldmlvdXNfdHJhY2siLCJzZXRfYWN0aW9uX2hhbmRsZXIiLCJhY3Rpb24iLCJzZXRfcG9zaXRpb25fc3RhdGUiLCJkdXJhdGlvbiIsInBsYXliYWNrX3JhdGUiLCJwb3NpdGlvbiIsIm1heWJlX2Zsb2F0IiwiZHVyYXRpb24kMCIsInBsYXliYWNrX3JhdGUkMCIsInBvc2l0aW9uJDAiLCJzdGF0ZV9kaWN0Iiwic3VibWl0IiwicGF0dGVybiIsInBlcnNpc3QiLCJtYW5hZ2VyIiwidGVlIiwib2Zfc3RyaW5nJDEiLCJ0b19zdHJpbmckMyIsInRvX3B4IiwiZ2V0X2ZvbnRfc2l6ZV9pbl9weCIsImZvbnRfc2l6ZSIsImZvbnRfc2l6ZSQwIiwibWFwMyIsInRyaXBsZSIsIm1ha2UkNSIsInNldF9leG4iLCJnZXRfZXhuJDAiLCJtYWtlJDYiLCJDIiwibGFuZyIsInRvX2pzdHIkMSIsIm9mX2pzdHIkMCIsImpzdHIiLCJrZXlzIiwiY2hlY2tfa2V5IiwibG9jYWxfc3RvcmFnZSIsInN0b3JlIiwiZmV0Y2gkMCIsImVuY29kZWRfdmFsdWUiLCJpbml0aWFsX3ZhbHVlIiwibWFrZV9wZXJzaXN0ZW50X3ZhciIsInZhciQxIiwibmV3X3ZhbHVlIiwidmFyX2YiLCJrZXkkMCIsImZvcl9zZWN0aW9uIiwibG9nIiwidG9fYXQiLCJlbXB0eSQ1IiwidG9fYXQkMCIsImlkJDAiLCJjbGFzc2VzIiwidW5pb24kMCIsImF0dHJzIiwiYWRkJDEiLCJhdF9uYW1lIiwiYWRkX2Jvb2wiLCJhZGRfb3B0IiwibWFwX2NvbCIsIm9mX2F0IiwiY29ucyQzIiwiY2xhc3MkMiIsInYkNSIsInN5bWJvbCQxNCIsInYkNiIsImhhbmRsZXIkMCIsImFwcGx5X3N0YXRlIiwid2l0aF9zdGF0ZSIsIlMiLCJ2X3N0YXRlIiwiZ2V0X3N0YXRlIiwic2V0X3N0YXRlIiwiZWx0IiwiZnVuYyQwIiwiYXQkMSIsImgkMSIsIm5leHQkMCIsInR3b19zdGF0ZSIsImpzX3Njcm9sbCIsIm1ha2UkNyIsInNjcm9sbF90YXJnZXQiLCJhY3RpdmVfY2xhc3MiLCJvbl9jbGljayIsImNvbnRyb2xzIiwib25fd2hlZWwiLCJlbHQkMCIsIm1ha2VfaGFuZGxlciIsInZhbHVlX2NoYW5nZV9ldmVudCIsImRlZmF1bHRfdmFsdWUiLCJvbl9jaGFuZ2UiLCJtYWtlX2lucHV0IiwidmFsaWRhdGUiLCJwYXR0ZXJuJDAiLCJyZXF1aXJlZCIsInR5cGUkMSIsInZhbGlkYXRlJDAiLCJ0ZXh0X2lucHV0IiwicGxhY2Vob2xkZXIkMCIsInBhc3N3b3JkX2lucHV0Iiwic3VibWl0JDAiLCJmaWVsZCQwIiwic2V0dGVyIiwiY3JlYXRlJDgiLCJGb3JtIiwib25fc3VibWl0IiwiZWx0cyIsImVsdHMkMCIsIm9uX3N1Ym1pdCQwIiwibmFtZSQwIiwiYmFzZV9uYW1lIiwibWFrZSQ4IiwibmFtZSQxIiwidmFyJDAiLCJtYWtlJDkiLCJvcHRpb25zIiwib3B0aW9ucyQwIiwic2VsZWN0ZWQiLCJuYW1lJDIiLCJtYWtlJDEwIiwibWFrZV9jaGVjayIsImxhYmVsIiwiY2hlY2tlZCIsImxibCIsImNoZWNrZWQkMSIsIm1ha2VfYWxsIiwiYWxsIiwicTEiLCJxMiIsImV2aWN0X29uZSIsIm9uX2V2aWN0IiwiZXZpY3RfcTIiLCJldmljdF9xMiQwIiwiZXZpY3RfcTEiLCJ2aXNpdGVkIiwidCQxIiwiZXZpY3QiLCJpbnNlcnQiLCJvbl9pbnNlcnQiLCJ2aXNpdGVkJDAiLCJ2JDciLCJjc3Nfc2l6ZSIsInRvX2hlYWRlciIsImNlbGxzIiwic3R5bGUkMSIsInRlbXBsYXRlIiwic3R5bGUkMiIsImhlYWRlciIsInJvd19oZWlnaHQiLCJsb2dnZXIiLCJtYWtlJDExIiwidWlfdGFibGUiLCJyZW5kZXIiLCJmZXRjaCIsInRvdGFsX2l0ZW1zIiwiY29udGVudF9kaXYiLCJ3cmFwcGVyX2RpdiIsInJvd19zaXplIiwiaGVpZ2h0X24iLCJoZWlnaHQkMCIsInRhYmxlIiwicm93X2luZGV4IiwidW5sb2FkIiwicm93Iiwicm93X2RhdGEiLCJuZXdfY2FjaGUiLCJjYWNoZV9yZWYiLCJpbmRleGVzIiwiY2FjaGUiLCJsb2FkIiwiZGF0YSQwIiwiaW5zZXJ0ZWQiLCJjYWNoZSQwIiwidG9fbG9hZCIsInRvX2xvYWQkMCIsInRhYmxlX2hlaWdodCIsImNvbXB1dGVfdmlzaWJsZV9yb3dzIiwibGFzdF9zY3JvbGxfeSIsImRpdiIsInNjcm9sbF95JDAiLCJkaXJlY3Rpb24iLCJ2aXNpYmxlX2hlaWdodCIsIm51bWJlcl9vZl92aXNpYmxlX3Jvd3MiLCJmaXJzdF92aXNpYmxlX3JvdyIsImxhc3RfdmlzaWJsZV9yb3ciLCJibGVlZGluZyIsImJsZWVkaW5nJDAiLCJsYXN0IiwicHJlcGFyZSIsImN1cnJlbnRfcm93Iiwicm93JDAiLCJ2aXNpYmxlX3Jvd3MiLCJwb3B1bGF0ZV9vbl9zY3JvbGwiLCJyZXBvcHVsYXRlX2RlcHMiLCJtYWtlX3NwYWNlciIsInJlbmRlciQwIiwicmVuZGVyZWRfcm93Iiwicm93cyIsInNwYWNlciIsInMkMSIsInRhYmxlX2JvZHkiLCJmaXJzdF9zcGFjZXIiLCJsYXN0X3NwYWNlciIsInRhYmxlX2hlYWRlciIsInJlY3QiLCJyb3dzJDAiLCJzY3JvbGxfaGFuZGxlciIsImxhc3RfdXBkYXRlIiwidGltZW91dCIsInJlc2V0X3RpY2tlciIsImRlYm91bmNpbmdfaW50ZXJ2YWwiLCJvbl9jcmVhdGUkMCIsInNjcm9sbF90YXJnZXQkMCIsInNjcm9sbF90YXJnZXQkMSIsIndyYXBwZXIiLCJncmlkX3N0eWxlIiwiYXQkMiIsInRhYmxlJDAiLCJ0b19qc3RyJDIiLCJvZl9qc3RyJDEiLCJvZl9qdiIsImp2IiwicmFuZG9tX3N0YXRlIiwibmV3X3V1aWRfdjQiLCJ1dGY4X29mX2NvZGUiLCJtYXhiaXRzIiwiY29kZV9vZl9zdXJyb2dhdGVfcGFpciIsImhpZ2gxMCIsImxvdzEwIiwidXRmOF9vZl9zdXJyb2dhdGVfcGFpciIsImpzb25fZXJyb3IiLCJmbmFtZSIsImxudW0iLCJidWYkMCIsImJ1ZiQxIiwicmVhZF9qdW5rJDAiLCJvY2FtbF9sZXhfcmVhZF9qdW5rX3JlYyIsInJlYWRfanVuayIsIm9jYW1sX2xleF9zdGF0ZSIsIm9jYW1sX2xleF9zdGF0ZSQwIiwib2NhbWxfbGV4X3N0YXRlJDEiLCJ3cml0ZV9zcGVjaWFsIiwic3RvcCIsIm9iIiwid3JpdGVfY29udHJvbF9jaGFyIiwiZmluaXNoX3N0cmluZyIsImV4YyQwIiwiZXhjIiwid3JpdGVfc3RyaW5nX2JvZHkiLCJ3cml0ZV9zdHJpbmciLCJ3cml0ZV9udWxsIiwid3JpdGVfYm9vbCIsImRlYyIsIndyaXRlX2RpZ2l0cyIsIndyaXRlX2ludCIsImZsb2F0X25lZWRzX3BlcmlvZCIsIndyaXRlX2Zsb2F0Iiwid3JpdGVfc3RkX2Zsb2F0IiwiaXRlcjJfYXV4IiwiZl9lbHQiLCJmX3NlcCIsIml0ZXIyJDAiLCJ3cml0ZV9qc29uIiwid3JpdGVfdHVwbGUiLCJ3cml0ZV9hc3NvYyIsIndyaXRlX2xpc3QiLCJ3cml0ZV92YXJpYW50Iiwid3JpdGVfc3RkX2pzb24iLCJ3cml0ZV9zdGRfdHVwbGUiLCJ3cml0ZV9zdGRfYXNzb2MiLCJ3cml0ZV9zdGRfbGlzdCIsIndyaXRlX3N0ZF92YXJpYW50IiwidG9fYnVmZmVyIiwic3RkIiwidG9fc3RyaW5nJDUiLCJvYiQwIiwieW9qc29uX29mX3N0cmluZyIsInlvanNvbl9vZl9pbnQiLCJ5b2pzb25fb2Zfb3B0aW9uIiwieW9qc29uX29mX2EiLCJ5b2pzb25fb2ZfbGlzdCIsImxzdCIsInJlY29yZF9jaGVja19leHRyYV9maWVsZHMiLCJvZl95b2pzb25fZXJyb3IiLCJ3aGF0IiwieW9qc29uIiwic3RyaW5nX29mX3lvanNvbiIsImludF9vZl95b2pzb24iLCJvcHRpb25fb2ZfeW9qc29uIiwiYV9vZl95b2pzb24iLCJsaXN0X29mX3lvanNvbiIsInJldl9sc3QiLCJzdGFnX25vX2FyZ3MiLCJsb2MiLCJuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSIsImVtcHR5X2xpc3RfaW52YWxpZF9zdW0iLCJ1bmV4cGVjdGVkX3N0YWciLCJyZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIiwicmV2X2ZsZF9uYW1lcyIsImZsZF9uYW1lc19zdHIiLCJyZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyIsInJlY29yZF9leHRyYV9maWVsZHMiLCJyZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIiwiZmllbGRzJDAiLCJyZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIiwidW5kZWZpbmVkJDAiLCJyZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20iLCJzeW1ib2wkMTUiLCJqc3RyX29mX21ldGhvZCIsInVzZXJfb2ZfeW9qc29uIiwiZmllbGRfeW9qc29ucyIsIm5hbWVfZmllbGQiLCJzZXJ2ZXJfaWRfZmllbGQiLCJzZXJ2ZXJfbmFtZV9maWVsZCIsImlkX2ZpZWxkIiwiZHVwbGljYXRlcyIsImV4dHJhIiwiZmllbGRfeW9qc29uIiwiZmllbGRfbmFtZSIsImZ2YWx1ZSIsImZ2YWx1ZSQwIiwiZnZhbHVlJDEiLCJmdmFsdWUkMiIsInNlcnZlcl9uYW1lX3ZhbHVlIiwiaWRfdmFsdWUiLCJzZXJ2ZXJfaWRfdmFsdWUiLCJuYW1lX3ZhbHVlIiwieW9qc29uX29mX3VzZXIiLCJ2X2lkIiwidl9zZXJ2ZXJfbmFtZSIsInZfc2VydmVyX2lkIiwidl9uYW1lIiwiYm5kcyIsImFyZyQwIiwiYm5kcyQwIiwiYXJnJDEiLCJibmRzJDEiLCJhcmckMiIsImJuZHMkMiIsInBhcmFtc19vZl95b2pzb24iLCJ1c2VybmFtZV9maWVsZCIsInB3X2ZpZWxkIiwicHdfdmFsdWUiLCJ1c2VybmFtZV92YWx1ZSIsInlvanNvbl9vZl9wYXJhbXMiLCJ2X3B3Iiwidl91c2VybmFtZSIsInJlc3BvbnNlX29mX3lvanNvbiIsInVzZXJfZmllbGQiLCJhY2Nlc3NfdG9rZW5fZmllbGQiLCJhY2Nlc3NfdG9rZW5fdmFsdWUiLCJ1c2VyX3ZhbHVlIiwieW9qc29uX29mX3Jlc3BvbnNlIiwidl9hY2Nlc3NfdG9rZW4iLCJ2X3VzZXIiLCJlbmRwb2ludCIsImltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24iLCJhc3NvYyIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2giLCJpbWFnZV9ibHVyX2hhc2hlc19vZl95b2pzb24iLCJwcmltYXJ5X2ZpZWxkIiwicHJpbWFyeV92YWx1ZSIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2hlcyIsInZfcHJpbWFyeSIsImJuZCIsInR5cGVfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGUiLCJ0eXBlX3N0cl9vZl95b2pzb24iLCJ5b2pzb25fb2ZfdHlwZV9zdHIiLCJ0cyIsImpzb24iLCJ0X29mX3lvanNvbiIsInNvcnRfbmFtZV9maWVsZCIsInBhdGhfZmllbGQiLCJhbGJ1bV9pZF9maWVsZCIsInBhcmVudF9pZF9maWVsZCIsImltYWdlX2JsdXJfaGFzaGVzX2ZpZWxkIiwidHlwZV9maWVsZCIsImNvbGxlY3Rpb25fdHlwZV9maWVsZCIsImZ2YWx1ZSQzIiwiZnZhbHVlJDQiLCJmdmFsdWUkNSIsImZ2YWx1ZSQ2IiwiZnZhbHVlJDciLCJmdmFsdWUkOCIsInNvcnRfbmFtZV92YWx1ZSIsInBhdGhfdmFsdWUiLCJhbGJ1bV9pZF92YWx1ZSIsInBhcmVudF9pZF92YWx1ZSIsImNvbGxlY3Rpb25fdHlwZV92YWx1ZSIsInR5cGVfdmFsdWUiLCJpbWFnZV9ibHVyX2hhc2hlc192YWx1ZSIsInlvanNvbl9vZl90Iiwidl9jb2xsZWN0aW9uX3R5cGUiLCJ2X3R5cGUiLCJ2X2ltYWdlX2JsdXJfaGFzaGVzIiwidl9wYXJlbnRfaWQiLCJ2X2FsYnVtX2lkIiwidl9wYXRoIiwidl9zb3J0X25hbWUiLCJhcmckOCIsImJuZCQzIiwiYm5kcyQzIiwiYm5kcyQ0IiwiYXJnJDMiLCJibmQkMCIsImJuZHMkNSIsImFyZyQ0IiwiYm5kJDEiLCJibmRzJDYiLCJhcmckNSIsImJuZHMkNyIsImFyZyQ2IiwiYm5kJDIiLCJibmRzJDgiLCJhcmckNyIsImJuZHMkOSIsInNlc3Npb25fdXVpZCIsInNldF9zZXNzaW9uX3V1aWQiLCJhdXRob3JpemF0aW9uIiwidG9rZW4kMCIsInNlc3Npb25fdXVpZCQwIiwicmVxdWVzdCQxIiwiYmFzZV91cmwiLCJoZWFkZXJzIiwiUSIsInBhdGhfcGFyYW1zIiwiYmFzZV91cmkiLCJiYXNlX3BhdGhfc2VnbWVudHMiLCJlbmRwb2ludF9wYXRoX3NlZ21lbnRzIiwicGF0aF9zZWdtZW50cyQwIiwidXJpIiwidXJpJDAiLCJhdXRob3JpemF0aW9uJDAiLCJoZWFkZXJzJDAiLCJtZXRob2QiLCJib2R5IiwicGFyYW1zJDAiLCJ1cmlfd2l0aF9wYXJhbXMiLCJ1cmwkMSIsImluaXQkMCIsImNvbm5lY3QiLCJjcmVkZW50aWFscyIsInBhc3N3b3JkIiwidXNlcm5hbWUiLCJhdXRoIiwiYXV0aF9yZXNwb25zZSIsInRhZ19vZiIsImZ1dHVyZXMiLCJsaXN0ZW5lcnMiLCJ3b3JrZXIiLCJxdWVyeSIsInV1aWQiLCJmdXQiLCJzZXQkMCIsInF1ZXJ5JDAiLCJvbl9tZXNzYWdlIiwibWVzc2FnZSIsIm9mX3N0cmluZyQyIiwib2Zfc3RyaW5nJDMiLCJyZXEiLCJzcmNfdmlld3MiLCJmaWx0ZXJzIiwidF90b19qdiIsImVuY29kZXIiLCJqdl90b190IiwiZGVjb2RlciIsInNvcnRzX29mX3lvanNvbiIsImRhdGVfYWRkZWRfZmllbGQiLCJ2aWV3c19maWVsZCIsInZpZXdzX3ZhbHVlIiwiZGF0ZV9hZGRlZF92YWx1ZSIsInlvanNvbl9vZl9zb3J0cyIsInZfdmlld3MiLCJ2X2RhdGVfYWRkZWQiLCJ0X29mX3lvanNvbiQwIiwic29ydHNfZmllbGQiLCJpdGVtX2ZpZWxkIiwiaXRlbV92YWx1ZSIsInNvcnRzX3ZhbHVlIiwieW9qc29uX29mX3QkMCIsInZfaXRlbSIsInZfc29ydHMiLCJjb21wYXJlJDIiLCJ0b19qdiQwIiwidmlld3MiLCJzb3J0X25hbWUiLCJzb3J0X25hbWUkMCIsInZpZXdzJDAiLCJvZl9qdiQwIiwicGF0aCQwIiwidG9fanYkMSIsIm9mX2p2JDEiLCJ0b19qdiQyIiwib2ZfanYkMiIsInRvX2p2JDMiLCJvZl9qdiQzIiwicGF0aCQzIiwidG9fanYkNCIsIm9mX2p2JDQiLCJjb2xsZWN0aW9uX3R5cGUiLCJwYXRoJDQiLCJ0b19qdiQ1Iiwib2ZfanYkNSIsImdldF9rZXkiLCJzdGF0dXNfdG9fc3RyaW5nIiwibGFzdF9zb3VyY2VfaXRlbV9rZXkiLCJmaXJzdF91bmZldGNoZWRfa2V5IiwiZmlyc3RfbWlzc2luZ19rZXkiLCJmaXJzdF91bmZldGNoZWRfa2V5JDAiLCJwcF9wcm9ncmVzcyIsInJlbWFpbmluZyIsInBwX3JlcG9ydCIsInN5bmNfcHJvZ3Jlc3MiLCJzdGF0dXMkMCIsImFjdGl2ZV9sYXlvdXQiLCJnZXQkNyIsInN0cmluZyIsInNldCQxIiwidG9fdmlldyIsInJlcXVlc3QiLCJzdGFydF9vZmZzZXQiLCJpdGVtX2NvdW50Iiwic2VydmVyc19zdGF0dXMiLCJyZXBvcnQiLCJ1cGRhdGUkMSIsImVxIiwiY3VycmVudCIsIm1lbW8iLCJnZXRfdmlld19pdGVtX2NvdW50IiwiZXJyb3IiLCJjb25uZXhpb25zIiwiY29ubmVjdCQwIiwicmVmcmVzaCIsImNvbm5leGlvbiIsInNlcnZlcl9pZCIsInByZXZpb3VzX3N0YXR1cyIsInJlbWFpbmluZyQwIiwic2VydmVyc193aXRoX3N0YXR1cyIsInNlcnZlciIsIm5ld19jb25uZXhpb24iLCJzZXJ2ZXJzIiwidXJsX2ZpZWxkIiwicGFzc3dvcmRfZmllbGQiLCJzdWJtaXQkMSIsInVpX2Zvcm0iLCJ1cmwiLCJ1aV9zdGF0dXMiLCJmdXRfdG9fbHdkIiwic2VxX3NoYXJlIiwibF9zYW1lIiwicl9zYW1lIiwiciQxIiwibGliX2RpZmYiLCJzZXJ2ZXJzX2xpYnJhcmllcyIsInByZXZpb3VzX3ZhbHVlIiwidWkiLCJzdGF0dXNlcyIsInVpX2Zvcm0kMCIsIm5vd19wbGF5aW5nIiwiYXVkaW9fdXJsIiwiaXRlbV9pZCIsInNldF9wbGF5X3VybCIsInBsYXlsaXN0IiwiY3VycmVudF9pbmRleCIsInBsYXlsaXN0JDAiLCJpdGVtIiwiYWxidW1faWQiLCJzZXNzaW9uIiwiaW1hZ2VfaWQiLCJpbWdfc3JjIiwicmVzZXRfcGxheWxpc3QiLCJtYWtlIiwiYXVkaW9fZWx0Iiwic2V0X3NyYyIsIm5leHRfaW5kZXgiLCJzZXRfcG9zaXRpb25fc3RhdGUkMCIsIm9uX2Vycm9yIiwiYnRuX25leHQiLCJucCIsInRyYWNrX2NvdmVyIiwidHh0JDAiLCJ0aXRsZSIsInRyYWNrX2RldGFpbHMiLCJub3dfcGxheWluZyQwIiwibWFrZSQxMiIsIm9uX2NsaWNrJDAiLCJjb2x1bW5zIiwibWFrZSQxMyIsInJhbmdlZCIsIm9yZGVyIiwiaW1nX3VybCIsInN0YXJ0X2luZGV4IiwiaW1hZ2VfYmx1cl9oYXNoZXMiLCJwbGF5X2Zyb20iLCJwbGF5X29uX2NsaWNrIiwiY2IiLCJpbWdfdXJsJDAiLCJwbGFjZWhvbGRlciIsImRhdGFfc291cmNlIiwibWFrZV9ub3dfcGxheWluZyIsImZldGNoJDEiLCJyYW5nZWRfdmlldyIsInBsIiwicGxheWVyIiwicGxheWVyX3VpIiwiZl9zZWFyY2giLCJmX3NvcnQiLCJmX29yZGVyIiwiZl9zb3J0X29yZGVyIiwiY2hvaWNlcyIsImZfbGlicmFyaWVzIiwiZl92YWx1ZSIsInJlcXVlc3QkMiIsIm5ld192aWV3IiwiaXRlbV9jb3VudCQwIiwib3JkZXIkMCIsIm1haW5fdmlldyIsIm1haW5fbGlzdCIsImRpc3BsYXlfbm9uZSIsInN0eWxlJDMiLCJiaWdfY292ZXIiLCJhcHAiLCJpc19zdG9yYWdlX3BlcnNpc3RlbnQiLCJvbl9sb2FkIiwiYXBwJDAiXSwic291cmNlcyI6WyIvYnVpbHRpbi8rYXJyYXkuanMiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLytzeXMuanMiLCIvYnVpbHRpbi8rYmFja3RyYWNlLmpzIiwiL2J1aWx0aW4vK3N0ZGxpYi5qcyIsIi9idWlsdGluLytqc2xpYi5qcyIsIi9idWlsdGluLytmYWlsLmpzIiwiL2J1aWx0aW4vK2llZWVfNzU0LmpzIiwiL2J1aWx0aW4vK29iai5qcyIsIi9idWlsdGluLytpbnQ2NC5qcyIsIi9idWlsdGluLytiaWdhcnJheS5qcyIsIi9idWlsdGluLytpbnRzLmpzIiwiL2J1aWx0aW4vK2hhc2guanMiLCIvYnVpbHRpbi8rbWFyc2hhbC5qcyIsIi9idWlsdGluLytjb21wYXJlLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytmc19ub2RlLmpzIiwiL2J1aWx0aW4vK2ZzLmpzIiwiL2J1aWx0aW4vK3VuaXguanMiLCIvYnVpbHRpbi8rZnNfZmFrZS5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rbWQ1LmpzIiwiL2J1aWx0aW4vK2lvLmpzIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGV4aW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRleGMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzLWRhdGEvQ0NGUXVldWUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi95b2pzb24vbGV4ZXJfdXRpbHMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3RvcmVzLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9zeW5jLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9sYW5nLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi93b3JrZXJfY2xpZW50Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9zZXJ2ZXJzLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9wbGF5ZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxBdG9taWMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGRsaWIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDSW50Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0Zsb2F0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29iai5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbExhenkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9sYXp5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvb3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcmVzdWx0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jaGFyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvaW50Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnl0ZXMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9hcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3NldC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL21hcC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0YWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcXVldWUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9idWZmZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi95b2pzb24vY29kZWMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi95b2pzb24vc2FmZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3ByaW50Zi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIveW9qc29uX2NvbnZfZXJyb3IubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mdW4ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9kaWdlc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9oYXNodGJsLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0Zvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbGxiYWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNfb2Zfb2NhbWwtY29tcGlsZXIvcnVudGltZS9qc29vX3J1bnRpbWUubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9sd2QvbHdkX3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2x3ZC9sd2RfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZF9zZXEucHAubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2Zvcm1zL2ZpZWxkLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2Jyci1sd2QvZWx3ZC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NBcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NIYXNodGJsLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0xpc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDT3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NSZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMtZGF0YS9DQ011bHRpTWFwLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2JycmVyL2RvbV9yZWN0X3JlYWRfb25seS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9icnJlci9yZXNpemVfb2JzZXJ2ZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvYnJyZXIvbWVkaWFfc2Vzc2lvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9icnJlci9icnJlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL2ltcG9ydC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi9jb21tb24vdHJhbnNsYXRlZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL2VuY29kaW5ncy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL3BlcnNpc3RlbnQubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2NvbW1vbi9sb2dnZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2NvbW1vbi9hdHRycy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvYnV0dG9uL2J1dHRvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29udHJvbGxlZF9zY3JvbGwvY29udHJvbGxlZF9zY3JvbGwubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2Zvcm1zL2Zvcm0ubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2Zvcm1zL2ZpZWxkX3RleHRpbnB1dC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvZm9ybXMvZmllbGRfc2VsZWN0Lm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi9mb3Jtcy9maWVsZF9jaGVja2JveGVzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi90YWJsZS9GRkNhY2hlLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi90YWJsZS9zY2hlbWEubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL3RhYmxlL3ZpcnR1YWxfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N0ZC9zdGQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi95b2pzb24vY29tbW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIvcHB4X3lvanNvbl9jb252X2xpYi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGF0YV9zb3VyY2UvamVsbHlmaW4ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3dvcmtlcl9hcGkvd29ya2VyX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvdmlldy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvZGJfd29ya2VyX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vaW1wb3J0Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9hcHBfc3RhdGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2x3ZF92aWV3Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi91aS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vdWlfcGxheWxpc3QubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL21haW4ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGRfZXhpdC5tbCJdLCJtYXBwaW5ncyI6Ijs7QSxDOztHOzs7UTtTOzs7RztJO0k7STtHO0U7Ozs7R0FxREEsU0FBU0EsZ0JBQWdCQyxJQUFJQyxJQUFJQyxJQUFJQyxJQUFJQztJQUN2QyxHQUFJRCxNQUFNRjtLQUFJLElBQ0QsSUFBRkksT0FBT0EsS0FBS0QsS0FBS0MsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7O0tBQy9DLElBQ00sSUFBRkEsSUFBSUQsS0FBS0MsUUFBUUEsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7SUFFdEQ7R0FDRjtHQXhDQSxTQUFTQyxlQUFnQkMsR0FBR0MsR0FBR0o7SUFDdEIsSUFBSEYsU0FBU08sTUFBTUw7SUFDbkJGO0lBQ0EsUUFBUUMsUUFBUUYsS0FBSU8sT0FBS0wsTUFBTUMsS0FBS0QsTUFBS0YsTUFDdkNDLEdBQUdDLE1BQUlJLEVBQUVOO0lBRVgsT0FBT0M7R0FDVDtHQzZDQSxTQUFTUSx5QkFBMEJI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QUVzakQ7YUFDWFcsT0FBT2xpRDtLQUFVLFlBQUEsV0FEUi9CLEdBQ0YrQjt3QkFqcEJUbzhDO1NBa3BCT3I2QztLQUFLLE9BaHBCWnM2QyxRQWdwQk90NkM7SUFDUTtJQUVqQixPQWxGRXUvQyxZQThFRVksUUFoRUZ0RyxRQStEYTJGO0dBS2M7WUFFM0JZLE9BQU1aLEtBQXFCdGpELEdBQzdCLFlBckZFcWpELFlBb0YyQnJqRCxHQWhCM0I4akQsWUFnQk1SLE1BQytCO1lBS3JDYSxLQUFNYjtJQUNSLE9BUEVZLE9BTU1aLG9CLGtCQTNwQk5sRjtHQTRwQjJCO0c7d0IscUI7O0k7SSxPO0c7Rzs2QixPLGM7O0k7SSxPO0c7O0k7STs7OztJLE87Rzt5QixPLHNCLGM7MEIsaUM7bUMsTyx5Qjs4QjtHO0csSSxlO3VCLDRCOzRCLGlDOztJO0k7Rzt5QixzQjs7SSw0QjtHOztJLFk7O0ksTzs7Rzs7SSxZOztJO0k7O0c7d0IsTSxPO3lCLGMsTzs7SSxZOztJOzt3QixZO3dCLFk7MkIsVSxPOztJLFk7O0k7OzhCO3dCLDhCO3dCLHFCOztJO0ksNkIsTyx1QjtHOzs7OztvQjs7TSxVOzs7Ozs7STtHOztJO0ksVzs7STtJO0c7O0k7SSxPLHlCLFU7RztHOzs7SyxPOzZCLE8sTyxlLE8sTztJO0ksbUI7Rzt1QixPLG1COzBCLE8scUMsTzs7SSxPLE87Rzs7SSxPO2E7YTtHOztJLE87RztZQ2htQnpCckYsYzt1QjttQixnQjt5QixrQjs7STtLLE07STtJLHVCLCtDO0k7SSxxQyw4QjtJO29CLHVEO0k7RzswQixnQzt3Qix1Qjs7STs7OzJCLGlCLG1CO0c7O0ksNkIsZ0IsbUI7RztrQix3Qjs7cUIsbUIsb0I7SSxvQixtQix1QjtJO0c7O0kscUM7Rzs7SSxzQjs7YyxlOztjLE87YTtHOztJLDRCLE81QmhERnAwQjtHO0c7c0IsbUI7MEMsOEI7RzsrQixvQixTOztJO0ksVTs7SztLO0k7STtJO0c7K0IsTyx3QjtHO0k7STtJO0k7STtJO0k7STtJO0c7RztHO0c7RztzQixPLGtCOztJLEksUTs7Ozs7Szs7STtHO0c7RztHO0k7STtJOztJLFc7O0k7RztHO29CLHNCOzsyQixPLG9CO0k7SztNO007TTtLOzs7Ozs7Szs7Rzs7MkIsd0IscUI7STtLLEksa0I7SztLO0s7Ozs7OztLOztHO0c7dUIsTyxhO3NCLGtCOztJO0k7STtHO3lCLE8sYTtzQixpQjtHO3dCLHVCO3NCLHVCO3dCLGlDOzBCO0c7STtJO0k7STtJO0k7STtJO0k7STtJO0k7STtJO3VCLHVCO3FCLHFCO29CLG9CO0csSSwrQjtxQixtQjt1QixxQjtzQixvQjt1Qix1Qjt1Qix1QjtHO3dCLDBCO0csK0I7dUIsa0IsUzs7Ozs7O08sNkJObUNBVztPOzs7TywrQkFBQUE7Tzs7TTs7O0s7OztNOzs7OztNOzs7O1U7Ozs7STtJO0ksUTtJO0ksb0I7STtHOztJO0ksTztHOztJO0k7Rzs7SSxrQjswQix3QjtJO0k7RzsyQixnQzs7SSwwQztHO3VCLG9CLE8sdUI7O0ksWSwrQjtHOztJO0ksSSxRLHVCO0k7Rzt3QixzQjs7STtJO0k7STtHO0c7STtJO0k7STtJO0k7STtJO0k7STtJO29DLDRCO0csbUM7RyxpQztHLGdDO0csa0M7b0IsOEI7O0k7STs7Ozs7Rzs7SSxnQztHO2tDLGtDLFM7Rzs7STs7O29COztNO007Ozs7O0ksTztHO3FCLGdEO3lCLGdEO3NCLGdEO3VCLGdEO3lCLFM7c0IsTyxRO0c7RztJO0k7STtHOztJLE8sa0I7Rzs0QiwwQixPOztJLDZCO0k7RztHO0c7MEI7O0ksbUMsZTtHO0c7O0k7SSxTO0k7O0s7Szs7SSxvQjtJO0c7Ozs7Ozs7Ozs7Ozs7OztJO0ksb0Q7STtJO0kscUJLcENBZCxtQjtJO0k7STtJO0k7STtJO0ksb0Q7STtHO0c7O0k7STtHO0c7Rzs7d0I7SSxzQixrQztHO0c7RztHO0c7RztvQixpQjtHO3FCLHlCOzt3QjtJLHNCLCtCO0c7O0ksSSxpQjs7OzBCOzs7RztHO0c7O0k7STtHOztJO0k7STtHO0c7O0k7STtJO0c7RztHO0c7WThCRkEzSSxRQUFTdW9DLE1BQUtDLE1BQU1DLE1BQ3RCLFdBRFdGLE1BQUtDLE1BQU1DLE1BQ0s7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OzJCLE8vRDVOQWh3QixRO0dBVEFGOztJO0ssSztLLEs7SyxLO0ssSztLLEs7SyxJOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCO0k7Rzs7SSxzQjtJLHVCLG9DO0c7O0k7STtJLHVCLDRDO0ksSSxxQixZOzs7TTs7O0ssZ0I7Szs7TTs7O0ssc0I7STs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7b0I7SyxXO0s7Ozs7Rzs7WWdFdERBbXdCLFVBQVEzNUQsR0FBSSxjQUFKQSxHQUFnQztZQUd4QzQ1RCxVQUFRMUw7SUFDSixtQkFESUE7MkJBRUxodUQsY0FBSyxXQUFMQTtRQUNHNFA7SUFDSixZQURJQTtJQUNKO0dBQ3VDO1lBRXpDK3BELE1BQU1DLElBQUssT0FQWEYsVUFPTUUsSUFBNkI7R0FHdEIsSUFBZkM7WUFDQUMsbUJBQWlCLGNBRGpCRCxpQkFDNkM7WS9DMUI3Q0UsYUFBYTVyRCxLQUFJMU47SUFJbkIsU0FBSXU1RCxRQUFRdjZELEdBQUVnQixHQUFJLGNBQUpBLE1BQUZoQixlQUFpQjtJQUUxQixHQUZDdTZELFdBSmV2NUQsSUFPVCxPQU5OeXZCLFNBRFcvaEIsS1hVYm1WLFdXVmlCN2lCO0lBUVgsR0FKSnU1RCxZQUpldjVEO0tBQ2Z5dkIsU0FEVy9oQixLWFVibVYsa0JXVmlCN2lCO0tBV1QsT0FWTnl2QixTQURXL2hCLEtYVWJtVixpQldWaUI3aUI7O0lBWVgsR0FSSnU1RCxZQUpldjVEO0tBQ2Z5dkIsU0FEVy9oQixLWFVibVYsa0JXVmlCN2lCO0tBQ2Z5dkIsU0FEVy9oQixLWFVibVYsa0JXVmlCN2lCO0tBZ0JULE9BZk55dkIsU0FEVy9oQixLWFVibVYsaUJXVmlCN2lCOztJQWlCWCxHQWJKdTVELFlBSmV2NUQ7S0FDZnl2QixT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aUNjeEIsSUFHWHo2RDtJQUlILE9EeldGeXZCLFNDa1dnQmdyQztHQVFRO1lBRzFCNkIsVUFBWS8wQyxXQUF5Qmt6QyxJQUFHejZEO0lBQzFDLEdBRGN1bkIsU0FBTUMsTUFBTkQsUUFBQTBoQyxNQUFNemhDLGNBQU55aEM7SUFDZCxhQURnQy9ELGlCQUFOcVgsTUFBTXJYLGdCQUFOcVg7SUFDMUIsR0FEMEJBLEtBNUNwQk4sZUE0Q2lDeEIsSUFBR3o2RCxTQTlDeEM0N0QsV0E4Q3FDbkIsSUFBR3o2RDtJQUl4QyxPQWhIQTZ2QixnQkE0R3FDNHFDLElBQXpCeFI7R0FLVTtZQUV0QnVULFlBQVc5dUQsS0FBTTZaLFdBQXdCZzFDLEtBQUl2OEQ7SUFDL0MsR0FEbUJ1bkIsU0FBTUMsTUFBTkQsUUFBQTdwQixNQUFNOHBCLGNBQU45cEI7SUFDbkIsYUFEc0N3bkQsaUJBQU4rRCxNQUFNL0QsZ0JBQU4rRDtJQUNoQyxHQURhdjdDO1NBSUYrc0QsS0FKRS9zRDtLRnhUWHVoQixRRTRUU3dyQztTQUhQZ0MsT0FHT2hDOzs7U0FIUGdDLE9GeFZGN3RDLFNFdVZpQmx4QjtJQVBqQjQrRCxjQU84QnJULE1BQVdzVCxLQUN2Q0UsTUFEMkN6OEQ7SUFTdkMsSUFBSjVCLElGMVZGc0IsU0VrVkUrOEQ7SUZ6VEZ4dEMsUUV5VEV3dEM7SUFTSixPQURJcitEO0dBRUg7O0ksYTtJO0c7cUIsa0I7O0k7Ozs7Ozs7SSxNO0c7O0k7O0s7O0ssT3JCdFFDd2hCO0s7O21DLFd3QnBIQTRsQjs7O0k7OztVLFdBQUFBO1UsV0FBQUE7O0ssTSxXQUFBQTtJLE80Q0ZBbzBCO0c7O0ksSSx1QixlLE1qRDBCQWhyQztJO0ksaUJBTUFsdkI7STthLFdLOUJBOGxDO0c7Rzs7STs7SztLO0s7Szs7Ozs7TyxNO00saUI7O007Ozs7OztJLE07Rzs7SSxJLHVEOzs7K0I7OztHOztJOztLO0s7SztLOzs7OztPLE07TSxpQjs7TTs7Ozs7aUIsTTs7Rzs7SSxJLHVEOzs7K0I7OztHOztJOzs7Rzs7STtJLE9McUtBNVY7Rzs7STtJO0ssTzs7O0k7Rzs7STs7O0k7STtLOzs7O007Ozs7OztTOztTOztTOztTLHNCbEI5SUEzUDs7UyxzQkFDQUY7O1Msc0JBQ0FDOztTa0I4QkFpUCxlOztTOztTOztTLHNCOztTO1M7VTtVO1U7VTtVO1U7Ozs7VztXO1c7VztXO1c7Vzs7Ozs7OztxQyxzQmpCRkExTDs7Ozs7UztTO1U7VTs7OztXO1c7Vzs7Ozs7OztvQyxzQkFBQUE7Ozs7O1M7UztVO1U7Ozs7VztXO1c7Ozs7Ozs7b0Msc0JBQUFBOzs7OztTO1M7UztTOztTO1UsTzs7Uzs7UztTO1UsTzs7Uzs7UztTO1UsTzs7Uzs7UztVLE87O1M7O1M7aUI7OztHOztJO0k7SyxPOzs7STtHOztJOzs7STtJO0s7Ozs7OztnQmlCdkJBN2pCOztTO1M7VSxPOztTOztTO1M7VSxPOztTO2lCOztLOzs7Rzs7STtHOztJO0k7Szs7Ozs7O1MsNEMsT0NuQ0UrdkI7O1MsT0FBQUE7O1MsT0FBQUE7O1MsT0FBQUE7O1MsT0FBQUE7O1MsT0FBQUE7O1M7VTtVO1U7VTtVO1U7VTs7O1U7UyxPQURGNnBDOztTO2lCOztLOzs7Rzs7STtHOztJO0k7Szs7Ozs7O1M7VTtVO1U7VTtVO1U7VTs7O1UsT0E2Q0FLO1M7O1M7aUI7O0s7OztHOztJO0c7O0k7STtLOzs7Ozs7UztTO1M7Uzs7Uzs7UztpQjs7Szs7O0c7K0IsNkM7O0k7STtLOzs7Ozs7Uzs7UztpQjs7Szs7O0c7O0k7STtLLE87OztJO0c7O0k7OztJO0k7Szs7Ozs7O1M7O1M7O1M7UztVLE87O1M7O1M7VSxPOztTOztLOzs7Rzs2QiwyQzs7STtJO0s7OztpQztpQztLOzs7Rzs7STtJO0ssTzs7O0k7Rzs7STs7O0k7STtLOzs7Ozs7UztTO1UsTzs7Uzs7UztTO1UsTzs7Uzs7UztTO1UsTzs7Uzs7UztVLE87O1M7aUI7O0s7OztHOztJO0c7O0k7STtLOzs7Ozs7U0RnQkExcUMsZTs7UyxrRDs7UztpQjs7Szs7O0c7O0k7Rzs7STtJO0s7Ozs7TSxNO2lDO0s7OztHOztJO0c7O0k7STtLOzs7Ozs7Uzs7UyxNOztTO2lCOztLOzs7Rzs7STtHOztJO0k7Szs7OztNLE07aUM7Szs7O0c7O0k7Rzs7STtJO0s7Ozs7OztTOztTLE07O1M7aUI7O0s7OztHOztJO0c7O0k7STtLOzs7O00sTTtpQztLOzs7Rzs7STtHOztJO0k7Szs7Ozs7O1M7O1MsTTs7UztpQjs7Szs7O0c7O0k7Rzs7STtJO0s7Ozs7OztTOztTO2lCOztLOzs7Rzs7STtJOztHOztJO0k7SSxxQixNO0k7bUI7STtHOztJO0s7TTtNO007Szs7OzsrQixPaUR6REEycUM7OztHO0c7O0ksOEI7Ozs7Ozs7Ozs7Ozs7Ozs7O0c7O0ksTTs7Rzs7SSxtRTtJO0c7O0ksa0U7STtHO1lDSUE4QyxpQkFBaUJ2K0MsS0FBVSx1QkFBVkEsS0FBcUI7WUFHdEN3K0MsY0FBYzM5RCxHQUFRLG9CQUFSQSxHQUFjO1lBUTVCNDlELGlCQUFpQkM7SSxZQUVUO1FBREg3OEQ7SUFBSyxPQUFBLFdBRE82OEQsYUFDWjc4RDs7WUFjTDg4RCxlQUFlRCxhQUFhRTtJQUFNLHNCbkV5QmxDeDVDLFltRXpCZXM1QyxhQUFhRTtHQUF5RDtHQWtCekY7SUFBQTtJQUVJQztZQUVBQyxnQkFBZ0JDLE1BQUtDO0lBQVMsTUFBQTs4Q0FBZEQsT0FBS0M7R0FBdUQ7WUFjNUVDLGlCQUFpQkQ7SUFDbkIsVUFEbUJBLHNDQUFBQSxlQUVUaC9DLE1BRlNnL0MsV0FFRixPQUFQaC9DO0lBQ0gsT0FqQkw4K0Msc0JBY2lCRTtHQUc0QztZQWtCN0RFLGNBQWNGO0lBQ2hCLFVBRGdCQSxtQ0FBQUEsZUFFVDU5RCxJQUZTNDlELFdBRUosT0FBTDU5RDtJQUNBLE9BdENMMDlELHNCQW1DY0U7R0FHNkM7WUFtQzNERyxpQkFBaUJDLGFBQWFKO0lBQ2hDLHFCQURnQ0EsaUJBR25CLFdBSE1JLGFBQWFKO0dBR0Y7WUFzQjVCSyxlQUFlRCxhQUFhSjtJQUM5QixVQUQ4QkEscUNBQUFBO0tBR2QsSUFEUkosTUFGc0JJLFdBR3hCTSxrQkFIV0YsYUFFVFI7S0FFTixPbkVuR0F4NUMsSW1Fa0dJazZDOztJQUVDLE9BdkdMUixzQkFrRzRCRTtH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RDs7MkJrQzlERU8sYWxDOERGOWlELFVBQUF1aUQ7OzJCa0M5REVPLGFsQzhERjlpRCxVQUFBdWlEOzsyQmtDOURFTyxhbEM4REY5aUQsVUFBQXVpRDs7MkJrQzlERU8sYWxDOERGOWlELFVBQUF1aUQ7OzJCa0M5REVPLGFsQzhERjlpRCxVQUFBdWlEOzsyQmtDOURFTyxhbEM4REY5aUQsVUFBQXVpRDs7Ozs7OzsyQmtDOURFTyxhbEM4REY5aUQsVUFBQXVpRDs7MkJrQzlERU8sYWxDOERGOWlELFVBQUF1aUQ7OzJCa0M5REVPLGFsQzhERjlpRCxVQUFBdWlEOzsyQmtDOURFTyxhbEM4REY5aUQsVUFBQXVpRDs7MkJrQzlERU8sYWxDOERGOWlELFVBQUF1aUQ7OzJCa0M5REVPLGFsQzhERjlpRCxVQUFBdWlEOzsyQmtDOURFTyxhbEM4REY5aUQsVUFBQXVpRDs7MkJrQzlERU8sYWxDOERGOWlELFVBQUF1aUQ7OzJCa0M5REVPLGFsQzhERjlpRCxVQUFBdWlEOzs7OzJCa0M5REVPLGFsQzhERjlpRCxVQUFBdWlEOzsyQmtDOURFTyxhbEM4REY5aUQsVUFBQXVpRDs7MkJrQzlERU8sYWxDOERGOWlELFVBQUF1aUQ7OzJCa0M5REVPLGFsQzhERjlpRCxVQUFBdWlEOzsyQmtDOURFTyxhbEM4REY5aUQsVUFBQXVpRDs7MkJrQzlERU8sYWxDOERGOWlELFVBQUF1aUQ7OzJCa0M5REVPLGFsQzhERjlpRCxVQUFBdWlEOzsyQmtDOURFTyxhbEM4REY5aUQsVUFBQXVpRDs7MkJrQzlERU8sYWxDOERGOWlELFVBQUF1aUQ7Ozs7O09BQUEsT2tDL0NFUyx3QmxDK0NGaGpELFVBQUF1aUQ7OztJQUFBLE9rQ3ZDRVcsZ0JsQ3VDRmxqRCxVQUFBdWlEO0dBc0NtQjtZQXRDbkJpRjtJQUFBOztPQUNFOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBOztPQUNBO2VBQ0E7O0dBQ2lCO1lBc0VmQyxtQkFBbUIxa0U7SUFDYixJQUFKUyxnQkFEaUJUO0lBRUwsT0E5R2xCd2tFLGtEQTZHTS9qRTtHQUNpQztZQUVuQ2trRSxtQkFBbUJDO0lBQ2YsWUFqSFJILGVBZ0h1Qkc7OzsrQkFDaUJDLGdCQUFVLE9BQVZBOztJQUFzQixNQUFBO0dBQVk7WUFFMUVDLFlBQUF0RjtJQUFBLFVBQUFBLHFDQUFBQTtLQUNFO01BREZ5QixnQkFBQXpCO01BQ0UwQjtNQUNBNkQ7TUFDQTFEO01BQ0EyRDtNQUNBQztNQUNBQztNQUlBL0Q7TUFDQWdFO01BQ0FDO01BQ0FDO01BYkYvRDtNQUFBQztNQUFBaitDOztTQUFBO1NBQUE7d0JBQUE7O1dBQUEwc0I7O1dBQUF3eEI7V0FBQUM7MENBQUFBOzs7Ozs7Z0JBQUFBO2lCQUFBQTtrQkFBQUE7bUJBQUFBO21CZ0ZuTEVYLFVoRitMQXNFO2lCQVpGOUQsb0JBQUFHLFlnRm5MRVgsVWhGbUxGUTs7aUJBWUUsSUFBQUksU0FuQkVnRCxtQkFPSmxEO2lCQVlFNEQsb0JBQUExRDs7O3VCZ0YvTEFaLFVoRnFMQWlFO2dCQUZGekQsb0JBQUFHLFlnRm5MRVgsVWhGbUxGUTs7Z0JBRUUsSUFBQUssVytFN0hBbEMsaUIvRTJIRitCO2dCQUVFdUQseUJBQUFwRDs7c0JnRnJMQWIsVWhGNkxBSztlQVZGRyxvQkFBQUcsWWdGbkxFWCxVaEZtTEZROztlQVVFLElBQUFNLFcrRXJJQW5DLGlCL0UySEYrQjtlQVVFTCx5QkFBQVM7O3FCZ0Y3TEFkLFVoRnVMQWtFO2NBSkYxRCxvQkFBQUcsWWdGbkxFWCxVaEZtTEZROztjQUlFLElBQUFPLFcrRS9IQXBDLGlCL0UySEYrQjtjQUlFd0Qsb0JBQUFuRDs7b0JnRnZMQWYsVWhGeUxBb0U7YUFORjVELG9CQUFBRyxZZ0ZuTEVYLFVoRm1MRlE7O2lCQU1FZ0UsVytFdEVBM0YsaUJBM0RBRixrQi9FMkhGK0I7YUFNRTBELHlCQUFBSTs7bUJBTkY3RDtlQUFBQTtnQkFBQUE7aUJBQUFBO2tCQUFBQTtrQmdGbkxFWCxVaEZvTEFJO2dCQURGSSxvQkFBQUcsWWdGbkxFWCxVaEZtTEZROztnQkFDRSxJQUFBaUUsVytFNUhBOUYsaUIvRTJIRitCO2dCQUNFTixvQkFBQXFFOzs7c0JnRnBMQXpFLFVoRjhMQXFFO2VBWEY3RCxvQkFBQUcsWWdGbkxFWCxVaEZtTEZROztlQVdFLElBQUFrRSxXQW5JRnRCLDRCQXdIQTFDO2VBV0UyRCxpQ0FBQUs7O3FCZ0Y5TEExRSxVaEZzTEFPO2NBSEZDLG9CQUFBRyxZZ0ZuTEVYLFVoRm1MRlE7O2NBR0UsSUFBQW1FLFcrRTlIQWhHLGlCL0UySEYrQjtjQUdFSCxrQkFBQW9FOztvQmdGdExBM0UsVWhGZ01BdUU7YUFiRi9ELG9CQUFBRyxZZ0ZuTEVYLFVoRm1MRlE7O2lCQWFFb0UsVytFN0VBL0YsaUJBM0RBRixrQi9FMkhGK0I7YUFhRTZELCtCQUFBSzs7bUJnRmhNQTVFLFVoRndMQW1FO1lBTEYzRCxvQkFBQUcsWWdGbkxFWCxVaEZtTEZROztZQUtFLElBQUFxRSxXK0VoSUFsRyxpQi9FMkhGK0I7WUFLRXlELHdCQUFBVTs7OztvQkFMRjMxQjs7UUFnQmlEO0tBaEJqRDFzQixLQUFBMjlDO1FnRm5MRUgsVWhGbUxGUTtNQUFBLE9rQzlJRWYsd0JsQzhJRnJqRCxVZ0ZuTEU0akQsVWhGbUxGUSxhQUFBOUI7UWdGbkxFc0IsVWhGbUxGUztNQUFBLE9rQzFJRWYsb0JsQzBJRnRqRCxVZ0ZuTEU0akQsVWhGbUxGUyxRQUFBL0I7S0FDRTtNQUFBLFFnRnBMQXNCLFVoRm9MQUk7TUFDQTBFLGtCZ0ZyTEE5RSxVaEZxTEFpRTtNQUNBLFVnRnRMQWpFLFVoRnNMQU87TUFDQXdFLGFnRnZMQS9FLFVoRnVMQWtFO01BQ0FjLGlCZ0Z4TEFoRixVaEZ3TEFtRTtNQUNBYyxrQmdGekxBakYsVWhGeUxBb0U7TUFJQSxVZ0Y3TEFwRSxVaEY2TEFLO01BQ0EsVWdGOUxBTCxVaEY4TEFxRTtNQUNBLFVnRi9MQXJFLFVoRitMQXNFO01BQ0FZLHdCZ0ZoTUFsRixVaEZnTUF1RTs7O09BREFZO09BREFDO09BREFsRTtPQVBBRDtPQUZBRTtNQURGLEdBYUUrRDtXQWJGcGtFLElBYUVva0UsMEJBYkZoc0IsTUFBQXA0Qzs7V0FBQW80QztNQUFBO2NBQ0Vpb0I7Y0FDQTJEO2NBQ0E3RDtjQUNBOEQ7Y0FDQUM7Y0FDQUM7Y0FJQS9EO2NBQ0FrRTtjQUNBRDtjQVpGanNCOztLQUFBO01BQUEscUJnRm5MRThtQixVaEYrTEFzRTtNQVpGO3NCZ0ZuTEV0RSxVaEY4TEFxRTtNQVhGLHFCZ0ZuTEVyRSxVaEY2TEFLO01BVkYscUJnRm5MRUwsVWhGc0xBTztLQUhGLE9rQ2hJRVY7Y2xDZ0lGempEO2NBQUFzaUQ7NEJnRm5MRXNCLFVoRm9MQUk7O0lBREYsT2tDeEhFTCx5QmxDd0hGM2pELFVBQUFzaUQ7R0FnQmlEO1lBaEJqRDJHO0lBQUE7S0Fhb0JDO0tBRGxCQztLQURBQztLQURBakU7S0FKQWtFO0tBREFDO0tBREFDO0tBREF0RTtLQURBdUU7S0FEQXBFO0tBREZDO2FBYW9CNkQ7U0FBQTNELFNBYnBCRjs7O01BYW9Cb0U7dUIsTytFM0xsQjFILGlCQVhBRjtVL0VzTWtCcUg7TUFBQVEsa0JBQUFEO01BQUFsRSxhQUFBbUUsT0FicEJyRTs7S0FZRWwvRCxNQWZFc2hFLG1CQWVGMEI7S0FBQTFELHVCQUFBdC9ELE1BQ2tCby9EO0tBRmxCRCxRQW5JRjZCLDRCQW1JRWlDO0tBQUF6RCx1QkFBQUwsUUFDQUc7S0FGQUQsUStFbk1BM0QsaUIvRW1NQXNEO0tBQUF3RSx1QkFBQW5FLFFBQ0FHO09BTEEwRDs7TUFBQTNrRSxJQUFBMmtFO01BQUEzRCxRK0VwTEEzRCxpQkFYQUYsa0IvRStMQW45RDtNQUFBMmlFLGdCQUFBM0I7TUFBQWtFLGFBQUF2QyxLQUlBc0M7O1NBSkFDLFNBSUFEO09BTEFMOztNQUFBeHNCLE1BQUF3c0I7TUFBQU8sUStFOUxBaEksaUIvRThMQS9rQjtNQUFBZ3RCLGtCQUFBRDtNQUFBRSxhQUFBRCxPQUNBRjs7U0FEQUcsU0FDQUg7T0FGQUw7O01BQUF2c0IsTUFBQXVzQjtNQUFBUyxRK0U3TEFuSSxpQi9FNkxBN2tCO01BQUFpdEIsa0JBQUFEO01BQUFFLGFBQUFELE9BQ0FGOztTQURBRyxTQUNBSDs7S0FGQUksUStFNUxBdEksaUIvRTRMQW9EO0tBQUFtRix1QkFBQUQsUUFDQUQ7T0FGQVY7O01BQUF2c0IsTUFBQXVzQjtNQUFBYSxRK0UzTEF4SSxpQi9FMkxBNWtCO01BQUFxdEIsa0JBQUFEO01BQUFFLGFBQUFELE9BQ0FGOztTQURBRyxTQUNBSDs7S0FGQUksUStFMUxBM0ksaUIvRTBMQXVEO0tBQUFxRix1QkFBQUQsUUFDQUQ7SUFGRixzQkFDRUU7R0FlK0M7R0F5RmhDLElBQWZDO1lBQ0FDLGlCQUFpQnBuRSxHQURqQm1uRSxzQkFDaUJubkUsV0FBMEI7WUFFM0NxbkUsY0FBZTc1QjtJQUNqQixHQURpQkE7U0FFb0J2c0MsSUFGcEJ1c0MsVUFDYjg1QixVQUNzQyxXa0N6U3hDbGdDLGVsQ3lTbUNubUM7O1NBRGpDcW1FO0lBR2UsSUFBZkMsaUJpQjlSRnJqRCxNakJ1UkFpakQ7SUFRRixPQUFBLFdrQzVTRS8vQixlbEMyU0VtZ0MsZ0JBSEFEO0dBT2dCO1lBRWxCRSxVQUF1QkMsVUFBVWo2QixPQUFPazZCLFNBQ2hDQztJLGdCQUdtQnY4QixRQUFhdzhCO0tBQzFDO01BQ0lDLGtCQUFpQix3QkFOSUo7TUFPckJLLHFCa0IxU0Z2akQscUJsQnlTRXNqRDtNQUVBRTs7eUI7VUFBeUMsV0FQbkNKLE1BR2dDQztNQUt0Q0k7UUFDQyxXQUhERjtXQUNBQzt1QkFEQUQsd0JBQ0FDO01BS0FFLHlCQVBBSixVQUdBRztNQUtBRSxRa0JqVEYzakQsT2xCZ1RFMGpEO01BRUFFLGtCQXpCRmQsY0FVaUM3NUI7TUFnQi9CNDZCOztVQWhCc0NWOzs7Ozs7YUFxQlAsd0JBTi9CUzs7TUFTQUUsU0EzVUYvSCxlQW9UUXFIO1FBQUFBO01BbUNGO09BREVXOztXQUNGO2ErQjBCTmxLLHdCL0IxQk0sV0FuQ0V1SixNQUdtQnY4QjtPQW1DbUIsZ0JBekI1Qzg4QjtPQVdNanJEO09BQU50Rzs7ZUFVTTJ4RDs7O2VBbkJORjs7O2VBUUFDOzs7Ozs7OztNQUtJO09BREVFOztXa0IvVFJoa0Q7O2VsQmdVTTtpQitCaUNONjVDLHdCL0JqQ00sV0E1QkV1SixNQUdtQnY4QjtPQTRCbkJvOUIsb0NBbEJOTixPQWNNSztPQUhBRSxrQkFPQUQ7T0FQTkU7NkJBVEFOLHNCQVFBQztPQUNNcHJELFFBQUF3ckQ7T0FBTjl4RCxPQUFBK3hEO0tBa0JKO2dDQWxCSS94RCxPQUFNc0c7dUJBaUJMelY7ZUFDTDs2QkFES0E7aUNBQ0E0OEQ7eUJBQ1E7MEJBQVRyRjttREFBaUMsd0JBRGhDcUY7eUJBRUwsSUFBSSxXQUFBLFdBNUNNdUQsTUEyQ041SSxTQUNBOytCQUNDLzZDOzhCQUFBaGlCLHdCQUFBZ2lCOzBCQUNILGtCQUpHb2dEOzBCQUtILFFBRkdwaUU7MEJBR0gsTUFBQSw0QkFIR0E7O3dCQUdJO2NBQUEsR0FBQTs7T0E5U0xxbUU7WWlGL0NGTSxRQUFRQztJQUNWO0tBRTBCQyxXQUhoQkQ7S0FHTUUsV0FITkY7S0FHSm5CLFdBSEltQjtLQUlORyxXQURZRCxVQUFVRDtJQUcxQjthakZzU0VyQjtnQmlGelNJQzs7OztpQmpGa0NOL0U7aUJBQUFMO2lCQUdBYTtpQkFBQUw7aUJBT0l3RjtpQkFDQWhGO2VpRjVDQTBGO3NCQUNDQyxlQUNMLFdBSE12QixVQUVEdUIsZUFDc0I7R0FBQTtZQ1p6QkMsT0FFRWgyRDtJQUFKLE9wRWtCbUIwUSxTb0VsQmYxUSxXQUMyQixhQUQzQkEsWUFBQUE7R0FDaUU7OztLQXFCbEI7TUFBN0NpMkQ7TUFDQUM7TUFDQUMscUJBQXlDO2NBRXpDQyxNQUFnQkE7TUFDbEI7T0FBSUMsc0JMUk5yTztPS1NpQjtPQUFOamhCO09BQUx1dkI7TUFDSixTQUFJQyxNQUFJek8sSUFBSyxPQURKL2dCLElMYlQ4Z0IsTUtjUUMsS0FBOEI7TUFDMUIsSUFBUjBPLFVMekJKN08sY0tzQkkwTyxNQURjRDtNQUtsQixRQVBFRCxRQU1FSztNQUVKLE1BVkVQLFNBS0VJLE1BRUFFO01BR0osT0FKSUQ7S0FLRDtjQUVEOWlCLFNBQWlCM3FDLE9BQW1CamM7TUFDdEMsZUxqQkZvN0Q7TUtrQkUsU0FBSWpoQixJQUFJK2dCLElBQUssT0FBQSxXQUZ5Qmw3RCxHQUU5Qms3RCxJQUFxQjtNQUM3QixNQWZFb08sV0F6QkpGLE9BcUNxQm50RCxRQUVmaytCO01BQ0o7S0FDSTtjQUVGMHZCLFdBQVczaUI7TTdCdU9iNEQ7UXdCeFFBa1EsZUtpQ2E5VDtpQkFLUjRpQjtTQUdMLFNBSEtBO1VBT087bUJBUFBBO1dBTVl4aUU7V0FBTm1pRTtXQUNIenBFLFNBL0JOcXBFLFNBOEJTSTtVQUVQLE9BaENGSixTQThCU0k7VUFFUCxPQUFBLFdBREl6cEUsR0FEU3NIOzt1QkFOWndpRSxZQUlPeG9FLGdCQUFIYTt1QkFDc0RuQyxHQUFLLE9BQWhFLFdBQTJEQSxHQURuRHNCLEdBQzJEO1NBQW5FLHNCOzZCQTVCRmdvRSxXQXpCSkYsT0FvRFdqbkU7UUFLQztNQVRWO0tBU1U7O0tBR1YsZ0IsNkJBakJFMG5FLG9CQWpCQU47S0FITixpQkFLTUMsT0FTQTVpQjs7OztjQXdDQWlqQixXQUFXM2lCO003QnFNYjREO1F3QnhRQWtRLGVLbUVhOVQ7O1NBUWIsSUFIYzUvQyxpQkFBTm1pRTtTQUtSO2tCQURjLG1CQUpBbmlFOzJCQUlUbUc7bUJBQ00sSUFBUG5HLE9MaEZKeXpELFVLK0VLdHREO21CQUdGLGlCTGxGSHN0RCxrQksyRVEwTyxNQUtKbmlFO2tCQUV1RDtRQUFBO01BUDNEO0tBTzJEO0tBRXJELG1CQWRKdWlFO0tBSmlDOztJQS9EYjs7Ozs7Ozs7OztZQ1R0Qi85QixPQUFROWtDO0lBQ0EsSUFBTjBPLGFBRE0xTyxxQkFDVjtJQUNTLFVBREwwTztJQUVKLFdBRklBO0dBRU07WUFFUnEwRCxZQUFXL2lFO0k7OERBTFg4a0MsT0FLVzlrQzs7O1lBZ0JYZ2pFO0lBQVk7R0FHRztZQW1CakJDLElBQUluakUsTUFBT3dpQjtJQUNiLEdBRGFBLFNBQVlDLE1BQVpELFFBQUE0Z0QsWUFBWTNnRCxjQUFaMmdEO0lBQ2IsYUFEdUNqakIsaUJBQVBqZ0MsT0FBT2lnQyxnQkFBUGpnQztJQUNoQyxhQURvRW1nQyxpQkFBVmdqQixVQUFVaGpCLGdCQUFWZ2pCO0lBQzFELFdBRE1yakUsTUFBT29qRSxXQUFtQmxqRCxNQUEwQm1qRDtHQUN4QjtZbEZwQ2hDQyxRQUFRQyxTQUFRanBFO0lBQ2xCLE9vRCtFRXVwRDs7ZXBEL0VGO2lCOEJzV0U0VCx3QjlCdFdGLFdBRFU4TCxTQUFRanBFO0dBRUQ7WUFFZmtwRSxRQUFRQyxTQUFRN3FFO0lBQ1AsSUFBUDZrRSxjQURjN2tFO0lBRWxCO1lBQUc7Y0FGTzZxRSxnQ0FFTix3QkFEQWhHO0dBQzBEO0dBc0I5RCxTQUFBaUcsZ0JBQUF0TDtJQUFBLFVBQUFBLHFDQUFBQTtLQUFlO01BQWZ5QixnQkFBQXpCO01BQWV1TDtNQUFrQkM7TUFBcUJqRztNQUF0RHpEO01BQUFDO01BQUFqK0M7O1NBQUE7U0FBQTt3QkFBQTs7V0FBQTBzQjs7V0FBQXd4QjtXQUFBQzthQUFBQTtjQUFBQTtlQUFBQTthQUFBLEcrRTVCRVgsVUR3Q0F6QjtjOUVaRmtDLGVBQUFFLFkrRTVCRVgsVS9FNEJGUzs7b0IrRTVCRVQsVS9FNEIrQmtLO2FBQWpDMUosb0JBQUFHLFkrRTVCRVgsVS9FNEJGUTs7aUJBQWlDSSxTOEVnSC9CN0IsZUFwRkFKLGtCOUU1QkYrQjthQUFpQ3dKLHFCQUFBdEo7O21CK0U1Qi9CWixVL0U0Qm9EaUU7WUFBdER6RCxvQkFBQUcsWStFNUJFWCxVL0U0QkZROztZQUFzRCxJQUFBSyxXOEU0QnBEbEMsaUI5RTVCRitCO1lBQXNEdUQseUJBQUFwRDs7a0IrRTVCcERiLFUvRTRCYWlLO1dBQWZ6SixvQkFBQUcsWStFNUJFWCxVL0U0QkZROztXQUFlLElBQUFNLFc4RWlEYmxDLGM5RWpERjhCO1dBQWV1SiwwQkFBQW5KOztvQkFBZjV4Qjs7UUFDbUI7S0FEbkIxc0IsS0FBQTI5QztRK0U1QkVILFUvRTRCRlE7TUFBQSxPaUNTRWYsd0JqQ1RGcGpELFUrRTVCRTJqRCxVL0U0QkZRLGFBQUE5QjtRK0U1QkVzQixVL0U0QkZTO01BQUEsT2lDYUVmLG9CakNiRnJqRCxVK0U1QkUyakQsVS9FNEJGUyxRQUFBL0I7S0FBZTtNQUFBLFErRTVCYnNCLFUvRTRCYWlLO01BQWtCLFUrRTVCL0JqSyxVL0U0QitCa0s7TUFBcUIsVStFNUJwRGxLLFUvRTRCb0RpRTs7O09BQUFhO09BQXJCcUY7T0FBbEJDO01BQWYsV0FBZUEsa0JBQWtCRCxhQUFxQnJGOztLQUF0RDtNQUFBLHFCK0U1QkU5RSxVL0U0Qm9EaUU7TUFBdEQscUIrRTVCRWpFLFUvRTRCK0JrSztLQUFqQyxPaUN1QkVySztjakN2QkZ4akQ7Y0FBQXFpRDs0QitFNUJFc0IsVS9FNEJhaUs7O0lBQWYsT2lDK0JFbEsseUJqQy9CRjFqRCxVQUFBcWlEO0dBQ21CO1lBRG5CMkw7SUFBQTtLQUFzRHpFO0tBQXJCMEU7S0FBbEJDO0tBQXVDaG9FLE04RWxDcEQwN0QsaUI5RWtDb0QySDtLQUFBbkUscUJBQUFsL0Q7S0FBckJtL0QsUThFUi9CckQsZUExQkFKLGtCOUVrQytCcU07S0FBQTNJLHVCQUFBRCxRQUFxQkQ7S0FBdkNHLFE4RS9CYjFELGM5RStCYXFNO0tBQUExSSx1QkFBQUQsUUFBa0JEO0lBQWpDLHNCQUFlRTtHQUNJO1lBRW5CMkksY0FBQTlMO0lBQUEsVUFBQUEscUNBQUFBO0tBQVc7TUFBWHlCLGdCQUFBekI7TUFBVytMO01BQWVDO01BQTFCbEs7TUFBQUM7TUFBQWorQzs7U0FBQTtTQUFBO3dCQUFBOztXQUFBMHNCOztXQUFBd3hCO1dBQUFDO2FBQUFBO2NBQUFBO1lBQUEsRytFL0JFWCxVRHdDQXpCO2E5RVRGa0MsZUFBQUUsWStFL0JFWCxVL0UrQkZTOzttQitFL0JFVCxVL0UrQlN5SztZQUFYakssb0JBQUFHLFkrRS9CRVgsVS9FK0JGUTs7WUFBVyxJQUFBSSxTQUhYb0osZ0JBR0F0SjtZQUFXK0oscUJBQUE3Sjs7a0IrRS9CVFosVS9FK0J3QjBLO1dBQTFCbEssb0JBQUFHLFkrRS9CRVgsVS9FK0JGUTs7V0FBMEIsSUFBQUssV0RvSjFCbUQsWUNwSkF0RDtXQUEwQmdLLG9CQUFBN0o7O29CQUExQjN4Qjs7UUFBNkQ7S0FBN0Qxc0IsS0FBQTI5QztRK0UvQkVILFUvRStCRlE7TUFBQSxPaUNNRWYsd0JqQ05GbmpELFUrRS9CRTBqRCxVL0UrQkZRLGFBQUE5QjtRK0UvQkVzQixVL0UrQkZTO01BQUEsT2lDVUVmLG9CakNWRnBqRCxVK0UvQkUwakQsVS9FK0JGUyxRQUFBL0I7S0FBVyxJQUFBLFErRS9CVHNCLFUvRStCU3lLLGNBQWUsVStFL0J4QnpLLFUvRStCd0IwSzs7VUFBQUMseUJBQWZDO01BQVgsV0FBV0EsYUFBZUQ7O0tBQTFCLHlCK0UvQkUzSyxVL0UrQndCMEs7S0FBMUIsT2lDb0JFN0s7Y2pDcEJGdmpEO2NBQUFvaUQ7NEIrRS9CRXNCLFUvRStCU3lLOztJQUFYLE9pQzRCRTFLLHlCakM1QkZ6akQsVUFBQW9pRDtHQUE2RDtZQUE3RG1NO0lBQUE7S0FBMEJDO0tBQWZDO0tBQWV4b0UsTURvSjFCOGlFLFlDcEowQnlGO0tBQUFySixxQkFBQWwvRDtLQUFmbS9ELFFBSFgySSxnQkFHV1U7S0FBQXBKLHVCQUFBRCxRQUFlRDtJQUExQixzQkFBV0U7R0FBa0Q7WUFFekRxSixVQUFRcHFCLEtBQUVoZ0QsR0FBSyxpQkFBUGdnRCxXQUFFaGdELFNBQXdEO1lBS2hFcXFFO0lBQ087S0FEZ0JDO0tBQVhDO0tBQUpuekQ7S0FDTmc0QyxZQURNaDRDO0tBRU5vekQsbUJBRlVEO0tBR1ZFLDBCQUhxQkg7SUFJekIsT0FBQSx1QkFISWxiLE1BQ0FvYixhQUNBQzs7WUFHRkMsUUFBTXBzRTtJQUNSLElBQU0sUUFBQSxpQkFERUE7O0tBT0QsTUFBQTtJQUpNO0tBRFI4WTtLQUFJbXpEO0tBQVdEO0tBQ1psYixPNkNXUnpYLFE3Q1pLdmdDO0tBRUdvekQsYzZDVVI3eUIsUTdDWlM0eUI7S0FHREUsb0I2Q1NSOXlCLFM3Q1pvQjJ5QjtJQUloQixXQUhJbGIsTUFDQW9iLGFBQ0FDO0dBRVc7R0FJakIsSUFGQUU7WUFRQUMsUUFBTTdsRSxHQUFJLE9BQUpBLEVBQWU7WUFDckI4bEUsUUFBTXZzRSxHQUFJLE9BQUpBLEVBQWU7WUFPckJ3c0UsUUFBTS9sRSxHQUFJLFlBQUpBLEdBQWtCO1lBQ3hCZ21FLFFBQU16c0UsR0FBSSxPNkNaWnE1QyxRN0NZUXI1QyxHQUFrQjtZQVF4QjBzRSxRQUFNam1FO0lBQUssTUFBQTtHQUFZO1lBRXZCa21FLFFBQU0zc0U7SUFDUixJQUFVLFFBQUEsaUJBREZBOztLQUlELE1BQUE7SUFEdUMsSUFEekMya0QsaUJBQU9xbkIsa0JBQ2tDLGlCNkN6QjlDM3lCLFM3Q3dCWTJ5QjtJQUNSLFc2Q3pCSjN5QixRN0N3QktzTDtHQUVjO0dBRVYsSUFBUGlvQjtZQU1BQyxRQUFNbnJFO0lBQUssTUFBQTtHQUFZO1lBRXZCb3JFLFFBQU05c0U7SUFDUixJQUFVLFFBQUEsaUJBREZBOztLQU9ELE1BQUE7SUFGVztLQUhiK3NFO0tBQWlCZDtLQUdKLE82Q3pDbEI1eUIsUTdDc0NzQjR5QjtJQUNsQixXNkN2Q0o1eUIsUTdDc0NLMHpCO0dBS2M7R0FHbkIsSUFERUM7WUFLRkMsUUFBTXZyRSxHQUFJLE9BNUdaZ3BFLFFBK0JGaUIsZUE2RVVqcUUsR0FBeUI7WUFDL0J3ckUsUUFBTWx0RSxHQUFJLE9vRDdCWmlyRCxRcEQ1RUEyZixRQTJCRlUsZUE4RVV0ckUsSUFBMkM7WUFFakRtdEUsUUFBUXpyRSxHQUNWLFdBRFVBLFNBQUFBLFNBQUFBLFNBS1Q7R0FnQ0E7O2NBL0ZHMnFFLFFBZkFOLFNBTUFLLFVBK0RGN3VELFFBQ0EwdkQsU0FDQUMsU0FFQUM7NkI7bUIsOEJBaERFOXZELFFBRkFpdkQsU0FDQUM7R0E4Rkg7O2NBdkdHRixRQWZBTixTQU1BSyxVQStERjd1RCxRQUNBMHZELFNBQ0FDLFNBRUFDOzZCO21CLDhCQXpCRVAsUUFSQUYsU0FFQUM7R0FvRkg7O2NBL0dHTixRQWZBTixTQU1BSyxVQStERjd1RCxRQUNBMHZELFNBQ0FDLFNBRUFDOzZCO21CLDhCQXhDRTd2RCxRQUZBa3ZELFNBQ0FDO0dBc0dIOztjQXZIR0osUUFmQU4sU0FNQUssVUErREY3dUQsUUFDQTB2RCxTQUNBQyxTQUVBQzs2QjttQiw4QkFSRUgsUUFYQUgsU0FFQUM7WUNJSk07SUFBbUI7OztRQUNSOztRQUNBO2dCQUNLOzs7O01BQ29DQztNQUFyQkM7TUFBbkJDO0tBRVYsT0FBQTtjcUN3U0ZwakI7Y3JDMVNvRGtqQjtjQUF4Q0U7Y0FBbUJEOztRQUlmRTtJQUNkLE9BQUE7YXFDcVNGcmpCLGlCckN0U2dCcWpCLHVCQUFBQTtHQUVPO1lBRXZCQyxZQUFZNWdFO1FBQWE2Z0Usc0JBQVAza0U7SUFDcEIsT0FBQSxXcUM0Q0V3ckMsVXJDN0NZMW5DLFlBQWE2Z0UsV0FBUDNrRTs7WUFHbEI0a0UsVUFBVTlnRTtJQUNDO0tBRGErZ0U7S0FBUjVqQztLQUNkNmpDLFdBaEJGVCxpQkFlZ0JwakM7O0lBRWxCLE9BQUE7YXFDd0NFdUssVXJDMUNVMW5DO2FBQ1JnaEU7O2MsNkJBSkZKOzthQUd3Qkc7O0drRnpIWDtJQUFBOzs7SUNHZ0I7dUI7WXBGc0MzQjlCO0dxRjNDYyxJQUFoQmdDLDBCbkZPRXAzQjtZQUVBcTNCLE1BQUl0ZSxNQUFLdWU7SUFDWCxzQkFBQSxPY0tBcnBELFlkTldxcEQ7MkJBQUx2ZSxNQUFLdWUsU0FSVHZ3RDtHQVNtRTtHQVpILElBQUEsYUFTaEVpNUIsUUFFQXEzQixRQUlGRSxRNERUQTFlO1l3QkNBMmUsUUFBUTNtRTtJQUNWLE96QnNERTJuRDtzQnlCckRRaWYsU0FBUUMsY0FBYUM7Y0FDM0IsV0FETUYsU0FBUUMsY0FBYUM7YUFDZTthQUhwQzltRTthQUFBQTthQUFBQTtHQUdxQztHbkZKckM7aUNBSk5tVzs7O0lBR0Y0d0QsaUNGdUdBOXdEO0dFcEdBOzs7TUFBZ0MsSUFBVSt3RCxtQkFBSnoxRDtNQUNsQyxRQUNJLDJCQUY4QkEsSUZxSHRDNjBELFdFckgwQ1k7TUFHMUIsZ0JBTmhCRCxvQkFHc0N4MUQsSUFBSXkxRDtLQUdiO1lBSTdCQyxTQUFTNWtELEtBQWlCZ3JDLE9BQUk3akM7SUFDaEMsR0FEV25ILFNBQUtDLE1BQUxELFFBQUE2a0QsS0FBSzVrRCxjQUFMNGtEO0lBQ0csSUFBVkMsZUFEd0I5WixRQUVyQixXQUFBLFdBRkk2WixJQUNQQyxTQUQ0QjM5QzsyQkFBSjZqQyxPQUFJN2pDO0dBRWM7R0FJckIsSUFEckI0OUM7WUFERkMsb0JBSUVodEU7SUFDZSxJQUFieXNFLHdCQUpGTSxzQkFJeUQsZ0JBQVMsR0FEbEUvc0U7SUFFRjtnQkFGRUE7ZUFZRWl0RTtPQVY4QixTQVU5QkE7WUFUR2p0RSxJQVNIaXRFO1FBUkUsb0JBRENqdEUsb0JBQUFBO1FBRFAsT0FWQTRzRSxZQVNJSCxZQUVHenNFOztPQVVELG9CQURGaXRFO09BQ0UsT0FyQk5MLFlBU0lIO01BYXNCO0lBWjFCLGFBRElBO0dBY2M7R0M5QnBCLElBREVTLGE0RGlEQXplLFlwQmhEQTVSO1l4Q0VBc3dCOzs7S0FBeUNDO0tBQVJobEM7S0FBWGlsQztLQUFiQztJQUVUOzs7T0FBOEM7UUFBVVg7UUFBSnoxRDtRQUU1Q3EyRCx1QkFKeUJubEM7UUFLMUIsZ0JBTEVrbEMsV0FFMkNwMkQ7T0FHN0M7UUFDRCxTQU4yQmt4QixRQUV1QnVrQzttQkFFaERZLDJCQUZnRFo7O2FBTXpDYjtvQkFHUyxnQkFYaUJzQjthQVFTSTtTQUNyQyxZQURFMUIsV0FBbUMwQixjQUV4QyxnQkFWK0JKOzs7Ozs7T0FZNUI7TUFBSTtJQUVaLGtCQWRJRSxXQUFhRDtJQWNqQjs7R0FHUDtJQURFSTtNd0N3bkJBaHJCOztTeEN0bkJBO1VBQVU0cUI7VUFBSm4yRDtVQUNBa3hCLGVIK0VOeHNCO1VHOUVNd3hEO1VBQ0FNLGFBSEF4MkQsUUFBSW0yRCxXQUNKamxDLFFBQ0FnbEM7U0FwQk5ELFVBcUJNTztTQUNKLE9BRElBO1FBRUc7Y0ExQlRSO1lBNkJBUyxjQUFlckgsVUFBVXFCLFVBQVVEO0lBQ3JDO2E0RTVCRUYsWTVFMkJlbEIsVUFBVXFCLFVBQVVEO3NCQUVoQzJGO2NBQ0wsSUFBSUMsWUFEQ0Q7Y0FHTDtnQ0FDT087d0JBQVcsT3dDZmhCM3dCLFN4Q2VLMndCLFN3Q2hDTDl3QixZeEM2QkV3d0IsV0FEQ0Q7dUJBSXNFO3VCQW5DekVIO2FBb0NVO0dBQUE7R0FlUjtJQURFVztNaUUxQ0p6YjtheEJ5Q0FKO2lCekNNU2x5RCxHQUFFRSxHQUFLLFdBQUxBLEdBQUZGLE1BQUFBLE1BQXlCO0lBRTlCcWhFO01pRWpESi9PO2F4QnlDQUo7aUJ6Q1dTbHlELEdBQUVFLEdBQUssV0FBUEYsTUFBRUUsR0FBRkYsTUFBOEI7SUFFbkNndUU7TWlFdERKMWI7YXhCb0RBRjtpQnpDS1NweUQsR0FBRUUsR0FBSyxXQUFQRixNQUFBQSxNQUFFRSxHQUE0QjtJQUVuQyt0RTtNaUUzREozYixheEIyREFELG1DekNDdURyeUQsR0FBRUUsR0FBTSxPQUFSRixFQUFTO0lBbkI5RGcvRDs7UXdDc2lCRnpjOztXeENyaUJJd3JCO2VBT0ExTSxvQkFLQTJNLG9CQUtBQztJQTdCYyxtQkFTaEJoeUQsV0FFQStpRDtZQXlCRmtQO0lBQ0YsT2lFakVFMWI7c0JqRW9FS3h5RDtjQUNILGtCQURHQTt5QkFBQUE7OzswQkFBQUEsTUFJVW11RTs7b0JBQW1CdEcsNEJBSjdCN25FOztxQkFJcUQ0bkU7aUJBQ3BELGtCQURTdUcsU0FBbUJ0RztpQkFyRGxDZ0csY0FxRGVNLEtBQW1CdEcsVUFBd0JEO2lCQUUxQzs7Z0JBRVYsa0JBSlN1RyxTQUFtQnRHO2dCQXJEbENnRyxjQXFEZU0sS0FBbUJ0RztnQkFLbEI7Ozs7Y0FDUDthQUFFO0dBQUM7WUFFWnVHLFVBQVVSO0lBRVY7S0FERXRsQzs7ZUFEUXNsQzs7VUFFeUIsSUFBZTFCLDBCQUFSNWpDO29CQUFBQSw2QkFBQUEsWUFBUTRqQztXQUUzQjtlQUYyQkEsZUFPdkM7O21CQVB1Q0E7V0FHbkJGO1dBQWYza0U7VUFFTDtzQkFBQSxXNkJwR1g4K0IsZTdCa0dnQjkrQixRQUFlMmtFLGVBQWYza0U7U0FJb0I7SUFFdEMsT0FWSWloQztHQVVFO1lBRUorbEMsV0FBWTM0RCxNQUFLOVc7SUFDWCxJQUFKc0IsVUFEVXdWO0lBRUwsUUFGVTlXLGtCLGdCQUNmc0I7SUFFSixhQUZJQTtHQUVLO1lBRVBvdUUsVUFBV25wRCxLQUFLKy9CLE1BQUs3MUI7YUFDZnRLLElBQUltZ0MsTUFBSzcxQjtLQUNmLElBQU8sUXdDakZQeHBCLEt4Q2dGVXEvQyxPQUNnQixVd0NqRjFCci9DLEt4Q2dGZXdwQjs7O3NDQUVHLFdBRlI2MUI7OztVQUdBem1EOztXQUFXd2lCO09BQVEsR0FBQSxXQUpsQmtFLEtBSUQxbUIsR0FBV3dpQixNQUFvQixXQUgvQmlrQzs7Ozs7VUFJR3RsRCxjQUFIUjs7T0FDVTtRQURTMnFCO1FBQUpwRjtRQUNMLFVBTGRJLElBSUkzbEIsR0FBZXVsQjtRQUNkNHBEO1FBQUgzcEQ7UUFDWSxVQU5kRyxJQUlPbmxCLEdBQWdCbXFCO1FBRWxCeWtEO1FBQUhDO1VBREdGLFVBQ0FDLFFBQ2tCLFdBUG5CdHBCO09BT3FDLFd3Q2hHL0MvSCxTeEM4RlF2NEIsS0FDQTZwRDs7O0tBRUUsV0FSS3AvQztJQVFRO0lBRWxCLE9BVkN0SyxJQURVbWdDLE1BQUs3MUI7R0FXSDtZQUdoQnEvQyxTQUFVeHBCLE1BQUs3MUI7SUFDakIsT0FmQWkvQztzQkFnQm9CcnRELEtBQUV4aUIsR0FBTSxnQkFBUndpQixXQUFFeGlCLFNBQXFDO2FBRi9DeW1EO2FBQUs3MUI7R0FFc0Q7R0FFekU7SUFMRXMvQztNd0NraEJBaHNCOztTeEM1Z0JBLElBQW1CMnFCLHVCQUFiRTtTQUNKO1NBQ3FCO1VBQWpCb0I7VUFDQTF1RTs7b0JBSGFvdEU7O21DQUtYLE9nRDNDUjlqQjs2QmhENkN3QnBxRCxHQUNULGtCQURTQSxTQUNULE9BRFNBLEVBRVI7ZUFKUjtnQkFBQTtpQyxhd0NtZFJtakQ7bUM7cUM7a0N4Q3hkTWlyQjtnQkFpQmEsTzhDOUJuQnJrQixROUNlTXlsQixtQndDaElON3hCO2V4Q21JUSxzQixPQTdCUnN4QjtjQXlDd0U7VUFFbEUvRDs7Y0FoQkFwcUU7dUJBa0JRQTtlQUVKO2dCQURFMHVEO2tCOENwSlo5RjtvQjlDbUpjNW9EOzZCQUdHZ2xELE1BQVEsT0E3QnZCd3BCLFNBNkJleHBCLE1BSEhobEQsR0FHMkI7b0JBdEJuQzB1RTtlQUFBQSx3QkFvQk1oZ0I7ZUFNSixPQU5JQTtjQU1LO1NBR2YsV0EvQkk0ZSxXQW1CQWxEO1FBWWU7UUEzSXJCcUQ7WUE4SUFrQjtJQUNGO0tBQUlDO093Q3llRm5zQjt5QnhDeGVZLElBQVNpckIsbUJBQVcsT0F6RWhDUSxVQXlFcUJSLFFBQTRCO1NBaEpqREQ7S0FrSkVvQjs7U0FsSkZwQjtrQkFtSm9DNXVFO1VBQ2hDLGN3QzFJSjhHLEt4Q3lJb0M5RztvQndDbktwQ2krQyxRRStUQTZKLDhCMUN4UEFxbkI7b0J3Q3pFQW54QjtTeEN3S3dCO3dCd0NxZnhCZ0csS3hDNWZFK3JCO0lBU0ssTzBDdUpQam9CLDhCRjRWQTlELEt4Q3pmRWdzQjtHQU04RDtHQ3pLVCxJQUFBLGlCQUE5QixpQkFJekJDO1lBYUFDLFVBQVdyQixRQUF1QnNCO0lBQ3BDLFdBRGF0QixxQkFBQUE7c0I0QnRCWHpuQyxxQjVCc0JrQytvQztHQUd1Qjs7YUFTdkRDLGFBQWFDLFVBQVNDO0tBQ3hCLEtBRGVELFVBRUw7U0FDSEUsYUFIUUY7S0F3Q1g7O2dCQWxDZ0IsaUJBSGJFLGdCQUhpQkQ7eUJBTWJoakU7aUJBQ0wsVUFES0E7OzZCQUFBQTs7bUJBR0Q7b0JBRFFrakU7b0JBQ0YvQixZQURFK0I7b0JBQ3lCQyxXQUR6QkQ7b0JBQ3FCbjRELEtBRHJCbTREO29CQUNtQ3puRSxPQURuQ3luRTtvQkFFSnpCLFV1QzJqQmR0ckIsZXhDcG1CQTRxQjtvQkMwQ2NHLGlCQUZFQyxXQUNGTTtvQkFFQUssTUF4QmRjLFVBdUJjMUIsV0FGeUJuMkQ7bUJBSXBCLGtCQUprQ3RQLGVBR3ZDcW1FO21CQUlZO29CQUFWc0IsVXFEbERoQmhrQjtvQnJEbURnQmlrQixXNkNrRWhCdm1CLFE3QzFFMkNxbUIsVUFBSnA0RDsyQkFFekJtMkQ7b0JBT0VvQyxVQUNGLFc0QnJEZHhwQyxxQjVCbURnQnVwQztvQkFTQTdqQixrQkFSQThqQjttQnFEQ2hCN2pCLGFyREhnQjJqQixhQVBxQzNuRSxNQWdCckNxVSxRQURBRCxPQUVBMnZDO21CQVdOLFdBN0JRMGpCLE1BSUpwQjs7O2lCQTBCRCxNQUFBO2dCQUFlO3VCQWpDbkJvQixNQW1DTCxnQkFqRUpQLGlCQThCU08sT0FtQzBCO0lBQUE7YUFFakNLLGVBQWVSO0tBMUNmRCxpQkEwQ2VDO0tBRWpCLG1CQUZpQkE7S0FFakI7SUFDaUM7YUFFL0JTO0tBQ0Y7OztNQUFJQztLQVVKLFNBQUlDLFFBQVE1QjtNQUFNLDJCQUErQix3QkFBckNBLE9BVlIyQjtLQVVvRTtLQU0zRCxJQUFQcmpFLHdCQXpGTnVpRTtLQTBGRTtPQURJdmlFOztRQUVNLHlCQUZOQTtvQkFJVTtZQUREMGhFO1FBQVksT0FUdkI0QixRQVNXNUI7T0FDRztLQUNoQixhQUxJMWhFO2NBT0Y0aUI7TUFDRjtPQUFJKy9DO09BQ0FDO09BQ0FXLGFBREFYO01BekVKRixhQXdFSUMsVUFFQVk7TUFFSixzQkFGSUE7S0FFc0M7Y0FFeEM5cUI7TUFDRjtPQUFJa3FCO09BQ0FDO09BQ0FXLHNCQURBWDtNQWhGSkYsYUErRUlDLFVBRUFZO01BRUosc0JBRklBO0tBRXNDO0tBSzVCLElBQVZQLFVxRDFITmhrQjtjckR1SEl3a0I7TUFLQTtPQUFJNWpCLHVDQTFDSnlqQjtPQTJDTyxXSzlGWHRvQixPTDZGUTZFO2lCQUNHO01BRUg7T0FERUMsZ0RBNUNOd2pCO09BK0NNdmpCLHdDQS9DTnVqQjtNQWtERSxPcUQ3RE4xakI7bUJyRHFEUUMsZUFFRUMsb0JBR0FDLFdBUEprakI7S0FVNkQ7S3FEakVuRXZqQixtQnJEdURNdWpCLFNxRDNESnpqQixZckQwQ0UzOEI7S3FEdENKNjhCLG1CckR1RE11akIsU3FEMURKeGpCLGdCckRnREUvRztLQTBCSixTQUFJZ3JCLFNBQVNwcUI7TUFDWCwyQkFEV0E7TUFFWCxnQkFGV0E7TUFHWCxrQkFIV0E7TUFHWCxPQXBDRXoyQjtLQTBDSztLQUVULFNBQUl5aEMsY0FBUyxPQTVDVHpoQyxRQTRDZ0I7S0FHUixpQkFIUnloQyxRQW5FQWdmO0tBdUVRLGlCQWZSSSxVQXhEQUo7S0F3RVE7Z0NBQTRCLE9BbkNwQ0csd0JBbUN5RCxHQXhFekRIO0tBMkVGO01BREVLO1E4RDlKSmpnQiwwQnJCaUJBejFDLGtCekNzSUlxMkM7TUFhSTVJOztnQkF6SlI4bUI7bUJBMEo0Q29CO1dBQ2xDLEdBRGtDQTtZQUtiO3FCQUxhQTthQUlBNUM7YUFBVmdDO2FBQUpwNEQ7YUFDVnM0RCxXNkNuRHBCdm1CLFE3Q2tEa0NxbUIsVUFBSnA0RDthQUVWMDJELFV1QzhicEJ0ckIsZXhDcG1CQTRxQjthQ3lLb0JHLGlCQUx3QkMsV0FFeEJNO29CQUdBUDthQVJOejFELE1BYUUsVzRCakxoQnF1QixxQjVCd0tvQnVwQzs7Z0JBSk41M0Q7V0FpQkosT0FBQSxXNEJyTFZxdUIsZTVCb0tjcnVCO1VBaUIwQztNQUszQixlQXhCckJvd0M7TUFxQkEvQzt1QixPNkQzSFJxSztVQUFBQTtNN0RnSVE0QjtReUM3S1IzMkM7Ozs7V3pDK0tVLGdCZ0ZoTVYyeEQ7V2hGaU1xQixzQixnQmdGak1yQkE7VWhGbU00QztNQWhDdENpRSxjeUNvS054cEIsYXpDOUlRMUIscUJBS0FpTTtNQVVBbEwsTzZEMUlSc0o7TTdENElVOGdCOztnQkEvTFZ0Qjs7V0FnTXlDLFlBQ3JCO2VBQ1FsbkU7V0FBa0IsY0FBbEJBO1VBQStCO01BSm5EeW9FLFF5Q3lMUm5wQiwrQnpDeExVa3BCO01BSEpFLGdCeUNnSU4zcEIsYXpDL0hRWCx5QkFDQXFxQjtNQVVGM2Y7dUIsTzZEckpOcEI7VUFBQUE7TTdEb0dJaWhCO1F5Q3FLSjVwQjs7Y3pDcEhNK0o7OztzQkFoREF5ZiwwQkFvQ0FHO01BbUJGL1c7dUIsTzZENUpKaks7VUFBQUE7SzdEaUthLE95Q3dHYjNJOztrQnpDN0dJNFM7Ozs7dUJBeERBZ1g7MkJBOUVBWCx3QkEwRUFLO0lBaUVzRDtJQTVMOUQsYUEyQ01QLGdCQUtBQzs7R2tGbEZPLElBQVB4OEQsT3JCc0NGZzhDO1lxQnBDRWxLLFVBQUssZXJCb0NQa0ssZ0JBQUFBLGNxQmxDZ0M7WUFFOUJxaEIsUUFBTXRmO0lBQ1I7S0FBSXVmLGFwQlFKeGdCLG9Cb0JUUWlCO0tBRWdCLFdBTnRCak07S0FNNkIsdUJBRDNCd3JCO0lBQ0o7S0FBK0IsT0FBQSxXcEJnRS9CNWYsY29CeEVFMTlDO0dBUTRDO0dyQjhCOUNnOEM7WXNCakNBdWhCO0lBQ0Y7S0FJSTtzQixPZFBBL2I7O0tjTUE7c0IsT2ROQUE7O0ljSUY7MkIsT2RKRUE7Ozs7R2NRQTtZQUVGZ2MsUUFBTWpCLGdCQUFnQmxhLE9BQU94RSxlQUFlcnJEO0lBQzlDO1lBRDhDQTtLQUMxQ2lyRTs7U0ZWRnRFLFFFUzRDM21FOztrQkFFUUEsTUFBS2tyRSxPQUNyRCxXQURnRGxyRSxZQUFLa3JFLE9BQ1o7SUFFL0MsU0FBSUMsUUFBUXhELFdBQVUwQjtLQUdsQixJQUZFcEIsVTVDcWxCSnRyQixleENwbUJBNHFCO0tvRm1CQTtNQUVtQztPQUEzQkcsaUJBUEVDLFdBQ05NO2NBTUlQO09BQ0osT0FBQSxXdkR6QkpwbkMscUJ1RGlCb0Irb0M7T0FLaEJmOzs7OztVQUFBQTs7S0FPRyxhQUFBLHdCQVBIQTtJQU9lO2FBRWpCMVksT0FBUXFiLFFBQTRCRzs7O01BR1VDO01BQVgxRDtNQUFWZ0M7TUFBbkJwNEQ7TUFBYXRQO2NBR2pCcXBFLFVBQVdMO01BQ2I7ZUFEYUE7d0JBQ1VBO2dCQUNuQixXQURtQkE7Z0JBRWpCO2tCQTVCRmxCOztnQ0EwQm1Ca0IsZUFQYUc7bUJBT2JIO21CQUFBQTttQkFBQUE7Z0JBRWpCO2VBUUs7S0FBQztLQUdaO01BREVNO2FBYkFELFVBTk1MLGtCQW9CMkJPLElBQU0sTzFDcEMzQzUyRCxrQjBDb0NxQzQyRCxJQUE4Qjs7O1NBakJuQkgsd0JBQXJCMUI7T0F1QlQ7UUFBTnBnQixPQXZCZW9nQjtRQXVCVCxnQkF4Q2hCd0IsUUFpQm1DeEQsV0F1QnpCcGU7UUFKUmtpQjs7O1VBQUFBOztLQU9GO01BREVocEM7O2dCbkZsREowbUM7O1dtRm1EMEM7Z0JBQ2ZFO1lBQXVCLFlBQXZCQSxTQTNCbkI5M0Q7YUE0QjRDO2FBQUE7OztXQUN0QjtxQy9FZ0Y5QjBKLGMrRWhIc0Ntd0Q7VUFnQ3NDOzs7eURBN0J2RG5wRTs7S0ErQnJCO3FCQU5Jd2dDOzs7O2UxQzBRSnVlOzs7aUMwQ25SSXVxQjs7Ozs7bUIxQzBTSnJxQjs7cUMwQ3ZTSXVxQjs7Ozs7OztJQXFCTixTQUFJQyxZQUFZOXlFLEdBQUssU0FBRTtJQUVyQjtLQURFKzJELG1CQXZFRm9iO0tBMkVJamIsY0FuRXdDOXZEO0tBb0V4QzBvRDtZQW5FRnVpQixpQkFtRWlDQSxRQUFPcnlFLEdBQUssT0FBQSxXQXBFekJpM0QsT0FvRWFvYixRQUFPcnlFLEdBQW1CO0tBQ3pEMjVELHFDLE9BbERGM0MsT0FsQkFxYjtLQWlFQVUsa0JBQ0U3YixhQUNBcEgsU0FDQTZKO0lBR04sT2J4REU3QyxRYStDRUMsY0FEQStiLGNBOUQyQnJnQixlQWtFM0JzZ0I7R0FNZ0U7WUFFbEVDLGlCQUFrQjdCLGdCQUFnQmxhLE9BQU03dkQ7SUFDdEIsSUFBaEJxckQ7SUFDSixPQTVFRTJmLFFBMEVrQmpCLGdCQUFnQmxhLFdBQ2hDeEUsZ0JBRHNDcnJEO0dBRUs7R0N6RS9DO0lBRkV5Z0U7TXpCaUNBelgsNEJ5QjlCRSxzQmJJRm1MLGdCYUp1QztJQUdyQ3FPLFlBTkYvQjtHMUZ3UkFILGlCMEZsUkVrQztHQUVKLGVBUkUvQjtZQVVBb0wsUUFBTUMsYUFBWWx6RTtJQUNwQixpQkFEUWt6RSxnQkFBQUEsZ0JBQVlsekU7R0FDcUQ7R0FRMUQsZ0NBVGJpekUsV0FTRXRDLFd6Qm9CRnpnQjtHeUJuQkYsU0FBSXlDO0lBQ0YsU0FGRWdlLGVBQUFBO0l2RnJCRjdDO0l1RndCQTtHQUNzQjtHQUd0QjtLRmxDRW1FLFFFNEJBdGY7O01BT0U7Ozs7dUJBUkZnZTswQkFVMEN3QztrQkFDL0Isa0NoRm9HYjl3RCxjZ0ZyRzRDOHdEO2lCQUNLOztLQUM1QztHQUtIO3VCckZtSEYvQztJcUZuSEU7SUFIQXZtQztNM0N1UkZ1ZTtJMkNqUklnckI7SUFERkM7TTNDa1JGanJCOzs7OztvQjJDalJJZ3JCO0lBR0ZFLFduQjlDRi9lO0ltQm9ESUksZTdDNmhCSjdRO0k2Qy9oQkV5dkIsU2xCbkRGN2UsbUJrQnFESUM7SUFRQUMsaUI3Q3FoQko5UTtJNkN2aEJFMHZCLFVsQjNERjllLG1Ca0I2RElFO0lBT0Y2ZSxvQkFqQkFGLFdBUUFDO0lBYUlFO003Q3VmTmx3Qjs7UzZDcmZNLElBQVM3aUQ7U0FDUCxPN0MyakJSdWpEOzJCNkMxakJnQnZqRDttQkFDYyw4QkFEZEE7bUJBQ0osV0FESUE7a0JBQ2lEO2tCQUhsREE7UUFJSDs7a0I3Q2xGWjI5Qzs7b0M7VTZDbUZpQyxzQixrQjdDaEVqQ0k7O1F4Q3FHQXd4QjtJcUY5Q0l5RCxjakJwRUo1ZSx1QmlCc0VNMmU7SUFISnBKO00zQ3dQRmxpQjs7Ozs7O2lCMkMxUUVtckI7O2tCQVFBQztzQkFaQUYsMEJBdUJFSztJQURPQyxVQUNQRDtJQTBCQXhEO0lBQ0EwRDtNNUIvQ0o5a0I7aUI0QmdENERwdUQsR0FBRVk7U0FBUDtVQUFVakI7VUFDdkRncUUsVXZDOEVSbGdCLG1CdUM5RWtDOXBELEdBQUssZUFBTEEsT0FBeUIsR0FEQ2lCOzBCQUFHakI7U0FFM0QsOENBRndEaUI7U0FTN0M7VUFBUDRsQixPUDlGUmdqRCxZT3FGK0Q3cEU7VUFVdkR3ekUsV1B6RVYxSixldEM0akJBcm1CLFU2QzdmNERwakQsVUFTbER3bUIsT0FSQW1qRDtTQWFKLE92Q3BITmpnQjtrQnVDZ0hVeXBCOzJCQUtHbmtFO21CQUNILFlBREdBLEtBTEhta0U7NkJBS0dua0U7OEJBakJUd2dFLHdCQVlNMkQsV0FBQUE7a0JBU1c7a0JBckJqQjNEO1FBc0JvQjtRQWpEYnlEO1FBdEJUTjtRQXFCQUc7SUFvREV2RjtXQXZCQTJGLG9CQXdCc0J6SixLQUFPLE90RmxIakNxRSxvQnNGa0gwQnJFLEtBQTRDO0lBRWxFMkosb0JBSEE3RjtJQUlBb0U7O1FBREF5QjtRQXZERk47aUJBeUR5Q3ZGO1NBQUwsSUFBb0JvRSxrQkFFaEQwQixVUGxJUjlKLFlPZ0l5Q2dFLFlBQWVvRTtTQUdwRCxPQURJMEI7UUFDRTtJQWpDVkMsZ0JBRUVKLFdBMEJBRSx1QkFDQXpCO0lBU0Y0QixZRGpJRjlCLGNDV0FhLFlBZ0ZFZ0I7SUEwQ0VwRDs7OztTQUM2QyxZQUN6QixPM0M2T3hCbG9CO1MyQ3RPb0I7VUFOVGdvQjtVQU1TLFlBTlRBO1VBS2dCLFlBTGhCQTtVQUljLFlBSmRBO1VBQ0N2cEUsZ0JBRER1cEU7U0FTSCxPRHZFUnFDLHVCQy9EQUMsU0E4SFk3ckU7UUFTRztJQWRiNHFFLHFCQUNFbkI7SUFtQkFzRDs7Y0p0S0p4Rzt3Qkl1SytDLGdEQUV4QjtJQUVuQnlHOztjcEZoS0o3RDtpQm9GaUsrQ29CO1NBQ3pDLEdBRHlDQTtVQUtwQjttQkFMb0JBO1dBSVA1QztXQUFWZ0M7V0FBSnA0RDtXQUNWczRELFd2QzFEaEJ2bUIsUXVDeUQ4QnFtQixVQUFKcDREO1dBRVYwMkQsVTdDdWJoQnRyQixleENwbUJBNHFCO1dxRjhLZ0JHLGlCQUh3QkMsV0FFeEJNO2tCQUNBUDtXQU5OejFELE1BU0UsV3hEcExacXVCLHFCd0QrS2dCdXBDOztjQUpONTNEO1NBWUs7a0JBQUEsd0JBQVEsV3hEdkx2QnF1Qixld0QyS1VydUI7UUFZOEQ7SUFFcEVvdUMsbUJBckJBMHNCO0lBREZFO00zQ2tLRmpzQjs7WTJDNUlJWDs7O29CM0M0SUpXLHlCMkM1Sklnc0I7Ozs7O1EzQzRKSmhzQjs7Ozs7c0IyQ3JMRTRwQjttQkE3RkFxQjtJQWdKSzs7ZUFoQ0xnQjs7Z0JBdEZBL0o7b0IzQ3dQRmxpQiw4QjJDeExFOHJCO0lBaURGOztlQWhKRXJxQzs7OztTM0N1UkZ1ZTs7STJDdlNBa3NCO00zQ3VTQWxzQjs7MkIsT29CcFNBc0ksc0JBSUFFOzs7O0l1Qm9LQTJqQix3QjlCekpNam1CLFFBR0ZDO1k4QjBKRmltQjtJQUNGLGtCQUxBRDtJQU1VLElBQU5FLG1CQWpMSkg7SUFrTEEsU0FBSXo3QjtLQUNGLHdDQUNZLGFBSFY0N0IsUUFHb0IsU0FBb0I7S0FEaEM7SUFDZ0M7SUFFRSw0QkFMMUNBO0lBS0o7SUFBQSx5QkFMSUEsT0FDQTU3QjtHQUttQztHQUV6Qyw4QkFWSTI3QjtHakZrV0Z6d0Q7O0UiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEFycmF5XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfc3ViIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc3ViIChhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYTJbMF09MDtcbiAgZm9yKHZhciBpMiA9IDEsIGkxPSBpKzE7IGkyIDw9IGxlbjsgaTIrKyxpMSsrICl7XG4gICAgYTJbaTJdPWFbaTFdO1xuICB9XG4gIHJldHVybiBhMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCwgbDIgPSBhMi5sZW5ndGg7XG4gIHZhciBsID0gbDErbDItMVxuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IDA7XG4gIHZhciBpID0gMSxqID0gMTtcbiAgZm9yKDtpPGwxO2krKykgYVtpXT1hMVtpXTtcbiAgZm9yKDtpPGw7aSsrLGorKykgYVtpXT1hMltqXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfY29uY2F0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfY29uY2F0KGwpIHtcbiAgdmFyIGEgPSBbMF07XG4gIHdoaWxlIChsICE9PSAwKSB7XG4gICAgdmFyIGIgPSBsWzFdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYi5sZW5ndGg7IGkrKykgYS5wdXNoKGJbaV0pO1xuICAgIGwgPSBsWzJdO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy8vLy8vLy8vLy8vLyBQZXJ2YXNpdmVcbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfc2V0IChtdXRhYmxlLCBjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc2V0IChhcnJheSwgaW5kZXgsIG5ld3ZhbCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGFycmF5W2luZGV4KzFdPW5ld3ZhbDsgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfZ2V0IG11dGFibGUgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcnJheVtpbmRleCsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KXtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICBhcnJheVtvZnMraSsxXSA9IHY7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2hlY2tfYm91bmQgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9jaGVja19ib3VuZCAoYXJyYXksIGluZGV4KSB7XG4gIGlmIChpbmRleCA+Pj4gMCA+PSBhcnJheS5sZW5ndGggLSAxKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX3ZlY3QgY29uc3QgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX3ZlY3QgKGxlbiwgaW5pdCkge1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IGluaXQ7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfZmxvYXRfdmVjdCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfZmxvYXRfdmVjdChsZW4pe1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MjU0O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gMDtcbiAgcmV0dXJuIGJcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9jcmVhdGUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2NyZWF0ZShsZW4pe1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MjU0O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gMDtcbiAgcmV0dXJuIGJcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgaWYobiA9PSAwKSByZXR1cm4gXCJcIjtcbiAgaWYgKHMucmVwZWF0KSB7cmV0dXJuIHMucmVwZWF0KG4pO30gLy8gRUNNQXNjcmlwdCA2IGFuZCBGaXJlZm94IDI0K1xuICB2YXIgciA9IFwiXCIsIGwgPSAwO1xuICBmb3IoOzspIHtcbiAgICBpZiAobiAmIDEpIHIgKz0gcztcbiAgICBuID4+PSAxO1xuICAgIGlmIChuID09IDApIHJldHVybiByO1xuICAgIHMgKz0gcztcbiAgICBsKys7XG4gICAgaWYgKGwgPT0gOSkge1xuICAgICAgcy5zbGljZSgwLDEpOyAvLyBmbGF0dGVuIHRoZSBzdHJpbmdcbiAgICAgIC8vIHRoZW4sIHRoZSBmbGF0dGVuaW5nIG9mIHRoZSB3aG9sZSBzdHJpbmcgd2lsbCBiZSBmYXN0ZXIsXG4gICAgICAvLyBhcyBpdCB3aWxsIGJlIGNvbXBvc2VkIG9mIGxhcmdlciBwaWVjZXNcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyAoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT0gMCAmJiBsZW4gPD0gNDA5NiAmJiBsZW4gPT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5IChudWxsLCBhKTtcbiAgdmFyIHMgPSBcIlwiO1xuICBmb3IgKDsgMCA8IGxlbjsgaSArPSAxMDI0LGxlbi09MTAyNClcbiAgICBzICs9IGYuYXBwbHkgKG51bGwsIGEuc2xpY2UoaSxpICsgTWF0aC5taW4obGVuLCAxMDI0KSkpO1xuICByZXR1cm4gcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91dGY4X29mX3V0ZjE2XG5mdW5jdGlvbiBjYW1sX3V0Zjhfb2ZfdXRmMTYocykge1xuICBmb3IgKHZhciBiID0gXCJcIiwgdCA9IGIsIGMsIGQsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGMwIHwgKGMgPj4gNikpO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPCAweGQ4MDAgfHwgYyA+PSAweGRmZmYpIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGUwIHwgKGMgPj4gMTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfSBlbHNlIGlmIChjID49IDB4ZGJmZiB8fCBpICsgMSA9PSBsIHx8XG4gICAgICAgICAgICAgICAoZCA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGQgPiAweGRmZmYpIHtcbiAgICAgIC8vIFVubWF0Y2hlZCBzdXJyb2dhdGUgcGFpciwgcmVwbGFjZWQgYnkgXFx1ZmZmZCAocmVwbGFjZW1lbnQgY2hhcmFjdGVyKVxuICAgICAgdCArPSBcIlxceGVmXFx4YmZcXHhiZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjID0gKGMgPDwgMTApICsgZCAtIDB4MzVmZGMwMDtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGYwIHwgKGMgPj4gMTgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gMTIpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIGNhbWxfdXRmMTZfb2ZfdXRmOChzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gXCJcIiwgYywgYzEsIGMyLCB2LCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYzEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMxIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjMSA9IHMuY2hhckNvZGVBdChqKSkgPCAweDgwOyBqKyspO1xuICAgICAgaWYgKGogLSBpID4gNTEyKSB7IHQuc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiOyBiICs9IHMuc2xpY2UoaSwgaikgfVxuICAgICAgZWxzZSB0ICs9IHMuc2xpY2UoaSwgaik7XG4gICAgICBpZiAoaiA9PSBsKSBicmVhaztcbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgICB2ID0gMTtcbiAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgYyA9IGMyICsgKGMxIDw8IDYpO1xuICAgICAgaWYgKGMxIDwgMHhlMCkge1xuICAgICAgICB2ID0gYyAtIDB4MzA4MDtcbiAgICAgICAgaWYgKHYgPCAweDgwKSB2ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHYgPSAyO1xuICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgICAgIGMgPSBjMiArIChjIDw8IDYpO1xuICAgICAgICAgIGlmIChjMSA8IDB4ZjApIHtcbiAgICAgICAgICAgIHYgPSBjIC0gMHhlMjA4MDtcbiAgICAgICAgICAgIGlmICgodiA8IDB4ODAwKSB8fCAoKHYgPj0gMHhkN2ZmKSAmJiAodiA8IDB4ZTAwMCkpKSB2ID0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdiA9IDM7XG4gICAgICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSAmJlxuICAgICAgICAgICAgICAgIChjMSA8IDB4ZjUpKSB7XG4gICAgICAgICAgICAgIHYgPSBjMiAtIDB4M2M4MjA4MCArIChjIDw8IDYpO1xuICAgICAgICAgICAgICBpZiAodiA8IDB4MTAwMDAgfHwgdiA+IDB4MTBmZmZmKSB2ID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHYgPCA0KSB7IC8vIEludmFsaWQgc2VxdWVuY2VcbiAgICAgIGkgLT0gdjtcbiAgICAgIHQgKz0gXCJcXHVmZmZkXCI7XG4gICAgfSBlbHNlIGlmICh2ID4gMHhmZmZmKVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZDdjMCArICh2ID4+IDEwKSwgMHhkYzAwICsgKHYgJiAweDNGRikpXG4gICAgZWxzZVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHYpO1xuICAgIGlmICh0Lmxlbmd0aCA+IDEwMjQpIHt0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjt9XG4gIH1cbiAgcmV0dXJuIGIrdDtcbn1cblxuLy9Qcm92aWRlczoganNvb19pc19hc2NpaVxuZnVuY3Rpb24ganNvb19pc19hc2NpaSAocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZVxuICAgIHJldHVybiAhL1teXFx4MDAtXFx4N2ZdLy50ZXN0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICBkZWZhdWx0OiAvKiBQQVJUSUFMICovXG4gICAgaWYgKGkgPj0gcy5jLmxlbmd0aCkgcmV0dXJuIDA7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jLmNoYXJDb2RlQXQoaSk7XG4gIGNhc2UgNDogLyogQVJSQVkgKi9cbiAgICByZXR1cm4gcy5jW2ldXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSwgYykge1xuICAvLyBUaGUgT0NhbWwgY29tcGlsZXIgdXNlcyBDaGFyLnVuc2FmZV9jaHIgb24gaW50ZWdlcnMgbGFyZ2VyIHRoYW4gMjU1IVxuICBjICY9IDB4ZmY7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09IHMuYy5sZW5ndGgpIHtcbiAgICAgIHMuYyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgIGlmIChpICsgMSA9PSBzLmwpIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocyk7XG4gIH1cbiAgcy5jW2ldID0gYztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSAxKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQxNihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMSkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDMpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAyKSxcbiAgICAgIGI0ID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCB8IGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSA3KSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQ2NChzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQgKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldCAocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDE2KHMsaSxpMTYpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMiA9IDB4RkYgJiBpMTYgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkxNjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0MTZcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQxNihzLGksaTE2KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQzMihzLGksaTMyKXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjQgPSAweEZGICYgaTMyID4+IDI0LFxuICAgICAgYjMgPSAweEZGICYgaTMyID4+IDE2LFxuICAgICAgYjIgPSAweEZGICYgaTMyID4+IDgsXG4gICAgICBiMSA9IDB4RkYgJiBpMzI7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMSwgYjIpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAyLCBiMyk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDMsIGI0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQzMlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MzJcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDMyKHMsaSxpMzIpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQzMihzLGksaTMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDY0KHMsaSxpNjQpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gY2FtbF9pbnQ2NF90b19ieXRlcyhpNjQpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgNyAtIGosIGFbal0pO1xuICB9XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0NjRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nIChzKSB7XG4gIHZhciB0YWcgPSA5IC8qIEJZVEVTIHwgQVNDSUkgKi87XG4gIGlmICghanNvb19pc19hc2NpaShzKSlcbiAgICB0YWcgPSA4IC8qIEJZVEVTIHwgTk9UX0FTQ0lJICovLCBzID0gY2FtbF91dGY4X29mX3V0ZjE2KHMpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXModGFnLCBzLCBzLmxlbmd0aCk7XG59XG5cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBNbEJ5dGVzICh0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgdGhpcy50PXRhZzsgdGhpcy5jPWNvbnRlbnRzOyB0aGlzLmw9bGVuZ3RoO1xufVxuTWxCeXRlcy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpe1xuICBzd2l0Y2ggKHRoaXMudCkge1xuICBjYXNlIDk6IC8qQllURVMgfCBBU0NJSSovXG4gICAgcmV0dXJuIHRoaXMuYztcbiAgZGVmYXVsdDpcbiAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICBjYXNlIDA6IC8qQllURVMgfCBVTktPV04qL1xuICAgIGlmIChqc29vX2lzX2FzY2lpKHRoaXMuYykpIHtcbiAgICAgIHRoaXMudCA9IDk7IC8qQllURVMgfCBBU0NJSSovXG4gICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgICB0aGlzLnQgPSA4OyAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgY2FzZSA4OiAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICB9XG59O1xuTWxCeXRlcy5wcm90b3R5cGUudG9VdGYxNiA9IGZ1bmN0aW9uICgpe1xuICB2YXIgciA9IHRoaXMudG9TdHJpbmcoKTtcbiAgaWYodGhpcy50ID09IDkpIHJldHVybiByXG4gIHJldHVybiBjYW1sX3V0ZjE2X29mX3V0Zjgocik7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uICgpe1xuICB2YXIgY29udGVudCA9IHRoaXMudCA9PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0aGlzLnQsY29udGVudCx0aGlzLmwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyAocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09IDIgLyogUEFSVElBTCAqLylcbiAgICBzLmMgKz0gY2FtbF9zdHJfcmVwZWF0KHMubCAtIHMuYy5sZW5ndGgsICdcXDAnKVxuICBlbHNlXG4gICAgcy5jID0gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LT1dOKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkgKHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShzLmwpO1xuICB2YXIgYiA9IHMuYywgbCA9IGIubGVuZ3RoLCBpID0gMDtcbiAgZm9yICg7IGkgPCBsOyBpKyspIGFbaV0gPSBiLmNoYXJDb2RlQXQoaSk7XG4gIGZvciAobCA9IHMubDsgaSA8IGw7IGkrKykgYVtpXSA9IDA7XG4gIHMuYyA9IGE7XG4gIHMudCA9IDQ7IC8qIEFSUkFZICovXG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyAocykge1xuICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgcmV0dXJuIHMuYztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIChzKSB7XG4gIHZhciBsID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICB2YXIgYSA9IG5ldyBVaW50OEFycmF5KGwpO1xuICB2YXIgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgaWYobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCeXRlcy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsMCxhLmxlbmd0aCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5IChhKSB7XG4gIGlmKCEgKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgIGEgPSBuZXcgVWludDhBcnJheShhKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sQnl0ZXMoNCxhLGEubGVuZ3RoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19jb21wYXJlIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfY29tcGFyZShzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDwgczIuYyk/LTE6KHMxLmMgPiBzMi5jKT8xOjA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMikge1xuICBpZihzMSA9PT0gczIpIHJldHVybiAxO1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPT0gczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19lcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMik7IH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikgeyByZXR1cm4gMS1jYW1sX2J5dGVzX2VxdWFsKHMxLCBzMik7IH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzZXF1YWwgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW4gbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzdGhhbihzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDwgczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMyLHMxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMixzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dyZWF0ZXJ0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzdGhhbihzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbGxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG4vL0FsaWFzOiBjYW1sX2ZpbGxfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2ZpbGxfYnl0ZXMocywgaSwgbCwgYykge1xuICBpZiAobCA+IDApIHtcbiAgICBpZiAoaSA9PSAwICYmIChsID49IHMubCB8fCAocy50ID09IDIgLyogUEFSVElBTCAqLyAmJiBsID49IHMuYy5sZW5ndGgpKSkge1xuICAgICAgaWYgKGMgPT0gMCkge1xuICAgICAgICBzLmMgPSBcIlwiO1xuICAgICAgICBzLnQgPSAyOyAvKiBQQVJUSUFMICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzLmMgPSBjYW1sX3N0cl9yZXBlYXQgKGwsIFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgICAgICBzLnQgPSAobCA9PSBzLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gICAgICBmb3IgKGwgKz0gaTsgaSA8IGw7IGkrKykgcy5jW2ldID0gYztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmxpdF9ieXRlcyhzMSwgaTEsIHMyLCBpMiwgbGVuKSB7XG4gIGlmIChsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIGlmICgoaTIgPT0gMCkgJiZcbiAgICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbGVuID49IHMyLmMubGVuZ3RoKSkpIHtcbiAgICBzMi5jID0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgaTIgPT0gczIuYy5sZW5ndGgpIHtcbiAgICBzMi5jICs9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzMik7XG4gICAgdmFyIGMxID0gczEuYywgYzIgPSBzMi5jO1xuICAgIGlmIChzMS50ID09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbCA9IE1hdGgubWluIChsZW4sIGMxLmxlbmd0aCAtIGkxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYmxpdF9zdHJpbmcoYSxiLGMsZCxlKSB7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhhKSxiLGMsZCxlKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19sZW5ndGggY29uc3RcbmZ1bmN0aW9uIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpIHsgcmV0dXJuIHMubCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbmNhdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb25jYXQoYSxiKSB7IHJldHVybiBhICsgYiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbmNhdFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgTWxCeXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KHMxLHMyKXtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHMxLnQsczEuYytzMi5jLHMxLmwrczIubClcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ191bnNhZmVfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIHMubGVuZ3RoXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmUgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8tMTooczEgPiBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPD0gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0Zjhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykge1xuICBpZihqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBzO1xuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocylcbiAgZWxzZSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3V0Zjhfb2ZfdXRmMTYocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7IHJldHVybiBuZXcgTWxCeXRlcygwLHMscy5sZW5ndGgpOyB9XG5cblxuLy8gVGhlIHNlY3Rpb24gYmVsb3cgc2hvdWxkIGJlIHVzZWQgd2hlbiB1c2UtanMtc3RyaW5nPWZhbHNlXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsaSxjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19lcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgeyByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIHMuYyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocyl7XG4gIHJldHVybiBzLnRvVXRmMTYoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfYnl0ZXMocykge1xuICByZXR1cm4gKHMgaW5zdGFuY2VvZiBNbEJ5dGVzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHMuY1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuICh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiAmJiAhL1teXFx4MDAtXFx4ZmZdLy50ZXN0KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfaXNfbWxfYnl0ZXMocyk7XG59XG5cbi8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGRlcHJlY2F0ZWRcblxuLy9Qcm92aWRlczogY2FtbF9qc190b19ieXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9qc190b19ieXRlX3N0cmluZyhzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX25ld19zdHJpbmcgKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF90b19qc19zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF90b19qc19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc190b19zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3RvX3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7IHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkgeyByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KSB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIFN5c1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvciAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5TeXNfZXJyb3IsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdCAoY29kZSkge1xuICBpZihnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KVxuICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KGNvZGUpO1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJGdW5jdGlvbiAnZXhpdCcgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4bil7XG4gIHN3aXRjaChleG5bMl0pIHtcbiAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICBjYXNlIC0xMTogLy8gQXNzZXJ0X2ZhaWx1cmVcbiAgY2FzZSAtMTI6IC8vIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG4gICAgcmV0dXJuIDE7XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9leGNlcHRpb24oZXhuKXtcbiAgdmFyIHIgPSBcIlwiO1xuICBpZihleG5bMF0gPT0gMCkge1xuICAgIHIgKz0gZXhuWzFdWzFdO1xuICAgIGlmKGV4bi5sZW5ndGggPT0gMyAmJiBleG5bMl1bMF0gPT0gMCAmJiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4blsxXSkpIHtcblxuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDJcbiAgICAgIHZhciBidWNrZXQgPSBleG47XG4gICAgfVxuICAgIHIgKz0gXCIoXCI7XG4gICAgZm9yKHZhciBpID0gc3RhcnQ7IGkgPCBidWNrZXQubGVuZ3RoOyBpICsrKXtcbiAgICAgIGlmKGkgPiBzdGFydCkgcis9XCIsIFwiO1xuICAgICAgdmFyIHYgPSBidWNrZXRbaV1cbiAgICAgIGlmKHR5cGVvZiB2ID09IFwibnVtYmVyXCIpXG4gICAgICAgIHIrPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmKHYgaW5zdGFuY2VvZiBNbEJ5dGVzKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0eXBlb2YgdiA9PSBcInN0cmluZ1wiKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSByICs9IFwiX1wiO1xuICAgIH1cbiAgICByICs9IFwiKVwiXG4gIH0gZWxzZSBpZiAoZXhuWzBdID09IDI0OCl7XG4gICAgciArPSBleG5bMV1cbiAgfVxuICByZXR1cm4gclxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9mb3JtYXRfZXhjZXB0aW9uLCBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpe1xuICBpZihlcnIgaW5zdGFuY2VvZiBBcnJheSAmJiAoZXJyWzBdID09IDAgfHwgZXJyWzBdID09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmKGhhbmRsZXIpIGNhbWxfY2FsbGJhY2soaGFuZGxlciwgW2VycixmYWxzZV0pO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIG1zZyA9IGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgdmFyIGF0X2V4aXQgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIpO1xuICAgICAgaWYoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYoZXJyLmpzX2Vycm9yKSB0aHJvdyBlcnIuanNfZXJyb3I7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbmZ1bmN0aW9uIGNhbWxfc2V0X3N0YXRpY19lbnYoayx2KXtcbiAgaWYoIWdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52KVxuICAgIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52ID0ge31cbiAgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZba10gPSB2O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19zeXNfZ2V0ZW52IChjb25zdClcbmZ1bmN0aW9uIGpzb29fc3lzX2dldGVudihuKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICAvL25vZGVqcyBlbnZcbiAgaWYocHJvY2Vzc1xuICAgICAmJiBwcm9jZXNzLmVudlxuICAgICAmJiBwcm9jZXNzLmVudltuXSAhPSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZihnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudlxuICAgICAmJiBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltuXSlcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0ZW52IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29fc3lzX2dldGVudlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYociA9PT0gdW5kZWZpbmVkKVxuICAgIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdW5zYWZlX2dldGVudlxuLy9SZXF1aXJlczogY2FtbF9zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52KG5hbWUpe1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIGNhbWxfYXJndiA9ICgoZnVuY3Rpb24gKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgdmFyIG1haW4gPSBcImEub3V0XCI7XG4gIHZhciBhcmdzID0gW11cblxuICBpZihwcm9jZXNzXG4gICAgICYmIHByb2Nlc3MuYXJndlxuICAgICAmJiBwcm9jZXNzLmFyZ3YubGVuZ3RoID4gMSkge1xuICAgIHZhciBhcmd2ID0gcHJvY2Vzcy5hcmd2XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspXG4gICAgYXJnczIucHVzaChjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhhcmdzW2ldKSk7XG4gIHJldHVybiBhcmdzMjtcbn0pKCkpXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbnZhciBjYW1sX2V4ZWN1dGFibGVfbmFtZSA9IGNhbWxfYXJndlsxXVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfYXJndiAoYSkge1xuICByZXR1cm4gWzAsIGNhbWxfYXJndlsxXSwgY2FtbF9hcmd2XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19hcmd2IChhKSB7XG4gIHJldHVybiBjYW1sX2FyZ3Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21vZGlmeV9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX21vZGlmeV9hcmd2KGFyZyl7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShhKXtcbiAgcmV0dXJuIGNhbWxfZXhlY3V0YWJsZV9uYW1lXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgdmFyIGNtZCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGNtZCk7XG4gIGlmICh0eXBlb2YgcmVxdWlyZSAhPSBcInVuZGVmaW5lZFwiKXtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbiAgICBpZihjaGlsZF9wcm9jZXNzICYmIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMpXG4gICAgICB0cnkge1xuICAgICAgICBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGNtZCx7c3RkaW86ICdpbmhlcml0J30pO1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICB9XG4gIGVsc2UgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZChjbWQpe1xuICByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lIG11dGFibGVcbnZhciBjYW1sX2luaXRpYWxfdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKiAwLjAwMTtcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWUgKCkge1xuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgcmV0dXJuIG5vdyAqIDAuMDAxIC0gY2FtbF9pbml0aWFsX3RpbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlblxuLy9SZXF1aXJlczogY2FtbF9zeXNfdGltZVxuZnVuY3Rpb24gY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuKGIpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQgKCkge1xuICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8pIHtcbiAgICAgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9IGVsc2UgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XG4gICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9XG4gIH1cbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHZhciB4ID0gbm93XjB4ZmZmZmZmZmYqTWF0aC5yYW5kb20oKTtcbiAgcmV0dXJuIFswLHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuICgpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSAoKSB7IHJldHVybiAoMHg3RkZGRkZGRi80KSB8IDA7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIlVuaXhcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiAoKSB7IHJldHVybiBvc190eXBlID09IFwiV2luMzJcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJDeWd3aW5cIiA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwianNfb2Zfb2NhbWxcIildO1xufVxuXG4vL1Byb3ZpZGVzOiBvc190eXBlXG52YXIgb3NfdHlwZSA9IChnbG9iYWxUaGlzLnByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09IFwid2luMzJcIikgPyBcIkN5Z3dpblwiIDogXCJVbml4XCI7XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2NvbmZpZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2NvbmZpZyAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhvc190eXBlKSwgMzIsIDBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzYXR0eShfY2hhbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3ZhcmlhbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV92YXJpYW50KF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3BhcmFtZXRlcnNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlcigpe3JldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MgKGJvb2wpIHtcbiAgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gYm9vbDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkIChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9ydW50aW1lX3dhcm5pbmdzO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfZW5hYmxlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZShfY2hhbm5lbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiU3BhY2V0aW1lIHByb2ZpbGluZyBvbmx5IHdvcmtzIGZvciBuYXRpdmUgY29kZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF94ZGdfZGVmYXVsdHNcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3hkZ19kZWZhdWx0cyhfdW5pdCkge1xuICByZXR1cm4gMDsgLy8gZW1wdHkgbGlzdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICBpZihwcm9jZXNzICYmIHByb2Nlc3Mub24pIHtcbiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCAoMik7XG4gICAgfSlcbiAgfVxuICBlbHNlIGlmKGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgIGlmKGV2ZW50LmVycm9yKXtcbiAgICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXZlbnQuZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5jYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCk7XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSBGTEFHKFwid2l0aC1qcy1lcnJvclwiKTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHIgPSBqc29vX3N5c19nZXRlbnYoXCJPQ0FNTFJVTlBBUkFNXCIpXG4gIGlmKHIgIT09IHVuZGVmaW5lZCl7XG4gICAgdmFyIGwgPSByLnNwbGl0KFwiLFwiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKyl7XG4gICAgICBpZihsW2ldID09IFwiYlwiKSB7IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gMTsgYnJlYWsgfVxuICAgICAgZWxzZSBpZiAobFtpXS5zdGFydHNXaXRoKFwiYj1cIikpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSArKGxbaV0uc2xpY2UoMikpfVxuICAgICAgZWxzZSBjb250aW51ZTtcbiAgICB9XG4gIH1cbn0pICgpXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX2JhY2t0cmFjZV9zdGF0dXMgKF91bml0KSB7IHJldHVybiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfcmVjb3JkX2JhY2t0cmFjZSAoYikgeyBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IGI7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgKCkgeyByZXR1cm4gWzBdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCgpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZV9zbG90OiBpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlKGV4biwgYnQpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrICgpIHsgcmV0dXJuIFswXTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogIWVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMClcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYuYXBwbHkobnVsbCxhcmdzLnNsaWNlKDAsbikpO1xuICAgIGlmKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsYXJncy5zbGljZShuKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgc3dpdGNoIChkKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAxKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAyKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgdmFyIGV4dHJhX2FyZ3MgPSAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKT8xOmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzLmxlbmd0aCtleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSBuYXJnc1thcmdzLmxlbmd0aCtpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgICB9O1xuICAgIH19XG4gICAgZy5sID0gZDtcbiAgICByZXR1cm4gZztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vSWY6IGVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMCkge1xuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9IGVsc2UgaWYgKGQgPCAwKSB7XG4gICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICB2YXIgayA9IGFyZ3MgW2FyZ3NMZW4gLSAxXTtcbiAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICBhcmdzW24gLSAxXSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICBpZiAodHlwZW9mIGcgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGsoZyk7XG4gICAgICB2YXIgYXJncyA9IHJlc3Quc2xpY2UoKTtcbiAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihnLCBhcmdzKTsgfTtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzIFthcmdzTGVuXTtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICBjYXNlIDE6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDI6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHksIHope1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDMpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICgpe1xuICAgICAgICB2YXIgZXh0cmFfYXJncyA9IChhcmd1bWVudHMubGVuZ3RoID09IDApPzE6YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyBleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApXG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIGldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICAgIH07XG4gICAgfX1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlc1xudmFyIGNhbWxfbmFtZWRfdmFsdWVzID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUgKGNvbnN0LG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZShubSx2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbnZhciBjYW1sX2dsb2JhbF9kYXRhID0gWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2J1aWxkX3N5bWJvbHNcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J1aWxkX3N5bWJvbHMoc3ltYikge1xuICB2YXIgciA9IHt9O1xuICBpZihzeW1iKSB7XG4gICAgZm9yKHZhciBpID0gMTsgaSA8IHN5bWIubGVuZ3RoOyBpKyspe1xuICAgICAgcltjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzeW1iW2ldWzFdKV0gPSBzeW1iW2ldWzJdXG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAoY29uc3QsIHNoYWxsb3csIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9jYWxsYmFjaywgY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZihnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MpIHtcbiAgICAgIG4gPSBjYW1sX2NhbGxiYWNrKGdsb2JhbFRoaXMudG9wbGV2ZWxSZWxvYywgW25hbWVdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKSB7XG4gICAgICBpZighY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgpIHtcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHggPSBjYW1sX2J1aWxkX3N5bWJvbHMoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKVxuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdXG4gICAgICBpZihuaWQgPj0gMClcbiAgICAgICAgbiA9IG5pZFxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3JlZ2lzdGVyX2dsb2JhbDogY2Fubm90IGxvY2F0ZSBcIiArIG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmKG5hbWVfb3B0KSBjYW1sX2dsb2JhbF9kYXRhW25hbWVfb3B0XSA9IHY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2dsb2JhbF9kYXRhIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZ2V0X2dsb2JhbF9kYXRhICgpIHsgcmV0dXJuIGNhbWxfZ2xvYmFsX2RhdGE7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykgeyByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9tYXliZV9wcmludF9zdGF0c1xuZnVuY3Rpb24gY2FtbF9tYXliZV9wcmludF9zdGF0cyh1bml0KSB7IHJldHVybiAwIH1cbiIsIi8vIEpzX29mX29jYW1sIGxpYnJhcnlcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBKc2xpYlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3B1cmVfZXhwciBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc19wdXJlX2V4cHIgKGYpIHsgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3NldCAobXV0YWJsZSwgY29uc3QsIG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2pzX3NldChvLGYsdikgeyBvW2ZdPXY7cmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLGYpIHsgcmV0dXJuIG9bZl07IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZGVsZXRlIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZGVsZXRlKG8sZikgeyBkZWxldGUgb1tmXTsgcmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sYykgeyByZXR1cm4gKG8gaW5zdGFuY2VvZiBjKSA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmUocmVzKSB7XG4gIHZhciBjID0gMTtcbiAgd2hpbGUocmVzICYmIHJlcy5qb29fdHJhbXApe1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsYXJncykge1xuICByZXR1cm4ge2pvb190cmFtcDpmLGpvb19hcmdzOmFyZ3N9O1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfc3RhY2tfZGVwdGhcbi8vSWY6IGVmZmVjdHNcbnZhciBjYW1sX3N0YWNrX2RlcHRoID0gMDtcblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2NoZWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfc3RhY2tfZGVwdGhcbmZ1bmN0aW9uIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKSB7XG4gICAgcmV0dXJuIC0tY2FtbF9zdGFja19kZXB0aCA+IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6ICFlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX2V4bl9zdGFjaywgY2FtbF9maWJlcl9zdGFjaywgY2FtbF93cmFwX2V4Y2VwdGlvbiwgY2FtbF9yZXN1bWVfc3RhY2ssIGNhbWxfZnJlc2hfb29faWQsIGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnRcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZixhcmdzKSB7XG4gIGZ1bmN0aW9uIHVuY2F1Z2h0X2VmZmVjdF9oYW5kbGVyKGVmZixrLG1zKSB7XG4gICAgLy8gUmVzdW1lcyB0aGUgY29udGludWF0aW9uIGsgYnkgcmFpc2luZyBleGNlcHRpb24gVW5oYW5kbGVkLlxuICAgIGNhbWxfcmVzdW1lX3N0YWNrKGtbMV0sbXMpO1xuICAgIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgICBpZihleG4pIGNhbWxfcmFpc2Vfd2l0aF9hcmcoZXhuLCBlZmYpO1xuICAgIGVsc2Uge1xuICAgICAgZXhuID0gWzI0OCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiRWZmZWN0LlVuaGFuZGxlZFwiKSwgY2FtbF9mcmVzaF9vb19pZCgwKV07XG4gICAgICBjYW1sX3JhaXNlX2NvbnN0YW50KGV4bik7XG4gICAgfVxuICB9XG4gIHZhciBzYXZlZF9zdGFja19kZXB0aCA9IGNhbWxfc3RhY2tfZGVwdGg7XG4gIHZhciBzYXZlZF9leG5fc3RhY2sgPSBjYW1sX2V4bl9zdGFjaztcbiAgdmFyIHNhdmVkX2ZpYmVyX3N0YWNrID0gY2FtbF9maWJlcl9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2V4bl9zdGFjayA9IDA7XG4gICAgY2FtbF9maWJlcl9zdGFjayA9XG4gICAgICB7aDpbMCwgMCwgMCwgdW5jYXVnaHRfZWZmZWN0X2hhbmRsZXJdLCByOntrOjAsIHg6MCwgZTowfX07XG4gICAgdmFyIHJlcyA9IHtqb29fdHJhbXA6IGYsXG4gICAgICAgICAgICAgICBqb29fYXJnczogYXJncy5jb25jYXQoZnVuY3Rpb24gKHgpe3JldHVybiB4O30pfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfZXhuX3N0YWNrKSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfZXhuX3N0YWNrWzFdO1xuICAgICAgICBjYW1sX2V4bl9zdGFjayA9IGNhbWxfZXhuX3N0YWNrWzJdO1xuICAgICAgICByZXMgPSB7am9vX3RyYW1wOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgam9vX2FyZ3M6IFtjYW1sX3dyYXBfZXhjZXB0aW9uKGUpXX07XG4gICAgICB9XG4gICAgfSB3aGlsZShyZXMgJiYgcmVzLmpvb19hcmdzKVxuICB9IGZpbmFsbHkge1xuICAgIGNhbWxfc3RhY2tfZGVwdGggPSBzYXZlZF9zdGFja19kZXB0aDtcbiAgICBjYW1sX2V4bl9zdGFjayA9IHNhdmVkX2V4bl9zdGFjaztcbiAgICBjYW1sX2ZpYmVyX3N0YWNrID0gc2F2ZWRfZmliZXJfc3RhY2s7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJ1c2UtanMtc3RyaW5nXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfZWZmZWN0cyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJlZmZlY3RzXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd3JhcF9leGNlcHRpb24gY29uc3QgKG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLGNhbWxfbmFtZWRfdmFsdWVcbmZ1bmN0aW9uIGNhbWxfd3JhcF9leGNlcHRpb24oZSkge1xuICBpZiAoRkxBRyhcImV4Y3dyYXBcIikpIHtcbiAgICBpZihlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZihnbG9iYWxUaGlzLlJhbmdlRXJyb3JcbiAgICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICAgJiYgZS5tZXNzYWdlXG4gICAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSkpXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmKGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAgICYmIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkludGVybmFsRXJyb3JcbiAgICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKSlcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IgJiYgY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIikpXG4gICAgICBleG4gPSBbMCxjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSxlXTtcbiAgICBlbHNlXG4gICAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICAgIGV4biA9IFswLGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoU3RyaW5nKGUpKV07XG4gICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGVycm9yIGF0IGhhbmQsIGxldCdzIHVzZSBpdC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IpXG4gICAgICBleG4uanNfZXJyb3IgPSBlO1xuICAgIHJldHVybiBleG47XG4gIH0gZWxzZVxuICAgIHJldHVybiBlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgaWYoY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcpXG4gICAgcmV0dXJuIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpO1xuICBlbHNlIHJldHVybiBleG5cbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZighZXhuLmpzX2Vycm9yIHx8IGZvcmNlIHx8IGV4blswXSA9PSAyNDgpIGV4bi5qc19lcnJvciA9IG5ldyBnbG9iYWxUaGlzLkVycm9yKFwiSnMgZXhjZXB0aW9uIGNvbnRhaW5pbmcgYmFja3RyYWNlXCIpO1xuICByZXR1cm4gZXhuO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZihleG4uanNfZXJyb3IpIHsgcmV0dXJuIFswLCBleG4uanNfZXJyb3JdOyB9XG4gIHJldHVybiAwO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Jvb2woeCkgeyByZXR1cm4gISF4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHsgcmV0dXJuICt4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fZmxvYXQgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc19mcm9tX2ludDMyXG4vL0FsaWFzOiBjYW1sX2pzX2Zyb21fbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19mbG9hdCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkgeyByZXR1cm4geHwwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGJbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGxlbjtpKyspIGJbaSsxXSA9IGFbaV07XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkoYSl7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBpPWEubGVuZ3RoIC0gMTsgaT49MDsgaS0tKXtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLGUsbF07XG4gIH1cbiAgcmV0dXJuIGxcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpe1xuICB2YXIgYSA9IFtdO1xuICBmb3IoOyBsICE9PSAwOyBsID0gbFsyXSkge1xuICAgIGEucHVzaChsWzFdKTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc192YXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdmFyKHgpIHtcbiAgdmFyIHggPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyh4KTtcbiAgLy9DaGVja3MgdGhhdCB4IGhhcyB0aGUgZm9ybSBpZGVudFsuaWRlbnRdKlxuICBpZigheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSl7XG4gICAgY29uc29sZS5lcnJvcihcImNhbWxfanNfdmFyOiBcXFwiXCIgKyB4ICsgXCJcXFwiIGlzIG5vdCBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUuIGNvbnRpbnVpbmcgLi5cIik7XG4gICAgLy9jb25zb2xlLmVycm9yKFwiSnMuVW5zYWZlLmV2YWxfc3RyaW5nXCIpXG4gIH1cbiAgcmV0dXJuIGV2YWwoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykgeyByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bl9jYWxsIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19mdW5fY2FsbChmLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gZigpO1xuICBjYXNlIDI6IHJldHVybiBmIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gZiAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX29qc19uZXdfYXJyIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9vanNfbmV3X2FycihjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAwOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjIChhWzBdKTtcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBhKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihsZW4gPiAwKXtcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gW3VuZGVmaW5lZF07XG4gICAgfVxuICAgIHZhciByZXMgPSBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICAgIHJldHVybiAocmVzIGluc3RhbmNlb2YgRnVuY3Rpb24pP2NhbWxfanNfd3JhcF9jYWxsYmFjayhyZXMpOnJlcztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5KTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZik7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX3dyYXBfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZixhcmdzKTtcbiAgICByZXR1cm4gKHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKT9jYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKTpyZXM7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLFt0aGlzLGFyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QoYXJpdHksIGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcml0eSArIDEpO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoLCBhcml0eSlcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSAtIDE7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbi8vSWY6ICFlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgcmV0dXJuIChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSB7XG4gIC8vIEZ1bmN0aW9ucyBoYXZlIGFuIGFkZGl0aW9uYWwgY29udGludWF0aW9uIHBhcmFtZXRlci4gVGhpcyBzaG91bGRcbiAgLy8gbm90IGJlIHZpc2libGUgd2hlbiBjYWxsaW5nIHRoZW0gZnJvbSBKYXZhU2NyaXB0XG4gIHJldHVybiAoKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKSkgLSAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZXF1YWxzICh4LCB5KSB7IHJldHVybiArKHggPT0geSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zdHJpY3RfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfc3RyaWN0X2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V2YWxfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V2YWxfc3RyaW5nIChzKSB7cmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19leHByIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcHVyZV9qc19leHByIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3B1cmVfanNfZXhwciAocyl7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX3B1cmVfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QgKGEpIHtcbiAgdmFyIG8gPSB7fTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHAgPSBhW2ldO1xuICAgIG9bY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocFsxXSldID0gcFsyXTtcbiAgfVxuICByZXR1cm4gbztcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUmFpc2UgZXhjZXB0aW9uXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9jb25zdGFudCAodGFnKSB7IHRocm93IHRhZzsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBhcmcpIHsgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWcsIGFyZ10pOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZ3MgKHRhZywgYXJncykgeyB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoWzAsIHRhZ10uY29uY2F0KGFyZ3MpKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nICh0YWcsIG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aCAobXNnKSB7XG4gIGlmKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlPVsyNDgsY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksLTNdO1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSwgbXNnKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkludmFsaWRfYXJndW1lbnQsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkRpdmlzaW9uX2J5X3plcm8pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfZm91bmQgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuTm90X2ZvdW5kKTsgfVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19mbG9vcl9sb2cyXG52YXIgbG9nMl9vayA9IE1hdGgubG9nMiAmJiBNYXRoLmxvZzIoMS4xMjM1NTgyMDkyODg5NDc0RSszMDcpID09IDEwMjBcbmZ1bmN0aW9uIGpzb29fZmxvb3JfbG9nMih4KSB7XG4gIGlmKGxvZzJfb2spIHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nMih4KSlcbiAgdmFyIGkgPSAwO1xuICBpZiAoeCA9PSAwKSByZXR1cm4gLUluZmluaXR5O1xuICBpZih4Pj0xKSB7d2hpbGUgKHg+PTIpIHt4Lz0yOyBpKyt9IH1cbiAgZWxzZSB7d2hpbGUgKHggPCAxKSB7eCo9MjsgaS0tfSB9O1xuICByZXR1cm4gaTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzIsIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXG5mdW5jdGlvbiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSlcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgxLCAwLCAweDdmZjApO1xuICAgIGlmICh4ID4gMClcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweDdmZjApXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4ZmZmMClcbiAgfVxuICB2YXIgc2lnbiA9ICh4PT0wICYmIDEveCA9PSAtSW5maW5pdHkpPzB4ODAwMDooeD49MCk/MDoweDgwMDA7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIC8vIEludDY0LmJpdHNfb2ZfZmxvYXQgMS4xMjM1NTgyMDkyODg5NDc0RSszMDcgPSAweDdmYjAwMDAwMDAwMDAwMDBMXG4gIC8vIHVzaW5nIE1hdGguTE9HMkUqTWF0aC5sb2coeCkgaW4gcGxhY2Ugb2YgTWF0aC5sb2cyIHJlc3VsdCBpbiBwcmVjaXNpb24gbG9zdFxuICB2YXIgZXhwID0ganNvb19mbG9vcl9sb2cyKHgpICsgMTAyMztcbiAgaWYgKGV4cCA8PSAwKSB7XG4gICAgZXhwID0gMDtcbiAgICB4IC89IE1hdGgucG93KDIsLTEwMjYpO1xuICB9IGVsc2Uge1xuICAgIHggLz0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gICAgaWYgKHggPCAxNikge1xuICAgICAgeCAqPSAyOyBleHAgLT0xOyB9XG4gICAgaWYgKGV4cCA9PSAwKSB7XG4gICAgICB4IC89IDI7IH1cbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsMjQpO1xuICB2YXIgcjMgPSB4fDA7XG4gIHggPSAoeCAtIHIzKSAqIGs7XG4gIHZhciByMiA9IHh8MDtcbiAgeCA9ICh4IC0gcjIpICogaztcbiAgdmFyIHIxID0geHwwO1xuICByMyA9IChyMyAmMHhmKSB8IHNpZ24gfCBleHAgPDwgNDtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKHIxLCByMiwgcjMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gIGZsb2F0MzJhWzBdID0geDtcbiAgdmFyIGludDMyYSA9IG5ldyBJbnQzMkFycmF5KGZsb2F0MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBpbnQzMmFbMF0gfCAwO1xufVxuXG4vL0ZQIGxpdGVyYWxzIGNhbiBiZSB3cml0dGVuIHVzaW5nIHRoZSBoZXhhZGVjaW1hbFxuLy9ub3RhdGlvbiAweDxtYW50aXNzYSBpbiBoZXg+cDxleHBvbmVudD4gZnJvbSBJU08gQzk5LlxuLy9odHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtaGV4ZmxvYXQvYmxvYi9tYXN0ZXIvaGV4ZmxvYXQuanNcbi8vUHJvdmlkZXM6IGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCAoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSkgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKFwibmFuXCIpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoKHggPiAwKT9cImluZmluaXR5XCI6XCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8xOih4Pj0wKT8wOjE7XG4gIGlmKHNpZ24pIHggPSAteDtcbiAgdmFyIGV4cCA9IDA7XG4gIGlmICh4ID09IDApIHsgfVxuICBlbHNlIGlmICh4IDwgMSkge1xuICAgIHdoaWxlICh4IDwgMSAmJiBleHAgPiAtMTAyMikgIHsgeCAqPSAyOyBleHAtLSB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikgeyB4IC89IDI7IGV4cCsrIH1cbiAgfVxuICB2YXIgZXhwX3NpZ24gPSBleHAgPCAwID8gJycgOiAnKyc7XG4gIHZhciBzaWduX3N0ciA9ICcnO1xuICBpZiAoc2lnbikgc2lnbl9zdHIgPSAnLSdcbiAgZWxzZSB7XG4gICAgc3dpdGNoKHN0eWxlKXtcbiAgICBjYXNlIDQzIC8qICcrJyAqLzogc2lnbl9zdHIgPSAnKyc7IGJyZWFrO1xuICAgIGNhc2UgMzIgLyogJyAnICovOiBzaWduX3N0ciA9ICcgJzsgYnJlYWs7XG4gICAgZGVmYXVsdDogYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwcmVjID49IDAgJiYgcHJlYyA8IDEzKSB7XG4gICAgLyogSWYgYSBwcmVjaXNpb24gaXMgZ2l2ZW4sIGFuZCBpcyBzbWFsbCwgcm91bmQgbWFudGlzc2EgYWNjb3JkaW5nbHkgKi9cbiAgICB2YXIgY3N0ID0gTWF0aC5wb3coMixwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmKHByZWMgPj0gMCl7XG4gICAgdmFyIGlkeCA9IHhfc3RyLmluZGV4T2YoJy4nKTtcbiAgICBpZihpZHg8MCkge1xuICAgICAgeF9zdHIgKz0gJy4nICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsICcwJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHgrMStwcmVjO1xuICAgICAgaWYoeF9zdHIubGVuZ3RoIDwgc2l6ZSlcbiAgICAgICAgeF9zdHIgKz0gY2FtbF9zdHJfcmVwZWF0KHNpemUgLSB4X3N0ci5sZW5ndGgsICcwJyk7XG4gICAgICBlbHNlXG4gICAgICAgIHhfc3RyID0geF9zdHIuc3Vic3RyKDAsc2l6ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoc2lnbl9zdHIgKyAnMHgnICsgeF9zdHIgKyAncCcgKyBleHBfc2lnbiArIGV4cC50b1N0cmluZygxMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgbG8gPSB4LmxvO1xuICB2YXIgbWkgPSB4Lm1pO1xuICB2YXIgaGkgPSB4LmhpO1xuICB2YXIgZXhwID0gKGhpICYgMHg3ZmZmKSA+PiA0O1xuICBpZiAoZXhwID09IDIwNDcpIHtcbiAgICBpZiAoKGxvfG1pfChoaSYweGYpKSA9PSAwKVxuICAgICAgcmV0dXJuIChoaSAmIDB4ODAwMCk/KC1JbmZpbml0eSk6SW5maW5pdHk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsLTI0KTtcbiAgdmFyIHJlcyA9IChsbyprK21pKSprKyhoaSYweGYpO1xuICBpZiAoZXhwID4gMCkge1xuICAgIHJlcyArPSAxNjtcbiAgICByZXMgKj0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gIH0gZWxzZVxuICAgIHJlcyAqPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgaWYgKGhpICYgMHg4MDAwKSByZXMgPSAtIHJlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9zdWIsY2FtbF9pbnQ2NF9vZl9pbnQzMlxuZnVuY3Rpb24gY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgKHgseSkge1xuICBpZihpc05hTih4KSB8fCBpc05hTih5KSkgcmV0dXJuIE5hTjtcbiAgaWYoeD09eSkgcmV0dXJuIHk7XG4gIGlmKHg9PTApe1xuICAgIGlmKHkgPCAwKVxuICAgICAgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpXG4gIH1cbiAgdmFyIGJpdHMgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoeCk7XG4gIHZhciBvbmUgPSBjYW1sX2ludDY0X29mX2ludDMyKDEpO1xuICBpZiAoKHg8eSkgPT0gKHg+MCkpXG4gICAgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSlcbiAgZWxzZVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X3N1YihiaXRzLCBvbmUpXG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCl7XG4gIHJldHVybiBNYXRoLnRydW5jKHgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgaW50MzJhID0gbmV3IEludDMyQXJyYXkoMSk7XG4gIGludDMyYVswXSA9IHg7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoaW50MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBmbG9hdDMyYVswXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCAoeCkge1xuICBpZiAoaXNGaW5pdGUgKHgpKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpID49IDIuMjI1MDczODU4NTA3MjAxNGUtMzA4KSByZXR1cm4gMDtcbiAgICBpZiAoeCAhPSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gaXNOYU4oeCk/NDozO1xufVxuLy9Qcm92aWRlczogY2FtbF9tb2RmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX21vZGZfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIHZhciBuZWcgPSAoMS94KSA8IDA7XG4gICAgeCA9IE1hdGguYWJzKHgpO1xuICAgIHZhciBpID0gTWF0aC5mbG9vciAoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7IGkgPSAtaTsgZiA9IC1mOyB9XG4gICAgcmV0dXJuIFswLCBmLCBpXTtcbiAgfVxuICBpZiAoaXNOYU4gKHgpKSByZXR1cm4gWzAsIE5hTiwgTmFOXTtcbiAgcmV0dXJuIFswLCAxL3gsIHhdO1xufVxuLy9Qcm92aWRlczogY2FtbF9sZGV4cF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sZGV4cF9mbG9hdCAoeCxleHApIHtcbiAgZXhwIHw9IDA7XG4gIGlmIChleHAgPiAxMDIzKSB7XG4gICAgZXhwIC09IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICBpZiAoZXhwID4gMTAyMykgeyAgLy8gaW4gY2FzZSB4IGlzIHN1Ym5vcm1hbFxuICAgICAgZXhwIC09IDEwMjM7XG4gICAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIH1cbiAgfVxuICBpZiAoZXhwIDwgLTEwMjMpIHtcbiAgICBleHAgKz0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIC0xMDIzKTtcbiAgfVxuICB4ICo9IE1hdGgucG93KDIsIGV4cCk7XG4gIHJldHVybiB4O1xufVxuLy9Qcm92aWRlczogY2FtbF9mcmV4cF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0ICh4KSB7XG4gIGlmICgoeCA9PSAwKSB8fCAhaXNGaW5pdGUoeCkpIHJldHVybiBbMCwgeCwgMF07XG4gIHZhciBuZWcgPSB4IDwgMDtcbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgdmFyIGV4cCA9IE1hdGgubWF4KC0xMDIzLCBqc29vX2Zsb29yX2xvZzIoeCkgKyAxKTtcbiAgeCAqPSBNYXRoLnBvdygyLC1leHApO1xuICB3aGlsZSAoeCA8IDAuNSkge1xuICAgIHggKj0gMjtcbiAgICBleHAtLTtcbiAgfVxuICB3aGlsZSAoeCA+PSAxKSB7XG4gICAgeCAqPSAwLjU7XG4gICAgZXhwKys7XG4gIH1cbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgcmV0dXJuIFswLCB4LCBleHBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfY29tcGFyZSAoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoeCA9PT0geCkgcmV0dXJuIDE7XG4gIGlmICh5ID09PSB5KSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0ICh4LCB5KSB7XG4gIGlmICh5ID09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4gKHkgPCAwKT8oLXgpOng7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaWduYml0X2Zsb2F0KHgpIHtcbiAgaWYgKHggPT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4gKHggPCAwKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhwbTFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwbTFfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguZXhwbTEoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZXhwMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHAyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgucG93KDIsIHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMXAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMih4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9oeXBvdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9oeXBvdF9mbG9hdCAoeCwgeSkgeyByZXR1cm4gTWF0aC5oeXBvdCh4LCB5KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxMF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxMF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5sb2cxMCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9jb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Nvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9zaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3NpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hc2luaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF90YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3RhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgudGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hdGFuaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hdGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9yb3VuZF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9yb3VuZF9mbG9hdCAoeCkge1xuICBpZiAoeCA+PSAwKSB7XG4gICAgdmFyIHkgPSBNYXRoLmZsb29yKHgpO1xuICAgIHJldHVybiAoeCAtIHkgPj0gMC41KT8oeSArIDEpOnlcbiAgfSBlbHNlIHtcbiAgICB2YXIgeSA9IE1hdGguY2VpbCh4KTtcbiAgICByZXR1cm4gKHkgLSB4ID49IDAuNSk/KHkgLSAxKTp5XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNicnQoeCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9IDEuMCAtICgoKChhNSAqIHQgKyBhNCkgKiB0ICsgYTMpICogdCArIGEyKSAqIHQgKyBhMSkgKiB0ICogTWF0aC5leHAoLXggKiB4KTtcblxuICByZXR1cm4gc2lnbiAqIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmY19mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9lcmZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfZXJmY19mbG9hdCh4KSB7XG4gIHJldHVybiAxIC0gY2FtbF9lcmZfZmxvYXQoeCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5IChhLCBiKSB7XG4gICAgdmFyIGF0ID0gU1BMSVQgKiBhO1xuICAgIHZhciBhaGkgPSBhdCAtIChhdCAtIGEpO1xuICAgIHZhciBhbG8gPSBhIC0gYWhpO1xuICAgIHZhciBidCA9IFNQTElUICogYjtcbiAgICB2YXIgYmhpID0gYnQgLSAoYnQgLSBiKTtcbiAgICB2YXIgYmxvID0gYiAtIGJoaTtcbiAgICB2YXIgcCA9IGEgKiBiO1xuICAgIHZhciBlID0gKChhaGkgKiBiaGkgLSBwKSArIGFoaSAqIGJsbyArIGFsbyAqIGJoaSkgKyBhbG8gKiBibG87XG4gICAgcmV0dXJuIHtcbiAgICAgIHA6IHAsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSAoYSAtIChzIC0gdikpICsgKGIgLSB2KTtcbiAgICByZXR1cm4ge1xuICAgICAgczogcyxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkanVzdCAoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4ID8geCAqICgxICsgKHggPCAwID8gLTEgOiArMSkgKiAoeSA8IDAgPyAtMSA6ICsxKSAqIEVQU0lMT04pIDogeDtcbiAgfTtcblxuICBpZiAoeCA9PT0gMCB8fCB4ICE9PSB4IHx8IHggPT09ICsxIC8gMCB8fCB4ID09PSAtMSAvIDAgfHxcbiAgICAgIHkgPT09IDAgfHwgeSAhPT0geSB8fCB5ID09PSArMSAvIDAgfHwgeSA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICsgejtcbiAgfVxuICBpZiAoeiA9PT0gMCkge1xuICAgIHJldHVybiB4ICogeTtcbiAgfVxuICBpZiAoeiAhPT0geiB8fCB6ID09PSArMSAvIDAgfHwgeiA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiBNYXRoLmFicyh4cyAqIHlzKSAqIDQgLyBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cbiAgaWYgKE1hdGguYWJzKHpzKSA8IE1hdGguYWJzKHhzICogeXMpICogRVBTSUxPTiAvIDQgKiBFUFNJTE9OIC8gNCkge1xuICAgIHpzID0gKHogPCAwID8gLTEgOiArMSkgKiBNSU5fVkFMVUU7XG4gIH1cblxuICB2YXIgeHkgPSBtdWx0aXBseSh4cywgeXMpO1xuICB2YXIgcyA9IGFkZCh4eS5wLCB6cyk7XG4gIHZhciB1ID0gYWRkKHh5LmUsIHMuZSk7XG4gIHZhciBpID0gYWRkKHMucywgdS5zKTtcblxuICB2YXIgZiA9IGkucyArIGFkanVzdChpLmUsIHUuZSk7XG4gIGlmIChmID09PSAwKSB7XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICB2YXIgZnMgPSBmICogc2NhbGU7XG4gIGlmIChNYXRoLmFicyhmcykgPiBNSU5fVkFMVUUpIHtcbiAgICByZXR1cm4gZnM7XG4gIH1cblxuICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdhcyBleHRyYSByb3VuZGluZyBmb3IgYSBkZW5vcm1hbGl6ZWQgdmFsdWUuXG4gIHJldHVybiBmcyArIGFkanVzdChmIC0gZnMgLyBzY2FsZSwgaS5lKSAqIHNjYWxlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2Zsb2F0IChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LGRwKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpIDwgMS4wKSB7XG4gICAgICByZXR1cm4geC50b0ZpeGVkKGRwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGUgPSBwYXJzZUludCh4LnRvU3RyaW5nKCkuc3BsaXQoJysnKVsxXSk7XG4gICAgICBpZiAoZSA+IDIwKSB7XG4gICAgICAgIGUgLT0gMjA7XG4gICAgICAgIHggLz0gTWF0aC5wb3coMTAsZSk7XG4gICAgICAgIHggKz0gKG5ldyBBcnJheShlKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIGlmKGRwID4gMCkge1xuICAgICAgICAgIHggPSB4ICsgJy4nICsgKG5ldyBBcnJheShkcCsxKSkuam9pbignMCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgICAgZWxzZSByZXR1cm4geC50b0ZpeGVkKGRwKVxuICAgIH1cbiAgfVxuICB2YXIgcywgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIHZhciBwcmVjID0gKGYucHJlYyA8IDApPzY6Zi5wcmVjO1xuICBpZiAoeCA8IDAgfHwgKHggPT0gMCAmJiAxL3ggPT0gLUluZmluaXR5KSkgeyBmLnNpZ24gPSAtMTsgeCA9IC14OyB9XG4gIGlmIChpc05hTih4KSkgeyBzID0gXCJuYW5cIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZSBpZiAoIWlzRmluaXRlKHgpKSB7IHMgPSBcImluZlwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlXG4gICAgc3dpdGNoIChmLmNvbnYpIHtcbiAgICBjYXNlICdlJzpcbiAgICAgIHZhciBzID0geC50b0V4cG9uZW50aWFsKHByZWMpO1xuICAgICAgLy8gZXhwb25lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IHR3byBkaWdpdHNcbiAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2YnOlxuICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7IGJyZWFrO1xuICAgIGNhc2UgJ2cnOlxuICAgICAgcHJlYyA9IHByZWM/cHJlYzoxO1xuICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICB2YXIgaiA9IHMuaW5kZXhPZignZScpO1xuICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgIGlmIChleHAgPCAtNCB8fCB4ID49IDFlMjEgfHwgeC50b0ZpeGVkKDApLmxlbmd0aCA+IHByZWMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICB2YXIgaSA9IGogLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgaSA9IHMubGVuZ3RoO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgaWYgKGV4cCA8IDApIHsgcCAtPSBleHAgKyAxOyBzID0geC50b0ZpeGVkKHApOyB9XG4gICAgICAgIGVsc2Ugd2hpbGUgKHMgPSB4LnRvRml4ZWQocCksIHMubGVuZ3RoID4gcHJlYyArIDEpIHAtLTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgICAgdmFyIGkgPSBzLmxlbmd0aCAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpXG4gIHJlcyA9ICtzO1xuICBpZiAoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLFwiXCIpO1xuICByZXMgPSArcztcbiAgaWYgKCgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSB8fCAvXlsrLV0/bmFuJC9pLnRlc3QocykpIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8vaS5leGVjKHMpO1xuICAvLyAgICAgICAgICAxICAgICAgICAyICAgICAgICAgICAgIDMgICAgICAgICAgIDVcbiAgaWYobSl7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCcnKTtcbiAgICB2YXIgbWFudGlzc2EgPSBwYXJzZUludChtWzFdICsgbVsyXSArIG0zLCAxNik7XG4gICAgdmFyIGV4cG9uZW50ID0gKG1bNV18MCkgLSA0Km0zLmxlbmd0aDtcbiAgICByZXMgPSBtYW50aXNzYSAqIE1hdGgucG93KDIsIGV4cG9uZW50KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmKC9eXFwrP2luZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBJbmZpbml0eTtcbiAgaWYoL14taW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIC1JbmZpbml0eTtcbiAgY2FtbF9mYWlsd2l0aChcImZsb2F0X29mX3N0cmluZ1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdXBkYXRlX2R1bW15XG5mdW5jdGlvbiBjYW1sX3VwZGF0ZV9kdW1teSAoeCwgeSkge1xuICBpZiggeS5mdW4gKSB7IHguZnVuID0geS5mdW47IHJldHVybiAwOyB9XG4gIGlmKCB0eXBlb2YgeT09PVwiZnVuY3Rpb25cIiApIHsgeC5mdW4gPSB5OyByZXR1cm4gMDsgfVxuICB2YXIgaSA9IHkubGVuZ3RoOyB3aGlsZSAoaS0tKSB4W2ldID0geVtpXTsgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYWxsb2NfZHVtbXlfaW5maXhcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfYWxsb2NfZHVtbXlfaW5maXggKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZiAoeCkgeyByZXR1cm4gY2FtbF9jYWxsX2dlbihmLmZ1biwgW3hdKSB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX2Jsb2NrIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX2Jsb2NrICh4KSB7IHJldHVybiArKHggaW5zdGFuY2VvZiBBcnJheSk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial90YWdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX29ial90YWcgKHgpIHtcbiAgaWYgKCh4IGluc3RhbmNlb2YgQXJyYXkpICYmIHhbMF0gPT0gKHhbMF0gPj4+IDApKVxuICAgIHJldHVybiB4WzBdXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSlcbiAgICByZXR1cm4gMjUyXG4gIGVsc2UgaWYgKCh4IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8IHR5cGVvZiB4ID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMjQ3XG4gIGVsc2UgaWYgKHggJiYgeC5jYW1sX2N1c3RvbSlcbiAgICByZXR1cm4gMjU1XG4gIGVsc2VcbiAgICByZXR1cm4gMTAwMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcgKHgsIHRhZykgeyB4WzBdID0gdGFnOyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sgKHRhZywgc2l6ZSkge1xuICB2YXIgbyA9IG5ldyBBcnJheShzaXplKzEpO1xuICBvWzBdPXRhZztcbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc2l6ZTsgaSsrKSBvW2ldID0gMDtcbiAgcmV0dXJuIG87XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3dpdGhfdGFnXG5mdW5jdGlvbiBjYW1sX29ial93aXRoX3RhZyh0YWcseCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IHRhZztcbiAgZm9yKHZhciBpID0gMTsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfZHVwIG11dGFibGUgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX29ial9kdXAgKHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUgKHgsIHMpIHtcbiAgaWYgKHM8PTAgfHwgcyArIDEgPiB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiT2JqLnRydW5jYXRlXCIpO1xuICBpZiAoeC5sZW5ndGggIT0gcyArIDEpIHgubGVuZ3RoID0gcyArIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9tYWtlX2ZvcndhcmRcbmZ1bmN0aW9uIGNhbWxfb2JqX21ha2VfZm9yd2FyZCAoYix2KSB7XG4gIGJbMF09MjUwO1xuICBiWzFdPXY7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXBcbmZ1bmN0aW9uIGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXAoeCxpLG9sZCxuKXtcbiAgaWYoeFtpKzFdID09IG9sZCkge1xuICAgIHhbaSsxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfaXNfc2hhcmVkXG5mdW5jdGlvbiBjYW1sX29ial9pc19zaGFyZWQoeCl7XG4gIHJldHVybiAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkICh2KSB7IHJldHVybiBbMjUwLCB2XTsgfVxuXG4vLy8vLy8vLy8vLy8vIENhbWxpbnRlcm5hbE9PXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIGNvbnN0XG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAob2ZzID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycmF5IGlzIG5vdCBzcGFyc2VcbiAgICBmb3IgKHZhciBpID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoOyBpIDwgY2FjaGVpZDsgaSsrKVxuICAgICAgY2FtbF9tZXRob2RfY2FjaGVbaV0gPSAwO1xuICB9IGVsc2UgaWYgKG1ldGhzW29mc10gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgLSAxXTtcbiAgfVxuICB2YXIgbGkgPSAzLCBoaSA9IG1ldGhzWzFdICogMiArIDEsIG1pO1xuICB3aGlsZSAobGkgPCBoaSkge1xuICAgIG1pID0gKChsaStoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSsxXSkgaGkgPSBtaS0yO1xuICAgIGVsc2UgbGkgPSBtaTtcbiAgfVxuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IGxpICsgMTtcbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gKHRhZyA9PSBtZXRoc1tsaSsxXSA/IG1ldGhzW2xpXSA6IDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29vX2xhc3RfaWRcbnZhciBjYW1sX29vX2xhc3RfaWQgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9vb19pZFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX3NldF9vb19pZCAoYikge1xuICBiWzJdPWNhbWxfb29fbGFzdF9pZCsrO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mcmVzaF9vb19pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX2ZyZXNoX29vX2lkKCkge1xuICByZXR1cm4gY2FtbF9vb19sYXN0X2lkKys7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfcmF3X2ZpZWxkKG8saSkgeyByZXR1cm4gb1tpKzFdIH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3Jhd19maWVsZChvLGksdikgeyByZXR1cm4gb1tpKzFdID0gdiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKG8pIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfYWRkX29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9vYmpfYWRkX29mZnNldCh2LG9mZnNldCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiT2JqLmFkZF9vZmZzZXQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLG8sbikge1xuICAgIGlmKGJbMF09PW8pIHsgYlswXSA9IG47IHJldHVybiAxIH1cbiAgICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmICgobyBpbnN0YW5jZW9mIEFycmF5KSAmJiBvWzBdID09IChvWzBdID4+PiAwKSAmJlxuICAgICAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDYsIDI0NCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcndhcmRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbiAgZnVuY3Rpb24gY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkKG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLDI0NCwyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZXNldF90b19sYXp5XG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eShvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywyNDQsMjQ2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZWFkX3Jlc3VsdFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVhZF9yZXN1bHQobykge1xuICByZXR1cm4gKGNhbWxfb2JqX3RhZyhvKSA9PSAyNTApP29bMV06bztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0KSB7XG4gIHJldHVybiAodCA9PSAyNDUpID8gMSA6IDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZmZzZXRcbnZhciBjYW1sX2ludDY0X29mZnNldCA9IE1hdGgucG93KDIsIC0yNCk7XG5cbi8vUHJvdmlkZXM6IE1sSW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBNbEludDY0IChsbyxtaSxoaSkge1xuICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9IG1pICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSBoaSAmIDB4ZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfalwiXG5NbEludDY0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyx0aGlzLm1pLHRoaXMuaGkpO1xufVxuXG5NbEludDY0LnByb3RvdHlwZS51Y29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIGlmICh0aGlzLmhpID4geC5oaSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmhpIDwgeC5oaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubG8gPiB4LmxvKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBoaSA9IHRoaXMuaGkgPDwgMTY7XG4gIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICBpZiAoaGkgPiB4aGkpIHJldHVybiAxO1xuICBpZiAoaGkgPCB4aGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxvID0gLSB0aGlzLmxvO1xuICB2YXIgbWkgPSAtIHRoaXMubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSAtIHRoaXMuaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSArIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpICsgeC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gLSB4LmxvO1xuICB2YXIgbWkgPSB0aGlzLm1pIC0geC5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyAqIHgubG87XG4gIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gIHZhciBoaSA9ICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMuaGkgKiB4LmxvICsgdGhpcy5taSAqIHgubWkgKyB0aGlzLmxvICogeC5oaTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMubG98dGhpcy5taXx0aGlzLmhpKSA9PSAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5oaSA8PCAxNikgPCAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gJiB4LmxvLCB0aGlzLm1pICYgeC5taSwgdGhpcy5oaSAmIHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb3x4LmxvLCB0aGlzLm1pfHgubWksIHRoaXMuaGl8eC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb154LmxvLCB0aGlzLm1pXngubWksIHRoaXMuaGleeC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9sZWZ0ID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMubG8gPDwgcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IHMpIHwgKHRoaXMubG8gPj4gKDI0IC0gcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaGkgPDwgcykgfCAodGhpcy5taSA+PiAoMjQgLSBzKSkpO1xuICB9XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IChzIC0gMjQpKSB8ICh0aGlzLmxvID4+ICg0OCAtIHMpKSk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCgwLCAwLCB0aGlzLmxvIDw8IChzIC0gNDgpKVxufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHRfdW5zaWduZWQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8ICh0aGlzLmhpIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IHMpKTtcbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubWkgPj4gKHMgLSAyNCkpIHwgKHRoaXMuaGkgPDwgKDQ4IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPj4gKHMgLSAyNCkpLFxuICAgICAgMCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAodGhpcy5oaSA+PiAocyAtIDQ4KSwgMCwgMCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9yaWdodCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICB2YXIgaCA9ICh0aGlzLmhpIDw8IDE2KSA+PiAxNjtcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICgodGhpcy5oaSA8PCAxNikgPj4gcykgPj4+IDE2KTtcbiAgdmFyIHNpZ24gPSAodGhpcy5oaSA8PCAxNikgPj4gMzE7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSA+PiAxNixcbiAgICAgIHNpZ24gJiAweGZmZmYpO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDMyKSwgc2lnbiwgc2lnbik7XG59XG5NbEludDY0LnByb3RvdHlwZS5sc2wxID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPDwgMSkgfCAodGhpcy5sbyA+PiAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubG8gPSAodGhpcy5sbyA8PCAxKSAmIDB4ZmZmZmZmO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNyMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPj4+IDEpIHwgKHRoaXMuaGkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gdGhpcy5oaSA+Pj4gMTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnVkaXZtb2QgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgdmFyIG1vZHVsdXMgPSB0aGlzLmNvcHkoKTtcbiAgdmFyIGRpdmlzb3IgPSB4LmNvcHkoKTtcbiAgdmFyIHF1b3RpZW50ID0gbmV3IE1sSW50NjQoMCwwLDApO1xuICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICBvZmZzZXQrKztcbiAgICBkaXZpc29yLmxzbDEoKTtcbiAgfVxuICB3aGlsZSAob2Zmc2V0ID49IDApIHtcbiAgICBvZmZzZXQgLS07XG4gICAgcXVvdGllbnQubHNsMSgpO1xuICAgIGlmIChtb2R1bHVzLnVjb21wYXJlKGRpdmlzb3IpID49IDApIHtcbiAgICAgIHF1b3RpZW50LmxvICsrO1xuICAgICAgbW9kdWx1cyA9IG1vZHVsdXMuc3ViKGRpdmlzb3IpO1xuICAgIH1cbiAgICBkaXZpc29yLmxzcjEoKTtcbiAgfVxuICByZXR1cm4geyBxdW90aWVudCA6IHF1b3RpZW50LCBtb2R1bHVzIDogbW9kdWx1cyB9O1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gKHkpXG57XG4gIHZhciB4ID0gdGhpcztcbiAgaWYgKHkuaXNaZXJvKCkpIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHZhciBzaWduID0geC5oaSBeIHkuaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgcSA9IHgudWRpdm1vZCh5KS5xdW90aWVudDtcbiAgaWYgKHNpZ24gJiAweDgwMDApIHEgPSBxLm5lZygpO1xuICByZXR1cm4gcTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm1vZCA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgciA9IHgudWRpdm1vZCh5KS5tb2R1bHVzO1xuICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gIHJldHVybiByO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxvIHwgKHRoaXMubWkgPDwgMjQpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9GbG9hdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgodGhpcy5oaSA8PCAxNikgKiBNYXRoLnBvdygyLCAzMikgKyB0aGlzLm1pICogTWF0aC5wb3coMiwgMjQpKSArIHRoaXMubG87XG59XG5NbEludDY0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW3RoaXMuaGkgPj4gOCxcbiAgICAgICAgICB0aGlzLmhpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pID4+IDE2LFxuICAgICAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvID4+IDE2LFxuICAgICAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvICYgMHhmZl07XG59XG5NbEludDY0LnByb3RvdHlwZS5sbzMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICgodGhpcy5taSAmIDB4ZmYpIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmhpMzIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMubWkgPj4+IDgpICYgMHhmZmZmKSB8ICh0aGlzLmhpIDw8IDE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgseSkgeyByZXR1cm4geC51Y29tcGFyZSh5KSA8IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NvbXBhcmUoeCx5LCB0b3RhbCkgeyByZXR1cm4geC5jb21wYXJlKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnICh4KSB7IHJldHVybiB4Lm5lZygpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hZGQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYWRkICh4LCB5KSB7IHJldHVybiB4LmFkZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc3ViIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3N1YiAoeCwgeSkgeyByZXR1cm4geC5zdWIoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgseSkgeyByZXR1cm4geC5tdWwoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7IHJldHVybiAreC5pc1plcm8oKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpIHsgcmV0dXJuICt4LmlzTmVnKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hbmQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYW5kICh4LCB5KSB7IHJldHVybiB4LmFuZCh5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29yICh4LCB5KSB7IHJldHVybiB4Lm9yKHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfeG9yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3hvciAoeCwgeSkgeyByZXR1cm4geC54b3IoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9sZWZ0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYgKHgsIHkpIHsgcmV0dXJuIHguZGl2KHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tb2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbW9kICh4LCB5KSB7IHJldHVybiB4Lm1vZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfaW50MzIgKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19pbnQzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMiAoeCkgeyByZXR1cm4geC50b0ludCgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19mbG9hdCAoeCkgeyByZXR1cm4geC50b0Zsb2F0ICgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mb3JtYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF90b19pbnQzMlxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc196ZXJvLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZm9ybWF0IChmbXQsIHgpIHtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoZi5zaWduZWRjb252ICYmIGNhbWxfaW50NjRfaXNfbmVnYXRpdmUoeCkpIHtcbiAgICBmLnNpZ24gPSAtMTsgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghIGNhbWxfaW50NjRfaXNfemVybyh4KSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gYnVmZmVyLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIGJ1ZmZlciA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIGJ1ZmZlcjtcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBidWZmZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3BhcnNlX2RpZ2l0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3VsdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfbXVsLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGJhc2U2NCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoYmFzZSk7XG4gIHZhciB0aHJlc2hvbGQgPVxuICAgICAgbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmZiwgMHhmZmZmKS51ZGl2bW9kKGJhc2U2NCkucXVvdGllbnQ7XG4gIHZhciBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gIGZvciAoOzspIHtcbiAgICBpKys7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIC8qIERldGVjdCBvdmVyZmxvdyBpbiBtdWx0aXBsaWNhdGlvbiBiYXNlICogcmVzICovXG4gICAgaWYgKGNhbWxfaW50NjRfdWx0KHRocmVzaG9sZCwgcmVzKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gICAgZCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gICAgcmVzID0gY2FtbF9pbnQ2NF9hZGQoY2FtbF9pbnQ2NF9tdWwoYmFzZTY0LCByZXMpLCBkKTtcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gYWRkaXRpb24gKGJhc2UgKiByZXMpICsgZCAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdChyZXMsIGQpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoYmFzZSA9PSAxMCAmJiBjYW1sX2ludDY0X3VsdChuZXcgTWxJbnQ2NCgwLCAwLCAweDgwMDApLCByZXMpKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobG8sIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICBsbyAmIDB4ZmZmZmZmLFxuICAgICgobG8gPj4+IDI0KSAmIDB4ZmYpIHwgKChoaSAmIDB4ZmZmZikgPDwgOCksXG4gICAgKGhpID4+PiAxNikgJiAweGZmZmYpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9sbzMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2xvMzIodil7IHJldHVybiB2LmxvMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGkzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oaTMyKHYpeyByZXR1cm4gdi5oaTMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGFbN10gPDwgMCB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVs0XSA8PCAwIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzFdIDw8IDAgfCAoYVswXSA8PCA4KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2J5dGVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2J5dGVzKHgpIHsgcmV0dXJuIHgudG9BcnJheSgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oYXNoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hhc2godil7XG4gIHJldHVybiAodi5sbzMyKCkpIF4gKHYuaGkzMigpKVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmQsIEFuZHkgUmF5XG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4vL1xuLy8gQmlnYXJyYXkuXG4vL1xuLy8gLSBhbGwgYmlnYXJyYXkgdHlwZXMgaW5jbHVkaW5nIEludDY0IGFuZCBDb21wbGV4LlxuLy8gLSBmb3J0cmFuICsgYyBsYXlvdXRzXG4vLyAtIHN1Yi9zbGljZS9yZXNoYXBlXG4vLyAtIHJldGFpbiBmYXN0IHBhdGggZm9yIDFkIGFycmF5IGFjY2Vzc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2luaXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYmFfaW5pdCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSB7XG4gIHZhciBuX2RpbXMgPSBkaW1zLmxlbmd0aDtcbiAgdmFyIHNpemUgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5fZGltczsgaSsrKSB7XG4gICAgaWYgKGRpbXNbaV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgc2l6ZSA9IHNpemUgKiBkaW1zW2ldO1xuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpe1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgNzogY2FzZSAxMDogY2FzZSAxMTogcmV0dXJuIDI7XG4gIGRlZmF1bHQ6IHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSl7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMDogIHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDE6ICB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAyOiAgdmlldyA9IEludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgMzogIHZpZXcgPSBVaW50OEFycmF5OyBicmVhaztcbiAgY2FzZSA0OiAgdmlldyA9IEludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDU6ICB2aWV3ID0gVWludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDY6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgNzogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA4OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDk6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTA6IHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDExOiB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAxMjogdmlldyA9IFVpbnQ4QXJyYXk7IGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPCA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycmF5XCJcblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA+PSA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycjAyXCJcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG5mdW5jdGlvbiBNbF9CaWdhcnJheSAoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcblxuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IGNhbWxfYmFfY3VzdG9tX25hbWU7XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHZhciBvZnMgPSAwO1xuICBpZih0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgaWYgKCEgKGFyZyBpbnN0YW5jZW9mIEFycmF5KSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiYmlnYXJyYXkuanM6IGludmFsaWQgb2Zmc2V0XCIpO1xuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBhcmcubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgaWYodGhpcy5sYXlvdXQgPT0gMCAvKiBjX2xheW91dCAqLykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMCB8fCBhcmdbaV0gPj0gdGhpcy5kaW1zW2ldKVxuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIGFyZ1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuZGltcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGFyZ1tpXSA8IDEgfHwgYXJnW2ldID4gdGhpcy5kaW1zW2ldKXtcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgfVxuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyAoYXJnW2ldIC0gMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvZnM7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgbCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGggPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLGgpO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIHIgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gWzI1NCwgciwgaV07XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdXG4gIH1cbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IHZbMV07XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IHZbMl07XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwXG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGEgPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgaWYoYSA9PSBiKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGEgOiBiO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciBpbSA9IHZbMV07XG4gICAgdmFyIHJlID0gdlsyXTtcbiAgICBpZihpbSA9PSByZSl7XG4gICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gaW0gOiByZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhLmZpbGwodik7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIChiLCB0b3RhbCkge1xuICBpZiAodGhpcy5sYXlvdXQgIT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9IGIua2luZCkge1xuICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICB2YXIgazIgPSAgICBiLmtpbmQgfCAoYi5sYXlvdXQgPDwgOCk7XG4gICAgcmV0dXJuIGsyIC0gazE7XG4gIH1cbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYi5kaW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBiLmRpbXMubGVuZ3RoIC0gdGhpcy5kaW1zLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAodGhpcy5kaW1zW2ldICE9IGIuZGltc1tpXSlcbiAgICAgIHJldHVybiAodGhpcy5kaW1zW2ldIDwgYi5kaW1zW2ldKSA/IC0xIDogMTtcbiAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gIGNhc2UgMTA6XG4gIGNhc2UgMTE6XG4gICAgLy8gRmxvYXRzXG4gICAgdmFyIHgsIHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHggPSB0aGlzLmRhdGFbaV07XG4gICAgICB5ID0gYi5kYXRhW2ldO1xuICAgICAgaWYgKHggPCB5KVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoeCA+IHkpXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKHggIT0geSkge1xuICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICBpZiAoeCA9PSB4KSByZXR1cm4gMTtcbiAgICAgICAgaWYgKHkgPT0geSkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKz0yKSB7XG4gICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA8IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPiBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPCAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApID4gKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAyOlxuICBjYXNlIDM6XG4gIGNhc2UgNDpcbiAgY2FzZSA1OlxuICBjYXNlIDY6XG4gIGNhc2UgODpcbiAgY2FzZSA5OlxuICBjYXNlIDEyOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldIDwgYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5X2NfMV8xXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgICA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlID0gbmV3IE1sX0JpZ2FycmF5KClcbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIGlmKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpe1xuICAgIGlmKChhcmcgaW5zdGFuY2VvZiBBcnJheSkgJiYgYXJnLmxlbmd0aCA9PSAxKVxuICAgICAgYXJnID0gYXJnWzBdO1xuICAgIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiTWxfQmlnYXJyYXlfY18xXzEub2Zmc2V0XCIpO1xuICB9XG4gIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pXG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJnO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICByZXR1cm4gdGhpcy5kYXRhW29mc107XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgdGhpcy5kYXRhW29mc10gPSB2O1xuICByZXR1cm4gMFxufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHRoaXMuZGF0YS5maWxsKHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLGIsdG90YWwpe1xuICByZXR1cm4gYS5jb21wYXJlKGIsdG90YWwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIE1sX0JpZ2FycmF5X2NfMV8xLCBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpe1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmKGNhbWxfYmFfZ2V0X3NpemUoZGltcykgKiBzaXplX3Blcl9lbGVtZW50ICE9IGRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwibGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggZGltc1wiKTtcbiAgfVxuICBpZihsYXlvdXQgPT0gMCAmJiAvLyBjX2xheW91dFxuICAgICBkaW1zLmxlbmd0aCA9PSAxICYmIC8vIEFycmF5MVxuICAgICBzaXplX3Blcl9lbGVtZW50ID09IDEpIC8vIDEtdG8tMSBtYXBwaW5nXG4gICAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5KGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG5cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGUoa2luZCwgbGF5b3V0LCBkaW1zX21sKSB7XG4gIHZhciBkaW1zID0gY2FtbF9qc19mcm9tX2FycmF5KGRpbXNfbWwpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBjYW1sX2JhX2dldF9zaXplKGRpbXMpKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NoYW5nZV9sYXlvdXRcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9jaGFuZ2VfbGF5b3V0KGJhLCBsYXlvdXQpIHtcbiAgaWYoYmEubGF5b3V0ID09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2JhLmRpbXMubGVuZ3RoIC0gaSAtIDFdO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGxheW91dCwgbmV3X2RpbXMsIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZChiYSkge1xuICByZXR1cm4gYmEua2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9sYXlvdXRcbmZ1bmN0aW9uIGNhbWxfYmFfbGF5b3V0KGJhKSB7XG4gIHJldHVybiBiYS5sYXlvdXQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbnVtX2RpbXNcbmZ1bmN0aW9uIGNhbWxfYmFfbnVtX2RpbXMoYmEpIHtcbiAgcmV0dXJuIGJhLmRpbXMubGVuZ3RoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2RpbShiYSwgaSkge1xuICBpZiAoaSA8IDAgfHwgaSA+PSBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5kaW1cIik7XG4gIHJldHVybiBiYS5kaW1zW2ldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMShiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8yXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMihiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8zXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMyhiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X2dlbmVyaWMoYmEsIGkpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpO1xuICByZXR1cm4gYmEuZ2V0KG9mcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MTYoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiAoYjEgfCAoYjIgPDwgOCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDMyKGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICByZXR1cm4gKCAoYjEgPDwgMCkgIHxcbiAgICAgICAgICAgKGIyIDw8IDgpICB8XG4gICAgICAgICAgIChiMyA8PCAxNikgfFxuICAgICAgICAgICAoYjQgPDwgMjQpICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0NjQoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHZhciBiNSA9IGJhLmdldChvZnMrNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMrNSk7XG4gIHZhciBiNyA9IGJhLmdldChvZnMrNik7XG4gIHZhciBiOCA9IGJhLmdldChvZnMrNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCxiNyxiNixiNSxiNCxiMyxiMixiMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8xKGJhLCBpMCkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChpMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8yXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8yKGJhLCBpMCwgaTEpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8zXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8zKGJhLCBpMCwgaTEsIGkyKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX3NldF9nZW5lcmljKGJhLCBpLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MTYoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDMyKGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMiwgKHYgPj4+IDE2KSAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzMsICh2ID4+PiAyNCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0NjQoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciB2ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcytpLCB2WzctaV0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8xXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8xKGJhLCBpMCwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGkwKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMV0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzMoYmEsIGkwLCBpMSwgaTIsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9IHNyYy5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZHN0LmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKGRzdC5kaW1zW2ldICE9IHNyYy5kaW1zW2ldKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBkc3QuZGF0YS5zZXQoc3JjLmRhdGEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zdWJcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3N1YihiYSwgb2ZzLCBsZW4pIHtcbiAgdmFyIGNoYW5nZWRfZGltO1xuICB2YXIgbXVsID0gMTtcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAoYmEuZGltcy5sZW5ndGggLSAxKTsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IGJhLmRpbXMubGVuZ3RoIC0gMTtcbiAgICBvZnMgPSBvZnMgLSAxO1xuICB9XG4gIGlmIChvZnMgPCAwIHx8IGxlbiA8IDAgfHwgKG9mcyArIGxlbikgPiBiYS5kaW1zW2NoYW5nZWRfZGltXSl7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc3ViOiBiYWQgc3ViLWFycmF5XCIpO1xuICB9XG4gIHZhciBuZXdfZGltcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2ldO1xuICBuZXdfZGltc1tjaGFuZ2VkX2RpbV0gPSBsZW47XG4gIG11bCAqPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIG11bCwgKG9mcyArIGxlbikgKiBtdWwpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zbGljZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zbGljZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbnVtX2luZHMgPSB2aW5kLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gW107XG4gIHZhciBzdWJfZGltcyA9IFtdO1xuICB2YXIgb2ZzO1xuXG4gIGlmIChudW1faW5kcyA+IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnNsaWNlOiB0b28gbWFueSBpbmRpY2VzXCIpO1xuXG4gIC8vIENvbXB1dGUgb2Zmc2V0IGFuZCBjaGVjayBib3VuZHNcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSB2aW5kW2ldO1xuICAgIGZvciAoOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMDtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UobnVtX2luZHMpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2JhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMgKyBpXSA9IHZpbmRbaV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBzaXplX3Blcl9lbGVtZW50LCAob2ZzICsgc2l6ZSkgKiBzaXplX3Blcl9lbGVtZW50KTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIHN1Yl9kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfcmVzaGFwZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuZnVuY3Rpb24gY2FtbF9iYV9yZXNoYXBlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBuZXdfZGltID0gW107XG4gIHZhciBudW1fZGltcyA9IHZpbmQubGVuZ3RoO1xuXG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICB9XG4gIHZhciBudW1fZWx0cyA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgIG5ld19kaW1baV0gPSB2aW5kW2ldO1xuICAgIGlmIChuZXdfZGltW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBudW1fZWx0cyA9IG51bV9lbHRzICogbmV3X2RpbVtpXTtcbiAgfVxuXG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgLy8gQ2hlY2sgdGhhdCBzaXplcyBhZ3JlZVxuICBpZiAobnVtX2VsdHMgIT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgKGJhLmtpbmQgfCAoYmEubGF5b3V0IDw8IDgpKSk7XG4gIGlmKGJhLmNhbWxfY3VzdG9tID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKGJhLmRpbXNbaV0gPCAweGZmZmYpXG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGltc1tpXSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCAweGZmZmYpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIDApO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB3cml0ZXIud3JpdGUoMzIsYmEuZGltc1tpXSlcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgd3JpdGVyLndyaXRlKDgsMCk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoYmEuZ2V0KGkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGogPSBiYS5nZXQoaSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzJdKSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGNvbXBsZXggPSBiYS5nZXQoaSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMV0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzJdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgbmFtZSl7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmXG4gIHZhciBsYXlvdXQgPSAodGFnID4+IDgpICYgMTtcbiAgdmFyIGRpbXMgPSBbXVxuICBpZihuYW1lID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZV9kaW0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgaWYoc2l6ZV9kaW0gPT0gMHhmZmZmKXtcbiAgICAgICAgdmFyIHNpemVfZGltX2hpID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgdmFyIHNpemVfZGltX2xvID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgaWYoc2l6ZV9kaW1faGkgIT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSBkaW1zLnB1c2gocmVhZGVyLnJlYWQzMnUoKSk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSk7XG4gIHZhciBiYSA9IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHZhciBzaXh0eSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICBpZihzaXh0eSkgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjYW5ub3QgcmVhZCBiaWdhcnJheSB3aXRoIDY0LWJpdCBPQ2FtbCBpbnRzXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW50NjQgPSBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xuICAgICAgYmEuc2V0KGksaW50NjQpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVha1xuICB9XG4gIHN6WzBdID0gKDQgKyBudW1fZGltcykgKiA0O1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vRGVwcmVjYXRlZFxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfZnJvbVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2Zyb20oZGF0YTEsIGRhdGEyLCBqc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKXtcbiAgaWYoZGF0YTIgfHwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSA9PSAyKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiKTtcbiAgfVxuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YTEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2hhc2ggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX2hhc2goYmEpe1xuICB2YXIgbnVtX2VsdHMgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICB2YXIgaCA9IDA7XG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMjU2KSBudW1fZWx0cyA9IDI1NjtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgNCA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCA4KSB8IChiYS5kYXRhW2krMl0gPDwgMTYpIHwgKGJhLmRhdGFbaSszXSA8PCAyNCk7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgdyA9IDA7XG4gICAgc3dpdGNoIChudW1fZWx0cyAmIDMpIHtcbiAgICBjYXNlIDM6IHcgID0gYmEuZGF0YVtpKzJdIDw8IDE2OyAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMjogdyB8PSBiYS5kYXRhW2krMV0gPDwgODsgICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAxOiB3IHw9IGJhLmRhdGFbaSswXTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDIgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTIpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgMTYpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPSAwKVxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIG51bV9lbHRzICo9IDJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYmEpe1xuICByZXR1cm4gYmEuZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGtpbmQ7XG4gIGlmICAgICAgKHRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSBraW5kID0gMDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpIGtpbmQgPSAxO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDhBcnJheSkga2luZCA9IDI7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhBcnJheSkga2luZCA9IDM7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDE2QXJyYXkpIGtpbmQgPSA0O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSBraW5kID0gNTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5OiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICByZXR1cm4ga2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZCA9IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSk7XG4gIHZhciB0YSA9XG4gICAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgICAgdGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSA/XG4gICAgICBuZXcgSW50MzJBcnJheSh0YS5idWZmZXIgLHRhLmJ5dGVPZmZzZXQsIHRhLmxlbmd0aCkgOiB0YTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCAwLCBbdGEubGVuZ3RoXSwgdGEpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT0gXCIlZFwiKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiK2kpO1xuICB2YXIgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIGlmIChpIDwgMCkgeyBpZiAoZi5zaWduZWRjb252KSB7IGYuc2lnbiA9IC0xOyBpID0gLWk7IH0gZWxzZSBpID4+Pj0gMDsgfVxuICB2YXIgcyA9IGkudG9TdHJpbmcoZi5iYXNlKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSAnICc7XG4gICAgdmFyIG4gPSBmLnByZWMgLSBzLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIHMgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBzO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKSB7XG4gIHZhciBpID0gMCwgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLCBiYXNlID0gMTAsIHNpZ24gPSAxO1xuICBpZiAobGVuID4gMCkge1xuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpKSB7XG4gICAgY2FzZSA0NTogaSsrOyBzaWduID0gLTE7IGJyZWFrO1xuICAgIGNhc2UgNDM6IGkrKzsgc2lnbiA9IDE7IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PSA0OClcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpKSB7XG4gICAgY2FzZSAxMjA6IGNhc2UgODg6IGJhc2UgPSAxNjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExMTogY2FzZSA3OTogYmFzZSA9ICA4OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgIDk4OiBjYXNlIDY2OiBiYXNlID0gIDI7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTc6IGNhc2UgODU6IGkgKz0gMjsgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gW2ksIHNpZ24sIGJhc2VdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2RpZ2l0XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2RpZ2l0KGMpIHtcbiAgaWYgKGMgPj0gNDggJiYgYyA8PSA1NykgIHJldHVybiBjIC0gNDg7XG4gIGlmIChjID49IDY1ICYmIGMgPD0gOTApICByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyAocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocyk7XG4gIHZhciBpID0gclswXSwgc2lnbiA9IHJbMV0sIGJhc2UgPSByWzJdO1xuICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICB2YXIgdGhyZXNob2xkID0gLTEgPj4+IDA7XG4gIHZhciBjID0gKGkgPCBsZW4pP2NhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk6MDtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGQ7XG4gIGZvciAoaSsrO2k8bGVuO2krKykge1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAvLyBGb3IgYmFzZSBkaWZmZXJlbnQgZnJvbSAxMCwgd2UgZXhwZWN0IGFuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uLFxuICAvLyBoZW5jZSBhbnkgdmFsdWUgb2YgJ3JlcycgKGxlc3MgdGhhbiAndGhyZXNob2xkJykgaXMgYWNjZXB0YWJsZS5cbiAgLy8gQnV0IHdlIGhhdmUgdG8gY29udmVydCB0aGUgcmVzdWx0IGJhY2sgdG8gYSBzaWduZWQgaW50ZWdlci5cbiAgcmVzID0gc2lnbiAqIHJlcztcbiAgaWYgKChiYXNlID09IDEwKSAmJiAoKHJlcyB8IDApICE9IHJlcykpXG4gICAgLyogU2lnbmVkIHJlcHJlc2VudGF0aW9uIGV4cGVjdGVkLCBhbGxvdyAtMl4obmJpdHMtMSkgdG8gMl4obmJpdHMtMSkgLSAxICovXG4gICAgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX211bCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tdWwoYSxiKXtcbiAgcmV0dXJuIE1hdGguaW11bChhLGIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2RpdlxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9kaXYoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiAoeC95KXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9tb2QoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiB4JXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNlxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoKCh4ICYgMHgwMEZGKSA8PCA4KSB8XG4gICAgICAgICAgICgoeCAmIDB4RkYwMCkgPj4gOCkpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYnN3YXBcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYnN3YXAoeCkge1xuICByZXR1cm4gKCgoeCAmIDB4MDAwMDAwRkYpIDw8IDI0KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMDAwRkYwMCkgPDwgOCkgfFxuICAgICAgICAgICgoeCAmIDB4MDBGRjAwMDApID4+PiA4KSB8XG4gICAgICAgICAgKCh4ICYgMHhGRjAwMDAwMCkgPj4+IDI0KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX3VuaXZfcGFyYW0gbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246IDwgNC4xMlxuZnVuY3Rpb24gY2FtbF9oYXNoX3VuaXZfcGFyYW0gKGNvdW50LCBsaW1pdCwgb2JqKSB7XG4gIHZhciBoYXNoX2FjY3UgPSAwO1xuICBmdW5jdGlvbiBoYXNoX2F1eCAob2JqKSB7XG4gICAgbGltaXQgLS07XG4gICAgaWYgKGNvdW50IDwgMCB8fCBsaW1pdCA8IDApIHJldHVybjtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkgJiYgb2JqWzBdID09PSAob2JqWzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKG9ialswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqWzJdKSB8IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgbGltaXQrKzsgaGFzaF9hdXgob2JqKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgb2JqWzBdKSB8IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSBvYmoubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgaGFzaF9hdXggKG9ialtpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKG9iaikpIHtcbiAgICAgIGNvdW50IC0tO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQob2JqKTtcbiAgICAgIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZvciAodmFyIGIgPSBjb250ZW50LCBsID0gYi5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgICAgfSBlbHNlIHsgLyogQVJSQVkgKi9cbiAgICAgICAgZm9yICh2YXIgYSA9IGNvbnRlbnQsIGwgPSBhLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYVtpXSkgfCAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcob2JqKSkge1xuICAgICAgdmFyIGpzYnl0ZXMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG9iaik7XG4gICAgICBmb3IgKHZhciBiID0ganNieXRlcywgbCA9IGpzYnl0ZXMubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBmb3IgKHZhciBiID0gb2JqLCBsID0gb2JqLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSAob2JqfDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBjb3VudCAtLTtcbiAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9iaikgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSArb2JqKSB7XG4gICAgICAvLyBGbG9hdFxuICAgICAgY291bnQtLTtcbiAgICAgIHZhciBwID0gY2FtbF9pbnQ2NF90b19ieXRlcyAoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IChvYmopKTtcbiAgICAgIGZvciAodmFyIGkgPSA3OyBpID49IDA7IGktLSkgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgcFtpXSkgfCAwO1xuICAgIH0gZWxzZSBpZihvYmogJiYgb2JqLmNhbWxfY3VzdG9tKSB7XG4gICAgICBpZihjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoID0gY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaChvYmopIHwgMDtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgaCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBoYXNoX2F1eCAob2JqKTtcbiAgcmV0dXJuIGhhc2hfYWNjdSAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsZCkge1xuICBkID0gY2FtbF9tdWwoZCwgMHhjYzllMmQ1MXwwKTtcbiAgZCA9ICgoZCA8PCAxNSkgfCAoZCA+Pj4gKDMyLTE1KSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9ICgoaCA8PCAxMykgfCAoaCA+Pj4gKDMyLTEzKSkpOyAgIC8vUk9UTDMyKGgsIDEzKTtcbiAgcmV0dXJuICgoKGggKyAoaCA8PCAyKSl8MCkgKyAoMHhlNjU0NmI2NHwwKSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmluYWwoaCkge1xuICBoIF49IGggPj4+IDE2O1xuICBoID0gY2FtbF9tdWwgKGgsIDB4ODVlYmNhNmJ8MCk7XG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPSBjYW1sX211bCAoaCwgMHhjMmIyYWUzNXwwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9oYXNoX21peF9pbnQ2NFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9mbG9hdCAoaCwgdjApIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50NjQoaCwgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh2MCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnQ2NFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludDY0IChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gcy5jaGFyQ29kZUF0KGkpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCA4KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMikgPDwgMTYpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSszKSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHMuY2hhckNvZGVBdChpKzIpIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gcy5jaGFyQ29kZUF0KGkrMSkgPDwgODtcbiAgY2FzZSAxOlxuICAgIHcgfD0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHNbaV1cbiAgICAgIHwgKHNbaSsxXSA8PCA4KVxuICAgICAgfCAoc1tpKzJdIDw8IDE2KVxuICAgICAgfCAoc1tpKzNdIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gc1tpKzJdIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gc1tpKzFdIDw8IDg7XG4gIGNhc2UgMTogdyB8PSBzW2ldO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlcyhoLCB2KSB7XG4gIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KHYpO1xuICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpXG4gIGVsc2UgLyogQVJSQVkgKi9cbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgY29udGVudCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHYpKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoIChjb3VudCwgbGltaXQsIHNlZWQsIG9iaikge1xuICB2YXIgcXVldWUsIHJkLCB3ciwgc3osIG51bSwgaCwgdiwgaSwgbGVuO1xuICBzeiA9IGxpbWl0O1xuICBpZiAoc3ogPCAwIHx8IHN6ID4gMjU2KSBzeiA9IDI1NjtcbiAgbnVtID0gY291bnQ7XG4gIGggPSBzZWVkO1xuICBxdWV1ZSA9IFtvYmpdOyByZCA9IDA7IHdyID0gMTtcbiAgd2hpbGUgKHJkIDwgd3IgJiYgbnVtID4gMCkge1xuICAgIHYgPSBxdWV1ZVtyZCsrXTtcbiAgICBpZiAodiAmJiB2LmNhbWxfY3VzdG9tKXtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50IChoLCBoaCk7XG4gICAgICAgIG51bSAtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKHZbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHZbMl0pO1xuICAgICAgICBudW0tLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKSB7XG4gICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdGFnKTtcbiAgICAgICAgZm9yIChpID0gMSwgbGVuID0gdi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgcXVldWVbd3IrK10gPSB2W2ldO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodnwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHYrdisxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLHYpO1xuICAgICAgbnVtLS07XG4gICAgfVxuICB9XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2hhc2hcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmluYWwsIGNhbWxfaGFzaF9taXhfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19oYXNoKGgsIHYpe1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdik7XG4gIHZhciBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNGRkZGRkZGO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9jb25zdGFudHNcbnZhciBjYW1sX21hcnNoYWxfY29uc3RhbnRzID0ge1xuICBQUkVGSVhfU01BTExfQkxPQ0s6ICAgICAgICAgMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogICAgICAgICAgIDB4NDAsXG4gIFBSRUZJWF9TTUFMTF9TVFJJTkc6ICAgICAgICAweDIwLFxuICBDT0RFX0lOVDg6ICAgICAgICAgICAgICAgICAgMHgwMCxcbiAgQ09ERV9JTlQxNjogICAgICAgICAgICAgICAgIDB4MDEsXG4gIENPREVfSU5UMzI6ICAgICAgICAgICAgICAgICAweDAyLFxuICBDT0RFX0lOVDY0OiAgICAgICAgICAgICAgICAgMHgwMyxcbiAgQ09ERV9TSEFSRUQ4OiAgICAgICAgICAgICAgIDB4MDQsXG4gIENPREVfU0hBUkVEMTY6ICAgICAgICAgICAgICAweDA1LFxuICBDT0RFX1NIQVJFRDMyOiAgICAgICAgICAgICAgMHgwNixcbiAgQ09ERV9CTE9DSzMyOiAgICAgICAgICAgICAgIDB4MDgsXG4gIENPREVfQkxPQ0s2NDogICAgICAgICAgICAgICAweDEzLFxuICBDT0RFX1NUUklORzg6ICAgICAgICAgICAgICAgMHgwOSxcbiAgQ09ERV9TVFJJTkczMjogICAgICAgICAgICAgIDB4MEEsXG4gIENPREVfRE9VQkxFX0JJRzogICAgICAgICAgICAweDBCLFxuICBDT0RFX0RPVUJMRV9MSVRUTEU6ICAgICAgICAgMHgwQyxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzogICAgIDB4MEQsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6ICAweDBFLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogICAgMHgwRixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6ICAgICAgICAgICAweDEwLFxuICBDT0RFX0lORklYUE9JTlRFUjogICAgICAgICAgMHgxMSxcbiAgQ09ERV9DVVNUT006ICAgICAgICAgICAgICAgIDB4MTIsXG4gIENPREVfQ1VTVE9NX0xFTjogICAgICAgICAgICAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogICAgICAgICAgMHgxOVxufVxuXG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBVSW50OEFycmF5UmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IHM7IHRoaXMuaSA9IGk7IH1cblVJbnQ4QXJyYXlSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuc1t0aGlzLmkrK10gPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCA4KSB8IHNbaSArIDFdXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoc1tpXSA8PCAyNCkgfCAoc1tpKzFdIDw8IDE2KSB8XG4gICAgICAgICAgICAoc1tpKzJdIDw8IDgpIHwgc1tpKzNdKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzW2ldIDw8IDI0KSB8IChzW2krMV0gPDwgMTYpIHxcbiAgICAgIChzW2krMl0gPDwgOCkgfCBzW2krM107XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbFN0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gTWxTdHJpbmdSZWFkZXIgKHMsIGkpIHsgdGhpcy5zID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTsgdGhpcy5pID0gaTsgfVxuTWxTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgocy5jaGFyQ29kZUF0KGkpIDw8IDI0KSB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKHMuY2hhckNvZGVBdChpKzIpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkrMykpID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zdWJzdHJpbmcoaSwgaSArIGxlbikpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIHZhciBzID0gdGhpcy5zO1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogQmlnU3RyaW5nUmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheSwgY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gQmlnU3RyaW5nUmVhZGVyIChicywgaSkgeyB0aGlzLnMgPSBiczsgdGhpcy5pID0gaTsgfVxuQmlnU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgOCkgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDI0ID4+IDE2KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpICAgICAgICAgKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIGFyciA9IG5ldyBBcnJheShsZW4pXG4gICAgZm9yKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKXtcbiAgICAgIGFycltqXSA9IGNhbWxfYmFfZ2V0XzEodGhpcy5zLCBpK2opO1xuICAgIH1cbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIG9mZnNldCA9IHRoaXMub2Zmc2V0KGkpO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIHRoaXMucy5kYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgfVxufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzIChhKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKGNhbWxfaW50NjRfb2ZfYnl0ZXMgKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlclxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChzLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IE1sU3RyaW5nUmVhZGVyLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyLCBjYW1sX3N0cmluZ19vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKHMsb2ZzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgTWxTdHJpbmdSZWFkZXIgKGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICBzaXplWzBdID0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMgKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyAodik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB3cml0ZXIud3JpdGUgKDgsIGJbaV0pO1xuICBzaXplc1swXSA9IDg7IHNpemVzWzFdID0gODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl91bm1hcnNoYWxcbmZ1bmN0aW9uIGNhbWxfaW50MzJfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHNpemVbMF0gPSA0O1xuICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHN3aXRjaCAocmVhZGVyLnJlYWQ4dSAoKSkge1xuICBjYXNlIDE6XG4gICAgc2l6ZVswXSA9IDQ7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICBjYXNlIDI6XG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBuYXRpdmUgaW50ZWdlciB2YWx1ZSB0b28gbGFyZ2VcIik7XG4gIGRlZmF1bHQ6IGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPVxuICAgIHtcIl9qXCI6IHtcbiAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQ2NF91bm1hcnNoYWwsXG4gICAgICBzZXJpYWxpemUgIDogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgICAgZml4ZWRfbGVuZ3RoIDogOCxcbiAgICAgIGNvbXBhcmUgOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgICBoYXNoIDogY2FtbF9pbnQ2NF9oYXNoXG4gICAgfSxcbiAgICAgXCJfaVwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9uXCI6IHtcbiAgICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9iaWdhcnJheVwiOntcbiAgICAgICBkZXNlcmlhbGl6ZSA6IChmdW5jdGlvbiAocmVhZGVyLCBzeikge3JldHVybiBjYW1sX2JhX2Rlc2VyaWFsaXplIChyZWFkZXIsc3osXCJfYmlnYXJyYXlcIil9KSxcbiAgICAgICBzZXJpYWxpemUgOiBjYW1sX2JhX3NlcmlhbGl6ZSxcbiAgICAgICBjb21wYXJlIDogY2FtbF9iYV9jb21wYXJlLFxuICAgICAgIGhhc2g6IGNhbWxfYmFfaGFzaCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyMDJcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycjAyXCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH1cbiAgICB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9mbG9hdF9vZl9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N0Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT0gMCkge1xuICAgICAgYyA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBuNyA9IG4gPDwgNztcbiAgICAgIGlmIChuICE9IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Rik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG4gIHZhciBtYWdpYyA9IHJlYWRlci5yZWFkMzJ1ICgpXG4gIHN3aXRjaChtYWdpYyl7XG4gIGNhc2UgMHg4NDk1QTZCRTogLyogSW50ZXh0X21hZ2ljX251bWJlcl9zbWFsbCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gMjA7XG4gICAgdmFyIGNvbXByZXNzZWQgPSAwO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciB1bmNvbXByZXNzZWRfZGF0YV9sZW4gPSBkYXRhX2xlbjtcbiAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfMzIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfNjQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gcmVhZGVyLnJlYWQ4dSgpICYgMHgzRjtcbiAgICB2YXIgY29tcHJlc3NlZCA9IDE7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIF9zaXplXzMyID0gcmVhZHZscSAob3ZlcmZsb3cpO1xuICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEgKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIpO1xuICAgIH1cbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkY6IC8qIEludGV4dF9tYWdpY19udW1iZXJfYmlnICovXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIpO1xuICAgIGJyZWFrXG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWs7XG4gIH1cbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gKG51bV9vYmplY3RzID4gMCk/W106bnVsbDtcbiAgdmFyIG9ial9jb3VudGVyID0gMDtcbiAgZnVuY3Rpb24gaW50ZXJuX3JlYyAocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgIGlmIChjb2RlID49IDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovKSB7XG4gICAgICBpZiAoY29kZSA+PSAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovKSB7XG4gICAgICAgIHZhciB0YWcgPSBjb2RlICYgMHhGO1xuICAgICAgICB2YXIgc2l6ZSA9IChjb2RlID4+IDQpICYgMHg3O1xuICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZVxuICAgICAgICByZXR1cm4gKGNvZGUgJiAweDNGKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvZGUgPj0gMHgyMC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFGO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoKGNvZGUpIHtcbiAgICAgICAgY2FzZSAweDAwOiAvL2NzdC5DT0RFX0lOVDg6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkOHMgKCk7XG4gICAgICAgIGNhc2UgMHgwMTogLy9jc3QuQ09ERV9JTlQxNjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQxNnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMjogLy9jc3QuQ09ERV9JTlQzMjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMzogLy9jc3QuQ09ERV9JTlQ2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGludGVnZXIgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDQ6IC8vY3N0LkNPREVfU0hBUkVEODpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNTogLy9jc3QuQ09ERV9TSEFSRUQxNjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQxNnUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDY6IC8vY3N0LkNPREVfU0hBUkVEMzI6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA4OiAvL2NzdC5DT0RFX0JMT0NLMzI6XG4gICAgICAgICAgdmFyIGhlYWRlciA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIHZhciB0YWcgPSBoZWFkZXIgJiAweEZGO1xuICAgICAgICAgIHZhciBzaXplID0gaGVhZGVyID4+IDEwO1xuICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMzogLy9jc3QuQ09ERV9CTE9DSzY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGRhdGEgYmxvY2sgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbNyAtIGldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBCOiAvL2NzdC5DT0RFX0RPVUJMRV9CSUc6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFtpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRTogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBEOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MDc6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBGOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEwOiAvL2NzdC5DT0RFX0NPREVQT0lOVEVSOlxuICAgICAgICBjYXNlIDB4MTE6IC8vY3N0LkNPREVfSU5GSVhQT0lOVEVSOlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGNvZGUgcG9pbnRlclwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgY2FzZSAweDE4OiAvL2NzdC5DT0RFX0NVU1RPTV9MRU46XG4gICAgICAgIGNhc2UgMHgxOTogLy9jc3QuQ09ERV9DVVNUT01fRklYRUQ6XG4gICAgICAgICAgdmFyIGMsIHMgPSBcIlwiO1xuICAgICAgICAgIHdoaWxlICgoYyA9IHJlYWRlci5yZWFkOHUgKCkpICE9IDApIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoYyk7XG4gICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRfc2l6ZTtcbiAgICAgICAgICBpZighb3BzKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB1bmtub3duIGN1c3RvbSBibG9jayBpZGVudGlmaWVyXCIpO1xuICAgICAgICAgIHN3aXRjaChjb2RlKXtcbiAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxOTogLy8gY3N0LkNPREVfQ1VTVE9NX0ZJWEVEXG4gICAgICAgICAgICBpZighb3BzLmZpeGVkX2xlbmd0aClcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IG9wcy5maXhlZF9sZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICAgIC8vIFNraXAgc2l6ZTY0XG4gICAgICAgICAgICByZWFkZXIucmVhZDMycygpOyByZWFkZXIucmVhZDMycygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvbGRfcG9zID0gcmVhZGVyLmk7XG4gICAgICAgICAgdmFyIHNpemUgPSBbMF07XG4gICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHNpemVbMF0pXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW5jb3JyZWN0IGxlbmd0aCBvZiBzZXJpYWxpemVkIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbWVzc2FnZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZihjb21wcmVzc2VkKSB7XG4gICAgaWYoY2FtbF9kZWNvbXByZXNzX2lucHV0KSB7XG4gICAgICB2YXIgZGF0YSA9IHJlYWRlci5yZWFkdWludDhhcnJheShkYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gbmV3IFVpbnQ4QXJyYXkodW5jb21wcmVzc2VkX2RhdGFfbGVuKTtcbiAgICAgIHZhciByZXMgPSBjYW1sX2RlY29tcHJlc3NfaW5wdXQoZGF0YSwgcmVzKTtcbiAgICAgIHZhciByZWFkZXIgPSBuZXcgVUludDhBcnJheVJlYWRlcihyZXMsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGNvbXByZXNzZWQgb2JqZWN0LCBjYW5ub3QgZGVjb21wcmVzc1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHJlcyA9IGludGVybl9yZWMgKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjIChyZWFkZXIpO1xuICB9XG4gIGlmICh0eXBlb2Ygb2ZzIT1cIm51bWJlclwiKSBvZnNbMF0gPSByZWFkZXIuaTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG4vL1ZlcnNpb246IDwgNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAyMFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNlxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAocywgb2ZzKSB7XG4gIHZhciByID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKSwgb2ZzKTtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gci5yZWFkOHUoKTtcbiAgICB2YXIgbiA9IGMgJiAweDdGO1xuICAgIHdoaWxlICgoYyAmIDB4ODApICE9IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdGKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICBzd2l0Y2goci5yZWFkMzJ1KCkpe1xuICBjYXNlIDB4ODQ5NUE2QkU6IC8qIEludGV4dF9tYWdpY19udW1iZXJfc21hbGwgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IDIwO1xuICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgIGJyZWFrO1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M0Y7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIHRoaXMgcGxhdGZvcm1cIik7XG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRjogLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi9cbiAgZGVmYXVsdDpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWtcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG52YXIgTWxPYmplY3RUYWJsZTtcbmlmICh0eXBlb2YgZ2xvYmFsVGhpcy5NYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvKiBwb2x5ZmlsbCAodXNpbmcgbGluZWFyIHNlYXJjaCkgKi9cbiAgICBmdW5jdGlvbiBOYWl2ZUxvb2t1cChvYmpzKSB7IHRoaXMub2JqcyA9IG9ianM7IH1cbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMub2Jqc1tpXSA9PT0gdikgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfTtcbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGhlcmUuIFtNbE9iamVjdFRhYmxlLnN0b3JlXSB3aWxsIHB1c2ggdG8gW3RoaXMub2Jqc10gZGlyZWN0bHkuXG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IE5haXZlTG9va3VwKHRoaXMub2Jqcyk7XG4gICAgfTtcbiAgfSgpO1xufVxuZWxzZSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBnbG9iYWxUaGlzLk1hcCgpO1xuICB9O1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5zdG9yZSA9IGZ1bmN0aW9uKHYpIHtcbiAgdGhpcy5sb29rdXAuc2V0KHYsIHRoaXMub2Jqcy5sZW5ndGgpO1xuICB0aGlzLm9ianMucHVzaCh2KTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUucmVjYWxsID0gZnVuY3Rpb24odikge1xuICB2YXIgaSA9IHRoaXMubG9va3VwLmdldCh2KTtcbiAgcmV0dXJuIChpID09PSB1bmRlZmluZWQpXG4gICAgPyB1bmRlZmluZWQgOiB0aGlzLm9ianMubGVuZ3RoIC0gaTsgICAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogTWxPYmplY3RUYWJsZSwgY2FtbF9saXN0X3RvX2pzX2FycmF5LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbnZhciBjYW1sX291dHB1dF92YWwgPSBmdW5jdGlvbiAoKXtcbiAgZnVuY3Rpb24gV3JpdGVyICgpIHsgdGhpcy5jaHVuayA9IFtdOyB9XG4gIFdyaXRlci5wcm90b3R5cGUgPSB7XG4gICAgY2h1bmtfaWR4OjIwLCBibG9ja19sZW46MCwgb2JqX2NvdW50ZXI6MCwgc2l6ZV8zMjowLCBzaXplXzY0OjAsXG4gICAgd3JpdGU6ZnVuY3Rpb24gKHNpemUsIHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9hdDpmdW5jdGlvbiAocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3BvcysrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9jb2RlOmZ1bmN0aW9uIChzaXplLCBjb2RlLCB2YWx1ZSkge1xuICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9IGNvZGU7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9zaGFyZWQ6ZnVuY3Rpb24gKG9mZnNldCkge1xuICAgICAgaWYgKG9mZnNldCA8ICgxIDw8IDgpKSB0aGlzLndyaXRlX2NvZGUoOCwgMHgwNCAvKmNzdC5DT0RFX1NIQVJFRDgqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgaWYgKG9mZnNldCA8ICgxIDw8IDE2KSkgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9LFxuICAgIHBvczpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNodW5rX2lkeCB9LFxuICAgIGZpbmFsaXplOmZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuYmxvY2tfbGVuID0gdGhpcy5jaHVua19pZHggLSAyMDtcbiAgICAgIHRoaXMuY2h1bmtfaWR4ID0gMDtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCAweDg0OTVBNkJFKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLmJsb2NrX2xlbik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5vYmpfY291bnRlcik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfNjQpO1xuICAgICAgcmV0dXJuIHRoaXMuY2h1bms7XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAodiwgZmxhZ3MpIHtcbiAgICBmbGFncyA9IGNhbWxfbGlzdF90b19qc19hcnJheShmbGFncyk7XG5cbiAgICB2YXIgbm9fc2hhcmluZyA9IChmbGFncy5pbmRleE9mKDAgLypNYXJzaGFsLk5vX3NoYXJpbmcqLykgIT09IC0xKSxcbiAgICAgICAgY2xvc3VyZXMgPSAgKGZsYWdzLmluZGV4T2YoMSAvKk1hcnNoYWwuQ2xvc3VyZXMqLykgIT09IC0xKTtcbiAgICAvKiBNYXJzaGFsLkNvbXBhdF8zMiBpcyByZWR1bmRhbnQgc2luY2UgaW50ZWdlcnMgYXJlIDMyLWJpdCBhbnl3YXkgKi9cblxuICAgIGlmIChjbG9zdXJlcylcbiAgICAgIGNvbnNvbGUud2FybihcImluIGNhbWxfb3V0cHV0X3ZhbDogZmxhZyBNYXJzaGFsLkNsb3N1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXG4gICAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIgKCk7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGludGVybl9vYmpfdGFibGUgPSBub19zaGFyaW5nID8gbnVsbCA6IG5ldyBNbE9iamVjdFRhYmxlKCk7XG5cbiAgICBmdW5jdGlvbiBtZW1vKHYpIHtcbiAgICAgIGlmIChub19zaGFyaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YXIgZXhpc3Rpbmdfb2Zmc2V0ID0gaW50ZXJuX29ial90YWJsZS5yZWNhbGwodik7XG4gICAgICBpZiAoZXhpc3Rpbmdfb2Zmc2V0KSB7IHdyaXRlci53cml0ZV9zaGFyZWQoZXhpc3Rpbmdfb2Zmc2V0KTsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGVsc2UgeyBpbnRlcm5fb2JqX3RhYmxlLnN0b3JlKHYpOyByZXR1cm4gZmFsc2U7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlcm5fcmVjICh2KSB7XG4gICAgICBpZiAodi5jYW1sX2N1c3RvbSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbmFtZSA9IHYuY2FtbF9jdXN0b207XG4gICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbbmFtZV07XG4gICAgICAgIHZhciBzel8zMl82NCA9IFswLDBdO1xuICAgICAgICBpZighb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZihvcHMuZml4ZWRfbGVuZ3RoID09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE4IC8qY3N0LkNPREVfQ1VTVE9NX0xFTiovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBoZWFkZXJfcG9zID0gd3JpdGVyLnBvcyAoKTtcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zLCAzMiwgc3pfMzJfNjRbMF0pO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgNCwgMzIsIDApOyAvLyB6ZXJvXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA4LCAzMiwgc3pfMzJfNjRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBvbGRfcG9zID0gd3JpdGVyLnBvcygpO1xuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgaWYgKG9wcy5maXhlZF9sZW5ndGggIT0gd3JpdGVyLnBvcygpIC0gb2xkX3BvcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGluY29ycmVjdCBmaXhlZCBzaXplcyBzcGVjaWZpZWQgYnkgXCIgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAyICsgKChzel8zMl82NFswXSArIDMpID4+IDIpO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAyICsgKChzel8zMl82NFsxXSArIDcpID4+IDMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICAgIGlmICh2WzBdID09IDI1MSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChBYnN0cmFjdClcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGNvbnRpbnVhdGlvbiB2YWx1ZVwiKTtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSAmJiBtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIGlmICh2WzBdIDwgMTYgJiYgdi5sZW5ndGggLSAxIDwgOClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8gKyB2WzBdICsgKCh2Lmxlbmd0aCAtIDEpPDw0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwOCAvKmNzdC5DT0RFX0JMT0NLMzIqLywgKCh2Lmxlbmd0aC0xKSA8PCAxMCkgfCB2WzBdKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gdi5sZW5ndGg7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IHYubGVuZ3RoO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxKSBzdGFjay5wdXNoICh2LCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgICBpZighKGNhbWxfaXNfbWxfYnl0ZXMoY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKSkpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogW0J5dGVzLnRdIGNhbm5vdCBzYWZlbHkgYmUgbWFyc2hhbGVkIHdpdGggWy0tZW5hYmxlIHVzZS1qcy1zdHJpbmddXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT0gKHZ8MCkpe1xuICAgICAgICAgIHZhciB0eXBlX29mX3YgPSB0eXBlb2YgdjtcbiAgICAgICAgICBpZih0eXBlX29mX3YgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChcIit0eXBlX29mX3YrXCIpXCIpO1xuICAgICAgICAgIC8vIElmIGEgZmxvYXQgaGFwcGVucyB0byBiZSBhbiBpbnRlZ2VyIGl0IGlzIHNlcmlhbGl6ZWQgYXMgYW4gaW50ZWdlclxuICAgICAgICAgIC8vIChKc19vZl9vY2FtbCBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB0eXBlIG9mIGFuIGludGVnZXIgbnVtYmVyIGlzXG4gICAgICAgICAgLy8gZmxvYXQgb3IgaW50ZWdlci4pIFRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNyYXNoZXMgd2hlblxuICAgICAgICAgIC8vIHVubWFyc2hhbGxpbmcgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bnRpbWUuXG4gICAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgICB2YXIgdCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHYpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MEMgLypjc3QuQ09ERV9ET1VCTEVfTElUVExFKi8pO1xuICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGk8ODsgaSsrKXt3cml0ZXIud3JpdGUoOCx0WzcgLSBpXSl9XG4gICAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gM1xuICAgICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDJcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID49IDAgJiYgdiA8IDB4NDApIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDBYNDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAoMSA8PCA3KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDAgLypjc3QuQ09ERV9JTlQ4Ki8sIHYpO1xuICAgICAgICAgIGVsc2UgaWYgKHYgPj0gLSgxIDw8IDE1KSAmJiB2IDwgKDEgPDwgMTUpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMTYsIDB4MDEgLypjc3QuQ09ERV9JTlQxNiovLCB2KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwMiAvKmNzdC5DT0RFX0lOVDMyKi8sIHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGV4dGVybl9yZWMgKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIHZhciB2ID0gc3RhY2sucG9wICgpO1xuICAgICAgaWYgKGkgKyAxIDwgdi5sZW5ndGgpIHN0YWNrLnB1c2ggKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWMgKHZbaV0pO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgd3JpdGVyLm9ial9jb3VudGVyID0gaW50ZXJuX29ial90YWJsZS5vYmpzLmxlbmd0aDtcbiAgICB3cml0ZXIuZmluYWxpemUoKTtcbiAgICByZXR1cm4gd3JpdGVyLmNodW5rO1xuICB9XG59ICgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfYmxpdF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyIChzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKTtcbiAgaWYgKHQubGVuZ3RoID4gbGVuKSBjYW1sX2ZhaWx3aXRoIChcIk1hcnNoYWwudG9fYnVmZmVyOiBidWZmZXIgb3ZlcmZsb3dcIik7XG4gIGNhbWxfYmxpdF9ieXRlcyh0LCAwLCBzLCBvZnMsIHQubGVuZ3RoKTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfdGFnKGEpe1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKGEpKSByZXR1cm4gMjUyOyAvLyBzdHJpbmdfdGFnXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGEpKSByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIEFycmF5ICYmIGFbMF0gPT09IChhWzBdPj4+MCkgJiYgYVswXSA8PSAyNTUpIHtcbiAgICAvLyBMb29rIGxpa2UgYW4gb2NhbWwgYmxvY2tcbiAgICB2YXIgdGFnID0gYVswXSB8IDA7XG4gICAgLy8gaWdub3JlIGRvdWJsZV9hcnJheV90YWcgYmVjYXVzZSB3ZSBjYW5ub3QgYWNjdXJhdGVseSBzZXRcbiAgICAvLyB0aGlzIHRhZyB3aGVuIHdlIGNyZWF0ZSBhbiBhcnJheSBvZiBmbG9hdC5cbiAgICByZXR1cm4gKHRhZyA9PSAyNTQpPzA6dGFnXG4gIH1cbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIFN0cmluZykgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgTnVtYmVyKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYSAmJiBhLmNhbWxfY3VzdG9tKSByZXR1cm4gMTI1NTsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKGEgJiYgYS5jb21wYXJlKSByZXR1cm4gMTI1NjsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIDEyNDc7IC8vIGxpa2UgY2xvc3VyZV90YWcgKDI0NylcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpe1xuICByZXR1cm4gY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXS5jb21wYXJlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKG51bSwgY3VzdG9tLCBzd2FwLCB0b3RhbCkge1xuICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShjdXN0b20pO1xuICBpZihjb21wKSB7XG4gICAgdmFyIHggPSAoc3dhcCA+IDApP2NvbXAoY3VzdG9tLG51bSx0b3RhbCk6Y29tcChudW0sY3VzdG9tLHRvdGFsKTtcbiAgICBpZih0b3RhbCAmJiB4ICE9IHgpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZigreCAhPSAreCkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZigoeCB8IDApICE9IDApIHJldHVybiAoeCB8IDApOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbCAoY29uc3QsIGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW50X2NvbXBhcmUsIGNhbWxfc3RyaW5nX2NvbXBhcmUsIGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20sIGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvcig7Oykge1xuICAgIGlmICghKHRvdGFsICYmIGEgPT09IGIpKSB7XG4gICAgICB2YXIgdGFnX2EgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19hID09IDI1MCkgeyBhID0gYVsxXTsgY29udGludWUgfVxuXG4gICAgICB2YXIgdGFnX2IgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhiKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19iID09IDI1MCkgeyBiID0gYlsxXTsgY29udGludWUgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmKHRhZ19hICE9PSB0YWdfYikge1xuICAgICAgICBpZih0YWdfYSA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2IgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdfYiA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2EgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0YWdfYSA8IHRhZ19iKT8tMToxO1xuICAgICAgfVxuICAgICAgc3dpdGNoKHRhZ19hKXtcbiAgICAgICAgLy8gMjQ2OiBMYXp5X3RhZyBoYW5kbGVkIGJlbGxvd1xuICAgICAgY2FzZSAyNDc6IC8vIENsb3N1cmVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjQ4OiAvLyBPYmplY3RcbiAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pO1xuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0OTogLy8gSW5maXhcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTA6IC8vIEZvcndhcmQgdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTE6IC8vQWJzdHJhY3RcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUyOiAvLyBPQ2FtbCBieXRlc1xuICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgIHZhciB4ID0gY2FtbF9ieXRlc19jb21wYXJlKGEsIGIpO1xuICAgICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUzOiAvLyBEb3VibGVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5X3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX2FycmF5X3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1NTogLy8gQ3VzdG9tX3RhZ1xuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI0NzogLy8gRnVuY3Rpb25cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTU6IC8vIEN1c3RvbVxuICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgaWYoY29tcCAhPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYikpe1xuICAgICAgICAgIHJldHVybiAoYS5jYW1sX2N1c3RvbTxiLmNhbWxfY3VzdG9tKT8tMToxO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFjb21wKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICB2YXIgeCA9IGNvbXAoYSxiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgdmFyIHggPSBhLmNvbXBhcmUoYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCkgeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMDogLy8gTnVtYmVyXG4gICAgICAgIGEgPSArYTtcbiAgICAgICAgYiA9ICtiO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAxOiAvLyBUaGUgcmVzdFxuICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAvLyAxLiBKYXZhU2NyaXB0IHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAyLiBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvL1xuICAgICAgICAvLyAoMykgd2lsbCByYWlzZSBhIFtUeXBlRXJyb3JdXG4gICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgLy8gKDIpIGFuZCAoMyksIGFmdGVyIGV2ZW50dWFsIGNvZXJjaW9uXG4gICAgICAgIC8vIC0gaWYgYSBhbmQgYiBhcmUgc3RyaW5ncywgYXBwbHkgbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uXG4gICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAvLyAgIGFuZCBhcHBseSBzdGFuZGFyZCBjb21wYXJpc29uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEV4Y2VwdGlvbjogYCE9YCB3aWxsIG5vdCBjb2VyY2UvY29udmVydCBpZiBib3RoIGEgYW5kIGIgYXJlIG9iamVjdHNcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhiKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyMDogLy8gamF2YXNjcmlwdCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICB2YXIgYiA9IGIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDY6IC8vIExhenlfdGFnXG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5XG4gICAgICBkZWZhdWx0OiAvLyBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICBpZihjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIChhLmxlbmd0aCA8IGIubGVuZ3RoKT8tMToxO1xuICAgICAgICBpZiAoYS5sZW5ndGggPiAxKSBzdGFjay5wdXNoKGEsIGIsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKSByZXR1cm4gMDtcbiAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgaWYgKGkgKyAxIDwgYS5sZW5ndGgpIHN0YWNrLnB1c2goYSwgYiwgaSArIDEpO1xuICAgIGEgPSBhW2ldO1xuICAgIGIgPSBiW2ldO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZSAoYSwgYikgeyByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdHJ1ZSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZSAoYSwgYikge1xuICBpZiAoYSA8IGIpIHJldHVybiAoLTEpOyBpZiAoYSA9PSBiKSByZXR1cm4gMDsgcmV0dXJuIDE7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID09IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbm90ZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpICE9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPj0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcnRoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVydGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPiAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDw9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc3RoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDwgMCk7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRm9ybWF0XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZm9ybWF0XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZm9ybWF0IChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID1cbiAgICAgIHsganVzdGlmeTonKycsIHNpZ25zdHlsZTonLScsIGZpbGxlcjonICcsIGFsdGVybmF0ZTpmYWxzZSxcbiAgICAgICAgYmFzZTowLCBzaWduZWRjb252OmZhbHNlLCB3aWR0aDowLCB1cHBlcmNhc2U6ZmFsc2UsXG4gICAgICAgIHNpZ246MSwgcHJlYzotMSwgY29udjonZicgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBjID0gZm10LmNoYXJBdChpKTtcbiAgICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlICctJzpcbiAgICAgIGYuanVzdGlmeSA9ICctJzsgYnJlYWs7XG4gICAgY2FzZSAnKyc6IGNhc2UgJyAnOlxuICAgICAgZi5zaWduc3R5bGUgPSBjOyBicmVhaztcbiAgICBjYXNlICcwJzpcbiAgICAgIGYuZmlsbGVyID0gJzAnOyBicmVhaztcbiAgICBjYXNlICcjJzpcbiAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOlxuICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgZi53aWR0aCA9IDA7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYud2lkdGggPSBmLndpZHRoICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJy4nOlxuICAgICAgZi5wcmVjID0gMDtcbiAgICAgIGkrKztcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi5wcmVjID0gZi5wcmVjICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICBjYXNlICdkJzogY2FzZSAnaSc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgJ3UnOlxuICAgICAgZi5iYXNlID0gMTA7IGJyZWFrO1xuICAgIGNhc2UgJ3gnOlxuICAgICAgZi5iYXNlID0gMTY7IGJyZWFrO1xuICAgIGNhc2UgJ1gnOlxuICAgICAgZi5iYXNlID0gMTY7IGYudXBwZXJjYXNlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnbyc6XG4gICAgICBmLmJhc2UgPSA4OyBicmVhaztcbiAgICBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi5jb252ID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnRSc6IGNhc2UgJ0YnOiBjYXNlICdHJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgIGYuY29udiA9IGMudG9Mb3dlckNhc2UgKCk7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCByYXdidWZmZXIpIHtcbiAgaWYgKGYudXBwZXJjYXNlKSByYXdidWZmZXIgPSByYXdidWZmZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGxlbiA9IHJhd2J1ZmZlci5sZW5ndGg7XG4gIC8qIEFkanVzdCBsZW4gdG8gcmVmbGVjdCBhZGRpdGlvbmFsIGNoYXJzIChzaWduLCBldGMpICovXG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgKGYuc2lnbiA8IDAgfHwgZi5zaWduc3R5bGUgIT0gJy0nKSkgbGVuKys7XG4gIGlmIChmLmFsdGVybmF0ZSkge1xuICAgIGlmIChmLmJhc2UgPT0gOCkgbGVuICs9IDE7XG4gICAgaWYgKGYuYmFzZSA9PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcgJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICBpZiAoZi5zaWduZWRjb252KSB7XG4gICAgaWYgKGYuc2lnbiA8IDApIGJ1ZmZlciArPSAnLSc7XG4gICAgZWxzZSBpZiAoZi5zaWduc3R5bGUgIT0gJy0nKSBidWZmZXIgKz0gZi5zaWduc3R5bGU7XG4gIH1cbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSA4KSBidWZmZXIgKz0gJzAnO1xuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDE2KSBidWZmZXIgKz0gZi51cHBlcmNhc2U/XCIwWFwiOlwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnKycgJiYgZi5maWxsZXIgPT0gJzAnKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnMCc7XG4gIGJ1ZmZlciArPSByYXdidWZmZXI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJy0nKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnICc7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGJ1ZmZlcik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9PSAndW5kZWZpbmVkJylcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiBmYWxzZVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9SZXF1aXJlczogTWxOb2RlRmQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX3dpdGhfYXJnc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKHJvb3QpIHtcbiAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZXhpc3RzU3luYyh0aGlzLm5tKG5hbWUpKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0ZpbGUoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLHttb2RlOm1vZGV9KTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucm1kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5yZWFkZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNEaXJlY3RvcnkoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGIgPSB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICAgIHRoaXMuZnMudW5saW5rU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gYjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZiwgcmFpc2VfdW5peCkge1xuICB2YXIgY29uc3RzID0gcmVxdWlyZSgnY29uc3RhbnRzJyk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGtleSBpbiBmKXtcbiAgICBzd2l0Y2goa2V5KXtcbiAgICBjYXNlIFwicmRvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1JET05MWTsgYnJlYWs7XG4gICAgY2FzZSBcIndyb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19XUk9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJhcHBlbmRcIiAgOlxuICAgICAgcmVzIHw9IGNvbnN0cy5PX1dST05MWSB8IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjcmVhdGVcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0NSRUFUOyAgICBicmVhaztcbiAgICBjYXNlIFwidHJ1bmNhdGVcIiA6IHJlcyB8PSBjb25zdHMuT19UUlVOQzsgICAgYnJlYWs7XG4gICAgY2FzZSBcImV4Y2xcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fRVhDTDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJiaW5hcnlcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTsgICBicmVhaztcbiAgICBjYXNlIFwidGV4dFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19URVhUOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm5vbmJsb2NrXCIgOiByZXMgfD0gY29uc3RzLk9fTk9OQkxPQ0s7IGJyZWFrO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHZhciBmZCA9IHRoaXMuZnMub3BlblN5bmModGhpcy5ubShuYW1lKSwgcmVzKTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJEZXZpY2UgPSB0aGlzLmZzLmxzdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0NoYXJhY3RlckRldmljZSgpO1xuICAgIGYuaXNDaGFyYWN0ZXJEZXZpY2UgPSBpc0NoYXJhY3RlckRldmljZTtcbiAgICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlbmFtZSA9IGZ1bmN0aW9uKG8sIG4sIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJlbmFtZVN5bmModGhpcy5ubShvKSwgdGhpcy5ubShuKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3RhdCA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmxzdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMubHN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN5bWxpbmsgPSBmdW5jdGlvbih0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMuc3ltbGlua1N5bmModGhpcy5ubSh0YXJnZXQpLCB0aGlzLm5tKHBhdGgpLCB0b19kaXIgPyAnZGlyJyA6ICdmaWxlJyk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCAndXRmOCcpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhsaW5rKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLm9wZW5kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJhaXNlX25vZGVqc19lcnJvciA9IGZ1bmN0aW9uKGVyciwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpIHtcbiAgICB2YXIgYXJncyA9IG1ha2VfdW5peF9lcnJfYXJncyhlcnIuY29kZSwgZXJyLnN5c2NhbGwsIGVyci5wYXRoLCBlcnIuZXJybm8pO1xuICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0c19mcm9tX2pzID0gZnVuY3Rpb24oanNfc3RhdHMpIHtcbiAgLyogPT09VW5peC5maWxlX2tpbmQ9PT1cbiAgICogdHlwZSBmaWxlX2tpbmQgPVxuICAgKiAgICAgU19SRUcgICAgICAgICAgICAgICAgICAgICAgICgqKiBSZWd1bGFyIGZpbGUgKilcbiAgICogICB8IFNfRElSICAgICAgICAgICAgICAgICAgICAgICAoKiogRGlyZWN0b3J5ICopXG4gICAqICAgfCBTX0NIUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIENoYXJhY3RlciBkZXZpY2UgKilcbiAgICogICB8IFNfQkxLICAgICAgICAgICAgICAgICAgICAgICAoKiogQmxvY2sgZGV2aWNlICopXG4gICAqICAgfCBTX0xOSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFN5bWJvbGljIGxpbmsgKilcbiAgICogICB8IFNfRklGTyAgICAgICAgICAgICAgICAgICAgICAoKiogTmFtZWQgcGlwZSAqKVxuICAgKiAgIHwgU19TT0NLICAgICAgICAgICAgICAgICAgICAgICgqKiBTb2NrZXQgKilcbiAgICovXG4gIHZhciBmaWxlX2tpbmQ7XG4gIGlmIChqc19zdGF0cy5pc0ZpbGUoKSkge1xuICAgIGZpbGVfa2luZCA9IDA7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVfa2luZCA9IDE7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDI7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNCbG9ja0RldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMztcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgZmlsZV9raW5kID0gNDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0ZJRk8oKSkge1xuICAgIGZpbGVfa2luZCA9IDU7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTb2NrZXQoKSkge1xuICAgIGZpbGVfa2luZCA9IDY7XG4gIH1cbiAgLyogPT09VW5peC5zdGF0cz09PVxuICAgKiB0eXBlIHN0YXRzID1cbiAgICogIHsgc3RfZGV2IDogaW50OyAgICAgICAgICAgICAgICgqKiBEZXZpY2UgbnVtYmVyICopXG4gICAqICAgIHN0X2lubyA6IGludDsgICAgICAgICAgICAgICAoKiogSW5vZGUgbnVtYmVyICopXG4gICAqICAgIHN0X2tpbmQgOiBmaWxlX2tpbmQ7ICAgICAgICAoKiogS2luZCBvZiB0aGUgZmlsZSAqKVxuICAgKiAgICBzdF9wZXJtIDogZmlsZV9wZXJtOyAgICAgICAgKCoqIEFjY2VzcyByaWdodHMgKilcbiAgICogICAgc3RfbmxpbmsgOiBpbnQ7ICAgICAgICAgICAgICgqKiBOdW1iZXIgb2YgbGlua3MgKilcbiAgICogICAgc3RfdWlkIDogaW50OyAgICAgICAgICAgICAgICgqKiBVc2VyIGlkIG9mIHRoZSBvd25lciAqKVxuICAgKiAgICBzdF9naWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAgKilcbiAgICogICAgc3RfcmRldiA6IGludDsgICAgICAgICAgICAgICgqKiBEZXZpY2UgSUQgKGlmIHNwZWNpYWwgZmlsZSkgKilcbiAgICogICAgc3Rfc2l6ZSA6IGludDsgICAgICAgICAgICAgICgqKiBTaXplIGluIGJ5dGVzICopXG4gICAqICAgIHN0X2F0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBhY2Nlc3MgdGltZSAqKVxuICAgKiAgICBzdF9tdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUgKilcbiAgICogICAgc3RfY3RpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IHN0YXR1cyBjaGFuZ2UgdGltZSAqKVxuICAgKiAgfVxuICAgKi9cbiAgcmV0dXJuIEJMT0NLKFxuICAgIDAsXG4gICAganNfc3RhdHMuZGV2LFxuICAgIGpzX3N0YXRzLmlubyxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAganNfc3RhdHMuc2l6ZSxcbiAgICBqc19zdGF0cy5hdGltZU1zLFxuICAgIGpzX3N0YXRzLm10aW1lTXMsXG4gICAganNfc3RhdHMuY3RpbWVNc1xuICApO1xufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKCkge1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9SZXF1aXJlczogTWxGaWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZywgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9ieXRlc19zZXQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbE5vZGVGZChmZCwgZmxhZ3Mpe1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5mZCA9IGZkO1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbE5vZGVGZC5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxOb2RlRmQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRmQ7XG5cbk1sTm9kZUZkLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5mdHJ1bmNhdGVTeW5jKHRoaXMuZmQsbGVufDApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpLnNpemU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZiwgYnVmX29mZnNldCwgbGVuKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLmZzLndyaXRlU3luYyh0aGlzLmZkLCBidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiAwO1xufVxuTWxOb2RlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYSxidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgIGVsc2VcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gICAgcmV0dXJuIHJlYWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmNsb3NlU3luYyh0aGlzLmZkKTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRmQoKXtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3Mpe1xuICBpZihmbGFncy5uYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbiAgICAgIHZhciBmZDIgPSBmcy5vcGVuU3luYyhmbGFncy5uYW1lLCBcInJzXCIpO1xuICAgICAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZDIsIGZsYWdzKTtcbiAgICB9IGNhdGNoKGUpIHsgIH1cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIER1bW15IGZpbGVzeXN0ZW1cblxuLy9Qcm92aWRlczogY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKXtcbiAgcmV0dXJuIChuYW1lLnNsaWNlKC0xKSAhPT0gXCIvXCIpID8gKG5hbWUgKyBcIi9cIikgOiBuYW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuaWYoZnNfbm9kZV9zdXBwb3J0ZWQgKCkgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QpXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZCgpLnJlcGxhY2UoL1xcXFwvZywnLycpO1xuZWxzZVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9ICBcIi9zdGF0aWNcIjtcbmNhbWxfY3VycmVudF9kaXIgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKGNhbWxfY3VycmVudF9kaXIpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9yb290XG4vL1JlcXVpcmVzOiBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX2dldF9yb290KHBhdGgpe1xuICB2YXIgeCA9IHBhdGhfaXNfYWJzb2x1dGUocGF0aCk7XG4gIGlmICgheCkgcmV0dXJuO1xuICByZXR1cm4geFswXSArIFwiL1wifVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jvb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ2V0X3Jvb3QsIGNhbWxfY3VycmVudF9kaXIsIGNhbWxfZmFpbHdpdGhcbnZhciBjYW1sX3Jvb3QgPSBjYW1sX2dldF9yb290KGNhbWxfY3VycmVudF9kaXIpIHx8IGNhbWxfZmFpbHdpdGgoXCJ1bmFibGUgdG8gY29tcHV0ZSBjYW1sX3Jvb3RcIik7XG5cblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKXsgIH1cblxuLy9Qcm92aWRlczogcGF0aF9pc19hYnNvbHV0ZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpIHtcbiAgZnVuY3Rpb24gcG9zaXgocGF0aCkge1xuICAgIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSByZXR1cm4gW1wiXCIsIHBhdGguc3Vic3RyaW5nKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9IC9eKFthLXpBLVpdOnxbXFxcXC9dezJ9W15cXFxcL10rW1xcXFwvXStbXlxcXFwvXSspPyhbXFxcXC9dKT8oW1xcc1xcU10qPykkLztcbiAgICB2YXIgcmVzdWx0ID0gc3BsaXREZXZpY2VSZS5leGVjKHBhdGgpO1xuICAgIHZhciBkZXZpY2UgPSByZXN1bHRbMV0gfHwgJyc7XG4gICAgdmFyIGlzVW5jID0gQm9vbGVhbihkZXZpY2UgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gJzonKTtcblxuICAgIC8vIFVOQyBwYXRocyBhcmUgYWx3YXlzIGFic29sdXRlXG4gICAgaWYgKEJvb2xlYW4ocmVzdWx0WzJdIHx8IGlzVW5jKSkge1xuICAgICAgdmFyIHJvb3QgPSAocmVzdWx0WzFdIHx8ICcnKTtcbiAgICAgIHZhciBzZXAgPSAocmVzdWx0WzJdIHx8ICcnKTtcbiAgICAgIHJldHVybiBbcm9vdCwgcGF0aC5zdWJzdHJpbmcocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luMzIgOiBwb3NpeDtcbiAgfVxuICBlbHNlIHJldHVybiBwb3NpeFxufVxudmFyIHBhdGhfaXNfYWJzb2x1dGUgPSBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX3BhdGhcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX21ha2VfcGF0aCAobmFtZSkge1xuICBuYW1lPWNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiggIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkgKVxuICAgIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdChcIi9cIik7XG4gIHZhciBuY29tcCA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGk8Y29tcC5sZW5ndGg7IGkrKyl7XG4gICAgc3dpdGNoKGNvbXBbaV0pe1xuICAgIGNhc2UgXCIuLlwiOiBpZihuY29tcC5sZW5ndGg+MSkgbmNvbXAucG9wKCk7IGJyZWFrO1xuICAgIGNhc2UgXCIuXCI6IGJyZWFrO1xuICAgIGNhc2UgXCJcIjogYnJlYWs7XG4gICAgZGVmYXVsdDogbmNvbXAucHVzaChjb21wW2ldKTticmVha1xuICAgIH1cbiAgfVxuICBuY29tcC51bnNoaWZ0KGNvbXAwWzBdKTtcbiAgbmNvbXAub3JpZyA9IG5hbWU7XG4gIHJldHVybiBuY29tcDtcbn1cblxuLy9Qcm92aWRlczpqc29vX21vdW50X3BvaW50XG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIE1sTm9kZURldmljZSwgY2FtbF9yb290LCBmc19ub2RlX3N1cHBvcnRlZFxudmFyIGpzb29fbW91bnRfcG9pbnQgPSBbXVxuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShjYW1sX3Jvb3QpfSk7XG59IGVsc2Uge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn1cbmpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpcIi9zdGF0aWMvXCIsIGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKFwiL3N0YXRpYy9cIil9KTtcblxuLy9Qcm92aWRlczpjYW1sX2xpc3RfbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpe1xuICB2YXIgcHJldiA9IDBcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspe1xuICAgIHZhciBvbGQgPSBwcmV2O1xuICAgIHByZXYgPSBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhqc29vX21vdW50X3BvaW50W2ldLnBhdGgpLCBvbGRdXG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IHBhdGguam9pbihcIi9cIik7XG4gIHZhciBuYW1lX3NsYXNoID0gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKTtcbiAgdmFyIHJlcztcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbSA9IGpzb29fbW91bnRfcG9pbnRbaV07XG4gICAgaWYobmFtZV9zbGFzaC5zZWFyY2gobS5wYXRoKSA9PSAwXG4gICAgICAgJiYgKCFyZXMgfHwgcmVzLnBhdGgubGVuZ3RoIDwgbS5wYXRoLmxlbmd0aCkpXG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICB9XG4gIGlmKCAhcmVzICYmIGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICB2YXIgcm9vdCA9IGNhbWxfZ2V0X3Jvb3QobmFtZSk7XG4gICAgaWYgKHJvb3QgJiYgcm9vdC5tYXRjaCgvXlthLXpBLVpdOlxcLyQvKSl7XG4gICAgICB2YXIgbSA9IHtwYXRoOnJvb3QsZGV2aWNlOm5ldyBNbE5vZGVEZXZpY2Uocm9vdCl9O1xuICAgICAganNvb19tb3VudF9wb2ludC5wdXNoKG0pO1xuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgICB9XG4gIH1cbiAgaWYoIHJlcyApIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsZil7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOm5hbWUsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UobmFtZSxmKX0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAgdmFyIGlkeCA9IC0xO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKylcbiAgICBpZihqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT0gbmFtZSkgaWR4ID0gaTtcbiAgaWYoaWR4ID4gLTEpIGpzb29fbW91bnRfcG9pbnQuc3BsaWNlKGlkeCwxKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0Y3dkXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfY3VycmVudF9kaXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jaGRpclxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIGlmKHJvb3QucmVzdCkgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhkaXIpKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9hX2RpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2FfZGlyKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2ZpbGVfZXhpc3RzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfZmlsZV9leGlzdHMgKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfYV9kaXIsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5yZWFkZGlyKHJvb3QucmVzdCk7XG4gIHZhciBsID0gbmV3IEFycmF5KGEubGVuZ3RoICsgMSk7XG4gIGxbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKylcbiAgICBsW2krMV0gPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbW92ZShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIG9rID0gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCk7XG4gIGlmKG9rID09IDApIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbmFtZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbmFtZShvLG4pe1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYob19yb290LmRldmljZSAhPSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IGNhbm5vdCBtb3ZlIGZpbGUgYmV0d2VlbiB0d28gZmlsZXN5c3RlbVwiKTtcbiAgaWYoIW9fcm9vdC5kZXZpY2UucmVuYW1lKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IG5vIGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19ta2RpcihuYW1lLCBwZXJtKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2UubWtkaXIocm9vdC5yZXN0LHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub3RfYV9kaXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3JtZGlyKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ybWRpcihyb290LnJlc3QpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZSh2ZmQsIGtpbmQsIGxheW91dCwgc2hhcmVkLCBkaW1zLCBwb3MpIHtcbiAgLy8gdmFyIGRhdGEgPSBjYW1sX3N5c19mZHNbdmZkXTtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfYmFfbWFwX2ZpbGUgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX21hcF9maWxlXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlKGFyZ3YsYXJnbil7XG4gIHJldHVybiBjYW1sX2JhX21hcF9maWxlKGFyZ3ZbMF0sYXJndlsxXSxhcmd2WzJdLGFyZ3ZbM10sYXJndls0XSxhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsY29udGVudCl7XG4gIGlmKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSlcbiAgICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KTtcbiAgZWxzZSB7XG4gICAgaWYoIWdsb2JhbFRoaXMuY2FtbF9mc190bXApIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wLnB1c2goe25hbWU6bmFtZSxjb250ZW50OmNvbnRlbnR9KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mc19pbml0XG4vL1JlcXVpcmVzOiBqc29vX2NyZWF0ZV9maWxlXG5mdW5jdGlvbiBjYW1sX2ZzX2luaXQgKCl7XG4gIHZhciB0bXA9Z2xvYmFsVGhpcy5jYW1sX2ZzX3RtcFxuICBpZih0bXApe1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0bXAubGVuZ3RoOyBpKyspe1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSx0bXBbaV0uY29udGVudCk7XG4gICAgfVxuICB9XG4gIGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSA9IGpzb29fY3JlYXRlX2ZpbGU7XG4gIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZighIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKSBjYW1sX2ZhaWx3aXRoKFwiY2Fubm90IHJlZ2lzdGVyIGZpbGVcIik7XG4gIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKHJvb3QucmVzdCxjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24ganNvb19jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpO1xuICB2YXIgY29udGVudCA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY29udGVudCk7XG4gIHJldHVybiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVhZF9maWxlX2NvbnRlbnRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVhZF9maWxlX2NvbnRlbnQgKG5hbWUpIHtcbiAgdmFyIG5hbWUgPSAodHlwZW9mIG5hbWUgPT0gXCJzdHJpbmdcIik/Y2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTpuYW1lO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3Qse3Jkb25seToxfSk7XG4gICAgdmFyIGxlbiAgPSBmaWxlLmxlbmd0aCgpO1xuICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIGZpbGUucmVhZCgwLGJ1ZiwwLGxlbik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGJ1ZilcbiAgfVxuICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5ICgpIHtcbiAgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSAoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKGNhbWxfdW5peF9nZXR0aW1lb2ZkYXkgKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ210aW1lXG4vL0FsaWFzOiB1bml4X2dtdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X2dtdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKERhdGUuVVRDKGQuZ2V0VVRDRnVsbFllYXIoKSwgMCwgMSkpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFVUQ1NlY29uZHMoKSwgZC5nZXRVVENNaW51dGVzKCksIGQuZ2V0VVRDSG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0VVRDRGF0ZSgpLCBkLmdldFVUQ01vbnRoKCksIGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RheSgpLCBkb3ksXG4gICAgICAgICAgICAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8pXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lICh0KSB7XG4gIHZhciBkID0gbmV3IERhdGUgKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSAobmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICB2YXIgamFuID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgdmFyIGp1bCA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgNiwgMSk7XG4gIHZhciBzdGRUaW1lem9uZU9mZnNldCA9IE1hdGgubWF4KGphbi5nZXRUaW1lem9uZU9mZnNldCgpLCBqdWwuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFNlY29uZHMoKSwgZC5nZXRNaW51dGVzKCksIGQuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF0ZSgpLCBkLmdldE1vbnRoKCksIGQuZ2V0RnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldERheSgpLCBkb3ksXG4gICAgICAgICAgICAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHwgMCAvKiBkYXlsaWdodCBzYXZpbmdzIHRpbWUgIGZpZWxkLiAqLylcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X21rdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvY2FsdGltZVxuLy9BbGlhczogdW5peF9ta3RpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta3RpbWUodG0pe1xuICB2YXIgZCA9IChuZXcgRGF0ZSh0bVs2XSsxOTAwLHRtWzVdLHRtWzRdLHRtWzNdLHRtWzJdLHRtWzFdKSkuZ2V0VGltZSgpO1xuICB2YXIgdCA9IE1hdGguZmxvb3IoZCAvIDEwMDApO1xuICB2YXIgdG0yID0gY2FtbF91bml4X2xvY2FsdGltZSh0KTtcbiAgcmV0dXJuIEJMT0NLKDAsdCx0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtyZXR1cm4geDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuICAgIHJldHVybiB0dHkuaXNhdHR5KGZpbGVEZXNjcmlwdG9yKT8xOjA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaXNhdHR5XG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLCBcIkVBQ0NFU1wiLCBcIkVBR0FJTlwiLCBcIkVCQURGXCIsIFwiRUJVU1lcIiwgXCJFQ0hJTERcIiwgXCJFREVBRExLXCIsIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLCBcIkVGQVVMVFwiLCBcIkVGQklHXCIsIFwiRUlOVFJcIiwgXCJFSU5WQUxcIiwgXCJFSU9cIiwgXCJFSVNESVJcIiwgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIiwgXCJFTkFNRVRPT0xPTkdcIiwgXCJFTkZJTEVcIiwgXCJFTk9ERVZcIiwgXCJFTk9FTlRcIiwgXCJFTk9FWEVDXCIsIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsIFwiRU5PU1BDXCIsIFwiRU5PU1lTXCIsIFwiRU5PVERJUlwiLCBcIkVOT1RFTVBUWVwiLCBcIkVOT1RUWVwiLCBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIiwgXCJFUElQRVwiLCBcIkVSQU5HRVwiLCBcIkVST0ZTXCIsIFwiRVNQSVBFXCIsIFwiRVNSQ0hcIiwgXCJFWERFVlwiLCBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIiwgXCJFQUxSRUFEWVwiLCBcIkVOT1RTT0NLXCIsIFwiRURFU1RBRERSUkVRXCIsIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsIFwiRU5PUFJPVE9PUFRcIiwgXCJFUFJPVE9OT1NVUFBPUlRcIiwgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsIFwiRVBGTk9TVVBQT1JUXCIsIFwiRUFGTk9TVVBQT1JUXCIsIFwiRUFERFJJTlVTRVwiLCBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLCBcIkVORVRVTlJFQUNIXCIsIFwiRU5FVFJFU0VUXCIsIFwiRUNPTk5BQk9SVEVEXCIsIFwiRUNPTk5SRVNFVFwiLCBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsIFwiRU5PVENPTk5cIiwgXCJFU0hVVERPV05cIiwgXCJFVE9PTUFOWVJFRlNcIiwgXCJFVElNRURPVVRcIiwgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIiwgXCJFSE9TVFVOUkVBQ0hcIiwgXCJFTE9PUFwiLCBcIkVPVkVSRkxPV1wiXG5dO1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5XG4gICAgfVxuICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIHZhcmlhbnRzLCBmYWxsYmFjayB0byBFVU5LTk9XTkVSUihpbnQpXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIGVycm5vKTtcbiAgfVxuICB2YXIgYXJncyA9IFtcbiAgICB2YXJpYW50LFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHN5c2NhbGwgfHwgXCJcIiksXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aCB8fCBcIlwiKVxuICBdO1xuICByZXR1cm4gYXJncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3N0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X3N0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgciA9IGNhbWxfdW5peF9zdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xzdGF0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbHN0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByID0gY2FtbF91bml4X2xzdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3ltbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3N5bWxpbmsodG9fZGlyLCBzcmMsIGRzdCkge1xuICB2YXIgc3JjX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShzcmMpO1xuICB2YXIgZHN0X3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkc3QpO1xuICBpZihzcmNfcm9vdC5kZXZpY2UgIT0gZHN0X3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3ltbGluazogY2Fubm90IHN5bWxpbmsgYmV0d2VlbiB0d28gZmlsZXN5c3RlbXNcIik7XG4gIGlmICghc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmsodG9fZGlyLCBzcmNfcm9vdC5yZXN0LCBkc3Rfcm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3JlYWRsaW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZGxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnJlYWRsaW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9yZWFkbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5yZWFkbGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF91bmxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3VubGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3VubGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudW5saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91bmxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0dWlkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dWlkKHVuaXQpIHtcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQpe1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKCk7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHB3dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldHB3dWlkKHVuaXQpIHtcbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2hhc19zeW1saW5rXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9BbGlhczogdW5peF9oYXNfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X2hhc19zeW1saW5rKHVuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCk/MTowXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9vcGVuZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UocGF0aCk7XG4gIGlmICghcm9vdC5kZXZpY2Uub3BlbmRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfb3BlbmRpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHZhciBkaXJfaGFuZGxlID0gcm9vdC5kZXZpY2Uub3BlbmRpcihyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiB7IHBvaW50ZXIgOiBkaXJfaGFuZGxlLCBwYXRoOiBwYXRoIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgICAgZW50cnkgPSBkaXJfaGFuZGxlLnBvaW50ZXIucmVhZFN5bmMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwicmVhZGRpclwiLCBkaXJfaGFuZGxlLnBhdGgpKTtcbiAgfVxuICBpZiAoZW50cnkgPT09IG51bGwpIHtcbiAgICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhlbnRyeS5uYW1lKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vQWxpYXM6IHVuaXhfY2xvc2VkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKSB7XG4gIHRyeSB7XG4gICAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIGRpcl9oYW5kbGUucGF0aCkpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZXdpbmRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpciwgY2FtbF91bml4X29wZW5kaXJcbi8vQWxpYXM6IHVuaXhfcmV3aW5kZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmV3aW5kZGlyKGRpcl9oYW5kbGUpIHtcbiAgY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xuICB2YXIgbmV3X2Rpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihkaXJfaGFuZGxlLnBhdGgpO1xuICBkaXJfaGFuZGxlLnBvaW50ZXIgPSBuZXdfZGlyX2hhbmRsZS5wb2ludGVyO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRmaXJzdFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfb3BlbmRpciwgY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kZmlyc3RcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kZmlyc3QocGF0aCkge1xuICAvLyBUaGUgV2luZG93cyBjb2RlIGFkZHMgdGhpcyBnbG9iIHRvIHRoZSBwYXRoLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdFxuICB2YXIgcGF0aF9qcyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBhdGgpO1xuICBwYXRoX2pzID0gcGF0aF9qcy5yZXBsYWNlKC8oXnxbXFxcXFxcL10pXFwqXFwuXFwqJC8sIFwiXCIpO1xuICBwYXRoID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aF9qcyk7XG4gIC8vICouKiBpcyBub3cgc3RyaXBwZWRcbiAgdmFyIGRpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKTtcbiAgdmFyIGZpcnN0X2VudHJ5ID0gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG4gIC8vIFRoZSBXaW5kb3dzIGJpbmRpbmdzIHR5cGUgZGlyX2hhbmRsZSBhcyBhbiBgaW50YCBidXQgaXQncyBub3QgaW4gSlNcbiAgcmV0dXJuIFswLCBmaXJzdF9lbnRyeSwgZGlyX2hhbmRsZV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kbmV4dFxuLy9SZXF1aXJlczogY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kbmV4dFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRuZXh0KGRpcl9oYW5kbGUpIHtcbiAgcmV0dXJuIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZGNsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vQWxpYXM6IHdpbl9maW5kY2xvc2VcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kY2xvc2UoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nICgpIHtyZXR1cm4gMDt9XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZXNcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJnc1xuZnVuY3Rpb24gTWxGYWtlRGV2aWNlIChyb290LCBmKSB7XG4gIHRoaXMuY29udGVudD17fTtcbiAgdGhpcy5yb290ID0gcm9vdDtcbiAgdGhpcy5sb29rdXBGdW4gPSBmO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuY3JlYXRlX2Rpcl9pZl9uZWVkZWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gIHZhciByZXMgPSBcIlwiO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgY29tcC5sZW5ndGggLSAxOyBpKyspe1xuICAgIHJlcyArPSBjb21wW2ldICsgXCIvXCI7XG4gICAgaWYodGhpcy5jb250ZW50W3Jlc10pIGNvbnRpbnVlO1xuICAgIHRoaXMuY29udGVudFtyZXNdID0gU3ltYm9sKFwiZGlyZWN0b3J5XCIpO1xuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnNsYXNoID0gZnVuY3Rpb24obmFtZSl7XG4gIHJldHVybiAvXFwvJC8udGVzdChuYW1lKT9uYW1lOihuYW1lICsgXCIvXCIpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5sb29rdXAgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICB2YXIgcmVzID0gdGhpcy5sb29rdXBGdW4oY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnJvb3QpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpKTtcbiAgICBpZihyZXMgIT09IDApIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV09bmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcocmVzWzFdKSk7XG4gICAgfVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgLy8gVGhlIHJvb3Qgb2YgdGhlIGRldmljZSBleGlzdHNcbiAgaWYobmFtZSA9PSBcIlwiKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBkaXJlY3RvcnkgZXhpc3RzXG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBmaWxlIGV4aXN0c1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkgJiYgIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm1rZGlyID0gZnVuY3Rpb24obmFtZSxtb2RlLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUVYSVNUXCIsIFwibWtkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogRmlsZSBleGlzdHNcIik7XG4gICAgfVxuICB9XG4gIHZhciBwYXJlbnQgPSAvXiguKilcXC9bXi9dKy8uZXhlYyhuYW1lKTtcbiAgcGFyZW50ID0gKHBhcmVudCAmJiBwYXJlbnRbMV0pIHx8ICcnO1xuICBpZighdGhpcy5leGlzdHMocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICBpZihuLm1hdGNoKHIpKSB7XG4gICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URU1QVFlcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCI6IERpcmVjdG9yeSBub3QgZW1wdHlcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJlYWRkaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgfVxuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICB2YXIgc2VlbiA9IHt9XG4gIHZhciBhID0gW107XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICB2YXIgbSA9IG4ubWF0Y2gocik7XG4gICAgaWYobSAmJiAhc2VlblttWzFdXSkge3NlZW5bbVsxXV0gPSB0cnVlOyBhLnB1c2gobVsxXSl9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcblxuICB2YXIgYSA9IHRoaXMucmVhZGRpcihuYW1lKTtcbiAgdmFyIGMgPSBmYWxzZTtcbiAgdmFyIGkgPSAwO1xuICByZXR1cm4geyByZWFkU3luYyA6IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGMpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihpID09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZW50cnkgPSBhW2ldO1xuICAgIGkrKztcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9XG4gIH0pXG4gICAgLCBjbG9zZVN5bmM6IChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoYykge1xuICAgICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjID0gdHJ1ZTtcbiAgICAgIGEgPSBbXTtcbiAgICB9KVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYobmFtZSA9PSBcIlwiKSAgcmV0dXJuIHRydWU7XG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG9rID0gdGhpcy5jb250ZW50W25hbWVdP3RydWU6ZmFsc2U7XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIHJldHVybiBvaztcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYpIHtcbiAgdmFyIGZpbGU7XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGlzIGEgZGlyZWN0b3J5XCIpO1xuICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICBpZihmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKCk7XG4gIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlICh0aGlzLm5tKG5hbWUpKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sRmFrZUZkKHRoaXMubm0obmFtZSksIGZpbGUsIGYpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIHZhciBmaWxlO1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWdpc3Rlcj0gZnVuY3Rpb24gKG5hbWUsY29udGVudCl7XG4gIHZhciBmaWxlO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV0pIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gIGlmKGNhbWxfaXNfbWxfYnl0ZXMoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNvbnRlbnQpO1xuICBpZihjYW1sX2lzX21sX3N0cmluZyhjb250ZW50KSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9hcnJheShjb250ZW50KSk7XG4gIGVsc2UgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudC50b1N0cmluZykge1xuICAgIHZhciBieXRlcyA9IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSkpO1xuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShieXRlcyk7XG4gIH1cbiAgaWYoZmlsZSl7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICB9XG4gIGVsc2UgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogcmVnaXN0ZXJpbmcgZmlsZSB3aXRoIGludmFsaWQgY29udGVudCB0eXBlXCIpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IE1sRmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbmZ1bmN0aW9uIE1sRmFrZUZpbGUoY29udGVudCl7XG4gIHRoaXMuZGF0YSA9IGNvbnRlbnQ7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZSA9IG5ldyBNbEZpbGUgKCk7XG5NbEZha2VGaWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZUZpbGVcbk1sRmFrZUZpbGUucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdmFyIG9sZCA9IHRoaXMuZGF0YTtcbiAgdGhpcy5kYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICBjYW1sX2JsaXRfYnl0ZXMob2xkLCAwLCB0aGlzLmRhdGEsIDAsIGxlbik7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aCh0aGlzLmRhdGEpO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgdmFyIG5ld19zdHIgPSBjYW1sX2NyZWF0ZV9ieXRlcyhvZmZzZXQgKyBsZW4pO1xuICAgIHZhciBvbGRfZGF0YSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGRfZGF0YSwgMCwgdGhpcy5kYXRhLCAwLCBjbGVuKTtcbiAgfVxuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBwb3MsIHRoaXMuZGF0YSwgb2Zmc2V0LCBsZW4pO1xuICByZXR1cm4gMFxufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgaWYob2Zmc2V0ICsgbGVuID49IGNsZW4pIHtcbiAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICB9XG4gIGlmKGxlbikge1xuICAgIHZhciBkYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICBidWYuc2V0KGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoZGF0YSksIHBvcyk7XG4gIH1cbiAgcmV0dXJuIGxlblxufVxuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkX291dChmZCxmbGFncykge1xuICBNbEZha2VGaWxlLmNhbGwodGhpcywgY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICB0aGlzLmxvZyA9IChmdW5jdGlvbiAocykgeyByZXR1cm4gMCB9KTtcbiAgaWYoZmQgPT0gMSAmJiB0eXBlb2YgY29uc29sZS5sb2cgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gIGVsc2UgaWYoZmQgPT0gMiAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmVycm9yO1xuICBlbHNlIGlmKHR5cGVvZiBjb25zb2xlLmxvZyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmxvZ1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMCB9XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9mZnNldCxidWYscG9zLGxlbikge1xuICBpZih0aGlzLmxvZykge1xuICAgIGlmKGxlbiA+IDBcbiAgICAgICAmJiBwb3MgPj0gMFxuICAgICAgICYmIHBvcytsZW4gPD0gYnVmLmxlbmd0aFxuICAgICAgICYmIGJ1Zltwb3MrbGVuLTFdID09IDEwKVxuICAgICAgbGVuIC0tO1xuICAgIC8vIERvIG5vdCBvdXRwdXQgdGhlIGxhc3QgXFxuIGlmIHByZXNlbnRcbiAgICAvLyBhcyBjb25zb2xlIGxvZ2dpbmcgZGlzcGxheSBhIG5ld2xpbmUgYXQgdGhlIGVuZFxuICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIHBvcywgc3JjLCAwLCBsZW4pO1xuICAgIHRoaXMubG9nKHNyYy50b1V0ZjE2KCkpO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMuZmQgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBhbHJlYWR5IGNsb3NlZFwiKTtcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5mZCAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGlzIHdyaXRlIG9ubHlcIik7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxvZyA9IHVuZGVmaW5lZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGZFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkKG5hbWUsIGZpbGUsZmxhZ3MpIHtcbiAgdGhpcy5maWxlID0gZmlsZTtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuXG5NbEZha2VGZC5wcm90b3R5cGUuZXJyX2Nsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5uYW1lICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSBjbG9zZWRcIik7XG59XG5NbEZha2VGZC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGggKClcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAob2Zmc2V0LGJ1Zixwb3MsbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS53cml0ZShvZmZzZXQsYnVmLHBvcyxsZW4pXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAob2Zmc2V0LCBidWYsIHBvcywgbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbilcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZmlsZSA9IHVuZGVmaW5lZDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKHMuY2hhckNvZGVBdCgyICogaSkgfCAocy5jaGFyQ29kZUF0KDIgKiBpICsgMSkgPDwgOCkpIDw8IDE2ID4+IDE2O1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSByZXR1cm4gLWJhc2UtMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKXtcbiAgICAgIGlmIChsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9PSAwKVxuICAgICAgICByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgYyA9IDI1NjtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIFJlYWQgbmV4dCBpbnB1dCBjaGFyICovXG4gICAgICBjID0gYnVmZmVyW2xleGJ1ZltsZXhfY3Vycl9wb3NdXTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdICsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qIE5ldyBsZXhlciBlbmdpbmUsIHdpdGggbWVtb3J5IG9mIHBvc2l0aW9ucyAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl9tZW0ocywgaSwgbWVtLCBjdXJyX3Bvcykge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChkc3QgPT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gY3Vycl9wb3M7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9sZXhfcnVuX3RhZyhzLCBpLCBtZW0pIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybiA7XG4gICAgdmFyIHNyYyA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChzcmMgPT0gMHhmZilcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSAtMTtcbiAgICBlbHNlXG4gICAgICBtZW0gW2RzdCArIDFdID0gbWVtIFtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX25ld19sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfbWVtID0gMTA7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcbiAgdmFyIGxleF9iYXNlX2NvZGUgPSA2O1xuICB2YXIgbGV4X2JhY2t0cmtfY29kZSA9IDc7XG4gIHZhciBsZXhfZGVmYXVsdF9jb2RlID0gODtcbiAgdmFyIGxleF90cmFuc19jb2RlID0gOTtcbiAgdmFyIGxleF9jaGVja19jb2RlID0gMTA7XG4gIHZhciBsZXhfY29kZSA9IDExO1xuXG4gIGlmICghdGJsLmxleF9kZWZhdWx0KSB7XG4gICAgdGJsLmxleF9iYXNlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV0pO1xuICAgIHRibC5sZXhfYmFja3RyayA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF0pO1xuICB9XG4gIGlmICghdGJsLmxleF9kZWZhdWx0X2NvZGUpIHtcbiAgICB0YmwubGV4X2Jhc2VfY29kZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VfY29kZV0pO1xuICAgIHRibC5sZXhfYmFja3Rya19jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0X2NvZGVdKTtcbiAgfVxuICBpZiAodGJsLmxleF9jb2RlID09IG51bGwpIHRibC5sZXhfY29kZSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcodGJsW2xleF9jb2RlXSk7XG5cbiAgdmFyIGMsIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMobGV4YnVmW2xleF9idWZmZXJdKTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvcig7Oykge1xuICAgIC8qIExvb2t1cCBiYXNlIGFkZHJlc3Mgb3IgYWN0aW9uIG51bWJlciBmb3IgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBiYXNlID0gdGJsLmxleF9iYXNlW3N0YXRlXTtcbiAgICBpZiAoYmFzZSA8IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2Jhc2VfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgcmV0dXJuIC1iYXNlLTE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICB2YXIgcHN0YXRlID0gc3RhdGUgO1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSwgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PSBwc3RhdGUpXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfdHJhbnNfY29kZVtiYXNlX2NvZGUgKyBjXTtcbiAgICAgIGVsc2VcbiAgICAgICAgcGNfb2ZmID0gdGJsLmxleF9kZWZhdWx0X2NvZGVbcHN0YXRlXTtcbiAgICAgIGlmIChwY19vZmYgPiAwKVxuICAgICAgICBjYW1sX2xleF9ydW5fbWVtXG4gICAgICAodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSwgbGV4YnVmW2xleF9jdXJyX3Bvc10pO1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfY2hhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1SW5pdCwgY2FtbF9NRDVVcGRhdGUsIGNhbWxfTUQ1RmluYWxcbmZ1bmN0aW9uIGNhbWxfbWQ1X2NoYW4oY2hhbmlkLHRvcmVhZCl7XG4gIHZhciBjdHggPSBjYW1sX01ENUluaXQoKTtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDQwOTYpO1xuICBpZih0b3JlYWQgPCAwKXtcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsYnVmZmVyLmxlbmd0aCk7XG4gICAgICBpZihyZWFkID09IDApIGJyZWFrO1xuICAgICAgY2FtbF9NRDVVcGRhdGUoY3R4LGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsICh0b3JlYWQgPiBidWZmZXIubGVuZ3RoID8gYnVmZmVyLmxlbmd0aCA6IHRvcmVhZCkpO1xuICAgICAgaWYocmVhZCA9PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICAgIHRvcmVhZCAtPSByZWFkXG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShjYW1sX01ENUZpbmFsKGN0eCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX21kNV9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tZDVfc3RyaW5nKHMsIG9mcywgbGVuKSB7XG4gIHJldHVybiBjYW1sX21kNV9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhzKSxvZnMsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVUcmFuc2Zvcm1cbnZhciBjYW1sX01ENVRyYW5zZm9ybSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGFkZCAoeCwgeSkgeyByZXR1cm4gKHggKyB5KSB8IDA7IH1cbiAgZnVuY3Rpb24geHgocSxhLGIseCxzLHQpIHtcbiAgICBhID0gYWRkKGFkZChhLCBxKSwgYWRkKHgsIHQpKTtcbiAgICByZXR1cm4gYWRkKChhIDw8IHMpIHwgKGEgPj4+ICgzMiAtIHMpKSwgYik7XG4gIH1cbiAgZnVuY3Rpb24gZmYoYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gZ2coYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTsgfVxuICBmdW5jdGlvbiBpaShhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdCk7IH1cblxuICByZXR1cm4gZnVuY3Rpb24gKHcsIGJ1ZmZlcikge1xuICAgIHZhciBhID0gd1swXSwgYiA9IHdbMV0sIGMgPSB3WzJdLCBkID0gd1szXTtcblxuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDBdLCA3LCAweEQ3NkFBNDc4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyAxXSwgMTIsIDB4RThDN0I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbIDJdLCAxNywgMHgyNDIwNzBEQik7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsgM10sIDIyLCAweEMxQkRDRUVFKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyA0XSwgNywgMHhGNTdDMEZBRik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNV0sIDEyLCAweDQ3ODdDNjJBKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTcsIDB4QTgzMDQ2MTMpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbIDddLCAyMiwgMHhGRDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOF0sIDcsIDB4Njk4MDk4RDgpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDldLCAxMiwgMHg4QjQ0RjdBRik7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMF0sIDE3LCAweEZGRkY1QkIxKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzExXSwgMjIsIDB4ODk1Q0Q3QkUpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA3LCAweDZCOTAxMTIyKTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWzEzXSwgMTIsIDB4RkQ5ODcxOTMpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTRdLCAxNywgMHhBNjc5NDM4RSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNV0sIDIyLCAweDQ5QjQwODIxKTtcblxuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA1LCAweEY2MUUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyA2XSwgOSwgMHhDMDQwQjM0MCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE0LCAweDI2NUU1QTUxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyAwXSwgMjAsIDB4RTlCNkM3QUEpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDVdLCA1LCAweEQ2MkYxMDVEKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweEQ4QTFFNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA0XSwgMjAsIDB4RTdEM0ZCQzgpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDldLCA1LCAweDIxRTFDREU2KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzE0XSwgOSwgMHhDMzM3MDdENik7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgM10sIDE0LCAweEY0RDUwRDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA4XSwgMjAsIDB4NDU1QTE0RUQpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbMTNdLCA1LCAweEE5RTNFOTA1KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyAyXSwgOSwgMHhGQ0VGQTNGOCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgN10sIDE0LCAweDY3NkYwMkQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OEQyQTRDOEEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNV0sIDQsIDB4RkZGQTM5NDIpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDhdLCAxMSwgMHg4NzcxRjY4MSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE2LCAweDZEOUQ2MTIyKTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzE0XSwgMjMsIDB4RkRFNTM4MEMpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA0LCAweEE0QkVFQTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyA0XSwgMTEsIDB4NEJERUNGQTkpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbIDddLCAxNiwgMHhGNkJCNEI2MCk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMF0sIDIzLCAweEJFQkZCQzcwKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzEzXSwgNCwgMHgyODlCN0VDNik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMF0sIDExLCAweEVBQTEyN0ZBKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWyAzXSwgMTYsIDB4RDRFRjMwODUpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbIDZdLCAyMywgMHgwNDg4MUQwNSk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOV0sIDQsIDB4RDlENEQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhFNkRCOTlFNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFGQTI3Q0Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWyAyXSwgMjMsIDB4QzRBQzU2NjUpO1xuXG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMF0sIDYsIDB4RjQyOTIyNDQpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbIDddLCAxMCwgMHg0MzJBRkY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweEFCOTQyM0E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA1XSwgMjEsIDB4RkM5M0EwMzkpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA2LCAweDY1NUI1OUMzKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWyAzXSwgMTAsIDB4OEYwQ0NDOTIpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNSwgMHhGRkVGRjQ3RCk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMV0sIDIxLCAweDg1ODQ1REQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyA4XSwgNiwgMHg2RkE4N0U0Rik7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNV0sIDEwLCAweEZFMkNFNkUwKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTUsIDB4QTMwMTQzMTQpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMTNdLCAyMSwgMHg0RTA4MTFBMSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNF0sIDYsIDB4Rjc1MzdFODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhCRDNBRjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsgMl0sIDE1LCAweDJBRDdEMkJCKTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA5XSwgMjEsIDB4RUI4NkQzOTEpO1xuXG4gICAgd1swXSA9IGFkZChhLCB3WzBdKTtcbiAgICB3WzFdID0gYWRkKGIsIHdbMV0pO1xuICAgIHdbMl0gPSBhZGQoYywgd1syXSk7XG4gICAgd1szXSA9IGFkZChkLCB3WzNdKTtcbiAgfX0pKClcblxuLy9Qcm92aWRlczogY2FtbF9NRDVJbml0XG5mdW5jdGlvbiBjYW1sX01ENUluaXQoKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNjQpO1xuICB2YXIgYjMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gIHZhciBiOCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gIHJldHVybiB7bGVuOjAsXG4gICAgICAgICAgdzpuZXcgVWludDMyQXJyYXkoWzB4Njc0NTIzMDEsIDB4RUZDREFCODksIDB4OThCQURDRkUsIDB4MTAzMjU0NzZdKSxcbiAgICAgICAgICBiMzI6YjMyLFxuICAgICAgICAgIGI4OmI4fVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbil7XG4gIHZhciBpbl9idWYgPSBjdHgubGVuICYgMHgzZjtcbiAgdmFyIGlucHV0X3BvcyA9IDA7XG4gIGN0eC5sZW4gKz0gaW5wdXRfbGVuO1xuICBpZihpbl9idWYpe1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYoaW5wdXRfbGVuIDwgbWlzc2luZykge1xuICAgICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLGlucHV0X2xlbiksaW5fYnVmKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KDAsbWlzc2luZyksaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUoaW5wdXRfbGVuID49IDY0KXtcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmKGlucHV0X2xlbilcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyBpbnB1dF9sZW4pLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVGaW5hbFxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1RmluYWwoY3R4KXtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZiArKztcbiAgaWYoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA2NDsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgNTY7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA1NjsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MUZGRkZGRkY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKVxuICAgICAgdFtpICogNCArIGpdID0gKGN0eC53W2ldID4+ICg4ICogaikpICYgMHhGRjtcbiAgcmV0dXJuIHQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LGEuc3ViYXJyYXkob2ZzLCBvZnMgKyBsZW4pLCBsZW4pO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoY2FtbF9NRDVGaW5hbChjdHgpKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSW9cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmRzXG52YXIgY2FtbF9zeXNfZmRzID0gbmV3IEFycmF5KDMpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jbG9zZVxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3N5c19jbG9zZShmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUpIGZpbGUuY2xvc2UoKTtcbiAgZGVsZXRlIGNhbWxfc3lzX2Zkc1tmZF07XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBNbEZha2VGZF9vdXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUsaWR4KSB7XG4gIGlmKGlkeCA9PSB1bmRlZmluZWQpe1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIH1cbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSBmaWxlO1xuICByZXR1cm4gaWR4IHwgMDtcbn1cbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW4gKG5hbWUsIGZsYWdzLCBfcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUoZmxhZ3Mpe1xuICAgIHN3aXRjaChmbGFnc1sxXSl7XG4gICAgY2FzZSAwOiBmLnJkb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAxOiBmLndyb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAyOiBmLmFwcGVuZCA9IDE7YnJlYWs7XG4gICAgY2FzZSAzOiBmLmNyZWF0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA0OiBmLnRydW5jYXRlID0gMTticmVhaztcbiAgICBjYXNlIDU6IGYuZXhjbCA9IDE7IGJyZWFrO1xuICAgIGNhc2UgNjogZi5iaW5hcnkgPSAxO2JyZWFrO1xuICAgIGNhc2UgNzogZi50ZXh0ID0gMTticmVhaztcbiAgICBjYXNlIDg6IGYubm9uYmxvY2sgPSAxO2JyZWFrO1xuICAgIH1cbiAgICBmbGFncz1mbGFnc1syXTtcbiAgfVxuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3QsZik7XG4gIHJldHVybiBjYW1sX3N5c19vcGVuX2ludGVybmFsIChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZmlsZShmZCwgZmxhZ3MpIHtcbiAgICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpXG4gIH1cbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDAse3Jkb25seToxLGFsdG5hbWU6XCIvZGV2L3N0ZGluXCIsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAwKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDEse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAxKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDIse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAyKTtcbn0pKClcblxuXG4vLyBvY2FtbCBDaGFubmVsc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZShjaGFuaWQsIG5hbWUpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ubmFtZSA9IG5hbWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxzXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBBcnJheSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdCAoY2FwdHVyZWQsIGludG8pe1xuICB2YXIgdG9fcmVzdG9yZSA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2FwdHVyZWQpO1xuICB2YXIgbmV3XyA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoaW50byk7XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2FwdHVyZWRdID0gbmV3XzsgLy8gWFhYXG4gIHJldHVybiB0b19yZXN0b3JlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmUgKGNhcHR1cmVkLCB0b19yZXN0b3JlKXtcbiAgY2FtbF9tbF9jaGFubmVsc1tjYXB0dXJlZF0gPSB0b19yZXN0b3JlOyAvLyBYWFhcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9nZXQoaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHNbaWRdOyAvLyBYWFhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCAoKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBjID0gMDsgYyA8IGNhbWxfbWxfY2hhbm5lbHMubGVuZ3RoOyBjKyspe1xuICAgIGlmKGNhbWxfbWxfY2hhbm5lbHNbY10gJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vcGVuZWQgJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vdXQpXG4gICAgICBsPVswLGNhbWxfbWxfY2hhbm5lbHNbY10uZmQsbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQgKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy5yZG9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgcmVhZG9ubHlcIik7XG4gIHZhciBidWZmZXJlZCA9IChmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQpID8gZmlsZS5mbGFncy5idWZmZXJlZCA6IDE7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDp0cnVlLFxuICAgIGJ1ZmZlcl9jdXJyOjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICBidWZmZXJlZDpidWZmZXJlZFxuICB9O1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5uZWwuZmRdPWNoYW5uZWw7XG4gIHJldHVybiBjaGFubmVsLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4gKGZkKSAge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUuZmxhZ3Mud3Jvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHdyaXRlb25seVwiKTtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDogZmFsc2UsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXJfbWF4OjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICByZWZpbGw6cmVmaWxsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFnc1xuLy9SZXF1aXJlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgZmxhZ3Mpe1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vQWxpYXM6IHdpbl9maWxlZGVzY3Jfb2ZfY2hhbm5lbFxuZnVuY3Rpb24gY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3IoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLG1vZGUpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5maWxlLmZsYWdzLnRleHQgPSAhbW9kZVxuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWxfaXNfYmluYXJ5X21vZGUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5maWxlLmZsYWdzLmJpbmFyeVxufVxuXG4vL0lucHV0IGZyb20gaW5fY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2Nsb3NlX2NoYW5uZWxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Nsb3NlXG5mdW5jdGlvbiBjYW1sX21sX2Nsb3NlX2NoYW5uZWwgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoY2hhbi5vcGVuZWQpIHtcbiAgICBjaGFuLm9wZW5lZCA9IGZhbHNlO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0KGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2hhbi5maWxlLmxlbmd0aCAoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsZikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5vdXRwdXQgPSAoZnVuY3Rpb24gKHMpIHtmKHMpfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGwoY2hhbmlkLGYpIHtcbiAgY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpLnJlZmlsbCA9IGY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWZpbGwgKGNoYW4pIHtcbiAgaWYoY2hhbi5yZWZpbGwgIT0gbnVsbCl7XG4gICAgdmFyIHN0ciA9IGNoYW4ucmVmaWxsKCk7XG4gICAgdmFyIHN0cl9hID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyX2EubGVuZ3RoID09IDApIHtcbiAgICAgIGNoYW4ucmVmaWxsID0gbnVsbFxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyLmxlbmd0aCA8IGNoYW4uYnVmZmVyX21heCArIHN0cl9hLmxlbmd0aCl7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsY2hhbi5idWZmZXJfbWF4KTtcbiAgICAgIGNoYW4ub2Zmc2V0ICs9IHN0cl9hLmxlbmd0aDtcbiAgICAgIGNoYW4uYnVmZmVyX21heCArPSBzdHJfYS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBucmVhZCA9IGNoYW4uZmlsZS5yZWFkKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgY2hhbi5idWZmZXJfbWF4LCBjaGFuLmJ1ZmZlci5sZW5ndGggLSBjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgIGNoYW4ub2Zmc2V0ICs9IG5yZWFkO1xuICAgIGNoYW4uYnVmZmVyX21heCArPSBucmVhZDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheSAoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrIChjaGFuaWQsIGJhLCBpLCBsKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgbiA9IGw7XG4gIHZhciBhdmFpbCA9IGNoYW4uYnVmZmVyX21heCAtIGNoYW4uYnVmZmVyX2N1cnI7XG4gIGlmKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbDtcbiAgfVxuICBlbHNlIGlmKGF2YWlsID4gMCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZihuID4gYXZhaWwpIG4gPSBhdmFpbDtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbiksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbjtcbiAgfVxuICByZXR1cm4gbiB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcywgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWUgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIGhlYWRlciA9IG5ldyBVaW50OEFycmF5KGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGZ1bmN0aW9uIGJsb2NrKGJ1ZmZlciwgb2Zmc2V0LCBuKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHdoaWxlKHIgPCBuKXtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgICAgICBicmVhaztcbiAgICAgIGJ1ZmZlcltvZmZzZXQrcl0gPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIrKztcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdmFyIHIgPSBibG9jayhoZWFkZXIsIDAsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGlmKHIgPT0gMClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIGVsc2UgaWYgKHIgPCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0XCIpO1xuICB2YXIgbGVuID0gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAoY2FtbF9ieXRlc19vZl9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLDApO1xuICB2YXIgciA9IGJsb2NrKGJ1ZiwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplLCBsZW4pXG4gIGlmKHIgPCBsZW4pXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0IFwiICsgciArIFwiICBcIiArIGxlbik7XG4gIHZhciBvZmZzZXQgPSBbMF07XG4gIHZhciByZXMgPSBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBvZmZzZXQpO1xuICBjaGFuLm9mZnNldCA9IGNoYW4ub2Zmc2V0ICsgb2Zmc2V0WzBdO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcFxuLy9SZXF1aXJlczogY2FtbF9pbnB1dF92YWx1ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV90b19vdXRzaWRlX2hlYXAoYykge1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZShjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9jaGFyIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICB9XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDQ7IGkrKyl7XG4gICAgcmVzID0gKHJlcyA8PCA4KSArIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJJbGxlZ2FsIHNlZWtcIik7XG4gIGlmKHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heFxuICAgICAmJiBwb3MgPD0gY2hhbi5vZmZzZXRcbiAgICAgJiYgY2hhbi5maWxlLmZsYWdzLmJpbmFyeSkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSBjaGFuLmJ1ZmZlcl9tYXggLSAoY2hhbi5vZmZzZXQgLSBwb3MpO1xuICB9IGVsc2Uge1xuICAgIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pblxuLy9SZXF1aXJlczogY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW4oY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW5fNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycikgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9wb3NfaW4oY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBwID0gY2hhbi5idWZmZXJfY3VycjtcbiAgZG8ge1xuICAgIGlmKHAgPj0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksMCk7XG4gICAgICAgIHAgLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4IC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgICAgfVxuICAgICAgaWYoY2hhbi5idWZmZXJfbWF4ID49IGNoYW4uYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsIChjaGFuKTtcbiAgICAgIGlmKHByZXZfbWF4ID09IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKGNoYW4uYnVmZmVyW3ArK10gIT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYoIWNoYW4uYnVmZmVyIHx8IGNoYW4uYnVmZmVyX2N1cnIgPT0gMCkgcmV0dXJuIDA7XG4gIGlmKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLndyaXRlKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgMCwgY2hhbi5idWZmZXJfY3Vycik7XG4gIH1cbiAgY2hhbi5vZmZzZXQgKz0gY2hhbi5idWZmZXJfY3VycjtcbiAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gIHJldHVybiAwO1xufVxuXG4vL291dHB1dCB0byBvdXRfY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF90YVxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCxjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3Qgb3V0cHV0IHRvIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbik7XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoID4gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9jdXJyICsgYnVmZmVyLmxlbmd0aCk7XG4gICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgIGNoYW4uYnVmZmVyID0gYlxuICB9XG4gIHN3aXRjaChjaGFuLmJ1ZmZlcmVkKXtcbiAgY2FzZSAwOiAvLyBVbmJ1ZmZlcmVkXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgYnJlYWtcbiAgY2FzZSAxOiAvLyBCdWZmZXJlZCAodGhlIGRlZmF1bHQpXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVhaztcbiAgY2FzZSAyOiAvLyBCdWZmZXJlZCAob25seSBmb3Igc3Rkb3V0IGFuZCBzdGRlcnIpXG4gICAgdmFyIGlkID0gYnVmZmVyLmxhc3RJbmRleE9mKDEwKVxuICAgIGlmKGlkIDwgMCkge1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aClcbiAgICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KDAsIGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aCAtIGlkIC0gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXkoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXQoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxjYW1sX2J5dGVzX29mX3N0cmluZyhidWZmZXIpLG9mZnNldCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfY2hhciAoY2hhbmlkLGMpIHtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZywgY2FtbF9tbF9vdXRwdXQsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZSAoY2hhbmlkLHYsZmxhZ3MpIHtcbiAgdmFyIHMgPSBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcodiwgZmxhZ3MpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3Mpe1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm9mZnNldCA9IHBvcztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXQoY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgKyBjaGFuLmJ1ZmZlcl9jdXJyXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LCBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dF82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQgKGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2ludCAoY2hhbmlkLGkpIHtcbiAgdmFyIGFyciA9IFsoaT4+MjQpICYgMHhGRiwoaT4+MTYpICYgMHhGRiwoaT4+OCkgJiAweEZGLGkgJiAweEZGIF07XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCw0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA/IDEgOiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX21sX3NldF9idWZmZXJlZChjaGFuaWQsdikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkuYnVmZmVyZWQgPSB2O1xuICBpZighdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMFxufVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBUaGUgcnVuLXRpbWUgbGlicmFyeSBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4ICopXG5cbnR5cGUgcG9zaXRpb24gPSB7XG4gIHBvc19mbmFtZSA6IHN0cmluZztcbiAgcG9zX2xudW0gOiBpbnQ7XG4gIHBvc19ib2wgOiBpbnQ7XG4gIHBvc19jbnVtIDogaW50O1xufVxuXG5sZXQgZHVtbXlfcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDA7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IC0xO1xufVxuXG50eXBlIGxleGJ1ZiA9XG4gIHsgcmVmaWxsX2J1ZmYgOiBsZXhidWYgLT4gdW5pdDtcbiAgICBtdXRhYmxlIGxleF9idWZmZXIgOiBieXRlcztcbiAgICBtdXRhYmxlIGxleF9idWZmZXJfbGVuIDogaW50O1xuICAgIG11dGFibGUgbGV4X2Fic19wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2N1cnJfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfYWN0aW9uIDogaW50O1xuICAgIG11dGFibGUgbGV4X2VvZl9yZWFjaGVkIDogYm9vbDtcbiAgICBtdXRhYmxlIGxleF9tZW0gOiBpbnQgYXJyYXk7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcCA6IHBvc2l0aW9uO1xuICAgIG11dGFibGUgbGV4X2N1cnJfcCA6IHBvc2l0aW9uO1xuICB9XG5cbnR5cGUgbGV4X3RhYmxlcyA9XG4gIHsgbGV4X2Jhc2U6IHN0cmluZztcbiAgICBsZXhfYmFja3Ryazogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0OiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrOiBzdHJpbmc7XG4gICAgbGV4X2Jhc2VfY29kZSA6IHN0cmluZztcbiAgICBsZXhfYmFja3Rya19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0X2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NvZGU6IHN0cmluZzt9XG5cbmV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcbmV4dGVybmFsIGNfbmV3X2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9uZXdfbGV4X2VuZ2luZVwiXG5cbmxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cblxubGV0IG5ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX25ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5sZXQgbGV4X3JlZmlsbCByZWFkX2Z1biBhdXhfYnVmZmVyIGxleGJ1ZiA9XG4gIGxldCByZWFkID1cbiAgICByZWFkX2Z1biBhdXhfYnVmZmVyIChCeXRlcy5sZW5ndGggYXV4X2J1ZmZlcikgaW5cbiAgbGV0IG4gPVxuICAgIGlmIHJlYWQgPiAwXG4gICAgdGhlbiByZWFkXG4gICAgZWxzZSAobGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlOyAwKSBpblxuICAoKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBidWZmZXI6XG4gICAgICAgIDwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLT5cbiAgICAgICAgfCAganVuayB8ICAgICAgdmFsaWQgZGF0YSAgICAgfCAgIGp1bmsgICAgfFxuICAgICAgICBeICAgICAgIF4gICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeXG4gICAgICAgIDAgICAgc3RhcnRfcG9zICAgICAgICAgICAgIGJ1ZmZlcl9lbmQgICAgQnl0ZXMubGVuZ3RoIGJ1ZmZlclxuICAqKVxuICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuID4gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyIHRoZW4gYmVnaW5cbiAgICAoKiBUaGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgblxuICAgICAgIDw9IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlclxuICAgIHRoZW4gYmVnaW5cbiAgICAgICgqIEJ1dCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaWYgd2UgcmVjbGFpbSB0aGUganVuayBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICBvZiB0aGUgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBsZXhidWYubGV4X2J1ZmZlciAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICgqIFdlIG11c3QgZ3JvdyB0aGUgYnVmZmVyLiAgRG91YmxpbmcgaXRzIHNpemUgd2lsbCBwcm92aWRlIGVub3VnaFxuICAgICAgICAgc3BhY2Ugc2luY2UgbiA8PSBTdHJpbmcubGVuZ3RoIGF1eF9idWZmZXIgPD0gU3RyaW5nLmxlbmd0aCBidWZmZXIuXG4gICAgICAgICBXYXRjaCBvdXQgZm9yIHN0cmluZyBsZW5ndGggb3ZlcmZsb3csIHRob3VnaC4gKilcbiAgICAgIGxldCBuZXdsZW4gPVxuICAgICAgICBJbnQubWluICgyICogQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgbiA+IG5ld2xlblxuICAgICAgdGhlbiBmYWlsd2l0aCBcIkxleGluZy5sZXhfcmVmaWxsOiBjYW5ub3QgZ3JvdyBidWZmZXJcIjtcbiAgICAgIGxldCBuZXdidWYgPSBCeXRlcy5jcmVhdGUgbmV3bGVuIGluXG4gICAgICAoKiBDb3B5IHRoZSB2YWxpZCBkYXRhIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldyBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIG5ld2J1ZiAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpO1xuICAgICAgbGV4YnVmLmxleF9idWZmZXIgPC0gbmV3YnVmXG4gICAgZW5kO1xuICAgICgqIFJlYWxsb2NhdGlvbiBvciBub3QsIHdlIGhhdmUgc2hpZnRlZCB0aGUgZGF0YSBsZWZ0IGJ5XG4gICAgICAgc3RhcnRfcG9zIGNoYXJhY3RlcnM7IHVwZGF0ZSB0aGUgcG9zaXRpb25zICopXG4gICAgbGV0IHMgPSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBsZXhidWYubGV4X2Fic19wb3MgKyBzO1xuICAgIGxleGJ1Zi5sZXhfY3Vycl9wb3MgPC0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9zdGFydF9wb3MgPC0gMDtcbiAgICBsZXhidWYubGV4X2xhc3RfcG9zIDwtIGxleGJ1Zi5sZXhfbGFzdF9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBzIDtcbiAgICBsZXQgdCA9IGxleGJ1Zi5sZXhfbWVtIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCB0LTEgZG9cbiAgICAgIGxldCB2ID0gdC4oaSkgaW5cbiAgICAgIGlmIHYgPj0gMCB0aGVuXG4gICAgICAgIHQuKGkpIDwtIHYtc1xuICAgIGRvbmVcbiAgZW5kO1xuICAoKiBUaGVyZSBpcyBub3cgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICBCeXRlcy5ibGl0IGF1eF9idWZmZXIgMCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X2J1ZmZlcl9sZW4gbjtcbiAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG5cblxubGV0IHplcm9fcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDE7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IDA7XG59XG5cbmxldCBmcm9tX2Z1bmN0aW9uID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBmID1cbiAgeyByZWZpbGxfYnVmZiA9IGxleF9yZWZpbGwgZiAoQnl0ZXMuY3JlYXRlIDUxMik7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAxMDI0O1xuICAgIGxleF9idWZmZXJfbGVuID0gMDtcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gZmFsc2U7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBmcm9tX2NoYW5uZWwgP3dpdGhfcG9zaXRpb25zIGljID1cbiAgZnJvbV9mdW5jdGlvbiA/d2l0aF9wb3NpdGlvbnMgKGZ1biBidWYgbiAtPiBpbnB1dCBpYyBidWYgMCBuKVxuXG5sZXQgZnJvbV9zdHJpbmcgPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIHMgPVxuICB7IHJlZmlsbF9idWZmID0gKGZ1biBsZXhidWYgLT4gbGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMub2Zfc3RyaW5nIHM7ICgqIGhhdmUgdG8gbWFrZSBhIGNvcHkgZm9yIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdW5zYWZlLXN0cmluZyBtb2RlICopXG4gICAgbGV4X2J1ZmZlcl9sZW4gPSBTdHJpbmcubGVuZ3RoIHM7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IHRydWU7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBzZXRfcG9zaXRpb24gbGV4YnVmIHBvc2l0aW9uID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgIDwtIHtwb3NpdGlvbiB3aXRoIHBvc19mbmFtZSA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19mbmFtZX07XG4gIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBwb3NpdGlvbi5wb3NfY251bVxuXG5sZXQgc2V0X2ZpbGVuYW1lIGxleGJ1ZiBmbmFtZSA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wIDwtIHtsZXhidWYubGV4X2N1cnJfcCB3aXRoIHBvc19mbmFtZSA9IGZuYW1lfVxuXG5sZXQgd2l0aF9wb3NpdGlvbnMgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zXG5cbmxldCBsZXhlbWUgbGV4YnVmID1cbiAgbGV0IGxlbiA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGxlblxuXG5sZXQgc3ViX2xleGVtZSBsZXhidWYgaTEgaTIgPVxuICBsZXQgbGVuID0gaTItaTEgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW5cblxubGV0IHN1Yl9sZXhlbWVfb3B0IGxleGJ1ZiBpMSBpMiA9XG4gIGlmIGkxID49IDAgdGhlbiBiZWdpblxuICAgIGxldCBsZW4gPSBpMi1pMSBpblxuICAgIFNvbWUgKEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuKVxuICBlbmQgZWxzZSBiZWdpblxuICAgIE5vbmVcbiAgZW5kXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPSBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaVxuXG5sZXQgc3ViX2xleGVtZV9jaGFyX29wdCBsZXhidWYgaSA9XG4gIGlmIGkgPj0gMCB0aGVuXG4gICAgU29tZSAoQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cblxubGV0IGxleGVtZV9jaGFyIGxleGJ1ZiBpID1cbiAgQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIChsZXhidWYubGV4X3N0YXJ0X3BvcyArIGkpXG5cbmxldCBsZXhlbWVfc3RhcnQgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wLnBvc19jbnVtXG5sZXQgbGV4ZW1lX2VuZCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfY251bVxuXG5sZXQgbGV4ZW1lX3N0YXJ0X3AgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wXG5sZXQgbGV4ZW1lX2VuZF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wXG5cbmxldCBuZXdfbGluZSBsZXhidWYgPVxuICBsZXQgbGNwID0gbGV4YnVmLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGV4YnVmLmxleF9jdXJyX3AgPC1cbiAgICAgIHsgbGNwIHdpdGhcbiAgICAgICAgcG9zX2xudW0gPSBsY3AucG9zX2xudW0gKyAxO1xuICAgICAgICBwb3NfYm9sID0gbGNwLnBvc19jbnVtO1xuICAgICAgfVxuXG5cblxuKCogRGlzY2FyZCBkYXRhIGxlZnQgaW4gbGV4ZXIgYnVmZmVyLiAqKVxuXG5sZXQgZmx1c2hfaW5wdXQgbGIgPVxuICBsYi5sZXhfY3Vycl9wb3MgPC0gMDtcbiAgbGIubGV4X2Fic19wb3MgPC0gMDtcbiAgbGV0IGxjcCA9IGxiLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGIubGV4X2N1cnJfcCA8LSB7emVyb19wb3Mgd2l0aCBwb3NfZm5hbWUgPSBsY3AucG9zX2ZuYW1lfTtcbiAgbGIubGV4X2J1ZmZlcl9sZW4gPC0gMDtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBQcmludGZcblxudHlwZSB0ID0gZXhuID0gLi5cblxubGV0IHByaW50ZXJzID0gQXRvbWljLm1ha2UgW11cblxubGV0IGxvY2ZtdCA9IGZvcm1hdF9vZl9zdHJpbmcgXCJGaWxlIFxcXCIlc1xcXCIsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWQ6ICVzXCJcblxubGV0IGZpZWxkIHggaSA9XG4gIGxldCBmID0gT2JqLmZpZWxkIHggaSBpblxuICBpZiBub3QgKE9iai5pc19ibG9jayBmKSB0aGVuXG4gICAgc3ByaW50ZiBcIiVkXCIgKE9iai5tYWdpYyBmIDogaW50KSAgICAgICAgICAgKCogY2FuIGFsc28gYmUgYSBjaGFyICopXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLnN0cmluZ190YWcgdGhlblxuICAgIHNwcmludGYgXCIlU1wiIChPYmoubWFnaWMgZiA6IHN0cmluZylcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouZG91YmxlX3RhZyB0aGVuXG4gICAgc3RyaW5nX29mX2Zsb2F0IChPYmoubWFnaWMgZiA6IGZsb2F0KVxuICBlbHNlXG4gICAgXCJfXCJcblxubGV0IHJlYyBvdGhlcl9maWVsZHMgeCBpID1cbiAgaWYgaSA+PSBPYmouc2l6ZSB4IHRoZW4gXCJcIlxuICBlbHNlIHNwcmludGYgXCIsICVzJXNcIiAoZmllbGQgeCBpKSAob3RoZXJfZmllbGRzIHggKGkrMSkpXG5cbmxldCBmaWVsZHMgeCA9XG4gIG1hdGNoIE9iai5zaXplIHggd2l0aFxuICB8IDAgLT4gXCJcIlxuICB8IDEgLT4gXCJcIlxuICB8IDIgLT4gc3ByaW50ZiBcIiglcylcIiAoZmllbGQgeCAxKVxuICB8IF8gLT4gc3ByaW50ZiBcIiglcyVzKVwiIChmaWVsZCB4IDEpIChvdGhlcl9maWVsZHMgeCAyKVxuXG5sZXQgdXNlX3ByaW50ZXJzIHggPVxuICBsZXQgcmVjIGNvbnYgPSBmdW5jdGlvblxuICAgIHwgaGQgOjogdGwgLT5cbiAgICAgICAgKG1hdGNoIGhkIHggd2l0aFxuICAgICAgICAgfCBOb25lIHwgZXhjZXB0aW9uIF8gLT4gY29udiB0bFxuICAgICAgICAgfCBTb21lIHMgLT4gU29tZSBzKVxuICAgIHwgW10gLT4gTm9uZSBpblxuICBjb252IChBdG9taWMuZ2V0IHByaW50ZXJzKVxuXG5sZXQgdG9fc3RyaW5nX2RlZmF1bHQgPSBmdW5jdGlvblxuICB8IE91dF9vZl9tZW1vcnkgLT4gXCJPdXQgb2YgbWVtb3J5XCJcbiAgfCBTdGFja19vdmVyZmxvdyAtPiBcIlN0YWNrIG92ZXJmbG93XCJcbiAgfCBNYXRjaF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis1KSBcIlBhdHRlcm4gbWF0Y2hpbmcgZmFpbGVkXCJcbiAgfCBBc3NlcnRfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJBc3NlcnRpb24gZmFpbGVkXCJcbiAgfCBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJVbmRlZmluZWQgcmVjdXJzaXZlIG1vZHVsZVwiXG4gIHwgeCAtPlxuICAgICAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gICAgICBpZiBPYmoudGFnIHggPD4gMCB0aGVuXG4gICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCB4IDApIDogc3RyaW5nKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgY29uc3RydWN0b3IgPVxuICAgICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCAoT2JqLmZpZWxkIHggMCkgMCkgOiBzdHJpbmcpIGluXG4gICAgICAgIGNvbnN0cnVjdG9yIF4gKGZpZWxkcyB4KVxuXG5sZXQgdG9fc3RyaW5nIGUgPVxuICBtYXRjaCB1c2VfcHJpbnRlcnMgZSB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IHRvX3N0cmluZ19kZWZhdWx0IGVcblxubGV0IHByaW50IGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBmbHVzaCBzdGRlcnI7XG4gICAgcmFpc2UgeFxuXG5sZXQgY2F0Y2ggZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZmx1c2ggc3Rkb3V0O1xuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBleGl0IDJcblxudHlwZSByYXdfYmFja3RyYWNlX3Nsb3RcbnR5cGUgcmF3X2JhY2t0cmFjZV9lbnRyeSA9IHByaXZhdGUgaW50XG50eXBlIHJhd19iYWNrdHJhY2UgPSByYXdfYmFja3RyYWNlX2VudHJ5IGFycmF5XG5cbmxldCByYXdfYmFja3RyYWNlX2VudHJpZXMgYnQgPSBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZTpcbiAgdW5pdCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZVwiXG5cbmV4dGVybmFsIHJhaXNlX3dpdGhfYmFja3RyYWNlOiBleG4gLT4gcmF3X2JhY2t0cmFjZSAtPiAnYVxuICA9IFwiJXJhaXNlX3dpdGhfYmFja3RyYWNlXCJcblxudHlwZSBiYWNrdHJhY2Vfc2xvdCA9XG4gIHwgS25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgICAgOiBib29sO1xuICAgICAgZmlsZW5hbWUgICAgOiBzdHJpbmc7XG4gICAgICBsaW5lX251bWJlciA6IGludDtcbiAgICAgIHN0YXJ0X2NoYXIgIDogaW50O1xuICAgICAgZW5kX2NoYXIgICAgOiBpbnQ7XG4gICAgICBpc19pbmxpbmUgICA6IGJvb2w7XG4gICAgICBkZWZuYW1lICAgICA6IHN0cmluZztcbiAgICB9XG4gIHwgVW5rbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSA6IGJvb2xcbiAgICB9XG5cbigqIHRvIGF2b2lkIHdhcm5pbmcgKilcbmxldCBfID0gW0tub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZTsgZmlsZW5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciA9IDA7IHN0YXJ0X2NoYXIgPSAwOyBlbmRfY2hhciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2lubGluZSA9IGZhbHNlOyBkZWZuYW1lID0gXCJcIiB9O1xuICAgICAgICAgVW5rbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2UgfV1cblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Q6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiBiYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZTpcbiAgcmF3X2JhY2t0cmFjZSAtPiBiYWNrdHJhY2Vfc2xvdCBhcnJheSA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2VcIlxuXG5sZXQgY29udmVydF9yYXdfYmFja3RyYWNlIGJ0ID1cbiAgdHJ5IFNvbWUgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidClcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgZm9ybWF0X2JhY2t0cmFjZV9zbG90IHBvcyBzbG90ID1cbiAgbGV0IGluZm8gaXNfcmFpc2UgPVxuICAgIGlmIGlzX3JhaXNlIHRoZW5cbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBhdFwiIGVsc2UgXCJSZS1yYWlzZWQgYXRcIlxuICAgIGVsc2VcbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBieSBwcmltaXRpdmUgb3BlcmF0aW9uIGF0XCIgZWxzZSBcIkNhbGxlZCBmcm9tXCJcbiAgaW5cbiAgbWF0Y2ggc2xvdCB3aXRoXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBpZiBsLmlzX3JhaXNlIHRoZW5cbiAgICAgICAgKCogY29tcGlsZXItaW5zZXJ0ZWQgcmUtcmFpc2UsIHNraXBwZWQgKikgTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBTb21lIChzcHJpbnRmIFwiJXMgdW5rbm93biBsb2NhdGlvblwiIChpbmZvIGZhbHNlKSlcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBTb21lIChzcHJpbnRmIFwiJXMgJXMgaW4gZmlsZSBcXFwiJXNcXFwiJXMsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWRcIlxuICAgICAgICAgICAgICAoaW5mbyBsLmlzX3JhaXNlKSBsLmRlZm5hbWUgbC5maWxlbmFtZVxuICAgICAgICAgICAgICAoaWYgbC5pc19pbmxpbmUgdGhlbiBcIiAoaW5saW5lZClcIiBlbHNlIFwiXCIpXG4gICAgICAgICAgICAgIGwubGluZV9udW1iZXIgbC5zdGFydF9jaGFyIGwuZW5kX2NoYXIpXG5cbmxldCBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgICBmcHJpbnRmIG91dGNoYW5cbiAgICAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gZnByaW50ZiBvdXRjaGFuIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmVcblxubGV0IHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiByYXdfYmFja3RyYWNlID1cbiAgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6IHByaW50cyB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgcHJpbnRfYmFja3RyYWNlIG91dGNoYW4gPVxuICBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5sZXQgYmFja3RyYWNlX3RvX3N0cmluZyBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAxMDI0IGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGJwcmludGYgYiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIHJhd19iYWNrdHJhY2UgPVxuICBiYWNrdHJhY2VfdG9fc3RyaW5nIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfaW5saW5lXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG5cbnR5cGUgbG9jYXRpb24gPSB7XG4gIGZpbGVuYW1lIDogc3RyaW5nO1xuICBsaW5lX251bWJlciA6IGludDtcbiAgc3RhcnRfY2hhciA6IGludDtcbiAgZW5kX2NoYXIgOiBpbnQ7XG59XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvbiA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgU29tZSB7XG4gICAgICBmaWxlbmFtZSAgICA9IGwuZmlsZW5hbWU7XG4gICAgICBsaW5lX251bWJlciA9IGwubGluZV9udW1iZXI7XG4gICAgICBzdGFydF9jaGFyICA9IGwuc3RhcnRfY2hhcjtcbiAgICAgIGVuZF9jaGFyICAgID0gbC5lbmRfY2hhcjtcbiAgICB9XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF9cbiAgfCBLbm93bl9sb2NhdGlvbiB7IGRlZm5hbWUgPSBcIlwiIH0gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gU29tZSBsLmRlZm5hbWVcblxubGV0IGJhY2t0cmFjZV9zbG90cyByYXdfYmFja3RyYWNlID1cbiAgKCogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgU29tZSBpc1xuICAgICByZXR1cm5lZCBvbmx5IGlmIGEgcGFydCBvZiB0aGUgdHJhY2UgaXMgdXNhYmxlLiBUaGlzIGdpdmVzIHVzXG4gICAgIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgY29udmVydF9yYXdfYmFja3RyYWNlLCBidXQgaXQgbWFrZXMgdGhlXG4gICAgIEFQSSBtb3JlIHVzZXItZnJpZW5kbHkgLS0gb3RoZXJ3aXNlIG1vc3QgdXNlcnMgd291bGQgaGF2ZSB0b1xuICAgICByZWltcGxlbWVudCB0aGUgXCJQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgc29ycnlcIiBsb2dpY1xuICAgICB0aGVtc2VsdmVzLiAqKVxuICBtYXRjaCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgYmFja3RyYWNlIC0+XG4gICAgICBsZXQgdXNhYmxlX3Nsb3QgPSBmdW5jdGlvblxuICAgICAgICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuICAgICAgICB8IEtub3duX2xvY2F0aW9uIF8gLT4gdHJ1ZSBpblxuICAgICAgbGV0IHJlYyBleGlzdHNfdXNhYmxlID0gZnVuY3Rpb25cbiAgICAgICAgfCAoLTEpIC0+IGZhbHNlXG4gICAgICAgIHwgaSAtPiB1c2FibGVfc2xvdCBiYWNrdHJhY2UuKGkpIHx8IGV4aXN0c191c2FibGUgKGkgLSAxKSBpblxuICAgICAgaWYgZXhpc3RzX3VzYWJsZSAoQXJyYXkubGVuZ3RoIGJhY2t0cmFjZSAtIDEpXG4gICAgICB0aGVuIFNvbWUgYmFja3RyYWNlXG4gICAgICBlbHNlIE5vbmVcblxubGV0IGJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkgZW50cnkgPVxuICBiYWNrdHJhY2Vfc2xvdHMgW3wgZW50cnkgfF1cblxubW9kdWxlIFNsb3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGZvcm1hdCA9IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdFxuICBsZXQgaXNfcmFpc2UgPSBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZVxuICBsZXQgaXNfaW5saW5lID0gYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lXG4gIGxldCBsb2NhdGlvbiA9IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uXG4gIGxldCBuYW1lID0gYmFja3RyYWNlX3Nsb3RfZGVmbmFtZVxuZW5kXG5cbmxldCByYXdfYmFja3RyYWNlX2xlbmd0aCBidCA9IEFycmF5Lmxlbmd0aCBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZSAtPiBpbnQgLT4gcmF3X2JhY2t0cmFjZV9zbG90ID0gXCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiByYXdfYmFja3RyYWNlX3Nsb3Qgb3B0aW9uXG4gID0gXCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XCJcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6XG4gICByZXR1cm5zIHRoZSAqc3RyaW5nKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBnZXRfYmFja3RyYWNlICgpID0gcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5leHRlcm5hbCByZWNvcmRfYmFja3RyYWNlOiBib29sIC0+IHVuaXQgPSBcImNhbWxfcmVjb3JkX2JhY2t0cmFjZVwiXG5leHRlcm5hbCBiYWNrdHJhY2Vfc3RhdHVzOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfYmFja3RyYWNlX3N0YXR1c1wiXG5cbmxldCByZWMgcmVnaXN0ZXJfcHJpbnRlciBmbiA9XG4gIGxldCBvbGRfcHJpbnRlcnMgPSBBdG9taWMuZ2V0IHByaW50ZXJzIGluXG4gIGxldCBuZXdfcHJpbnRlcnMgPSBmbiA6OiBvbGRfcHJpbnRlcnMgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IHByaW50ZXJzIG9sZF9wcmludGVycyBuZXdfcHJpbnRlcnMgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiByZWdpc3Rlcl9wcmludGVyIGZuXG5cbmV4dGVybmFsIGdldF9jYWxsc3RhY2s6IGludCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFja1wiXG5cbmxldCBleG5fc2xvdCB4ID1cbiAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gIGlmIE9iai50YWcgeCA9IDAgdGhlbiBPYmouZmllbGQgeCAwIGVsc2UgeFxuXG5sZXQgZXhuX3Nsb3RfaWQgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMSkgOiBpbnQpXG5cbmxldCBleG5fc2xvdF9uYW1lIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDApIDogc3RyaW5nKVxuXG5leHRlcm5hbCBnZXRfZGVidWdfaW5mb19zdGF0dXMgOiB1bml0IC0+IGludCA9IFwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1c1wiXG5cbigqIERlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHN0YXJ0dXAuaC4gU2VlIGFsc28gYmFja3RyYWNlLmMgKilcbmxldCBlcnJvcnMgPSBbfCBcIlwiO1xuICAoKiBGSUxFX05PVF9GT1VORCAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgbm90IGZvdW5kKVwiO1xuICAoKiBCQURfQllURUNPREUgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdClcIjtcbiAgKCogV1JPTkdfTUFHSUMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIpXCI7XG4gICgqIE5PX0ZEUyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgY2Fubm90IGJlIG9wZW5lZDtcXG4gXFxcbiAgICAgIC0tIHRvbyBtYW55IG9wZW4gZmlsZXMuIFRyeSBydW5uaW5nIHdpdGggT0NBTUxSVU5QQVJBTT1iPTIpXCJcbnxdXG5cbmxldCBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlID1cbiAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gIGxldCBzdGF0dXMgPSBnZXRfZGVidWdfaW5mb19zdGF0dXMgKCkgaW5cbiAgaWYgc3RhdHVzIDwgMCB0aGVuXG4gICAgcHJlcnJfZW5kbGluZSBlcnJvcnMuKGFicyBzdGF0dXMpO1xuICBmbHVzaCBzdGRlcnJcblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXJcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IGZuXG5cbmxldCBlbXB0eV9iYWNrdHJhY2UgOiByYXdfYmFja3RyYWNlID0gW3wgfF1cblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgdHJ5XG4gICAgICAhdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICB3aXRoIGV4bicgLT5cbiAgICAgIGxldCByYXdfYmFja3RyYWNlJyA9IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yIGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyOiBleGNlcHRpb24gJXNcXG5cIlxuICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZSc7XG4gICAgICBmbHVzaCBzdGRlcnJcbiAgd2l0aFxuICAgIHwgT3V0X29mX21lbW9yeSAtPlxuICAgICAgICBwcmVycl9lbmRsaW5lXG4gICAgICAgICAgXCJGYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlclwiXG5cbigqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFtjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbl0gaW5cbiAgIFtydW50aW1lL3ByaW50ZXhjLmNdIHdoaWNoIGV4cGVjdHMgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlXG4gIHdpdGggXyAtPlxuICAgICgqIFRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICopXG4gICAgKClcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiXG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEZ1bmN0aW9uYWwgcXVldWVzIChmaWZvKX0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEJhc2ljc30gKilcblxuW0BAQHdhcm5pbmcgXCItMzdcIl1cblxudHlwZSB6ZXJvID0gWmVyb1xudHlwZSAneCBzdWNjID0gU3VjY1xudHlwZSBvbmUgPSB6ZXJvIHN1Y2NcbnR5cGUgdHdvID0gemVybyBzdWNjIHN1Y2NcbnR5cGUgdGhyZWUgPSB6ZXJvIHN1Y2Mgc3VjYyBzdWNjXG5cbnR5cGUgKCsnYSwgJ2wpIGRpZ2l0ID1cbiAgfCBaZXJvIDogKCdhLCB6ZXJvKSBkaWdpdFxuICB8IE9uZSA6ICdhIC0+ICgnYSwgb25lKSBkaWdpdFxuICB8IFR3byA6ICdhICogJ2EgLT4gKCdhLCB0d28pIGRpZ2l0XG4gIHwgVGhyZWUgOiAnYSAqICdhICogJ2EgLT4gKCdhLCB0aHJlZSkgZGlnaXRcblxuKCogc3RvcmUgdGhlIHNpemUgaW4gZGVlcCB2ZXJzaW9uICopXG50eXBlICsnYSB0ID1cbiAgfCBTaGFsbG93IDogKCdhLCBfKSBkaWdpdCAtPiAnYSB0XG4gIHwgRGVlcCA6XG4gICAgICBpbnQgKiAoJ2EsIF8gc3VjYykgZGlnaXQgKiAoJ2EgKiAnYSkgdCBsYXp5X3QgKiAoJ2EsIF8gc3VjYykgZGlnaXRcbiAgICAgIC0+ICdhIHRcblxubGV0IGVtcHR5IDogdHlwZSBhLiBhIHQgPSBTaGFsbG93IFplcm9cblxuZXhjZXB0aW9uIEVtcHR5XG5cbmxldCBfZW1wdHkgPSBTaGFsbG93IFplcm9cbmxldCBfc2luZ2xlIHggPSBTaGFsbG93IChPbmUgeClcbmxldCBfZG91YmxlIHggeSA9IFNoYWxsb3cgKFR3byAoeCwgeSkpXG5cbmxldCBfZGVlcCA6XG4gICAgdHlwZSBsMCBsMS5cbiAgICBpbnQgLT5cbiAgICAoJ2EsIGwwIHN1Y2MpIGRpZ2l0IC0+XG4gICAgKCdhICogJ2EpIHQgbGF6eV90IC0+XG4gICAgKCdhLCBsMSBzdWNjKSBkaWdpdCAtPlxuICAgICdhIHQgPVxuIGZ1biBuIGhkIG1pZGRsZSB0bCAtPiBEZWVwIChuLCBoZCwgbWlkZGxlLCB0bClcblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBTaGFsbG93IFplcm8gLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHNpbmdsZXRvbiB4ID0gX3NpbmdsZSB4XG5sZXQgZG91YmxldG9uIHggeSA9IF9kb3VibGUgeCB5XG5cbmxldCByZWMgY29ucyA6IHR5cGUgYS4gYSAtPiBhIHQgLT4gYSB0ID1cbiBmdW4geCBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgWmVybyAtPiBfc2luZ2xlIHhcbiAgfCBTaGFsbG93IChPbmUgeSkgLT4gU2hhbGxvdyAoVHdvICh4LCB5KSlcbiAgfCBTaGFsbG93IChUd28gKHksIHopKSAtPiBTaGFsbG93IChUaHJlZSAoeCwgeSwgeikpXG4gIHwgU2hhbGxvdyAoVGhyZWUgKHksIHosIHonKSkgLT5cbiAgICBfZGVlcCA0IChUd28gKHgsIHkpKSAobGF6eSBfZW1wdHkpIChUd28gKHosIHonKSlcbiAgfCBEZWVwIChuLCBPbmUgeSwgbWlkZGxlLCB0bCkgLT4gX2RlZXAgKG4gKyAxKSAoVHdvICh4LCB5KSkgbWlkZGxlIHRsXG4gIHwgRGVlcCAobiwgVHdvICh5LCB6KSwgbWlkZGxlLCB0bCkgLT5cbiAgICBfZGVlcCAobiArIDEpIChUaHJlZSAoeCwgeSwgeikpIG1pZGRsZSB0bFxuICB8IERlZXAgKG4sIFRocmVlICh5LCB6LCB6JyksIChsYXp5IHEnKSwgdGFpbCkgLT5cbiAgICBfZGVlcCAobiArIDEpIChUd28gKHgsIHkpKSAobGF6eSAoY29ucyAoeiwgeicpIHEnKSkgdGFpbFxuXG5sZXQgcmVjIHNub2MgOiB0eXBlIGEuIGEgdCAtPiBhIC0+IGEgdCA9XG4gZnVuIHEgeCAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IFplcm8gLT4gX3NpbmdsZSB4XG4gIHwgU2hhbGxvdyAoT25lIHkpIC0+IFNoYWxsb3cgKFR3byAoeSwgeCkpXG4gIHwgU2hhbGxvdyAoVHdvICh5LCB6KSkgLT4gU2hhbGxvdyAoVGhyZWUgKHksIHosIHgpKVxuICB8IFNoYWxsb3cgKFRocmVlICh5LCB6LCB6JykpIC0+XG4gICAgX2RlZXAgNCAoVHdvICh5LCB6KSkgKGxhenkgX2VtcHR5KSAoVHdvICh6JywgeCkpXG4gIHwgRGVlcCAobiwgaGQsIG1pZGRsZSwgT25lIHkpIC0+IF9kZWVwIChuICsgMSkgaGQgbWlkZGxlIChUd28gKHksIHgpKVxuICB8IERlZXAgKG4sIGhkLCBtaWRkbGUsIFR3byAoeSwgeikpIC0+XG4gICAgX2RlZXAgKG4gKyAxKSBoZCBtaWRkbGUgKFRocmVlICh5LCB6LCB4KSlcbiAgfCBEZWVwIChuLCBoZCwgKGxhenkgcScpLCBUaHJlZSAoeSwgeiwgeicpKSAtPlxuICAgIF9kZWVwIChuICsgMSkgaGQgKGxhenkgKHNub2MgcScgKHksIHopKSkgKFR3byAoeicsIHgpKVxuXG5sZXQgcmVjIHRha2VfZnJvbnRfZXhuIDogJ2EuICdhIHQgLT4gJ2EgKiAnYSB0ID1cbiBmdW4gcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IFplcm8gLT4gcmFpc2UgRW1wdHlcbiAgfCBTaGFsbG93IChPbmUgeCkgLT4geCwgZW1wdHlcbiAgfCBTaGFsbG93IChUd28gKHgsIHkpKSAtPiB4LCBTaGFsbG93IChPbmUgeSlcbiAgfCBTaGFsbG93IChUaHJlZSAoeCwgeSwgeikpIC0+IHgsIFNoYWxsb3cgKFR3byAoeSwgeikpXG4gIHwgRGVlcCAobiwgT25lIHgsIChsYXp5IHEnKSwgdGFpbCkgLT5cbiAgICBpZiBpc19lbXB0eSBxJyB0aGVuXG4gICAgICB4LCBTaGFsbG93IHRhaWxcbiAgICBlbHNlIChcbiAgICAgIGxldCAoeSwgeiksIHEnID0gdGFrZV9mcm9udF9leG4gcScgaW5cbiAgICAgIHgsIF9kZWVwIChuIC0gMSkgKFR3byAoeSwgeikpIChMYXp5LmZyb21fdmFsIHEnKSB0YWlsXG4gICAgKVxuICB8IERlZXAgKG4sIFR3byAoeCwgeSksIG1pZGRsZSwgdGFpbCkgLT4geCwgX2RlZXAgKG4gLSAxKSAoT25lIHkpIG1pZGRsZSB0YWlsXG4gIHwgRGVlcCAobiwgVGhyZWUgKHgsIHksIHopLCBtaWRkbGUsIHRhaWwpIC0+XG4gICAgeCwgX2RlZXAgKG4gLSAxKSAoVHdvICh5LCB6KSkgbWlkZGxlIHRhaWxcblxubGV0IHRha2VfZnJvbnQgcSA9IHRyeSBTb21lICh0YWtlX2Zyb250X2V4biBxKSB3aXRoIEVtcHR5IC0+IE5vbmVcblxubGV0IHRha2VfZnJvbnRfbCBuIHEgPVxuICBpZiBuIDwgMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJ0YWtlX2JhY2tfbDogY2Fubm90IHRha2UgbmVnYXRpdmUgbnVtYmVyIG9mIGFyZ3VtZW50c1wiO1xuICBsZXQgcmVjIGF1eCBhY2MgcSBuID1cbiAgICBpZiBuID0gMCB8fCBpc19lbXB0eSBxIHRoZW5cbiAgICAgIExpc3QucmV2IGFjYywgcVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHgsIHEnID0gdGFrZV9mcm9udF9leG4gcSBpblxuICAgICAgYXV4ICh4IDo6IGFjYykgcScgKG4gLSAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIHEgblxuXG5sZXQgdGFrZV9mcm9udF93aGlsZSBwIHEgPVxuICBsZXQgcmVjIGF1eCBhY2MgcSA9XG4gICAgaWYgaXNfZW1wdHkgcSB0aGVuXG4gICAgICBMaXN0LnJldiBhY2MsIHFcbiAgICBlbHNlIChcbiAgICAgIGxldCB4LCBxJyA9IHRha2VfZnJvbnRfZXhuIHEgaW5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIGF1eCAoeCA6OiBhY2MpIHEnXG4gICAgICBlbHNlXG4gICAgICAgIExpc3QucmV2IGFjYywgcVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIHFcblxubGV0IHJlYyB0YWtlX2JhY2tfZXhuIDogJ2EuICdhIHQgLT4gJ2EgdCAqICdhID1cbiBmdW4gcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IFplcm8gLT4gcmFpc2UgRW1wdHlcbiAgfCBTaGFsbG93IChPbmUgeCkgLT4gZW1wdHksIHhcbiAgfCBTaGFsbG93IChUd28gKHgsIHkpKSAtPiBfc2luZ2xlIHgsIHlcbiAgfCBTaGFsbG93IChUaHJlZSAoeCwgeSwgeikpIC0+IFNoYWxsb3cgKFR3byAoeCwgeSkpLCB6XG4gIHwgRGVlcCAobiwgaGQsIChsYXp5IHEnKSwgT25lIHgpIC0+XG4gICAgaWYgaXNfZW1wdHkgcScgdGhlblxuICAgICAgU2hhbGxvdyBoZCwgeFxuICAgIGVsc2UgKFxuICAgICAgbGV0IHEnJywgKHksIHopID0gdGFrZV9iYWNrX2V4biBxJyBpblxuICAgICAgX2RlZXAgKG4gLSAxKSBoZCAoTGF6eS5mcm9tX3ZhbCBxJycpIChUd28gKHksIHopKSwgeFxuICAgIClcbiAgfCBEZWVwIChuLCBoZCwgbWlkZGxlLCBUd28gKHgsIHkpKSAtPiBfZGVlcCAobiAtIDEpIGhkIG1pZGRsZSAoT25lIHgpLCB5XG4gIHwgRGVlcCAobiwgaGQsIG1pZGRsZSwgVGhyZWUgKHgsIHksIHopKSAtPlxuICAgIF9kZWVwIChuIC0gMSkgaGQgbWlkZGxlIChUd28gKHgsIHkpKSwgelxuXG5sZXQgdGFrZV9iYWNrIHEgPSB0cnkgU29tZSAodGFrZV9iYWNrX2V4biBxKSB3aXRoIEVtcHR5IC0+IE5vbmVcblxubGV0IHRha2VfYmFja19sIG4gcSA9XG4gIGlmIG4gPCAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcInRha2VfYmFja19sOiBjYW5ub3QgdGFrZSBuZWdhdGl2ZSBudW1iZXIgb2YgYXJndW1lbnRzXCI7XG4gIGxldCByZWMgYXV4IGFjYyBxIG4gPVxuICAgIGlmIG4gPSAwIHx8IGlzX2VtcHR5IHEgdGhlblxuICAgICAgcSwgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcScsIHggPSB0YWtlX2JhY2tfZXhuIHEgaW5cbiAgICAgIGF1eCAoeCA6OiBhY2MpIHEnIChuIC0gMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSBxIG5cblxubGV0IHRha2VfYmFja193aGlsZSBwIHEgPVxuICBsZXQgcmVjIGF1eCBhY2MgcSA9XG4gICAgaWYgaXNfZW1wdHkgcSB0aGVuXG4gICAgICBxLCBhY2NcbiAgICBlbHNlIChcbiAgICAgIGxldCBxJywgeCA9IHRha2VfYmFja19leG4gcSBpblxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgYXV4ICh4IDo6IGFjYykgcSdcbiAgICAgIGVsc2VcbiAgICAgICAgcSwgYWNjXG4gICAgKVxuICBpblxuICBhdXggW10gcVxuXG4oKiogezIgSW5kaXZpZHVhbCBleHRyYWN0aW9ufSAqKVxuXG5sZXQgZmlyc3QgcSA9IHRyeSBTb21lIChmc3QgKHRha2VfZnJvbnRfZXhuIHEpKSB3aXRoIEVtcHR5IC0+IE5vbmVcbmxldCBmaXJzdF9leG4gcSA9IGZzdCAodGFrZV9mcm9udF9leG4gcSlcbmxldCBsYXN0IHEgPSB0cnkgU29tZSAoc25kICh0YWtlX2JhY2tfZXhuIHEpKSB3aXRoIEVtcHR5IC0+IE5vbmVcbmxldCBsYXN0X2V4biBxID0gc25kICh0YWtlX2JhY2tfZXhuIHEpXG5cbmxldCBfc2l6ZV9kaWdpdCA6IHR5cGUgbC4gKCdhLCBsKSBkaWdpdCAtPiBpbnQgPSBmdW5jdGlvblxuICB8IFplcm8gLT4gMFxuICB8IE9uZSBfIC0+IDFcbiAgfCBUd28gXyAtPiAyXG4gIHwgVGhyZWUgXyAtPiAzXG5cbmxldCBzaXplIDogJ2EuICdhIHQgLT4gaW50ID0gZnVuY3Rpb25cbiAgfCBTaGFsbG93IGQgLT4gX3NpemVfZGlnaXQgZFxuICB8IERlZXAgKG4sIF8sIF8sIF8pIC0+IG5cblxubGV0IF9udGhfZGlnaXQgOiB0eXBlIGwuIGludCAtPiAoJ2EsIGwpIGRpZ2l0IC0+ICdhID1cbiBmdW4gaSBkIC0+XG4gIG1hdGNoIGksIGQgd2l0aFxuICB8IF8sIFplcm8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgMCwgT25lIHggLT4geFxuICB8IDAsIFR3byAoeCwgXykgLT4geFxuICB8IDEsIFR3byAoXywgeCkgLT4geFxuICB8IDAsIFRocmVlICh4LCBfLCBfKSAtPiB4XG4gIHwgMSwgVGhyZWUgKF8sIHgsIF8pIC0+IHhcbiAgfCAyLCBUaHJlZSAoXywgXywgeCkgLT4geFxuICB8IF8sIF8gLT4gcmFpc2UgTm90X2ZvdW5kXG5cbmxldCByZWMgbnRoX2V4biA6ICdhLiBpbnQgLT4gJ2EgdCAtPiAnYSA9XG4gZnVuIGkgcSAtPlxuICBtYXRjaCBpLCBxIHdpdGhcbiAgfCBfLCBTaGFsbG93IFplcm8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgMCwgU2hhbGxvdyAoT25lIHgpIC0+IHhcbiAgfCAwLCBTaGFsbG93IChUd28gKHgsIF8pKSAtPiB4XG4gIHwgMSwgU2hhbGxvdyAoVHdvIChfLCB4KSkgLT4geFxuICB8IDAsIFNoYWxsb3cgKFRocmVlICh4LCBfLCBfKSkgLT4geFxuICB8IDEsIFNoYWxsb3cgKFRocmVlIChfLCB4LCBfKSkgLT4geFxuICB8IDIsIFNoYWxsb3cgKFRocmVlIChfLCBfLCB4KSkgLT4geFxuICB8IF8sIFNoYWxsb3cgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBfLCBEZWVwIChfLCBsLCBxLCByKSAtPlxuICAgIGlmIGkgPCBfc2l6ZV9kaWdpdCBsIHRoZW5cbiAgICAgIF9udGhfZGlnaXQgaSBsXG4gICAgZWxzZSAoXG4gICAgICBsZXQgaScgPSBpIC0gX3NpemVfZGlnaXQgbCBpblxuICAgICAgbGV0IHEnID0gTGF6eS5mb3JjZSBxIGluXG4gICAgICBpZiBpJyA8IDIgKiBzaXplIHEnIHRoZW4gKFxuICAgICAgICBsZXQgeCwgeSA9IG50aF9leG4gKGknIC8gMikgcScgaW5cbiAgICAgICAgaWYgaScgbW9kIDIgPSAwIHRoZW5cbiAgICAgICAgICB4XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB5XG4gICAgICApIGVsc2VcbiAgICAgICAgX250aF9kaWdpdCAoaScgLSAoMiAqIHNpemUgcScpKSByXG4gICAgKVxuXG5sZXQgbnRoIGkgcSA9IHRyeSBTb21lIChudGhfZXhuIGkgcSkgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxubGV0IGluaXQgcSA9IHRyeSBmc3QgKHRha2VfYmFja19leG4gcSkgd2l0aCBFbXB0eSAtPiBxXG5sZXQgdGFpbCBxID0gdHJ5IHNuZCAodGFrZV9mcm9udF9leG4gcSkgd2l0aCBFbXB0eSAtPiBxXG5cbmxldCBhZGRfaXRlcl9mcm9udCBzZXEgcSA9XG4gIGxldCBsID0gcmVmIFtdIGluXG4gICgqIHJldmVyc2VkIHNlcSAqKVxuICBzZXEgKGZ1biB4IC0+IGwgOj0geCA6OiAhbCk7XG4gIExpc3QuZm9sZF9sZWZ0IChmdW4gcSB4IC0+IGNvbnMgeCBxKSBxICFsXG5cbmxldCBhZGRfaXRlcl9iYWNrIHEgc2VxID1cbiAgbGV0IHEgPSByZWYgcSBpblxuICBzZXEgKGZ1biB4IC0+IHEgOj0gc25vYyAhcSB4KTtcbiAgIXFcblxubGV0IF9kaWdpdF90b19pdGVyIDogdHlwZSBsLiAoJ2EsIGwpIGRpZ2l0IC0+ICdhIGl0ZXIgPVxuIGZ1biBkIGsgLT5cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgWmVybyAtPiAoKVxuICB8IE9uZSB4IC0+IGsgeFxuICB8IFR3byAoeCwgeSkgLT5cbiAgICBrIHg7XG4gICAgayB5XG4gIHwgVGhyZWUgKHgsIHksIHopIC0+XG4gICAgayB4O1xuICAgIGsgeTtcbiAgICBrIHpcblxubGV0IHJlYyB0b19pdGVyIDogJ2EuICdhIHQgLT4gJ2EgaXRlciA9XG4gZnVuIHEgayAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IGQgLT4gX2RpZ2l0X3RvX2l0ZXIgZCBrXG4gIHwgRGVlcCAoXywgaGQsIChsYXp5IHEnKSwgdGFpbCkgLT5cbiAgICBfZGlnaXRfdG9faXRlciBoZCBrO1xuICAgIHRvX2l0ZXIgcScgKGZ1biAoeCwgeSkgLT5cbiAgICAgICAgayB4O1xuICAgICAgICBrIHkpO1xuICAgIF9kaWdpdF90b19pdGVyIHRhaWwga1xuXG5sZXQgYXBwZW5kIHExIHEyID1cbiAgbWF0Y2ggcTEsIHEyIHdpdGhcbiAgfCBTaGFsbG93IFplcm8sIF8gLT4gcTJcbiAgfCBfLCBTaGFsbG93IFplcm8gLT4gcTFcbiAgfCBfIC0+IGFkZF9pdGVyX2JhY2sgcTEgKHRvX2l0ZXIgcTIpXG5cbmxldCBhZGRfc2VxX2Zyb250IHNlcSBxID1cbiAgKCogcmV2ZXJzZWQgc2VxICopXG4gIGxldCBsID0gU2VxLmZvbGRfbGVmdCAoZnVuIGwgZWx0IC0+IGVsdCA6OiBsKSBbXSBzZXEgaW5cbiAgTGlzdC5mb2xkX2xlZnQgKGZ1biBxIHggLT4gY29ucyB4IHEpIHEgbFxuXG5sZXQgYWRkX3NlcV9iYWNrIHEgc2VxID0gU2VxLmZvbGRfbGVmdCAoZnVuIHEgeCAtPiBzbm9jIHEgeCkgcSBzZXFcblxubGV0IF9kaWdpdF90b19zZXEgOiB0eXBlIGwuICgnYSwgbCkgZGlnaXQgLT4gJ2EgU2VxLnQgPVxuIGZ1biBkICgpIC0+XG4gIG1hdGNoIGQgd2l0aFxuICB8IFplcm8gLT4gU2VxLk5pbFxuICB8IE9uZSB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG4gIHwgVHdvICh4LCB5KSAtPiBTZXEuQ29ucyAoeCwgU2VxLnJldHVybiB5KVxuICB8IFRocmVlICh4LCB5LCB6KSAtPiBTZXEuQ29ucyAoeCwgZnVuICgpIC0+IFNlcS5Db25zICh5LCBTZXEucmV0dXJuIHopKVxuXG5sZXQgcmVjIHRvX3NlcSA6ICdhLiAnYSB0IC0+ICdhIFNlcS50ID1cbiBmdW4gcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IGQgLT4gX2RpZ2l0X3RvX3NlcSBkXG4gIHwgRGVlcCAoXywgaGQsIChsYXp5IHEnKSwgdGFpbCkgLT5cbiAgICBDQ1NlcS5hcHBlbmQgKF9kaWdpdF90b19zZXEgaGQpXG4gICAgICAoQ0NTZXEuYXBwZW5kXG4gICAgICAgICAoU2VxLmZsYXRfbWFwXG4gICAgICAgICAgICAoZnVuICh4LCB5KSAoKSAtPiBTZXEuQ29ucyAoeCwgU2VxLnJldHVybiB5KSlcbiAgICAgICAgICAgICh0b19zZXEgcScpKVxuICAgICAgICAgKF9kaWdpdF90b19zZXEgdGFpbCkpXG5cbmxldCBvZl9zZXEgc2VxID0gYWRkX3NlcV9mcm9udCBzZXEgZW1wdHlcblxubGV0IF9tYXBfZGlnaXQgOiB0eXBlIGwuICgnYSAtPiAnYikgLT4gKCdhLCBsKSBkaWdpdCAtPiAoJ2IsIGwpIGRpZ2l0ID1cbiBmdW4gZiBkIC0+XG4gIG1hdGNoIGQgd2l0aFxuICB8IFplcm8gLT4gWmVyb1xuICB8IE9uZSB4IC0+IE9uZSAoZiB4KVxuICB8IFR3byAoeCwgeSkgLT4gVHdvIChmIHgsIGYgeSlcbiAgfCBUaHJlZSAoeCwgeSwgeikgLT4gVGhyZWUgKGYgeCwgZiB5LCBmIHopXG5cbmxldCByZWMgbWFwIDogJ2EgJ2IuICgnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0ID1cbiBmdW4gZiBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgZCAtPiBTaGFsbG93IChfbWFwX2RpZ2l0IGYgZClcbiAgfCBEZWVwIChzaXplLCBoZCwgKGxhenkgcScpLCB0bCkgLT5cbiAgICBsZXQgcScnID0gbWFwIChmdW4gKHgsIHkpIC0+IGYgeCwgZiB5KSBxJyBpblxuICAgIF9kZWVwIHNpemUgKF9tYXBfZGlnaXQgZiBoZCkgKExhenkuZnJvbV92YWwgcScnKSAoX21hcF9kaWdpdCBmIHRsKVxuXG5sZXQgKCA+fD0gKSBxIGYgPSBtYXAgZiBxXG5cbmxldCBfZm9sZF9kaWdpdCA6IHR5cGUgbC4gKCdhY2MgLT4gJ2EgLT4gJ2FjYykgLT4gJ2FjYyAtPiAoJ2EsIGwpIGRpZ2l0IC0+ICdhY2NcbiAgICA9XG4gZnVuIGYgYWNjIGQgLT5cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgWmVybyAtPiBhY2NcbiAgfCBPbmUgeCAtPiBmIGFjYyB4XG4gIHwgVHdvICh4LCB5KSAtPiBmIChmIGFjYyB4KSB5XG4gIHwgVGhyZWUgKHgsIHksIHopIC0+IGYgKGYgKGYgYWNjIHgpIHkpIHpcblxubGV0IHJlYyBmb2xkIDogJ2EgJ2IuICgnYiAtPiAnYSAtPiAnYikgLT4gJ2IgLT4gJ2EgdCAtPiAnYiA9XG4gZnVuIGYgYWNjIHEgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBkIC0+IF9mb2xkX2RpZ2l0IGYgYWNjIGRcbiAgfCBEZWVwIChfLCBoZCwgKGxhenkgcScpLCB0bCkgLT5cbiAgICBsZXQgYWNjID0gX2ZvbGRfZGlnaXQgZiBhY2MgaGQgaW5cbiAgICBsZXQgYWNjID0gZm9sZCAoZnVuIGFjYyAoeCwgeSkgLT4gZiAoZiBhY2MgeCkgeSkgYWNjIHEnIGluXG4gICAgX2ZvbGRfZGlnaXQgZiBhY2MgdGxcblxubGV0IGl0ZXIgZiBxID0gdG9faXRlciBxIGZcbmxldCBvZl9saXN0IGwgPSBMaXN0LmZvbGRfbGVmdCBzbm9jIGVtcHR5IGxcblxubGV0IHRvX2xpc3QgcSA9XG4gIGxldCBsID0gcmVmIFtdIGluXG4gIHRvX2l0ZXIgcSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX2l0ZXIgc2VxID0gYWRkX2l0ZXJfZnJvbnQgc2VxIGVtcHR5XG5cbmxldCByZXYgcSA9XG4gIGxldCBxJyA9IHJlZiBlbXB0eSBpblxuICBpdGVyIChmdW4geCAtPiBxJyA6PSBjb25zIHggIXEnKSBxO1xuICAhcSdcblxubGV0IHJlYyBfZXF1YWxfc2VxIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEgKCksIGwyICgpIHdpdGhcbiAgfCBTZXEuTmlsLCBTZXEuTmlsIC0+IHRydWVcbiAgfCBTZXEuTmlsLCBfIHwgXywgU2VxLk5pbCAtPiBmYWxzZVxuICB8IFNlcS5Db25zICh4MSwgbDEnKSwgU2VxLkNvbnMgKHgyLCBsMicpIC0+IGVxIHgxIHgyICYmIF9lcXVhbF9zZXEgZXEgbDEnIGwyJ1xuXG5sZXQgZXF1YWwgZXEgcTEgcTIgPSBfZXF1YWxfc2VxIGVxICh0b19zZXEgcTEpICh0b19zZXEgcTIpXG5cbmxldCAoIC0tICkgYSBiID1cbiAgbGV0IHJlYyB1cF90byBxIGEgYiA9XG4gICAgaWYgYSA9IGIgdGhlblxuICAgICAgc25vYyBxIGFcbiAgICBlbHNlXG4gICAgICB1cF90byAoc25vYyBxIGEpIChhICsgMSkgYlxuICBhbmQgZG93bl90byBxIGEgYiA9XG4gICAgaWYgYSA9IGIgdGhlblxuICAgICAgc25vYyBxIGFcbiAgICBlbHNlXG4gICAgICBkb3duX3RvIChzbm9jIHEgYSkgKGEgLSAxKSBiXG4gIGluXG4gIGlmIGEgPD0gYiB0aGVuXG4gICAgdXBfdG8gZW1wdHkgYSBiXG4gIGVsc2VcbiAgICBkb3duX3RvIGVtcHR5IGEgYlxuXG5sZXQgKCAtLV4gKSBhIGIgPVxuICBpZiBhID0gYiB0aGVuXG4gICAgZW1wdHlcbiAgZWxzZSBpZiBhIDwgYiB0aGVuXG4gICAgYSAtLSAoYiAtIDEpXG4gIGVsc2VcbiAgICBhIC0tIChiICsgMSlcblxubGV0IHBwIHBwX3ggb3V0IGQgPVxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxob3YyPnF1ZXVlIHtcIjtcbiAgaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiO0AgXCI7XG4gICAgICBwcF94IG91dCB4KVxuICAgIGQ7XG4gIEZvcm1hdC5mcHJpbnRmIG91dCBcIn1AXVwiXG4iLCJsZXQgX19vY2FtbF9sZXhfdGFibGVzID0ge1xuICBMZXhpbmcubGV4X2Jhc2UgPVxuICAgXCJcXDAwMFxcMDAwXFwyNTRcXDI1NVxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfZGVmYXVsdCA9XG4gICBcIlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X3RyYW5zID1cbiAgIFwiXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMlxcMDAwXCI7XG4gIExleGluZy5sZXhfY2hlY2sgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF9iYXNlX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0X2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF90cmFuc19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY2hlY2tfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NvZGUgPVxuICAgXCJcIjtcbn1cblxubGV0IHJlYyByZWFkX2p1bmsgYnVmIG4gbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfanVua19yZWMgYnVmIG4gbGV4YnVmIDBcbmFuZCBfX29jYW1sX2xleF9yZWFkX2p1bmtfcmVjIGJ1ZiBuIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMiBcImxpYi9sZXhlcl91dGlscy5tbGxcIlxuICAgICAgICAoICgpIClcbiMgOTggXCJsaWIvbGV4ZXJfdXRpbHMubWxcIlxuXG4gIHwgMSAtPlxuIyAzIFwibGliL2xleGVyX3V0aWxzLm1sbFwiXG4gICAgICAoXG4gICAgIGlmIG4gPD0gMCB0aGVuICgpXG4gICAgIGVsc2UgYmVnaW5cbiAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIChMZXhpbmcubGV4ZW1lX2NoYXIgbGV4YnVmIDApO1xuICAgICAgIHJlYWRfanVuayBidWYgKG4gLSAxKSBsZXhidWZcbiAgICAgZW5kXG4gICAgIClcbiMgMTA5IFwibGliL2xleGVyX3V0aWxzLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9qdW5rX3JlYyBidWYgbiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuOztcblxuIyAxMSBcImxpYi9sZXhlcl91dGlscy5tbGxcIlxuIFxubGV0IHJlYWRfanVua193aXRob3V0X3Bvc2l0aW9ucyBidWYgbiAobGV4YnVmIDogTGV4aW5nLmxleGJ1ZikgPVxuICBsZXQgbGV4X2Fic19wb3MgPSBsZXhidWYubGV4X2Fic19wb3MgaW5cbiAgbGV0IGxleF9zdGFydF9wb3MgPSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICByZWFkX2p1bmsgYnVmIG4gbGV4YnVmO1xuICBsZXhidWYubGV4X3N0YXJ0X3BvcyA8LSBsZXhfc3RhcnRfcG9zICsgMTtcbiAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIGxleF9hYnNfcG9zXG5cbiMgMTI1IFwibGliL2xleGVyX3V0aWxzLm1sXCJcbiIsIm9wZW4gQnJyXG5cbnR5cGUgbWV0aG9kJyA9IEdldCB8IFBvc3RcblxubGV0IGpzdHJfb2ZfbWV0aG9kID0gZnVuY3Rpb24gR2V0IC0+IEpzdHIudiBcIkdFVFwiIHwgUG9zdCAtPiBKc3RyLnYgXCJQT1NUXCJcblxubW9kdWxlIFR5cGVzID0gc3RydWN0XG4gIHR5cGUgb3JkZXIgPSBBc2NlbmRpbmcgfCBEZXNjZW5kaW5nIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHNvcnQgPVxuICAgIHwgQWxidW1cbiAgICB8IEFsYnVtQXJ0aXN0XG4gICAgfCBBcnRpc3RcbiAgICB8IEJ1ZGdldFxuICAgIHwgQ29tbXVuaXR5UmF0aW5nXG4gICAgfCBDcml0aWNSYXRpbmdcbiAgICB8IERhdGVDcmVhdGVkXG4gICAgfCBEYXRlUGxheWVkXG4gICAgfCBQbGF5Q291bnRcbiAgICB8IFByZW1pZXJlRGF0ZVxuICAgIHwgUHJvZHVjdGlvblllYXJcbiAgICB8IFNvcnROYW1lXG4gICAgfCBSYW5kb21cbiAgICB8IFJldmVudWVcbiAgICB8IFJ1bnRpbWVcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuZW5kXG5cbnR5cGUgdXNlciA9IHtcbiAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICBzZXJ2ZXJfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIlNlcnZlck5hbWVcIl1cbiAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbn1cbltAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxubW9kdWxlIHR5cGUgUXVlcnkgPSBzaWdcbiAgdHlwZSBwYXRoX3BhcmFtc1xuICB0eXBlIHBhcmFtcyBbQEBkZXJpdmluZyB5b2pzb25dXG4gIHR5cGUgcmVzcG9uc2UgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHZhbCBtZXRob2QnIDogbWV0aG9kJ1xuICB2YWwgZW5kcG9pbnQgOiBwYXRoX3BhcmFtcyAtPiBzdHJpbmcgbGlzdFxuZW5kXG5cbm1vZHVsZSBBdXRoZW50aWNhdGVfYnlfbmFtZSA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuXG4gIHR5cGUgcGFyYW1zID0geyB1c2VybmFtZSA6IHN0cmluZzsgW0BrZXkgXCJVc2VybmFtZVwiXSBwdyA6IHN0cmluZyBbQGtleSBcIlB3XCJdIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgdXNlciA6IHVzZXI7IFtAa2V5IFwiVXNlclwiXVxuICAgIGFjY2Vzc190b2tlbiA6IHN0cmluZzsgW0BrZXkgXCJBY2Nlc3NUb2tlblwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IFBvc3RcbiAgbGV0IGVuZHBvaW50IF8gPSBbIFwiVXNlcnNcIjsgXCJBdXRoZW50aWNhdGVCeU5hbWVcIiBdXG5lbmRcblxubW9kdWxlIEl0ZW0gPSBzdHJ1Y3RcbiAgdHlwZSBpbWFnZV9ibHVyX2hhc2ggPSAoc3RyaW5nICogc3RyaW5nKSBsaXN0XG5cbiAgbGV0IGltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24geSA9XG4gICAgbGV0IGFzc29jID0gWW9qc29uLlNhZmUuVXRpbC50b19hc3NvYyB5IGluXG4gICAgTGlzdC5tYXAgKGZ1biAoa2V5LCB2KSAtPiAoa2V5LCBZb2pzb24uU2FmZS5VdGlsLnRvX3N0cmluZyB2KSkgYXNzb2NcblxuICBsZXQgeW9qc29uX29mX2ltYWdlX2JsdXJfaGFzaCBpIDogWW9qc29uLlNhZmUudCA9XG4gICAgbGV0IGFzc29jID0gTGlzdC5tYXAgKGZ1biAoa2V5LCB2KSAtPiAoa2V5LCBgU3RyaW5nIHYpKSBpIGluXG4gICAgYEFzc29jIGFzc29jXG5cbiAgdHlwZSBpbWFnZV9ibHVyX2hhc2hlcyA9IHtcbiAgICBwcmltYXJ5IDogaW1hZ2VfYmx1cl9oYXNoIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlByaW1hcnlcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgdHlwZSB0eXBlXyA9XG4gICAgfCBBZ2dyZWdhdGVGb2xkZXJcbiAgICB8IEF1ZGlvXG4gICAgfCBBdWRpb0Jvb2tcbiAgICB8IEJhc2VQbHVnaW5Gb2xkZXJcbiAgICB8IEJvb2tcbiAgICB8IEJveFNldFxuICAgIHwgQ2hhbm5lbFxuICAgIHwgQ2hhbm5lbEZvbGRlckl0ZW1cbiAgICB8IENvbGxlY3Rpb25Gb2xkZXJcbiAgICB8IEVwaXNvZGVcbiAgICB8IEZvbGRlclxuICAgIHwgR2VucmVcbiAgICB8IExpdmVUdkNoYW5uZWxcbiAgICB8IExpdmVUdlByb2dyYW1cbiAgICB8IE1hbnVhbFBsYXlsaXN0c0ZvbGRlclxuICAgIHwgTW92aWVcbiAgICB8IE11c2ljQWxidW1cbiAgICB8IE11c2ljQXJ0aXN0XG4gICAgfCBNdXNpY0dlbnJlXG4gICAgfCBNdXNpY1ZpZGVvXG4gICAgfCBQZXJzb25cbiAgICB8IFBob3RvXG4gICAgfCBQaG90b0FsYnVtXG4gICAgfCBQbGF5bGlzdFxuICAgIHwgUGxheWxpc3RzRm9sZGVyXG4gICAgfCBQcm9ncmFtXG4gICAgfCBSZWNvcmRpbmdcbiAgICB8IFNlYXNvblxuICAgIHwgU2VyaWVzXG4gICAgfCBTdHVkaW9cbiAgICB8IFRyYWlsZXJcbiAgICB8IFR2Q2hhbm5lbFxuICAgIHwgVHZQcm9ncmFtXG4gICAgfCBVc2VyUm9vdEZvbGRlclxuICAgIHwgVXNlclZpZXdcbiAgICB8IFZpZGVvXG4gICAgfCBZZWFyXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIGZpZWxkID1cbiAgICB8IEFpclRpbWVcbiAgICB8IEJhc2ljU3luY0luZm9cbiAgICB8IENhbkRlbGV0ZVxuICAgIHwgQ2FuRG93bmxvYWRcbiAgICB8IENoYW5uZWxJbWFnZVxuICAgIHwgQ2hhbm5lbEluZm9cbiAgICB8IENoYXB0ZXJzXG4gICAgfCBDaGlsZENvdW50XG4gICAgfCBDdW11bGF0aXZlUnVuVGltZVRpY2tzXG4gICAgfCBDdXN0b21SYXRpbmdcbiAgICB8IERhdGVDcmVhdGVkXG4gICAgfCBEYXRlTGFzdE1lZGlhQWRkZWRcbiAgICB8IERhdGVMYXN0UmVmcmVzaGVkXG4gICAgfCBEYXRlTGFzdFNhdmVkXG4gICAgfCBEaXNwbGF5UHJlZmVyZW5jZXNJZFxuICAgIHwgRW5hYmxlTWVkaWFTb3VyY2VEaXNwbGF5XG4gICAgfCBFdGFnXG4gICAgfCBFeHRlcm5hbEV0YWdcbiAgICB8IEV4dGVybmFsU2VyaWVzSWRcbiAgICB8IEV4dGVybmFsVXJsc1xuICAgIHwgRXh0cmFJZHNcbiAgICB8IEdlbnJlc1xuICAgIHwgSGVpZ2h0XG4gICAgfCBIb21lUGFnZVVybFxuICAgIHwgSW5oZXJpdGVkUGFyZW50YWxSYXRpbmdWYWx1ZVxuICAgIHwgSXNIRFxuICAgIHwgSXRlbUNvdW50c1xuICAgIHwgTG9jYWxUcmFpbGVyQ291bnRcbiAgICB8IE1lZGlhU291cmNlQ291bnRcbiAgICB8IE1lZGlhU291cmNlc1xuICAgIHwgTWVkaWFTdHJlYW1zXG4gICAgfCBPcmlnaW5hbFRpdGxlXG4gICAgfCBPdmVydmlld1xuICAgIHwgUGFyZW50SWRcbiAgICB8IFBhdGhcbiAgICB8IFBlb3BsZVxuICAgIHwgUGxheUFjY2Vzc1xuICAgIHwgUHJlc2VudGF0aW9uVW5pcXVlS2V5XG4gICAgfCBQcmltYXJ5SW1hZ2VBc3BlY3RSYXRpb1xuICAgIHwgUHJvZHVjdGlvbkxvY2F0aW9uc1xuICAgIHwgUHJvdmlkZXJJZHNcbiAgICB8IFJlY3Vyc2l2ZUl0ZW1Db3VudFxuICAgIHwgUmVmcmVzaFN0YXRlXG4gICAgfCBSZW1vdGVUcmFpbGVyc1xuICAgIHwgU2NyZWVuc2hvdEltYWdlVGFnc1xuICAgIHwgU2Vhc29uVXNlckRhdGFcbiAgICB8IFNlcmllc1ByZXNlbnRhdGlvblVuaXF1ZUtleVxuICAgIHwgU2VyaWVzUHJpbWFyeUltYWdlXG4gICAgfCBTZXJpZXNTdHVkaW9cbiAgICB8IFNlcnZpY2VOYW1lXG4gICAgfCBTZXR0aW5nc1xuICAgIHwgU29ydE5hbWVcbiAgICB8IFNwZWNpYWxFcGlzb2RlTnVtYmVyc1xuICAgIHwgU3BlY2lhbEZlYXR1cmVDb3VudFxuICAgIHwgU3R1ZGlvc1xuICAgIHwgU3luY0luZm9cbiAgICB8IFRhZ2xpbmVzXG4gICAgfCBUYWdzXG4gICAgfCBUaGVtZVNvbmdJZHNcbiAgICB8IFRoZW1lVmlkZW9JZHNcbiAgICB8IFdpZHRoXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICAoKiBUaGUgW1R5cGVdIGZpZWxkIGlzIGFjdHVhbGx5IGEganNvbiBzdHJpbmcgYnV0IHdlIHdhbnQgdG8gc2VlIGl0IGFzIGFcbiAgICAgdmFyaWFudCAod2hpY2ggaXMgYSBsaXN0IG9mIG9uZSBzdHJpbmcpICopXG4gIHR5cGUgdHlwZV9zdHIgPSB0eXBlX1xuXG4gIGxldCB0eXBlX3N0cl9vZl95b2pzb24gaiA9XG4gICAgbGV0IHMgPSBZb2pzb24uU2FmZS5VdGlsLnRvX3N0cmluZyBqIGluXG4gICAgdHlwZV9fb2ZfeW9qc29uIChgTGlzdCBbIGBTdHJpbmcgcyBdKVxuXG4gIGxldCB5b2pzb25fb2ZfdHlwZV9zdHIgdHMgPVxuICAgIG1hdGNoIHlvanNvbl9vZl90eXBlXyB0cyB3aXRoIGBMaXN0IFsganNvbiBdIC0+IGpzb24gfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHR5cGUgdCA9IHtcbiAgICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgICBzb3J0X25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiU29ydE5hbWVcIl1cbiAgICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxuICAgIHBhdGggOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiUGF0aFwiXVxuICAgIGFsYnVtX2lkIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIkFsYnVtSWRcIl1cbiAgICBwYXJlbnRfaWQgOiBzdHJpbmcgb3B0aW9uIG9wdGlvbjtcbiAgICAgICAgKCogW1BhcmVudElkXSBtaWdodCBhYnNlbnQsIFtudWxsXSwgb3IgYSBzdHJpbmcgKilcbiAgICAgICAgW0B5b2pzb24ub3B0aW9uXVxuICAgICAgICBbQGtleSBcIlBhcmVudElkXCJdXG4gICAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gICAgaW1hZ2VfYmx1cl9oYXNoZXMgOiBpbWFnZV9ibHVyX2hhc2hlczsgW0BrZXkgXCJJbWFnZUJsdXJIYXNoZXNcIl1cbiAgICB0eXBlXyA6IHR5cGVfc3RyOyBbQGtleSBcIlR5cGVcIl1cbiAgICBjb2xsZWN0aW9uX3R5cGUgOiBzdHJpbmcgb3B0aW9uO1xuICAgICAgICBbQGRlZmF1bHQgTm9uZV0gW0B5b2pzb25fZHJvcF9kZWZhdWx0ICggPSApXSBbQGtleSBcIkNvbGxlY3Rpb25UeXBlXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuZW5kXG5cbm1vZHVsZSBJdGVtcyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuXG4gIHR5cGUgcGFyYW1zID0ge1xuICAgIGlkcyA6IHN0cmluZyBsaXN0OyBbQGRlZmF1bHQgW11dIFtAeW9qc29uX2Ryb3BfZGVmYXVsdCAoID0gKV0gW0BrZXkgXCJpZHNcIl1cbiAgICBwYXJlbnRfaWQgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwicGFyZW50SWRcIl1cbiAgICB1c2VyX2lkIDogc3RyaW5nOyBbQGtleSBcInVzZXJJZFwiXVxuICAgIGZpZWxkcyA6IEl0ZW0uZmllbGQgbGlzdDtcbiAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgOiBJdGVtLnR5cGVfIGxpc3Q7IFtAa2V5IFwiaW5jbHVkZUl0ZW1UeXBlc1wiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50IG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInN0YXJ0SW5kZXhcIl1cbiAgICBsaW1pdCA6IGludCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl1cbiAgICBzb3J0X29yZGVyIDogVHlwZXMub3JkZXIgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwic29ydE9yZGVyXCJdXG4gICAgc29ydF9ieSA6IFR5cGVzLnNvcnQgbGlzdDsgW0BrZXkgXCJzb3J0QnlcIl1cbiAgICByZWN1cnNpdmUgOiBib29sO1xuICAgIGVuYWJsZV91c2VyX2RhdGEgOiBib29sOyBbQGtleSBcImVuYWJsZVVzZXJEYXRhXCJdXG4gICAgZW5hYmxlX2ltYWdlcyA6IGJvb2w7IFtAa2V5IFwiZW5hYmxlSW1hZ2VzXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgaXRlbXMgOiBJdGVtLnQgbGlzdDsgW0BrZXkgXCJJdGVtc1wiXVxuICAgIHRvdGFsX3JlY29yZF9jb3VudCA6IGludDsgW0BrZXkgXCJUb3RhbFJlY29yZENvdW50XCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQ7IFtAa2V5IFwiU3RhcnRJbmRleFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgXyA9IFsgXCJJdGVtc1wiIF1cbmVuZFxuXG5tb2R1bGUgVmlld3MgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHsgdXNlcl9pZCA6IHN0cmluZyB9XG5cbiAgdHlwZSBwYXJhbXMgPSB7XG4gICAgaW5jbHVkZV9leHRlcm5hbF9jb250ZW50IDogYm9vbDsgW0BrZXkgXCJpbmNsdWRlRXh0ZXJuYWxDb250ZW50XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgaXRlbXMgOiBJdGVtLnQgbGlzdDsgW0BrZXkgXCJJdGVtc1wiXVxuICAgIHRvdGFsX3JlY29yZF9jb3VudCA6IGludDsgW0BrZXkgXCJUb3RhbFJlY29yZENvdW50XCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQ7IFtAa2V5IFwiU3RhcnRJbmRleFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgcHAgPSBbIFwiVXNlcnNcIjsgcHAudXNlcl9pZDsgXCJWaWV3c1wiIF1cbmVuZFxuXG5tb2R1bGUgVmlydHVhbF9mb2xkZXJzID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG4gIHR5cGUgcGFyYW1zID0gdW5pdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSB2aXJ0dWFsX2ZvbGRlciA9IHtcbiAgICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgICBsb2NhdGlvbnMgOiBzdHJpbmcgbGlzdDsgW0BrZXkgXCJMb2NhdGlvbnNcIl1cbiAgICBpdGVtX2lkIDogc3RyaW5nOyBbQGtleSBcIkl0ZW1JZFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICB0eXBlIHJlc3BvbnNlID0gdmlydHVhbF9mb2xkZXIgbGlzdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IF8gPSBbIFwiTGlicmFyeVwiOyBcIlZpcnR1YWxGb2xkZXJzXCIgXVxuZW5kXG5cbm1vZHVsZSBTeXN0ZW0gPSBzdHJ1Y3RcbiAgbW9kdWxlIEluZm8gPSBzdHJ1Y3RcbiAgICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICAgIHR5cGUgcGFyYW1zID0gdW5pdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgICB0eXBlIHJlc3BvbnNlID0ge1xuICAgICAgbG9jYWxfYWRkcmVzcyA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIkxvY2FsQWRyZXNzXCJdXG4gICAgICBzZXJ2ZXJfbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gICAgICBwcm9kdWN0X25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJQcm9kdWN0TmFtZVwiXVxuICAgICAgb3BlcmF0aW5nX3N5c3RlbSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIk9wZXJhdGluZ1N5c3RlbVwiXVxuICAgICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICB9XG4gICAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gICAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgICBsZXQgZW5kcG9pbnQgXyA9IFsgXCJTeXN0ZW1cIjsgXCJJbmZvXCIgXVxuICBlbmRcbmVuZFxuXG4oKiBGb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGJlIGZpbGxlZCBieSB0aGUgYXBwICopXG5sZXQgc2Vzc2lvbl91dWlkID0gcmVmIE5vbmVcbmxldCBzZXRfc2Vzc2lvbl91dWlkIHMgPSBzZXNzaW9uX3V1aWQgOj0gU29tZSBzXG5cbmxldCBhdXRob3JpemF0aW9uID90b2tlbiAoKSA9XG4gIGxldCB0b2tlbiA9XG4gICAgbWF0Y2ggdG9rZW4gd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIHQgLT4gUHJpbnRmLnNwcmludGYgXCIsIFRva2VuPSVTXCIgdFxuICBpblxuICBsZXQgc2Vzc2lvbl91dWlkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OlwiXCIgIXNlc3Npb25fdXVpZCBpblxuICBQcmludGYuc3ByaW50ZlxuICAgIFwiTWVkaWFCcm93c2VyIENsaWVudD1cXFwiT2NhbWl4XFxcIiwgRGV2aWNlPVxcXCJGaXJlZm94XFxcIiwgRGV2aWNlSWQ9XFxcIiVzXFxcIiwgXFxcbiAgICAgVmVyc2lvbj1cXFwiMC4xXFxcIiVzXCJcbiAgICBzZXNzaW9uX3V1aWQgdG9rZW5cblxubGV0IHJlcXVlc3QgKHR5cGUgcHAgcCByKSB+YmFzZV91cmwgP3Rva2VuID9oZWFkZXJzXG4gICAgKG1vZHVsZSBRIDogUXVlcnlcbiAgICAgIHdpdGggdHlwZSBwYXRoX3BhcmFtcyA9IHBwXG4gICAgICAgYW5kIHR5cGUgcGFyYW1zID0gcFxuICAgICAgIGFuZCB0eXBlIHJlc3BvbnNlID0gcikgKHBhcmFtcyA6IHApIChwYXRoX3BhcmFtcyA6IHBwKSA6IHIgRnV0Lm9yX2Vycm9yID1cbiAgbGV0IG9wZW4gQnJyX2lvLkZldGNoIGluXG4gIGxldCBiYXNlX3VyaSA9IFVyaS52IChKc3RyLnYgYmFzZV91cmwpIGluXG4gIGxldCBiYXNlX3BhdGhfc2VnbWVudHMgPSBSZXN1bHQuZ2V0X29rIEBAIFVyaS5wYXRoX3NlZ21lbnRzIGJhc2VfdXJpIGluXG4gIGxldCBlbmRwb2ludF9wYXRoX3NlZ21lbnRzID0gTGlzdC5tYXAgSnN0ci52IChRLmVuZHBvaW50IHBhdGhfcGFyYW1zKSBpblxuICBsZXQgcGF0aF9zZWdtZW50cyA9XG4gICAgaWYgYmFzZV9wYXRoX3NlZ21lbnRzID0gWyBKc3RyLmVtcHR5IF0gdGhlbiBlbmRwb2ludF9wYXRoX3NlZ21lbnRzXG4gICAgZWxzZSBMaXN0LmNvbmNhdCBbIGJhc2VfcGF0aF9zZWdtZW50czsgZW5kcG9pbnRfcGF0aF9zZWdtZW50cyBdXG4gIGluXG4gIGxldCB1cmkgPSBVcmkud2l0aF9wYXRoX3NlZ21lbnRzIGJhc2VfdXJpIHBhdGhfc2VnbWVudHMgaW5cbiAgbGV0IHVyaSA9IFJlc3VsdC5nZXRfb2sgdXJpIGluXG4gIGxldCBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgaW5cbiAgbGV0IGhlYWRlcnMgPVxuICAgIEhlYWRlcnMub2ZfYXNzb2MgP2luaXQ6aGVhZGVyc1xuICAgICAgSnN0ci5cbiAgICAgICAgW1xuICAgICAgICAgICh2IFwiY29udGVudC10eXBlXCIsIHYgXCJ0ZXh0L2pzb25cIik7XG4gICAgICAgICAgKHYgXCJYLUVtYnktQXV0aG9yaXphdGlvblwiLCB2IGF1dGhvcml6YXRpb24pO1xuICAgICAgICBdXG4gIGluXG4gIGxldCBtZXRob2QnID0ganN0cl9vZl9tZXRob2QgUS5tZXRob2QnIGluXG4gIGxldCBpbml0LCB1cmwgPVxuICAgIG1hdGNoIFEubWV0aG9kJyB3aXRoXG4gICAgfCBHZXQgLT5cbiAgICAgICAgbGV0IHBhcmFtcyA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gSnNvbi5kZWNvZGUgfD4gUmVzdWx0LmdldF9vayB8PiBVcmkuUGFyYW1zLm9mX29ialxuICAgICAgICBpblxuICAgICAgICBsZXQgdXJpX3dpdGhfcGFyYW1zID0gVXJpLndpdGhfcXVlcnlfcGFyYW1zIHVyaSBwYXJhbXMgaW5cbiAgICAgICAgKFJlcXVlc3QuaW5pdCB+aGVhZGVycyB+bWV0aG9kJyAoKSwgVXJpLnRvX2pzdHIgdXJpX3dpdGhfcGFyYW1zKVxuICAgIHwgUG9zdCAtPlxuICAgICAgICBsZXQgYm9keSA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gQm9keS5vZl9qc3RyXG4gICAgICAgIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgfmJvZHkgKCksIFVyaS50b19qc3RyIHVyaSlcbiAgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KiByZXMgPSByZXF1ZXN0IEBAIFJlcXVlc3QudiB+aW5pdCB1cmwgaW5cbiAgbGV0KyBqc29uID0gUmVzcG9uc2UuYXNfYm9keSByZXMgfD4gQm9keS50ZXh0IGluXG4gIGxldCB5b2pzb24gPSBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyAoSnN0ci50b19zdHJpbmcganNvbikgaW5cbiAgdHJ5IFEucmVzcG9uc2Vfb2ZfeW9qc29uIHlvanNvblxuICB3aXRoIGUgLT5cbiAgICBDb25zb2xlLmxvZyBbIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBkZWNvZGluZyByZXNwb25zZTogXCI7IGpzb24gXTtcbiAgICBDb25zb2xlLmxvZyBbIGUgXTtcbiAgICByYWlzZSBlXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyX2lvXG5tb2R1bGUgQXBpID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5fYXBpXG5cbigqIFByb3Bvc2l0aW9uOlxuICAgLSBVc2UgcHJpbWFyeSBrZXkgdG8gcHJvdmlkZSBmaWx0ZXJpbmdcbiAgIC0gVXNlIGluZGV4IGtleXMgdG8gcHJvdmlkZSBzb3J0c1xuXG4gICBCaWcgcHJpbWFyeSBrZXlzIGRyaXZlIHRoZSBjb3N0IG9mIFtnZXRfYWxsX2tleXNdIHVwLlxuICAgV2UgY291bGQgZGVsZWdhdGUgc29tZSBmaWx0ZXJpbmcgdG8gdGhlIGluZGV4IGtleXMgaWYgbmVjZXNzYXJ5LlxuXG4gICAgV2UgY291bGQgYWxzbyB0cmllZCB0byBwcmUtcHJvY2VzcyBvciBjb21wcmVzcyB0aGUga2V5cyAqKVxuXG5sZXQgdF90b19qdiBlbmNvZGVyIHQgPVxuICBlbmNvZGVyIHQgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIub2Zfc3RyaW5nIHw+IEJyci5Kc29uLmRlY29kZVxuICB8PiBSZXN1bHQuZ2V0X2V4blxuXG5sZXQganZfdG9fdCBkZWNvZGVyIGogPVxuICBsZXQganNvbiA9IEJyci5Kc29uLmVuY29kZSBqIGluXG4gIE9rIChKc3RyLnRvX3N0cmluZyBqc29uIHw+IFlvanNvbi5TYWZlLmZyb21fc3RyaW5nIHw+IGRlY29kZXIpXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtcyA9IHN0cnVjdFxuICB0eXBlIHQgPSB7IGlkIDogaW50OyBpdGVtIDogc3RyaW5nIG9wdGlvbiB9IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gaW50XG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX2ludCBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19pbnQgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcImlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2RhdGVfYWRkZWRcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5pZFxuZW5kXG5cbm1vZHVsZSBJdGVtcyA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluLkFwaVxuXG4gIHR5cGUgc29ydHMgPSB7IGRhdGVfYWRkZWQgOiBpbnQ7IHZpZXdzIDogc3RyaW5nIGxpc3Q7IHNvcnRfbmFtZSA6IHN0cmluZyB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHQgPSB7IHNvcnRzIDogc29ydHM7IGl0ZW0gOiBJdGVtLnQgfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbGV0IGNvbXBhcmUgdCB0JyA9IFN0cmluZy5jb21wYXJlIHQuc29ydHMuc29ydF9uYW1lIHQnLnNvcnRzLnNvcnRfbmFtZVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSB7IGlkIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmc7IHZpZXdzIDogc3RyaW5nIGxpc3QgfVxuXG4gICAgbGV0IHRvX2p2IHsgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfSA9XG4gICAgICBsZXQgaWQgPSBKdi5vZl9zdHJpbmcgaWQgaW5cbiAgICAgIGxldCBzb3J0X25hbWUgPSBKdi5vZl9zdHJpbmcgc29ydF9uYW1lIGluXG4gICAgICBsZXQgdmlld3MgPSBKdi5vZl9saXN0IEp2Lm9mX3N0cmluZyB2aWV3cyBpblxuICAgICAgSnYub2ZfanZfYXJyYXkgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF1cblxuICAgIGxldCBvZl9qdiBqID1cbiAgICAgIG1hdGNoIEp2LnRvX2p2X2FycmF5IGogd2l0aFxuICAgICAgfCBbfCBpZDsgc29ydF9uYW1lOyB2aWV3cyB8XSAtPlxuICAgICAgICAgIGxldCBpZCA9IEp2LnRvX3N0cmluZyBpZCBpblxuICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lIGluXG4gICAgICAgICAgbGV0IHZpZXdzID0gSnYudG9fbGlzdCBKdi50b19zdHJpbmcgdmlld3MgaW5cbiAgICAgICAgICB7IGlkOyBzb3J0X25hbWU7IHZpZXdzIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguKFxuICAgICAgICBTIFt8IElkIFwiaXRlbS5JZFwiOyBJZCBcIml0ZW0uTmFtZVwiOyBJZCBcInNvcnRzLnZpZXdzXCIgfF0pXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfZGF0ZV9hZGRlZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9pbnQga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9faW50IGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJzb3J0cy5kYXRlX2FkZGVkXCJcbiAgZW5kXG5cbiAgbW9kdWxlIEtleV9pZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHN0cmluZ1xuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9zdHJpbmcga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9fc3RyaW5nIGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJpdGVtLklkXCJcbiAgZW5kXG5cbiAgbW9kdWxlIEtleV92aWV3X2tpbmQgPSBzdHJ1Y3RcbiAgICAoKiB0b2RvOiB1c2UgYSBlbnVtIGZvciBraW5kcyAqKVxuICAgIHR5cGUgdCA9IHsgdHlwZScgOiBzdHJpbmc7IHZpZXdzIDogc3RyaW5nIGxpc3QgfVxuXG4gICAgbGV0IHRvX2p2IF9rID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCB0eXBlJzsgdmlld3MgfF0gLT5cbiAgICAgICAgICB7IHR5cGUnID0gSnYudG9fc3RyaW5nIHR5cGUnOyB2aWV3cyA9IEp2Lih0b19saXN0IHRvX3N0cmluZyB2aWV3cykgfVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLlMgW3wgSWQgXCJpdGVtLlR5cGVcIjsgSWQgXCJzb3J0cy52aWV3c1wiIHxdXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdHlwZV9uYW1lID0gc3RydWN0XG4gICAgdHlwZSB0ID0geyBjb2xsZWN0aW9uX3R5cGUgOiBzdHJpbmc7IHNvcnRfbmFtZSA6IHN0cmluZyB9XG5cbiAgICBsZXQgdG9fanYgX3QgPSBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBvZl9qdiBqID1cbiAgICAgIG1hdGNoIEp2Lih0b19qdl9hcnJheSBqKSB3aXRoXG4gICAgICB8IFt8IGNvbGxlY3Rpb25fdHlwZTsgc29ydF9uYW1lIHxdIC0+XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sbGVjdGlvbl90eXBlID0gSnYudG9fc3RyaW5nIGNvbGxlY3Rpb25fdHlwZTtcbiAgICAgICAgICAgIHNvcnRfbmFtZSA9IEp2LnRvX3N0cmluZyBzb3J0X25hbWU7XG4gICAgICAgICAgfVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPVxuICAgICAgSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5Db2xsZWN0aW9uVHlwZVwiOyBJZCBcInNvcnRzLnNvcnRfbmFtZVwiIHxdXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJpdGVtc1wiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG5cbiAgbGV0IGdldF9rZXkgdCA9XG4gICAge1xuICAgICAgS2V5LnNvcnRfbmFtZSA9IHQuc29ydHMuc29ydF9uYW1lO1xuICAgICAgaWQgPSB0Lml0ZW0uSXRlbS5pZDtcbiAgICAgIHZpZXdzID0gdC5zb3J0cy52aWV3cztcbiAgICB9XG5lbmRcblxubW9kdWxlIFZpcnR1YWxfZm9sZGVyID0gc3RydWN0XG4gIG9wZW4gRGF0YV9zb3VyY2UuSmVsbHlmaW5fYXBpXG5cbiAgKCogdG9kbzogbXVsdGlzZXJ2ZXI6IHdlIHNob3VsZCBhZGQgYSBzZXJ2ZXJfaWQga2V5ICopXG4gIHR5cGUgdCA9IFZpcnR1YWxfZm9sZGVycy52aXJ0dWFsX2ZvbGRlciBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHN0cmluZ1xuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9zdHJpbmcga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9fc3RyaW5nIGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJJdGVtSWRcIlxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwidmlydHVhbF9mb2xkZXJzXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cbiAgbGV0IGdldF9rZXkgdCA9IHQuVmlydHVhbF9mb2xkZXJzLml0ZW1faWRcbmVuZFxuXG5tb2R1bGUgT3JkZXJyZWRfaXRlbXNfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChPcmRlcnJlZF9pdGVtcylcbm1vZHVsZSBJdGVtc19zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKEl0ZW1zKVxubW9kdWxlIFZpcnR1YWxfZm9sZGVyX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoVmlydHVhbF9mb2xkZXIpXG5cbm1vZHVsZSBJdGVtc0J5RGF0ZUFkZGVkID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2RhdGVfYWRkZWRcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV9kYXRlX2FkZGVkKVxuXG5tb2R1bGUgSXRlbXNCeVZpZXdBbmRLaW5kID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X3ZpZXdfYW5kX2tpbmRcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV92aWV3X2tpbmQpXG5cbm1vZHVsZSBJdGVtc0J5SWQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfaWRcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV9pZClcblxubW9kdWxlIEl0ZW1zQnlUeXBlQW5kTmFtZSA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV90eXBlX2FuZF9uYW1lXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfdHlwZV9uYW1lKVxuIiwib3BlbiEgU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJyclxub3BlbiBCcnJfaW8uSW5kZXhlZF9kYlxubW9kdWxlIFNvdXJjZSA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgT0kgPSBTdG9yZXMuT3JkZXJyZWRfaXRlbXNfc3RvcmVcbm1vZHVsZSBJID0gU3RvcmVzLkl0ZW1zX3N0b3JlXG5tb2R1bGUgVkYgPSBTdG9yZXMuVmlydHVhbF9mb2xkZXJfc3RvcmVcbm9wZW4gU291cmNlLkFwaVxuXG4oKiBJdGVtcyBIaWVyYXJjaHlcblxuICAgVXNlclJvb3RGb2xkZXIgKFwiTWVkaWEgRm9sZGVyc1wiIFwiZTlkNTA3NWE1NTVjMWNiYzM5NGVlYzRjZWYyOTUyNzRcIilcbiAgICAgICAgICAgICAgICAgIChHZXRzIHRoZSByb290IGZvbGRlciBmcm9tIGEgdXNlcidzIGxpYnJhcnkuIClcbiAgIF4gQ29sbGVjdGlvbkZvbGRlciAoXCJNdXNpY0xpYlwiIFwiMTUwODQ4Y2Q0ZjQ0YjlhZTMyZWM1YTc5MzRkZTM5Y2VcIilcblxuICAgQWdncmVnYXRlRm9sZGVyIChcInJvb3RcIiBcImYyN2NhYTM3ZTUxNDIyMjVjY2VkZWQ0OGY2NTUzNTAyXCIpXG4gICBeIEZvbGRlciAoXCJtZWRpYVwiIFwiOTJmZGU3MWQwZWM1NzdiNTMxZTdiMzQyN2IyMjNiZWRcIilcbiAgIF4gRm9sZGVyKyA8LSBNdXNpY0FydGlzdCA8LSBNdXNpY0FsYnVtIDwtIEF1ZGlvXG5cbiAgIEplbGx5ZmluIGNvbnNpZGVycyB0aGF0IEZvbGRlciAoXCJtZWRpYVwiIFwiOTJmZGU3MWQwZWM1NzdiNTMxZTdiMzQyN2IyMjNiZWRcIikgPT0gQ29sbGVjdGlvbkZvbGRlciAoXCJNdXNpY0xpYlwiIFwiMTUwODQ4Y2Q0ZjQ0YjlhZTMyZWM1YTc5MzRkZTM5Y2VcIilcblxuICAgVGhpcyBlcXVhbGl0eSBjYW4gYmUgcmV0cml2ZWQgYnkgcXVlcnlpbmcgdGhlIFwiVmlydHVhbEZvbGRlcnNcIiBhbmQgbG9vayBhdFxuICAgdGhlIGxvY2F0aW9ucycgcGF0aHMuIFVuZm9ydHVuYXRlbHkgdGhpcyBpcyBub3QgYWNjZXNzaWJsZSB0byB1bnByaXZpbGVkZ2VkIHVzZXJzLi4uXG5cbiAgIFRvIGFjdHVhbGx5IGtub3cgd2hpY2ggZm9sZGVycyBhcmUgcGFydCBvZiBhIHVzZXIgdmlldyB3ZSBuZWVkIHRvIHF1ZXJ5IHRoZVxuICAgaXRlbXMgdGhhdCBoYXZlIHRoaXMgdmlldydzIGlkIGFzIGEgW3BhcmVudElkXS4gVGhlIGFjdHVhbCBbcGFyZW50SWRdIG9mXG4gICB0aGVzZSBpdGVtcyB3aWxsIGJlIGRpZmZlcmVudCBhbmQgYXJlIHRoZSBpZHMgYWN0dWFsIGZvbGRlcnMgdGhhdFxuICAgY29uc3RpdHV0ZSB0aGlzIHZpZXcuXG5cbiAgIEZvciBzaW1wbGljaXR5ICg/KSB3ZSBjb25zaWRlciB0aGF0IGFuIGl0ZW0gaXMgcGFydCBvZiBhIHZpZXcgaWYgaXRzIHBhdGggaXNcbiAgIHByZWZpeGVkIGJ5IG9uZSBvZiB0aGUgdmlldydzIHZpcnR1YWwgZm9sZGVyIGxvY2F0aW9ucy5cbiopXG5cbmxldCBjaHVua19zaXplID0gNTAwXG5sZXQgaW5jbHVkZV9pdGVtX3R5cGVzID0gWyBTb3VyY2UuQXBpLkl0ZW0uTXVzaWNBcnRpc3Q7IE11c2ljQWxidW07IEF1ZGlvIF1cblxubGV0IGZldGNoX3RvdGFsX2l0ZW1fY291bnQgc291cmNlID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyByZXMgPVxuICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgIHtcbiAgICAgICAgICAoKiB0b2RvIG1ha2Ugc29ydCBleHBsaWNpdCAoYnkgZGF0ZSBhZGRlZCBkYXRlKSopXG4gICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICBmaWVsZHMgPSBbXTtcbiAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXM7XG4gICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgIGxpbWl0ID0gU29tZSAwO1xuICAgICAgICAgIHNvcnRfb3JkZXIgPSBTb21lIEFzY2VuZGluZztcbiAgICAgICAgICBzb3J0X2J5ID0gWyBEYXRlQ3JlYXRlZCBdO1xuICAgICAgICAgIHJlY3Vyc2l2ZSA9IHRydWU7XG4gICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgKClcbiAgaW5cbiAgcmVzLnRvdGFsX3JlY29yZF9jb3VudFxuXG50eXBlIGRiX2luZm9zID0ge1xuICBsYXN0X2tleSA6IGludCBvcHRpb247XG4gIGxhc3RfdmFsdWUgOiBTdG9yZXMuT3JkZXJyZWRfaXRlbXMudCBvcHRpb247XG59XG5cbmxldCBnZXRfZGJfaW5mb3MgaWRiID1cbiAgbGV0IGluZm9zLCBzZXRfaW5mb3MgPSBGdXQuY3JlYXRlICgpIGluXG4gIGxldCB0cmFuc2FjdGlvbiA9IERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSkgXSB+bW9kZTpSZWFkb25seSBpZGIgaW5cbiAgbGV0IHN0b3JlID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gIGxldCByZXEgPSBPSS5vcGVuX2N1cnNvciB+ZGlyZWN0aW9uOlByZXYgc3RvcmUgaW5cbiAgbGV0IGxhc3Rfa2V5ID0gcmVmIE5vbmUgaW5cbiAgbGV0IF8gPVxuICAgIFJlcXVlc3Qub25fc3VjY2VzcyByZXEgfmY6KGZ1biBfIHEgLT5cbiAgICAgICAgbWF0Y2ggUmVxdWVzdC5yZXN1bHQgcSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBzZXRfaW5mb3MgeyBsYXN0X2tleSA9ICFsYXN0X2tleTsgbGFzdF92YWx1ZSA9IE5vbmUgfVxuICAgICAgICB8IFNvbWUgY3Vyc29yIC0+IChcbiAgICAgICAgICAgIGlmIE9wdGlvbi5pc19ub25lICFsYXN0X2tleSB0aGVuXG4gICAgICAgICAgICAgIGxhc3Rfa2V5IDo9IE9JLkN1cnNvcl93aXRoX3ZhbHVlLmtleSBjdXJzb3I7XG4gICAgICAgICAgICBtYXRjaCBPSS5DdXJzb3Jfd2l0aF92YWx1ZS52YWx1ZSBjdXJzb3Igd2l0aFxuICAgICAgICAgICAgfCBTb21lICh7IGl0ZW0gPSBTb21lIF87IF8gfSBhcyBpdGVtKSAtPlxuICAgICAgICAgICAgICAgIHNldF9pbmZvcyB7IGxhc3Rfa2V5ID0gIWxhc3Rfa2V5OyBsYXN0X3ZhbHVlID0gU29tZSBpdGVtIH1cbiAgICAgICAgICAgIHwgXyAtPiBPSS5DdXJzb3Jfd2l0aF92YWx1ZS5jb250aW51ZSBjdXJzb3IpKVxuICBpblxuICBpbmZvc1xuXG5sZXQgaXNfZGJfY29uc2lzdGVudCB+c291cmNlOl8gfmxhc3Rfc291cmNlX2l0ZW1fa2V5IGRiX3N5bmNfaW5mb3MgPVxuICBsZXQgbGFzdF9rZXkgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6KC0xKSBkYl9zeW5jX2luZm9zLmxhc3Rfa2V5IGluXG4gIGlmIGxhc3Rfa2V5ID4gbGFzdF9zb3VyY2VfaXRlbV9rZXkgdGhlblxuICAgICgqIFRoZXJlIGFyZSBmZXdlciBpdGVtcyBpbiB0aGUgc291cmNlIHRoYW4gZXhwZWN0ZWQgKilcbiAgICBmYWxzZVxuICBlbHNlXG4gICAgKCogVG9kbzogY2hlY2sgdGhhdCB0aGUgbGFzdCBrbm93biBpdGVtIGlzIHRoZSBzYW1lIHRoYW4gaW4gdGhlIHNvdXJjZSAqKVxuICAgIHRydWVcblxudHlwZSBzdGF0dXMgPVxuICB8IFVua25vd25cbiAgfCBJbl9zeW5jXG4gIHwgSW5jb25zaXN0ZW50XG4gIHwgTmV3X2l0ZW1zIG9mIHtcbiAgICAgIGZpcnN0X21pc3Npbmdfa2V5IDogaW50O1xuICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleSA6IGludDtcbiAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IDogaW50O1xuICAgIH1cbiAgfCBQYXJ0aWFsX2ZldGNoIG9mIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA6IGludDsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgOiBpbnQgfVxuXG50eXBlIHByb2dyZXNzID0geyB0b3RhbCA6IGludDsgcmVtYWluaW5nIDogaW50IH1cbnR5cGUgcmVwb3J0ID0geyBzdGF0dXMgOiBzdGF0dXM7IHN5bmNfcHJvZ3Jlc3MgOiBwcm9ncmVzcyBvcHRpb24gfVxuXG5sZXQgaW5pdGlhbF9yZXBvcnQgPSB7IHN0YXR1cyA9IFVua25vd247IHN5bmNfcHJvZ3Jlc3MgPSBOb25lIH1cblxubGV0IHN0YXR1c190b19zdHJpbmcgPSBmdW5jdGlvblxuICB8IFVua25vd24gLT4gXCJVbmtub3duXCJcbiAgfCBJbl9zeW5jIC0+IFwiU3luY2hyb25pemVkXCJcbiAgfCBJbmNvbnNpc3RlbnQgLT4gXCJJbmNvbnNpc3RlbnRcIlxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIEZvcm1hdC5zcHJpbnRmIFwiTmV3IGl0ZW1zOiBsYXN0OiAlaSBtaXNzaW5nOiAlaSB1bmZldGNoZWQ6ICVpXCJcbiAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgZmlyc3RfbWlzc2luZ19rZXkgZmlyc3RfdW5mZXRjaGVkX2tleVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSA9IF8gfSAtPlxuICAgICAgRm9ybWF0LnNwcmludGYgXCJQYXJ0aWFsOiBsYXN0OiAlaSB1bmZldGNoZWQ6ICVpXCIgZmlyc3RfdW5mZXRjaGVkX2tleVxuICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5XG5cbmxldCBwcF9wcm9ncmVzcyBmbXQgeyB0b3RhbDsgcmVtYWluaW5nIH0gPVxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIoJWkvJWkpXCIgcmVtYWluaW5nIHRvdGFsXG5cbmxldCBwcF9yZXBvcnQgZm10IHsgc3RhdHVzOyBzeW5jX3Byb2dyZXNzIH0gPVxuICBsZXQgc3RhdHVzID0gc3RhdHVzX3RvX3N0cmluZyBzdGF0dXMgaW5cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJXMlYVwiIHN0YXR1c1xuICAgIChGb3JtYXQucHBfcHJpbnRfb3B0aW9uIHBwX3Byb2dyZXNzKVxuICAgIHN5bmNfcHJvZ3Jlc3NcblxubGV0IGxvZ19zdGF0dXMgPSBmdW5jdGlvblxuICB8IFVua25vd24gLT4gQ29uc29sZS5pbmZvIFsgXCJEYXRhYmFzZSBzdGF0dXMgaXMgdW5rbm93blwiIF1cbiAgfCBJbl9zeW5jIC0+IENvbnNvbGUuaW5mbyBbIFwiRGF0YWJhc2UgaXMgc3luY2hyb25pemVkXCIgXVxuICB8IEluY29uc2lzdGVudCAtPiBDb25zb2xlLndhcm4gWyBcIkRhdGFiYXNlIGlzIG91dC1vZi1zeW5jXCIgXVxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIENvbnNvbGUuaW5mb1xuICAgICAgICBbXG4gICAgICAgICAgXCJOZXcgaXRlbXMgd2VyZSBhZGRlZCB0byB0aGUgc291cmNlLlwiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfbWlzc2luZ19rZXkgKyAxO1xuICAgICAgICAgIFwibmV3IGl0ZW1zXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF91bmZldGNoZWRfa2V5ICsgMTtcbiAgICAgICAgICBcInVuZmV0Y2hlZCBpdGVtc1wiO1xuICAgICAgICBdXG4gIHwgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0gLT5cbiAgICAgIENvbnNvbGUuaW5mb1xuICAgICAgICBbXG4gICAgICAgICAgXCJTb21lIGl0ZW1zIGhhdmUgbm90IGJlZW4gZmV0Y2hlZCB5ZXQuXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF91bmZldGNoZWRfa2V5ICsgMTtcbiAgICAgICAgICBcInVuZmV0Y2hlZCBpdGVtc1wiO1xuICAgICAgICBdXG5cbmxldCBjaGVja19zdGF0dXMgfnNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gIGxldCogZGJfaW5mb3MgPSBnZXRfZGJfaW5mb3MgaWRiIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgdG90YWxfaXRlbV9jb3VudCA9IGZldGNoX3RvdGFsX2l0ZW1fY291bnQgc291cmNlIGluXG4gICgqIEtleXMgc3RhcnQgYXQgMCwgaXQncyBuYXR1cmFsIHRvIGNvdW50IGl0ZW0gYnkgc3RhcnRpbmcgd2l0aCAwICopXG4gIGxldCBsYXN0X3NvdXJjZV9pdGVtX2tleSA9IHRvdGFsX2l0ZW1fY291bnQgLSAxIGluXG4gIGlmIG5vdCAoaXNfZGJfY29uc2lzdGVudCB+c291cmNlIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9pbmZvcykgdGhlblxuICAgIEluY29uc2lzdGVudFxuICBlbHNlXG4gICAgbWF0Y2ggZGJfaW5mb3Mgd2l0aFxuICAgIHwgeyBsYXN0X2tleSA9IE5vbmU7IGxhc3RfdmFsdWUgPSBOb25lIH0gLT5cbiAgICAgICAgKCogVGhlIGRiIGhhcyBub3QgeWV0IGJlZW4gcG9wdWxhdGVkIHdpdGggcGxhY2Vob2xkZXJzICopXG4gICAgICAgIE5ld19pdGVtc1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpcnN0X21pc3Npbmdfa2V5ID0gMDtcbiAgICAgICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSAwO1xuICAgICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICAgICAgfVxuICAgIHwgeyBsYXN0X2tleSA9IFNvbWUga2V5OyBsYXN0X3ZhbHVlID0gaXRlbSB9IHdoZW4ga2V5IDwgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgICAgIC0+XG4gICAgICAgICgqIE5ldyBpdGVtcyB3ZXJlIGFkZGVkIHRvIHRoZSBzb3VyY2Ugc2luY2UgdGhlIGxhc3Qgc3luYyAqKVxuICAgICAgICBsZXQgZmlyc3RfdW5mZXRjaGVkX2tleSA9XG4gICAgICAgICAgbWF0Y2ggaXRlbSB3aXRoIE5vbmUgLT4gMCB8IFNvbWUgeyBpZDsgXyB9IC0+IGlkICsgMVxuICAgICAgICBpblxuICAgICAgICBOZXdfaXRlbXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaXJzdF9taXNzaW5nX2tleSA9IGtleSArIDE7XG4gICAgICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5O1xuICAgICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICAgICAgfVxuICAgIHwgeyBsYXN0X2tleSA9IFNvbWUga2V5OyBsYXN0X3ZhbHVlID0gaXRlbSB9IHdoZW4ga2V5ID0gbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgICAgIC0+IChcbiAgICAgICAgbWF0Y2ggaXRlbSB3aXRoXG4gICAgICAgIHwgU29tZSB7IGlkOyBfIH0gd2hlbiBpZCA9IGtleSAtPiBJbl9zeW5jXG4gICAgICAgIHwgU29tZSB7IGlkOyBfIH0gLT5cbiAgICAgICAgICAgIFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5ID0gaWQgKyAxOyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSAwOyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9KVxuICAgIHwgXyAtPiBJbmNvbnNpc3RlbnRcblxubGV0IHVwZGF0ZV92aWV3cyBzb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyB2aWV3cyA9XG4gICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLlZpZXdzKVxuICAgICAgeyBpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQgPSBmYWxzZSB9XG4gICAgICB7IHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkIH1cbiAgaW5cbiAgTGlzdC5pdGVyIHZpZXdzLml0ZW1zIH5mOihmdW4gKGl0ZW0gOiBJdGVtLnQpIC0+XG4gICAgICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICAgICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKTsgKG1vZHVsZSBJKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICAgIGluXG4gICAgICBsZXQgc19pdGVtcyA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIEkpIHRyYW5zYWN0aW9uIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gT3B0aW9uLnZhbHVlIGl0ZW0uc29ydF9uYW1lIH5kZWZhdWx0Oml0ZW0ubmFtZSBpblxuICAgICAgSS5wdXQgeyBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA9IC0xOyB2aWV3cyA9IFtdOyBzb3J0X25hbWUgfTsgaXRlbSB9IHNfaXRlbXNcbiAgICAgIHw+IGlnbm9yZSk7XG4gIHZpZXdzXG5cbmxldCBkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmlld3Mgc291cmNlICh2aWV3cyA6IFZpZXdzLnJlc3BvbnNlKSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCBwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4geyBJdGVtLmlkOyBfIH0gPVxuICAgIGxldCsgcmVzID1cbiAgICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgICAgcGFyZW50X2lkID0gU29tZSBpZDtcbiAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgZmllbGRzID0gWyBQYXJlbnRJZCBdO1xuICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzID0gW107XG4gICAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgICBsaW1pdCA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X29yZGVyID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfYnkgPSBbXTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKClcbiAgICBpblxuICAgIExpc3QuZm9sZF9sZWZ0IH5pbml0OlN0cmluZy5TZXQuZW1wdHkgcmVzLml0ZW1zXG4gICAgICB+ZjooZnVuIHNldCB7IEl0ZW0ucGFyZW50X2lkOyBfIH0gLT5cbiAgICAgICAgbWF0Y2ggcGFyZW50X2lkIHdpdGhcbiAgICAgICAgfCBOb25lIHwgU29tZSBOb25lIC0+IHNldFxuICAgICAgICB8IFNvbWUgKFNvbWUgcGlkKSAtPiBTdHJpbmcuU2V0LmFkZCBwaWQgc2V0KVxuICBpblxuICBsZXQgcGF0aHNfb2ZfcGFyZW50cyBwYXJlbnRzID1cbiAgICBsZXQrIHJlcyA9XG4gICAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZHMgPSBTdHJpbmcuU2V0LnRvX2xpc3QgcGFyZW50cztcbiAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgIGZpZWxkcyA9IFsgUGF0aCBdO1xuICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzID0gW107XG4gICAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgICBsaW1pdCA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X29yZGVyID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfYnkgPSBbXTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKClcbiAgICBpblxuICAgIExpc3QuZmlsdGVyX21hcCByZXMuaXRlbXMgfmY6KGZ1biB7IEl0ZW0uaWQ7IHBhdGg7IF8gfSAtPlxuICAgICAgICBPcHRpb24ubWFwIChmdW4gcGF0aCAtPiAoaWQsIHBhdGgpKSBwYXRoKVxuICBpblxuICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gIGxldCsgcmVzdWx0ID1cbiAgICBMaXN0Lm1hcCB2aWV3cy5pdGVtcyB+ZjooZnVuICh7IEl0ZW0uaWQ7IF8gfSBhcyB2aWV3KSAtPlxuICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICBsZXQqIHBhcmVudHMgPSBwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4gdmlldyBpblxuICAgICAgICBsZXQrIHBhdGhzID0gcGF0aHNfb2ZfcGFyZW50cyBwYXJlbnRzIGluXG4gICAgICAgIChpZCwgcGF0aHMpKVxuICAgIHw+IEZ1dC5vZl9saXN0XG4gIGluXG4gIFJlc3VsdC5mbGF0dGVuX2wgcmVzdWx0XG5cbmxldCB2aWV3c19vZl9wYXRoICh2Zm9sZGVycyA6IChzdHJpbmcgKiAoc3RyaW5nICogc3RyaW5nKSBsaXN0KSBsaXN0KSBwYXRoID1cbiAgKCogV2UgbG9vayBhdCB0aGUgcHJlZml4IG9mIGEgcGF0aCB0byBkZXRlcm1pbmUgd2hpY2ggdmlydHVhbF9mb2xkZXIgKGFuZCB0aHVzXG4gICAgIHZpZXcpIGl0J3MgYSBwYXJ0IG9mLiAqKVxuICBMaXN0LmZpbHRlcl9tYXAgdmZvbGRlcnMgfmY6KGZ1biAodmlld19pZCwgbG9jYXRpb25zKSAtPlxuICAgICAgaWYgTGlzdC5leGlzdHMgbG9jYXRpb25zIH5mOihmdW4gKF8sIHByZSkgLT4gU3RyaW5nLnByZWZpeCB+cHJlIHBhdGgpIHRoZW5cbiAgICAgICAgU29tZSB2aWV3X2lkXG4gICAgICBlbHNlIE5vbmUpXG5cbmxldCBzeW5jID8ocmVwb3J0ID0gZnVuIF8gLT4gKCkpIH4oc291cmNlIDogU291cmNlLmNvbm5leGlvbikgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IG1ha2VfcGxhY2Vob2xkZXJzIGZpcnN0IGxhc3QgPVxuICAgICgqIHRvZG86IGVycm9yIGhhbmRsaW5nICopXG4gICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgaW5cbiAgICBsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgICBmb3IgaSA9IGZpcnN0IHRvIGxhc3QgZG9cbiAgICAgIGlnbm9yZSBAQCBPSS5wdXQgeyBpZCA9IGk7IGl0ZW0gPSBOb25lIH0gc3RvcmVcbiAgICBkb25lXG4gIGluXG4gIGxldCBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0IGxhc3QgPVxuICAgIGxldCBvcGVuIFNvdXJjZSBpblxuICAgIGxldCogdmlld3MgPSB1cGRhdGVfdmlld3Mgc291cmNlIGlkYiBpblxuICAgIGxldCogdmZvbGRlcnMgPSBkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmlld3Mgc291cmNlIHZpZXdzIGluXG4gICAgbGV0ICgpID0gQ29uc29sZS5pbmZvIFsgXCJGZXRjaGluZyBpdGVtc1wiOyBmaXJzdDsgXCJ0b1wiOyBsYXN0OyBcIjpcIiBdIGluXG4gICAgbGV0IGZldGNoX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgbGV0IHRvdGFsID0gbGFzdCAtIGZpcnN0ICsgMSBpblxuICAgIGxldCByZWMgZW5xdWV1ZSB+c3RhcnRfaW5kZXggdG9kbyA9XG4gICAgICBpZiB0b2RvID4gMCB0aGVuIChcbiAgICAgICAgbGV0IGxpbWl0ID0gbWluIHRvZG8gY2h1bmtfc2l6ZSBpblxuICAgICAgICBsZXQgcmVxID1cbiAgICAgICAgICBBcGkuSXRlbXMuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICgqIHRvZG8gbWFrZSBzb3J0IGV4cGxpY2l0IChieSBkYXRlIGFkZGVkIGRhdGUpICopXG4gICAgICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgICAgZmllbGRzID0gWyBQYXJlbnRJZDsgUGF0aCBdO1xuICAgICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXM7XG4gICAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gU29tZSBzdGFydF9pbmRleDtcbiAgICAgICAgICAgICAgbGltaXQgPSBTb21lIGxpbWl0O1xuICAgICAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgICAgIHNvcnRfYnkgPSBbIERhdGVDcmVhdGVkIF07XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIGluXG4gICAgICAgIFF1ZXVlLmFkZCByZXEgZmV0Y2hfcXVldWU7XG4gICAgICAgIGVucXVldWUgfnN0YXJ0X2luZGV4OihzdGFydF9pbmRleCArIGxpbWl0KSAodG9kbyAtIGxpbWl0KSlcbiAgICBpblxuICAgIGVucXVldWUgfnN0YXJ0X2luZGV4OmZpcnN0IHRvdGFsO1xuICAgIGxldCB0b3RhbF9xdWVyaWVzID0gUXVldWUubGVuZ3RoIGZldGNoX3F1ZXVlIGluXG4gICAgbGV0IHJlYyBydW5fcXVldWUgPyh0aHJlYWRzID0gMSkgcSA9XG4gICAgICBhc3NlcnQgKHRocmVhZHMgPiAwKTtcbiAgICAgIGxldCByZWMgdGFrZV9uIGFjYyBuID1cbiAgICAgICAgaWYgbiA9IDAgdGhlbiBMaXN0LnJldiBhY2NcbiAgICAgICAgZWxzZVxuICAgICAgICAgIG1hdGNoIFF1ZXVlLnRha2Vfb3B0IHEgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICAgICAgICB8IFNvbWUgZWx0IC0+IHRha2VfbiAoZWx0IDo6IGFjYykgKG4gLSAxKVxuICAgICAgaW5cbiAgICAgIGxldCBmIHJlcSA9XG4gICAgICAgIGxldCsgeyBBcGkuSXRlbXMuc3RhcnRfaW5kZXg7IGl0ZW1zOyBfIH0gPVxuICAgICAgICAgIHF1ZXJ5IHNvdXJjZSAobW9kdWxlIEFwaS5JdGVtcykgcmVxICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCAoKSA9XG4gICAgICAgICAgcmVwb3J0XG4gICAgICAgICAgQEAgU29tZVxuICAgICAgICAgICAgICAgeyB0b3RhbCA9IHRvdGFsX3F1ZXJpZXM7IHJlbWFpbmluZyA9IFF1ZXVlLmxlbmd0aCBmZXRjaF9xdWV1ZSB9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBpZGJfcHV0IH5zdGFydF9pbmRleCBpdGVtcyA9XG4gICAgICAgICAgbGV0IG9wZW4gQnJyX2lvLkluZGV4ZWRfZGIgaW5cbiAgICAgICAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKTsgKG1vZHVsZSBJKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBzX2xpc3QgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgICAgICBsZXQgc19pdGVtcyA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIEkpIHRyYW5zYWN0aW9uIGluXG4gICAgICAgICAgTGlzdC5pdGVyaSBpdGVtcyB+ZjooZnVuIGluZGV4ICh7IEFwaS5JdGVtLmlkOyBwYXRoOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gc3RhcnRfaW5kZXggKyBpbmRleCBpblxuICAgICAgICAgICAgICBsZXQgcGF0aCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpcIlwiIHBhdGggaW5cbiAgICAgICAgICAgICAgbGV0IHZpZXdzID0gdmlld3Nfb2ZfcGF0aCB2Zm9sZGVycyBwYXRoIGluXG4gICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBPcHRpb24udmFsdWUgaXRlbS5zb3J0X25hbWUgfmRlZmF1bHQ6aXRlbS5uYW1lIGluXG4gICAgICAgICAgICAgIGlnbm9yZSAoT0kucHV0IHsgaWQgPSBpbmRleDsgaXRlbSA9IFNvbWUgaWQgfSBzX2xpc3QpO1xuICAgICAgICAgICAgICBpZ25vcmVcbiAgICAgICAgICAgICAgICAoSS5wdXRcbiAgICAgICAgICAgICAgICAgICB7IHNvcnRzID0geyBkYXRlX2FkZGVkID0gaW5kZXg7IHZpZXdzOyBzb3J0X25hbWUgfTsgaXRlbSB9XG4gICAgICAgICAgICAgICAgICAgc19pdGVtcykpXG4gICAgICAgIGluXG4gICAgICAgIGlkYl9wdXQgfnN0YXJ0X2luZGV4IGl0ZW1zXG4gICAgICBpblxuICAgICAgbGV0IHJlcXMgPSB0YWtlX24gW10gdGhyZWFkcyBpblxuICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgbGV0KiByZXFzID0gRnV0Lm9mX2xpc3QgKExpc3QubWFwIH5mIHJlcXMpIGluXG4gICAgICBpZiBMaXN0LmlzX2VtcHR5IHJlcXMgdGhlbiBGdXQub2sgKCkgZWxzZSBydW5fcXVldWUgcVxuICAgIGluXG4gICAgcnVuX3F1ZXVlIGZldGNoX3F1ZXVlXG4gIGluXG4gIGZ1bmN0aW9uXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgbWFrZV9wbGFjZWhvbGRlcnMgZmlyc3RfbWlzc2luZ19rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0X3VuZmV0Y2hlZF9rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdF91bmZldGNoZWRfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gIHwgSW5jb25zaXN0ZW50IC0+IEZ1dC5vayAoKVxuICB8IF8gLT4gRnV0Lm9rICgpXG5cbmxldCBjaGVja19hbmRfc3luYyA/cmVwb3J0IH5zb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KiBzdGF0dXMgPSBjaGVja19zdGF0dXMgfnNvdXJjZSBpZGIgaW5cbiAgbGV0IGluaXRpYWwgPSB7IGluaXRpYWxfcmVwb3J0IHdpdGggc3RhdHVzIH0gaW5cbiAgbGV0IHJlcG9ydCcgPVxuICAgIE9wdGlvbi5tYXBcbiAgICAgIChmdW4gcmVwb3J0IC0+XG4gICAgICAgIGxldCAoKSA9ICgqIFNlbmQgYSBmaXJzdCByZXBvcnQgKikgcmVwb3J0IGluaXRpYWwgaW5cbiAgICAgICAgZnVuIHN5bmNfcHJvZ3Jlc3MgLT4gcmVwb3J0IHsgaW5pdGlhbCB3aXRoIHN5bmNfcHJvZ3Jlc3MgfSlcbiAgICAgIHJlcG9ydFxuICBpblxuICBsZXQrICgpID0gc3luYyA/cmVwb3J0OnJlcG9ydCcgfnNvdXJjZSBpZGIgc3RhdHVzIGluXG4gIE9wdGlvbi5pdGVyXG4gICAgKGZ1biByZXBvcnQgLT4gcmVwb3J0IHsgc3RhdHVzID0gSW5fc3luYzsgc3luY19wcm9ncmVzcyA9IE5vbmUgfSlcbiAgICByZXBvcnRcbiIsInR5cGUgbGFuZycgPSBGciB8IEVuXG5cbm1vZHVsZSBDb25maWcgOiBCcnJfbHdkX3VpLlRyYW5zbGF0ZWQuQ29uZmlnIHdpdGggdHlwZSBsYW5nID0gbGFuZycgPSBzdHJ1Y3RcbiAgdHlwZSBsYW5nID0gbGFuZydcblxuICBsZXQgc3RyaW5ncyA9XG4gICAgW1xuICAgICAgKChGciwgXCJjbGlja1wiKSwgXCJDbGlxdWV6IHN1ciBsZSBib3V0b24gIVwiKTtcbiAgICAgICgoRW4sIFwiY2xpY2tcIiksIFwiQ2xpY2sgb24gdGhlIEJ1dHRvbiAhXCIpO1xuICAgIF1cblxuICBsZXQgYWN0aXZlID0gTHdkLnZhciBGclxuXG4gIGxldCBnZXQgbGFuZyBzdHJpbmcgPVxuICAgIExpc3QuYXNzb2Nfb3B0IChsYW5nLCBzdHJpbmcpIHN0cmluZ3MgfD4gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OnN0cmluZ1xuZW5kXG5cbmxldCBzZXQsIF9zID0gQnJyX2x3ZF91aS5UcmFuc2xhdGVkLm1ha2UgKG1vZHVsZSBDb25maWcpXG5sZXQgX3MgcyBmID0gTHdkLm1hcCAoX3MgcykgfmZcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJyclxuXG5pbmNsdWRlIERiLldvcmtlcl9hcGkuU3RhcnRfY2xpZW50IChzdHJ1Y3RcbiAgbGV0IHVybCA9IFwiLi9kYl93b3JrZXIuYmMuanNcIlxuZW5kKVxuXG5sZXQgc2VydmVyc19zdGF0dXMgPVxuICBsZXQgdmFyID0gTHdkLnZhciAoXCJcIiwgRGIuU3luYy5pbml0aWFsX3JlcG9ydCkgaW5cbiAgbGV0IF8gPVxuICAgIGxpc3RlbiBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgfmY6KGZ1biAoaWQsIHJlcG9ydCkgLT5cbiAgICAgICAgQ29uc29sZS5sb2dcbiAgICAgICAgICBbIEZvcm1hdC5hc3ByaW50ZiBcIlNlcnZlciAlczogJWFcIiBpZCBEYi5TeW5jLnBwX3JlcG9ydCByZXBvcnQgXTtcbiAgICAgICAgTHdkLnNldCB2YXIgKGlkLCByZXBvcnQpKVxuICBpblxuICB2YXJcblxubGV0IHVwZGF0ZSA/KGVxID0gRXF1YWwucG9seSkgdmFyIG5leHQgPVxuICBsZXQgY3VycmVudCA9IEx3ZC5wZWVrIHZhciBpblxuICBpZiBub3QgKGVxIGN1cnJlbnQgbmV4dCkgdGhlbiBMd2Quc2V0IHZhciBuZXh0XG5cbmxldCBnZXRfdmlld19pdGVtX2NvdW50ID1cbiAgbGV0IG1lbW8gOiAoVmlldy5yZXEsIGludCBMd2QudmFyKSBIYXNodGJsLnQgPVxuICAgICgqIHRvZG8gbWVtb3J5IGxlYWsgKikgSGFzaHRibC5jcmVhdGUgNjRcbiAgaW5cbiAgZnVuIHYgLT5cbiAgICBsZXQgaXRlbV9jb3VudCA9IEhhc2h0YmwuZ2V0X29yX2FkZCBtZW1vIH5rOnYgfmY6KGZ1biBfIC0+IEx3ZC52YXIgMCkgaW5cbiAgICBGdXQuYXdhaXQgKHF1ZXJ5IChDcmVhdGVfdmlldyB2KSkgKGZ1bmN0aW9uXG4gICAgICB8IE9rIHYgLT5cbiAgICAgICAgICBDb25zb2xlLmRlYnVnXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIFwiSXRlbSBjb3VudDpcIjtcbiAgICAgICAgICAgICAgdi5WaWV3Lml0ZW1fY291bnQ7XG4gICAgICAgICAgICAgIFwiU3RhcnQgb2Zmc2V0OlwiO1xuICAgICAgICAgICAgICB2LlZpZXcuc3RhcnRfb2Zmc2V0O1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICB1cGRhdGUgaXRlbV9jb3VudCB2Lml0ZW1fY291bnRcbiAgICAgIHwgZXJyb3IgLT5cbiAgICAgICAgICBDb25zb2xlLmRlYnVnIFsgXCJFUlJPUlwiOyBlcnJvciBdO1xuICAgICAgICAgIHVwZGF0ZSBpdGVtX2NvdW50IDApO1xuICAgIEx3ZC5nZXQgaXRlbV9jb3VudFxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyXG5cbnR5cGUgc2VydmVyID0ge1xuICBjb25uZXhpb24gOiBEUy5jb25uZXhpb247XG4gIHN0YXR1cyA6IERiLlN5bmMucmVwb3J0IEx3ZC52YXI7XG4gIHJlZnJlc2ggOiB1bml0IEx3ZC52YXI7XG59XG5cbmxldCBjb25uZXhpb25zIDogKHN0cmluZyAqIERTLmNvbm5leGlvbikgTHdkX3NlcS50IEx3ZC52YXIgPVxuICBCcnJfbHdkX3VpLlBlcnNpc3RlbnQudmFyIH5rZXk6XCJ1aV9zZXJ2ZXJzXCIgTHdkX3NlcS5lbXB0eVxuXG5sZXQgY29ubmVjdCAoc2VydmVyX2lkLCB7IGNvbm5leGlvbjsgc3RhdHVzOyByZWZyZXNoIH0pID1cbiAgbGV0IF8gPVxuICAgIFdvcmtlcl9jbGllbnQubGlzdGVuIFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSB+ZjooZnVuIChpZCwgcmVwb3J0KSAtPlxuICAgICAgICAoKiBUT0RPOiBzdWJzY3JpYmUgdG8gYSBzcGVjaWZpYyBzZXJ2ZXIncyB1cGRhdGVzICopXG4gICAgICAgIGxldCBwcmV2aW91c19zdGF0dXMgPSBMd2QucGVlayBzdGF0dXMgaW5cbiAgICAgICAgaWYgU3RyaW5nLmVxdWFsIHNlcnZlcl9pZCBpZCB0aGVuIChcbiAgICAgICAgICBMd2Quc2V0IHN0YXR1cyByZXBvcnQ7XG4gICAgICAgICAgbWF0Y2ggKHByZXZpb3VzX3N0YXR1cy5zeW5jX3Byb2dyZXNzLCByZXBvcnQuc3luY19wcm9ncmVzcykgd2l0aFxuICAgICAgICAgIHwgU29tZSB7IHJlbWFpbmluZzsgXyB9LCBTb21lIHsgcmVtYWluaW5nID0gcmVtYWluaW5nJzsgXyB9XG4gICAgICAgICAgICB3aGVuIHJlbWFpbmluZyA8PiByZW1haW5pbmcnIC0+XG4gICAgICAgICAgICAgIEx3ZC5zZXQgcmVmcmVzaCAoKVxuICAgICAgICAgIHwgU29tZSBfLCBOb25lIC0+IEx3ZC5zZXQgcmVmcmVzaCAoKVxuICAgICAgICAgIHwgXyAtPiAoKSkpXG4gIGluXG4gIGlnbm9yZSAoV29ya2VyX2NsaWVudC5xdWVyeSBAQCBBZGRfc2VydmVycyBbIChzZXJ2ZXJfaWQsIGNvbm5leGlvbikgXSlcblxubGV0IHNlcnZlcnNfd2l0aF9zdGF0dXMgPVxuICBMd2Rfc2VxLm1hcFxuICAgIChmdW4gKGlkLCBjb25uZXhpb24pIC0+XG4gICAgICBsZXQgc3RhdHVzID0gTHdkLnZhciBEYi5TeW5jLmluaXRpYWxfcmVwb3J0IGluXG4gICAgICBsZXQgcmVmcmVzaCA9IEx3ZC52YXIgKCkgaW5cbiAgICAgIGxldCBzZXJ2ZXIgPSAoaWQsIHsgY29ubmV4aW9uOyBzdGF0dXM7IHJlZnJlc2ggfSkgaW5cbiAgICAgIGNvbm5lY3Qgc2VydmVyO1xuICAgICAgc2VydmVyKVxuICAgIChMd2QuZ2V0IGNvbm5leGlvbnMpXG5cbmxldCBuZXdfY29ubmV4aW9uIH5iYXNlX3VybCB+dXNlcm5hbWUgfnBhc3N3b3JkID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyBjb25uZXhpb24gPSBEUy5jb25uZWN0IHsgYmFzZV91cmw7IHVzZXJuYW1lOyBwYXNzd29yZCB9IGluXG4gIGxldCBzZXJ2ZXJfaWQgPSBjb25uZXhpb24uYXV0aF9yZXNwb25zZS5zZXJ2ZXJfaWQgaW5cbiAgKCogVE9ETyBDSEVDSyBTRVJWRVIgSUQgKilcbiAgTHdkLnVwZGF0ZVxuICAgIChmdW4gc2VydmVycyAtPiBMd2Rfc2VxLihjb25jYXQgc2VydmVycyAoZWxlbWVudCAoc2VydmVyX2lkLCBjb25uZXhpb24pKSkpXG4gICAgY29ubmV4aW9uc1xuXG5tb2R1bGUgQ29ubmVjdF9mb3JtID0gc3RydWN0XG4gIG9wZW4gQnJyX2x3ZF91aS5Gb3Jtcy5Gb3JtXG5cbiAgdHlwZSB0ID0ge1xuICAgIHVybCA6IHN0cmluZyBGaWVsZC52YWxpZGF0aW9uO1xuICAgIHVzZXJuYW1lIDogc3RyaW5nIEZpZWxkLnZhbGlkYXRpb247XG4gICAgcGFzc3dvcmQgOiBzdHJpbmcgRmllbGQudmFsaWRhdGlvbjtcbiAgfVxuXG4gIGxldCBkZWZhdWx0ID0geyB1cmwgPSBFbXB0eTsgdXNlcm5hbWUgPSBFbXB0eTsgcGFzc3dvcmQgPSBFbXB0eSB9XG5cbiAgbGV0IGZpZWxkcyA9XG4gICAgbGV0IHVybF9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmVcbiAgICAgICAgQEAgRmllbGQudGV4dF9pbnB1dCB+cmVxdWlyZWQ6dHJ1ZVxuICAgICAgICAgICAgIChTb21lIFwiaHR0cHM6Ly9kZW1vLmplbGx5ZmluLm9yZy9zdGFibGVcIikpXG4gICAgICAgIChmdW4gdCB2IC0+IHsgdCB3aXRoIHVybCA9IHYgfSlcbiAgICBpblxuICAgIGxldCB1c2VybmFtZV9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmUgQEAgRmllbGQudGV4dF9pbnB1dCB+cmVxdWlyZWQ6dHJ1ZSAoU29tZSBcImRlbW9cIikpXG4gICAgICAgIChmdW4gdCB2IC0+IHsgdCB3aXRoIHVzZXJuYW1lID0gdiB9KVxuICAgIGluXG4gICAgbGV0IHBhc3N3b3JkX2ZpZWxkID1cbiAgICAgIGZpZWxkXG4gICAgICAgIChMd2QucHVyZSBAQCBGaWVsZC5wYXNzd29yZF9pbnB1dCB+cmVxdWlyZWQ6ZmFsc2UgTm9uZSlcbiAgICAgICAgKGZ1biB0IHYgLT4geyB0IHdpdGggcGFzc3dvcmQgPSB2IH0pXG4gICAgaW5cbiAgICBsZXQgc3VibWl0ID1cbiAgICAgIGZpZWxkIChMd2QucHVyZSBAQCBGaWVsZC5zdWJtaXQgKGBQIFwiQ29ubmVjdFwiKSkgKGZ1biB0IF92IC0+IHQpXG4gICAgaW5cbiAgICBMd2QucmV0dXJuXG4gICAgICAoTHdkX3NlcS5vZl9saXN0IFsgdXJsX2ZpZWxkOyB1c2VybmFtZV9maWVsZDsgcGFzc3dvcmRfZmllbGQ7IHN1Ym1pdCBdKVxuZW5kXG5cbmxldCB1aV9mb3JtICgpID1cbiAgbGV0IG9wZW4gQnJyX2x3ZF91aS5Gb3Jtcy5Gb3JtIGluXG4gIGNyZWF0ZVxuICAgIChtb2R1bGUgQ29ubmVjdF9mb3JtKVxuICAgIChmdW4gdCAtPlxuICAgICAgQ29uc29sZS5sb2cgWyBcIkZvcm0gc3VibWl0dGVkOlwiOyB0IF07XG4gICAgICBtYXRjaCB0IHdpdGhcbiAgICAgICgqIEZJWE1FOiB2YWxpZGF0aW9uIGFscmVhZHkgaGFwcGVuZWQsIGl0J3MgcmVkdW5kYW50IHRvIGhhdmUgdG8gbWF0Y2ggKilcbiAgICAgIHwgeyB1cmwgPSBPayB1cmw7IHVzZXJuYW1lID0gT2sgdXNlcm5hbWU7IHBhc3N3b3JkID0gT2sgcGFzc3dvcmQgfSAtPlxuICAgICAgICAgIENvbnNvbGUubG9nIFsgXCJGb3JtIHN1Ym1pdHRlZDpcIjsgdXJsOyB1c2VybmFtZSBdO1xuICAgICAgICAgIGlnbm9yZSBAQCBuZXdfY29ubmV4aW9uIH5iYXNlX3VybDp1cmwgfnVzZXJuYW1lIH5wYXNzd29yZFxuICAgICAgfCB7IHVybCA9IE9rIHVybDsgdXNlcm5hbWUgPSBPayB1c2VybmFtZTsgXyB9IC0+XG4gICAgICAgICAgQ29uc29sZS5sb2cgWyBcIkZvcm0gc3VibWl0dGVkOlwiOyB1cmw7IHVzZXJuYW1lIF07XG4gICAgICAgICAgaWdub3JlIEBAIG5ld19jb25uZXhpb24gfmJhc2VfdXJsOnVybCB+dXNlcm5hbWUgfnBhc3N3b3JkOlwiXCJcbiAgICAgIHwgXyAtPiAoKSlcblxubGV0IHVpX3N0YXR1cyBzZXJ2ZXIgPVxuICBsZXQgc3RhdHVzID1cbiAgICBMd2QubWFwIChMd2QuZ2V0IHNlcnZlci5zdGF0dXMpIH5mOihmdW4geyBzdGF0dXM7IHN5bmNfcHJvZ3Jlc3MgfSAtPlxuICAgICAgICBtYXRjaCAoc3RhdHVzLCBzeW5jX3Byb2dyZXNzKSB3aXRoXG4gICAgICAgIHwgSW5fc3luYywgTm9uZSAtPiBFbC50eHQnIFwiU3luY2hyb25pemVkXCJcbiAgICAgICAgfCBfLCBTb21lIHsgRGIuU3luYy50b3RhbDsgcmVtYWluaW5nIH0gLT5cbiAgICAgICAgICAgIEVsLnR4dCdcbiAgICAgICAgICAgIEBAIFByaW50Zi5zcHJpbnRmIFwiU3luYyBpbiBwcm9ncmVzczogJWkvJWlcIiAodG90YWwgLSByZW1haW5pbmcpXG4gICAgICAgICAgICAgICAgIHRvdGFsXG4gICAgICAgIHwgXyAtPiBFbC50eHQnIFwiRGVzeW5jaHJvbml6ZWRcIilcbiAgaW5cbiAgc3RhdHVzXG5cbmxldCBmdXRfdG9fbHdkIH5pbml0IGYgPVxuICBsZXQgdiA9IEx3ZC52YXIgaW5pdCBpblxuICBsZXQgKCkgPSBGdXQuYXdhaXQgZiAoTHdkLnNldCB2KSBpblxuICBMd2QuZ2V0IHZcblxubGV0IHNlcV9zaGFyZSB+Y21wIH5wcmV2IG5leHQgPVxuICBsZXQgcmVjIGF1eCBwcmV2IG5leHQgPVxuICAgIG1hdGNoIChMd2Rfc2VxLnZpZXcgcHJldiwgTHdkX3NlcS52aWV3IG5leHQpIHdpdGhcbiAgICB8IEVtcHR5LCBFbXB0eSAtPiAocHJldiwgdHJ1ZSlcbiAgICB8IEVsZW1lbnQgaSwgRWxlbWVudCBpJyB3aGVuIGNtcCBpIGknIC0+IChwcmV2LCB0cnVlKVxuICAgIHwgQ29uY2F0IChsLCByKSwgQ29uY2F0IChsJywgcicpIC0+XG4gICAgICAgIGxldCBsLCBsX3NhbWUgPSBhdXggbCBsJyBpblxuICAgICAgICBsZXQgciwgcl9zYW1lID0gYXV4IHIgcicgaW5cbiAgICAgICAgaWYgbF9zYW1lICYmIHJfc2FtZSB0aGVuIChwcmV2LCB0cnVlKSBlbHNlIChMd2Rfc2VxLmNvbmNhdCBsIHIsIGZhbHNlKVxuICAgIHwgXywgXyAtPiAobmV4dCwgZmFsc2UpXG4gIGluXG4gIGZzdCBAQCBhdXggcHJldiBuZXh0XG5cbmxldCBzZXJ2ZXJzX2xpYnJhcmllcyA9XG4gIGxldCBsaWJfZGlmZiB+cHJldiBuZXh0ID1cbiAgICBsZXQgb3BlbiBEYi5TdG9yZXMuSXRlbXMgaW5cbiAgICBzZXFfc2hhcmUgfmNtcDooZnVuIGkgaScgLT4gU3RyaW5nLihpLml0ZW0uaWQgPSBpJy5pdGVtLmlkKSkgfnByZXYgbmV4dFxuICBpblxuICBMd2Rfc2VxLm1hcFxuICAgIChmdW4gKHNlcnZlcl9pZCwgeyByZWZyZXNoOyBfIH0pIC0+XG4gICAgICBDb25zb2xlLmxvZyBbIFwiTkVXIFJFRlwiIF07XG4gICAgICBsZXQgcHJldmlvdXNfdmFsdWUgPSByZWYgTm9uZSBpblxuICAgICAgbGV0IHYgPVxuICAgICAgICBMd2QuYmluZCAoTHdkLmdldCByZWZyZXNoKSB+ZjooZnVuICgpIC0+XG4gICAgICAgICAgICBXb3JrZXJfY2xpZW50LnF1ZXJ5IChHZXRfc2VydmVyX2xpYnJhcmllcyBzZXJ2ZXJfaWQpXG4gICAgICAgICAgICB8PiBGdXQubWFwIChSZXN1bHQuZ2V0X29yIH5kZWZhdWx0OltdKVxuICAgICAgICAgICAgfD4gRnV0Lm1hcCAoZnVuIGwgLT5cbiAgICAgICAgICAgICAgICAgICBDb25zb2xlLmxvZyBbIFwiR09UIEw9XCI7IGwgXTtcbiAgICAgICAgICAgICAgICAgICBsKVxuICAgICAgICAgICAgfD4gRnV0Lm1hcCBMd2Rfc2VxLm9mX2xpc3RcbiAgICAgICAgICAgICgqIEZJWE1FOiBUaGlzIGlzIGJhZDogd2UgY3JlYXRlIGEgbHdkIHZhciBlYWNoIHRpbWUgd2UgcmVmcmVzaFxuICAgICAgICAgICAgICAgYW5kIHRoaXEgdmFyIGhhZCBhbiBlbXB0eSBzZXEgdmFsdWUuIFRoaXMgY2F1c2VkIGZsaWNrZXJpbmdcbiAgICAgICAgICAgICAgIHdoZW4gc3luY2luZy4gSGF2aW5nIHRoZSBjb3JyZWN0IGluaXRpYWwgdmFsdWUgaXMgbm90IGEgbXVjaFxuICAgICAgICAgICAgICAgYmV0dGVyIG9wdGlvbiBzaW5jZSB0aGVyZSBhcmUgc3RpbGwgdG8gbHdkIHVwZGF0ZXMgaW5zdGVhZCBvZlxuICAgICAgICAgICAgICAgb25lLiBXZSBwcm9iYWJseSBuZWVkIHByb3BlciBwb2xsaW5nIGFuZCBhIHJvb3QuICopXG4gICAgICAgICAgICB8PiBmdXRfdG9fbHdkXG4gICAgICAgICAgICAgICAgIH5pbml0OihPcHRpb24udmFsdWUgfmRlZmF1bHQ6THdkX3NlcS5lbXB0eSAhcHJldmlvdXNfdmFsdWUpKVxuICAgICAgaW5cbiAgICAgIGxldCB2aWV3cyA9XG4gICAgICAgIEx3ZC5tYXBcbiAgICAgICAgICB+ZjooZnVuIHYgLT5cbiAgICAgICAgICAgIGxldCBuZXdfdmFsdWUgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OnZcbiAgICAgICAgICAgICAgICAoZnVuIHByZXYgLT4gbGliX2RpZmYgfnByZXYgdilcbiAgICAgICAgICAgICAgICAhcHJldmlvdXNfdmFsdWVcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBwcmV2aW91c192YWx1ZSA6PSBTb21lIG5ld192YWx1ZTtcbiAgICAgICAgICAgIG5ld192YWx1ZSlcbiAgICAgICAgICB2XG4gICAgICBpblxuICAgICAgKHNlcnZlcl9pZCwgdmlld3MpKVxuICAgIHNlcnZlcnNfd2l0aF9zdGF0dXNcblxubGV0IHVpICgpID1cbiAgbGV0IHN0YXR1c2VzID1cbiAgICBMd2Rfc2VxLm1hcCAoZnVuIChfLCBzZXJ2ZXIpIC0+IHVpX3N0YXR1cyBzZXJ2ZXIpIHNlcnZlcnNfd2l0aF9zdGF0dXNcbiAgaW5cbiAgbGV0IHVpX2Zvcm0gPVxuICAgIEx3ZC5tYXAgc2VydmVyc193aXRoX3N0YXR1cyB+ZjooZnVuIHMgLT5cbiAgICAgICAgbWF0Y2ggTHdkX3NlcS52aWV3IHMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IEx3ZF9zZXEuZWxlbWVudCBAQCBFbHdkLmRpdiBbIGBSICh1aV9mb3JtICgpKSBdXG4gICAgICAgIHwgXyAtPiBMd2Rfc2VxLmVtcHR5KVxuICBpblxuICBFbHdkLmRpdiBbIGBTIChMd2Rfc2VxLmxpZnQgdWlfZm9ybSk7IGBTIChMd2Rfc2VxLmxpZnQgc3RhdHVzZXMpIF1cbiIsIm9wZW4hIEltcG9ydFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG50eXBlIHBsYXlzdGF0ZSA9IHtcbiAgcGxheWxpc3QgOiBEYi5WaWV3LnJhbmdlZCBvcHRpb24gTHdkLnZhcjtcbiAgY3VycmVudF9pbmRleCA6IGludCBMd2QudmFyO1xufVxuXG50eXBlIHQgPSBFbHdkLnQgTHdkLnRcblxubGV0IHBsYXlzdGF0ZSA9IHsgcGxheWxpc3QgPSBMd2QudmFyIE5vbmU7IGN1cnJlbnRfaW5kZXggPSBMd2QudmFyIDAgfVxuXG50eXBlIG5vd19wbGF5aW5nID0geyBpdGVtIDogRFMuQXBpLkl0ZW0udDsgdXJsIDogc3RyaW5nIH1cblxubGV0IG5vd19wbGF5aW5nID0gTHdkLnZhciBOb25lXG5cbigqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vamVsbHlmaW4vamVsbHlmaW4vYmxvYi80Nzg2OTAxYmI3OTZjM2U5MTJmMTNiNjg2NTcxZmRlOGQxNmY0OWM1L3Rlc3RzL0plbGx5ZmluLk1vZGVsLlRlc3RzL1Rlc3QlMjBEYXRhL0RldmljZVByb2ZpbGUtRmlyZWZveC5qc29uICopXG5cbigqKiBQbGF5YmFjayBpc3N1ZSB3aXRoIGFsYWMgZmlsZXMgKGFuZCBwcm9iYWJseSBhbGwgY29kZWNzIG5vbi1uYXRpdmVseVxuICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyKVxuICAgIC0gU29tZSBjbGllbnRzIChzb25peGQpIGdpdmUgdXAsIG1wdiBiYXNlZCBwbGF5ZXJzIHdvcmsuXG4gICAgLSBUaGUgb2ZmaWNpYWwgY2xpZW50IG1hbmFnZSB0byBwbGF5IHRoZSBmaWxlIGJ1dCBnaXZlcyBhIGJsb2IgdG8gdGhlIGF1ZGlvXG4gICAgICBwbGF5ZXIgaW5zdGVhZCBvZiBhIGhscyB1cmwgYXMgaXQgZG9lcyBmb3Igb3RoZXIgZmlsZXMuXG4gICAgLSBKZWxseWZpbiBzaG91bGQgdXNlIHRoZSBkZXZpY2UgaWQgYW5kIGFzc29jaWF0ZWQgY2FwYWJpbGl0aWVzIHRvXG4gICAgICBhdXRvbWF0aWNhbGx5IHRyYW5zY29kZSwgc2hvdWxkbid0IGl0ID9cblxuKilcbmxldCBhdWRpb191cmwgKHNlcnZlciA6IERTLmNvbm5leGlvbikgaXRlbV9pZCA9XG4gIFByaW50Zi5zcHJpbnRmXG4gICAgXCIlcy9BdWRpby8lcy91bml2ZXJzYWw/YXBpX2tleT0lcyZhdWRpb0NvZGVjPWFhYyZjb250YWluZXI9b3B1cyxtcDMsYWFjLG00YSxtNGIsZmxhYyx3YXYsb2dnJnRyYW5zY29kaW5nQ29udGFpbmVyPXRzJnRyYW5zY29kaW5nUHJvdG9jb2w9aGxzXCJcbiAgICBzZXJ2ZXIuYmFzZV91cmwgaXRlbV9pZCBzZXJ2ZXIuYXV0aF9yZXNwb25zZS5hY2Nlc3NfdG9rZW5cblxubW9kdWxlIFBsYXliYWNrX2NvbnRyb2xsZXIgKFAgOiBzaWdcbiAgdmFsIGZldGNoIDpcbiAgICBWaWV3LnJhbmdlZCAtPlxuICAgIGludCBhcnJheSAtPlxuICAgIChEYi5TdG9yZXMuSXRlbXMudCBvcHRpb24gYXJyYXksIERiLldvcmtlcl9hcGkuZXJyb3IpIEZ1dC5yZXN1bHRcbmVuZCkgPVxuc3RydWN0XG4gIGxldCBzZXRfcGxheV91cmwgcGxheWxpc3QgY3VycmVudF9pbmRleCA9XG4gICAgbWF0Y2ggcGxheWxpc3Qgd2l0aFxuICAgIHwgTm9uZSAtPiBGdXQub2sgKClcbiAgICB8IFNvbWUgcGxheWxpc3QgLT5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgbGV0KyBpdGVtID1cbiAgICAgICAgICBsZXQrIHJlc3VsdCA9IFAuZmV0Y2ggcGxheWxpc3QgW3wgY3VycmVudF9pbmRleCB8XSBpblxuICAgICAgICAgIG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgICAgICAgfCBbfCBTb21lIHsgRGIuU3RvcmVzLkl0ZW1zLml0ZW07IF8gfSB8XSAtPlxuICAgICAgICAgICAgICBsZXQgeyBEUy5BcGkuSXRlbS5zZXJ2ZXJfaWQ7IGlkOyBhbGJ1bV9pZDsgbmFtZTsgXyB9ID0gaXRlbSBpblxuICAgICAgICAgICAgICBsZXQgc2VydmVycyA9IEx3ZF9zZXEudG9fbGlzdCAoTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zKSBpblxuICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID0gTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzIGluXG4gICAgICAgICAgICAgIGxldCB1cmwgPSBhdWRpb191cmwgY29ubmV4aW9uIGlkIGluXG4gICAgICAgICAgICAgIGxldCAoKSA9IENvbnNvbGUubG9nIFsgXCJOb3cgcGxheWluZzpcIjsgbmFtZTsgSnYub2Zfc3RyaW5nIHVybCBdIGluXG4gICAgICAgICAgICAgIGxldCAoKSA9XG4gICAgICAgICAgICAgICAgbGV0IG9wZW4gQnJyX2lvLk1lZGlhLlNlc3Npb24gaW5cbiAgICAgICAgICAgICAgICBsZXQgc2Vzc2lvbiA9IG9mX25hdmlnYXRvciBHLm5hdmlnYXRvciBpblxuICAgICAgICAgICAgICAgIGxldCBpbWFnZV9pZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDppZCBhbGJ1bV9pZCBpblxuICAgICAgICAgICAgICAgIGxldCBpbWdfc3JjID1cbiAgICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgICAgICAgIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9NTAwJmZvcm1hdD1KcGdcIlxuICAgICAgICAgICAgICAgICAgICBjb25uZXhpb24uYmFzZV91cmwgaW1hZ2VfaWRcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IG5hbWUgaW5cbiAgICAgICAgICAgICAgICBsZXQgYWxidW0gPSBcIlwiIGluXG4gICAgICAgICAgICAgICAgbGV0IGFydGlzdCA9IFwiXCIgaW5cbiAgICAgICAgICAgICAgICBsZXQgYXJ0d29yayA9XG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBNZWRpYV9tZXRhZGF0YS5zcmMgPSBpbWdfc3JjO1xuICAgICAgICAgICAgICAgICAgICAgIHNpemVzID0gXCI1MDB4NTAwXCI7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZScgPSBcImltYWdlL2pwZWdcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIHNldF9tZXRhZGF0YSBzZXNzaW9uIHsgdGl0bGU7IGFydGlzdDsgYWxidW07IGFydHdvcmsgfVxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICB7IGl0ZW07IHVybCB9XG4gICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICBpblxuICAgICAgICBMd2Quc2V0IG5vd19wbGF5aW5nIChTb21lIGl0ZW0pXG5cbiAgbGV0IHJlc2V0X3BsYXlsaXN0IHBsYXlsaXN0ID1cbiAgICBpZ25vcmUgQEAgc2V0X3BsYXlfdXJsIChTb21lIHBsYXlsaXN0KSAwO1xuICAgIEx3ZC5zZXQgcGxheXN0YXRlLnBsYXlsaXN0IChTb21lIHBsYXlsaXN0KTtcbiAgICBMd2Quc2V0IHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IDBcblxuICBsZXQgbWFrZSAoKSA9XG4gICAgbGV0IGF1ZGlvX2VsdCA9XG4gICAgICBFbC5hdWRpb1xuICAgICAgICB+YXQ6XG4gICAgICAgICAgW1xuICAgICAgICAgICAgQXQudiAoSnN0ci52IFwiY29udHJvbHNcIikgKEpzdHIudiBcInRydWVcIik7XG4gICAgICAgICAgICBBdC52IChKc3RyLnYgXCJhdXRvcGxheVwiKSAoSnN0ci52IFwidHJ1ZVwiKTtcbiAgICAgICAgICAgIEF0LnYgKEpzdHIudiBcInByZWxvYWRcIikgKEpzdHIudiBcImF1dG9cIik7XG4gICAgICAgICAgXVxuICAgICAgICBbXVxuICAgIGluXG4gICAgbGV0IHNldF9zcmMgdXJsID0gRWwuc2V0X2F0IChKc3RyLnYgXCJzcmNcIikgKFNvbWUgKEpzdHIudiB1cmwpKSBhdWRpb19lbHQgaW5cbiAgICBsZXQgX2F1dG9fcGxheSA9XG4gICAgICAoKiBXZSBjYW5ub3QgcmVseSBvbiB0aGUgbWFpbiBbTHdkXSBvYnNlcnZlciBmb3IgcGxheWJhY2sgY29udHJvbCBiZWNhdXNlXG4gICAgICAgICBpdCBpcyB0aWVkIHRvIHRoZSBbcmVxdWVzdEFuaW1hdGlvbkZyYW1lc10gY2FsbGJhY2suIFRoaXMgcHJldmVudCB0aGVcbiAgICAgICAgIHBsYXllciB0byBzdGFydCBwbGF5aW5nIHRoZSBuZXh0IHNvbmcgaWYgdGhlIHRhYiBpcyBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICAgICopXG4gICAgICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIChMd2QuZ2V0IG5vd19wbGF5aW5nKSBpblxuICAgICAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+XG4gICAgICAgICAgbWF0Y2ggTHdkLnF1aWNrX3NhbXBsZSByb290IHdpdGhcbiAgICAgICAgICB8IFNvbWUgeyB1cmw7IF8gfSAtPiBzZXRfc3JjIHVybFxuICAgICAgICAgIHwgTm9uZSAtPiAoKSk7XG4gICAgICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG4gICAgaW5cbiAgICBsZXQgbmV4dCAoKSA9XG4gICAgICBsZXQgcGxheWxpc3QgPSBMd2QucGVlayBwbGF5c3RhdGUucGxheWxpc3QgaW5cbiAgICAgIGxldCBjdXJyZW50X2luZGV4ID0gTHdkLnBlZWsgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggaW5cbiAgICAgIGxldCBuZXh0X2luZGV4ID0gY3VycmVudF9pbmRleCArIDEgaW5cbiAgICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgcGxheWxpc3QgbmV4dF9pbmRleDtcbiAgICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggbmV4dF9pbmRleFxuICAgIGluXG4gICAgbGV0IHByZXYgKCkgPVxuICAgICAgbGV0IHBsYXlsaXN0ID0gTHdkLnBlZWsgcGxheXN0YXRlLnBsYXlsaXN0IGluXG4gICAgICBsZXQgY3VycmVudF9pbmRleCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IGluXG4gICAgICBsZXQgbmV4dF9pbmRleCA9IG1heCAwIChjdXJyZW50X2luZGV4IC0gMSkgaW5cbiAgICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgcGxheWxpc3QgbmV4dF9pbmRleDtcbiAgICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggbmV4dF9pbmRleFxuICAgIGluXG4gICAgbGV0IHNldF9wb3NpdGlvbl9zdGF0ZSA9XG4gICAgICAoKiBFbmFibGUgY29udHJvbCBmcm9tIE9TICopXG4gICAgICBsZXQgb3BlbiBCcnJfaW8uTWVkaWEuU2Vzc2lvbiBpblxuICAgICAgbGV0IHNlc3Npb24gPSBvZl9uYXZpZ2F0b3IgRy5uYXZpZ2F0b3IgaW5cbiAgICAgIGxldCBzZXRfcG9zaXRpb25fc3RhdGUgKCkgPVxuICAgICAgICBsZXQgZHVyYXRpb24gPSBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJkdXJhdGlvblwiKSkgYXVkaW9fZWx0IGluXG4gICAgICAgIGlmIG5vdCAoRmxvYXQuaXNfbmFuIGR1cmF0aW9uKSB0aGVuXG4gICAgICAgICAgbGV0IHBsYXliYWNrX3JhdGUgPVxuICAgICAgICAgICAgRWwucHJvcCAoRWwuUHJvcC5mbG9hdCAoSnN0ci52IFwicGxheWJhY2tSYXRlXCIpKSBhdWRpb19lbHRcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9XG4gICAgICAgICAgICBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJjdXJyZW50VGltZVwiKSkgYXVkaW9fZWx0XG4gICAgICAgICAgaW5cbiAgICAgICAgICBzZXRfcG9zaXRpb25fc3RhdGUgfmR1cmF0aW9uIH5wbGF5YmFja19yYXRlIH5wb3NpdGlvbiBzZXNzaW9uXG4gICAgICBpblxuICAgICAgc2V0X2FjdGlvbl9oYW5kbGVyIHNlc3Npb24gQWN0aW9uLm5leHRfdHJhY2sgbmV4dDtcbiAgICAgIHNldF9hY3Rpb25faGFuZGxlciBzZXNzaW9uIEFjdGlvbi5wcmV2aW91c190cmFjayBwcmV2O1xuICAgICAgc2V0X3Bvc2l0aW9uX3N0YXRlXG4gICAgaW5cbiAgICBsZXQgb25fZXJyb3IgZXYgPVxuICAgICAgRXYuc3RvcF9pbW1lZGlhdGVfcHJvcGFnYXRpb24gZXY7XG4gICAgICBFdi5wcmV2ZW50X2RlZmF1bHQgZXY7XG4gICAgICBDb25zb2xlLmxvZ1xuICAgICAgICBbXG4gICAgICAgICAgXCJBIHBsYXliYWNrIGVycm9yIGhhcHBlbmVkLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGNvZGVjIFxcXG4gICAgICAgICAgIHVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLlwiO1xuICAgICAgICAgIGV2O1xuICAgICAgICBdO1xuICAgICAgbmV4dCAoKVxuICAgIGluXG4gICAgbGV0IG5leHQgXyA9IG5leHQgKCkgaW5cbiAgICBsZXQgKCkgPVxuICAgICAgbGV0IHRhcmdldCA9IEVsLmFzX3RhcmdldCBhdWRpb19lbHQgaW5cbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYuZW5kZWQgbmV4dCB0YXJnZXQ7XG4gICAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2LmVycm9yIG9uX2Vycm9yIHRhcmdldDtcbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYucGxheSAoZnVuIF8gLT4gc2V0X3Bvc2l0aW9uX3N0YXRlICgpKSB0YXJnZXRcbiAgICBpblxuICAgIGxldCBidG5fbmV4dCA9XG4gICAgICBCcnJfbHdkX3VpLkJ1dHRvbi52IH5ldjpbIGBQIChFbHdkLmhhbmRsZXIgRXYuY2xpY2sgbmV4dCkgXSAoYFAgXCJORVhUXCIpXG4gICAgaW5cbiAgICBsZXQgb3BlbiBCcnJfbHdkX3VpIGluXG4gICAgbGV0IG5vd19wbGF5aW5nID1cbiAgICAgIGxldCB0cmFja19jb3ZlciA9XG4gICAgICAgIGxldCBzdHlsZSA9XG4gICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCBub3dfcGxheWluZykgfmY6KGZ1biBucCAtPlxuICAgICAgICAgICAgICBsZXQgc3JjID1cbiAgICAgICAgICAgICAgICBtYXRjaCBucCB3aXRoXG4gICAgICAgICAgICAgICAgfCBOb25lIC0+IFwidHJhY2sucG5nXCJcbiAgICAgICAgICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZDsgYWxidW1faWQ7IHNlcnZlcl9pZDsgXyB9OyBfIH0gLT5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlX2lkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmlkIGFsYnVtX2lkIGluXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXJ2ZXJzID1cbiAgICAgICAgICAgICAgICAgICAgICBMd2Rfc2VxLnRvX2xpc3QgKEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucylcbiAgICAgICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzXG4gICAgICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgICAgICgqIHRvZG86IHRoaXMgaXMgZG9uZSBpbiBtdWx0aXBsZSBwbGFjZXMsIHdlIHNob3VsZCBmYWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdXQuICopXG4gICAgICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgICAgICAgICAgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD01MDAmZm9ybWF0PUpwZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uLmJhc2VfdXJsIGltYWdlX2lkXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCVTKVwiIHNyYylcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGF0ID1cbiAgICAgICAgICBBdHRycy4oXG4gICAgICAgICAgICBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwibm93LXBsYXlpbmctY292ZXJcIikgW11cbiAgICAgICAgICAgIHw+IGFkZCBBdC5OYW1lLnN0eWxlIChgUiBzdHlsZSkpXG4gICAgICAgIGluXG4gICAgICAgIGxldCBvbl9jbGljayA9XG4gICAgICAgICAgRWx3ZC5oYW5kbGVyIEV2LmNsaWNrIChmdW4gXyAtPlxuICAgICAgICAgICAgICAobWF0Y2ggTHdkLnBlZWsgQXBwX3N0YXRlLmFjdGl2ZV9sYXlvdXQgd2l0aFxuICAgICAgICAgICAgICB8IEtpb3NrIC0+IE1haW5cbiAgICAgICAgICAgICAgfCBNYWluIC0+IEtpb3NrKVxuICAgICAgICAgICAgICB8PiBMd2Quc2V0IEFwcF9zdGF0ZS5hY3RpdmVfbGF5b3V0KVxuICAgICAgICBpblxuICAgICAgICBFbHdkLmRpdiB+YXQgfmV2OlsgYFAgb25fY2xpY2sgXSBbXVxuICAgICAgaW5cbiAgICAgIGxldCB0cmFja19kZXRhaWxzID1cbiAgICAgICAgbGV0IGF0ID0gQXR0cnMuYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcIm5vdy1wbGF5aW5nLWRldGFpbHNcIikgW10gaW5cbiAgICAgICAgbGV0IHRpdGxlID1cbiAgICAgICAgICBsZXQgdHh0ID1cbiAgICAgICAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgbm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICAgICAgICB8IE5vbmUgLT4gRWwudHh0JyBcIk5vdGhpbmcgcGxheWluZ1wiXG4gICAgICAgICAgICAgIHwgU29tZSB7IGl0ZW0gPSB7IG5hbWU7IF8gfTsgXyB9IC0+IEVsLnR4dCcgbmFtZSlcbiAgICAgICAgICBpblxuICAgICAgICAgIEVsd2Quc3BhbiBbIGBSIHR4dCBdXG4gICAgICAgIGluXG4gICAgICAgIEVsd2QuZGl2IH5hdCBbIGBSIHRpdGxlIF1cbiAgICAgIGluXG4gICAgICBsZXQgYXQgPVxuICAgICAgICBBdHRycy4oXG4gICAgICAgICAgYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcImJveFwiKSBbXVxuICAgICAgICAgIHw+IGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJub3ctcGxheWluZy1kaXNwbGF5XCIpKVxuICAgICAgaW5cbiAgICAgIEVsd2QuZGl2IH5hdCBbIGBSIHRyYWNrX2NvdmVyOyBgUiB0cmFja19kZXRhaWxzIF1cbiAgICBpblxuICAgIGxldCBhdCA9XG4gICAgICBBdHRycy4oXG4gICAgICAgIGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJwbGF5ZXItd3JhcHBlclwiKSBbXVxuICAgICAgICB8PiBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwiYm94XCIpKVxuICAgIGluXG4gICAgRWx3ZC5kaXYgfmF0IFsgYFIgbm93X3BsYXlpbmc7IGBQIGF1ZGlvX2VsdDsgYFIgYnRuX25leHQgXVxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBhZGRpbmcgcG9zaXRpb24uICopXG50eXBlIHBhZHR5ID1cbiAgfCBMZWZ0ICAgKCogVGV4dCBpcyBsZWZ0IGp1c3RpZmllZCAoJy0nIG9wdGlvbikuICAgICAgICAgICAgICAgKilcbiAgfCBSaWdodCAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgKG5vICctJyBvcHRpb24pLiAgICAgICAgICAgKilcbiAgfCBaZXJvcyAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgYnkgemVyb3MgKHNlZSAnMCcgb3B0aW9uKS4gKilcblxuKCoqKilcblxuKCogSW50ZWdlciBjb252ZXJzaW9uLiAqKVxudHlwZSBpbnRfY29udiA9XG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgICAgICAgICgqICAlZCB8ICUrZCB8ICUgZCAgKilcbiAgfCBJbnRfaSB8IEludF9waSB8IEludF9zaSAgICAgICAgKCogICVpIHwgJStpIHwgJSBpICAqKVxuICB8IEludF94IHwgSW50X0N4ICAgICAgICAgICAgICAgICAoKiAgJXggfCAlI3ggICAgICAgICopXG4gIHwgSW50X1ggfCBJbnRfQ1ggICAgICAgICAgICAgICAgICgqICAlWCB8ICUjWCAgICAgICAgKilcbiAgfCBJbnRfbyB8IEludF9DbyAgICAgICAgICAgICAgICAgKCogICVvIHwgJSNvICAgICAgICAqKVxuICB8IEludF91ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJXUgICAgICAgICAgICAgICopXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1ICAgICAgICgqICAlI2QgfCAlI2kgfCAlI3UgKilcblxuKCogRmxvYXQgY29udmVyc2lvbi4gKilcbnR5cGUgZmxvYXRfZmxhZ19jb252ID1cbiAgfCBGbG9hdF9mbGFnXyAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3AgICAgICAgICAgICAgICAgICAgKCogJStbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19zICAgICAgICAgICAgICAgICAgICgqICUgW2ZlRWdHRmhIXSAqKVxudHlwZSBmbG9hdF9raW5kX2NvbnYgPVxuICB8IEZsb2F0X2YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWYgfCAlK2YgfCAlIGYgICopXG4gIHwgRmxvYXRfZSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZSB8ICUrZSB8ICUgZSAgKilcbiAgfCBGbG9hdF9FICAgICAgICAgICAgICAgICAgICAgICAgKCogICVFIHwgJStFIHwgJSBFICAqKVxuICB8IEZsb2F0X2cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWcgfCAlK2cgfCAlIGcgICopXG4gIHwgRmxvYXRfRyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRyB8ICUrRyB8ICUgRyAgKilcbiAgfCBGbG9hdF9GICAgICAgICAgICAgICAgICAgICAgICAgKCogICVGIHwgJStGIHwgJSBGICAqKVxuICB8IEZsb2F0X2ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWggfCAlK2ggfCAlIGggICopXG4gIHwgRmxvYXRfSCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlSCB8ICUrSCB8ICUgSCAgKilcbiAgfCBGbG9hdF9DRiAgICAgICAgICAgICAgICAgICAgICAgKCogICUjRnwgJSsjRnwgJSAjRiAqKVxudHlwZSBmbG9hdF9jb252ID0gZmxvYXRfZmxhZ19jb252ICogZmxvYXRfa2luZF9jb252XG5cbigqKiopXG5cbigqIENoYXIgc2V0cyAoc2VlICVbLi4uXSkgYXJlIGJpdG1hcHMgaW1wbGVtZW50ZWQgYXMgMzItY2hhciBzdHJpbmdzLiAqKVxudHlwZSBjaGFyX3NldCA9IHN0cmluZ1xuXG4oKioqKVxuXG4oKiBDb3VudGVyIHVzZWQgaW4gU2NhbmYuICopXG50eXBlIGNvdW50ZXIgPVxuICB8IExpbmVfY291bnRlciAgICAgKCogICVsICAgICAgKilcbiAgfCBDaGFyX2NvdW50ZXIgICAgICgqICAlbiAgICAgICopXG4gIHwgVG9rZW5fY291bnRlciAgICAoKiAgJU4sICVMICAqKVxuXG4oKioqKVxuXG4oKiBQYWRkaW5nIG9mIHN0cmluZ3MgYW5kIG51bWJlcnMuICopXG50eXBlICgnYSwgJ2IpIHBhZGRpbmcgPVxuICAoKiBObyBwYWRkaW5nIChleDogXCIlZFwiKSAqKVxuICB8IE5vX3BhZGRpbmcgIDogKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBMaXRlcmFsIHBhZGRpbmcgKGV4OiBcIiU4ZFwiKSAqKVxuICB8IExpdF9wYWRkaW5nIDogcGFkdHkgKiBpbnQgLT4gKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBQYWRkaW5nIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKmRcIikgKilcbiAgfCBBcmdfcGFkZGluZyA6IHBhZHR5IC0+IChpbnQgLT4gJ2EsICdhKSBwYWRkaW5nXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2QsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcGFkZGluZyBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwYWRfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBQcmVjaXNpb24gb2YgZmxvYXRzIGFuZCAnMCctcGFkZGluZyBvZiBpbnRlZ2Vycy4gKilcbnR5cGUgKCdhLCAnYikgcHJlY2lzaW9uID1cbiAgKCogTm8gcHJlY2lzaW9uIChleDogXCIlZlwiKSAqKVxuICB8IE5vX3ByZWNpc2lvbiA6ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBMaXRlcmFsIHByZWNpc2lvbiAoZXg6IFwiJS4zZlwiKSAqKVxuICB8IExpdF9wcmVjaXNpb24gOiBpbnQgLT4gKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIFByZWNpc2lvbiBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKSAqKVxuICB8IEFyZ19wcmVjaXNpb24gOiAoaW50IC0+ICdhLCAnYSkgcHJlY2lzaW9uXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2YsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcHJlY2lzaW9uIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHByZWNfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBzZWUgdGhlIEN1c3RvbSBmb3JtYXQgY29tYmluYXRvciAqKVxudHlwZSAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5ID1cbiAgfCBDdXN0b21femVybyA6ICgnYSwgc3RyaW5nLCAnYSkgY3VzdG9tX2FyaXR5XG4gIHwgQ3VzdG9tX3N1Y2MgOiAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5IC0+XG4gICAgKCdhLCAneCAtPiAnYiwgJ3ggLT4gJ2MpIGN1c3RvbV9hcml0eVxuXG4oKioqKVxuXG4oKiAgICAgICAgUmVsYXRpb25hbCBmb3JtYXQgdHlwZXNcblxuSW4gdGhlIGZpcnN0IGZvcm1hdCtnYWR0cyBpbXBsZW1lbnRhdGlvbiwgdGhlIHR5cGUgZm9yICUoLi4lKSBpbiB0aGVcbmZtdCBHQURUIHdhcyBhcyBmb2xsb3dzOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICogKCdkMSwgJ3ExLCAnZDIsICdxMikgcmVhZGVyX25iX3VuaWZpZXIgKlxuICAgICgneCwgJ2IsICdjLCAnZDEsICdxMSwgJ3UpIGZtdHR5ICpcbiAgICAoJ3UsICdiLCAnYywgJ3ExLCAnZTEsICdmKSBmbXQgLT5cbiAgICAgICgoJ3gsICdiLCAnYywgJ2QyLCAncTIsICd1KSBmb3JtYXQ2IC0+ICd4LCAnYiwgJ2MsICdkMSwgJ2UxLCAnZikgZm10XG5cbk5vdGljZSB0aGF0IHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2YgcG9zaXRpb24gaW4gdGhlIGZvcm1hdCBhcmd1bWVudFxuKCgneCwgLi4sICd1KSBmb3JtYXQ2IC0+IC4uKSBpcyBlcXVhbCB0byB0aGUgJ3UgcGFyYW1ldGVyIGluICdhXG5wb3NpdGlvbiBpbiB0aGUgZm9ybWF0IHRhaWwgKCgndSwgLi4sICdmKSBmbXQpLiBUaGlzIG1lYW5zIHRoYXQgdGhlXG50eXBlIG9mIHRoZSBleHBlY3RlZCBmb3JtYXQgcGFyYW1ldGVyIGRlcGVuZHMgb2Ygd2hlcmUgdGhlICUoLi4uJSlcbmFyZSBpbiB0aGUgZm9ybWF0IHN0cmluZzpcblxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpXCJcbiAgLSA6ICh1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiB1bml0XG4gID0gPGZ1bj5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKSVkXCJcbiAgLSA6IChpbnQgLT4gdW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCBpbnQgLT4gdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IGludCAtPiB1bml0XG4gID0gPGZ1bj5cblxuT24gdGhlIGNvbnRyYXJ5LCB0aGUgbGVnYWN5IHR5cGVyIGdpdmVzIGEgY2xldmVyIHR5cGUgdGhhdCBkb2VzIG5vdFxuZGVwZW5kIG9uIHRoZSBwb3NpdGlvbiBvZiAlKC4uJSkgaW4gdGhlIGZvcm1hdCBzdHJpbmcuIEZvciBleGFtcGxlLFxuJSglKSB3aWxsIGhhdmUgdGhlIHBvbHltb3JwaGljIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpOiBpdCBjYW5cbmJlIGNvbmNhdGVuYXRlZCB0byBhbnkgZm9ybWF0IHR5cGUsIGFuZCBvbmx5IGVuZm9yY2VzIHRoZSBjb25zdHJhaW50XG50aGF0IGl0cyAnYSBhbmQgJ2YgcGFyYW1ldGVycyBhcmUgZXF1YWwgKG5vIGZvcm1hdCBhcmd1bWVudHMpIGFuZCAnZFxuYW5kICdlIGFyZSBlcXVhbCAobm8gcmVhZGVyIGFyZ3VtZW50KS5cblxuVGhlIHdlYWtlbmluZyBvZiB0aGlzIHBhcmFtZXRlciB0eXBlIGluIHRoZSBHQURUIHZlcnNpb24gYnJva2UgdXNlclxuY29kZSAoaW4gZmFjdCBpdCBlc3NlbnRpYWxseSBtYWRlICUoLi4uJSkgdW51c2FibGUgZXhjZXB0IGF0IHRoZSBsYXN0XG5wb3NpdGlvbiBvZiBhIGZvcm1hdCkuIEluIHBhcnRpY3VsYXIsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IHdvcmtcbmFueW1vcmU6XG5cbiAgZnVuIHNlcCAtPlxuICAgIEZvcm1hdC5wcmludGYgXCJmb28lKCUpYmFyJSglKWJhelwiIHNlcCBzZXBcblxuQXMgdGhlIHR5cGUtY2hlY2tlciB3b3VsZCByZXF1aXJlIHR3byAqaW5jb21wYXRpYmxlKiB0eXBlcyBmb3IgdGhlICUoJSlcbmluIGRpZmZlcmVudCBwb3NpdGlvbnMuXG5cblRoZSBzb2x1dGlvbiB0byByZWdhaW4gYSBnZW5lcmFsIHR5cGUgZm9yICUoLi4lKSBpcyB0byBnZW5lcmFsaXplIHRoaXNcbnRlY2huaXF1ZSwgbm90IG9ubHkgb24gdGhlICdkLCAnZSBwYXJhbWV0ZXJzLCBidXQgb24gYWxsIHNpeFxucGFyYW1ldGVycyBvZiBhIGZvcm1hdDogd2UgaW50cm9kdWNlIGEgXCJyZWxhdGlvbmFsXCIgdHlwZVxuICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxud2hvc2UgdmFsdWVzIGFyZSBwcm9vZnMgdGhhdCAoJ2ExLCAuLiwgJ2YxKSBhbmQgKCdhMiwgLi4sICdmMikgbW9yYWxseVxuY29ycmVzcG9uZCB0byB0aGUgc2FtZSBmb3JtYXQgdHlwZTogJ2ExIGlzIG9idGFpbmVkIGZyb20gJ2YxLCdiMSwnYzFcbmluIHRoZSBleGFjdCBzYW1lIHdheSB0aGF0ICdhMiBpcyBvYnRhaW5lZCBmcm9tICdmMiwnYjIsJ2MyLCBldGMuXG5cbkZvciBleGFtcGxlLCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0d28gZm9ybWF0IHR5cGVzIGJlZ2lubmluZyB3aXRoIGEgQ2hhclxucGFyYW1ldGVyIGlzIGFzIGZvbGxvd3M6XG5cbnwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5JbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGUgdGVybSBzdHJ1Y3R1cmUgb2YgZm10dHlfcmVsIGlzIChhbG1vc3RbMV0pXG5pc29tb3JwaGljIHRvIHRoZSBmbXR0eSBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb246IGV2ZXJ5XG5jb25zdHJ1Y3RvciBpcyByZS1yZWFkIHdpdGggYSBiaW5hcnksIHJlbGF0aW9uYWwgdHlwZSwgaW5zdGVhZCBvZiB0aGVcbnByZXZpb3VzIHVuYXJ5IHR5cGluZy4gZm10dHkgY2FuIHRoZW4gYmUgcmUtZGVmaW5lZCBhcyB0aGUgZGlhZ29uYWwgb2ZcbmZtdHR5X3JlbDpcblxuICB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuXG5PbmNlIHdlIGhhdmUgdGhpcyBmbXR0eV9yZWwgdHlwZSBpbiBwbGFjZSwgd2UgY2FuIGdpdmUgdGhlIG1vcmVcbmdlbmVyYWwgdHlwZSB0byAlKC4uLiUpOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuV2UgYWNjZXB0IGFueSBmb3JtYXQgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2KSAodGhpcyBpc1xuY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZm9ybWF0KSwgYnV0IGFsc29cbnJlcXVpcmUgYSBwcm9vZiB0aGF0IHRoaXMgZm9ybWF0IGlzIGluIHJlbGF0aW9uIHRvIGFub3RoZXIgZm9ybWF0IHRoYXRcbmlzIGNvbmNhdGVuYWJsZSB0byB0aGUgZm9ybWF0IHRhaWwuIFdoZW4gZXhlY3V0aW5nIGEgJSguLi4lKSBmb3JtYXRcbihpbiBjYW1saW50ZXJuYWxGb3JtYXQubWw6bWFrZV9wcmludGYgb3Igc2NhbmYubWw6bWFrZV9zY2FuZiksIHdlXG50cmFuc3R5cGUgdGhlIGZvcm1hdCBhbG9uZyB0aGlzIHJlbGF0aW9uIHVzaW5nIHRoZSAncmVjYXN0JyBmdW5jdGlvblxudG8gdHJhbnNwb3NlIGJldHdlZW4gcmVsYXRlZCBmb3JtYXQgdHlwZXMuXG5cbiAgdmFsIHJlY2FzdCA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxKSBmbXRcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdFxuXG5OT1RFIFsxXTogdGhlIHR5cGluZyBvZiBGb3JtYXRfc3Vic3RfdHkgcmVxdWlyZXMgbm90IG9uZSBmb3JtYXQgdHlwZSwgYnV0XG50d28sIG9uZSB0byBlc3RhYmxpc2ggdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0IGFyZ3VtZW50IGFuZCB0aGVcbmZpcnN0IHNpeCBwYXJhbWV0ZXJzLCBhbmQgdGhlIG90aGVyIGZvciB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXRcbmFyZ3VtZW50IGFuZCB0aGUgbGFzdCBzaXggcGFyYW1ldGVycy5cblxufCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbldoZW4gd2UgZ2VuZXJhdGUgYSBmb3JtYXQgQVNULCB3ZSBnZW5lcmF0ZSBleGFjdGx5IHRoZSBzYW1lIHdpdG5lc3NcbmZvciBib3RoIHJlbGF0aW9ucywgYW5kIHRoZSB3aXRuZXNzLWNvbnZlcnNpb24gZnVuY3Rpb25zIGluXG5jYW1saW50ZXJuYWxGb3JtYXQgZG8gcmVseSBvbiB0aGlzIGludmFyaWFudC4gRm9yIGV4YW1wbGUsIHRoZVxuZnVuY3Rpb24gdGhhdCBwcm92ZXMgdGhhdCB0aGUgcmVsYXRpb24gaXMgdHJhbnNpdGl2ZVxuXG4gIHZhbCB0cmFucyA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG5cbmRvZXMgYXNzdW1lIHRoYXQgdGhlIHR3byBpbnB1dHMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIHRlcm0gc3RydWN0dXJlXG4oYW5kIGlzIG9ubHkgZXZlcnkgdXNlZCBmb3IgYXJndW1lbnQgd2l0bmVzc2VzIG9mIHRoZVxuRm9ybWF0X3N1YnN0X3R5IGNvbnN0cnVjdG9yKS5cbiopXG5cbigqIFR5cGUgb2YgYSBibG9jayB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggICAoKiBIb3Jpem9udGFsIGJsb2NrIG5vIGxpbmUgYnJlYWtpbmcgKilcbiAgfCBQcF92Ym94ICAgKCogVmVydGljYWwgYmxvY2sgZWFjaCBicmVhayBsZWFkcyB0byBhIG5ldyBsaW5lICopXG4gIHwgUHBfaHZib3ggICgqIEhvcml6b250YWwtdmVydGljYWwgYmxvY2s6IHNhbWUgYXMgdmJveCwgZXhjZXB0IGlmIHRoaXMgYmxvY2tcbiAgICAgICAgICAgICAgICAgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBvbiBhIHNpbmdsZSBsaW5lICopXG4gIHwgUHBfaG92Ym94ICgqIEhvcml6b250YWwgb3IgVmVydGljYWwgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrICopXG4gIHwgUHBfYm94ICAgICgqIEhvcml6b250YWwgb3IgSW5kZW50IGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jaywgb3JcbiAgICAgICAgICAgICAgICAgd2hlbiBpdCBsZWFkcyB0byBhIG5ldyBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBsaW5lICopXG4gIHwgUHBfZml0cyAgICgqIEludGVybmFsIHVzYWdlOiB3aGVuIGEgYmxvY2sgZml0cyBvbiBhIHNpbmdsZSBsaW5lICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGZvcm1hdHRpbmdfbGl0ID1cbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF0gICAqKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAfSAgICopXG4gIHwgQnJlYWsgb2Ygc3RyaW5nICogaW50ICogaW50ICAgICAgICAgICgqIEAsIHwgQCAgfCBAOyB8IEA7PD4gKilcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQD8gICAqKVxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXFxuICAqKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBALiAgICopXG4gIHwgTWFnaWNfc2l6ZSBvZiBzdHJpbmcgKiBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA8bj4gKilcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQEAgICAqKVxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAJSUgICopXG4gIHwgU2Nhbl9pbmRpYyBvZiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBYICAgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuID1cbiAgfCBPcGVuX3RhZyA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQHsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuICB8IE9wZW5fYm94IDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAWyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IHR5cGUgZWxlbWVudHMuICopXG4oKiBJbiBwYXJ0aWN1bGFyIHVzZWQgdG8gcmVwcmVzZW50ICUoLi4uJSkgYW5kICV7Li4uJX0gY29udGVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcbmFuZCAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsID1cbiAgfCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBTdHJpbmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChzdHJpbmcgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBzdHJpbmcgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVkICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDMyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDMyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50MzIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgTmF0aXZlaW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAobmF0aXZlaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgbmF0aXZlaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDY0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDY0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50NjQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgRmxvYXRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVmICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoZmxvYXQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBmbG9hdCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBCb29sX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChib29sIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgYm9vbCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEZvcm1hdF9hcmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcbiAgfCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9ycy4gKilcbiAgfCBBbHBoYV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICd4IC0+ICdjMSkgLT4gJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICd4IC0+ICdjMikgLT4gJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgVGhldGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAnYzEpIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAnYzIpIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEFueV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVXNlZCBmb3IgY3VzdG9tIGZvcm1hdHMgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgUmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEVuZF9vZl9mbXR0eSA6XG4gICAgICAoJ2YxLCAnYjEsICdjMSwgJ2QxLCAnZDEsICdmMSxcbiAgICAgICAnZjIsICdiMiwgJ2MyLCAnZDIsICdkMiwgJ2YyKSBmbXR0eV9yZWxcblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgZWxlbWVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCA9XG4gIHwgQ2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50MzIgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBOYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbltkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIG5hdGl2ZWludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50NjQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICAgICAgZmxvYXRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGZsb2F0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtiQl0gKilcbiAgICAgICgneCwgYm9vbCAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsdXNoIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IFN0cmluZ19saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIGFiYyAqKVxuICAgICAgc3RyaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2hhcl9saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogeCAqKVxuICAgICAgY2hhciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgRm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IEFscGhhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ3ggLT4gJ2MpIC0+ICd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFRoZXRhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ2MpIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcjogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgZm9ybWF0dGluZ19saXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXR0aW5nX2dlbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgICgnYTEsICdiLCAnYywgJ2QxLCAnZTEsICdmMSkgZm9ybWF0dGluZ19nZW4gKlxuICAgICAgKCdmMSwgJ2IsICdjLCAnZTEsICdlMiwgJ2YyKSBmbXQgLT4gKCdhMSwgJ2IsICdjLCAnZDEsICdlMiwgJ2YyKSBmbXRcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4IC0+ICdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVsuLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChzdHJpbmcgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtubE5MXSAqKVxuICAgICAgY291bnRlciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGludCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IElnbm9yZWRfcGFyYW0gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgaWdub3JlZCAqICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEN1c3RvbSBwcmludGluZyBmb3JtYXQgKFBSIzY0NTIsIEdQUiMxNDApXG5cbiAgICAgV2UgaW5jbHVkZSBhIHR5cGUgQ3VzdG9tIG9mIFwiY3VzdG9tIGNvbnZlcnRlcnNcIiwgd2hlcmUgYW5cbiAgICAgYXJiaXRyYXJ5IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgb25lIG9yIG1vcmVcbiAgICAgYXJndW1lbnRzLiBUaGVyZSBpcyBubyBzeW50YXggZm9yIGN1c3RvbSBjb252ZXJ0ZXJzLCBpdCBpcyBvbmx5XG4gICAgIGludGVuZGVkIGZvciBjdXN0b20gcHJvY2Vzc29ycyB0aGF0IHdpc2ggdG8gcmVseSBvbiB0aGVcbiAgICAgc3RkbGliLWRlZmluZWQgZm9ybWF0IEdBRFRzLlxuXG4gICAgIEZvciBpbnN0YW5jZSBhIHByZS1wcm9jZXNzb3IgY291bGQgY2hvb3NlIHRvIGludGVycHJldCBzdHJpbmdzXG4gICAgIHByZWZpeGVkIHdpdGggW1wiIVwiXSBhcyBmb3JtYXQgc3RyaW5ncyB3aGVyZSBbJXt7IC4uLiB9fV0gaXNcbiAgICAgYSBzcGVjaWFsIGZvcm0gdG8gcGFzcyBhIHRvX3N0cmluZyBmdW5jdGlvbiwgc28gdGhhdCBvbmUgY291bGRcbiAgICAgd3JpdGU6XG5cbiAgICAge1tcbiAgICAgICB0eXBlIHQgPSB7IHggOiBpbnQ7IHkgOiBpbnQgfVxuXG4gICAgICAgbGV0IHN0cmluZ19vZl90IHQgPSBQcmludGYuc3ByaW50ZiBcInsgeCA9ICVkOyB5ID0gJWQgfVwiIHQueCB0LnlcblxuICAgICAgIFByaW50Zi5wcmludGYgIVwidCA9ICV7e3N0cmluZ19vZl90fX1cIiB7IHggPSA0MjsgeSA9IDQyIH1cbiAgICAgXX1cbiAgKilcbiAgfCBDdXN0b20gOlxuICAgICAgKCdhLCAneCwgJ3kpIGN1c3RvbV9hcml0eSAqICh1bml0IC0+ICd4KSAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBlbmQgb2YgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiAqKVxuICB8IEVuZF9vZl9mb3JtYXQgOlxuICAgICAgICAoJ2YsICdiLCAnYywgJ2UsICdlLCAnZikgZm10XG5cbigqKiopXG5cbigqIFR5cGUgZm9yIGlnbm9yZWQgcGFyYW1ldGVycyAoc2VlIFwiJV9cIikuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWQgPVxuICB8IElnbm9yZWRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9zICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9TICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX25kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2YgKilcbiAgICAgIHBhZF9vcHRpb24gKiBwcmVjX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfYm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQiAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfey4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8oLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3JlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgKilcbiAgICAgICgnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1suLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1tubE5MXSAqKVxuICAgICAgY291bnRlciAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG5cbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gIEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ICogc3RyaW5nXG5cbmxldCByZWMgZXJhc2VfcmVsIDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gIChhLCBiLCBjLCBkLCBlLCBmLFxuICAgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eVxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgX3R5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkxLCBlcmFzZV9yZWwgcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwZSBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXQgdHlwZXMuICopXG4oKiBVc2VkIGJ5OlxuICAgKiByZWFkZXJfbmJfdW5pZmllcl9vZl9mbXR0eSB0byBjb3VudCByZWFkZXJzIGluIGFuIGZtdHR5LFxuICAgKiBTY2FuZi50YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIHRvIGV4dHJhY3QgcmVhZGVycyBpbnNpZGUgJSguLi4lKSxcbiAgICogQ2FtbGludGVybmFsRm9ybWF0LmZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IHRvIGV4dHJhY3QgZm9ybWF0IHR5cGUuICopXG5cbigqXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10dHkgPVxuKilcbmxldCByZWMgY29uY2F0X2ZtdHR5IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gICAgICAgZzEgajEgZzIgajJcbiAgLlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZDEsIGExLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZDIsIGEyKSBmbXR0eV9yZWwgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKGcxLCBiMSwgYzEsIGoxLCBlMSwgZjEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBlMiwgZjIpIGZtdHR5X3JlbCA9XG5mdW4gZm10dHkxIGZtdHR5MiAtPiBtYXRjaCBmbXR0eTEgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IGZtdHR5MlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdHMuICopXG5sZXQgcmVjIGNvbmNhdF9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10ID1cbmZ1biBmbXQxIGZtdDIgLT4gbWF0Y2ggZm10MSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgU3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgQ2FtbF9zdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IENoYXIgKHJlc3QpIC0+XG4gICAgQ2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBDYW1sX2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBCb29sIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBBbHBoYSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIFRoZXRhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIEN1c3RvbSAoYXJpdHksIGYsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFJlYWRlciByZXN0IC0+XG4gICAgUmVhZGVyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgRmx1c2ggKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBDaGFyX2xpdGVyYWwgICAoY2hyLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdF9hcmcgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZyAgIChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX25leHRfY2hhciAocmVzdCkgLT5cbiAgICBTY2FuX25leHRfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIElnbm9yZWRfcGFyYW0gKGlnbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGZtdDJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIEdhYnJpZWwgU2NoZXJlciwgcHJvamV0IFBhcnRvdXQsIElOUklBIFBhcmlzLVNhY2xheSAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMjAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2FtbGludGVybmFsQXRvbWljIGlzIGEgZGVwZW5kZW5jeSBvZiBTdGRsaWIsIHNvIGl0IGlzIGNvbXBpbGVkIHdpdGhcbiAgIC1ub3BlcnZhc2l2ZXMuICopXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogV2UgYXJlIG5vdCByZXVzaW5nICgnYSByZWYpIGRpcmVjdGx5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYXNvblxuICAgYWJvdXQgYXRvbWljaXR5IGlmIHdlIHdpc2ggdG86IGV2ZW4gaW4gYSBzZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLFxuICAgc2lnbmFscyBhbmQgb3RoZXIgYXN5bmNocm9ub3VzIGNhbGxiYWNrcyBtaWdodCBicmVhayBhdG9taWNpdHkuICopXG50eXBlICdhIHQgPSB7bXV0YWJsZSB2OiAnYX1cblxubGV0IG1ha2UgdiA9IHt2fVxubGV0IGdldCByID0gci52XG5sZXQgc2V0IHIgdiA9IHIudiA8LSB2XG5cbigqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBzZXQgdG8gbmV2ZXIgYmUgaW5saW5lZDogRmxhbWJkYSBpc1xuICAgYWxsb3dlZCB0byBtb3ZlIHN1cnJvdW5kaW5nIGNvZGUgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLFxuICAgaW5jbHVkaW5nIGFsbG9jYXRpb25zLiAqKVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZXhjaGFuZ2UgciB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIHY7XG4gICgqIEVORCBBVE9NSUMgKilcbiAgY3VyXG5cbmxldFtAaW5saW5lIG5ldmVyXSBjb21wYXJlX2FuZF9zZXQgciBzZWVuIHYgPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICBpZiBjdXIgPT0gc2VlbiB0aGVuIChcbiAgICByLnYgPC0gdjtcbiAgICAoKiBFTkQgQVRPTUlDICopXG4gICAgdHJ1ZVxuICApIGVsc2VcbiAgICBmYWxzZVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZmV0Y2hfYW5kX2FkZCByIG4gPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICByLnYgPC0gKGN1ciArIG4pO1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXQgaW5jciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgMSlcbmxldCBkZWNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAoLTEpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCBvciApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuXG4oKiBJbnRlZ2VyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LSApIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCAoIH4rICkgOiBpbnQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsICggLSApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgKCAqICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCAoIC8gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsICggbW9kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5cbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxuXG5leHRlcm5hbCAoIGxhbmQgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsICggbG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsICggbHhvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxuXG5sZXQgbG5vdCB4ID0geCBseG9yICgtMSlcblxuZXh0ZXJuYWwgKCBsc2wgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsICggbHNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5leHRlcm5hbCAoIGFzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuXG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcblxuKCogRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCAoIH4rLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCAoICsuICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsICggLS4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgKCAqLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCAoIC8uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsICggKiogKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Bvd2VyX2Zsb2F0XCIgXCJwb3dcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwbTEgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBtMV9mbG9hdFwiIFwiY2FtbF9leHBtMVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luaF9mbG9hdFwiIFwiY2FtbF9hc2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5oX2Zsb2F0XCIgXCJjYW1sX2F0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFic19mbG9hdCA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuZXh0ZXJuYWwgY29weXNpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZF9mbG9hdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbmV4dGVybmFsIGZsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldCByZWMgKCBAICkgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBoZCA6OiB0bCAtPiBoZCA6OiAodGwgQCBsMilcblxuKCogSS9PIG9wZXJhdGlvbnMgKilcblxudHlwZSBpbl9jaGFubmVsXG50eXBlIG91dF9jaGFubmVsXG5cbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9vdXQgOiBpbnQgLT4gb3V0X2NoYW5uZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFwiXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3JfaW4gOiBpbnQgLT4gaW5fY2hhbm5lbCA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cIlxuXG5sZXQgc3RkaW4gPSBvcGVuX2Rlc2NyaXB0b3JfaW4gMFxubGV0IHN0ZG91dCA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMVxubGV0IHN0ZGVyciA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMlxuXG4oKiBHZW5lcmFsIG91dHB1dCBmdW5jdGlvbnMgKilcblxudHlwZSBvcGVuX2ZsYWcgPVxuICAgIE9wZW5fcmRvbmx5IHwgT3Blbl93cm9ubHkgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXQgfCBPcGVuX3RydW5jIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnkgfCBPcGVuX3RleHQgfCBPcGVuX25vbmJsb2NrXG5cbmV4dGVybmFsIG9wZW5fZGVzYyA6IHN0cmluZyAtPiBvcGVuX2ZsYWcgbGlzdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX3N5c19vcGVuXCJcblxuZXh0ZXJuYWwgc2V0X291dF9jaGFubmVsX25hbWU6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9vdXRfZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0KG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X291dF9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX291dCBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl90ZXh0XSAwbzY2NiBuYW1lXG5cbmxldCBvcGVuX291dF9iaW4gbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fYmluYXJ5XSAwbzY2NiBuYW1lXG5cbmV4dGVybmFsIGZsdXNoIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9mbHVzaFwiXG5cbmV4dGVybmFsIG91dF9jaGFubmVsc19saXN0IDogdW5pdCAtPiBvdXRfY2hhbm5lbCBsaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFwiXG5cbmxldCBmbHVzaF9hbGwgKCkgPVxuICBsZXQgcmVjIGl0ZXIgPSBmdW5jdGlvblxuICAgICAgW10gLT4gKClcbiAgICB8IGE6OmwgLT5cbiAgICAgICAgYmVnaW4gdHJ5XG4gICAgICAgICAgICBmbHVzaCBhXG4gICAgICAgIHdpdGggU3lzX2Vycm9yIF8gLT5cbiAgICAgICAgICAoKSAoKiBpZ25vcmUgY2hhbm5lbHMgY2xvc2VkIGR1cmluZyBhIHByZWNlZGluZyBmbHVzaC4gKilcbiAgICAgICAgZW5kO1xuICAgICAgICBpdGVyIGxcbiAgaW4gaXRlciAob3V0X2NoYW5uZWxzX2xpc3QgKCkpXG5cbmV4dGVybmFsIHVuc2FmZV9vdXRwdXQgOiBvdXRfY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0X2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9vdXRwdXRfc3RyaW5nIDogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0XCJcblxuZXh0ZXJuYWwgb3V0cHV0X2NoYXIgOiBvdXRfY2hhbm5lbCAtPiBjaGFyIC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuXG5sZXQgb3V0cHV0X2J5dGVzIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0IG9jIHMgMCAoYnl0ZXNfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXRfc3RyaW5nIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIDAgKHN0cmluZ19sZW5ndGggcylcblxubGV0IG91dHB1dCBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dFwiXG4gIGVsc2UgdW5zYWZlX291dHB1dCBvYyBzIG9mcyBsZW5cblxubGV0IG91dHB1dF9zdWJzdHJpbmcgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IHN0cmluZ19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0X3N1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyBvZnMgbGVuXG5cbmV4dGVybmFsIG91dHB1dF9ieXRlIDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuZXh0ZXJuYWwgb3V0cHV0X2JpbmFyeV9pbnQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfaW50XCJcblxuZXh0ZXJuYWwgbWFyc2hhbF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgLT4gdW5pdCBsaXN0IC0+IHVuaXRcbiAgICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlXCJcbmxldCBvdXRwdXRfdmFsdWUgY2hhbiB2ID0gbWFyc2hhbF90b19jaGFubmVsIGNoYW4gdiBbXVxuXG5leHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XCJcbmV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX291dFwiXG5leHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX291dF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9vdXQgb2MgPSBmbHVzaCBvYzsgY2xvc2Vfb3V0X2NoYW5uZWwgb2NcbmxldCBjbG9zZV9vdXRfbm9lcnIgb2MgPVxuICAodHJ5IGZsdXNoIG9jIHdpdGggXyAtPiAoKSk7XG4gICh0cnkgY2xvc2Vfb3V0X2NoYW5uZWwgb2Mgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX291dCA6IG91dF9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBHZW5lcmFsIGlucHV0IGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBzZXRfaW5fY2hhbm5lbF9uYW1lOiBpbl9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9pbl9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9pbihvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9pbl9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX2luIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fdGV4dF0gMCBuYW1lXG5cbmxldCBvcGVuX2luX2JpbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX2JpbmFyeV0gMCBuYW1lXG5cbmV4dGVybmFsIGlucHV0X2NoYXIgOiBpbl9jaGFubmVsIC0+IGNoYXIgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5cbmV4dGVybmFsIHVuc2FmZV9pbnB1dCA6IGluX2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9pbnB1dFwiXG5cbmxldCBpbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcImlucHV0XCJcbiAgZWxzZSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWMgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBsZW4gPD0gMCB0aGVuICgpIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW4gaW5cbiAgICBpZiByID0gMFxuICAgIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyAob2ZzICsgcikgKGxlbiAtIHIpXG4gIGVuZFxuXG5sZXQgcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwicmVhbGx5X2lucHV0XCJcbiAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVhbGx5X2lucHV0X3N0cmluZyBpYyBsZW4gPVxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSBsZW4gaW5cbiAgcmVhbGx5X2lucHV0IGljIHMgMCBsZW47XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG5leHRlcm5hbCBpbnB1dF9zY2FuX2xpbmUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcIlxuXG5sZXQgaW5wdXRfbGluZSBjaGFuID1cbiAgbGV0IHJlYyBidWlsZF9yZXN1bHQgYnVmIHBvcyA9IGZ1bmN0aW9uXG4gICAgW10gLT4gYnVmXG4gIHwgaGQgOjogdGwgLT5cbiAgICAgIGxldCBsZW4gPSBieXRlc19sZW5ndGggaGQgaW5cbiAgICAgIGJ5dGVzX2JsaXQgaGQgMCBidWYgKHBvcyAtIGxlbikgbGVuO1xuICAgICAgYnVpbGRfcmVzdWx0IGJ1ZiAocG9zIC0gbGVuKSB0bCBpblxuICBsZXQgcmVjIHNjYW4gYWNjdSBsZW4gPVxuICAgIGxldCBuID0gaW5wdXRfc2Nhbl9saW5lIGNoYW4gaW5cbiAgICBpZiBuID0gMCB0aGVuIGJlZ2luICAgICAgICAgICAgICAgICAgICgqIG4gPSAwOiB3ZSBhcmUgYXQgRU9GICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICAgIHwgXyAgLT4gYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gYWNjdVxuICAgIGVuZCBlbHNlIGlmIG4gPiAwIHRoZW4gYmVnaW4gICAgICAgICAgKCogbiA+IDA6IG5ld2xpbmUgZm91bmQgaW4gYnVmZmVyICopXG4gICAgICBsZXQgcmVzID0gYnl0ZXNfY3JlYXRlIChuIC0gMSkgaW5cbiAgICAgIGlnbm9yZSAodW5zYWZlX2lucHV0IGNoYW4gcmVzIDAgKG4gLSAxKSk7XG4gICAgICBpZ25vcmUgKGlucHV0X2NoYXIgY2hhbik7ICAgICAgICAgICAoKiBza2lwIHRoZSBuZXdsaW5lICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmVzXG4gICAgICB8ICBfIC0+IGxldCBsZW4gPSBsZW4gKyBuIC0gMSBpblxuICAgICAgICAgICAgICBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiAocmVzIDo6IGFjY3UpXG4gICAgZW5kIGVsc2UgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAoKiBuIDwgMDogbmV3bGluZSBub3QgZm91bmQgKilcbiAgICAgIGxldCBiZWcgPSBieXRlc19jcmVhdGUgKC1uKSBpblxuICAgICAgaWdub3JlKHVuc2FmZV9pbnB1dCBjaGFuIGJlZyAwICgtbikpO1xuICAgICAgc2NhbiAoYmVnIDo6IGFjY3UpIChsZW4gLSBuKVxuICAgIGVuZFxuICBpbiBieXRlc191bnNhZmVfdG9fc3RyaW5nIChzY2FuIFtdIDApXG5cbmV4dGVybmFsIGlucHV0X2J5dGUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcbmV4dGVybmFsIGlucHV0X2JpbmFyeV9pbnQgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9pbnRcIlxuZXh0ZXJuYWwgaW5wdXRfdmFsdWUgOiBpbl9jaGFubmVsIC0+ICdhID0gXCJjYW1sX2lucHV0X3ZhbHVlXCJcbmV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5cIlxuZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX2luXCJcbmV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX2luX25vZXJyIGljID0gKHRyeSBjbG9zZV9pbiBpYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfaW4gOiBpbl9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgb3V0cHV0ICopXG5cbmxldCBwcmludF9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRvdXQgY1xubGV0IHByaW50X3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgc1xubGV0IHByaW50X2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3Rkb3V0IHNcbmxldCBwcmludF9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJpbnRfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmludF9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzOyBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxubGV0IHByaW50X25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGVycm9yICopXG5cbmxldCBwcmVycl9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRlcnIgY1xubGV0IHByZXJyX3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgc1xubGV0IHByZXJyX2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3RkZXJyIHNcbmxldCBwcmVycl9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJlcnJfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmVycl9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzOyBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxubGV0IHByZXJyX25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxuXG4oKiBJbnB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgaW5wdXQgKilcblxubGV0IHJlYWRfbGluZSAoKSA9IGZsdXNoIHN0ZG91dDsgaW5wdXRfbGluZSBzdGRpblxubGV0IHJlYWRfaW50ICgpID0gaW50X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2ludF9vcHQgKCkgPSBpbnRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0ICgpID0gZmxvYXRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXRfb3B0ICgpID0gZmxvYXRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcblxuKCogT3BlcmF0aW9ucyBvbiBsYXJnZSBmaWxlcyAqKVxuXG5tb2R1bGUgTGFyZ2VGaWxlID1cbiAgc3RydWN0XG4gICAgZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX291dF82NFwiXG4gICAgZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50NjRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgICBleHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5fNjRcIlxuICAgIGV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX2luXzY0XCJcbiAgICBleHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgZW5kXG5cbigqIEZvcm1hdHMgKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NlxuICAgPSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDZcbiAgID0gRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm10XG4gICAgICAgICAgICAgICAqIHN0cmluZ1xuXG50eXBlICgnYSwgJ2IsICdjLCAnZCkgZm9ybWF0NCA9ICgnYSwgJ2IsICdjLCAnYywgJ2MsICdkKSBmb3JtYXQ2XG5cbnR5cGUgKCdhLCAnYiwgJ2MpIGZvcm1hdCA9ICgnYSwgJ2IsICdjLCAnYykgZm9ybWF0NFxuXG5sZXQgc3RyaW5nX29mX2Zvcm1hdCAoRm9ybWF0IChfZm10LCBzdHIpKSA9IHN0clxuXG5leHRlcm5hbCBmb3JtYXRfb2Zfc3RyaW5nIDpcbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgKCBeXiApIChGb3JtYXQgKGZtdDEsIHN0cjEpKSAoRm9ybWF0IChmbXQyLCBzdHIyKSkgPVxuICBGb3JtYXQgKENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5jb25jYXRfZm10IGZtdDEgZm10MixcbiAgICAgICAgICBzdHIxIF4gXCIlLFwiIF4gc3RyMilcblxuKCogTWlzY2VsbGFuZW91cyAqKVxuXG5leHRlcm5hbCBzeXNfZXhpdCA6IGludCAtPiAnYSA9IFwiY2FtbF9zeXNfZXhpdFwiXG5cbmxldCBleGl0X2Z1bmN0aW9uID0gQ2FtbGludGVybmFsQXRvbWljLm1ha2UgZmx1c2hfYWxsXG5cbmxldCByZWMgYXRfZXhpdCBmID1cbiAgbGV0IG1vZHVsZSBBdG9taWMgPSBDYW1saW50ZXJuYWxBdG9taWMgaW5cbiAgKCogTVBSIzcyNTMsIE1QUiM3Nzk2OiBtYWtlIHN1cmUgXCJmXCIgaXMgZXhlY3V0ZWQgb25seSBvbmNlICopXG4gIGxldCBmX3lldF90b19ydW4gPSBBdG9taWMubWFrZSB0cnVlIGluXG4gIGxldCBvbGRfZXhpdCA9IEF0b21pYy5nZXQgZXhpdF9mdW5jdGlvbiBpblxuICBsZXQgbmV3X2V4aXQgKCkgPVxuICAgIGlmIEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZl95ZXRfdG9fcnVuIHRydWUgZmFsc2UgdGhlbiBmICgpIDtcbiAgICBvbGRfZXhpdCAoKVxuICBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZXhpdF9mdW5jdGlvbiBvbGRfZXhpdCBuZXdfZXhpdCBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIGF0X2V4aXQgZlxuXG5sZXQgZG9fYXRfZXhpdCAoKSA9IChDYW1saW50ZXJuYWxBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbmV4dGVybmFsIG1ham9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX21ham9yXCJcbmV4dGVybmFsIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgOiB1bml0IC0+IGJvb2xcbiAgPSBcImNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWRcIlxubGV0ICgpID0gaWYgbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCAoKSB0aGVuIGF0X2V4aXQgbWFqb3JcblxuKCpNT0RVTEVfQUxJQVNFUyopXG5tb2R1bGUgQXJnICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgID0gQXJyYXlcbm1vZHVsZSBBcnJheUxhYmVscyAgPSBBcnJheUxhYmVsc1xubW9kdWxlIEF0b21pYyAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICA9IEJpZ2FycmF5XG5tb2R1bGUgQm9vbCAgICAgICAgID0gQm9vbFxubW9kdWxlIEJ1ZmZlciAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICA9IEJ5dGVzXG5tb2R1bGUgQnl0ZXNMYWJlbHMgID0gQnl0ZXNMYWJlbHNcbm1vZHVsZSBDYWxsYmFjayAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICA9IENoYXJcbm1vZHVsZSBDb21wbGV4ICAgICAgPSBDb21wbGV4XG5tb2R1bGUgRGlnZXN0ICAgICAgID0gRGlnZXN0XG5tb2R1bGUgRWl0aGVyICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgID0gRXBoZW1lcm9uXG5tb2R1bGUgRmlsZW5hbWUgICAgID0gRmlsZW5hbWVcbm1vZHVsZSBGbG9hdCAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICA9IEZvcm1hdFxubW9kdWxlIEZ1biAgICAgICAgICA9IEZ1blxubW9kdWxlIEdjICAgICAgICAgICA9IEdjXG5tb2R1bGUgR2VubGV4ICAgICAgID0gR2VubGV4XG5tb2R1bGUgSGFzaHRibCAgICAgID0gSGFzaHRibFxubW9kdWxlIEluX2NoYW5uZWwgICA9IEluX2NoYW5uZWxcbm1vZHVsZSBJbnQgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgPSBJbnQzMlxubW9kdWxlIEludDY0ICAgICAgICA9IEludDY0XG5tb2R1bGUgTGF6eSAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICA9IExleGluZ1xubW9kdWxlIExpc3QgICAgICAgICA9IExpc3Rcbm1vZHVsZSBMaXN0TGFiZWxzICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgID0gTWFwXG5tb2R1bGUgTWFyc2hhbCAgICAgID0gTWFyc2hhbFxubW9kdWxlIE1vcmVMYWJlbHMgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBOYXRpdmVpbnQgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgPSBPYmpcbm1vZHVsZSBPbyAgICAgICAgICAgPSBPb1xubW9kdWxlIE9wdGlvbiAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICA9IE91dF9jaGFubmVsXG5tb2R1bGUgUGFyc2luZyAgICAgID0gUGFyc2luZ1xubW9kdWxlIFBlcnZhc2l2ZXMgICA9IFBlcnZhc2l2ZXNcbm1vZHVsZSBQcmludGV4YyAgICAgPSBQcmludGV4Y1xubW9kdWxlIFByaW50ZiAgICAgICA9IFByaW50ZlxubW9kdWxlIFF1ZXVlICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgID0gUmFuZG9tXG5tb2R1bGUgUmVzdWx0ICAgICAgID0gUmVzdWx0XG5tb2R1bGUgU2NhbmYgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZXEgICAgICAgICAgPSBTZXFcbm1vZHVsZSBTZXQgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgPSBTdGFja1xubW9kdWxlIFN0ZExhYmVscyAgICA9IFN0ZExhYmVsc1xubW9kdWxlIFN0cmVhbSAgICAgICA9IFN0cmVhbVxubW9kdWxlIFN0cmluZyAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyA9IFN0cmluZ0xhYmVsc1xubW9kdWxlIFN5cyAgICAgICAgICA9IFN5c1xubW9kdWxlIFVjaGFyICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgID0gVW5pdFxubW9kdWxlIFdlYWsgICAgICAgICA9IFdlYWtcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbmluY2x1ZGUgSW50XG5cbnR5cGUgdCA9IGludFxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5sZXQgYWRkID0gKCArIClcbmxldCBzdWIgPSAoIC0gKVxubGV0IG11bCA9ICggKiApXG5sZXQgZGl2ID0gKCAvIClcbmxldCBzdWNjID0gc3VjY1xubGV0IHByZWQgPSBwcmVkXG5sZXQgYWJzID0gYWJzXG5sZXQgbWF4X2ludCA9IG1heF9pbnRcbmxldCBtaW5faW50ID0gbWluX2ludFxubGV0IGVxdWFsIChhIDogaW50KSBiID0gU3RkbGliLiggPSApIGEgYlxubGV0IGNvbXBhcmUgKGEgOiBpbnQpIGIgPSBjb21wYXJlIGEgYlxuXG4oKiB1c2UgRk5WOlxuICAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRm93bGVyJUUyJTgwJTkzTm9sbCVFMiU4MCU5M1ZvX2hhc2hfZnVuY3Rpb24gKilcbmxldCBoYXNoIChuIDogaW50KSA6IGludCA9XG4gIGxldCBvZmZzZXRfYmFzaXMgPSAweGNiZjI5Y2U0ODQyMjIzMjVMIGluXG4gIGxldCBwcmltZSA9IDB4MTAwMDAwMDAxYjNMIGluXG5cbiAgbGV0IGggPSByZWYgb2Zmc2V0X2Jhc2lzIGluXG4gIGZvciBrID0gMCB0byA3IGRvXG4gICAgKGggOj0gSW50NjQuKG11bCAhaCBwcmltZSkpO1xuICAgICgqIGggOj0gaCB4b3IgKGstdGggYnl0ZSBvZiBuKSAqKVxuICAgIGggOj0gSW50NjQuKGxvZ3hvciAhaCAob2ZfaW50ICgobiBsc3IgKGsgKiA4KSkgbGFuZCAweGZmKSkpXG4gIGRvbmU7XG4gICgqIHRydW5jYXRlIGJhY2sgdG8gaW50IGFuZCByZW1vdmUgc2lnbiAqKVxuICBJbnQ2NC50b19pbnQgIWggbGFuZCBtYXhfaW50XG5cbmxldCByYW5nZSBpIGogeWllbGQgPVxuICBsZXQgcmVjIHVwIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIHVwIChpICsgMSkgaiB5aWVsZFxuICAgIClcbiAgYW5kIGRvd24gaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgZG93biAoaSAtIDEpIGogeWllbGRcbiAgICApXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIHlpZWxkXG4gIGVsc2VcbiAgICBkb3duIGkgaiB5aWVsZFxuXG5sZXQgcmFuZ2UnIGkgaiB5aWVsZCA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSkgeWllbGRcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKSB5aWVsZFxuXG5sZXQgc2lnbiBpID0gY29tcGFyZSBpIDBcbmxldCBuZWcgaSA9IC1pXG5cbmxldCBwb3cgYSBiID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IDEgLT4gYWNjXG4gICAgfCBuIC0+XG4gICAgICBpZiBuIG1vZCAyID0gMCB0aGVuXG4gICAgICAgIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gICAgICBlbHNlXG4gICAgICAgIGFjYyAqIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gIGluXG4gIG1hdGNoIGIgd2l0aFxuICB8IDAgLT5cbiAgICBpZiBhID0gMCB0aGVuXG4gICAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogdW5kZWZpbmVkIHZhbHVlIDBeMFwiKVxuICAgIGVsc2VcbiAgICAgIDFcbiAgfCBiIHdoZW4gYiA8IDAgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogY2FuJ3QgcmFpc2UgaW50IHRvIG5lZ2F0aXZlIHBvd2VyXCIpXG4gIHwgYiAtPiBhdXggYSBiXG5cbm1vZHVsZSBJbmZpeCA6IHNpZ1xuICB2YWwgKCA9ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8PiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPCApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPD0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCAtLSApIDogdCAtPiB0IC0+IHQgaXRlclxuICB2YWwgKCAtLV4gKSA6IHQgLT4gdCAtPiB0IGl0ZXJcbiAgdmFsICggKyApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggLSApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggfi0gKSA6IHQgLT4gdFxuICB2YWwgKCAqICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAvICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAqKiApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbW9kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsYW5kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsb3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGx4b3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCBsbm90IDogdCAtPiB0XG4gIHZhbCAoIGxzbCApIDogdCAtPiBpbnQgLT4gdFxuICB2YWwgKCBsc3IgKSA6IHQgLT4gaW50IC0+IHRcbiAgdmFsICggYXNyICkgOiB0IC0+IGludCAtPiB0XG5lbmQgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdGRsaWJcblxuICBsZXQgKCAtLSApID0gcmFuZ2VcbiAgbGV0ICggLS1eICkgPSByYW5nZSdcbiAgbGV0ICggKiogKSA9IHBvd1xuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxubGV0IG1pbiA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1pblxubGV0IG1heCA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1heFxuXG5sZXQgZmxvb3JfZGl2IGEgbiA9XG4gIGlmIGEgPCAwICYmIG4gPj0gMCB0aGVuXG4gICAgKChhICsgMSkgLyBuKSAtIDFcbiAgZWxzZSBpZiBhID4gMCAmJiBuIDwgMCB0aGVuXG4gICAgKChhIC0gMSkgLyBuKSAtIDFcbiAgZWxzZVxuICAgIGEgLyBuXG5cbmxldCBib29sX25lcSAoYSA6IGJvb2wpIGIgPSBTdGRsaWIuKCA8PiApIGEgYlxuXG5sZXQgcmVtIGEgbiA9XG4gIGxldCB5ID0gYSBtb2QgbiBpblxuICBpZiBib29sX25lcSAoeSA8IDApIChuIDwgMCkgJiYgeSA8PiAwIHRoZW5cbiAgICB5ICsgblxuICBlbHNlXG4gICAgeVxuXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gbiBzdCA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgblxubGV0IHJhbmRvbV9zbWFsbCA9IHJhbmRvbSAxMDBcbmxldCByYW5kb21fcmFuZ2UgaSBqIHN0ID0gaSArIHJhbmRvbSAoaiAtIGkpIHN0XG5sZXQgcHAgZm10ID0gRm9ybWF0LnBwX3ByaW50X2ludCBmbXRcbmxldCBtb3N0X3NpZ25pZmljYW50X2JpdCA9IC0xIGx4b3IgKC0xIGxzciAxKVxubGV0IHRvX3N0cmluZyA9IHN0cmluZ19vZl9pbnRcbmxldCBvZl9zdHJpbmcgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbmxldCBvZl9zdHJpbmdfZXhuID0gU3RkbGliLmludF9vZl9zdHJpbmdcbmxldCB0b19mbG9hdCA9IGZsb2F0X29mX2ludFxubGV0IG9mX2Zsb2F0ID0gaW50X29mX2Zsb2F0XG5cbnR5cGUgb3V0cHV0ID0gY2hhciAtPiB1bml0XG5cbigqIGFic3RyYWN0IHByaW50ZXIgKilcbmxldCB0b19iaW5hcnlfZ2VuIChvdXQgOiBvdXRwdXQpIG4gPVxuICBsZXQgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiAoXG4gICAgICBvdXQgJy0nO1xuICAgICAgLW5cbiAgICApIGVsc2VcbiAgICAgIG5cbiAgaW5cbiAgb3V0ICcwJztcbiAgb3V0ICdiJztcbiAgbGV0IHJlYyBsb29wIHN0YXJ0ZWQgYml0IG4gPVxuICAgIGlmIGJpdCA9IDAgdGhlbiAoXG4gICAgICBpZiBub3Qgc3RhcnRlZCB0aGVuIG91dCAnMCdcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGIgPSBuIGxhbmQgYml0IGluXG4gICAgICBpZiBiID0gMCB0aGVuIChcbiAgICAgICAgaWYgc3RhcnRlZCB0aGVuIG91dCAnMCc7XG4gICAgICAgIGxvb3Agc3RhcnRlZCAoYml0IGxzciAxKSBuXG4gICAgICApIGVsc2UgKFxuICAgICAgICBvdXQgJzEnO1xuICAgICAgICBsb29wIHRydWUgKGJpdCBsc3IgMSkgblxuICAgICAgKVxuICAgIClcbiAgaW5cbiAgbG9vcCBmYWxzZSBtb3N0X3NpZ25pZmljYW50X2JpdCBuXG5cbmxldCBwcF9iaW5hcnkgb3V0IG4gPSB0b19iaW5hcnlfZ2VuIChGb3JtYXQucHBfcHJpbnRfY2hhciBvdXQpIG5cblxubGV0IHRvX3N0cmluZ19iaW5hcnkgbiA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDE2IGluXG4gIHRvX2JpbmFyeV9nZW4gKEJ1ZmZlci5hZGRfY2hhciBidWYpIG47XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgcmFuZ2UgKGkgKyBzdGVwKSBqIHlpZWxkXG4gICAgKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0ludC5yYW5nZV9ieVwiKVxuICBlbHNlIGlmXG4gICAgaWYgc3RlcCA+IDAgdGhlblxuICAgICAgaSA+IGpcbiAgICBlbHNlXG4gICAgICBpIDwgalxuICB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKCgoaiAtIGkpIC8gc3RlcCAqIHN0ZXApICsgaSkgeWllbGRcblxuKCpcbiAgZnJvbSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYW1taW5nX3dlaWdodFxuXG4gIC8vVGhpcyB1c2VzIGZld2VyIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0aGFuIGFueSBvdGhlciBrbm93blxuICAvL2ltcGxlbWVudGF0aW9uIG9uIG1hY2hpbmVzIHdpdGggc2xvdyBtdWx0aXBsaWNhdGlvbi5cbiAgLy9JdCB1c2VzIDE3IGFyaXRobWV0aWMgb3BlcmF0aW9ucy5cbiAgaW50IHBvcGNvdW50XzIodWludDY0X3QgeCkge1xuICAgIHggLT0gKHggPj4gMSkgJiBtMTsgICAgICAgICAgICAgLy9wdXQgY291bnQgb2YgZWFjaCAyIGJpdHMgaW50byB0aG9zZSAyIGJpdHNcbiAgICB4ID0gKHggJiBtMikgKyAoKHggPj4gMikgJiBtMik7IC8vcHV0IGNvdW50IG9mIGVhY2ggNCBiaXRzIGludG8gdGhvc2UgNCBiaXRzXG4gICAgeCA9ICh4ICsgKHggPj4gNCkpICYgbTQ7ICAgICAgICAvL3B1dCBjb3VudCBvZiBlYWNoIDggYml0cyBpbnRvIHRob3NlIDggYml0c1xuICAgIHggKz0geCA+PiAgODsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMTYgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMTY7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDMyIGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgeCArPSB4ID4+IDMyOyAgLy9wdXQgY291bnQgb2YgZWFjaCA2NCBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHJldHVybiB4ICYgMHg3ZjtcbiAgfVxuXG4gICBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NVxuICAgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNcbiAgIG00ID0gMHgwZjBmMGYwZjBmMGYwZjBmXG4qKVxubGV0IHBvcGNvdW50IChiIDogaW50KSA6IGludCA9XG4gIGxldCBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NUwgaW5cbiAgbGV0IG0yID0gMHgzMzMzMzMzMzMzMzMzMzMzTCBpblxuICBsZXQgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZMIGluXG4gIGxldCBvcGVuIEludDY0IGluXG4gIGxldCBiID0gb2ZfaW50IGIgaW5cbiAgKCogaW50LT5pbnQ2NCAqKVxuICBsZXQgYiA9IGxvZ2FuZCBiIDB4N2ZmZmZmZmZmZmZmZmZmZkwgaW5cblxuICAoKiByZW1vdmUgc2lnbiBiaXQsIHdlIGRlYWwgd2l0aCB1aW50NjQgaGVyZSAqKVxuICBsZXQgYiA9IHN1YiBiIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxKSBtMSkgaW5cbiAgbGV0IGIgPSBhZGQgKGxvZ2FuZCBiIG0yKSAobG9nYW5kIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMikgbTIpIGluXG4gIGxldCBiID0gbG9nYW5kIChhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDQpKSBtNCBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgOCkgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDE2KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMzIpIGluXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZkwgaW5cbiAgdG9faW50IGJcblxubGV0IGxvZ2FuZCA9ICggbGFuZCApXG5sZXQgbG9nb3IgPSAoIGxvciApXG5sZXQgbG9neG9yID0gKCBseG9yIClcbmxldCBsb2dub3QgPSBsbm90XG5sZXQgc2hpZnRfbGVmdCA9ICggbHNsIClcbmxldCBzaGlmdF9yaWdodCA9ICggYXNyIClcbmxldCBzaGlmdF9yaWdodF9sb2dpY2FsID0gKCBsc3IgKVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxudHlwZSB0ID0gZmxvYXRcblxudHlwZSBmcGNsYXNzID0gU3RkbGliLmZwY2xhc3MgPVxuICB8IEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA9IClcbiAgbGV0ICggPD4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD4gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbiAgbGV0ICggfi0gKSA6IHQgLT4gdCA9IFN0ZGxpYi4oIH4tLiApXG4gIGxldCAoICsgKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggKy4gKVxuICBsZXQgKCAtICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oIC0uIClcbiAgbGV0ICggKiApIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIuKCAqLiApXG4gIGxldCAoIC8gKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggLy4gKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IG5hbiA9IFN0ZGxpYi5uYW5cbmxldCBpbmZpbml0eSA9IFN0ZGxpYi5pbmZpbml0eVxubGV0IG5lZ19pbmZpbml0eSA9IFN0ZGxpYi5uZWdfaW5maW5pdHlcbmxldCBtYXhfdmFsdWUgPSBpbmZpbml0eVxubGV0IG1pbl92YWx1ZSA9IG5lZ19pbmZpbml0eVxubGV0IG1heF9maW5pdGVfdmFsdWUgPSBTdGRsaWIubWF4X2Zsb2F0XG5sZXQgZXBzaWxvbiA9IFN0ZGxpYi5lcHNpbG9uX2Zsb2F0XG5sZXQgcGkgPSAweDEuOTIxZmI1NDQ0MmQxOHArMVxubGV0IGlzX25hbiB4ID0gU3RkbGliLihjbGFzc2lmeV9mbG9hdCB4ID0gU3RkbGliLkZQX25hbilcbmxldCBhZGQgPSAoICsuIClcbmxldCBzdWIgPSAoIC0uIClcbmxldCBtdWwgPSAoICouIClcbmxldCBkaXYgPSAoIC8uIClcbmxldCBuZWcgPSAoIH4tLiApXG5sZXQgYWJzID0gU3RkbGliLmFic19mbG9hdFxubGV0IHNjYWxlID0gKCAqLiApXG5cbmxldCBtaW4gKHggOiB0KSB5ID1cbiAgbWF0Y2ggU3RkbGliLmNsYXNzaWZ5X2Zsb2F0IHgsIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB5IHdpdGhcbiAgfCBGUF9uYW4sIF8gLT4geVxuICB8IF8sIEZQX25hbiAtPiB4XG4gIHwgXyAtPlxuICAgIGlmIHggPCB5IHRoZW5cbiAgICAgIHhcbiAgICBlbHNlXG4gICAgICB5XG5cbmxldCBtYXggKHggOiB0KSB5ID1cbiAgbWF0Y2ggU3RkbGliLmNsYXNzaWZ5X2Zsb2F0IHgsIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB5IHdpdGhcbiAgfCBGUF9uYW4sIF8gLT4geVxuICB8IF8sIEZQX25hbiAtPiB4XG4gIHwgXyAtPlxuICAgIGlmIHggPiB5IHRoZW5cbiAgICAgIHhcbiAgICBlbHNlXG4gICAgICB5XG5cbmxldCBlcXVhbCAoYSA6IGZsb2F0KSBiID0gYSA9IGJcbmxldCBoYXNoIDogdCAtPiBpbnQgPSBIYXNodGJsLmhhc2hcbmxldCBjb21wYXJlIChhIDogZmxvYXQpIGIgPSBTdGRsaWIuY29tcGFyZSBhIGJcblxuW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfZmxvYXRcblxubGV0IGZzaWduIGEgPVxuICBpZiBpc19uYW4gYSB0aGVuXG4gICAgbmFuXG4gIGVsc2UgaWYgYSA9IDAuIHRoZW5cbiAgICBhXG4gIGVsc2VcbiAgICBTdGRsaWIuY29weXNpZ24gMS4gYVxuXG5leGNlcHRpb24gVHJhcE5hTiBvZiBzdHJpbmdcblxubGV0IHNpZ25fZXhuIChhIDogZmxvYXQpID1cbiAgaWYgaXNfbmFuIGEgdGhlblxuICAgIHJhaXNlIChUcmFwTmFOIFwic2lnbl9leG5cIilcbiAgZWxzZVxuICAgIGNvbXBhcmUgYSAwLlxuXG5sZXQgcm91bmQgeCA9XG4gIGxldCBsb3cgPSBmbG9vciB4IGluXG4gIGxldCBoaWdoID0gY2VpbCB4IGluXG4gIGlmIHggLS4gbG93ID4gaGlnaCAtLiB4IHRoZW5cbiAgICBoaWdoXG4gIGVsc2VcbiAgICBsb3dcblxubGV0IHRvX2ludCAoYSA6IGZsb2F0KSA9IFN0ZGxpYi5pbnRfb2ZfZmxvYXQgYVxubGV0IG9mX2ludCAoYSA6IGludCkgPSBTdGRsaWIuZmxvYXRfb2ZfaW50IGFcbmxldCB0b19zdHJpbmcgKGEgOiBmbG9hdCkgPSBTdGRsaWIuc3RyaW5nX29mX2Zsb2F0IGFcbmxldCBvZl9zdHJpbmdfZXhuIChhIDogc3RyaW5nKSA9IFN0ZGxpYi5mbG9hdF9vZl9zdHJpbmcgYVxuXG5sZXQgb2Zfc3RyaW5nX29wdCAoYSA6IHN0cmluZykgPVxuICB0cnkgU29tZSAoU3RkbGliLmZsb2F0X29mX3N0cmluZyBhKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCByYW5kb20gbiBzdCA9IFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCBuXG5sZXQgcmFuZG9tX3NtYWxsID0gcmFuZG9tIDEwMC4wXG5sZXQgcmFuZG9tX3JhbmdlIGkgaiBzdCA9IGkgKy4gcmFuZG9tIChqIC0uIGkpIHN0XG5sZXQgZXF1YWxfcHJlY2lzaW9uIH5lcHNpbG9uIGEgYiA9IGFic19mbG9hdCAoYSAtLiBiKSA8IGVwc2lsb25cbmxldCBjbGFzc2lmeSA9IFN0ZGxpYi5jbGFzc2lmeV9mbG9hdFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0IHJlYyBpbml0X3RhaWxyZWNfYXV4IGFjYyBpIG4gZiA9XG4gIGlmIGkgPj0gbiB0aGVuIGFjY1xuICBlbHNlIGluaXRfdGFpbHJlY19hdXggKGYgaSA6OiBhY2MpIChpKzEpIG4gZlxuXG5sZXQgcmVjIGluaXRfYXV4IGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gW11cbiAgZWxzZVxuICAgIGxldCByID0gZiBpIGluXG4gICAgciA6OiBpbml0X2F1eCAoaSsxKSBuIGZcblxubGV0IHJldl9pbml0X3RocmVzaG9sZCA9XG4gIG1hdGNoIFN5cy5iYWNrZW5kX3R5cGUgd2l0aFxuICB8IFN5cy5OYXRpdmUgfCBTeXMuQnl0ZWNvZGUgLT4gMTBfMDAwXG4gICgqIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgdGhlIHN0YWNrLCBiZXR0ZXIgYmUgc2FmZSBhbmQgYXNzdW1lIGl0J3NcbiAgICAgc21hbGwuICopXG4gIHwgU3lzLk90aGVyIF8gLT4gNTBcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGlmIGxlbiA+IHJldl9pbml0X3RocmVzaG9sZCB0aGVuIHJldiAoaW5pdF90YWlscmVjX2F1eCBbXSAwIGxlbiBmKVxuICBlbHNlIGluaXRfYXV4IDAgbGVuIGZcblxubGV0IHJlYyBmbGF0dGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGw6OnIgLT4gbCBAIGZsYXR0ZW4gclxuXG5sZXQgY29uY2F0ID0gZmxhdHRlblxuXG5sZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGE6OmwgLT4gbGV0IHIgPSBmIGEgaW4gciA6OiBtYXAgZiBsXG5cbmxldCByZWMgbWFwaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgaSBhIGluIHIgOjogbWFwaSAoaSArIDEpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldCByZWMgbWFwMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBsZXQgciA9IGYgYTEgYTIgaW4gciA6OiBtYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX2FsbCBwID1cbiAgbGV0IHJlYyBmaW5kIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2N1XG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIGZpbmQgKHggOjogYWNjdSkgbCBlbHNlIGZpbmQgYWNjdSBsIGluXG4gIGZpbmQgW11cblxubGV0IGZpbHRlciA9IGZpbmRfYWxsXG5cbmxldCBmaWx0ZXJpIHAgbCA9XG4gIGxldCByZWMgYXV4IGkgYWNjID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByZXYgYWNjXG4gIHwgeDo6bCAtPiBhdXggKGkgKyAxKSAoaWYgcCBpIHggdGhlbiB4OjphY2MgZWxzZSBhY2MpIGxcbiAgaW5cbiAgYXV4IDAgW10gbFxuXG5sZXQgZmlsdGVyX21hcCBmID1cbiAgbGV0IHJlYyBhdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBhdXggYWNjdSBsXG4gICAgICAgIHwgU29tZSB2IC0+IGF1eCAodiA6OiBhY2N1KSBsXG4gIGluXG4gIGF1eCBbXVxuXG5sZXQgY29uY2F0X21hcCBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjXG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICBsZXQgeHMgPSBmIHggaW5cbiAgICAgICBhdXggZiAocmV2X2FwcGVuZCB4cyBhY2MpIGxcbiAgaW4gYXV4IGYgW10gbFxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjY3UgbCA9XG4gIGxldCByZWMgYXV4IGFjY3UgbF9hY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGFjY3UsIHJldiBsX2FjY3VcbiAgICB8IHggOjogbCAtPlxuICAgICAgICBsZXQgYWNjdSwgeCA9IGYgYWNjdSB4IGluXG4gICAgICAgIGF1eCBhY2N1ICh4IDo6IGxfYWNjdSkgbCBpblxuICBhdXggYWNjdSBbXSBsXG5cbmxldCBwYXJ0aXRpb24gcCBsID1cbiAgbGV0IHJlYyBwYXJ0IHllcyBubyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiB5ZXMsIHJldiBubylcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gcGFydCAoeCA6OiB5ZXMpIG5vIGwgZWxzZSBwYXJ0IHllcyAoeCA6OiBubykgbCBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXAgcCBsID1cbiAgbGV0IHJlYyBwYXJ0IGxlZnQgcmlnaHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgbGVmdCwgcmV2IHJpZ2h0KVxuICB8IHggOjogbCAtPlxuICAgICBiZWdpbiBtYXRjaCBwIHggd2l0aFxuICAgICAgIHwgRWl0aGVyLkxlZnQgdiAtPiBwYXJ0ICh2IDo6IGxlZnQpIHJpZ2h0IGxcbiAgICAgICB8IEVpdGhlci5SaWdodCB2IC0+IHBhcnQgbGVmdCAodiA6OiByaWdodCkgbFxuICAgICBlbmRcbiAgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCByZWMgc3BsaXQgPSBmdW5jdGlvblxuICAgIFtdIC0+IChbXSwgW10pXG4gIHwgKHgseSk6OmwgLT5cbiAgICAgIGxldCAocngsIHJ5KSA9IHNwbGl0IGwgaW4gKHg6OnJ4LCB5OjpyeSlcblxubGV0IHJlYyBjb21iaW5lIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiAoYTEsIGEyKSA6OiBjb21iaW5lIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5jb21iaW5lXCJcblxuKCoqIHNvcnRpbmcgKilcblxubGV0IHJlYyBtZXJnZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBsMiAtPiBsMlxuICB8IGwxLCBbXSAtPiBsMVxuICB8IGgxIDo6IHQxLCBoMiA6OiB0MiAtPlxuICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgIHRoZW4gaDEgOjogbWVyZ2UgY21wIHQxIGwyXG4gICAgICBlbHNlIGgyIDo6IG1lcmdlIGNtcCBsMSB0MlxuXG5cbmxldCBzdGFibGVfc29ydCBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA8PSAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA+IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCBzb3J0ID0gc3RhYmxlX3NvcnRcbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiBOb3RlOiBvbiBhIGxpc3Qgb2YgbGVuZ3RoIGJldHdlZW4gYWJvdXQgMTAwMDAwIChkZXBlbmRpbmcgb24gdGhlIG1pbm9yXG4gICBoZWFwIHNpemUgYW5kIHRoZSB0eXBlIG9mIHRoZSBsaXN0KSBhbmQgU3lzLm1heF9hcnJheV9zaXplLCBpdCBpc1xuICAgYWN0dWFsbHkgZmFzdGVyIHRvIHVzZSB0aGUgZm9sbG93aW5nLCBidXQgaXQgbWlnaHQgYWxzbyB1c2UgbW9yZSBtZW1vcnlcbiAgIGJlY2F1c2UgdGhlIGFyZ3VtZW50IGxpc3QgY2Fubm90IGJlIGRlYWxsb2NhdGVkIGluY3JlbWVudGFsbHkuXG5cbiAgIEFsc28sIHRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIGluIHRoaXMgY29kZSBvciBpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIG9ial90cnVuY2F0ZS5cblxuZXh0ZXJuYWwgb2JqX3RydW5jYXRlIDogJ2EgYXJyYXkgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcblxubGV0IGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYSA9XG4gIGxldCBsID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGFjY3UgbiBwID1cbiAgICBpZiBwIDw9IDAgdGhlbiBhY2N1IGVsc2UgYmVnaW5cbiAgICAgIGlmIHAgPSBuIHRoZW4gYmVnaW5cbiAgICAgICAgb2JqX3RydW5jYXRlIGEgcDtcbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSAobi0xMDAwKSAocC0xKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSBuIChwLTEpXG4gICAgICBlbmRcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBbXSAobC0xMDAwKSBsXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgQXJyYXkuc3RhYmxlX3NvcnQgY21wIGE7XG4gIGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYVxuXG4qKVxuXG5cbigqKiBzb3J0aW5nICsgcmVtb3ZpbmcgZHVwbGljYXRlcyAqKVxuXG5sZXQgc29ydF91bmlxIGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlIHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjIDwgMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZV9yZXYgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RocyBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8sIFtdIC0+IDFcbiAgfCBfIDo6IGwxLCBfIDo6IGwyIC0+IGNvbXBhcmVfbGVuZ3RocyBsMSBsMlxuOztcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcbjs7XG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXQgb2Zfc2VxIHNlcSA9XG4gIGxldCByZWMgZGlyZWN0IGRlcHRoIHNlcSA6IF8gbGlzdCA9XG4gICAgaWYgZGVwdGg9MFxuICAgIHRoZW5cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIHNlcVxuICAgICAgfD4gcmV2ICgqIHRhaWxyZWMgKilcbiAgICBlbHNlIG1hdGNoIHNlcSgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgbmV4dCkgLT4geCA6OiBkaXJlY3QgKGRlcHRoLTEpIG5leHRcbiAgaW5cbiAgZGlyZWN0IDUwMCBzZXFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICBUaGlzIGlzIGEgbGFnZ2VkLUZpYm9uYWNjaSBGKDU1LCAyNCwgKykgd2l0aCBhIG1vZGlmaWVkIGFkZGl0aW9uXG4gICBmdW5jdGlvbiB0byBlbmhhbmNlIHRoZSBtaXhpbmcgb2YgYml0cy5cbiAgIElmIHdlIHVzZSBub3JtYWwgYWRkaXRpb24sIHRoZSBsb3ctb3JkZXIgYml0IGZhaWxzIHRlc3RzIDEgYW5kIDdcbiAgIG9mIHRoZSBEaWVoYXJkIHRlc3Qgc3VpdGUsIGFuZCBiaXRzIDEgYW5kIDIgYWxzbyBmYWlsIHRlc3QgNy5cbiAgIElmIHdlIHVzZSBtdWx0aXBsaWNhdGlvbiBhcyBzdWdnZXN0ZWQgYnkgTWFyc2FnbGlhLCBpdCBkb2Vzbid0IGZhcmVcbiAgIG11Y2ggYmV0dGVyLlxuICAgQnkgbWl4aW5nIHRoZSBiaXRzIG9mIG9uZSBvZiB0aGUgbnVtYmVycyBiZWZvcmUgYWRkaXRpb24gKFhPUiB0aGVcbiAgIDUgaGlnaC1vcmRlciBiaXRzIGludG8gdGhlIGxvdy1vcmRlciBiaXRzKSwgd2UgZ2V0IGEgZ2VuZXJhdG9yIHRoYXRcbiAgIHBhc3NlcyBhbGwgdGhlIERpZWhhcmQgdGVzdHMuXG4qKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgdHlwZSB0ID0geyBzdCA6IGludCBhcnJheTsgbXV0YWJsZSBpZHggOiBpbnQgfVxuXG4gIGxldCBuZXdfc3RhdGUgKCkgPSB7IHN0ID0gQXJyYXkubWFrZSA1NSAwOyBpZHggPSAwIH1cbiAgbGV0IGFzc2lnbiBzdDEgc3QyID1cbiAgICBBcnJheS5ibGl0IHN0Mi5zdCAwIHN0MS5zdCAwIDU1O1xuICAgIHN0MS5pZHggPC0gc3QyLmlkeFxuXG5cbiAgbGV0IGZ1bGxfaW5pdCBzIHNlZWQgPVxuICAgIGxldCBjb21iaW5lIGFjY3UgeCA9IERpZ2VzdC5zdHJpbmcgKGFjY3UgXiBJbnQudG9fc3RyaW5nIHgpIGluXG4gICAgbGV0IGV4dHJhY3QgZCA9XG4gICAgICBDaGFyLmNvZGUgZC5bMF0gKyAoQ2hhci5jb2RlIGQuWzFdIGxzbCA4KSArIChDaGFyLmNvZGUgZC5bMl0gbHNsIDE2KVxuICAgICAgKyAoQ2hhci5jb2RlIGQuWzNdIGxzbCAyNClcbiAgICBpblxuICAgIGxldCBzZWVkID0gaWYgQXJyYXkubGVuZ3RoIHNlZWQgPSAwIHRoZW4gW3wgMCB8XSBlbHNlIHNlZWQgaW5cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0IGRvXG4gICAgICBzLnN0LihpKSA8LSBpO1xuICAgIGRvbmU7XG4gICAgbGV0IGFjY3UgPSByZWYgXCJ4XCIgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgKyBJbnQubWF4IDU1IGwgZG9cbiAgICAgIGxldCBqID0gaSBtb2QgNTUgaW5cbiAgICAgIGxldCBrID0gaSBtb2QgbCBpblxuICAgICAgYWNjdSA6PSBjb21iaW5lICFhY2N1IHNlZWQuKGspO1xuICAgICAgcy5zdC4oaikgPC0gKHMuc3QuKGopIGx4b3IgZXh0cmFjdCAhYWNjdSkgbGFuZCAweDNGRkZGRkZGOyAgKCogUFIjNTU3NSAqKVxuICAgIGRvbmU7XG4gICAgcy5pZHggPC0gMFxuXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGZ1bGxfaW5pdCByZXN1bHQgc2VlZDtcbiAgICByZXN1bHRcblxuXG4gIGxldCBtYWtlX3NlbGZfaW5pdCAoKSA9IG1ha2UgKHJhbmRvbV9zZWVkICgpKVxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBhc3NpZ24gcmVzdWx0IHM7XG4gICAgcmVzdWx0XG5cblxuICAoKiBSZXR1cm5zIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMTA3Mzc0MTgyNCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBzLmlkeCA8LSAocy5pZHggKyAxKSBtb2QgNTU7XG4gICAgbGV0IGN1cnZhbCA9IHMuc3QuKHMuaWR4KSBpblxuICAgIGxldCBuZXd2YWwgPSBzLnN0Ligocy5pZHggKyAyNCkgbW9kIDU1KVxuICAgICAgICAgICAgICAgICArIChjdXJ2YWwgbHhvciAoKGN1cnZhbCBsc3IgMjUpIGxhbmQgMHgxRikpIGluXG4gICAgbGV0IG5ld3ZhbDMwID0gbmV3dmFsIGxhbmQgMHgzRkZGRkZGRiBpbiAgKCogUFIjNTU3NSAqKVxuICAgIHMuc3QuKHMuaWR4KSA8LSBuZXd2YWwzMDtcbiAgICBuZXd2YWwzMFxuXG5cbiAgbGV0IHJlYyBpbnRhdXggcyBuID1cbiAgICBsZXQgciA9IGJpdHMgcyBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gMHgzRkZGRkZGRiAtIG4gKyAxIHRoZW4gaW50YXV4IHMgbiBlbHNlIHZcblxuICBsZXQgaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB8fCBib3VuZCA8PSAwXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRcIlxuICAgIGVsc2UgaW50YXV4IHMgYm91bmRcblxuICBsZXQgcmVjIGludDYzYXV4IHMgbiA9XG4gICAgbGV0IG1heF9pbnRfMzIgPSAoMSBsc2wgMzApICsgMHgzRkZGRkZGRiBpbiAoKiAweDdGRkZGRkZGICopXG4gICAgbGV0IGIxID0gYml0cyBzIGluXG4gICAgbGV0IGIyID0gYml0cyBzIGluXG4gICAgbGV0IChyLCBtYXhfaW50KSA9XG4gICAgICBpZiBuIDw9IG1heF9pbnRfMzIgdGhlblxuICAgICAgICAoKiAzMSByYW5kb20gYml0cyBvbiBib3RoIDY0LWJpdCBPQ2FtbCBhbmQgSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDE1IGJpdHMgb2YgYjEgYW5kIDE2IGJpdHMgb2YgYjIuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKChiMiBsYW5kIDB4M0ZGRkMwMDApIGxzbCAxKSBsb3IgKGIxIGxzciAxNSkpXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnRfMzIpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBiMyA9IGJpdHMgcyBpblxuICAgICAgICAoKiA2MiByYW5kb20gYml0cyBvbiA2NC1iaXQgT0NhbWw7IHVucmVhY2hhYmxlIG9uIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAyMCBiaXRzIG9mIGIxIGFuZCAyMSBiaXRzIG9mIGIyIGFuZCBiMy4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKChiMyBsYW5kIDB4M0ZGRkZFMDApIGxzbCAxMikgbG9yIChiMiBsc3IgOSkpIGxzbCAyMClcbiAgICAgICAgICAgIGxvciAoYjEgbHNyIDEwKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50KVxuICAgIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiBtYXhfaW50IC0gbiArIDEgdGhlbiBpbnQ2M2F1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGZ1bGxfaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uZnVsbF9pbnRcIlxuICAgIGVsc2UgaWYgYm91bmQgPiAweDNGRkZGRkZGIHRoZW5cbiAgICAgIGludDYzYXV4IHMgYm91bmRcbiAgICBlbHNlXG4gICAgICBpbnRhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQzMmF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDMyLm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDMyLnNoaWZ0X2xlZnQgKEludDMyLm9mX2ludCAoYml0cyBzIGxhbmQgMSkpIDMwIGluXG4gICAgbGV0IHIgPSBJbnQzMi5sb2dvciBiMSBiMiBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgIGlmIEludDMyLnN1YiByIHYgPiBJbnQzMi5hZGQgKEludDMyLnN1YiBJbnQzMi5tYXhfaW50IG4pIDFsXG4gICAgdGhlbiBpbnQzMmF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50MzIgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDMyXCJcbiAgICBlbHNlIGludDMyYXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQ2NC5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcykpIDMwIGluXG4gICAgbGV0IGIzID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMgbGFuZCA3KSkgNjAgaW5cbiAgICBsZXQgciA9IEludDY0LmxvZ29yIGIxIChJbnQ2NC5sb2dvciBiMiBiMykgaW5cbiAgICBsZXQgdiA9IEludDY0LnJlbSByIG4gaW5cbiAgICBpZiBJbnQ2NC5zdWIgciB2ID4gSW50NjQuYWRkIChJbnQ2NC5zdWIgSW50NjQubWF4X2ludCBuKSAxTFxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cblxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cblxuICAoKiBSZXR1cm5zIGEgZmxvYXQgMCA8PSB4IDw9IDEgd2l0aCBhdCBtb3N0IDYwIGJpdHMgb2YgcHJlY2lzaW9uLiAqKVxuICBsZXQgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IHNjYWxlID0gMTA3Mzc0MTgyNC4wICAoKiAyXjMwICopXG4gICAgYW5kIHIxID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgYW5kIHIyID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgaW4gKHIxIC8uIHNjYWxlICsuIHIyKSAvLiBzY2FsZVxuXG5cbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgbGV0IGJvb2wgcyA9IChiaXRzIHMgbGFuZCAxID0gMClcblxuICBsZXQgYml0czMyIHMgPVxuICAgIGxldCBiMSA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIEludDMyLihsb2dvciBiMSAoc2hpZnRfbGVmdCBiMiAxNikpXG5cbiAgbGV0IGJpdHM2NCBzID1cbiAgICBsZXQgYjEgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIzID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOCkgaW4gICgqIDIyIGJpdHMgKilcbiAgICBJbnQ2NC4obG9nb3IgYjEgKGxvZ29yIChzaGlmdF9sZWZ0IGIyIDIxKSAoc2hpZnRfbGVmdCBiMyA0MikpKVxuXG4gIGxldCBuYXRpdmViaXRzID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGJpdHMzMiBzKVxuICAgIGVsc2UgZnVuIHMgLT4gSW50NjQudG9fbmF0aXZlaW50IChiaXRzNjQgcylcblxuZW5kXG5cbigqIFRoaXMgaXMgdGhlIHN0YXRlIHlvdSBnZXQgd2l0aCBbaW5pdCAyNzE4MjgxOF0gYW5kIHRoZW4gYXBwbHlpbmdcbiAgIHRoZSBcImxhbmQgMHgzRkZGRkZGRlwiIGZpbHRlciB0byB0aGVtLiAgU2VlICM1NTc1LCAjNTc5MywgIzU5NzcuICopXG5sZXQgZGVmYXVsdCA9IHtcbiAgU3RhdGUuc3QgPSBbfFxuICAgICAgMHgzYWUyNTIyYjsgMHgxZDhkNDYzNDsgMHgxNWI0ZmFkMDsgMHgxOGIxNGFjZTsgMHgxMmY4YTNjNDsgMHgzYjA4NmM0NztcbiAgICAgIDB4MTZkNDY3ZDY7IDB4MTAxZDkxYzc7IDB4MzIxZGYxNzc7IDB4MDE3NmMxOTM7IDB4MWZmNzJiZjE7IDB4MWU4ODkxMDk7XG4gICAgICAweDBiNDY0YjE4OyAweDJiODZiOTdjOyAweDA4OTFkYTQ4OyAweDAzMTM3NDYzOyAweDA4NWFjNWExOyAweDE1ZDYxZjJmO1xuICAgICAgMHgzYmNlZDM1OTsgMHgyOWMxYzEzMjsgMHgzYTg2NzY2ZTsgMHgzNjZkOGM4NjsgMHgxZjViNjIyMjsgMHgzY2UxYjU5ZjtcbiAgICAgIDB4MmViZjc4ZTE7IDB4MjdjZDFiODY7IDB4MjU4ZjNkYzM7IDB4Mzg5YTgxOTQ7IDB4MDJlNGM0NGM7IDB4MThjNDNmN2Q7XG4gICAgICAweDBmNmU1MzRmOyAweDFlN2RmMzU5OyAweDA1NWQwYjdlOyAweDEwZTg0ZTdlOyAweDEyNjE5OGU0OyAweDBlNzcyMmNiO1xuICAgICAgMHgxY2JlZGUyODsgMHgzMzkxYjk2NDsgMHgzZDQwZTkyYTsgMHgwYzU5OTMzZDsgMHgwYjhjZDBiNzsgMHgyNGVmZmYxYztcbiAgICAgIDB4MjgwM2ZkYWE7IDB4MDhlYmM3MmU7IDB4MGY1MjJlMzI7IDB4MDUzOThlZGM7IDB4MjE0NGEwNGM7IDB4MGFlZjNjYmQ7XG4gICAgICAweDAxYWQ0NzE5OyAweDM1YjkzY2Q2OyAweDJhNTU5ZDRmOyAweDFlNmZkNzY4OyAweDI2ZTI3ZjM2OyAweDE4NmYxOGMzO1xuICAgICAgMHgyZmJmOTY3YTtcbiAgICB8XTtcbiAgU3RhdGUuaWR4ID0gMDtcbn1cblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIGRlZmF1bHRcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgZGVmYXVsdCBib3VuZFxubGV0IGZ1bGxfaW50IGJvdW5kID0gU3RhdGUuZnVsbF9pbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgZGVmYXVsdCBib3VuZFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCBkZWZhdWx0IGJvdW5kXG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCBkZWZhdWx0IHNjYWxlXG5sZXQgYm9vbCAoKSA9IFN0YXRlLmJvb2wgZGVmYXVsdFxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiBkZWZhdWx0XG5sZXQgYml0czY0ICgpID0gU3RhdGUuYml0czY0IGRlZmF1bHRcbmxldCBuYXRpdmViaXRzICgpID0gU3RhdGUubmF0aXZlYml0cyBkZWZhdWx0XG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IHNlZWRcbmxldCBpbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IGRlZmF1bHRcbmxldCBzZXRfc3RhdGUgcyA9IFN0YXRlLmFzc2lnbiBkZWZhdWx0IHNcblxuKCoqKioqKioqKioqKioqKioqKioqXG5cbigqIFRlc3QgZnVuY3Rpb25zLiAgTm90IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LlxuICAgVGhlIFtjaGlzcXVhcmVdIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBuID4gMTByLlxuICAgSXQgcmV0dXJucyBhIHRyaXBsZSAobG93LCBhY3R1YWwsIGhpZ2gpLlxuICAgSWYgbG93IDw9IGFjdHVhbCA8PSBoaWdoLCB0aGUgW2ddIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCxcbiAgIG90aGVyd2lzZSBpdCBmYWlsZWQuXG5cbiAgU29tZSByZXN1bHRzOlxuXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDUwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI5OTc5MjY0MzsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAxNDE0MjEzNjsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMjQ7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAwOyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMjQ7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDE0MTQyMTM2OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMjk5NzkyNjQzOyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbi0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTk3LjUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4OS43NDAwMDAwMDAwMDUyMzg3LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDQ4NTguNTc4NjQzNzYyNjksIDUwNDUuNSwgNTE0MS40MjEzNTYyMzczMSlcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9XG4oOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTQ0LjgwNTk5OTk5OTk4MjMwNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDE5LjE5NzQ0MDAwMDAwMzU1LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU5LjMxNzc2MDAwMDAwNTM2LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDM5Ljk4NDYzOTk5OTk5NTEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU0LjM4MjA3OTk5OTk5NTc3LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDkwLjA5NjAwMDAwMDAwNSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDc2Ljc4NzIwMDAwMDAwNjEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjE3NjAwMDAwMDAwNjc1MjEsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4yMTYwMDAwMDAwMDAzNDkyLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODAuNjIyMDAwMDAwMDAzMDI2OCwgMTIwLilcblxuKilcblxuKCogUmV0dXJuIHRoZSBzdW0gb2YgdGhlIHNxdWFyZXMgb2YgdltpMCxpMVsgKilcbmxldCByZWMgc3Vtc3EgdiBpMCBpMSA9XG4gIGlmIGkwID49IGkxIHRoZW4gMC4wXG4gIGVsc2UgaWYgaTEgPSBpMCArIDEgdGhlbiBTdGRsaWIuZmxvYXQgdi4oaTApICouIFN0ZGxpYi5mbG9hdCB2LihpMClcbiAgZWxzZSBzdW1zcSB2IGkwICgoaTAraTEpLzIpICsuIHN1bXNxIHYgKChpMCtpMSkvMikgaTFcblxuXG5sZXQgY2hpc3F1YXJlIGcgbiByID1cbiAgaWYgbiA8PSAxMCAqIHIgdGhlbiBpbnZhbGlkX2FyZyBcImNoaXNxdWFyZVwiO1xuICBsZXQgZiA9IEFycmF5Lm1ha2UgciAwIGluXG4gIGZvciBpID0gMSB0byBuIGRvXG4gICAgbGV0IHQgPSBnIHIgaW5cbiAgICBmLih0KSA8LSBmLih0KSArIDFcbiAgZG9uZTtcbiAgbGV0IHQgPSBzdW1zcSBmIDAgclxuICBhbmQgciA9IFN0ZGxpYi5mbG9hdCByXG4gIGFuZCBuID0gU3RkbGliLmZsb2F0IG4gaW5cbiAgbGV0IHNyID0gMi4wICouIHNxcnQgciBpblxuICAociAtLiBzciwgICAociAqLiB0IC8uIG4pIC0uIG4sICAgciArLiBzcilcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIGxpbmVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbSBudW1iZXJzLlxuKilcbmxldCBzdCA9IHJlZiAwXG5sZXQgaW5pdF9kaWZmIHIgPSBzdCA6PSBpbnQgclxubGV0IGRpZmYgciA9XG4gIGxldCB4MSA9ICFzdFxuICBhbmQgeDIgPSBpbnQgclxuICBpblxuICBzdCA6PSB4MjtcbiAgaWYgeDEgPj0geDIgdGhlblxuICAgIHgxIC0geDJcbiAgZWxzZVxuICAgIHIgKyB4MSAtIHgyXG5cblxubGV0IHN0MSA9IHJlZiAwXG5hbmQgc3QyID0gcmVmIDBcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIHF1YWRyYXRpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbVxuICAgbnVtYmVycy5cbiopXG5sZXQgaW5pdF9kaWZmMiByID0gc3QxIDo9IGludCByOyBzdDIgOj0gaW50IHJcbmxldCBkaWZmMiByID1cbiAgbGV0IHgxID0gIXN0MVxuICBhbmQgeDIgPSAhc3QyXG4gIGFuZCB4MyA9IGludCByXG4gIGluXG4gIHN0MSA6PSB4MjtcbiAgc3QyIDo9IHgzO1xuICAoeDMgLSB4MiAtIHgyICsgeDEgKyAyKnIpIG1vZCByXG5cblxuKioqKioqKioqKioqKioqKioqKiopXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE9wZXJhdGlvbnMgb24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIG9mIHZhbHVlcyAqKVxuXG50eXBlIHRcblxudHlwZSByYXdfZGF0YSA9IG5hdGl2ZWludFxuXG5leHRlcm5hbCByZXByIDogJ2EgLT4gdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG9iaiA6IHQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBtYWdpYyA6ICdhIC0+ICdiID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgaXNfaW50IDogdCAtPiBib29sID0gXCIlb2JqX2lzX2ludFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBpc19ibG9jayBhID0gbm90IChpc19pbnQgYSlcbmV4dGVybmFsIHRhZyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial90YWdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2V0X3RhZyA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3NldF90YWdcIlxuZXh0ZXJuYWwgc2l6ZSA6IHQgLT4gaW50ID0gXCIlb2JqX3NpemVcIlxuZXh0ZXJuYWwgcmVhY2hhYmxlX3dvcmRzIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1wiXG5leHRlcm5hbCBmaWVsZCA6IHQgLT4gaW50IC0+IHQgPSBcIiVvYmpfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X2ZpZWxkIDogdCAtPiBpbnQgLT4gdCAtPiB1bml0ID0gXCIlb2JqX3NldF9maWVsZFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfZ2V0XCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfc2V0IDpcbiAgICBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfc2V0XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGRvdWJsZV9maWVsZCB4IGkgPSBmbG9hdGFycmF5X2dldCAob2JqIHggOiBmbG9hdGFycmF5KSBpXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBzZXRfZG91YmxlX2ZpZWxkIHggaSB2ID1cbiAgZmxvYXRhcnJheV9zZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaSB2XG5leHRlcm5hbCByYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSA9IFwiY2FtbF9vYmpfcmF3X2ZpZWxkXCJcbmV4dGVybmFsIHNldF9yYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9vYmpfc2V0X3Jhd19maWVsZFwiXG5cbmV4dGVybmFsIG5ld19ibG9jayA6IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9vYmpfYmxvY2tcIlxuZXh0ZXJuYWwgZHVwIDogdCAtPiB0ID0gXCJjYW1sX29ial9kdXBcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5leHRlcm5hbCBhZGRfb2Zmc2V0IDogdCAtPiBJbnQzMi50IC0+IHQgPSBcImNhbWxfb2JqX2FkZF9vZmZzZXRcIlxuZXh0ZXJuYWwgd2l0aF90YWcgOiBpbnQgLT4gdCAtPiB0ID0gXCJjYW1sX29ial93aXRoX3RhZ1wiXG5cbmxldCBmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMFxubGV0IGxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDI0NVxuXG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcbmxldCBmaW5hbF90YWcgPSBjdXN0b21fdGFnXG5cblxubGV0IGludF90YWcgPSAxMDAwXG5sZXQgb3V0X29mX2hlYXBfdGFnID0gMTAwMVxubGV0IHVuYWxpZ25lZF90YWcgPSAxMDAyXG5cbm1vZHVsZSBDbG9zdXJlID0gc3RydWN0XG4gIHR5cGUgaW5mbyA9IHtcbiAgICBhcml0eTogaW50O1xuICAgIHN0YXJ0X2VudjogaW50O1xuICB9XG5cbiAgbGV0IGluZm9fb2ZfcmF3IChpbmZvIDogbmF0aXZlaW50KSA9XG4gICAgbGV0IG9wZW4gTmF0aXZlaW50IGluXG4gICAgbGV0IGFyaXR5ID1cbiAgICAgICgqIHNpZ25lZDogbmVnYXRpdmUgZm9yIHR1cGxlZCBmdW5jdGlvbnMgKilcbiAgICAgIGlmIFN5cy53b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyA1NilcbiAgICAgIGVsc2VcbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDI0KVxuICAgIGluXG4gICAgbGV0IHN0YXJ0X2VudiA9XG4gICAgICAoKiBzdGFydF9lbnYgaXMgdW5zaWduZWQsIGJ1dCB3ZSBrbm93IGl0IGNhbiBhbHdheXMgZml0IGFuIE9DYW1sXG4gICAgICAgICBpbnRlZ2VyIHNvIHdlIHVzZSBbdG9faW50XSBpbnN0ZWFkIG9mIFt1bnNpZ25lZF90b19pbnRdLiAqKVxuICAgICAgdG9faW50IChzaGlmdF9yaWdodF9sb2dpY2FsIChzaGlmdF9sZWZ0IGluZm8gOCkgOSkgaW5cbiAgICB7IGFyaXR5OyBzdGFydF9lbnYgfVxuXG4gICgqIG5vdGU6IHdlIGV4cGVjdCBhIGNsb3N1cmUsIG5vdCBhbiBpbmZpeCBwb2ludGVyICopXG4gIGxldCBpbmZvIChvYmogOiB0KSA9XG4gICAgYXNzZXJ0ICh0YWcgb2JqID0gY2xvc3VyZV90YWcpO1xuICAgIGluZm9fb2ZfcmF3IChyYXdfZmllbGQgb2JqIDEpXG5lbmRcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbmxldCBleHRlbnNpb25fY29uc3RydWN0b3IgPSBFeHRlbnNpb25fY29uc3RydWN0b3Iub2ZfdmFsXG5sZXQgZXh0ZW5zaW9uX25hbWUgPSBFeHRlbnNpb25fY29uc3RydWN0b3IubmFtZVxubGV0IGV4dGVuc2lvbl9pZCA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5pZFxuXG5tb2R1bGUgRXBoZW1lcm9uID0gc3RydWN0XG4gIHR5cGUgb2JqX3QgPSB0XG5cbiAgdHlwZSB0ICgqKiBlcGhlbWVyb24gKilcblxuICAgKCoqIFRvIGNoYW5nZSBpbiBzeW5jIHdpdGggd2Vhay5oICopXG4gIGxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcbiAgbGV0IG1heF9lcGhlX2xlbmd0aCA9IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9lcGhlX2NyZWF0ZVwiOztcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudCwgZXhjZXB0IHdoZW4gYWZsXG4gICBpbnN0cnVtZW50YXRpb24gaXMgdHVybmVkIG9uLiAqKVxuXG5sZXQgZm9yY2UgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gICgqIFVzaW5nIFtTeXMub3BhcXVlX2lkZW50aXR5XSBwcmV2ZW50cyB0d28gcG90ZW50aWFsIHByb2JsZW1zOlxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBoYXZlIEZvcndhcmRfdGFnLCB0aGVuIGl0cyB0YWcgY291bGQgaGF2ZVxuICAgICAgIGNoYW5nZWQgZHVyaW5nIEdDLCBzbyB0aGF0IGluZm9ybWF0aW9uIG11c3QgYmUgZm9yZ290dGVuIChzZWUgR1BSIzcxM1xuICAgICAgIGFuZCBpc3N1ZSAjNzMwMSlcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgaW1tdXRhYmxlLCB0aGVuIGlmIHRoZSBjb21waWxlclxuICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBsYXN0IGJyYW5jaCBpcyBub3QgdGFrZW4gaXQgd2lsbCBpc3N1ZSBhXG4gICAgICAgd2FybmluZyA1OSAobW9kaWZpY2F0aW9uIG9mIGFuIGltbXV0YWJsZSB2YWx1ZSkgKilcbiAgbGV0IGx6diA9IFN5cy5vcGFxdWVfaWRlbnRpdHkgbHp2IGluXG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfbGF6eV9ibG9jayBsenZcblxuXG5sZXQgZm9yY2VfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0xhenldOiBkZWZlcnJlZCBjb21wdXRhdGlvbnMgKilcblxuXG4oKlxuICAgV0FSTklORzogc29tZSBwdXJwbGUgbWFnaWMgaXMgZ29pbmcgb24gaGVyZS4gIERvIG5vdCB0YWtlIHRoaXMgZmlsZVxuICAgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcHJvZ3JhbSBpbiBPQ2FtbC5cbiopXG5cblxuKCogV2UgbWFrZSB1c2Ugb2YgdHdvIHNwZWNpYWwgdGFncyBwcm92aWRlZCBieSB0aGUgcnVudGltZTpcbiAgIFtsYXp5X3RhZ10gYW5kIFtmb3J3YXJkX3RhZ10uXG5cbiAgIEEgdmFsdWUgb2YgdHlwZSBbJ2EgTGF6eS50XSBjYW4gYmUgb25lIG9mIHRocmVlIHRoaW5nczpcbiAgIDEuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtsYXp5X3RhZ10uICBJdHMgZmllbGQgaXMgYSBjbG9zdXJlIG9mXG4gICAgICB0eXBlIFt1bml0IC0+ICdhXSB0aGF0IGNvbXB1dGVzIHRoZSB2YWx1ZS5cbiAgIDIuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtmb3J3YXJkX3RhZ10uICBJdHMgZmllbGQgaXMgdGhlIHZhbHVlXG4gICAgICBvZiB0eXBlIFsnYV0gdGhhdCB3YXMgY29tcHV0ZWQuXG4gICAzLiBBbnl0aGluZyBlbHNlIGV4Y2VwdCBhIGZsb2F0LiAgVGhpcyBoYXMgdHlwZSBbJ2FdIGFuZCBpcyB0aGUgdmFsdWVcbiAgICAgIHRoYXQgd2FzIGNvbXB1dGVkLlxuICAgRXhjZXB0aW9ucyBhcmUgc3RvcmVkIGluIGZvcm1hdCAoMSkuXG4gICBUaGUgR0Mgd2lsbCBtYWdpY2FsbHkgY2hhbmdlIHRoaW5ncyBmcm9tICgyKSB0byAoMykgYWNjb3JkaW5nIHRvIGl0c1xuICAgZmFuY3kuXG5cbiAgIElmIE9DYW1sIHdhcyBjb25maWd1cmVkIHdpdGggdGhlIC1mbGF0LWZsb2F0LWFycmF5IG9wdGlvbiAod2hpY2ggaXNcbiAgIGN1cnJlbnRseSB0aGUgZGVmYXVsdCksIHRoZSBmb2xsb3dpbmcgaXMgYWxzbyB0cnVlOlxuICAgV2UgY2Fubm90IHVzZSByZXByZXNlbnRhdGlvbiAoMykgZm9yIGEgW2Zsb2F0IExhenkudF0gYmVjYXVzZVxuICAgW2NhbWxfbWFrZV9hcnJheV0gYXNzdW1lcyB0aGF0IG9ubHkgYSBbZmxvYXRdIHZhbHVlIGNhbiBoYXZlIHRhZ1xuICAgW0RvdWJsZV90YWddLlxuXG4gICBXZSBoYXZlIHRvIHVzZSB0aGUgYnVpbHQtaW4gdHlwZSBjb25zdHJ1Y3RvciBbbGF6eV90XSB0b1xuICAgbGV0IHRoZSBjb21waWxlciBpbXBsZW1lbnQgdGhlIHNwZWNpYWwgdHlwaW5nIGFuZCBjb21waWxhdGlvblxuICAgcnVsZXMgZm9yIHRoZSBbbGF6eV0ga2V5d29yZC5cbiopXG5cbnR5cGUgJ2EgdCA9ICdhIENhbWxpbnRlcm5hbExhenkudFxuXG5leGNlcHRpb24gVW5kZWZpbmVkID0gQ2FtbGludGVybmFsTGF6eS5VbmRlZmluZWRcblxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcblxuZXh0ZXJuYWwgZm9yY2UgOiAnYSB0IC0+ICdhID0gXCIlbGF6eV9mb3JjZVwiXG5cblxubGV0IGZvcmNlX3ZhbCA9IENhbWxpbnRlcm5hbExhenkuZm9yY2VfdmFsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8IHQgPSBPYmouZG91YmxlX3RhZyB0aGVuIGJlZ2luXG4gICAgbWFrZV9mb3J3YXJkIHZcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICAoT2JqLm1hZ2ljIHYgOiAnYXJnIHQpXG4gIGVuZFxuXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBsYXp5X2Zyb21fZnVuID0gZnJvbV9mdW5cblxubGV0IGxhenlfZnJvbV92YWwgPSBmcm9tX3ZhbFxuXG5sZXQgbGF6eV9pc192YWwgPSBpc192YWxcblxuXG5sZXQgbWFwIGYgeCA9XG4gIGxhenkgKGYgKGZvcmNlIHgpKVxuXG5sZXQgbWFwX3ZhbCBmIHggPVxuICBpZiBpc192YWwgeFxuICB0aGVuIGxhenlfZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAoJ2EsICdlKSB0ID0gKCdhLCAnZSkgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnZVxuXG5sZXQgb2sgdiA9IE9rIHZcbmxldCBlcnJvciBlID0gRXJyb3IgZVxubGV0IHZhbHVlIHIgfmRlZmF1bHQgPSBtYXRjaCByIHdpdGggT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5sZXQgZ2V0X29rID0gZnVuY3Rpb24gT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBFcnJvciBfXCJcbmxldCBnZXRfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGUgfCBPayBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIE9rIF9cIlxubGV0IGJpbmQgciBmID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBqb2luID0gZnVuY3Rpb24gT2sgciAtPiByIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXAgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gT2sgKGYgdikgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcF9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBFcnJvciAoZiBlKSB8IE9rIF8gYXMgdiAtPiB2XG5sZXQgZm9sZCB+b2sgfmVycm9yID0gZnVuY3Rpb24gT2sgdiAtPiBvayB2IHwgRXJyb3IgZSAtPiBlcnJvciBlXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gT2sgdiAtPiBmIHYgfCBFcnJvciBfIC0+ICgpXG5sZXQgaXRlcl9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBmIGUgfCBPayBfIC0+ICgpXG5sZXQgaXNfb2sgPSBmdW5jdGlvbiBPayBfIC0+IHRydWUgfCBFcnJvciBfIC0+IGZhbHNlXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBfIC0+IHRydWUgfCBPayBfIC0+IGZhbHNlXG5cbmxldCBlcXVhbCB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBfLCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IE9rIF8sIEVycm9yIF8gLT4gLTFcbnwgRXJyb3IgXywgT2sgXyAtPiAxXG5cbmxldCB0b19vcHRpb24gPSBmdW5jdGlvbiBPayB2IC0+IFNvbWUgdiB8IEVycm9yIF8gLT4gTm9uZVxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBPayB2IC0+IFt2XSB8IEVycm9yIF8gLT4gW11cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBPayB2IC0+IFNlcS5yZXR1cm4gdiB8IEVycm9yIF8gLT4gU2VxLmVtcHR5XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgVXRpbHMgYXJvdW5kIGNoYXJ9XG5cbiAgICBAc2luY2UgMC4xNCAqKVxuXG5pbmNsdWRlIENoYXJcblxubGV0IHBwX2J1ZiA9IEJ1ZmZlci5hZGRfY2hhclxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2NoYXJcbmxldCBvZl9pbnRfZXhuID0gQ2hhci5jaHJcbmxldCBvZl9pbnQgYyA9IHRyeSBTb21lIChvZl9pbnRfZXhuIGMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcbmxldCB0b19pbnQgPSBDaGFyLmNvZGVcbmxldCB0b19zdHJpbmcgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA9IClcbiAgbGV0ICggPD4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD4gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGNvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBjaHIgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcIkNoYXIuY2hyXCIgZWxzZSB1bnNhZmVfY2hyIG5cblxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCBlc2NhcGVkID0gZnVuY3Rpb25cbiAgfCAnXFwnJyAtPiBcIlxcXFwnXCJcbiAgfCAnXFxcXCcgLT4gXCJcXFxcXFxcXFwiXG4gIHwgJ1xcbicgLT4gXCJcXFxcblwiXG4gIHwgJ1xcdCcgLT4gXCJcXFxcdFwiXG4gIHwgJ1xccicgLT4gXCJcXFxcclwiXG4gIHwgJ1xcYicgLT4gXCJcXFxcYlwiXG4gIHwgJyAnIC4uICd+JyBhcyBjIC0+XG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAxIGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCBjO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG4gIHwgYyAtPlxuICAgICAgbGV0IG4gPSBjb2RlIGMgaW5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDQgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwICdcXFxcJztcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAxICh1bnNhZmVfY2hyICg0OCArIG4gLyAxMDApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAyICh1bnNhZmVfY2hyICg0OCArIChuIC8gMTApIG1vZCAxMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDMgKHVuc2FmZV9jaHIgKDQ4ICsgbiBtb2QgMTApKTtcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuXG5sZXQgbG93ZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onXG4gIHwgJ1xcMTkyJyAuLiAnXFwyMTQnXG4gIHwgJ1xcMjE2JyAuLiAnXFwyMjInIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onXG4gIHwgJ1xcMjI0JyAuLiAnXFwyNDYnXG4gIHwgJ1xcMjQ4JyAuLiAnXFwyNTQnIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgbG93ZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6JyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbnR5cGUgdCA9IGNoYXJcblxubGV0IGNvbXBhcmUgYzEgYzIgPSBjb2RlIGMxIC0gY29kZSBjMlxubGV0IGVxdWFsIChjMTogdCkgKGMyOiB0KSA9IGNvbXBhcmUgYzEgYzIgPSAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIHN0cmluZy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGJ5dGVzID0gXCIlYnl0ZXNfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9ibGl0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbmxldCBtYWtlIG4gYyA9XG4gIGxldCBzID0gY3JlYXRlIG4gaW5cbiAgdW5zYWZlX2ZpbGwgcyAwIG4gYztcbiAgc1xuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgcyBpIChmIGkpXG4gIGRvbmU7XG4gIHNcblxubGV0IGVtcHR5ID0gY3JlYXRlIDBcblxubGV0IGNvcHkgcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgdW5zYWZlX2JsaXQgcyAwIHIgMCBsZW47XG4gIHJcblxubGV0IHRvX3N0cmluZyBiID0gdW5zYWZlX3RvX3N0cmluZyAoY29weSBiKVxubGV0IG9mX3N0cmluZyBzID0gY29weSAodW5zYWZlX29mX3N0cmluZyBzKVxuXG5sZXQgc3ViIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLnN1YiAvIEJ5dGVzLnN1YlwiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgICB1bnNhZmVfYmxpdCBzIG9mcyByIDAgbGVuO1xuICAgIHJcbiAgZW5kXG5cbmxldCBzdWJfc3RyaW5nIGIgb2ZzIGxlbiA9IHVuc2FmZV90b19zdHJpbmcgKHN1YiBiIG9mcyBsZW4pXG5cbigqIGFkZGl0aW9uIHdpdGggYW4gb3ZlcmZsb3cgY2hlY2sgKilcbmxldCAoKyspIGEgYiA9XG4gIGxldCBjID0gYSArIGIgaW5cbiAgbWF0Y2ggYSA8IDAsIGIgPCAwLCBjIDwgMCB3aXRoXG4gIHwgdHJ1ZSAsIHRydWUgLCBmYWxzZVxuICB8IGZhbHNlLCBmYWxzZSwgdHJ1ZSAgLT4gaW52YWxpZF9hcmcgXCJCeXRlcy5leHRlbmRcIiAoKiBvdmVyZmxvdyAqKVxuICB8IF8gLT4gY1xuXG5sZXQgZXh0ZW5kIHMgbGVmdCByaWdodCA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyArKyBsZWZ0ICsrIHJpZ2h0IGluXG4gIGxldCByID0gY3JlYXRlIGxlbiBpblxuICBsZXQgKHNyY29mZiwgZHN0b2ZmKSA9IGlmIGxlZnQgPCAwIHRoZW4gLWxlZnQsIDAgZWxzZSAwLCBsZWZ0IGluXG4gIGxldCBjcHlsZW4gPSBJbnQubWluIChsZW5ndGggcyAtIHNyY29mZikgKGxlbiAtIGRzdG9mZikgaW5cbiAgaWYgY3B5bGVuID4gMCB0aGVuIHVuc2FmZV9ibGl0IHMgc3Jjb2ZmIHIgZHN0b2ZmIGNweWxlbjtcbiAgclxuXG5sZXQgZmlsbCBzIG9mcyBsZW4gYyA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmZpbGwgLyBCeXRlcy5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBzIG9mcyBsZW4gY1xuXG5sZXQgYmxpdCBzMSBvZnMxIHMyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnl0ZXMuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG5sZXQgYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IHN0cmluZ19sZW5ndGggczEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIHMyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuYmxpdCAvIEJ5dGVzLmJsaXRfc3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiQnl0ZXMuY29uY2F0XCJcblxubGV0IHJlYyBzdW1fbGVuZ3RocyBhY2Mgc2VwbGVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBoZCA6OiBbXSAtPiBsZW5ndGggaGQgKyBhY2NcbiAgfCBoZCA6OiB0bCAtPiBzdW1fbGVuZ3RocyAoZW5zdXJlX2dlIChsZW5ndGggaGQgKyBzZXBsZW4gKyBhY2MpIGFjYykgc2VwbGVuIHRsXG5cbmxldCByZWMgdW5zYWZlX2JsaXRzIGRzdCBwb3Mgc2VwIHNlcGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZHN0XG4gIHwgaGQgOjogW10gLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7IGRzdFxuICB8IGhkIDo6IHRsIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpO1xuICAgIHVuc2FmZV9ibGl0IHNlcCAwIGRzdCAocG9zICsgbGVuZ3RoIGhkKSBzZXBsZW47XG4gICAgdW5zYWZlX2JsaXRzIGRzdCAocG9zICsgbGVuZ3RoIGhkICsgc2VwbGVuKSBzZXAgc2VwbGVuIHRsXG5cbmxldCBjb25jYXQgc2VwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBlbXB0eVxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW5cbiAgICAgICAgICB1bnNhZmVfYmxpdHNcbiAgICAgICAgICAgIChjcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCBzMSBzMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBzMSBpblxuICBsZXQgbDIgPSBsZW5ndGggczIgaW5cbiAgbGV0IHIgPSBjcmVhdGUgKGwxICsgbDIpIGluXG4gIHVuc2FmZV9ibGl0IHMxIDAgciAwIGwxO1xuICB1bnNhZmVfYmxpdCBzMiAwIHIgbDEgbDI7XG4gIHJcblxuXG5leHRlcm5hbCBjaGFyX2NvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgY2hhcl9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgaXNfc3BhY2UgPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHRyaW0gcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpIDwgbGVuICYmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGxldCBqID0gcmVmIChsZW4gLSAxKSBpblxuICB3aGlsZSAhaiA+PSAhaSAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFqKSBkb1xuICAgIGRlY3IgalxuICBkb25lO1xuICBpZiAhaiA+PSAhaSB0aGVuXG4gICAgc3ViIHMgIWkgKCFqIC0gIWkgKyAxKVxuICBlbHNlXG4gICAgZW1wdHlcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgIG4gOj0gIW4gK1xuICAgICAgKG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXG4nIHwgJ1xcdCcgfCAnXFxyJyB8ICdcXGInIC0+IDJcbiAgICAgICB8ICcgJyAuLiAnficgLT4gMVxuICAgICAgIHwgXyAtPiA0KVxuICBkb25lO1xuICBpZiAhbiA9IGxlbmd0aCBzIHRoZW4gY29weSBzIGVsc2UgYmVnaW5cbiAgICBsZXQgcycgPSBjcmVhdGUgIW4gaW5cbiAgICBuIDo9IDA7XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgICAgYmVnaW4gbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAoJ1xcXCInIHwgJ1xcXFwnKSBhcyBjIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnbidcbiAgICAgIHwgJ1xcdCcgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICd0J1xuICAgICAgfCAnXFxyJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3InXG4gICAgICB8ICdcXGInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnYidcbiAgICAgIHwgKCcgJyAuLiAnficpIGFzIGMgLT4gdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8IGMgLT5cbiAgICAgICAgICBsZXQgYSA9IGNoYXJfY29kZSBjIGluXG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgLyAxMDApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgKGEgLyAxMCkgbW9kIDEwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgbW9kIDEwKSk7XG4gICAgICBlbmQ7XG4gICAgICBpbmNyIG5cbiAgICBkb25lO1xuICAgIHMnXG4gIGVuZFxuXG5sZXQgbWFwIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IHMgaSkpIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IG1hcGkgZiBzID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBsID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG8gdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDAgZG9cbiAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICBkb25lO1xuICAhclxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBzIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG5sZXQgYXBwbHkxIGYgcyA9XG4gIGlmIGxlbmd0aCBzID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY29weSBzIGluXG4gICAgdW5zYWZlX3NldCByIDAgKGYodW5zYWZlX2dldCBzIDApKTtcbiAgICByXG4gIGVuZFxuXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlX2FzY2lpIHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZV9hc2NpaSBzXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbnR5cGUgdCA9IGJ5dGVzXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfYnl0ZXNfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHNwbGl0X29uX2NoYXIgc2VwIHMgPVxuICBsZXQgciA9IHJlZiBbXSBpblxuICBsZXQgaiA9IHJlZiAobGVuZ3RoIHMpIGluXG4gIGZvciBpID0gbGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgaWYgdW5zYWZlX2dldCBzIGkgPSBzZXAgdGhlbiBiZWdpblxuICAgICAgciA6PSBzdWIgcyAoaSArIDEpICghaiAtIGkgLSAxKSA6OiAhcjtcbiAgICAgIGogOj0gaVxuICAgIGVuZFxuICBkb25lO1xuICBzdWIgcyAwICFqIDo6ICFyXG5cbigqIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGltcGxlbWVudGVkIHZpYSBvdGhlciBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqKVxuW0BAQG9jYW1sLndhcm5pbmcgXCItM1wiXVxubGV0IHVwcGVyY2FzZSBzID0gbWFwIENoYXIudXBwZXJjYXNlIHNcbmxldCBsb3dlcmNhc2UgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZSBzXG5cbmxldCBjYXBpdGFsaXplIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2Ugc1xubGV0IHVuY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlIHNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGxldCBidWYgPSByZWYgKG1ha2UgMjU2ICdcXDAwMCcpIGluXG4gIGxldCByZXNpemUgKCkgPVxuICAgICgqIHJlc2l6ZSAqKVxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1pbiAoMiAqIGxlbmd0aCAhYnVmKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICBpZiBsZW5ndGggIWJ1ZiA9IG5ld19sZW4gdGhlbiBmYWlsd2l0aCBcIkJ5dGVzLm9mX3NlcTogY2Fubm90IGdyb3cgYnl0ZXNcIjtcbiAgICBsZXQgbmV3X2J1ZiA9IG1ha2UgbmV3X2xlbiAnXFwwMDAnIGluXG4gICAgYmxpdCAhYnVmIDAgbmV3X2J1ZiAwICFuO1xuICAgIGJ1ZiA6PSBuZXdfYnVmXG4gIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBjIC0+XG4gICAgICAgaWYgIW4gPSBsZW5ndGggIWJ1ZiB0aGVuIHJlc2l6ZSgpO1xuICAgICAgIHNldCAhYnVmICFuIGM7XG4gICAgICAgaW5jciBuKVxuICAgIGk7XG4gIHN1YiAhYnVmIDAgIW5cblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuKCogVGhlIGdldF8gZnVuY3Rpb25zIGFyZSBhbGwgZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcblxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZ1XCJcbmV4dGVybmFsIGdldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9ieXRlc19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX2J5dGVzX2dldDY0XCJcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBzZXRfaW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2XCJcbmV4dGVybmFsIHNldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMlwiXG5leHRlcm5hbCBzZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjRcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuICBlbHNlIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuXG5sZXQgZ2V0X2ludDggYiBpID1cbiAgKChnZXRfdWludDggYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDgpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDgpXG5cbmxldCBnZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfaW50MTZfbmUgYiBpID1cbiAgKChnZXRfdWludDE2X25lIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfbGUgYiBpID1cbiAgKChnZXRfdWludDE2X2xlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfYmUgYiBpID1cbiAgKChnZXRfdWludDE2X2JlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MzJfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDMyX2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeFxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfYmUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4IGVsc2VcbiAgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcblxubGV0IHNldF9pbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MTZfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF91aW50OCA9IHNldF9pbnQ4XG5sZXQgc2V0X3VpbnQxNl9uZSA9IHNldF9pbnQxNl9uZVxubGV0IHNldF91aW50MTZfYmUgPSBzZXRfaW50MTZfYmVcbmxldCBzZXRfdWludDE2X2xlID0gc2V0X2ludDE2X2xlXG5cbigqIFVURiBjb2RlY3MgYW5kIHZhbGlkYXRpb25zICopXG5cbmxldCBkZWNfaW52YWxpZCA9IFVjaGFyLnV0Zl9kZWNvZGVfaW52YWxpZFxubGV0W0BpbmxpbmVdIGRlY19yZXQgbiB1ID0gVWNoYXIudXRmX2RlY29kZSBuIChVY2hhci51bnNhZmVfb2ZfaW50IHUpXG5cbigqIEluIGNhc2Ugb2YgZGVjb2RpbmcgZXJyb3IsIGlmIHdlIGVycm9yIG9uIHRoZSBmaXJzdCBieXRlLCB3ZVxuICAgY29uc3VtZSB0aGUgYnl0ZSwgb3RoZXJ3aXNlIHdlIGNvbnN1bWUgdGhlIFtuXSBieXRlcyBwcmVjZWVkaW5nXG4gICB0aGUgZXJyb3JpbmcgYnl0ZS5cblxuICAgVGhpcyBtZWFucyB0aGF0IGlmIGEgY2xpZW50IHVzZXMgZGVjb2RlcyB3aXRob3V0IGNhcmluZyBhYm91dFxuICAgdmFsaWRpdHkgaXQgbmF0dXJhbGx5IHJlcGxhY2UgYm9ndXMgZGF0YSB3aXRoIFVjaGFyLnJlcCBhY2NvcmRpbmdcbiAgIHRvIHRoZSBXSEFUV0cgRW5jb2Rpbmcgc3RhbmRhcmQuIE90aGVyIHNjaGVtZXMgYXJlIHBvc3NpYmxlIGJ5XG4gICBjb25zdWx0aW5nIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBvbiBpbnZhbGlkIGRlY29kZXMuIEZvciBtb3JlXG4gICBkZXRhaWxzIHNlZSBodHRwczovL2hzaXZvbmVuLmZpL2Jyb2tlbi11dGYtOC9cblxuICAgRm9yIHRoaXMgcmVhc29uIGluIFtnZXRfdXRmXzhfdWNoYXJdIHdlIGdyYWR1YWxseSBjaGVjayB0aGUgbmV4dFxuICAgYnl0ZSBpcyBhdmFpbGFibGUgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICBmaXJzdCBieXRlLiBDb250cmFzdCB3aXRoIFtpc192YWxpZF91dGZfOF0uICopXG5cbigqIFVURi04ICopXG5cbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3hCRiBiID0gYiBsc3IgNiA8PiAwYjEwXG5sZXRbQGlubGluZV0gbm90X2luX3hBMF90b194QkYgYiA9IGIgbHNyIDUgPD4gMGIxMDFcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g5RiBiID0gYiBsc3IgNSA8PiAwYjEwMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94OTBfdG9feEJGIGIgPSBiIDwgMHg5MCB8fCAweEJGIDwgYlxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feDhGIGIgPSBiIGxzciA0IDw+IDB4OFxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfMiBiMCBiMSA9XG4gICgoYjAgbGFuZCAweDFGKSBsc2wgNikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIgPVxuICAoKGIwIGxhbmQgMHgwRikgbHNsIDEyKSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpKVxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMyA9XG4gICgoYjAgbGFuZCAweDA3KSBsc2wgMTgpIGxvclxuICAoKGIxIGxhbmQgMHgzRikgbHNsIDEyKSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMyBsYW5kIDB4M0YpKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIGIgaSA9XG4gIGxldCBiMCA9IGdldF91aW50OCBiIGkgaW4gKCogcmFpc2VzIGlmIFtpXSBpcyBub3QgYSB2YWxpZCBpbmRleC4gKilcbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgYjAgd2l0aCAoKiBTZWUgVGhlIFVuaWNvZGUgU3RhbmRhcmQsIFRhYmxlIDMuNyAqKVxuICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBkZWNfcmV0IDEgYjBcbiAgfCAnXFx4QzInIC4uICdcXHhERicgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgZGVjX3JldCAyICh1dGZfOF91Y2hhcl8yIGIwIGIxKVxuICB8ICdcXHhFMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feEEwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFRCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g5RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEYwJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94OTBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGMScgLi4gJ1xceEYzJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGNCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g4RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCBfIC0+IGRlY19pbnZhbGlkIDFcblxubGV0IHNldF91dGZfOF91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweDAwN0YgLT5cbiAgICAgIHNldF91aW50OCBiIGkgdTtcbiAgICAgIDFcbiAgfCB1IHdoZW4gdSA8PSAweDA3RkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEMwIGxvciAodSBsc3IgNikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDIpXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhFMCBsb3IgKHUgbHNyIDEyKSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAzKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhGMCBsb3IgKHUgbHNyIDE4KSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciAxMikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgKGkgKyAyKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICA0KVxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfOCBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50OCBpblxuICAgIG1hdGNoIENoYXIudW5zYWZlX2NociAoZ2V0IGIgaSkgd2l0aFxuICAgIHwgJ1xceDAwJyAuLiAnXFx4N0YnIC0+IGxvb3AgbWF4IGIgKGkgKyAxKVxuICAgIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3hBMF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RTEnIC4uICdcXHhFQycgfCAnXFx4RUUnIC4uICdcXHhFRicgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEVEJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194OUYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjAnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDkwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGNCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDhGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8IF8gLT4gZmFsc2VcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2QkUgKilcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZiZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9iZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2TEUgKilcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZsZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9sZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IEdhbGxpdW0sIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU3RyaW5nIG9wZXJhdGlvbnMsIGJhc2VkIG9uIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMuIFdoZW4geW91IG1vZGlmeSB0aGUgb25lIGluIHRoaXMgZmlsZSB5b3UgbmVlZCB0b1xuICAgbW9kaWZ5IGl0cyBkdXBsaWNhdGUgaW4gYnl0ZXMubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGdldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlc3RyaW5nX3NhZmVfc2V0XCJcbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfc3RyaW5nXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogc3RyaW5nIC0+IGludCAtPiAgYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbm1vZHVsZSBCID0gQnl0ZXNcblxubGV0IGJ0cyA9IEIudW5zYWZlX3RvX3N0cmluZ1xubGV0IGJvcyA9IEIudW5zYWZlX29mX3N0cmluZ1xuXG5sZXQgbWFrZSBuIGMgPVxuICBCLm1ha2UgbiBjIHw+IGJ0c1xubGV0IGluaXQgbiBmID1cbiAgQi5pbml0IG4gZiB8PiBidHNcbmxldCBlbXB0eSA9IFwiXCJcbmxldCBjb3B5IHMgPVxuICBCLmNvcHkgKGJvcyBzKSB8PiBidHNcbmxldCBvZl9ieXRlcyA9IEIudG9fc3RyaW5nXG5sZXQgdG9fYnl0ZXMgPSBCLm9mX3N0cmluZ1xubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBCLnN1YiAoYm9zIHMpIG9mcyBsZW4gfD4gYnRzXG5sZXQgZmlsbCA9XG4gIEIuZmlsbFxubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCByZWMgZXNjYXBlX2lmX25lZWRlZCBzIG4gaSA9XG4gICAgaWYgaSA+PSBuIHRoZW4gcyBlbHNlXG4gICAgICBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXDAwMCcuLidcXDAzMScgfCAnXFwxMjcnLi4gJ1xcMjU1JyAtPlxuICAgICAgICAgIGJ0cyAoQi5lc2NhcGVkIChib3MgcykpXG4gICAgICB8IF8gLT4gZXNjYXBlX2lmX25lZWRlZCBzIG4gKGkrMSlcbiAgaW5cbiAgZXNjYXBlX2lmX25lZWRlZCBzIChsZW5ndGggcykgMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleCBzIGMgPSBpbmRleF9yZWMgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbSAvIEJ5dGVzLmluZGV4X2Zyb21cIiBlbHNlXG4gICAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjIHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgcmluZGV4X3JlYyBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIHJpbmRleF9yZWNfb3B0IHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yY29udGFpbnNfZnJvbSAvIEJ5dGVzLnJjb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKHJpbmRleF9yZWMgcyBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9XG4gIEIudXBwZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPVxuICBCLmxvd2VyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi51bmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9XG4gIEIudXBwZXJjYXNlIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlIHMgPVxuICBCLmxvd2VyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemUgcyA9XG4gIEIuY2FwaXRhbGl6ZSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZSBzID1cbiAgQi51bmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogc3RyaW5nIC0+IHN0cmluZyAtPiBib29sID0gXCJjYW1sX3N0cmluZ19lcXVhbFwiIFtAQG5vYWxsb2NdXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9IGJvcyBzIHw+IEIudG9fc2VxXG5cbmxldCB0b19zZXFpIHMgPSBib3MgcyB8PiBCLnRvX3NlcWlcblxubGV0IG9mX3NlcSBnID0gQi5vZl9zZXEgZyB8PiBidHNcblxuKCogVVRGIGRlY29kZXJzIGFuZCB2YWxpZGF0b3JzICopXG5cbmxldCBnZXRfdXRmXzhfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzhfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzggcyA9IEIuaXNfdmFsaWRfdXRmXzggKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmJlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmJlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmJlIChib3MgcylcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZsZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZsZSBzID0gQi5pc192YWxpZF91dGZfMTZsZSAoYm9zIHMpXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIGdldF91aW50OCA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfc3RyaW5nX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX3N0cmluZ19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9zdHJpbmdfZ2V0NjRcIlxuXG5sZXQgZ2V0X2ludDggcyBpID0gQi5nZXRfaW50OCAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2xlIHMgaSA9IEIuZ2V0X3VpbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2JlIHMgaSA9IEIuZ2V0X3VpbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbmUgcyBpID0gQi5nZXRfaW50MTZfbmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2xlIHMgaSA9IEIuZ2V0X2ludDE2X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9iZSBzIGkgPSBCLmdldF9pbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfbGUgcyBpID0gQi5nZXRfaW50MzJfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2JlIHMgaSA9IEIuZ2V0X2ludDMyX2JlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9sZSBzIGkgPSBCLmdldF9pbnQ2NF9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfYmUgcyBpID0gQi5nZXRfaW50NjRfYmUgKGJvcyBzKSBpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBhcnJheXMuICopXG50eXBlICdhIHQgPSAnYSBhcnJheVxuXG4oKiBBcnJheSBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGxlbmd0aCA6ICdhIGFycmF5IC0+IGludCA9IFwiJWFycmF5X2xlbmd0aFwiXG5leHRlcm5hbCBnZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV9zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV91bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfdW5zYWZlX3NldFwiXG5leHRlcm5hbCBtYWtlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIGNyZWF0ZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCB1bnNhZmVfc3ViIDogJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9zdWJcIlxuZXh0ZXJuYWwgYXBwZW5kX3ByaW0gOiAnYSBhcnJheSAtPiAnYSBhcnJheSAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9hcHBlbmRcIlxuZXh0ZXJuYWwgY29uY2F0IDogJ2EgYXJyYXkgbGlzdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9jb25jYXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2JsaXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfZmlsbFwiXG5leHRlcm5hbCBjcmVhdGVfZmxvYXQ6IGludCAtPiBmbG9hdCBhcnJheSA9IFwiY2FtbF9tYWtlX2Zsb2F0X3ZlY3RcIlxubGV0IG1ha2VfZmxvYXQgPSBjcmVhdGVfZmxvYXRcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGZvciB4ID0gMCB0byBwcmVkIHN4IGRvXG4gICAgdW5zYWZlX3NldCByZXMgeCAoY3JlYXRlIHN5IGluaXQpXG4gIGRvbmU7XG4gIHJlc1xuXG5sZXQgY3JlYXRlX21hdHJpeCA9IG1ha2VfbWF0cml4XG5cbmxldCBjb3B5IGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIHVuc2FmZV9zdWIgYSAwIGxcblxubGV0IGFwcGVuZCBhMSBhMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBhMSBpblxuICBpZiBsMSA9IDAgdGhlbiBjb3B5IGEyXG4gIGVsc2UgaWYgbGVuZ3RoIGEyID0gMCB0aGVuIHVuc2FmZV9zdWIgYTEgMCBsMVxuICBlbHNlIGFwcGVuZF9wcmltIGExIGEyXG5cbmxldCBzdWIgYSBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5zdWJcIlxuICBlbHNlIHVuc2FmZV9zdWIgYSBvZnMgbGVuXG5cbmxldCBmaWxsIGEgb2ZzIGxlbiB2ID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBhIG9mcyBsZW4gdlxuXG5sZXQgYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIGExIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBhMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlblxuXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGl0ZXIyIGYgYSBiID1cbiAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkgZG9uZVxuXG5sZXQgbWFwIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcCBmIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIE5vbmVcbiAgICBlbHNlXG4gICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU2V0cyBvdmVyIG9yZGVyZWQgdHlwZXMgKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUgZWx0XG4gICAgdHlwZSB0XG4gICAgdmFsIGVtcHR5OiB0XG4gICAgdmFsIGlzX2VtcHR5OiB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBlbHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGFkZDogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCBzaW5nbGV0b246IGVsdCAtPiB0XG4gICAgdmFsIHJlbW92ZTogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCB1bmlvbjogdCAtPiB0IC0+IHRcbiAgICB2YWwgaW50ZXI6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGRpc2pvaW50OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBkaWZmOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBzdWJzZXQ6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChlbHQgLT4gdW5pdCkgLT4gdCAtPiB1bml0XG4gICAgdmFsIG1hcDogKGVsdCAtPiBlbHQpIC0+IHQgLT4gdFxuICAgIHZhbCBmb2xkOiAoZWx0IC0+ICdhIC0+ICdhKSAtPiB0IC0+ICdhIC0+ICdhXG4gICAgdmFsIGZvcl9hbGw6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGV4aXN0czogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZmlsdGVyOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoZWx0IC0+IGVsdCBvcHRpb24pIC0+IHQgLT4gdFxuICAgIHZhbCBwYXJ0aXRpb246IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0ICogdFxuICAgIHZhbCBjYXJkaW5hbDogdCAtPiBpbnRcbiAgICB2YWwgZWxlbWVudHM6IHQgLT4gZWx0IGxpc3RcbiAgICB2YWwgbWluX2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWluX2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBtYXhfZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtYXhfZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGNob29zZTogdCAtPiBlbHRcbiAgICB2YWwgY2hvb3NlX29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIHNwbGl0OiBlbHQgLT4gdCAtPiB0ICogYm9vbCAqIHRcbiAgICB2YWwgZmluZDogZWx0IC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfb3B0OiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfZmlyc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfbGFzdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBvZl9saXN0OiBlbHQgbGlzdCAtPiB0XG4gICAgdmFsIHRvX3NlcV9mcm9tIDogZWx0IC0+IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3NlcSA6IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogZWx0IFNlcS50IC0+IHQgLT4gdFxuICAgIHZhbCBvZl9zZXEgOiBlbHQgU2VxLnQgLT4gdFxuICBlbmRcblxubW9kdWxlIE1ha2UoT3JkOiBPcmRlcmVkVHlwZSkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGVsdCA9IE9yZC50XG4gICAgdHlwZSB0ID0gRW1wdHkgfCBOb2RlIG9mIHtsOnQ7IHY6ZWx0OyByOnQ7IGg6aW50fVxuXG4gICAgKCogU2V0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYmFsYW5jZWQgYmluYXJ5IHRyZWVzICh0aGUgaGVpZ2h0cyBvZiB0aGVcbiAgICAgICBjaGlsZHJlbiBkaWZmZXIgYnkgYXQgbW9zdCAyICopXG5cbiAgICBsZXQgaGVpZ2h0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtofSAtPiBoXG5cbiAgICAoKiBDcmVhdGVzIGEgbmV3IG5vZGUgd2l0aCBsZWZ0IHNvbiBsLCB2YWx1ZSB2IGFuZCByaWdodCBzb24gci5cbiAgICAgICBXZSBtdXN0IGhhdmUgYWxsIGVsZW1lbnRzIG9mIGwgPCB2IDwgYWxsIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgbCBhbmQgciBtdXN0IGJlIGJhbGFuY2VkIGFuZCB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLlxuICAgICAgIElubGluZSBleHBhbnNpb24gb2YgaGVpZ2h0IGZvciBiZXR0ZXIgc3BlZWQuICopXG5cbiAgICBsZXQgY3JlYXRlIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBOb2Rle2w7IHY7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgICgqIFNhbWUgYXMgY3JlYXRlLCBidXQgcGVyZm9ybXMgb25lIHN0ZXAgb2YgcmViYWxhbmNpbmcgaWYgbmVjZXNzYXJ5LlxuICAgICAgIEFzc3VtZXMgbCBhbmQgciBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMy5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGNyZWF0ZSBmb3IgYmV0dGVyIHNwZWVkIGluIHRoZSBtb3N0IGZyZXF1ZW50IGNhc2VcbiAgICAgICB3aGVyZSBubyByZWJhbGFuY2luZyBpcyByZXF1aXJlZC4gKilcblxuICAgIGxldCBiYWwgbCB2IHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGlmIGhsID4gaHIgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9bGw7IHY9bHY7IHI9bHJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgbGwgPj0gaGVpZ2h0IGxyIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIGxsIGx2IChjcmVhdGUgbHIgdiByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgcj1scnJ9LT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGxsIGx2IGxybCkgbHJ2IChjcmVhdGUgbHJyIHYgcilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgaWYgaHIgPiBobCArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCByIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1ybDsgdj1ydjsgcj1ycn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCByciA+PSBoZWlnaHQgcmwgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmwpIHJ2IHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyByPXJscn0gLT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgdiBybGwpIHJsdiAoY3JlYXRlIHJsciBydiBycilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2VcbiAgICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBJbnNlcnRpb24gb2Ygb25lIGVsZW1lbnQgKilcblxuICAgIGxldCByZWMgYWRkIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdCBlbHNlXG4gICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gYWRkIHggbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHQgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHQgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgc2luZ2xldG9uIHggPSBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCB2IGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGVsZW1lbnRzIGluIHRoZSB0cmVlOyBpdFxuICAgICAgIGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhlIGN1cnJlbnQgbWluIChvciBtYXgpIGVsZW1lbnQuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9lbGVtZW50IHggbCkgdiByXG5cbiAgICBsZXQgcmVjIGFkZF9tYXhfZWxlbWVudCB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiAoYWRkX21heF9lbGVtZW50IHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2VsZW1lbnQgdiByXG4gICAgICB8IChfLCBFbXB0eSkgLT4gYWRkX21heF9lbGVtZW50IHYgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyByPWxyOyBoPWxofSwgTm9kZXtsPXJsOyB2PXJ2OyByPXJyOyBoPXJofSkgLT5cbiAgICAgICAgICBpZiBsaCA+IHJoICsgMiB0aGVuIGJhbCBsbCBsdiAoam9pbiBsciB2IHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgcmwpIHJ2IHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IHJcblxuICAgICgqIFNtYWxsZXN0IGFuZCBncmVhdGVzdCBlbGVtZW50IG9mIGEgc2V0ICopXG5cbiAgICBsZXQgcmVjIG1pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiB2XG4gICAgICB8IE5vZGV7bH0gLT4gbWluX2VsdCBsXG5cbiAgICBsZXQgcmVjIG1pbl9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHZ9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHRfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IHZcbiAgICAgIHwgTm9kZXtyfSAtPiBtYXhfZWx0IHJcblxuICAgIGxldCByZWMgbWF4X2VsdF9vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7djsgcj1FbXB0eX0gLT4gU29tZSB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdF9vcHQgclxuXG4gICAgKCogUmVtb3ZlIHRoZSBzbWFsbGVzdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBzZXQgKilcblxuICAgIGxldCByZWMgcmVtb3ZlX21pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGJhbCAocmVtb3ZlX21pbl9lbHQgbCkgdiByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgQXNzdW1lIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDIuICopXG5cbiAgICBsZXQgbWVyZ2UgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiBiYWwgdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBObyBhc3N1bXB0aW9uIG9uIHRoZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gam9pbiB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgKCogU3BsaXR0aW5nLiAgc3BsaXQgeCBzIHJldHVybnMgYSB0cmlwbGUgKGwsIHByZXNlbnQsIHIpIHdoZXJlXG4gICAgICAgIC0gbCBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPCB4XG4gICAgICAgIC0gciBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPiB4XG4gICAgICAgIC0gcHJlc2VudCBpcyBmYWxzZSBpZiBzIGNvbnRhaW5zIG5vIGVsZW1lbnQgZXF1YWwgdG8geCxcbiAgICAgICAgICBvciB0cnVlIGlmIHMgY29udGFpbnMgYW4gZWxlbWVudCBlcXVhbCB0byB4LiAqKVxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIGZhbHNlLCBFbXB0eSlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgdHJ1ZSwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiByKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobHIsIHByZXMsIHJyKSA9IHNwbGl0IHggciBpbiAoam9pbiBsIHYgbHIsIHByZXMsIHJyKVxuXG4gICAgKCogSW1wbGVtZW50YXRpb24gb2YgdGhlIHNldCBvcGVyYXRpb25zICopXG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBjID0gMCB8fCBtZW0geCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgcmVtb3ZlIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSBhcyB0KSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBtZXJnZSBsIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICAgIGxldCBsbCA9IHJlbW92ZSB4IGwgaW5cbiAgICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW5cbiAgICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgcmVjIHVuaW9uIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0MikgLT4gdDJcbiAgICAgIHwgKHQxLCBFbXB0eSkgLT4gdDFcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMTsgaD1oMX0sIE5vZGV7bD1sMjsgdj12Mjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgaWYgaDIgPSAxIHRoZW4gYWRkIHYyIHMxIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbGV0IChsMiwgXywgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICAgICAgam9pbiAodW5pb24gbDEgbDIpIHYxICh1bmlvbiByMSByMilcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGgxID0gMSB0aGVuIGFkZCB2MSBzMiBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDEsIF8sIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MiAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcblxuICAgIGxldCByZWMgaW50ZXIgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8IChfLCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGhcbiAgICAgICAgICAgIChsMiwgZmFsc2UsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGludGVyIGwxIGwyKSAoaW50ZXIgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBqb2luIChpbnRlciBsMSBsMikgdjEgKGludGVyIHIxIHIyKVxuXG4gICAgKCogU2FtZSBhcyBzcGxpdCwgYnV0IGNvbXB1dGUgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzXG4gICAgICAgb25seSBpZiB0aGUgcGl2b3QgZWxlbWVudCBpcyBub3QgaW4gdGhlIHNldC4gIFRoZSByaWdodCBzdWJ0cmVlXG4gICAgICAgaXMgY29tcHV0ZWQgb24gZGVtYW5kLiAqKVxuXG4gICAgdHlwZSBzcGxpdF9iaXMgPVxuICAgICAgfCBGb3VuZFxuICAgICAgfCBOb3RGb3VuZCBvZiB0ICogKHVuaXQgLT4gdClcblxuICAgIGxldCByZWMgc3BsaXRfYmlzIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vdEZvdW5kIChFbXB0eSwgKGZ1biAoKSAtPiBFbXB0eSkpXG4gICAgICB8IE5vZGV7bDsgdjsgcjsgX30gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gRm91bmRcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IGwgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobGwsIHJsKSAtPiBOb3RGb3VuZCAobGwsIChmdW4gKCkgLT4gam9pbiAocmwgKCkpIHYgcikpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWF0Y2ggc3BsaXRfYmlzIHggciB3aXRoXG4gICAgICAgICAgICB8IEZvdW5kIC0+IEZvdW5kXG4gICAgICAgICAgICB8IE5vdEZvdW5kIChsciwgcnIpIC0+IE5vdEZvdW5kIChqb2luIGwgdiBsciwgcnIpXG5cbiAgICBsZXQgcmVjIGRpc2pvaW50IHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSB8IChfLCBFbXB0eSkgLT4gdHJ1ZVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgaWYgczEgPT0gczIgdGhlbiBmYWxzZVxuICAgICAgICAgIGVsc2UgbWF0Y2ggc3BsaXRfYmlzIHYxIHQyIHdpdGhcbiAgICAgICAgICAgICAgTm90Rm91bmQobDIsIHIyKSAtPiBkaXNqb2ludCBsMSBsMiAmJiBkaXNqb2ludCByMSAocjIgKCkpXG4gICAgICAgICAgICB8IEZvdW5kIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGRpZmYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoZGlmZiBsMSBsMikgdjEgKGRpZmYgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGRpZmYgbDEgbDIpIChkaWZmIHIxIHIyKVxuXG4gICAgdHlwZSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2YgZWx0ICogdCAqIGVudW1lcmF0aW9uXG5cbiAgICBsZXQgcmVjIGNvbnNfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCByLCBlKSlcblxuICAgIGxldCByZWMgY29tcGFyZV9hdXggZTEgZTIgPVxuICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgIChFbmQsIEVuZCkgLT4gMFxuICAgICAgfCAoRW5kLCBfKSAgLT4gLTFcbiAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgfCAoTW9yZSh2MSwgcjEsIGUxKSwgTW9yZSh2MiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgaWYgYyA8PiAwXG4gICAgICAgICAgdGhlbiBjXG4gICAgICAgICAgZWxzZSBjb21wYXJlX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuXG4gICAgbGV0IGNvbXBhcmUgczEgczIgPVxuICAgICAgY29tcGFyZV9hdXggKGNvbnNfZW51bSBzMSBFbmQpIChjb25zX2VudW0gczIgRW5kKVxuXG4gICAgbGV0IGVxdWFsIHMxIHMyID1cbiAgICAgIGNvbXBhcmUgczEgczIgPSAwXG5cbiAgICBsZXQgcmVjIHN1YnNldCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIEVtcHR5LCBfIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBfLCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IE5vZGUge2w9bDE7IHY9djE7IHI9cjF9LCAoTm9kZSB7bD1sMjsgdj12Mjsgcj1yMn0gYXMgdDIpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCBsMSBsMiAmJiBzdWJzZXQgcjEgcjJcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1sMTsgdj12MTsgcj1FbXB0eTsgaD0wfSkgbDIgJiYgc3Vic2V0IHIxIHQyXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3Vic2V0IChOb2RlIHtsPUVtcHR5OyB2PXYxOyByPXIxOyBoPTB9KSByMiAmJiBzdWJzZXQgbDEgdDJcblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBpdGVyIGYgbDsgZiB2OyBpdGVyIGYgclxuXG4gICAgbGV0IHJlYyBmb2xkIGYgcyBhY2N1ID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gZm9sZCBmIHIgKGYgdiAoZm9sZCBmIGwgYWNjdSkpXG5cbiAgICBsZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHRydWVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgJiYgZm9yX2FsbCBwIGwgJiYgZm9yX2FsbCBwIHJcblxuICAgIGxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHAgdiB8fCBleGlzdHMgcCBsIHx8IGV4aXN0cyBwIHJcblxuICAgIGxldCByZWMgZmlsdGVyIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSkgYXMgdCAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdiA9IHAgdiBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdiB0aGVuXG4gICAgICAgICAgICBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIHQgZWxzZSBqb2luIGwnIHYgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBwYXJ0aXRpb24gcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IChFbXB0eSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZcbiAgICAgICAgICB0aGVuIChqb2luIGx0IHYgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiByZilcblxuICAgIGxldCByZWMgY2FyZGluYWwgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGV7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGVsZW1lbnRzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGVsZW1lbnRzX2F1eCAodiA6OiBlbGVtZW50c19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgZWxlbWVudHMgcyA9XG4gICAgICBlbGVtZW50c19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9lbHRcblxuICAgIGxldCBjaG9vc2Vfb3B0ID0gbWluX2VsdF9vcHRcblxuICAgIGxldCByZWMgZmluZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdlxuICAgICAgICAgIGVsc2UgZmluZCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3RfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX29wdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFNvbWUgdlxuICAgICAgICAgIGVsc2UgZmluZF9vcHQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCB0cnlfam9pbiBsIHYgciA9XG4gICAgICAoKiBbam9pbiBsIHYgcl0gY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gKGVsZW1lbnRzIG9mIGwgPCB2IDxcbiAgICAgICAgIGVsZW1lbnRzIG9mIHIpOyB1c2UgW3RyeV9qb2luIGwgdiByXSB3aGVuIHRoaXMgcHJvcGVydHkgbWF5XG4gICAgICAgICBub3QgaG9sZCwgYnV0IHlvdSBob3BlIGl0IGRvZXMgaG9sZCBpbiB0aGUgY29tbW9uIGNhc2UgKilcbiAgICAgIGlmIChsID0gRW1wdHkgfHwgT3JkLmNvbXBhcmUgKG1heF9lbHQgbCkgdiA8IDApXG4gICAgICAmJiAociA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIHYgKG1pbl9lbHQgcikgPCAwKVxuICAgICAgdGhlbiBqb2luIGwgdiByXG4gICAgICBlbHNlIHVuaW9uIGwgKGFkZCB2IHIpXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgbGV0IHYnID0gZiB2IGluXG4gICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgIGVsc2UgdHJ5X2pvaW4gbCcgdicgcidcblxuICAgIGxldCB0cnlfY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gdHJ5X2pvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgIGxldCByZWMgZmlsdGVyX21hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gZmlsdGVyX21hcCBmIHIgaW5cbiAgICAgICAgIGJlZ2luIG1hdGNoIHYnIHdpdGhcbiAgICAgICAgICAgfCBTb21lIHYnIC0+XG4gICAgICAgICAgICAgIGlmIGwgPT0gbCcgJiYgdiA9PSB2JyAmJiByID09IHInIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG4gICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICB0cnlfY29uY2F0IGwnIHInXG4gICAgICAgICBlbmRcblxuICAgIGxldCBvZl9zb3J0ZWRfbGlzdCBsID1cbiAgICAgIGxldCByZWMgc3ViIG4gbCA9XG4gICAgICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgICAgICB8IDAsIGwgLT4gRW1wdHksIGxcbiAgICAgICAgfCAxLCB4MCA6OiBsIC0+IE5vZGUge2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX0sIGxcbiAgICAgICAgfCAyLCB4MCA6OiB4MSA6OiBsIC0+XG4gICAgICAgICAgICBOb2Rle2w9Tm9kZXtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9OyB2PXgxOyByPUVtcHR5OyBoPTJ9LCBsXG4gICAgICAgIHwgMywgeDAgOjogeDEgOjogeDIgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTtcbiAgICAgICAgICAgICAgICAgcj1Ob2Rle2w9RW1wdHk7IHY9eDI7IHI9RW1wdHk7IGg9MX07IGg9Mn0sIGxcbiAgICAgICAgfCBuLCBsIC0+XG4gICAgICAgICAgbGV0IG5sID0gbiAvIDIgaW5cbiAgICAgICAgICBsZXQgbGVmdCwgbCA9IHN1YiBubCBsIGluXG4gICAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IG1pZCA6OiBsIC0+XG4gICAgICAgICAgICBsZXQgcmlnaHQsIGwgPSBzdWIgKG4gLSBubCAtIDEpIGwgaW5cbiAgICAgICAgICAgIGNyZWF0ZSBsZWZ0IG1pZCByaWdodCwgbFxuICAgICAgaW5cbiAgICAgIGZzdCAoc3ViIChMaXN0Lmxlbmd0aCBsKSBsKVxuXG4gICAgbGV0IG9mX2xpc3QgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gZW1wdHlcbiAgICAgIHwgW3gwXSAtPiBzaW5nbGV0b24geDBcbiAgICAgIHwgW3gwOyB4MV0gLT4gYWRkIHgxIChzaW5nbGV0b24geDApXG4gICAgICB8IFt4MDsgeDE7IHgyXSAtPiBhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzXSAtPiBhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzOyB4NF0gLT4gYWRkIHg0IChhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSkpXG4gICAgICB8IF8gLT4gb2Zfc29ydGVkX2xpc3QgKExpc3Quc29ydF91bmlxIE9yZC5jb21wYXJlIGwpXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIHMgeCAtPiBhZGQgeCBzKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgYyA9IHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID0gcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBzID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBzIGMgPSBtYXRjaCBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgcjsgdjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISsnYSB0XG4gICAgdmFsIGVtcHR5OiAnYSB0XG4gICAgdmFsIGlzX2VtcHR5OiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiAga2V5IC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGtleSAtPiAnYSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgdXBkYXRlOiBrZXkgLT4gKCdhIG9wdGlvbiAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBzaW5nbGV0b246IGtleSAtPiAnYSAtPiAnYSB0XG4gICAgdmFsIHJlbW92ZToga2V5IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBtZXJnZTpcbiAgICAgICAgICAoa2V5IC0+ICdhIG9wdGlvbiAtPiAnYiBvcHRpb24gLT4gJ2Mgb3B0aW9uKSAtPiAnYSB0IC0+ICdiIHQgLT4gJ2MgdFxuICAgIHZhbCB1bmlvbjogKGtleSAtPiAnYSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGNvbXBhcmU6ICgnYSAtPiAnYSAtPiBpbnQpIC0+ICdhIHQgLT4gJ2EgdCAtPiBpbnRcbiAgICB2YWwgZXF1YWw6ICgnYSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGZvcl9hbGw6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGV4aXN0czogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgZmlsdGVyOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoa2V5IC0+ICdhIC0+ICdiIG9wdGlvbikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIHBhcnRpdGlvbjogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+ICdhIHQgKiAnYSB0XG4gICAgdmFsIGNhcmRpbmFsOiAnYSB0IC0+IGludFxuICAgIHZhbCBiaW5kaW5nczogJ2EgdCAtPiAoa2V5ICogJ2EpIGxpc3RcbiAgICB2YWwgbWluX2JpbmRpbmc6ICdhIHQgLT4gKGtleSAqICdhKVxuICAgIHZhbCBtaW5fYmluZGluZ19vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgbWF4X2JpbmRpbmc6ICdhIHQgLT4gKGtleSAqICdhKVxuICAgIHZhbCBtYXhfYmluZGluZ19vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgY2hvb3NlOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgY2hvb3NlX29wdDogJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBzcGxpdDoga2V5IC0+ICdhIHQgLT4gJ2EgdCAqICdhIG9wdGlvbiAqICdhIHRcbiAgICB2YWwgZmluZDoga2V5IC0+ICdhIHQgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6IGtleSAtPiAnYSB0IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4ga2V5ICogJ2FcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiBrZXkgKiAnYVxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgbWFwOiAoJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCBtYXBpOiAoa2V5IC0+ICdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2Zyb20gOiBrZXkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID0gc3RydWN0XG5cbiAgICB0eXBlIGtleSA9IE9yZC50XG5cbiAgICB0eXBlICdhIHQgPVxuICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIG9mIHtsOidhIHQ7IHY6a2V5OyBkOidhOyByOidhIHQ7IGg6aW50fVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgbGV0IGNyZWF0ZSBsIHggZCByID1cbiAgICAgIGxldCBobCA9IGhlaWdodCBsIGFuZCBociA9IGhlaWdodCByIGluXG4gICAgICBOb2Rle2w7IHY9eDsgZDsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgbGV0IHNpbmdsZXRvbiB4IGQgPSBOb2Rle2w9RW1wdHk7IHY9eDsgZDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgbGV0IGJhbCBsIHggZCByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyBkPWxkOyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiBsZCAoY3JlYXRlIGxyIHggZCByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgZD1scmQ7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBsZCBscmwpIGxydiBscmQgKGNyZWF0ZSBscnIgeCBkIHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IGQgcmwpIHJ2IHJkIHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyBkPXJsZDsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHggZCBybGwpIHJsdiBybGQgKGNyZWF0ZSBybHIgcnYgcmQgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdj14OyBkOyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgYWRkIHggZGF0YSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9kZXtsPUVtcHR5OyB2PXg7IGQ9ZGF0YTsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSBhcyBtIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBpZiBkID09IGRhdGEgdGhlbiBtIGVsc2UgTm9kZXtsOyB2PXg7IGQ9ZGF0YTsgcjsgaH1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGRhdGEgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSBhZGQgeCBkYXRhIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIGRcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGQwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZDAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGQwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIGRcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHY7IGR9IC0+ICh2LCBkKVxuICAgICAgfCBOb2RlIHtsfSAtPiBtaW5fYmluZGluZyBsXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nX29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgdjsgZH0gLT4gU29tZSAodiwgZClcbiAgICAgIHwgTm9kZSB7bH0tPiBtaW5fYmluZGluZ19vcHQgbFxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHt2OyBkOyByPUVtcHR5fSAtPiAodiwgZClcbiAgICAgIHwgTm9kZSB7cn0gLT4gbWF4X2JpbmRpbmcgclxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZ19vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGUge3Y7IGQ7IHI9RW1wdHl9IC0+IFNvbWUgKHYsIGQpXG4gICAgICB8IE5vZGUge3J9IC0+IG1heF9iaW5kaW5nX29wdCByXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLnJlbW92ZV9taW5fZWx0XCJcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiYWwgKHJlbW92ZV9taW5fYmluZGluZyBsKSB2IGQgclxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT5cbiAgICAgICAgICBsZXQgKHgsIGQpID0gbWluX2JpbmRpbmcgdDIgaW5cbiAgICAgICAgICBiYWwgdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCAoTm9kZSB7bDsgdjsgZDsgcn0gYXMgbSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gcmVtb3ZlIHggciBpbiBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyB1cGRhdGUgeCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBmIE5vbmUgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBFbXB0eVxuICAgICAgICAgIHwgU29tZSBkYXRhIC0+IE5vZGV7bD1FbXB0eTsgdj14OyBkPWRhdGE7IHI9RW1wdHk7IGg9MX1cbiAgICAgICAgICBlbmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gYXMgbSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBiZWdpblxuICAgICAgICAgICAgbWF0Y2ggZiAoU29tZSBkKSB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gbWVyZ2UgbCByXG4gICAgICAgICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgICAgICAgIGlmIGQgPT0gZGF0YSB0aGVuIG0gZWxzZSBOb2Rle2w7IHY9eDsgZD1kYXRhOyByOyBofVxuICAgICAgICAgIGVuZCBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IHVwZGF0ZSB4IGYgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSB1cGRhdGUgeCBmIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaXRlciBmIGw7IGYgdiBkOyBpdGVyIGYgclxuXG4gICAgbGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gLT5cbiAgICAgICAgICBsZXQgbCcgPSBtYXAgZiBsIGluXG4gICAgICAgICAgbGV0IGQnID0gZiBkIGluXG4gICAgICAgICAgbGV0IHInID0gbWFwIGYgciBpblxuICAgICAgICAgIE5vZGV7bD1sJzsgdjsgZD1kJzsgcj1yJzsgaH1cblxuICAgIGxldCByZWMgbWFwaSBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSAtPlxuICAgICAgICAgIGxldCBsJyA9IG1hcGkgZiBsIGluXG4gICAgICAgICAgbGV0IGQnID0gZiB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBtYXBpIGYgciBpblxuICAgICAgICAgIE5vZGV7bD1sJzsgdjsgZD1kJzsgcj1yJzsgaH1cblxuICAgIGxldCByZWMgZm9sZCBmIG0gYWNjdSA9XG4gICAgICBtYXRjaCBtIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGZvbGQgZiByIChmIHYgZCAoZm9sZCBmIGwgYWNjdSkpXG5cbiAgICBsZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHRydWVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gcCB2IGQgJiYgZm9yX2FsbCBwIGwgJiYgZm9yX2FsbCBwIHJcblxuICAgIGxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBwIHYgZCB8fCBleGlzdHMgcCBsIHx8IGV4aXN0cyBwIHJcblxuICAgICgqIEJld2FyZTogdGhvc2UgdHdvIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgYWRkZWQgayBpcyAqc3RyaWN0bHkqXG4gICAgICAgc21hbGxlciAob3IgYmlnZ2VyKSB0aGFuIGFsbCB0aGUgcHJlc2VudCBrZXlzIGluIHRoZSB0cmVlOyBpdFxuICAgICAgIGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhlIGN1cnJlbnQgbWluIChvciBtYXgpIGtleS5cblxuICAgICAgIEluZGVlZCwgdGhleSBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgXCJqb2luXCIgb3BlcmF0aW9uIHdoaWNoXG4gICAgICAgcmVzcGVjdHMgdGhpcyBwcmVjb25kaXRpb24uXG4gICAgKilcblxuICAgIGxldCByZWMgYWRkX21pbl9iaW5kaW5nIGsgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiBrIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgYmFsIChhZGRfbWluX2JpbmRpbmcgayB4IGwpIHYgZCByXG5cbiAgICBsZXQgcmVjIGFkZF9tYXhfYmluZGluZyBrIHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24gayB4XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgIGJhbCBsIHYgZCAoYWRkX21heF9iaW5kaW5nIGsgeCByKVxuXG4gICAgKCogU2FtZSBhcyBjcmVhdGUgYW5kIGJhbCwgYnV0IG5vIGFzc3VtcHRpb25zIGFyZSBtYWRlIG9uIHRoZVxuICAgICAgIHJlbGF0aXZlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCByZWMgam9pbiBsIHYgZCByID1cbiAgICAgIG1hdGNoIChsLCByKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gYWRkX21pbl9iaW5kaW5nIHYgZCByXG4gICAgICB8IChfLCBFbXB0eSkgLT4gYWRkX21heF9iaW5kaW5nIHYgZCBsXG4gICAgICB8IChOb2Rle2w9bGw7IHY9bHY7IGQ9bGQ7IHI9bHI7IGg9bGh9LFxuICAgICAgICAgTm9kZXtsPXJsOyB2PXJ2OyBkPXJkOyByPXJyOyBoPXJofSkgLT5cbiAgICAgICAgICBpZiBsaCA+IHJoICsgMiB0aGVuIGJhbCBsbCBsdiBsZCAoam9pbiBsciB2IGQgcikgZWxzZVxuICAgICAgICAgIGlmIHJoID4gbGggKyAyIHRoZW4gYmFsIChqb2luIGwgdiBkIHJsKSBydiByZCByciBlbHNlXG4gICAgICAgICAgY3JlYXRlIGwgdiBkIHJcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBObyBhc3N1bXB0aW9uIG9uIHRoZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT5cbiAgICAgICAgICBsZXQgKHgsIGQpID0gbWluX2JpbmRpbmcgdDIgaW5cbiAgICAgICAgICBqb2luIHQxIHggZCAocmVtb3ZlX21pbl9iaW5kaW5nIHQyKVxuXG4gICAgbGV0IGNvbmNhdF9vcl9qb2luIHQxIHYgZCB0MiA9XG4gICAgICBtYXRjaCBkIHdpdGhcbiAgICAgIHwgU29tZSBkIC0+IGpvaW4gdDEgdiBkIHQyXG4gICAgICB8IE5vbmUgLT4gY29uY2F0IHQxIHQyXG5cbiAgICBsZXQgcmVjIHNwbGl0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIChFbXB0eSwgTm9uZSwgRW1wdHkpXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIChsLCBTb21lIGQsIHIpXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgKGxsLCBwcmVzLCBybCkgPSBzcGxpdCB4IGwgaW4gKGxsLCBwcmVzLCBqb2luIHJsIHYgZCByKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobHIsIHByZXMsIHJyKSA9IHNwbGl0IHggciBpbiAoam9pbiBsIHYgZCBsciwgcHJlcywgcnIpXG5cbiAgICBsZXQgcmVjIG1lcmdlIGYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIEVtcHR5KSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZSB7bD1sMTsgdj12MTsgZD1kMTsgcj1yMTsgaD1oMX0sIF8pIHdoZW4gaDEgPj0gaGVpZ2h0IHMyIC0+XG4gICAgICAgICAgbGV0IChsMiwgZDIsIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgY29uY2F0X29yX2pvaW4gKG1lcmdlIGYgbDEgbDIpIHYxIChmIHYxIChTb21lIGQxKSBkMikgKG1lcmdlIGYgcjEgcjIpXG4gICAgICB8IChfLCBOb2RlIHtsPWwyOyB2PXYyOyBkPWQyOyByPXIyfSkgLT5cbiAgICAgICAgICBsZXQgKGwxLCBkMSwgcjEpID0gc3BsaXQgdjIgczEgaW5cbiAgICAgICAgICBjb25jYXRfb3Jfam9pbiAobWVyZ2UgZiBsMSBsMikgdjIgKGYgdjIgZDEgKFNvbWUgZDIpKSAobWVyZ2UgZiByMSByMilcbiAgICAgIHwgXyAtPlxuICAgICAgICAgIGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHJlYyB1bmlvbiBmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgIHwgKEVtcHR5LCBzKSB8IChzLCBFbXB0eSkgLT4gc1xuICAgICAgfCAoTm9kZSB7bD1sMTsgdj12MTsgZD1kMTsgcj1yMTsgaD1oMX0sXG4gICAgICAgICBOb2RlIHtsPWwyOyB2PXYyOyBkPWQyOyByPXIyOyBoPWgyfSkgLT5cbiAgICAgICAgICBpZiBoMSA+PSBoMiB0aGVuXG4gICAgICAgICAgICBsZXQgKGwyLCBkMiwgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICAgIGxldCBsID0gdW5pb24gZiBsMSBsMiBhbmQgciA9IHVuaW9uIGYgcjEgcjIgaW5cbiAgICAgICAgICAgIG1hdGNoIGQyIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiBqb2luIGwgdjEgZDEgclxuICAgICAgICAgICAgfCBTb21lIGQyIC0+IGNvbmNhdF9vcl9qb2luIGwgdjEgKGYgdjEgZDEgZDIpIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGwxLCBkMSwgcjEpID0gc3BsaXQgdjIgczEgaW5cbiAgICAgICAgICAgIGxldCBsID0gdW5pb24gZiBsMSBsMiBhbmQgciA9IHVuaW9uIGYgcjEgcjIgaW5cbiAgICAgICAgICAgIG1hdGNoIGQxIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiBqb2luIGwgdjIgZDIgclxuICAgICAgICAgICAgfCBTb21lIGQxIC0+IGNvbmNhdF9vcl9qb2luIGwgdjIgKGYgdjIgZDEgZDIpIHJcblxuICAgIGxldCByZWMgZmlsdGVyIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSBhcyBtIC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgbCcgPSBmaWx0ZXIgcCBsIGluXG4gICAgICAgICAgbGV0IHB2ZCA9IHAgdiBkIGluXG4gICAgICAgICAgbGV0IHInID0gZmlsdGVyIHAgciBpblxuICAgICAgICAgIGlmIHB2ZCB0aGVuIGlmIGw9PWwnICYmIHI9PXInIHRoZW4gbSBlbHNlIGpvaW4gbCcgdiBkIHInXG4gICAgICAgICAgZWxzZSBjb25jYXQgbCcgcidcblxuICAgIGxldCByZWMgZmlsdGVyX21hcCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtmXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlcl9tYXAgZiBsIGluXG4gICAgICAgICAgbGV0IGZ2ZCA9IGYgdiBkIGluXG4gICAgICAgICAgbGV0IHInID0gZmlsdGVyX21hcCBmIHIgaW5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBmdmQgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGQnIC0+IGpvaW4gbCcgdiBkJyByJ1xuICAgICAgICAgICAgfCBOb25lIC0+IGNvbmNhdCBsJyByJ1xuICAgICAgICAgIGVuZFxuXG4gICAgbGV0IHJlYyBwYXJ0aXRpb24gcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IChFbXB0eSwgRW1wdHkpXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgKGx0LCBsZikgPSBwYXJ0aXRpb24gcCBsIGluXG4gICAgICAgICAgbGV0IHB2ZCA9IHAgdiBkIGluXG4gICAgICAgICAgbGV0IChydCwgcmYpID0gcGFydGl0aW9uIHAgciBpblxuICAgICAgICAgIGlmIHB2ZFxuICAgICAgICAgIHRoZW4gKGpvaW4gbHQgdiBkIHJ0LCBjb25jYXQgbGYgcmYpXG4gICAgICAgICAgZWxzZSAoY29uY2F0IGx0IHJ0LCBqb2luIGxmIHYgZCByZilcblxuICAgIHR5cGUgJ2EgZW51bWVyYXRpb24gPSBFbmQgfCBNb3JlIG9mIGtleSAqICdhICogJ2EgdCAqICdhIGVudW1lcmF0aW9uXG5cbiAgICBsZXQgcmVjIGNvbnNfZW51bSBtIGUgPVxuICAgICAgbWF0Y2ggbSB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gY29uc19lbnVtIGwgKE1vcmUodiwgZCwgciwgZSkpXG5cbiAgICBsZXQgY29tcGFyZSBjbXAgbTEgbTIgPVxuICAgICAgbGV0IHJlYyBjb21wYXJlX2F1eCBlMSBlMiA9XG4gICAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAgIChFbmQsIEVuZCkgLT4gMFxuICAgICAgICB8IChFbmQsIF8pICAtPiAtMVxuICAgICAgICB8IChfLCBFbmQpIC0+IDFcbiAgICAgICAgfCAoTW9yZSh2MSwgZDEsIHIxLCBlMSksIE1vcmUodjIsIGQyLCByMiwgZTIpKSAtPlxuICAgICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgICAgaWYgYyA8PiAwIHRoZW4gYyBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCBkMSBkMiBpblxuICAgICAgICAgICAgaWYgYyA8PiAwIHRoZW4gYyBlbHNlXG4gICAgICAgICAgICBjb21wYXJlX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuICAgICAgaW4gY29tcGFyZV9hdXggKGNvbnNfZW51bSBtMSBFbmQpIChjb25zX2VudW0gbTIgRW5kKVxuXG4gICAgbGV0IGVxdWFsIGNtcCBtMSBtMiA9XG4gICAgICBsZXQgcmVjIGVxdWFsX2F1eCBlMSBlMiA9XG4gICAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAgIChFbmQsIEVuZCkgLT4gdHJ1ZVxuICAgICAgICB8IChFbmQsIF8pICAtPiBmYWxzZVxuICAgICAgICB8IChfLCBFbmQpIC0+IGZhbHNlXG4gICAgICAgIHwgKE1vcmUodjEsIGQxLCByMSwgZTEpLCBNb3JlKHYyLCBkMiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICAgIE9yZC5jb21wYXJlIHYxIHYyID0gMCAmJiBjbXAgZDEgZDIgJiZcbiAgICAgICAgICAgIGVxdWFsX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuICAgICAgaW4gZXF1YWxfYXV4IChjb25zX2VudW0gbTEgRW5kKSAoY29uc19lbnVtIG0yIEVuZClcblxuICAgIGxldCByZWMgY2FyZGluYWwgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGUge2w7IHJ9IC0+IGNhcmRpbmFsIGwgKyAxICsgY2FyZGluYWwgclxuXG4gICAgbGV0IHJlYyBiaW5kaW5nc19hdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gYmluZGluZ3NfYXV4ICgodiwgZCkgOjogYmluZGluZ3NfYXV4IGFjY3UgcikgbFxuXG4gICAgbGV0IGJpbmRpbmdzIHMgPVxuICAgICAgYmluZGluZ3NfYXV4IFtdIHNcblxuICAgIGxldCBjaG9vc2UgPSBtaW5fYmluZGluZ1xuXG4gICAgbGV0IGNob29zZV9vcHQgPSBtaW5fYmluZGluZ19vcHRcblxuICAgIGxldCBhZGRfc2VxIGkgbSA9XG4gICAgICBTZXEuZm9sZF9sZWZ0IChmdW4gbSAoayx2KSAtPiBhZGQgayB2IG0pIG0gaVxuXG4gICAgbGV0IG9mX3NlcSBpID0gYWRkX3NlcSBpIGVtcHR5XG5cbiAgICBsZXQgcmVjIHNlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKGssdix0LHJlc3QpIC0+IFNlcS5Db25zICgoayx2KSwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgbSA9XG4gICAgICBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSBtIEVuZClcblxuICAgIGxldCByZWMgc25vY19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IGQ7IHJ9IC0+IHNub2NfZW51bSByIChNb3JlKHYsIGQsIGwsIGUpKVxuXG4gICAgbGV0IHJlYyByZXZfc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoayx2LHQscmVzdCkgLT5cbiAgICAgICAgICBTZXEuQ29ucyAoKGssdiksIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3Jldl9zZXEgYyA9XG4gICAgICByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gYyBFbmQpXG5cbiAgICBsZXQgdG9fc2VxX2Zyb20gbG93IG0gPVxuICAgICAgbGV0IHJlYyBhdXggbG93IG0gYyA9IG1hdGNoIG0gd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGNcbiAgICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBffSAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggT3JkLmNvbXBhcmUgdiBsb3cgd2l0aFxuICAgICAgICAgICAgICB8IDAgLT4gTW9yZSAodiwgZCwgciwgYylcbiAgICAgICAgICAgICAgfCBuIHdoZW4gbjwwIC0+IGF1eCBsb3cgciBjXG4gICAgICAgICAgICAgIHwgXyAtPiBhdXggbG93IGwgKE1vcmUgKHYsIGQsIHIsIGMpKVxuICAgICAgICAgICAgZW5kXG4gICAgICBpblxuICAgICAgc2VxX29mX2VudW1fIChhdXggbG93IG0gRW5kKVxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9IHsgbXV0YWJsZSBjIDogJ2EgbGlzdDsgbXV0YWJsZSBsZW4gOiBpbnQ7IH1cblxuZXhjZXB0aW9uIEVtcHR5XG5cbmxldCBjcmVhdGUgKCkgPSB7IGMgPSBbXTsgbGVuID0gMDsgfVxuXG5sZXQgY2xlYXIgcyA9IHMuYyA8LSBbXTsgcy5sZW4gPC0gMFxuXG5sZXQgY29weSBzID0geyBjID0gcy5jOyBsZW4gPSBzLmxlbjsgfVxuXG5sZXQgcHVzaCB4IHMgPSBzLmMgPC0geCA6OiBzLmM7IHMubGVuIDwtIHMubGVuICsgMVxuXG5sZXQgcG9wIHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgaGRcbiAgfCBbXSAgICAgLT4gcmFpc2UgRW1wdHlcblxubGV0IHBvcF9vcHQgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBTb21lIGhkXG4gIHwgW10gICAgIC0+IE5vbmVcblxubGV0IHRvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBoZFxuICB8IFtdICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCB0b3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IFNvbWUgaGRcbiAgfCBbXSAgICAtPiBOb25lXG5cbmxldCBpc19lbXB0eSBzID0gKHMuYyA9IFtdKVxuXG5sZXQgbGVuZ3RoIHMgPSBzLmxlblxuXG5sZXQgaXRlciBmIHMgPSBMaXN0Lml0ZXIgZiBzLmNcblxubGV0IGZvbGQgZiBhY2MgcyA9IExpc3QuZm9sZF9sZWZ0IGYgYWNjIHMuY1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBMaXN0LnRvX3NlcSBzLmNcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBzID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBzIGc7XG4gIHNcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgRnJhbmNvaXMgUG90dGllciwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgSmVyZW1pZSBEaW1pbm8sIEphbmUgU3RyZWV0IEV1cm9wZSAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXhjZXB0aW9uIEVtcHR5XG5cbnR5cGUgJ2EgY2VsbCA9XG4gIHwgTmlsXG4gIHwgQ29ucyBvZiB7IGNvbnRlbnQ6ICdhOyBtdXRhYmxlIG5leHQ6ICdhIGNlbGwgfVxuXG50eXBlICdhIHQgPSB7XG4gIG11dGFibGUgbGVuZ3RoOiBpbnQ7XG4gIG11dGFibGUgZmlyc3Q6ICdhIGNlbGw7XG4gIG11dGFibGUgbGFzdDogJ2EgY2VsbFxufVxuXG5sZXQgY3JlYXRlICgpID0ge1xuICBsZW5ndGggPSAwO1xuICBmaXJzdCA9IE5pbDtcbiAgbGFzdCA9IE5pbFxufVxuXG5sZXQgY2xlYXIgcSA9XG4gIHEubGVuZ3RoIDwtIDA7XG4gIHEuZmlyc3QgPC0gTmlsO1xuICBxLmxhc3QgPC0gTmlsXG5cbmxldCBhZGQgeCBxID1cbiAgbGV0IGNlbGwgPSBDb25zIHtcbiAgICBjb250ZW50ID0geDtcbiAgICBuZXh0ID0gTmlsXG4gIH0gaW5cbiAgbWF0Y2ggcS5sYXN0IHdpdGhcbiAgfCBOaWwgLT5cbiAgICBxLmxlbmd0aCA8LSAxO1xuICAgIHEuZmlyc3QgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuICB8IENvbnMgbGFzdCAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoICsgMTtcbiAgICBsYXN0Lm5leHQgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuXG5sZXQgcHVzaCA9XG4gIGFkZFxuXG5sZXQgcGVlayBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBjb250ZW50XG5cbmxldCBwZWVrX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudCB9IC0+IFNvbWUgY29udGVudFxuXG5sZXQgdG9wID1cbiAgcGVla1xuXG5sZXQgdGFrZSBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSAtPlxuICAgIGNsZWFyIHE7XG4gICAgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIGNvbnRlbnRcblxubGV0IHRha2Vfb3B0IHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gTm9uZVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIFNvbWUgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIFNvbWUgY29udGVudFxuXG5sZXQgcG9wID1cbiAgdGFrZVxuXG5sZXQgY29weSA9XG4gIGxldCByZWMgY29weSBxX3JlcyBwcmV2IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IHFfcmVzLmxhc3QgPC0gcHJldjsgcV9yZXNcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCByZXMgPSBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IGluXG4gICAgICBiZWdpbiBtYXRjaCBwcmV2IHdpdGhcbiAgICAgIHwgTmlsIC0+IHFfcmVzLmZpcnN0IDwtIHJlc1xuICAgICAgfCBDb25zIHAgLT4gcC5uZXh0IDwtIHJlc1xuICAgICAgZW5kO1xuICAgICAgY29weSBxX3JlcyByZXMgbmV4dFxuICBpblxuICBmdW4gcSAtPiBjb3B5IHsgbGVuZ3RoID0gcS5sZW5ndGg7IGZpcnN0ID0gTmlsOyBsYXN0ID0gTmlsIH0gTmlsIHEuZmlyc3RcblxubGV0IGlzX2VtcHR5IHEgPVxuICBxLmxlbmd0aCA9IDBcblxubGV0IGxlbmd0aCBxID1cbiAgcS5sZW5ndGhcblxubGV0IGl0ZXIgPVxuICBsZXQgcmVjIGl0ZXIgZiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgZiBjb250ZW50O1xuICAgICAgaXRlciBmIG5leHRcbiAgaW5cbiAgZnVuIGYgcSAtPiBpdGVyIGYgcS5maXJzdFxuXG5sZXQgZm9sZCA9XG4gIGxldCByZWMgZm9sZCBmIGFjY3UgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gYWNjdVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgY29udGVudCBpblxuICAgICAgZm9sZCBmIGFjY3UgbmV4dFxuICBpblxuICBmdW4gZiBhY2N1IHEgLT4gZm9sZCBmIGFjY3UgcS5maXJzdFxuXG5sZXQgdHJhbnNmZXIgcTEgcTIgPVxuICBpZiBxMS5sZW5ndGggPiAwIHRoZW5cbiAgICBtYXRjaCBxMi5sYXN0IHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHExLmxlbmd0aDtcbiAgICAgIHEyLmZpcnN0IDwtIHExLmZpcnN0O1xuICAgICAgcTIubGFzdCA8LSBxMS5sYXN0O1xuICAgICAgY2xlYXIgcTFcbiAgICB8IENvbnMgbGFzdCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHEyLmxlbmd0aCArIHExLmxlbmd0aDtcbiAgICAgIGxhc3QubmV4dCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcSA9XG4gIGxldCByZWMgYXV4IGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICB8IE5pbCAtPiBTZXEuTmlsXG4gICAgfCBDb25zIHsgY29udGVudD14OyBuZXh0OyB9IC0+IFNlcS5Db25zICh4LCBhdXggbmV4dClcbiAgaW5cbiAgYXV4IHEuZmlyc3RcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBxID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBxIGc7XG4gIHFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCJsZXQgdXRmOF9vZl9jb2RlIGJ1ZiB4ID1cbiAgbGV0IGFkZCA9IEJ1ZmZlci5hZGRfY2hhciBpblxuXG4gICgqIFN0cmFpZ2h0IDw9IGRvZXNuJ3Qgd29yayB3aXRoIHNpZ25lZCAzMS1iaXQgaW50cyAqKVxuICBsZXQgbWF4Yml0cyBuIHggPSB4IGxzciBuID0gMCBpblxuXG4gIGlmIG1heGJpdHMgNyB4IHRoZW4gKCogNyAqKVxuICAgIGFkZCBidWYgKENoYXIuY2hyIHgpXG4gIGVsc2UgaWYgbWF4Yml0cyAxMSB4IHRoZW4gKFxuICAgICgqIDUgKyA2ICopXG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTEwMDAwMDAgbG9yICgoeCBsc3IgNikgbGFuZCAwYjAwMDExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoeCBsYW5kIDBiMDAxMTExMTEpKSkpXG4gIGVsc2UgaWYgbWF4Yml0cyAxNiB4IHRoZW4gKFxuICAgICgqIDQgKyA2ICsgNiAqKVxuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjExMTAwMDAwIGxvciAoKHggbHNyIDEyKSBsYW5kIDBiMDAwMDExMTEpKSk7XG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgoeCBsc3IgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoeCBsYW5kIDBiMDAxMTExMTEpKSkpXG4gIGVsc2UgaWYgbWF4Yml0cyAyMSB4IHRoZW4gKFxuICAgICgqIDMgKyA2ICsgNiArIDYgKilcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMTExMDAwMCBsb3IgKCh4IGxzciAxOCkgbGFuZCAwYjAwMDAwMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHggbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgoeCBsc3IgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoeCBsYW5kIDBiMDAxMTExMTEpKSkpXG4gIGVsc2UgaWYgbWF4Yml0cyAyNiB4IHRoZW4gKFxuICAgICgqIDIgKyA2ICsgNiArIDYgKyA2ICopXG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTEwMDAgbG9yICgoeCBsc3IgMjQpIGxhbmQgMGIwMDAwMDAxMSkpKTtcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh4IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHggbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgoeCBsc3IgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoeCBsYW5kIDBiMDAxMTExMTEpKSkpXG4gIGVsc2UgKFxuICAgIGFzc2VydCAobWF4Yml0cyAzMSB4KTtcbiAgICAoKiAxICsgNiArIDYgKyA2ICsgNiArIDYgKilcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMTExMTEwMCBsb3IgKCh4IGxzciAzMCkgbGFuZCAwYjAwMDAwMDAxKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHggbHNyIDI0KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgoeCBsc3IgMTgpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh4IGxzciAxMikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZCBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHggbHNyIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGQgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHggbGFuZCAwYjAwMTExMTExKSkpKVxuXG5sZXQgY29kZV9vZl9zdXJyb2dhdGVfcGFpciBpIGogPVxuICBsZXQgaGlnaDEwID0gaSAtIDB4RDgwMCBpblxuICBsZXQgbG93MTAgPSBqIC0gMHhEQzAwIGluXG4gIDB4MTAwMDAgKyAoKGhpZ2gxMCBsc2wgMTApIGxvciBsb3cxMClcblxubGV0IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgYnVmIGkgaiA9XG4gIHV0Zjhfb2ZfY29kZSBidWYgKGNvZGVfb2Zfc3Vycm9nYXRlX3BhaXIgaSBqKVxuIiwiXG4oKiogezMgVHlwZSBvZiB0aGUgSlNPTiB0cmVlfSAqKVxuXG50eXBlIHQgPVxuICAgIFtcbiAgICB8IGBOdWxsXG4gICAgfCBgQm9vbCBvZiBib29sXG4gICAgfCBgSW50IG9mIGludFxuICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICB8IGBBc3NvYyBvZiAoc3RyaW5nICogdCkgbGlzdFxuICAgIHwgYExpc3Qgb2YgdCBsaXN0XG4gICAgfCBgVHVwbGUgb2YgdCBsaXN0XG4gICAgfCBgVmFyaWFudCBvZiAoc3RyaW5nICogdCBvcHRpb24pXG4gICAgXVxuKCoqXG5BbGwgcG9zc2libGUgY2FzZXMgZGVmaW5lZCBpbiBZb2pzb246XG4tIGBOdWxsOiBKU09OIG51bGxcbi0gYEJvb2wgb2YgYm9vbDogSlNPTiBib29sZWFuXG4tIGBJbnQgb2YgaW50OiBKU09OIG51bWJlciB3aXRob3V0IGRlY2ltYWwgcG9pbnQgb3IgZXhwb25lbnQuXG4tIGBJbnRsaXQgb2Ygc3RyaW5nOiBKU09OIG51bWJlciB3aXRob3V0IGRlY2ltYWwgcG9pbnQgb3IgZXhwb25lbnQsXG5cdCAgICBwcmVzZXJ2ZWQgYXMgYSBzdHJpbmcuXG4tIGBGbG9hdCBvZiBmbG9hdDogSlNPTiBudW1iZXIsIEluZmluaXR5LCAtSW5maW5pdHkgb3IgTmFOLlxuLSBgRmxvYXRsaXQgb2Ygc3RyaW5nOiBKU09OIG51bWJlciwgSW5maW5pdHksIC1JbmZpbml0eSBvciBOYU4sXG5cdCAgICBwcmVzZXJ2ZWQgYXMgYSBzdHJpbmcuXG4tIGBTdHJpbmcgb2Ygc3RyaW5nOiBKU09OIHN0cmluZy4gQnl0ZXMgaW4gdGhlIHJhbmdlIDEyOC0yNTUgYXJlIHByZXNlcnZlZFxuXHQgICAgYXMtaXMgd2l0aG91dCBlbmNvZGluZyB2YWxpZGF0aW9uIGZvciBib3RoIHJlYWRpbmdcblx0ICAgIGFuZCB3cml0aW5nLlxuLSBgU3RyaW5nbGl0IG9mIHN0cmluZzogSlNPTiBzdHJpbmcgbGl0ZXJhbCBpbmNsdWRpbmcgdGhlIGRvdWJsZSBxdW90ZXMuXG4tIGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdDogSlNPTiBvYmplY3QuXG4tIGBMaXN0IG9mIGpzb24gbGlzdDogSlNPTiBhcnJheS5cbi0gYFR1cGxlIG9mIGpzb24gbGlzdDogVHVwbGUgKG5vbi1zdGFuZGFyZCBleHRlbnNpb24gb2YgSlNPTikuXG5cdCAgICBTeW50YXg6IFsoXCJhYmNcIiwgMTIzKV0uXG4tIGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbik6IFZhcmlhbnQgKG5vbi1zdGFuZGFyZCBleHRlbnNpb24gb2YgSlNPTikuXG5cdCAgICBTeW50YXg6IFs8XCJGb29cIj5dIG9yIFs8XCJCYXJcIjoxMjM+XS5cbiopXG5cbigqXG4gIE5vdGUgdG8gYWR2ZW50dXJlcnM6IG9jYW1sZG9jIGRvZXMgbm90IHN1cHBvcnQgaW5saW5lIGNvbW1lbnRzXG4gIG9uIGVhY2ggcG9seW1vcnBoaWMgdmFyaWFudCwgYW5kIGNwcG8gZG9lc24ndCBhbGxvdyB0byBjb25jYXRlbmF0ZVxuICBjb21tZW50cywgc28gaXQgd291bGQgYmUgY29tcGxpY2F0ZWQgdG8gZG9jdW1lbnQgb25seSB0aGVcbiAgY2FzZXMgdGhhdCBhcmUgcHJlc2VydmVkIGJ5IGNwcG8gaW4gdGhlIHR5cGUgZGVmaW5pdGlvbi5cbiopXG5cbmxldCByZWMgdG9fYmFzaWMgOiB0IC0+IEJhc2ljLnQgPSBmdW5jdGlvblxuICB8IChgTnVsbCB8IGBCb29sIF8gfCBgSW50IF8gfCBgRmxvYXQgXyB8IGBTdHJpbmcgXykgYXMgeCAtPiB4XG4gIHwgYEludGxpdCBzIC0+IGBTdHJpbmcgc1xuICB8IGBMaXN0IGwgfCBgVHVwbGUgbCAtPiBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCB0b19iYXNpYyBsKSlcbiAgfCBgQXNzb2MgbCAtPlxuICAgICAgYEFzc29jIChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIChmdW4gKGssIHYpIC0+IChrLCB0b19iYXNpYyB2KSkgbCkpXG4gIHwgYFZhcmlhbnQgKGssIE5vbmUpIC0+IGBTdHJpbmcga1xuICB8IGBWYXJpYW50IChrLCBTb21lIHYpIC0+IGBMaXN0IFsgYFN0cmluZyBrOyB0b19iYXNpYyB2IF1cblxubGV0IGhleCBuID1cbiAgQ2hhci5jaHIgKFxuICAgIGlmIG4gPCAxMCB0aGVuIG4gKyA0OFxuICAgIGVsc2UgbiArIDg3XG4gIClcblxubGV0IHdyaXRlX3NwZWNpYWwgc3JjIHN0YXJ0IHN0b3Agb2Igc3RyID1cbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgb2Igc3JjICFzdGFydCAoc3RvcCAtICFzdGFydCk7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIHN0cjtcbiAgc3RhcnQgOj0gc3RvcCArIDFcblxubGV0IHdyaXRlX2NvbnRyb2xfY2hhciBzcmMgc3RhcnQgc3RvcCBvYiBjID1cbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgb2Igc3JjICFzdGFydCAoc3RvcCAtICFzdGFydCk7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIFwiXFxcXHUwMFwiO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgKGhleCAoQ2hhci5jb2RlIGMgbHNyIDQpKTtcbiAgQnVmZmVyLmFkZF9jaGFyIG9iIChoZXggKENoYXIuY29kZSBjIGxhbmQgMHhmKSk7XG4gIHN0YXJ0IDo9IHN0b3AgKyAxXG5cbmxldCBmaW5pc2hfc3RyaW5nIHNyYyBzdGFydCBvYiA9XG4gIHRyeVxuICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIG9iIHNyYyAhc3RhcnQgKFN0cmluZy5sZW5ndGggc3JjIC0gIXN0YXJ0KVxuICB3aXRoIGV4YyAtPlxuICAgIFByaW50Zi5lcHJpbnRmIFwic3JjPSVTIHN0YXJ0PSVpIGxlbj0laVxcbiUhXCJcbiAgICAgIHNyYyAhc3RhcnQgKFN0cmluZy5sZW5ndGggc3JjIC0gIXN0YXJ0KTtcbiAgICByYWlzZSBleGNcblxubGV0IHdyaXRlX3N0cmluZ19ib2R5IG9iIHMgPVxuICBsZXQgc3RhcnQgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICAgJ1wiJyAtPiB3cml0ZV9zcGVjaWFsIHMgc3RhcnQgaSBvYiBcIlxcXFxcXFwiXCJcbiAgICAgIHwgJ1xcXFwnIC0+IHdyaXRlX3NwZWNpYWwgcyBzdGFydCBpIG9iIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAtPiB3cml0ZV9zcGVjaWFsIHMgc3RhcnQgaSBvYiBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiB3cml0ZV9zcGVjaWFsIHMgc3RhcnQgaSBvYiBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgLT4gd3JpdGVfc3BlY2lhbCBzIHN0YXJ0IGkgb2IgXCJcXFxcblwiXG4gICAgICB8ICdcXHInIC0+IHdyaXRlX3NwZWNpYWwgcyBzdGFydCBpIG9iIFwiXFxcXHJcIlxuICAgICAgfCAnXFx0JyAtPiB3cml0ZV9zcGVjaWFsIHMgc3RhcnQgaSBvYiBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT4gd3JpdGVfY29udHJvbF9jaGFyIHMgc3RhcnQgaSBvYiBjXG4gICAgICB8IF8gLT4gKClcbiAgZG9uZTtcbiAgZmluaXNoX3N0cmluZyBzIHN0YXJ0IG9iXG5cbmxldCB3cml0ZV9zdHJpbmcgb2IgcyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnXCInO1xuICB3cml0ZV9zdHJpbmdfYm9keSBvYiBzO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ1wiJ1xuXG5sZXQganNvbl9zdHJpbmdfb2Zfc3RyaW5nIHMgPVxuICBsZXQgb2IgPSBCdWZmZXIuY3JlYXRlIDEwIGluXG4gIHdyaXRlX3N0cmluZyBvYiBzO1xuICBCdWZmZXIuY29udGVudHMgb2JcblxubGV0IHdyaXRlX251bGwgb2IgKCkgPVxuICBCdWZmZXIuYWRkX3N0cmluZyBvYiBcIm51bGxcIlxuXG5sZXQgd3JpdGVfYm9vbCBvYiB4ID1cbiAgQnVmZmVyLmFkZF9zdHJpbmcgb2IgKGlmIHggdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIilcblxubGV0IGRlYyBuID1cbiAgQ2hhci5jaHIgKG4gKyA0OClcblxubGV0IHJlYyB3cml0ZV9kaWdpdHMgcyB4ID1cbiAgaWYgeCA9IDAgdGhlbiAoKVxuICBlbHNlXG4gICAgbGV0IGQgPSB4IG1vZCAxMCBpblxuICAgIHdyaXRlX2RpZ2l0cyBzICh4IC8gMTApO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBzIChkZWMgKGFicyBkKSlcblxubGV0IHdyaXRlX2ludCBvYiB4ID1cbiAgaWYgeCA+IDAgdGhlblxuICAgIHdyaXRlX2RpZ2l0cyBvYiB4XG4gIGVsc2UgaWYgeCA8IDAgdGhlbiAoXG4gICAgQnVmZmVyLmFkZF9jaGFyIG9iICctJztcbiAgICB3cml0ZV9kaWdpdHMgb2IgeFxuICApXG4gIGVsc2VcbiAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJzAnXG5cblxubGV0IGpzb25fc3RyaW5nX29mX2ludCBpID1cbiAgc3RyaW5nX29mX2ludCBpXG5cblxuKCpcbiAgRW5zdXJlIHRoYXQgdGhlIGZsb2F0IGlzIG5vdCBwcmludGVkIGFzIGFuIGludC5cbiAgVGhpcyBpcyBub3QgcmVxdWlyZWQgYnkgSlNPTiwgYnV0IHVzZWZ1bCBpbiBvcmRlciB0byBndWFyYW50ZWVcbiAgcmV2ZXJzaWJpbGl0eS5cbiopXG5sZXQgZmxvYXRfbmVlZHNfcGVyaW9kIHMgPVxuICB0cnlcbiAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgICAgICcwJy4uJzknIHwgJy0nIC0+ICgpXG4gICAgICAgIHwgXyAtPiByYWlzZSBFeGl0XG4gICAgZG9uZTtcbiAgICB0cnVlXG4gIHdpdGggRXhpdCAtPlxuICAgIGZhbHNlXG5cbigqXG4gIEd1YXJhbnRlZXMgdGhhdCBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGRpZ2l0cyBhcmUgcHJpbnRlZCBpbiBvcmRlciB0byBhbGxvd1xuICByZXZlcnNpYmlsaXR5LlxuKilcbmxldCB3cml0ZV9mbG9hdCBvYiB4ID1cbiAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgRlBfbmFuIC0+XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBvYiBcIk5hTlwiXG4gIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIChpZiB4ID4gMC4gdGhlbiBcIkluZmluaXR5XCIgZWxzZSBcIi1JbmZpbml0eVwiKVxuICB8IF8gLT5cbiAgICAgIGxldCBzMSA9IFByaW50Zi5zcHJpbnRmIFwiJS4xNmdcIiB4IGluXG4gICAgICBsZXQgcyA9XG4gICAgICAgIGlmIGZsb2F0X29mX3N0cmluZyBzMSA9IHggdGhlbiBzMVxuICAgICAgICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJS4xN2dcIiB4XG4gICAgICBpblxuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgb2IgcztcbiAgICAgIGlmIGZsb2F0X25lZWRzX3BlcmlvZCBzIHRoZW5cbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgb2IgXCIuMFwiXG5cbmxldCB3cml0ZV9ub3JtYWxfZmxvYXRfcHJlYyBzaWduaWZpY2FudF9maWd1cmVzIG9iIHggPVxuICBsZXQgc3ByaW50ZiA9IFByaW50Zi5zcHJpbnRmIGluXG4gIGxldCBzID1cbiAgICBtYXRjaCBzaWduaWZpY2FudF9maWd1cmVzIHdpdGhcbiAgICAgICAgMSAtPiBzcHJpbnRmIFwiJS4xZ1wiIHhcbiAgICAgIHwgMiAtPiBzcHJpbnRmIFwiJS4yZ1wiIHhcbiAgICAgIHwgMyAtPiBzcHJpbnRmIFwiJS4zZ1wiIHhcbiAgICAgIHwgNCAtPiBzcHJpbnRmIFwiJS40Z1wiIHhcbiAgICAgIHwgNSAtPiBzcHJpbnRmIFwiJS41Z1wiIHhcbiAgICAgIHwgNiAtPiBzcHJpbnRmIFwiJS42Z1wiIHhcbiAgICAgIHwgNyAtPiBzcHJpbnRmIFwiJS43Z1wiIHhcbiAgICAgIHwgOCAtPiBzcHJpbnRmIFwiJS44Z1wiIHhcbiAgICAgIHwgOSAtPiBzcHJpbnRmIFwiJS45Z1wiIHhcbiAgICAgIHwgMTAgLT4gc3ByaW50ZiBcIiUuMTBnXCIgeFxuICAgICAgfCAxMSAtPiBzcHJpbnRmIFwiJS4xMWdcIiB4XG4gICAgICB8IDEyIC0+IHNwcmludGYgXCIlLjEyZ1wiIHhcbiAgICAgIHwgMTMgLT4gc3ByaW50ZiBcIiUuMTNnXCIgeFxuICAgICAgfCAxNCAtPiBzcHJpbnRmIFwiJS4xNGdcIiB4XG4gICAgICB8IDE1IC0+IHNwcmludGYgXCIlLjE1Z1wiIHhcbiAgICAgIHwgMTYgLT4gc3ByaW50ZiBcIiUuMTZnXCIgeFxuICAgICAgfCBfIC0+IHNwcmludGYgXCIlLjE3Z1wiIHhcbiAgaW5cbiAgQnVmZmVyLmFkZF9zdHJpbmcgb2IgcztcbiAgaWYgZmxvYXRfbmVlZHNfcGVyaW9kIHMgdGhlblxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIFwiLjBcIlxuXG4oKiB1c2VkIGJ5IGF0ZGdlbiAqKVxubGV0IHdyaXRlX2Zsb2F0X3ByZWMgc2lnbmlmaWNhbnRfZmlndXJlcyBvYiB4ID1cbiAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgRlBfbmFuIC0+XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBvYiBcIk5hTlwiXG4gIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIChpZiB4ID4gMC4gdGhlbiBcIkluZmluaXR5XCIgZWxzZSBcIi1JbmZpbml0eVwiKVxuICB8IF8gLT5cbiAgICAgIHdyaXRlX25vcm1hbF9mbG9hdF9wcmVjIHNpZ25pZmljYW50X2ZpZ3VyZXMgb2IgeFxuXG5sZXQganNvbl9zdHJpbmdfb2ZfZmxvYXQgeCA9XG4gIGxldCBvYiA9IEJ1ZmZlci5jcmVhdGUgMjAgaW5cbiAgd3JpdGVfZmxvYXQgb2IgeDtcbiAgQnVmZmVyLmNvbnRlbnRzIG9iXG5cblxubGV0IHdyaXRlX3N0ZF9mbG9hdCBvYiB4ID1cbiAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgRlBfbmFuIC0+XG4gICAgICBDb21tb24uanNvbl9lcnJvciBcIk5hTiB2YWx1ZSBub3QgYWxsb3dlZCBpbiBzdGFuZGFyZCBKU09OXCJcbiAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgQ29tbW9uLmpzb25fZXJyb3JcbiAgICAgICAgKGlmIHggPiAwLiB0aGVuXG4gICAgICAgICAgIFwiSW5maW5pdHkgdmFsdWUgbm90IGFsbG93ZWQgaW4gc3RhbmRhcmQgSlNPTlwiXG4gICAgICAgICBlbHNlXG4gICAgICAgICAgIFwiLUluZmluaXR5IHZhbHVlIG5vdCBhbGxvd2VkIGluIHN0YW5kYXJkIEpTT05cIilcbiAgfCBfIC0+XG4gICAgICBsZXQgczEgPSBQcmludGYuc3ByaW50ZiBcIiUuMTZnXCIgeCBpblxuICAgICAgbGV0IHMgPVxuICAgICAgICBpZiBmbG9hdF9vZl9zdHJpbmcgczEgPSB4IHRoZW4gczFcbiAgICAgICAgZWxzZSBQcmludGYuc3ByaW50ZiBcIiUuMTdnXCIgeFxuICAgICAgaW5cbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIHM7XG4gICAgICBpZiBmbG9hdF9uZWVkc19wZXJpb2QgcyB0aGVuXG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIG9iIFwiLjBcIlxuXG4oKiB1c2VkIGJ5IGF0ZGdlbiAqKVxubGV0IHdyaXRlX3N0ZF9mbG9hdF9wcmVjIHNpZ25pZmljYW50X2ZpZ3VyZXMgb2IgeCA9XG4gIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IHggd2l0aFxuICAgIEZQX25hbiAtPlxuICAgICAgQ29tbW9uLmpzb25fZXJyb3IgXCJOYU4gdmFsdWUgbm90IGFsbG93ZWQgaW4gc3RhbmRhcmQgSlNPTlwiXG4gIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgIENvbW1vbi5qc29uX2Vycm9yXG4gICAgICAgIChpZiB4ID4gMC4gdGhlblxuICAgICAgICAgICBcIkluZmluaXR5IHZhbHVlIG5vdCBhbGxvd2VkIGluIHN0YW5kYXJkIEpTT05cIlxuICAgICAgICAgZWxzZVxuICAgICAgICAgICBcIi1JbmZpbml0eSB2YWx1ZSBub3QgYWxsb3dlZCBpbiBzdGFuZGFyZCBKU09OXCIpXG4gIHwgXyAtPlxuICAgICAgd3JpdGVfbm9ybWFsX2Zsb2F0X3ByZWMgc2lnbmlmaWNhbnRfZmlndXJlcyBvYiB4XG5cbmxldCBzdGRfanNvbl9zdHJpbmdfb2ZfZmxvYXQgeCA9XG4gIGxldCBvYiA9IEJ1ZmZlci5jcmVhdGUgMjAgaW5cbiAgd3JpdGVfc3RkX2Zsb2F0IG9iIHg7XG4gIEJ1ZmZlci5jb250ZW50cyBvYlxuXG5cbmxldCB3cml0ZV9pbnRsaXQgPSBCdWZmZXIuYWRkX3N0cmluZ1xubGV0IHdyaXRlX2Zsb2F0bGl0ID0gQnVmZmVyLmFkZF9zdHJpbmdcbmxldCB3cml0ZV9zdHJpbmdsaXQgPSBCdWZmZXIuYWRkX3N0cmluZ1xuXG5sZXQgcmVjIGl0ZXIyX2F1eCBmX2VsdCBmX3NlcCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IHkgOjogbCAtPlxuICAgICAgZl9zZXAgeDtcbiAgICAgIGZfZWx0IHggeTtcbiAgICAgIGl0ZXIyX2F1eCBmX2VsdCBmX3NlcCB4IGxcblxubGV0IGl0ZXIyIGZfZWx0IGZfc2VwIHggPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgeSA6OiBsIC0+XG4gICAgICBmX2VsdCB4IHk7XG4gICAgICBpdGVyMl9hdXggZl9lbHQgZl9zZXAgeCBsXG5cbmxldCBmX3NlcCBvYiA9XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnLCdcblxubGV0IHJlYyB3cml0ZV9qc29uIG9iICh4IDogdCkgPVxuICBtYXRjaCB4IHdpdGhcbiAgICAgIGBOdWxsIC0+IHdyaXRlX251bGwgb2IgKClcbiAgICB8IGBCb29sIGIgLT4gd3JpdGVfYm9vbCBvYiBiXG4gICAgfCBgSW50IGkgLT4gd3JpdGVfaW50IG9iIGlcbiAgICB8IGBJbnRsaXQgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBvYiBzXG4gICAgfCBgRmxvYXQgZiAtPiB3cml0ZV9mbG9hdCBvYiBmXG4gICAgfCBgU3RyaW5nIHMgLT4gd3JpdGVfc3RyaW5nIG9iIHNcbiAgICB8IGBBc3NvYyBsIC0+IHdyaXRlX2Fzc29jIG9iIGxcbiAgICB8IGBMaXN0IGwgLT4gd3JpdGVfbGlzdCBvYiBsXG4gICAgfCBgVHVwbGUgbCAtPiB3cml0ZV90dXBsZSBvYiBsXG4gICAgfCBgVmFyaWFudCAocywgbykgLT4gd3JpdGVfdmFyaWFudCBvYiBzIG9cblxuYW5kIHdyaXRlX2Fzc29jIG9iIGwgPVxuICBsZXQgZl9lbHQgb2IgKHMsIHgpID1cbiAgICB3cml0ZV9zdHJpbmcgb2IgcztcbiAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJzonO1xuICAgIHdyaXRlX2pzb24gb2IgeFxuICBpblxuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ3snO1xuICBpdGVyMiBmX2VsdCBmX3NlcCBvYiBsO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ30nO1xuXG5hbmQgd3JpdGVfbGlzdCBvYiBsID1cbiAgQnVmZmVyLmFkZF9jaGFyIG9iICdbJztcbiAgaXRlcjIgd3JpdGVfanNvbiBmX3NlcCBvYiBsO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ10nXG5cbmFuZCB3cml0ZV90dXBsZSBvYiBsID1cbiAgQnVmZmVyLmFkZF9jaGFyIG9iICcoJztcbiAgaXRlcjIgd3JpdGVfanNvbiBmX3NlcCBvYiBsO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJyknXG5cbmFuZCB3cml0ZV92YXJpYW50IG9iIHMgbyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnPCc7XG4gIHdyaXRlX3N0cmluZyBvYiBzO1xuICAobWF0Y2ggbyB3aXRoXG4gICAgICAgTm9uZSAtPiAoKVxuICAgICB8IFNvbWUgeCAtPlxuICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIG9iICc6JztcbiAgICAgICAgIHdyaXRlX2pzb24gb2IgeFxuICApO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJz4nXG5cbmxldCB3cml0ZV90ID0gd3JpdGVfanNvblxuXG5sZXQgcmVjIHdyaXRlX3N0ZF9qc29uIG9iICh4IDogdCkgPVxuICBtYXRjaCB4IHdpdGhcbiAgICAgIGBOdWxsIC0+IHdyaXRlX251bGwgb2IgKClcbiAgICB8IGBCb29sIGIgLT4gd3JpdGVfYm9vbCBvYiBiXG4gICAgfCBgSW50IGkgLT4gd3JpdGVfaW50IG9iIGlcbiAgICB8IGBJbnRsaXQgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBvYiBzXG4gICAgfCBgRmxvYXQgZiAtPiB3cml0ZV9zdGRfZmxvYXQgb2IgZlxuICAgIHwgYFN0cmluZyBzIC0+IHdyaXRlX3N0cmluZyBvYiBzXG4gICAgfCBgQXNzb2MgbCAtPiB3cml0ZV9zdGRfYXNzb2Mgb2IgbFxuICAgIHwgYExpc3QgbCAtPiB3cml0ZV9zdGRfbGlzdCBvYiBsXG4gICAgfCBgVHVwbGUgbCAtPiB3cml0ZV9zdGRfdHVwbGUgb2IgbFxuICAgIHwgYFZhcmlhbnQgKHMsIG8pIC0+IHdyaXRlX3N0ZF92YXJpYW50IG9iIHMgb1xuXG5hbmQgd3JpdGVfc3RkX2Fzc29jIG9iIGwgPVxuICBsZXQgZl9lbHQgb2IgKHMsIHgpID1cbiAgICB3cml0ZV9zdHJpbmcgb2IgcztcbiAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJzonO1xuICAgIHdyaXRlX3N0ZF9qc29uIG9iIHhcbiAgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIG9iICd7JztcbiAgaXRlcjIgZl9lbHQgZl9zZXAgb2IgbDtcbiAgQnVmZmVyLmFkZF9jaGFyIG9iICd9JztcblxuYW5kIHdyaXRlX3N0ZF9saXN0IG9iIGwgPVxuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ1snO1xuICBpdGVyMiB3cml0ZV9zdGRfanNvbiBmX3NlcCBvYiBsO1xuICBCdWZmZXIuYWRkX2NoYXIgb2IgJ10nXG5cbmFuZCB3cml0ZV9zdGRfdHVwbGUgb2IgbCA9XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnWyc7XG4gIGl0ZXIyIHdyaXRlX3N0ZF9qc29uIGZfc2VwIG9iIGw7XG4gIEJ1ZmZlci5hZGRfY2hhciBvYiAnXSdcblxuYW5kIHdyaXRlX3N0ZF92YXJpYW50IG9iIHMgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICAgICAgTm9uZSAtPiB3cml0ZV9zdHJpbmcgb2Igc1xuICAgIHwgU29tZSB4IC0+XG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBvYiAnWyc7XG4gICAgICAgIHdyaXRlX3N0cmluZyBvYiBzO1xuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJywnO1xuICAgICAgICB3cml0ZV9zdGRfanNvbiBvYiB4O1xuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgb2IgJ10nXG5cblxubGV0IHRvX2J1ZmZlciA/KHN1ZiA9IFwiXCIpID8oc3RkID0gZmFsc2UpIG9iIHggPVxuICBpZiBzdGQgdGhlblxuICAgIHdyaXRlX3N0ZF9qc29uIG9iIHhcbiAgZWxzZVxuICAgIHdyaXRlX2pzb24gb2IgeDtcbiAgQnVmZmVyLmFkZF9zdHJpbmcgb2Igc3VmXG5cbmxldCB0b19zdHJpbmcgP2J1ZiA/KGxlbiA9IDI1NikgPyhzdWYgPSBcIlwiKSA/c3RkIHggPVxuICBsZXQgb2IgPVxuICAgIG1hdGNoIGJ1ZiB3aXRoXG4gICAgICAgIE5vbmUgLT4gQnVmZmVyLmNyZWF0ZSBsZW5cbiAgICAgIHwgU29tZSBvYiAtPlxuICAgICAgICAgIEJ1ZmZlci5jbGVhciBvYjtcbiAgICAgICAgICBvYlxuICBpblxuICB0b19idWZmZXIgfnN1ZiA/c3RkIG9iIHg7XG4gIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIG9iIGluXG4gIEJ1ZmZlci5jbGVhciBvYjtcbiAgc1xuXG5sZXQgdG9fY2hhbm5lbCA/YnVmID8obGVuPTQwOTYpID8oc3VmID0gXCJcIikgP3N0ZCBvYyB4ID1cbiAgbGV0IG9iID1cbiAgICBtYXRjaCBidWYgd2l0aFxuICAgICAgICBOb25lIC0+IEJ1ZmZlci5jcmVhdGUgbGVuXG4gICAgICB8IFNvbWUgb2IgLT4gQnVmZmVyLmNsZWFyIG9iOyBvYlxuICBpblxuICB0b19idWZmZXIgfnN1ZiA/c3RkIG9iIHg7XG4gIEJ1ZmZlci5vdXRwdXRfYnVmZmVyIG9jIG9iO1xuICBCdWZmZXIuY2xlYXIgb2JcblxubGV0IHRvX291dHB1dCA/YnVmID8obGVuPTQwOTYpID8oc3VmID0gXCJcIikgP3N0ZCBvdXQgeCA9XG4gIGxldCBvYiA9XG4gICAgbWF0Y2ggYnVmIHdpdGhcbiAgICAgICAgTm9uZSAtPiBCdWZmZXIuY3JlYXRlIGxlblxuICAgICAgfCBTb21lIG9iIC0+IEJ1ZmZlci5jbGVhciBvYjsgb2JcbiAgaW5cbiAgdG9fYnVmZmVyIH5zdWYgP3N0ZCBvYiB4O1xuICAoKiB0aGlzIHJlcXVpcmVzIGFuIGludCBhbmQgbmV2ZXIgdXNlcyBpdC4gVGhpcyBpcyBkb25lIHRvIHByZXNlcnZlXG4gICAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdG8gbm90IGJyZWFrIHRoZSBzaWduYXR1ciBidXQgY2FuIHNhZmVseVxuICAgICBiZSBjaGFuZ2VkIHRvIHJlcXVpcmUgdW5pdCBpbiBhIGZ1dHVyZSBjb21wYXRpYmlsaXR5LWJyZWFraW5nXG4gICAgIHJlbGVhc2UgKilcbiAgbGV0IF8gOiBpbnQgPSBvdXQjb3V0cHV0IChCdWZmZXIuY29udGVudHMgb2IpIDAgKEJ1ZmZlci5sZW5ndGggb2IpIGluXG4gIEJ1ZmZlci5jbGVhciBvYlxuXG5sZXQgdG9fZmlsZSA/bGVuID9zdGQgPyhzdWYgPSBcIlxcblwiKSBmaWxlIHggPVxuICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gIHRyeVxuICAgIHRvX2NoYW5uZWwgP2xlbiB+c3VmID9zdGQgb2MgeDtcbiAgICBjbG9zZV9vdXQgb2NcbiAgd2l0aCBlIC0+XG4gICAgY2xvc2Vfb3V0X25vZXJyIG9jO1xuICAgIHJhaXNlIGVcblxubGV0IHNlcV90b19idWZmZXIgPyhzdWYgPSBcIlxcblwiKSA/c3RkIG9iIHN0ID1cbiAgU2VxLml0ZXIgKHRvX2J1ZmZlciB+c3VmID9zdGQgb2IpIHN0XG5cbmxldCBzZXFfdG9fc3RyaW5nID9idWYgPyhsZW4gPSAyNTYpID8oc3VmID0gXCJcXG5cIikgP3N0ZCBzdCA9XG4gIGxldCBvYiA9XG4gICAgbWF0Y2ggYnVmIHdpdGhcbiAgICAgICAgTm9uZSAtPiBCdWZmZXIuY3JlYXRlIGxlblxuICAgICAgfCBTb21lIG9iIC0+XG4gICAgICAgICAgQnVmZmVyLmNsZWFyIG9iO1xuICAgICAgICAgIG9iXG4gIGluXG4gIHNlcV90b19idWZmZXIgfnN1ZiA/c3RkIG9iIHN0O1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBvYiBpblxuICBCdWZmZXIuY2xlYXIgb2I7XG4gIHNcblxubGV0IHNlcV90b19jaGFubmVsID9idWYgPyhsZW49MjA5NikgPyhzdWYgPSBcIlxcblwiKSA/c3RkIG9jIHNlcSA9XG4gIGxldCBvYiA9XG4gICAgbWF0Y2ggYnVmIHdpdGhcbiAgICAgICAgTm9uZSAtPiBCdWZmZXIuY3JlYXRlIGxlblxuICAgICAgfCBTb21lIG9iIC0+IEJ1ZmZlci5jbGVhciBvYjsgb2JcbiAgaW5cbiAgU2VxLml0ZXIgKGZ1biBqc29uIC0+XG4gICAgdG9fYnVmZmVyIH5zdWYgP3N0ZCBvYiBqc29uO1xuICAgIEJ1ZmZlci5vdXRwdXRfYnVmZmVyIG9jIG9iO1xuICAgIEJ1ZmZlci5jbGVhciBvYjtcbiAgKSBzZXFcblxubGV0IHNlcV90b19maWxlID9sZW4gPyhzdWYgPSBcIlxcblwiKSA/c3RkIGZpbGUgc3QgPVxuICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gIHRyeVxuICAgIHNlcV90b19jaGFubmVsID9sZW4gfnN1ZiA/c3RkIG9jIHN0O1xuICAgIGNsb3NlX291dCBvY1xuICB3aXRoIGUgLT5cbiAgICBjbG9zZV9vdXRfbm9lcnIgb2M7XG4gICAgcmFpc2UgZVxuXG5cbmxldCByZWMgc29ydCA9IGZ1bmN0aW9uXG4gIHwgYEFzc29jIGwgLT5cbiAgICAgIGxldCBsID0gTGlzdC5yZXYgKExpc3QucmV2X21hcCAoZnVuIChrLCB2KSAtPiAoaywgc29ydCB2KSkgbCkgaW5cbiAgICAgIGBBc3NvYyAoTGlzdC5zdGFibGVfc29ydCAoZnVuIChhLCBfKSAoYiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgYSBiKSBsKVxuICB8IGBMaXN0IGwgLT5cbiAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gIHwgYFR1cGxlIGwgLT5cbiAgICAgIGBUdXBsZSAoTGlzdC5yZXYgKExpc3QucmV2X21hcCBzb3J0IGwpKVxuICB8IGBWYXJpYW50IChrLCBTb21lIHYpIGFzIHggLT5cbiAgICAgIGxldCB2JyA9IHNvcnQgdiBpblxuICAgICAgaWYgdiA9PSB2JyB0aGVuIHhcbiAgICAgIGVsc2VcbiAgICAgICAgYFZhcmlhbnQgKGssIFNvbWUgdicpXG4gIHwgeCAtPiB4XG5cbm1vZHVsZSBQcmV0dHkgPSBzdHJ1Y3RcbigqXG4gICBQcmV0dHktcHJpbnQgSlNPTiBkYXRhIGluIGFuIGF0dGVtcHQgdG8gbWF4aW1pemUgcmVhZGFiaWxpdHkuXG5cbiAgIDEuIFdoYXQgZml0cyBvbiBvbmUgbGluZSBzdGF5cyBvbiBvbmUgbGluZS5cbiAgIDIuIFdoYXQgZG9lc24ndCBmaXQgb24gb25lIGxpbmUgZ2V0cyBwcmludGVkIG1vcmUgdmVydGljYWxseSBzbyBhcyB0byBub3RcbiAgICAgIGV4Y2VlZCBhIHJlYXNvbmFibGUgcGFnZSB3aWR0aCwgaWYgcG9zc2libGUuXG5cbiAgIEFycmF5cyBjb250YWluaW5nIG9ubHkgc2ltcGxlIGVsZW1lbnRzIChcImF0b21zXCIpIGFyZSBwcmV0dHktcHJpbnRlZCB3aXRoXG4gICBlbmQtb2YtbGluZSB3cmFwcGluZyBsaWtlIG9yZGluYXJ5IHRleHQ6XG5cbiAgICAgW1xuICAgICAgICBcImhlbGxvXCIsIFwiaGVsbG9cIiwgXCJoZWxsb1wiLCBcImhlbGxvXCIsIFwiaGVsbG9cIiwgXCJoZWxsb1wiLCBcImhlbGxvXCIsIFwiaGVsbG9cIixcbiAgICAgICAgXCJoZWxsb1wiLCBcImhlbGxvXCIsIFwiaGVsbG9cIiwgXCJoZWxsb1wiLCBcImhlbGxvXCIsIFwiaGVsbG9cIiwgXCJoZWxsb1wiLCBcImhlbGxvXCJcbiAgICAgXVxuXG4gICBPdGhlciBhcnJheXMgYXJlIHByaW50ZWQgZWl0aGVyIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5IGRlcGVuZGluZ1xuICAgb24gd2hldGhlciB0aGV5IGZpdCBvbiBhIHNpbmdsZSBsaW5lOlxuXG4gICAgIFsgeyBcImhlbGxvXCI6IFwid29ybGRcIiB9LCB7IFwiaGVsbG9cIjogXCJ3b3JsZFwiIH0sIHsgXCJoZWxsb1wiOiBcIndvcmxkXCIgfSBdXG5cbiAgIG9yXG5cbiAgICAgW1xuICAgICAgIHsgXCJoZWxsb1wiOiBcIndvcmxkXCIgfSxcbiAgICAgICB7IFwiaGVsbG9cIjogXCJ3b3JsZFwiIH0sXG4gICAgICAgeyBcImhlbGxvXCI6IFwid29ybGRcIiB9LFxuICAgICAgIHsgXCJoZWxsb1wiOiBcIndvcmxkXCIgfVxuICAgICBdXG4qKVxuXG5sZXQgcHBfbGlzdCBzZXAgcHB4IG91dCBsID1cbiAgbGV0IHBwX3NlcCBvdXQgKCkgPSBGb3JtYXQuZnByaW50ZiBvdXQgXCIlc0AgXCIgc2VwIGluXG4gIEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXAgcHB4IG91dCBsXG5cbmxldCBpc19hdG9tICh4OiBbPiB0XSkgPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBgTnVsbFxuICB8IGBCb29sIF9cbiAgfCBgSW50IF9cbiAgfCBgRmxvYXQgX1xuICB8IGBTdHJpbmcgX1xuICB8IGBJbnRsaXQgX1xuICB8IGBGbG9hdGxpdCBfXG4gIHwgYFN0cmluZ2xpdCBfXG4gIHwgYExpc3QgW11cbiAgfCBgQXNzb2MgW11cbiAgfCBgVHVwbGUgW11cbiAgfCBgVmFyaWFudCAoXywgTm9uZSkgLT4gdHJ1ZVxuICB8IGBMaXN0IF9cbiAgfCBgQXNzb2MgX1xuICB8IGBUdXBsZSBfXG4gIHwgYFZhcmlhbnQgKF8sIFNvbWUgXykgLT4gZmFsc2VcblxubGV0IGlzX2F0b21fbGlzdCBsID1cbiAgTGlzdC5mb3JfYWxsIGlzX2F0b20gbFxuXG4oKlxuICAgaW5zaWRlX2JveDogaW5kaWNhdGVzIHRoYXQgd2UncmUgYWxyZWFkeSB3aXRoaW4gYSBib3ggdGhhdCBpbXBvc2VzXG4gICBhIGNlcnRhaW4gc3R5bGUgYW5kIHdlIHNob3VsZG4ndCBjcmVhdGUgYSBuZXcgb25lLiBUaGlzIGlzIHVzZWQgZm9yXG4gICBwcmludGluZyBmaWVsZCB2YWx1ZXMgbGlrZSB0aGlzOlxuXG4gICAgIGZvbzogW1xuICAgICAgIGJhclxuICAgICBdXG5cbiAgIHJhdGhlciB0aGFuIHNvbWV0aGluZyBlbHNlIGxpa2VcblxuICAgICBmb286XG4gICAgICAgW1xuICAgICAgICAgYmFyXG4gICAgICAgXVxuKilcbmxldCByZWMgZm9ybWF0IH5pbnNpZGVfYm94IHN0ZCAob3V0OkZvcm1hdC5mb3JtYXR0ZXIpICh4OnQpIDogdW5pdCA9XG4gIG1hdGNoIHggd2l0aFxuICAgIHwgYE51bGwgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJudWxsXCJcbiAgICB8IGBCb29sIHggLT4gRm9ybWF0LnBwX3ByaW50X2Jvb2wgb3V0IHhcbiAgICB8IGBJbnQgeCAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoanNvbl9zdHJpbmdfb2ZfaW50IHgpXG4gICAgfCBgRmxvYXQgeCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgc3RkIHRoZW4gc3RkX2pzb25fc3RyaW5nX29mX2Zsb2F0IHhcbiAgICAgICAgICBlbHNlIGpzb25fc3RyaW5nX29mX2Zsb2F0IHhcbiAgICAgICAgaW5cbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgIHwgYFN0cmluZyBzIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChqc29uX3N0cmluZ19vZl9zdHJpbmcgcylcbiAgICB8IGBJbnRsaXQgcyAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBzXG4gICAgfCBgTGlzdCBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIltdXCJcbiAgICB8IGBMaXN0IGwgLT5cbiAgICAgIGlmIG5vdCBpbnNpZGVfYm94IHRoZW4gRm9ybWF0LmZwcmludGYgb3V0IFwiQFs8aHYyPlwiO1xuICAgICAgaWYgaXNfYXRvbV9saXN0IGwgdGhlblxuICAgICAgICAoKiB1c2UgbGluZSB3cmFwcGluZyBsaWtlIHdlIHdvdWxkIGRvIGZvciBhIHBhcmFncmFwaCBvZiB0ZXh0ICopXG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIltAOzwxIDA+QFs8aG92PiVhQF1AOzwxIC0yPl1cIlxuICAgICAgICAgIChwcF9saXN0IFwiLFwiIChmb3JtYXQgfmluc2lkZV9ib3g6ZmFsc2Ugc3RkKSkgbFxuICAgICAgZWxzZVxuICAgICAgICAoKiBwcmludCB0aGUgZWxlbWVudHMgaG9yaXpvbnRhbGx5IGlmIHRoZXkgZml0IG9uIHRoZSBsaW5lLFxuICAgICAgICAgICBvdGhlcndpc2UgcHJpbnQgdGhlbSBpbiBhIGNvbHVtbiAqKVxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJbQDs8MSAwPkBbPGh2PiVhQF1AOzwxIC0yPl1cIlxuICAgICAgICAgIChwcF9saXN0IFwiLFwiIChmb3JtYXQgfmluc2lkZV9ib3g6ZmFsc2Ugc3RkKSkgbDtcbiAgICAgIGlmIG5vdCBpbnNpZGVfYm94IHRoZW4gRm9ybWF0LmZwcmludGYgb3V0IFwiQF1cIjtcbiAgICB8IGBBc3NvYyBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcInt9XCJcbiAgICB8IGBBc3NvYyBsIC0+XG4gICAgICBpZiBub3QgaW5zaWRlX2JveCB0aGVuIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbPGh2Mj5cIjtcbiAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIntAOzwxIDA+JWFAOzwxIC0yPn1cIiAocHBfbGlzdCBcIixcIiAoZm9ybWF0X2ZpZWxkIHN0ZCkpIGw7XG4gICAgICBpZiBub3QgaW5zaWRlX2JveCB0aGVuIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBdXCI7XG4gICAgfCBgVHVwbGUgbCAtPlxuICAgICAgICBpZiBzdGQgdGhlblxuICAgICAgICAgIGZvcm1hdCB+aW5zaWRlX2JveCBzdGQgb3V0IChgTGlzdCBsKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgaWYgbCA9IFtdIHRoZW5cbiAgICAgICAgICAgIEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiKClcIlxuICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgaWYgbm90IGluc2lkZV9ib3ggdGhlbiBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxob3YyPlwiO1xuICAgICAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiKEAsJWFAOzwwIC0yPilcIiAocHBfbGlzdCBcIixcIiAoZm9ybWF0IH5pbnNpZGVfYm94OmZhbHNlIHN0ZCkpIGw7XG4gICAgICAgICAgICBpZiBub3QgaW5zaWRlX2JveCB0aGVuIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBdXCI7XG4gICAgICAgICAgKVxuICAgIHwgYFZhcmlhbnQgKHMsIE5vbmUpIC0+XG4gICAgICAgIGlmIHN0ZCB0aGVuXG4gICAgICAgICAgbGV0IHJlcHJlc2VudGF0aW9uID0gYFN0cmluZyBzIGluXG4gICAgICAgICAgZm9ybWF0IH5pbnNpZGVfYm94IHN0ZCBvdXQgcmVwcmVzZW50YXRpb25cbiAgICAgICAgZWxzZVxuICAgICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIjwlcz5cIiAoanNvbl9zdHJpbmdfb2Zfc3RyaW5nIHMpXG5cbiAgICB8IGBWYXJpYW50IChzLCBTb21lIHgpIC0+XG4gICAgICAgIGlmIHN0ZCB0aGVuXG4gICAgICAgICAgbGV0IHJlcHJlc2VudGF0aW9uID0gYFN0cmluZyBzIGluXG4gICAgICAgICAgZm9ybWF0IH5pbnNpZGVfYm94IHN0ZCBvdXQgKGBMaXN0IFsgcmVwcmVzZW50YXRpb247IHggXSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxldCBvcCA9IGpzb25fc3RyaW5nX29mX3N0cmluZyBzIGluXG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPEBbPGh2Mj4lczogJWFAXT5cIiBvcCAoZm9ybWF0IH5pbnNpZGVfYm94OnRydWUgc3RkKSB4XG5cbmFuZCBmb3JtYXRfZmllbGQgc3RkIG91dCAobmFtZSwgeCkgPVxuICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JXM6ICVhQF1cIiAoanNvbl9zdHJpbmdfb2Zfc3RyaW5nIG5hbWUpIChmb3JtYXQgfmluc2lkZV9ib3g6dHJ1ZSBzdGQpIHhcblxubGV0IHBwID8oc3RkID0gZmFsc2UpIG91dCB4ID1cbiAgRm9ybWF0LmZwcmludGYgb3V0IFwiQFs8aHYyPiVhQF1cIiAoZm9ybWF0IH5pbnNpZGVfYm94OnRydWUgc3RkKSAoeCA6PiB0KVxuXG5sZXQgdG9fc3RyaW5nID9zdGQgeCA9XG4gIEZvcm1hdC5hc3ByaW50ZiBcIiVhXCIgKHBwID9zdGQpIHhcblxubGV0IHRvX2NoYW5uZWwgP3N0ZCBvYyB4ID1cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgaW5cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWFAP1wiIChwcCA/c3RkKSB4XG5lbmRcblxubGV0IHJlYyBwcCBmbXQgPVxuICBmdW5jdGlvblxuICB8IGBOdWxsIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IFwiYE51bGxcIlxuICB8IGBCb29sIHggLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgQm9vbCAoQFs8aG92PlwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVCXCIgeDtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJAXSlcIlxuICB8IGBJbnQgeCAtPlxuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcImBJbnQgKEBbPGhvdj5cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlZFwiIHg7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQF0pXCJcbiAgfCBgSW50bGl0IHggLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgSW50bGl0IChAWzxob3Y+XCI7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiJVNcIiB4O1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiXG4gIHwgYEZsb2F0IHggLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgRmxvYXQgKEBbPGhvdj5cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlRlwiIHg7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQF0pXCJcbiAgfCBgU3RyaW5nIHggLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgU3RyaW5nIChAWzxob3Y+XCI7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiJVNcIiB4O1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiXG4gIHwgYEFzc29jIHhzIC0+XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiYEFzc29jIChAWzxob3Y+XCI7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQFs8Mj5bXCI7XG4gICAgaWdub3JlIChMaXN0LmZvbGRfbGVmdFxuICAgICAgKGZ1biBzZXAgKGtleSwgdmFsdWUpIC0+XG4gICAgICAgIGlmIHNlcCB0aGVuXG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgZm10IFwiO0AgXCI7XG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgZm10IFwiKEBbXCI7XG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgZm10IFwiJVNcIiBrZXk7XG4gICAgICAgICAgRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCI7XG4gICAgICAgICAgcHAgZm10IHZhbHVlO1xuICAgICAgICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiO1xuICAgICAgICAgIHRydWUpIGZhbHNlIHhzKTtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJALF1AXVwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiXG4gIHwgYExpc3QgeHMgLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgTGlzdCAoQFs8aG92PlwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbPDI+W1wiO1xuICAgIGlnbm9yZSAoTGlzdC5mb2xkX2xlZnRcbiAgICAgIChmdW4gc2VwIHggLT5cbiAgICAgICAgaWYgc2VwIHRoZW5cbiAgICAgICAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCI7QCBcIjtcbiAgICAgICAgICBwcCBmbXQgeDtcbiAgICAgICAgICB0cnVlKSBmYWxzZSB4cyk7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQCxdQF1cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJAXSlcIlxuICB8IGBUdXBsZSB0dXAgLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgVHVwbGUgKEBbPGhvdj5cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJAWzwyPltcIjtcbiAgICBpZ25vcmUgKExpc3QuZm9sZF9sZWZ0XG4gICAgICAoZnVuIHNlcCBlIC0+XG4gICAgICAgICBpZiBzZXAgdGhlblxuICAgICAgICAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCI7QCBcIjtcbiAgICAgICAgICAgcHAgZm10IGU7XG4gICAgICAgICAgIHRydWUpIGZhbHNlIHR1cCk7XG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiQCxdQF1cIjtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJAXSlcIlxuICB8IGBWYXJpYW50IChuYW1lLCB2YWx1ZSkgLT5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCJgVmFyaWFudCAoQFs8aG92PlwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIihAW1wiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVTXCIgbmFtZTtcbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIjtcbiAgICAobWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBOb25lIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IFwiTm9uZVwiXG4gICAgICB8IFNvbWUgeCAtPlxuICAgICAgICBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCBcIihTb21lIFwiO1xuICAgICAgICBwcCBmbXQgeDtcbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBmbXQgXCIpXCIpO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiO1xuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBdKVwiXG5cbmxldCBzaG93IHggPVxuICBGb3JtYXQuYXNwcmludGYgXCIlYVwiIHBwIHhcblxubGV0IHJlYyBlcXVhbCBhIGIgPVxuICBtYXRjaCBhLCBiIHdpdGhcbiAgfCBgTnVsbCwgYE51bGwgLT4gdHJ1ZVxuICB8IGBCb29sIGEsIGBCb29sIGIgLT4gYSA9IGJcbiAgfCBgSW50IGEsIGBJbnQgYiAtPiBhID0gYlxuICAgIHwgYEludGxpdCBhLCBgSW50bGl0IGIgLT4gYSA9IGJcbiAgICB8IGBGbG9hdCBhLCBgRmxvYXQgYiAtPiBhID0gYlxuICAgIHwgYFN0cmluZyBhLCBgU3RyaW5nIGIgLT4gYSA9IGJcbiAgICB8IGBBc3NvYyB4cywgYEFzc29jIHlzIC0+XG4gICAgICBsZXQgY29tcGFyZV9rZXlzID0gZnVuIChrZXksIF8pIChrZXknLCBfKSAtPiBTdHJpbmcuY29tcGFyZSBrZXkga2V5JyBpblxuICAgICAgbGV0IHhzID0gTGlzdC5zdGFibGVfc29ydCBjb21wYXJlX2tleXMgeHMgaW5cbiAgICAgIGxldCB5cyA9IExpc3Quc3RhYmxlX3NvcnQgY29tcGFyZV9rZXlzIHlzIGluXG4gICAgICAobWF0Y2ggTGlzdC5mb3JfYWxsMiAoZnVuIChrZXksIHZhbHVlKSAoa2V5JywgdmFsdWUnKSAtPlxuICAgICAgICBtYXRjaCBrZXkgPSBrZXknIHdpdGhcbiAgICAgICAgfCBmYWxzZSAtPiBmYWxzZVxuICAgICAgICB8IHRydWUgLT4gZXF1YWwgdmFsdWUgdmFsdWUnKSB4cyB5cyB3aXRoXG4gICAgICB8IHJlc3VsdCAtPiByZXN1bHRcbiAgICAgIHwgZXhjZXB0aW9uIEludmFsaWRfYXJndW1lbnQgXyAtPlxuICAgICAgICAoKiB0aGUgbGlzdHMgd2VyZSBvZiBkaWZmZXJlbnQgbGVuZ3RocywgdGh1cyB1bmVxdWFsICopXG4gICAgICAgIGZhbHNlKVxuICAgIHwgYFR1cGxlIHhzLCBgVHVwbGUgeXNcbiAgICB8IGBMaXN0IHhzLCBgTGlzdCB5cyAtPlxuICAgICAgKG1hdGNoIExpc3QuZm9yX2FsbDIgZXF1YWwgeHMgeXMgd2l0aFxuICAgICAgfCByZXN1bHQgLT4gcmVzdWx0XG4gICAgICB8IGV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50IF8gLT5cbiAgICAgICAgKCogdGhlIGxpc3RzIHdlcmUgb2YgZGlmZmVyZW50IGxlbmd0aHMsIHRodXMgdW5lcXVhbCAqKVxuICAgICAgICBmYWxzZSlcbiAgICB8IGBWYXJpYW50IChuYW1lLCB2YWx1ZSksIGBWYXJpYW50IChuYW1lJywgdmFsdWUnKSAtPlxuICAgICAgKG1hdGNoIG5hbWUgPSBuYW1lJyB3aXRoXG4gICAgICB8IGZhbHNlIC0+IGZhbHNlXG4gICAgICB8IHRydWUgLT5cbiAgICAgICAgbWF0Y2ggdmFsdWUsIHZhbHVlJyB3aXRoXG4gICAgICAgIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gICAgICAgIHwgU29tZSB4LCBTb21lIHkgLT4gZXF1YWwgeCB5XG4gICAgICAgIHwgXyAtPiBmYWxzZSlcbiAgICB8IF8gLT4gZmFsc2VcblxubGV0IHByZXR0eV9wcmludCA/c3RkIG91dCB4ID0gUHJldHR5LnBwID9zdGQgb3V0IHhcbmxldCBwcmV0dHlfdG9fc3RyaW5nID9zdGQgeCA9IFByZXR0eS50b19zdHJpbmcgP3N0ZCB4XG5sZXQgcHJldHR5X3RvX2NoYW5uZWwgP3N0ZCBvYyB4ID0gUHJldHR5LnRvX2NoYW5uZWwgP3N0ZCBvYyB4XG5cbiMgMSBcImxpYi9yZWFkLm1sbFwiXG4gXG4gIG1vZHVsZSBMZXhpbmcgPVxuICAgICgqXG4gICAgICBXZSBvdmVycmlkZSBMZXhpbmcuZW5naW5lIGluIG9yZGVyIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IHBvc2l0aW9uXG4gICAgICByZWNvcmQgZWFjaCB0aW1lIGEgcnVsZSBpcyBtYXRjaGVkLlxuICAgICAgVGhpcyByZWR1Y2VzIHRvdGFsIHBhcnNpbmcgdGltZSBieSBhYm91dCAzMSUuXG4gICAgKilcbiAgc3RydWN0XG4gICAgaW5jbHVkZSBMZXhpbmdcblxuICAgIGV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcblxuICAgIGxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gICAgICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICAgICAgKCpcbiAgICAgIGlmIHJlc3VsdCA+PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgICAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgICAgIGVuZDtcbiAgICAgICopXG4gICAgICByZXN1bHRcbiAgZW5kXG5cbiAgKCogc2VlIGRlc2NyaXB0aW9uIGluIGNvbW1vbi5tbGkgKilcbiAgdHlwZSBsZXhlcl9zdGF0ZSA9IENvbW1vbi5MZXhlcl9zdGF0ZS50ID0ge1xuICAgIGJ1ZiA6IEJ1ZmZlci50O1xuICAgIG11dGFibGUgbG51bSA6IGludDtcbiAgICBtdXRhYmxlIGJvbCA6IGludDtcbiAgICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjtcbiAgfVxuXG4gIGxldCBkZWMgYyA9XG4gICAgQ2hhci5jb2RlIGMgLSA0OFxuXG4gIGxldCBoZXggYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgICAgICcwJy4uJzknIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcbiAgICAgIHwgJ2EnLi4nZicgLT4gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdhJyArIDEwXG4gICAgICB8ICdBJy4uJ0YnIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnQScgKyAxMFxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIGxldCBjdXN0b21fZXJyb3IgZGVzY3IgdiAobGV4YnVmIDogTGV4aW5nLmxleGJ1ZikgPVxuICAgIGxldCBvZmZzID0gbGV4YnVmLmxleF9hYnNfcG9zIC0gMSBpblxuICAgIGxldCBib2wgPSB2LmJvbCBpblxuICAgIGxldCBwb3MxID0gb2ZmcyArIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIC0gYm9sIC0gMSBpblxuICAgIGxldCBwb3MyID0gbWF4IHBvczEgKG9mZnMgKyBsZXhidWYubGV4X2N1cnJfcG9zIC0gYm9sKSBpblxuICAgIGxldCBmaWxlX2xpbmUgPVxuICAgICAgbWF0Y2ggdi5mbmFtZSB3aXRoXG4gICAgICAgICAgTm9uZSAtPiBcIkxpbmVcIlxuICAgICAgICB8IFNvbWUgcyAtPlxuICAgICAgICAgICAgUHJpbnRmLnNwcmludGYgXCJGaWxlICVzLCBsaW5lXCIgc1xuICAgIGluXG4gICAgbGV0IGJ5dGVzID1cbiAgICAgIGlmIHBvczEgPSBwb3MyIHRoZW5cbiAgICAgICAgUHJpbnRmLnNwcmludGYgXCJieXRlICVpXCIgKHBvczErMSlcbiAgICAgIGVsc2VcbiAgICAgICAgUHJpbnRmLnNwcmludGYgXCJieXRlcyAlaS0laVwiIChwb3MxKzEpIChwb3MyKzEpXG4gICAgaW5cbiAgICBsZXQgbXNnID0gUHJpbnRmLnNwcmludGYgXCIlcyAlaSwgJXM6XFxuJXNcIiBmaWxlX2xpbmUgdi5sbnVtIGJ5dGVzIGRlc2NyIGluXG4gICAgQ29tbW9uLmpzb25fZXJyb3IgbXNnXG5cblxuICBsZXQgbGV4ZXJfZXJyb3IgZGVzY3IgdiBsZXhidWYgPVxuICAgIGN1c3RvbV9lcnJvclxuICAgICAgKFByaW50Zi5zcHJpbnRmIFwiJXMgJyVzJ1wiIGRlc2NyIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikpXG4gICAgICB2IGxleGJ1ZlxuXG4gIGxldCBsb25nX2Vycm9yIGRlc2NyIHYgbGV4YnVmID1cbiAgICBsZXQganVuayA9IExleGluZy5sZXhlbWUgbGV4YnVmIGluXG4gICAgbGV0IGJ1Zl9zaXplID0gMzIgaW5cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSBidWZfc2l6ZSBpblxuICAgIGxldCAoKSA9IExleGVyX3V0aWxzLnJlYWRfanVua193aXRob3V0X3Bvc2l0aW9ucyBidWYgYnVmX3NpemUgbGV4YnVmIGluXG4gICAgbGV0IGV4dHJhX2p1bmsgPSBCdWZmZXIuY29udGVudHMgYnVmIGluXG4gICAgY3VzdG9tX2Vycm9yXG4gICAgICAoUHJpbnRmLnNwcmludGYgXCIlcyAnJXMlcydcIiBkZXNjciBqdW5rIGV4dHJhX2p1bmspXG4gICAgICB2IGxleGJ1ZlxuXG4gIGxldCBtaW4xMCA9IG1pbl9pbnQgLyAxMCAtIChpZiBtaW5faW50IG1vZCAxMCA9IDAgdGhlbiAwIGVsc2UgMSlcbiAgbGV0IG1heDEwID0gbWF4X2ludCAvIDEwICsgKGlmIG1heF9pbnQgbW9kIDEwID0gMCB0aGVuIDAgZWxzZSAxKVxuXG4gIGV4Y2VwdGlvbiBJbnRfb3ZlcmZsb3dcblxuICBsZXQgZXh0cmFjdF9wb3NpdGl2ZV9pbnQgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpID1cbiAgICBsZXQgc3RhcnQgPSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIGxldCBzdG9wID0gbGV4YnVmLmxleF9jdXJyX3BvcyBpblxuICAgIGxldCBzID0gbGV4YnVmLmxleF9idWZmZXIgaW5cbiAgICBsZXQgbiA9IHJlZiAwIGluXG4gICAgZm9yIGkgPSBzdGFydCB0byBzdG9wIC0gMSBkb1xuICAgICAgaWYgIW4gPj0gbWF4MTAgdGhlblxuICAgICAgICByYWlzZSBJbnRfb3ZlcmZsb3dcbiAgICAgIGVsc2VcbiAgICAgICAgbiA6PSAxMCAqICFuICsgZGVjIChCeXRlcy5nZXQgcyBpKVxuICAgIGRvbmU7XG4gICAgaWYgIW4gPCAwIHRoZW5cbiAgICAgIHJhaXNlIEludF9vdmVyZmxvd1xuICAgIGVsc2VcbiAgICAgICFuXG5cbiAgbGV0IG1ha2VfcG9zaXRpdmVfaW50IHYgbGV4YnVmID1cbiAgICAgIHRyeSBgSW50IChleHRyYWN0X3Bvc2l0aXZlX2ludCBsZXhidWYpXG4gICAgICB3aXRoIEludF9vdmVyZmxvdyAtPlxuICAgICAgICBgSW50bGl0IChMZXhpbmcubGV4ZW1lIGxleGJ1ZilcblxuICBsZXQgZXh0cmFjdF9uZWdhdGl2ZV9pbnQgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpICA9XG4gICAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyAxIGluXG4gICAgbGV0IHN0b3AgPSBsZXhidWYubGV4X2N1cnJfcG9zIGluXG4gICAgbGV0IHMgPSBsZXhidWYubGV4X2J1ZmZlciBpblxuICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICBmb3IgaSA9IHN0YXJ0IHRvIHN0b3AgLSAxIGRvXG4gICAgICBpZiAhbiA8PSBtaW4xMCB0aGVuXG4gICAgICAgIHJhaXNlIEludF9vdmVyZmxvd1xuICAgICAgZWxzZVxuICAgICAgICBuIDo9IDEwICogIW4gLSBkZWMgKEJ5dGVzLmdldCBzIGkpXG4gICAgZG9uZTtcbiAgICBpZiAhbiA+IDAgdGhlblxuICAgICAgcmFpc2UgSW50X292ZXJmbG93XG4gICAgZWxzZVxuICAgICAgIW5cblxuICBsZXQgbWFrZV9uZWdhdGl2ZV9pbnQgdiBsZXhidWYgPVxuICAgICAgdHJ5IGBJbnQgKGV4dHJhY3RfbmVnYXRpdmVfaW50IGxleGJ1ZilcbiAgICAgIHdpdGggSW50X292ZXJmbG93IC0+XG4gICAgICAgIGBJbnRsaXQgKExleGluZy5sZXhlbWUgbGV4YnVmKVxuXG4gIGxldCBuZXdsaW5lIHYgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpID1cbiAgICB2LmxudW0gPC0gdi5sbnVtICsgMTtcbiAgICB2LmJvbCA8LSBsZXhidWYubGV4X2Fic19wb3MgKyBsZXhidWYubGV4X2N1cnJfcG9zXG5cbiAgbGV0IGFkZF9sZXhlbWUgYnVmIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gICAgbGV0IGxlbiA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIEJ1ZmZlci5hZGRfc3ViYnl0ZXMgYnVmIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGxlblxuXG4gIGxldCBtYXBfbGV4ZW1lIGYgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpID1cbiAgICBsZXQgbGVuID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gICAgZiAoQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3BvcyBsZW4pIDAgbGVuXG5cbiAgdHlwZSB2YXJpYW50X2tpbmQgPSBbIGBFZGd5X2JyYWNrZXQgfCBgU3F1YXJlX2JyYWNrZXQgfCBgRG91YmxlX3F1b3RlIF1cblxuIyAxNTQgXCJsaWIvcmVhZC5tbFwiXG5sZXQgX19vY2FtbF9sZXhfdGFibGVzID0ge1xuICBMZXhpbmcubGV4X2Jhc2UgPVxuICAgXCJcXDAwMFxcMDAwXFwyMzZcXDI1NVxcMjM3XFwyNTVcXDAwM1xcMDAwXFwyMzlcXDI1NVxcMDE2XFwwMDBcXDI0MlxcMjU1XFwyNDNcXDI1NVxcXG4gICAgXFwyNDRcXDI1NVxcMjQ1XFwyNTVcXDAwMFxcMDAwXFwwMzFcXDAwMFxcMjQ5XFwyNTVcXDA4NVxcMDAwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwM1xcMDAwXFwyNTRcXDI1NVxcMDAxXFwwMDBcXDAwNFxcMDAwXFwyNTNcXDI1NVxcMDExXFwwMDBcXDI1MlxcMjU1XFwwMDNcXDAwMFxcXG4gICAgXFwwMDFcXDAwMFxcMDAzXFwwMDBcXDAwMlxcMDAwXFwwMDNcXDAwMFxcMDAwXFwwMDBcXDI1MVxcMjU1XFwwMjFcXDAwMFxcMDk3XFwwMDBcXFxuICAgIFxcMDEwXFwwMDBcXDAyMlxcMDAwXFwwMjBcXDAwMFxcMDE2XFwwMDBcXDAyMlxcMDAwXFwwMTJcXDAwMFxcMDA4XFwwMDBcXDI1MFxcMjU1XFxcbiAgICBcXDExOVxcMDAwXFwxMjlcXDAwMFxcMTM5XFwwMDBcXDE2MVxcMDAwXFwxNzFcXDAwMFxcMTgxXFwwMDBcXDE5M1xcMDAwXFwyMDlcXDAwMFxcXG4gICAgXFwyNDBcXDI1NVxcMDExXFwwMDBcXDAzOFxcMDAwXFwyNTJcXDI1NVxcMDY1XFwwMDBcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMTEwXFwwMDBcXFxuICAgIFxcMjUyXFwyNTVcXDE2M1xcMDAwXFwyNTRcXDI1NVxcMjU1XFwyNTVcXDIzNFxcMDAwXFwyNDdcXDI1NVxcMjQ4XFwyNTVcXDA0OFxcMDAxXFxcbiAgICBcXDI1MFxcMjU1XFwyNTFcXDI1NVxcMjUyXFwyNTVcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDA3MVxcMDAxXFwxMjZcXDAwMVxcXG4gICAgXFwxNDlcXDAwMVxcMjQ5XFwyNTVcXDAzOVxcMDAwXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDAzOFxcMDAwXFwxODdcXDAwMVxcMjEwXFwwMDFcXFxuICAgIFxcMjQ4XFwwMDFcXDAxNVxcMDAyXFwyNTVcXDI1NVxcMjIwXFwwMDBcXDI1M1xcMjU1XFwyNTVcXDI1NVxcMjQ1XFwwMDBcXDAzOVxcMDAyXFxcbiAgICBcXDEwOVxcMDAyXFwwMTRcXDAwMVxcMDg4XFwwMDJcXDE2NFxcMDAyXFwxODdcXDAwMlxcMjI1XFwwMDJcXDAxM1xcMDAwXFwyNTJcXDI1NVxcXG4gICAgXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDI1NVxcMjU1XFwwMTRcXDAwMFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDMwXFwwMDBcXFxuICAgIFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDE1XFwwMDBcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDAxN1xcMDAxXFxcbiAgICBcXDI1MVxcMjU1XFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDE5XFwwMDBcXDI1MlxcMjU1XFwyNTNcXDI1NVxcXG4gICAgXFwyNTRcXDI1NVxcMDE1XFwwMDBcXDI1NVxcMjU1XFwwMTZcXDAwMFxcMjU1XFwyNTVcXDAwOFxcMDAxXFwwMDVcXDAwMFxcMjUzXFwyNTVcXFxuICAgIFxcMDIzXFwwMDBcXDI1NFxcMjU1XFwwMjBcXDAwMFxcMjU1XFwyNTVcXDA0NlxcMDAwXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDA0MlxcMDAwXFxcbiAgICBcXDA1MlxcMDAwXFwwNTNcXDAwMFxcMjU1XFwyNTVcXDA1M1xcMDAwXFwwNDhcXDAwMFxcMDkxXFwwMDBcXDA5MlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwMjdcXDAwMVxcMjUwXFwyNTVcXDI1MVxcMjU1XFwxMzdcXDAwMFxcMTA0XFwwMDBcXDA4OVxcMDAwXFwwODhcXDAwMFxcMTA2XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDE0M1xcMDAwXFwxMzdcXDAwMFxcMTc3XFwwMDBcXDI1NFxcMjU1XFwxODNcXDAwMFxcMTY4XFwwMDBcXDE2NlxcMDAwXFxcbiAgICBcXDE4M1xcMDAwXFwwMDJcXDAwMFxcMjUzXFwyNTVcXDE3N1xcMDAwXFwxNzJcXDAwMFxcMTg3XFwwMDBcXDAwNFxcMDAwXFwyNTJcXDI1NVxcXG4gICAgXFwwNTNcXDAwMlxcMjUxXFwyNTVcXDI1MlxcMjU1XFwyNTNcXDI1NVxcMTAzXFwwMDFcXDI1NVxcMjU1XFwyNDhcXDAwMlxcMjU0XFwyNTVcXFxuICAgIFxcMDA2XFwwMDNcXDAzMFxcMDAzXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDQwXFwwMDNcXDA1MFxcMDAzXFxcbiAgICBcXDA3NFxcMDAzXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDYxXFwwMDNcXDA4NFxcMDAzXFwxMDhcXDAwM1xcXG4gICAgXFwyNDlcXDI1NVxcMjUwXFwyNTVcXDI1MVxcMjU1XFwyNDRcXDAwMFxcMTIwXFwwMDNcXDE0MlxcMDAzXFwxNzlcXDAwMFxcMTk0XFwwMDBcXFxuICAgIFxcMDE1XFwwMDBcXDI1NVxcMjU1XFwxOTBcXDAwMFxcMTg4XFwwMDBcXDE4N1xcMDAwXFwxOTNcXDAwMFxcMTgzXFwwMDBcXDE3OVxcMDAwXFxcbiAgICBcXDI1NFxcMjU1XFwxOTFcXDAwMFxcMjAxXFwwMDBcXDIwMFxcMDAwXFwxOTZcXDAwMFxcMjAzXFwwMDBcXDE5M1xcMDAwXFwxODlcXDAwMFxcXG4gICAgXFwyNTNcXDI1NVxcMTU3XFwwMDNcXDA5NVxcMDAzXFwxNzRcXDAwM1xcMTk2XFwwMDNcXDIwNlxcMDAzXFwyMTZcXDAwM1xcMjI4XFwwMDNcXFxuICAgIFxcMjM5XFwwMDNcXDA2MFxcMDAwXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDI1NVxcMjU1XFwwMTJcXDAwNFxcMjUyXFwyNTVcXDI1M1xcMjU1XFxcbiAgICBcXDA4N1xcMDA0XFwyNTVcXDI1NVxcMTQ1XFwwMDRcXDI1MlxcMjU1XFwyNTNcXDI1NVxcMjIxXFwwMDRcXDI1NVxcMjU1XFwyMjlcXDAwMFxcXG4gICAgXFwyNTNcXDI1NVxcMjU0XFwyNTVcXDI1NVxcMjU1XFwyMzFcXDAwMFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDAyXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDAxOFxcMDAxXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDM0XFwwMDFcXDI1M1xcMjU1XFxcbiAgICBcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMjU0XFwyNTVcXDI1NVxcMjU1XFwwMzhcXDAwMVxcXG4gICAgXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMTIwXFwwMDFcXDI1MVxcMjU1XFwyNTJcXDI1NVxcMjUzXFwyNTVcXFxuICAgIFxcMjU0XFwyNTVcXDI1NVxcMjU1XFwyMDhcXDAwMFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMjExXFwwMDBcXDI1M1xcMjU1XFxcbiAgICBcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMTg5XFwwMDBcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMjUyXFwyNTVcXDI1M1xcMjU1XFwyNTRcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDEzXFwwMDFcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDA5NVxcMDAxXFwyNTJcXDI1NVxcMjUzXFwyNTVcXFxuICAgIFxcMjU0XFwyNTVcXDI1NVxcMjU1XFwwNTBcXDAwMVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDI2XFwwMDFcXDI1M1xcMjU1XFxcbiAgICBcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMjMzXFwwMDBcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDIyMlxcMDAwXFwyNTNcXDI1NVxcXG4gICAgXFwyNTRcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDA1XFwyMzdcXDI1NVxcMjM4XFwyNTVcXDAxMFxcMDAwXFwyNDBcXDI1NVxcMDQ0XFwwMDFcXFxuICAgIFxcMjQzXFwyNTVcXDI0NFxcMjU1XFwyNDVcXDI1NVxcMjQ2XFwyNTVcXDA2MVxcMDAxXFwwMDJcXDAwNFxcMjQ5XFwyNTVcXDA0NVxcMDA1XFxcbiAgICBcXDIwOVxcMDAwXFwyMjhcXDAwMFxcMjExXFwwMDBcXDIzMlxcMDAwXFwyMjVcXDAwMFxcMjIzXFwwMDBcXDI0MFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyMzVcXDAwMFxcMjM0XFwwMDBcXDAwOFxcMDAxXFwyNTRcXDI1NVxcMDA0XFwwMDFcXDAyM1xcMDAxXFwyNTNcXDI1NVxcMDU0XFwwMDFcXFxuICAgIFxcMjUyXFwyNTVcXDAzMVxcMDAxXFwwMjlcXDAwMVxcMDMyXFwwMDFcXDAzOVxcMDAxXFwwNDlcXDAwMVxcMDQ1XFwwMDFcXDI1MVxcMjU1XFxcbiAgICBcXDA1N1xcMDAxXFwwODJcXDAwMVxcMDgwXFwwMDFcXDA3OFxcMDAxXFwwODRcXDAwMVxcMDc0XFwwMDFcXDA4NlxcMDAxXFwyNTBcXDI1NVxcXG4gICAgXFwxMTBcXDAwNVxcMDEyXFwwMDRcXDEyM1xcMDA1XFwxNTVcXDAwNVxcMTY1XFwwMDVcXDE3N1xcMDA1XFwxODdcXDAwNVxcMTk3XFwwMDVcXFxuICAgIFxcMjQxXFwyNTVcXDE5OVxcMDAxXFwwNzdcXDAwMlxcMjUzXFwyNTVcXDI1NVxcMjU1XFwxNTRcXDAwMlxcMjIyXFwwMDVcXDIwOVxcMDA1XFxcbiAgICBcXDE1NVxcMDAyXFwyMzlcXDAwNVxcMDUzXFwwMDZcXDA3NlxcMDA2XFwxMTRcXDAwNlxcMDE2XFwwMDJcXDI1MlxcMjU1XFwyNTNcXDI1NVxcXG4gICAgXFwyNTRcXDI1NVxcMjU1XFwyNTVcXDE1MlxcMDA2XFwyNTJcXDI1NVxcMjUzXFwyNTVcXDIyN1xcMDA2XFwyNTVcXDI1NVxcMDg1XFwwMDdcXFxuICAgIFxcMjQ0XFwyNTVcXDI0NVxcMjU1XFwwMTFcXDAwMFxcMjQ3XFwyNTVcXDA3NlxcMDAyXFwyNTBcXDI1NVxcMjUxXFwyNTVcXDI1MlxcMjU1XFxcbiAgICBcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMDMxXFwwMDJcXDI0M1xcMDA1XFwwNTFcXDAwN1xcMTAwXFwwMDFcXDExNVxcMDAxXFwxMDRcXDAwMVxcXG4gICAgXFwxMzNcXDAwMVxcMTE4XFwwMDFcXDE1NFxcMDAxXFwxNzFcXDAwMVxcMjU1XFwyNTVcXDE3M1xcMDAxXFwxNzZcXDAwMVxcMTkxXFwwMDFcXFxuICAgIFxcMTg1XFwwMDFcXDE4N1xcMDAxXFwyNTNcXDAwMVxcMjMwXFwwMDFcXDIzMFxcMDAxXFwyMzRcXDAwMVxcMjQ3XFwwMDFcXDIzN1xcMDAxXFxcbiAgICBcXDIzNFxcMDAxXFwwMDlcXDAwMlxcMDE5XFwwMDJcXDAxOVxcMDAyXFwwMTVcXDAwMlxcMDIxXFwwMDJcXDAxMVxcMDAyXFwwMDdcXDAwMlxcXG4gICAgXFwxNDJcXDAwNlxcMTUyXFwwMDZcXDExNlxcMDA3XFwxNzBcXDAwN1xcMTgwXFwwMDdcXDE5MFxcMDA3XFwyMDBcXDAwN1xcMjEwXFwwMDdcXFxuICAgIFxcMjQ4XFwyNTVcXDEyMFxcMDAyXFwxNjdcXDAwMlxcMjUzXFwyNTVcXDI1NVxcMjU1XFwyMTZcXDAwMlxcMDgyXFwwMDdcXDIyMFxcMDA3XFxcbiAgICBcXDIzNlxcMDAyXFwyNDRcXDAwN1xcMDU4XFwwMDhcXDA4MVxcMDA4XFwxMTlcXDAwOFxcMDc2XFwwMDJcXDI1MlxcMjU1XFwyNTNcXDI1NVxcXG4gICAgXFwyNTRcXDI1NVxcMjU1XFwyNTVcXDE1N1xcMDA4XFwyNTJcXDI1NVxcMjUzXFwyNTVcXDIzMlxcMDA4XFwyNTVcXDI1NVxcMTM1XFwwMDJcXFxuICAgIFxcMTIwXFwwMDJcXDI1M1xcMjU1XFwxMDBcXDAwMlxcMjU0XFwyNTVcXDE4MlxcMDAyXFwyNTVcXDI1NVxcMDExXFwwMDJcXDI1NVxcMjU1XFxcbiAgICBcXDIwNFxcMDAyXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDQ2XFwwMDJcXDI1NVxcMjU1XFwxNzhcXDAwMlxcXG4gICAgXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMDIzXFwwMDBcXDI1NVxcMjU1XFwxODNcXDAwMlxcMjUyXFwyNTVcXFxuICAgIFxcMjUzXFwyNTVcXDI1NFxcMjU1XFwyNTVcXDI1NVxcMTg3XFwwMDJcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDEyMVxcMDAyXFxcbiAgICBcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMjU1XFwyNTVcXDE4NFxcMDAyXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwwMTlcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmsgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAxN1xcMDAwXFwyNTVcXDI1NVxcMDE5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFwwMDdcXDAwMFxcMjU1XFwyNTVcXDAxOVxcMDAwXFwwMTlcXDAwMFxcMDE5XFwwMDBcXFxuICAgIFxcMDE5XFwwMDBcXDAxOVxcMDAwXFwwMTlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA5XFwwMDBcXDI1NVxcMjU1XFwwMDlcXDAwMFxcMjU1XFwyNTVcXDAwOVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDE0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDAwMVxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAzXFwwMDBcXDI1NVxcMjU1XFwwMDFcXDAwMFxcMjU1XFwyNTVcXDAwNFxcMDAwXFwwMDNcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDRcXDAwMFxcMDA0XFwwMDBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAzXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMlxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMDAzXFwwMDBcXDAwNVxcMDAwXFwwMDVcXDAwMFxcMDA1XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMjU1XFwyNTVcXDAwM1xcMDAwXFwyNTVcXDI1NVxcMDAzXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwwMDJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAxNlxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFwwMDdcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFxcbiAgICBcXDAxOFxcMDAwXFwwMThcXDAwMFxcMDE4XFwwMDBcXDAxOFxcMDAwXFwwMThcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwOFxcMDAwXFwyNTVcXDI1NVxcMDA4XFwwMDBcXDI1NVxcMjU1XFwwMDhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAxM1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDFcXDAwMFxcMDAxXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDlcXDAwMFxcMjU1XFwyNTVcXDAxMVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcXG4gICAgXFwwMTFcXDAwMFxcMDExXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDFcXDAwMFxcMDAxXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMVxcMDAwXFwyNTVcXDI1NVxcMDA0XFwwMDBcXFxuICAgIFxcMDAzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAxXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHQgPVxuICAgXCJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMDU3XFwwMDBcXDA2MFxcMDAwXFwwMDBcXDAwMFxcMDYwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDY1XFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA2NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDk0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDk3XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwOTdcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEwNFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMDlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTEzXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTE3XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDEyMVxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTI2XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwxMzhcXDAwMFxcMDAwXFwwMDBcXDE0MlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwxNTRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwxNzhcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDE4N1xcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDE5NFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDFcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDIzNVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjQ0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNDlcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTNcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAwM1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDA4XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMTdcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDIyXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDMyXFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMzhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDQzXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA0N1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNTJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDU2XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDYwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA2NFxcMDAxXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA2N1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDEyMVxcMDAxXFwxMjVcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDEyOFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTM1XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDE0MFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMTQ0XFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDE5M1xcMDAxXFwxOTdcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDBcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDIwMFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjA3XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIxMlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDIyMFxcMDAxXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDIyNlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyMzNcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNDBcXDAwMVxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjQ1XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI0OVxcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1MlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X3RyYW5zID1cbiAgIFwiXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwM1xcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwM1xcMDAwXFwwMDNcXDAwMFxcMTM0XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwM1xcMDAwXFwwMDBcXDAwMFxcMTM0XFwwMDBcXDA2OVxcMDAxXFwxNDZcXDAwMVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwNjlcXDAwMVxcXG4gICAgXFwxNDZcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDEyN1xcMDAwXFwxMzlcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAzXFwwMDBcXDAwMFxcMDAwXFwwMTJcXDAwMFxcMDAzXFwwMDBcXDE3MFxcMDAwXFwxMzRcXDAwMFxcMTc1XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwN1xcMDAwXFwwMTFcXDAwMVxcMDY5XFwwMDFcXDE0NlxcMDAxXFwwMTRcXDAwMVxcMDEzXFwwMDBcXDA0OVxcMDAwXFwwMDVcXDAwMFxcXG4gICAgXFwwMTBcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwNTZcXDAwMFxcMTE4XFwwMDBcXDAwNlxcMDAwXFwxMjlcXDAwMFxcMTMwXFwwMDBcXDA1N1xcMDAwXFxcbiAgICBcXDIzN1xcMDAxXFwxMzdcXDAwMFxcMDAwXFwwMDJcXDA0OVxcMDAwXFwwMDBcXDAwMFxcMDQ4XFwwMDBcXDEzOFxcMDAwXFwxMDZcXDAwMFxcXG4gICAgXFwwNjJcXDAwMFxcMDE0XFwwMDBcXDExMFxcMDAwXFwxMDVcXDAwMFxcMDAwXFwwMDBcXDA0OVxcMDAwXFwwMTVcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFxcbiAgICBcXDAxMVxcMDAwXFwwMzBcXDAwMFxcMDQ4XFwwMDBcXDAwOFxcMDAwXFwxMTRcXDAwMFxcMjA5XFwwMDBcXDIzNlxcMDAwXFwwMDBcXDAwMVxcXG4gICAgXFwwMTNcXDAwMVxcMDI5XFwwMDBcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMDQ4XFwwMDBcXDA0OFxcMDAwXFwwMTdcXDAwMFxcMDIxXFwwMDBcXFxuICAgIFxcMDI1XFwwMDBcXDAzMlxcMDAwXFwwMzNcXDAwMFxcMDM1XFwwMDBcXDAyM1xcMDAwXFwwMjdcXDAwMFxcMDE2XFwwMDBcXDAzMVxcMDAwXFxcbiAgICBcXDAyOFxcMDAwXFwwMzRcXDAwMFxcMDE5XFwwMDBcXDAyNFxcMDAwXFwwMThcXDAwMFxcMDI2XFwwMDBcXDAyMFxcMDAwXFwwMzZcXDAwMFxcXG4gICAgXFwwNDFcXDAwMFxcMDM3XFwwMDBcXDA0OFxcMDAwXFwwMDlcXDAwMFxcMDQyXFwwMDBcXDA0M1xcMDAwXFwwNDRcXDAwMFxcMDQ1XFwwMDBcXFxuICAgIFxcMDQ2XFwwMDBcXDA0N1xcMDAwXFwwNjFcXDAwMFxcMDg1XFwwMDBcXDA0OFxcMDAwXFwwMzhcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFxcbiAgICBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwNDlcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXFxuICAgIFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDg2XFwwMDBcXDE0M1xcMDAwXFwyNTVcXDI1NVxcMDQwXFwwMDBcXDE0NFxcMDAwXFxcbiAgICBcXDE0NVxcMDAwXFwxNDZcXDAwMFxcMDU1XFwwMDBcXDE0OFxcMDAwXFwwNTVcXDAwMFxcMTQ5XFwwMDBcXDA0OFxcMDAwXFwwNTRcXDAwMFxcXG4gICAgXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXFxuICAgIFxcMDU0XFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFxcbiAgICBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcXG4gICAgXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDI1NVxcMjU1XFwwNDhcXDAwMFxcMTUwXFwwMDBcXFxuICAgIFxcMTUxXFwwMDBcXDE2MVxcMDAwXFwwNjZcXDAwMFxcMTU4XFwwMDBcXDA1M1xcMDAwXFwxNTlcXDAwMFxcMDUzXFwwMDBcXDE2MFxcMDAwXFxcbiAgICBcXDA1MVxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcXG4gICAgXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXFxuICAgIFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFxcbiAgICBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwxNjVcXDAwMFxcXG4gICAgXFwwNTFcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXFxuICAgIFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMTYyXFwwMDBcXDE2M1xcMDAwXFwxNjZcXDAwMFxcMDkzXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDAwMlxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcXG4gICAgXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwyNTVcXDI1NVxcMDc3XFwwMDBcXDEwM1xcMDAwXFwxMDhcXDAwMFxcMTE2XFwwMDBcXFxuICAgIFxcMTMyXFwwMDBcXDEzNFxcMDAwXFwxMzVcXDAwMFxcMTI4XFwwMDBcXDEzOVxcMDAwXFwxMzRcXDAwMFxcMTY0XFwwMDBcXDA5M1xcMDAwXFxcbiAgICBcXDE3MVxcMDAwXFwwNzdcXDAwMFxcMTY3XFwwMDBcXDE2OFxcMDAwXFwxNjlcXDAwMFxcMTcyXFwwMDBcXDExMlxcMDAwXFwxNzNcXDAwMFxcXG4gICAgXFwxNzRcXDAwMFxcMjEwXFwwMDBcXDIyNlxcMDAwXFwyMDhcXDAwMFxcMjExXFwwMDBcXDIxMlxcMDAwXFwwNTlcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMTM0XFwwMDBcXDIxM1xcMDAwXFwyMTRcXDAwMFxcMjE1XFwwMDBcXDIxNlxcMDAwXFwyMThcXDAwMFxcMTQxXFwwMDBcXDIxOVxcMDAwXFxcbiAgICBcXDA5M1xcMDAwXFwyMjBcXDAwMFxcMjIxXFwwMDBcXDEyM1xcMDAwXFwyMjJcXDAwMFxcMjIzXFwwMDBcXDIyNFxcMDAwXFwxMzZcXDAwMFxcXG4gICAgXFwwOTVcXDAwMFxcMjI1XFwwMDBcXDAzNVxcMDAxXFwwNjVcXDAwMVxcMjM0XFwwMDBcXDE1NVxcMDAwXFwwMDVcXDAwMVxcMDk3XFwwMDFcXFxuICAgIFxcMjUwXFwwMDBcXDI1NVxcMjU1XFwyNTRcXDAwMFxcMDU3XFwwMDFcXDA2MVxcMDAxXFwwOTVcXDAwMVxcMDc3XFwwMDBcXDA0NFxcMDAxXFxcbiAgICBcXDA5MlxcMDAxXFwwODhcXDAwMVxcMDA5XFwwMDFcXDAyOVxcMDAxXFwwNzZcXDAwMFxcMTI0XFwwMDBcXDAzM1xcMDAxXFwwMThcXDAwMVxcXG4gICAgXFwwNzVcXDAwMFxcMDk4XFwwMDBcXDAxOVxcMDAxXFwwODVcXDAwMVxcMDg2XFwwMDFcXDA4N1xcMDAxXFwxMjBcXDAwMVxcMDg5XFwwMDFcXFxuICAgIFxcMDc0XFwwMDBcXDIyNVxcMDAwXFwwNTNcXDAwMVxcMTIxXFwwMDFcXDA3M1xcMDAwXFwwOTBcXDAwMVxcMDcyXFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcXG4gICAgXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA5OFxcMDAwXFwxMTNcXDAwMVxcMTIyXFwwMDBcXDA5MVxcMDAxXFwwNjRcXDAwMFxcMDA0XFwwMDFcXFxuICAgIFxcMDkzXFwwMDFcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMTU2XFwwMDBcXDExMlxcMDAxXFwwOTRcXDAwMVxcMDk2XFwwMDFcXDA5OFxcMDAxXFwwOTlcXDAwMVxcMDQ5XFwwMDFcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMTAwXFwwMDFcXDE1N1xcMDAwXFxcbiAgICBcXDEwMVxcMDAxXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwxODNcXDAwMFxcXG4gICAgXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXFxuICAgIFxcMTg0XFwwMDBcXDAyNFxcMDAxXFwxMTJcXDAwMVxcMjU1XFwyNTVcXDAyNVxcMDAxXFwxMDJcXDAwMVxcMTAzXFwwMDFcXDEwNVxcMDAxXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcXG4gICAgXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXFxuICAgIFxcMTA2XFwwMDFcXDEwN1xcMDAxXFwwNDhcXDAwMVxcMDQwXFwwMDFcXDEwOFxcMDAxXFwxMDlcXDAwMVxcMTEwXFwwMDFcXDA4MFxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwODFcXDAwMFxcXG4gICAgXFwwODFcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwODFcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwODFcXDAwMFxcMTExXFwwMDFcXFxuICAgIFxcMDI3XFwwMDFcXDI1NVxcMjU1XFwxNzFcXDAwMVxcMDMxXFwwMDFcXDE3MFxcMDAxXFwwMjNcXDAwMVxcMDgxXFwwMDBcXDA4MVxcMDAwXFxcbiAgICBcXDA4MVxcMDAwXFwwODFcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwOTJcXDAwMFxcMTY4XFwwMDFcXDA2M1xcMDAxXFwwODBcXDAwMFxcXG4gICAgXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDI0OFxcMDAwXFwxNjVcXDAwMVxcMjUyXFwwMDBcXFxuICAgIFxcMTYyXFwwMDFcXDA1OVxcMDAxXFwwNjlcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFxcbiAgICBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMjU1XFwyNTVcXDA4MVxcMDAwXFwwODFcXDAwMFxcXG4gICAgXFwwODFcXDAwMFxcMDgxXFwwMDBcXDA4MVxcMDAwXFwwODFcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXFxuICAgIFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFxcbiAgICBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwMzlcXDAwMVxcMDQyXFwwMDFcXDI1NVxcMjU1XFwxNjNcXDAwMVxcXG4gICAgXFwxNjRcXDAwMVxcMTIwXFwwMDBcXDAwMlxcMDAxXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXFxuICAgIFxcMDg4XFwwMDBcXDE2NlxcMDAxXFwwNTVcXDAwMVxcMTUzXFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFxcbiAgICBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDA3XFwwMDFcXDE2N1xcMDAxXFwxNjRcXDAwMVxcMTY5XFwwMDFcXDAxNlxcMDAxXFwxNjRcXDAwMVxcXG4gICAgXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXFxuICAgIFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwNTFcXDAwMVxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFxcbiAgICBcXDA4OFxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwOTBcXDAwMFxcXG4gICAgXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXFxuICAgIFxcMDkwXFwwMDBcXDA5N1xcMDAwXFwxMzdcXDAwMVxcMTY0XFwwMDFcXDE3MlxcMDAxXFwxODVcXDAwMVxcMTM2XFwwMDFcXDE3M1xcMDAxXFxcbiAgICBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5N1xcMDAwXFwxNzlcXDAwMFxcXG4gICAgXFwxNzRcXDAwMVxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDQ2XFwwMDFcXFxuICAgIFxcMTc1XFwwMDFcXDE3NlxcMDAxXFwxODBcXDAwMFxcMTY0XFwwMDFcXDE4NFxcMDAxXFwxODFcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFxcbiAgICBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxMjRcXDAwMVxcXG4gICAgXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwwOTBcXDAwMFxcMDkwXFwwMDBcXDA5MFxcMDAwXFwxOTJcXDAwMVxcMTc4XFwwMDFcXFxuICAgIFxcMDIxXFwwMDFcXDE3OVxcMDAxXFwwOTdcXDAwMFxcMTkzXFwwMDFcXDE4MFxcMDAxXFwxODFcXDAwMVxcMTgyXFwwMDFcXDE4M1xcMDAxXFxcbiAgICBcXDE2NFxcMDAxXFwyMTZcXDAwMVxcMjU1XFwyNTVcXDA5N1xcMDAwXFwxODRcXDAwMVxcMjE2XFwwMDFcXDIwOVxcMDAxXFwwOTdcXDAwMFxcXG4gICAgXFwyMjNcXDAwMVxcMDk3XFwwMDBcXDIwOFxcMDAxXFwyMzBcXDAwMVxcMDAwXFwwMDBcXDA5N1xcMDAwXFwyMTlcXDAwMVxcMDM3XFwwMDFcXFxuICAgIFxcMjE2XFwwMDFcXDIxN1xcMDAxXFwwMDBcXDAwMFxcMjIwXFwwMDFcXDIxNlxcMDAxXFwwOTdcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDIxNlxcMDAxXFwwOTdcXDAwMFxcMDAwXFwwMDBcXDA5N1xcMDAwXFwwOTZcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcXG4gICAgXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMjE2XFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDEyNlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFxcbiAgICBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTdcXDAwMFxcMDAwXFwwMDBcXDIxOFxcMDAxXFwyNTBcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA5N1xcMDAwXFwwMDBcXDAwMFxcMTI0XFwwMDFcXDEyNFxcMDAxXFwwOTdcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjIxXFwwMDFcXDAwMFxcMDAwXFwyNTNcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDk3XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwxOTZcXDAwMVxcMDk3XFwwMDBcXDAwMFxcMDAwXFwwOTdcXDAwMFxcMDk2XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcXG4gICAgXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXFxuICAgIFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMjM1XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDI0MVxcMDAxXFwwMDBcXDAwMFxcMjU1XFwwMDFcXDI0MlxcMDAxXFwwMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcXG4gICAgXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXFxuICAgIFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwyNDZcXDAwMVxcMTI5XFwwMDFcXDEyOVxcMDAxXFxcbiAgICBcXDIyOFxcMDAxXFwwMDBcXDAwMFxcMTk2XFwwMDFcXDAwMFxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcXG4gICAgXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDAwMFxcMDAwXFwxOThcXDAwMVxcMDAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXFxuICAgIFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTk2XFwwMDFcXDIzNFxcMDAxXFxcbiAgICBcXDEzNFxcMDAxXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcXG4gICAgXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwMDBcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXFxuICAgIFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFxcbiAgICBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcXG4gICAgXFwxODJcXDAwMFxcMTgyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAxXFwwMDFcXDE3N1xcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXFxuICAgIFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFxcbiAgICBcXDE4OFxcMDAwXFwwMDBcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcMDk3XFwwMDBcXDA5N1xcMDAwXFwwOTdcXDAwMFxcXG4gICAgXFwyMDFcXDAwMVxcMjI3XFwwMDFcXDAwMFxcMDAwXFwxOTFcXDAwMFxcMjA2XFwwMDFcXDEyM1xcMDAxXFwxODlcXDAwMFxcMTkwXFwwMDBcXFxuICAgIFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFxcbiAgICBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcXG4gICAgXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE4OVxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXFxuICAgIFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5NVxcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFxcbiAgICBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOThcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjQ4XFwwMDFcXDE5NlxcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXFxuICAgIFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5NlxcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFxcbiAgICBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDIwMlxcMDAwXFwyMjdcXDAwMFxcXG4gICAgXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXFxuICAgIFxcMjI3XFwwMDBcXDIwNVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIwM1xcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFxcbiAgICBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIyNlxcMDAwXFwxOTVcXDAwMVxcXG4gICAgXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXFxuICAgIFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMzJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDZcXDAwMFxcMjIxXFwwMDFcXDIzOVxcMDAxXFxcbiAgICBcXDI1NFxcMDAxXFwwMDBcXDAwMFxcMjA3XFwwMDBcXDI0NFxcMDAxXFwwMDBcXDAwMFxcMjI1XFwwMDBcXDIwM1xcMDAwXFwyMDRcXDAwMFxcXG4gICAgXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXFxuICAgIFxcMjMyXFwwMDBcXDAwMFxcMDAwXFwyMzJcXDAwMFxcMDAwXFwwMDBcXDIyNVxcMDAxXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFxcbiAgICBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMTdcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIyNVxcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXFxuICAgIFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMzBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMjMwXFwwMDBcXDAwMFxcMDAwXFwyMjhcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXFxuICAgIFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFxcbiAgICBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcXG4gICAgXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXFxuICAgIFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwwMDBcXDAwMFxcMjI4XFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFxcbiAgICBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDE4NlxcMDAwXFwyMzFcXDAwMFxcXG4gICAgXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXFxuICAgIFxcMjMxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjQxXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDExM1xcMDAxXFwwMDBcXDAwMFxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcXG4gICAgXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXFxuICAgIFxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMDAwXFwwMDBcXDExMlxcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTkzXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwxMTJcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNDBcXDAwMFxcMjAwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDAwMFxcMDAwXFwyNDZcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwwMDBcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyMzhcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNDVcXDAwMFxcMDAwXFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwwNjlcXDAwMVxcMDcwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDY5XFwwMDFcXDA3NlxcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXFxuICAgIFxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNjlcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDc4XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMDRcXDAwMVxcMDczXFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAxXFwwMDBcXDAwMFxcMDcxXFwwMDFcXDA3NlxcMDAxXFxcbiAgICBcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcXG4gICAgXFwwNzdcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDI0M1xcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA4MFxcMDAxXFwxMTlcXDAwMVxcMDAwXFwwMDBcXDExOVxcMDAxXFwwMDBcXDAwMFxcMDgxXFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcXG4gICAgXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFxcbiAgICBcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMDgzXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4MlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMTE1XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTE3XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDExN1xcMDAxXFwwMDBcXDAwMFxcMDc1XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcXG4gICAgXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXFxuICAgIFxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDExNVxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcXG4gICAgXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXFxuICAgIFxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFxcbiAgICBcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwwMDBcXDAwMFxcXG4gICAgXFwxMjhcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXFxuICAgIFxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDE4NVxcMDAxXFwwMDBcXDAwMFxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFxcbiAgICBcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXFxuICAgIFxcMTg0XFwwMDFcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDEyOFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDY4XFwwMDFcXFxuICAgIFxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMTI3XFwwMDFcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDE4NFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTI4XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMTI4XFwwMDFcXDAwMFxcMDAwXFwxMjhcXDAwMVxcMTI3XFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXFxuICAgIFxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDEzMVxcMDAxXFwxMzFcXDAwMVxcXG4gICAgXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXFxuICAgIFxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcXG4gICAgXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxMzFcXDAwMVxcMTMxXFwwMDFcXFxuICAgIFxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcXG4gICAgXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMDAwXFwwMDBcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXFxuICAgIFxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFxcbiAgICBcXDEyOFxcMDAxXFwxOTFcXDAwMVxcMTQyXFwwMDFcXDE5MVxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDE5MFxcMDAxXFwxOTBcXDAwMVxcXG4gICAgXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXFxuICAgIFxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFxcbiAgICBcXDE4NlxcMDAxXFwxODZcXDAwMVxcMDAwXFwwMDBcXDEyOFxcMDAxXFwxMjhcXDAwMVxcMTI4XFwwMDFcXDEyOFxcMDAxXFwxMjhcXDAwMVxcXG4gICAgXFwxMjhcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTQxXFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxNDFcXDAwMVxcMDAwXFwwMDBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQ2XFwwMDFcXDE0N1xcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTQ2XFwwMDFcXDE1NFxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcXG4gICAgXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIwMFxcMDAxXFwxNDZcXDAwMVxcMDAwXFwwMDBcXDE1M1xcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxNzdcXDAwMVxcMTUwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMjAwXFwwMDFcXDE1NlxcMDAxXFwwMDBcXDAwMFxcMTQ4XFwwMDFcXDE1NFxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXFxuICAgIFxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwxNDlcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwxMzlcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxNTdcXDAwMVxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTU4XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFxcbiAgICBcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDIwMFxcMDAxXFwwMDBcXDAwMFxcXG4gICAgXFwxNTFcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjAwXFwwMDFcXDE4N1xcMDAxXFwwMDBcXDAwMFxcMTYwXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDE1OVxcMDAxXFwyMDBcXDAwMVxcMDAwXFwwMDBcXDIwMFxcMDAxXFwxOTlcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMTYxXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMTUyXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwxODlcXDAwMVxcMDAwXFwwMDBcXDE4OVxcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwxODdcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcXG4gICAgXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXFxuICAgIFxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFxcbiAgICBcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcXG4gICAgXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXFxuICAgIFxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFxcbiAgICBcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcXG4gICAgXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDBcXDAwMVxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFxcbiAgICBcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcXG4gICAgXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMTQ1XFwwMDFcXDIwMFxcMDAxXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDBcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAwXFwwMDFcXDAwMFxcMDAwXFxcbiAgICBcXDIwMFxcMDAxXFwxOTlcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcXG4gICAgXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFxcbiAgICBcXDIwM1xcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcXG4gICAgXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcXG4gICAgXFwyMDNcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjAwXFwwMDFcXFxuICAgIFxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFxcbiAgICBcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcXG4gICAgXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFwwMDBcXDAwMFxcMjE0XFwwMDFcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjAwXFwwMDFcXDIwMFxcMDAxXFwyMDBcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMTNcXDAwMVxcMDAwXFwwMDBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMTNcXDAwMVxcXG4gICAgXFwwMDBcXDAwMFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyMTFcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfY2hlY2sgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAzXFwwMDBcXDAwMFxcMDAwXFwxMzRcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAzXFwwMDBcXDI1NVxcMjU1XFwxMzRcXDAwMFxcMDY5XFwwMDFcXDE0NlxcMDAxXFwwNTdcXDAwMFxcMjU1XFwyNTVcXDA2OVxcMDAxXFxcbiAgICBcXDE0NlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTI1XFwwMDBcXDEzOFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDNcXDAwMFxcMTY5XFwwMDBcXDEzNFxcMDAwXFwxNzRcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAxMFxcMDAxXFwwNjlcXDAwMVxcMTQ2XFwwMDFcXDAxMlxcMDAxXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwNVxcMDAwXFwxMTVcXDAwMFxcMDAwXFwwMDBcXDEyNVxcMDAwXFwxMjlcXDAwMFxcMDA1XFwwMDBcXFxuICAgIFxcMjM2XFwwMDFcXDEzNlxcMDAwXFwyNTVcXDAwMVxcMDM4XFwwMDBcXDI1NVxcMjU1XFwwMTBcXDAwMFxcMTM2XFwwMDBcXDEwMlxcMDAwXFxcbiAgICBcXDA1OFxcMDAwXFwwMDBcXDAwMFxcMTA3XFwwMDBcXDEwMlxcMDAwXFwyNTVcXDI1NVxcMDExXFwwMDBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcXG4gICAgXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXDAxMVxcMDAwXFwwMTFcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDExXFwwMDBcXDAyOVxcMDAwXFwwMzhcXDAwMFxcMDAwXFwwMDBcXDExMVxcMDAwXFwyMDhcXDAwMFxcMjMzXFwwMDBcXDI1NVxcMDAwXFxcbiAgICBcXDAxMlxcMDAxXFwwMTVcXDAwMFxcMDE3XFwwMDBcXDA2MFxcMDAwXFwwMTFcXDAwMFxcMDEwXFwwMDBcXDAwMFxcMDAwXFwwMjBcXDAwMFxcXG4gICAgXFwwMjRcXDAwMFxcMDMxXFwwMDBcXDAzMlxcMDAwXFwwMzRcXDAwMFxcMDIyXFwwMDBcXDAyNlxcMDAwXFwwMDBcXDAwMFxcMDE0XFwwMDBcXFxuICAgIFxcMDI3XFwwMDBcXDAzM1xcMDAwXFwwMThcXDAwMFxcMDIzXFwwMDBcXDAwMFxcMDAwXFwwMTZcXDAwMFxcMDE5XFwwMDBcXDAzNVxcMDAwXFxcbiAgICBcXDA0MFxcMDAwXFwwMzZcXDAwMFxcMDM4XFwwMDBcXDAwMFxcMDAwXFwwNDFcXDAwMFxcMDQyXFwwMDBcXDA0M1xcMDAwXFwwNDRcXDAwMFxcXG4gICAgXFwwNDVcXDAwMFxcMDQ2XFwwMDBcXDA1OFxcMDAwXFwwODJcXDAwMFxcMDExXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXFxuICAgIFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAzOVxcMDAwXFxcbiAgICBcXDA2M1xcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwMzlcXDAwMFxcXG4gICAgXFwwMzlcXDAwMFxcMDM5XFwwMDBcXDAzOVxcMDAwXFwwODVcXDAwMFxcMTQwXFwwMDBcXDA2MFxcMDAwXFwwMTNcXDAwMFxcMTQzXFwwMDBcXFxuICAgIFxcMTQ0XFwwMDBcXDE0NVxcMDAwXFwwNDhcXDAwMFxcMTQ3XFwwMDBcXDA0OFxcMDAwXFwxNDhcXDAwMFxcMDM5XFwwMDBcXDA0OFxcMDAwXFxcbiAgICBcXDA0OFxcMDAwXFwwNDhcXDAwMFxcMDQ4XFwwMDBcXDA0OFxcMDAwXFwwNDhcXDAwMFxcMDQ4XFwwMDBcXDA0OFxcMDAwXFwwNDhcXDAwMFxcXG4gICAgXFwwNDhcXDAwMFxcMDQ5XFwwMDBcXDA0OVxcMDAwXFwwNDlcXDAwMFxcMDQ5XFwwMDBcXDA0OVxcMDAwXFwwNDlcXDAwMFxcMDQ5XFwwMDBcXFxuICAgIFxcMDQ5XFwwMDBcXDA0OVxcMDAwXFwwNDlcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFxcbiAgICBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDUwXFwwMDBcXDA1MFxcMDAwXFwwNTBcXDAwMFxcMDY1XFwwMDBcXDAzOVxcMDAwXFwxNDlcXDAwMFxcXG4gICAgXFwxNTBcXDAwMFxcMTU2XFwwMDBcXDA2M1xcMDAwXFwxNTdcXDAwMFxcMDUxXFwwMDBcXDE1OFxcMDAwXFwwNTFcXDAwMFxcMTU5XFwwMDBcXFxuICAgIFxcMDUwXFwwMDBcXDA1MVxcMDAwXFwwNTFcXDAwMFxcMDUxXFwwMDBcXDA1MVxcMDAwXFwwNTFcXDAwMFxcMDUxXFwwMDBcXDA1MVxcMDAwXFxcbiAgICBcXDA1MVxcMDAwXFwwNTFcXDAwMFxcMDUxXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcXG4gICAgXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1MlxcMDAwXFwwNTJcXDAwMFxcMDUyXFwwMDBcXDA1M1xcMDAwXFwwNTNcXDAwMFxcMDUzXFwwMDBcXFxuICAgIFxcMDUzXFwwMDBcXDA1M1xcMDAwXFwwNTNcXDAwMFxcMDUzXFwwMDBcXDA1M1xcMDAwXFwwNTNcXDAwMFxcMDUzXFwwMDBcXDE1NVxcMDAwXFxcbiAgICBcXDA1MFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwwNTRcXDAwMFxcXG4gICAgXFwwNTRcXDAwMFxcMDU0XFwwMDBcXDA1NFxcMDAwXFwxNjFcXDAwMFxcMTYyXFwwMDBcXDE1NVxcMDAwXFwwOTFcXDAwMFxcMDY1XFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA1NVxcMDAwXFwwNTVcXDAwMFxcMDU1XFwwMDBcXDA1NVxcMDAwXFwwNTVcXDAwMFxcMDU1XFwwMDBcXDA1NVxcMDAwXFxcbiAgICBcXDA1NVxcMDAwXFwwNTVcXDAwMFxcMDU1XFwwMDBcXDA1N1xcMDAwXFwwNjhcXDAwMFxcMTAyXFwwMDBcXDEwN1xcMDAwXFwxMTVcXDAwMFxcXG4gICAgXFwxMzFcXDAwMFxcMTMzXFwwMDBcXDEzM1xcMDAwXFwxMjVcXDAwMFxcMTM4XFwwMDBcXDEzM1xcMDAwXFwxNjNcXDAwMFxcMDk0XFwwMDBcXFxuICAgIFxcMTY1XFwwMDBcXDA2OFxcMDAwXFwxNjZcXDAwMFxcMTY3XFwwMDBcXDE2OFxcMDAwXFwxNzFcXDAwMFxcMTExXFwwMDBcXDE3MlxcMDAwXFxcbiAgICBcXDE3M1xcMDAwXFwyMDZcXDAwMFxcMjAzXFwwMDBcXDIwN1xcMDAwXFwyMTBcXDAwMFxcMjExXFwwMDBcXDA1OFxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwxMzNcXDAwMFxcMjEyXFwwMDBcXDIxM1xcMDAwXFwyMTRcXDAwMFxcMjE1XFwwMDBcXDIxN1xcMDAwXFwxNDBcXDAwMFxcMjE4XFwwMDBcXFxuICAgIFxcMDk3XFwwMDBcXDIxOVxcMDAwXFwyMjBcXDAwMFxcMTE5XFwwMDBcXDIyMVxcMDAwXFwyMjJcXDAwMFxcMjIzXFwwMDBcXDEzM1xcMDAwXFxcbiAgICBcXDA5MVxcMDAwXFwyMDNcXDAwMFxcMDM0XFwwMDFcXDA2MlxcMDAxXFwyMzNcXDAwMFxcMTUyXFwwMDBcXDAwMVxcMDAxXFwwODBcXDAwMVxcXG4gICAgXFwyNDdcXDAwMFxcMDYwXFwwMDBcXDI1MVxcMDAwXFwwNTRcXDAwMVxcMDU4XFwwMDFcXDA4MVxcMDAxXFwwNjhcXDAwMFxcMDQxXFwwMDFcXFxuICAgIFxcMDgyXFwwMDFcXDA4M1xcMDAxXFwwMDZcXDAwMVxcMDI2XFwwMDFcXDA2OFxcMDAwXFwxMTlcXDAwMFxcMDMwXFwwMDFcXDAxNVxcMDAxXFxcbiAgICBcXDA2OFxcMDAwXFwwOTRcXDAwMFxcMDE1XFwwMDFcXDA4NFxcMDAxXFwwODVcXDAwMVxcMDg2XFwwMDFcXDA3MVxcMDAxXFwwODhcXDAwMVxcXG4gICAgXFwwNjhcXDAwMFxcMjAzXFwwMDBcXDA1MFxcMDAxXFwwNzFcXDAwMVxcMDY4XFwwMDBcXDA4OVxcMDAxXFwwNjhcXDAwMFxcMDY4XFwwMDBcXFxuICAgIFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDk3XFwwMDBcXDA3NlxcMDAxXFwxMTlcXDAwMFxcMDkwXFwwMDFcXDA2M1xcMDAwXFwwMDFcXDAwMVxcXG4gICAgXFwwOTJcXDAwMVxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDc4XFwwMDBcXFxuICAgIFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFxcbiAgICBcXDA3OFxcMDAwXFwxNTJcXDAwMFxcMDc2XFwwMDFcXDA5M1xcMDAxXFwwOTVcXDAwMVxcMDk3XFwwMDFcXDA5OFxcMDAxXFwwNDVcXDAwMVxcXG4gICAgXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwOTlcXDAwMVxcMTUyXFwwMDBcXFxuICAgIFxcMTAwXFwwMDFcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDE4MFxcMDAwXFxcbiAgICBcXDE4MFxcMDAwXFwxODBcXDAwMFxcMTgwXFwwMDBcXDE4MFxcMDAwXFwxODBcXDAwMFxcMTgwXFwwMDBcXDE4MFxcMDAwXFwxODBcXDAwMFxcXG4gICAgXFwxODBcXDAwMFxcMDIwXFwwMDFcXDA3NlxcMDAxXFwwNjVcXDAwMFxcMDIwXFwwMDFcXDEwMVxcMDAxXFwxMDJcXDAwMVxcMTA0XFwwMDFcXFxuICAgIFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc4XFwwMDBcXDA3OFxcMDAwXFwwNzhcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwxMDVcXDAwMVxcMTA2XFwwMDFcXDA0NVxcMDAxXFwwMzZcXDAwMVxcMTA3XFwwMDFcXDEwOFxcMDAxXFwxMDlcXDAwMVxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwxMTBcXDAwMVxcXG4gICAgXFwwMjZcXDAwMVxcMTIxXFwwMDFcXDE1N1xcMDAxXFwwMzBcXDAwMVxcMTU4XFwwMDFcXDAyMFxcMDAxXFwwODBcXDAwMFxcMDgwXFwwMDBcXFxuICAgIFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA5MVxcMDAwXFwxNTlcXDAwMVxcMDYyXFwwMDFcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMjQ3XFwwMDBcXDE2MFxcMDAxXFwyNTFcXDAwMFxcXG4gICAgXFwxNjFcXDAwMVxcMDU4XFwwMDFcXDA2OFxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXFxuICAgIFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwOTRcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwODBcXDAwMFxcMDgwXFwwMDBcXDA4MFxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwODZcXDAwMFxcXG4gICAgXFwwODZcXDAwMFxcMDg2XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXFxuICAgIFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDAzNlxcMDAxXFwwNDFcXDAwMVxcMDk3XFwwMDBcXDE2MlxcMDAxXFxcbiAgICBcXDE2M1xcMDAxXFwxMTlcXDAwMFxcMDAxXFwwMDFcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcXG4gICAgXFwwODdcXDAwMFxcMTY1XFwwMDFcXDA1NFxcMDAxXFwxNTJcXDAwMFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwODZcXDAwMFxcMDg2XFwwMDBcXFxuICAgIFxcMDg2XFwwMDBcXDA4NlxcMDAwXFwwMDZcXDAwMVxcMTY2XFwwMDFcXDE2N1xcMDAxXFwxNjhcXDAwMVxcMDE1XFwwMDFcXDE2OVxcMDAxXFxcbiAgICBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcXG4gICAgXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA1MFxcMDAxXFwwODdcXDAwMFxcMDg3XFwwMDBcXDA4N1xcMDAwXFwwODdcXDAwMFxcMDg3XFwwMDBcXFxuICAgIFxcMDg3XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OVxcMDAwXFxcbiAgICBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcXG4gICAgXFwwODlcXDAwMFxcMDk1XFwwMDBcXDEzM1xcMDAxXFwxNzBcXDAwMVxcMTcxXFwwMDFcXDE1NFxcMDAxXFwxMzNcXDAwMVxcMTcyXFwwMDFcXFxuICAgIFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDk1XFwwMDBcXDE3NlxcMDAwXFxcbiAgICBcXDE3M1xcMDAxXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwODhcXDAwMFxcMDg4XFwwMDBcXDA4OFxcMDAwXFwwNDVcXDAwMVxcXG4gICAgXFwxNzRcXDAwMVxcMTc1XFwwMDFcXDE3NlxcMDAwXFwxNzZcXDAwMVxcMTU0XFwwMDFcXDE3NlxcMDAwXFwxNzZcXDAwMFxcMTc2XFwwMDBcXFxuICAgIFxcMTc2XFwwMDBcXDE3NlxcMDAwXFwxNzZcXDAwMFxcMTc2XFwwMDBcXDE3NlxcMDAwXFwxNzZcXDAwMFxcMTc2XFwwMDBcXDEyMlxcMDAxXFxcbiAgICBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDA4OVxcMDAwXFwwODlcXDAwMFxcMDg5XFwwMDBcXDE0OFxcMDAxXFwxNzdcXDAwMVxcXG4gICAgXFwwMjBcXDAwMVxcMTc4XFwwMDFcXDA5OFxcMDAwXFwxNDhcXDAwMVxcMTc5XFwwMDFcXDE4MFxcMDAxXFwxODFcXDAwMVxcMTgyXFwwMDFcXFxuICAgIFxcMTgzXFwwMDFcXDIxNlxcMDAxXFwxOTNcXDAwMVxcMDk1XFwwMDBcXDE1NFxcMDAxXFwyMTZcXDAwMVxcMjA1XFwwMDFcXDA5OFxcMDAwXFxcbiAgICBcXDIyMlxcMDAxXFwwOTVcXDAwMFxcMjA1XFwwMDFcXDIyOVxcMDAxXFwyNTVcXDI1NVxcMDk1XFwwMDBcXDIxOFxcMDAxXFwwMzZcXDAwMVxcXG4gICAgXFwyMTVcXDAwMVxcMjE1XFwwMDFcXDI1NVxcMjU1XFwyMThcXDAwMVxcMjE1XFwwMDFcXDA5NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjE2XFwwMDFcXDA5NVxcMDAwXFwyNTVcXDI1NVxcMDk1XFwwMDBcXDA5NVxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFxcbiAgICBcXDA5NlxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFwyMTVcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMTIyXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwOTZcXDAwMFxcMDk2XFwwMDBcXFxuICAgIFxcMDk2XFwwMDBcXDA5NlxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5OFxcMDAwXFwyNTVcXDI1NVxcMjE1XFwwMDFcXDI0N1xcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDk4XFwwMDBcXDI1NVxcMjU1XFwxMjVcXDAwMVxcMTI4XFwwMDFcXDA5OFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyMjBcXDAwMVxcMjU1XFwyNTVcXDI1MVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwOThcXDAwMFxcMTIxXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDE5NFxcMDAxXFwwOThcXDAwMFxcMjU1XFwyNTVcXDA5OFxcMDAwXFwwOThcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFxcbiAgICBcXDA5NlxcMDAwXFwwOTZcXDAwMFxcMDk2XFwwMDBcXDA5NlxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcXG4gICAgXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwyMzFcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjM4XFwwMDFcXDI1NVxcMjU1XFwyNTFcXDAwMVxcMjM4XFwwMDFcXDI1NVxcMjU1XFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFxcbiAgICBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcXG4gICAgXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDI0M1xcMDAxXFwxMjVcXDAwMVxcMTI4XFwwMDFcXFxuICAgIFxcMjI0XFwwMDFcXDI1NVxcMjU1XFwxOTdcXDAwMVxcMjU1XFwyNTVcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFxcbiAgICBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcMjU1XFwyNTVcXDE5NFxcMDAxXFwyNTVcXDI1NVxcMDk5XFwwMDBcXDA5OVxcMDAwXFwwOTlcXDAwMFxcXG4gICAgXFwwOTlcXDAwMFxcMDk5XFwwMDBcXDA5OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDBcXDAwMVxcMjMxXFwwMDFcXFxuICAgIFxcMTMzXFwwMDFcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFxcbiAgICBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDI1NVxcMjU1XFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMFxcMDAwXFwxMDBcXDAwMFxcXG4gICAgXFwxMDBcXDAwMFxcMTAwXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXFxuICAgIFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMTgyXFwwMDBcXDE4MlxcMDAwXFxcbiAgICBcXDE4MlxcMDAwXFwxODJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxOTdcXDAwMVxcMTc2XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcXG4gICAgXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXDE4NFxcMDAwXFwxODRcXDAwMFxcMTg0XFwwMDBcXFxuICAgIFxcMTg1XFwwMDBcXDI1NVxcMjU1XFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFwxMDFcXDAwMFxcMTAxXFwwMDBcXDEwMVxcMDAwXFxcbiAgICBcXDIwMFxcMDAxXFwyMjRcXDAwMVxcMjU1XFwyNTVcXDE4NVxcMDAwXFwyMDVcXDAwMVxcMTIyXFwwMDFcXDE4NVxcMDAwXFwxODVcXDAwMFxcXG4gICAgXFwxODVcXDAwMFxcMTg1XFwwMDBcXDE4NVxcMDAwXFwxODVcXDAwMFxcMTg1XFwwMDBcXDE4NVxcMDAwXFwxODVcXDAwMFxcMTg1XFwwMDBcXFxuICAgIFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkwXFwwMDBcXDE5MFxcMDAwXFxcbiAgICBcXDE5MFxcMDAwXFwxOTBcXDAwMFxcMTkxXFwwMDBcXDE5MVxcMDAwXFwxOTFcXDAwMFxcMTkxXFwwMDBcXDE5MVxcMDAwXFwxOTFcXDAwMFxcXG4gICAgXFwxOTFcXDAwMFxcMTkxXFwwMDBcXDE5MVxcMDAwXFwxOTFcXDAwMFxcMTkyXFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXFxuICAgIFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5N1xcMDAwXFwxOTdcXDAwMFxcMTk3XFwwMDBcXDE5MlxcMDAwXFxcbiAgICBcXDE5M1xcMDAxXFwyNDdcXDAwMVxcMTkyXFwwMDBcXDE5MlxcMDAwXFwxOTJcXDAwMFxcMTkyXFwwMDBcXDE5MlxcMDAwXFwxOTJcXDAwMFxcXG4gICAgXFwxOTJcXDAwMFxcMTkyXFwwMDBcXDE5MlxcMDAwXFwxOTJcXDAwMFxcMTk4XFwwMDBcXDE5OFxcMDAwXFwxOThcXDAwMFxcMTk4XFwwMDBcXFxuICAgIFxcMTk4XFwwMDBcXDE5OFxcMDAwXFwxOThcXDAwMFxcMTk4XFwwMDBcXDE5OFxcMDAwXFwxOThcXDAwMFxcMTk5XFwwMDBcXDIyNlxcMDAwXFxcbiAgICBcXDIyNlxcMDAwXFwyMjZcXDAwMFxcMjI2XFwwMDBcXDIyNlxcMDAwXFwyMjZcXDAwMFxcMjI2XFwwMDBcXDIyNlxcMDAwXFwyMjZcXDAwMFxcXG4gICAgXFwyMjZcXDAwMFxcMTk5XFwwMDBcXDEyNVxcMDAxXFwxMjhcXDAwMVxcMTk5XFwwMDBcXDE5OVxcMDAwXFwxOTlcXDAwMFxcMTk5XFwwMDBcXFxuICAgIFxcMTk5XFwwMDBcXDE5OVxcMDAwXFwxOTlcXDAwMFxcMTk5XFwwMDBcXDE5OVxcMDAwXFwxOTlcXDAwMFxcMjA0XFwwMDBcXDE5NFxcMDAxXFxcbiAgICBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIwNFxcMDAwXFwyMDRcXDAwMFxcXG4gICAgXFwyMDRcXDAwMFxcMjA0XFwwMDBcXDIzMVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE5OVxcMDAwXFwyMjBcXDAwMVxcMjM4XFwwMDFcXFxuICAgIFxcMjUxXFwwMDFcXDI1NVxcMjU1XFwxOTlcXDAwMFxcMjQzXFwwMDFcXDI1NVxcMjU1XFwyMDRcXDAwMFxcMjA1XFwwMDBcXDIwNVxcMDAwXFxcbiAgICBcXDIwNVxcMDAwXFwyMDVcXDAwMFxcMjA1XFwwMDBcXDIwNVxcMDAwXFwyMDVcXDAwMFxcMjA1XFwwMDBcXDIwNVxcMDAwXFwyMDVcXDAwMFxcXG4gICAgXFwyMjVcXDAwMFxcMjU1XFwyNTVcXDIyNVxcMDAwXFwyNTVcXDI1NVxcMjI0XFwwMDFcXDIyNVxcMDAwXFwyMjVcXDAwMFxcMjI1XFwwMDBcXFxuICAgIFxcMjI1XFwwMDBcXDIyNVxcMDAwXFwyMjVcXDAwMFxcMjI1XFwwMDBcXDIyNVxcMDAwXFwyMjVcXDAwMFxcMjI1XFwwMDBcXDIwNVxcMDAwXFxcbiAgICBcXDE5N1xcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjA0XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcXG4gICAgXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXDIyN1xcMDAwXFwyMjdcXDAwMFxcMjI3XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIwMFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIyOFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyMjhcXDAwMFxcMjU1XFwyNTVcXDIyN1xcMDAwXFwyMjhcXDAwMFxcMjI4XFwwMDBcXDIyOFxcMDAwXFwyMjhcXDAwMFxcXG4gICAgXFwyMjhcXDAwMFxcMjI4XFwwMDBcXDIyOFxcMDAwXFwyMjhcXDAwMFxcMjI4XFwwMDBcXDIyOFxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXFxuICAgIFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFwyMjlcXDAwMFxcMjI5XFwwMDBcXDIyOVxcMDAwXFxcbiAgICBcXDIzMFxcMDAwXFwyMzBcXDAwMFxcMjMwXFwwMDBcXDIzMFxcMDAwXFwyMzBcXDAwMFxcMjMwXFwwMDBcXDIzMFxcMDAwXFwyMzBcXDAwMFxcXG4gICAgXFwyMzBcXDAwMFxcMjMwXFwwMDBcXDI1NVxcMjU1XFwyMjdcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXFxuICAgIFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMjMxXFwwMDBcXDIzMVxcMDAwXFwyMzFcXDAwMFxcMTg1XFwwMDBcXDIzMlxcMDAwXFxcbiAgICBcXDIzMlxcMDAwXFwyMzJcXDAwMFxcMjMyXFwwMDBcXDIzMlxcMDAwXFwyMzJcXDAwMFxcMjMyXFwwMDBcXDIzMlxcMDAwXFwyMzJcXDAwMFxcXG4gICAgXFwyMzJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMzdcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDc3XFwwMDFcXDI1NVxcMjU1XFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFxcbiAgICBcXDA3N1xcMDAxXFwwNzdcXDAwMVxcMDc3XFwwMDFcXDA3N1xcMDAxXFwxMTNcXDAwMVxcMTEzXFwwMDFcXDExM1xcMDAxXFwxMTNcXDAwMVxcXG4gICAgXFwxMTNcXDAwMVxcMTEzXFwwMDFcXDExM1xcMDAxXFwxMTNcXDAwMVxcMTEzXFwwMDFcXDExM1xcMDAxXFwyNTVcXDI1NVxcMDc3XFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxOTJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFxcbiAgICBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcXG4gICAgXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXFxuICAgIFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDA3N1xcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIzN1xcMDAwXFwxOTlcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcXG4gICAgXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXFxuICAgIFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFxcbiAgICBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyMzdcXDAwMFxcMjM3XFwwMDBcXDIzN1xcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjU1XFwyNTVcXDI0MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI0MFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXFxuICAgIFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFxcbiAgICBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MFxcMDAwXFwyNDBcXDAwMFxcXG4gICAgXFwyNDBcXDAwMFxcMjQwXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXFxuICAgIFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFxcbiAgICBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcXG4gICAgXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjQyXFwwMDBcXDI1NVxcMjU1XFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFxcbiAgICBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcXG4gICAgXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXFxuICAgIFxcMjQyXFwwMDBcXDI0MlxcMDAwXFwyNDJcXDAwMFxcMjQyXFwwMDBcXDIzN1xcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI0NVxcMDAwXFwyNTVcXDI1NVxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcXG4gICAgXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXFxuICAgIFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFwyNDVcXDAwMFxcMjQ1XFwwMDBcXDI0NVxcMDAwXFxcbiAgICBcXDA2NlxcMDAxXFwwNjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMDc5XFwwMDFcXDA3OVxcMDAxXFwwNzlcXDAwMVxcXG4gICAgXFwwNzlcXDAwMVxcMDc5XFwwMDFcXDA3OVxcMDAxXFwwNzlcXDAwMVxcMDc5XFwwMDFcXDA3OVxcMDAxXFwwNzlcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA2NlxcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAxXFwwNjZcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDY2XFwwMDFcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMDY2XFwwMDFcXFxuICAgIFxcMDY2XFwwMDFcXDA2NlxcMDAxXFwwNjZcXDAwMVxcMDY2XFwwMDFcXDA2NlxcMDAxXFwwNjZcXDAwMVxcMDY2XFwwMDFcXDA2NlxcMDAxXFxcbiAgICBcXDA2NlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA2NlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjQyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDY2XFwwMDFcXDExMlxcMDAxXFwyNTVcXDI1NVxcMTEyXFwwMDFcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMTEyXFwwMDFcXDExMlxcMDAxXFxcbiAgICBcXDExMlxcMDAxXFwxMTJcXDAwMVxcMTEyXFwwMDFcXDExMlxcMDAxXFwxMTJcXDAwMVxcMTEyXFwwMDFcXDExMlxcMDAxXFwxMTJcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA2NlxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXFxuICAgIFxcMTE0XFwwMDFcXDExNFxcMDAxXFwxMTRcXDAwMVxcMTE0XFwwMDFcXDExNFxcMDAxXFwwNjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDY2XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwxMTRcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMTVcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMTE1XFwwMDFcXDI1NVxcMjU1XFwwNjZcXDAwMVxcMTE1XFwwMDFcXDExNVxcMDAxXFwxMTVcXDAwMVxcMTE1XFwwMDFcXDExNVxcMDAxXFxcbiAgICBcXDExNVxcMDAxXFwxMTVcXDAwMVxcMTE1XFwwMDFcXDExNVxcMDAxXFwxMTVcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcXG4gICAgXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMTE2XFwwMDFcXDExNlxcMDAxXFwxMTZcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMTE0XFwwMDFcXDExN1xcMDAxXFwxMTdcXDAwMVxcMTE3XFwwMDFcXDExN1xcMDAxXFwxMTdcXDAwMVxcMTE3XFwwMDFcXDExN1xcMDAxXFxcbiAgICBcXDExN1xcMDAxXFwxMTdcXDAwMVxcMTE3XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcXG4gICAgXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOFxcMDAxXFwxMThcXDAwMVxcMTE4XFwwMDFcXDExOVxcMDAxXFwxMTlcXDAwMVxcMTE5XFwwMDFcXFxuICAgIFxcMTE5XFwwMDFcXDExOVxcMDAxXFwxMTlcXDAwMVxcMTE5XFwwMDFcXDExOVxcMDAxXFwxMTlcXDAwMVxcMTE5XFwwMDFcXDI1NVxcMjU1XFxcbiAgICBcXDEyNlxcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcXG4gICAgXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEyNlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDEyOVxcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEyOVxcMDAxXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMTU1XFwwMDFcXDI1NVxcMjU1XFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXFxuICAgIFxcMTU1XFwwMDFcXDE1NVxcMDAxXFwxNTVcXDAwMVxcMTU1XFwwMDFcXDE1NVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcMTI3XFwwMDFcXDEyN1xcMDAxXFwxMjdcXDAwMVxcXG4gICAgXFwxNTVcXDAwMVxcMjU1XFwyNTVcXDEyNlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMTI2XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEyNlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEyOVxcMDAxXFwxMjZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNjZcXDAwMVxcXG4gICAgXFwxMjZcXDAwMVxcMTI5XFwwMDFcXDEyNlxcMDAxXFwxMjZcXDAwMVxcMjU1XFwyNTVcXDEyOVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMTU1XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMjlcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwxMjlcXDAwMVxcMjU1XFwyNTVcXDEyOVxcMDAxXFwxMjlcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcXG4gICAgXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTMwXFwwMDFcXDEzMFxcMDAxXFxcbiAgICBcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcXG4gICAgXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFxcbiAgICBcXDEzMVxcMDAxXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDEzMFxcMDAxXFwxMzBcXDAwMVxcXG4gICAgXFwxMzBcXDAwMVxcMTMwXFwwMDFcXDEzMFxcMDAxXFwxMzBcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFxcbiAgICBcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwyNTVcXDI1NVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzFcXDAwMVxcXG4gICAgXFwxMzFcXDAwMVxcMTMxXFwwMDFcXDEzMVxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXFxuICAgIFxcMTMyXFwwMDFcXDE4NFxcMDAxXFwxMzhcXDAwMVxcMTg0XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTg0XFwwMDFcXDE4NFxcMDAxXFxcbiAgICBcXDE4NFxcMDAxXFwxODRcXDAwMVxcMTg0XFwwMDFcXDE4NFxcMDAxXFwxODRcXDAwMVxcMTg0XFwwMDFcXDE4NFxcMDAxXFwxODRcXDAwMVxcXG4gICAgXFwxODVcXDAwMVxcMTg1XFwwMDFcXDE4NVxcMDAxXFwxODVcXDAwMVxcMTg1XFwwMDFcXDE4NVxcMDAxXFwxODVcXDAwMVxcMTg1XFwwMDFcXFxuICAgIFxcMTg1XFwwMDFcXDE4NVxcMDAxXFwyNTVcXDI1NVxcMTMyXFwwMDFcXDEzMlxcMDAxXFwxMzJcXDAwMVxcMTMyXFwwMDFcXDEzMlxcMDAxXFxcbiAgICBcXDEzMlxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcXG4gICAgXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXFxuICAgIFxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFxcbiAgICBcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxMzhcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXFxuICAgIFxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFxcbiAgICBcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxMzhcXDAwMVxcXG4gICAgXFwxMzhcXDAwMVxcMTM4XFwwMDFcXDEzOFxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE0MVxcMDAxXFwyNTVcXDI1NVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXFxuICAgIFxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFxcbiAgICBcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcXG4gICAgXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDFcXDAwMVxcMTQxXFwwMDFcXDE0MVxcMDAxXFwxNDNcXDAwMVxcMTQzXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMTU2XFwwMDFcXDE1NlxcMDAxXFwxNTZcXDAwMVxcMTU2XFwwMDFcXDE1NlxcMDAxXFxcbiAgICBcXDE1NlxcMDAxXFwxNTZcXDAwMVxcMTU2XFwwMDFcXDE1NlxcMDAxXFwxNTZcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTk4XFwwMDFcXDE0M1xcMDAxXFwyNTVcXDI1NVxcMTQzXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE1NlxcMDAxXFwxNDNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwxOThcXDAwMVxcMTQzXFwwMDFcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMTQzXFwwMDFcXDE0M1xcMDAxXFwxNDNcXDAwMVxcXG4gICAgXFwxNDNcXDAwMVxcMTQzXFwwMDFcXDE0M1xcMDAxXFwxNDNcXDAwMVxcMTQzXFwwMDFcXDE0M1xcMDAxXFwxNDNcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDE0M1xcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDEzOFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE0M1xcMDAxXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXFxuICAgIFxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTg2XFwwMDFcXDE4NlxcMDAxXFwxODZcXDAwMVxcMTk4XFwwMDFcXDI1NVxcMjU1XFxcbiAgICBcXDE0M1xcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxOThcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwxOThcXDAwMVxcMTg2XFwwMDFcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMTk4XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMTQzXFwwMDFcXDE5OFxcMDAxXFwyNTVcXDI1NVxcMTk4XFwwMDFcXDE5OFxcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwxNDNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE4N1xcMDAxXFwyNTVcXDI1NVxcMTg3XFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDE4NlxcMDAxXFwxODdcXDAwMVxcMTg3XFwwMDFcXDE4N1xcMDAxXFwxODdcXDAwMVxcMTg3XFwwMDFcXDE4N1xcMDAxXFxcbiAgICBcXDE4N1xcMDAxXFwxODdcXDAwMVxcMTg3XFwwMDFcXDE4N1xcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcXG4gICAgXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODhcXDAwMVxcMTg4XFwwMDFcXDE4OFxcMDAxXFwxODlcXDAwMVxcMTg5XFwwMDFcXFxuICAgIFxcMTg5XFwwMDFcXDE4OVxcMDAxXFwxODlcXDAwMVxcMTg5XFwwMDFcXDE4OVxcMDAxXFwxODlcXDAwMVxcMTg5XFwwMDFcXDE4OVxcMDAxXFxcbiAgICBcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MFxcMDAxXFwxOTBcXDAwMVxcXG4gICAgXFwxOTBcXDAwMVxcMTkwXFwwMDFcXDE5MVxcMDAxXFwxOTFcXDAwMVxcMTkxXFwwMDFcXDE5MVxcMDAxXFwxOTFcXDAwMVxcMTkxXFwwMDFcXFxuICAgIFxcMTkxXFwwMDFcXDE5MVxcMDAxXFwxOTFcXDAwMVxcMTkxXFwwMDFcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXDE5OVxcMDAxXFxcbiAgICBcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXDIwMVxcMDAxXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXFxuICAgIFxcMTk5XFwwMDFcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMjAxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxOTlcXDAwMVxcMTk5XFwwMDFcXDE5OVxcMDAxXFxcbiAgICBcXDE5OVxcMDAxXFwxOTlcXDAwMVxcMTk5XFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjAxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwxNDNcXDAwMVxcMjAxXFwwMDFcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjAxXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIwMVxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDFcXDAwMVxcMjU1XFwyNTVcXFxuICAgIFxcMjAxXFwwMDFcXDIwMVxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFxcbiAgICBcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXFxuICAgIFxcMjAyXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFxcbiAgICBcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjAyXFwwMDFcXDIwMlxcMDAxXFwyMDJcXDAwMVxcMjAyXFwwMDFcXDIwMlxcMDAxXFxcbiAgICBcXDIwMlxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyMDRcXDAwMVxcXG4gICAgXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXFxuICAgIFxcMjA0XFwwMDFcXDI1NVxcMjU1XFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFwyMDNcXDAwMVxcMjAzXFwwMDFcXDIwM1xcMDAxXFxcbiAgICBcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDI1NVxcMjU1XFwyMTBcXDAwMVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMDRcXDAwMVxcMjA0XFwwMDFcXDIwNFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXFxuICAgIFxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFxcbiAgICBcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcXG4gICAgXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIxMFxcMDAxXFwyNTVcXDI1NVxcMjEwXFwwMDFcXDIxMFxcMDAxXFxcbiAgICBcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcXG4gICAgXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXFxuICAgIFxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFwyMTBcXDAwMVxcMjEwXFwwMDFcXDIxMFxcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIxM1xcMDAxXFxcbiAgICBcXDI1NVxcMjU1XFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcXG4gICAgXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXFxuICAgIFxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDIxM1xcMDAxXFxcbiAgICBcXDIxM1xcMDAxXFwyMTNcXDAwMVxcMjEzXFwwMDFcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDIxMFxcMDAxXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYXNlX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0X2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF90cmFuc19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY2hlY2tfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NvZGUgPVxuICAgXCJcIjtcbn1cblxubGV0IHJlYyByZWFkX2pzb24gdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9qc29uX3JlYyB2IGxleGJ1ZiAwXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9qc29uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTcxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGBCb29sIHRydWUgKVxuIyAxMDEzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAxNzIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggYEJvb2wgZmFsc2UgKVxuIyAxMDE4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAxNzMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggYE51bGwgKVxuIyAxMDIzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyAxNzQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgYEZsb2F0IG5hblxuICAgICAgICAgICAgICAgIClcbiMgMTAzNCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDQgLT5cbiMgMTgxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIGBGbG9hdCBpbmZpbml0eVxuICAgICAgICAgICAgICAgIClcbiMgMTA0NSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDUgLT5cbiMgMTg4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIGBGbG9hdCBuZWdfaW5maW5pdHlcbiAgICAgICAgICAgICAgICApXG4jIDEwNTYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA2IC0+XG4jIDE5NSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICAgICAgIGBTdHJpbmcgKGZpbmlzaF9zdHJpbmcgdiBsZXhidWYpXG4gICAgICAgICAgICAgICAgKVxuIyAxMDY4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNyAtPlxuIyAyMDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggbWFrZV9wb3NpdGl2ZV9pbnQgdiBsZXhidWYgKVxuIyAxMDczIFwibGliL3JlYWQubWxcIlxuXG4gIHwgOCAtPlxuIyAyMDQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggbWFrZV9uZWdhdGl2ZV9pbnQgdiBsZXhidWYgKVxuIyAxMDc4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgOSAtPlxuIyAyMDUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgYEZsb2F0IChmbG9hdF9vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKSlcbiAgICAgICAgICAgICAgICAgKVxuIyAxMDg5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTAgLT5cbiMgMjEzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBsZXQgYWNjID0gcmVmIFtdIGluXG4gICAgICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgcmVhZF9vYmplY3RfZW5kIGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZF9uYW1lID0gcmVhZF9pZGVudCB2IGxleGJ1ZiBpblxuICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfY29sb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgYWNjIDo9IChmaWVsZF9uYW1lLCByZWFkX2pzb24gdiBsZXhidWYpIDo6ICFhY2M7XG4gICAgICAgICAgICAgICAgICAgICB3aGlsZSB0cnVlIGRvXG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb2JqZWN0X3NlcCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkX25hbWUgPSByZWFkX2lkZW50IHYgbGV4YnVmIGluXG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY29sb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGFjYyA6PSAoZmllbGRfbmFtZSwgcmVhZF9qc29uIHYgbGV4YnVmKSA6OiAhYWNjO1xuICAgICAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl9vYmplY3QgLT5cbiAgICAgICAgICAgICAgICAgICAgIGBBc3NvYyAoTGlzdC5yZXYgIWFjYylcbiAgICAgICAgICAgICAgICAgKVxuIyAxMTE2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTEgLT5cbiMgMjM3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBsZXQgYWNjID0gcmVmIFtdIGluXG4gICAgICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgcmVhZF9hcnJheV9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgYWNjIDo9IHJlYWRfanNvbiB2IGxleGJ1ZiA6OiAhYWNjO1xuICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FycmF5X3NlcCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgYWNjIDo9IHJlYWRfanNvbiB2IGxleGJ1ZiA6OiAhYWNjO1xuICAgICAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl9hcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgYExpc3QgKExpc3QucmV2ICFhY2MpXG4gICAgICAgICAgICAgICAgIClcbiMgMTEzNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEyIC0+XG4jIDI1MyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgIGxldCBhY2MgPSByZWYgW10gaW5cbiAgICAgICAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3R1cGxlX2VuZCBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2pzb24gdiBsZXhidWYgOjogIWFjYztcbiAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF90dXBsZV9zZXAgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICBhY2MgOj0gcmVhZF9qc29uIHYgbGV4YnVmIDo6ICFhY2M7XG4gICAgICAgICAgICAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX3R1cGxlIC0+XG4gICAgICAgICAgICAgICAgICAgICAgIGBUdXBsZSAoTGlzdC5yZXYgIWFjYylcbiAgICAgICAgICAgICAgICAgKVxuIyAxMTU5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTMgLT5cbiMgMjc0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGxldCBjb25zID0gcmVhZF9pZGVudCB2IGxleGJ1ZiBpblxuICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGBWYXJpYW50IChjb25zLCBmaW5pc2hfdmFyaWFudCB2IGxleGJ1ZilcbiAgICAgICAgICAgICAgICAgKVxuIyAxMTczIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTQgLT5cbiMgMjg1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCByZWFkX2pzb24gdiBsZXhidWYgKVxuIyAxMTc4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTUgLT5cbiMgMjg2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBmaW5pc2hfY29tbWVudCB2IGxleGJ1ZjsgcmVhZF9qc29uIHYgbGV4YnVmIClcbiMgMTE4MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDE2IC0+XG4jIDI4NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggbmV3bGluZSB2IGxleGJ1ZjsgcmVhZF9qc29uIHYgbGV4YnVmIClcbiMgMTE4OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDE3IC0+XG4jIDI4OCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggcmVhZF9qc29uIHYgbGV4YnVmIClcbiMgMTE5MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDE4IC0+XG4jIDI4OSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDExOTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxOSAtPlxuIyAyOTAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJJbnZhbGlkIHRva2VuXCIgdiBsZXhidWYgKVxuIyAxMjAzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2pzb25fcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCBmaW5pc2hfc3RyaW5nIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdHJpbmdfcmVjIHYgbGV4YnVmIDU4XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX3N0cmluZ19yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDI5NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAoIEJ1ZmZlci5jb250ZW50cyB2LmJ1ZiApXG4jIDEyMTUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDI5NSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAoIGZpbmlzaF9lc2NhcGVkX2NoYXIgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaF9zdHJpbmcgdiBsZXhidWYgKVxuIyAxMjIxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAyOTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgKCBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoX3N0cmluZyB2IGxleGJ1ZiApXG4jIDEyMjcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDI5OSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxMjMyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9maW5pc2hfc3RyaW5nX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgbWFwX3N0cmluZyB2IGYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X21hcF9zdHJpbmdfcmVjIHYgZiBsZXhidWYgNjNcbmFuZCBfX29jYW1sX2xleF9tYXBfc3RyaW5nX3JlYyB2IGYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAzMDIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgKCBsZXQgYiA9IHYuYnVmIGluXG4gICAgICAgICAgICAgICAgICAgIGYgKEJ1ZmZlci5jb250ZW50cyBiKSAwIChCdWZmZXIubGVuZ3RoIGIpIClcbiMgMTI0NSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgMzA0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICggZmluaXNoX2VzY2FwZWRfY2hhciB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgbWFwX3N0cmluZyB2IGYgbGV4YnVmIClcbiMgMTI1MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzA2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICggYWRkX2xleGVtZSB2LmJ1ZiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgIG1hcF9zdHJpbmcgdiBmIGxleGJ1ZiApXG4jIDEyNTcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDMwOCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxMjYyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9tYXBfc3RyaW5nX3JlYyB2IGYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCBmaW5pc2hfZXNjYXBlZF9jaGFyIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9lc2NhcGVkX2NoYXJfcmVjIHYgbGV4YnVmIDY4XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX2VzY2FwZWRfY2hhcl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG5sZXRcbiMgMzEzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgY1xuIyAxMjc1IFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiBsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgaW5cbiMgMzEzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiBjIClcbiMgMTI3OSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgMzE0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICdcXGInIClcbiMgMTI4NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzE1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICdcXDAxMicgKVxuIyAxMjg5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyAzMTYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ1xcbicgKVxuIyAxMjk0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyAzMTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ1xccicgKVxuIyAxMjk5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNSAtPlxuIyAzMTggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ1xcdCcgKVxuIyAxMzA0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNiAtPlxubGV0XG4jIDMxOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgYVxuIyAxMzEwIFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMSlcbmFuZFxuIyAzMTkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYlxuIyAxMzE1IFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMilcbmFuZFxuIyAzMTkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjXG4jIDEzMjAgXCJsaWIvcmVhZC5tbFwiXG49IExleGluZy5zdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIChsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgKyAzKVxuYW5kXG4jIDMxOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFxuIyAxMzI1IFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgNCkgaW5cbiMgMzIwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbGV0IHggPVxuICAgICAgICAgICAgIChoZXggYSBsc2wgMTIpIGxvciAoaGV4IGIgbHNsIDgpIGxvciAoaGV4IGMgbHNsIDQpIGxvciBoZXggZFxuICAgICAgICAgICBpblxuICAgICAgICAgICBpZiB4ID49IDB4RDgwMCAmJiB4IDw9IDB4REJGRiB0aGVuXG4gICAgICAgICAgICAgZmluaXNoX3N1cnJvZ2F0ZV9wYWlyIHYgeCBsZXhidWZcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIENvZGVjLnV0Zjhfb2ZfY29kZSB2LmJ1ZiB4XG5cbiAgICAgICAgIClcbiMgMTMzNyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDcgLT5cbiMgMzI5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbG9uZ19lcnJvciBcIkludmFsaWQgZXNjYXBlIHNlcXVlbmNlXCIgdiBsZXhidWYgKVxuIyAxMzQyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgOCAtPlxuIyAzMzAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTM0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX2VzY2FwZWRfY2hhcl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGZpbmlzaF9zdXJyb2dhdGVfcGFpciB2IHggbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdXJyb2dhdGVfcGFpcl9yZWMgdiB4IGxleGJ1ZiA4MlxuYW5kIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdXJyb2dhdGVfcGFpcl9yZWMgdiB4IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbmxldFxuIyAzMzMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgYVxuIyAxMzYwIFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMilcbmFuZFxuIyAzMzMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiXG4jIDEzNjUgXCJsaWIvcmVhZC5tbFwiXG49IExleGluZy5zdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIChsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgKyAzKVxuYW5kXG4jIDMzMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1xuIyAxMzcwIFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgNClcbmFuZFxuIyAzMzMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFxuIyAxMzc1IFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgNSkgaW5cbiMgMzM0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbGV0IHkgPVxuICAgICAgICAgICAgIChoZXggYSBsc2wgMTIpIGxvciAoaGV4IGIgbHNsIDgpIGxvciAoaGV4IGMgbHNsIDQpIGxvciBoZXggZFxuICAgICAgICAgICBpblxuICAgICAgICAgICBpZiB5ID49IDB4REMwMCAmJiB5IDw9IDB4REZGRiB0aGVuXG4gICAgICAgICAgICAgQ29kZWMudXRmOF9vZl9zdXJyb2dhdGVfcGFpciB2LmJ1ZiB4IHlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGxvbmdfZXJyb3IgXCJJbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRlwiXG4gICAgICAgICAgICAgICB2IGxleGJ1ZlxuICAgICAgICAgKVxuIyAxMzg3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAzNDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiTWlzc2luZyBlc2NhcGUgc2VxdWVuY2UgcmVwcmVzZW50aW5nIGxvdyBzdXJyb2dhdGUgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRlwiIHYgbGV4YnVmIClcbiMgMTM5MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzQ1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDEzOTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdXJyb2dhdGVfcGFpcl9yZWMgdiB4IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX3N0cmluZ2xpdCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9maW5pc2hfc3RyaW5nbGl0X3JlYyB2IGxleGJ1ZiA5MVxuYW5kIF9fb2NhbWxfbGV4X2ZpbmlzaF9zdHJpbmdsaXRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAzNTAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsZXQgbGVuID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gICAgICAgICAgIGxldCBzID0gQnl0ZXMuY3JlYXRlIChsZW4rMSkgaW5cbiAgICAgICAgICAgQnl0ZXMuc2V0IHMgMCAnXCInO1xuICAgICAgICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIHMgMSBsZW47XG4gICAgICAgICAgIEJ5dGVzLnRvX3N0cmluZyBzXG4gICAgICAgICApXG4jIDE0MTUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDM1NiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGxvbmdfZXJyb3IgXCJJbnZhbGlkIHN0cmluZyBsaXRlcmFsXCIgdiBsZXhidWYgKVxuIyAxNDIwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAzNTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTQyNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX3N0cmluZ2xpdF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGZpbmlzaF92YXJpYW50IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF92YXJpYW50X3JlYyB2IGxleGJ1ZiAxMDJcbmFuZCBfX29jYW1sX2xleF9maW5pc2hfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDM2MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGxldCB4ID0gcmVhZF9qc29uIHYgbGV4YnVmIGluXG4gICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgIHJlYWRfZ3QgdiBsZXhidWY7XG4gICAgICAgICAgIFNvbWUgeCApXG4jIDE0NDAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDM2NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIE5vbmUgKVxuIyAxNDQ1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAzNjUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJzonIG9yICc+JyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDE0NTAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDM2NiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNDU1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9maW5pc2hfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfbHQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9sdF9yZWMgdiBsZXhidWYgMTA3XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9sdF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDM2OSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDE0NjcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDM3MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJzwnIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTQ3MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzcxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNDc3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2x0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9ndCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2d0X3JlYyB2IGxleGJ1ZiAxMTFcbmFuZCBfX29jYW1sX2xleF9yZWFkX2d0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMzc0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggKCkgKVxuIyAxNDg5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAzNzUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJz4nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTQ5NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMzc2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE0OTkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfZ3RfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2NvbW1hIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWFfcmVjIHYgbGV4YnVmIDExNVxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfY29tbWFfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAzNzkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCAoKSApXG4jIDE1MTEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDM4MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxNTE2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAzODEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTUyMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9jb21tYV9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHN0YXJ0X2FueV92YXJpYW50IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3N0YXJ0X2FueV92YXJpYW50X3JlYyB2IGxleGJ1ZiAxMTlcbmFuZCBfX29jYW1sX2xleF9zdGFydF9hbnlfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDM4NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBgRWRneV9icmFja2V0IClcbiMgMTUzMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgMzg1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIEJ1ZmZlci5jbGVhciB2LmJ1ZjtcbiAgICAgICAgICAgICAgIGBEb3VibGVfcXVvdGUgKVxuIyAxNTM5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyAzODcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggYFNxdWFyZV9icmFja2V0IClcbiMgMTU0NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgMzg4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnPCcsICdcXFwiJyBvciAnWycgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxNTQ5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyAzODkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE1NTQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3N0YXJ0X2FueV92YXJpYW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX2NvbW1lbnQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfZmluaXNoX2NvbW1lbnRfcmVjIHYgbGV4YnVmIDEyNVxuYW5kIF9fb2NhbWxfbGV4X2ZpbmlzaF9jb21tZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMzkyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggKCkgKVxuIyAxNTY2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAzOTMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiVW50ZXJtaW5hdGVkIGNvbW1lbnRcIiB2IGxleGJ1ZiApXG4jIDE1NzEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDM5NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIG5ld2xpbmUgdiBsZXhidWY7IGZpbmlzaF9jb21tZW50IHYgbGV4YnVmIClcbiMgMTU3NiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgMzk1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggZmluaXNoX2NvbW1lbnQgdiBsZXhidWYgKVxuIyAxNTgxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9maW5pc2hfY29tbWVudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfZW9mIGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2VvZl9yZWMgbGV4YnVmIDEzMVxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfZW9mX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDQwMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICggdHJ1ZSApXG4jIDE1OTMgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDQwNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICggZmFsc2UgKVxuIyAxNTk4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2VvZl9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX3NwYWNlIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfc3BhY2VfcmVjIHYgbGV4YnVmIDEzM1xuYW5kIF9fb2NhbWxfbGV4X3JlYWRfc3BhY2VfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA0MDcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG5ld2xpbmUgdiBsZXhidWY7IHJlYWRfc3BhY2UgdiBsZXhidWYgKVxuIyAxNjEwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA0MDggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGZpbmlzaF9jb21tZW50IHYgbGV4YnVmOyByZWFkX3NwYWNlIHYgbGV4YnVmIClcbiMgMTYxNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNDA5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBuZXdsaW5lIHYgbGV4YnVmOyByZWFkX3NwYWNlIHYgbGV4YnVmIClcbiMgMTYyMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNDEwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCByZWFkX3NwYWNlIHYgbGV4YnVmIClcbiMgMTYyNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDQgLT5cbiMgNDExIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoKSApXG4jIDE2MzAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfc3BhY2VfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX251bGwgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9udWxsX3JlYyB2IGxleGJ1ZiAxNDBcbmFuZCBfX29jYW1sX2xleF9yZWFkX251bGxfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA0MTQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAoICgpIClcbiMgMTY0MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNDE1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ251bGwnIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTY0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNDE2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTY1MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9udWxsX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9udWxsX2lmX3Bvc3NpYmxlIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfbnVsbF9pZl9wb3NzaWJsZV9yZWMgdiBsZXhidWYgMTQ3XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9udWxsX2lmX3Bvc3NpYmxlX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNDE5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgKCB0cnVlIClcbiMgMTY2NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNDIwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgKCBmYWxzZSApXG4jIDE2NjkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfbnVsbF9pZl9wb3NzaWJsZV9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfYm9vbCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2Jvb2xfcmVjIHYgbGV4YnVmIDE1MlxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfYm9vbF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDQyMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCB0cnVlIClcbiMgMTY4MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNDI0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGZhbHNlIClcbiMgMTY4NiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNDI3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIHRydWUgKVxuIyAxNjkxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA0MjggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggZmFsc2UgKVxuIyAxNjk2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyA0MzAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTcwMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDUgLT5cbiMgNDMxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNzA2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2Jvb2xfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2ludCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2ludF9yZWMgdiBsZXhidWYgMTc2XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9pbnRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA0MzQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggdHJ5IGV4dHJhY3RfcG9zaXRpdmVfaW50IGxleGJ1ZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBJbnRfb3ZlcmZsb3cgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4ZXJfZXJyb3IgXCJJbnQgb3ZlcmZsb3dcIiB2IGxleGJ1ZiApXG4jIDE3MjAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDQzNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCB0cnkgZXh0cmFjdF9uZWdhdGl2ZV9pbnQgbGV4YnVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEludF9vdmVyZmxvdyAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhlcl9lcnJvciBcIkludCBvdmVyZmxvd1wiIHYgbGV4YnVmIClcbiMgMTcyNyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNDQwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoICgqIFN1cHBvcnQgZm9yIGRvdWJsZS1xdW90ZWQgXCJpbnRzXCIgKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlci5jbGVhciB2LmJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzID0gZmluaXNoX3N0cmluZyB2IGxleGJ1ZiBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEFueSBPQ2FtbC1jb21wbGlhbnQgaW50IHdpbGwgcGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbWJlZGRlZCB1bmRlcnNjb3JlcyAqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRfb2Zfc3RyaW5nIHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21fZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGFuIGludGVnZXIgYnV0IGZvdW5kIGEgc3RyaW5nIHRoYXQgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc24ndCBldmVuIHJlcHJlc2VudCBhbiBpbnRlZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2IGxleGJ1ZlxuICAgICAgICAgICAgICAgICAgICAgICAgIClcbiMgMTc0NSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNDU0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCBpbnRlZ2VyIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTc1MCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDQgLT5cbiMgNDU1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNzU1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2ludF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfaW50MzIgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9pbnQzMl9yZWMgdiBsZXhidWYgMTg1XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9pbnQzMl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDQ1OCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCB0cnkgSW50MzIub2Zfc3RyaW5nIChMZXhpbmcubGV4ZW1lIGxleGJ1ZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhlcl9lcnJvciBcIkludDMyIG92ZXJmbG93XCIgdiBsZXhidWYgKVxuIyAxNzY5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA0NjEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggKCogU3VwcG9ydCBmb3IgZG91YmxlLXF1b3RlZCBcImludHNcIiAqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmNsZWFyIHYuYnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHMgPSBmaW5pc2hfc3RyaW5nIHYgbGV4YnVmIGluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQW55IE9DYW1sLWNvbXBsaWFudCBpbnQgd2lsbCBwYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIG5vdGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVtYmVkZGVkIHVuZGVyc2NvcmVzICopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludDMyLm9mX3N0cmluZyBzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIF8gLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tX2Vycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBhbiBpbnQzMiBidXQgZm91bmQgYSBzdHJpbmcgdGhhdCBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2Vzbid0IGV2ZW4gcmVwcmVzZW50IGFuIGludGVnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgbGV4YnVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgKVxuIyAxNzg3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA0NzUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkIGludDMyIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTc5MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNDc2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxNzk3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2ludDMyX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9pbnQ2NCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2ludDY0X3JlYyB2IGxleGJ1ZiAxOTJcbmFuZCBfX29jYW1sX2xleF9yZWFkX2ludDY0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNDc5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIHRyeSBJbnQ2NC5vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleGVyX2Vycm9yIFwiSW50MzIgb3ZlcmZsb3dcIiB2IGxleGJ1ZiApXG4jIDE4MTEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDQ4MiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCAoKiBTdXBwb3J0IGZvciBkb3VibGUtcXVvdGVkIFwiaW50c1wiICopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcyA9IGZpbmlzaF9zdHJpbmcgdiBsZXhidWYgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBBbnkgT0NhbWwtY29tcGxpYW50IGludCB3aWxsIHBhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyBoZXhhZGVjaW1hbCBhbmQgb2N0YWwgbm90YXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZW1iZWRkZWQgdW5kZXJzY29yZXMgKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50NjQub2Zfc3RyaW5nIHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21fZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGFuIGludDY0IGJ1dCBmb3VuZCBhIHN0cmluZyB0aGF0IFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNuJ3QgZXZlbiByZXByZXNlbnQgYW4gaW50ZWdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiBsZXhidWZcbiAgICAgICAgICAgICAgICAgICAgICAgICApXG4jIDE4MjkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDQ5NiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgaW50NjQgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxODM0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA0OTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE4MzkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfaW50NjRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX251bWJlciB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX251bWJlcl9yZWMgdiBsZXhidWYgMTk5XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9udW1iZXJfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA1MDAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICggbmFuIClcbiMgMTg1MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNTAxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGluZmluaXR5IClcbiMgMTg1NiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNTAyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIG5lZ19pbmZpbml0eSApXG4jIDE4NjEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDUwMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCBmbG9hdF9vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKSApXG4jIDE4NjYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA0IC0+XG4jIDUwNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICAgICBsZXQgcyA9IGZpbmlzaF9zdHJpbmcgdiBsZXhidWYgaW5cbiAgICAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICAgICAoKiBBbnkgT0NhbWwtY29tcGxpYW50IGZsb2F0IHdpbGwgcGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbWJlZGRlZCB1bmRlcnNjb3Jlcy4gKilcbiAgICAgICAgICAgICAgICAgICAgZmxvYXRfb2Zfc3RyaW5nIHNcbiAgICAgICAgICAgICAgICAgIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTmFOXCIgLT4gbmFuXG4gICAgICAgICAgICAgICAgICAgICAgfCBcIkluZmluaXR5XCIgLT4gaW5maW5pdHlcbiAgICAgICAgICAgICAgICAgICAgICB8IFwiLUluZmluaXR5XCIgLT4gbmVnX2luZmluaXR5XG4gICAgICAgICAgICAgICAgICAgICAgfCBfIC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbV9lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSBudW1iZXIgYnV0IGZvdW5kIGEgc3RyaW5nIHRoYXQgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc24ndCBldmVuIHJlcHJlc2VudCBhIG51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdiBsZXhidWZcbiAgICAgICAgICAgICAgICApXG4jIDE4ODggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA1IC0+XG4jIDUyMiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgbnVtYmVyIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMTg5MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDYgLT5cbiMgNTIzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAxODk4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX251bWJlcl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfc3RyaW5nIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfc3RyaW5nX3JlYyB2IGxleGJ1ZiAyMzNcbmFuZCBfX29jYW1sX2xleF9yZWFkX3N0cmluZ19yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDUyNiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICBmaW5pc2hfc3RyaW5nIHYgbGV4YnVmIClcbiMgMTkxMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNTI4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnXFxcIicgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxOTE2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA1MjkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE5MjEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfc3RyaW5nX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9pZGVudCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2lkZW50X3JlYyB2IGxleGJ1ZiAyMzdcbmFuZCBfX29jYW1sX2xleF9yZWFkX2lkZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNTMyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIEJ1ZmZlci5jbGVhciB2LmJ1ZjtcbiAgICAgICAgICAgICAgIGZpbmlzaF9zdHJpbmcgdiBsZXhidWYgKVxuIyAxOTM0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxubGV0XG4jIDUzNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgc1xuIyAxOTQwIFwibGliL3JlYWQubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZSBsZXhidWYgbGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zIGxleGJ1Zi5MZXhpbmcubGV4X2N1cnJfcG9zIGluXG4jIDUzNSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBzIClcbiMgMTk0NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNTM2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCBzdHJpbmcgb3IgaWRlbnRpZmllciBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDE5NDkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDUzNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMTk1NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9pZGVudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIG1hcF9pZGVudCB2IGYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X21hcF9pZGVudF9yZWMgdiBmIGxleGJ1ZiAyNDJcbmFuZCBfX29jYW1sX2xleF9tYXBfaWRlbnRfcmVjIHYgZiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU0MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuY2xlYXIgdi5idWY7XG4gICAgICAgICAgICAgICBtYXBfc3RyaW5nIHYgZiBsZXhidWYgKVxuIyAxOTY3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA1NDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbWFwX2xleGVtZSBmIGxleGJ1ZiApXG4jIDE5NzIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDU0NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgc3RyaW5nIG9yIGlkZW50aWZpZXIgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAxOTc3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA1NDUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDE5ODIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X21hcF9pZGVudF9yZWMgdiBmIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9zZXF1ZW5jZSByZWFkX2NlbGwgaW5pdF9hY2MgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9zZXF1ZW5jZV9yZWMgcmVhZF9jZWxsIGluaXRfYWNjIHYgbGV4YnVmIDI0N1xuYW5kIF9fb2NhbWxfbGV4X3JlYWRfc2VxdWVuY2VfcmVjIHJlYWRfY2VsbCBpbml0X2FjYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNTQ4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxldCBhY2MgPSByZWYgaW5pdF9hY2MgaW5cbiAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICByZWFkX2FycmF5X2VuZCBsZXhidWY7XG4gICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2NlbGwgIWFjYyB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgcmVhZF9hcnJheV9zZXAgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICBhY2MgOj0gcmVhZF9jZWxsICFhY2MgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX2FycmF5IC0+XG4gICAgICAgICAgICAgICAgICFhY2NcbiAgICAgICAgICAgICApXG4jIDIwMDggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDU2MyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ1snIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjAxMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNTY0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMDE4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3NlcXVlbmNlX3JlYyByZWFkX2NlbGwgaW5pdF9hY2MgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfbGlzdF9yZXYgcmVhZF9jZWxsIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfbGlzdF9yZXZfcmVjIHJlYWRfY2VsbCB2IGxleGJ1ZiAyNTFcbmFuZCBfX29jYW1sX2xleF9yZWFkX2xpc3RfcmV2X3JlYyByZWFkX2NlbGwgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU2NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsZXQgYWNjID0gcmVmIFtdIGluXG4gICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgcmVhZF9hcnJheV9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICBhY2MgOj0gcmVhZF9jZWxsIHYgbGV4YnVmIDo6ICFhY2M7XG4gICAgICAgICAgICAgICAgIHdoaWxlIHRydWUgZG9cbiAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIHJlYWRfYXJyYXlfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgYWNjIDo9IHJlYWRfY2VsbCB2IGxleGJ1ZiA6OiAhYWNjO1xuICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl9hcnJheSAtPlxuICAgICAgICAgICAgICAgICAhYWNjXG4gICAgICAgICAgICAgKVxuIyAyMDQ0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA1ODIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICdbJyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDIwNDkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDU4MyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjA1NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9saXN0X3Jldl9yZWMgcmVhZF9jZWxsIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2FycmF5X2VuZCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9hcnJheV9lbmRfcmVjIGxleGJ1ZiAyNTVcbmFuZCBfX29jYW1sX2xleF9yZWFkX2FycmF5X2VuZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA1ODYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggcmFpc2UgQ29tbW9uLkVuZF9vZl9hcnJheSApXG4jIDIwNjYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDU4NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDIwNzEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfYXJyYXlfZW5kX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfYXJyYXlfc2VwIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfYXJyYXlfc2VwX3JlYyB2IGxleGJ1ZiAyNTdcbmFuZCBfX29jYW1sX2xleF9yZWFkX2FycmF5X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU5MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDIwODMgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDU5MSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCByYWlzZSBDb21tb24uRW5kX29mX2FycmF5IClcbiMgMjA4OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNTkyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJ10nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjA5MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNTkzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMDk4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2FycmF5X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfdHVwbGUgcmVhZF9jZWxsIGluaXRfYWNjIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfcmVjIHJlYWRfY2VsbCBpbml0X2FjYyB2IGxleGJ1ZiAyNjJcbmFuZCBfX29jYW1sX2xleF9yZWFkX3R1cGxlX3JlYyByZWFkX2NlbGwgaW5pdF9hY2MgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU5NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgICAgICAgICAgICAgICAgICAgbGV0IGFjYyA9IHJlZiBpbml0X2FjYyBpblxuICAgICAgICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfdHVwbGVfZW5kIGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgYWNjIDo9IHJlYWRfY2VsbCAhcG9zICFhY2MgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGluY3IgcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSB0cnVlIGRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3R1cGxlX3NlcCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2NlbGwgIXBvcyAhYWNjIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIGluY3IgcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl90dXBsZSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAhYWNjXG4gICAgICAgICAgICAgICAgIClcbiMgMjEzMiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNjIwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnKScgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyMTM3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA2MjEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDIxNDIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfcmVjIHJlYWRfY2VsbCBpbml0X2FjYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF90dXBsZV9lbmQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfZW5kX3JlYyBsZXhidWYgMjY2XG5hbmQgX19vY2FtbF9sZXhfcmVhZF90dXBsZV9lbmRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNjI0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIHJhaXNlIENvbW1vbi5FbmRfb2ZfdHVwbGUgKVxuIyAyMTU0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA2MjUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMTU5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3R1cGxlX2VuZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX3R1cGxlX2VuZDIgdiBzdGQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfZW5kMl9yZWMgdiBzdGQgbGV4YnVmIDI2OFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfZW5kMl9yZWMgdiBzdGQgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA2MjggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggaWYgc3RkIHRoZW5cbiAgICAgICAgICAgICAgICAgbG9uZ19lcnJvciBcIkV4cGVjdGVkICcpJyBvciAnJyBidXQgZm91bmRcIiB2IGxleGJ1ZlxuICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICByYWlzZSBDb21tb24uRW5kX29mX3R1cGxlIClcbiMgMjE3NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNjMyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGlmIHN0ZCB0aGVuXG4gICAgICAgICAgICAgICAgIHJhaXNlIENvbW1vbi5FbmRfb2ZfdHVwbGVcbiAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgbG9uZ19lcnJvciBcIkV4cGVjdGVkICddJyBvciAnJyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDIxODIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDYzNiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDIxODcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfZW5kMl9yZWMgdiBzdGQgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX3R1cGxlX3NlcCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX3R1cGxlX3NlcF9yZWMgdiBsZXhidWYgMjcxXG5hbmQgX19vY2FtbF9sZXhfcmVhZF90dXBsZV9zZXBfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA2MzkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMTk5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA2NDAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggcmFpc2UgQ29tbW9uLkVuZF9vZl90dXBsZSApXG4jIDIyMDQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDY0MSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJywnIG9yICcpJyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDIyMDkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDY0MiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjIxNCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF90dXBsZV9zZXBfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX3R1cGxlX3NlcDIgdiBzdGQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfc2VwMl9yZWMgdiBzdGQgbGV4YnVmIDI3NlxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfdHVwbGVfc2VwMl9yZWMgdiBzdGQgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA2NDUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMjI2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA2NDYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggaWYgc3RkIHRoZW5cbiAgICAgICAgICAgICAgICAgbG9uZ19lcnJvciBcIkV4cGVjdGVkICcsJyBvciAnXScgYnV0IGZvdW5kXCIgdiBsZXhidWZcbiAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgcmFpc2UgQ29tbW9uLkVuZF9vZl90dXBsZSApXG4jIDIyMzQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDY1MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBpZiBzdGQgdGhlblxuICAgICAgICAgICAgICAgICByYWlzZSBDb21tb24uRW5kX29mX3R1cGxlXG4gICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJyknIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjI0MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNjU0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJyknIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjI0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDQgLT5cbiMgNjU1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMjUyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3R1cGxlX3NlcDJfcmVjIHYgc3RkIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9hYnN0cmFjdF9maWVsZHMgcmVhZF9rZXkgcmVhZF9maWVsZCBpbml0X2FjYyB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2Fic3RyYWN0X2ZpZWxkc19yZWMgcmVhZF9rZXkgcmVhZF9maWVsZCBpbml0X2FjYyB2IGxleGJ1ZiAyODJcbmFuZCBfX29jYW1sX2xleF9yZWFkX2Fic3RyYWN0X2ZpZWxkc19yZWMgcmVhZF9rZXkgcmVhZF9maWVsZCBpbml0X2FjYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNjU5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxldCBhY2MgPSByZWYgaW5pdF9hY2MgaW5cbiAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICByZWFkX29iamVjdF9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICBsZXQgZmllbGRfbmFtZSA9IHJlYWRfa2V5IHYgbGV4YnVmIGluXG4gICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgIHJlYWRfY29sb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2ZpZWxkICFhY2MgZmllbGRfbmFtZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgcmVhZF9vYmplY3Rfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkX25hbWUgPSByZWFkX2tleSB2IGxleGJ1ZiBpblxuICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgcmVhZF9jb2xvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIGFjYyA6PSByZWFkX2ZpZWxkICFhY2MgZmllbGRfbmFtZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICB3aXRoIENvbW1vbi5FbmRfb2Zfb2JqZWN0IC0+XG4gICAgICAgICAgICAgICAgICFhY2NcbiAgICAgICAgICAgICApXG4jIDIyODYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDY4MiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ3snIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjI5MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNjgzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMjk2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2Fic3RyYWN0X2ZpZWxkc19yZWMgcmVhZF9rZXkgcmVhZF9maWVsZCBpbml0X2FjYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9sY3VybCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2xjdXJsX3JlYyB2IGxleGJ1ZiAyODZcbmFuZCBfX29jYW1sX2xleF9yZWFkX2xjdXJsX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNjg2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMjMwOCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNjg3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAneycgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyMzEzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA2ODggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDIzMTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfbGN1cmxfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX29iamVjdF9lbmQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfb2JqZWN0X2VuZF9yZWMgbGV4YnVmIDI5MFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfb2JqZWN0X2VuZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA2OTEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggcmFpc2UgQ29tbW9uLkVuZF9vZl9vYmplY3QgKVxuIyAyMzMwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA2OTIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMzM1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX29iamVjdF9lbmRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9vYmplY3Rfc2VwIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfb2JqZWN0X3NlcF9yZWMgdiBsZXhidWYgMjkyXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9vYmplY3Rfc2VwX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNjk1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMjM0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNjk2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIHJhaXNlIENvbW1vbi5FbmRfb2Zfb2JqZWN0IClcbiMgMjM1MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNjk3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJ30nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjM1NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNjk4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyMzYyIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX29iamVjdF9zZXBfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2NvbG9uIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfY29sb25fcmVjIHYgbGV4YnVmIDI5N1xuYW5kIF9fb2NhbWxfbGV4X3JlYWRfY29sb25fcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA3MDEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyMzc0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA3MDIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICc6JyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDIzNzkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDcwMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjM4NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9jb2xvbl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHN0YXJ0X2FueV90dXBsZSB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9zdGFydF9hbnlfdHVwbGVfcmVjIHYgbGV4YnVmIDMwMVxuYW5kIF9fb2NhbWxfbGV4X3N0YXJ0X2FueV90dXBsZV9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDcwNiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBmYWxzZSApXG4jIDIzOTYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDcwNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCB0cnVlIClcbiMgMjQwMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNzA4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnKCcgb3IgJ1snIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjQwNiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgNzA5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNDExIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9zdGFydF9hbnlfdHVwbGVfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2xwYXIgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9scGFyX3JlYyB2IGxleGJ1ZiAzMDZcbmFuZCBfX29jYW1sX2xleF9yZWFkX2xwYXJfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA3MTIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyNDIzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA3MTMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICcoJyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDI0MjggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDcxNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjQzMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9scGFyX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9ycGFyIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfcnBhcl9yZWMgdiBsZXhidWYgMzEwXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9ycGFyX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNzE3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMjQ0NSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgNzE4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnKScgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyNDUwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA3MTkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDI0NTUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfcnBhcl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfbGJyIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfbGJyX3JlYyB2IGxleGJ1ZiAzMTRcbmFuZCBfX29jYW1sX2xleF9yZWFkX2xicl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDcyMiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDI0NjcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDcyMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ1snIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjQ3MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNzI0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNDc3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2xicl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfcmJyIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfcmJyX3JlYyB2IGxleGJ1ZiAzMThcbmFuZCBfX29jYW1sX2xleF9yZWFkX3Jicl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDcyNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCAoKSApXG4jIDI0ODkgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDcyOCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJ10nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjQ5NCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgNzI5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNDk5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3Jicl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHNraXBfanNvbiB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9za2lwX2pzb25fcmVjIHYgbGV4YnVmIDMyMlxuYW5kIF9fb2NhbWxfbGV4X3NraXBfanNvbl9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDczNSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MTEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDczNiBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MTYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDczNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MjEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDczOCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MjYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA0IC0+XG4jIDczOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MzEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA1IC0+XG4jIDc0MCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCAoKSApXG4jIDI1MzYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCA2IC0+XG4jIDc0MSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgKCBmaW5pc2hfc2tpcF9zdHJpbmdsaXQgdiBsZXhidWYgKVxuIyAyNTQxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgNyAtPlxuIyA3NDIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoICgpIClcbiMgMjU0NiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDggLT5cbiMgNzQzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoICgpIClcbiMgMjU1MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDkgLT5cbiMgNzQ1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCB0cnlcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICByZWFkX29iamVjdF9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgc2tpcF9pZGVudCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICByZWFkX2NvbG9uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHNraXBfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRydWUgZG9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9vYmplY3Rfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBza2lwX2lkZW50IHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NvbG9uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBza2lwX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX29iamVjdCAtPlxuICAgICAgICAgICAgICAgICAgICAgKClcbiAgICAgICAgICAgICAgICAgKVxuIyAyNTc3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTAgLT5cbiMgNzY4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCB0cnlcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICByZWFkX2FycmF5X2VuZCBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBza2lwX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICB3aGlsZSB0cnVlIGRvXG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYXJyYXlfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBza2lwX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX2FycmF5IC0+XG4gICAgICAgICAgICAgICAgICAgICAoKVxuICAgICAgICAgICAgICAgICApXG4jIDI1OTUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxMSAtPlxuIyA3ODMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgcmVhZF90dXBsZV9lbmQgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBza2lwX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRydWUgZG9cbiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfdHVwbGVfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9qc29uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl90dXBsZSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAoKVxuICAgICAgICAgICAgICAgICApXG4jIDI2MTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxMiAtPlxuIyA4MDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgc2tpcF9pZGVudCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBmaW5pc2hfc2tpcF92YXJpYW50IHYgbGV4YnVmXG4gICAgICAgICAgICAgICAgIClcbiMgMjYzMiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEzIC0+XG4jIDgxNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggc2tpcF9qc29uIHYgbGV4YnVmIClcbiMgMjYzNyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDE0IC0+XG4jIDgxNSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggZmluaXNoX2NvbW1lbnQgdiBsZXhidWY7IHNraXBfanNvbiB2IGxleGJ1ZiApXG4jIDI2NDIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxNSAtPlxuIyA4MTYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIG5ld2xpbmUgdiBsZXhidWY7IHNraXBfanNvbiB2IGxleGJ1ZiApXG4jIDI2NDcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxNiAtPlxuIyA4MTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIHNraXBfanNvbiB2IGxleGJ1ZiApXG4jIDI2NTIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxNyAtPlxuIyA4MTggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNjU3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTggLT5cbiMgODE5IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiSW52YWxpZCB0b2tlblwiIHYgbGV4YnVmIClcbiMgMjY2MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfc2tpcF9qc29uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX3NraXBfc3RyaW5nbGl0IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9za2lwX3N0cmluZ2xpdF9yZWMgdiBsZXhidWYgMzc4XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX3NraXBfc3RyaW5nbGl0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgODI1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggKCkgKVxuIyAyNjc0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA4MjYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiSW52YWxpZCBzdHJpbmcgbGl0ZXJhbFwiIHYgbGV4YnVmIClcbiMgMjY3OSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgODI3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggY3VzdG9tX2Vycm9yIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIiB2IGxleGJ1ZiApXG4jIDI2ODQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9za2lwX3N0cmluZ2xpdF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGZpbmlzaF9za2lwX3ZhcmlhbnQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfZmluaXNoX3NraXBfdmFyaWFudF9yZWMgdiBsZXhidWYgMzg5XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX3NraXBfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDgzMCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIHNraXBfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgcmVhZF9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgcmVhZF9ndCB2IGxleGJ1ZiApXG4jIDI2OTggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDgzMyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoICgpIClcbiMgMjcwMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgODM0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICc6JyBvciAnPicgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyNzA4IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA4MzUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjcxMyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX3NraXBfdmFyaWFudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHNraXBfaWRlbnQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfc2tpcF9pZGVudF9yZWMgdiBsZXhidWYgMzk0XG5hbmQgX19vY2FtbF9sZXhfc2tpcF9pZGVudF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDgzOCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBmaW5pc2hfc2tpcF9zdHJpbmdsaXQgdiBsZXhidWYgKVxuIyAyNzI1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA4MzkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAyNzMwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA4NDAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkIHN0cmluZyBvciBpZGVudGlmaWVyIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMjczNSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgODQxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAyNzQwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9za2lwX2lkZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX2pzb24gdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX2pzb25fcmVjIHYgbGV4YnVmIDM5OVxuYW5kIF9fb2NhbWxfbGV4X2J1ZmZlcl9qc29uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgODU0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGFkZF9sZXhlbWUgdi5idWYgbGV4YnVmIClcbiMgMjc1MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgODU2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAoIGZpbmlzaF9idWZmZXJfc3RyaW5nbGl0IHYgbGV4YnVmIClcbiMgMjc1NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgODU3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCB0cnlcbiAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAneyc7XG4gICAgICAgICAgICAgICAgICAgICBidWZmZXJfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBidWZmZXJfb2JqZWN0X2VuZCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9pZGVudCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9jb2xvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9qc29uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9vYmplY3Rfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9pZGVudCB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfY29sb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2pzb24gdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgd2l0aCBDb21tb24uRW5kX29mX29iamVjdCAtPlxuICAgICAgICAgICAgICAgICAgICAgKClcbiAgICAgICAgICAgICAgICAgKVxuIyAyNzg0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA4ODEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIHRyeVxuICAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIHYuYnVmICdbJztcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9hcnJheV9lbmQgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICBidWZmZXJfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRydWUgZG9cbiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfYXJyYXlfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfc3BhY2UgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9qc29uIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgICAgICAgIHdpdGggQ29tbW9uLkVuZF9vZl9hcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgKClcbiAgICAgICAgICAgICAgICAgKVxuIyAyODAzIFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyA4OTcgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcoJztcbiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfdHVwbGVfZW5kIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfdHVwbGVfc2VwIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICB3aXRoIENvbW1vbi5FbmRfb2ZfdHVwbGUgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgKClcbiAgICAgICAgICAgICAgICAgKVxuIyAyODI3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNSAtPlxuIyA5MTggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJzwnO1xuICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2lkZW50IHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgICAgZmluaXNoX2J1ZmZlcl92YXJpYW50IHYgbGV4YnVmXG4gICAgICAgICAgICAgICAgIClcbiMgMjg0MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDYgLT5cbiMgOTMwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjsgYnVmZmVyX2pzb24gdiBsZXhidWYgKVxuIyAyODQ3IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNyAtPlxuIyA5MzEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIEJ1ZmZlci5hZGRfc3RyaW5nIHYuYnVmIFwiLypcIjtcbiAgICAgICAgICAgICAgICAgICBmaW5pc2hfYnVmZmVyX2NvbW1lbnQgdiBsZXhidWY7XG4gICAgICAgICAgICAgICAgICAgYnVmZmVyX2pzb24gdiBsZXhidWYgKVxuIyAyODU0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgOCAtPlxuIyA5MzQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAoIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAnXFxuJztcbiAgICAgICAgICAgICAgICAgICBuZXdsaW5lIHYgbGV4YnVmO1xuICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9qc29uIHYgbGV4YnVmIClcbiMgMjg2MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDkgLT5cbiMgOTM3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjsgYnVmZmVyX2pzb24gdiBsZXhidWYgKVxuIyAyODY2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMTAgLT5cbiMgOTM4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjg3MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDExIC0+XG4jIDkzOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkludmFsaWQgdG9rZW5cIiB2IGxleGJ1ZiApXG4jIDI4NzYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9qc29uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX2J1ZmZlcl9zdHJpbmdsaXQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl9zdHJpbmdsaXRfcmVjIHYgbGV4YnVmIDQ1MFxuYW5kIF9fb2NhbWxfbGV4X2ZpbmlzaF9idWZmZXJfc3RyaW5nbGl0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgOTQ1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICdcIic7XG4gICAgICAgICAgIGFkZF9sZXhlbWUgdi5idWYgbGV4YnVmXG4gICAgICAgICApXG4jIDI4OTAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDk0OCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIGxvbmdfZXJyb3IgXCJJbnZhbGlkIHN0cmluZyBsaXRlcmFsXCIgdiBsZXhidWYgKVxuIyAyODk1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMiAtPlxuIyA5NDkgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjkwMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl9zdHJpbmdsaXRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCBmaW5pc2hfYnVmZmVyX3ZhcmlhbnQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl92YXJpYW50X3JlYyB2IGxleGJ1ZiA0NjFcbmFuZCBfX29jYW1sX2xleF9maW5pc2hfYnVmZmVyX3ZhcmlhbnRfcmVjIHYgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA5NTIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJzonO1xuICAgICAgICAgICBidWZmZXJfanNvbiB2IGxleGJ1ZjtcbiAgICAgICAgICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmO1xuICAgICAgICAgICBidWZmZXJfZ3QgdiBsZXhidWYgKVxuIyAyOTE1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA5NTYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJz4nIClcbiMgMjkyMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgOTU3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICc6JyBvciAnPicgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAyOTI1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyA5NTggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjkzMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl92YXJpYW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX2lkZW50IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9pZGVudF9yZWMgdiBsZXhidWYgNDY2XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2lkZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgOTYxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGZpbmlzaF9idWZmZXJfc3RyaW5nbGl0IHYgbGV4YnVmIClcbiMgMjk0MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgOTYyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGFkZF9sZXhlbWUgdi5idWYgbGV4YnVmIClcbiMgMjk0NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgOTYzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCBzdHJpbmcgb3IgaWRlbnRpZmllciBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDI5NTIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDk2NCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMjk1NyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX2lkZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX3NwYWNlIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9zcGFjZV9yZWMgdiBsZXhidWYgNDcxXG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX3NwYWNlX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgOTY3IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgIGFkZF9sZXhlbWUgdi5idWYgbGV4YnVmO1xuICAgIG5ld2xpbmUgdiBsZXhidWY7XG4gICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmIClcbiMgMjk3MiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgOTcxIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIHYuYnVmIFwiLypcIjtcbiAgICBmaW5pc2hfYnVmZmVyX2NvbW1lbnQgdiBsZXhidWY7XG4gICAgYnVmZmVyX3NwYWNlIHYgbGV4YnVmIClcbiMgMjk4MCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgOTc1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAnXFxuJztcbiAgICBuZXdsaW5lIHYgbGV4YnVmO1xuICAgIGJ1ZmZlcl9zcGFjZSB2IGxleGJ1ZiApXG4jIDI5ODggXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDk3OSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjtcbiAgICBidWZmZXJfc3BhY2UgdiBsZXhidWYgKVxuIyAyOTk1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgNCAtPlxuIyA5ODIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgpIClcbiMgMzAwMCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX3NwYWNlX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX29iamVjdF9lbmQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX29iamVjdF9lbmRfcmVjIHYgbGV4YnVmIDQ3OFxuYW5kIF9fb2NhbWxfbGV4X2J1ZmZlcl9vYmplY3RfZW5kX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgOTg1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoXG4gICAgICBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ30nO1xuICAgICAgcmFpc2UgQ29tbW9uLkVuZF9vZl9vYmplY3QgKVxuIyAzMDE0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyA5ODggXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggKCkgKVxuIyAzMDE5IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9idWZmZXJfb2JqZWN0X2VuZF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGJ1ZmZlcl9vYmplY3Rfc2VwIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9vYmplY3Rfc2VwX3JlYyB2IGxleGJ1ZiA0ODBcbmFuZCBfX29jYW1sX2xleF9idWZmZXJfb2JqZWN0X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDk5MSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJywnIClcbiMgMzAzMSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgOTkyIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAnfSc7IHJhaXNlIENvbW1vbi5FbmRfb2Zfb2JqZWN0IClcbiMgMzAzNiBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgOTkzIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGxvbmdfZXJyb3IgXCJFeHBlY3RlZCAnLCcgb3IgJ30nIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMzA0MSBcImxpYi9yZWFkLm1sXCJcblxuICB8IDMgLT5cbiMgOTk0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAzMDQ2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9idWZmZXJfb2JqZWN0X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGJ1ZmZlcl9hcnJheV9lbmQgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X2VuZF9yZWMgdiBsZXhidWYgNDg1XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X2VuZF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDk5NyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ10nOyByYWlzZSBDb21tb24uRW5kX29mX2FycmF5IClcbiMgMzA1OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgOTk4IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMzA2MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X2VuZF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGJ1ZmZlcl9hcnJheV9zZXAgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X3NlcF9yZWMgdiBsZXhidWYgNDg3XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2FycmF5X3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDEwMDEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcsJyApXG4jIDMwNzUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDEwMDIgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICddJzsgcmFpc2UgQ29tbW9uLkVuZF9vZl9hcnJheSApXG4jIDMwODAgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDEwMDMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICcsJyBvciAnXScgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAzMDg1IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyAxMDA0IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAzMDkwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9idWZmZXJfYXJyYXlfc2VwX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX3R1cGxlX2VuZCB2IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9idWZmZXJfdHVwbGVfZW5kX3JlYyB2IGxleGJ1ZiA0OTJcbmFuZCBfX29jYW1sX2xleF9idWZmZXJfdHVwbGVfZW5kX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTAwNyBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKFxuICAgICAgQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcpJztcbiAgICAgIHJhaXNlIENvbW1vbi5FbmRfb2ZfdHVwbGUgKVxuIyAzMTA0IFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAxMDEwIFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoICgpIClcbiMgMzEwOSBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX3R1cGxlX2VuZF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIGJ1ZmZlcl90dXBsZV9zZXAgdiBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfYnVmZmVyX3R1cGxlX3NlcF9yZWMgdiBsZXhidWYgNDk0XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX3R1cGxlX3NlcF9yZWMgdiBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDEwMTMgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcsJyApXG4jIDMxMjEgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDEwMTQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggQnVmZmVyLmFkZF9jaGFyIHYuYnVmICcpJzsgcmFpc2UgQ29tbW9uLkVuZF9vZl90dXBsZSApXG4jIDMxMjYgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDEwMTUgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICcsJyBvciAnKScgYnV0IGZvdW5kXCIgdiBsZXhidWYgKVxuIyAzMTMxIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMyAtPlxuIyAxMDE2IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICAgICAoIGN1c3RvbV9lcnJvciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0XCIgdiBsZXhidWYgKVxuIyAzMTM2IFwibGliL3JlYWQubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9idWZmZXJfdHVwbGVfc2VwX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX2NvbG9uIHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9jb2xvbl9yZWMgdiBsZXhidWYgNDk5XG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2NvbG9uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTAxOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJzonIClcbiMgMzE0OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IDEgLT5cbiMgMTAyMCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBsb25nX2Vycm9yIFwiRXhwZWN0ZWQgJzonIGJ1dCBmb3VuZFwiIHYgbGV4YnVmIClcbiMgMzE1MyBcImxpYi9yZWFkLm1sXCJcblxuICB8IDIgLT5cbiMgMTAyMSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMzE1OCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX2NvbG9uX3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgYnVmZmVyX2d0IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2J1ZmZlcl9ndF9yZWMgdiBsZXhidWYgNTAzXG5hbmQgX19vY2FtbF9sZXhfYnVmZmVyX2d0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTAyNCBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIEJ1ZmZlci5hZGRfY2hhciB2LmJ1ZiAnPicgKVxuIyAzMTcwIFwibGliL3JlYWQubWxcIlxuXG4gIHwgMSAtPlxuIyAxMDI1IFwibGliL3JlYWQubWxsXCJcbiAgICAgICAgICggbG9uZ19lcnJvciBcIkV4cGVjdGVkICc+JyBidXQgZm91bmRcIiB2IGxleGJ1ZiApXG4jIDMxNzUgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDEwMjYgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBjdXN0b21fZXJyb3IgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiIHYgbGV4YnVmIClcbiMgMzE4MCBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfYnVmZmVyX2d0X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgZmluaXNoX2J1ZmZlcl9jb21tZW50IHYgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X2ZpbmlzaF9idWZmZXJfY29tbWVudF9yZWMgdiBsZXhidWYgNTA3XG5hbmQgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl9jb21tZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTAyOSBcImxpYi9yZWFkLm1sbFwiXG4gICAgICAgICAoIEJ1ZmZlci5hZGRfc3RyaW5nIHYuYnVmIFwiKi9cIiApXG4jIDMxOTIgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAxIC0+XG4jIDEwMzAgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBsb25nX2Vycm9yIFwiVW50ZXJtaW5hdGVkIGNvbW1lbnRcIiB2IGxleGJ1ZiApXG4jIDMxOTcgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAyIC0+XG4jIDEwMzEgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBCdWZmZXIuYWRkX2NoYXIgdi5idWYgJ1xcbic7XG4gICAgICAgICAgIG5ld2xpbmUgdiBsZXhidWY7XG4gICAgICAgICAgIGZpbmlzaF9idWZmZXJfY29tbWVudCB2IGxleGJ1ZiApXG4jIDMyMDQgXCJsaWIvcmVhZC5tbFwiXG5cbiAgfCAzIC0+XG4jIDEwMzQgXCJsaWIvcmVhZC5tbGxcIlxuICAgICAgICAgKCBhZGRfbGV4ZW1lIHYuYnVmIGxleGJ1ZjsgZmluaXNoX2J1ZmZlcl9jb21tZW50IHYgbGV4YnVmIClcbiMgMzIwOSBcImxpYi9yZWFkLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfZmluaXNoX2J1ZmZlcl9jb21tZW50X3JlYyB2IGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG47O1xuXG4jIDEwMzYgXCJsaWIvcmVhZC5tbGxcIlxuIFxuICBsZXQgXyA9IChyZWFkX2pzb24gOiBsZXhlcl9zdGF0ZSAtPiBMZXhpbmcubGV4YnVmIC0+IHQpXG5cbiAgbGV0IHJlYWRfdCA9IHJlYWRfanNvblxuXG4gIGxldCByZWFkX2ludDggdiBsZXhidWYgPVxuICAgIGxldCBuID0gcmVhZF9pbnQgdiBsZXhidWYgaW5cbiAgICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW5cbiAgICAgIGxleGVyX2Vycm9yIFwiSW50OCBvdmVyZmxvd1wiIHYgbGV4YnVmXG4gICAgZWxzZVxuICAgICAgY2hhcl9vZl9pbnQgblxuXG4gIGxldCByZWFkX2xpc3QgcmVhZF9jZWxsIHYgbGV4YnVmID1cbiAgICBMaXN0LnJldiAocmVhZF9saXN0X3JldiByZWFkX2NlbGwgdiBsZXhidWYpXG5cbiAgbGV0IGFycmF5X29mX3Jldl9saXN0IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICBbXSAtPiBbfCB8XVxuICAgICAgfCB4IDo6IHRsIC0+XG4gICAgICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgICAgICBsZXQgYSA9IEFycmF5Lm1ha2UgbGVuIHggaW5cbiAgICAgICAgICBsZXQgciA9IHJlZiB0bCBpblxuICAgICAgICAgIGZvciBpID0gbGVuIC0gMiBkb3dudG8gMCBkb1xuICAgICAgICAgICAgYS4oaSkgPC0gTGlzdC5oZCAhcjtcbiAgICAgICAgICAgIHIgOj0gTGlzdC50bCAhclxuICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgYVxuXG4gIGxldCByZWFkX2FycmF5IHJlYWRfY2VsbCB2IGxleGJ1ZiA9XG4gICAgbGV0IGwgPSByZWFkX2xpc3RfcmV2IHJlYWRfY2VsbCB2IGxleGJ1ZiBpblxuICAgIGFycmF5X29mX3Jldl9saXN0IGxcblxuICAoKiBSZWFkIGEgSlNPTiBvYmplY3QsIHJlYWRpbmcgdGhlIGtleXMgaW50byBPQ2FtbCBzdHJpbmdzXG4gICAgIChwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkgKilcbiAgbGV0IHJlYWRfZmllbGRzIHJlYWRfZmllbGQgaW5pdF9hY2MgdiA9XG4gICAgcmVhZF9hYnN0cmFjdF9maWVsZHMgcmVhZF9pZGVudCByZWFkX2ZpZWxkIGluaXRfYWNjIHZcblxuICBsZXQgZmluaXNoIHYgbGV4YnVmID1cbiAgICByZWFkX3NwYWNlIHYgbGV4YnVmO1xuICAgIGlmIG5vdCAocmVhZF9lb2YgbGV4YnVmKSB0aGVuXG4gICAgICBsb25nX2Vycm9yIFwiSnVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTpcIiB2IGxleGJ1ZlxuXG4gIGxldCBpbml0X2xleGVyID0gQ29tbW9uLmluaXRfbGV4ZXJcblxuICBsZXQgZnJvbV9sZXhidWYgdiA/KHN0cmVhbSA9IGZhbHNlKSBsZXhidWYgPVxuICAgIHJlYWRfc3BhY2UgdiBsZXhidWY7XG5cbiAgICBsZXQgeCA9XG4gICAgICBpZiByZWFkX2VvZiBsZXhidWYgdGhlblxuICAgICAgICByYWlzZSBDb21tb24uRW5kX29mX2lucHV0XG4gICAgICBlbHNlXG4gICAgICAgIHJlYWRfanNvbiB2IGxleGJ1ZlxuICAgIGluXG5cbiAgICBpZiBub3Qgc3RyZWFtIHRoZW5cbiAgICAgIGZpbmlzaCB2IGxleGJ1ZjtcblxuICAgIHhcblxuXG4gIGxldCBmcm9tX3N0cmluZyA/YnVmID9mbmFtZSA/bG51bSBzID1cbiAgICB0cnlcbiAgICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgICAgbGV0IHYgPSBpbml0X2xleGVyID9idWYgP2ZuYW1lID9sbnVtICgpIGluXG4gICAgICBmcm9tX2xleGJ1ZiB2IGxleGJ1ZlxuICAgIHdpdGggQ29tbW9uLkVuZF9vZl9pbnB1dCAtPlxuICAgICAgQ29tbW9uLmpzb25fZXJyb3IgXCJCbGFuayBpbnB1dCBkYXRhXCJcblxuICBsZXQgZnJvbV9jaGFubmVsID9idWYgP2ZuYW1lID9sbnVtIGljID1cbiAgICB0cnlcbiAgICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGljIGluXG4gICAgICBsZXQgdiA9IGluaXRfbGV4ZXIgP2J1ZiA/Zm5hbWUgP2xudW0gKCkgaW5cbiAgICAgIGZyb21fbGV4YnVmIHYgbGV4YnVmXG4gICAgd2l0aCBDb21tb24uRW5kX29mX2lucHV0IC0+XG4gICAgICBDb21tb24uanNvbl9lcnJvciBcIkJsYW5rIGlucHV0IGRhdGFcIlxuXG4gIGxldCBmcm9tX2ZpbGUgP2J1ZiA/Zm5hbWUgP2xudW0gZmlsZSA9XG4gICAgbGV0IGljID0gb3Blbl9pbiBmaWxlIGluXG4gICAgdHJ5XG4gICAgICBsZXQgeCA9IGZyb21fY2hhbm5lbCA/YnVmID9mbmFtZSA/bG51bSBpYyBpblxuICAgICAgY2xvc2VfaW4gaWM7XG4gICAgICB4XG4gICAgd2l0aCBlIC0+XG4gICAgICBjbG9zZV9pbl9ub2VyciBpYztcbiAgICAgIHJhaXNlIGVcblxuICBleGNlcHRpb24gRmluYWxseSBvZiBleG4gKiBleG5cblxuICBsZXQgc2VxX2Zyb21fbGV4YnVmIHYgPyhmaW4gPSBmdW4gKCkgLT4gKCkpIGxleGJ1ZiA9XG4gICAgbGV0IHN0cmVhbSA9IFNvbWUgdHJ1ZSBpblxuICAgIGxldCByZWMgZiAoKSA9XG4gICAgICB0cnkgU2VxLkNvbnMgKGZyb21fbGV4YnVmIHYgP3N0cmVhbSBsZXhidWYsIGYpXG4gICAgICB3aXRoXG4gICAgICAgICAgQ29tbW9uLkVuZF9vZl9pbnB1dCAtPlxuICAgICAgICAgICAgZmluICgpO1xuICAgICAgICAgICAgU2VxLk5pbFxuICAgICAgICB8IGUgLT5cbiAgICAgICAgICAgICh0cnkgZmluICgpIHdpdGggZmluX2UgLT4gcmFpc2UgKEZpbmFsbHkgKGUsIGZpbl9lKSkpO1xuICAgICAgICAgICAgcmFpc2UgZVxuICAgIGluXG4gICAgZlxuXG4gIGxldCBzZXFfZnJvbV9zdHJpbmcgP2J1ZiA/Zm5hbWUgP2xudW0gcyA9XG4gICAgbGV0IHYgPSBpbml0X2xleGVyID9idWYgP2ZuYW1lID9sbnVtICgpIGluXG4gICAgc2VxX2Zyb21fbGV4YnVmIHYgKExleGluZy5mcm9tX3N0cmluZyBzKVxuXG4gIGxldCBzZXFfZnJvbV9jaGFubmVsID9idWYgP2ZpbiA/Zm5hbWUgP2xudW0gaWMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGljIGluXG4gICAgbGV0IHYgPSBpbml0X2xleGVyID9idWYgP2ZuYW1lID9sbnVtICgpIGluXG4gICAgc2VxX2Zyb21fbGV4YnVmIHYgP2ZpbiBsZXhidWZcblxuICBsZXQgc2VxX2Zyb21fZmlsZSA/YnVmID9mbmFtZSA/bG51bSBmaWxlID1cbiAgICBsZXQgaWMgPSBvcGVuX2luIGZpbGUgaW5cbiAgICBsZXQgZmluICgpID0gY2xvc2VfaW4gaWMgaW5cbiAgICBsZXQgZm5hbWUgPVxuICAgICAgbWF0Y2ggZm5hbWUgd2l0aFxuICAgICAgICAgIE5vbmUgLT4gU29tZSBmaWxlXG4gICAgICAgIHwgeCAtPiB4XG4gICAgaW5cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpYyBpblxuICAgIGxldCB2ID0gaW5pdF9sZXhlciA/YnVmID9mbmFtZSA/bG51bSAoKSBpblxuICAgIHNlcV9mcm9tX2xleGJ1ZiB2IH5maW4gbGV4YnVmXG5cbiAgdHlwZSBqc29uX2xpbmUgPSBbIGBKc29uIG9mIHQgfCBgRXhuIG9mIGV4biBdXG5cbiAgbGV0IGxpbmVzZXFfZnJvbV9jaGFubmVsXG4gICAgICA/YnVmID8oZmluID0gZnVuICgpIC0+ICgpKSA/Zm5hbWUgP2xudW06KGxudW0wID0gMSkgaWMgPVxuICAgIGxldCBidWYgPVxuICAgICAgbWF0Y2ggYnVmIHdpdGhcbiAgICAgICAgICBOb25lIC0+IFNvbWUgKEJ1ZmZlci5jcmVhdGUgMjU2KVxuICAgICAgICB8IFNvbWUgXyAtPiBidWZcbiAgICBpblxuICAgIGxldCByZWMgZiBsbnVtID0gZnVuICgpIC0+XG4gICAgICB0cnlcbiAgICAgICAgbGV0IGxpbmUgPSBpbnB1dF9saW5lIGljIGluXG4gICAgICAgIFNlcS5Db25zIChgSnNvbiAoZnJvbV9zdHJpbmcgP2J1ZiA/Zm5hbWUgfmxudW0gbGluZSksIGYgKGxudW0gKyAxKSlcbiAgICAgIHdpdGhcbiAgICAgICAgICBFbmRfb2ZfZmlsZSAtPiBmaW4gKCk7IFNlcS5OaWxcbiAgICAgICAgfCBlIC0+IFNlcS5Db25zIChgRXhuIGUsIGYgKGxudW0gKyAxKSlcbiAgICBpblxuICAgIGYgbG51bTBcblxuICBsZXQgbGluZXNlcV9mcm9tX2ZpbGUgP2J1ZiA/Zm5hbWUgP2xudW0gZmlsZSA9XG4gICAgbGV0IGljID0gb3Blbl9pbiBmaWxlIGluXG4gICAgbGV0IGZpbiAoKSA9IGNsb3NlX2luIGljIGluXG4gICAgbGV0IGZuYW1lID1cbiAgICAgIG1hdGNoIGZuYW1lIHdpdGhcbiAgICAgICAgICBOb25lIC0+IFNvbWUgZmlsZVxuICAgICAgICB8IHggLT4geFxuICAgIGluXG4gICAgbGluZXNlcV9mcm9tX2NoYW5uZWwgP2J1ZiB+ZmluID9mbmFtZSA/bG51bSBpY1xuXG4gIGxldCBwcmV0dGlmeSA/c3RkIHMgPVxuICAgIHByZXR0eV90b19zdHJpbmcgP3N0ZCAoZnJvbV9zdHJpbmcgcylcblxuICBsZXQgY29tcGFjdCA/c3RkOl8gcyA9XG4gICAgdG9fc3RyaW5nIChmcm9tX3N0cmluZyBzKVxuXG4jIDMzNzUgXCJsaWIvcmVhZC5tbFwiXG5cbm1vZHVsZSBVdGlsID0gc3RydWN0XG5leGNlcHRpb24gVHlwZV9lcnJvciBvZiBzdHJpbmcgKiB0XG5cbmxldCB0eXBlb2YgPSBmdW5jdGlvblxuICB8IGBBc3NvYyBfIC0+IFwib2JqZWN0XCJcbiAgfCBgQm9vbCBfIC0+IFwiYm9vbFwiXG4gIHwgYEZsb2F0IF8gLT4gXCJmbG9hdFwiXG4gIHwgYEludCBfIC0+IFwiaW50XCJcbiAgfCBgTGlzdCBfIC0+IFwiYXJyYXlcIlxuICB8IGBOdWxsIC0+IFwibnVsbFwiXG4gIHwgYFN0cmluZyBfIC0+IFwic3RyaW5nXCJcbiAgfCBgSW50bGl0IF8gLT4gXCJpbnRsaXRcIlxuICB8IGBGbG9hdGxpdCBfIC0+IFwiZmxvYXRsaXRcIlxuICB8IGBUdXBsZSBfIC0+IFwidHVwbGVcIlxuICB8IGBWYXJpYW50IF8gLT4gXCJ2YXJpYW50XCJcblxubGV0IHR5cGVyciBtc2cganMgPSByYWlzZSAoVHlwZV9lcnJvciAobXNnIF4gdHlwZW9mIGpzLCBqcykpXG5cbmV4Y2VwdGlvbiBVbmRlZmluZWQgb2Ygc3RyaW5nICogdFxuXG5sZXQgYXNzb2MgbmFtZSBvYmogPSB0cnkgTGlzdC5hc3NvYyBuYW1lIG9iaiB3aXRoIE5vdF9mb3VuZCAtPiBgTnVsbFxuXG5sZXQgbWVtYmVyIG5hbWUgPSBmdW5jdGlvblxuICB8IGBBc3NvYyBvYmogLT4gYXNzb2MgbmFtZSBvYmpcbiAgfCBqcyAtPiB0eXBlcnIgKFwiQ2FuJ3QgZ2V0IG1lbWJlciAnXCIgXiBuYW1lIF4gXCInIG9mIG5vbi1vYmplY3QgdHlwZSBcIikganNcblxubGV0IHJlYyBwYXRoIGwgb2JqID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gU29tZSBvYmpcbiAgfCBrZXkgOjogbCAtPiAoXG4gICAgICBtYXRjaCBvYmogd2l0aFxuICAgICAgfCBgQXNzb2MgYXNzb2MgLT4gKFxuICAgICAgICAgIG1hdGNoIExpc3QuYXNzb2Mga2V5IGFzc29jIHdpdGhcbiAgICAgICAgICB8IG9iaiAtPiBwYXRoIGwgb2JqXG4gICAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IE5vbmUpXG4gICAgICB8IF8gLT4gTm9uZSlcblxubGV0IGluZGV4IGkgPSBmdW5jdGlvblxuICB8IGBMaXN0IGwgYXMganMgLT5cbiAgICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgICBsZXQgd3JhcHBlZF9pbmRleCA9IGlmIGkgPCAwIHRoZW4gbGVuICsgaSBlbHNlIGkgaW5cbiAgICAgIGlmIHdyYXBwZWRfaW5kZXggPCAwIHx8IHdyYXBwZWRfaW5kZXggPj0gbGVuIHRoZW5cbiAgICAgICAgcmFpc2UgKFVuZGVmaW5lZCAoXCJJbmRleCBcIiBeIHN0cmluZ19vZl9pbnQgaSBeIFwiIG91dCBvZiBib3VuZHNcIiwganMpKVxuICAgICAgZWxzZSBMaXN0Lm50aCBsIHdyYXBwZWRfaW5kZXhcbiAgfCBqcyAtPlxuICAgICAgdHlwZXJyIChcIkNhbid0IGdldCBpbmRleCBcIiBeIHN0cmluZ19vZl9pbnQgaSBeIFwiIG9mIG5vbi1hcnJheSB0eXBlIFwiKSBqc1xuXG5sZXQgbWFwIGYgPSBmdW5jdGlvblxuICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIGYgbClcbiAgfCBqcyAtPiB0eXBlcnIgXCJDYW4ndCBtYXAgZnVuY3Rpb24gb3ZlciBub24tYXJyYXkgdHlwZSBcIiBqc1xuXG5sZXQgdG9fYXNzb2MgPSBmdW5jdGlvblxuICB8IGBBc3NvYyBvYmogLT4gb2JqXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgb2JqZWN0LCBnb3QgXCIganNcblxubGV0IHRvX29wdGlvbiBmID0gZnVuY3Rpb24gYE51bGwgLT4gTm9uZSB8IHggLT4gU29tZSAoZiB4KVxubGV0IHRvX2Jvb2wgPSBmdW5jdGlvbiBgQm9vbCBiIC0+IGIgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBib29sLCBnb3QgXCIganNcblxubGV0IHRvX2Jvb2xfb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBgQm9vbCBiIC0+IFNvbWUgYlxuICB8IGBOdWxsIC0+IE5vbmVcbiAgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBib29sIG9yIG51bGwsIGdvdCBcIiBqc1xuXG5sZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgfCBgSW50IGkgLT4gZmxvYXQgaVxuICB8IGBGbG9hdCBmIC0+IGZcbiAgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBudW1iZXIsIGdvdCBcIiBqc1xuXG5sZXQgdG9fbnVtYmVyX29wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gIHwgYE51bGwgLT4gTm9uZVxuICB8IGpzIC0+IHR5cGVyciBcIkV4cGVjdGVkIG51bWJlciBvciBudWxsLCBnb3QgXCIganNcblxubGV0IHRvX2Zsb2F0ID0gZnVuY3Rpb25cbiAgfCBgRmxvYXQgZiAtPiBmXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgZmxvYXQsIGdvdCBcIiBqc1xuXG5sZXQgdG9fZmxvYXRfb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgfCBgTnVsbCAtPiBOb25lXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgZmxvYXQgb3IgbnVsbCwgZ290IFwiIGpzXG5cbmxldCB0b19pbnQgPSBmdW5jdGlvblxuICB8IGBJbnQgaSAtPiBpXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgaW50LCBnb3QgXCIganNcblxubGV0IHRvX2ludF9vcHRpb24gPSBmdW5jdGlvblxuICB8IGBJbnQgaSAtPiBTb21lIGlcbiAgfCBgTnVsbCAtPiBOb25lXG4gIHwganMgLT4gdHlwZXJyIFwiRXhwZWN0ZWQgaW50IG9yIG51bGwsIGdvdCBcIiBqc1xuXG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIGBMaXN0IGwgLT4gbCB8IGpzIC0+IHR5cGVyciBcIkV4cGVjdGVkIGFycmF5LCBnb3QgXCIganNcblxubGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgYFN0cmluZyBzIC0+IHNcbiAgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBzdHJpbmcsIGdvdCBcIiBqc1xuXG5sZXQgdG9fc3RyaW5nX29wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgYFN0cmluZyBzIC0+IFNvbWUgc1xuICB8IGBOdWxsIC0+IE5vbmVcbiAgfCBqcyAtPiB0eXBlcnIgXCJFeHBlY3RlZCBzdHJpbmcgb3IgbnVsbCwgZ290IFwiIGpzXG5cbmxldCBjb252ZXJ0X2VhY2ggZiA9IGZ1bmN0aW9uXG4gIHwgYExpc3QgbCAtPiBMaXN0Lm1hcCBmIGxcbiAgfCBqcyAtPiB0eXBlcnIgXCJDYW4ndCBjb252ZXJ0IGVhY2ggZWxlbWVudCBvZiBub24tYXJyYXkgdHlwZSBcIiBqc1xuXG5sZXQgcmVjIHJldl9maWx0ZXJfbWFwIGYgYWNjIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBhY2NcbiAgfCB4IDo6IHRsIC0+IChcbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmV2X2ZpbHRlcl9tYXAgZiBhY2MgdGxcbiAgICAgIHwgU29tZSB5IC0+IHJldl9maWx0ZXJfbWFwIGYgKHkgOjogYWNjKSB0bClcblxubGV0IGZpbHRlcl9tYXAgZiBsID0gTGlzdC5yZXYgKHJldl9maWx0ZXJfbWFwIGYgW10gbClcblxubGV0IHJlYyByZXZfZmxhdHRlbiBhY2MgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGFjY1xuICB8IHggOjogdGwgLT4gKFxuICAgICAgbWF0Y2ggeCB3aXRoXG4gICAgICB8IGBMaXN0IGwyIC0+IHJldl9mbGF0dGVuIChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKSB0bFxuICAgICAgfCBfIC0+IHJldl9mbGF0dGVuIGFjYyB0bClcblxubGV0IGZsYXR0ZW4gbCA9IExpc3QucmV2IChyZXZfZmxhdHRlbiBbXSBsKVxuXG5sZXQgZmlsdGVyX2luZGV4IGkgbCA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgbCAtPiAoIHRyeSBTb21lIChMaXN0Lm50aCBsIGkpIHdpdGggXyAtPiBOb25lKSB8IF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBmaWx0ZXJfbGlzdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYExpc3QgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcblxubGV0IGZpbHRlcl9tZW1iZXIgayBsID1cbiAgZmlsdGVyX21hcFxuICAgIChmdW5jdGlvblxuICAgICAgfCBgQXNzb2MgbCAtPiAoIHRyeSBTb21lIChMaXN0LmFzc29jIGsgbCkgd2l0aCBfIC0+IE5vbmUpIHwgXyAtPiBOb25lKVxuICAgIGxcblxubGV0IGZpbHRlcl9hc3NvYyBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEFzc29jIGwgLT4gU29tZSBsIHwgXyAtPiBOb25lKSBsXG5sZXQgZmlsdGVyX2Jvb2wgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBCb29sIHggLT4gU29tZSB4IHwgXyAtPiBOb25lKSBsXG5sZXQgZmlsdGVyX2ludCBsID1cbiAgZmlsdGVyX21hcCAoXG4gICAgICBmdW5jdGlvblxuICAgICAgfCAgYEludCB4IC0+IFNvbWUgeFxuICAgICAgfCBfIC0+IE5vbmVcbiAgICApIGxcblxubGV0IGZpbHRlcl9mbG9hdCBsID1cbiAgZmlsdGVyX21hcCAoXG4gICAgZnVuY3Rpb25cbiAgICAgIGBGbG9hdCB4IC0+IFNvbWUgeFxuICAgICAgfCBfIC0+IE5vbmVcbiAgKSBsXG5cbmxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICBmaWx0ZXJfbWFwIChcbiAgICBmdW5jdGlvblxuICAgICAgICBgSW50IHggLT4gU29tZSAoZmxvYXQgeClcbiAgICAgIHwgYEZsb2F0IHggLT4gU29tZSB4XG4gICAgICB8IF8gLT4gTm9uZVxuICApIGxcblxubGV0IGZpbHRlcl9zdHJpbmcgbCA9XG4gIGZpbHRlcl9tYXAgKFxuICAgIGZ1bmN0aW9uXG4gICAgICAgIGBTdHJpbmcgeCAtPiBTb21lIHhcbiAgICAgIHwgXyAtPiBOb25lXG4gICkgbFxuXG5sZXQga2V5cyBvID1cbiAgdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChrZXksIF8pIC0+IGtleSlcblxubGV0IHZhbHVlcyBvID1cbiAgdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChfLCB2YWx1ZSkgLT4gdmFsdWUpXG5cbmxldCBjb21iaW5lIChmaXJzdCA6IHQpIChzZWNvbmQgOiB0KSA9XG4gIG1hdGNoIChmaXJzdCwgc2Vjb25kKSB3aXRoXG4gIHwgYEFzc29jIGEsIGBBc3NvYyBiIC0+IChgQXNzb2MgKGEgQCBiKSA6IHQpXG4gIHwgYSwgYiAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkV4cGVjdGVkIHR3byBvYmplY3RzLCBjaGVjayBpbnB1dHNcIilcbmVuZFxuXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pbmVcbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdC4gV2hlbiB0aGUgZmxhZyBpcyBkaXNhYmxlZCwgaXQgd2lsbCByZWplY3QgYW55XG4gICAgICBmb3JtYXQgdGhhdCBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXG5cbiAgICAgIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlIFwiJSsgZFwiOiBzcGVjaWZ5aW5nIGJvdGggJysnIChpZiB0aGVcbiAgICAgIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGggYSAnKycgdG8gZ2V0IHRoZSBzYW1lIHdpZHRoIGFzXG4gICAgICBuZWdhdGl2ZSBudW1iZXJzKSBhbmQgJyAnIChpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aFxuICAgICAgYSBzcGFjZSkgZG9lcyBub3QgbWFrZSBzZW5zZSwgYnV0IHRoZSBsZWdhY3kgKDwgNC4wMilcbiAgICAgIGltcGxlbWVudGF0aW9uIHdhcyBoYXBweSB0byBqdXN0IGlnbm9yZSB0aGUgc3BhY2UuXG4gICopXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kIG1zZyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgbXNnXG4gIGluXG5cbiAgKCogVXNlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCAob3IgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdCkgd2FzIGVuY291bnRlcmVkXG4gICAgICB1bmV4cGVjdGVkbHkuICopXG4gIGxldCB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBlbmRfaW5kXG4gICAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1hdFwiXG4gIGluXG5cbiAgKCogVXNlZCBmb3IgJTBjOiBubyBvdGhlciB3aWR0aHMgYXJlIGltcGxlbWVudGVkICopXG4gIGxldCBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmRcbiAgICAgIFwibm9uLXplcm8gd2lkdGhzIGFyZSB1bnN1cHBvcnRlZCBmb3IgJWMgY29udmVyc2lvbnNcIlxuICBpblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gb3B0aW9uIGRlcGVuZGVuY3lcbiAgICAgcHJvYmxlbS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X3dpdGhvdXQgc3RyX2luZCBjIHMgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICclYycgd2l0aG91dCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBjIHNcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gdW5leHBlY3RlZFxuICAgICBjaGFyYWN0ZXIuICopXG4gIGxldCBleHBlY3RlZF9jaGFyYWN0ZXIgc3RyX2luZCBleHBlY3RlZCByZWFkID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzIGV4cGVjdGVkLCByZWFkICVDXCJcbiAgICAgIHN0ciBzdHJfaW5kIGV4cGVjdGVkIHJlYWRcbiAgaW5cblxuICAoKiBQYXJzZSB0aGUgc3RyaW5nIGZyb20gYmVnX2luZCAoaW5jbHVkZWQpIHRvIGVuZF9pbmQgKGV4Y2x1ZGVkKS4gKilcbiAgbGV0IHJlYyBwYXJzZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBiZWdfaW5kIGVuZF9pbmQgLT4gcGFyc2VfbGl0ZXJhbCBiZWdfaW5kIGJlZ19pbmQgZW5kX2luZFxuXG4gICgqIFJlYWQgbGl0ZXJhbCBjaGFyYWN0ZXJzIHVwIHRvICclJyBvciAnQCcgc3BlY2lhbCBjaGFyYWN0ZXJzLiAqKVxuICBhbmQgcGFyc2VfbGl0ZXJhbCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgRW5kX29mX2Zvcm1hdCBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfZm9ybWF0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9hZnRlcl9hdCAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9saXRlcmFsIGxpdF9zdGFydCAoc3RyX2luZCArIDEpIGVuZF9pbmRcblxuICAoKiBQYXJzZSBhIGZvcm1hdCBhZnRlciAnJScgKilcbiAgYW5kIHBhcnNlX2Zvcm1hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIGVuZF9pbmQgLT4gcGFyc2VfaWduIHBjdF9pbmQgKHBjdF9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgYW5kIHBhcnNlX2lnbiA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXycgLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCAoc3RyX2luZCsxKSBlbmRfaW5kIHRydWVcbiAgICAgIHwgXyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBmYWxzZVxuXG4gIGFuZCBwYXJzZV9mbGFncyA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiAoXywgXywgZSwgZikgZm10X2ViYlxuICA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBpZ24gLT5cbiAgICBsZXQgemVybyA9IHJlZiBmYWxzZSBhbmQgbWludXMgPSByZWYgZmFsc2VcbiAgICBhbmQgcGx1cyA9IHJlZiBmYWxzZSBhbmQgc3BhY2UgPSByZWYgZmFsc2VcbiAgICBhbmQgaGFzaCA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBzZXRfZmxhZyBzdHJfaW5kIGZsYWcgPVxuICAgICAgKCogaW4gbGVnYWN5IG1vZGUsIGR1cGxpY2F0ZSBmbGFncyBhcmUgYWNjZXB0ZWQgKilcbiAgICAgIGlmICFmbGFnICYmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgZHVwbGljYXRlIGZsYWcgJUNcIlxuICAgICAgICAgIHN0ciBzdHJfaW5kIHN0ci5bc3RyX2luZF07XG4gICAgICBmbGFnIDo9IHRydWU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHJlYWRfZmxhZ3Mgc3RyX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICcwJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHplcm87ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJy0nIC0+IHNldF9mbGFnIHN0cl9pbmQgbWludXM7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnKycgLT4gc2V0X2ZsYWcgc3RyX2luZCBwbHVzOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcjJyAtPiBzZXRfZmxhZyBzdHJfaW5kIGhhc2g7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnICcgLT4gc2V0X2ZsYWcgc3RyX2luZCBzcGFjZTsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZFxuICAgICAgICAgICF6ZXJvICFtaW51cyAhcGx1cyAhaGFzaCAhc3BhY2UgaWduXG4gICAgICBlbmRcbiAgICBpblxuICAgIHJlYWRfZmxhZ3Mgc3RyX2luZFxuXG4gICgqIFRyeSB0byByZWFkIGEgZGlnaXRhbCBvciBhICcqJyBwYWRkaW5nLiAqKVxuICBhbmQgcGFyc2VfcGFkZGluZyA6IHR5cGUgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHplcm8gbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhZHR5ID0gbWF0Y2ggemVybywgbWludXMgd2l0aFxuICAgICAgfCBmYWxzZSwgZmFsc2UgLT4gUmlnaHRcbiAgICAgIHwgZmFsc2UsIHRydWUgIC0+IExlZnRcbiAgICAgIHwgIHRydWUsIGZhbHNlIC0+IFplcm9zXG4gICAgICB8ICB0cnVlLCB0cnVlICAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMZWZ0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICctJyBcIjBcIiBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgbGV0IG5ld19pbmQsIHdpZHRoID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAoTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiAoQXJnX3BhZGRpbmcgcGFkdHkpXG4gICAgfCBfIC0+XG4gICAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgICB8IExlZnQgIC0+XG4gICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLScgXCJwYWRkaW5nXCI7XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIHwgWmVyb3MgLT5cbiAgICAgICAgICgqIGEgJzAnIHBhZGRpbmcgaW5kaWNhdGlvbiBub3QgZm9sbG93ZWQgYnkgYW55dGhpbmcgc2hvdWxkXG4gICAgICAgICAgIGJlIGludGVycHJldGVkIGFzIGEgUmlnaHQgcGFkZGluZyBvZiB3aWR0aCAwLiBUaGlzIGlzIHVzZWRcbiAgICAgICAgICAgYnkgc2Nhbm5pbmcgY29udmVyc2lvbnMgJTBzIGFuZCAlMGMgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgKExpdF9wYWRkaW5nIChSaWdodCwgMCkpXG4gICAgICB8IFJpZ2h0IC0+XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIGVuZFxuXG4gICgqIElzIHByZWNpc2lvbiBkZWZpbmVkPyAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcGFkZGluZyA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcuJyAtPlxuICAgICAgcGFyc2VfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkXG4gICAgfCBzeW1iIC0+XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIE5vX3ByZWNpc2lvbiBwYWQgc3ltYlxuXG4gICgqIFJlYWQgdGhlIGRpZ2l0YWwgb3IgJyonIHByZWNpc2lvbi4gKilcbiAgYW5kIHBhcnNlX3ByZWNpc2lvbiA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kID1cbiAgICAgIGxldCBuZXdfaW5kLCBwcmVjID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiBwcmVjKSBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmRcbiAgICB8ICgnKycgfCAnLScpIGFzIHN5bWIgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT5cbiAgICAgICgqIExlZ2FjeSBtb2RlIHdvdWxkIGFjY2VwdCBhbmQgaWdub3JlICcrJyBvciAnLScgYmVmb3JlIHRoZVxuICAgICAgICAgaW50ZWdlciBkZXNjcmliaW5nIHRoZSBkZXNpcmVkIHByZWNpc2lvbjsgbm90ZSB0aGF0IHRoaXNcbiAgICAgICAgIGNhbm5vdCBoYXBwZW4gZm9yIHBhZGRpbmcgd2lkdGgsIGFzICcrJyBhbmQgJy0nIGFscmVhZHkgaGF2ZVxuICAgICAgICAgYSBzZW1hbnRpY3MgdGhlcmUuXG5cbiAgICAgICAgIFRoYXQgc2FpZCwgdGhlIGlkZWEgKHN1cHBvcnRlZCBieSB0aGlzIHR3ZWFrKSB0aGF0IHdpZHRoIGFuZFxuICAgICAgICAgcHJlY2lzaW9uIGxpdGVyYWxzIGFyZSBcImludGVnZXIgbGl0ZXJhbHNcIiBpbiB0aGUgT0NhbWwgc2Vuc2UgaXNcbiAgICAgICAgIHN0aWxsIGJsYXRhbnRseSB3cm9uZywgYXMgMTIzXzQ1NiBvciAweEZGIGFyZSByZWplY3RlZC4gKilcbiAgICAgIHBhcnNlX2xpdGVyYWwgKG1pbnVzIHx8IHN5bWIgPSAnLScpIChzdHJfaW5kICsgMSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gcGFkIEFyZ19wcmVjaXNpb25cbiAgICB8IF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIG5vdGUgdGhhdCBsZWdhY3kgaW1wbGVtZW50YXRpb24gZGlkIG5vdCBpZ25vcmUgJy4nIHdpdGhvdXRcbiAgICAgICAgICAgYSBudW1iZXIgKGFzIGl0IGRvZXMgZm9yIHBhZGRpbmcgaW5kaWNhdGlvbnMpLCBidXRcbiAgICAgICAgICAgaW50ZXJwcmV0cyBpdCBhcyAnLjAnICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIDApXG4gICAgICBlbHNlXG4gICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLicgXCJwcmVjaXNpb25cIlxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiB0IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfY29udiAodHlwZSB1KSAodHlwZSB2KSAocGFkcHJlYyA6ICh1LCB2KSBwYWRkaW5nKSA9XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIHByZWMgcGFkcHJlYyBzdHIuW3N0cl9pbmRdIGluXG4gICAgKCogaW4gbGVnYWN5IG1vZGUsIHNvbWUgZm9ybWF0cyAoJXMgYW5kICVTKSBhY2NlcHQgYSB3ZWlyZCBtaXggb2ZcbiAgICAgICBwYWRkaW5nIGFuZCBwcmVjaXNpb24sIHdoaWNoIGlzIG1lcmdlZCBhcyBhIHNpbmdsZSBwYWRkaW5nXG4gICAgICAgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpbiAlLjEwcyB0aGUgcHJlY2lzaW9uIGlzIGltcGxpY2l0bHlcbiAgICAgICB1bmRlcnN0b29kIGFzIHBhZGRpbmcgJTEwcywgYnV0IHRoZSBsZWZ0LXBhZGRpbmcgY29tcG9uZW50IG1heVxuICAgICAgIGJlIHNwZWNpZmllZCBlaXRoZXIgYXMgYSBsZWZ0IHBhZGRpbmcgb3IgYSBuZWdhdGl2ZSBwcmVjaXNpb246XG4gICAgICAgJS0uM3MgYW5kICUuLTNzIGFyZSBlcXVpdmFsZW50IHRvICUtM3MgKilcbiAgICBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAtPiAoXG4gICAgICBtYXRjaCBtaW51cywgcHJlYyB3aXRoXG4gICAgICAgIHwgXywgTm9fcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgTm9fcGFkZGluZ1xuICAgICAgICB8IGZhbHNlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKSlcbiAgICAgICAgfCB0cnVlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKExlZnQsIG4pKVxuICAgICAgICB8IGZhbHNlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIFJpZ2h0KVxuICAgICAgICB8IHRydWUsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgTGVmdClcbiAgICApXG4gICAgfCBwYWQgLT4gcGFyc2VfY29udiBwYWRcblxuICAoKiBDYXNlIGFuYWx5c2lzIG9uIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9jb252ZXJzaW9uIDogdHlwZSB4IHkgeiB0IHUgdiBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiAoeCwgeSkgcGFkZGluZyAtPlxuICAgICAgICAoeiwgdCkgcHJlY2lzaW9uIC0+ICh1LCB2KSBwYWRkaW5nIC0+IGNoYXIgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyBwYWRwcmVjIHN5bWIgLT5cbiAgICAoKiBGbGFncyB1c2VkIHRvIGNoZWNrIG9wdGlvbiB1c2FnZXMvY29tcGF0aWJpbGl0aWVzLiAqKVxuICAgIGxldCBwbHVzX3VzZWQgID0gcmVmIGZhbHNlIGFuZCBoYXNoX3VzZWQgPSByZWYgZmFsc2VcbiAgICBhbmQgc3BhY2VfdXNlZCA9IHJlZiBmYWxzZSBhbmQgaWduX3VzZWQgICA9IHJlZiBmYWxzZVxuICAgIGFuZCBwYWRfdXNlZCAgID0gcmVmIGZhbHNlIGFuZCBwcmVjX3VzZWQgID0gcmVmIGZhbHNlIGluXG5cbiAgICAoKiBBY2Nlc3MgdG8gb3B0aW9ucywgdXBkYXRlIGZsYWdzLiAqKVxuICAgIGxldCBnZXRfcGx1cyAgICAoKSA9IHBsdXNfdXNlZCAgOj0gdHJ1ZTsgcGx1c1xuICAgIGFuZCBnZXRfaGFzaCAgICgpID0gaGFzaF91c2VkIDo9IHRydWU7IGhhc2hcbiAgICBhbmQgZ2V0X3NwYWNlICAgKCkgPSBzcGFjZV91c2VkIDo9IHRydWU7IHNwYWNlXG4gICAgYW5kIGdldF9pZ24gICAgICgpID0gaWduX3VzZWQgICA6PSB0cnVlOyBpZ25cbiAgICBhbmQgZ2V0X3BhZCAgICAgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZFxuICAgIGFuZCBnZXRfcHJlYyAgICAoKSA9IHByZWNfdXNlZCAgOj0gdHJ1ZTsgcHJlY1xuICAgIGFuZCBnZXRfcGFkcHJlYyAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkcHJlYyBpblxuXG4gICAgbGV0IGdldF9pbnRfcGFkICgpIDogKHgseSkgcGFkZGluZyA9XG4gICAgICAoKiAlNS4zZCBpcyBhY2NlcHRlZCBhbmQgbWVhbmluZ2Z1bDogcGFkIHRvIGxlbmd0aCA1IHdpdGhcbiAgICAgICAgIHNwYWNlcywgYnV0IGZpcnN0IHBhZCB3aXRoIHplcm9zIHVwdG8gbGVuZ3RoIDMgKDAtcGFkZGluZ1xuICAgICAgICAgaXMgdGhlIGludGVycHJldGF0aW9uIG9mIFwicHJlY2lzaW9uXCIgZm9yIGludGVnZXIgZm9ybWF0cykuXG5cbiAgICAgICAgICUwNS4zZCBpcyByZWR1bmRhbnQ6IHBhZCB0byBsZW5ndGggNSAqd2l0aCB6ZXJvcyosIGJ1dFxuICAgICAgICAgZmlyc3QgcGFkIHdpdGggemVyb3MuLi4gVG8gYWRkIGluc3VsdCB0byB0aGUgaW5qdXJ5LCB0aGVcbiAgICAgICAgIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSAwLXBhZGRpbmcgaW5kaWNhdGlvbiBhbmRcbiAgICAgICAgIGRvZXMgdGhlIDUgcGFkZGluZyB3aXRoIHNwYWNlcyBpbnN0ZWFkLiBXZSByZXVzZSB0aGlzXG4gICAgICAgICBpbnRlcnByZXRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IHN0YXRpY2FsbHkgcmVqZWN0IHRoaXNcbiAgICAgICAgIGZvcm1hdCB3aGVuIHRoZSBsZWdhY3kgbW9kZSBpcyBkaXNhYmxlZCwgdG8gcHJvdGVjdCBzdHJpY3RcbiAgICAgICAgIHVzZXJzIGZyb20gdGhpcyBjb3JuZXIgY2FzZS4gKilcbiAgICAgICBtYXRjaCBnZXRfcGFkICgpLCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICAgICB8IHBhZCwgTm9fcHJlY2lzaW9uIC0+IHBhZFxuICAgICAgICAgfCBOb19wYWRkaW5nLCBfICAgICAtPiBOb19wYWRkaW5nXG4gICAgICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgbiksIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKVxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcywgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBMaXRfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWRcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkIGluXG5cbiAgICAoKiBDaGVjayB0aGF0IHBhZHR5IDw+IFplcm9zLiAqKVxuICAgIGxldCBjaGVja19ub18wIHN5bWIgKHR5cGUgYSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpIDogKGEsYikgcGFkZGluZyA9XG4gICAgICBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoKExlZnQgfCBSaWdodCksIF8pIC0+IHBhZFxuICAgICAgfCBBcmdfcGFkZGluZyAoTGVmdCB8IFJpZ2h0KSAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcyAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgaW5cblxuICAgICgqIEdldCBwYWRkaW5nIGFzIGEgcGFkX29wdGlvbiAoc2VlIFwiJV9cIiwgXCIle1wiLCBcIiUoXCIgYW5kIFwiJVtcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgb3B0X29mX3BhZCBjICh0eXBlIGEpICh0eXBlIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgPSBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IE5vbmVcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aCkgLT4gU29tZSB3aWR0aFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInMCdcIlxuICAgICAgfCBMaXRfcGFkZGluZyAoTGVmdCwgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIictJ1wiXG4gICAgICB8IEFyZ19wYWRkaW5nIF8gLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInKidcIlxuICAgIGluXG4gICAgbGV0IGdldF9wYWRfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWQgKCkpIGluXG4gICAgbGV0IGdldF9wYWRwcmVjX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkcHJlYyAoKSkgaW5cblxuICAgICgqIEdldCBwcmVjaXNpb24gYXMgYSBwcmVjX29wdGlvbiAoc2VlIFwiJV9mXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IGdldF9wcmVjX29wdCAoKSA9IG1hdGNoIGdldF9wcmVjICgpIHdpdGhcbiAgICAgIHwgTm9fcHJlY2lzaW9uICAgICAgIC0+IE5vbmVcbiAgICAgIHwgTGl0X3ByZWNpc2lvbiBuZGVjIC0+IFNvbWUgbmRlY1xuICAgICAgfCBBcmdfcHJlY2lzaW9uICAgICAgLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicqJ1wiXG4gICAgaW5cblxuICAgIGxldCBmbXRfcmVzdWx0ID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnLCcgLT5cbiAgICAgIHBhcnNlIHN0cl9pbmQgZW5kX2luZFxuICAgIHwgJ2MnIC0+XG4gICAgICBsZXQgY2hhcl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoQ2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgc2Nhbl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlMGMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChTY2FuX25leHRfY2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggZ2V0X3BhZF9vcHQgJ2MnIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSAwIC0+IHNjYW5fZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSBfbiAtPlxuICAgICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yXG4gICAgICAgICAgIHRoZW4gaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZFxuICAgICAgICAgICBlbHNlICgqIGxlZ2FjeSBpZ25vcmVzICVjIHdpZHRocyAqKSBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgZW5kXG4gICAgfCAnQycgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jYW1sX2NoYXIsZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChDYW1sX2NoYXIgZm10X3Jlc3QpXG4gICAgfCAncycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChTdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnUycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfY2FtbF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKENhbWxfc3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+XG4gICAgICBsZXQgaWNvbnYgPSBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IFRva2VuX2NvdW50ZXIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIHwgJ24nIHwgJ0wnIHdoZW4gc3RyX2luZD1lbmRfaW5kIHx8IG5vdCAoaXNfaW50X2Jhc2Ugc3RyLltzdHJfaW5kXSkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IGNvdW50ZXJfb2ZfY2hhciBzeW1iIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50MzIgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ24nIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpXG4gICAgICAgICAgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdMJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50NjQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2YnIHwgJ2UnIHwgJ0UnIHwgJ2cnIHwgJ0cnIHwgJ0YnIHwgJ2gnIHwgJ0gnIC0+XG4gICAgICBsZXQgZmNvbnYgPVxuICAgICAgICBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kXG4gICAgICAgICAgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zsb2F0IChnZXRfcGFkX29wdCAnXycsIGdldF9wcmVjX29wdCAoKSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoRmxvYXQgKGZjb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdiJyB8ICdCJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9ib29sIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChCb29sIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2EnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQWxwaGEgZm10X3Jlc3QpXG4gICAgfCAndCcgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChUaGV0YSBmbXRfcmVzdClcbiAgICB8ICdyJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChSZWFkZXIgZm10X3Jlc3QpXG4gICAgfCAnIScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGbHVzaCBmbXRfcmVzdClcbiAgICB8ICgnJScgfCAnQCcpIGFzIGMgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKGMsIGZtdF9yZXN0KSlcbiAgICB8ICd7JyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJ30nIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICd7Jywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnKCcgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICcpJyBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJygnLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICdbJyAtPlxuICAgICAgbGV0IG5leHRfaW5kLCBjaGFyX3NldCA9IHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdfJywgY2hhcl9zZXQpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ1snLCBjaGFyX3NldCwgZm10X3Jlc3QpKVxuICAgIHwgJy0nIHwgJysnIHwgJyMnIHwgJyAnIHwgJ18nIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBmbGFnICVDIGlzIG9ubHkgYWxsb3dlZCBhZnRlciB0aGUgJyUlJywgYmVmb3JlIHBhZGRpbmcgYW5kIHByZWNpc2lvblwiXG4gICAgICAgIHN0ciBwY3RfaW5kIHN5bWJcbiAgICB8IF8gLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGludmFsaWQgY29udmVyc2lvbiBcXFwiJSUlY1xcXCJcIiBzdHIgKHN0cl9pbmQgLSAxKSBzeW1iXG4gICAgaW5cbiAgICAoKiBDaGVjayBmb3IgdW51c2VkIG9wdGlvbnMsIGFuZCByZWplY3QgdGhlbSBhcyBpbmNvbXBhdGlibGUuXG5cbiAgICAgICBTdWNoIGNoZWNrcyBuZWVkIHRvIGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGUgbGVnYWN5XG4gICAgICAgcGFyc2VyIHNpbGVudGx5IGlnbm9yZWQgaW5jb21wYXRpYmxlIGZsYWdzLiAqKVxuICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlbiBiZWdpblxuICAgIGlmIG5vdCAhcGx1c191c2VkICYmIHBsdXMgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIjtcbiAgICBpZiBub3QgIWhhc2hfdXNlZCAmJiBoYXNoIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCI7XG4gICAgaWYgbm90ICFzcGFjZV91c2VkICYmIHNwYWNlIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCI7XG4gICAgaWYgbm90ICFwYWRfdXNlZCAgJiYgUGFkZGluZ19FQkIgcGFkIDw+IFBhZGRpbmdfRUJCIE5vX3BhZGRpbmcgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCJgcGFkZGluZydcIjtcbiAgICBpZiBub3QgIXByZWNfdXNlZCAmJiBQcmVjaXNpb25fRUJCIHByZWMgPD4gUHJlY2lzaW9uX0VCQiBOb19wcmVjaXNpb24gdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIChpZiBpZ24gdGhlbiAnXycgZWxzZSBzeW1iKVxuICAgICAgICBcImBwcmVjaXNpb24nXCI7XG4gICAgaWYgaWduICYmIHBsdXMgdGhlbiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJysnXCI7XG4gICAgZW5kO1xuICAgICgqIHRoaXMgbGFzdCB0ZXN0IG11c3Qgbm90IGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgIGFzIGlnbm9yaW5nIGl0IHdvdWxkIHR5cGljYWxseSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdHlwaW5nXG4gICAgICAgdGhhbiB3aGF0IHRoZSBsZWdhY3kgcGFyc2VyIHVzZWQgKilcbiAgICBpZiBub3QgIWlnbl91c2VkICYmIGlnbiB0aGVuXG4gICAgICBiZWdpbiBtYXRjaCBzeW1iIHdpdGhcbiAgICAgICAgKCogYXJndW1lbnQtbGVzcyBmb3JtYXRzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpbiBsZWdhY3kgbW9kZSAqKVxuICAgICAgICB8ICgnQCcgfCAnJScgfCAnIScgfCAnLCcpIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+ICgpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJ18nXCJcbiAgICAgIGVuZDtcbiAgICBmbXRfcmVzdWx0XG5cbiAgKCogUGFyc2UgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoYWZ0ZXIgJ0AnKS4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX2F0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIEVuZF9vZl9mb3JtYXQpKVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnWycgLT5cbiAgICAgICAgcGFyc2VfdGFnIGZhbHNlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX2JveCwgZm10X3Jlc3QpKVxuICAgICAgfCAneycgLT5cbiAgICAgICAgcGFyc2VfdGFnIHRydWUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICd9JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfdGFnLCBmbXRfcmVzdCkpXG4gICAgICB8ICcsJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCxcIiwgMCwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJAIFwiLCAxLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnOycgLT5cbiAgICAgICAgcGFyc2VfZ29vZF9icmVhayAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJz8nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGRmx1c2gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZvcmNlX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJy4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGbHVzaF9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBwYXJzZV9tYWdpY19zaXplIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfYXQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIHdoZW4gc3RyX2luZCArIDEgPCBlbmRfaW5kICYmIHN0ci5bc3RyX2luZCArIDFdID0gJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX3BlcmNlbnQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBmbXRfcmVzdCkpXG4gICAgICB8IGMgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgYywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8bmFtZT4gYWZ0ZXIgXCJAe1wiIG9yIFwiQFtcIi4gKilcbiAgYW5kIHBhcnNlX3RhZyA6IHR5cGUgZSBmIC4gYm9vbCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGlzX29wZW5fdGFnIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIHRyeVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIGxldCBpbmQgPSBTdHJpbmcuaW5kZXhfZnJvbSBzdHIgKHN0cl9pbmQgKyAxKSAnPicgaW5cbiAgICAgICAgaWYgaW5kID49IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgc3RyX2luZCAoaW5kIC0gc3RyX2luZCArIDEpIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKGluZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgKGluZCArIDEpIGluXG4gICAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChzdWJfZm10LCBzdWJfc3RyKSBpblxuICAgICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKEVuZF9vZl9mb3JtYXQsIFwiXCIpIGluXG4gICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDx3aWR0aCBvZmZzZXQ+IGFmdGVyIFwiQDtcIi4gKilcbiAgYW5kIHBhcnNlX2dvb2RfYnJlYWsgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbGV0IG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCA9XG4gICAgICB0cnlcbiAgICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgfHwgc3RyLltzdHJfaW5kXSA8PiAnPCcgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiAoXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgd2lkdGggPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfM10gd2l0aFxuICAgICAgICAgICAgICB8ICc+JyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfMy1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF8zICsgMSwgQnJlYWsgKHMsIHdpZHRoLCAwKVxuICAgICAgICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF80LCBvZmZzZXQgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMyBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzQgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF81XSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF81LXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzUgKyAxLCBCcmVhayAocywgd2lkdGgsIG9mZnNldClcbiAgICAgICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICApXG4gICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIHN0cl9pbmQsIEJyZWFrIChcIkA7XCIsIDEsIDApXG4gICAgaW5cbiAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSB0aGUgc2l6ZSBpbiBhIDxuPi4gKilcbiAgYW5kIHBhcnNlX21hZ2ljX3NpemUgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbWF0Y2hcbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCBzaXplID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfM10gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQgLSAyKSAoc3RyX2luZF8zIC0gc3RyX2luZCArIDMpIGluXG4gICAgICAgICAgU29tZSAoc3RyX2luZF8zICsgMSwgTWFnaWNfc2l6ZSAocywgc2l6ZSkpXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBOb25lXG4gICAgd2l0aFxuICAgIHwgU29tZSAobmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0KSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyAnPCcsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSBhbmQgY29uc3RydWN0IGEgY2hhciBzZXQuICopXG4gIGFuZCBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG5cbiAgICBsZXQgY2hhcl9zZXQgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgICBsZXQgYWRkX2NoYXIgYyA9XG4gICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYztcbiAgICBpblxuICAgIGxldCBhZGRfcmFuZ2UgYyBjJyA9XG4gICAgICBmb3IgaSA9IGludF9vZl9jaGFyIGMgdG8gaW50X29mX2NoYXIgYycgZG9cbiAgICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IChjaGFyX29mX2ludCBpKTtcbiAgICAgIGRvbmU7XG4gICAgaW5cblxuICAgIGxldCBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQgPVxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiAnJSUnIGFsb25lIGlzIG5vdCBhY2NlcHRlZCBpbiBjaGFyYWN0ZXIgc2V0cywgXFxcbiAgICAgICAgIHVzZSAlJSUlIGluc3RlYWQgYXQgcG9zaXRpb24gJWQuXCIgc3RyIHN0cl9pbmRcbiAgICBpblxuXG4gICAgKCogUGFyc2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGNoYXIgc2V0LiAqKVxuICAgIGxldCByZWMgcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBsZXQgYyA9IHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFBhcnNlIHRoZSBjb250ZW50IG9mIGEgY2hhciBzZXQgdW50aWwgdGhlIGZpcnN0ICddJy4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfY29udGVudCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBUZXN0IGZvciByYW5nZSBpbiBjaGFyIHNldC4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcbiAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgd2hlbiBjID0gJyUnIC0+XG4gICAgICAgIGFkZF9jaGFyIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBpZiBjID0gJyUnIHRoZW4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kO1xuICAgICAgICAoKiBub3RlIHRoYXQgJ0AnIGFsb25lIGlzIGFjY2VwdGVkLCBhcyBkb25lIGJ5IHRoZSBsZWdhY3lcbiAgICAgICAgICAgaW1wbGVtZW50YXRpb247IHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSByZXF1aXJlcyAlQFxuICAgICAgICAgICBzbyB3ZSBjb3VsZCB3YXJuIG9uIHRoYXQgKilcbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgYydcblxuICAgICgqIE1hbmFnZSByYW5nZSBpbiBjaGFyIHNldCAoZXhjZXB0IGlmIHRoZSAnLScgdGhlIGxhc3QgY2hhciBiZWZvcmUgJ10nKSAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICclJyAtPlxuICAgICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgLT5cbiAgICAgICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDIpIGVuZF9pbmRcbiAgICAgICAgICB8IF8gLT4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICBpblxuICAgIGxldCBzdHJfaW5kLCByZXZlcnNlID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgICAgfCAnXicgLT4gc3RyX2luZCArIDEsIHRydWVcbiAgICAgICAgfCBfIC0+IHN0cl9pbmQsIGZhbHNlIGluXG4gICAgbGV0IG5leHRfaW5kID0gcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgbGV0IGNoYXJfc2V0ID0gZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0IGluXG4gICAgbmV4dF9pbmQsIChpZiByZXZlcnNlIHRoZW4gcmV2X2NoYXJfc2V0IGNoYXJfc2V0IGVsc2UgY2hhcl9zZXQpXG5cbiAgKCogQ29uc3VtZSBhbGwgbmV4dCBzcGFjZXMsIHJhaXNlIGFuIEZhaWx1cmUgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBpZiBzdHIuW3N0cl9pbmRdID0gJyAnIHRoZW4gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBlbHNlIHN0cl9pbmRcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZSBpZiBlbmRfaW5kIGlzXG4gICAgIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgYWNjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGFjYyAqIDEwICsgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCcpIGluXG4gICAgICBpZiBuZXdfYWNjID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGludGVnZXIgJWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdCAlZFwiXG4gICAgICAgICAgc3RyIG5ld19hY2MgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCBuZXdfYWNjXG4gICAgfCBfIC0+IHN0cl9pbmQsIGFjY1xuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlXG4gICAgIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX2ludGVnZXIgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMFxuICAgIHwgJy0nIC0+IChcbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICAgIGxldCBuZXh0X2luZCwgbiA9IHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCAwIGluXG4gICAgICAgIG5leHRfaW5kLCAtblxuICAgICAgfCBjIC0+XG4gICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiZGlnaXRcIiBjXG4gICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBBZGQgYSBsaXRlcmFsIHRvIGEgZm9ybWF0IGZyb20gYSBsaXRlcmFsIGNoYXJhY3RlciBzdWItc2VxdWVuY2UuICopXG4gIGFuZCBhZGRfbGl0ZXJhbCA6IHR5cGUgYSBkIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IChhLCBfLCBfLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGZtdCAtPiBtYXRjaCBzdHJfaW5kIC0gbGl0X3N0YXJ0IHdpdGhcbiAgICB8IDAgICAgLT4gRm10X0VCQiBmbXRcbiAgICB8IDEgICAgLT4gRm10X0VCQiAoQ2hhcl9saXRlcmFsIChzdHIuW2xpdF9zdGFydF0sIGZtdCkpXG4gICAgfCBzaXplIC0+IEZtdF9FQkIgKFN0cmluZ19saXRlcmFsIChTdHJpbmcuc3ViIHN0ciBsaXRfc3RhcnQgc2l6ZSwgZm10KSlcblxuICAoKiBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdWItZm9ybWF0XG4gICAgIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIFwiJX1cIiBvciBcIiUpXCIpICopXG4gIGFuZCBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiB1bmNsb3NlZCBzdWItZm9ybWF0LCBcXFxuICAgICAgICAgZXhwZWN0ZWQgXFxcIiUlJWNcXFwiIGF0IGNoYXJhY3RlciBudW1iZXIgJWRcIiBzdHIgYyBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJyUnIC0+XG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGlmIHN0ci5bc3RyX2luZCArIDFdID0gYyB0aGVuICgqIEVuZCBvZiBmb3JtYXQgZm91bmQgKikgc3RyX2luZCBlbHNlXG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgfCAnXycgLT5cbiAgICAgICAgICAoKiBTZWFyY2ggZm9yIFwiJV8oXCIgb3IgXCIlX3tcIi4gKilcbiAgICAgICAgICBpZiBzdHJfaW5kICsgMiA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAyXSB3aXRoXG4gICAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICgqICV7Li4uJX0gc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICgqICUoLi4uJSkgc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICd9JyAtPlxuICAgICAgICAgICgqIEVycm9yOiAlKC4uLiV9LiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICcpJ1wiICd9J1xuICAgICAgICB8ICcpJyAtPlxuICAgICAgICAgICgqIEVycm9yOiAley4uLiUpLiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICd9J1wiICcpJ1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICBlbmRcbiAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAoKiBDaGVjayBpZiBzeW1iIGlzIGEgdmFsaWQgaW50IGNvbnZlcnNpb24gYWZ0ZXIgXCIlbFwiLCBcIiVuXCIgb3IgXCIlTFwiICopXG4gIGFuZCBpc19pbnRfYmFzZSBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuXG4gICgqIENvbnZlcnQgYSBjaGFyIChsLCBuIG9yIEwpIHRvIGl0cyBhc3NvY2lhdGVkIGNvdW50ZXIuICopXG4gIGFuZCBjb3VudGVyX29mX2NoYXIgc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2wnIC0+IExpbmVfY291bnRlciAgfCAnbicgLT4gQ2hhcl9jb3VudGVyXG4gICAgfCAnTCcgLT4gVG9rZW5fY291bnRlciB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgaW50X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbWF0Y2ggcGx1cywgaGFzaCwgc3BhY2UsIHN5bWIgd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9kICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfaVxuICAgIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2QnIC0+IEludF9zZCB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdpJyAtPiBJbnRfc2lcbiAgICB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfcGQgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X3BpXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAneCcgLT4gSW50X3ggIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ1gnIC0+IEludF9YXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAneCcgLT4gSW50X0N4IHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ1gnIC0+IEludF9DWFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ28nIC0+IEludF9vXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnbycgLT4gSW50X0NvXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAndScgLT4gSW50X3VcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdkJyAtPiBJbnRfQ2RcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdpJyAtPiBJbnRfQ2lcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd1JyAtPiBJbnRfQ3VcbiAgICB8IF8sIHRydWUsIF8sICd4JyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ3hcbiAgICB8IF8sIHRydWUsIF8sICdYJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ1hcbiAgICB8IF8sIHRydWUsIF8sICdvJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ29cbiAgICB8IF8sIHRydWUsIF8sICgnZCcgfCAnaScgfCAndScpIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBmYWxzZSBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCJcbiAgICB8IHRydWUsIF8sIHRydWUsIF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIHRydWUsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiXG4gICAgfCB0cnVlLCBfLCBmYWxzZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIGZhbHNlIGhhc2ggc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgZmFsc2UsIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3BhY2UsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGZsb2F0X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBsZXQgZmxhZyA9IG1hdGNoIHBsdXMsIHNwYWNlIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX1xuICAgIHwgZmFsc2UsICB0cnVlIC0+IEZsb2F0X2ZsYWdfc1xuICAgIHwgIHRydWUsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfcFxuICAgIHwgIHRydWUsICB0cnVlIC0+XG4gICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gRmxvYXRfZmxhZ19wXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIiBpblxuICAgIGxldCBraW5kID0gbWF0Y2ggaGFzaCwgc3ltYiB3aXRoXG4gICAgfCBfLCAnZicgLT4gRmxvYXRfZlxuICAgIHwgXywgJ2UnIC0+IEZsb2F0X2VcbiAgICB8IF8sICdFJyAtPiBGbG9hdF9FXG4gICAgfCBfLCAnZycgLT4gRmxvYXRfZ1xuICAgIHwgXywgJ0cnIC0+IEZsb2F0X0dcbiAgICB8IF8sICdoJyAtPiBGbG9hdF9oXG4gICAgfCBfLCAnSCcgLT4gRmxvYXRfSFxuICAgIHwgZmFsc2UsICdGJyAtPiBGbG9hdF9GXG4gICAgfCB0cnVlLCAnRicgLT4gRmxvYXRfQ0ZcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlIGluXG4gICAgZmxhZywga2luZFxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBpbmNvbXBhdGlibGUgb3B0aW9ucy4qKVxuICBhbmQgaW5jb21wYXRpYmxlX2ZsYWcgOiB0eXBlIGEgLiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nIC0+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIiwiKCogQ29udl9lcnJvcjogTW9kdWxlIGZvciBIYW5kbGluZyBFcnJvcnMgZHVyaW5nIEF1dG9tYXRlZCBZb2pzb25cbiAgIENvbnZlcnNpb25zICopXG5cbm9wZW4hIFN0ZExhYmVsc1xub3BlbiBZb2pzb25fY29udlxuXG5sZXQgc3ByaW50ZiA9IFByaW50Zi5zcHJpbnRmXG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHR1cGxlcyAqKVxuXG5sZXQgdHVwbGVfb2Zfc2l6ZV9uX2V4cGVjdGVkIGxvYyBuIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAoc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdHVwbGUgb2Ygc2l6ZSAlZCBleHBlY3RlZFwiIGxvYyBuKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHN1bSB0eXBlcyAqKVxuXG5sZXQgc3RhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBzdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIHRhZyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiBzdW0gdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiIGxvYyB0YWdcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBzdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYSBuZXN0ZWQgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhbiBlbXB0eSBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IHVuZXhwZWN0ZWRfc3RhZyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHVuZXhwZWN0ZWQgdmFyaWFudCBjb25zdHJ1Y3RvclwiKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHJlY29yZHMgKilcblxubGV0IHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIGxldCBmbGRfbmFtZXNfc3RyID0gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgcmV2X2ZsZF9uYW1lcykgfnNlcDpcIiBcIiBpblxuICBsZXQgbXNnID0gc3ByaW50ZiBcIiVzX29mX3lvanNvbjogJXM6ICVzXCIgbG9jIHdoYXQgZmxkX25hbWVzX3N0ciBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9kdXBsaWNhdGVfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJkdXBsaWNhdGUgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlY29yZF9leHRyYV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImV4dHJhIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWMgcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgPSBmdW5jdGlvblxuICB8IFtdIC0+IFN0cmluZy5jb25jYXQgKExpc3QucmV2IGZpZWxkcykgfnNlcDpcIiBcIlxuICB8ICh0cnVlLCBmaWVsZCkgOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIChmaWVsZCA6OiBmaWVsZHMpIHJlc3RcbiAgfCBfIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgcmVzdFxuOztcblxubGV0IHJlY29yZF91bmRlZmluZWRfZWxlbWVudHMgbG9jIHlvanNvbiBsc3QgPVxuICBsZXQgdW5kZWZpbmVkID0gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBbXSBsc3QgaW5cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdGhlIGZvbGxvd2luZyByZWNvcmQgZWxlbWVudHMgd2VyZSB1bmRlZmluZWQ6ICVzXCIgbG9jIHVuZGVmaW5lZFxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9saXN0X2luc3RlYWRfYXRvbSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9IGxvYyBeIFwiX29mX3lvanNvbjogbGlzdCBpbnN0ZWFkIG9mIGF0b20gZm9yIHJlY29yZCBleHBlY3RlZFwiIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX3BvbHlfZmllbGRfdmFsdWUgbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIGxvY1xuICAgIF4gXCJfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCB2YWx1ZXMgb2YgdHlwZXMgcmVzdWx0aW5nIGZyb20gcG9seW1vcnBoaWMgcmVjb3JkIFxcXG4gICAgICAgZmllbGRzXCJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHBvbHltb3JwaGljIHZhcmlhbnRzICopXG5cbmV4Y2VwdGlvbiBOb192YXJpYW50X21hdGNoXG5cbmxldCBub192YXJpYW50X21hdGNoICgpID0gcmFpc2UgTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fbWF0Y2hpbmdfdmFyaWFudF9mb3VuZCBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IG5vIG1hdGNoaW5nIHZhcmlhbnQgZm91bmRcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIGNuc3RyIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGZcbiAgICAgIFwiJXNfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIlxuICAgICAgbG9jXG4gICAgICBjbnN0clxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHB0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnIHRha2VzIGFuIGFyZ3VtZW50XCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IGEgbmVzdGVkIGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGUgZW1wdHkgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV90eXBlIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdHJ5aW5nIHRvIGNvbnZlcnQgYW4gZW1wdHkgdHlwZVwiKSB5b2pzb25cbjs7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGlkIDogJ2EgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5sZXQgY29uc3QgYyBfID0gY1xubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1lc3NhZ2UgZGlnZXN0IChNRDUpICopXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuZXh0ZXJuYWwgdW5zYWZlX3N0cmluZzogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfc3RyaW5nXCJcbmV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG5sZXQgc3RyaW5nIHN0ciA9XG4gIHVuc2FmZV9zdHJpbmcgc3RyIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG5sZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG5sZXQgc3Vic3RyaW5nIHN0ciBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfc3RyaW5nIHN0ciBvZnMgbGVuXG5cbmxldCBzdWJieXRlcyBiIG9mcyBsZW4gPSBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG5sZXQgZmlsZSBmaWxlbmFtZSA9XG4gIGxldCBpYyA9IG9wZW5faW5fYmluIGZpbGVuYW1lIGluXG4gIG1hdGNoIGNoYW5uZWwgaWMgKC0xKSB3aXRoXG4gICAgfCBkIC0+IGNsb3NlX2luIGljOyBkXG4gICAgfCBleGNlcHRpb24gZSAtPiBjbG9zZV9pbiBpYzsgcmFpc2UgZVxuXG5sZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID1cbiAgb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG5sZXQgaW5wdXQgY2hhbiA9IHJlYWxseV9pbnB1dF9zdHJpbmcgY2hhbiAxNlxuXG5sZXQgY2hhcl9oZXggbiA9XG4gIENoYXIudW5zYWZlX2NociAobiArIGlmIG4gPCAxMCB0aGVuIENoYXIuY29kZSAnMCcgZWxzZSAoQ2hhci5jb2RlICdhJyAtIDEwKSlcblxubGV0IHRvX2hleCBkID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBkIDw+IDE2IHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QudG9faGV4XCI7XG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMzIgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgbGV0IHggPSBDaGFyLmNvZGUgZC5baV0gaW5cbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKSAoY2hhcl9oZXggKHggbHNyIDQpKTtcbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKzEpIChjaGFyX2hleCAoeCBsYW5kIDB4MGYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcblxubGV0IGZyb21faGV4IHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPD4gMzIgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5mcm9tX2hleFwiO1xuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkRpZ2VzdC5mcm9tX2hleFwiKVxuICBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMTYgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgQnl0ZXMuc2V0IHJlc3VsdCBpIChDaGFyLmNociAoYnl0ZSAoMiAqIGkpKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEhhc2ggdGFibGVzICopXG5cbigqIFdlIGRvIGR5bmFtaWMgaGFzaGluZywgYW5kIHJlc2l6ZSB0aGUgdGFibGUgYW5kIHJlaGFzaCB0aGUgZWxlbWVudHNcbiAgIHdoZW4gYnVja2V0cyBiZWNvbWUgdG9vIGxvbmcuICopXG5cbnR5cGUgKCdhLCAnYikgdCA9XG4gIHsgbXV0YWJsZSBzaXplOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogbnVtYmVyIG9mIGVudHJpZXMgKilcbiAgICBtdXRhYmxlIGRhdGE6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgYXJyYXk7ICAoKiB0aGUgYnVja2V0cyAqKVxuICAgIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zaXplOiBpbnQ7ICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICB9XG5cbmFuZCAoJ2EsICdiKSBidWNrZXRsaXN0ID1cbiAgICBFbXB0eVxuICB8IENvbnMgb2YgeyBtdXRhYmxlIGtleTogJ2E7XG4gICAgICAgICAgICAgIG11dGFibGUgZGF0YTogJ2I7XG4gICAgICAgICAgICAgIG11dGFibGUgbmV4dDogKCdhLCAnYikgYnVja2V0bGlzdCB9XG5cbigqIFRoZSBzaWduIG9mIGluaXRpYWxfc2l6ZSBlbmNvZGVzIHRoZSBmYWN0IHRoYXQgYSB0cmF2ZXJzYWwgaXNcbiAgIG9uZ29pbmcgb3Igbm90LlxuXG4gICBUaGlzIGRpc2FibGVzIHRoZSBlZmZpY2llbnQgaW4gcGxhY2UgaW1wbGVtZW50YXRpb24gb2YgcmVzaXppbmcuXG4qKVxuXG5sZXQgb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICB8fCBoLmluaXRpYWxfc2l6ZSA8IDBcblxubGV0IGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIGguaW5pdGlhbF9zaXplIDwtIC0gaC5pbml0aWFsX3NpemVcblxuKCogVG8gcGljayByYW5kb20gc2VlZHMgaWYgcmVxdWVzdGVkICopXG5cbmxldCByYW5kb21pemVkX2RlZmF1bHQgPVxuICBsZXQgcGFyYW1zID1cbiAgICB0cnkgU3lzLmdldGVudiBcIk9DQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICBTdHJpbmcuY29udGFpbnMgcGFyYW1zICdSJ1xuXG5sZXQgcmFuZG9taXplZCA9IHJlZiByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IHJhbmRvbWl6ZWQgOj0gdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSAhcmFuZG9taXplZFxuXG5sZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG5sZXQgY2xlYXIgaCA9XG4gIGlmIGguc2l6ZSA+IDAgdGhlbiBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIEFycmF5LmZpbGwgaC5kYXRhIDAgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIEVtcHR5XG4gIGVuZFxuXG5sZXQgcmVzZXQgaCA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICAgIHx8IGxlbiA9IGFicyBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgY2xlYXIgaFxuICBlbHNlIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgKGFicyBoLmluaXRpYWxfc2l6ZSkgRW1wdHlcbiAgZW5kXG5cbmxldCBjb3B5X2J1Y2tldGxpc3QgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IEVtcHR5XG4gIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgbGV0IHJlYyBsb29wIHByZWMgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICB8IENvbnMgcHJlYyAtPiAgcHJlYy5uZXh0IDwtIHJcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGxvb3AgciBuZXh0XG4gICAgICBpblxuICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICBsb29wIHIgbmV4dDtcbiAgICAgIHJcblxubGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5tYXAgY29weV9idWNrZXRsaXN0IGguZGF0YSB9XG5cbmxldCBsZW5ndGggaCA9IGguc2l6ZVxuXG5sZXQgaW5zZXJ0X2FsbF9idWNrZXRzIGluZGV4ZnVuIGlucGxhY2Ugb2RhdGEgbmRhdGEgPVxuICBsZXQgbnNpemUgPSBBcnJheS5sZW5ndGggbmRhdGEgaW5cbiAgbGV0IG5kYXRhX3RhaWwgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gIGxldCByZWMgaW5zZXJ0X2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPiAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBhcyBjZWxsIC0+XG4gICAgICAgIGxldCBjZWxsID1cbiAgICAgICAgICBpZiBpbnBsYWNlIHRoZW4gY2VsbFxuICAgICAgICAgIGVsc2UgQ29ucyB7a2V5OyBkYXRhOyBuZXh0ID0gRW1wdHl9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBuaWR4ID0gaW5kZXhmdW4ga2V5IGluXG4gICAgICAgIGJlZ2luIG1hdGNoIG5kYXRhX3RhaWwuKG5pZHgpIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBuZGF0YS4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIGNlbGw7XG4gICAgICAgIGVuZDtcbiAgICAgICAgbmRhdGFfdGFpbC4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgaW5zZXJ0X2J1Y2tldCBuZXh0XG4gIGluXG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggb2RhdGEgLSAxIGRvXG4gICAgaW5zZXJ0X2J1Y2tldCBvZGF0YS4oaSlcbiAgZG9uZTtcbiAgaWYgaW5wbGFjZSB0aGVuXG4gICAgZm9yIGkgPSAwIHRvIG5zaXplIC0gMSBkb1xuICAgICAgbWF0Y2ggbmRhdGFfdGFpbC4oaSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIEVtcHR5XG4gICAgZG9uZVxuXG5sZXQgcmVzaXplIGluZGV4ZnVuIGggPVxuICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgbGV0IG9zaXplID0gQXJyYXkubGVuZ3RoIG9kYXRhIGluXG4gIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICBpZiBuc2l6ZSA8IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgbGV0IGlucGxhY2UgPSBub3QgKG9uZ29pbmdfdHJhdmVyc2FsIGgpIGluXG4gICAgaC5kYXRhIDwtIG5kYXRhOyAgICAgICAgICAoKiBzbyB0aGF0IGluZGV4ZnVuIHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICBpbnNlcnRfYWxsX2J1Y2tldHMgKGluZGV4ZnVuIGgpIGlucGxhY2Ugb2RhdGEgbmRhdGFcbiAgZW5kXG5cbmxldCBpdGVyIGYgaCA9XG4gIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+XG4gICAgICAgICgpXG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZiBrZXkgZGF0YTsgZG9fYnVja2V0IG5leHQgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIEVtcHR5XG4gICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gRW1wdHlcbiAgICAgIGVuZFxuICB8IChDb25zICh7a2V5OyBkYXRhOyBuZXh0fSBhcyBjKSkgYXMgc2xvdCAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZiBrZXkgZGF0YSB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgbmV4dFxuICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gc2xvdFxuICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBzbG90XG4gICAgICAgICAgZW5kO1xuICAgICAgICAgIGMuZGF0YSA8LSBkYXRhO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgc2xvdCBuZXh0XG4gICAgICBlbmRcblxubGV0IGZpbHRlcl9tYXBfaW5wbGFjZSBmIGggPVxuICBsZXQgZCA9IGguZGF0YSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBFbXB0eSBoLmRhdGEuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGhcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCBmb2xkIGYgaCBpbml0ID1cbiAgbGV0IHJlYyBkb19idWNrZXQgYiBhY2N1ID1cbiAgICBtYXRjaCBiIHdpdGhcbiAgICAgIEVtcHR5IC0+XG4gICAgICAgIGFjY3VcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBkb19idWNrZXQgbmV4dCAoZiBrZXkgZGF0YSBhY2N1KSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBsZXQgYWNjdSA9IHJlZiBpbml0IGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgYWNjdSA6PSBkb19idWNrZXQgZC4oaSkgIWFjY3VcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICAhYWNjdVxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxudHlwZSBzdGF0aXN0aWNzID0ge1xuICBudW1fYmluZGluZ3M6IGludDtcbiAgbnVtX2J1Y2tldHM6IGludDtcbiAgbWF4X2J1Y2tldF9sZW5ndGg6IGludDtcbiAgYnVja2V0X2hpc3RvZ3JhbTogaW50IGFycmF5XG59XG5cbmxldCByZWMgYnVja2V0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhY2N1XG4gIHwgQ29uc3tuZXh0fSAtPiBidWNrZXRfbGVuZ3RoIChhY2N1ICsgMSkgbmV4dFxuXG5sZXQgc3RhdHMgaCA9XG4gIGxldCBtYmwgPVxuICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGggMCBiKSkgMCBoLmRhdGEgaW5cbiAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICBBcnJheS5pdGVyXG4gICAgKGZ1biBiIC0+XG4gICAgICBsZXQgbCA9IGJ1Y2tldF9sZW5ndGggMCBiIGluXG4gICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICBoLmRhdGE7XG4gIHsgbnVtX2JpbmRpbmdzID0gaC5zaXplO1xuICAgIG51bV9idWNrZXRzID0gQXJyYXkubGVuZ3RoIGguZGF0YTtcbiAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICBidWNrZXRfaGlzdG9ncmFtID0gaGlzdG8gfVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHRibCA9XG4gICgqIGNhcHR1cmUgY3VycmVudCBhcnJheSwgc28gdGhhdCBldmVuIGlmIHRoZSB0YWJsZSBpcyByZXNpemVkIHdlXG4gICAgIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBzYW1lIGFycmF5ICopXG4gIGxldCB0YmxfZGF0YSA9IHRibC5kYXRhIGluXG4gICgqIHN0YXRlOiBpbmRleCAqIG5leHQgYnVja2V0IHRvIHRyYXZlcnNlICopXG4gIGxldCByZWMgYXV4IGkgYnVjayAoKSA9IG1hdGNoIGJ1Y2sgd2l0aFxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCB0YmxfZGF0YVxuICAgICAgICB0aGVuIFNlcS5OaWxcbiAgICAgICAgZWxzZSBhdXgoaSsxKSB0YmxfZGF0YS4oaSkgKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgU2VxLkNvbnMgKChrZXksIGRhdGEpLCBhdXggaSBuZXh0KVxuICBpblxuICBhdXggMCBFbXB0eVxuXG5sZXQgdG9fc2VxX2tleXMgbSA9IFNlcS5tYXAgZnN0ICh0b19zZXEgbSlcblxubGV0IHRvX3NlcV92YWx1ZXMgbSA9IFNlcS5tYXAgc25kICh0b19zZXEgbSlcblxuKCogRnVuY3RvcmlhbCBpbnRlcmZhY2UgKilcblxubW9kdWxlIHR5cGUgSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IGludCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlIDogP3JhbmRvbTpib29sIC0+IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHkgOiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQgOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsIDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXIgOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2VTZWVkZWQoSDogU2VlZGVkSGFzaGVkVHlwZSk6IChTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgdHlwZSBrZXkgPSBILnRcbiAgICB0eXBlICdhIGhhc2h0YmwgPSAoa2V5LCAnYSkgdFxuICAgIHR5cGUgJ2EgdCA9ICdhIGhhc2h0YmxcbiAgICBsZXQgY3JlYXRlID0gY3JlYXRlXG4gICAgbGV0IGNsZWFyID0gY2xlYXJcbiAgICBsZXQgcmVzZXQgPSByZXNldFxuICAgIGxldCBjb3B5ID0gY29weVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGtleSA9XG4gICAgICAoSC5oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIFtdXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE9ZDsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBkIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgICAgIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG4gICAgbGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gICAgICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICAgICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgICAgIGVuZFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgICAgIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgYWRkX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbiAgICBsZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuXG4gICAgbGV0IGl0ZXIgPSBpdGVyXG4gICAgbGV0IGZpbHRlcl9tYXBfaW5wbGFjZSA9IGZpbHRlcl9tYXBfaW5wbGFjZVxuICAgIGxldCBmb2xkID0gZm9sZFxuICAgIGxldCBsZW5ndGggPSBsZW5ndGhcbiAgICBsZXQgc3RhdHMgPSBzdGF0c1xuICAgIGxldCB0b19zZXEgPSB0b19zZXFcbiAgICBsZXQgdG9fc2VxX2tleXMgPSB0b19zZXFfa2V5c1xuICAgIGxldCB0b19zZXFfdmFsdWVzID0gdG9fc2VxX3ZhbHVlc1xuICBlbmRcblxubW9kdWxlIE1ha2UoSDogSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4oKiBQb2x5bW9ycGhpYyBoYXNoIGZ1bmN0aW9uLWJhc2VkIHRhYmxlcyAqKVxuKCogQ29kZSBpbmNsdWRlZCBiZWxvdyB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgdG8gZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsXG4gICB1c2UgLSBzZWUgIzIyMDIgKilcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5cbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5sZXQgaGFzaF9wYXJhbSBuMSBuMiB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gbjEgbjIgMCB4XG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxuXG5sZXQga2V5X2luZGV4IGgga2V5ID1cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDRcbiAgdGhlbiAoc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuICBlbHNlIGludmFsaWRfYXJnIFwiSGFzaHRibDogdW5zdXBwb3J0ZWQgaGFzaCB0YWJsZSBmb3JtYXRcIlxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaCA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiAoQXJyYXkubGVuZ3RoIGguZGF0YSkgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfb3Blbl90YWcgc3RhdGUgcyA9IHBwX29wZW5fc3RhZyBzdGF0ZSAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSA9IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKClcblxubGV0IHBwX3NldF9wcmludF90YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9wcmludF90YWdzIDwtIGJcbmxldCBwcF9zZXRfbWFya190YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9tYXJrX3RhZ3MgPC0gYlxubGV0IHBwX2dldF9wcmludF90YWdzIHN0YXRlICgpID0gc3RhdGUucHBfcHJpbnRfdGFnc1xubGV0IHBwX2dldF9tYXJrX3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJrX3RhZ3NcbmxldCBwcF9zZXRfdGFncyBzdGF0ZSBiID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYjsgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiXG5cblxuKCogSGFuZGxpbmcgdGFnIGhhbmRsaW5nIGZ1bmN0aW9uczogZ2V0L3NldCBmdW5jdGlvbnMuICopXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgbWFya19vcGVuX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnO1xuICBtYXJrX2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZztcbiAgcHJpbnRfb3Blbl9zdGFnID0gc3RhdGUucHBfcHJpbnRfb3Blbl90YWc7XG4gIHByaW50X2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWc7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fc3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV9zdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3N0YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3N0YWcgPSBwY3Q7XG4gIH0gPVxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIG1vdDtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gbWN0O1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBwb3Q7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBwY3RcblxuXG4oKiBJbml0aWFsaXplIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX3Jpbml0IHN0YXRlID1cbiAgcHBfY2xlYXJfcXVldWUgc3RhdGU7XG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9mb3JtYXRfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3Rib3hfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfbWFya19zdGFjaztcbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gMDtcbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSAwO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbjtcbiAgcHBfb3Blbl9zeXNfYm94IHN0YXRlXG5cbmxldCBjbGVhcl90YWdfc3RhY2sgc3RhdGUgPVxuICBTdGFjay5pdGVyIChmdW4gXyAtPiBwcF9jbG9zZV90YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGIgPVxuICBjbGVhcl90YWdfc3RhY2sgc3RhdGU7XG4gIHdoaWxlIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIGRvXG4gICAgcHBfY2xvc2VfYm94IHN0YXRlICgpXG4gIGRvbmU7XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHBwX2luZmluaXR5O1xuICBhZHZhbmNlX2xlZnQgc3RhdGU7XG4gIGlmIGIgdGhlbiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgcHBfcmluaXQgc3RhdGVcblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGZvcm1hdCB2YWx1ZXMgYW5kIHVzZSBib3hlcy5cblxuKilcblxuKCogVG8gZm9ybWF0IGEgc3RyaW5nLiAqKVxubGV0IHBwX3ByaW50X2FzX3NpemUgc3RhdGUgc2l6ZSBzID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgc1xuXG5cbmxldCBwcF9wcmludF9hcyBzdGF0ZSBpc2l6ZSBzID1cbiAgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSAoU2l6ZS5vZl9pbnQgaXNpemUpIHNcblxuXG5sZXQgcHBfcHJpbnRfc3RyaW5nIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbmxldCBwcF9wcmludF9ieXRlcyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKEJ5dGVzLmxlbmd0aCBzKSAoQnl0ZXMudG9fc3RyaW5nIHMpXG5cbigqIFRvIGZvcm1hdCBhbiBpbnRlZ2VyLiAqKVxubGV0IHBwX3ByaW50X2ludCBzdGF0ZSBpID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChJbnQudG9fc3RyaW5nIGkpXG5cbigqIFRvIGZvcm1hdCBhIGZsb2F0LiAqKVxubGV0IHBwX3ByaW50X2Zsb2F0IHN0YXRlIGYgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9mbG9hdCBmKVxuXG4oKiBUbyBmb3JtYXQgYSBib29sZWFuLiAqKVxubGV0IHBwX3ByaW50X2Jvb2wgc3RhdGUgYiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Jvb2wgYilcblxuKCogVG8gZm9ybWF0IGEgY2hhci4gKilcbmxldCBwcF9wcmludF9jaGFyIHN0YXRlIGMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAxIChTdHJpbmcubWFrZSAxIGMpXG5cblxuKCogT3BlbmluZyBib3hlcy4gKilcbmxldCBwcF9vcGVuX2hib3ggc3RhdGUgKCkgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9oYm94XG5hbmQgcHBfb3Blbl92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfdmJveFxuXG5hbmQgcHBfb3Blbl9odmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2h2Ym94XG5hbmQgcHBfb3Blbl9ob3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ob3Zib3hcbmFuZCBwcF9vcGVuX2JveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2JveFxuXG5cbigqIFByaW50aW5nIHF1ZXVlZCB0ZXh0LlxuXG4gICBbcHBfcHJpbnRfZmx1c2hdIHByaW50cyBhbGwgcGVuZGluZyBpdGVtcyBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYW5kXG4gICB0aGVuIGZsdXNoZXMgdGhlIGxvdyBsZXZlbCBvdXRwdXQgZGV2aWNlIG9mIHRoZSBmb3JtYXR0ZXIgdG8gYWN0dWFsbHlcbiAgIGRpc3BsYXkgcHJpbnRpbmcgbWF0ZXJpYWwuXG5cbiAgIFtwcF9wcmludF9uZXdsaW5lXSBiZWhhdmVzIGFzIFtwcF9wcmludF9mbHVzaF0gYWZ0ZXIgcHJpbnRpbmcgYW4gYWRkaXRpb25hbFxuICAgbmV3IGxpbmUuICopXG5sZXQgcHBfcHJpbnRfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIHRydWU7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuYW5kIHBwX3ByaW50X2ZsdXNoIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgZmFsc2U7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuXG5cbigqIFRvIGdldCBhIG5ld2xpbmUgd2hlbiBvbmUgZG9lcyBub3Qgd2FudCB0byBjbG9zZSB0aGUgY3VycmVudCBib3guICopXG5sZXQgcHBfZm9yY2VfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogVG8gZm9ybWF0IHNvbWV0aGluZywgb25seSBpbiBjYXNlIHRoZSBsaW5lIGhhcyBqdXN0IGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3ByaW50X2lmX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGVcbiAgICAgIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9pZl9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBHZW5lcmFsaXplZCBicmVhayBoaW50IHRoYXQgYWxsb3dzIHByaW50aW5nIHN0cmluZ3MgYmVmb3JlL2FmdGVyXG4gICBzYW1lLWxpbmUgb2Zmc2V0ICh3aWR0aCkgb3IgbmV3LWxpbmUgb2Zmc2V0ICopXG5sZXQgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlIH5maXRzIH5icmVha3MgPVxuICBsZXQgYmVmb3JlLCB3aWR0aCwgYWZ0ZXIgPSBmaXRzIGluXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IHRva2VuID0gUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSBpblxuICAgIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoIGJlZm9yZSArIHdpZHRoICsgU3RyaW5nLmxlbmd0aCBhZnRlciBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cbigqIFByaW50aW5nIGJyZWFrIGhpbnRzOlxuICAgQSBicmVhayBoaW50IGluZGljYXRlcyB3aGVyZSBhIGJveCBtYXkgYmUgYnJva2VuLlxuICAgSWYgbGluZSBpcyBicm9rZW4gdGhlbiBvZmZzZXQgaXMgYWRkZWQgdG8gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50XG4gICBib3ggZWxzZSAodGhlIHZhbHVlIG9mKSB3aWR0aCBibGFua3MgYXJlIHByaW50ZWQuICopXG5sZXQgcHBfcHJpbnRfYnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlXG4gICAgfmZpdHM6KFwiXCIsIHdpZHRoLCBcIlwiKSB+YnJlYWtzOihcIlwiLCBvZmZzZXQsIFwiXCIpXG5cblxuKCogUHJpbnQgYSBzcGFjZSA6XG4gICBhIHNwYWNlIGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBhIHNpbmdsZSBzcGFjZSBpZiB0aGUgYnJlYWsgZG9lcyBub3RcbiAgIHNwbGl0IHRoZSBsaW5lO1xuICAgYSBjdXQgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIG5vdGhpbmcgaWYgdGhlIGJyZWFrIGRvZXMgbm90IHNwbGl0IHRoZVxuICAgbGluZS4gKilcbmxldCBwcF9wcmludF9zcGFjZSBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDEgMFxuYW5kIHBwX3ByaW50X2N1dCBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDAgMFxuXG5cbigqIFRhYnVsYXRpb24gYm94ZXMuICopXG5sZXQgcHBfb3Blbl90Ym94IHN0YXRlICgpID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLnplcm8gaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YmVnaW4gKFBwX3Rib3ggKHJlZiBbXSkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqIENsb3NlIGEgdGFidWxhdGlvbiBib3guICopXG5sZXQgcHBfY2xvc2VfdGJveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF90ZW5kOyBsZW5ndGggPSAwIH0gaW5cbiAgICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW07XG4gICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDFcbiAgZW5kXG5cblxuKCogUHJpbnQgYSB0YWJ1bGF0aW9uIGJyZWFrLiAqKVxubGV0IHBwX3ByaW50X3RicmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RicmVhayAod2lkdGgsIG9mZnNldCk7IGxlbmd0aCA9IHdpZHRoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cblxubGV0IHBwX3ByaW50X3RhYiBzdGF0ZSAoKSA9IHBwX3ByaW50X3RicmVhayBzdGF0ZSAwIDBcblxubGV0IHBwX3NldF90YWIgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9zdGFiOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBjb250cm9sIHRoZSBwcmV0dHktcHJpbnRlcnNcblxuKilcblxuKCogU2V0X21heF9ib3hlcy4gKilcbmxldCBwcF9zZXRfbWF4X2JveGVzIHN0YXRlIG4gPSBpZiBuID4gMSB0aGVuIHN0YXRlLnBwX21heF9ib3hlcyA8LSBuXG5cbigqIFRvIGtub3cgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgYWxsb3dlZC4gKilcbmxldCBwcF9nZXRfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbmxldCBwcF9vdmVyX21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxuKCogRWxsaXBzaXMuICopXG5sZXQgcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgcyA9IHN0YXRlLnBwX2VsbGlwc2lzIDwtIHNcbmFuZCBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSAoKSA9IHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVG8gc2V0IHRoZSBtYXJnaW4gb2YgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfbGltaXQgbiA9XG4gIGlmIG4gPCBwcF9pbmZpbml0eSB0aGVuIG4gZWxzZSBwcmVkIHBwX2luZmluaXR5XG5cblxuKCogSW50ZXJuYWwgcHJldHR5LXByaW50ZXIgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdCA8LSBuO1xuICAgIHN0YXRlLnBwX21heF9pbmRlbnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfcmluaXQgc3RhdGVcblxuXG4oKiBJbml0aWFsbHksIHdlIGhhdmUgOlxuICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0LCBhbmRcbiAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW4uICopXG5sZXQgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbiA9XG4gIGlmIG4gPiAxIHRoZW5cbiAgICBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgKHN0YXRlLnBwX21hcmdpbiAtIG4pXG5cblxubGV0IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2luZGVudFxuXG5sZXQgcHBfc2V0X21hcmdpbiBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9tYXJnaW4gPC0gbjtcbiAgICBsZXQgbmV3X21heF9pbmRlbnQgPVxuICAgICAgKCogVHJ5IHRvIG1haW50YWluIG1heF9pbmRlbnQgdG8gaXRzIGFjdHVhbCB2YWx1ZS4gKilcbiAgICAgIGlmIHN0YXRlLnBwX21heF9pbmRlbnQgPD0gc3RhdGUucHBfbWFyZ2luXG4gICAgICB0aGVuIHN0YXRlLnBwX21heF9pbmRlbnQgZWxzZVxuICAgICAgKCogSWYgcG9zc2libGUgbWFpbnRhaW4gcHBfbWluX3NwYWNlX2xlZnQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAgICAgIGlmIHRoaXMgbGVhZHMgdG8gYSB0b28gc21hbGwgbWF4X2luZGVudCwgdGFrZSBoYWxmIG9mIHRoZVxuICAgICAgICAgbmV3IG1hcmdpbiwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEuICopXG4gICAgICAgSW50Lm1heCAoSW50Lm1heCAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQpXG4gICAgICAgICAgICAgICAgKHN0YXRlLnBwX21hcmdpbiAvIDIpKSAxIGluXG4gICAgKCogUmVidWlsZCBpbnZhcmlhbnRzLiAqKVxuICAgIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG5ld19tYXhfaW5kZW50XG5cblxuKCoqIEdlb21ldHJ5IGZ1bmN0aW9ucyBhbmQgdHlwZXMgKilcbnR5cGUgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ6aW50OyBtYXJnaW46IGludH1cblxubGV0IHZhbGlkYXRlX2dlb21ldHJ5IHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgaWYgbWF4X2luZGVudCA8IDIgdGhlblxuICAgIEVycm9yIFwibWF4X2luZGVudCA8IDJcIlxuICBlbHNlIGlmIG1hcmdpbiA8PSBtYXhfaW5kZW50IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA8PSBtYXhfaW5kZW50XCJcbiAgZWxzZSBPayAoKVxuXG5sZXQgY2hlY2tfZ2VvbWV0cnkgZ2VvbWV0cnkgPVxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgT2sgKCkgLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IHBwX2dldF9tYXJnaW4gc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJnaW5cblxubGV0IHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgcHBfc2V0X21hcmdpbiBzdGF0ZSBtYXJnaW47XG4gIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG1heF9pbmRlbnQ7XG4gICgpXG5cbmxldCBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIG1zZyAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChcIkZvcm1hdC5wcF9zZXRfZ2VvbWV0cnk6IFwiIF4gbXNnKSlcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgX21zZyAtPlxuICAgICAoKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSA9XG4gIHsgbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKTsgbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpIH1cblxubGV0IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGF0ZSB1cGRhdGUgPVxuICBsZXQgZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgaW5cbiAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgKHVwZGF0ZSBnZW9tZXRyeSlcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgICBvdXRfc3RyaW5nID0gZjtcbiAgICAgIG91dF9mbHVzaCA9IGc7XG4gICAgICBvdXRfbmV3bGluZSA9IGg7XG4gICAgICBvdXRfc3BhY2VzID0gaTtcbiAgICAgIG91dF9pbmRlbnQgPSBqO1xuICAgIH0gPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGk7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0galxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBvdXRfc3RyaW5nID0gc3RhdGUucHBfb3V0X3N0cmluZztcbiAgb3V0X2ZsdXNoID0gc3RhdGUucHBfb3V0X2ZsdXNoO1xuICBvdXRfbmV3bGluZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lO1xuICBvdXRfc3BhY2VzID0gc3RhdGUucHBfb3V0X3NwYWNlcztcbiAgb3V0X2luZGVudCA9IHN0YXRlLnBwX291dF9pbmRlbnQ7XG59XG5cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBzdHJpbmcgb3V0cHV0IGFuZCBmbHVzaCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjsgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGdcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gpXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X25ld2xpbmUgc3RhdGUgKCkgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIFwiXFxuXCIgMCAgMVxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgc3BhY2VzLiAqKVxubGV0IGJsYW5rX2xpbmUgPSBTdHJpbmcubWFrZSA4MCAnICdcbmxldCByZWMgZGlzcGxheV9ibGFua3Mgc3RhdGUgbiA9XG4gIGlmIG4gPiAwIHRoZW5cbiAgaWYgbiA8PSA4MCB0aGVuIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIG4gZWxzZVxuICBiZWdpblxuICAgIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIDgwO1xuICAgIGRpc3BsYXlfYmxhbmtzIHN0YXRlIChuIC0gODApXG4gIGVuZFxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9pbmRlbnQgPSBkaXNwbGF5X2JsYW5rc1xuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMgYXMgcHJpbnRpbmcgdG8gYSBnaXZlblxuICAgW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGF0ZSBvYyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gb3V0cHV0X3N1YnN0cmluZyBvYztcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIChmdW4gKCkgLT4gZmx1c2ggb2MpO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3Mgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgc3RhdGVcblxuKCpcblxuICBEZWZpbmluZyBzcGVjaWZpYyBmb3JtYXR0ZXJzXG5cbiopXG5cbmxldCBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjxcIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxubGV0IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjwvXCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcblxubGV0IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWcgPSBpZ25vcmVcbmxldCBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyA9IGlnbm9yZVxuXG4oKiBCdWlsZGluZyBhIGZvcm1hdHRlciBnaXZlbiBpdHMgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy5cbiAgIE90aGVyIGZpZWxkcyBnZXQgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gKilcbmxldCBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGogPVxuICAoKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZm9ybWF0dGVyIGNvbnRhaW5zIGEgZHVtbXkgYm94LiAqKVxuICBsZXQgcHBfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgbGV0IHN5c190b2sgPVxuICAgIHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF9iZWdpbiAoMCwgUHBfaG92Ym94KTsgbGVuZ3RoID0gMCB9IGluXG4gIFF1ZXVlLmFkZCBzeXNfdG9rIHBwX3F1ZXVlO1xuICBsZXQgc2Nhbl9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc2Nhbl9zdGFjaztcbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAxOyBxdWV1ZV9lbGVtID0gc3lzX3RvayB9IHNjYW5fc3RhY2s7XG4gIGxldCBwcF9tYXJnaW4gPSA3OFxuICBhbmQgcHBfbWluX3NwYWNlX2xlZnQgPSAxMCBpblxuICB7XG4gICAgcHBfc2Nhbl9zdGFjayA9IHNjYW5fc3RhY2s7XG4gICAgcHBfZm9ybWF0X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3Rib3hfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGFnX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmtfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFyZ2luID0gcHBfbWFyZ2luO1xuICAgIHBwX21pbl9zcGFjZV9sZWZ0ID0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW47XG4gICAgcHBfY3VycmVudF9pbmRlbnQgPSAwO1xuICAgIHBwX2lzX25ld19saW5lID0gdHJ1ZTtcbiAgICBwcF9sZWZ0X3RvdGFsID0gMTtcbiAgICBwcF9yaWdodF90b3RhbCA9IDE7XG4gICAgcHBfY3Vycl9kZXB0aCA9IDE7XG4gICAgcHBfbWF4X2JveGVzID0gbWF4X2ludDtcbiAgICBwcF9lbGxpcHNpcyA9IFwiLlwiO1xuICAgIHBwX291dF9zdHJpbmcgPSBmO1xuICAgIHBwX291dF9mbHVzaCA9IGc7XG4gICAgcHBfb3V0X25ld2xpbmUgPSBoO1xuICAgIHBwX291dF9zcGFjZXMgPSBpO1xuICAgIHBwX291dF9pbmRlbnQgPSBqO1xuICAgIHBwX3ByaW50X3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX29wZW5fdGFnID0gZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnO1xuICAgIHBwX21hcmtfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZztcbiAgICBwcF9wcmludF9vcGVuX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWc7XG4gICAgcHBfcHJpbnRfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWc7XG4gICAgcHBfcXVldWUgPSBwcF9xdWV1ZTtcbiAgfVxuXG5cbigqIEJ1aWxkIGEgZm9ybWF0dGVyIG91dCBvZiBpdHMgb3V0IGZ1bmN0aW9ucy4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyBvdXRfZnVucyA9XG4gIHBwX21ha2VfZm9ybWF0dGVyXG4gICAgb3V0X2Z1bnMub3V0X3N0cmluZ1xuICAgIG91dF9mdW5zLm91dF9mbHVzaFxuICAgIG91dF9mdW5zLm91dF9uZXdsaW5lXG4gICAgb3V0X2Z1bnMub3V0X3NwYWNlc1xuICAgIG91dF9mdW5zLm91dF9pbmRlbnRcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdpdGggZGVmYXVsdCBmdW5jdGlvbnMgdG8gb3V0cHV0IHNwYWNlcyxcbiAgaW5kZW50YXRpb24sIGFuZCBuZXcgbGluZXMuICopXG5sZXQgbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgbGV0IHBwZiA9IHBwX21ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCBpZ25vcmUgaWdub3JlIGlnbm9yZSBpblxuICBwcGYucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHBwZjtcbiAgcHBmLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3MgcHBmO1xuICBwcGYucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBwcGY7XG4gIHBwZlxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyA9XG4gIG1ha2VfZm9ybWF0dGVyIChvdXRwdXRfc3Vic3RyaW5nIG9jKSAoZnVuICgpIC0+IGZsdXNoIG9jKVxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtCdWZmZXIudF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX2J1ZmZlciBiID1cbiAgbWFrZV9mb3JtYXR0ZXIgKEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIpIGlnbm9yZVxuXG5cbigqIEFsbG9jYXRpbmcgYnVmZmVyIGZvciBwcmV0dHktcHJpbnRpbmcgcHVycG9zZXMuXG4gICBEZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHBwX2J1ZmZlcl9zaXplIG9yIDUxMi5cbiopXG5sZXQgcHBfYnVmZmVyX3NpemUgPSA1MTJcbmxldCBwcF9tYWtlX2J1ZmZlciAoKSA9IEJ1ZmZlci5jcmVhdGUgcHBfYnVmZmVyX3NpemVcblxuKCogVGhlIHN0YW5kYXJkIChzaGFyZWQpIGJ1ZmZlci4gKilcbmxldCBzdGRidWYgPSBwcF9tYWtlX2J1ZmZlciAoKVxuXG4oKiBQcmVkZWZpbmVkIGZvcm1hdHRlcnMgc3RhbmRhcmQgZm9ybWF0dGVyIHRvIHByaW50XG4gICB0byBbU3RkbGliLnN0ZG91dF0sIFtTdGRsaWIuc3RkZXJyXSwgYW5kIHshc3RkYnVmfS4gKilcbmxldCBzdGRfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRvdXRcbmFuZCBlcnJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRlcnJcbmFuZCBzdHJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX2J1ZmZlciBzdGRidWZcblxuXG4oKiBbZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmXSBmbHVzaGVzIGZvcm1hdHRlciBbcHBmXSxcbiAgIHRoZW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgYnVmZmVyIFtidWZdIHRoYXQgaXMgcmVzZXQuXG4gICBGb3JtYXR0ZXIgW3BwZl0gaXMgc3VwcG9zZWQgdG8gcHJpbnQgdG8gYnVmZmVyIFtidWZdLCBvdGhlcndpc2UgdGhpc1xuICAgZnVuY3Rpb24gaXMgbm90IHJlYWxseSB1c2VmdWwuICopXG5sZXQgZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmID1cbiAgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlO1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgQnVmZmVyLnJlc2V0IGJ1ZjtcbiAgc1xuXG5cbigqIEZsdXNoIFtzdHJfZm9ybWF0dGVyXSBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBbc3RkYnVmXS4gKilcbmxldCBmbHVzaF9zdHJfZm9ybWF0dGVyICgpID0gZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBzdGRidWYgc3RyX2Zvcm1hdHRlclxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmdcbiopXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZyBpcyBwcmV0dHktcHJpbnRpbmcgd2l0aCBubyBsb3cgbGV2ZWwgb3V0cHV0LlxuXG4gIFdoZW4gdXNpbmcgYSBzeW1ib2xpYyBmb3JtYXR0ZXIsIGFsbCByZWd1bGFyIHByZXR0eS1wcmludGluZyBhY3Rpdml0aWVzXG4gIG9jY3VyIGJ1dCBvdXRwdXQgbWF0ZXJpYWwgaXMgc3ltYm9saWMgYW5kIHN0b3JlZCBpbiBhIGJ1ZmZlciBvZiBvdXRwdXRcbiAgaXRlbXMuIEF0IHRoZSBlbmQgb2YgcHJldHR5LXByaW50aW5nLCBmbHVzaGluZyB0aGUgb3V0cHV0IGJ1ZmZlciBhbGxvd3NcbiAgcG9zdC1wcm9jZXNzaW5nIG9mIHN5bWJvbGljIG91dHB1dCBiZWZvcmUgbG93IGxldmVsIG91dHB1dCBvcGVyYXRpb25zLlxuKilcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfaXRlbSA9XG4gIHwgT3V0cHV0X2ZsdXNoXG4gIHwgT3V0cHV0X25ld2xpbmVcbiAgfCBPdXRwdXRfc3RyaW5nIG9mIHN0cmluZ1xuICB8IE91dHB1dF9zcGFjZXMgb2YgaW50XG4gIHwgT3V0cHV0X2luZGVudCBvZiBpbnRcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfYnVmZmVyID0ge1xuICBtdXRhYmxlIHN5bWJvbGljX291dHB1dF9jb250ZW50cyA6IHN5bWJvbGljX291dHB1dF9pdGVtIGxpc3Q7XG59XG5cbmxldCBtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIgKCkgPVxuICB7IHN5bWJvbGljX291dHB1dF9jb250ZW50cyA9IFtdIH1cblxubGV0IGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBbXVxuXG5sZXQgZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgTGlzdC5yZXYgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgaXRlbXMgPSBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgaW5cbiAgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2I7XG4gIGl0ZW1zXG5cbmxldCBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIGl0ZW0gPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIGl0ZW0gOjogc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IHN5bWJvbGljX2ZsdXNoIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfZmx1c2hcbiAgYW5kIHN5bWJvbGljX25ld2xpbmUgc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9uZXdsaW5lXG4gIGFuZCBzeW1ib2xpY19zdHJpbmcgc29iIHMgaSBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKSlcbiAgYW5kIHN5bWJvbGljX3NwYWNlcyBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3NwYWNlcyBuKVxuICBhbmQgc3ltYm9saWNfaW5kZW50IHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfaW5kZW50IG4pIGluXG5cbiAgbGV0IGYgPSBzeW1ib2xpY19zdHJpbmcgc29iXG4gIGFuZCBnID0gc3ltYm9saWNfZmx1c2ggc29iXG4gIGFuZCBoID0gc3ltYm9saWNfbmV3bGluZSBzb2JcbiAgYW5kIGkgPSBzeW1ib2xpY19zcGFjZXMgc29iXG4gIGFuZCBqID0gc3ltYm9saWNfaW5kZW50IHNvYiBpblxuICBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGpcblxuKCpcblxuICBCYXNpYyBmdW5jdGlvbnMgb24gdGhlICdzdGFuZGFyZCcgZm9ybWF0dGVyXG4gICh0aGUgZm9ybWF0dGVyIHRoYXQgcHJpbnRzIHRvIFtTdGRsaWIuc3Rkb3V0XSkuXG5cbiopXG5cbmxldCBvcGVuX2hib3ggPSBwcF9vcGVuX2hib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdmJveCA9IHBwX29wZW5fdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9odmJveCA9IHBwX29wZW5faHZib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faG92Ym94ID0gcHBfb3Blbl9ob3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fYm94ID0gcHBfb3Blbl9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX2JveCA9IHBwX2Nsb3NlX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl90YWcgPSBwcF9vcGVuX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGFnID0gcHBfY2xvc2VfdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3N0YWcgPSBwcF9vcGVuX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3N0YWcgPSBwcF9jbG9zZV9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9hcyA9IHBwX3ByaW50X2FzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zdHJpbmcgPSBwcF9wcmludF9zdHJpbmcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2J5dGVzID0gcHBfcHJpbnRfYnl0ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ludCA9IHBwX3ByaW50X2ludCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmxvYXQgPSBwcF9wcmludF9mbG9hdCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY2hhciA9IHBwX3ByaW50X2NoYXIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Jvb2wgPSBwcF9wcmludF9ib29sIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9icmVhayA9IHBwX3ByaW50X2JyZWFrIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jdXQgPSBwcF9wcmludF9jdXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3NwYWNlID0gcHBfcHJpbnRfc3BhY2Ugc3RkX2Zvcm1hdHRlclxuYW5kIGZvcmNlX25ld2xpbmUgPSBwcF9mb3JjZV9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbHVzaCA9IHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9uZXdsaW5lID0gcHBfcHJpbnRfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaWZfbmV3bGluZSA9IHBwX3ByaW50X2lmX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuXG5hbmQgb3Blbl90Ym94ID0gcHBfb3Blbl90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90Ym94ID0gcHBfY2xvc2VfdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGJyZWFrID0gcHBfcHJpbnRfdGJyZWFrIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF90YWIgPSBwcF9zZXRfdGFiIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YWIgPSBwcF9wcmludF90YWIgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21hcmdpbiA9IHBwX3NldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfaW5kZW50ID0gcHBfc2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2dlb21ldHJ5ID0gcHBfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBzYWZlX3NldF9nZW9tZXRyeSA9IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHVwZGF0ZV9nZW9tZXRyeSA9IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2JveGVzID0gcHBfc2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9ib3hlcyA9IHBwX2dldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIG92ZXJfbWF4X2JveGVzID0gcHBfb3Zlcl9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgPSBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgPSBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9wcmludF90YWdzID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9wcmludF90YWdzID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9tYXJrX3RhZ3MgPVxuICBwcF9zZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFya190YWdzID1cbiAgcHBfZ2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3RhZ3MgPVxuICBwcF9zZXRfdGFncyBzdGRfZm9ybWF0dGVyXG5cblxuKCogQ29udmVuaWVuY2UgZnVuY3Rpb25zICopXG5cbigqIFRvIGZvcm1hdCBhIGxpc3QgKilcbmxldCByZWMgcHBfcHJpbnRfbGlzdCA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgPSBmdW5jdGlvblxuICB8IFtdIC0+ICgpXG4gIHwgW3ZdIC0+IHBwX3YgcHBmIHZcbiAgfCB2IDo6IHZzIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcF92IHBwZiB2c1xuXG4oKiBUbyBmb3JtYXQgYSBzZXF1ZW5jZSAqKVxubGV0IHJlYyBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxubGV0IHBwX3ByaW50X3NlcSA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG4oKiBUbyBmb3JtYXQgZnJlZS1mbG93aW5nIHRleHQgKilcbmxldCBwcF9wcmludF90ZXh0IHBwZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbGVmdCA9IHJlZiAwIGluXG4gIGxldCByaWdodCA9IHJlZiAwIGluXG4gIGxldCBmbHVzaCAoKSA9XG4gICAgcHBfcHJpbnRfc3RyaW5nIHBwZiAoU3RyaW5nLnN1YiBzICFsZWZ0ICghcmlnaHQgLSAhbGVmdCkpO1xuICAgIGluY3IgcmlnaHQ7IGxlZnQgOj0gIXJpZ2h0O1xuICBpblxuICB3aGlsZSAoIXJpZ2h0IDw+IGxlbikgZG9cbiAgICBtYXRjaCBzLlshcmlnaHRdIHdpdGhcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgZmx1c2ggKCk7XG4gICAgICAgIHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBmbHVzaCAoKTsgcHBfcHJpbnRfc3BhY2UgcHBmICgpXG4gICAgICAoKiB0aGVyZSBpcyBubyBzcGVjaWZpYyBzdXBwb3J0IGZvciAnXFx0J1xuICAgICAgICAgYXMgaXQgaXMgdW5jbGVhciB3aGF0IGEgcmlnaHQgc2VtYW50aWNzIHdvdWxkIGJlICopXG4gICAgICB8IF8gLT4gaW5jciByaWdodFxuICBkb25lO1xuICBpZiAhbGVmdCA8PiBsZW4gdGhlbiBmbHVzaCAoKVxuXG5sZXQgcHBfcHJpbnRfb3B0aW9uID8obm9uZSA9IGZ1biBfICgpIC0+ICgpKSBwcF92IHBwZiA9IGZ1bmN0aW9uXG58IE5vbmUgLT4gbm9uZSBwcGYgKClcbnwgU29tZSB2IC0+IHBwX3YgcHBmIHZcblxubGV0IHBwX3ByaW50X3Jlc3VsdCB+b2sgfmVycm9yIHBwZiA9IGZ1bmN0aW9uXG58IE9rIHYgLT4gb2sgcHBmIHZcbnwgRXJyb3IgZSAtPiBlcnJvciBwcGYgZVxuXG5sZXQgcHBfcHJpbnRfZWl0aGVyIH5sZWZ0IH5yaWdodCBwcGYgPSBmdW5jdGlvblxufCBFaXRoZXIuTGVmdCBsIC0+IGxlZnQgcHBmIGxcbnwgRWl0aGVyLlJpZ2h0IHIgLT4gcmlnaHQgcHBmIHJcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGNvbXB1dGVfdGFnIG91dHB1dCB0YWdfYWNjID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIG91dHB1dCBwcGYgdGFnX2FjYztcbiAgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICBsZXQgbGVuID0gQnVmZmVyLmxlbmd0aCBidWYgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgZWxzZSBCdWZmZXIuc3ViIGJ1ZiAxIChsZW4gLSAyKVxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgRGVmaW5pbmcgY29udGludWF0aW9ucyB0byBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIG9mXG4gIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi5cblxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIEludGVycHJldCBhIGZvcm1hdHRpbmcgZW50aXR5IG9uIGEgZm9ybWF0dGVyLiAqKVxubGV0IG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZm10aW5nX2xpdCA9IG1hdGNoIGZtdGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfYm94IHBwZiAoKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRfZm9ybWF0dGVyIGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBlcnJfZm9ybWF0dGVyIGZtdFxuXG5sZXQga2RwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gayAoZnVuIHBwZiAtPiBvdXRwdXRfYWNjIHBwZiBhY2MpKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBkcHJpbnRmIGZtdCA9IGtkcHJpbnRmIChmdW4gaSAtPiBpKSBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBzdHJwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIGlkIGZtdFxuXG5sZXQga2FzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBvdXRwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBhc3ByaW50ZiBmbXQgPSBrYXNwcmludGYgaWQgZm10XG5cbigqIEZsdXNoaW5nIHN0YW5kYXJkIGZvcm1hdHRlcnMgYXQgZW5kIG9mIGV4ZWN1dGlvbi4gKilcblxubGV0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMgKCkgPVxuICBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyICgpO1xuICBwcF9wcmludF9mbHVzaCBlcnJfZm9ybWF0dGVyICgpXG5cbmxldCAoKSA9IGF0X2V4aXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVyc1xuXG4oKlxuXG4gIERlcHJlY2F0ZWQgc3R1ZmYuXG5cbiopXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlXG4gICAgfm91dDpmIH5mbHVzaDpnIH5uZXdsaW5lOmggfnNwYWNlczppID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaCxcbiAgIHN0YXRlLnBwX291dF9uZXdsaW5lLCBzdGF0ZS5wcF9vdXRfc3BhY2VzKVxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogZXJyb3IgcHJvbmUgZnVuY3Rpb24sIGRvIG5vdCB1c2UgaXQuXG4gICBUaGlzIGZ1bmN0aW9uIGlzIG5laXRoZXIgY29tcG9zaXRpb25hbCBub3IgaW5jcmVtZW50YWwsIHNpbmNlIGl0IGZsdXNoZXNcbiAgIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhdCBlYWNoIGNhbGwuXG4gICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZGVmaW5lIGEgZm9ybWF0dGVyIG9mIHlvdXIgb3duIHdyaXRpbmcgdG9cbiAgIHRoZSBidWZmZXIgYXJndW1lbnQsIGFzIGluXG4gICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiXG4gICB0aGVuIHVzZSB7IWZwcmludGYgcHBmfSBhcyB1c3VhbC4gKilcbmxldCBicHJpbnRmIGIgKEZvcm1hdCAoZm10LCBfKSA6ICgnYSwgZm9ybWF0dGVyLCB1bml0KSBmb3JtYXQpID1cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPSBvdXRwdXRfYWNjIHBwZiBhY2M7IHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxuKCogRGVwcmVjYXRlZCA6IGFsaWFzIGZvciBrc3ByaW50Zi4gKilcbmxldCBrcHJpbnRmID0ga3NwcmludGZcblxuXG5cbigqIERlcHJlY2F0ZWQgdGFnIGZ1bmN0aW9ucyAqKVxuXG50eXBlIGZvcm1hdHRlcl90YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fdGFnIDogdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3RhZyA6IHRhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV90YWcgOiB0YWcgLT4gdW5pdDtcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV90YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV90YWcgPSBwY3Q7XG4gICB9ID1cbiAgbGV0IHN0cmluZ2lmeSBmIGUgPSBmdW5jdGlvbiBTdHJpbmdfdGFnIHMgLT4gZiBzIHwgXyAtPiBlIGluXG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gc3RyaW5naWZ5IG1vdCBcIlwiO1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgbWN0IFwiXCI7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHN0cmluZ2lmeSBwb3QgKCk7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgcGN0ICgpXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgZm10ICgpID1cbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIGZtdCAoKSBpblxuICBsZXQgbWFya19vcGVuX3RhZyBzID0gZnVucy5tYXJrX29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgbWFya19jbG9zZV90YWcgcyA9IGZ1bnMubWFya19jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9vcGVuX3RhZyBzID0gZnVucy5wcmludF9vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X2Nsb3NlX3RhZyBzID0gZnVucy5wcmludF9jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIHttYXJrX29wZW5fdGFnOyBtYXJrX2Nsb3NlX3RhZzsgcHJpbnRfb3Blbl90YWc7IHByaW50X2Nsb3NlX3RhZ31cblxubGV0IHNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBIZWxwZXJzIGZvciBGb3JtYXR9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbmluY2x1ZGUgRm9ybWF0XG5cbnR5cGUgdCA9IEZvcm1hdC5mb3JtYXR0ZXJcbnR5cGUgLSdhIHByaW50ZXIgPSB0IC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIENvbWJpbmF0b3JzfSAqKVxuXG5sZXQgc2lsZW50IF9mbXQgXyA9ICgpXG5sZXQgcmV0dXJuIGZtdF9zdHIgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJSglKVwiIGZtdF9zdHJcbmxldCB1bml0IGZtdCAoKSA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IFwiKClcIlxubGV0IGludCBmbXQgaSA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgc3RyaW5nID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZ1xubGV0IGJvb2wgPSBGb3JtYXQucHBfcHJpbnRfYm9vbFxubGV0IGZsb2F0MyBmbXQgZiA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIiUuM2ZcIiBmXG5sZXQgZmxvYXQgZm10IGYgPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgY2hhciA9IEZvcm1hdC5wcF9wcmludF9jaGFyXG5sZXQgaW50MzIgZm10IG4gPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlbGRcIiBuXG5sZXQgaW50NjQgZm10IG4gPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlTGRcIiBuXG5sZXQgbmF0aXZlaW50IGZtdCBuID0gRm9ybWF0LmZwcmludGYgZm10IFwiJW5kXCIgblxubGV0IHN0cmluZ19xdW90ZWQgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xubGV0IGZsdXNoID0gRm9ybWF0LnBwX3ByaW50X2ZsdXNoXG5sZXQgc3BhY2UgPSBGb3JtYXQucHBfcHJpbnRfc3BhY2VcbmxldCBjdXQgPSBGb3JtYXQucHBfcHJpbnRfY3V0XG5sZXQgYnJlYWsgZm10IChtLCBuKSA9IEZvcm1hdC5wcF9wcmludF9icmVhayBmbXQgbSBuXG5sZXQgbmV3bGluZSA9IEZvcm1hdC5wcF9mb3JjZV9uZXdsaW5lXG5sZXQgc3Vic3RyaW5nIG91dCAocywgaSwgbGVuKSA6IHVuaXQgPSBzdHJpbmcgb3V0IChTdHJpbmcuc3ViIHMgaSBsZW4pXG5sZXQgdGV4dCA9IEZvcm1hdC5wcF9wcmludF90ZXh0XG5cbmxldCBzdHJpbmdfbGluZXMgb3V0IChzIDogc3RyaW5nKSA6IHVuaXQgPVxuICBmcHJpbnRmIG91dCBcIkBbPHY+XCI7XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgd2hpbGUgIWkgPCBuIGRvXG4gICAgbGV0IGogPSB0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyAhaSAnXFxuJyB3aXRoIE5vdF9mb3VuZCAtPiBuIGluXG4gICAgaWYgIWkgPiAwIHRoZW4gZnByaW50ZiBvdXQgXCJALFwiO1xuICAgIHN1YnN0cmluZyBvdXQgKHMsICFpLCBqIC0gIWkpO1xuICAgIGkgOj0gaiArIDFcbiAgZG9uZTtcbiAgZnByaW50ZiBvdXQgXCJAXVwiXG5cbmxldCBsaXN0ID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBsID1cbiAgbGV0IHJlYyBwcF9saXN0IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgeCA6OiAoXyA6OiBfIGFzIGwpIC0+XG4gICAgICBwcCBmbXQgeDtcbiAgICAgIHNlcCBmbXQgKCk7XG4gICAgICBwcF9saXN0IGxcbiAgICB8IFsgeCBdIC0+IHBwIGZtdCB4XG4gICAgfCBbXSAtPiAoKVxuICBpblxuICBwcF9saXN0IGxcblxubGV0IGFycmF5ID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBhID1cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGkgPiAwIHRoZW4gc2VwIGZtdCAoKTtcbiAgICBwcCBmbXQgYS4oaSlcbiAgZG9uZVxuXG5sZXQgYXJyYXlpID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBhID1cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGkgPiAwIHRoZW4gc2VwIGZtdCAoKTtcbiAgICBwcCBmbXQgKGksIGEuKGkpKVxuICBkb25lXG5cbmxldCBzZXEgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHAgZm10IHNlcSA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIENDU2VxLml0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIHNlcCBmbXQgKCk7XG4gICAgICBwcCBmbXQgeClcbiAgICBzZXFcblxubGV0IGl0ZXIgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHAgZm10IHNlcSA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIHNlcSAoZnVuIHggLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIHNlcCBmbXQgKCk7XG4gICAgICBwcCBmbXQgeClcblxubGV0IG9wdCBwcCBmbXQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBmbXQgXCJub25lXCJcbiAgfCBTb21lIHggLT4gRm9ybWF0LmZwcmludGYgZm10IFwic29tZSAlYVwiIHBwIHhcblxubGV0IHBhaXIgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHBhIHBwYiBmbXQgKGEsIGIpID1cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWElYSVhXCIgcHBhIGEgc2VwICgpIHBwYiBiXG5cbmxldCB0cmlwbGUgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHBhIHBwYiBwcGMgZm10IChhLCBiLCBjKSA9XG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhJWElYSVhJWFcIiBwcGEgYSBzZXAgKCkgcHBiIGIgc2VwICgpIHBwYyBjXG5cbmxldCBxdWFkID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwYSBwcGIgcHBjIHBwZCBmbXQgKGEsIGIsIGMsIGQpID1cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWElYSVhJWElYSVhJWFcIiBwcGEgYSBzZXAgKCkgcHBiIGIgc2VwICgpIHBwYyBjIHNlcCAoKSBwcGRcbiAgICBkXG5cbmxldCBhcHBlbmQgcHBhIHBwYiBmbXQgKCkgPVxuICBwcGEgZm10ICgpO1xuICBwcGIgZm10ICgpXG5cbmxldCBhcHBlbmRfbCBwcGwgZm10ICgpID0gTGlzdC5pdGVyIChmdW4gcHAgLT4gcHAgZm10ICgpKSBwcGxcblxubGV0IHdpdGhpbiBhIGIgcCBvdXQgeCA9XG4gIHN0cmluZyBvdXQgYTtcbiAgcCBvdXQgeDtcbiAgc3RyaW5nIG91dCBiXG5cbmxldCBtYXAgZiBwcCBmbXQgeCA9XG4gIHBwIGZtdCAoZiB4KTtcbiAgKClcblxubGV0IHZib3ggPyhpID0gMCkgcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl92Ym94IG91dCBpO1xuICBwcCBvdXQgeDtcbiAgRm9ybWF0LnBwX2Nsb3NlX2JveCBvdXQgKClcblxubGV0IGhvdmJveCA/KGkgPSAwKSBwcCBvdXQgeCA9XG4gIEZvcm1hdC5wcF9vcGVuX2hvdmJveCBvdXQgaTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBodmJveCA/KGkgPSAwKSBwcCBvdXQgeCA9XG4gIEZvcm1hdC5wcF9vcGVuX2h2Ym94IG91dCBpO1xuICBwcCBvdXQgeDtcbiAgRm9ybWF0LnBwX2Nsb3NlX2JveCBvdXQgKClcblxubGV0IGhib3ggcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl9oYm94IG91dCAoKTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBvZl90b19zdHJpbmcgZiBvdXQgeCA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChmIHgpXG5sZXQgZXhuID0gb2ZfdG9fc3RyaW5nIFByaW50ZXhjLnRvX3N0cmluZ1xubGV0IGNvbnN0IHBwIHggb3V0ICgpID0gcHAgb3V0IHhcblxubGV0IHNvbWUgcHAgb3V0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB4IC0+IHBwIG91dCB4XG5cbmxldCBjb25zdF9zdHJpbmcgcyBvdXQgXyA9IHN0cmluZyBvdXQgc1xubGV0IG9wYXF1ZSBvdXQgXyA9IHN0cmluZyBvdXQgXCJvcGFxdWVcIlxubGV0IGxhenlfZm9yY2UgcHAgb3V0IChsYXp5IHgpID0gcHAgb3V0IHhcblxubGV0IGxhenlfb3IgPyhkZWZhdWx0ID0gcmV0dXJuIFwiPGxhenk+XCIpIHBwIG91dCB4ID1cbiAgaWYgTGF6eS5pc192YWwgeCB0aGVuXG4gICAgcHAgb3V0IChMYXp5LmZvcmNlIHgpXG4gIGVsc2VcbiAgICBkZWZhdWx0IG91dCAoKVxuXG4oKiogezIgSU99ICopXG5cbmxldCBvdXRwdXQgZm10IHBwIHggPSBwcCBmbXQgeFxuXG5sZXQgdG9fc3RyaW5nIHBwIHggPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIHBwIGZtdCB4O1xuICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggZm10ICgpO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBmcHJpbnRmID0gRm9ybWF0LmZwcmludGZcbmxldCBzdGRvdXQgPSBGb3JtYXQuc3RkX2Zvcm1hdHRlclxubGV0IHN0ZGVyciA9IEZvcm1hdC5lcnJfZm9ybWF0dGVyXG5sZXQgb2ZfY2hhbiA9IEZvcm1hdC5mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWxcblxubGV0IHdpdGhfb3V0X2NoYW4gb2MgZiA9XG4gIGxldCBmbXQgPSBvZl9jaGFuIG9jIGluXG4gIHRyeVxuICAgIGxldCB4ID0gZiBmbXQgaW5cbiAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggZm10ICgpO1xuICAgIHhcbiAgd2l0aCBlIC0+XG4gICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICByYWlzZSBlXG5cbmxldCB0ZWUgYSBiID1cbiAgbGV0IGZhID0gRm9ybWF0LnBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBhICgpIGluXG4gIGxldCBmYiA9IEZvcm1hdC5wcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgYiAoKSBpblxuICBGb3JtYXQubWFrZV9mb3JtYXR0ZXJcbiAgICAoZnVuIHN0ciBpIGxlbiAtPlxuICAgICAgZmEuRm9ybWF0Lm91dF9zdHJpbmcgc3RyIGkgbGVuO1xuICAgICAgZmIuRm9ybWF0Lm91dF9zdHJpbmcgc3RyIGkgbGVuKVxuICAgIChmdW4gKCkgLT5cbiAgICAgIGZhLkZvcm1hdC5vdXRfZmx1c2ggKCk7XG4gICAgICBmYi5Gb3JtYXQub3V0X2ZsdXNoICgpKVxuXG5sZXQgdG9fZmlsZSBmaWxlbmFtZSBmb3JtYXQgPVxuICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIGZtdCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICAgIGNsb3NlX291dF9ub2VyciBvYylcbiAgICBmbXQgZm9ybWF0XG5cbm1vZHVsZSBBTlNJX2NvZGVzID0gc3RydWN0XG4gIHR5cGUgY29sb3IgPVxuICAgIFsgYEJsYWNrXG4gICAgfCBgUmVkXG4gICAgfCBgWWVsbG93XG4gICAgfCBgR3JlZW5cbiAgICB8IGBCbHVlXG4gICAgfCBgTWFnZW50YVxuICAgIHwgYEN5YW5cbiAgICB8IGBXaGl0ZVxuICAgIF1cblxuICBsZXQgaW50X29mX2NvbG9yXyA9IGZ1bmN0aW9uXG4gICAgfCBgQmxhY2sgLT4gMFxuICAgIHwgYFJlZCAtPiAxXG4gICAgfCBgR3JlZW4gLT4gMlxuICAgIHwgYFllbGxvdyAtPiAzXG4gICAgfCBgQmx1ZSAtPiA0XG4gICAgfCBgTWFnZW50YSAtPiA1XG4gICAgfCBgQ3lhbiAtPiA2XG4gICAgfCBgV2hpdGUgLT4gN1xuXG4gIHR5cGUgc3R5bGUgPVxuICAgIFsgYEZHIG9mIGNvbG9yICgqIGZvcmVncm91bmQgKilcbiAgICB8IGBCRyBvZiBjb2xvciAoKiBiYWNrZ3JvdW5kICopXG4gICAgfCBgQm9sZFxuICAgIHwgYFJlc2V0XG4gICAgXVxuXG4gIGxldCBjb2RlX29mX3N0eWxlIDogc3R5bGUgLT4gaW50ID0gZnVuY3Rpb25cbiAgICB8IGBGRyBjIC0+IDMwICsgaW50X29mX2NvbG9yXyBjXG4gICAgfCBgQkcgYyAtPiA0MCArIGludF9vZl9jb2xvcl8gY1xuICAgIHwgYEJvbGQgLT4gMVxuICAgIHwgYFJlc2V0IC0+IDBcblxuICBsZXQgc3RyaW5nX29mX3N0eWxlIGEgPSBQcmludGYuc3ByaW50ZiBcIlxceDFiWyVkbVwiIChjb2RlX29mX3N0eWxlIGEpXG4gIGxldCBjbGVhcl9saW5lID0gXCJcXHgxYlsyS1xcclwiXG4gIGxldCByZXNldCA9IHN0cmluZ19vZl9zdHlsZSBgUmVzZXRcblxuICBsZXQgc3RyaW5nX29mX3N0eWxlX2xpc3QgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmVzZXRcbiAgICB8IFsgYSBdIC0+IHN0cmluZ19vZl9zdHlsZSBhXG4gICAgfCBbIGE7IGIgXSAtPlxuICAgICAgUHJpbnRmLnNwcmludGYgXCJcXHgxYlslZDslZG1cIiAoY29kZV9vZl9zdHlsZSBhKSAoY29kZV9vZl9zdHlsZSBiKVxuICAgIHwgWyBhOyBiOyBjIF0gLT5cbiAgICAgIFByaW50Zi5zcHJpbnRmIFwiXFx4MWJbJWQ7JWQ7JWRtXCIgKGNvZGVfb2Zfc3R5bGUgYSkgKGNvZGVfb2Zfc3R5bGUgYilcbiAgICAgICAgKGNvZGVfb2Zfc3R5bGUgYylcbiAgICB8IGwgLT5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gICAgICBsZXQgcHBfbnVtIGMgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHN0cmluZ19vZl9pbnQgKGNvZGVfb2Zfc3R5bGUgYykpIGluXG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXHgxYltcIjtcbiAgICAgIExpc3QuaXRlcmlcbiAgICAgICAgKGZ1biBpIGMgLT5cbiAgICAgICAgICBpZiBpID4gMCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgJzsnO1xuICAgICAgICAgIHBwX251bSBjKVxuICAgICAgICBsO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwibVwiO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGV4Y2VwdGlvbiBOb19zdWNoX3N0eWxlXG5cbiAgKCogcGFyc2UgYSBzdHJpbmcgdGFnLiAqKVxuICBsZXQgc3R5bGVfb2ZfdGFnXyBzID1cbiAgICBtYXRjaCBTdHJpbmcudHJpbSBzIHdpdGhcbiAgICB8IFwicmVzZXRcIiAtPiBbIGBSZXNldCBdXG4gICAgfCBcImJsYWNrXCIgLT4gWyBgRkcgYEJsYWNrIF1cbiAgICB8IFwicmVkXCIgLT4gWyBgRkcgYFJlZCBdXG4gICAgfCBcImdyZWVuXCIgLT4gWyBgRkcgYEdyZWVuIF1cbiAgICB8IFwieWVsbG93XCIgLT4gWyBgRkcgYFllbGxvdyBdXG4gICAgfCBcImJsdWVcIiAtPiBbIGBGRyBgQmx1ZSBdXG4gICAgfCBcIm1hZ2VudGFcIiAtPiBbIGBGRyBgTWFnZW50YSBdXG4gICAgfCBcImN5YW5cIiAtPiBbIGBGRyBgQ3lhbiBdXG4gICAgfCBcIndoaXRlXCIgLT4gWyBgRkcgYFdoaXRlIF1cbiAgICB8IFwiYm9sZFwiIC0+IFsgYEJvbGQgXVxuICAgIHwgXCJCbGFja1wiIC0+IFsgYEZHIGBCbGFjazsgYEJvbGQgXVxuICAgIHwgXCJSZWRcIiAtPiBbIGBGRyBgUmVkOyBgQm9sZCBdXG4gICAgfCBcIkdyZWVuXCIgLT4gWyBgRkcgYEdyZWVuOyBgQm9sZCBdXG4gICAgfCBcIlllbGxvd1wiIC0+IFsgYEZHIGBZZWxsb3c7IGBCb2xkIF1cbiAgICB8IFwiQmx1ZVwiIC0+IFsgYEZHIGBCbHVlOyBgQm9sZCBdXG4gICAgfCBcIk1hZ2VudGFcIiAtPiBbIGBGRyBgTWFnZW50YTsgYEJvbGQgXVxuICAgIHwgXCJDeWFuXCIgLT4gWyBgRkcgYEN5YW47IGBCb2xkIF1cbiAgICB8IFwiV2hpdGVcIiAtPiBbIGBGRyBgV2hpdGU7IGBCb2xkIF1cbiAgICB8IF8gLT4gcmFpc2UgTm9fc3VjaF9zdHlsZVxuZW5kXG5cbmxldCBjb2xvcl9lbmFibGVkID0gcmVmIGZhbHNlXG5cbmxldCBtYXJrX29wZW5fc3R5bGUgc3Qgc3R5bGUgPVxuICBTdGFjay5wdXNoIHN0eWxlIHN0O1xuICBpZiAhY29sb3JfZW5hYmxlZCB0aGVuXG4gICAgQU5TSV9jb2Rlcy5zdHJpbmdfb2Zfc3R5bGVfbGlzdCBzdHlsZVxuICBlbHNlXG4gICAgXCJcIlxuXG5sZXQgbWFya19jbG9zZV9zdHlsZSBzdCA6IHN0cmluZyA9XG4gIGxldCBzdHlsZSA9XG4gICAgdHJ5XG4gICAgICBpZ25vcmUgKFN0YWNrLnBvcCBzdCk7XG4gICAgICAoKiBwb3AgY3VycmVudCBzdHlsZSAoaWYgd2VsbC1zY29wZWQg4oCmKSAqKVxuICAgICAgU3RhY2sudG9wIHN0XG4gICAgICAoKiBsb29rIGF0IHByZXZpb3VzIHN0eWxlICopXG4gICAgd2l0aCBTdGFjay5FbXB0eSAtPiBbIGBSZXNldCBdXG4gIGluXG4gIGlmICFjb2xvcl9lbmFibGVkIHRoZW5cbiAgICBBTlNJX2NvZGVzLnN0cmluZ19vZl9zdHlsZV9saXN0IHN0eWxlXG4gIGVsc2VcbiAgICBcIlwiXG5cbnR5cGUgc3RhZyArPSBTdHlsZSBvZiBBTlNJX2NvZGVzLnN0eWxlIGxpc3RcblxubGV0IHBwX29wZW5fdGFnIG91dCBzID0gcHBfb3Blbl9zdGFnIG91dCAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBvdXQgKCkgPSBwcF9jbG9zZV9zdGFnIG91dCAoKVxuXG4oKiBlaXRoZXIgcHJpbnRzIHRoZSB0YWcgb2YgW3NdIG9yIGRlbGVnYXRlIHRvIFtvcl9lbHNlXSAqKVxubGV0IG1hcmtfb3Blbl9zdGFnIHN0IH5vcl9lbHNlICh0YWcgOiBzdGFnKSA6IHN0cmluZyA9XG4gIG1hdGNoIHRhZyB3aXRoXG4gIHwgU3R5bGUgc3R5bGUgLT4gbWFya19vcGVuX3N0eWxlIHN0IHN0eWxlXG4gIHwgU3RyaW5nX3RhZyBzIC0+XG4gICAgbGV0IG9wZW4gQU5TSV9jb2RlcyBpblxuICAgICh0cnlcbiAgICAgICBsZXQgc3R5bGUgPSBzdHlsZV9vZl90YWdfIHMgaW5cbiAgICAgICBtYXJrX29wZW5fc3R5bGUgc3Qgc3R5bGVcbiAgICAgd2l0aCBOb19zdWNoX3N0eWxlIC0+IG9yX2Vsc2UgdGFnKVxuICB8IF8gLT4gb3JfZWxzZSB0YWdcblxubGV0IG1hcmtfY2xvc2Vfc3RhZyBzdCB+b3JfZWxzZSAodGFnIDogc3RhZykgOiBzdHJpbmcgPVxuICBtYXRjaCB0YWcgd2l0aFxuICB8IFN0eWxlIF8gLT4gbWFya19jbG9zZV9zdHlsZSBzdFxuICB8IFN0cmluZ190YWcgcyAtPlxuICAgIGxldCBvcGVuIEFOU0lfY29kZXMgaW5cbiAgICAoKiBjaGVjayBpZiBpdCdzIGluZGVlZCBhYm91dCBjb2xvciAqKVxuICAgIChtYXRjaCBzdHlsZV9vZl90YWdfIHMgd2l0aFxuICAgIHwgXyAtPiBtYXJrX2Nsb3NlX3N0eWxlIHN0XG4gICAgfCBleGNlcHRpb24gTm9fc3VjaF9zdHlsZSAtPiBvcl9lbHNlIHRhZylcbiAgfCBfIC0+IG9yX2Vsc2UgdGFnXG5cbmxldCB3aXRoX3N0eWxpbmcgc3RsIG91dCBmID1cbiAgcHBfb3Blbl9zdGFnIG91dCAoU3R5bGUgc3RsKTtcbiAgdHJ5XG4gICAgbGV0IHggPSBmICgpIGluXG4gICAgcHBfY2xvc2Vfc3RhZyBvdXQgKCk7XG4gICAgeFxuICB3aXRoIGUgLT5cbiAgICBwcF9jbG9zZV9zdGFnIG91dCAoKTtcbiAgICByYWlzZSBlXG5cbmxldCBzdHlsaW5nIHN0bCBwcCBvdXQgeCA9IHdpdGhfc3R5bGluZyBzdGwgb3V0IEBAIGZ1biAoKSAtPiBwcCBvdXQgeFxuXG4oKiBhZGQgY29sb3IgaGFuZGxpbmcgdG8gZm9ybWF0dGVyIFtwcGZdICopXG5sZXQgc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBwcGYgPVxuICBsZXQgc3QgPSBTdGFjay5jcmVhdGUgKCkgaW5cbiAgKCogc3RhY2sgb2Ygc3R5bGVzICopXG4gIHBwX3NldF9tYXJrX3RhZ3MgcHBmIHRydWU7XG4gICgqIGVuYWJsZSB0YWdzICopXG4gIGxldCBmdW5zID0gcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBwcGYgKCkgaW5cbiAgbGV0IGZ1bnMnID1cbiAgICB7XG4gICAgICBmdW5zIHdpdGhcbiAgICAgIG1hcmtfb3Blbl9zdGFnID0gbWFya19vcGVuX3N0YWcgc3Qgfm9yX2Vsc2U6ZnVucy5tYXJrX29wZW5fc3RhZztcbiAgICAgIG1hcmtfY2xvc2Vfc3RhZyA9IG1hcmtfY2xvc2Vfc3RhZyBzdCB+b3JfZWxzZTpmdW5zLm1hcmtfY2xvc2Vfc3RhZztcbiAgICB9XG4gIGluXG4gIHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgcHBmIGZ1bnMnXG5cbmxldCBzZXRfY29sb3JfZGVmYXVsdCA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIGZ1biBiIC0+XG4gICAgaWYgYiAmJiBub3QgIWNvbG9yX2VuYWJsZWQgdGhlbiAoXG4gICAgICBjb2xvcl9lbmFibGVkIDo9IHRydWU7XG4gICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlO1xuICAgICAgICBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIHN0ZG91dDtcbiAgICAgICAgc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBzdGRlcnJcbiAgICAgIClcbiAgICApIGVsc2UgaWYgKG5vdCBiKSAmJiAhY29sb3JfZW5hYmxlZCB0aGVuXG4gICAgICBjb2xvcl9lbmFibGVkIDo9IGZhbHNlXG5cbmxldCB3aXRoX2NvbG9yIHMgcHAgb3V0IHggPVxuICBwcF9vcGVuX3RhZyBvdXQgcztcbiAgcHAgb3V0IHg7XG4gIHBwX2Nsb3NlX3RhZyBvdXQgKClcblxubGV0IHdpdGhfY29sb3JmIHMgb3V0IGZtdCA9XG4gIHBwX29wZW5fdGFnIG91dCBzO1xuICBGb3JtYXQua2ZwcmludGYgKGZ1biBvdXQgLT4gcHBfY2xvc2VfdGFnIG91dCAoKSkgb3V0IGZtdFxuXG4oKiBjOiB3aGV0aGVyIGNvbG9ycyBhcmUgZW5hYmxlZCAqKVxubGV0IHNwcmludGZfIGMgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBpZiBjICYmICFjb2xvcl9lbmFibGVkIHRoZW4gc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBmbXQ7XG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gX2ZtdCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgZm10IGZvcm1hdFxuXG5sZXQgd2l0aF9jb2xvcl9rc2YgfmYgcyBmbXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgb3V0ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIGlmICFjb2xvcl9lbmFibGVkIHRoZW4gc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBvdXQ7XG4gIHBwX29wZW5fdGFnIG91dCBzO1xuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgcHBfY2xvc2VfdGFnIG91dCAoKTtcbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBvdXQgKCk7XG4gICAgICBmIChCdWZmZXIuY29udGVudHMgYnVmKSlcbiAgICBvdXQgZm10XG5cbmxldCB3aXRoX2NvbG9yX3NmIHMgZm10ID0gd2l0aF9jb2xvcl9rc2YgfmY6KGZ1biBzIC0+IHMpIHMgZm10XG5sZXQgc3ByaW50ZiBmbXQgPSBzcHJpbnRmXyB0cnVlIGZtdFxubGV0IHNwcmludGZfbm9fY29sb3IgZm10ID0gc3ByaW50Zl8gZmFsc2UgZm10XG5sZXQgc3ByaW50Zl9keW5fY29sb3IgfmNvbG9ycyBmbXQgPSBzcHJpbnRmXyBjb2xvcnMgZm10XG5cbmxldCBmcHJpbnRmX2R5bl9jb2xvciB+Y29sb3JzIG91dCBmbXQgPVxuICBsZXQgb2xkX3RhZ3MgPSBGb3JtYXQucHBfZ2V0X21hcmtfdGFncyBvdXQgKCkgaW5cbiAgRm9ybWF0LnBwX3NldF9tYXJrX3RhZ3Mgb3V0IGNvbG9ycztcbiAgKCogZW5hYmxlL2Rpc2FibGUgdGFncyAqKVxuICBGb3JtYXQua2ZwcmludGYgKGZ1biBvdXQgLT4gRm9ybWF0LnBwX3NldF9tYXJrX3RhZ3Mgb3V0IG9sZF90YWdzKSBvdXQgZm10XG5cbmxldCBrc3ByaW50ZiA/bWFyZ2luIH5mIGZtdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIGxldCBvdXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgaWYgIWNvbG9yX2VuYWJsZWQgdGhlbiBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIG91dDtcbiAgKG1hdGNoIG1hcmdpbiB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgbSAtPiBwcF9zZXRfbWFyZ2luIG91dCBtKTtcbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBfIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgZiAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikpXG4gICAgb3V0IGZtdFxuXG5tb2R1bGUgRHVtcCA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBwcmludGVyXG5cbiAgbGV0IHVuaXQgPSB1bml0XG4gIGxldCBpbnQgPSBpbnRcbiAgbGV0IHN0cmluZyA9IHN0cmluZ19xdW90ZWRcbiAgbGV0IGJvb2wgPSBib29sXG4gIGxldCBmbG9hdCA9IGZsb2F0XG4gIGxldCBjaGFyID0gY2hhclxuICBsZXQgaW50MzIgPSBpbnQzMlxuICBsZXQgaW50NjQgPSBpbnQ2NFxuICBsZXQgbmF0aXZlaW50ID0gbmF0aXZlaW50XG4gIGxldCBsaXN0IHBwID0gd2l0aGluIFwiW1wiIFwiXVwiIChob3Zib3ggKGxpc3QgfnNlcDoocmV0dXJuIFwiO0AsXCIpIHBwKSlcbiAgbGV0IGFycmF5IHBwID0gd2l0aGluIFwiW3xcIiBcInxdXCIgKGhvdmJveCAoYXJyYXkgfnNlcDoocmV0dXJuIFwiO0AsXCIpIHBwKSlcblxuICBsZXQgb3B0aW9uIHBwIG91dCB4ID1cbiAgICBtYXRjaCB4IHdpdGhcbiAgICB8IE5vbmUgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJOb25lXCJcbiAgICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJTb21lICVhXCIgcHAgeFxuXG4gIGxldCBwYWlyIHAxIHAyID0gd2l0aGluIFwiKFwiIFwiKVwiIChob3Zib3ggKHBhaXIgcDEgcDIpKVxuICBsZXQgdHJpcGxlIHAxIHAyIHAzID0gd2l0aGluIFwiKFwiIFwiKVwiIChob3Zib3ggKHRyaXBsZSBwMSBwMiBwMykpXG4gIGxldCBxdWFkIHAxIHAyIHAzIHA0ID0gd2l0aGluIFwiKFwiIFwiKVwiIChob3Zib3ggKHF1YWQgcDEgcDIgcDMgcDQpKVxuXG4gIGxldCByZXN1bHQnIHBvayBwZXJyb3Igb3V0ID0gZnVuY3Rpb25cbiAgICB8IE9rIHggLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiKEBbT2sgJWFAXSlcIiBwb2sgeFxuICAgIHwgRXJyb3IgZSAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQFtFcnJvciAlYUBdKVwiIHBlcnJvciBlXG5cbiAgbGV0IHJlc3VsdCBwb2sgPSByZXN1bHQnIHBvayBzdHJpbmdcbiAgbGV0IHRvX3N0cmluZyA9IHRvX3N0cmluZ1xuZW5kXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCArKyApID0gYXBwZW5kXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iLCJtb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgdHlwZSAnYSBqc19hcnJheSA9IHRcblxuICB0eXBlICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2sgPSB0XG5cbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19zdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc2J5dGVzX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuICBleHRlcm5hbCBib29sIDogYm9vbCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgdG9fYm9vbCA6IHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuICBleHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fYXJyYXkgOiB0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2pzX3RvX2FycmF5XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG4gIGV4dGVybmFsIGZsb2F0X29mX251bWJlciA6IHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9pbnQzMiA6IGludDMyIC0+IHQgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgaW50MzJfb2ZfbnVtYmVyIDogdCAtPiBpbnQzMiA9IFwiY2FtbF9qc190b19pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCBuYXRpdmVpbnRfb2ZfbnVtYmVyIDogdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCB0eXBlb2YgOiB0IC0+IHQgPSBcImNhbWxfanNfdHlwZW9mXCJcblxuICBleHRlcm5hbCBpbnN0YW5jZW9mIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbiAgZXh0ZXJuYWwgZGVidWdnZXIgOiB1bml0IC0+IHVuaXQgPSBcImRlYnVnZ2VyXCJcblxuICBleHRlcm5hbCBnZXQgOiB0IC0+IHQgLT4gdCA9IFwiY2FtbF9qc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICBleHRlcm5hbCBkZWxldGUgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19kZWxldGVcIlxuXG4gIGV4dGVybmFsIGNhbGwgOiB0IC0+IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gIGV4dGVybmFsIGZ1bl9jYWxsIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbCA6IHQgLT4gc3RyaW5nIC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gIGV4dGVybmFsIG5ld19vYmogOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19uZXdcIlxuXG4gIGV4dGVybmFsIG5ld19vYmpfYXJyIDogdCAtPiB0IGpzX2FycmF5IC0+IHQgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gIGV4dGVybmFsIG9iaiA6IChzdHJpbmcgKiB0KSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX29iamVjdFwiXG5cbiAgZXh0ZXJuYWwgZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgZXh0ZXJuYWwgZXZhbF9zdHJpbmcgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXZhbF9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICh0IGpzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIHQganNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAoJ2IgLT4gdCBqc19hcnJheSAtPiAnYSkgLT4gKCdiLCB0IGpzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHdyYXBfbWV0aF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdhLCAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja1wiXG5lbmRcblxubW9kdWxlIFN5cyA9IHN0cnVjdFxuICB0eXBlICdhIGNhbGxiYWNrID0gJ2FcblxuICBleHRlcm5hbCBjcmVhdGVfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IGNvbnRlbnQ6c3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfY3JlYXRlX2ZpbGVcIlxuXG4gIGV4dGVybmFsIHJlYWRfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IHN0cmluZyA9IFwiY2FtbF9yZWFkX2ZpbGVfY29udGVudFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfb3V0cHV0JyA6IG91dF9jaGFubmVsIC0+IChqc19zdHJpbmc6SnMudCAtPiB1bml0KSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9pbnB1dCcgOiBpbl9jaGFubmVsIC0+ICh1bml0IC0+IHN0cmluZykgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfcG9pbnQgOiB1bml0IC0+IHN0cmluZyBsaXN0ID0gXCJjYW1sX2xpc3RfbW91bnRfcG9pbnRcIlxuXG4gIGV4dGVybmFsIG1vdW50X2F1dG9sb2FkIDogc3RyaW5nIC0+IChzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb24pIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tb3VudF9hdXRvbG9hZFwiXG5cbiAgZXh0ZXJuYWwgdW5tb3VudCA6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3VubW91bnRcIlxuXG4gIHR5cGUgcmVkaXJlY3Rpb25cblxuICBleHRlcm5hbCByZWRpcmVjdF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gaW50bzpvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvblxuICAgID0gXCJjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3RcIlxuXG4gIGV4dGVybmFsIHJlc3RvcmVfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHJlZGlyZWN0aW9uIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmVcIlxuXG4gIG1vZHVsZSBDb25maWcgPSBzdHJ1Y3RcbiAgICBleHRlcm5hbCB1c2VfanNfc3RyaW5nIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1wiXG5cbiAgICBleHRlcm5hbCBlZmZlY3RzIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1wiXG4gIGVuZFxuXG4gIGxldCB2ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLnNcblxuICBsZXQgZ2l0X3ZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uZ2l0X3ZlcnNpb25cbmVuZFxuXG5tb2R1bGUgRXJyb3IgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHJhaXNlXyA6IHQgLT4gJ2FcblxuICB2YWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4blxuICAoKiogQXR0YWNoIGEgSmF2YXNTY3JpcHQgZXJyb3IgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLiAgaWYgW2ZvcmNlID0gZmFsc2VdIGFuZCBhXG4gICAgSmF2YXNTY3JpcHQgZXJyb3IgaXMgYWxyZWFkeSBhdHRhY2hlZCwgaXQgd2lsbCBkbyBub3RoaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB0b1xuICAgIHN0b3JlIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcy5cblxuICAgIEF0dGFjaGluZyBKYXZhc1NjcmlwdCBlcnJvcnMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSB3aGVuIGNvbXBpbGluZyB3aXRoXG4gICAgWy0tZW5hYmxlIHdpdGgtanMtZXJyb3JdLiAqKVxuXG4gIHZhbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb25cbiAgKCoqIEV4dHJhY3QgYSBKYXZhU2NyaXB0IGVycm9yIGF0dGFjaGVkIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbiwgaWYgYW55LiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgICAgIGluc3BlY3QgYW4gZXZlbnR1YWwgc3RhY2sgc3RyYWNlLCBlc3BlY2lhbGx5IHdoZW4gc291cmNlbWFwIGlzIGVuYWJsZWQuICopXG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG4gICgqKiBUaGUgW0Vycm9yXSBleGNlcHRpb24gd3JhcCBqYXZhc2NyaXB0IGV4Y2VwdGlvbnMgd2hlbiBjYXVnaHQgYnkgT0NhbWwgY29kZS5cbiAgICAgIEluIGNhc2UgdGhlIGphdmFzY3JpcHQgZXhjZXB0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBqYXZhc2NyaXB0IFtFcnJvcl0sXG4gICAgICBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYW5kIHdyYXBwZWQgaW50byBhIFtGYWlsdXJlXSBleGNlcHRpb24uXG4gICopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG5cbiAgbGV0IF8gPSBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gXCJqc0Vycm9yXCIgKEV4biAoT2JqLm1hZ2ljIFt8fF0pKVxuXG4gIGxldCByYWlzZV8gOiB0IC0+ICdhID0gSnMuanNfZXhwciBcIihmdW5jdGlvbiAoZXhuKSB7IHRocm93IGV4biB9KVwiXG5cbiAgZXh0ZXJuYWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uID0gXCJjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cIlxuXG4gIGV4dGVybmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG4gPSBcImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXCJcbmVuZFxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMi02MFwiXVxuXG5tb2R1bGUgRm9yX2NvbXBhdGliaWxpdHlfb25seSA9IHN0cnVjdFxuICAoKiBBZGQgcHJpbWl0aXZlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBFeGlzdGluZyB1c2VycyBtaWdodFxuICAgICBkZXBlbmQgb24gaXQgKGUuZy4gZ2VuX2pzX2FwaSksIHdlIGRvbnQgd2FudCB0aGUgb2NhbWwgY29tcGlsZXJcbiAgICAgdG8gY29tcGxhaW4gYWJvdXQgdGhlc2VzIG1pc3NpbmcgcHJpbWl0aXZlcy4gKilcblxuICBleHRlcm5hbCBjYW1sX2pzX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IEpzLnQgPSBcImNhbWxfanNfZnJvbV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19ieXRlX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF9vZl9qc19hcnJheSA6ICdhIEpzLmpzX2FycmF5IC0+ICdhIGxpc3QgPSBcImNhbWxfbGlzdF9vZl9qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X3RvX2pzX2FycmF5IDogJ2EgbGlzdCAtPiAnYSBKcy5qc19hcnJheSA9IFwiY2FtbF9saXN0X3RvX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuZW5kXG5cbm1vZHVsZSBUeXBlZF9hcnJheSA9IHN0cnVjdFxuICB0eXBlICgnYSwgJ2IpIHR5cGVkQXJyYXkgPSBKcy50XG5cbiAgdHlwZSBhcnJheUJ1ZmZlciA9IEpzLnRcblxuICB0eXBlIHVpbnQ4QXJyYXkgPSBKcy50XG5cbiAgZXh0ZXJuYWwga2luZCA6ICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYikgQmlnYXJyYXkua2luZFxuICAgID0gXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGZyb21fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50IC0+ICgnYSwgJ2IpIHR5cGVkQXJyYXlcbiAgICA9IFwiY2FtbF9iYV90b190eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnRcbiAgICA9IFwiY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5XCJcblxuICBtb2R1bGUgQmlnc3RyaW5nID0gc3RydWN0XG4gICAgdHlwZSB0ID0gKGNoYXIsIEJpZ2FycmF5LmludDhfdW5zaWduZWRfZWx0LCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuQXJyYXkxLnRcblxuICAgIGV4dGVybmFsIHRvX2FycmF5QnVmZmVyIDogdCAtPiBhcnJheUJ1ZmZlciA9IFwiYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCB0b191aW50OEFycmF5IDogdCAtPiB1aW50OEFycmF5ID0gXCJiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXlcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfYXJyYXlCdWZmZXIgOiBhcnJheUJ1ZmZlciAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHQgPSBcImJpZ3N0cmluZ19vZl90eXBlZF9hcnJheVwiXG4gIGVuZFxuXG4gIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfYXJyYXlcIlxuZW5kXG5cbm1vZHVsZSBJbnQ2NCA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGVfaW50NjRfbG9fbWlfaGkgOiBpbnQgLT4gaW50IC0+IGludCAtPiBJbnQ2NC50XG4gICAgPSBcImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXCJcbmVuZFxuIiwiKCoqIENyZWF0ZS1vbmx5IHZlcnNpb24gb2YgW09iai50XSAqKVxubW9kdWxlIEFueSA6IHNpZ1xuICB0eXBlIHRcbiAgdmFsIGFueSA6ICdhIC0+IHRcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHQgPSBPYmoudFxuICBsZXQgYW55ID0gT2JqLnJlcHJcbmVuZFxuXG50eXBlICdhIGV2YWwgPVxuICB8IEV2YWxfbm9uZVxuICB8IEV2YWxfcHJvZ3Jlc3NcbiAgfCBFdmFsX3NvbWUgb2YgJ2FcblxudHlwZSAnYSB0XyA9XG4gIHwgUHVyZSBvZiAnYVxuICB8IE9wZXJhdG9yIDoge1xuICAgICAgbXV0YWJsZSB2YWx1ZSA6ICdhIGV2YWw7ICgqIGNhY2hlZCB2YWx1ZSAqKVxuICAgICAgbXV0YWJsZSB0cmFjZSA6IHRyYWNlOyAoKiBsaXN0IG9mIHBhcmVudHMgdGhpcyBjYW4gaW52YWxpZGF0ZSAqKVxuICAgICAgbXV0YWJsZSB0cmFjZV9pZHggOiB0cmFjZV9pZHg7ICgqIGxpc3Qgb2YgZGlyZWN0IGNoaWxkcmVuIHRoYXQgY2FuIGludmFsaWRhdGUgdGhpcyAqKVxuICAgICAgZGVzYzogJ2EgZGVzYztcbiAgICB9IC0+ICdhIHRfXG4gIHwgUm9vdCA6IHtcbiAgICAgIG11dGFibGUgdmFsdWUgOiAnYSBldmFsOyAoKiBjYWNoZWQgdmFsdWUgKilcbiAgICAgIG11dGFibGUgdHJhY2VfaWR4IDogdHJhY2VfaWR4OyAoKiBsaXN0IG9mIGRpcmVjdCBjaGlsZHJlbiB0aGF0IGNhbiBpbnZhbGlkYXRlIHRoaXMgKilcbiAgICAgIG11dGFibGUgb25faW52YWxpZGF0ZSA6ICdhIC0+IHVuaXQ7XG4gICAgICBtdXRhYmxlIGFjcXVpcmVkIDogYm9vbDtcbiAgICAgIGNoaWxkIDogJ2EgdF87XG4gICAgfSAtPiAnYSB0X1xuXG5hbmQgXyBkZXNjID1cbiAgfCBNYXAgIDogJ2EgdF8gKiAoJ2EgLT4gJ2IpIC0+ICdiIGRlc2NcbiAgfCBNYXAyIDogJ2EgdF8gKiAnYiB0XyAqICgnYSAtPiAnYiAtPiAnYykgLT4gJ2MgZGVzY1xuICB8IFBhaXIgOiAnYSB0XyAqICdiIHRfIC0+ICgnYSAqICdiKSBkZXNjXG4gIHwgQXBwICA6ICgnYSAtPiAnYikgdF8gKiAnYSB0XyAtPiAnYiBkZXNjXG4gIHwgSm9pbiA6IHsgY2hpbGQgOiAnYSB0XyB0XzsgbXV0YWJsZSBpbnRlcm1lZGlhdGUgOiAnYSB0XyBvcHRpb24gfSAtPiAnYSBkZXNjXG4gIHwgVmFyICA6IHsgbXV0YWJsZSBiaW5kaW5nIDogJ2EgfSAtPiAnYSBkZXNjXG4gIHwgUHJpbSA6IHsgYWNxdWlyZSA6ICdhIHQgLT4gJ2E7XG4gICAgICAgICAgICAgcmVsZWFzZSA6ICdhIHQgLT4gJ2EgLT4gdW5pdCB9IC0+ICdhIGRlc2NcbiAgfCBGaXggOiB7IGRvYyA6ICdhIHRfOyB3cnQgOiBfIHRfIH0gLT4gJ2EgZGVzY1xuXG4oKiBhIHNldCBvZiAoYWN0aXZlKSBwYXJlbnRzIGZvciBhIFsnYSB0XSwgdXNlZCBkdXJpbmcgaW52YWxpZGF0aW9uICopXG5hbmQgdHJhY2UgPVxuICB8IFQwXG4gIHwgVDEgOiBfIHRfIC0+IHRyYWNlXG4gIHwgVDIgOiBfIHRfICogXyB0XyAtPiB0cmFjZVxuICB8IFQzIDogXyB0XyAqIF8gdF8gKiBfIHRfIC0+IHRyYWNlXG4gIHwgVDQgOiBfIHRfICogXyB0XyAqIF8gdF8gKiBfIHRfIC0+IHRyYWNlXG4gIHwgVG4gOiB7IG11dGFibGUgYWN0aXZlIDogaW50OyBtdXRhYmxlIGNvdW50IDogaW50O1xuICAgICAgICAgICBtdXRhYmxlIGVudHJpZXMgOiBBbnkudCB0XyBhcnJheSB9IC0+IHRyYWNlXG5cbigqIGEgc2V0IG9mIGRpcmVjdCBjaGlsZHJlbiBmb3IgYSBjb21wb3NpdGUgZG9jdW1lbnQgKilcbmFuZCB0cmFjZV9pZHggPVxuICB8IEkwXG4gIHwgSTEgOiB7IG11dGFibGUgaWR4IDogaW50IDtcbiAgICAgICAgICAgb2JqIDogJ2EgdF87XG4gICAgICAgICAgIG11dGFibGUgbmV4dCA6IHRyYWNlX2lkeCB9IC0+IHRyYWNlX2lkeFxuXG4oKiBUaGUgdHlwZSBzeXN0ZW0gY2Fubm90IHNlZSB0aGF0IHQgaXMgY292YXJpYW50IGluIGl0cyBwYXJhbWV0ZXIuXG4gICBVc2UgdGhlIEZvcmNlIHRvIGNvbnZpbmNlIGl0LiAqKVxuYW5kICsnYSB0XG5leHRlcm5hbCBpbmogOiAnYSB0XyAtPiAnYSB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgcHJqIDogJ2EgdCAtPiAnYSB0XyA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHByajIgOiAnYSB0IHQgLT4gJ2EgdF8gdF8gPSBcIiVpZGVudGl0eVwiXG5cbigqIEJhc2ljIGNvbWJpbmF0b3JzICopXG5sZXQgcmV0dXJuIHggPSBpbmogKFB1cmUgeClcbmxldCBwdXJlIHggPSBpbmogKFB1cmUgeClcblxubGV0IGlzX3B1cmUgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIHggLT4gU29tZSB4XG4gIHwgXyAtPiBOb25lXG5cbmxldCBkdW1teSA9IFB1cmUgKEFueS5hbnkgKCkpXG5cbmxldCBvcGVyYXRvciBkZXNjID1cbiAgT3BlcmF0b3IgeyB2YWx1ZSA9IEV2YWxfbm9uZTsgdHJhY2UgPSBUMDsgZGVzYzsgdHJhY2VfaWR4ID0gSTAgfVxuXG5sZXQgbWFwIHggfmYgPSBpbmogKFxuICAgIG1hdGNoIHByaiB4IHdpdGhcbiAgICB8IFB1cmUgdnggLT4gUHVyZSAoZiB2eClcbiAgICB8IHggLT4gb3BlcmF0b3IgKE1hcCAoeCwgZikpXG4gIClcblxubGV0IG1hcDIgeCB5IH5mID0gaW5qIChcbiAgICBtYXRjaCBwcmogeCwgcHJqIHkgd2l0aFxuICAgIHwgUHVyZSB2eCwgUHVyZSB2eSAtPiBQdXJlIChmIHZ4IHZ5KVxuICAgIHwgeCwgeSAtPiBvcGVyYXRvciAoTWFwMiAoeCwgeSwgZikpXG4gIClcblxubGV0IHBhaXIgeCB5ID0gaW5qIChcbiAgICBtYXRjaCBwcmogeCwgcHJqIHkgd2l0aFxuICAgIHwgUHVyZSB2eCwgUHVyZSB2eSAtPiBQdXJlICh2eCwgdnkpXG4gICAgfCB4LCB5IC0+IG9wZXJhdG9yIChQYWlyICh4LCB5KSlcbiAgKVxuXG5sZXQgYXBwIGYgeCA9IGluaiAoXG4gICAgbWF0Y2ggcHJqIGYsIHByaiB4IHdpdGhcbiAgICB8IFB1cmUgdmYsIFB1cmUgdnggLT4gUHVyZSAodmYgdngpXG4gICAgfCBmLCB4IC0+IG9wZXJhdG9yIChBcHAgKGYsIHgpKVxuICApXG5cbmxldCBqb2luIGNoaWxkID0gaW5qIChcbiAgICBtYXRjaCBwcmoyIGNoaWxkIHdpdGhcbiAgICB8IFB1cmUgdiAtPiB2XG4gICAgfCBjaGlsZCAtPiBvcGVyYXRvciAoSm9pbiB7IGNoaWxkOyBpbnRlcm1lZGlhdGUgPSBOb25lIH0pXG4gIClcblxubGV0IGJpbmQgeCB+ZiA9IGpvaW4gKG1hcCB+ZiB4KVxuXG4oKiBNYW5hZ2VtZW50IG9mIHRyYWNlIGluZGljZXMgKilcblxubGV0IGFkZHIgb2Mgb2JqID1cbiAgUHJpbnRmLmZwcmludGYgb2MgXCIweCUwOHhcIiAoT2JqLm1hZ2ljIG9iaiA6IGludClcblxuZXh0ZXJuYWwgdF9lcXVhbCA6IF8gdF8gLT4gXyB0XyAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgb2JqX3QgOiAnYSB0XyAtPiBBbnkudCB0XyA9IFwiJWlkZW50aXR5XCJcblxubGV0IHJlYyBkdW1wX3RyYWNlIDogdHlwZSBhLiBhIHRfIC0+IHVuaXQgPVxuICBmdW4gb2JqIC0+IG1hdGNoIG9iaiB3aXRoXG4gIHwgUHVyZSBfIC0+IFByaW50Zi5lcHJpbnRmIFwiJWE6IFB1cmUgX1xcbiUhXCIgYWRkciBvYmpcbiAgfCBPcGVyYXRvciB0IC0+XG4gICAgUHJpbnRmLmVwcmludGYgXCIlYTogT3BlcmF0b3IgXyAtPiAlYVxcbiUhXCIgYWRkciBvYmogZHVtcF90cmFjZV9hdXggdC50cmFjZTtcbiAgICBiZWdpbiBtYXRjaCB0LnRyYWNlIHdpdGhcbiAgICAgIHwgVDAgLT4gKClcbiAgICAgIHwgVDEgYSAtPiBkdW1wX3RyYWNlIGFcbiAgICAgIHwgVDIgKGEsYikgLT4gZHVtcF90cmFjZSBhOyBkdW1wX3RyYWNlIGJcbiAgICAgIHwgVDMgKGEsYixjKSAtPiBkdW1wX3RyYWNlIGE7IGR1bXBfdHJhY2UgYjsgZHVtcF90cmFjZSBjXG4gICAgICB8IFQ0IChhLGIsYyxkKSAtPiBkdW1wX3RyYWNlIGE7IGR1bXBfdHJhY2UgYjsgZHVtcF90cmFjZSBjOyBkdW1wX3RyYWNlIGRcbiAgICAgIHwgVG4gdCAtPiBBcnJheS5pdGVyIGR1bXBfdHJhY2UgdC5lbnRyaWVzXG4gICAgZW5kXG4gIHwgUm9vdCBfIC0+IFByaW50Zi5lcHJpbnRmIFwiJWE6IFJvb3QgX1xcbiUhXCIgYWRkciBvYmpcblxuYW5kIGR1bXBfdHJhY2VfYXV4IG9jID0gZnVuY3Rpb25cbiAgfCBUMCAtPiBQcmludGYuZnByaW50ZiBvYyBcIlQwXCJcbiAgfCBUMSBhIC0+IFByaW50Zi5mcHJpbnRmIG9jIFwiVDEgJWFcIiBhZGRyIGFcbiAgfCBUMiAoYSxiKSAtPlxuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwiVDIgKCVhLCAlYSlcIiBhZGRyIGEgYWRkciBiXG4gIHwgVDMgKGEsYixjKSAtPlxuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwiVDMgKCVhLCAlYSwgJWEpXCIgYWRkciBhIGFkZHIgYiBhZGRyIGNcbiAgfCBUNCAoYSxiLGMsZCkgLT5cbiAgICBQcmludGYuZnByaW50ZiBvYyBcIlQ0ICglYSwgJWEsICVhLCAlYSlcIiBhZGRyIGEgYWRkciBiIGFkZHIgYyBhZGRyIGRcbiAgfCBUbiB0IC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUbiB7YWN0aXZlID0gJWQ7IGNvdW50ID0gJWQ7IGVudHJpZXMgPSBcIlxuICAgICAgdC5hY3RpdmUgdC5jb3VudDtcbiAgICBBcnJheS5pdGVyIChQcmludGYuZnByaW50ZiBvYyBcIiglYSlcIiBhZGRyKSB0LmVudHJpZXM7XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJ9XCJcblxubGV0IGR1bXBfdHJhY2UgeCA9IGR1bXBfdHJhY2UgKG9ial90IChwcmogeCkpXG5cbmxldCBhZGRfaWR4IG9iaiBpZHggPSBmdW5jdGlvblxuICB8IFB1cmUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQnIC0+IHQnLnRyYWNlX2lkeCA8LSBJMSB7IGlkeDsgb2JqOyBuZXh0ID0gdCcudHJhY2VfaWR4IH1cbiAgfCBPcGVyYXRvciB0JyAtPiB0Jy50cmFjZV9pZHggPC0gSTEgeyBpZHg7IG9iajsgbmV4dCA9IHQnLnRyYWNlX2lkeCB9XG5cbmxldCByZWMgcmVtX2lkeF9yZWMgb2JqID0gZnVuY3Rpb25cbiAgfCBJMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJMSB0IGFzIHNlbGYgLT5cbiAgICBpZiB0X2VxdWFsIHQub2JqIG9ialxuICAgIHRoZW4gKHQuaWR4LCB0Lm5leHQpXG4gICAgZWxzZSAoXG4gICAgICBsZXQgaWR4LCByZXN1bHQgPSByZW1faWR4X3JlYyBvYmogdC5uZXh0IGluXG4gICAgICB0Lm5leHQgPC0gcmVzdWx0O1xuICAgICAgKGlkeCwgc2VsZilcbiAgICApXG5cbigqIHJlbW92ZSBbb2JqXSBmcm9tIHRoZSBsd2QncyB0cmFjZS4gKilcbmxldCByZW1faWR4IG9iaiA9IGZ1bmN0aW9uXG4gIHwgUHVyZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCcgLT5cbiAgICBsZXQgaWR4LCB0cmFjZV9pZHggPSByZW1faWR4X3JlYyBvYmogdCcudHJhY2VfaWR4IGluXG4gICAgdCcudHJhY2VfaWR4IDwtIHRyYWNlX2lkeDsgaWR4XG4gIHwgT3BlcmF0b3IgdCcgLT5cbiAgICBsZXQgaWR4LCB0cmFjZV9pZHggPSByZW1faWR4X3JlYyBvYmogdCcudHJhY2VfaWR4IGluXG4gICAgdCcudHJhY2VfaWR4IDwtIHRyYWNlX2lkeDsgaWR4XG5cbigqIG1vdmUgW29ial0gZnJvbSBvbGQgaW5kZXggdG8gbmV3IGluZGV4LiAqKVxubGV0IHJlYyBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCA9IGZ1bmN0aW9uXG4gIHwgSTAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSTEgdCAtPlxuICAgIGlmIHQuaWR4ID0gb2xkaWR4ICYmIHRfZXF1YWwgdC5vYmogb2JqXG4gICAgdGhlbiB0LmlkeCA8LSBuZXdpZHhcbiAgICBlbHNlIG1vdl9pZHhfcmVjIG9iaiBvbGRpZHggbmV3aWR4IHQubmV4dFxuXG5sZXQgbW92X2lkeCBvYmogb2xkaWR4IG5ld2lkeCA9IGZ1bmN0aW9uXG4gIHwgUHVyZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCcgLT4gbW92X2lkeF9yZWMgb2JqIG9sZGlkeCBuZXdpZHggdCcudHJhY2VfaWR4XG4gIHwgT3BlcmF0b3IgdCcgLT4gbW92X2lkeF9yZWMgb2JqIG9sZGlkeCBuZXdpZHggdCcudHJhY2VfaWR4XG5cbmxldCByZWMgZ2V0X2lkeF9yZWMgb2JqID0gZnVuY3Rpb25cbiAgfCBJMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJMSB0IC0+XG4gICAgaWYgdF9lcXVhbCB0Lm9iaiBvYmpcbiAgICB0aGVuIHQuaWR4XG4gICAgZWxzZSBnZXRfaWR4X3JlYyBvYmogdC5uZXh0XG5cbigqIGZpbmQgaW5kZXggb2YgW29ial0gaW4gdGhlIGdpdmVuIGx3ZCAqKVxubGV0IGdldF9pZHggb2JqID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPiBnZXRfaWR4X3JlYyBvYmogdCcudHJhY2VfaWR4XG4gIHwgT3BlcmF0b3IgdCcgLT4gZ2V0X2lkeF9yZWMgb2JqIHQnLnRyYWNlX2lkeFxuXG50eXBlIHN0YXR1cyA9XG4gIHwgTmV1dHJhbFxuICB8IFNhZmVcbiAgfCBVbnNhZmVcblxudHlwZSBzZW5zaXRpdml0eSA9XG4gIHwgU3Ryb25nXG4gIHwgRnJhZ2lsZVxuXG4oKiBQcm9wYWdhdGluZyBpbnZhbGlkYXRpb24gcmVjdXJzaXZlbHkuXG4gICBFYWNoIGRvY3VtZW50IGlzIGludmFsaWRhdGVkIGF0IG1vc3Qgb25jZSxcbiAgIGFuZCBvbmx5IGlmIGl0IGhhcyBbdC52YWx1ZSA9IFNvbWUgX10uICopXG5sZXQgcmVjIGludmFsaWRhdGVfbm9kZSA6IHR5cGUgYSAuIHN0YXR1cyByZWYgLT4gc2Vuc2l0aXZpdHkgLT4gYSB0XyAtPiB1bml0ID1cbiAgZnVuIHN0YXR1cyBzZW5zaXRpdml0eSBub2RlIC0+XG4gIG1hdGNoIG5vZGUsIHNlbnNpdGl2aXR5IHdpdGhcbiAgfCBQdXJlIF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCAoe3ZhbHVlOyBffSBhcyB0KSwgXyAtPlxuICAgIHQudmFsdWUgPC0gRXZhbF9ub25lO1xuICAgIGJlZ2luIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgRXZhbF9ub25lIC0+ICgpXG4gICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT5cbiAgICAgICAgc3RhdHVzIDo9IFVuc2FmZVxuICAgICAgfCBFdmFsX3NvbWUgeCAtPlxuICAgICAgICBiZWdpbiBtYXRjaCBzZW5zaXRpdml0eSB3aXRoXG4gICAgICAgICAgfCBTdHJvbmcgLT4gKClcbiAgICAgICAgICB8IEZyYWdpbGUgLT4gc3RhdHVzIDo9IFVuc2FmZVxuICAgICAgICBlbmQ7XG4gICAgICAgIHQub25faW52YWxpZGF0ZSB4ICgqIHVzZXIgY2FsbGJhY2sgdGhhdCB7aSBvYnNlcnZlc30gdGhpcyByb290LiAqKVxuICAgIGVuZFxuICB8IE9wZXJhdG9yIHt2YWx1ZSA9IEV2YWxfbm9uZTsgX30sIEZyYWdpbGUgLT5cbiAgICBiZWdpbiBtYXRjaCAhc3RhdHVzIHdpdGhcbiAgICAgIHwgVW5zYWZlIHwgU2FmZSAtPiAoKVxuICAgICAgfCBfIC0+IHN0YXR1cyA6PSBTYWZlXG4gICAgZW5kXG4gIHwgT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9ub25lOyBffSwgXyAtPiAoKVxuICB8IE9wZXJhdG9yIHtkZXNjID0gRml4IHt3cnQgPSBPcGVyYXRvciB7dmFsdWUgPSBFdmFsX25vbmU7IF99OyBffTsgX30sIEZyYWdpbGUgLT5cbiAgICBiZWdpbiBtYXRjaCAhc3RhdHVzIHdpdGhcbiAgICAgIHwgU2FmZSB8IFVuc2FmZSAtPiAoKVxuICAgICAgfCBOZXV0cmFsIC0+IHN0YXR1cyA6PSBTYWZlXG4gICAgZW5kXG4gIHwgT3BlcmF0b3Ige2Rlc2MgPSBGaXgge3dydCA9IE9wZXJhdG9yIHt2YWx1ZSA9IEV2YWxfc29tZSBfOyBffTsgX307IF99LCBGcmFnaWxlIC0+XG4gICAgKClcbiAgfCBPcGVyYXRvciB0LCBfIC0+XG4gICAgbGV0IHNlbnNpdGl2aXR5ID1cbiAgICAgIG1hdGNoIHQudmFsdWUgd2l0aCBFdmFsX3Byb2dyZXNzIC0+IEZyYWdpbGUgfCBfIC0+IHNlbnNpdGl2aXR5XG4gICAgaW5cbiAgICB0LnZhbHVlIDwtIEV2YWxfbm9uZTtcbiAgICAoKiBpbnZhbGlkYXRlIHBhcmVudHMgcmVjdXJzaXZlbHkgKilcbiAgICBpbnZhbGlkYXRlX3RyYWNlIHN0YXR1cyBzZW5zaXRpdml0eSB0LnRyYWNlXG5cbigqIGludmFsaWRhdGUgcmVjdXJzaXZlbHkgZG9jdW1lbnRzIGluIHRoZSBnaXZlbiB0cmFjZSAqKVxuYW5kIGludmFsaWRhdGVfdHJhY2Ugc3RhdHVzIHNlbnNpdGl2aXR5ID0gZnVuY3Rpb25cbiAgfCBUMCAtPiAoKVxuICB8IFQxIHggLT4gaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB4XG4gIHwgVDIgKHgsIHkpIC0+XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB4O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeVxuICB8IFQzICh4LCB5LCB6KSAtPlxuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeDtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHk7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB6XG4gIHwgVDQgKHgsIHksIHosIHcpIC0+XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB4O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeTtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHo7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB3XG4gIHwgVG4gdCAtPlxuICAgIGxldCBhY3RpdmUgPSB0LmFjdGl2ZSBpblxuICAgIHQuYWN0aXZlIDwtIDA7XG4gICAgZm9yIGkgPSAwIHRvIGFjdGl2ZSAtIDEgZG9cbiAgICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgdC5lbnRyaWVzLihpKVxuICAgIGRvbmVcblxubGV0IGRlZmF1bHRfdW5zYWZlX211dGF0aW9uX2xvZ2dlciAoKSA9XG4gIGxldCBjYWxsc3RhY2sgPSBQcmludGV4Yy5nZXRfY2FsbHN0YWNrIDIwIGluXG4gIFByaW50Zi5mcHJpbnRmIHN0ZGVyclxuICAgIFwiTHdkOiB1bnNhZmUgbXV0YXRpb24gKHZhcmlhYmxlIGludmFsaWRhdGVkIGR1cmluZyBldmFsdWF0aW9uKSBhdFxcbiVhXCJcbiAgICBQcmludGV4Yy5wcmludF9yYXdfYmFja3RyYWNlIGNhbGxzdGFja1xuXG5sZXQgdW5zYWZlX211dGF0aW9uX2xvZ2dlciA9IHJlZiBkZWZhdWx0X3Vuc2FmZV9tdXRhdGlvbl9sb2dnZXJcblxubGV0IGRvX2ludmFsaWRhdGUgc2Vuc2l0aXZpdHkgbm9kZSA9XG4gIGxldCBzdGF0dXMgPSByZWYgTmV1dHJhbCBpblxuICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IG5vZGU7XG4gIGxldCB1bnNhZmUgPVxuICAgIG1hdGNoICFzdGF0dXMgd2l0aFxuICAgIHwgTmV1dHJhbCB8IFNhZmUgLT4gZmFsc2VcbiAgICB8IFVuc2FmZSAtPiB0cnVlXG4gIGluXG4gIGlmIHVuc2FmZSB0aGVuICF1bnNhZmVfbXV0YXRpb25fbG9nZ2VyICgpXG5cbigqIFZhcmlhYmxlcyAqKVxudHlwZSAnYSB2YXIgPSAnYSB0X1xubGV0IHZhciB4ID0gb3BlcmF0b3IgKFZhciB7YmluZGluZyA9IHh9KVxubGV0IGdldCB4ID0gaW5qIHhcblxubGV0IHNldCAodng6XyB2YXIpIHggOiB1bml0ID1cbiAgbWF0Y2ggdnggd2l0aFxuICB8IE9wZXJhdG9yICh7ZGVzYyA9IFZhciB2OyBffSkgLT5cbiAgICAoKiBzZXQgdGhlIHZhcmlhYmxlLCBhbmQgaW52YWxpZGF0ZSBhbGwgb2JzZXJ2ZXJzICopXG4gICAgdi5iaW5kaW5nIDwtIHg7XG4gICAgZG9faW52YWxpZGF0ZSBTdHJvbmcgdnhcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcGVlayA9IGZ1bmN0aW9uXG4gIHwgT3BlcmF0b3IgKHtkZXNjID0gVmFyIHY7IF99KSAtPiB2LmJpbmRpbmdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgdXBkYXRlIGYgdiA9IHNldCB2IChmIChwZWVrIHYpKVxuXG5sZXQgbWF5X3VwZGF0ZSBmIHYgPVxuICBtYXRjaCBmIChwZWVrIHYpIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB4IC0+IHNldCB2IHhcblxuKCogUHJpbWl0aXZlcyAqKVxudHlwZSAnYSBwcmltID0gJ2EgdFxubGV0IHByaW0gfmFjcXVpcmUgfnJlbGVhc2UgPVxuICBpbmogKG9wZXJhdG9yIChQcmltIHsgYWNxdWlyZTsgcmVsZWFzZSB9KSlcbmxldCBnZXRfcHJpbSB4ID0geFxuXG5sZXQgaW52YWxpZGF0ZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IE9wZXJhdG9yIHtkZXNjID0gUHJpbSBwOyB2YWx1ZTsgX30gYXMgdCAtPlxuICAgICgqIHRoZSB2YWx1ZSBpcyBpbnZhbGlkYXRlZCwgYmUgc3VyZSB0byBpbnZhbGlkYXRlIGFsbCBwYXJlbnRzIGFzIHdlbGwgKilcbiAgICBiZWdpbiBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IEV2YWxfbm9uZSAtPiAoKVxuICAgICAgfCBFdmFsX3Byb2dyZXNzIC0+IGRvX2ludmFsaWRhdGUgRnJhZ2lsZSB0O1xuICAgICAgfCBFdmFsX3NvbWUgdiAtPlxuICAgICAgICBkb19pbnZhbGlkYXRlIFN0cm9uZyB0O1xuICAgICAgICBwLnJlbGVhc2UgeCB2XG4gICAgZW5kXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCogRml4IHBvaW50ICopXG5cbmxldCBmaXggZG9jIH53cnQgPSBtYXRjaCBwcmogd3J0IHdpdGhcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUHVyZSBfIC0+IGRvY1xuICB8IE9wZXJhdG9yIF8gYXMgd3J0IC0+IGluaiAob3BlcmF0b3IgKEZpeCB7ZG9jID0gcHJqIGRvYzsgd3J0fSkpXG5cbnR5cGUgcmVsZWFzZV9saXN0ID1cbiAgfCBSZWxlYXNlX2RvbmVcbiAgfCBSZWxlYXNlX21vcmUgOlxuICAgICAgeyBvcmlnaW4gOiAnYSB0XzsgZWxlbWVudCA6ICdiIHRfOyBuZXh0IDogcmVsZWFzZV9saXN0IH0gLT4gcmVsZWFzZV9saXN0XG5cbnR5cGUgcmVsZWFzZV9xdWV1ZSA9IHJlbGVhc2VfbGlzdCByZWZcbmxldCBtYWtlX3JlbGVhc2VfcXVldWUgKCkgPSByZWYgUmVsZWFzZV9kb25lXG5cbnR5cGUgcmVsZWFzZV9mYWlsdXJlID0gZXhuICogUHJpbnRleGMucmF3X2JhY2t0cmFjZVxuXG4oKiBbc3ViX3JlbGVhc2UgW10gb3JpZ2luIHNlbGZdIGlzIGNhbGxlZCB3aGVuIFtvcmlnaW5dIGlzIHJlbGVhc2VkLFxuICAgd2hlcmUgW29yaWdpbl0gaXMgcmVhY2hhYmxlIGZyb20gW3NlbGZdJ3MgdHJhY2UuXG4gICBXZSdyZSBnb2luZyB0byByZW1vdmUgW29yaWdpbl0gZnJvbSB0aGF0IHRyYWNlIGFzIFtvcmlnaW5dIGlzIG5vdyBkZWFkLlxuXG4gICBbc3ViX3JlbGVhc2VdIGNhbm5vdCByYWlzZS5cbiAgIElmIGEgcHJpbWl0aXZlIHJhaXNlcywgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQgYW5kIGEgd2FybmluZyBpcyBlbWl0dGVkLiAqKVxubGV0IHJlYyBzdWJfcmVsZWFzZVxuICA6IHR5cGUgYSBiIC4gcmVsZWFzZV9mYWlsdXJlIGxpc3QgLT4gYSB0XyAtPiBiIHRfIC0+IHJlbGVhc2VfZmFpbHVyZSBsaXN0XG4gID0gZnVuIGZhaWx1cmVzIG9yaWdpbiAtPiBmdW5jdGlvblxuICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgUHVyZSBfIC0+IGZhaWx1cmVzXG4gICAgfCBPcGVyYXRvciB0IGFzIHNlbGYgLT5cbiAgICAgICgqIGNvbXB1dGUgW3QudHJhY2UgXFwge29yaWdpbn1dICopXG4gICAgICBsZXQgdHJhY2UgPSBtYXRjaCB0LnRyYWNlIHdpdGhcbiAgICAgICAgfCBUMCAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBUMSB4IC0+IGFzc2VydCAodF9lcXVhbCB4IG9yaWdpbik7IFQwXG4gICAgICAgIHwgVDIgKHgsIHkpIC0+XG4gICAgICAgICAgaWYgdF9lcXVhbCB4IG9yaWdpbiB0aGVuIFQxIHlcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeSBvcmlnaW4gdGhlbiBUMSB4XG4gICAgICAgICAgZWxzZSBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBUMyAoeCwgeSwgeikgLT5cbiAgICAgICAgICBpZiB0X2VxdWFsIHggb3JpZ2luIHRoZW4gVDIgKHksIHopXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHkgb3JpZ2luIHRoZW4gVDIgKHgsIHopXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHogb3JpZ2luIHRoZW4gVDIgKHgsIHkpXG4gICAgICAgICAgZWxzZSBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBUNCAoeCwgeSwgeiwgdykgLT5cbiAgICAgICAgICBpZiB0X2VxdWFsIHggb3JpZ2luIHRoZW4gVDMgKHksIHosIHcpXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHkgb3JpZ2luIHRoZW4gVDMgKHgsIHosIHcpXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHogb3JpZ2luIHRoZW4gVDMgKHgsIHksIHcpXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHcgb3JpZ2luIHRoZW4gVDMgKHgsIHksIHopXG4gICAgICAgICAgZWxzZSBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBUbiB0biBhcyB0cmFjZSAtPlxuICAgICAgICAgIGxldCByZXZpZHggPSByZW1faWR4IHNlbGYgb3JpZ2luIGluXG4gICAgICAgICAgYXNzZXJ0ICh0X2VxdWFsIHRuLmVudHJpZXMuKHJldmlkeCkgb3JpZ2luKTtcbiAgICAgICAgICBsZXQgY291bnQgPSB0bi5jb3VudCAtIDEgaW5cbiAgICAgICAgICB0bi5jb3VudCA8LSBjb3VudDtcbiAgICAgICAgICBpZiByZXZpZHggPCBjb3VudCB0aGVuIChcbiAgICAgICAgICAgIGxldCBvYmogPSB0bi5lbnRyaWVzLihjb3VudCkgaW5cbiAgICAgICAgICAgIHRuLmVudHJpZXMuKHJldmlkeCkgPC0gb2JqO1xuICAgICAgICAgICAgdG4uZW50cmllcy4oY291bnQpIDwtIGR1bW15O1xuICAgICAgICAgICAgbW92X2lkeCBzZWxmIGNvdW50IHJldmlkeCBvYmpcbiAgICAgICAgICApIGVsc2VcbiAgICAgICAgICAgIHRuLmVudHJpZXMuKHJldmlkeCkgPC0gZHVtbXk7XG4gICAgICAgICAgaWYgdG4uYWN0aXZlID4gY291bnQgdGhlbiB0bi5hY3RpdmUgPC0gY291bnQ7XG4gICAgICAgICAgaWYgY291bnQgPSA0IHRoZW4gKFxuICAgICAgICAgICAgKCogZG93bmdyYWRlIHRvIFtUNF0gdG8gc2F2ZSBzcGFjZSAqKVxuICAgICAgICAgICAgbGV0IGEgPSB0bi5lbnRyaWVzLigwKSBhbmQgYiA9IHRuLmVudHJpZXMuKDEpIGluXG4gICAgICAgICAgICBsZXQgYyA9IHRuLmVudHJpZXMuKDIpIGFuZCBkID0gdG4uZW50cmllcy4oMykgaW5cbiAgICAgICAgICAgIGlnbm9yZSAocmVtX2lkeCBzZWxmIGEgOiBpbnQpO1xuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgYiA6IGludCk7XG4gICAgICAgICAgICBpZ25vcmUgKHJlbV9pZHggc2VsZiBjIDogaW50KTtcbiAgICAgICAgICAgIGlnbm9yZSAocmVtX2lkeCBzZWxmIGQgOiBpbnQpO1xuICAgICAgICAgICAgVDQgKGEsIGIsIGMsIGQpXG4gICAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAgIGxldCBsZW4gPSBBcnJheS5sZW5ndGggdG4uZW50cmllcyBpblxuICAgICAgICAgICAgaWYgY291bnQgPD0gbGVuIGxzciAyIHRoZW5cbiAgICAgICAgICAgICAgVG4geyBhY3RpdmUgPSB0bi5hY3RpdmU7IGNvdW50ID0gdG4uY291bnQ7XG4gICAgICAgICAgICAgICAgICAgZW50cmllcyA9IEFycmF5LnN1YiB0bi5lbnRyaWVzIDAgKGxlbiBsc3IgMSkgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0cmFjZVxuICAgICAgICAgIClcbiAgICAgIGluXG4gICAgICB0LnRyYWNlIDwtIHRyYWNlO1xuICAgICAgbWF0Y2ggdHJhY2Ugd2l0aFxuICAgICAgfCBUMCAtPlxuICAgICAgICAoKiBbc2VsZl0gaXMgbm90IGFjdGl2ZSBhbnltb3JlLCBzaW5jZSBpdCdzIG5vdCByZWFjaGFibGVcbiAgICAgICAgICAgZnJvbSBhbnkgcm9vdC4gV2UgY2FuIHJlbGVhc2UgaXRzIGNhY2hlZCB2YWx1ZSBhbmRcbiAgICAgICAgICAgcmVjdXJzaXZlbHkgcmVsZWFzZSBpdHMgc3VidHJlZS4gKilcbiAgICAgICAgbGV0IHZhbHVlID0gdC52YWx1ZSBpblxuICAgICAgICB0LnZhbHVlIDwtIEV2YWxfcHJvZ3Jlc3M7XG4gICAgICAgIGJlZ2luIG1hdGNoIHQuZGVzYyB3aXRoXG4gICAgICAgICAgfCBNYXAgICh4LCBfKSAtPiBzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHhcbiAgICAgICAgICB8IE1hcDIgKHgsIHksIF8pIC0+XG4gICAgICAgICAgICBzdWJfcmVsZWFzZSAoc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB4KSBzZWxmIHlcbiAgICAgICAgICB8IFBhaXIgKHgsIHkpIC0+XG4gICAgICAgICAgICBzdWJfcmVsZWFzZSAoc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB4KSBzZWxmIHlcbiAgICAgICAgICB8IEFwcCAgKHgsIHkpIC0+XG4gICAgICAgICAgICBzdWJfcmVsZWFzZSAoc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB4KSBzZWxmIHlcbiAgICAgICAgICB8IEpvaW4gKHsgY2hpbGQ7IGludGVybWVkaWF0ZSB9IGFzIHQpIC0+XG4gICAgICAgICAgICBsZXQgZmFpbHVyZXMgPSBzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIGNoaWxkIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBpbnRlcm1lZGlhdGUgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gZmFpbHVyZXNcbiAgICAgICAgICAgICAgfCBTb21lIGNoaWxkJyAtPlxuICAgICAgICAgICAgICAgIHQuaW50ZXJtZWRpYXRlIDwtIE5vbmU7XG4gICAgICAgICAgICAgICAgc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiBjaGlsZCdcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIHwgVmFyICBfIC0+IGZhaWx1cmVzXG4gICAgICAgICAgfCBGaXgge2RvYzsgd3J0fSAtPlxuICAgICAgICAgICAgc3ViX3JlbGVhc2UgKHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgd3J0KSBzZWxmIGRvY1xuICAgICAgICAgIHwgUHJpbSB0IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICAgICAgICAgIHwgRXZhbF9ub25lICB8IEV2YWxfcHJvZ3Jlc3MgLT4gZmFpbHVyZXNcbiAgICAgICAgICAgICAgfCBFdmFsX3NvbWUgeCAtPlxuICAgICAgICAgICAgICAgIGJlZ2luIG1hdGNoIHQucmVsZWFzZSAoaW5qIHNlbGYpIHggd2l0aFxuICAgICAgICAgICAgICAgICAgfCAoKSAtPiBmYWlsdXJlc1xuICAgICAgICAgICAgICAgICAgfCBleGNlcHRpb24gZXhuIC0+XG4gICAgICAgICAgICAgICAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICAgICAgICAgICAgICAgIChleG4sIGJ0KSA6OiBmYWlsdXJlc1xuICAgICAgICAgICAgICAgIGVuZFxuICAgICAgICAgICAgZW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBfIC0+IGZhaWx1cmVzXG5cbigqIFtzdWJfYWNxdWlyZV0gY2Fubm90IHJhaXNlICopXG5sZXQgcmVjIHN1Yl9hY3F1aXJlIDogdHlwZSBhIGIgLiBhIHRfIC0+IGIgdF8gLT4gdW5pdCA9IGZ1biBvcmlnaW4gLT5cbiAgZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUHVyZSBfIC0+ICgpXG4gIHwgT3BlcmF0b3IgdCBhcyBzZWxmIC0+XG4gICAgKCogW2FjcXVpcmVdIGlzIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGlzIG9wZXJhdG9yXG4gICAgICAgaXMgdXNlZCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGFjcXVpcmUgaXRzIGNoaWxkcmVuICopXG4gICAgbGV0IGFjcXVpcmUgPSBtYXRjaCB0LnRyYWNlIHdpdGggVDAgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UgaW5cbiAgICBsZXQgdHJhY2UgPSBtYXRjaCB0LnRyYWNlIHdpdGhcbiAgICAgIHwgVDAgLT4gVDEgb3JpZ2luXG4gICAgICB8IFQxIHggLT4gVDIgKG9yaWdpbiwgeClcbiAgICAgIHwgVDIgKHgsIHkpIC0+IFQzIChvcmlnaW4sIHgsIHkpXG4gICAgICB8IFQzICh4LCB5LCB6KSAtPiBUNCAob3JpZ2luLCB4LCB5LCB6KVxuICAgICAgfCBUNCAoeCwgeSwgeiwgdykgLT5cbiAgICAgICAgbGV0IG9ial9vcmlnaW4gPSBvYmpfdCBvcmlnaW4gaW5cbiAgICAgICAgbGV0IGVudHJpZXMgPVxuICAgICAgICAgIFt8IG9ial90IHg7IG9ial90IHk7IG9ial90IHo7IG9ial90IHc7IG9ial9vcmlnaW47IGR1bW15OyBkdW1teTsgZHVtbXkgfF1cbiAgICAgICAgaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIDQgZG8gYWRkX2lkeCBzZWxmIGkgZW50cmllcy4oaSkgZG9uZTtcbiAgICAgICAgVG4geyBhY3RpdmUgPSA1OyBjb3VudCA9IDU7IGVudHJpZXMgfVxuICAgICAgfCBUbiB0biBhcyB0cmFjZSAtPlxuICAgICAgICBsZXQgaW5kZXggPSB0bi5jb3VudCBpblxuICAgICAgICBsZXQgZW50cmllcywgdHJhY2UgPVxuICAgICAgICAgICgqIHBvc3NpYmx5IHJlc2l6ZSBhcnJheSBbZW50cmllc10gKilcbiAgICAgICAgICBpZiBpbmRleCA8IEFycmF5Lmxlbmd0aCB0bi5lbnRyaWVzIHRoZW4gKFxuICAgICAgICAgICAgdG4uY291bnQgPC0gdG4uY291bnQgKyAxO1xuICAgICAgICAgICAgKHRuLmVudHJpZXMsIHRyYWNlKVxuICAgICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgICBsZXQgZW50cmllcyA9IEFycmF5Lm1ha2UgKGluZGV4ICogMikgZHVtbXkgaW5cbiAgICAgICAgICAgIEFycmF5LmJsaXQgdG4uZW50cmllcyAwIGVudHJpZXMgMCBpbmRleDtcbiAgICAgICAgICAgIChlbnRyaWVzLCBUbiB7IGFjdGl2ZSA9IHRuLmFjdGl2ZTsgY291bnQgPSBpbmRleCArIDE7IGVudHJpZXMgfSlcbiAgICAgICAgICApXG4gICAgICAgIGluXG4gICAgICAgIGxldCBvYmpfb3JpZ2luID0gb2JqX3Qgb3JpZ2luIGluXG4gICAgICAgIGVudHJpZXMuKGluZGV4KSA8LSBvYmpfb3JpZ2luO1xuICAgICAgICBhZGRfaWR4IHNlbGYgaW5kZXggb2JqX29yaWdpbjtcbiAgICAgICAgdHJhY2VcbiAgICBpblxuICAgIHQudHJhY2UgPC0gdHJhY2U7XG4gICAgaWYgYWNxdWlyZSB0aGVuIChcbiAgICAgICgqIGFjcXVpcmUgaW1tZWRpYXRlIGNoaWxkcmVuLCBhbmQgc28gb24gcmVjdXJzaXZlbHkgKilcbiAgICAgIG1hdGNoIHQuZGVzYyB3aXRoXG4gICAgICB8IE1hcCAgKHgsIF8pIC0+IHN1Yl9hY3F1aXJlIHNlbGYgeFxuICAgICAgfCBNYXAyICh4LCB5LCBfKSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHg7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeVxuICAgICAgfCBQYWlyICh4LCB5KSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHg7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeVxuICAgICAgfCBBcHAgICh4LCB5KSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHg7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeVxuICAgICAgfCBGaXggIHtkb2M7IHdydH0gLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBkb2M7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgd3J0XG4gICAgICB8IEpvaW4geyBjaGlsZDsgaW50ZXJtZWRpYXRlIH0gLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBjaGlsZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggaW50ZXJtZWRpYXRlIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgXyAtPlxuICAgICAgICAgICAgYXNzZXJ0IGZhbHNlICgqIHRoaXMgY2FuJ3QgaW5pdGlhbGl6ZWQgYWxyZWFkeSwgZmlyc3QtdGltZSBhY3F1aXJlICopXG4gICAgICAgIGVuZFxuICAgICAgfCBWYXIgIF8gLT4gKClcbiAgICAgIHwgUHJpbSBfIC0+ICgpXG4gICAgKVxuXG4oKiBtYWtlIHN1cmUgdGhhdCBbb3JpZ2luXSBpcyBpbiBbc2VsZi50cmFjZV0sIHBhc3NlZCBhcyBsYXN0IGFyZy4gKilcbmxldCBhY3RpdmF0ZV90cmFjaW5nIHNlbGYgb3JpZ2luID0gZnVuY3Rpb25cbiAgfCBUbiB0biAtPlxuICAgIGxldCBpZHggPSBnZXRfaWR4IHNlbGYgb3JpZ2luIGluICgqIGluZGV4IG9mIFtzZWxmXSBpbiBbb3JpZ2luLnRyYWNlX2lkeF0gKilcbiAgICBsZXQgYWN0aXZlID0gdG4uYWN0aXZlIGluXG4gICAgKCogW2lkeCA8IGFjdGl2ZV0gbWVhbnMgW3NlbGZdIGlzIGFscmVhZHkgdHJhY2VkIGJ5IFtvcmlnaW5dLlxuICAgICAgIFdlIG9ubHkgaGF2ZSB0byBhZGQgW3NlbGZdIHRvIHRoZSBlbnRyaWVzIGlmIFtpZHggPj0gYWN0aXZlXS4gKilcbiAgICBpZiBpZHggPj0gYWN0aXZlIHRoZW4gKFxuICAgICAgdG4uYWN0aXZlIDwtIGFjdGl2ZSArIDE7XG4gICAgKTtcbiAgICBpZiBpZHggPiBhY3RpdmUgdGhlbiAoXG4gICAgICAoKiBzd2FwIHdpdGggbGFzdCBlbnRyeSBpbiBbdG4uZW50cmllc10gKilcbiAgICAgIGxldCBvbGQgPSB0bi5lbnRyaWVzLihhY3RpdmUpIGluXG4gICAgICB0bi5lbnRyaWVzLihpZHgpIDwtIG9sZDtcbiAgICAgIHRuLmVudHJpZXMuKGFjdGl2ZSkgPC0gb2JqX3Qgb3JpZ2luO1xuICAgICAgbW92X2lkeCBzZWxmIGFjdGl2ZSBpZHggb2xkO1xuICAgICAgbW92X2lkeCBzZWxmIGlkeCBhY3RpdmUgb3JpZ2luXG4gICAgKVxuICB8IF8gLT4gKClcblxubGV0IHN1Yl9pc19kYW1hZ2VkID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUHVyZSBfIC0+IGZhbHNlXG4gIHwgT3BlcmF0b3Ige3ZhbHVlOyBffSAtPlxuICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICB8IEV2YWxfbm9uZSAtPiB0cnVlXG4gICAgfCBFdmFsX3NvbWUgXyAtPiBmYWxzZVxuICAgIHwgRXZhbF9wcm9ncmVzcyAtPiBhc3NlcnQgZmFsc2VcblxuKCogW3N1Yl9zYW1wbGUgb3JpZ2luIHNlbGZdIGNvbXB1dGVzIGEgdmFsdWUgZm9yIFtzZWxmXS5cblxuICAgW3N1Yl9zYW1wbGVdIHJhaXNlIGlmIGFueSB1c2VyLXByb3ZpZGVkIGNvbXB1dGF0aW9uIHJhaXNlcy5cbiAgIEdyYXBoIHdpbGwgYmUgbGVmdCBpbiBhIGNvaGVyZW50IHN0YXRlIGJ1dCBleGNlcHRpb24gd2lsbCBiZSBwcm9wYWdhdGVkXG4gICB0byB0aGUgb2JzZXJ2ZXIuICopXG5sZXQgc3ViX3NhbXBsZSBxdWV1ZSA9XG4gIGxldCByZWMgYXV4IDogdHlwZSBhIGIgLiBhIHRfIC0+IGIgdF8gLT4gYiA9IGZ1biBvcmlnaW4gLT5cbiAgICBmdW5jdGlvblxuICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgUHVyZSB4IC0+IHhcbiAgICB8IE9wZXJhdG9yIHQgYXMgc2VsZiAtPlxuICAgICAgKCogdHJ5IHRvIHVzZSBjYWNoZWQgdmFsdWUsIGlmIHByZXNlbnQgKilcbiAgICAgIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgICAgfCBFdmFsX3NvbWUgdmFsdWUgLT5cbiAgICAgICAgYWN0aXZhdGVfdHJhY2luZyBzZWxmIG9yaWdpbiB0LnRyYWNlO1xuICAgICAgICB2YWx1ZVxuICAgICAgfCBfIC0+XG4gICAgICAgIHQudmFsdWUgPC0gRXZhbF9wcm9ncmVzcztcbiAgICAgICAgbGV0IHJlc3VsdCA6IGIgPSBtYXRjaCB0LmRlc2Mgd2l0aFxuICAgICAgICAgIHwgTWFwICAoeCwgZikgLT4gZiAoYXV4IHNlbGYgeClcbiAgICAgICAgICB8IE1hcDIgKHgsIHksIGYpIC0+IGYgKGF1eCBzZWxmIHgpIChhdXggc2VsZiB5KVxuICAgICAgICAgIHwgUGFpciAoeCwgeSkgLT4gKGF1eCBzZWxmIHgsIGF1eCBzZWxmIHkpXG4gICAgICAgICAgfCBBcHAgIChmLCB4KSAtPiAoYXV4IHNlbGYgZikgKGF1eCBzZWxmIHgpXG4gICAgICAgICAgfCBGaXgge2RvYzsgd3J0fSAtPlxuICAgICAgICAgICAgbGV0IF8gPSBhdXggc2VsZiB3cnQgaW5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhdXggc2VsZiBkb2MgaW5cbiAgICAgICAgICAgIGlmIHN1Yl9pc19kYW1hZ2VkIHdydCB0aGVuXG4gICAgICAgICAgICAgIGF1eCBvcmlnaW4gc2VsZlxuICAgICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICAgIGlmIHN1Yl9pc19kYW1hZ2VkIGRvYyB0aGVuXG4gICAgICAgICAgICAgICAgZG9faW52YWxpZGF0ZSBGcmFnaWxlIHNlbGY7XG4gICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgKVxuICAgICAgICAgIHwgSm9pbiB4IC0+XG4gICAgICAgICAgICBsZXQgaW50ZXJtZWRpYXRlID1cbiAgICAgICAgICAgICAgKCogV2UgaGF2ZW4ndCB0b3VjaGVkIGFueSBzdGF0ZSB5ZXQsXG4gICAgICAgICAgICAgICAgIGl0IGlzIHNhZmUgZm9yIFthdXhdIHRvIHJhaXNlICopXG4gICAgICAgICAgICAgIGF1eCBzZWxmIHguY2hpbGRcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCB4LmludGVybWVkaWF0ZSB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgIHguaW50ZXJtZWRpYXRlIDwtIFNvbWUgaW50ZXJtZWRpYXRlO1xuICAgICAgICAgICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgaW50ZXJtZWRpYXRlO1xuICAgICAgICAgICAgICB8IFNvbWUgeCcgd2hlbiB4JyAhPSBpbnRlcm1lZGlhdGUgLT5cbiAgICAgICAgICAgICAgICBxdWV1ZSA6PSBSZWxlYXNlX21vcmUge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW4gPSBzZWxmO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0geCc7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSAhcXVldWU7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHguaW50ZXJtZWRpYXRlIDwtIFNvbWUgaW50ZXJtZWRpYXRlO1xuICAgICAgICAgICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgaW50ZXJtZWRpYXRlO1xuICAgICAgICAgICAgICB8IFNvbWUgXyAtPiAoKVxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgYXV4IHNlbGYgaW50ZXJtZWRpYXRlXG4gICAgICAgICAgfCBWYXIgIHggLT4geC5iaW5kaW5nXG4gICAgICAgICAgfCBQcmltIHQgLT4gdC5hY3F1aXJlIChpbmogc2VsZilcbiAgICAgICAgaW5cbiAgICAgICAgYmVnaW4gbWF0Y2ggdC52YWx1ZSB3aXRoXG4gICAgICAgICAgfCBFdmFsX3Byb2dyZXNzIC0+IHQudmFsdWUgPC0gRXZhbF9zb21lIHJlc3VsdDtcbiAgICAgICAgICB8IEV2YWxfbm9uZSB8IEV2YWxfc29tZSBfIC0+ICgpXG4gICAgICAgIGVuZDtcbiAgICAgICAgKCogW3NlbGZdIGp1c3QgYmVjYW1lIGFjdGl2ZSwgc28gaXQgbWF5IGludmFsaWRhdGUgW29yaWdpbl0gaW4gY2FzZSBpdHNcbiAgICAgICAgICAgdmFsdWUgY2hhbmdlcyBiZWNhdXNlIG9mIFt0LmRlc2NdLCBsaWtlIGlmIGl0J3MgYSB2YXJpYWJsZSBhbmQgZ2V0c1xuICAgICAgICAgICBtdXRhdGVkLCBvciBpZiBpdCdzIGEgcHJpbWl0aXZlIHRoYXQgZ2V0cyBpbnZhbGlkYXRlZC5cbiAgICAgICAgICAgV2UgbmVlZCB0byBwdXQgW29yaWdpbl0gaW50byBbc2VsZi50cmFjZV0gaW4gY2FzZSBpdCBpc24ndCB0aGVyZSB5ZXQuICopXG4gICAgICAgIGFjdGl2YXRlX3RyYWNpbmcgc2VsZiBvcmlnaW4gdC50cmFjZTtcbiAgICAgICAgcmVzdWx0XG4gIGluXG4gIGF1eFxuXG50eXBlICdhIHJvb3QgPSAnYSB0XG5cbmxldCBvYnNlcnZlID8ob25faW52YWxpZGF0ZT1pZ25vcmUpIGNoaWxkIDogXyByb290ID1cbiAgbGV0IHJvb3QgPSBSb290IHtcbiAgICAgIGNoaWxkID0gcHJqIGNoaWxkO1xuICAgICAgdmFsdWUgPSBFdmFsX25vbmU7XG4gICAgICBvbl9pbnZhbGlkYXRlO1xuICAgICAgdHJhY2VfaWR4ID0gSTA7XG4gICAgICBhY3F1aXJlZCA9IGZhbHNlO1xuICAgIH0gaW5cbiAgaW5qIHJvb3RcblxuZXhjZXB0aW9uIFJlbGVhc2VfZmFpbHVyZSBvZiBleG4gb3B0aW9uICogcmVsZWFzZV9mYWlsdXJlIGxpc3RcblxubGV0IHJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlID1cbiAgbGV0IHJlYyBhdXggZmFpbHVyZXMgPSBmdW5jdGlvblxuICAgIHwgUmVsZWFzZV9kb25lIC0+IGZhaWx1cmVzXG4gICAgfCBSZWxlYXNlX21vcmUgdCAtPlxuICAgICAgbGV0IGZhaWx1cmVzID0gc3ViX3JlbGVhc2UgZmFpbHVyZXMgdC5vcmlnaW4gdC5lbGVtZW50IGluXG4gICAgICBhdXggZmFpbHVyZXMgdC5uZXh0XG4gIGluXG4gIGF1eCBbXSBxdWV1ZVxuXG5sZXQgZmx1c2hfcmVsZWFzZV9xdWV1ZSBxdWV1ZSA9XG4gIGxldCBxdWV1ZScgPSAhcXVldWUgaW5cbiAgcXVldWUgOj0gUmVsZWFzZV9kb25lO1xuICByYXdfZmx1c2hfcmVsZWFzZV9xdWV1ZSBxdWV1ZSdcblxubGV0IHNhbXBsZSBxdWV1ZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0IGFzIHNlbGYgLT5cbiAgICBtYXRjaCB0LnZhbHVlIHdpdGhcbiAgICB8IEV2YWxfc29tZSB2YWx1ZSAtPiB2YWx1ZVxuICAgIHwgXyAtPlxuICAgICAgKCogbm8gY2FjaGVkIHZhbHVlLCBjb21wdXRlIGl0IG5vdyAqKVxuICAgICAgaWYgbm90IHQuYWNxdWlyZWQgdGhlbiAoXG4gICAgICAgIHQuYWNxdWlyZWQgPC0gdHJ1ZTtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB0LmNoaWxkO1xuICAgICAgKTtcbiAgICAgIHQudmFsdWUgPC0gRXZhbF9wcm9ncmVzcztcbiAgICAgIGxldCB2YWx1ZSA9IHN1Yl9zYW1wbGUgcXVldWUgc2VsZiB0LmNoaWxkIGluXG4gICAgICBiZWdpbiBtYXRjaCB0LnZhbHVlIHdpdGhcbiAgICAgICAgfCBFdmFsX3Byb2dyZXNzIC0+IHQudmFsdWUgPC0gRXZhbF9zb21lIHZhbHVlOyAoKiBjYWNoZSB2YWx1ZSAqKVxuICAgICAgICB8IEV2YWxfbm9uZSB8IEV2YWxfc29tZSBfIC0+ICgpXG4gICAgICBlbmQ7XG4gICAgICB2YWx1ZVxuXG5sZXQgaXNfZGFtYWdlZCB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB7dmFsdWUgPSBFdmFsX3NvbWUgXzsgX30gLT4gZmFsc2VcbiAgfCBSb290IHt2YWx1ZSA9IEV2YWxfbm9uZSB8IEV2YWxfcHJvZ3Jlc3M7IF99IC0+IHRydWVcblxubGV0IHJlbGVhc2UgcXVldWUgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIF8gfCBPcGVyYXRvciBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCBhcyBzZWxmIC0+XG4gICAgaWYgdC5hY3F1aXJlZCB0aGVuIChcbiAgICAgICgqIHJlbGVhc2Ugc3VidHJlZSwgcmVtb3ZlIGNhY2hlZCB2YWx1ZSAqKVxuICAgICAgdC52YWx1ZSA8LSBFdmFsX25vbmU7XG4gICAgICB0LmFjcXVpcmVkIDwtIGZhbHNlO1xuICAgICAgcXVldWUgOj0gUmVsZWFzZV9tb3JlIHsgb3JpZ2luID0gc2VsZjsgZWxlbWVudCA9IHQuY2hpbGQ7IG5leHQgPSAhcXVldWUgfVxuICAgIClcblxubGV0IHNldF9vbl9pbnZhbGlkYXRlIHggZiA9XG4gIG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIF8gfCBPcGVyYXRvciBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCAtPiB0Lm9uX2ludmFsaWRhdGUgPC0gZlxuXG5sZXQgZmx1c2hfb3JfZmFpbCBtYWluX2V4biBxdWV1ZSA9XG4gIG1hdGNoIGZsdXNoX3JlbGVhc2VfcXVldWUgcXVldWUgd2l0aFxuICB8IFtdIC0+ICgpXG4gIHwgZmFpbHVyZXMgLT4gcmFpc2UgKFJlbGVhc2VfZmFpbHVyZSAobWFpbl9leG4sIGZhaWx1cmVzKSlcblxubGV0IHF1aWNrX3NhbXBsZSByb290ID1cbiAgbGV0IHF1ZXVlID0gcmVmIFJlbGVhc2VfZG9uZSBpblxuICBtYXRjaCBzYW1wbGUgcXVldWUgcm9vdCB3aXRoXG4gIHwgcmVzdWx0IC0+IGZsdXNoX29yX2ZhaWwgTm9uZSBxdWV1ZTsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIGV4biAtPiBmbHVzaF9vcl9mYWlsIChTb21lIGV4bikgcXVldWU7IHJhaXNlIGV4blxuXG5sZXQgcXVpY2tfcmVsZWFzZSByb290ID1cbiAgbGV0IHF1ZXVlID0gcmVmIFJlbGVhc2VfZG9uZSBpblxuICByZWxlYXNlIHF1ZXVlIHJvb3Q7XG4gIGZsdXNoX29yX2ZhaWwgTm9uZSBxdWV1ZVxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICg+Pj0pIHggZiA9IGJpbmQgeCB+ZlxuICBsZXQgKD58PSkgeCBmID0gbWFwIHggfmZcbiAgbGV0ICg8Kj4pID0gYXBwXG5lbmRcblxuKCokUlxuICBsZXQgeCA9IHZhciAwIGluXG4gIGxldCB5ID0gbWFwIH5mOnN1Y2MgKGdldCB4KSBpblxuICBsZXQgb195ID0gTHdkLm9ic2VydmUgeSBpblxuICBhc3NlcnRfZXF1YWwgMSAocXVpY2tfc2FtcGxlIG9feSk7XG4gIHNldCB4IDEwO1xuICBhc3NlcnRfZXF1YWwgMTEgKHF1aWNrX3NhbXBsZSBvX3kpO1xuICAqKVxuIiwiXG50eXBlICdhIG1vbm9pZCA9ICdhICogKCdhIC0+ICdhIC0+ICdhKVxuXG5sZXQgbGlmdF9tb25vaWQgKHplcm8sIHBsdXMpID1cbiAgKEx3ZC5yZXR1cm4gemVybywgTHdkLm1hcDIgfmY6cGx1cylcblxubGV0IG1hcF9yZWR1Y2UgaW5qICh6ZXJvLCBwbHVzKSBpdGVtcyA9XG4gIGxldCByZWMgY29uc19tb25vaWQgYyB4cyB2ID1cbiAgICBtYXRjaCB4cyB3aXRoXG4gICAgfCAoYycsIHYnKSA6OiB4cyB3aGVuIGMgPSBjJyAtPlxuICAgICAgY29uc19tb25vaWQgKGMgKyAxKSB4cyAocGx1cyB2JyB2KVxuICAgIHwgeHMgLT4gKGMsIHYpIDo6IHhzXG4gIGluXG4gIGxldCBjb25zX21vbm9pZCB4cyB2ID0gY29uc19tb25vaWQgMCB4cyAoaW5qIHYpIGluXG4gIG1hdGNoIExpc3QuZm9sZF9sZWZ0IGNvbnNfbW9ub2lkIFtdIGl0ZW1zIHdpdGhcbiAgfCBbXSAtPiB6ZXJvXG4gIHwgKF8seCkgOjogeHMgLT5cbiAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyAoXywgdikgLT4gcGx1cyB2IGFjYykgeCB4c1xuXG5sZXQgcmVkdWNlIG1vbm9pZCBpdGVtcyA9IG1hcF9yZWR1Y2UgKGZ1biB4IC0+IHgpIG1vbm9pZCBpdGVtc1xuXG5sZXQgcmVjIGNvbnNfbHdkX21vbm9pZCBwbHVzIGMgeHMgdiA9XG4gIG1hdGNoIHhzIHdpdGhcbiAgfCAoYycsIHYnKSA6OiB4cyB3aGVuIGMgPSBjJyAtPlxuICAgIGNvbnNfbHdkX21vbm9pZCBwbHVzIChjICsgMSkgeHMgKEx3ZC5tYXAyIH5mOnBsdXMgdicgdilcbiAgfCB4cyAtPiAoYywgdikgOjogeHNcblxubGV0IHBhY2sgKHplcm8sIHBsdXMpIGl0ZW1zID1cbiAgbWF0Y2ggTGlzdC5mb2xkX2xlZnQgKGNvbnNfbHdkX21vbm9pZCBwbHVzIDApIFtdIGl0ZW1zIHdpdGhcbiAgfCBbXSAtPiBMd2QucmV0dXJuIHplcm9cbiAgfCAoXyx4KSA6OiB4cyAtPlxuICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIChfLCB2KSAtPiBMd2QubWFwMiB+ZjpwbHVzIHYgYWNjKSB4IHhzXG5cbmxldCBwYWNrX3NlcSAoemVybywgcGx1cykgaXRlbXMgPVxuICBtYXRjaCBTZXEuZm9sZF9sZWZ0IChjb25zX2x3ZF9tb25vaWQgcGx1cyAwKSBbXSBpdGVtcyB3aXRoXG4gIHwgW10gLT4gTHdkLnJldHVybiB6ZXJvXG4gIHwgKF8seCkgOjogeHMgLT5cbiAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyAoXywgdikgLT4gTHdkLm1hcDIgfmY6cGx1cyB2IGFjYykgeCB4c1xuXG5sZXQgcmVjIG1hcF9sIChmOidhIC0+ICdiIEx3ZC50KSAobDonYSBsaXN0KSA6ICdiIGxpc3QgTHdkLnQgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBMd2QucmV0dXJuIFtdXG4gIHwgeCA6OiB0bCAtPiBMd2QubWFwMiB+ZjpMaXN0LmNvbnMgKGYgeCkgKG1hcF9sIGYgdGwpXG5cbmxldCBmbGF0dGVuX2wgKGw6J2EgTHdkLnQgbGlzdCkgOiAnYSBsaXN0IEx3ZC50ID1cbiAgbWFwX2wgKGZ1biB4LT54KSBsXG5cbigqKiB7MSBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9uc31cblxuICAgIEkgZG9uJ3Qga25vdyB3aGVyZSB0byBwdXQgdGhlc2UsIGJ1dCB0aGV5IGFyZSB1c2VmdWwsIGVzcGVjaWFsbHkgZm9yXG4gICAgVUktcmVsYXRlZCBjb21wdXRhdGlvbnMuXG4qKVxuXG5sZXQgbWluaSBhIGIgOiBpbnQgPSBpZiBiIDwgYSB0aGVuIGIgZWxzZSBhXG5cbmxldCBtYXhpIGEgYiA6IGludCA9IGlmIGIgPiBhIHRoZW4gYiBlbHNlIGFcblxubGV0IGNsYW1waSB4IH5taW4gfm1heCA6IGludCA9XG4gIGlmIHggPCBtaW4gdGhlblxuICAgIG1pblxuICBlbHNlIGlmIHggPiBtYXggdGhlblxuICAgIG1heFxuICBlbHNlXG4gICAgeFxuXG5sZXQgbWluZiBhIGIgOiBmbG9hdCA9IGlmIGIgPCBhIHRoZW4gYiBlbHNlIGFcblxubGV0IG1heGYgYSBiIDogZmxvYXQgPSBpZiBiID4gYSB0aGVuIGIgZWxzZSBhXG5cbmxldCBjbGFtcGYgeCB+bWluIH5tYXggOiBmbG9hdCA9XG4gIGlmIHggPCBtaW4gdGhlblxuICAgIG1pblxuICBlbHNlIGlmIHggPiBtYXggdGhlblxuICAgIG1heFxuICBlbHNlXG4gICAgeFxuIiwidHlwZSAnYSBiaW5kaW5nID1cbiAgfCBCb3VuZCBvZiB7IHZhbHVlIDogJ2EgOyBtdXRhYmxlIHZhbGlkIDogYm9vbCB9XG4gIHwgVW5ib3VuZFxuXG50eXBlICdhIHRyZWUgPVxuICB8IExlYWZcbiAgfCBOb2RlIG9mIHtcbiAgICAgIG11dGFibGUgdmVyc2lvbiA6IGludDtcbiAgICAgIG11dGFibGUgbGVmdCAgICA6ICdhIHRyZWU7XG4gICAgICBtdXRhYmxlIGJpbmRpbmcgOiAnYSBiaW5kaW5nO1xuICAgICAgbXV0YWJsZSByaWdodCAgIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgcGFyZW50ICA6ICdhIHRyZWU7XG4gICAgICBtdXRhYmxlIHNpemUgICAgOiBpbnQ7XG4gICAgfVxuICB8IFJvb3Qgb2Yge1xuICAgICAgbXV0YWJsZSB2ZXJzaW9uIDogaW50O1xuICAgICAgbXV0YWJsZSBjaGlsZCA6ICdhIHRyZWU7XG4gICAgICBtdXRhYmxlIGdlbmVyYXRpb24gOiB1bml0IHJlZjtcbiAgICAgIG11dGFibGUgb25faW52YWxpZGF0ZSA6IE9iai50IEx3ZC5wcmltIGxpc3Q7XG4gICAgfVxuXG50eXBlICdhIHQgPSAnYSB0cmVlXG50eXBlICdhIHJvdyA9ICdhIHRyZWVcblxubGV0IG5vdF9vcmlnaW4gPSByZWYgKCkgKCogbm90IHshb3JpZ2lufSAqKVxubGV0IG9yaWdpbiA9IHJlZiAoKSAoKiBub3QgeyFub3Rfb3JpZ2lufSAqKVxuXG5sZXQgbWFrZSAoKSA9XG4gIFJvb3QgeyBjaGlsZCA9IExlYWY7IGdlbmVyYXRpb24gPSBvcmlnaW47IHZlcnNpb24gPSAwOyBvbl9pbnZhbGlkYXRlID0gW10gfVxuXG5sZXQgc2V0X3BhcmVudCB+cGFyZW50ID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSBuIC0+IG4ucGFyZW50IDwtIHBhcmVudFxuICB8IExlYWYgLT4gKClcblxubGV0IHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkIH5uZXdjaGlsZCA9XG4gIG1hdGNoIHBhcmVudCB3aXRoXG4gIHwgUm9vdCByIC0+XG4gICAgYXNzZXJ0IChyLmNoaWxkID09IG9sZGNoaWxkKTtcbiAgICByLmNoaWxkIDwtIG5ld2NoaWxkXG4gIHwgTm9kZSBuIHdoZW4gbi5sZWZ0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5sZWZ0IDwtIG5ld2NoaWxkXG4gIHwgTm9kZSBuIHdoZW4gbi5yaWdodCA9PSBvbGRjaGlsZCAtPlxuICAgIG4ucmlnaHQgPC0gbmV3Y2hpbGRcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgbWFrZV9ub2RlIHNldCB+bGVmdCB+cmlnaHQgfnBhcmVudCA9XG4gIGxldCBiaW5kaW5nID0gbWF0Y2ggc2V0IHdpdGhcbiAgICB8IE5vbmUgLT4gVW5ib3VuZFxuICAgIHwgU29tZSB2YWx1ZSAtPiBCb3VuZCB7IHZhbHVlIDsgdmFsaWQgPSB0cnVlIH1cbiAgaW5cbiAgbGV0IG5vZGUgPSBOb2RlIHsgbGVmdDsgcmlnaHQ7IHBhcmVudDsgdmVyc2lvbiA9IDA7IHNpemUgPSAwOyBiaW5kaW5nIH0gaW5cbiAgc2V0X3BhcmVudCBsZWZ0ICB+cGFyZW50Om5vZGU7XG4gIHNldF9wYXJlbnQgcmlnaHQgfnBhcmVudDpub2RlO1xuICBub2RlXG5cbmxldCByZWMgcmF3X2ludmFsaWRhdGUgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBzaXplID0gMDsgXyB9IC0+ICgpXG4gIHwgTm9kZSB0IC0+XG4gICAgdC5zaXplIDwtIDA7XG4gICAgcmF3X2ludmFsaWRhdGUgdC5wYXJlbnRcbiAgfCBSb290IHIgLT5cbiAgICBMaXN0Lml0ZXIgTHdkLmludmFsaWRhdGUgci5vbl9pbnZhbGlkYXRlXG4gIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHByZXBlbmQgP3NldCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCByIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6TGVhZiB+cmlnaHQ6ci5jaGlsZCB+cGFyZW50IGluXG4gICAgci5jaGlsZCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcHJlcGVuZCcgeCBzZXQgPSBpZ25vcmUgKHByZXBlbmQgeCB+c2V0KVxuXG5sZXQgYXBwZW5kID9zZXQgPSBmdW5jdGlvblxuICB8IFJvb3QgciBhcyBwYXJlbnQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSBwYXJlbnQ7XG4gICAgbGV0IG5vZGUgPSBtYWtlX25vZGUgc2V0IH5sZWZ0OnIuY2hpbGQgfnJpZ2h0OkxlYWYgfnBhcmVudCBpblxuICAgIHIuY2hpbGQgPC0gbm9kZTtcbiAgICBub2RlXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGFwcGVuZCcgeCBzZXQgPSBpZ25vcmUgKGFwcGVuZCB4IH5zZXQpXG5cbmxldCBiZWZvcmUgP3NldCA9IGZ1bmN0aW9uXG4gIHwgTm9kZSB7IHBhcmVudCA9IExlYWYgOyBfIH0gfCBMZWFmIC0+IExlYWZcbiAgfCBOb2RlIG4gYXMgcGFyZW50IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgcGFyZW50O1xuICAgIGxldCBub2RlID0gbWFrZV9ub2RlIHNldCB+bGVmdDpuLmxlZnQgfnJpZ2h0OkxlYWYgfnBhcmVudCBpblxuICAgIG4ubGVmdCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBhZnRlciA/c2V0ID0gZnVuY3Rpb25cbiAgfCBOb2RlIHsgcGFyZW50ID0gTGVhZiA7IF8gfSB8IExlYWYgLT4gTGVhZlxuICB8IE5vZGUgbiBhcyBwYXJlbnQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSBwYXJlbnQ7XG4gICAgbGV0IG5vZGUgPSBtYWtlX25vZGUgc2V0IH5sZWZ0OkxlYWYgfnJpZ2h0Om4ucmlnaHQgfnBhcmVudCBpblxuICAgIG4ucmlnaHQgPC0gbm9kZTtcbiAgICBub2RlXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgZ2V0ID0gZnVuY3Rpb25cbiAgfCBOb2RlIHsgYmluZGluZyA9IEJvdW5kIHsgdmFsdWUgOyBfIH0gOyBfIH0gLT4gU29tZSB2YWx1ZVxuICB8IExlYWYgfCBSb290IF8gfCBOb2RlIHsgYmluZGluZyA9IFVuYm91bmQgOyBfIH0gLT4gTm9uZVxuXG5sZXQgaW52YWxpZGF0ZV9iaW5kaW5nID0gZnVuY3Rpb25cbiAgfCBVbmJvdW5kIC0+ICgpXG4gIHwgQm91bmQgYiAtPiBiLnZhbGlkIDwtIGZhbHNlXG5cbmxldCBzZXRfYmluZGluZyB4ID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiB8IE5vZGUgeyBwYXJlbnQgPSBMZWFmOyBfIH0gLT4gKClcbiAgfCBOb2RlIG4gYXMgdCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHQ7XG4gICAgaW52YWxpZGF0ZV9iaW5kaW5nIG4uYmluZGluZztcbiAgICBuLmJpbmRpbmcgPC0geFxuXG5sZXQgc2V0IHQgdmFsdWUgPSBzZXRfYmluZGluZyAoQm91bmQgeyB2YWx1ZTsgdmFsaWQgPSB0cnVlIH0pIHRcbmxldCB1bnNldCB0ID0gc2V0X2JpbmRpbmcgVW5ib3VuZCB0XG5cbmxldCBpc19ib3VuZCA9IGZ1bmN0aW9uXG4gIHwgTGVhZiB8IE5vZGUgeyBwYXJlbnQgPSBMZWFmOyBfIH0gLT4gZmFsc2VcbiAgfCBSb290IF8gfCBOb2RlIF8gLT4gdHJ1ZVxuXG5sZXQgcmVjIGpvaW4gbGVmdCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlICh7IGxlZnQgPSBMZWFmOyBfIH0gYXMgbikgYXMgc2VsZiAtPlxuICAgIG4ubGVmdCA8LSBsZWZ0O1xuICAgIHNldF9wYXJlbnQgbGVmdCB+cGFyZW50OnNlbGY7XG4gICAgc2VsZlxuICB8IE5vZGUgbm9kZSAtPlxuICAgIGpvaW4gbGVmdCBub2RlLmxlZnRcblxubGV0IHJlbW92ZSA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiB8IE5vZGUge3BhcmVudCA9IExlYWY7IF99IC0+ICgpXG4gIHwgTm9kZSAoe2xlZnQ7IHJpZ2h0OyBwYXJlbnQ7IF99IGFzIG4pIGFzIHQgLT5cbiAgICBpbnZhbGlkYXRlX2JpbmRpbmcgbi5iaW5kaW5nO1xuICAgIG4ubGVmdCA8LSBMZWFmO1xuICAgIG4ucmlnaHQgPC0gTGVhZjtcbiAgICBuLnBhcmVudCA8LSBMZWFmO1xuICAgIG4uYmluZGluZyA8LSBVbmJvdW5kO1xuICAgIG4udmVyc2lvbiA8LSBtYXhfaW50O1xuICAgIGxldCBqb2luLCBpbnZhbGlkID0gbWF0Y2ggbGVmdCwgcmlnaHQgd2l0aFxuICAgICAgfCBMZWFmLCBvdGhlciB8IG90aGVyLCBMZWFmIC0+IChvdGhlciwgcGFyZW50KVxuICAgICAgfCBfIC0+IChyaWdodCwgam9pbiBsZWZ0IHJpZ2h0KVxuICAgIGluXG4gICAgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQ6dCB+bmV3Y2hpbGQ6am9pbjtcbiAgICBzZXRfcGFyZW50IGpvaW4gfnBhcmVudDtcbiAgICByYXdfaW52YWxpZGF0ZSBpbnZhbGlkXG5cbmxldCByZWMgY2xlYXIgPSBmdW5jdGlvblxuICB8IExlYWYgLT4gKClcbiAgfCBOb2RlICh7bGVmdDsgcmlnaHQ7IF99IGFzIG4pIC0+XG4gICAgaW52YWxpZGF0ZV9iaW5kaW5nIG4uYmluZGluZztcbiAgICBuLmxlZnQgPC0gTGVhZjtcbiAgICBuLnJpZ2h0IDwtIExlYWY7XG4gICAgbi5wYXJlbnQgPC0gTGVhZjtcbiAgICBuLmJpbmRpbmcgPC0gVW5ib3VuZDtcbiAgICBuLnZlcnNpb24gPC0gbWF4X2ludDtcbiAgICBjbGVhciBsZWZ0O1xuICAgIGNsZWFyIHJpZ2h0XG4gIHwgUm9vdCByIGFzIHJvb3QgLT5cbiAgICBsZXQgY2hpbGQgPSByLmNoaWxkIGluXG4gICAgci5jaGlsZCA8LSBMZWFmO1xuICAgIGNsZWFyIGNoaWxkO1xuICAgIHJhd19pbnZhbGlkYXRlIHJvb3RcblxuKCogVHJlZSBiYWxhbmNpbmcgKilcblxubGV0IHNpemUgPSBmdW5jdGlvblxuICB8IE5vZGUgbm9kZSAtPlxuICAgIGFzc2VydCAobm9kZS5zaXplIDw+IDApO1xuICAgIG5vZGUuc2l6ZVxuICB8IExlYWYgLT4gMFxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCoqIFtzbWFsbGVyX2VsbCBzbWluIHNtYXhdIGlmZlxuICAgIC0gW3NtaW5dIGlzIGxlc3MgdGhhbiBbc21heF1cbiAgICAtIFtzbWluXSBhbmQgW3NtYXhdIGRpZmZlcnMgYnkgbGVzcyB0aGFuIHR3byBtYWduaXR1ZGUgb3JkZXJzLCBpLmVcbiAgICAgIG1zYnMoc21pbikgPj0gbXNicyhzbWF4KSAtIDFcbiAgICAgIHdoZXJlIG1zYnMgaXMgdGhlIGluZGV4IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgKilcbmxldCBzbWFsbGVyX2VsbCBzbWluIHNtYXggPSAoc21pbiA8IHNtYXgpICYmICgoc21pbiBsYW5kIHNtYXgpIGxzbCAxIDwgc21heClcblxuKCoqIFtkaXNiYWxhbmNlZCBzbWluIHNtYXhdIGNoZWNrIGlmIHR3byBzdWItdHJlZXMgb2Ygc2l6ZSBbc21pbl0gYW5kIFtzbWF4XSxcbiAgICBhcmUgZGlzYmFsYW5jemVkLiBUaGF0IGlzLCBtc2JzKHNtaW4pIDwgbXNicyhzbWF4KSAtIDEgKilcbmxldCBkaXNiYWxhbmNlZCBzbWluIHNtYXggPSBzbWFsbGVyX2VsbCBzbWluIChzbWF4IGxzciAxKVxuXG5sZXQgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQgfm5ld2NoaWxkID1cbiAgbWF0Y2ggcGFyZW50IHdpdGhcbiAgfCBSb290IHIgLT5cbiAgICBhc3NlcnQgKHIuY2hpbGQgPT0gb2xkY2hpbGQpO1xuICAgIHIuY2hpbGQgPC0gbmV3Y2hpbGQ7XG4gIHwgTm9kZSBuIHdoZW4gbi5sZWZ0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5sZWZ0IDwtIG5ld2NoaWxkXG4gIHwgTm9kZSBuIHdoZW4gbi5yaWdodCA9PSBvbGRjaGlsZCAtPlxuICAgIG4ucmlnaHQgPC0gbmV3Y2hpbGRcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIHJvdF9sZWZ0IHZlcnNpb24gPSBmdW5jdGlvblxuICB8IE5vZGUgKHsgcmlnaHQgPSAoTm9kZSBybikgYXMgcjsgX30gYXMgc24pIGFzIHMgLT5cbiAgICBsZXQgcGFyZW50ID0gc24ucGFyZW50IGluXG4gICAgbGV0IHJsID0gbWF0Y2ggcm4ubGVmdCB3aXRoXG4gICAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTGVhZiAtPiBMZWFmXG4gICAgICB8IChOb2RlIHJsbikgYXMgcmwgLT5cbiAgICAgICAgcmxuLnBhcmVudCA8LSBzO1xuICAgICAgICBybFxuICAgIGluXG4gICAgcm4ubGVmdCA8LSBzO1xuICAgIHNuLnJpZ2h0IDwtIHJsO1xuICAgIHNuLnBhcmVudCA8LSByO1xuICAgIHJuLnBhcmVudCA8LSBwYXJlbnQ7XG4gICAgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQ6cyB+bmV3Y2hpbGQ6cjtcbiAgICBpZ25vcmUgKGJhbGFuY2UgdmVyc2lvbiBzKTtcbiAgICBiYWxhbmNlIHZlcnNpb24gclxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmFuZCByb3RfcmlnaHQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgTm9kZSAoeyBsZWZ0ID0gKE5vZGUgbG4pIGFzIGw7IF99IGFzIHNuKSBhcyBzIC0+XG4gICAgbGV0IHBhcmVudCA9IHNuLnBhcmVudCBpblxuICAgIGxldCBsciA9IG1hdGNoIGxuLnJpZ2h0IHdpdGhcbiAgICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBMZWFmIC0+IExlYWZcbiAgICAgIHwgKE5vZGUgbHJuKSBhcyBsciAtPlxuICAgICAgICBscm4ucGFyZW50IDwtIHM7XG4gICAgICAgIGxyXG4gICAgaW5cbiAgICBsbi5yaWdodCA8LSBzO1xuICAgIHNuLmxlZnQgPC0gbHI7XG4gICAgc24ucGFyZW50IDwtIGw7XG4gICAgbG4ucGFyZW50IDwtIHBhcmVudDtcbiAgICByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZDpzIH5uZXdjaGlsZDpsO1xuICAgIGlnbm9yZSAoYmFsYW5jZSB2ZXJzaW9uIHMpO1xuICAgIGJhbGFuY2UgdmVyc2lvbiBsXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuYW5kIGluY19sZWZ0IHZlcnNpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSB7cmlnaHQ7IF99IGFzIHNlbGYgLT5cbiAgICBiZWdpbiBtYXRjaCByaWdodCB3aXRoXG4gICAgICB8IE5vZGUgcm4gd2hlbiBzbWFsbGVyX2VsbCAoc2l6ZSBybi5yaWdodCkgKHNpemUgcm4ubGVmdCkgLT5cbiAgICAgICAgaWdub3JlIChyb3RfcmlnaHQgdmVyc2lvbiByaWdodClcbiAgICAgIHwgXyAtPiAoKVxuICAgIGVuZDtcbiAgICByb3RfbGVmdCB2ZXJzaW9uIHNlbGZcblxuYW5kIGluY19yaWdodCB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUge2xlZnQ7IF99IGFzIHNlbGYgLT5cbiAgICBiZWdpbiBtYXRjaCBsZWZ0IHdpdGhcbiAgICAgIHwgTm9kZSBsbiB3aGVuIHNtYWxsZXJfZWxsIChzaXplIGxuLmxlZnQpIChzaXplIGxuLnJpZ2h0KSAtPlxuICAgICAgICBpZ25vcmUgKHJvdF9sZWZ0IHZlcnNpb24gbGVmdClcbiAgICAgIHwgXyAtPiAoKVxuICAgIGVuZDtcbiAgICByb3RfcmlnaHQgdmVyc2lvbiBzZWxmXG5cbmFuZCBiYWxhbmNlIHZlcnNpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSBub2RlIGFzIHNlbGYgLT5cbiAgICBsZXQgc2wgPSBzaXplIG5vZGUubGVmdCBhbmQgc3IgPSBzaXplIG5vZGUucmlnaHQgaW5cbiAgICBpZiBzbCA8IHNyIHRoZW4gKFxuICAgICAgaWYgZGlzYmFsYW5jZWQgc2wgc3JcbiAgICAgIHRoZW4gaW5jX2xlZnQgdmVyc2lvbiBzZWxmXG4gICAgICBlbHNlIChub2RlLnZlcnNpb24gPC0gdmVyc2lvbjsgbm9kZS5zaXplIDwtIDEgKyBzbCArIHNyOyBzZWxmKVxuICAgICkgZWxzZSAoXG4gICAgICBpZiBkaXNiYWxhbmNlZCBzciBzbFxuICAgICAgdGhlbiBpbmNfcmlnaHQgdmVyc2lvbiBzZWxmXG4gICAgICBlbHNlIChub2RlLnZlcnNpb24gPC0gdmVyc2lvbjsgbm9kZS5zaXplIDwtIDEgKyBzbCArIHNyOyBzZWxmKVxuICAgIClcblxubGV0IHJlYyBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiAoKVxuICB8IExlYWYgLT4gKClcbiAgfCBOb2RlIG5vZGUgYXMgc2VsZiAtPlxuICAgIGlmIG5vZGUuc2l6ZSA9IDAgdGhlblxuICAgICAgbWF0Y2ggbm9kZS5sZWZ0IHdpdGhcbiAgICAgIHwgTm9kZSB7c2l6ZSA9IDA7IF99IC0+XG4gICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiBub2RlLmxlZnRcbiAgICAgIHwgXyAtPlxuICAgICAgICBtYXRjaCBub2RlLnJpZ2h0IHdpdGhcbiAgICAgICAgfCBOb2RlIHtzaXplID0gMDsgX30gLT5cbiAgICAgICAgICBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gbm9kZS5yaWdodFxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnQgaW5cbiAgICAgICAgICBpZ25vcmUgKGJhbGFuY2UgdmVyc2lvbiBzZWxmKTtcbiAgICAgICAgICBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gcGFyZW50XG5cbmxldCByZWMgcmVzZXRfdmVyc2lvbiB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBMZWFmIC0+ICgpXG4gIHwgTm9kZSBuIC0+XG4gICAgbi52ZXJzaW9uIDwtIHZlcnNpb247XG4gICAgcmVzZXRfdmVyc2lvbiB2ZXJzaW9uIG4ubGVmdDtcbiAgICByZXNldF92ZXJzaW9uIHZlcnNpb24gbi5yaWdodFxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYmFsYW5jZSA9IGZ1bmN0aW9uXG4gIHwgUm9vdCByIC0+XG4gICAgYmVnaW4gbWF0Y2ggci5jaGlsZCB3aXRoXG4gICAgICB8IE5vZGUgeyBzaXplID0gMDsgXyB9IC0+XG4gICAgICAgIGxldCB2ZXJzaW9uID0gc3VjYyByLnZlcnNpb24gaW5cbiAgICAgICAgbGV0IHZlcnNpb24gPVxuICAgICAgICAgIGlmIHZlcnNpb24gPSBtYXhfaW50IHRoZW4gKFxuICAgICAgICAgICAgci5nZW5lcmF0aW9uIDwtIHJlZiAoKTtcbiAgICAgICAgICAgIHJlc2V0X3ZlcnNpb24gMCByLmNoaWxkO1xuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgICBlbHNlIHZlcnNpb25cbiAgICAgICAgaW5cbiAgICAgICAgci52ZXJzaW9uIDwtIHZlcnNpb247XG4gICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiByLmNoaWxkO1xuICAgICAgICB2ZXJzaW9uXG4gICAgICB8IE5vZGUgXyB8IExlYWYgLT4gci52ZXJzaW9uXG4gICAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICBlbmRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcGx1cyAoemVybywgcGx1cykgeCB5ID1cbiAgaWYgeCA9PSB6ZXJvIHRoZW4geVxuICBlbHNlIGlmIHkgPT0gemVybyB0aGVuIHhcbiAgZWxzZSBwbHVzIHggeVxuXG50eXBlICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlID1cbiAgfCBSZWRfbGVhZlxuICB8IFJlZF9ub2RlIG9mIHtcbiAgICAgIGNlbGw6ICdhIHJvdztcbiAgICAgIGJpbmRpbmc6ICdhIGJpbmRpbmc7XG4gICAgICByZWR1Y3Rpb246ICdiO1xuICAgICAgYWdncmVnYXRlOiAnYjtcbiAgICAgIGxlZnQgOiAoJ2EsICdiKSByZWR1Y3Rpb25fdHJlZTtcbiAgICAgIHJpZ2h0IDogKCdhLCAnYikgcmVkdWN0aW9uX3RyZWU7XG4gICAgfVxuXG50eXBlICgnYSwgJ2IpIHJlZHVjdGlvbiA9IHtcbiAgbXV0YWJsZSB2ZXJzaW9uOiBpbnQ7XG4gIHNvdXJjZTogJ2EgdHJlZTtcbiAgbXV0YWJsZSByZXN1bHQgOiAoJ2EsICdiKSByZWR1Y3Rpb25fdHJlZTtcbiAgbXV0YWJsZSBnZW5lcmF0aW9uOiB1bml0IHJlZjtcbiAgbWFwcGVyOiAnYSByb3cgLT4gJ2EgLT4gJ2I7XG4gIG1vbm9pZDogJ2IgTHdkX3V0aWxzLm1vbm9pZDtcbn1cblxuXG5sZXQgZXh0cmFjdF9iaW5kaW5ncyB0cmVlID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IFJlZF9sZWFmIC0+IGFjY1xuICAgIHwgUmVkX25vZGUgcm5vZGUgLT5cbiAgICAgIGxldCBhY2MgPSBhdXggYWNjIHJub2RlLnJpZ2h0IGluXG4gICAgICBsZXQgYWNjID0gbWF0Y2ggcm5vZGUuYmluZGluZyB3aXRoXG4gICAgICAgIHwgVW5ib3VuZCAtPiBhY2NcbiAgICAgICAgfCBCb3VuZCB7IHZhbGlkID0gZmFsc2U7IF8gfSAtPiBhY2NcbiAgICAgICAgfCBfIC0+IChybm9kZS5iaW5kaW5nLCBybm9kZS5yZWR1Y3Rpb24pIDo6IGFjY1xuICAgICAgaW5cbiAgICAgIGF1eCBhY2Mgcm5vZGUubGVmdFxuICBpblxuICBhdXggW10gdHJlZVxuXG5sZXQgZnVsbF9yZWJ1aWxkIHJlZCB0cmVlID1cbiAgbGV0IGJpbmRpbmdzID0gcmVmIChleHRyYWN0X2JpbmRpbmdzIHJlZC5yZXN1bHQpIGluXG4gIGxldCByZWMgYXV4ID0gZnVuY3Rpb25cbiAgICB8IE5vZGUgbm9kZSBhcyBjZWxsIC0+XG4gICAgICBsZXQgbGVmdCA9IGF1eCBub2RlLmxlZnQgaW5cbiAgICAgIGxldCByZWR1Y3Rpb24gPVxuICAgICAgICBtYXRjaCBub2RlLmJpbmRpbmcsICFiaW5kaW5ncyB3aXRoXG4gICAgICAgIHwgVW5ib3VuZCwgXyAtPiBmc3QgcmVkLm1vbm9pZFxuICAgICAgICB8IGJpbmRpbmcsICgoYmluZGluZycsIHJlZHVjdGlvbikgOjogYmluZGluZ3MnKVxuICAgICAgICAgIHdoZW4gYmluZGluZyA9PSBiaW5kaW5nJyAtPlxuICAgICAgICAgIGJpbmRpbmdzIDo9IGJpbmRpbmdzJztcbiAgICAgICAgICByZWR1Y3Rpb25cbiAgICAgICAgfCBCb3VuZCBiLCBfIC0+IGFzc2VydCBiLnZhbGlkOyByZWQubWFwcGVyIGNlbGwgYi52YWx1ZVxuICAgICAgaW5cbiAgICAgIGxldCByaWdodCA9IGF1eCBub2RlLnJpZ2h0IGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggbGVmdCB3aXRoXG4gICAgICAgIHwgUmVkX2xlYWYgLT4gcmVkdWN0aW9uXG4gICAgICAgIHwgUmVkX25vZGUgciAtPiBwbHVzIHJlZC5tb25vaWQgci5hZ2dyZWdhdGUgcmVkdWN0aW9uXG4gICAgICBpblxuICAgICAgbGV0IGFnZ3JlZ2F0ZSA9IG1hdGNoIHJpZ2h0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiBhZ2dyZWdhdGVcbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCBhZ2dyZWdhdGUgci5hZ2dyZWdhdGVcbiAgICAgIGluXG4gICAgICBSZWRfbm9kZSB7XG4gICAgICAgIGNlbGw7XG4gICAgICAgIGJpbmRpbmcgPSBub2RlLmJpbmRpbmc7XG4gICAgICAgIHJlZHVjdGlvbjtcbiAgICAgICAgYWdncmVnYXRlO1xuICAgICAgICBsZWZ0O1xuICAgICAgICByaWdodDtcbiAgICAgIH1cbiAgICB8IExlYWYgLT4gUmVkX2xlYWZcbiAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgaW5cbiAgbGV0IHJlc3VsdCA9IGF1eCB0cmVlIGluXG4gIGFzc2VydCAoIWJpbmRpbmdzID0gW10pO1xuICByZXN1bHRcblxubGV0IGV4dHJhY3RfZnJpbmdlIHZlcnNpb24gdHJlZSA9XG4gIGxldCByZWMgYXV4IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBSZWRfbGVhZiAtPiBhY2NcbiAgICB8IFJlZF9ub2RlIHJub2RlIGFzIHRyZWUgLT5cbiAgICAgIG1hdGNoIHJub2RlLmNlbGwgd2l0aFxuICAgICAgfCBOb2RlIG5vZGUgd2hlbiBub2RlLnZlcnNpb24gPD0gdmVyc2lvbiAtPiB0cmVlIDo6IGFjY1xuICAgICAgfCBfIC0+XG4gICAgICAgIGxldCBhY2MgPSBhdXggYWNjIHJub2RlLnJpZ2h0IGluXG4gICAgICAgIGxldCBhY2MgPSBtYXRjaCBybm9kZS5iaW5kaW5nIHdpdGhcbiAgICAgICAgICB8IFVuYm91bmQgLT4gYWNjXG4gICAgICAgICAgfCBCb3VuZCB7IHZhbGlkID0gZmFsc2U7IF8gfSAtPiBhY2NcbiAgICAgICAgICB8IF8gLT4gdHJlZSA6OiBhY2NcbiAgICAgICAgaW5cbiAgICAgICAgYXV4IGFjYyBybm9kZS5sZWZ0XG4gIGluXG4gIGF1eCBbXSB0cmVlXG5cbmxldCBpbmNyZW1lbnRhbF9yZWJ1aWxkIHJlZCB2ZXJzaW9uIHRyZWUgPVxuICBsZXQgZnJpbmdlID0gcmVmIChleHRyYWN0X2ZyaW5nZSB2ZXJzaW9uIHJlZC5yZXN1bHQpIGluXG4gIGxldCByZWMgYXV4ID0gZnVuY3Rpb25cbiAgICB8IE5vZGUgbm9kZSBhcyBjZWxsIHdoZW4gbm9kZS52ZXJzaW9uIDw9IHZlcnNpb24gLT5cbiAgICAgIGJlZ2luIG1hdGNoICFmcmluZ2Ugd2l0aFxuICAgICAgICB8IChSZWRfbm9kZSBybm9kZSBhcyByZWR1Y3Rpb24pIDo6IGZyaW5nZScgLT5cbiAgICAgICAgICBhc3NlcnQgKHJub2RlLmNlbGwgPT0gY2VsbCk7XG4gICAgICAgICAgZnJpbmdlIDo9IGZyaW5nZSc7XG4gICAgICAgICAgcmVkdWN0aW9uXG4gICAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIGVuZFxuICAgIHwgTm9kZSBub2RlIGFzIGNlbGwgLT5cbiAgICAgIGxldCBsZWZ0ID0gYXV4IG5vZGUubGVmdCBpblxuICAgICAgbGV0IHJlZHVjdGlvbiA9XG4gICAgICAgIG1hdGNoIG5vZGUuYmluZGluZywgIWZyaW5nZSB3aXRoXG4gICAgICAgIHwgVW5ib3VuZCwgXyAtPiBmc3QgcmVkLm1vbm9pZFxuICAgICAgICB8IGJpbmRpbmcsIChSZWRfbm9kZSBybm9kZSA6OiBmcmluZ2UnKVxuICAgICAgICAgIHdoZW4gYmluZGluZyA9PSBybm9kZS5iaW5kaW5nIC0+XG4gICAgICAgICAgZnJpbmdlIDo9IGZyaW5nZSc7XG4gICAgICAgICAgcm5vZGUucmVkdWN0aW9uXG4gICAgICAgIHwgQm91bmQgYiwgXyAtPlxuICAgICAgICAgIGFzc2VydCBiLnZhbGlkOyByZWQubWFwcGVyIGNlbGwgYi52YWx1ZVxuICAgICAgaW5cbiAgICAgIGxldCByaWdodCA9IGF1eCBub2RlLnJpZ2h0IGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggbGVmdCB3aXRoXG4gICAgICAgIHwgUmVkX2xlYWYgLT4gcmVkdWN0aW9uXG4gICAgICAgIHwgUmVkX25vZGUgciAtPiBwbHVzIHJlZC5tb25vaWQgci5hZ2dyZWdhdGUgcmVkdWN0aW9uXG4gICAgICBpblxuICAgICAgbGV0IGFnZ3JlZ2F0ZSA9IG1hdGNoIHJpZ2h0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiBhZ2dyZWdhdGVcbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCBhZ2dyZWdhdGUgci5hZ2dyZWdhdGVcbiAgICAgIGluXG4gICAgICBSZWRfbm9kZSB7XG4gICAgICAgIGNlbGw7XG4gICAgICAgIGJpbmRpbmcgPSBub2RlLmJpbmRpbmc7XG4gICAgICAgIHJlZHVjdGlvbjtcbiAgICAgICAgYWdncmVnYXRlO1xuICAgICAgICBsZWZ0O1xuICAgICAgICByaWdodDtcbiAgICAgIH1cbiAgICB8IFJvb3QgXyB8IExlYWYgLT4gUmVkX2xlYWZcbiAgaW5cbiAgbGV0IHJlc3VsdCA9IGF1eCB0cmVlIGluXG4gIGFzc2VydCAoIWZyaW5nZSA9IFtdKTtcbiAgcmVzdWx0XG5cbmxldCBldmFsIHJlZCA9XG4gIG1hdGNoIHJlZC5zb3VyY2Ugd2l0aFxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCByb290IC0+XG4gICAgbGV0IHZlcnNpb24gPSByZWJhbGFuY2UgcmVkLnNvdXJjZSBpblxuICAgIGlmIHRydWUgdGhlbiAoXG4gICAgICBpZiByZWQuZ2VuZXJhdGlvbiAhPSByb290LmdlbmVyYXRpb24gdGhlbiAoXG4gICAgICAgIHJlZC5nZW5lcmF0aW9uIDwtIHJvb3QuZ2VuZXJhdGlvbjtcbiAgICAgICAgcmVkLnJlc3VsdCA8LSBmdWxsX3JlYnVpbGQgcmVkIHJvb3QuY2hpbGQ7XG4gICAgICApIGVsc2UgKFxuICAgICAgICByZWQucmVzdWx0IDwtIGluY3JlbWVudGFsX3JlYnVpbGQgcmVkIHJlZC52ZXJzaW9uIHJvb3QuY2hpbGRcbiAgICAgICk7XG4gICAgKSBlbHNlIChcbiAgICAgIHJlZC5yZXN1bHQgPC0gZnVsbF9yZWJ1aWxkIHJlZCByb290LmNoaWxkO1xuICAgICk7XG4gICAgcmVkLnZlcnNpb24gPC0gdmVyc2lvbjtcbiAgICBtYXRjaCByZWQucmVzdWx0IHdpdGhcbiAgICB8IFJlZF9sZWFmIC0+IGZzdCByZWQubW9ub2lkXG4gICAgfCBSZWRfbm9kZSByIC0+IHIuYWdncmVnYXRlXG5cbmxldCBvcGFxdWUgOiAnYSBMd2QucHJpbSAtPiBPYmoudCBMd2QucHJpbSA9IE9iai5tYWdpY1xuXG5sZXQgbWFwX3JlZHVjZSBtYXBwZXIgbW9ub2lkIHNvdXJjZSA9XG4gIGxldCByZWR1Y3Rpb24gPSB7XG4gICAgc291cmNlOyBtYXBwZXI7IG1vbm9pZDtcbiAgICByZXN1bHQgPSBSZWRfbGVhZjtcbiAgICBnZW5lcmF0aW9uID0gbm90X29yaWdpbjtcbiAgICB2ZXJzaW9uID0gMDtcbiAgfSBpblxuICBsZXQgcHJpbSA9IEx3ZC5wcmltXG4gICAgICB+YWNxdWlyZTooZnVuIHNlbGYgLT5cbiAgICAgICAgICBtYXRjaCByZWR1Y3Rpb24uc291cmNlIHdpdGhcbiAgICAgICAgICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBSb290IHJvb3QgLT5cbiAgICAgICAgICAgIHJvb3Qub25faW52YWxpZGF0ZSA8LSBvcGFxdWUgc2VsZiA6OiByb290Lm9uX2ludmFsaWRhdGU7XG4gICAgICAgICAgICByZWR1Y3Rpb25cbiAgICAgICAgKVxuICAgICAgfnJlbGVhc2U6KGZ1biBzZWxmIHJlZHVjdGlvbiAtPlxuICAgICAgICAgIG1hdGNoIHJlZHVjdGlvbi5zb3VyY2Ugd2l0aFxuICAgICAgICAgIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IFJvb3Qgcm9vdCAtPlxuICAgICAgICAgICAgcm9vdC5vbl9pbnZhbGlkYXRlIDwtXG4gICAgICAgICAgICAgIExpc3QuZmlsdGVyICgoIT0pIChvcGFxdWUgc2VsZikpIHJvb3Qub25faW52YWxpZGF0ZVxuICAgICAgICApXG4gIGluXG4gIEx3ZC5tYXAgfmY6ZXZhbCAoTHdkLmdldF9wcmltIHByaW0pXG5cbmxldCByZWR1Y2UgbW9ub2lkIHNvdXJjZSA9IG1hcF9yZWR1Y2UgKGZ1biBfIHggLT4geCkgbW9ub2lkIHNvdXJjZVxuXG5sZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgdCAtPlxuICAgIGl0ZXIgZiB0LmxlZnQ7XG4gICAgYmVnaW4gbWF0Y2ggdC5iaW5kaW5nIHdpdGhcbiAgICAgIHwgQm91bmQgeCAtPiBmIHgudmFsdWVcbiAgICAgIHwgVW5ib3VuZCAtPiAoKVxuICAgIGVuZDtcbiAgICBpdGVyIGYgdC5yaWdodFxuICB8IFJvb3QgdCAtPlxuICAgIGl0ZXIgZiB0LmNoaWxkXG5cbmxldCBsZWZ0X21vc3QgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IFxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIC0+IGFjY1xuICB8IE5vZGUgbiBhcyBzZWxmIC0+IGF1eCAoU29tZSBzZWxmKSBuLmxlZnRcbiAgaW5cbiAgZnVuIHIgLT4gYXV4IE5vbmUgclxuXG5sZXQgcmVjIHJpZ2h0X21vc3QgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IFxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIC0+IGFjY1xuICB8IE5vZGUgbiBhcyBzZWxmIC0+IGF1eCAoU29tZSBzZWxmKSBuLnJpZ2h0XG4gIGluXG4gIGZ1biByIC0+IGF1eCBOb25lIHJcblxubGV0IGZpcnN0IDogJ2EgdCAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3Qgcm9vdCAtPiBsZWZ0X21vc3Qgcm9vdC5jaGlsZFxuXG5sZXQgbGFzdCA6ICdhIHQgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHJvb3QgLT4gcmlnaHRfbW9zdCByb290LmNoaWxkXG5cbmxldCBuZXh0IDogJ2Egcm93IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIC0+IE5vbmVcbiAgfCBOb2RlIG4gYXMgc2VsZiAtPlxuICAgIG1hdGNoIGxlZnRfbW9zdCBuLnJpZ2h0IHdpdGhcbiAgICB8IFNvbWUgXyBhcyB4IC0+IHhcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCByZWMgd2Fsa19yb290IHNlbGYgPSBmdW5jdGlvblxuICAgICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgUm9vdCBfIC0+IE5vbmVcbiAgICAgICAgfCBOb2RlIG4nIGFzIHBhcmVudCAtPlxuICAgICAgICAgIGlmIG4nLmxlZnQgPT0gc2VsZiB0aGVuIFNvbWUgcGFyZW50IGVsc2UgKFxuICAgICAgICAgICAgYXNzZXJ0IChuJy5yaWdodCA9PSBzZWxmKTtcbiAgICAgICAgICAgIHdhbGtfcm9vdCBwYXJlbnQgbicucGFyZW50XG4gICAgICAgICAgKVxuICAgICAgaW5cbiAgICAgIHdhbGtfcm9vdCBzZWxmIG4ucGFyZW50XG5cbmxldCBwcmV2IDogJ2Egcm93IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIC0+IE5vbmVcbiAgfCBOb2RlIG4gYXMgc2VsZiAtPlxuICAgIG1hdGNoIHJpZ2h0X21vc3Qgbi5sZWZ0IHdpdGhcbiAgICB8IFNvbWUgXyBhcyB4IC0+IHhcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCByZWMgd2Fsa19yb290IHNlbGYgPSBmdW5jdGlvblxuICAgICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgUm9vdCBfIC0+IE5vbmVcbiAgICAgICAgfCBOb2RlIG4nIGFzIHBhcmVudCAtPlxuICAgICAgICAgIGlmIG4nLnJpZ2h0ID09IHNlbGYgdGhlbiBTb21lIHBhcmVudCBlbHNlIChcbiAgICAgICAgICAgIGFzc2VydCAobicubGVmdCA9PSBzZWxmKTtcbiAgICAgICAgICAgIHdhbGtfcm9vdCBwYXJlbnQgbicucGFyZW50XG4gICAgICAgICAgKVxuICAgICAgaW5cbiAgICAgIHdhbGtfcm9vdCBzZWxmIG4ucGFyZW50XG4iLCJcbnR5cGUgISsnYSB0ID1cblxuXG4gIHwgTmlsXG4gIHwgTGVhZiBvZiB7IG11dGFibGUgbWFyazogaW50OyB2OiAnYTsgfVxuICB8IEpvaW4gb2YgeyBtdXRhYmxlIG1hcms6IGludDsgbDogJ2EgdDsgcjogJ2EgdDsgfVxuXG50eXBlICdhIHNlcSA9ICdhIHRcblxubGV0IGVtcHR5ID0gTmlsXG5cbmxldCBlbGVtZW50IHYgPSBMZWFmIHsgbWFyayA9IDA7IHYgfVxuXG5sZXQgbWFza19iaXRzID0gMlxuXG5sZXQgbWF4aSBhIGIgOiBpbnQgPSBpZiBiID4gYSB0aGVuIGIgZWxzZSBhXG5cbmxldCByYW5rID0gZnVuY3Rpb25cbiAgfCBOaWwgLT4gMFxuICB8IExlYWYgdCAtPlxuICAgIGlmIHQubWFyayA8PiAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiTHdkX3NlcS5yYW5rOiBub2RlIGlzIG1hcmtlZFwiO1xuICAgIDBcbiAgfCBKb2luIHQgLT5cbiAgICBpZiB0Lm1hcmsgbGFuZCBtYXNrX2JpdHMgPD4gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkx3ZF9zZXEucmFuazogbm9kZSBpcyBtYXJrZWRcIjtcbiAgICB0Lm1hcmsgbHNyIG1hc2tfYml0c1xuXG5sZXQgY29uY2F0IGEgYiA9IG1hdGNoIGEsIGIgd2l0aFxuICB8IE5pbCwgeCB8IHgsIE5pbCAtPiB4XG4gIHwgbCwgciAtPiBKb2luIHsgbWFyayA9IChtYXhpIChyYW5rIGwpIChyYW5rIHIpICsgMSkgbHNsIG1hc2tfYml0czsgbDsgciB9XG5cbnR5cGUgKCdhLCAnYikgdmlldyA9XG4gIHwgRW1wdHlcbiAgfCBFbGVtZW50IG9mICdhXG4gIHwgQ29uY2F0IG9mICdiICogJ2JcblxubGV0IHZpZXcgPSBmdW5jdGlvblxuICB8IE5pbCAgICAtPiBFbXB0eVxuICB8IExlYWYgdCAtPiBFbGVtZW50IHQudlxuICB8IEpvaW4gdCAtPiBDb25jYXQgKHQubCwgdC5yKVxuXG5tb2R1bGUgQmFsYW5jZWQgOiBzaWdcbiAgdHlwZSAnYSB0ID0gcHJpdmF0ZSAnYSBzZXFcbiAgdmFsIGVtcHR5IDogJ2EgdFxuICB2YWwgZWxlbWVudCA6ICdhIC0+ICdhIHRcbiAgdmFsIGNvbmNhdCA6ICdhIHQgLT4gJ2EgdCAtPiAnYSB0XG5cbiAgdmFsIHZpZXcgOiAnYSB0IC0+ICgnYSwgJ2EgdCkgdmlld1xuZW5kID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIHNlcVxuXG4gIGxldCBlbXB0eSA9IGVtcHR5XG4gIGxldCBlbGVtZW50ID0gZWxlbWVudFxuXG4gIGxldCBjaGVjayBsIHIgPSBhYnMgKGwgLSByKSA8PSAxXG5cbiAgbGV0IHJlYyBub2RlX2xlZnQgbCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtbCBtciB0aGVuIGNvbmNhdCBsIHIgZWxzZSBtYXRjaCBsIHdpdGhcbiAgICAgIHwgTmlsIHwgTGVhZiBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBKb2luIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5sKSBtbFxuICAgICAgICB0aGVuIGNvbmNhdCB0LmwgKG5vZGVfbGVmdCB0LnIgcilcbiAgICAgICAgZWxzZSBtYXRjaCB0LnIgd2l0aFxuICAgICAgICAgIHwgTmlsIHwgTGVhZiBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgSm9pbiB0ciAtPlxuICAgICAgICAgICAgbGV0IHRyciA9IG5vZGVfbGVmdCB0ci5yIHIgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0LmwpIChyYW5rIHRyLmwpKSAocmFuayB0cnIpXG4gICAgICAgICAgICB0aGVuIGNvbmNhdCAoY29uY2F0IHQubCB0ci5sKSB0cnJcbiAgICAgICAgICAgIGVsc2UgY29uY2F0IHQubCAoY29uY2F0IHRyLmwgdHJyKVxuXG4gIGxldCByZWMgbm9kZV9yaWdodCBsIHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1yIG1sIHRoZW4gY29uY2F0IGwgciBlbHNlIG1hdGNoIHIgd2l0aFxuICAgICAgfCBOaWwgfCBMZWFmIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IEpvaW4gdCAtPlxuICAgICAgICBpZiBjaGVjayAocmFuayB0LnIpIG1yXG4gICAgICAgIHRoZW4gY29uY2F0IChub2RlX3JpZ2h0IGwgdC5sKSB0LnJcbiAgICAgICAgZWxzZSBtYXRjaCB0Lmwgd2l0aFxuICAgICAgICAgIHwgTmlsIHwgTGVhZiBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgSm9pbiB0bCAtPlxuICAgICAgICAgICAgbGV0IHRsbCA9IG5vZGVfcmlnaHQgbCB0bC5sIGluXG4gICAgICAgICAgICBpZiBjaGVjayAoMSArIG1heGkgKHJhbmsgdGwucikgKHJhbmsgdC5yKSkgKHJhbmsgdGxsKVxuICAgICAgICAgICAgdGhlbiBjb25jYXQgdGxsIChjb25jYXQgdGwuciB0LnIpXG4gICAgICAgICAgICBlbHNlIGNvbmNhdCAoY29uY2F0IHRsbCB0bC5yKSB0LnJcblxuICBsZXQgY29uY2F0IGwgciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXJcbiAgICB0aGVuIGNvbmNhdCBsIHJcbiAgICBlbHNlIGlmIG1sIDw9IG1yXG4gICAgdGhlbiBub2RlX3JpZ2h0IGwgclxuICAgIGVsc2Ugbm9kZV9sZWZ0IGwgclxuXG4gIGxldCB2aWV3ID0gdmlld1xuZW5kXG5cbm1vZHVsZSBNYXJraW5nIDogc2lnXG4gIHR5cGUgbWFyayA9ICgqcHJpdmF0ZSopIGludFxuICB2YWwgaXNfc2hhcmVkIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19ub3Rfc2hhcmVkIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19ub25lIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19ib3RoIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19vbGQgOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX25ldyA6IG1hcmsgLT4gYm9vbFxuICAoKnZhbCBoYXNfb2xkIDogbWFyayAtPiBib29sKilcbiAgKCp2YWwgaGFzX25ldyA6IG1hcmsgLT4gYm9vbCopXG4gIHZhbCBzZXRfYm90aCA6IG1hcmsgLT4gbWFya1xuICB2YWwgdW5tYXJrIDogbWFyayAtPiBtYXJrXG4gIHZhbCBnZXRfaW5kZXggOiBtYXJrIC0+IGludFxuICB2YWwgd2l0aF9pbmRleF9uZXcgOiBpbnQgLT4gbWFya1xuXG4gIHR5cGUgc3RhdHNcbiAgdmFsIG1hcmtlZCA6IHN0YXRzIC0+IGludFxuICB2YWwgc2hhcmVkIDogc3RhdHMgLT4gaW50XG4gIHZhbCBibG9ja2VkIDogc3RhdHMgLT4gaW50XG5cbiAgdHlwZSB0cmF2ZXJzYWxcbiAgdmFsIG9sZF9zdGF0cyA6IHRyYXZlcnNhbCAtPiBzdGF0c1xuICB2YWwgbmV3X3N0YXRzIDogdHJhdmVyc2FsIC0+IHN0YXRzXG5cbiAgdmFsIHVuc2FmZV90cmF2ZXJzZSA6IG9sZF9yb290Ol8gc2VxIC0+IG5ld19yb290Ol8gc2VxIC0+IHRyYXZlcnNhbFxuXG4gIHZhbCByZXN0b3JlIDogXyBzZXEgLT4gdW5pdFxuZW5kID0gc3RydWN0XG4gIHR5cGUgbWFyayA9IGludFxuXG4gIGxldCBtYXNrX25vbmUgPSAwXG4gIGxldCBtYXNrX29sZCAgPSAxXG4gIGxldCBtYXNrX25ldyAgPSAyXG4gIGxldCBtYXNrX2JvdGggPSAzXG5cbiAgbGV0IGlzX3NoYXJlZCBtID0gbSA9IC0xXG4gIGxldCBpc19ub3Rfc2hhcmVkIG0gPSBtIDw+IC0xXG4gIGxldCBpc19ub25lIG0gPSBtIGxhbmQgbWFza19ib3RoID0gbWFza19ub25lXG4gIGxldCBpc19ib3RoIG0gPSBtIGxhbmQgbWFza19ib3RoID0gbWFza19ib3RoXG4gIGxldCBpc19vbGQgIG0gPSBtIGxhbmQgbWFza19ib3RoID0gbWFza19vbGRcbiAgbGV0IGlzX25ldyAgbSA9IG0gbGFuZCBtYXNrX2JvdGggPSBtYXNrX25ld1xuICAoKmxldCBoYXNfb2xkIG0gPSBtIGxhbmQgbWFza19vbGQgPD4gMCopXG4gICgqbGV0IGhhc19uZXcgbSA9IG0gbGFuZCBtYXNrX25ldyA8PiAwKilcbiAgbGV0IHNldF9ib3RoIG0gPSBtIGxvciBtYXNrX2JvdGhcblxuICBsZXQgZ2V0X2luZGV4IG0gPSBtIGxzciBtYXNrX2JpdHNcbiAgbGV0IHdpdGhfaW5kZXhfbmV3IGluZGV4ID0gKGluZGV4IGxzbCBtYXNrX2JpdHMpIGxvciBtYXNrX25ld1xuXG4gIGxldCB1bm1hcmsgbSA9IG0gbGFuZCBsbm90IG1hc2tfYm90aFxuXG4gIHR5cGUgc3RhdHMgPSB7XG4gICAgbXV0YWJsZSBtYXJrZWQ6IGludDtcbiAgICBtdXRhYmxlIHNoYXJlZDogaW50O1xuICAgIG11dGFibGUgYmxvY2tlZDogaW50O1xuICB9XG4gIGxldCBtYXJrZWQgcyA9IHMubWFya2VkXG4gIGxldCBzaGFyZWQgcyA9IHMuc2hhcmVkXG4gIGxldCBibG9ja2VkIHMgPSBzLmJsb2NrZWRcblxuICBsZXQgbWtfc3RhdHMgKCkgPSB7IG1hcmtlZCA9IDA7IHNoYXJlZCA9IDA7IGJsb2NrZWQgPSAwIH1cblxuICBsZXQgbmV3X21hcmtlZCBzdGF0cyA9IHN0YXRzLm1hcmtlZCA8LSBzdGF0cy5tYXJrZWQgKyAxXG4gIGxldCBuZXdfc2hhcmVkIHN0YXRzID0gc3RhdHMuc2hhcmVkIDwtIHN0YXRzLnNoYXJlZCArIDFcbiAgbGV0IG5ld19ibG9ja2VkIHN0YXRzID0gc3RhdHMuYmxvY2tlZCA8LSBzdGF0cy5ibG9ja2VkICsgMVxuXG4gIGxldCByZWMgYmxvY2sgc3RhdHMgbWFzayA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IExlYWYgdCcgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiBtYXNrX2JvdGggJiYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiAwXG4gICAgICB0aGVuIChcbiAgICAgICAgaWYgbWFyayBsYW5kIG1hc2sgPSAwIHRoZW4gbmV3X21hcmtlZCBzdGF0cyBlbHNlIGFzc2VydCBmYWxzZTtcbiAgICAgICAgbmV3X2Jsb2NrZWQgc3RhdHM7XG4gICAgICAgIHQnLm1hcmsgPC0gbWFyayBsb3IgbWFza19ib3RoXG4gICAgICApXG4gICAgfCBKb2luIHQnIC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gbWFza19ib3RoICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMFxuICAgICAgdGhlbiAoXG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIG5ld19tYXJrZWQgc3RhdHMgZWxzZSBhc3NlcnQgZmFsc2U7XG4gICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICB0Jy5tYXJrIDwtIG1hcmsgbG9yIG1hc2tfYm90aDtcbiAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5sO1xuICAgICAgICBibG9jayBzdGF0cyBtYXNrIHQnLnI7XG4gICAgICApXG5cbiAgbGV0IGVucXVldWUgc3RhdHMgcSBtYXNrID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgTGVhZiB0JyAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrIGxhbmQgbWFzayA9IDAgdGhlbiAoXG4gICAgICAgICgqIE5vdCB5ZXQgc2VlbiAqKVxuICAgICAgICBuZXdfbWFya2VkIHN0YXRzO1xuICAgICAgICBpZiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IDAgdGhlbiAoXG4gICAgICAgICAgKCogTmV3bHkgc2hhcmVkLCBjbGVhciBtYXNrICopXG4gICAgICAgICAgdCcubWFyayA8LSAtMTtcbiAgICAgICAgICBuZXdfYmxvY2tlZCBzdGF0cztcbiAgICAgICAgICBuZXdfc2hhcmVkIHN0YXRzO1xuICAgICAgICApIGVsc2VcbiAgICAgICAgICB0Jy5tYXJrIDwtIG1hcmsgbG9yIG1hc2s7XG4gICAgICApO1xuICAgICAgaWYgbWFyayA8PiAtMSAmJiBtYXJrIGxhbmQgbWFza19ib3RoID0gbWFza19ib3RoIHRoZW4gKFxuICAgICAgICB0Jy5tYXJrIDwtIC0xO1xuICAgICAgICBuZXdfc2hhcmVkIHN0YXRzXG4gICAgICApXG4gICAgfCBKb2luIHQnIGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayBsYW5kIG1hc2sgPSAwIHRoZW4gKFxuICAgICAgICAoKiBOb3QgeWV0IHNlZW4gKilcbiAgICAgICAgbmV3X21hcmtlZCBzdGF0cztcbiAgICAgICAgaWYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiAwIHRoZW4gKFxuICAgICAgICAgICgqIE5ld2x5IHNoYXJlZCwgY2xlYXIgbWFzayAqKVxuICAgICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgICAgbmV3X2Jsb2NrZWQgc3RhdHM7XG4gICAgICAgICAgbmV3X3NoYXJlZCBzdGF0cztcbiAgICAgICAgICBibG9jayBzdGF0cyBtYXNrIHQnLmw7XG4gICAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5yO1xuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIEZpcnN0IG1hcmsgKilcbiAgICAgICAgICB0Jy5tYXJrIDwtIG1hcmsgbG9yIG1hc2s7XG4gICAgICAgICAgUXVldWUucHVzaCB0IHFcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGlmIG1hcmsgPD4gLTEgJiYgbWFyayBsYW5kIG1hc2tfYm90aCA9IG1hc2tfYm90aCB0aGVuIChcbiAgICAgICAgdCcubWFyayA8LSAtMTtcbiAgICAgICAgbmV3X3NoYXJlZCBzdGF0c1xuICAgICAgKVxuXG4gIGxldCBkZXF1ZXVlIHN0YXRzIHEgbWFzayA9XG4gICAgbWF0Y2ggUXVldWUucG9wIHEgd2l0aFxuICAgIHwgSm9pbiB0IC0+XG4gICAgICBpZiB0Lm1hcmsgbGFuZCBtYXNrX2JvdGggPSBtYXNrIHRoZW4gKFxuICAgICAgICBlbnF1ZXVlIHN0YXRzIHEgbWFzayB0Lmw7XG4gICAgICAgIGVucXVldWUgc3RhdHMgcSBtYXNrIHQucjtcbiAgICAgIClcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgbGV0IHRyYXZlcnNlMSBzdGF0cyBxIG1hc2sgPVxuICAgIHdoaWxlIG5vdCAoUXVldWUuaXNfZW1wdHkgcSkgZG9cbiAgICAgIGRlcXVldWUgc3RhdHMgcSBtYXNrXG4gICAgZG9uZVxuXG4gIGxldCByZWMgdHJhdmVyc2Ugc29sZCBzbmV3IHFvbGQgcW5ldyA9XG4gICAgaWYgUXVldWUuaXNfZW1wdHkgcW9sZCB0aGVuXG4gICAgICB0cmF2ZXJzZTEgc25ldyBxbmV3IG1hc2tfbmV3XG4gICAgZWxzZSBpZiBRdWV1ZS5pc19lbXB0eSBxbmV3IHRoZW5cbiAgICAgIHRyYXZlcnNlMSBzb2xkIHFvbGQgbWFza19vbGRcbiAgICBlbHNlIChcbiAgICAgIGRlcXVldWUgc29sZCBxb2xkIG1hc2tfb2xkO1xuICAgICAgZGVxdWV1ZSBzbmV3IHFuZXcgbWFza19uZXc7XG4gICAgICB0cmF2ZXJzZSBzb2xkIHNuZXcgcW9sZCBxbmV3XG4gICAgKVxuXG4gIHR5cGUgdHJhdmVyc2FsID0ge1xuICAgIG9sZF9zdGF0czogc3RhdHM7XG4gICAgbmV3X3N0YXRzOiBzdGF0cztcbiAgfVxuXG4gIGxldCBvbGRfc3RhdHMgdHIgPSB0ci5vbGRfc3RhdHNcbiAgbGV0IG5ld19zdGF0cyB0ciA9IHRyLm5ld19zdGF0c1xuXG4gIGxldCB1bnNhZmVfdHJhdmVyc2Ugfm9sZF9yb290IH5uZXdfcm9vdCA9XG4gICAgbGV0IG9sZF9zdGF0cyA9IG1rX3N0YXRzICgpIGluXG4gICAgbGV0IG5ld19zdGF0cyA9IG1rX3N0YXRzICgpIGluXG4gICAgbGV0IG9sZF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGxldCBuZXdfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBlbnF1ZXVlIG9sZF9zdGF0cyBvbGRfcXVldWUgbWFza19vbGQgb2xkX3Jvb3Q7XG4gICAgZW5xdWV1ZSBuZXdfc3RhdHMgbmV3X3F1ZXVlIG1hc2tfbmV3IG5ld19yb290O1xuICAgIHRyYXZlcnNlIG9sZF9zdGF0cyBuZXdfc3RhdHMgb2xkX3F1ZXVlIG5ld19xdWV1ZTtcbiAgICB7b2xkX3N0YXRzOyBuZXdfc3RhdHN9XG5cbiAgbGV0IHJlc3RvcmUgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBMZWFmIHQgLT4gdC5tYXJrIDwtIDBcbiAgICB8IEpvaW4gdCAtPlxuICAgICAgdC5tYXJrIDwtIChtYXhpIChyYW5rIHQubCkgKHJhbmsgdC5yKSArIDEpIGxzbCBtYXNrX2JpdHNcbmVuZFxuXG4oKiBNYXJrcyBnbyB0aHJvdWdoIG1hbnkgc3RhdGVzLlxuXG4gICBBIG1hcmsgaXMgdXN1YWxseSBzcGxpdCBpbiB0d28gcGFydHM6XG4gICAtIHRoZSBtYXNrLCBtYWRlIG9mIHRoZSB0d28gbGVhc3Qgc2lnbmlmaWNhbnQgYml0c1xuICAgLSB0aGUgaW5kZXggaXMgYW4gdW5zaWduZWQgaW50ZWdlciBmb3JtZWQgb2YgYWxsIHRoZSByZW1haW5pbmcgYml0c1xuXG4gICBUaGUgZXhjZXB0aW9uIGlzIHRoZSBkaXN0aW5ndWlzaGVkIG1hc2sgd2l0aCB2YWx1ZSAtMSAoYWxsIGJpdHMgc2V0IHRvIDEpXG4gICB0aGF0IGRlbm90ZSBhIFwibG9ja2VkXCIgbm9kZS5cblxuICAgV2hlbiB0aGUgbWFzayBpcyAwLCB0aGUgaW5kZXggZGVub3RlcyB0aGUgcmFuayBvZiB0aGUgbm9kZTogdGhlIGRlcHRoIG9mXG4gICB0aGUgdHJlZSByb290ZWQgYXQgdGhpcyBub2RlLlxuICAgV2hlbiB0aGUgbWFzayBpcyBub24temVybywgdGhlIGluZGV4IG1lYW5pbmcgaXMgbGVmdCB0byB0aGUgdHJhdmVyc2FsXG4gICBhbGdvcml0aG0uXG4gICBSZXN0b3JpbmcgdGhlIG1hcmsgc2V0cyB0aGUgbWFzayB0byAwIGFuZCB0aGUgaW5kZXh0IHRvIHRoZSByYW5rLFxuICAgYnV0IGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgY2hpbGRyZW4gb2YgdGhlIG5vZGUgYXJlIHRoZW1zZWx2ZXMgcmVzdG9yZWQuXG4qKVxuXG5tb2R1bGUgUmVkdWNlciA9IHN0cnVjdFxuICB0eXBlICgrJ2EsICdiKSB4Zm9ybSA9XG4gICAgfCBYRW1wdHlcbiAgICB8IFhMZWFmIG9mIHsgYTogJ2EgdDsgbXV0YWJsZSBiOiAnYiBvcHRpb247IH1cbiAgICB8IFhKb2luIG9mIHsgYTogJ2EgdDsgbXV0YWJsZSBiOiAnYiBvcHRpb247XG4gICAgICAgICAgICAgICAgIGw6ICgnYSwgJ2IpIHhmb3JtOyByOiAoJ2EsICdiKSB4Zm9ybTsgfVxuXG4gIHR5cGUgKCdhLCAnYikgdW5tYXJrX3N0YXRlID0ge1xuICAgIGRyb3BwZWQgOiAnYiBvcHRpb24gYXJyYXk7XG4gICAgbXV0YWJsZSBkcm9wcGVkX2xlYWYgOiBpbnQ7XG4gICAgbXV0YWJsZSBkcm9wcGVkX2pvaW4gOiBpbnQ7XG4gICAgc2hhcmVkIDogJ2Egc2VxIGFycmF5O1xuICAgIHNoYXJlZF94IDogKCdhLCAnYikgeGZvcm0gbGlzdCBhcnJheTtcbiAgICBtdXRhYmxlIHNoYXJlZF9pbmRleDogaW50O1xuICB9XG5cbiAgbGV0IG5leHRfc2hhcmVkX2luZGV4IHN0ID1cbiAgICBsZXQgcmVzdWx0ID0gc3Quc2hhcmVkX2luZGV4IGluXG4gICAgc3Quc2hhcmVkX2luZGV4IDwtIHJlc3VsdCArIDE7XG4gICAgcmVzdWx0XG5cbiAgbGV0IHJlYyB1bmJsb2NrID0gZnVuY3Rpb25cbiAgICB8IFhFbXB0eSAtPiAoKVxuICAgIHwgWExlYWYge2EgPSBOaWwgfCBKb2luIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWEpvaW4ge2EgPSBOaWwgfCBMZWFmIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWExlYWYge2EgPSBMZWFmIHQnOyBffSAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX25vdF9zaGFyZWQgbWFyayAmJiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuXG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICB8IFhKb2luIHthID0gSm9pbiB0JzsgbDsgcjsgX30gLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19ub3Rfc2hhcmVkIG1hcmsgJiYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgdW5ibG9jayBsO1xuICAgICAgICB1bmJsb2NrIHJcbiAgICAgIClcblxuICBsZXQgcmVjIHVubWFya19vbGQgc3QgPSBmdW5jdGlvblxuICAgIHwgWEVtcHR5IC0+ICgpXG4gICAgfCBYTGVhZiB7YSA9IE5pbCB8IEpvaW4gXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBYSm9pbiB7YSA9IE5pbCB8IExlYWYgXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBYTGVhZiB7YSA9IExlYWYgdCcgYXMgYTsgYn0gYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgZHJvcHBlZF9sZWFmID0gc3QuZHJvcHBlZF9sZWFmIGluXG4gICAgICAgIGlmIGRyb3BwZWRfbGVhZiA+IC0xIHRoZW4gKFxuICAgICAgICAgIHN0LmRyb3BwZWQuKGRyb3BwZWRfbGVhZikgPC0gYjtcbiAgICAgICAgICBzdC5kcm9wcGVkX2xlYWYgPC0gZHJvcHBlZF9sZWFmICsgMTtcbiAgICAgICAgICBhc3NlcnQgKHN0LmRyb3BwZWRfbGVhZiA8PSBzdC5kcm9wcGVkX2pvaW4pO1xuICAgICAgICApO1xuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcmtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX3NoYXJlZCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBuZXh0X3NoYXJlZF9pbmRleCBzdCBpblxuICAgICAgICBzdC5zaGFyZWQuKGluZGV4KSA8LSBhO1xuICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIFt0XTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLndpdGhfaW5kZXhfbmV3IGluZGV4O1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfbmV3IG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IE1hcmtpbmcuZ2V0X2luZGV4IG1hcmsgaW5cbiAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSB0IDo6IHN0LnNoYXJlZF94LihpbmRleCk7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAoKnQnLm1hcmsgPC0gbWFyayBsYW5kIGxub3QgYm90aF9tYXNrKilcbiAgICAgIClcbiAgICB8IFhKb2luIHthID0gSm9pbiB0JyBhcyBhOyBsOyByOyBifSBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfc2hhcmVkIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG5leHRfc2hhcmVkX2luZGV4IHN0IGluXG4gICAgICAgIHN0LnNoYXJlZC4oaW5kZXgpIDwtIGE7XG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gW3RdO1xuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcud2l0aF9pbmRleF9uZXcgaW5kZXg7XG4gICAgICAgIHVuYmxvY2sgbDtcbiAgICAgICAgdW5ibG9jayByO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfb2xkIG1hcmsgdGhlbiAoXG4gICAgICAgIGlmIHN0LmRyb3BwZWRfam9pbiA+IC0xIHRoZW4gKFxuICAgICAgICAgIGxldCBkcm9wcGVkX2pvaW4gPSBzdC5kcm9wcGVkX2pvaW4gLSAxIGluXG4gICAgICAgICAgc3QuZHJvcHBlZC4oZHJvcHBlZF9qb2luKSA8LSBiO1xuICAgICAgICAgIHN0LmRyb3BwZWRfam9pbiA8LSBkcm9wcGVkX2pvaW47XG4gICAgICAgICAgYXNzZXJ0IChzdC5kcm9wcGVkX2xlYWYgPD0gc3QuZHJvcHBlZF9qb2luKTtcbiAgICAgICAgKTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICB1bm1hcmtfb2xkIHN0IGw7XG4gICAgICAgIHVubWFya19vbGQgc3QgcjtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBtYXJrIGxzciBtYXNrX2JpdHMgaW5cbiAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSB0IDo6IHN0LnNoYXJlZF94LihpbmRleCk7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgKVxuXG4gIGxldCBwcmVwYXJlX3NoYXJlZCBzdCA9XG4gICAgZm9yIGkgPSAwIHRvIHN0LnNoYXJlZF9pbmRleCAtIDEgZG9cbiAgICAgIGJlZ2luIG1hdGNoIHN0LnNoYXJlZC4oaSkgd2l0aFxuICAgICAgICB8IE5pbCAtPiAoKVxuICAgICAgICB8IExlYWYgdCAtPiB0Lm1hcmsgPC0gTWFya2luZy5zZXRfYm90aCB0Lm1hcmtcbiAgICAgICAgfCBKb2luIHQgLT4gdC5tYXJrIDwtIE1hcmtpbmcuc2V0X2JvdGggdC5tYXJrXG4gICAgICBlbmQ7XG4gICAgICBtYXRjaCBzdC5zaGFyZWRfeC4oaSkgd2l0aFxuICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgW19dIC0+ICgpXG4gICAgICB8IHhzIC0+IHN0LnNoYXJlZF94LihpKSA8LSBMaXN0LnJldiB4c1xuICAgIGRvbmVcblxuICBsZXQgcmVjIHVubWFya19uZXcgc3QgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+IFhFbXB0eVxuICAgIHwgTGVhZiB0JyBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfbm90X3NoYXJlZCBtYXJrICYmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBtYXJrIGxzciBtYXNrX2JpdHMgaW5cbiAgICAgICAgbWF0Y2ggc3Quc2hhcmVkX3guKGluZGV4KSB3aXRoXG4gICAgICAgIHwgW10gLT4gWExlYWYge2EgPSB0OyBiID0gTm9uZX1cbiAgICAgICAgfCB4IDo6IHhzIC0+IHN0LnNoYXJlZF94LihpbmRleCkgPC0geHM7IHhcbiAgICAgICkgZWxzZSAoXG4gICAgICAgIHQnLm1hcmsgPC0gMDtcbiAgICAgICAgWExlYWYge2EgPSB0OyBiID0gTm9uZX1cbiAgICAgIClcbiAgICB8IEpvaW4gdCcgYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrID0gLTEgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG5leHRfc2hhcmVkX2luZGV4IHN0IGluXG4gICAgICAgIHQnLm1hcmsgPC0gMDtcbiAgICAgICAgc3Quc2hhcmVkLihpbmRleCkgPC0gdDtcbiAgICAgICAgbGV0IGwgPSB1bm1hcmtfbmV3IHN0IHQnLmwgaW5cbiAgICAgICAgbGV0IHIgPSB1bm1hcmtfbmV3IHN0IHQnLnIgaW5cbiAgICAgICAgWEpvaW4ge2EgPSB0OyBiID0gTm9uZTsgbDsgcn1cbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbWFyayBsc3IgbWFza19iaXRzIGluXG4gICAgICAgIG1hdGNoIHN0LnNoYXJlZF94LihpbmRleCkgd2l0aFxuICAgICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IHggOjogeHMgLT5cbiAgICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIHhzO1xuICAgICAgICAgIGlmIHhzID09IFtdIHRoZW4gdCcubWFyayA8LSAwO1xuICAgICAgICAgIHhcbiAgICAgICkgZWxzZSAoXG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgdCcubWFyaztcbiAgICAgICAgbGV0IGwgPSB1bm1hcmtfbmV3IHN0IHQnLmwgaW5cbiAgICAgICAgbGV0IHIgPSB1bm1hcmtfbmV3IHN0IHQnLnIgaW5cbiAgICAgICAgWEpvaW4ge2EgPSB0OyBiID0gTm9uZTsgbDsgcn1cbiAgICAgIClcblxuICB0eXBlICdiIGRyb3BwZWQgPSB7XG4gICAgbGVhdmVzOiBpbnQ7XG4gICAgdGFibGU6ICdiIG9wdGlvbiBhcnJheTtcbiAgICBleHRyYV9sZWFmOiAnYiBsaXN0O1xuICAgIGV4dHJhX2pvaW46ICdiIGxpc3Q7XG4gIH1cblxuICBsZXQgbm9fZHJvcHBlZCA9XG4gICAgeyBsZWF2ZXMgPSAwOyB0YWJsZSA9IFt8fF07IGV4dHJhX2xlYWYgPSBbXTsgZXh0cmFfam9pbiA9IFtdIH1cblxuICBsZXQgZGlmZiBnZXRfZHJvcHBlZCB4b2xkIHRuZXcgPSBtYXRjaCB4b2xkLCB0bmV3IHdpdGhcbiAgICB8IFhFbXB0eSwgTmlsIC0+IG5vX2Ryb3BwZWQsIFhFbXB0eVxuICAgIHwgKFhMZWFmIHthOyBffSB8IFhKb2luIHthOyBffSksIF8gd2hlbiBhID09IHRuZXcgLT4gbm9fZHJvcHBlZCwgeG9sZFxuICAgIHwgXyAtPlxuICAgICAgbGV0IHRyYXZlcnNhbCA9XG4gICAgICAgIE1hcmtpbmcudW5zYWZlX3RyYXZlcnNlXG4gICAgICAgICAgfm9sZF9yb290OihtYXRjaCB4b2xkIHdpdGhcbiAgICAgICAgICAgICAgfCBYRW1wdHkgLT4gZW1wdHlcbiAgICAgICAgICAgICAgfCAoWExlYWYge2E7IF99IHwgWEpvaW4ge2E7IF99KSAtPiBhXG4gICAgICAgICAgICApXG4gICAgICAgICAgfm5ld19yb290OnRuZXdcbiAgICAgIGluXG4gICAgICBsZXQgc29sZCA9IE1hcmtpbmcub2xkX3N0YXRzIHRyYXZlcnNhbCBpblxuICAgICAgbGV0IHNuZXcgPSBNYXJraW5nLm5ld19zdGF0cyB0cmF2ZXJzYWwgaW5cbiAgICAgIGxldCBuYl9kcm9wcGVkID1cbiAgICAgICAgTWFya2luZy5tYXJrZWQgc29sZCAtIChNYXJraW5nLmJsb2NrZWQgc29sZCArIE1hcmtpbmcuYmxvY2tlZCBzbmV3KVxuICAgICAgaW5cbiAgICAgIGxldCBuYl9zaGFyZWQgPVxuICAgICAgICBNYXJraW5nLnNoYXJlZCBzb2xkICsgTWFya2luZy5zaGFyZWQgc25ld1xuICAgICAgaW5cbiAgICAgIGxldCBzdCA9IHtcbiAgICAgICAgZHJvcHBlZCA9IGlmIGdldF9kcm9wcGVkIHRoZW4gQXJyYXkubWFrZSBuYl9kcm9wcGVkIE5vbmUgZWxzZSBbfHxdO1xuICAgICAgICBkcm9wcGVkX2xlYWYgPSBpZiBnZXRfZHJvcHBlZCB0aGVuIDAgZWxzZSAtIDE7XG4gICAgICAgIGRyb3BwZWRfam9pbiA9IGlmIGdldF9kcm9wcGVkIHRoZW4gbmJfZHJvcHBlZCBlbHNlIC0gMTtcbiAgICAgICAgc2hhcmVkID0gQXJyYXkubWFrZSBuYl9zaGFyZWQgTmlsO1xuICAgICAgICBzaGFyZWRfeCA9IEFycmF5Lm1ha2UgbmJfc2hhcmVkIFtdO1xuICAgICAgICBzaGFyZWRfaW5kZXggPSAwO1xuICAgICAgfSBpblxuICAgICAgKCpQcmludGYuZXByaW50ZiBcInNvbGQuc2hhcmVkOiVkIHNvbGQubWFya2VkOiVkIHNvbGQuYmxvY2tlZDolZFxcbiUhXCJcbiAgICAgICAgc29sZC5zaGFyZWQgc29sZC5tYXJrZWQgc29sZC5ibG9ja2VkO1xuICAgICAgUHJpbnRmLmVwcmludGYgXCJzbmV3LnNoYXJlZDolZCBzbmV3Lm1hcmtlZDolZCBzbmV3LmJsb2NrZWQ6JWRcXG4lIVwiXG4gICAgICAgIHNuZXcuc2hhcmVkIHNuZXcubWFya2VkIHNuZXcuYmxvY2tlZDsqKVxuICAgICAgdW5tYXJrX29sZCBzdCB4b2xkO1xuICAgICAgYXNzZXJ0IChzdC5kcm9wcGVkX2xlYWYgPSBzdC5kcm9wcGVkX2pvaW4pO1xuICAgICAgcHJlcGFyZV9zaGFyZWQgc3Q7XG4gICAgICBsZXQgcmVzdWx0ID0gdW5tYXJrX25ldyBzdCB0bmV3IGluXG4gICAgICAoKlByaW50Zi5lcHJpbnRmIFwibmV3X2NvbXB1dGVkOiVkJSFcXG5cIiAhbmV3X2NvbXB1dGVkOyopXG4gICAgICBmb3IgaSA9IHN0LnNoYXJlZF9pbmRleCAtIDEgZG93bnRvIDAgZG9cbiAgICAgICAgTWFya2luZy5yZXN0b3JlIHN0LnNoYXJlZC4oaSlcbiAgICAgIGRvbmU7XG4gICAgICBpZiBnZXRfZHJvcHBlZCB0aGVuIChcbiAgICAgICAgbGV0IHhsZWFmID0gcmVmIFtdIGluXG4gICAgICAgIGxldCB4am9pbiA9IHJlZiBbXSBpblxuICAgICAgICBmb3IgaSA9IDAgdG8gc3Quc2hhcmVkX2luZGV4IC0gMSBkb1xuICAgICAgICAgIExpc3QuaXRlciAoZnVuY3Rpb25cbiAgICAgICAgICAgICAgfCBYTGVhZiB7IGIgPSBTb21lIGI7IF99IC0+IHhsZWFmIDo9IGIgOjogIXhsZWFmXG4gICAgICAgICAgICAgIHwgWEpvaW4geyBiID0gU29tZSBiOyBffSAtPiB4am9pbiA6PSBiIDo6ICF4am9pblxuICAgICAgICAgICAgICB8IF8gLT4gKClcbiAgICAgICAgICAgICkgc3Quc2hhcmVkX3guKGkpXG4gICAgICAgIGRvbmU7XG4gICAgICAgICh7IGxlYXZlcyA9IHN0LmRyb3BwZWRfbGVhZjtcbiAgICAgICAgICAgdGFibGUgPSBzdC5kcm9wcGVkO1xuICAgICAgICAgICBleHRyYV9sZWFmID0gIXhsZWFmO1xuICAgICAgICAgICBleHRyYV9qb2luID0gIXhqb2luIH0sIHJlc3VsdClcbiAgICAgICkgZWxzZVxuICAgICAgICBub19kcm9wcGVkLCByZXN1bHRcblxuICB0eXBlICgnYSwgJ2IpIG1hcF9yZWR1Y2UgPSB7XG4gICAgbWFwOiAnYSAtPiAnYjtcbiAgICByZWR1Y2U6ICdiIC0+ICdiIC0+ICdiO1xuICB9XG5cbiAgbGV0IGV2YWwgbWFwX3JlZHVjZSA9IGZ1bmN0aW9uXG4gICAgfCBYRW1wdHkgLT4gTm9uZVxuICAgIHwgb3RoZXIgLT5cbiAgICAgIGxldCByZWMgYXV4ID0gZnVuY3Rpb25cbiAgICAgICAgfCBYRW1wdHkgfCBYTGVhZiB7YSA9IE5pbCB8IEpvaW4gXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgWExlYWYge2IgPSBTb21lIGI7IF99IHwgWEpvaW4ge2IgPSBTb21lIGI7IF99IC0+IGJcbiAgICAgICAgfCBYTGVhZiAoe2EgPSBMZWFmIHQnO18gfSBhcyB0KSAtPlxuICAgICAgICAgIGxldCByZXN1bHQgPSBtYXBfcmVkdWNlLm1hcCB0Jy52IGluXG4gICAgICAgICAgdC5iIDwtIFNvbWUgcmVzdWx0O1xuICAgICAgICAgIHJlc3VsdFxuICAgICAgICB8IFhKb2luIHQgLT5cbiAgICAgICAgICBsZXQgbCA9IGF1eCB0LmwgYW5kIHIgPSBhdXggdC5yIGluXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IG1hcF9yZWR1Y2UucmVkdWNlIGwgciBpblxuICAgICAgICAgIHQuYiA8LSBTb21lIHJlc3VsdDtcbiAgICAgICAgICByZXN1bHRcbiAgICAgIGluXG4gICAgICBTb21lIChhdXggb3RoZXIpXG5cbiAgdHlwZSAoJ2EsICdiKSByZWR1Y2VyID0gKCdhLCAnYikgbWFwX3JlZHVjZSAqICgnYSwgJ2IpIHhmb3JtXG5cbiAgbGV0IG1ha2Ugfm1hcCB+cmVkdWNlID0gKHttYXA7IHJlZHVjZX0sIFhFbXB0eSlcblxuICBsZXQgcmVkdWNlIChtYXBfcmVkdWNlLCB0cmVlIDogXyByZWR1Y2VyKSA9XG4gICAgZXZhbCBtYXBfcmVkdWNlIHRyZWVcblxuICBsZXQgdXBkYXRlIChtYXBfcmVkdWNlLCBvbGRfdHJlZSA6IF8gcmVkdWNlcikgbmV3X3RyZWUgOiBfIHJlZHVjZXIgPVxuICAgIGxldCBfLCB0cmVlID0gZGlmZiBmYWxzZSBvbGRfdHJlZSBuZXdfdHJlZSBpblxuICAgIChtYXBfcmVkdWNlLCB0cmVlKVxuXG4gIGxldCB1cGRhdGVfYW5kX2dldF9kcm9wcGVkIChtYXBfcmVkdWNlLCBvbGRfdHJlZSA6IF8gcmVkdWNlcikgbmV3X3RyZWVcbiAgICA6IF8gZHJvcHBlZCAqIF8gcmVkdWNlciA9XG4gICAgbGV0IGRyb3BwZWQsIHRyZWUgPSBkaWZmIHRydWUgb2xkX3RyZWUgbmV3X3RyZWUgaW5cbiAgICAoZHJvcHBlZCwgKG1hcF9yZWR1Y2UsIHRyZWUpKVxuXG4gIGxldCBmb2xkX2Ryb3BwZWQga2luZCBmIGRyb3BwZWQgYWNjID1cbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIGxldCBzdGFydCwgYm91bmQgPSBtYXRjaCBraW5kIHdpdGhcbiAgICAgIHwgYEFsbCAgICAtPiAwLCBBcnJheS5sZW5ndGggZHJvcHBlZC50YWJsZVxuICAgICAgfCBgTWFwICAgIC0+IDAsIGRyb3BwZWQubGVhdmVzXG4gICAgICB8IGBSZWR1Y2UgLT4gZHJvcHBlZC5sZWF2ZXMsIEFycmF5Lmxlbmd0aCBkcm9wcGVkLnRhYmxlXG4gICAgaW5cbiAgICBmb3IgaSA9IHN0YXJ0IHRvIGJvdW5kIC0gMSBkb1xuICAgICAgbWF0Y2ggZHJvcHBlZC50YWJsZS4oaSkgd2l0aFxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgeCAtPiBhY2MgOj0gZiB4ICFhY2NcbiAgICBkb25lO1xuICAgIGJlZ2luIG1hdGNoIGtpbmQgd2l0aFxuICAgICAgfCBgQWxsIHwgYE1hcCAtPlxuICAgICAgICBMaXN0Lml0ZXIgKGZ1biB4IC0+IGFjYyA6PSBmIHggIWFjYykgZHJvcHBlZC5leHRyYV9sZWFmXG4gICAgICB8IGBSZWR1Y2UgLT4gKClcbiAgICBlbmQ7XG4gICAgYmVnaW4gbWF0Y2gga2luZCB3aXRoXG4gICAgICB8IGBBbGwgfCBgUmVkdWNlIC0+XG4gICAgICAgIExpc3QuaXRlciAoZnVuIHggLT4gYWNjIDo9IGYgeCAhYWNjKSBkcm9wcGVkLmV4dHJhX2pvaW5cbiAgICAgIHwgYE1hcCAtPiAoKVxuICAgIGVuZDtcbiAgICAhYWNjXG5lbmRcblxuKCogTHdkIGludGVyZmFjZSAqKVxuXG5sZXQgcmVjIHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlID0gZnVuY3Rpb25cbiAgfCBOaWwgIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgdCAtPiBtYXAgdC52XG4gIHwgSm9pbiB0IC0+XG4gICAgcmVkdWNlXG4gICAgICAocHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2UgdC5sKVxuICAgICAgKHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlIHQucilcblxubGV0IGZvbGQgfm1hcCB+cmVkdWNlIHNlcSA9XG4gIG1hdGNoIEx3ZC5pc19wdXJlIHNlcSB3aXRoXG4gIHwgU29tZSBOaWwgLT4gTHdkLnB1cmUgTm9uZVxuICB8IFNvbWUgb3RoZXIgLT4gTHdkLnB1cmUgKFNvbWUgKHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlIG90aGVyKSlcbiAgfCBOb25lIC0+XG4gICAgbGV0IHJlZHVjZXIgPSByZWYgKFJlZHVjZXIubWFrZSB+bWFwIH5yZWR1Y2UpIGluXG4gICAgTHdkLm1hcCBzZXEgfmY6YmVnaW4gZnVuIHNlcSAtPlxuICAgICAgbGV0IHJlZHVjZXInID0gUmVkdWNlci51cGRhdGUgIXJlZHVjZXIgc2VxIGluXG4gICAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgICAgUmVkdWNlci5yZWR1Y2UgcmVkdWNlcidcbiAgICBlbmRcblxubGV0IGZvbGRfbW9ub2lkIG1hcCAoemVybywgcmVkdWNlKSBzZXEgPVxuICBtYXRjaCBMd2QuaXNfcHVyZSBzZXEgd2l0aFxuICB8IFNvbWUgTmlsIC0+IEx3ZC5wdXJlIHplcm9cbiAgfCBTb21lIG90aGVyIC0+IEx3ZC5wdXJlIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSBvdGhlcilcbiAgfCBOb25lIC0+XG4gICAgbGV0IHJlZHVjZXIgPSByZWYgKFJlZHVjZXIubWFrZSB+bWFwIH5yZWR1Y2UpIGluXG4gICAgTHdkLm1hcCBzZXEgfmY6YmVnaW4gZnVuIHNlcSAtPlxuICAgICAgbGV0IHJlZHVjZXInID0gUmVkdWNlci51cGRhdGUgIXJlZHVjZXIgc2VxIGluXG4gICAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgICAgbWF0Y2ggUmVkdWNlci5yZWR1Y2UgcmVkdWNlcicgd2l0aFxuICAgICAgfCBOb25lIC0+IHplcm9cbiAgICAgIHwgU29tZSB4IC0+IHhcbiAgICBlbmRcblxubGV0IG1vbm9pZCA9IChlbXB0eSwgY29uY2F0KVxuXG5sZXQgdHJhbnNmb3JtX2xpc3QgbHMgZiA9XG4gIEx3ZF91dGlscy5tYXBfcmVkdWNlIGYgbW9ub2lkIGxzXG5cbmxldCBvZl9saXN0IGxzID0gdHJhbnNmb3JtX2xpc3QgbHMgZWxlbWVudFxuXG5sZXQgcmVjIG9mX3N1Yl9hcnJheSBmIGFyciBpIGogPVxuICBpZiBqIDwgaSB0aGVuIGVtcHR5XG4gIGVsc2UgaWYgaiA9IGkgdGhlbiBmIGFyci4oaSlcbiAgZWxzZVxuICAgIGxldCBrID0gaSArIChqIC0gaSkgLyAyIGluXG4gICAgY29uY2F0IChvZl9zdWJfYXJyYXkgZiBhcnIgaSBrKSAob2Zfc3ViX2FycmF5IGYgYXJyIChrICsgMSkgailcblxubGV0IHRyYW5zZm9ybV9hcnJheSBhcnIgZiA9IG9mX3N1Yl9hcnJheSBmIGFyciAwIChBcnJheS5sZW5ndGggYXJyIC0gMSlcblxubGV0IG9mX2FycmF5IGFyciA9IHRyYW5zZm9ybV9hcnJheSBhcnIgZWxlbWVudFxuXG5sZXQgdG9fbGlzdCB4ID1cbiAgbGV0IHJlYyBmb2xkIHggYWNjID0gbWF0Y2ggeCB3aXRoXG4gICAgfCBOaWwgLT4gYWNjXG4gICAgfCBMZWFmIHQgLT4gdC52IDo6IGFjY1xuICAgIHwgSm9pbiB0IC0+IGZvbGQgdC5sIChmb2xkIHQuciBhY2MpXG4gIGluXG4gIGZvbGQgeCBbXVxuXG5sZXQgdG9fYXJyYXkgeCA9XG4gIGxldCByZWMgY291bnQgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+IDBcbiAgICB8IExlYWYgXyAtPiAxXG4gICAgfCBKb2luIHQgLT4gY291bnQgdC5sICsgY291bnQgdC5yXG4gIGluXG4gIG1hdGNoIGNvdW50IHggd2l0aFxuICB8IDAgLT4gW3x8XVxuICB8IG4gLT5cbiAgICBsZXQgcmVjIGZpcnN0ID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBMZWFmIHQgLT4gdC52XG4gICAgICB8IEpvaW4gdCAtPiBmaXJzdCB0LmxcbiAgICBpblxuICAgIGxldCBmaXJzdCA9IGZpcnN0IHggaW5cbiAgICBsZXQgYXJyID0gQXJyYXkubWFrZSBuIGZpcnN0IGluXG4gICAgbGV0IHJlYyBmb2xkIGkgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gaVxuICAgICAgfCBMZWFmIHQgLT4gYXJyLihpKSA8LSB0LnY7IGkgKyAxXG4gICAgICB8IEpvaW4gdCAtPlxuICAgICAgICBsZXQgaSA9IGZvbGQgaSB0LmwgaW5cbiAgICAgICAgbGV0IGkgPSBmb2xkIGkgdC5yIGluXG4gICAgICAgIGlcbiAgICBpblxuICAgIGxldCBfIDogaW50ID0gZm9sZCAwIHggaW5cbiAgICBhcnJcblxubGV0IGx3ZF9lbXB0eSA6ICdhIHQgTHdkLnQgPSBMd2QucHVyZSBOaWxcbmxldCBsd2RfbW9ub2lkIDogJ2EuICdhIHQgTHdkLnQgTHdkX3V0aWxzLm1vbm9pZCA9XG4gIChsd2RfZW1wdHksIGZ1biB4IHkgLT4gTHdkLm1hcDIgfmY6Y29uY2F0IHggeSlcblxubGV0IG1hcCBmIHNlcSA9XG4gIGZvbGRfbW9ub2lkIChmdW4geCAtPiBlbGVtZW50IChmIHgpKSBtb25vaWQgc2VxXG5cbmxldCBmaWx0ZXIgZiBzZXEgPVxuICBmb2xkX21vbm9pZCAoZnVuIHggLT4gaWYgZiB4IHRoZW4gZWxlbWVudCB4IGVsc2UgZW1wdHkpIG1vbm9pZCBzZXFcblxubGV0IGZpbHRlcl9tYXAgZiBzZXEgPVxuICBsZXQgc2VsZWN0IHggPSBtYXRjaCBmIHggd2l0aFxuICAgIHwgU29tZSB5IC0+IGVsZW1lbnQgeVxuICAgIHwgTm9uZSAtPiBlbXB0eVxuICBpblxuICBmb2xkX21vbm9pZCBzZWxlY3QgbW9ub2lkIHNlcVxuXG5sZXQgYmluZCAoc2VxIDogJ2Egc2VxIEx3ZC50KSAoZiA6ICdhIC0+ICdiIHNlcSBMd2QudCkgIDogJ2Igc2VxIEx3ZC50ID1cbiAgTHdkLmpvaW4gKGZvbGRfbW9ub2lkIGYgbHdkX21vbm9pZCBzZXEpXG5cbmxldCBzZXFfYmluZCAoc2VxIDogJ2Egc2VxIEx3ZC50KSAoZiA6ICdhIC0+ICdiIHNlcSkgIDogJ2Igc2VxIEx3ZC50ID1cbiAgZm9sZF9tb25vaWQgZiBtb25vaWQgc2VxXG5cbmxldCBsaWZ0IChzZXEgOiAnYSBMd2QudCBzZXEgTHdkLnQpIDogJ2Egc2VxIEx3ZC50ID1cbiAgYmluZCBzZXEgKEx3ZC5tYXAgfmY6ZWxlbWVudClcblxubW9kdWxlIEJhbGFuY2VkVHJlZSA6IHNpZ1xuICB0eXBlICdhIHQgPVxuICAgIHwgTGVhZlxuICAgIHwgTm9kZSBvZiB7XG4gICAgICAgIHJhbms6IGludDtcbiAgICAgICAgbDogJ2EgdDtcbiAgICAgICAgeDogaW50ICogJ2Egc2VxO1xuICAgICAgICByOiAnYSB0O1xuICAgICAgICBtdXRhYmxlIHNlcTogJ2Egc2VxO1xuICAgICAgfVxuICB2YWwgbGVhZiA6ICdhIHRcbiAgKCp2YWwgbm9kZSA6ICdhIHQgLT4gaW50ICogJ2Egc2VxIC0+ICdhIHQgLT4gJ2EgdCopXG5cbiAgdmFsIGluc2VydCA6IGNtcDooJ2EgLT4gJ2EgLT4gaW50KSAtPiBpbnQgLT4gJ2Egc2VxIC0+ICdhIHQgLT4gJ2EgdFxuICAoKnZhbCB1bmlvbiA6IGNtcDooJ2EgLT4gJ2EgLT4gaW50KSAtPiAnYSB0IC0+ICdhIHQgLT4gJ2EgdCopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID1cbiAgICB8IExlYWZcbiAgICB8IE5vZGUgb2Yge1xuICAgICAgICByYW5rOiBpbnQ7XG4gICAgICAgIGw6ICdhIHQ7XG4gICAgICAgIHg6IGludCAqICdhIHNlcTtcbiAgICAgICAgcjogJ2EgdDtcbiAgICAgICAgbXV0YWJsZSBzZXE6ICdhIHNlcTtcbiAgICAgIH1cblxuICBsZXQgbGVhZiA9IExlYWZcblxuICBsZXQgcmFuayA9IGZ1bmN0aW9uXG4gICAgfCBMZWFmIC0+IDBcbiAgICB8IE5vZGUgdCAtPiB0LnJhbmtcblxuICBsZXQgY2hlY2sgbCByID0gYWJzIChsIC0gcikgPD0gMVxuXG4gIGxldCBub2RlIGwgeCByID1cbiAgICBOb2RlIHtsOyB4OyByOyBzZXEgPSBlbXB0eTsgcmFuayA9IG1heGkgKHJhbmsgbCkgKHJhbmsgcikgKyAxfVxuXG4gIGxldCByZWMgbm9kZV9sZWZ0IGwgeCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtbCBtciB0aGVuIG5vZGUgbCB4IHIgZWxzZSBtYXRjaCBsIHdpdGhcbiAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTm9kZSB0IC0+XG4gICAgICAgIGlmIGNoZWNrIChyYW5rIHQubCkgbWxcbiAgICAgICAgdGhlbiBub2RlIHQubCB0LnggKG5vZGVfbGVmdCB0LnIgeCByKVxuICAgICAgICBlbHNlIG1hdGNoIHQuciB3aXRoXG4gICAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgTm9kZSB0ciAtPlxuICAgICAgICAgICAgbGV0IHRyciA9IG5vZGVfbGVmdCB0ci5yIHggciBpblxuICAgICAgICAgICAgaWYgY2hlY2sgKDEgKyBtYXhpIChyYW5rIHQubCkgKHJhbmsgdHIubCkpIChyYW5rIHRycilcbiAgICAgICAgICAgIHRoZW4gbm9kZSAobm9kZSB0LmwgdC54IHRyLmwpIHRyLnggdHJyXG4gICAgICAgICAgICBlbHNlIG5vZGUgdC5sIHQueCAobm9kZSB0ci5sIHRyLnggdHJyKVxuXG4gIGxldCByZWMgbm9kZV9yaWdodCBsIHggciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbXIgbWwgdGhlbiBub2RlIGwgeCByIGVsc2UgbWF0Y2ggciB3aXRoXG4gICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IE5vZGUgdCAtPlxuICAgICAgICBpZiBjaGVjayAocmFuayB0LnIpIG1yXG4gICAgICAgIHRoZW4gbm9kZSAobm9kZV9yaWdodCBsIHggdC5sKSB0LnggdC5yXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5sIHdpdGhcbiAgICAgICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBOb2RlIHRsIC0+XG4gICAgICAgICAgICBsZXQgdGxsID0gbm9kZV9yaWdodCBsIHggdGwubCBpblxuICAgICAgICAgICAgaWYgY2hlY2sgKDEgKyBtYXhpIChyYW5rIHRsLnIpIChyYW5rIHQucikpIChyYW5rIHRsbClcbiAgICAgICAgICAgIHRoZW4gbm9kZSB0bGwgdGwueCAobm9kZSB0bC5yIHQueCB0LnIpXG4gICAgICAgICAgICBlbHNlIG5vZGUgKG5vZGUgdGxsIHRsLnggdGwucikgdC54IHQuclxuXG4gIGxldCBub2RlIGwgeCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtbCBtclxuICAgIHRoZW4gbm9kZSBsIHggclxuICAgIGVsc2UgaWYgbWwgPD0gbXJcbiAgICB0aGVuIG5vZGVfcmlnaHQgbCB4IHJcbiAgICBlbHNlIG5vZGVfbGVmdCBsIHggclxuXG4gIGxldCByZWMgam9pbiBsIHIgPSBtYXRjaCBsLCByIHdpdGhcbiAgICB8IExlYWYsIHQgfCB0LCBMZWFmIC0+IHRcbiAgICB8IE5vZGUgdGwsIE5vZGUgdHIgLT5cbiAgICAgIGlmIHRsLnJhbmsgPD0gdHIucmFuayB0aGVuXG4gICAgICAgIG5vZGUgKGpvaW4gbCB0ci5sKSB0ci54IHRyLnJcbiAgICAgIGVsc2VcbiAgICAgICAgbm9kZSB0bC5sIHRsLnggKGpvaW4gdGwuciByKVxuXG4gIGxldCBnZXRfZWxlbWVudCA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgfCBKb2luIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBMZWFmIHt2O199IC0+IHZcblxuICAoKmxldCByZWMgc3BsaXQgfmNtcCBrID0gZnVuY3Rpb25cbiAgICB8IExlYWYgLT4gTGVhZiwgMCwgTGVhZlxuICAgIHwgTm9kZSB0IC0+XG4gICAgICBsZXQgYyA9IGNtcCBrIChnZXRfZWxlbWVudCAoc25kICh0LngpKSkgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgbGV0IGwnLCB2JywgcicgPSBzcGxpdCB+Y21wIGsgdC5sIGluXG4gICAgICAgIGwnLCB2Jywgam9pbiByJyB0LnJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICBsZXQgbCcsIHYnLCByJyA9IHNwbGl0IH5jbXAgayB0LnIgaW5cbiAgICAgICAgam9pbiB0LmwgbCcsIHYnLCByJ1xuICAgICAgZWxzZVxuICAgICAgICAodC5sLCBmc3QgdC54LCB0LnIpXG5cbiAgbGV0IHJlYyB1bmlvbiB+Y21wIHQxIHQyID1cbiAgICBtYXRjaCB0MSwgdDIgd2l0aFxuICAgIHwgTGVhZiwgdCB8IHQsIExlYWYgLT4gdFxuICAgIHwgTm9kZSB0MSwgdDIgIC0+XG4gICAgICBsZXQgbTEsIGsxID0gdDEueCBpblxuICAgICAgbGV0IGwyLCBtMiwgcjIgPSBzcGxpdCB+Y21wIChnZXRfZWxlbWVudCBrMSkgdDIgaW5cbiAgICAgIGxldCBsJyA9IHVuaW9uIH5jbXAgdDEubCBsMiBpblxuICAgICAgbGV0IHInID0gdW5pb24gfmNtcCB0MS5yIHIyIGluXG4gICAgICBsZXQgbSA9IG0xICsgbTIgaW5cbiAgICAgIGlmIG0gPSAwIHRoZW5cbiAgICAgICAgam9pbiBsJyByJ1xuICAgICAgZWxzZSAoXG4gICAgICAgIGFzc2VydCAobSA+IDApO1xuICAgICAgICBub2RlIGwnIChtLCBrMSkgcic7XG4gICAgICApXG4gICAgKilcblxuICBsZXQgaW5zZXJ0IH5jbXAgbTEgcyB0ID1cbiAgICBhc3NlcnQgKG0xIDw+IDApO1xuICAgIGxldCByZWMgYXV4ID0gZnVuY3Rpb25cbiAgICAgIHwgTGVhZiAtPiBub2RlIExlYWYgKG0xLCBzKSBMZWFmXG4gICAgICB8IE5vZGUgdCAtPlxuICAgICAgICBsZXQgbTIsIHggPSB0LnggaW5cbiAgICAgICAgbGV0IGMgPSBjbXAgKGdldF9lbGVtZW50IHMpIChnZXRfZWxlbWVudCB4KSBpblxuICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgbGV0IG0gPSBtMSArIG0yIGluXG4gICAgICAgICAgaWYgbSA9IDAgdGhlblxuICAgICAgICAgICAgam9pbiB0LmwgdC5yXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbm9kZSB0LmwgKG0sIHgpIHQuclxuICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICBsZXQgbCcgPSBhdXggdC5sIGluXG4gICAgICAgICAgbm9kZSBsJyB0LnggdC5yXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBsZXQgcicgPSBhdXggdC5yIGluXG4gICAgICAgICAgbm9kZSB0LmwgdC54IHInXG4gICAgaW5cbiAgICBhdXggdFxuZW5kXG5cbmxldCByZWMgc2VxX29mX3RyZWUgPSBmdW5jdGlvblxuICB8IEJhbGFuY2VkVHJlZS5MZWFmIC0+IGVtcHR5XG4gIHwgQmFsYW5jZWRUcmVlLk5vZGUgdCAtPlxuICAgIG1hdGNoIHQuc2VxIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgbGV0IHNsID0gc2VxX29mX3RyZWUgdC5sIGluXG4gICAgICBsZXQgc3IgPSBzZXFfb2ZfdHJlZSB0LnIgaW5cbiAgICAgIGFzc2VydCAoZnN0IHQueCA+IDApO1xuICAgICAgbGV0IHNlcSA9IGNvbmNhdCBzbCAoY29uY2F0IChzbmQgdC54KSBzcikgaW5cbiAgICAgIHQuc2VxIDwtIHNlcTtcbiAgICAgIHNlcVxuICAgIHwgc2VxIC0+IHNlcVxuXG5sZXQgc29ydF91bmlxIGNtcCBzZXEgPVxuICBsZXQgcHJldmlvdXNfc2VxID0gcmVmIGVtcHR5IGluXG4gIGxldCBwcmV2aW91c190cmVlID0gcmVmIEJhbGFuY2VkVHJlZS5sZWFmIGluXG4gIGxldCBmIG5ld19zZXEgPVxuICAgIGxldCBvbGRfc2VxID0gIXByZXZpb3VzX3NlcSBpblxuICAgIGxldCBvbGRfdHJlZSA9ICFwcmV2aW91c190cmVlIGluXG4gICAgbGV0IF8gPSBNYXJraW5nLnVuc2FmZV90cmF2ZXJzZSB+b2xkX3Jvb3Q6b2xkX3NlcSB+bmV3X3Jvb3Q6bmV3X3NlcSBpblxuICAgIGxldCByZWMgdW5ibG9jayA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiAoKVxuICAgICAgfCBMZWFmIHQgLT4gdC5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIHQubWFya1xuICAgICAgfCBKb2luIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIHVuYmxvY2sgdC5sO1xuICAgICAgICB1bmJsb2NrIHQucjtcbiAgICAgICAgaWYgTWFya2luZy5pc19zaGFyZWQgbWFyayB0aGVuIChcbiAgICAgICAgICBNYXJraW5nLnJlc3RvcmUgc2VxO1xuICAgICAgICApIGVsc2UgaWYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgICAgdC5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgICkgZWxzZVxuICAgICAgICAgIGFzc2VydCAoTWFya2luZy5pc19ub25lIG1hcmspXG4gICAgaW5cbiAgICBsZXQgcmVjIHVubWFya19uZXcgdHJlZSA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiB0cmVlXG4gICAgICB8IExlYWYgdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgdC5tYXJrIDwtIDA7XG4gICAgICAgIGlmIE1hcmtpbmcuaXNfbmV3IG1hcmsgdGhlblxuICAgICAgICAgIEJhbGFuY2VkVHJlZS5pbnNlcnQgfmNtcCAoKzEpIHNlcSB0cmVlXG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgIGFzc2VydCAoTWFya2luZy5pc19ib3RoIG1hcmsgfHwgTWFya2luZy5pc19ub25lIG1hcmspO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgICAgfCBKb2luIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIGlmIE1hcmtpbmcuaXNfbmV3IG1hcmsgdGhlbiAoXG4gICAgICAgICAgdC5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgICAgdW5tYXJrX25ldyAodW5tYXJrX25ldyB0cmVlIHQubCkgdC5yXG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgdW5ibG9jayBzZXE7XG4gICAgICAgICAgdHJlZVxuICAgICAgICApXG4gICAgaW5cbiAgICBsZXQgcmVjIHVubWFya19vbGQgdHJlZSA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiB0cmVlXG4gICAgICB8IExlYWYgdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgdC5tYXJrIDwtIDA7XG4gICAgICAgIGlmIE1hcmtpbmcuaXNfb2xkIG1hcmsgdGhlblxuICAgICAgICAgIEJhbGFuY2VkVHJlZS5pbnNlcnQgfmNtcCAoLTEpIHNlcSB0cmVlXG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgIGFzc2VydCAoTWFya2luZy5pc19ib3RoIG1hcmsgfHwgTWFya2luZy5pc19ub25lIG1hcmspO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgICAgfCBKb2luIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIGlmIE1hcmtpbmcuaXNfb2xkIG1hcmsgdGhlbiAoXG4gICAgICAgICAgdC5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgICAgdW5tYXJrX29sZCAodW5tYXJrX29sZCB0cmVlIHQubCkgdC5yXG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgdW5ibG9jayBzZXE7XG4gICAgICAgICAgdHJlZVxuICAgICAgICApXG4gICAgaW5cbiAgICBsZXQgbmV3X3RyZWUgPSB1bm1hcmtfb2xkICh1bm1hcmtfbmV3IG9sZF90cmVlIG5ld19zZXEpIG9sZF9zZXEgaW5cbiAgICBwcmV2aW91c19zZXEgOj0gbmV3X3NlcTtcbiAgICBwcmV2aW91c190cmVlIDo9IG5ld190cmVlO1xuICAgIHNlcV9vZl90cmVlIG5ld190cmVlXG4gIGluXG4gIEx3ZC5tYXAgc2VxIH5mXG4iLCJvcGVuISBJbXBvcnRcbm9wZW4gQnJyZXIuQnJyXG5vcGVuISBCcnJfbHdkXG5tb2R1bGUgQSA9IEF0dHJzXG5cbnR5cGUgJ2EgdmFsaWRhdGlvbiA9IE9rIG9mICdhIHwgRXJyb3Igb2Ygc3RyaW5nIHwgRW1wdHlcbnR5cGUgbGFiZWwgPSBFbHdkLnQgRWx3ZC5jb2xcbnR5cGUgJ2EgZGVzYyA9IHsgbmFtZSA6IHN0cmluZzsgZGVmYXVsdCA6ICdhOyBsYWJlbCA6IGxhYmVsIH1cblxuKCogQSBmb3JtIGZpZWxkIGlzIGNvbXBvc2VkIG9mOlxuICAgLSBBbiBodG1sIGlucHV0IGVsZW1lbnQgd2l0aCBwb3RlbnRpYWwgdmFsaWRhdGlvbiB2aWEgYXR0cmlidXRlc1xuICAgLSBBIHZhbGlkYXRpb24gZnVuY3Rpb24gdGhhdCByZXBsYWNlIG9yIGNvbXBsZXRlIHRoZSBzdGFuZGFyZCB2YWxpZGF0aW9uXG4gICAtIEEgZnVuY3Rpb24gdGhhdCByZXRpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgKilcbnR5cGUgJ2EgdCA9IHtcbiAgZWx0IDogRWx3ZC50IEx3ZC50O1xuICB2YWx1ZSA6ICdhIG9wdGlvbiBMd2QudmFyO1xuICB2YWxpZGF0ZSA6ICdhIC0+ICdhIHZhbGlkYXRpb247XG59XG5cbmxldCBtYXBfdmFsaWRhdGlvbiB+KGYgOiAnYSAtPiAnYikgPSBmdW5jdGlvblxuICB8IE9rIGEgLT4gT2sgKGYgYSlcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcbiAgfCBFbXB0eSAtPiBFbXB0eVxuXG5sZXQgZ2V0X3ZhbHVlIHQgPVxuICBsZXQganYgPSBFbC50b19qdiB0IGluXG4gIEp2LmdldCBqdiBcInZhbHVlXCJcblxubGV0IG1ha2VfaGFuZGxlciB+KHZhbHVlIDogSnYudCAtPiAnYSkgfih2YWx1ZV9jaGFuZ2VfZXZlbnQgOiBfIEV2LnR5cGUnKVxuICAgIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgdmFyID0gTHdkLnZhciBkZWZhdWx0X3ZhbHVlIGluXG4gIGxldCBvbl9jaGFuZ2UgPVxuICAgIEVsd2QuaGFuZGxlciB2YWx1ZV9jaGFuZ2VfZXZlbnQgKGZ1biBldiAtPlxuICAgICAgICBsZXQgdCA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgaW5cbiAgICAgICAgbGV0IHYgPSBKdi5nZXQgdCBcInZhbHVlXCIgaW5cbiAgICAgICAgTHdkLnNldCB2YXIgKFNvbWUgKHZhbHVlIHYpKSlcbiAgaW5cbiAgKG9uX2NoYW5nZSwgdmFyKVxuXG4oKiBUT0RPOiBpdCdzIHByb2JhYmx5IGJldHRlciB0byBzcGxpdCB0aGUgdmFsaWRhdGlvbiBhcHJ0IGZyb20gdGhlIGZpZWxkXG4gICBjcmVhdGlvbi4gVmFsaWRhdGlvbiBtYWtlIG1vcmUgc2Vuc2UgaW4gdGhlIGNhc2Ugb2YgYSBmb3JtLiBUaGVyZSBpcyBhblxuICAgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB0ZXh0IGlucHV0cyBpbiBgRmllbGRfdGV4dGlucHV0YCB0aGF0IHNob3VsZFxuICAgYmUgdXNlZCBpbnN0ZWFkLiAqKVxubGV0IG1ha2VfaW5wdXQgfih2YWx1ZSA6IEp2LnQgLT4gJ2EpID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldlxuICAgID8ocmVxdWlyZWQgPSBmYWxzZSkgfnZhbHVlX2NoYW5nZV9ldmVudCA/cGF0dGVybiB+dHlwZScgZGVmYXVsdF92YWx1ZSA9XG4gIGxldCB0eXBlJyA9IEF0LnR5cGUnIChKc3RyLnYgdHlwZScpIGluXG4gIGxldCBhdCA9IGBQIHR5cGUnIDo6IGF0IGluXG4gIGxldCBhdCA9XG4gICAgYXQgfD4gQS5hZGRfYm9vbCBBdC5yZXF1aXJlZCByZXF1aXJlZCB8PiBBLmFkZF9vcHQgQXQuTmFtZS5wYXR0ZXJuIHBhdHRlcm5cbiAgaW5cbiAgbGV0IHZhbGlkYXRlID0gT3B0aW9uLnZhbHVlIHZhbGlkYXRlIH5kZWZhdWx0OihmdW4gdiAtPiBPayB2KSBpblxuICBsZXQgb25fY2hhbmdlLCB2YWx1ZSA9XG4gICAgbWFrZV9oYW5kbGVyIH52YWx1ZSB+dmFsdWVfY2hhbmdlX2V2ZW50IGRlZmF1bHRfdmFsdWVcbiAgaW5cbiAgbGV0IGV2ID0gYFAgb25fY2hhbmdlIDo6IE9wdGlvbi50b19saXN0IGV2IGluXG4gIGxldCBlbHQgPSBFbHdkLmlucHV0ID9kIH5hdCB+ZXYgKCkgaW5cbiAgeyBlbHQ7IHZhbHVlOyB2YWxpZGF0ZSB9XG5cbmxldCB0ZXh0X2lucHV0ID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldiA/cmVxdWlyZWQgP3BhdHRlcm4gP3BsYWNlaG9sZGVyXG4gICAgZGVmYXVsdF92YWx1ZSA9XG4gIGxldCBhdCA9XG4gICAgYXRcbiAgICB8PiBBLmFkZF9vcHQgQXQuTmFtZS5wbGFjZWhvbGRlciBwbGFjZWhvbGRlclxuICAgIHw+IEEuYWRkX29wdCBBdC5OYW1lLnZhbHVlIGRlZmF1bHRfdmFsdWVcbiAgaW5cbiAgbGV0IHZhbHVlID0gSnYudG9fc3RyaW5nIGluXG4gIG1ha2VfaW5wdXQgfnZhbHVlID92YWxpZGF0ZSA/ZCB+YXQgP2V2ID9yZXF1aXJlZCA/cGF0dGVyblxuICAgIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYua2V5dXAgfnR5cGUnOlwidGV4dFwiIGRlZmF1bHRfdmFsdWVcblxubGV0IHBhc3N3b3JkX2lucHV0ID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldiA/cmVxdWlyZWQgP3BhdHRlcm4gP3BsYWNlaG9sZGVyXG4gICAgX3ZhbHVlID1cbiAgbGV0IGF0ID0gYXQgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGxhY2Vob2xkZXIgcGxhY2Vob2xkZXIgaW5cbiAgbGV0IHZhbHVlID0gSnYudG9fc3RyaW5nIGluXG4gIG1ha2VfaW5wdXQgfnZhbHVlIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYua2V5dXAgP3ZhbGlkYXRlID9kIH5hdCA/ZXYgP3JlcXVpcmVkXG4gICAgP3BhdHRlcm4gfnR5cGUnOlwicGFzc3dvcmRcIiBOb25lXG5cbmxldCBzdWJtaXQgP2QgPyhhdCA9IFtdKSA/ZXYgdGV4dCA9XG4gIGxldCBhdCA9IEEuYWRkIEF0Lk5hbWUudmFsdWUgdGV4dCBhdCBpblxuICAoKiBUT0RPIHRoaXMgc2hvdWxkIGJlIG1vcmUgcHJlY2lzZS4gU3VibWl0IGlucHV0cyBhcmUgZGlmZmVyZW50LiAqKVxuICBtYWtlX2lucHV0IH52YWx1ZTppZ25vcmUgfnZhbHVlX2NoYW5nZV9ldmVudDpFdi5jaGFuZ2UgP2QgfmF0ID9ldlxuICAgIH50eXBlJzpcInN1Ym1pdFwiIE5vbmVcbiIsIm9wZW4gQnJyXG5vcGVuIEVsXG5cbnR5cGUgdCA9IEVsLnRcblxudHlwZSAnYSBjb2wgPSBbXG4gIHwgYFAgb2YgJ2FcbiAgKCoqIFB1cmUgZWxlbWVudCAqKVxuICB8IGBSIG9mICdhIEx3ZC50XG4gICgqKiBSZWFjdGl2ZSBlbGVtZW50ICopXG4gIHwgYFMgb2YgJ2EgTHdkX3NlcS50IEx3ZC50XG4gICgqKiBSZWFjdGl2ZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyAqKVxuXSBsaXN0XG4oKiogRGVzY3JpYmluZyBjb2xsZWN0aW9ucyBvZiBlbGVtZW50cyAqKVxuXG50eXBlIGhhbmRsZXIgPSBIYW5kbGVyIDoge1xuICAgIG9wdHM6IEV2Lmxpc3Rlbl9vcHRzIG9wdGlvbjtcbiAgICB0eXBlJzogJ2EgRXYudHlwZSc7XG4gICAgZnVuYzogJ2EgRXYudCAtPiB1bml0O1xuICB9IC0+IGhhbmRsZXJcblxubGV0IGhhbmRsZXIgP29wdHMgdHlwZScgZnVuYyA9XG4gIEhhbmRsZXIge29wdHM7IHR5cGUnOyBmdW5jfVxuXG5sZXQgaXNfcHVyZV9lbGVtZW50ID0gZnVuY3Rpb25cbiAgfCBgUCBfIC0+IHRydWVcbiAgfCBgUiB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuICB8IGBTIHggLT4gT3B0aW9uLmlzX3NvbWUgKEx3ZC5pc19wdXJlIHgpXG5cbmxldCBleHRyYWN0X3B1cmVfZWxlbWVudCB4ID0gT3B0aW9uLmdldCAoTHdkLmlzX3B1cmUgeClcblxubGV0IGV4dHJhY3RfcHVyZV9lbGVtZW50cyB4cyA9XG4gIExpc3QuZmxhdHRlbiAoXG4gICAgTGlzdC5tYXAgKGZ1bmN0aW9uXG4gICAgICAgIHwgYFAgeCAtPiBbeF1cbiAgICAgICAgfCBgUiB4IC0+IFtleHRyYWN0X3B1cmVfZWxlbWVudCB4XVxuICAgICAgICB8IGBTIHggLT4gTHdkX3NlcS50b19saXN0IChleHRyYWN0X3B1cmVfZWxlbWVudCB4KVxuICAgICAgKSB4c1xuICApXG5cbmxldCBwcmVwYXJlX2NvbCA6IF8gY29sIC0+IF8gPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdLCBbXVxuICB8IGNvbCAtPlxuICAgIGxldCBwdXJlLCBpbXB1cmUgPSBMaXN0LnBhcnRpdGlvbiBpc19wdXJlX2VsZW1lbnQgY29sIGluXG4gICAgZXh0cmFjdF9wdXJlX2VsZW1lbnRzIHB1cmUsIGltcHVyZVxuXG4oKiogUmVhY3RpdmUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgKilcblxubGV0IGNvbnN1bWVfY2hpbGRyZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdLCBOb25lXG4gIHwgW2BQIHhdIC0+IFt4XSwgTm9uZVxuICB8IFtgUyB4XSAtPiBbXSwgU29tZSB4XG4gIHwgW2BSIHhdIC0+IFtdLCBTb21lIChMd2QubWFwIH5mOkx3ZF9zZXEuZWxlbWVudCB4KVxuICB8IGNvbCAtPlxuICAgIGlmIExpc3QuZm9yX2FsbCBpc19wdXJlX2VsZW1lbnQgY29sXG4gICAgdGhlblxuICAgICAgTGlzdC5mbGF0dGVuIChcbiAgICAgICAgTGlzdC5tYXAgKGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGBQIHggLT4gW3hdXG4gICAgICAgICAgICB8IGBSIHggLT4gW2V4dHJhY3RfcHVyZV9lbGVtZW50IHhdXG4gICAgICAgICAgICB8IGBTIHggLT4gTHdkX3NlcS50b19saXN0IChleHRyYWN0X3B1cmVfZWxlbWVudCB4KVxuICAgICAgICAgIClcbiAgICAgICAgICBjb2xcbiAgICAgICksIE5vbmVcbiAgICBlbHNlIFtdLCBTb21lIChcbiAgICAgICAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgKGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGBQIHggLT4gTHdkLnB1cmUgKEx3ZF9zZXEuZWxlbWVudCB4KVxuICAgICAgICAgICAgfCBgUiB4IC0+IEx3ZC5tYXAgfmY6THdkX3NlcS5lbGVtZW50IHhcbiAgICAgICAgICAgIHwgYFMgeCAtPiB4XG4gICAgICAgICAgKSBMd2Rfc2VxLmx3ZF9tb25vaWRcbiAgICAgICAgICBjb2xcbiAgICAgIClcblxudHlwZSBjaGlsZF90cmVlID1cbiAgfCBMZWFmIG9mIEVsLnRcbiAgfCBJbm5lciBvZiB7IG11dGFibGUgYm91bmQ6IEp2LnQ7XG4gICAgICAgICAgICAgICBsZWZ0OiBjaGlsZF90cmVlOyByaWdodDogY2hpbGRfdHJlZTsgfVxuXG5sZXQgY2hpbGRfbm9kZSBub2RlID0gTGVhZiBub2RlXG5cbmxldCBjaGlsZF9qb2luIGxlZnQgcmlnaHQgPSBJbm5lciB7IGJvdW5kID0gSnYubnVsbDsgbGVmdDsgcmlnaHQgfVxuXG5sZXQganZfcGFyZW50Tm9kZSA9IEpzdHIudiBcInBhcmVudE5vZGVcIlxubGV0IGp2X25leHRTaWJsaW5nID0gSnN0ci52IFwibmV4dFNpYmxpbmdcIlxubGV0IGp2X2FwcGVuZCA9IEpzdHIudiBcImFwcGVuZFwiXG5sZXQganZfYmVmb3JlID0gSnN0ci52IFwiYmVmb3JlXCJcbmxldCBqdl9yZW1vdmUgPSBKc3RyLnYgXCJyZW1vdmVcIlxubGV0IGp2X2NvbnRhaW5zID0gSnN0ci52IFwiY29udGFpbnNcIlxuXG5sZXQganZfdG9SZW1vdmUgPVxuICBKc3RyLnYgXCJsd2QtdG8tcmVtb3ZlXCIgKCogSEFDSyBDb3VsZCBiZSB0dXJuZWQgaW50byBhIEphdmFzY3JpcHQgc3ltYm9sICopXG5cbmxldCBjb250YWluc19mb2N1cyBub2RlID1cbiAgbWF0Y2ggQnJyLkRvY3VtZW50LmFjdGl2ZV9lbCAoQnJyLkVsLmRvY3VtZW50IG5vZGUpIHdpdGhcbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSBlbCAtPlxuICAgIEp2LnRvX2Jvb2wgKEp2LmNhbGwnIChFbC50b19qdiBub2RlKSBqdl9jb250YWlucyBbfEVsLnRvX2p2IGVsfF0pXG5cbmxldCB1cGRhdGVfY2hpbGRyZW5cbiAgICAoc2VsZiA6IEVsLnQpXG4gICAgKGNoaWxkcmVuIDogRWwudCBMd2Rfc2VxLnQgTHdkLnQpIDogRWwudCBMd2QudCA9XG4gIGxldCByZWR1Y2VyID1cbiAgICByZWYgKEx3ZF9zZXEuUmVkdWNlci5tYWtlIH5tYXA6Y2hpbGRfbm9kZSB+cmVkdWNlOmNoaWxkX2pvaW4pXG4gIGluXG4gIEx3ZC5tYXAgY2hpbGRyZW4gfmY6YmVnaW4gZnVuIGNoaWxkcmVuIC0+XG4gICAgbGV0IGRyb3BwZWQsIHJlZHVjZXInID1cbiAgICAgIEx3ZF9zZXEuUmVkdWNlci51cGRhdGVfYW5kX2dldF9kcm9wcGVkICFyZWR1Y2VyIGNoaWxkcmVuIGluXG4gICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICBsZXQgc2NoZWR1bGVfZm9yX3JlbW92YWwgY2hpbGQgKCkgPSBtYXRjaCBjaGlsZCB3aXRoXG4gICAgICB8IExlYWYgbm9kZSAtPiBKdi5zZXQnIChFbC50b19qdiBub2RlKSBqdl90b1JlbW92ZSBKdi50cnVlJztcbiAgICAgIHwgSW5uZXIgXyAtPiAoKVxuICAgIGluXG4gICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwIHNjaGVkdWxlX2Zvcl9yZW1vdmFsIGRyb3BwZWQgKCk7XG4gICAgbGV0IHByZXNlcnZlX2ZvY3VzID0gY29udGFpbnNfZm9jdXMgc2VsZiBpblxuICAgIGJlZ2luIG1hdGNoIEx3ZF9zZXEuUmVkdWNlci5yZWR1Y2UgcmVkdWNlcicgd2l0aFxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgdHJlZSAtPlxuICAgICAgICBsZXQgcmVjIHVwZGF0ZSBhY2MgPSBmdW5jdGlvblxuICAgICAgICAgIHwgTGVhZiBub2RlIC0+XG4gICAgICAgICAgICBsZXQgbm9kZScgPSBFbC50b19qdiBub2RlIGluXG4gICAgICAgICAgICBKdi5kZWxldGUnIG5vZGUnIGp2X3RvUmVtb3ZlO1xuICAgICAgICAgICAgKCpCcnIuQ29uc29sZS5sb2cgW1wiVXBkYXRpbmcgXCI7IG5vZGVdOyopXG4gICAgICAgICAgICBpZiBKdi5nZXQnIG5vZGUnIGp2X3BhcmVudE5vZGUgIT0gRWwudG9fanYgc2VsZiB0aGVuIChcbiAgICAgICAgICAgICAgaWYgSnYuaXNfbnVsbCBhY2NcbiAgICAgICAgICAgICAgdGhlbiBpZ25vcmUgKEp2LmNhbGwnIChFbC50b19qdiBzZWxmKSBqdl9hcHBlbmQgW3xub2RlJ3xdKVxuICAgICAgICAgICAgICBlbHNlIGlnbm9yZSAoSnYuY2FsbCcgYWNjIGp2X2JlZm9yZSBbfG5vZGUnfF0pXG4gICAgICAgICAgICApIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAoKiBDaGVjayBpZiB0aGVyZSBpcyBub3QgYW55IHdvcmsgdG8gZG8gKilcbiAgICAgICAgICAgICAgSnYuZ2V0JyBub2RlJyBqdl9uZXh0U2libGluZyAhPSBhY2MgJiZcbiAgICAgICAgICAgICAgKCogQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBmb2N1cyBjYXNlIGFuZCB0cnkgdG8gXCJidWJibGUgc29ydFwiIHRvXG4gICAgICAgICAgICAgICAgIHByZXNlcnZlIGZvY3VzICopXG4gICAgICAgICAgICAgIG5vdCAoXG4gICAgICAgICAgICAgICAgcHJlc2VydmVfZm9jdXMgJiYgY29udGFpbnNfZm9jdXMgbm9kZSAmJlxuICAgICAgICAgICAgICAgIGxldCByZWMgc2hpZnRfc2libGluZ3MgKCkgPVxuICAgICAgICAgICAgICAgICAgbGV0IHNpYmxpbmcgPSBKdi5nZXQnIG5vZGUnIGp2X25leHRTaWJsaW5nIGluXG4gICAgICAgICAgICAgICAgICBpZiBzaWJsaW5nID09IGFjYyB0aGVuIHRydWVcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgSnYuaXNfbnVsbCBzaWJsaW5nIHRoZW4gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmUgKEp2LmNhbGwnIG5vZGUnIGp2X2JlZm9yZSBbfHNpYmxpbmd8XSk7XG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0X3NpYmxpbmdzICgpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICBzaGlmdF9zaWJsaW5ncyAoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHRoZW4gKFxuICAgICAgICAgICAgICBpZiBKdi5pc19udWxsIGFjY1xuICAgICAgICAgICAgICB0aGVuIGlnbm9yZSAoSnYuY2FsbCcgKEVsLnRvX2p2IHNlbGYpIGp2X2FwcGVuZCBbfG5vZGUnfF0pXG4gICAgICAgICAgICAgIGVsc2UgaWdub3JlIChKdi5jYWxsJyBhY2MganZfYmVmb3JlIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBub2RlJ1xuICAgICAgICAgIHwgSW5uZXIgdCAtPlxuICAgICAgICAgICAgaWYgSnYuaXNfbnVsbCB0LmJvdW5kIHRoZW4gKFxuICAgICAgICAgICAgICBsZXQgYWNjID0gdXBkYXRlIGFjYyB0LnJpZ2h0IGluXG4gICAgICAgICAgICAgIGxldCBhY2MgPSB1cGRhdGUgYWNjIHQubGVmdCBpblxuICAgICAgICAgICAgICB0LmJvdW5kIDwtIGFjYztcbiAgICAgICAgICAgICAgYWNjXG4gICAgICAgICAgICApIGVsc2VcbiAgICAgICAgICAgICAgdC5ib3VuZFxuICAgICAgICBpblxuICAgICAgICBpZ25vcmUgKHVwZGF0ZSBKdi5udWxsIHRyZWUpXG4gICAgZW5kO1xuICAgIGxldCByZW1vdmVfY2hpbGQgY2hpbGQgKCkgPSBtYXRjaCBjaGlsZCB3aXRoXG4gICAgICB8IExlYWYgbm9kZSAtPlxuICAgICAgICBsZXQgbm9kZSA9IEVsLnRvX2p2IG5vZGUgaW5cbiAgICAgICAgaWYgSnYuaXNfc29tZSAoSnYuZ2V0JyBub2RlIGp2X3RvUmVtb3ZlKSB0aGVuIChcbiAgICAgICAgICAoKkJyci5Db25zb2xlLmxvZyBbXCJSZW1vdmluZyBcIjsgbm9kZV07KilcbiAgICAgICAgICBKdi5kZWxldGUnIG5vZGUganZfdG9SZW1vdmU7XG4gICAgICAgICAgaWdub3JlIChKdi5jYWxsJyBub2RlIGp2X3JlbW92ZSBbfHxdKVxuICAgICAgICApXG4gICAgICB8IElubmVyIF8gLT4gKClcbiAgICBpblxuICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcCByZW1vdmVfY2hpbGQgZHJvcHBlZCAoKTtcbiAgICBzZWxmXG4gIGVuZFxuXG5sZXQgcHVyZV91bml0ID0gTHdkLnB1cmUgKClcblxubGV0IGR1bW15X2t2X2F0ID0gKEpzdHIuZW1wdHksIEpzdHIuZW1wdHkpXG5cbmxldCBhdHRhY2hfYXR0cmlicyBlbCBhdHRyaWJzID1cbiAgbGV0IHNldF9rdiAoaywgdikgPVxuICAgIGlmIEpzdHIuZXF1YWwgayBBdC5OYW1lLmNsYXNzJ1xuICAgIHRoZW4gRWwuc2V0X2NsYXNzIHYgdHJ1ZSBlbFxuICAgIGVsc2UgRWwuc2V0X2F0IGsgKFNvbWUgdikgZWxcbiAgaW5cbiAgbGV0IHVuc2V0X2t2IChrLCB2KSA9XG4gICAgaWYgSnN0ci5lcXVhbCBrIEF0Lk5hbWUuY2xhc3MnXG4gICAgdGhlbiBFbC5zZXRfY2xhc3MgdiBmYWxzZSBlbFxuICAgIGVsc2UgRWwuc2V0X2F0IGsgTm9uZSBlbFxuICBpblxuICBsZXQgc2V0X2x3ZF9hdCAoKSA9XG4gICAgbGV0IHByZXYgPSByZWYgZHVtbXlfa3ZfYXQgaW5cbiAgICBmdW4gYXQgLT5cbiAgICAgIGlmICFwcmV2ICE9IGR1bW15X2t2X2F0IHRoZW5cbiAgICAgICAgdW5zZXRfa3YgIXByZXY7XG4gICAgICBsZXQgcGFpciA9IEF0LnRvX3BhaXIgYXQgaW5cbiAgICAgIHNldF9rdiBwYWlyO1xuICAgICAgcHJldiA6PSBwYWlyXG4gIGluXG4gIEx3ZF91dGlscy5tYXBfcmVkdWNlIChmdW5jdGlvblxuICAgICAgfCBgUCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBgUiBhdCAtPiBMd2QubWFwIH5mOihzZXRfbHdkX2F0ICgpKSBhdFxuICAgICAgfCBgUyBhdHMgLT5cbiAgICAgICAgbGV0IHNldF9hdCcgYXQgPVxuICAgICAgICAgIGxldCBrdiA9IEF0LnRvX3BhaXIgYXQgaW5cbiAgICAgICAgICBzZXRfa3Yga3Y7XG4gICAgICAgICAga3ZcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHJlZHVjZXIgPVxuICAgICAgICAgIHJlZiAoTHdkX3NlcS5SZWR1Y2VyLm1ha2VcbiAgICAgICAgICAgICAgICAgfm1hcDpzZXRfYXQnXG4gICAgICAgICAgICAgICAgIH5yZWR1Y2U6KGZ1biBfIF8gLT4gZHVtbXlfa3ZfYXQpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgdXBkYXRlIGF0cyA9XG4gICAgICAgICAgbGV0IGRyb3BwZWQsIHJlZHVjZXInID1cbiAgICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci51cGRhdGVfYW5kX2dldF9kcm9wcGVkICFyZWR1Y2VyIGF0c1xuICAgICAgICAgIGluXG4gICAgICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXBcbiAgICAgICAgICAgIChmdW4ga3YgKCkgLT4gdW5zZXRfa3Yga3YpXG4gICAgICAgICAgICBkcm9wcGVkICgpO1xuICAgICAgICAgIGlnbm9yZSAoTHdkX3NlcS5SZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJzogXyBvcHRpb24pXG4gICAgICAgIGluXG4gICAgICAgIEx3ZC5tYXAgfmY6dXBkYXRlIGF0c1xuICAgICkgKHB1cmVfdW5pdCwgZnVuIF8gXyAtPiBwdXJlX3VuaXQpXG4gICAgYXR0cmlic1xuXG5sZXQgbGlzdGVuIGVsIChIYW5kbGVyIHtvcHRzOyB0eXBlJzsgZnVuY30pID1cbiAgRXYubGlzdGVuID9vcHRzIHR5cGUnIGZ1bmMgKEVsLmFzX3RhcmdldCBlbClcblxubGV0IGF0dGFjaF9ldmVudHMgZWwgZXZlbnRzID1cbiAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgKGZ1bmN0aW9uXG4gICAgICB8IGBQIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IGBSIGF0IC0+XG4gICAgICAgIGxldCBjYWNoZWQgPSByZWYgTm9uZSBpblxuICAgICAgICBMd2QubWFwIH5mOihmdW4gaCAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggIWNhY2hlZCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgICAgICB8IFNvbWUgbCAtPiBFdi51bmxpc3RlbiBsXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBjYWNoZWQgOj0gU29tZSAobGlzdGVuIGVsIGgpXG4gICAgICAgICAgKSBhdFxuICAgICAgfCBgUyBhdHMgLT5cbiAgICAgICAgbGV0IHJlZHVjZXIgPVxuICAgICAgICAgIHJlZiAoTHdkX3NlcS5SZWR1Y2VyLm1ha2VcbiAgICAgICAgICAgICAgICAgfm1hcDoobGlzdGVuIGVsKVxuICAgICAgICAgICAgICAgICB+cmVkdWNlOihmdW4geCBfeSAtPiB4KSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVwZGF0ZSBhdHMgPVxuICAgICAgICAgIGxldCBkcm9wcGVkLCByZWR1Y2VyJyA9XG4gICAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIudXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAhcmVkdWNlciBhdHNcbiAgICAgICAgICBpblxuICAgICAgICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwXG4gICAgICAgICAgICAoZnVuIGwgKCkgLT4gRXYudW5saXN0ZW4gbClcbiAgICAgICAgICAgIGRyb3BwZWQgKCk7XG4gICAgICAgICAgaWdub3JlIChMd2Rfc2VxLlJlZHVjZXIucmVkdWNlIHJlZHVjZXInOiBfIG9wdGlvbilcbiAgICAgICAgaW5cbiAgICAgICAgTHdkLm1hcCB+Zjp1cGRhdGUgYXRzXG4gICAgKSAocHVyZV91bml0LCBmdW4gXyBfIC0+IHB1cmVfdW5pdClcbiAgICBldmVudHNcblxubGV0IHYgP2QgPyhhdD1bXSkgPyhldj1bXSkgPyhvbl9jcmVhdGUgPSBmdW4gXyAtPiAoKSkgdGFnIGNoaWxkcmVuID1cbiAgbGV0IGF0LCBpbXB1cmVfYXQgPSBwcmVwYXJlX2NvbCBhdCBpblxuICBsZXQgZXYsIGltcHVyZV9ldiA9IHByZXBhcmVfY29sIGV2IGluXG4gIGxldCBjaGlsZHJlbiwgaW1wdXJlX2NoaWxkcmVuID0gY29uc3VtZV9jaGlsZHJlbiBjaGlsZHJlbiBpblxuICBsZXQgZWwgPSBFbC52ID9kIH5hdCB0YWcgY2hpbGRyZW4gaW5cbiAgbGV0ICgpID0gb25fY3JlYXRlIGVsIGluXG4gIGxldCByZXN1bHQgPVxuICAgIG1hdGNoIGltcHVyZV9hdCwgaW1wdXJlX2NoaWxkcmVuIHdpdGhcbiAgICB8IFtdLCBOb25lIC0+IEx3ZC5wdXJlIGVsXG4gICAgfCBbXSwgU29tZSBjaGlsZHJlbiAtPlxuICAgICAgdXBkYXRlX2NoaWxkcmVuIGVsIGNoaWxkcmVuXG4gICAgfCBhdCwgTm9uZSAtPlxuICAgICAgTHdkLm1hcCB+ZjooZnVuICgpIC0+IGVsKSAoYXR0YWNoX2F0dHJpYnMgZWwgYXQpXG4gICAgfCBhdCwgU29tZSBjaGlsZHJlbiAtPlxuICAgICAgTHdkLm1hcDIgfmY6KGZ1biAoKSBlbCAtPiBlbClcbiAgICAgICAgKGF0dGFjaF9hdHRyaWJzIGVsIGF0KVxuICAgICAgICAodXBkYXRlX2NoaWxkcmVuIGVsIGNoaWxkcmVuKVxuICBpblxuICBMaXN0Lml0ZXIgKGZ1biBoIC0+IGlnbm9yZSAobGlzdGVuIGVsIGgpKSBldjtcbiAgbGV0IHJlc3VsdCA9XG4gICAgbWF0Y2ggaW1wdXJlX2V2IHdpdGhcbiAgICB8IFtdIC0+IHJlc3VsdFxuICAgIHwgZXZzIC0+XG4gICAgICBMd2QubWFwMiB+ZjooZnVuICgpIGVsIC0+IGVsKVxuICAgICAgICAoYXR0YWNoX2V2ZW50cyBlbCBldnMpXG4gICAgICAgIHJlc3VsdFxuICBpblxuICByZXN1bHRcblxuKCoqIHsxOmVscyBFbGVtZW50IGNvbnN0cnVjdG9yc30gKilcblxudHlwZSBjb25zID0gID9kOmRvY3VtZW50IC0+ID9hdDpBdC50IGNvbCAtPiA/ZXY6aGFuZGxlciBjb2wgLT4gP29uX2NyZWF0ZToodCAtPiB1bml0KSAtPiB0IGNvbCAtPiB0IEx3ZC50XG4oKiogVGhlIHR5cGUgZm9yIGVsZW1lbnQgY29uc3RydWN0b3JzLiBUaGlzIGlzIHNpbXBseSB7IXZ9IHdpdGggYVxuICAgIHByZS1hcHBsaWVkIGVsZW1lbnQgbmFtZS4gKilcblxudHlwZSB2b2lkX2NvbnMgPSA/ZDpkb2N1bWVudCAtPiA/YXQ6QXQudCBjb2wgLT4gP2V2OmhhbmRsZXIgY29sIC0+ID9vbl9jcmVhdGU6KHQgLT4gdW5pdCkgLT4gdW5pdCAtPiB0IEx3ZC50XG4oKiogVGhlIHR5cGUgZm9yIHZvaWQgZWxlbWVudCBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgc2ltcGx5IHshdn1cbiAgICB3aXRoIGEgcHJlLWFwcGxpZWQgZWxlbWVudCBuYW1lIGFuZCB3aXRob3V0IGNoaWxkcmVuLiAqKVxuXG5sZXQgY29ucyBuYW1lID9kID9hdCA/ZXYgP29uX2NyZWF0ZSBjcyA9IHYgP2QgP2F0ID9ldiA/b25fY3JlYXRlIG5hbWUgY3NcbmxldCB2b2lkX2NvbnMgbmFtZSA/ZCA/YXQgP2V2ID9vbl9jcmVhdGUgKCkgPSB2ID9kID9hdCA/ZXYgP29uX2NyZWF0ZSBuYW1lIFtdXG5cbmxldCBhID0gY29ucyBOYW1lLmFcbmxldCBhYmJyID0gY29ucyBOYW1lLmFiYnJcbmxldCBhZGRyZXNzID0gY29ucyBOYW1lLmFkZHJlc3NcbmxldCBhcmVhID0gdm9pZF9jb25zIE5hbWUuYXJlYVxubGV0IGFydGljbGUgPSBjb25zIE5hbWUuYXJ0aWNsZVxubGV0IGFzaWRlID0gY29ucyBOYW1lLmFzaWRlXG5sZXQgYXVkaW8gPSBjb25zIE5hbWUuYXVkaW9cbmxldCBiID0gY29ucyBOYW1lLmJcbmxldCBiYXNlID0gdm9pZF9jb25zIE5hbWUuYmFzZVxubGV0IGJkaSA9IGNvbnMgTmFtZS5iZGlcbmxldCBiZG8gPSBjb25zIE5hbWUuYmRvXG5sZXQgYmxvY2txdW90ZSA9IGNvbnMgTmFtZS5ibG9ja3F1b3RlXG5sZXQgYm9keSA9IGNvbnMgTmFtZS5ib2R5XG5sZXQgYnIgPSB2b2lkX2NvbnMgTmFtZS5iclxubGV0IGJ1dHRvbiA9IGNvbnMgTmFtZS5idXR0b25cbmxldCBjYW52YXMgPSBjb25zIE5hbWUuY2FudmFzXG5sZXQgY2FwdGlvbiA9IGNvbnMgTmFtZS5jYXB0aW9uXG5sZXQgY2l0ZSA9IGNvbnMgTmFtZS5jaXRlXG5sZXQgY29kZSA9IGNvbnMgTmFtZS5jb2RlXG5sZXQgY29sID0gdm9pZF9jb25zIE5hbWUuY29sXG5sZXQgY29sZ3JvdXAgPSBjb25zIE5hbWUuY29sZ3JvdXBcbmxldCBjb21tYW5kID0gY29ucyBOYW1lLmNvbW1hbmRcbmxldCBkYXRhbGlzdCA9IGNvbnMgTmFtZS5kYXRhbGlzdFxubGV0IGRkID0gY29ucyBOYW1lLmRkXG5sZXQgZGVsID0gY29ucyBOYW1lLmRlbFxubGV0IGRldGFpbHMgPSBjb25zIE5hbWUuZGV0YWlsc1xubGV0IGRmbiA9IGNvbnMgTmFtZS5kZm5cbmxldCBkaXYgPSBjb25zIE5hbWUuZGl2XG5sZXQgZGwgPSBjb25zIE5hbWUuZGxcbmxldCBkdCA9IGNvbnMgTmFtZS5kdFxubGV0IGVtID0gY29ucyBOYW1lLmVtXG5sZXQgZW1iZWQgPSB2b2lkX2NvbnMgTmFtZS5lbWJlZFxubGV0IGZpZWxkc2V0ID0gY29ucyBOYW1lLmZpZWxkc2V0XG5sZXQgZmlnY2FwdGlvbiA9IGNvbnMgTmFtZS5maWdjYXB0aW9uXG5sZXQgZmlndXJlID0gY29ucyBOYW1lLmZpZ3VyZVxubGV0IGZvb3RlciA9IGNvbnMgTmFtZS5mb290ZXJcbmxldCBmb3JtID0gY29ucyBOYW1lLmZvcm1cbmxldCBoMSA9IGNvbnMgTmFtZS5oMVxubGV0IGgyID0gY29ucyBOYW1lLmgyXG5sZXQgaDMgPSBjb25zIE5hbWUuaDNcbmxldCBoNCA9IGNvbnMgTmFtZS5oNFxubGV0IGg1ID0gY29ucyBOYW1lLmg1XG5sZXQgaDYgPSBjb25zIE5hbWUuaDZcbmxldCBoZWFkID0gY29ucyBOYW1lLmhlYWRcbmxldCBoZWFkZXIgPSBjb25zIE5hbWUuaGVhZGVyXG5sZXQgaGdyb3VwID0gY29ucyBOYW1lLmhncm91cFxubGV0IGhyID0gdm9pZF9jb25zIE5hbWUuaHJcbmxldCBodG1sID0gY29ucyBOYW1lLmh0bWxcbmxldCBpID0gY29ucyBOYW1lLmlcbmxldCBpZnJhbWUgPSBjb25zIE5hbWUuaWZyYW1lXG5sZXQgaW1nID0gdm9pZF9jb25zIE5hbWUuaW1nXG5sZXQgaW5wdXQgPSB2b2lkX2NvbnMgTmFtZS5pbnB1dFxubGV0IGlucyA9IGNvbnMgTmFtZS5pbnNcbmxldCBrYmQgPSBjb25zIE5hbWUua2JkXG5sZXQga2V5Z2VuID0gY29ucyBOYW1lLmtleWdlblxubGV0IGxhYmVsID0gY29ucyBOYW1lLmxhYmVsXG5sZXQgbGVnZW5kID0gY29ucyBOYW1lLmxlZ2VuZFxubGV0IGxpID0gY29ucyBOYW1lLmxpXG5sZXQgbGluayA9IHZvaWRfY29ucyBOYW1lLmxpbmtcbmxldCBtYXAgPSBjb25zIE5hbWUubWFwXG5sZXQgbWFyayA9IGNvbnMgTmFtZS5tYXJrXG5sZXQgbWVudSA9IGNvbnMgTmFtZS5tZW51XG5sZXQgbWV0YSA9IHZvaWRfY29ucyBOYW1lLm1ldGFcbmxldCBtZXRlciA9IGNvbnMgTmFtZS5tZXRlclxubGV0IG5hdiA9IGNvbnMgTmFtZS5uYXZcbmxldCBub3NjcmlwdCA9IGNvbnMgTmFtZS5ub3NjcmlwdFxubGV0IG9iamVjdCcgPSBjb25zIE5hbWUub2JqZWN0J1xubGV0IG9sID0gY29ucyBOYW1lLm9sXG5sZXQgb3B0Z3JvdXAgPSBjb25zIE5hbWUub3B0Z3JvdXBcbmxldCBvcHRpb24gPSBjb25zIE5hbWUub3B0aW9uXG5sZXQgb3V0cHV0ID0gY29ucyBOYW1lLm91dHB1dFxubGV0IHAgPSBjb25zIE5hbWUucFxubGV0IHBhcmFtID0gdm9pZF9jb25zIE5hbWUucGFyYW1cbmxldCBwcmUgPSBjb25zIE5hbWUucHJlXG5sZXQgcHJvZ3Jlc3MgPSBjb25zIE5hbWUucHJvZ3Jlc3NcbmxldCBxID0gY29ucyBOYW1lLnFcbmxldCBycCA9IGNvbnMgTmFtZS5ycFxubGV0IHJ0ID0gY29ucyBOYW1lLnJ0XG5sZXQgcnVieSA9IGNvbnMgTmFtZS5ydWJ5XG5sZXQgcyA9IGNvbnMgTmFtZS5zXG5sZXQgc2FtcCA9IGNvbnMgTmFtZS5zYW1wXG5sZXQgc2NyaXB0ID0gY29ucyBOYW1lLnNjcmlwdFxubGV0IHNlY3Rpb24gPSBjb25zIE5hbWUuc2VjdGlvblxubGV0IHNlbGVjdCA9IGNvbnMgTmFtZS5zZWxlY3RcbmxldCBzbWFsbCA9IGNvbnMgTmFtZS5zbWFsbFxubGV0IHNvdXJjZSA9IHZvaWRfY29ucyBOYW1lLnNvdXJjZVxubGV0IHNwYW4gPSBjb25zIE5hbWUuc3BhblxubGV0IHN0cm9uZyA9IGNvbnMgTmFtZS5zdHJvbmdcbmxldCBzdHlsZSA9IGNvbnMgTmFtZS5zdHlsZVxubGV0IHN1YiA9IGNvbnMgTmFtZS5zdWJcbmxldCBzdW1tYXJ5ID0gY29ucyBOYW1lLnN1bW1hcnlcbmxldCBzdXAgPSBjb25zIE5hbWUuc3VwXG5sZXQgdGFibGUgPSBjb25zIE5hbWUudGFibGVcbmxldCB0Ym9keSA9IGNvbnMgTmFtZS50Ym9keVxubGV0IHRkID0gY29ucyBOYW1lLnRkXG5sZXQgdGV4dGFyZWEgPSBjb25zIE5hbWUudGV4dGFyZWFcbmxldCB0Zm9vdCA9IGNvbnMgTmFtZS50Zm9vdFxubGV0IHRoID0gY29ucyBOYW1lLnRoXG5sZXQgdGhlYWQgPSBjb25zIE5hbWUudGhlYWRcbmxldCB0aW1lID0gY29ucyBOYW1lLnRpbWVcbmxldCB0aXRsZSA9IGNvbnMgTmFtZS50aXRsZVxubGV0IHRyID0gY29ucyBOYW1lLnRyXG5sZXQgdHJhY2sgPSB2b2lkX2NvbnMgTmFtZS50cmFja1xubGV0IHUgPSBjb25zIE5hbWUudVxubGV0IHVsID0gY29ucyBOYW1lLnVsXG5sZXQgdmFyID0gY29ucyBOYW1lLnZhclxubGV0IHZpZGVvID0gY29ucyBOYW1lLnZpZGVvXG5sZXQgd2JyID0gdm9pZF9jb25zIE5hbWUud2JyXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQXJyYXkgdXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBvcmQgPSAnYSAtPiAnYSAtPiBpbnRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEFycmF5c30gKilcblxuaW5jbHVkZSBBcnJheVxuXG5sZXQgZW1wdHkgPSBbfHxdXG5cbmxldCBnZXRfc2FmZSBhIGkgPVxuICBpZiBpID49IDAgJiYgaSA8IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBTb21lIChBcnJheS51bnNhZmVfZ2V0IGEgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IG1hcF9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGUpKSBhXG5sZXQgbWFwaV9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGkgZSkpIGFcbmxldCBmb2xkID0gQXJyYXkuZm9sZF9sZWZ0XG5cbmxldCBmb2xkaSBmIGFjYyBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKGYgYWNjIGkgYS4oaSkpIChpICsgMSlcbiAgaW5cbiAgYXV4IGFjYyAwXG5cbmxldCBmb2xkX3doaWxlIGYgYWNjIGEgPVxuICBsZXQgcmVjIGZvbGRfd2hpbGVfaSBmIGFjYyBpID1cbiAgICBpZiBpIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYWNjLCBjb250ID0gZiBhY2MgYS4oaSkgaW5cbiAgICAgIG1hdGNoIGNvbnQgd2l0aFxuICAgICAgfCBgU3RvcCAtPiBhY2NcbiAgICAgIHwgYENvbnRpbnVlIC0+IGZvbGRfd2hpbGVfaSBmIGFjYyAoaSArIDEpXG4gICAgKSBlbHNlXG4gICAgICBhY2NcbiAgaW5cbiAgZm9sZF93aGlsZV9pIGYgYWNjIDBcblxubGV0IGZvbGRfbWFwIGYgYWNjIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICgqIG5lZWQgc3BlY2lhbCBjYXNlIGZvciBpbml0aWFsaXppbmcgdGhlIHJlc3VsdCAqKVxuICBpZiBuID0gMCB0aGVuXG4gICAgYWNjLCBbfHxdXG4gIGVsc2UgKFxuICAgIGxldCBhY2MsIGIwID0gZiBhY2MgYS4oMCkgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBuIGIwIGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBuZXdfYWNjLCBiID0gZiAhYWNjIGEuKGkpIGluXG4gICAgICBhY2MgOj0gbmV3X2FjYztcbiAgICAgIHJlcy4oaSkgPC0gYlxuICAgIGRvbmU7XG4gICAgIWFjYywgcmVzXG4gIClcblxubGV0IHNjYW5fbGVmdCBmIGFjYyBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVzID0gQXJyYXkubWFrZSAobiArIDEpIGFjYyBpblxuICBBcnJheS5pdGVyaVxuICAgIChmdW4gaSB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGYgcmVzLihpKSB4IGluXG4gICAgICByZXMuKGkgKyAxKSA8LSBuZXdfYWNjKVxuICAgIGE7XG4gIHJlc1xuXG5sZXQgcmV2ZXJzZV9pbl9wbGFjZSBhID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIGxlbiA+IDAgdGhlblxuICAgIGZvciBrID0gMCB0byAobGVuIC0gMSkgLyAyIGRvXG4gICAgICBsZXQgdCA9IGEuKGspIGluXG4gICAgICBhLihrKSA8LSBhLihsZW4gLSAxIC0gayk7XG4gICAgICBhLihsZW4gLSAxIC0gaykgPC0gdFxuICAgIGRvbmVcblxubGV0IHNvcnRlZCBjbXAgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIEFycmF5LnNvcnQgY21wIGI7XG4gIGJcblxubGV0IHNvcnRfaW5kaWNlcyBjbXAgYSA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgYiA9IEFycmF5LmluaXQgbGVuIChmdW4gayAtPiBrKSBpblxuICBBcnJheS5zb3J0IChmdW4gazEgazIgLT4gY21wIGEuKGsxKSBhLihrMikpIGI7XG4gIGJcblxubGV0IHNvcnRfcmFua2luZyBjbXAgYSA9IHNvcnRfaW5kaWNlcyBjb21wYXJlIChzb3J0X2luZGljZXMgY21wIGEpXG5cbmxldCByZXYgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIHJldmVyc2VfaW5fcGxhY2UgYjtcbiAgYlxuXG5leGNlcHRpb24gRm91bmRcblxubGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSBlbHQgYSA9XG4gIHRyeVxuICAgIEFycmF5Lml0ZXIgKGZ1biBlIC0+IGlmIGVxIGUgZWx0IHRoZW4gcmFpc2Vfbm90cmFjZSBGb3VuZCkgYTtcbiAgICBmYWxzZVxuICB3aXRoIEZvdW5kIC0+IHRydWVcblxubGV0IHJlYyBmaW5kX2F1eCBmIGEgaSA9XG4gIGlmIGkgPj0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIE5vbmVcbiAgZWxzZSAoXG4gICAgbWF0Y2ggZiBpIGEuKGkpIHdpdGhcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBOb25lIC0+IGZpbmRfYXV4IGYgYSAoaSArIDEpXG4gIClcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IGZpbmRfbWFwIGYgYSA9IGZpbmRfYXV4IChmdW4gXyAtPiBmKSBhIDBcbmxldCBmaW5kID0gZmluZF9tYXBcbmxldCBmaW5kX21hcF9pIGYgYSA9IGZpbmRfYXV4IGYgYSAwXG5sZXQgZmluZGkgPSBmaW5kX21hcF9pXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbmxldCBmaW5kX2lkeCBwIGEgPVxuICBmaW5kX2F1eFxuICAgIChmdW4gaSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIChpLCB4KVxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGEgMFxuXG5sZXQgbWF4IGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZFxuICAgICAgICAgKGZ1biBhY2MgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhY2MgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgZWx0XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICBhLigwKSBhKVxuXG5sZXQgbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIG1heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkubWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBhcmdtYXggY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkaVxuICAgICAgICAgKGZ1biBhY2MgaSBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGEuKGFjYykgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgaVxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgMCBhKVxuXG5sZXQgYXJnbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIGFyZ21heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkuYXJnbWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBtaW4gY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkXG4gICAgICAgICAoZnVuIGFjYyBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGFjYyBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBlbHRcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIGEuKDApIGEpXG5cbmxldCBtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5taW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGFyZ21pbiBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRpXG4gICAgICAgICAoZnVuIGFjYyBpIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYS4oYWNjKSBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICAwIGEpXG5cbmxldCBhcmdtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggYXJnbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5hcmdtaW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGZpbHRlcl9tYXAgZiBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhJyA9IEFycmF5Lm9mX2xpc3QgYWNjIGluXG4gICAgICByZXZlcnNlX2luX3BsYWNlIGEnO1xuICAgICAgYSdcbiAgICApIGVsc2UgKFxuICAgICAgbWF0Y2ggZiBhLihpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gYXV4IGFjYyAoaSArIDEpXG4gICAgICB8IFNvbWUgeCAtPiBhdXggKHggOjogYWNjKSAoaSArIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gMFxuXG5sZXQgZmlsdGVyIHAgYSA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgeFxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGFcblxuKCogYXBwZW5kIFtyZXYgYV0gaW4gZnJvbnQgb2YgW2FjY10gKilcbmxldCByZWMgX19yZXZfYXBwZW5kX2xpc3QgYSBhY2MgaSA9XG4gIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgYWNjXG4gIGVsc2VcbiAgICBfX3Jldl9hcHBlbmRfbGlzdCBhIChhLihpKSA6OiBhY2MpIChpICsgMSlcblxubGV0IGZsYXRfbWFwIGYgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYScgPSBBcnJheS5vZl9saXN0IGFjYyBpblxuICAgICAgcmV2ZXJzZV9pbl9wbGFjZSBhJztcbiAgICAgIGEnXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBhJyA9IGYgYS4oaSkgaW5cbiAgICAgIGF1eCAoX19yZXZfYXBwZW5kX2xpc3QgYScgYWNjIDApIChpICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSAwXG5cbmxldCBtb25vaWRfcHJvZHVjdCBmIGExIGEyID1cbiAgbGV0IG5hMSA9IGxlbmd0aCBhMSBpblxuICBpbml0XG4gICAgKG5hMSAqIGxlbmd0aCBhMilcbiAgICAoZnVuIGlfcHJvZCAtPlxuICAgICAgbGV0IGkgPSBpX3Byb2QgbW9kIG5hMSBpblxuICAgICAgbGV0IGogPSBpX3Byb2QgLyBuYTEgaW5cbiAgICAgIGYgYTEuKGkpIGEyLihqKSlcblxubGV0IHJlYyBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuXG4gICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgIGlmIGNtcCBrIGEuKGkpID0gMCB0aGVuXG4gICAgICBpXG4gICAgZWxzZVxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgKFxuICAgIGxldCBtaWRkbGUgPSAoaiArIGkpIC8gMiBpblxuICAgIG1hdGNoIGNtcCBrIGEuKG1pZGRsZSkgd2l0aFxuICAgIHwgMCAtPiBtaWRkbGVcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIChtaWRkbGUgLSAxKVxuICAgIHwgXyAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSAobWlkZGxlICsgMSkgalxuICApXG5cbmxldCBfbG9va3VwX2V4biB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgbWF0Y2ggY21wIGsgYS4oaSkgd2l0aFxuICB8IDAgLT4gaVxuICB8IG4gd2hlbiBuIDwgMCAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGxvdyAqKVxuICB8IF8gd2hlbiBpID0gaiAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGhpZ2ggKilcbiAgfCBfIC0+XG4gICAgKG1hdGNoIGNtcCBrIGEuKGopIHdpdGhcbiAgICB8IDAgLT4galxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIChpICsgMSkgKGogLSAxKVxuICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmQpXG4oKiB0b28gaGlnaCAqKVxuXG5sZXQgbG9va3VwX2V4biB+Y21wIGsgYSA9IF9sb29rdXBfZXhuIH5jbXAgayBhIDAgKEFycmF5Lmxlbmd0aCBhIC0gMSlcblxubGV0IGxvb2t1cCB+Y21wIGsgYSA9XG4gIHRyeSBTb21lIChfbG9va3VwX2V4biB+Y21wIGsgYSAwIChBcnJheS5sZW5ndGggYSAtIDEpKVxuICB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbmxldCBic2VhcmNoIH5jbXAgayBhID1cbiAgbGV0IHJlYyBhdXggaSBqID1cbiAgICBpZiBpID4gaiB0aGVuXG4gICAgICBgSnVzdF9hZnRlciBqXG4gICAgZWxzZSAoXG4gICAgICBsZXQgbWlkZGxlID0gaSArICgoaiAtIGkpIC8gMikgaW5cbiAgICAgICgqIGF2b2lkIG92ZXJmbG93ICopXG4gICAgICBtYXRjaCBjbXAgayBhLihtaWRkbGUpIHdpdGhcbiAgICAgIHwgMCAtPiBgQXQgbWlkZGxlXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBhdXggaSAobWlkZGxlIC0gMSlcbiAgICAgIHwgXyAtPiBhdXggKG1pZGRsZSArIDEpIGpcbiAgICApXG4gIGluXG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlblxuICAgIGBFbXB0eVxuICBlbHNlIChcbiAgICBtYXRjaCBjbXAgYS4oMCkgaywgY21wIGEuKG4gLSAxKSBrIHdpdGhcbiAgICB8IGMsIF8gd2hlbiBjID4gMCAtPiBgQWxsX2JpZ2dlclxuICAgIHwgXywgYyB3aGVuIGMgPCAwIC0+IGBBbGxfbG93ZXJcbiAgICB8IF8gLT4gYXV4IDAgKG4gLSAxKVxuICApXG5cbmxldCByZWMgX2Zvcl9hbGwyIHAgYTEgYTIgaTEgaTIgfmxlbiA9XG4gIGxlbiA9IDBcbiAgfHwgKHAgYTEuKGkxKSBhMi4oaTIpICYmIF9mb3JfYWxsMiBwIGExIGEyIChpMSArIDEpIChpMiArIDEpIH5sZW46KGxlbiAtIDEpKVxuXG5sZXQgZm9yX2FsbDIgcCBhIGIgPVxuICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmIF9mb3JfYWxsMiBwIGEgYiAwIDAgfmxlbjooQXJyYXkubGVuZ3RoIGEpXG5cbmxldCByZWMgX2V4aXN0czIgcCBhMSBhMiBpMSBpMiB+bGVuID1cbiAgbGVuID4gMFxuICAmJiAocCBhMS4oaTEpIGEyLihpMikgfHwgX2V4aXN0czIgcCBhMSBhMiAoaTEgKyAxKSAoaTIgKyAxKSB+bGVuOihsZW4gLSAxKSlcblxubGV0IGV4aXN0czIgcCBhIGIgPVxuICBfZXhpc3RzMiBwIGEgYiAwIDAgfmxlbjooU3RkbGliLm1pbiAoQXJyYXkubGVuZ3RoIGEpIChBcnJheS5sZW5ndGggYikpXG5cbmxldCBfZm9sZDIgZiBhY2MgYSBiIGkgaiB+bGVuID1cbiAgbGV0IHJlYyBhdXggYWNjIG8gPVxuICAgIGlmIG8gPSBsZW4gdGhlblxuICAgICAgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYWNjID0gZiBhY2MgKEFycmF5LmdldCBhIChpICsgbykpIChBcnJheS5nZXQgYiAoaiArIG8pKSBpblxuICAgICAgYXV4IGFjYyAobyArIDEpXG4gICAgKVxuICBpblxuICBhdXggYWNjIDBcblxubGV0IGZvbGQyIGYgYWNjIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW4gaW52YWxpZF9hcmcgXCJmb2xkMlwiO1xuICBfZm9sZDIgZiBhY2MgYSBiIDAgMCB+bGVuOihBcnJheS5sZW5ndGggYSlcblxubGV0ICggLS0gKSBpIGogPVxuICBpZiBpIDw9IGogdGhlblxuICAgIEFycmF5LmluaXQgKGogLSBpICsgMSkgKGZ1biBrIC0+IGkgKyBrKVxuICBlbHNlXG4gICAgQXJyYXkuaW5pdCAoaSAtIGogKyAxKSAoZnVuIGsgLT4gaSAtIGspXG5cbmxldCAoIC0tXiApIGkgaiA9XG4gIGlmIGkgPSBqIHRoZW5cbiAgICBbfHxdXG4gIGVsc2UgaWYgaSA+IGogdGhlblxuICAgIEFycmF5LmluaXQgKGkgLSBqKSAoZnVuIGsgLT4gaSAtIGspXG4gIGVsc2VcbiAgICBBcnJheS5pbml0IChqIC0gaSkgKGZ1biBrIC0+IGkgKyBrKVxuXG4oKiogYWxsIHRoZSBlbGVtZW50cyBvZiBhLCBidXQgdGhlIGktdGgsIGludG8gYSBsaXN0ICopXG5sZXQgZXhjZXB0X2lkeCBhIGkgPVxuICBmb2xkaVxuICAgIChmdW4gYWNjIGogZWx0IC0+XG4gICAgICBpZiBpID0gaiB0aGVuXG4gICAgICAgIGFjY1xuICAgICAgZWxzZVxuICAgICAgICBlbHQgOjogYWNjKVxuICAgIFtdIGFcblxubGV0IGVxdWFsIGVxIGEgYiA9XG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgZXEgYS4oaSkgYi4oaSkgJiYgYXV4IChpICsgMSlcbiAgaW5cbiAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJiBhdXggMFxuXG5sZXQgY29tcGFyZSBjbXAgYSBiID1cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAgIDBcbiAgICAgIGVsc2VcbiAgICAgICAgLTFcbiAgICBlbHNlIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAxXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYyA9IGNtcCBhLihpKSBiLihpKSBpblxuICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICBhdXggKGkgKyAxKVxuICAgICAgZWxzZVxuICAgICAgICBjXG4gICAgKVxuICBpblxuICBhdXggMFxuXG4oKiBzd2FwIGVsZW1lbnRzIG9mIGFycmF5ICopXG5sZXQgc3dhcCBhIGkgaiA9XG4gIGlmIGkgPD4gaiB0aGVuIChcbiAgICBsZXQgdG1wID0gYS4oaSkgaW5cbiAgICBhLihpKSA8LSBhLihqKTtcbiAgICBhLihqKSA8LSB0bXBcbiAgKVxuXG4oKiBzaHVmZmxlIGFbaSDigKYgal0gdXNpbmcgdGhlIGdpdmVuIGludCByYW5kb20gZ2VuZXJhdG9yXG4gICBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSAqKVxubGV0IF9zaHVmZmxlIF9yYW5kX2ludCBhIGkgaiA9XG4gIGZvciBrID0gaiAtIDEgZG93bnRvIGkgKyAxIGRvXG4gICAgbGV0IGwgPSBfcmFuZF9pbnQgKGsgKyAxKSBpblxuICAgIGxldCB0bXAgPSBhLihsKSBpblxuICAgIGEuKGwpIDwtIGEuKGspO1xuICAgIGEuKGspIDwtIHRtcFxuICBkb25lXG5cbmxldCBzaHVmZmxlIGEgPSBfc2h1ZmZsZSBSYW5kb20uaW50IGEgMCAoQXJyYXkubGVuZ3RoIGEpXG5sZXQgc2h1ZmZsZV93aXRoIHN0IGEgPSBfc2h1ZmZsZSAoUmFuZG9tLlN0YXRlLmludCBzdCkgYSAwIChBcnJheS5sZW5ndGggYSlcblxubGV0IHJhbmRvbV9jaG9vc2UgYSA9XG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnJhbmRvbV9jaG9vc2VcIjtcbiAgZnVuIHN0IC0+IGEuKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IHJhbmRvbV9sZW4gbiBnIHN0ID0gQXJyYXkuaW5pdCBuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbiA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHJhbmRvbV9ub25fZW1wdHkgZyBzdCA9XG4gIGxldCBuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gb3V0IGEuKGspXG4gIGRvbmU7XG4gIHBwX3N0b3Agb3V0ICgpXG5cbmxldCBwcF9pID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gayBvdXQgYS4oaylcbiAgZG9uZTtcbiAgcHBfc3RvcCBvdXQgKClcblxubGV0IHRvX3N0cmluZyA/KHNlcCA9IFwiLCBcIikgaXRlbV90b19zdHJpbmcgYSA9XG4gIEFycmF5LnRvX2xpc3QgYSB8PiBMaXN0Lm1hcCBpdGVtX3RvX3N0cmluZyB8PiBTdHJpbmcuY29uY2F0IHNlcFxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID49IGxlbmd0aCBhIHRoZW5cbiAgICAgIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBTZXEuQ29ucyAoYS4oaSksIGF1eCAoaSArIDEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9faXRlciBhIGsgPSBpdGVyIGsgYVxuXG5sZXQgdG9fZ2VuIGEgPVxuICBsZXQgayA9IHJlZiAwIGluXG4gIGZ1biAoKSAtPlxuICAgIGlmICFrIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgeCA9IGEuKCFrKSBpblxuICAgICAgaW5jciBrO1xuICAgICAgU29tZSB4XG4gICAgKSBlbHNlXG4gICAgICBOb25lXG5cbigqKiB7MiBHZW5lcmljIEZ1bmN0aW9uc30gKilcblxubW9kdWxlIHR5cGUgTU9OT19BUlJBWSA9IHNpZ1xuICB0eXBlIGVsdFxuICB0eXBlIHRcblxuICB2YWwgbGVuZ3RoIDogdCAtPiBpbnRcbiAgdmFsIGdldCA6IHQgLT4gaW50IC0+IGVsdFxuICB2YWwgc2V0IDogdCAtPiBpbnQgLT4gZWx0IC0+IHVuaXRcbmVuZFxuXG4oKiBEdWFsIFBpdm90IFF1aWNrc29ydCAoWWFyb3NsYXZza2l5KVxuICAgZnJvbSBcImF2ZXJhZ2UgY2FzZSBhbmFseXNpcyBvZiBKYXZhIDcncyBEdWFsIFBpdm90IFF1aWNrc29ydFwiICopXG5tb2R1bGUgU29ydEdlbmVyaWMgKEEgOiBNT05PX0FSUkFZKSA9IHN0cnVjdFxuICBtb2R1bGUgUmFuZCA9IFJhbmRvbS5TdGF0ZVxuXG4gIGxldCBzZWVkXyA9IFt8IDEyMzQ1NiB8XVxuXG4gIHR5cGUgc3RhdGUgPSB7XG4gICAgbXV0YWJsZSBsOiBpbnQ7ICgqIGxlZnQgcG9pbnRlciAqKVxuICAgIG11dGFibGUgZzogaW50OyAoKiByaWdodCBwb2ludGVyICopXG4gICAgbXV0YWJsZSBrOiBpbnQ7XG4gIH1cblxuICBsZXQgcmFuZF9pZHhfIHJhbmQgaSBqID0gaSArIFJhbmQuaW50IHJhbmQgKGogLSBpKVxuXG4gIGxldCBzd2FwXyBhIGkgaiA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgKClcbiAgICBlbHNlIChcbiAgICAgIGxldCB0bXAgPSBBLmdldCBhIGkgaW5cbiAgICAgIEEuc2V0IGEgaSAoQS5nZXQgYSBqKTtcbiAgICAgIEEuc2V0IGEgaiB0bXBcbiAgICApXG5cbiAgbGV0IHNvcnQgfmNtcCBhID1cbiAgICBsZXQgcmVjIGluc2VydF8gYSBpIGsgPVxuICAgICAgaWYgayA8IGkgdGhlblxuICAgICAgICAoKVxuICAgICAgZWxzZSBpZiBjbXAgKEEuZ2V0IGEgaykgKEEuZ2V0IGEgKGsgKyAxKSkgPiAwIHRoZW4gKFxuICAgICAgICBzd2FwXyBhIGsgKGsgKyAxKTtcbiAgICAgICAgaW5zZXJ0XyBhIGkgKGsgLSAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogcmVjdXJzaXZlIHBhcnQgb2YgaW5zZXJ0aW9uIHNvcnQgKilcbiAgICBsZXQgcmVjIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiBrID1cbiAgICAgIGlmIGsgPCBqIHRoZW4gKFxuICAgICAgICBpbnNlcnRfIGEgaSAoayAtIDEpO1xuICAgICAgICBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogKGsgKyAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogaW5zZXJ0aW9uIHNvcnQsIGZvciBzbWFsbCBzbGljZXMgKilcbiAgICBsZXQgc29ydF9pbnNlcnRpb24gYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxIHRoZW4gc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIChpICsgMSlcbiAgICBpblxuICAgIGxldCByYW5kID0gUmFuZC5tYWtlIHNlZWRfIGluXG4gICAgKCogc29ydCBzbGljZS5cbiAgICAgICBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSB0d28gcGl2b3RzIGFyZSBlcXVhbCwgYnV0IGl0J3MgdW5saWtlbHkuICopXG4gICAgbGV0IHJlYyBzb3J0X3NsaWNlXyB+c3QgYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxMCB0aGVuIChcbiAgICAgICAgc3QubCA8LSBpO1xuICAgICAgICBzdC5nIDwtIGogLSAxO1xuICAgICAgICBzdC5rIDwtIGk7XG4gICAgICAgICgqIGNob29zZSBwaXZvdHMgKilcbiAgICAgICAgbGV0IHAgPSBBLmdldCBhIChyYW5kX2lkeF8gcmFuZCBpIGopIGluXG4gICAgICAgIGxldCBxID0gQS5nZXQgYSAocmFuZF9pZHhfIHJhbmQgaSBqKSBpblxuICAgICAgICAoKiBpbnZhcmlhbnQ6IHN0LnAgPD0gc3QucSwgc3dhcCB0aGVtIG90aGVyd2lzZSAqKVxuICAgICAgICBsZXQgcCwgcSA9XG4gICAgICAgICAgaWYgY21wIHAgcSA+IDAgdGhlblxuICAgICAgICAgICAgcSwgcFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAsIHFcbiAgICAgICAgaW5cbiAgICAgICAgd2hpbGUgc3QuayA8PSBzdC5nIGRvXG4gICAgICAgICAgbGV0IGN1ciA9IEEuZ2V0IGEgc3QuayBpblxuICAgICAgICAgIGlmIGNtcCBjdXIgcCA8IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gbGVmdG1vc3QgYmFuZCAqKVxuICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICBzdC5sIDwtIHN0LmwgKyAxXG4gICAgICAgICAgKSBlbHNlIGlmIGNtcCBjdXIgcSA+IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gcmlnaHRtb3N0IGJhbmQgKilcbiAgICAgICAgICAgIHdoaWxlIHN0LmsgPCBzdC5nICYmIGNtcCAoQS5nZXQgYSBzdC5nKSBxID4gMCBkb1xuICAgICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgc3dhcF8gYSBzdC5rIHN0Lmc7XG4gICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxO1xuICAgICAgICAgICAgKCogdGhlIGVsZW1lbnQgc3dhcHBlZCBmcm9tIHRoZSByaWdodCBtaWdodCBiZSBpbiB0aGUgZmlyc3Qgc2l0dWF0aW9uLlxuICAgICAgICAgICAgICAgdGhhdCBpcywgPCBwICAod2Uga25vdyBpdCdzIDw9IHEgYWxyZWFkeSkgKilcbiAgICAgICAgICAgIGlmIGNtcCAoQS5nZXQgYSBzdC5rKSBwIDwgMCB0aGVuIChcbiAgICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICAgIHN0LmwgPC0gc3QubCArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0LmsgPC0gc3QuayArIDFcbiAgICAgICAgZG9uZTtcbiAgICAgICAgKCogc2F2ZSB2YWx1ZXMgYmVmb3JlIHJlY3Vyc2luZyAqKVxuICAgICAgICBsZXQgbCA9IHN0LmwgYW5kIGcgPSBzdC5nIGFuZCBzb3J0X21pZGRsZSA9IGNtcCBwIHEgPCAwIGluXG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIGkgbDtcbiAgICAgICAgaWYgc29ydF9taWRkbGUgdGhlbiBzb3J0X3NsaWNlXyB+c3QgYSBsIChnICsgMSk7XG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIChnICsgMSkgalxuICAgICAgKSBlbHNlXG4gICAgICAgIHNvcnRfaW5zZXJ0aW9uIGEgaSBqXG4gICAgaW5cbiAgICBpZiBBLmxlbmd0aCBhID4gMCB0aGVuIChcbiAgICAgIGxldCBzdCA9IHsgbCA9IDA7IGcgPSBBLmxlbmd0aCBhOyBrID0gMCB9IGluXG4gICAgICBzb3J0X3NsaWNlXyB+c3QgYSAwIChBLmxlbmd0aCBhKVxuICAgIClcbmVuZFxuXG5sZXQgc29ydF9nZW5lcmljICh0eXBlIGFyciBlbHQpXG4gICAgKG1vZHVsZSBBIDogTU9OT19BUlJBWSB3aXRoIHR5cGUgdCA9IGFyciBhbmQgdHlwZSBlbHQgPSBlbHQpIH5jbXAgYSA9XG4gIGxldCBtb2R1bGUgUyA9IFNvcnRHZW5lcmljIChBKSBpblxuICBTLnNvcnQgfmNtcCBhXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSBhIGYgPSBmbGF0X21hcCBmIGFcbiAgbGV0ICggPj58ICkgYSBmID0gbWFwIGYgYVxuICBsZXQgKCA+fD0gKSBhIGYgPSBtYXAgZiBhXG4gIGxldCAoIC0tICkgPSAoIC0tIClcbiAgbGV0ICggLS1eICkgPSAoIC0tXiApXG5cbiAgdHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyID0gbW9ub2lkX3Byb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgYTEgYTJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgRXh0ZW5zaW9uIHRvIHRoZSBzdGFuZGFyZCBIYXNodGJsfSAgKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXEgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIGhhc2ggPSAnYSAtPiBpbnRcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgUG9seW1vcnBoaWMgdGFibGVzfSAqKVxuXG5tb2R1bGUgUG9seSA9IHN0cnVjdFxuICBsZXQgZ2V0IHRibCB4ID0gdHJ5IFNvbWUgKEhhc2h0YmwuZmluZCB0YmwgeCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgZ2V0X29yIHRibCB4IH5kZWZhdWx0ID0gdHJ5IEhhc2h0YmwuZmluZCB0YmwgeCB3aXRoIE5vdF9mb3VuZCAtPiBkZWZhdWx0XG4gIGxldCBrZXlzIHRibCBrID0gSGFzaHRibC5pdGVyIChmdW4ga2V5IF8gLT4gayBrZXkpIHRibFxuICBsZXQgdmFsdWVzIHRibCBrID0gSGFzaHRibC5pdGVyIChmdW4gXyB2IC0+IGsgdikgdGJsXG4gIGxldCBrZXlzX2xpc3QgdGJsID0gSGFzaHRibC5mb2xkIChmdW4gayBfIGEgLT4gayA6OiBhKSB0YmwgW11cbiAgbGV0IHZhbHVlc19saXN0IHRibCA9IEhhc2h0YmwuZm9sZCAoZnVuIF8gdiBhIC0+IHYgOjogYSkgdGJsIFtdXG5cbiAgbGV0IGFkZF9saXN0IHRibCBrIHYgPVxuICAgIGxldCBsID0gdHJ5IEhhc2h0YmwuZmluZCB0YmwgayB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgIEhhc2h0YmwucmVwbGFjZSB0YmwgayAodiA6OiBsKVxuXG4gIGxldCBpbmNyID8oYnkgPSAxKSB0YmwgeCA9XG4gICAgbGV0IG4gPSBnZXRfb3IgdGJsIHggfmRlZmF1bHQ6MCBpblxuICAgIGlmIG4gKyBieSA8PSAwIHRoZW5cbiAgICAgIEhhc2h0YmwucmVtb3ZlIHRibCB4XG4gICAgZWxzZVxuICAgICAgSGFzaHRibC5yZXBsYWNlIHRibCB4IChuICsgYnkpXG5cbiAgbGV0IGRlY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICB0cnlcbiAgICAgIGxldCBuID0gSGFzaHRibC5maW5kIHRibCB4IGluXG4gICAgICBpZiBuIC0gYnkgPD0gMCB0aGVuXG4gICAgICAgIEhhc2h0YmwucmVtb3ZlIHRibCB4XG4gICAgICBlbHNlXG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSB0YmwgeCAobiAtIGJ5KVxuICAgIHdpdGggTm90X2ZvdW5kIC0+ICgpXG5cbiAgbGV0IG1hcF9saXN0IGYgaCA9IEhhc2h0YmwuZm9sZCAoZnVuIHggeSBhY2MgLT4gZiB4IHkgOjogYWNjKSBoIFtdXG4gIGxldCB0b19pdGVyIHRibCBrID0gSGFzaHRibC5pdGVyIChmdW4ga2V5IHYgLT4gayAoa2V5LCB2KSkgdGJsXG4gIGxldCBhZGRfaXRlciB0YmwgaSA9IGkgKGZ1biAoaywgdikgLT4gSGFzaHRibC5hZGQgdGJsIGsgdilcblxuICBsZXQgYWRkX2l0ZXJfd2l0aCB+ZiB0YmwgaSA9XG4gICAgaSAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gSGFzaHRibC5hZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuXG4gIGxldCBhZGRfc2VxIHRibCBzZXEgPSBTZXEuaXRlciAoZnVuIChrLCB2KSAtPiBIYXNodGJsLmFkZCB0YmwgayB2KSBzZXFcblxuICBsZXQgYWRkX3NlcV93aXRoIH5mIHRibCBzZXEgPVxuICAgIFNlcS5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gSGFzaHRibC5hZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgc2VxXG5cbiAgKCogaGVscGVyIGZvciBidWlsZGluZyBoYXNodGFibGVzIGJ5IGJ1bGsgbXV0YXRpb24gKilcbiAgbGV0W0BpbmxpbmVdIG1rX3RibF8gZiB4ID1cbiAgICBsZXQgdGJsID0gSGFzaHRibC5jcmVhdGUgMzIgaW5cbiAgICBmIHRibCB4O1xuICAgIHRibFxuXG4gIGxldCBvZl9pdGVyIGkgPSBta190YmxfIGFkZF9pdGVyIGlcbiAgbGV0IG9mX3NlcSBpID0gbWtfdGJsXyBhZGRfc2VxIGlcbiAgbGV0IG9mX2l0ZXJfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX2l0ZXJfd2l0aCB+ZikgaVxuICBsZXQgb2Zfc2VxX3dpdGggfmYgaSA9IG1rX3RibF8gKGFkZF9zZXFfd2l0aCB+ZikgaVxuICBsZXQgYWRkX2l0ZXJfY291bnQgdGJsIGkgPSBpIChmdW4gayAtPiBpbmNyIHRibCBrKVxuICBsZXQgYWRkX3NlcV9jb3VudCB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biBrIC0+IGluY3IgdGJsIGspIHNlcVxuICBsZXQgb2ZfaXRlcl9jb3VudCBpID0gbWtfdGJsXyBhZGRfaXRlcl9jb3VudCBpXG4gIGxldCBvZl9zZXFfY291bnQgaSA9IG1rX3RibF8gYWRkX3NlcV9jb3VudCBpXG4gIGxldCB0b19saXN0IHRibCA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgdiBsIC0+IChrLCB2KSA6OiBsKSB0YmwgW11cblxuICBsZXQgb2ZfbGlzdCBsID1cbiAgICBsZXQgdGJsID0gSGFzaHRibC5jcmVhdGUgMzIgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1biAoaywgdikgLT4gSGFzaHRibC5hZGQgdGJsIGsgdikgbDtcbiAgICB0YmxcblxuICBsZXQgb2ZfbGlzdF93aXRoIH5mIGwgPVxuICAgIGxldCB0YmwgPSBIYXNodGJsLmNyZWF0ZSAzMiBpblxuICAgIExpc3QuaXRlclxuICAgICAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IEhhc2h0YmwuYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcbiAgICAgIGw7XG4gICAgdGJsXG5cbiAgbGV0IHVwZGF0ZSB0YmwgfmYgfmsgPVxuICAgIGxldCB2ID0gZ2V0IHRibCBrIGluXG4gICAgbWF0Y2ggdiwgZiBrIHYgd2l0aFxuICAgIHwgTm9uZSwgTm9uZSAtPiAoKVxuICAgIHwgTm9uZSwgU29tZSB2JyAtPiBIYXNodGJsLmFkZCB0YmwgayB2J1xuICAgIHwgU29tZSBfLCBTb21lIHYnIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgayB2J1xuICAgIHwgU29tZSBfLCBOb25lIC0+IEhhc2h0YmwucmVtb3ZlIHRibCBrXG5cbiAgbGV0IGdldF9vcl9hZGQgdGJsIH5mIH5rID1cbiAgICB0cnkgSGFzaHRibC5maW5kIHRibCBrXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCB2ID0gZiBrIGluXG4gICAgICBIYXNodGJsLmFkZCB0YmwgayB2O1xuICAgICAgdlxuXG4gIGxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgICAgPyhwcF9zZXAgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIixAIFwiKVxuICAgICAgPyhwcF9hcnJvdyA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQCAtPiBcIikgcHBfayBwcF92IGZtdCBtID1cbiAgICBwcF9zdGFydCBmbXQgKCk7XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBIYXNodGJsLml0ZXJcbiAgICAgIChmdW4gayB2IC0+XG4gICAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICAgIHBwX2sgZm10IGs7XG4gICAgICAgIHBwX2Fycm93IGZtdCAoKTtcbiAgICAgICAgcHBfdiBmbXQgdilcbiAgICAgIG07XG4gICAgcHBfc3RvcCBmbXQgKClcbmVuZFxuXG5pbmNsdWRlIFBvbHlcblxuKCoqIHsyIEZ1bmN0b3J9ICopXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBIYXNodGJsLlNcblxuICB2YWwgZ2V0IDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICgqKiBbZ2V0IHRibCBrXSBmaW5kcyBhIGJpbmRpbmcgZm9yIHRoZSBrZXkgW2tdIGlmIHByZXNlbnQsXG4gICAgICBvciByZXR1cm5zIFtOb25lXSBpZiBubyB2YWx1ZSBpcyBmb3VuZC5cbiAgICAgIFNhZmUgdmVyc2lvbiBvZiB7IUhhc2h0YmwuZmluZH0uICopXG5cbiAgdmFsIGdldF9vciA6ICdhIHQgLT4ga2V5IC0+IGRlZmF1bHQ6J2EgLT4gJ2FcbiAgKCoqIFtnZXRfb3IgdGJsIGsgfmRlZmF1bHRdIHJldHVybnMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gW2tdIGlmIHByZXNlbnQsXG4gICAgICBhbmQgcmV0dXJucyBbZGVmYXVsdF0gb3RoZXJ3aXNlIChpZiBba10gZG9lc24ndCBiZWxvbmcgaW4gW3RibF0pLlxuICAgICAgQHNpbmNlIDAuMTYgKilcblxuICB2YWwgYWRkX2xpc3QgOiAnYSBsaXN0IHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgKCoqIFthZGRfbGlzdCB0YmwgeCB5XSBhZGRzIFt5XSB0byB0aGUgbGlzdCBbeF0gaXMgYm91bmQgdG8uIElmIFt4XSBpc1xuICAgICAgbm90IGJvdW5kLCBpdCBiZWNvbWVzIGJvdW5kIHRvIFt5XS5cbiAgICAgIEBzaW5jZSAwLjE2ICopXG5cbiAgdmFsIGluY3IgOiA/Ynk6aW50IC0+IGludCB0IC0+IGtleSAtPiB1bml0XG4gICgqKiBbaW5jciA/YnkgdGJsIHhdIGluY3JlbWVudHMgb3IgaW5pdGlhbGl6ZXMgdGhlIGNvdW50ZXIgYXNzb2NpYXRlZCB3aXRoIFt4XS5cbiAgICAgIElmIFtnZXQgdGJsIHggPSBOb25lXSwgdGhlbiBhZnRlciB1cGRhdGUsIFtnZXQgdGJsIHggPSBTb21lIDFdO1xuICAgICAgb3RoZXJ3aXNlLCBpZiBbZ2V0IHRibCB4ID0gU29tZSBuXSwgbm93IFtnZXQgdGJsIHggPSBTb21lIChuKzEpXS5cbiAgICAgIEBwYXJhbSBieSBpZiBzcGVjaWZpZWQsIHRoZSBpbnQgdmFsdWUgaXMgaW5jcmVtZW50ZWQgYnkgW2J5XSByYXRoZXIgdGhhbiAxLlxuICAgICAgQHNpbmNlIDAuMTYgKilcblxuICB2YWwgZGVjciA6ID9ieTppbnQgLT4gaW50IHQgLT4ga2V5IC0+IHVuaXRcbiAgKCoqIFtkZWNyID9ieSB0YmwgeF0gaXMgbGlrZSB7IWluY3J9IGJ1dCBzdWJ0cmFjdCAxIChvciB0aGUgdmFsdWUgb2YgW2J5XSkuXG4gICAgICBJZiB0aGUgdmFsdWUgcmVhY2hlcyAwLCB0aGUga2V5IGlzIHJlbW92ZWQgZnJvbSB0aGUgdGFibGUuXG4gICAgICBUaGlzIGRvZXMgbm90aGluZyBpZiB0aGUga2V5IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHRhYmxlLlxuICAgICAgQHNpbmNlIDAuMTYgKilcblxuICB2YWwga2V5cyA6ICdhIHQgLT4ga2V5IGl0ZXJcbiAgKCoqICBba2V5cyB0YmwgZl0gaXRlcmF0ZXMgb24ga2V5cyAoc2ltaWxhciBvcmRlciBhcyB7IUhhc2h0YmwuaXRlcn0pLiAqKVxuXG4gIHZhbCB2YWx1ZXMgOiAnYSB0IC0+ICdhIGl0ZXJcbiAgKCoqICBbdmFsdWVzIHRibCBmXSBpdGVyYXRlcyBvbiB2YWx1ZXMgaW4gdGhlIHRhYmxlLiAqKVxuXG4gIHZhbCBrZXlzX2xpc3QgOiBfIHQgLT4ga2V5IGxpc3RcbiAgKCoqIFtrZXlzX2xpc3QgdGJsXSBpcyB0aGUgbGlzdCBvZiBrZXlzIGluIFt0YmxdLlxuICAgICAgSWYgdGhlIGtleSBpcyBpbiB0aGUgSGFzaHRhYmxlIG11bHRpcGxlIHRpbWVzLCBhbGwgb2NjdXJyZW5jZXMgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgIEBzaW5jZSAwLjggKilcblxuICB2YWwgdmFsdWVzX2xpc3QgOiAnYSB0IC0+ICdhIGxpc3RcbiAgKCoqIFt2YWx1ZXNfbGlzdCB0XSBpcyB0aGUgbGlzdCBvZiB2YWx1ZXMgaW4gW3RdLlxuICAgICAgQHNpbmNlIDAuOCAqKVxuXG4gIHZhbCBtYXBfbGlzdCA6IChrZXkgLT4gJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgbGlzdFxuICAoKiogTWFwIG9uIGEgaGFzaHRhYmxlJ3MgaXRlbXMsIGNvbGxlY3QgaW50byBhIGxpc3QuICopXG5cbiAgdmFsIHRvX2l0ZXIgOiAnYSB0IC0+IChrZXkgKiAnYSkgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBpbiB0aGUgdGFibGUuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9pdGVyIDogJ2EgdCAtPiAoa2V5ICogJ2EpIGl0ZXIgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9pdGVyX3dpdGggOlxuICAgIGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIGl0ZXIgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgKCoqIEFkZCB0aGUgY29ycmVzcG9uZGluZyBwYWlycyB0byB0aGUgdGFibGUsIHVzaW5nIHshSGFzaHRibC5hZGR9LlxuICAgICAgUmVuYW1lZCBmcm9tIFthZGRfc3RkX3NlcV0gc2luY2UgMy4wLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCBhZGRfc2VxX3dpdGggOlxuICAgIGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgKCoqIEFkZCB0aGUgY29ycmVzcG9uZGluZyBwYWlycyB0byB0aGUgdGFibGUsIHVzaW5nIHshSGFzaHRibC5hZGR9LlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgb2ZfaXRlciA6IChrZXkgKiAnYSkgaXRlciAtPiAnYSB0XG4gICgqKiBGcm9tIHRoZSBnaXZlbiBiaW5kaW5ncywgYWRkZWQgaW4gb3JkZXIuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX2l0ZXJfd2l0aCA6IGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gKGtleSAqICdhKSBpdGVyIC0+ICdhIHRcbiAgKCoqIEZyb20gdGhlIGdpdmVuIGJpbmRpbmdzLCBhZGRlZCBpbiBvcmRlci5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgUmVuYW1lZCBmcm9tIFtvZl9zdGRfc2VxXSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIG9mX3NlcV93aXRoIDogZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgKCoqIEZyb20gdGhlIGdpdmVuIGJpbmRpbmdzLCBhZGRlZCBpbiBvcmRlci5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIGFkZF9pdGVyX2NvdW50IDogaW50IHQgLT4ga2V5IGl0ZXIgLT4gdW5pdFxuICAoKiogW2FkZF9pdGVyX2NvdW50IHRibCBpXSBpbmNyZW1lbnRzIHRoZSBjb3VudCBvZiBlYWNoIGVsZW1lbnQgb2YgW2ldXG4gICAgICBieSBjYWxsaW5nIHshaW5jcn0uIFRoaXMgaXMgdXNlZnVsIGZvciBjb3VudGluZyBob3cgbWFueSB0aW1lcyBlYWNoXG4gICAgICBlbGVtZW50IG9mIFtpXSBvY2N1cnMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9zZXFfY291bnQgOiBpbnQgdCAtPiBrZXkgU2VxLnQgLT4gdW5pdFxuICAoKiogW2FkZF9zZXFfY291bnQgdGJsIHNlcV0gaW5jcmVtZW50cyB0aGUgY291bnQgb2YgZWFjaCBlbGVtZW50IG9mIFtzZXFdXG4gICAgICBieSBjYWxsaW5nIHshaW5jcn0uIFRoaXMgaXMgdXNlZnVsIGZvciBjb3VudGluZyBob3cgbWFueSB0aW1lcyBlYWNoXG4gICAgICBlbGVtZW50IG9mIFtzZXFdIG9jY3Vycy5cbiAgICAgIFJlbmFtZWQgZnJvbSBbb2Zfc3RkX3NlcV9jb3VudF0gc2luY2UgMy4wLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCBvZl9pdGVyX2NvdW50IDoga2V5IGl0ZXIgLT4gaW50IHRcbiAgKCoqIExpa2UgeyFhZGRfc2VxX2NvdW50fSwgYnV0IGFsbG9jYXRlcyBhIG5ldyB0YWJsZSBhbmQgcmV0dXJucyBpdC5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgb2Zfc2VxX2NvdW50IDoga2V5IFNlcS50IC0+IGludCB0XG4gICgqKiBMaWtlIHshYWRkX3NlcV9jb3VudH0sIGJ1dCBhbGxvY2F0ZXMgYSBuZXcgdGFibGUgYW5kIHJldHVybnMgaXQuXG4gICAgICBSZW5hbWVkIGZyb20gW29mX3N0ZF9zZXFfY291bnRdIHNpbmNlIDMuMC5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgdG9fbGlzdCA6ICdhIHQgLT4gKGtleSAqICdhKSBsaXN0XG4gICgqKiBbdG9fbGlzdCB0YmxdIHJldHVybnMgdGhlIGxpc3Qgb2YgKGtleSx2YWx1ZSkgYmluZGluZ3MgKG9yZGVyIHVuc3BlY2lmaWVkKS4gKilcblxuICB2YWwgb2ZfbGlzdCA6IChrZXkgKiAnYSkgbGlzdCAtPiAnYSB0XG4gICgqKiBbb2ZfbGlzdCBsXSBidWlsZHMgYSB0YWJsZSBmcm9tIHRoZSBnaXZlbiBsaXN0IFtsXSBvZiBiaW5kaW5ncyBba19pIC0+IHZfaV0sXG4gICAgICBhZGRlZCBpbiBvcmRlciB1c2luZyB7IWFkZH0uIElmIGEga2V5IG9jY3VycyBzZXZlcmFsIHRpbWVzLFxuICAgICAgaXQgd2lsbCBiZSBhZGRlZCBzZXZlcmFsIHRpbWVzLCBhbmQgdGhlIHZpc2libGUgYmluZGluZ1xuICAgICAgd2lsbCBiZSB0aGUgbGFzdCBvbmUuICopXG5cbiAgdmFsIG9mX2xpc3Rfd2l0aCA6IGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gKGtleSAqICdhKSBsaXN0IC0+ICdhIHRcbiAgKCoqIFtvZl9saXN0IGxdIGJ1aWxkcyBhIHRhYmxlIGZyb20gdGhlIGdpdmVuIGxpc3QgW2xdIG9mIGJpbmRpbmdzIFtrX2kgLT4gdl9pXS5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIHVwZGF0ZSA6ICdhIHQgLT4gZjooa2V5IC0+ICdhIG9wdGlvbiAtPiAnYSBvcHRpb24pIC0+IGs6a2V5IC0+IHVuaXRcbiAgKCoqIFt1cGRhdGUgdGJsIH5mIH5rXSB1cGRhdGVzIGtleSBba10gYnkgY2FsbGluZyBbZiBrIChTb21lIHYpXSBpZlxuICAgICAgW2tdIHdhcyBtYXBwZWQgdG8gW3ZdLCBvciBbZiBrIE5vbmVdIG90aGVyd2lzZTsgaWYgdGhlIGNhbGxcbiAgICAgIHJldHVybnMgW05vbmVdIHRoZW4gW2tdIGlzIHJlbW92ZWQvc3RheXMgcmVtb3ZlZCwgaWYgdGhlIGNhbGxcbiAgICAgIHJldHVybnMgW1NvbWUgdiddIHRoZW4gdGhlIGJpbmRpbmcgW2sgLT4gdiddIGlzIGluc2VydGVkXG4gICAgICB1c2luZyB7IUhhc2h0YmwucmVwbGFjZX0uXG4gICAgICBAc2luY2UgMC4xNCAqKVxuXG4gIHZhbCBnZXRfb3JfYWRkIDogJ2EgdCAtPiBmOihrZXkgLT4gJ2EpIC0+IGs6a2V5IC0+ICdhXG4gICgqKiBbZ2V0X29yX2FkZCB0YmwgfmsgfmZdIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBiaW5kaW5nIG9mIFtrXVxuICAgICAgaW4gW3RibF0sIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBub3QgZXhpc3QsIHRoZW4gW2Yga11cbiAgICAgIGlzIGNhbGxlZCB0byBvYnRhaW4gYSBuZXcgYmluZGluZyBbdl07IFtrIC0+IHZdIGlzIGFkZGVkXG4gICAgICB0byBbdGJsXSBhbmQgW3ZdIGlzIHJldHVybmVkLlxuICAgICAgQHNpbmNlIDEuMCAqKVxuXG4gIHZhbCBwcCA6XG4gICAgP3BwX3N0YXJ0OnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zdG9wOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zZXA6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX2Fycm93OnVuaXQgcHJpbnRlciAtPlxuICAgIGtleSBwcmludGVyIC0+XG4gICAgJ2EgcHJpbnRlciAtPlxuICAgICdhIHQgcHJpbnRlclxuICAoKiogW3BwIH5wcF9zdGFydCB+cHBfc3RvcCB+cHBfc2VwIH5wcCBhcnJvdyBwcF9rIHBwX3ZdIHJldHVybnMgYSB0YWJsZSBwcmludGVyXG4gICAgICBnaXZlbiBhIFtwcF9rXSBwcmludGVyXG4gICAgICBmb3IgaW5kaXZpZHVhbCBrZXkgYW5kIGEgW3BwX3ZdIHByaW50ZXIgZm9yIGluZGl2aWR1YWwgdmFsdWUuXG4gICAgICBbcHBfc3RhcnRdIGFuZCBbcHBfc3RvcF0gY29udHJvbCB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBkZWxpbWl0ZXJzLFxuICAgICAgYnkgZGVmYXVsdCBwcmludCBub3RoaW5nLiBbcHBfc2VwXSBjb250cm9sIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiBiaW5kaW5nLlxuICAgICAgW3BwX2Fycm93XSBjb250cm9sIHRoZSBhcnJvdyBiZXR3ZWVuIHRoZSBrZXkgYW5kIHZhbHVlLlxuICAgICAgUmVuYW1lZCBmcm9tIFtwcmludF0gc2luY2UgMi4wLlxuICAgICAgQHNpbmNlIDAuMTMgKilcbmVuZFxuXG5tb2R1bGUgTWFrZSAoWCA6IEhhc2h0YmwuSGFzaGVkVHlwZSkgOlxuICBTIHdpdGggdHlwZSBrZXkgPSBYLnQgYW5kIHR5cGUgJ2EgdCA9ICdhIEhhc2h0YmwuTWFrZShYKS50ID0gc3RydWN0XG4gIGluY2x1ZGUgSGFzaHRibC5NYWtlIChYKVxuXG4gIGxldCBnZXQgdGJsIHggPSB0cnkgU29tZSAoZmluZCB0YmwgeCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgZ2V0X29yIHRibCB4IH5kZWZhdWx0ID0gdHJ5IGZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gZGVmYXVsdFxuXG4gIGxldCBpbmNyID8oYnkgPSAxKSB0YmwgeCA9XG4gICAgbGV0IG4gPSBnZXRfb3IgdGJsIHggfmRlZmF1bHQ6MCBpblxuICAgIGlmIG4gKyBieSA8PSAwIHRoZW5cbiAgICAgIHJlbW92ZSB0YmwgeFxuICAgIGVsc2VcbiAgICAgIHJlcGxhY2UgdGJsIHggKG4gKyBieSlcblxuICBsZXQgYWRkX2xpc3QgdGJsIGsgdiA9XG4gICAgbGV0IGwgPSB0cnkgZmluZCB0YmwgayB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgIHJlcGxhY2UgdGJsIGsgKHYgOjogbClcblxuICBsZXQgZGVjciA/KGJ5ID0gMSkgdGJsIHggPVxuICAgIHRyeVxuICAgICAgbGV0IG4gPSBmaW5kIHRibCB4IGluXG4gICAgICBpZiBuIC0gYnkgPD0gMCB0aGVuXG4gICAgICAgIHJlbW92ZSB0YmwgeFxuICAgICAgZWxzZVxuICAgICAgICByZXBsYWNlIHRibCB4IChuIC0gYnkpXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gKClcblxuICBsZXQga2V5cyB0YmwgayA9IGl0ZXIgKGZ1biBrZXkgXyAtPiBrIGtleSkgdGJsXG4gIGxldCB2YWx1ZXMgdGJsIGsgPSBpdGVyIChmdW4gXyB2IC0+IGsgdikgdGJsXG4gIGxldCBrZXlzX2xpc3QgdGJsID0gZm9sZCAoZnVuIGsgXyBhIC0+IGsgOjogYSkgdGJsIFtdXG4gIGxldCB2YWx1ZXNfbGlzdCB0YmwgPSBmb2xkIChmdW4gXyB2IGEgLT4gdiA6OiBhKSB0YmwgW11cbiAgbGV0IG1hcF9saXN0IGYgaCA9IGZvbGQgKGZ1biB4IHkgYWNjIC0+IGYgeCB5IDo6IGFjYykgaCBbXVxuXG4gIGxldCB1cGRhdGUgdGJsIH5mIH5rID1cbiAgICBsZXQgdiA9IGdldCB0YmwgayBpblxuICAgIG1hdGNoIHYsIGYgayB2IHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gKClcbiAgICB8IE5vbmUsIFNvbWUgdicgLT4gYWRkIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIFNvbWUgdicgLT4gcmVwbGFjZSB0YmwgayB2J1xuICAgIHwgU29tZSBfLCBOb25lIC0+IHJlbW92ZSB0Ymwga1xuXG4gIGxldCBnZXRfb3JfYWRkIHRibCB+ZiB+ayA9XG4gICAgdHJ5IGZpbmQgdGJsIGtcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IHYgPSBmIGsgaW5cbiAgICAgIGFkZCB0YmwgayB2O1xuICAgICAgdlxuXG4gIGxldCB0b19pdGVyIHRibCBrID0gaXRlciAoZnVuIGtleSB2IC0+IGsgKGtleSwgdikpIHRibFxuICBsZXQgYWRkX2l0ZXIgdGJsIGkgPSBpIChmdW4gKGssIHYpIC0+IGFkZCB0YmwgayB2KVxuXG4gIGxldCBhZGRfaXRlcl93aXRoIH5mIHRibCBpID1cbiAgICBpIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIGZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiByZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG5cbiAgbGV0IGFkZF9zZXEgdGJsIHNlcSA9IFNlcS5pdGVyIChmdW4gKGssIHYpIC0+IGFkZCB0YmwgayB2KSBzZXFcblxuICBsZXQgYWRkX3NlcV93aXRoIH5mIHRibCBzZXEgPVxuICAgIFNlcS5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBmaW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gcmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgc2VxXG5cbiAgKCogaGVscGVyIGZvciBidWlsZGluZyBoYXNodGFibGVzIGJ5IGJ1bGsgbXV0YXRpb24gKilcbiAgbGV0W0BpbmxpbmVdIG1rX3RibF8gZiB4ID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgZiB0YmwgeDtcbiAgICB0YmxcblxuICBsZXQgb2ZfaXRlciBpID0gbWtfdGJsXyBhZGRfaXRlciBpXG4gIGxldCBvZl9zZXEgaSA9IG1rX3RibF8gYWRkX3NlcSBpXG4gIGxldCBvZl9pdGVyX3dpdGggfmYgaSA9IG1rX3RibF8gKGFkZF9pdGVyX3dpdGggfmYpIGlcbiAgbGV0IG9mX3NlcV93aXRoIH5mIGkgPSBta190YmxfIChhZGRfc2VxX3dpdGggfmYpIGlcbiAgbGV0IGFkZF9pdGVyX2NvdW50IHRibCBpID0gaSAoZnVuIGsgLT4gaW5jciB0YmwgaylcbiAgbGV0IGFkZF9zZXFfY291bnQgdGJsIHNlcSA9IFNlcS5pdGVyIChmdW4gayAtPiBpbmNyIHRibCBrKSBzZXFcblxuICBsZXQgb2ZfaXRlcl9jb3VudCBzZXEgPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBhZGRfaXRlcl9jb3VudCB0Ymwgc2VxO1xuICAgIHRibFxuXG4gIGxldCBvZl9zZXFfY291bnQgaSA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIGFkZF9zZXFfY291bnQgdGJsIGk7XG4gICAgdGJsXG5cbiAgbGV0IHRvX2xpc3QgdGJsID0gZm9sZCAoZnVuIGsgdiBsIC0+IChrLCB2KSA6OiBsKSB0YmwgW11cblxuICBsZXQgb2ZfbGlzdCBsID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IGFkZCB0YmwgayB2KSBsO1xuICAgIHRibFxuXG4gIGxldCBvZl9saXN0X3dpdGggfmYgbCA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIExpc3QuaXRlclxuICAgICAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBhZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IHJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcbiAgICAgIGw7XG4gICAgdGJsXG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpXG4gICAgICA/KHBwX2Fycm93ID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAIC0+IFwiKSBwcF9rIHBwX3YgZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4gayB2IC0+XG4gICAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICAgIHBwX2sgZm10IGs7XG4gICAgICAgIHBwX2Fycm93IGZtdCAoKTtcbiAgICAgICAgcHBfdiBmbXQgdilcbiAgICAgIG07XG4gICAgcHBfc3RvcCBmbXQgKClcbmVuZFxuIiwiKCogYmFja3BvcnQgbmV3IGZ1bmN0aW9ucyBmcm9tIHN0ZGxpYiBoZXJlICopXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIDo6IF8gLT4gLTFcbiAgfCBfIDo6IF8sIFtdIC0+IDFcbiAgfCBfIDo6IHRhaWwxLCBfIDo6IHRhaWwyIC0+IGNvbXBhcmVfbGVuZ3RocyB0YWlsMSB0YWlsMlxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCwgbiB3aXRoXG4gIHwgXyB3aGVuIG4gPCAwIC0+IDFcbiAgfCBbXSwgMCAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfIDo6IHRhaWwsIF8gLT4gY29tcGFyZV9sZW5ndGhfd2l0aCB0YWlsIChuIC0gMSlcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8ICh5LCB2KSA6OiBfIHdoZW4gU3RkbGliLiggPSApIHggeSAtPiBTb21lIHZcbiAgfCBfIDo6IHRhaWwgLT4gYXNzb2Nfb3B0IHggdGFpbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCAoeSwgdikgOjogXyB3aGVuIFN0ZGxpYi4oID09ICkgeCB5IC0+IFNvbWUgdlxuICB8IF8gOjogdGFpbCAtPiBhc3NxX29wdCB4IHRhaWxcblxuW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxuKCogZW5kIG9mIGJhY2twb3J0ICopXG5cbmluY2x1ZGUgTGlzdFxuXG5sZXQgZW1wdHkgPSBbXVxuXG5sZXQgaXNfZW1wdHkgPSBmdW5jdGlvblxuICB8IFtdIC0+IHRydWVcbiAgfCBfIDo6IF8gLT4gZmFsc2VcblxubGV0IG1ndWFyZCBjID1cbiAgaWYgYyB0aGVuXG4gICAgWyAoKSBdXG4gIGVsc2VcbiAgICBbXVxuXG4oKiogbWF4IGRlcHRoIGZvciBkaXJlY3QgcmVjdXJzaW9uICopXG5sZXQgZGlyZWN0X2RlcHRoX2RlZmF1bHRfID0gMTAwMFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgdGFpbF9tYXAgZiBsID1cbiAgKCogVW53aW5kIHRoZSBsaXN0IG9mIHR1cGxlcywgcmVjb25zdHJ1Y3RpbmcgdGhlIGZ1bGwgbGlzdCBmcm9udC10by1iYWNrLlxuICAgICBAcGFyYW0gdGFpbF9hY2MgYSBzdWZmaXggb2YgdGhlIGZpbmFsIGxpc3Q7IHdlIGFwcGVuZCB0dXBsZXMnIGNvbnRlbnRcbiAgICAgYXQgdGhlIGZyb250IG9mIGl0ICopXG4gIGxldCByZWMgcmVidWlsZCB0YWlsX2FjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiB0YWlsX2FjY1xuICAgIHwgKHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIHk2LCB5NywgeTgpIDo6IGJzIC0+XG4gICAgICByZWJ1aWxkXG4gICAgICAgICh5MCA6OiB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiB5NiA6OiB5NyA6OiB5OCA6OiB0YWlsX2FjYylcbiAgICAgICAgYnNcbiAgaW5cbiAgKCogQ3JlYXRlIGEgY29tcHJlc3NlZCByZXZlcnNlLWxpc3QgcmVwcmVzZW50YXRpb24gdXNpbmcgdHVwbGVzXG4gICAgIEBwYXJhbSB0dXBsZV9hY2MgYSByZXZlcnNlIGxpc3Qgb2YgY2h1bmtzIG1hcHBlZCB3aXRoIFtmXSAqKVxuICBsZXQgcmVjIGRpdmUgdHVwbGVfYWNjID0gZnVuY3Rpb25cbiAgICB8IHgwIDo6IHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHg2IDo6IHg3IDo6IHg4IDo6IHhzIC0+XG4gICAgICBsZXQgeTAgPSBmIHgwIGluXG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBsZXQgeTIgPSBmIHgyIGluXG4gICAgICBsZXQgeTMgPSBmIHgzIGluXG4gICAgICBsZXQgeTQgPSBmIHg0IGluXG4gICAgICBsZXQgeTUgPSBmIHg1IGluXG4gICAgICBsZXQgeTYgPSBmIHg2IGluXG4gICAgICBsZXQgeTcgPSBmIHg3IGluXG4gICAgICBsZXQgeTggPSBmIHg4IGluXG4gICAgICBkaXZlICgoeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgeTYsIHk3LCB5OCkgOjogdHVwbGVfYWNjKSB4c1xuICAgIHwgeHMgLT5cbiAgICAgICgqIFJldmVyc2UgZGlyZWN0aW9uLCBmaW5pc2hpbmcgb2ZmIHdpdGggYSBkaXJlY3QgbWFwICopXG4gICAgICBsZXQgdGFpbCA9IExpc3QubWFwIGYgeHMgaW5cbiAgICAgIHJlYnVpbGQgdGFpbCB0dXBsZV9hY2NcbiAgaW5cbiAgZGl2ZSBbXSBsXG5cbmxldCBtYXAgZiBsID1cbiAgbGV0IHJlYyBkaXJlY3QgZiBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IFsgeCBdIC0+IFsgZiB4IF1cbiAgICB8IFsgeDE7IHgyIF0gLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIFsgeTE7IGYgeDIgXVxuICAgIHwgWyB4MTsgeDI7IHgzIF0gLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIFsgeTE7IHkyOyBmIHgzIF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiB0YWlsX21hcCBmIGxcbiAgICB8IHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IGwnIC0+XG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBsZXQgeTIgPSBmIHgyIGluXG4gICAgICBsZXQgeTMgPSBmIHgzIGluXG4gICAgICBsZXQgeTQgPSBmIHg0IGluXG4gICAgICB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiBkaXJlY3QgZiAoaSAtIDEpIGwnXG4gIGluXG4gIGRpcmVjdCBmIGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsXG5cbmxldCBhcHBlbmQgbDEgbDIgPVxuICBsZXRbQGlubGluZV0gc2FmZSBsMSBsMiA9IExpc3QucmV2X2FwcGVuZCAoTGlzdC5yZXYgbDEpIGwyIGluXG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IGwyXG4gICAgfCBbIHggXSAtPiB4IDo6IGwyXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMlxuICAgIHwgeCA6OiB5IDo6IHRsMSAtPiB4IDo6IHkgOjogZGlyZWN0IChpIC0gMSkgdGwxIGwyXG4gIGluXG4gIGRpcmVjdCAxMDAwIGwxIGwyXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBtYXAgZiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IHRsIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICB4IDo6IG1hcCBmIHRsXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGFwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgfCBbXSAtPiBsMlxuICB8IHggOjogdGwxIC0+IHggOjogYXBwZW5kIHRsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbigqIFRSTUMgZnVuY3Rpb25zIG9uID49IDUuMSwgbm8gbmVlZCB0byBicmluZyBvdXIgb3duICopXG5cbltAQEBlbmRpZl1cblxuKCogV3JhcHBlciBhcm91bmQgW2FwcGVuZF0gdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlIG9mIHNob3J0IFtsMV0sXG4gICBhbmQgZm9yIHRoZSBjYXNlIG9mIFtsMiA9IFtdXSAoc2F2ZXMgdGhlIHdob2xlIGNvcHkgb2YgW2wxXSEpICopXG5sZXRbQGlubGluZV0gYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgXyAtPiBsMlxuICB8IF8sIFtdIC0+IGwxXG4gIHwgWyB4IF0sIF8gLT4geCA6OiBsMlxuICB8IHggOjogeSA6OiB0bDEsIF8gLT4geCA6OiB5IDo6IGFwcGVuZCB0bDEgbDJcblxubGV0ICggQCApID0gYXBwZW5kXG5sZXRbQGlubGluZV0gY29ucycgbCB4ID0geCA6OiBsXG5cbmxldCBjb25zX21heWJlIG8gbCA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IFNvbWUgeCAtPiB4IDo6IGxcbiAgfCBOb25lIC0+IGxcblxubGV0IGNvbnNfd2hlbiBiIHggbCA9XG4gIGlmIGIgdGhlblxuICAgIHggOjogbFxuICBlbHNlXG4gICAgbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gPSAxMF8wMDBcblxubGV0IGZpbHRlciBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBsIFtdXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IGRpcmVjdCBpIHAgbCdcbiAgICB8IHggOjogbCcgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gIGFuZCBzYWZlIHAgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IHNhZmUgcCBsJyBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSBwIGwnICh4IDo6IGFjYylcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9maWx0ZXJfIHAgbFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgZmlsdGVyIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCBrZWVwID0gZiB4IGluXG4gICAgaWYga2VlcCB0aGVuXG4gICAgICB4IDo6IGZpbHRlciBmIHRsXG4gICAgZWxzZVxuICAgICAgZmlsdGVyIGYgdGxcblxuW0BAQGVsc2VfXVxuKCogc3RkbGliJ3MgZmlsdGVyIHVzZXMgVFJNQyBhZnRlciA1LjEgKilcblxuW0BAQGVuZGlmXVxuXG5sZXQgZm9sZF9yaWdodCBmIGwgYWNjID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgZiAoTGlzdC5yZXYgbCkgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZGlyZWN0IChpIC0gMSkgZiBsJyBhY2MgaW5cbiAgICAgIGYgeCBhY2NcbiAgYW5kIHNhZmUgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIHggYWNjIGluXG4gICAgICBzYWZlIGYgbCcgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZiBsIGFjY1xuXG5sZXQgcmVjIGZvbGRfd2hpbGUgZiBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGUgOjogbCAtPlxuICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBlIGluXG4gICAgKG1hdGNoIGNvbnQgd2l0aFxuICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZSBmIGFjYyBsKVxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9vbl9tYXAgfmYgfnJlZHVjZSBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IHJlZHVjZSBhY2MgKGYgeCkgaW5cbiAgICAgIGF1eCBhY2MgbCdcbiAgaW5cbiAgYXV4IGFjYyBsXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGxfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbF9hY2NcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIHggaW5cbiAgICAgIGxldCBsX2FjYyA9IGFjYyA6OiBsX2FjYyBpblxuICAgICAgYXV4IGYgYWNjIGxfYWNjIHRhaWxcbiAgaW5cbiAgYXV4IGYgYWNjIFsgYWNjIF0gbFxuXG5sZXQgcmVkdWNlIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gU29tZSAoZm9sZF9sZWZ0IGYgeCBsKVxuXG5sZXQgcmVkdWNlX2V4biBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yZWR1Y2VfZXhuXCIpXG4gIHwgeCA6OiBsIC0+IGZvbGRfbGVmdCBmIHggbFxuXG5sZXQgZm9sZF9tYXAyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkX21hcDJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4MSB4MiBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGwxIGwyXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbigqIGtlZXAgdGhpcyBiZWNhdXNlIGl0J3MgdGFpbHJlYyBmb3IgPCA1LjEgKilcbmxldCBpbml0IGxlbiBmID1cbiAgbGV0IHJlYyBpbmRpcmVjdF8gaSBhY2MgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgaW5kaXJlY3RfIChpICsgMSkgKHggOjogYWNjKVxuICAgIClcbiAgaW5cbiAgbGV0IHJlYyBkaXJlY3RfIGkgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIGlmIGkgPCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gdGhlbiAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBkaXJlY3RfIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGluZGlyZWN0XyBpIFtdXG4gIGluXG4gIGlmIGxlbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiaW5pdFwiXG4gIGVsc2UgaWYgbGVuID0gMCB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIGRpcmVjdF8gMFxuXG5sZXQgcmVjIHVuZm9sZF9rb250IGYgc2VlZCBrID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IGsgW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPlxuICAgIGxldCBrJyB0bCA9IGsgKHYgOjogdGwpIGluXG4gICAgdW5mb2xkX2tvbnQgZiBuZXh0IGsnXG5cbmxldFtAaW5saW5lXSB1bmZvbGQgZiBzZWVkID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIHNlZWQgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHVuZm9sZF9rb250IGYgc2VlZCAoZnVuIHggLT4geClcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGYgc2VlZCB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiBkaXJlY3QgKGkgLSAxKSBmIG5leHRcbiAgICApXG4gIGluXG4gIGRpcmVjdCAxMDAgZiBzZWVkXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBpbml0XyBpIG4gZiA9XG4gICAgaWYgaSA9IG4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGluaXRfIChpICsgMSkgbiBmXG4gICAgKVxuICBpblxuICBpbml0XyAwIG4gZlxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgY29tcGFyZSBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IF8sIFtdIC0+IDFcbiAgfCBbXSwgXyAtPiAtMVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgbGV0IGMgPSBmIHgxIHgyIGluXG4gICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgIGNcbiAgICBlbHNlXG4gICAgICBjb21wYXJlIGYgbDEnIGwyJ1xuXG5sZXQgcmVjIGVxdWFsIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF8gfCBfLCBbXSAtPiBmYWxzZVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IGYgeDEgeDIgJiYgZXF1YWwgZiBsMScgbDInXG5cbltAQEBpZmx0IDUuMV1cblxubGV0IHJlYyBmbGF0X21hcF9rb250IGYgbCBrb250ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4ga29udCBbXVxuICB8IFsgeCBdIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBrb250IHhcbiAgfCB4IDo6IGwnIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBsZXQga29udCcgdGFpbCA9IGtvbnQgKGFwcGVuZCB4IHRhaWwpIGluXG4gICAgZmxhdF9tYXBfa29udCBmIGwnIGtvbnQnXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IFsgeCBdIC0+IGYgeFxuICB8IF8gOjogXyAtPiBmbGF0X21hcF9rb250IGYgbCBGdW4uaWRcblxuW0BAQGVsc2VfXVxuXG5sZXQgZmxhdF9tYXAgPSBjb25jYXRfbWFwXG5cbltAQEBlbmRpZl1cblxubGV0IGZsYXRfbWFwX2kgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwga29udCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBrb250IFtdXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgeSA9IGYgaSB4IGluXG4gICAgICBsZXQga29udCcgdGFpbCA9XG4gICAgICAgIG1hdGNoIHkgd2l0aFxuICAgICAgICB8IFtdIC0+IGtvbnQgdGFpbFxuICAgICAgICB8IFsgeCBdIC0+IGtvbnQgKHggOjogdGFpbClcbiAgICAgICAgfCBbIHg7IHkgXSAtPiBrb250ICh4IDo6IHkgOjogdGFpbClcbiAgICAgICAgfCBsIC0+IGtvbnQgKGFwcGVuZCBsIHRhaWwpXG4gICAgICBpblxuICAgICAgYXV4IGYgKGkgKyAxKSBsJyBrb250J1xuICBpblxuICBhdXggZiAwIGwgKGZ1biBsIC0+IGwpXG5cbmxldCBmbGF0dGVuIGwgPSBmb2xkX3JpZ2h0IGFwcGVuZCBsIFtdXG5cbmxldCBjb3VudCBmIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIG4geCAtPlxuICAgICAgaWYgZiB4IHRoZW5cbiAgICAgICAgc3VjYyBuXG4gICAgICBlbHNlXG4gICAgICAgIG4pXG4gICAgMCBsXG5cbmxldCBjb3VudF90cnVlX2ZhbHNlIHAgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gKG9rLCBrbykgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgb2sgKyAxLCBrb1xuICAgICAgZWxzZVxuICAgICAgICBvaywga28gKyAxKVxuICAgICgwLCAwKSBsXG5cbmxldFtAaW5saW5lXSBwcm9kdWN0IGYgbDEgbDIgPSBmbGF0X21hcCAoZnVuIHggLT4gbWFwIChmdW4geSAtPiBmIHggeSkgbDIpIGwxXG5cbmxldCBmb2xkX3Byb2R1Y3QgZiBhY2MgbDEgbDIgPVxuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gYWNjIHgxIC0+IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHgyIC0+IGYgYWNjIHgxIHgyKSBhY2MgbDIpXG4gICAgYWNjIGwxXG5cbmxldCBkaWFnb25hbCBsID1cbiAgbGV0IHJlYyBnZW4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeSAtPiAoeCwgeSkgOjogYWNjKSBhY2MgbCcgaW5cbiAgICAgIGdlbiBhY2MgbCdcbiAgaW5cbiAgZ2VuIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXBfZWl0aGVyIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgQ0NFaXRoZXIuTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgQ0NFaXRoZXIuUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX2ZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBgTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgYFJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bFxuICAgICAgfCBgRHJvcCAtPiBpdGVyIGYgbDEgbDIgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwID0gcGFydGl0aW9uX2ZpbHRlcl9tYXBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmUgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gc2FmZSBsMScgbDInIEBAICgoeDEsIHgyKSA6OiBhY2MpXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZSBsMScgbDInXG4gIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcblxuW0BAQGVuZGlmXVxuXG5sZXQgY29tYmluZV9nZW4gbDEgbDIgPVxuICBsZXQgbDEgPSByZWYgbDEgaW5cbiAgbGV0IGwyID0gcmVmIGwyIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsMSwgIWwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTm9uZVxuICAgIHwgeDEgOjogdGFpbDEsIHgyIDo6IHRhaWwyIC0+XG4gICAgICBsMSA6PSB0YWlsMTtcbiAgICAgIGwyIDo9IHRhaWwyO1xuICAgICAgU29tZSAoeDEsIHgyKVxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSAoeDEsIHgyKSA6OiBhY2MgaW5cbiAgICAgIHNhZmUgbDEnIGwyJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lX3Nob3J0ZXN0IGwxJyBsMidcblxuW0BAQGVuZGlmXVxuXG5sZXQgc3BsaXQgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IFsgKHgxLCB5MSkgXSAtPiBbIHgxIF0sIFsgeTEgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5MikgXSAtPiBbIHgxOyB4MiBdLCBbIHkxOyB5MiBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5MykgXSAtPiBbIHgxOyB4MjsgeDMgXSwgWyB5MTsgeTI7IHkzIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKTsgKHg0LCB5NCkgXSAtPlxuICAgICAgWyB4MTsgeDI7IHgzOyB4NCBdLCBbIHkxOyB5MjsgeTM7IHk0IF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzcGxpdF9zbG93IFtdIFtdIGxcbiAgICB8ICh4MSwgeTEpIDo6ICh4MiwgeTIpIDo6ICh4MywgeTMpIDo6ICh4NCwgeTQpIDo6ICh4NSwgeTUpIDo6IGwnIC0+XG4gICAgICBsZXQgcngsIHJ5ID0gZGlyZWN0IChpIC0gMSkgbCcgaW5cbiAgICAgIHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHJ4LCB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiByeVxuICBhbmQgc3BsaXRfc2xvdyBhY2MxIGFjYzIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MxLCBMaXN0LnJldiBhY2MyXG4gICAgfCAoeDEsIHgyKSA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjMSA9IHgxIDo6IGFjYzEgYW5kIGFjYzIgPSB4MiA6OiBhY2MyIGluXG4gICAgICBzcGxpdF9zbG93IGFjYzEgYWNjMiB0YWlsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgcmV0dXJuIHggPSBbIHggXVxubGV0IHB1cmUgPSByZXR1cm5cbmxldCAoIDwqPiApIGZ1bnMgbCA9IHByb2R1Y3QgKGZ1biBmIHggLT4gZiB4KSBmdW5zIGxcblxubGV0IGNhcnRlc2lhbl9wcm9kdWN0IGwgPVxuICAoKiBbbGVmdF06IGVsZW1lbnRzIHBpY2tlZCBzbyBmYXJcbiAgICAgW3JpZ2h0XTogc2V0cyB0byBwaWNrIGVsZW1lbnRzIGZyb21cbiAgICAgW2FjY106IGFjY3VtdWxhdG9yIGZvciB0aGUgcmVzdWx0LCB0byBwYXNzIHRvIGNvbnRpbnVhdGlvblxuICAgICBba106IGNvbnRpbnVhdGlvbiAqKVxuICBsZXQgcmVjIHByb2RfcmVjIGxlZnQgcmlnaHQgayBhY2MgPVxuICAgIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICB8IFtdIC0+IGsgYWNjIChMaXN0LnJldiBsZWZ0KVxuICAgIHwgbDEgOjogdGFpbCAtPlxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBwcm9kX3JlYyAoeCA6OiBsZWZ0KSB0YWlsIGsgYWNjKSBhY2MgbDFcbiAgaW5cbiAgcHJvZF9yZWMgW10gbCAoZnVuIGFjYyBsJyAtPiBsJyA6OiBhY2MpIFtdXG5cbigqIGNhcnRlc2lhbiBwcm9kdWN0IG9mIGxpc3RzIG9mIGxpc3RzICopXG5sZXQgbWFwX3Byb2R1Y3RfbCBmIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGYgbCBpblxuICBjYXJ0ZXNpYW5fcHJvZHVjdCBsXG5cbmxldCByZWMgc29ydGVkX21lbSB+Y21wIHggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgeSA6OiB0YWlsIC0+XG4gICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgIHwgMCAtPiB0cnVlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gZmFsc2VcbiAgICB8IF8gLT4gKHNvcnRlZF9tZW0gW0B0YWlsY2FsbF0pIH5jbXAgeCB0YWlsKVxuXG5sZXQgc29ydGVkX21lcmdlIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDIgOjogYWNjKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IHgyIDo6IGFjYykgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmYgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydF91bmlxIH5jbXAgbCA9IExpc3Quc29ydF91bmlxIGNtcCBsXG5cbmxldCBpc19zb3J0ZWQgfmNtcCBsID1cbiAgbGV0IHJlYyBhdXggY21wID0gZnVuY3Rpb25cbiAgICB8IFtdIHwgWyBfIF0gLT4gdHJ1ZVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIC0+IGNtcCB4IHkgPD0gMCAmJiBhdXggY21wIHRhaWxcbiAgaW5cbiAgYXV4IGNtcCBsXG5cbmxldCBzb3J0ZWRfaW5zZXJ0IH5jbXAgPyh1bmlxID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCB1bmlxIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IFsgeCBdXG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBsZXQgbCcgPVxuICAgICAgICAgIGlmIHVuaXEgdGhlblxuICAgICAgICAgICAgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggOjogbFxuICAgICAgICBpblxuICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCBsJ1xuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgKHggOjogbClcbiAgICAgIHwgXyAtPiBhdXggY21wIHVuaXEgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIHVuaXEgeCBbXSBsXG5cbmxldCBzb3J0ZWRfcmVtb3ZlIH5jbXAgPyhhbGwgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIGFsbCB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsZWZ0XG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBpZiBhbGwgdGhlblxuICAgICAgICAgIGF1eCBjbXAgYWxsIHggbGVmdCB0YWlsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCB0YWlsXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBsXG4gICAgICB8IF8gLT4gYXV4IGNtcCBhbGwgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIGFsbCB4IFtdIGxcblxubGV0IHVuaXFfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeCBdIC0+IExpc3QucmV2ICh4IDo6IGFjYylcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSB3aGVuIGVxIHggeSAtPiBmIGFjYyB0YWlsXG4gICAgfCB4IDo6IHRhaWwgLT4gZiAoeCA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgZiBbXSBsXG5cbmxldCBncm91cF9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIH5lcSBhY2MgY3VyIGwgPVxuICAgIG1hdGNoIGN1ciwgbCB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIDo6IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgIHwgW10sIHggOjogdGwgLT4gZiB+ZXEgYWNjIFsgeCBdIHRsXG4gICAgfCB5IDo6IF8sIHggOjogdGwgd2hlbiBlcSB4IHkgLT4gZiB+ZXEgYWNjICh4IDo6IGN1cikgdGxcbiAgICB8IF8sIHggOjogdGwgLT4gZiB+ZXEgKExpc3QucmV2IGN1ciA6OiBhY2MpIFsgeCBdIHRsXG4gIGluXG4gIGYgfmVxIFtdIFtdIGxcblxubGV0IHNvcnRlZF9tZXJnZV91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDIpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICgqIGRyb3Agb25lIG9mIHRoZSBbeF0gKilcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZl91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlIG4gbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBuIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSAobiAtIDEpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIG4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIHdoZW4gbiA9IDAgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgKG4gLSAxKSAoeCA6OiBhY2MpIGwnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbiBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZSBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBuID4gMCB0aGVuXG4gICAgICB4IDo6IHRha2UgKG4gLSAxKSBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgXyB3aGVuIG4gPSAwIC0+IGxcbiAgfCBfIDo6IGwnIC0+IGRyb3AgKG4gLSAxKSBsJ1xuXG5sZXQgaGRfdGwgPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhaWx3aXRoIFwiaGRfdGxcIlxuICB8IHggOjogbCAtPiB4LCBsXG5cbmxldCB0YWtlX2Ryb3AgbiBsID0gdGFrZSBuIGwsIGRyb3AgbiBsXG5cbmxldCBzdWJsaXN0c19vZl9sZW4gPyhsYXN0ID0gZnVuIF8gLT4gTm9uZSkgP29mZnNldCBuIGwgPVxuICBpZiBuIDwgMSB0aGVuIGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBuIG11c3QgYmUgPiAwXCI7XG4gIGxldCBvZmZzZXQgPVxuICAgIG1hdGNoIG9mZnNldCB3aXRoXG4gICAgfCBOb25lIC0+IG5cbiAgICB8IFNvbWUgbyB3aGVuIG8gPCAxIC0+IGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBvZmZzZXQgbXVzdCBiZSA+IDBcIlxuICAgIHwgU29tZSBvIC0+IG9cbiAgaW5cbiAgKCogYWRkIHN1Yi1saXN0cyBvZiBbbF0gdG8gW2FjY10gKilcbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIGxldCBncm91cCA9IHRha2UgbiBsIGluXG4gICAgaWYgaXNfZW1wdHkgZ3JvdXAgdGhlblxuICAgICAgYWNjXG4gICAgKCogdGhpcyB3YXMgdGhlIGxhc3QgZ3JvdXAsIHdlIGFyZSBkb25lICopXG4gICAgZWxzZSBpZiBMaXN0Lmxlbmd0aCBncm91cCA8IG4gKCogbGFzdCBncm91cCwgd2l0aCBtaXNzaW5nIGVsZW1lbnRzICopIHRoZW4gKFxuICAgICAgbWF0Y2ggbGFzdCBncm91cCB3aXRoXG4gICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICB8IFNvbWUgZ3JvdXAnIC0+IGdyb3VwJyA6OiBhY2NcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGwnID0gZHJvcCBvZmZzZXQgbCBpblxuICAgICAgYXV4IChncm91cCA6OiBhY2MpIGwnICgqIGNvbnRpbnVlICopXG4gICAgKVxuICBpblxuICBMaXN0LnJldiAoYXV4IFtdIGwpXG5cbmxldCBjaHVua3MgbiBsID0gc3VibGlzdHNfb2ZfbGVuIH5sYXN0OihmdW4geCAtPiBTb21lIHgpIG4gbFxuXG5sZXQgaW50ZXJzcGVyc2UgeCBsID1cbiAgbGV0IHJlYyBhdXhfZGlyZWN0IGkgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIF8gXSAtPiBsXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gYXV4X3RhaWxyZWMgW10geCBsXG4gICAgfCB5IDo6IHRhaWwgLT4geSA6OiB4IDo6IGF1eF9kaXJlY3QgKGkgLSAxKSB4IHRhaWxcbiAgYW5kIGF1eF90YWlscmVjIGFjYyB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHkgXSAtPiBMaXN0LnJldiAoeSA6OiBhY2MpXG4gICAgfCB5IDo6IHRhaWwgLT4gYXV4X3RhaWxyZWMgKHggOjogeSA6OiBhY2MpIHggdGFpbFxuICBpblxuICBhdXhfZGlyZWN0IDFfMDAwIHggbFxuXG5sZXQgaW50ZXJsZWF2ZSBsMSBsMiA6IF8gbGlzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKVxuICAgIHwgXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMSBhY2MpXG4gICAgfCB4MSA6OiB0bDEsIHgyIDo6IHRsMiAtPiBhdXggKHgyIDo6IHgxIDo6IGFjYykgdGwxIHRsMlxuICBpblxuICBhdXggW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2Vfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICB4IDo6IHRha2Vfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICBkcm9wX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBsXG5cbmxldCB0YWtlX2Ryb3Bfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW4gKFxuICAgICAgICBsZXQgbDEsIGwyID0gZGlyZWN0IChpIC0gMSkgcCB0YWlsIGluXG4gICAgICAgIHggOjogbDEsIGwyXG4gICAgICApIGVsc2VcbiAgICAgICAgW10sIGxcbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MsIFtdXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIHRhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbmxldCBsYXN0IG4gbCA9XG4gIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IG4gdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIGRyb3AgKGxlbiAtIG4pIGxcblxubGV0IGhlYWRfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuXG5sZXQgdGFpbF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBfIDo6IHRhaWwgLT4gU29tZSB0YWlsXG5cbmxldCByZWMgbGFzdF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBbIHggXSAtPiBTb21lIHhcbiAgfCBfIDo6IHRhaWwgLT4gbGFzdF9vcHQgdGFpbFxuXG5sZXQgZmluZF9wcmVkID0gZmluZF9vcHRcblxubGV0IGZpbmRfcHJlZF9leG4gcCBsID1cbiAgbWF0Y2ggZmluZF9wcmVkIHAgbCB3aXRoXG4gIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBTb21lIHggLT4geFxuXG5sZXQgZmluZF9tYXBpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiBpIHggd2l0aFxuICAgICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBOb25lIC0+IGF1eCBmIChpICsgMSkgbCcpXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgZmluZF9tYXAgZiBsID0gZmluZF9tYXBpIChmdW4gXyAtPiBmKSBsXG5cbmxldCBmaW5kX2lkeCBwIGwgPVxuICBmaW5kX21hcGlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBsXG5cbmxldCByZW1vdmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlJyBlcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeSA6OiB0YWlsIHdoZW4gZXEgeCB5IC0+IHJlbW92ZScgZXEgeCBhY2MgdGFpbFxuICAgIHwgeSA6OiB0YWlsIC0+IHJlbW92ZScgZXEgeCAoeSA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgcmVtb3ZlJyBlcSB4IFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyByZWN1cnNlIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYycgPVxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICAgIHwgU29tZSB5IC0+IHkgOjogYWNjXG4gICAgICBpblxuICAgICAgcmVjdXJzZSBhY2MnIGwnXG4gIGluXG4gIHJlY3Vyc2UgW10gbFxuXG5sZXQga2VlcF9zb21lIGwgPSBmaWx0ZXJfbWFwIChmdW4geCAtPiB4KSBsXG5cbmxldCBrZWVwX29rIGwgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1bmN0aW9uXG4gICAgICB8IE9rIHggLT4gU29tZSB4XG4gICAgICB8IEVycm9yIF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBhbGxfc29tZSBsID1cbiAgdHJ5XG4gICAgU29tZVxuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgU29tZSB4IC0+IHhcbiAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgYWxsX29rIGwgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgT2tcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IE9rIHggLT4geFxuICAgICAgICAgICB8IEVycm9yIGUgLT5cbiAgICAgICAgICAgICBlcnIgOj0gU29tZSBlO1xuICAgICAgICAgICAgIHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBlIC0+IEVycm9yIGUpXG5cbmxldCBncm91cF9ieSAodHlwZSBrKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpID8oZXEgPSBTdGRsaWIuKCA9ICkpIGwgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0ga1xuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICAoKiBjb21wdXRlIGdyb3VwIHRhYmxlICopXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGwgPSB0cnkgVGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIFRibC5yZXBsYWNlIHRibCB4ICh4IDo6IGwpKVxuICAgIGw7XG4gIFRibC5mb2xkIChmdW4gXyB4IGFjYyAtPiB4IDo6IGFjYykgdGJsIFtdXG5cbmxldCBqb2luIH5qb2luX3JvdyBzMSBzMiA6IF8gdCA9XG4gIGZsYXRfbWFwIChmdW4gYSAtPiBmaWx0ZXJfbWFwIChqb2luX3JvdyBhKSBzMikgczFcblxubGV0IGpvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMiB+bWVyZ2UgYzFcbiAgICBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIFRibC5hZGQgdGJsIGtleSB4KVxuICAgIGMxO1xuICBsZXQgcmVzID0gcmVmIFtdIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIGxldCB4cyA9IFRibC5maW5kX2FsbCB0Ymwga2V5IGluXG4gICAgICBMaXN0Lml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggbWVyZ2Uga2V5IHggeSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHogLT4gcmVzIDo9IHogOjogIXJlcylcbiAgICAgICAgeHMpXG4gICAgYzI7XG4gICFyZXNcblxudHlwZSAoJ2EsICdiKSBqb2luX2FsbF9jZWxsID0ge1xuICBtdXRhYmxlIGphX2xlZnQ6ICdhIGxpc3Q7XG4gIG11dGFibGUgamFfcmlnaHQ6ICdiIGxpc3Q7XG59XG5cbmxldCBqb2luX2FsbF9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyXG4gICAgfm1lcmdlIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgKCogYnVpbGQgdGhlIG1hcCBba2V5IC0+IGNlbGxdICopXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9sZWZ0IDwtIHggOjogYy5qYV9sZWZ0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gWyB4IF07IGphX3JpZ2h0ID0gW10gfSlcbiAgICBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX3JpZ2h0IDwtIHkgOjogYy5qYV9yaWdodFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFtdOyBqYV9yaWdodCA9IFsgeSBdIH0pXG4gICAgYzI7XG4gIFRibC5mb2xkXG4gICAgKGZ1biBrZXkgY2VsbCByZXMgLT5cbiAgICAgIG1hdGNoIG1lcmdlIGtleSBjZWxsLmphX2xlZnQgY2VsbC5qYV9yaWdodCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmVzXG4gICAgICB8IFNvbWUgeiAtPiB6IDo6IHJlcylcbiAgICB0YmwgW11cblxubGV0IGdyb3VwX2pvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyIChmdW4geCAtPiBUYmwucmVwbGFjZSB0YmwgeCBbXSkgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgKCogcHJvamVjdCBbeV0gaW50byBzb21lIGVsZW1lbnQgb2YgW2MxXSAqKVxuICAgICAgbGV0IGtleSA9IGYgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBUYmwucmVwbGFjZSB0Ymwga2V5ICh5IDo6IGwpXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKSlcbiAgICBjMjtcbiAgVGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgbGV0IHJlYyBzZWFyY2ggZXEgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhbHNlXG4gICAgfCB5IDo6IGwnIC0+IGVxIHggeSB8fCBzZWFyY2ggZXEgeCBsJ1xuICBpblxuICBzZWFyY2ggZXEgeCBsXG5cbmxldCBhZGRfbm9kdXAgfmVxIHggbCA9XG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICB4IDo6IGxcblxubGV0IHJlbW92ZV9vbmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlX29uZSB+ZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IHkgOjogdGwgd2hlbiBlcSB4IHkgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyB0bFxuICAgIHwgeSA6OiB0bCAtPiByZW1vdmVfb25lIH5lcSB4ICh5IDo6IGFjYykgdGxcbiAgaW5cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIHJlbW92ZV9vbmUgfmVxIHggW10gbFxuICBlbHNlXG4gICAgbFxuXG5sZXQgc3Vic2V0IH5lcSBsMSBsMiA9IExpc3QuZm9yX2FsbCAoZnVuIHQgLT4gbWVtIH5lcSB0IGwyKSBsMVxuXG5sZXQgdW5pcSB+ZXEgbCA9XG4gIGxldCByZWMgdW5pcSBlcSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBMaXN0LmV4aXN0cyAoZXEgeCkgeHMgLT4gdW5pcSBlcSBhY2MgeHNcbiAgICB8IHggOjogeHMgLT4gdW5pcSBlcSAoeCA6OiBhY2MpIHhzXG4gIGluXG4gIHVuaXEgZXEgW10gbFxuXG5sZXQgdW5pb24gfmVxIGwxIGwyID1cbiAgbGV0IHJlYyB1bmlvbiBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gdW5pb24gZXEgYWNjIHhzIGwyXG4gICAgfCB4IDo6IHhzIC0+IHVuaW9uIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgaW5cbiAgdW5pb24gZXEgW10gbDEgbDJcblxubGV0IGludGVyIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgaW50ZXIgZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gaW50ZXIgZXEgKHggOjogYWNjKSB4cyBsMlxuICAgIHwgXyA6OiB4cyAtPiBpbnRlciBlcSBhY2MgeHMgbDJcbiAgaW5cbiAgaW50ZXIgZXEgW10gbDEgbDJcblxubGV0IG1hcGkgZiBsID1cbiAgbGV0IHIgPSByZWYgMCBpblxuICBtYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCB5ID0gZiAhciB4IGluXG4gICAgICBpbmNyIHI7XG4gICAgICB5KVxuICAgIGxcblxubGV0IGl0ZXJpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+ICgpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBmIGkgeDtcbiAgICAgIGF1eCBmIChpICsgMSkgbCdcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBpdGVyaTIgZiBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiAoKVxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcIml0ZXJpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgZiBpIHgxIHgyO1xuICAgICAgYXV4IGYgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIDAgbDEgbDJcblxubGV0IGZvbGRpIGYgYWNjIGwgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHggaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbCdcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsXG5cbmxldCBmb2xkaTIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZGkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4MSB4MiBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbDEgbDJcblxubGV0IHJlYyBnZXRfYXRfaWR4X3JlYyBpIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IF8gd2hlbiBpID0gMCAtPiB4XG4gIHwgXyA6OiBsJyAtPiBnZXRfYXRfaWR4X3JlYyAoaSAtIDEpIGwnXG5cbmxldCBnZXRfYXRfaWR4X2V4biBpIGwgPVxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBnZXRfYXRfaWR4X3JlYyBpIGxcblxubGV0IGdldF9hdF9pZHggaSBsID0gdHJ5IFNvbWUgKGdldF9hdF9pZHhfZXhuIGkgbCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgc2V0X2F0X2lkeCBpIHggbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IGluc2VydF9hdF9pZHggaSB4IGwgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBbIHggXVxuICAgIHwgeSA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogeSA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKSB4XG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsIFtdIGkgeFxuXG5sZXQgcmVtb3ZlX2F0X2lkeCBpIGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbCdcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICByYW5nZSBpIChqIC0gc3RlcCkgKGogOjogYWNjKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIFtdXG5cbmxldCByYW5nZSBpIGogPVxuICBsZXQgcmVjIHVwIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgdXAgaSAoaiAtIDEpIChqIDo6IGFjYylcbiAgYW5kIGRvd24gaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICBkb3duIGkgKGogKyAxKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIFtdXG4gIGVsc2VcbiAgICBkb3duIGkgaiBbXVxuXG5sZXQgcmFuZ2UnIGkgaiA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSlcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKVxuXG5sZXQgKCAtLSApID0gcmFuZ2VcbmxldCAoIC0tXiApID0gcmFuZ2UnXG5cbmxldCByZXBsaWNhdGUgaSB4ID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoeCA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubGV0IHJlcGVhdCBpIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChMaXN0LnJldl9hcHBlbmQgbCBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubW9kdWxlIEFzc29jID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdCA9ICgnYSAqICdiKSBsaXN0XG5cbiAgbGV0IHJlYyBzZWFyY2hfZXhuIGVxIGwgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8ICh5LCB6KSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB5IHRoZW5cbiAgICAgICAgelxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfZXhuIGVxIGwnIHhcblxuICBsZXQgZ2V0X2V4biB+ZXEgeCBsID0gc2VhcmNoX2V4biBlcSBsIHhcbiAgbGV0IGdldCB+ZXEgeCBsID0gdHJ5IFNvbWUgKHNlYXJjaF9leG4gZXEgbCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgKCogc2VhcmNoIGZvciBhIGJpbmRpbmcgZm9yIFt4XSBpbiBbbF0sIGFuZCBjYWxscyBbZiB4IChTb21lIHYpIHJlc3RdXG4gICAgIG9yIFtmIHggTm9uZSByZXN0XSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBmaW5kcyB0aGUgYmluZGluZy5cbiAgICAgW3Jlc3RdIGlzIHRoZSBsaXN0IG9mIHRoZSBvdGhlciBiaW5kaW5ncyAqKVxuICBsZXQgcmVjIHNlYXJjaF9zZXQgZXEgYWNjIGwgeCB+ZiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmIHggTm9uZSBhY2NcbiAgICB8ICh4JywgeScpIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHgnIHRoZW5cbiAgICAgICAgZiB4IChTb21lIHknKSAoTGlzdC5yZXZfYXBwZW5kIGFjYyBsJylcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX3NldCBlcSAoKHgnLCB5JykgOjogYWNjKSBsJyB4IH5mXG5cbiAgbGV0IHNldCB+ZXEgeCB5IGwgPSBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggXyBsIC0+ICh4LCB5KSA6OiBsKVxuXG4gIGxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgICB0cnlcbiAgICAgIGlnbm9yZSAoc2VhcmNoX2V4biBlcSBsIHgpO1xuICAgICAgdHJ1ZVxuICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbiAgbGV0IHVwZGF0ZSB+ZXEgZiB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIGYgb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmVzdCAoKiBkcm9wICopXG4gICAgICAgIHwgU29tZSB5JyAtPiAoeCwgeScpIDo6IHJlc3QpXG5cbiAgbGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIF8gb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBsICgqIGtlZXAgYXMgaXMgKilcbiAgICAgICAgfCBTb21lIF8gLT4gcmVzdClcblxuICBsZXQga2V5cyBsID0gbWFwIChmdW4gKGssIF8pIC0+IGspIGxcbiAgbGV0IHZhbHVlcyBsID0gbWFwIChmdW4gKF8sIHYpIC0+IHYpIGxcbiAgbGV0IG1hcF92YWx1ZXMgZiBsID0gbWFwIChmdW4gKGssIHYpIC0+IGssIGYgdikgbFxuZW5kXG5cbmxldCBhc3NvYyA9IEFzc29jLmdldF9leG5cbmxldCBhc3NvY19vcHQgPSBBc3NvYy5nZXRcbmxldCBtZW1fYXNzb2MgPSBBc3NvYy5tZW1cbmxldCByZW1vdmVfYXNzb2MgPSBBc3NvYy5yZW1vdmVcblxuKCoqIHsyIFJlZmVyZW5jZXMgb24gTGlzdHN9ICopXG5cbm1vZHVsZSBSZWYgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgbGlzdCByZWZcblxuICBsZXQgcHVzaCBsIHggPSBsIDo9IHggOjogIWxcblxuICBsZXQgcG9wIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgU29tZSB4XG5cbiAgbGV0IHBvcF9leG4gbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJDQ0xpc3QuUmVmLnBvcF9leG5cIlxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICB4XG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiBbXVxuICBsZXQgY2xlYXIgbCA9IGwgOj0gW11cbiAgbGV0IGxpZnQgZiBsID0gZiAhbFxuICBsZXQgcHVzaF9saXN0IHIgbCA9IHIgOj0gTGlzdC5yZXZfYXBwZW5kIGwgIXJcbmVuZFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIG9wZW4gTVxuXG4gIGxldCBtYXBfbSBmIGwgPVxuICAgIGxldCByZWMgYXV4IGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IHJldHVybiAoTGlzdC5yZXYgYWNjKVxuICAgICAgfCB4IDo6IHRhaWwgLT4gZiB4ID4+PSBmdW4geCcgLT4gYXV4IGYgKHgnIDo6IGFjYykgdGFpbFxuICAgIGluXG4gICAgYXV4IGYgW10gbFxuXG4gIGxldCByZWMgbWFwX21fcGFyIGYgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBNLnJldHVybiBbXVxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgbGV0IHgnID0gZiB4IGluXG4gICAgICBsZXQgdGwnID0gbWFwX21fcGFyIGYgdGwgaW5cbiAgICAgIHgnID4+PSBmdW4geCcgLT5cbiAgICAgIHRsJyA+Pj0gZnVuIHRsJyAtPiBNLnJldHVybiAoeCcgOjogdGwnKVxuXG4gIGxldCBzZXF1ZW5jZV9tIGwgPSBtYXBfbSAoZnVuIHggLT4geCkgbFxuXG4gIGxldCByZWMgZm9sZF9tIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmV0dXJuIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBmIGFjYyB4ID4+PSBmdW4gYWNjJyAtPiBmb2xkX20gZiBhY2MnIGwnXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tX2xlbiBsZW4gZyBzdCA9IGluaXQgbGVuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbGVuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbGVuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX2Nob29zZSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgXyA6OiBfIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBmdW4gc3QgLT5cbiAgICAgIGxldCBpID0gUmFuZG9tLlN0YXRlLmludCBzdCBsZW4gaW5cbiAgICAgIExpc3QubnRoIGwgaVxuXG5sZXQgcmFuZG9tX3NlcXVlbmNlIGwgc3QgPSBtYXAgKGZ1biBnIC0+IGcgc3QpIGxcblxubGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIGwgaW5cbiAgc3RhcnQgXiBTdHJpbmcuY29uY2F0IHNlcCBsIF4gc3RvcFxuXG5sZXQgdG9faXRlciBsIGsgPSBMaXN0Lml0ZXIgayBsXG5cbmxldCByZWMgdG9fc2VxIGwgKCkgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBTZXEuTmlsXG4gIHwgeCA6OiB0bCAtPiBTZXEuQ29ucyAoeCwgdG9fc2VxIHRsKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgaSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX3NlcV9yZXYgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgcyA9XG4gICAgbWF0Y2ggcyAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGFjY1xuICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiBsb29wICh4IDo6IGFjYykgdGxcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9zZXEgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgc2VxID1cbiAgICBpZiBpIDw9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgKG9mX3NlcV9yZXYgc2VxKVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IHggOjogZGlyZWN0IChpIC0gMSkgdGxcbiAgICApXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5bQEBAZW5kaWZdXG5cbmxldCB0b19nZW4gbCA9XG4gIGxldCBsID0gcmVmIGwgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbCA6PSBsJztcbiAgICAgIFNvbWUgeFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGcgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHNhZmUgW10gZ1xuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSB4IC0+IHggOjogZGlyZWN0IChpIC0gMSkgZ1xuICAgIClcbiAgYW5kIHNhZmUgYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgeCAtPiBzYWZlICh4IDo6IGFjYykgZ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGdcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9nZW4gZyA9XG4gIG1hdGNoIGcgKCkgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4geCA6OiBvZl9nZW4gZ1xuXG5bQEBAZW5kaWZdXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXRbQGlubGluZV0gKCA+fD0gKSBsIGYgPSBtYXAgZiBsXG4gIGxldFtAaW5saW5lXSAoID4+PSApIGwgZiA9IGZsYXRfbWFwIGYgbFxuICBsZXQgKCBAICkgPSAoIEAgKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBsMSBsMiA9IHByb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgbDEgbDJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggYW5kJiApID0gY29tYmluZV9zaG9ydGVzdFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX2l0ZW0gZm10IGwgPVxuICBsZXQgcmVjIHByaW50IGZtdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHBfaXRlbSBmbXQgeDtcbiAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICBwcmludCBmbXQgbFxuICAgIHwgWyB4IF0gLT4gcHBfaXRlbSBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfc3RhcnQgZm10ICgpO1xuICBwcmludCBmbXQgbDtcbiAgcHBfc3RvcCBmbXQgKClcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBPcHRpb25zfSAqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb25cblxubGV0W0BpbmxpbmVdIG1hcCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgbWFwX29yIH5kZWZhdWx0IGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IG1hcF9sYXp5IGRlZmF1bHRfZm4gZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBpc19ub25lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiAwXG4gIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgZXF1YWwgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfLCBOb25lIHwgTm9uZSwgU29tZSBfIC0+IGZhbHNlXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IHJldHVybiB4ID0gU29tZSB4XG5sZXQgc29tZSA9IHJldHVyblxubGV0IG5vbmUgPSBOb25lXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBmbGF0X21hcF9sIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBiaW5kIG8gZiA9IGZsYXRfbWFwIGYgb1xubGV0ICggPj49ICkgPSBiaW5kXG5sZXQgcHVyZSB4ID0gU29tZSB4XG5sZXQga19jb21wb3NlIGYgZyB4ID0gZiB4IHw+IGZsYXRfbWFwIGdcbmxldCAoID49PiApID0ga19jb21wb3NlXG5sZXQgKCA8PTwgKSBmIGcgPSBnID49PiBmXG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYsIHggd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIGYsIFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBvcl8gfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfXG4gIHwgU29tZSBfIC0+IGFcblxubGV0IG9yX2xhenkgfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfICgpXG4gIHwgU29tZSBfIC0+IGFcblxubGV0ICggPCs+ICkgYSBiID0gb3JfIH5lbHNlXzpiIGFcbmxldCBjaG9pY2UgbCA9IExpc3QuZm9sZF9sZWZ0ICggPCs+ICkgTm9uZSBsXG5cbmxldCBtYXAyIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lIChmIHggeSlcblxubGV0IGZpbHRlciBwID0gZnVuY3Rpb25cbiAgfCBTb21lIHggYXMgbyB3aGVuIHAgeCAtPiBvXG4gIHwgXyAtPiBOb25lXG5cbmxldCBpZl8gcCB4ID1cbiAgaWYgcCB4IHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBpdGVyIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBmb2xkIGYgYWNjIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGFjY1xuICB8IFNvbWUgeCAtPiBmIGFjYyB4XG5cbmxldCBnZXRfb3IgfmRlZmF1bHQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBhcHBseV9vciBmIHggPVxuICBtYXRjaCBmIHggd2l0aFxuICB8IE5vbmUgLT4geFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCAoIHw/PiApIHggZiA9IGFwcGx5X29yIGYgeFxuXG5sZXQgdmFsdWUgeCB+ZGVmYXVsdCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ09wdGlvbi5nZXRfZXhuXCJcblxubGV0IGdldF9leG5fb3IgbXNnID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgbXNnXG5cbmxldCBnZXRfbGF6eSBkZWZhdWx0X2ZuIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IGRlZmF1bHRfZm4gKClcbiAgfCBTb21lIHkgLT4geVxuXG5sZXQgc2VxdWVuY2VfbCBsID1cbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gU29tZSAoTGlzdC5yZXYgYWNjKVxuICAgIHwgU29tZSB4IDo6IGwnIC0+IGF1eCAoeCA6OiBhY2MpIGwnXG4gICAgfCBOb25lIDo6IF8gLT4gcmFpc2UgRXhpdFxuICBpblxuICB0cnkgYXV4IFtdIGwgd2l0aCBFeGl0IC0+IE5vbmVcblxubGV0IHdyYXAgPyhoYW5kbGVyID0gZnVuIF8gLT4gdHJ1ZSkgZiB4ID1cbiAgdHJ5IFNvbWUgKGYgeClcbiAgd2l0aCBlIC0+XG4gICAgaWYgaGFuZGxlciBlIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICByYWlzZSBlXG5cbmxldCB3cmFwMiA/KGhhbmRsZXIgPSBmdW4gXyAtPiB0cnVlKSBmIHggeSA9XG4gIHRyeSBTb21lIChmIHggeSlcbiAgd2l0aCBlIC0+XG4gICAgaWYgaGFuZGxlciBlIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICByYWlzZSBlXG5cbmxldCB0b19saXN0IG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSB4IC0+IFsgeCBdXG5cbmxldCBvZl9saXN0ID0gZnVuY3Rpb25cbiAgfCB4IDo6IF8gLT4gU29tZSB4XG4gIHwgW10gLT4gTm9uZVxuXG5sZXQgdG9fcmVzdWx0IGVyciA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBFcnJvciBlcnJcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgdG9fcmVzdWx0X2xhenkgZXJyX2ZuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIChlcnJfZm4gKCkpXG4gIHwgU29tZSB4IC0+IE9rIHhcblxubGV0IG9mX3Jlc3VsdCA9IGZ1bmN0aW9uXG4gIHwgRXJyb3IgXyAtPiBOb25lXG4gIHwgT2sgeCAtPiBTb21lIHhcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID58PSApIHggZiA9IG1hcCBmIHhcbiAgbGV0ICggPj49ICkgPSAoID4+PSApXG4gIGxldCAoIDwqPiApID0gKCA8Kj4gKVxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCA8Kz4gKSA9ICggPCs+IClcbiAgbGV0ICggfD8+ICkgPSAoIHw/PiApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0ICggbGV0KiApID0gKCA+Pj0gKVxuXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBvMSBvMiA9XG4gICAgbWF0Y2ggbzEsIG8yIHdpdGhcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+IFNvbWUgKHgsIHkpXG4gICAgfCBfIC0+IE5vbmVcblxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuICBsZXQgKCA+PT4gKSA9ICggPj0+IClcbiAgbGV0ICggPD08ICkgPSAoIDw9PCApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBpZiBSYW5kb20uU3RhdGUuYm9vbCBzdCB0aGVuXG4gICAgU29tZSAoZyBzdClcbiAgZWxzZVxuICAgIE5vbmVcblxuZXhjZXB0aW9uIEV4aXRDaG9pY2VcblxubGV0IGNob2ljZV9pdGVyIHMgPVxuICBsZXQgciA9IHJlZiBOb25lIGluXG4gICh0cnlcbiAgICAgcyAoZnVuY3Rpb25cbiAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICB8IFNvbWUgXyBhcyBvIC0+XG4gICAgICAgICByIDo9IG87XG4gICAgICAgICByYWlzZSBFeGl0Q2hvaWNlKVxuICAgd2l0aCBFeGl0Q2hvaWNlIC0+ICgpKTtcbiAgIXJcblxubGV0IHJlYyBjaG9pY2Vfc2VxIHMgPVxuICBtYXRjaCBzICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+IE5vbmVcbiAgfCBTZXEuQ29ucyAoU29tZSB4LCBfKSAtPiBTb21lIHhcbiAgfCBTZXEuQ29ucyAoTm9uZSwgdGwpIC0+IGNob2ljZV9zZXEgdGxcblxubGV0IHRvX2dlbiBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBmdW4gKCkgLT4gTm9uZVxuICB8IFNvbWUgXyAtPlxuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgZnVuICgpIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlO1xuICAgICAgICBvXG4gICAgICApIGVsc2VcbiAgICAgICAgTm9uZVxuXG5sZXQgdG9faXRlciBvIGsgPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB4IC0+IGsgeFxuXG5sZXQgdG9fc2VxIG8gKCkgPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IFNlcS5OaWxcbiAgfCBTb21lIHggLT4gU2VxLkNvbnMgKHgsIFNlcS5lbXB0eSlcblxubGV0IHBwIHBweCBvdXQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJOb25lXCJcbiAgfCBTb21lIHggLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiQFtTb21lICVhQF1cIiBwcHggeFxuXG5sZXQgZmxhdHRlbiA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHhcbiAgfCBOb25lIC0+IE5vbmVcblxubGV0IHJldHVybl9pZiBiIHggPVxuICBpZiBiIHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBSYW5kb20gR2VuZXJhdG9yc30gKilcblxuaW5jbHVkZSBSYW5kb21cblxudHlwZSBzdGF0ZSA9IFJhbmRvbS5TdGF0ZS50XG50eXBlICdhIHQgPSBzdGF0ZSAtPiAnYVxudHlwZSAnYSByYW5kb21fZ2VuID0gJ2EgdFxuXG5sZXQgcmV0dXJuIHggX3N0ID0geFxubGV0IGZsYXRfbWFwIGYgZyBzdCA9IGYgKGcgc3QpIHN0XG5sZXQgKCA+Pj0gKSBnIGYgc3QgPSBmbGF0X21hcCBmIGcgc3RcbmxldCBtYXAgZiBnIHN0ID0gZiAoZyBzdClcbmxldCAoID58PSApIGcgZiBzdCA9IG1hcCBmIGcgc3RcbmxldCBkZWxheSBmIHN0ID0gZiAoKSBzdFxuXG5sZXQgX2Nob29zZV9hcnJheSBhIHN0ID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1JhbmRvbS5jaG9vc2VfYXJyYXlcIjtcbiAgYS4oUmFuZG9tLlN0YXRlLmludCBzdCAoQXJyYXkubGVuZ3RoIGEpKVxuXG5sZXQgY2hvb3NlX2FycmF5IGEgc3QgPVxuICB0cnkgU29tZSAoX2Nob29zZV9hcnJheSBhIHN0IHN0KSB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiBOb25lXG5cbmxldCBjaG9vc2UgbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIGNob29zZV9hcnJheSBhXG5cbmxldCBjaG9vc2VfZXhuIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBmdW4gc3QgLT4gX2Nob29zZV9hcnJheSBhIHN0IHN0XG5cbmxldCBjaG9vc2VfcmV0dXJuIGwgPSBfY2hvb3NlX2FycmF5IChBcnJheS5vZl9saXN0IGwpXG5cbmV4Y2VwdGlvbiBQaWNrX2Zyb21fZW1wdHlcblxubGV0IHBpY2tfbGlzdCBsID1cbiAgbGV0IG4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIG4gPSAwIHRoZW4gcmFpc2UgUGlja19mcm9tX2VtcHR5O1xuICBmdW4gc3QgLT4gTGlzdC5udGggbCAoUmFuZG9tLlN0YXRlLmludCBzdCBuKVxuXG5sZXQgcGlja19hcnJheSBhID1cbiAgbGV0IG4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBuID0gMCB0aGVuIHJhaXNlIFBpY2tfZnJvbV9lbXB0eTtcbiAgZnVuIHN0IC0+IEFycmF5LmdldCBhIChSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCBpbnQgaSBzdCA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgaVxubGV0IHNtYWxsX2ludCA9IGludCAxMDBcbmxldCBpbnRfcmFuZ2UgaSBqIHN0ID0gaSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgKGogLSBpICsgMSlcbmxldCBmbG9hdCBmIHN0ID0gUmFuZG9tLlN0YXRlLmZsb2F0IHN0IGZcbmxldCBzbWFsbF9mbG9hdCA9IGZsb2F0IDEwMC4wXG5sZXQgZmxvYXRfcmFuZ2UgaSBqIHN0ID0gaSArLiBSYW5kb20uU3RhdGUuZmxvYXQgc3QgKGogLS4gaSlcblxuKCogVE9ETzogc2FtcGxlIGZ1bmN0aW9ucyAqKVxuXG5sZXQgcmVwbGljYXRlIG4gZyBzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBuID1cbiAgICBpZiBuID0gMCB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKGcgc3QgOjogYWNjKSAobiAtIDEpXG4gIGluXG4gIGF1eCBbXSBuXG5cbigqIFNhbXBsZSB3aXRob3V0IHJlcGxhY2VtZW50IHVzaW5nIHJlamVjdGlvbiBzYW1wbGluZy4gKilcbmxldCBzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzICh0eXBlIGVsdCkgfmNtcCBrIChybmcgOiBlbHQgdCkgc3QgPVxuICBsZXQgbW9kdWxlIFMgPSBTZXQuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0gZWx0XG5cbiAgICBsZXQgY29tcGFyZSA9IGNtcFxuICBlbmQpIGluXG4gIGxldCByZWMgYXV4IHMgayA9XG4gICAgaWYgayA8PSAwIHRoZW5cbiAgICAgIFMuZWxlbWVudHMgc1xuICAgIGVsc2UgKFxuICAgICAgbGV0IHggPSBybmcgc3QgaW5cbiAgICAgIGlmIFMubWVtIHggcyB0aGVuXG4gICAgICAgIGF1eCBzIGtcbiAgICAgIGVsc2VcbiAgICAgICAgYXV4IChTLmFkZCB4IHMpIChrIC0gMSlcbiAgICApXG4gIGluXG4gIGlmIGsgPD0gMCB0aGVuIGludmFsaWRfYXJnIFwic2FtcGxlX3dpdGhvdXRfZHVwbGljYXRlc1wiO1xuICBhdXggUy5lbXB0eSBrXG5cbmxldCBsaXN0X3NlcSBsIHN0ID0gTGlzdC5tYXAgKGZ1biBmIC0+IGYgc3QpIGxcblxubGV0IHNwbGl0IGkgc3QgPVxuICBpZiBpIDwgMiB0aGVuXG4gICAgTm9uZVxuICBlbHNlIChcbiAgICBsZXQgaiA9IDEgKyBSYW5kb20uU3RhdGUuaW50IHN0IChpIC0gMSkgaW5cbiAgICBTb21lIChqLCBpIC0gailcbiAgKVxuXG5sZXQgX2RpZmZfbGlzdCB+bGFzdCBsID1cbiAgbGV0IHJlYyBkaWZmX2xpc3QgYWNjID0gZnVuY3Rpb25cbiAgICB8IFsgYSBdIC0+IFNvbWUgKChsYXN0IC0gYSkgOjogYWNjKVxuICAgIHwgYSA6OiAoYiA6OiBfIGFzIHIpIC0+IGRpZmZfbGlzdCAoKGIgLSBhKSA6OiBhY2MpIHJcbiAgICB8IFtdIC0+IE5vbmVcbiAgaW5cbiAgZGlmZl9saXN0IFtdIGxcblxuKCogUGFydGl0aW9uIG9mIGFuIGludCBpbnRvIFtsZW5dIGludGVnZXJzIHVuaWZvcm1seS5cbiAgIFdlIGZpcnN0IHNhbXBsZSAobGVuLTEpIHBvaW50cyBmcm9tIHRoZSBzZXQgezEsLi5pLTF9IHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gICBXZSBzb3J0IHRoZXNlIHBvaW50cyBhbmQgYWRkIGJhY2sgMCBhbmQgaSwgd2UgaGF2ZSB0aHVzXG4gICB4XzAgPSAwIDwgeF8xIDwgeF8yIDwg4oCmIDwgeF97bGVuLTF9IDwgaSA9IHhfe2xlbn0uXG4gICBJZiB3ZSBkZWZpbmUsIHlfayA9IHhfe2srMX0gLSB4X3trfSBmb3IgayBpbiAwIOKApiAobGVuLTEpLCB0aGVuIGJ5IGNvbnN0cnVjdGlvblxuICAg4oiRX2sgeV9rID0g4oiRX2sgKHhfe2srMX0gLSB4X2sgKSA9IHhfe2xlbn0gLSB4XzAgPSBpLiAqKVxubGV0IHNwbGl0X2xpc3QgaSB+bGVuIHN0ID1cbiAgaWYgbGVuIDw9IDEgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5zcGxpdF9saXN0XCI7XG4gIGlmIGkgPj0gbGVuIHRoZW4gKFxuICAgIGxldCB4cyA9XG4gICAgICBzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzIH5jbXA6Y29tcGFyZSAobGVuIC0gMSkgKGludF9yYW5nZSAxIChpIC0gMSkpIHN0XG4gICAgaW5cbiAgICBfZGlmZl9saXN0IH5sYXN0OmkgKDAgOjogeHMpXG4gICkgZWxzZVxuICAgIE5vbmVcblxubGV0IHJldHJ5ID8obWF4ID0gMTApIGcgc3QgPVxuICBsZXQgcmVjIGF1eCBuID1cbiAgICBtYXRjaCBnIHN0IHdpdGhcbiAgICB8IE5vbmUgd2hlbiBuID0gMCAtPiBOb25lXG4gICAgfCBOb25lIC0+IGF1eCAobiAtIDEpICgqIHJldHJ5ICopXG4gICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICBpblxuICBhdXggbWF4XG5cbmxldCByZWMgdHJ5X3N1Y2Nlc3NpdmVseSBsIHN0ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gTm9uZVxuICB8IGcgOjogbCcgLT5cbiAgICAobWF0Y2ggZyBzdCB3aXRoXG4gICAgfCBOb25lIC0+IHRyeV9zdWNjZXNzaXZlbHkgbCcgc3RcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzKVxuXG5sZXQgKCA8Pz4gKSBhIGIgPSB0cnlfc3VjY2Vzc2l2ZWx5IFsgYTsgYiBdXG5cbmV4Y2VwdGlvbiBCYWNrdHJhY2tcblxubGV0IF9jaG9vc2VfYXJyYXlfY2FsbCBhIGYgc3QgPVxuICB0cnkgZiAoX2Nob29zZV9hcnJheSBhIHN0KSB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiByYWlzZSBCYWNrdHJhY2tcblxubGV0IGZpeCA/KHN1YjEgPSBbXSkgPyhzdWIyID0gW10pID8oc3VibiA9IFtdKSB+YmFzZSBmdWVsIHN0ID1cbiAgbGV0IHN1YjEgPSBBcnJheS5vZl9saXN0IHN1YjFcbiAgYW5kIHN1YjIgPSBBcnJheS5vZl9saXN0IHN1YjJcbiAgYW5kIHN1Ym4gPSBBcnJheS5vZl9saXN0IHN1Ym4gaW5cbiAgKCogcmVjdXJzaXZlIGZ1bmN0aW9uIHdpdGggZnVlbCAqKVxuICBsZXQgcmVjIG1ha2UgZnVlbCBzdCA9XG4gICAgaWYgZnVlbCA9IDAgdGhlblxuICAgICAgcmFpc2UgQmFja3RyYWNrXG4gICAgZWxzZSBpZiBmdWVsID0gMSB0aGVuXG4gICAgICBiYXNlIHN0XG4gICAgZWxzZVxuICAgICAgX3RyeV9vdGhlcndpc2UgMFxuICAgICAgICBbfFxuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWIxIChmdW4gZiAtPiBmIChtYWtlIChmdWVsIC0gMSkpIHN0KTtcbiAgICAgICAgICBfY2hvb3NlX2FycmF5X2NhbGwgc3ViMiAoZnVuIGYgLT5cbiAgICAgICAgICAgICAgbWF0Y2ggc3BsaXQgZnVlbCBzdCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBCYWNrdHJhY2tcbiAgICAgICAgICAgICAgfCBTb21lIChpLCBqKSAtPiBmIChtYWtlIGkpIChtYWtlIGopIHN0KTtcbiAgICAgICAgICBfY2hvb3NlX2FycmF5X2NhbGwgc3VibiAoZnVuIChsZW4sIGYpIC0+XG4gICAgICAgICAgICAgIGxldCBsZW4gPSBsZW4gc3QgaW5cbiAgICAgICAgICAgICAgbWF0Y2ggc3BsaXRfbGlzdCBmdWVsIH5sZW4gc3Qgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgQmFja3RyYWNrXG4gICAgICAgICAgICAgIHwgU29tZSBsJyAtPiBmIChmdW4gc3QgLT4gTGlzdC5tYXAgKGZ1biB4IC0+IG1ha2UgeCBzdCkgbCcpIHN0KTtcbiAgICAgICAgICBiYXNlICgqIGJhc2UgY2FzZSB0aGVuICopO1xuICAgICAgICB8XVxuICBhbmQgX3RyeV9vdGhlcndpc2UgaSBhID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgcmFpc2UgQmFja3RyYWNrXG4gICAgZWxzZSAoXG4gICAgICB0cnkgYS4oaSkgc3Qgd2l0aCBCYWNrdHJhY2sgLT4gX3RyeV9vdGhlcndpc2UgKGkgKyAxKSBhXG4gICAgKVxuICBpblxuICBtYWtlIChmdWVsIHN0KSBzdFxuXG5sZXQgcHVyZSB4IF9zdCA9IHhcbmxldCAoIDwqPiApIGYgZyBzdCA9IGYgc3QgKGcgc3QpXG5sZXQgKCBsZXQrICkgPSAoID58PSApXG5sZXQgKCBsZXQqICkgPSAoID4+PSApXG5sZXRbQGlubGluZV0gKCBhbmQrICkgYTEgYTIgc3QgPSBhMSBzdCwgYTIgc3RcbmxldCAoIGFuZCogKSA9ICggYW5kKyApXG5sZXQgX19kZWZhdWx0X3N0YXRlID0gUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0ICgpXG5sZXQgcnVuID8oc3QgPSBfX2RlZmF1bHRfc3RhdGUpIGcgPSBnIHN0XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgRXJyb3IgTW9uYWR9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBvcmQgPSAnYSAtPiAnYSAtPiBpbnRcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgQmFzaWNzfSAqKVxuXG50eXBlIG5vbnJlYyAoKydnb29kLCArJ2JhZCkgcmVzdWx0ID0gKCdnb29kLCAnYmFkKSByZXN1bHQgPVxuICB8IE9rIG9mICdnb29kXG4gIHwgRXJyb3Igb2YgJ2JhZFxuXG50eXBlICgrJ2dvb2QsICsnYmFkKSB0ID0gKCdnb29kLCAnYmFkKSByZXN1bHQgPVxuICB8IE9rIG9mICdnb29kXG4gIHwgRXJyb3Igb2YgJ2JhZFxuXG5sZXQgcmV0dXJuIHggPSBPayB4XG5sZXQgZmFpbCBzID0gRXJyb3Igc1xuXG5sZXQgZmFpbF9wcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgUHJpbnRmLmticHJpbnRmIChmdW4gYnVmIC0+IGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKSBidWYgZm9ybWF0XG5cbmxldCBmYWlsX2ZwcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmb3JtYXRcblxubGV0IGFkZF9jdHggbXNnIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBFcnJvciBlIC0+IEVycm9yIChlIF4gXCJcXG5jb250ZXh0OlwiIF4gbXNnKVxuICB8IE9rIHggLT4gT2sgeFxuXG5sZXQgYWRkX2N0eGYgbXNnID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCBlIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgYWRkX2N0eCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZSlcbiAgICBvdXQgbXNnXG5cbmxldCBvZl9leG4gZSA9XG4gIGxldCBtc2cgPSBQcmludGV4Yy50b19zdHJpbmcgZSBpblxuICBFcnJvciBtc2dcblxubGV0IG9mX2V4bl90cmFjZSBlID1cbiAgbGV0IHJlcyA9XG4gICAgUHJpbnRmLnNwcmludGYgXCIlc1xcbiVzXCIgKFByaW50ZXhjLnRvX3N0cmluZyBlKSAoUHJpbnRleGMuZ2V0X2JhY2t0cmFjZSAoKSlcbiAgaW5cbiAgRXJyb3IgcmVzXG5cbmxldCBvcHRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE5vbmUgLT4gT2sgTm9uZVxuICB8IFNvbWUgeCAtPlxuICAgIChtYXRjaCBmIHggd2l0aFxuICAgIHwgT2sgeCAtPiBPayAoU29tZSB4KVxuICAgIHwgRXJyb3IgZSAtPiBFcnJvciBlKVxuXG5sZXQgbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IG1hcF9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gIHwgRXJyb3IgeSAtPiBFcnJvciAoZiB5KVxuXG5sZXQgbWFwMiBmIGcgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIChnIHMpXG5cbmxldCBpdGVyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG5sZXQgaXRlcl9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyAtPiAoKVxuICB8IEVycm9yIGVyciAtPiBmIGVyclxuXG5leGNlcHRpb24gR2V0X2Vycm9yXG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IHJhaXNlIEdldF9lcnJvclxuXG5sZXQgZ2V0X29yIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IGRlZmF1bHRcblxubGV0IGFwcGx5X29yIGYgeCA9XG4gIG1hdGNoIGYgeCB3aXRoXG4gIHwgRXJyb3IgXyAtPiB4XG4gIHwgT2sgeSAtPiB5XG5cbmxldCAoIHw/PiApIHggZiA9IGFwcGx5X29yIGYgeFxuXG5sZXQgZ2V0X2xhenkgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgZSAtPiBmIGVcblxubGV0IGdldF9vcl9mYWlsd2l0aCA9IGZ1bmN0aW9uXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgbXNnIC0+IGZhaWx3aXRoIG1zZ1xuXG5sZXQgbWFwX29yIGYgZSB+ZGVmYXVsdCA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5cbmxldCBjYXRjaCBlIH5vayB+ZXJyID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBvayB4XG4gIHwgRXJyb3IgeSAtPiBlcnIgeVxuXG5sZXQgZmxhdF9tYXAgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBmIHhcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IGtfY29tcG9zZSBmIGcgeCA9IGYgeCB8PiBmbGF0X21hcCBnXG5sZXQgKCA+PT4gKSA9IGtfY29tcG9zZVxubGV0ICggPD08ICkgZiBnID0gZyA+PT4gZlxuXG5sZXQgZXF1YWwgfmVyciBlcSBhIGIgPVxuICBtYXRjaCBhLCBiIHdpdGhcbiAgfCBPayB4LCBPayB5IC0+IGVxIHggeVxuICB8IEVycm9yIHMsIEVycm9yIHMnIC0+IGVyciBzIHMnXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSB+ZXJyIGNtcCBhIGIgPVxuICBtYXRjaCBhLCBiIHdpdGhcbiAgfCBPayB4LCBPayB5IC0+IGNtcCB4IHlcbiAgfCBPayBfLCBfIC0+IDFcbiAgfCBfLCBPayBfIC0+IC0xXG4gIHwgRXJyb3IgcywgRXJyb3IgcycgLT4gZXJyIHMgcydcblxubGV0IGZvbGQgfm9rIH5lcnJvciB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgT2sgeCAtPiBvayB4XG4gIHwgRXJyb3IgcyAtPiBlcnJvciBzXG5cbmxldCBmb2xkX29rIGYgYWNjIHIgPVxuICBtYXRjaCByIHdpdGhcbiAgfCBPayB4IC0+IGYgYWNjIHhcbiAgfCBFcnJvciBfIC0+IGFjY1xuXG5sZXQgaXNfb2sgPSBmdW5jdGlvblxuICB8IE9rIF8gLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IGlzX2Vycm9yID0gZnVuY3Rpb25cbiAgfCBPayBfIC0+IGZhbHNlXG4gIHwgRXJyb3IgXyAtPiB0cnVlXG5cbigqKiB7MiBXcmFwcGVyc30gKilcblxubGV0IGd1YXJkIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBFcnJvciBlXG5sZXQgZ3VhcmRfc3RyIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBvZl9leG4gZVxubGV0IGd1YXJkX3N0cl90cmFjZSBmID0gdHJ5IE9rIChmICgpKSB3aXRoIGUgLT4gb2ZfZXhuX3RyYWNlIGVcbmxldCB3cmFwMSBmIHggPSB0cnkgcmV0dXJuIChmIHgpIHdpdGggZSAtPiBFcnJvciBlXG5sZXQgd3JhcDIgZiB4IHkgPSB0cnkgcmV0dXJuIChmIHggeSkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCB3cmFwMyBmIHggeSB6ID0gdHJ5IHJldHVybiAoZiB4IHkgeikgd2l0aCBlIC0+IEVycm9yIGVcblxuKCoqIHsyIEFwcGxpY2F0aXZlfSAqKVxuXG5sZXQgcHVyZSA9IHJldHVyblxuXG5sZXQgKCA8Kj4gKSBmIHggPVxuICBtYXRjaCBmIHdpdGhcbiAgfCBFcnJvciBzIC0+IGZhaWwgc1xuICB8IE9rIGYgLT4gbWFwIGYgeFxuXG5sZXQgam9pbiB0ID1cbiAgbWF0Y2ggdCB3aXRoXG4gIHwgT2sgKE9rIG8pIC0+IE9rIG9cbiAgfCBPayAoRXJyb3IgZSkgLT4gRXJyb3IgZVxuICB8IEVycm9yIF8gYXMgZSAtPiBlXG5cbmxldCBib3RoIHggeSA9XG4gIG1hdGNoIHgsIHkgd2l0aFxuICB8IE9rIG8sIE9rIG8nIC0+IE9rIChvLCBvJylcbiAgfCBPayBfLCBFcnJvciBlIC0+IEVycm9yIGVcbiAgfCBFcnJvciBlLCBfIC0+IEVycm9yIGVcblxuKCoqIHsyIENvbGxlY3Rpb25zfSAqKVxuXG5sZXQgbWFwX2wgZiBsID1cbiAgbGV0IHJlYyBtYXAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gT2sgKExpc3QucmV2IGFjYylcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBFcnJvciBzIC0+IEVycm9yIHNcbiAgICAgIHwgT2sgeSAtPiBtYXAgKHkgOjogYWNjKSBsJylcbiAgaW5cbiAgbWFwIFtdIGxcblxubGV0IGZsYXR0ZW5fbCBsID1cbiAgbGV0IHJlYyBsb29wIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE9rIChMaXN0LnJldiBhY2MpXG4gICAgfCBPayB4IDo6IGwnIC0+IGxvb3AgKHggOjogYWNjKSBsJ1xuICAgIHwgRXJyb3IgZSA6OiBfIC0+IEVycm9yIGVcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbmV4Y2VwdGlvbiBMb2NhbEV4aXRcblxubGV0IGZvbGRfaXRlciBmIGFjYyBzZXEgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBzZXEgKGZ1biB4IC0+XG4gICAgICAgIG1hdGNoIGYgIWFjYyB4IHdpdGhcbiAgICAgICAgfCBFcnJvciBzIC0+XG4gICAgICAgICAgZXJyIDo9IFNvbWUgcztcbiAgICAgICAgICByYWlzZSBMb2NhbEV4aXRcbiAgICAgICAgfCBPayB5IC0+IGFjYyA6PSB5KTtcbiAgICBPayAhYWNjXG4gIHdpdGggTG9jYWxFeGl0IC0+XG4gICAgKG1hdGNoICFlcnIgd2l0aFxuICAgIHwgTm9uZSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFNvbWUgcyAtPiBFcnJvciBzKVxuXG5sZXQgZm9sZF9sIGYgYWNjIGwgPSBmb2xkX2l0ZXIgZiBhY2MgKGZ1biBrIC0+IExpc3QuaXRlciBrIGwpXG5cbigqKiB7MiBNaXNjfSAqKVxuXG5sZXQgY2hvb3NlIGwgPVxuICBsZXQgcmVjIGZpbmRfID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgIHwgKE9rIF8gYXMgcmVzKSA6OiBfIC0+IHJlc1xuICAgIHwgRXJyb3IgXyA6OiBsJyAtPiBmaW5kXyBsJ1xuICBpblxuICB0cnkgZmluZF8gbFxuICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIGxldCBsJyA9XG4gICAgICBMaXN0Lm1hcFxuICAgICAgICAoZnVuY3Rpb25cbiAgICAgICAgICB8IEVycm9yIHMgLT4gc1xuICAgICAgICAgIHwgT2sgXyAtPiBhc3NlcnQgZmFsc2UpXG4gICAgICAgIGxcbiAgICBpblxuICAgIEVycm9yIGwnXG5cbmxldCByZXRyeSBuIGYgPVxuICBsZXQgcmVjIHJldHJ5IG4gYWNjID1cbiAgICBtYXRjaCBuIHdpdGhcbiAgICB8IDAgLT4gZmFpbCAoTGlzdC5yZXYgYWNjKVxuICAgIHwgXyAtPlxuICAgICAgKG1hdGNoIGYgKCkgd2l0aFxuICAgICAgfCBPayBfIGFzIHJlcyAtPiByZXNcbiAgICAgIHwgRXJyb3IgZSAtPiByZXRyeSAobiAtIDEpIChlIDo6IGFjYykpXG4gIGluXG4gIHJldHJ5IG4gW11cblxuKCoqIHsyIEluZml4fSAqKVxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggPnw9ICkgZSBmID0gbWFwIGYgZVxuICBsZXQgKCA+Pj0gKSBlIGYgPSBmbGF0X21hcCBmIGVcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIHw/PiApID0gKCB8Pz4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgeDEgeDIgPVxuICAgIG1hdGNoIHgxLCB4MiB3aXRoXG4gICAgfCBPayB4LCBPayB5IC0+IE9rICh4LCB5KVxuICAgIHwgRXJyb3IgZSwgXyAtPiBFcnJvciBlXG4gICAgfCBfLCBFcnJvciBlIC0+IEVycm9yIGVcblxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuICBsZXQgKCA+PT4gKSA9ICggPj0+IClcbiAgbGV0ICggPD08ICkgPSAoIDw9PCApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxuXG5tb2R1bGUgdHlwZSBNT05BRCA9IHNpZ1xuICB0eXBlICdhIHRcblxuICB2YWwgcmV0dXJuIDogJ2EgLT4gJ2EgdFxuICB2YWwgKCA+Pj0gKSA6ICdhIHQgLT4gKCdhIC0+ICdiIHQpIC0+ICdiIHRcbmVuZFxuXG5tb2R1bGUgVHJhdmVyc2UgKE0gOiBNT05BRCkgPSBzdHJ1Y3RcbiAgbGV0ICggPj49ICkgPSBNLiggPj49IClcblxuICBsZXQgbWFwX20gZiBlID1cbiAgICBtYXRjaCBlIHdpdGhcbiAgICB8IEVycm9yIHMgLT4gTS5yZXR1cm4gKEVycm9yIHMpXG4gICAgfCBPayB4IC0+IGYgeCA+Pj0gZnVuIHkgLT4gTS5yZXR1cm4gKE9rIHkpXG5cbiAgbGV0IHNlcXVlbmNlX20gbSA9IG1hcF9tIChmdW4geCAtPiB4KSBtXG5cbiAgbGV0IGZvbGRfbSBmIGFjYyBlID1cbiAgICBtYXRjaCBlIHdpdGhcbiAgICB8IEVycm9yIF8gLT4gTS5yZXR1cm4gYWNjXG4gICAgfCBPayB4IC0+IGYgYWNjIHggPj49IGZ1biB5IC0+IE0ucmV0dXJuIHlcblxuICBsZXQgcmV0cnlfbSBuIGYgPVxuICAgIGxldCByZWMgcmV0cnkgbiBhY2MgPVxuICAgICAgbWF0Y2ggbiB3aXRoXG4gICAgICB8IDAgLT4gTS5yZXR1cm4gKGZhaWwgKExpc3QucmV2IGFjYykpXG4gICAgICB8IF8gLT5cbiAgICAgICAgZiAoKSA+Pj0gKCBmdW5jdGlvblxuICAgICAgICB8IE9rIHggLT4gTS5yZXR1cm4gKE9rIHgpXG4gICAgICAgIHwgRXJyb3IgZSAtPiByZXRyeSAobiAtIDEpIChlIDo6IGFjYykgKVxuICAgIGluXG4gICAgcmV0cnkgbiBbXVxuZW5kXG5cbigqKiB7MiBDb252ZXJzaW9uc30gKilcblxubGV0IHRvX29wdCA9IGZ1bmN0aW9uXG4gIHwgT2sgeCAtPiBTb21lIHhcbiAgfCBFcnJvciBfIC0+IE5vbmVcblxubGV0IG9mX29wdCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBFcnJvciBcIm9mX29wdFwiXG4gIHwgU29tZSB4IC0+IE9rIHhcblxubGV0IHRvX3NlcSBlICgpID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuICB8IEVycm9yIF8gLT4gU2VxLk5pbFxuXG5sZXQgdG9faXRlciBlIGsgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGsgeFxuICB8IEVycm9yIF8gLT4gKClcblxudHlwZSAoJ2EsICdiKSBlcnJvciA9XG4gIFsgYE9rIG9mICdhXG4gIHwgYEVycm9yIG9mICdiXG4gIF1cblxubGV0IG9mX2VyciA9IGZ1bmN0aW9uXG4gIHwgYE9rIHggLT4gT2sgeFxuICB8IGBFcnJvciB5IC0+IEVycm9yIHlcblxubGV0IHRvX2VyciA9IGZ1bmN0aW9uXG4gIHwgT2sgeCAtPiBgT2sgeFxuICB8IEVycm9yIHkgLT4gYEVycm9yIHlcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgcHBfeCBmbXQgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtvayhALCVhKUBdXCIgcHBfeCB4XG4gIHwgRXJyb3IgcyAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW2Vycm9yKEAsJXMpQF1cIiBzXG5cbmxldCBwcCcgcHBfeCBwcF9lIGZtdCBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW29rKEAsJWEpQF1cIiBwcF94IHhcbiAgfCBFcnJvciBzIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbZXJyb3IoQCwlYSlAXVwiIHBwX2Ugc1xuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFdyYXBwZXIgYXJvdW5kIFNldH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9IFNldC5PcmRlcmVkVHlwZVxuXG5tb2R1bGUgdHlwZSBTID0gc2lnXG4gIGluY2x1ZGUgU2V0LlNcblxuICB2YWwgbWluX2VsdF9vcHQgOiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IW1pbl9lbHR9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBtYXhfZWx0X29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshbWF4X2VsdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGNob29zZV9vcHQgOiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWNob29zZX0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfb3B0IDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfZmlyc3QgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICgqKiBGaW5kIG1pbmltdW0gZWxlbWVudCBzYXRpc2Z5aW5nIHByZWRpY2F0ZS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdF9vcHQgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZF9maXJzdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfZmlyc3RfbWFwIDogKGVsdCAtPiAnYSBvcHRpb24pIC0+IHQgLT4gJ2Egb3B0aW9uXG4gICgqKiBbZmluZF9maXJzdF9tYXAgZiBzXSBmaW5kIHRoZSBtaW5pbXVtIGVsZW1lbnQgW3hdIG9mIFtzXSBzdWNoIHRoYXQgW2YgeCA9IFNvbWUgeV1cbiAgICAgIGFuZCByZXR1cm4gW1NvbWUgeV0uIE90aGVyd2lzZSByZXR1cm5zIFtOb25lXS5cbiAgICAgIEBzaW5jZSAzLjEyICopXG5cbiAgdmFsIGZpbmRfbGFzdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgKCoqIEZpbmQgbWF4aW11bSBlbGVtZW50IHNhdGlzZnlpbmcgcHJlZGljYXRlLlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2xhc3Rfb3B0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWZpbmRfbGFzdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfbGFzdF9tYXAgOiAoZWx0IC0+ICdhIG9wdGlvbikgLT4gdCAtPiAnYSBvcHRpb25cbiAgKCoqIFtmaW5kX2xhc3RfbWFwIGYgc10gZmluZCB0aGUgbWF4aW11bSBlbGVtZW50IFt4XSBvZiBbc10gc3VjaCB0aGF0IFtmIHggPSBTb21lIHldXG4gICAgICBhbmQgcmV0dXJuIFtTb21lIHldLiBPdGhlcndpc2UgcmV0dXJucyBbTm9uZV0uXG4gICAgICBAc2luY2UgMy4xMiAqKVxuXG4gIHZhbCBvZl9pdGVyIDogZWx0IGl0ZXIgLT4gdFxuICAoKiogQnVpbGQgYSBzZXQgZnJvbSB0aGUgZ2l2ZW4gW2l0ZXJdIG9mIGVsZW1lbnRzLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBvZl9zZXEgOiBlbHQgU2VxLnQgLT4gdFxuICAoKiogQnVpbGQgYSBzZXQgZnJvbSB0aGUgZ2l2ZW4gW3NlcV0gb2YgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIGFkZF9pdGVyIDogdCAtPiBlbHQgaXRlciAtPiB0XG4gICgqKiBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9zZXEgOiBlbHQgU2VxLnQgLT4gdCAtPiB0XG4gICgqKiBAc2luY2UgMy4wICopXG5cbiAgdmFsIHRvX2l0ZXIgOiB0IC0+IGVsdCBpdGVyXG4gICgqKiBbdG9faXRlciB0XSBjb252ZXJ0cyB0aGUgc2V0IFt0XSB0byBhIFtpdGVyXSBvZiB0aGUgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9saXN0IDogdCAtPiBlbHQgbGlzdCAtPiB0XG4gICgqKiBAc2luY2UgMC4xNCAqKVxuXG4gIHZhbCB0b19saXN0IDogdCAtPiBlbHQgbGlzdFxuICAoKiogW3RvX2xpc3QgdF0gY29udmVydHMgdGhlIHNldCBbdF0gdG8gYSBsaXN0IG9mIHRoZSBlbGVtZW50cy4gKilcblxuICB2YWwgdG9fc3RyaW5nIDpcbiAgICA/c3RhcnQ6c3RyaW5nIC0+XG4gICAgP3N0b3A6c3RyaW5nIC0+XG4gICAgP3NlcDpzdHJpbmcgLT5cbiAgICAoZWx0IC0+IHN0cmluZykgLT5cbiAgICB0IC0+XG4gICAgc3RyaW5nXG4gICgqKiAgUHJpbnQgdGhlIHNldCBpbiBhIHN0cmluZ1xuICAgICAgIEBzaW5jZSAyLjcgKilcblxuICB2YWwgcHAgOlxuICAgID9wcF9zdGFydDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfc3RvcDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfc2VwOnVuaXQgcHJpbnRlciAtPlxuICAgIGVsdCBwcmludGVyIC0+XG4gICAgdCBwcmludGVyXG4gICgqKiBQcmludCB0aGUgc2V0LiAqKVxuZW5kXG5cbm1vZHVsZSBNYWtlIChPIDogTWFwLk9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuICBtb2R1bGUgUyA9IFNldC5NYWtlIChPKVxuXG4gICgqIGJhY2twb3J0IGZ1bmN0aW9ucyBmcm9tIHJlY2VudCBzdGRsaWIuXG4gICAgIHRoZXkgd2lsbCBiZSBzaGFkb3dlZCBieSBpbmNsdXNpb24gb2YgW1NdIGlmIHByZXNlbnQuICopXG5cbiAgW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxuICBsZXQgZmluZF9vcHQgeCBzID0gdHJ5IFNvbWUgKFMuZmluZCB4IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IGNob29zZV9vcHQgcyA9IHRyeSBTb21lIChTLmNob29zZSBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBtaW5fZWx0X29wdCBzID0gdHJ5IFNvbWUgKFMubWluX2VsdCBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBtYXhfZWx0X29wdCBzID0gdHJ5IFNvbWUgKFMubWF4X2VsdCBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgZXhjZXB0aW9uIEZpbmRfYmluZGluZ19leGl0XG5cbiAgbGV0IGZpbmRfZmlyc3Rfb3B0IGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgdHJ5XG4gICAgICBTLml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgaWYgZiB4IHRoZW4gKFxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeDtcbiAgICAgICAgICAgIHJhaXNlIEZpbmRfYmluZGluZ19leGl0XG4gICAgICAgICAgKSlcbiAgICAgICAgbTtcbiAgICAgIE5vbmVcbiAgICB3aXRoIEZpbmRfYmluZGluZ19leGl0IC0+ICFyZXNcblxuICBsZXQgZmluZF9maXJzdCBmIG0gPVxuICAgIG1hdGNoIGZpbmRfZmlyc3Rfb3B0IGYgbSB3aXRoXG4gICAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgIHwgU29tZSB4IC0+IHhcblxuICBsZXQgZmluZF9maXJzdF9tYXAgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICB0cnlcbiAgICAgIFMuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSB5IC0+XG4gICAgICAgICAgICByZXMgOj0gU29tZSB5O1xuICAgICAgICAgICAgcmFpc2UgRmluZF9iaW5kaW5nX2V4aXQpXG4gICAgICAgIG07XG4gICAgICBOb25lXG4gICAgd2l0aCBGaW5kX2JpbmRpbmdfZXhpdCAtPiAhcmVzXG5cbiAgKCogbGluZWFyIHRpbWUsIG11c3QgdHJhdmVyc2UgdGhlIHdob2xlIHNldOKApiAqKVxuICBsZXQgZmluZF9sYXN0X29wdCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIFMuaXRlciAoZnVuIHggLT4gaWYgZiB4IHRoZW4gcmVzIDo9IFNvbWUgeCkgbTtcbiAgICAhcmVzXG5cbiAgbGV0IGZpbmRfbGFzdCBmIG0gPVxuICAgIG1hdGNoIGZpbmRfbGFzdF9vcHQgZiBtIHdpdGhcbiAgICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCBTb21lIHggLT4geFxuXG4gIFtAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbiAgaW5jbHVkZSBTXG5cbiAgKCogVXNlIGZpbmRfbGFzdCB3aGljaCBpcyBsaW5lYXIgdGltZSBvbiBPQ2FtbCA8IDQuMDUgKilcbiAgbGV0IGZpbmRfbGFzdF9tYXAgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICBsZXQgXyA9XG4gICAgICBmaW5kX2xhc3Rfb3B0XG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IGZhbHNlXG4gICAgICAgICAgfCBTb21lIHkgLT5cbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHk7XG4gICAgICAgICAgICB0cnVlKVxuICAgICAgICBtXG4gICAgaW5cbiAgICAhcmVzXG5cbiAgbGV0IGFkZF9zZXEgc2VxIHNldCA9XG4gICAgbGV0IHNldCA9IHJlZiBzZXQgaW5cbiAgICBTZXEuaXRlciAoZnVuIHggLT4gc2V0IDo9IGFkZCB4ICFzZXQpIHNlcTtcbiAgICAhc2V0XG5cbiAgbGV0IG9mX3NlcSBzID0gYWRkX3NlcSBzIGVtcHR5XG5cbiAgbGV0IGFkZF9pdGVyIHNldCBpID1cbiAgICBsZXQgc2V0ID0gcmVmIHNldCBpblxuICAgIGkgKGZ1biB4IC0+IHNldCA6PSBhZGQgeCAhc2V0KTtcbiAgICAhc2V0XG5cbiAgbGV0IG9mX2l0ZXIgcyA9IGFkZF9pdGVyIGVtcHR5IHNcbiAgbGV0IHRvX2l0ZXIgcyB5aWVsZCA9IGl0ZXIgeWllbGQgc1xuICBsZXQgYWRkX2xpc3QgPSBMaXN0LmZvbGRfbGVmdCAoZnVuIHNldCB4IC0+IGFkZCB4IHNldClcbiAgbGV0IHRvX2xpc3QgPSBlbGVtZW50c1xuXG4gIGxldCB0b19zdHJpbmcgPyhzdGFydCA9IFwiXCIpID8oc3RvcCA9IFwiXCIpID8oc2VwID0gXCIsXCIpIGVsdF90b19zdHJpbmcgaCA9XG4gICAgdG9fbGlzdCBoIHw+IENDTGlzdC50b19zdHJpbmcgfnN0YXJ0IH5zdG9wIH5zZXAgZWx0X3RvX3N0cmluZ1xuXG4gIGxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgICAgPyhwcF9zZXAgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIixAIFwiKSBwcF94IGZtdCBtID1cbiAgICBwcF9zdGFydCBmbXQgKCk7XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBpdGVyXG4gICAgICAoZnVuIHggLT5cbiAgICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgICAgcHBfeCBmbXQgeClcbiAgICAgIG07XG4gICAgcHBfc3RvcCBmbXQgKClcbmVuZFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEJhc2ljIFN0cmluZyBVdGlsc30gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cblxuKCogc3RhbmRhcmQgaW1wbGVtZW50YXRpb25zICopXG5cbmluY2x1ZGUgU3RyaW5nXG5cbmxldCBjb21wYXJlX2ludCAoYSA6IGludCkgYiA9IFN0ZGxpYi5jb21wYXJlIGEgYlxubGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxubGV0IGhhc2ggcyA9IEhhc2h0YmwuaGFzaCBzXG5sZXQgbGVuZ3RoID0gU3RyaW5nLmxlbmd0aFxubGV0IGlzX2VtcHR5IHMgPSBlcXVhbCBzIFwiXCJcblxubGV0IHJldiBzID1cbiAgbGV0IG4gPSBsZW5ndGggcyBpblxuICBpbml0IG4gKGZ1biBpIC0+IHMuW24gLSBpIC0gMV0pXG5cbmxldCByZWMgX3RvX2xpc3QgcyBhY2MgaSBsZW4gPVxuICBpZiBsZW4gPSAwIHRoZW5cbiAgICBMaXN0LnJldiBhY2NcbiAgZWxzZVxuICAgIF90b19saXN0IHMgKHMuW2ldIDo6IGFjYykgKGkgKyAxKSAobGVuIC0gMSlcblxubGV0IF9pc19zdWIgfnN1YiBpIHMgaiB+bGVuID1cbiAgbGV0IHJlYyBjaGVjayBrID1cbiAgICBpZiBrID0gbGVuIHRoZW5cbiAgICAgIHRydWVcbiAgICBlbHNlXG4gICAgICBDQ0NoYXIuZXF1YWwgc3ViLltpICsga10gcy5baiArIGtdICYmIGNoZWNrIChrICsgMSlcbiAgaW5cbiAgaiArIGxlbiA8PSBTdHJpbmcubGVuZ3RoIHMgJiYgY2hlY2sgMFxuXG5sZXQgaXNfc3ViIH5zdWIgaSBzIGogfmxlbiA9XG4gIGlmIGkgKyBsZW4gPiBTdHJpbmcubGVuZ3RoIHN1YiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXNfc3ViXCI7XG4gIF9pc19zdWIgfnN1YiBpIHMgaiB+bGVuXG5cbnR5cGUgXyBkaXJlY3Rpb24gPVxuICB8IERpcmVjdCA6IFsgYERpcmVjdCBdIGRpcmVjdGlvblxuICB8IFJldmVyc2UgOiBbIGBSZXZlcnNlIF0gZGlyZWN0aW9uXG5cbigqIHdlIGZvbGxvdyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LbnV0aOKAk01vcnJpc+KAk1ByYXR0X2FsZ29yaXRobSAqKVxubW9kdWxlIEZpbmQgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBrbXBfcGF0dGVybiA9IHtcbiAgICBmYWlsdXJlOiBpbnQgYXJyYXk7XG4gICAgc3RyOiBzdHJpbmc7XG4gIH1cbiAgKCogaW52YXJpYW50OiBbbGVuZ3RoIGZhaWx1cmUgPSBsZW5ndGggc3RyXS5cbiAgICAgV2UgdXNlIGEgcGhhbnRvbSB0eXBlIHRvIGF2b2lkIG1peGluZyB0aGUgZGlyZWN0aW9ucy4gKilcblxuICBsZXQga21wX3BhdHRlcm5fbGVuZ3RoIHAgPSBTdHJpbmcubGVuZ3RoIHAuc3RyXG5cbiAgKCogYWNjZXNzIHRoZSBbaV0tdGggZWxlbWVudCBvZiBbc10gYWNjb3JkaW5nIHRvIGRpcmVjdGlvbiBbZGlyXSAqKVxuICBsZXQgZ2V0XyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9XG4gICBmdW4gfmRpciAtPlxuICAgIG1hdGNoIGRpciB3aXRoXG4gICAgfCBEaXJlY3QgLT4gU3RyaW5nLmdldFxuICAgIHwgUmV2ZXJzZSAtPiBmdW4gcyBpIC0+IHMuW1N0cmluZy5sZW5ndGggcyAtIGkgLSAxXVxuXG4gIGxldCBrbXBfY29tcGlsZV8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gYSBrbXBfcGF0dGVybiA9XG4gICBmdW4gfmRpciBzdHIgLT5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHN0ciBpblxuICAgIGxldCBnZXQgPSBnZXRfIH5kaXIgaW5cbiAgICAoKiBob3cgdG8gcmVhZCBlbGVtZW50cyBvZiB0aGUgc3RyaW5nICopXG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IDAgLT4geyBmYWlsdXJlID0gW3x8XTsgc3RyIH1cbiAgICB8IDEgLT4geyBmYWlsdXJlID0gW3wgLTEgfF07IHN0ciB9XG4gICAgfCBfIC0+XG4gICAgICAoKiBhdCBsZWFzdCAyIGVsZW1lbnRzLCB0aGUgYWxnb3JpdGhtIGNhbiB3b3JrICopXG4gICAgICBsZXQgZmFpbHVyZSA9IEFycmF5Lm1ha2UgbGVuIDAgaW5cbiAgICAgIGZhaWx1cmUuKDApIDwtIC0xO1xuICAgICAgKCogaTogY3VycmVudCBpbmRleCBpbiBzdHIgKilcbiAgICAgIGxldCBpID0gcmVmIDIgaW5cbiAgICAgICgqIGo6IGluZGV4IG9mIGNhbmRpZGF0ZSBzdWJzdHJpbmcgKilcbiAgICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICAgIG1hdGNoICFqIHdpdGhcbiAgICAgICAgfCBfIHdoZW4gQ0NDaGFyLmVxdWFsIChnZXQgc3RyICghaSAtIDEpKSAoZ2V0IHN0ciAhaikgLT5cbiAgICAgICAgICAoKiBzdWJzdHJpbmcgc3RhcnRpbmcgYXQgIWogY29udGludWVzIG1hdGNoaW5nIGN1cnJlbnQgY2hhciAqKVxuICAgICAgICAgIGluY3IgajtcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gIWo7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgMCAtPlxuICAgICAgICAgICgqIGJhY2sgdG8gdGhlIGJlZ2lubmluZyAqKVxuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAoKiBmYWxsYmFjayBmb3IgdGhlIHByZWZpeCBzdHJpbmcgKilcbiAgICAgICAgICBhc3NlcnQgKCFqID4gMCk7XG4gICAgICAgICAgaiA6PSBmYWlsdXJlLighailcbiAgICAgIGRvbmU7XG4gICAgICAoKiBGb3JtYXQucHJpbnRmIFwie0BbZmFpbHVyZTolYSwgc3RyOiVzQF19QC5cIiBDQ0Zvcm1hdC4oYXJyYXkgaW50KSBmYWlsdXJlIHN0cjsgKilcbiAgICAgIHsgZmFpbHVyZTsgc3RyIH1cblxuICBsZXQga21wX2NvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOkRpcmVjdCBzXG4gIGxldCBrbXBfcmNvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOlJldmVyc2Ugc1xuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24uXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgaWR4IGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKCFpICsgIWopIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPSBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyICFqIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICAhaVxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbiwgZnJvbSB0aGUgcmlnaHQuXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfcmZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIChsZW4gLSBpZHggLSAxKSBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzIChsZW4gLSAhaSAtICFqIC0gMSkgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9XG4gICAgICAgIFN0cmluZy5nZXQgcGF0dGVybi5zdHIgKFN0cmluZy5sZW5ndGggcGF0dGVybi5zdHIgLSAhaiAtIDEpXG4gICAgICBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICAoKiBhZGp1c3QgcmVzdWx0OiBmaXJzdCwgW3JlcyA9IHN0cmluZy5sZW5ndGggcyAtIHJlcyAtMV0gdG8gY29udmVydFxuICAgICAgIGJhY2sgdG8gcmVhbCBpbmRpY2VzOyB0aGVuLCB3aGF0IHdlIGdvdCBpcyBhY3R1YWxseSB0aGUgcG9zaXRpb25cbiAgICAgICBvZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbyB3ZSBzdWJ0cmFjdCB0aGUgW2xlbmd0aCBvZiB0aGUgcGF0dGVybiAtMV1cbiAgICAgICB0byBvYnRhaW4gdGhlIHJlYWwgcmVzdWx0LiAqKVxuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICBsZW4gLSAhaSAtIGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuXG4gICAgZWxzZVxuICAgICAgLTFcblxuICB0eXBlICdhIHBhdHRlcm4gPVxuICAgIHwgUF9jaGFyIG9mIGNoYXJcbiAgICB8IFBfS01QIG9mICdhIGttcF9wYXR0ZXJuXG5cbiAgbGV0IHBhdHRlcm5fbGVuZ3RoID0gZnVuY3Rpb25cbiAgICB8IFBfY2hhciBfIC0+IDFcbiAgICB8IFBfS01QIHAgLT4ga21wX3BhdHRlcm5fbGVuZ3RoIHBcblxuICBsZXQgY29tcGlsZSBzdWIgOiBbIGBEaXJlY3QgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfY29tcGlsZSBzdWIpXG5cbiAgbGV0IHJjb21waWxlIHN1YiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfcmNvbXBpbGUgc3ViKVxuXG4gIGxldCBmaW5kID8oc3RhcnQgPSAwKSB+KHBhdHRlcm4gOiBbIGBEaXJlY3QgXSBwYXR0ZXJuKSBzID1cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5cbiAgbGV0IHJmaW5kID9zdGFydCB+KHBhdHRlcm4gOiBbIGBSZXZlcnNlIF0gcGF0dGVybikgcyA9XG4gICAgbGV0IHN0YXJ0ID1cbiAgICAgIG1hdGNoIHN0YXJ0IHdpdGhcbiAgICAgIHwgU29tZSBuIC0+IG5cbiAgICAgIHwgTm9uZSAtPiBTdHJpbmcubGVuZ3RoIHMgLSAxXG4gICAgaW5cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLnJpbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX3JmaW5kIH5wYXR0ZXJuIHMgc3RhcnRcbmVuZFxuXG5sZXQgZmluZCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLmZpbmQgfnN0YXJ0IH5wYXR0ZXJuIHNcblxubGV0IGZpbmRfYWxsID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+XG4gICAgbGV0IGkgPSByZWYgc3RhcnQgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGxldCByZXMgPSBGaW5kLmZpbmQgfnN0YXJ0OiFpIH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIHJlcyA9IH4tMSB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBpIDo9IHJlcyArIDE7XG4gICAgICAgICgqIHBvc3NpYmxlIG92ZXJsYXAgKilcbiAgICAgICAgU29tZSByZXNcbiAgICAgIClcblxubGV0IGZpbmRfYWxsX2wgP3N0YXJ0IH5zdWIgcyA9XG4gIGxldCByZWMgYXV4IGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIGkgLT4gYXV4IChpIDo6IGFjYykgZ1xuICBpblxuICBhdXggW10gKGZpbmRfYWxsID9zdGFydCB+c3ViIHMpXG5cbmxldCBtZW0gP3N0YXJ0IH5zdWIgcyA9IGZpbmQgP3N0YXJ0IH5zdWIgcyA+PSAwXG5cbmxldCByZmluZCB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLnJjb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLnJmaW5kIH5zdGFydDooU3RyaW5nLmxlbmd0aCBzIC0gMSkgfnBhdHRlcm4gc1xuXG4oKiBSZXBsYWNlIHN1YnN0cmluZyBbcy5bcG9zXSDigKYgcy5bcG9zK2xlbi0xXV0gYnkgW2J5XSBpbiBbc10gKilcbmxldCByZXBsYWNlX2F0XyB+cG9zIH5sZW4gfmJ5IHMgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKGxlbmd0aCBzICsgbGVuZ3RoIGJ5IC0gbGVuKSBpblxuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgMCBwb3M7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAocG9zICsgbGVuKSAoU3RyaW5nLmxlbmd0aCBzIC0gcG9zIC0gbGVuKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJlcGxhY2UgPyh3aGljaCA9IGBBbGwpIH5zdWIgfmJ5IHMgPVxuICBpZiBpc19lbXB0eSBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnJlcGxhY2VcIjtcbiAgbWF0Y2ggd2hpY2ggd2l0aFxuICB8IGBMZWZ0IC0+XG4gICAgbGV0IGkgPSBmaW5kIH5zdGFydDowIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBSaWdodCAtPlxuICAgIGxldCBpID0gcmZpbmQgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYEFsbCAtPlxuICAgICgqIGNvbXBpbGUgc2VhcmNoIHBhdHRlcm4gb25seSBvbmNlICopXG4gICAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgbGV0IHN0YXJ0ID0gcmVmIDAgaW5cbiAgICB3aGlsZSAhc3RhcnQgPCBTdHJpbmcubGVuZ3RoIHMgZG9cbiAgICAgIGxldCBpID0gRmluZC5maW5kIH5zdGFydDohc3RhcnQgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgaSA+PSAwIHRoZW4gKFxuICAgICAgICAoKiBiZXR3ZWVuIGxhc3QgYW5kIGN1ciBvY2N1cnJlbmNlcyAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChpIC0gIXN0YXJ0KTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgICAgICAgc3RhcnQgOj0gaSArIFN0cmluZy5sZW5ndGggc3ViXG4gICAgICApIGVsc2UgKFxuICAgICAgICAoKiBhZGQgcmVtYWluZGVyICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtICFzdGFydCk7XG4gICAgICAgIHN0YXJ0IDo9IFN0cmluZy5sZW5ndGggcyAoKiBzdG9wICopXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG5tb2R1bGUgU3BsaXQgPSBzdHJ1Y3RcbiAgdHlwZSBkcm9wX2lmX2VtcHR5ID0ge1xuICAgIGZpcnN0OiBib29sO1xuICAgIGxhc3Q6IGJvb2w7XG4gIH1cblxuICBsZXQgbm9fZHJvcCA9IHsgZmlyc3QgPSBmYWxzZTsgbGFzdCA9IGZhbHNlIH1cbiAgbGV0IGRlZmF1bHRfZHJvcCA9IG5vX2Ryb3BcblxuICB0eXBlIHNwbGl0X3N0YXRlID1cbiAgICB8IFNwbGl0U3RvcFxuICAgIHwgU3BsaXRBdCBvZiBpbnQgKCogcHJldmlvdXMgKilcblxuICBsZXQgcmVjIF9zcGxpdCB+YnkgcyBzdGF0ZSA9XG4gICAgbWF0Y2ggc3RhdGUgd2l0aFxuICAgIHwgU3BsaXRTdG9wIC0+IE5vbmVcbiAgICB8IFNwbGl0QXQgcHJldiAtPiBfc3BsaXRfc2VhcmNoIH5ieSBzIHByZXZcblxuICBhbmQgX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2ID1cbiAgICBsZXQgaiA9IEZpbmQuZmluZCB+c3RhcnQ6cHJldiB+cGF0dGVybjpieSBzIGluXG4gICAgaWYgaiA8IDAgdGhlblxuICAgICAgU29tZSAoU3BsaXRTdG9wLCBwcmV2LCBTdHJpbmcubGVuZ3RoIHMgLSBwcmV2KVxuICAgIGVsc2VcbiAgICAgIFNvbWUgKFNwbGl0QXQgKGogKyBGaW5kLnBhdHRlcm5fbGVuZ3RoIGJ5KSwgcHJldiwgaiAtIHByZXYpXG5cbiAgbGV0IF90dXBsZTMgeCB5IHogPSB4LCB5LCB6XG5cbiAgbGV0IF9ta2dlbiB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgc3RhdGUgPSByZWYgKFNwbGl0QXQgMCkgaW5cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgbWF0Y2ggX3NwbGl0IH5ieSBzICFzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gTm9uZVxuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIG5leHQgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIHN0YXRlIDo9IHN0YXRlJztcbiAgICAgICAgU29tZSAoayBzIGkgbGVuKVxuICAgIGluXG4gICAgbmV4dFxuXG4gIGxldCBnZW4gPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2dlbiB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBnZW5fY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtsaXN0IH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYnVpbGQgYWNjIHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgICB8IFNvbWUgKHN0YXRlJywgMCwgMCkgd2hlbiBkcm9wLmZpcnN0IC0+IGJ1aWxkIGFjYyBzdGF0ZSdcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT4gYnVpbGQgKGsgcyBpIGxlbiA6OiBhY2MpIHN0YXRlJ1xuICAgIGluXG4gICAgYnVpbGQgW10gKFNwbGl0QXQgMClcblxuICBsZXQgbGlzdF8gPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2xpc3QgfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgbGlzdF9jcHkgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2xpc3QgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtzZXEgfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBtYWtlIHN0YXRlICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gU2VxLk5pbFxuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBtYWtlIHN0YXRlJyAoKVxuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gU2VxLk5pbFxuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT4gU2VxLkNvbnMgKGsgcyBpIGxlbiwgbWFrZSBzdGF0ZScpXG4gICAgaW5cbiAgICBtYWtlIChTcGxpdEF0IDApXG5cbiAgbGV0IHNlcSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rc2VxIH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IHNlcV9jcHkgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBTdHJpbmcuc3ViXG5cbiAgbGV0IF9ta19pdGVyIH5kcm9wIH5ieSBzIGYgayA9XG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBhdXggc3RhdGUgPVxuICAgICAgbWF0Y2ggX3NwbGl0IH5ieSBzIHN0YXRlIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBhdXggc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiAoKVxuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT5cbiAgICAgICAgayAoZiBzIGkgbGVuKTtcbiAgICAgICAgYXV4IHN0YXRlJ1xuICAgIGluXG4gICAgYXV4IChTcGxpdEF0IDApXG5cbiAgbGV0IGl0ZXIgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta19pdGVyIH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGl0ZXJfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBTdHJpbmcuc3ViXG5cbiAgbGV0IGxlZnRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IGZpbmQgfnN1YjpieSBzIGluXG4gICAgaWYgaSA9IH4tMSB0aGVuXG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgICBlbHNlIChcbiAgICAgIGxldCByaWdodCA9IGkgKyBTdHJpbmcubGVuZ3RoIGJ5IGluXG4gICAgICBTdHJpbmcuc3ViIHMgMCBpLCBTdHJpbmcuc3ViIHMgcmlnaHQgKFN0cmluZy5sZW5ndGggcyAtIHJpZ2h0KVxuICAgIClcblxuICBsZXQgbGVmdCB+YnkgcyA9IHRyeSBTb21lIChsZWZ0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG4gIGxldCByaWdodF9leG4gfmJ5IHMgPVxuICAgIGxldCBpID0gcmZpbmQgfnN1YjpieSBzIGluXG4gICAgaWYgaSA9IH4tMSB0aGVuXG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgICBlbHNlIChcbiAgICAgIGxldCByaWdodCA9IGkgKyBTdHJpbmcubGVuZ3RoIGJ5IGluXG4gICAgICBTdHJpbmcuc3ViIHMgMCBpLCBTdHJpbmcuc3ViIHMgcmlnaHQgKFN0cmluZy5sZW5ndGggcyAtIHJpZ2h0KVxuICAgIClcblxuICBsZXQgcmlnaHQgfmJ5IHMgPSB0cnkgU29tZSAocmlnaHRfZXhuIH5ieSBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5lbmRcblxubGV0IHNwbGl0IH5ieSBzID0gU3BsaXQubGlzdF9jcHkgfmJ5IHNcblxubGV0IGNvbXBhcmVfdmVyc2lvbnMgYSBiID1cbiAgbGV0IG9mX2ludCBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZSBpblxuICBsZXQgcmVjIGNtcF9yZWMgYSBiID1cbiAgICBtYXRjaCBhICgpLCBiICgpIHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gMFxuICAgIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgIHwgU29tZSB4LCBTb21lIHkgLT5cbiAgICAgIChtYXRjaCBvZl9pbnQgeCwgb2ZfaW50IHkgd2l0aFxuICAgICAgfCBOb25lLCBOb25lIC0+XG4gICAgICAgIGxldCBjID0gU3RyaW5nLmNvbXBhcmUgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGJcbiAgICAgIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgICAgIHwgTm9uZSwgU29tZSBfIC0+IC0xXG4gICAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAgIGxldCBjID0gY29tcGFyZV9pbnQgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGIpXG4gIGluXG4gIGNtcF9yZWMgKFNwbGl0Lmdlbl9jcHkgfmJ5OlwiLlwiIGEpIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBiKVxuXG50eXBlIG5hdF9jaHVuayA9XG4gIHwgTkNfY2hhciBvZiBjaGFyXG4gIHwgTkNfaW50IG9mIGludFxuXG5sZXQgY29tcGFyZV9uYXR1cmFsIGEgYiA9XG4gICgqIHN0cmVhbSBvZiBjaHVua3MgKilcbiAgbGV0IGNodW5rcyBzIDogdW5pdCAtPiBuYXRfY2h1bmsgb3B0aW9uID1cbiAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIGlmICFpID0gbGVuZ3RoIHMgdGhlblxuICAgICAgICBOb25lXG4gICAgICBlbHNlIChcbiAgICAgICAgbWF0Y2ggU3RyaW5nLmdldCBzICFpIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgcmVhZF9pbnQgKENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJylcbiAgICAgICAgfCBjIC0+XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIFNvbWUgKE5DX2NoYXIgYylcbiAgICAgIClcbiAgICBhbmQgcmVhZF9pbnQgbiA9XG4gICAgICBpZiAhaSA9IGxlbmd0aCBzIHRoZW5cbiAgICAgICAgU29tZSAoTkNfaW50IG4pXG4gICAgICBlbHNlIChcbiAgICAgICAgbWF0Y2ggU3RyaW5nLmdldCBzICFpIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgcmVhZF9pbnQgKCgxMCAqIG4pICsgQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgICB8IF8gLT4gU29tZSAoTkNfaW50IG4pXG4gICAgICApXG4gICAgaW5cbiAgICBuZXh0XG4gIGluXG4gIGxldCByZWMgY21wX3JlYyBhIGIgPVxuICAgIG1hdGNoIGEgKCksIGIgKCkgd2l0aFxuICAgIHwgTm9uZSwgTm9uZSAtPiAwXG4gICAgfCBTb21lIF8sIE5vbmUgLT4gMVxuICAgIHwgTm9uZSwgU29tZSBfIC0+IC0xXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgKG1hdGNoIHgsIHkgd2l0aFxuICAgICAgfCBOQ19jaGFyIHgsIE5DX2NoYXIgeSAtPlxuICAgICAgICBsZXQgYyA9IENoYXIuY29tcGFyZSB4IHkgaW5cbiAgICAgICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgICAgICBjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjbXBfcmVjIGEgYlxuICAgICAgfCBOQ19pbnQgXywgTkNfY2hhciBfIC0+IDFcbiAgICAgIHwgTkNfY2hhciBfLCBOQ19pbnQgXyAtPiAtMVxuICAgICAgfCBOQ19pbnQgeCwgTkNfaW50IHkgLT5cbiAgICAgICAgbGV0IGMgPSBjb21wYXJlX2ludCB4IHkgaW5cbiAgICAgICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgICAgICBjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjbXBfcmVjIGEgYilcbiAgaW5cbiAgY21wX3JlYyAoY2h1bmtzIGEpIChjaHVua3MgYilcblxubGV0IGVkaXRfZGlzdGFuY2UgPyhjdXRvZmYgPSBtYXhfaW50KSBzMSBzMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBzMSBpblxuICBsZXQgbjIgPSBsZW5ndGggczIgaW5cbiAgaWYgbjEgPSAwIHRoZW5cbiAgICBtaW4gY3V0b2ZmIG4yXG4gIGVsc2UgaWYgbjIgPSAwIHRoZW5cbiAgICBtaW4gY3V0b2ZmIG4xXG4gIGVsc2UgaWYgZXF1YWwgczEgczIgdGhlblxuICAgIDBcbiAgZWxzZSBpZiBuMSAtIG4yID49IGN1dG9mZiB8fCBuMiAtIG4xID49IGN1dG9mZiB0aGVuXG4gICAgY3V0b2ZmXG4gICgqIGF0IGxlYXN0IGN1dG9mZiBpbnNlcnRzICopXG4gIGVsc2UgKFxuICAgIHRyeVxuICAgICAgKCogZGlzdGFuY2UgdmVjdG9ycyAodjA9cHJldmlvdXMsIHYxPWN1cnJlbnQpICopXG4gICAgICBsZXQgdjAgPSBBcnJheS5tYWtlIChsZW5ndGggczIgKyAxKSAwIGluXG4gICAgICBsZXQgdjEgPSBBcnJheS5tYWtlIChsZW5ndGggczIgKyAxKSAwIGluXG4gICAgICAoKiBpbml0aWFsaXplIHYwOiB2MChpKSA9IEEoMCkoaSkgPSBkZWxldGUgaSBjaGFycyBmcm9tIHQgKilcbiAgICAgIGxldCBsb3dlcl9ib3VuZCA9IHJlZiBtYXhfaW50IGluXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMyIGRvXG4gICAgICAgIHYwLihpKSA8LSBpXG4gICAgICBkb25lO1xuICAgICAgKCogbWFpbiBsb29wIGZvciB0aGUgYm90dG9tIHVwIGR5bmFtaWMgYWxnb3JpdGhtICopXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMxIC0gMSBkb1xuICAgICAgICAoKiBmaXJzdCBlZGl0IGRpc3RhbmNlIGlzIHRoZSBkZWxldGlvbiBvZiBpKzEgZWxlbWVudHMgZnJvbSBzICopXG4gICAgICAgIHYxLigwKSA8LSBpICsgMTtcblxuICAgICAgICAoKiB0cnkgYWRkL2RlbGV0ZS9yZXBsYWNlIG9wZXJhdGlvbnMgKilcbiAgICAgICAgZm9yIGogPSAwIHRvIGxlbmd0aCBzMiAtIDEgZG9cbiAgICAgICAgICBsZXQgY29zdCA9XG4gICAgICAgICAgICBpZiBDaGFyLmVxdWFsIChTdHJpbmcuZ2V0IHMxIGkpIChTdHJpbmcuZ2V0IHMyIGopIHRoZW5cbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgaW5cbiAgICAgICAgICB2MS4oaiArIDEpIDwtIG1pbiAodjEuKGopICsgMSkgKG1pbiAodjAuKGogKyAxKSArIDEpICh2MC4oaikgKyBjb3N0KSlcbiAgICAgICAgZG9uZTtcblxuICAgICAgICBpZlxuICAgICAgICAgIGN1dG9mZiA8IEFycmF5Lmxlbmd0aCB2MVxuICAgICAgICAgICYmIGkgPD0gMiAqIGN1dG9mZlxuICAgICAgICAgICYmICgyICogY3V0b2ZmKSAtIGkgPCBTdHJpbmcubGVuZ3RoIHMyXG4gICAgICAgIHRoZW5cbiAgICAgICAgICBsb3dlcl9ib3VuZCA6PSBtaW4gIWxvd2VyX2JvdW5kIHYxLigoMiAqIGN1dG9mZikgLSBpKTtcbiAgICAgICAgKCogZGlkIHdlIGNvbXB1dGUgdXAgdG8gdGhlIGRpYWdvbmFsIDIqY3V0b2ZmKzE/ICopXG4gICAgICAgIGlmIGN1dG9mZiA8IEFycmF5Lmxlbmd0aCB2MSAmJiBpID0gY3V0b2ZmICogMiAmJiAhbG93ZXJfYm91bmQgPj0gY3V0b2ZmXG4gICAgICAgIHRoZW5cbiAgICAgICAgICByYWlzZV9ub3RyYWNlIEV4aXQ7XG5cbiAgICAgICAgKCogY29weSB2MSBpbnRvIHYwIGZvciBuZXh0IGl0ZXJhdGlvbiAqKVxuICAgICAgICBBcnJheS5ibGl0IHYxIDAgdjAgMCAobGVuZ3RoIHMyICsgMSlcbiAgICAgIGRvbmU7XG4gICAgICB2MS4obGVuZ3RoIHMyKVxuICAgIHdpdGggRXhpdCAtPiBjdXRvZmZcbiAgKVxuXG5sZXQgcmVwZWF0IHMgbiA9XG4gIGFzc2VydCAobiA+PSAwKTtcbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBhc3NlcnQgKGxlbiA+IDApO1xuICBpbml0IChsZW4gKiBuKSAoZnVuIGkgLT4gcy5baSBtb2QgbGVuXSlcblxubGV0IHByZWZpeCB+cHJlIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBwcmUgaW5cbiAgaWYgbGVuID4gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBmYWxzZVxuICBlbHNlIChcbiAgICBsZXQgcmVjIGNoZWNrIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuXG4gICAgICAgIHRydWVcbiAgICAgIGVsc2UgaWYgU3RkbGliLiggPD4gKSAoU3RyaW5nLnVuc2FmZV9nZXQgcyBpKSAoU3RyaW5nLnVuc2FmZV9nZXQgcHJlIGkpXG4gICAgICB0aGVuXG4gICAgICAgIGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIGNoZWNrIChpICsgMSlcbiAgICBpblxuICAgIGNoZWNrIDBcbiAgKVxuXG5sZXQgc3VmZml4IH5zdWYgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN1ZiBpblxuICBpZiBsZW4gPiBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCBvZmYgPSBTdHJpbmcubGVuZ3RoIHMgLSBsZW4gaW5cbiAgICBsZXQgcmVjIGNoZWNrIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuXG4gICAgICAgIHRydWVcbiAgICAgIGVsc2UgaWZcbiAgICAgICAgU3RkbGliLiggPD4gKSAoU3RyaW5nLnVuc2FmZV9nZXQgcyAob2ZmICsgaSkpIChTdHJpbmcudW5zYWZlX2dldCBzdWYgaSlcbiAgICAgIHRoZW5cbiAgICAgICAgZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgY2hlY2sgKGkgKyAxKVxuICAgIGluXG4gICAgY2hlY2sgMFxuICApXG5cbmxldCB0YWtlIG4gcyA9XG4gIGlmIG4gPCBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIFN0cmluZy5zdWIgcyAwIG5cbiAgZWxzZVxuICAgIHNcblxubGV0IGRyb3AgbiBzID1cbiAgaWYgbiA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIG4gKFN0cmluZy5sZW5ndGggcyAtIG4pXG4gIGVsc2VcbiAgICBcIlwiXG5cbmxldCB0YWtlX2Ryb3AgbiBzID0gdGFrZSBuIHMsIGRyb3AgbiBzXG5cbmxldCBjaG9wX3N1ZmZpeCB+c3VmIHMgPVxuICBpZiBzdWZmaXggfnN1ZiBzIHRoZW5cbiAgICBTb21lIChTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBzIC0gU3RyaW5nLmxlbmd0aCBzdWYpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgY2hvcF9wcmVmaXggfnByZSBzID1cbiAgaWYgcHJlZml4IH5wcmUgcyB0aGVuXG4gICAgU29tZVxuICAgICAgKFN0cmluZy5zdWIgcyAoU3RyaW5nLmxlbmd0aCBwcmUpIChTdHJpbmcubGVuZ3RoIHMgLSBTdHJpbmcubGVuZ3RoIHByZSkpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBibGl0ID0gU3RyaW5nLmJsaXRcblxubGV0IGZvbGQgZiBhY2MgcyA9XG4gIGxldCByZWMgZm9sZF9yZWMgZiBhY2MgcyBpID1cbiAgICBpZiBpID0gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGZvbGRfcmVjIGYgKGYgYWNjIHMuW2ldKSBzIChpICsgMSlcbiAgaW5cbiAgZm9sZF9yZWMgZiBhY2MgcyAwXG5cbmxldCBmb2xkaSBmIGFjYyBzID1cbiAgbGV0IHJlYyBmb2xkX3JlYyBmIGFjYyBzIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZF9yZWMgZiAoZiBhY2MgaSBzLltpXSkgcyAoaSArIDEpXG4gIGluXG4gIGZvbGRfcmVjIGYgYWNjIHMgMFxuXG5sZXQgcGFkID8oc2lkZSA9IGBMZWZ0KSA/KGMgPSAnICcpIG4gcyA9XG4gIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggcyBpblxuICBpZiBsZW5fcyA+PSBuIHRoZW5cbiAgICBzXG4gIGVsc2UgKFxuICAgIGxldCBwYWRfbGVuID0gbiAtIGxlbl9zIGluXG4gICAgbWF0Y2ggc2lkZSB3aXRoXG4gICAgfCBgTGVmdCAtPlxuICAgICAgaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgIGlmIGkgPCBwYWRfbGVuIHRoZW5cbiAgICAgICAgICAgIGNcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBzLltpIC0gcGFkX2xlbl0pXG4gICAgfCBgUmlnaHQgLT5cbiAgICAgIGluaXQgbiAoZnVuIGkgLT5cbiAgICAgICAgICBpZiBpIDwgbGVuX3MgdGhlblxuICAgICAgICAgICAgcy5baV1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBjKVxuICApXG5cbmxldCBfdG9fZ2VuIHMgaTAgbGVuID1cbiAgbGV0IGkgPSByZWYgaTAgaW5cbiAgZnVuICgpIC0+XG4gICAgaWYgIWkgPSBpMCArIGxlbiB0aGVuXG4gICAgICBOb25lXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYyA9IFN0cmluZy51bnNhZmVfZ2V0IHMgIWkgaW5cbiAgICAgIGluY3IgaTtcbiAgICAgIFNvbWUgY1xuICAgIClcblxubGV0IHRvX2dlbiBzID0gX3RvX2dlbiBzIDAgKFN0cmluZy5sZW5ndGggcylcbmxldCBvZl9jaGFyIGMgPSBTdHJpbmcubWFrZSAxIGNcblxubGV0IG9mX2dlbiBnID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIGxldCByZWMgYXV4ICgpID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gQnVmZmVyLmNvbnRlbnRzIGJcbiAgICB8IFNvbWUgYyAtPlxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgYztcbiAgICAgIGF1eCAoKVxuICBpblxuICBhdXggKClcblxubGV0IHRvX2l0ZXIgcyBrID0gU3RyaW5nLml0ZXIgayBzXG5cbmxldCByZWMgX3RvX3NlcSBzIGkgbGVuICgpID1cbiAgaWYgbGVuID0gMCB0aGVuXG4gICAgU2VxLk5pbFxuICBlbHNlXG4gICAgU2VxLkNvbnMgKHMuW2ldLCBfdG9fc2VxIHMgKGkgKyAxKSAobGVuIC0gMSkpXG5cbmxldCB0b19zZXEgcyA9IF90b19zZXEgcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBvZl9pdGVyIGkgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgaSAoQnVmZmVyLmFkZF9jaGFyIGIpO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgb2Zfc2VxIHNlcSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBTZXEuaXRlciAoQnVmZmVyLmFkZF9jaGFyIGIpIHNlcTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHRvX2xpc3QgcyA9IF90b19saXN0IHMgW10gMCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgb2ZfbGlzdCBsID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKExpc3QubGVuZ3RoIGwpIGluXG4gIExpc3QuaXRlciAoQnVmZmVyLmFkZF9jaGFyIGJ1ZikgbDtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgb2ZfYXJyYXkgYSA9IGluaXQgKEFycmF5Lmxlbmd0aCBhKSAoZnVuIGkgLT4gYS4oaSkpXG5sZXQgdG9fYXJyYXkgcyA9IEFycmF5LmluaXQgKFN0cmluZy5sZW5ndGggcykgKGZ1biBpIC0+IHMuW2ldKVxuXG5sZXQgbGluZXNfZ2VuIHMgPVxuICBTcGxpdC5nZW5fY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lc19pdGVyIHMgPVxuICBTcGxpdC5pdGVyX2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgbGluZXNfc2VxIHMgPVxuICBTcGxpdC5zZXFfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lcyBzID1cbiAgU3BsaXQubGlzdF9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGNvbmNhdF9nZW5fYnVmIH5zZXAgZyA6IEJ1ZmZlci50ID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgcmVjIGF1eCB+Zmlyc3QgKCkgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBiXG4gICAgfCBTb21lIHMgLT5cbiAgICAgIGlmIG5vdCBmaXJzdCB0aGVuIEJ1ZmZlci5hZGRfc3RyaW5nIGIgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICAgICAgYXV4IH5maXJzdDpmYWxzZSAoKVxuICBpblxuICBhdXggfmZpcnN0OnRydWUgKClcblxubGV0IGNvbmNhdF9nZW4gfnNlcCBnID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9nZW5fYnVmIH5zZXAgZyBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjb25jYXRfaXRlcl9idWYgfnNlcCBpIDogQnVmZmVyLnQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgaSAoZnVuIHMgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcyk7XG4gIGJ1ZlxuXG5sZXQgY29uY2F0X2l0ZXIgfnNlcCBpID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9pdGVyX2J1ZiB+c2VwIGkgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgY29uY2F0X3NlcV9idWYgfnNlcCBzZXEgOiBCdWZmZXIudCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBTZXEuaXRlclxuICAgIChmdW4gcyAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzKVxuICAgIHNlcTtcbiAgYnVmXG5cbmxldCBjb25jYXRfc2VxIH5zZXAgc2VxID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9zZXFfYnVmIH5zZXAgc2VxIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVubGluZXMgbCA9XG4gIGxldCBsZW4gPSBMaXN0LmZvbGRfbGVmdCAoZnVuIG4gcyAtPiBuICsgMSArIFN0cmluZy5sZW5ndGggcykgMCBsIGluXG4gIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgbGVuIGluXG4gIGxldCByZWMgYXV4X2JsaXQgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+XG4gICAgICBhc3NlcnQgKGkgPSBsZW4pO1xuICAgICAgQnl0ZXMudG9fc3RyaW5nIGJ1ZlxuICAgIHwgcyA6OiB0YWlsIC0+XG4gICAgICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICAgIEJ5dGVzLmJsaXRfc3RyaW5nIHMgMCBidWYgaSBsZW5fcztcbiAgICAgIEJ5dGVzLnNldCBidWYgKGkgKyBsZW5fcykgJ1xcbic7XG4gICAgICBhdXhfYmxpdCAoaSArIGxlbl9zICsgMSkgdGFpbFxuICBpblxuICBhdXhfYmxpdCAwIGxcblxubGV0IHVubGluZXNfZ2VuIGcgPVxuICBsZXQgYnVmID0gY29uY2F0X2dlbl9idWYgfnNlcDpcIlxcblwiIGcgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lc19pdGVyIGkgPVxuICBsZXQgYnVmID0gY29uY2F0X2l0ZXJfYnVmIH5zZXA6XCJcXG5cIiBpIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbic7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVubGluZXNfc2VxIHNlcSA9XG4gIGxldCBidWYgPSBjb25jYXRfc2VxX2J1ZiB+c2VwOlwiXFxuXCIgc2VxIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbic7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHNldCBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gU3RyaW5nLmxlbmd0aCBzIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5zZXRcIjtcbiAgaW5pdCAoU3RyaW5nLmxlbmd0aCBzKSAoZnVuIGogLT5cbiAgICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgICAgY1xuICAgICAgZWxzZVxuICAgICAgICBzLltqXSlcblxubGV0IGl0ZXIgPSBTdHJpbmcuaXRlclxuXG5sZXQgZmlsdGVyX21hcCBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyXG4gICAgKGZ1biBjIC0+XG4gICAgICBtYXRjaCBmIGMgd2l0aFxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgYycgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjJylcbiAgICBzO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBmaWx0ZXIgZiBzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgaXRlciAoZnVuIGMgLT4gaWYgZiBjIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjKSBzO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmlxIGVxIHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPSAwIHRoZW5cbiAgICBzXG4gIGVsc2UgKFxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBzLlswXTtcbiAgICBsZXQgXyA9XG4gICAgICBmb2xkXG4gICAgICAgIChmdW4gcHJldmlvdXNfYyBjIC0+XG4gICAgICAgICAgaWYgbm90IChlcSBwcmV2aW91c19jIGMpIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjO1xuICAgICAgICAgIGMpXG4gICAgICAgIHMuWzBdIHNcbiAgICBpblxuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgKVxuXG5sZXQgZmxhdF9tYXAgP3NlcCBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyaVxuICAgIChmdW4gaSBjIC0+XG4gICAgICAobWF0Y2ggc2VwIHdpdGhcbiAgICAgIHwgU29tZSBfIHdoZW4gaSA9IDAgLT4gKClcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIHNlcCAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwKTtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoZiBjKSlcbiAgICBzO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmV4Y2VwdGlvbiBNeUV4aXRcblxubGV0IGZvcl9hbGwgcCBzID1cbiAgdHJ5XG4gICAgaXRlciAoZnVuIGMgLT4gaWYgbm90IChwIGMpIHRoZW4gcmFpc2UgTXlFeGl0KSBzO1xuICAgIHRydWVcbiAgd2l0aCBNeUV4aXQgLT4gZmFsc2VcblxubGV0IGV4aXN0cyBwIHMgPVxuICB0cnlcbiAgICBpdGVyIChmdW4gYyAtPiBpZiBwIGMgdGhlbiByYWlzZSBNeUV4aXQpIHM7XG4gICAgZmFsc2VcbiAgd2l0aCBNeUV4aXQgLT4gdHJ1ZVxuXG5sZXQgZHJvcF93aGlsZSBmIHMgPVxuICBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpIDwgbGVuZ3RoIHMgJiYgZiAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBpZiAhaSA+IDAgdGhlblxuICAgIHN1YiBzICFpIChsZW5ndGggcyAtICFpKVxuICBlbHNlXG4gICAgc1xuXG5sZXQgcmRyb3Bfd2hpbGUgZiBzID1cbiAgbGV0IGkgPSByZWYgKGxlbmd0aCBzIC0gMSkgaW5cbiAgd2hpbGUgIWkgPj0gMCAmJiBmICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgZGVjciBpXG4gIGRvbmU7XG4gIGlmICFpIDwgbGVuZ3RoIHMgLSAxIHRoZW5cbiAgICBzdWIgcyAwICghaSArIDEpXG4gIGVsc2VcbiAgICBzXG5cbigqIG5vdGlvbiBvZiB3aGl0ZXNwYWNlIGZvciB0cmltICopXG5sZXQgaXNfc3BhY2VfID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBsdHJpbSBzID0gZHJvcF93aGlsZSBpc19zcGFjZV8gc1xubGV0IHJ0cmltIHMgPSByZHJvcF93aGlsZSBpc19zcGFjZV8gc1xuXG5sZXQgbWFwMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcubWFwMlwiO1xuICBpbml0IChTdHJpbmcubGVuZ3RoIHMxKSAoZnVuIGkgLT4gZiBzMS5baV0gczIuW2ldKVxuXG5sZXQgaXRlcjIgZiBzMSBzMiA9XG4gIGlmIGxlbmd0aCBzMSA8PiBsZW5ndGggczIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLml0ZXIyXCI7XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMxIC0gMSBkb1xuICAgIGYgczEuW2ldIHMyLltpXVxuICBkb25lXG5cbmxldCBpdGVyaTIgZiBzMSBzMiA9XG4gIGlmIGxlbmd0aCBzMSA8PiBsZW5ndGggczIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLml0ZXJpMlwiO1xuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzMSAtIDEgZG9cbiAgICBmIGkgczEuW2ldIHMyLltpXVxuICBkb25lXG5cbmxldCBmb2xkMiBmIGFjYyBzMSBzMiA9XG4gIGlmIGxlbmd0aCBzMSA8PiBsZW5ndGggczIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLmZvbGQyXCI7XG4gIGxldCByZWMgZm9sZCcgYWNjIHMxIHMyIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMxIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGZvbGQnIChmIGFjYyBzMS5baV0gczIuW2ldKSBzMSBzMiAoaSArIDEpXG4gIGluXG4gIGZvbGQnIGFjYyBzMSBzMiAwXG5cbmxldCBmb3JfYWxsMiBwIHMxIHMyID1cbiAgdHJ5XG4gICAgaXRlcjIgKGZ1biBjMSBjMiAtPiBpZiBub3QgKHAgYzEgYzIpIHRoZW4gcmFpc2UgTXlFeGl0KSBzMSBzMjtcbiAgICB0cnVlXG4gIHdpdGggTXlFeGl0IC0+IGZhbHNlXG5cbmxldCBleGlzdHMyIHAgczEgczIgPVxuICB0cnlcbiAgICBpdGVyMiAoZnVuIGMxIGMyIC0+IGlmIHAgYzEgYzIgdGhlbiByYWlzZSBNeUV4aXQpIHMxIHMyO1xuICAgIGZhbHNlXG4gIHdpdGggTXlFeGl0IC0+IHRydWVcblxuKCoqIHsyIEFzY2lpIGZ1bmN0aW9uc30gKilcblxubGV0IGVxdWFsX2Nhc2VsZXNzIHMxIHMyIDogYm9vbCA9XG4gIFN0cmluZy5sZW5ndGggczEgPSBTdHJpbmcubGVuZ3RoIHMyXG4gICYmIGZvcl9hbGwyXG4gICAgICAgKGZ1biBjMSBjMiAtPlxuICAgICAgICAgQ0NDaGFyLmVxdWFsIChDQ0NoYXIubG93ZXJjYXNlX2FzY2lpIGMxKSAoQ0NDaGFyLmxvd2VyY2FzZV9hc2NpaSBjMikpXG4gICAgICAgczEgczJcblxubGV0IHRvX2hleCAocyA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgaV90b19oZXggKGkgOiBpbnQpID1cbiAgICBpZiBpIDwgMTAgdGhlblxuICAgICAgQ2hhci5jaHIgKGkgKyBDaGFyLmNvZGUgJzAnKVxuICAgIGVsc2VcbiAgICAgIENoYXIuY2hyIChpIC0gMTAgKyBDaGFyLmNvZGUgJ2EnKVxuICBpblxuXG4gIGxldCByZXMgPSBCeXRlcy5jcmVhdGUgKDIgKiBsZW5ndGggcykgaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgIGxldCBuID0gQ2hhci5jb2RlIChnZXQgcyBpKSBpblxuICAgIEJ5dGVzLnNldCByZXMgKDIgKiBpKSAoaV90b19oZXggKChuIGxhbmQgMHhmMCkgbHNyIDQpKTtcbiAgICBCeXRlcy5zZXQgcmVzICgoMiAqIGkpICsgMSkgKGlfdG9faGV4IChuIGxhbmQgMHgwZikpXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbmxldCBvZl9oZXhfZXhuIChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBuX29mX2MgPSBmdW5jdGlvblxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJ1xuICAgIHwgJ2EnIC4uICdmJyBhcyBjIC0+IDEwICsgQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ2EnXG4gICAgfCAnQScgLi4gJ0YnIGFzIGMgLT4gMTAgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnQSdcbiAgICB8IF8gLT4gaW52YWxpZF9hcmcgXCJzdHJpbmc6IGludmFsaWQgaGV4XCJcbiAgaW5cbiAgaWYgU3RyaW5nLmxlbmd0aCBzIG1vZCAyIDw+IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwic3RyaW5nOiBoZXggc2VxdWVuY2UgbXVzdCBiZSBvZiBldmVuIGxlbmd0aFwiO1xuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAoU3RyaW5nLmxlbmd0aCBzIC8gMikgJ1xceDAwJyBpblxuICBmb3IgaSA9IDAgdG8gKFN0cmluZy5sZW5ndGggcyAvIDIpIC0gMSBkb1xuICAgIGxldCBuMSA9IG5fb2ZfYyAoU3RyaW5nLmdldCBzICgyICogaSkpIGluXG4gICAgbGV0IG4yID0gbl9vZl9jIChTdHJpbmcuZ2V0IHMgKCgyICogaSkgKyAxKSkgaW5cbiAgICBsZXQgbiA9IChuMSBsc2wgNCkgbG9yIG4yIGluXG4gICAgQnl0ZXMuc2V0IHJlcyBpIChDaGFyLmNociBuKVxuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG5sZXQgb2ZfaGV4IHMgPSB0cnkgU29tZSAob2ZfaGV4X2V4biBzKSB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiBOb25lXG5cbmxldCBwcF9idWYgYnVmIHMgPVxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIic7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzO1xuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIidcblxubGV0IHBwIGZtdCBzID0gRm9ybWF0LmZwcmludGYgZm10IFwiXFxcIiVzXFxcIlwiIHNcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID0gKSA9IGVxdWFsXG4gIGxldCAoIDw+ICkgYSBiID0gbm90IChlcXVhbCBhIGIpXG4gIGxldCAoID4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPiApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbiAgbGV0ICggPCApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8IClcbiAgbGV0ICggPD0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD0gKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBNdWx0aW1hcH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICB0eXBlIGtleVxuICB0eXBlIHZhbHVlXG4gIHR5cGUgdFxuXG4gIHZhbCBlbXB0eSA6IHRcbiAgKCoqIEVtcHR5IG11bHRpbWFwICopXG5cbiAgdmFsIGlzX2VtcHR5IDogdCAtPiBib29sXG4gICgqKiBFbXB0eSBtdWx0aW1hcD8gKilcblxuICB2YWwgYWRkIDogdCAtPiBrZXkgLT4gdmFsdWUgLT4gdFxuICAoKiogQWRkIGEga2V5L3ZhbHVlIGJpbmRpbmcgKilcblxuICB2YWwgcmVtb3ZlIDogdCAtPiBrZXkgLT4gdmFsdWUgLT4gdFxuICAoKiogUmVtb3ZlIHRoZSBiaW5kaW5nICopXG5cbiAgdmFsIHJlbW92ZV9hbGwgOiB0IC0+IGtleSAtPiB0XG4gICgqKiBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBtYXAgKilcblxuICB2YWwgbWVtIDogdCAtPiBrZXkgLT4gYm9vbFxuICAoKiogSXMgdGhlcmUgYSBiaW5kaW5nIGZvciB0aGlzIGtleT8gKilcblxuICB2YWwgZmluZCA6IHQgLT4ga2V5IC0+IHZhbHVlIGxpc3RcbiAgKCoqIExpc3Qgb2YgdmFsdWVzIGZvciB0aGlzIGtleSAqKVxuXG4gIHZhbCBmaW5kX2l0ZXIgOiB0IC0+IGtleSAtPiB2YWx1ZSBpdGVyXG4gICgqKiBJdGVyYXRlIG9uIGJpbmRpbmdzIGZvciB0aGlzIGtleSAqKVxuXG4gIHZhbCBjb3VudCA6IHQgLT4ga2V5IC0+IGludFxuICAoKiogTnVtYmVyIG9mIGJpbmRpbmdzIGZvciB0aGlzIGtleSAqKVxuXG4gIHZhbCBpdGVyIDogdCAtPiAoa2V5IC0+IHZhbHVlIC0+IHVuaXQpIC0+IHVuaXRcbiAgKCoqIEl0ZXJhdGUgb24gYWxsIGtleS92YWx1ZSAqKVxuXG4gIHZhbCBmb2xkIDogdCAtPiAnYSAtPiAoJ2EgLT4ga2V5IC0+IHZhbHVlIC0+ICdhKSAtPiAnYVxuICAoKiogRm9sZCBvbiBhbGwga2V5L3ZhbHVlICopXG5cbiAgdmFsIHNpemUgOiB0IC0+IGludFxuICAoKiogTnVtYmVyIG9mIGtleXMgKilcblxuICB2YWwgdW5pb24gOiB0IC0+IHQgLT4gdFxuICAoKiogVW5pb24gb2YgbXVsdGltYXBzICopXG5cbiAgdmFsIGludGVyIDogdCAtPiB0IC0+IHRcbiAgKCoqIEludGVyc2VjdGlvbiBvZiBtdWx0aW1hcHMgKilcblxuICB2YWwgZGlmZiA6IHQgLT4gdCAtPiB0XG4gICgqKiBEaWZmZXJlbmNlIG9mIG1hcHMsIGllIGJpbmRpbmdzIG9mIHRoZSBmaXJzdCB0aGF0IGFyZSBub3RcbiAgICAgIGluIHRoZSBzZWNvbmQgKilcblxuICB2YWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbFxuICAoKiogU2FtZSBtdWx0aW1hcCAqKVxuXG4gIHZhbCBjb21wYXJlIDogdCAtPiB0IC0+IGludFxuICAoKiogVG90YWwgb3JkZXIgb24gbXVsdGltYXBzICopXG5cbiAgdmFsIHN1Ym1hcCA6IHQgLT4gdCAtPiBib29sXG4gICgqKiBbc3VibWFwIG0xIG0yXSBpcyB0cnVlIGlmZiBhbGwgYmluZGluZ3Mgb2YgW20xXSBhcmUgYWxzbyBpbiBbbTJdICopXG5cbiAgdmFsIHRvX2l0ZXIgOiB0IC0+IChrZXkgKiB2YWx1ZSkgaXRlclxuICB2YWwgb2ZfaXRlciA6ID9pbml0OnQgLT4gKGtleSAqIHZhbHVlKSBpdGVyIC0+IHRcbiAgdmFsIGtleXMgOiB0IC0+IGtleSBpdGVyXG5cbiAgdmFsIHZhbHVlcyA6IHQgLT4gdmFsdWUgaXRlclxuICAoKiogU29tZSB2YWx1ZXMgbWF5IG9jY3VyIHNldmVyYWwgdGltZXMgKilcbmVuZFxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgY29tcGFyZSA6IHQgLT4gdCAtPiBpbnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoSyA6IE9yZGVyZWRUeXBlKSAoViA6IE9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuICB0eXBlIGtleSA9IEsudFxuICB0eXBlIHZhbHVlID0gVi50XG5cbiAgbW9kdWxlIE0gPSBNYXAuTWFrZSAoSylcbiAgbW9kdWxlIFMgPSBTZXQuTWFrZSAoVilcblxuICB0eXBlIHQgPSBTLnQgTS50XG4gICgqKiBNYXAgb2Ygc2V0cyAqKVxuXG4gIGxldCBlbXB0eSA9IE0uZW1wdHlcbiAgbGV0IGlzX2VtcHR5ID0gTS5pc19lbXB0eVxuXG4gIGxldCBhZGQgbSBrIHYgPVxuICAgIGxldCBzZXQgPSB0cnkgTS5maW5kIGsgbSB3aXRoIE5vdF9mb3VuZCAtPiBTLmVtcHR5IGluXG4gICAgTS5hZGQgayAoUy5hZGQgdiBzZXQpIG1cblxuICBsZXQgcmVtb3ZlIG0gayB2ID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBsZXQgc2V0JyA9IFMucmVtb3ZlIHYgc2V0IGluXG4gICAgICBpZiBTLmlzX2VtcHR5IHNldCcgdGhlblxuICAgICAgICBNLnJlbW92ZSBrIG1cbiAgICAgIGVsc2VcbiAgICAgICAgTS5hZGQgayBzZXQnIG1cbiAgICB3aXRoIE5vdF9mb3VuZCAtPiBtXG5cbiAgbGV0IHJlbW92ZV9hbGwgbSBrID0gTS5yZW1vdmUgayBtXG4gIGxldCBtZW0gbSBrID0gTS5tZW0gayBtXG5cbiAgbGV0IGZpbmQgbSBrID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBTLmVsZW1lbnRzIHNldFxuICAgIHdpdGggTm90X2ZvdW5kIC0+IFtdXG5cbiAgbGV0IGZpbmRfaXRlciBtIGsgZiA9XG4gICAgdHJ5XG4gICAgICBsZXQgc2V0ID0gTS5maW5kIGsgbSBpblxuICAgICAgUy5pdGVyIGYgc2V0XG4gICAgd2l0aCBOb3RfZm91bmQgLT4gKClcblxuICBsZXQgY291bnQgbSBrID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBTLmNhcmRpbmFsIHNldFxuICAgIHdpdGggTm90X2ZvdW5kIC0+IDBcblxuICBsZXQgaXRlciBtIGYgPSBNLml0ZXIgKGZ1biBrIHNldCAtPiBTLml0ZXIgKGZ1biB2IC0+IGYgayB2KSBzZXQpIG1cblxuICBsZXQgZm9sZCBtIGFjYyBmID1cbiAgICBNLmZvbGQgKGZ1biBrIHNldCBhY2MgLT4gUy5mb2xkIChmdW4gdiBhY2MgLT4gZiBhY2MgayB2KSBzZXQgYWNjKSBtIGFjY1xuXG4gIGxldCBzaXplIG0gPSBNLmNhcmRpbmFsIG1cblxuICBsZXQgdW5pb24gbTEgbTIgPVxuICAgIE0ubWVyZ2VcbiAgICAgIChmdW4gX2sgdjEgdjIgLT5cbiAgICAgICAgbWF0Y2ggdjEsIHYyIHdpdGhcbiAgICAgICAgfCBOb25lLCBOb25lIC0+IE5vbmVcbiAgICAgICAgfCBTb21lIHNldDEsIFNvbWUgc2V0MiAtPiBTb21lIChTLnVuaW9uIHNldDEgc2V0MilcbiAgICAgICAgfCBTb21lIHNldCwgTm9uZSB8IE5vbmUsIFNvbWUgc2V0IC0+IFNvbWUgc2V0KVxuICAgICAgbTEgbTJcblxuICBsZXQgaW50ZXIgbTEgbTIgPVxuICAgIE0ubWVyZ2VcbiAgICAgIChmdW4gX2sgdjEgdjIgLT5cbiAgICAgICAgbWF0Y2ggdjEsIHYyIHdpdGhcbiAgICAgICAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiBOb25lXG4gICAgICAgIHwgU29tZSBzZXQxLCBTb21lIHNldDIgLT5cbiAgICAgICAgICBsZXQgc2V0ID0gUy5pbnRlciBzZXQxIHNldDIgaW5cbiAgICAgICAgICBpZiBTLmlzX2VtcHR5IHNldCB0aGVuXG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgU29tZSBzZXQpXG4gICAgICBtMSBtMlxuXG4gIGxldCBkaWZmIG0xIG0yID1cbiAgICBNLm1lcmdlXG4gICAgICAoZnVuIF9rIHYxIHYyIC0+XG4gICAgICAgIG1hdGNoIHYxLCB2MiB3aXRoXG4gICAgICAgIHwgTm9uZSwgXyAtPiBOb25lXG4gICAgICAgIHwgU29tZSBzZXQsIE5vbmUgLT4gU29tZSBzZXRcbiAgICAgICAgfCBTb21lIHNldDEsIFNvbWUgc2V0MiAtPlxuICAgICAgICAgIGxldCBzZXQnID0gUy5kaWZmIHNldDEgc2V0MiBpblxuICAgICAgICAgIGlmIFMuaXNfZW1wdHkgc2V0JyB0aGVuXG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgU29tZSBzZXQnKVxuICAgICAgbTEgbTJcblxuICBsZXQgZXF1YWwgbTEgbTIgPSBNLmVxdWFsIFMuZXF1YWwgbTEgbTJcbiAgbGV0IGNvbXBhcmUgbTEgbTIgPSBNLmNvbXBhcmUgUy5jb21wYXJlIG0xIG0yXG5cbiAgbGV0IHN1Ym1hcCBtMSBtMiA9XG4gICAgTS5mb3JfYWxsXG4gICAgICAoZnVuIGsgc2V0MSAtPlxuICAgICAgICB0cnlcbiAgICAgICAgICBsZXQgc2V0MiA9IE0uZmluZCBrIG0yIGluXG4gICAgICAgICAgUy5zdWJzZXQgc2V0MSBzZXQyXG4gICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlKVxuICAgICAgbTFcblxuICBsZXQgdG9faXRlciBtIGsgPSBpdGVyIG0gKGZ1biB4IHkgLT4gayAoeCwgeSkpXG5cbiAgbGV0IG9mX2l0ZXIgPyhpbml0ID0gZW1wdHkpIHNlcSA9XG4gICAgbGV0IG0gPSByZWYgaW5pdCBpblxuICAgIHNlcSAoZnVuIChrLCB2KSAtPiBtIDo9IGFkZCAhbSBrIHYpO1xuICAgICFtXG5cbiAgbGV0IGtleXMgbSBrID0gTS5pdGVyIChmdW4geCBfIC0+IGsgeCkgbVxuICBsZXQgdmFsdWVzIG0gayA9IGl0ZXIgbSAoZnVuIF8gdiAtPiBrIHYpXG5lbmRcblxubW9kdWxlIHR5cGUgQklESVIgPSBzaWdcbiAgdHlwZSB0XG4gIHR5cGUgbGVmdFxuICB0eXBlIHJpZ2h0XG5cbiAgdmFsIGVtcHR5IDogdFxuICB2YWwgaXNfZW1wdHkgOiB0IC0+IGJvb2xcblxuICB2YWwgYWRkIDogdCAtPiBsZWZ0IC0+IHJpZ2h0IC0+IHRcbiAgKCoqIEFkZCBhIGJpbmRpbmcgKGxlZnQscmlnaHQpICopXG5cbiAgdmFsIHJlbW92ZSA6IHQgLT4gbGVmdCAtPiByaWdodCAtPiB0XG4gICgqKiBSZW1vdmUgYSBzcGVjaWZpYyBiaW5kaW5nICopXG5cbiAgdmFsIGNhcmRpbmFsX2xlZnQgOiB0IC0+IGludFxuICAoKiogbnVtYmVyIG9mIGRpc3RpbmN0IGxlZnQga2V5cyAqKVxuXG4gIHZhbCBjYXJkaW5hbF9yaWdodCA6IHQgLT4gaW50XG4gICgqKiBudW1iZXIgb2YgZGlzdGluY3QgcmlnaHQga2V5cyAqKVxuXG4gIHZhbCByZW1vdmVfbGVmdCA6IHQgLT4gbGVmdCAtPiB0XG4gICgqKiBSZW1vdmUgYWxsIGJpbmRpbmdzIGZvciB0aGUgbGVmdCBrZXkgKilcblxuICB2YWwgcmVtb3ZlX3JpZ2h0IDogdCAtPiByaWdodCAtPiB0XG4gICgqKiBSZW1vdmUgYWxsIGJpbmRpbmdzIGZvciB0aGUgcmlnaHQga2V5ICopXG5cbiAgdmFsIG1lbV9sZWZ0IDogdCAtPiBsZWZ0IC0+IGJvb2xcbiAgKCoqIElzIHRoZSBsZWZ0IGtleSBwcmVzZW50IGluIGF0IGxlYXN0IG9uZSBwYWlyPyAqKVxuXG4gIHZhbCBtZW1fcmlnaHQgOiB0IC0+IHJpZ2h0IC0+IGJvb2xcbiAgKCoqIElzIHRoZSByaWdodCBrZXkgcHJlc2VudCBpbiBhdCBsZWFzdCBvbmUgcGFpcj8gKilcblxuICB2YWwgZmluZF9sZWZ0IDogdCAtPiBsZWZ0IC0+IHJpZ2h0IGxpc3RcbiAgKCoqIExpc3Qgb2YgdmFsdWVzIGZvciB0aGlzIGdpdmVuIGxlZnQta2V5LlxuICAgICAgVGhpcyB1c2VkIHRvIHJldHVybiBhbiBpdGVyLCBidXQgcmV0dXJucyBhIGxpc3Qgc2luY2UgMy4xMy4gKilcblxuICB2YWwgZmluZF9sZWZ0X2l0ZXIgOiB0IC0+IGxlZnQgLT4gcmlnaHQgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBmb3IgdGhpcyBnaXZlbiBsZWZ0LWtleVxuICAgICAgQHNpbmNlIDMuMTMgKilcblxuICB2YWwgZmluZF9yaWdodCA6IHQgLT4gcmlnaHQgLT4gbGVmdCBsaXN0XG4gICgqKiBMaXN0IG9mIHZhbHVlcyBmb3IgdGhpcyBnaXZlbiByaWdodC1rZXkuXG4gICAgICBUaGlzIHVzZWQgdG8gcmV0dXJuIGFuIGl0ZXIsIGJ1dCByZXR1cm5zIGEgbGlzdCBzaW5jZSAzLjEzLiAqKVxuXG4gIHZhbCBmaW5kX3JpZ2h0X2l0ZXIgOiB0IC0+IHJpZ2h0IC0+IGxlZnQgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBmb3IgdGhpcyBnaXZlbiBsZWZ0LWtleVxuICAgICAgQHNpbmNlIDMuMTMgKilcblxuICB2YWwgZmluZDFfbGVmdCA6IHQgLT4gbGVmdCAtPiByaWdodCBvcHRpb25cbiAgKCoqIGxpa2UgeyFmaW5kX2xlZnR9IGJ1dCByZXR1cm5zIGF0IG1vc3Qgb25lIHZhbHVlICopXG5cbiAgdmFsIGZpbmQxX3JpZ2h0IDogdCAtPiByaWdodCAtPiBsZWZ0IG9wdGlvblxuICAoKiogbGlrZSB7IWZpbmRfcmlnaHR9IGJ1dCByZXR1cm5zIGF0IG1vc3Qgb25lIHZhbHVlICopXG5cbiAgdmFsIGZvbGQgOiAoJ2EgLT4gbGVmdCAtPiByaWdodCAtPiAnYSkgLT4gJ2EgLT4gdCAtPiAnYVxuICAoKiogRm9sZCBvbiBwYWlycyAqKVxuXG4gIHZhbCBwYWlycyA6IHQgLT4gKGxlZnQgKiByaWdodCkgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBwYWlycyAqKVxuXG4gIHZhbCBhZGRfcGFpcnMgOiB0IC0+IChsZWZ0ICogcmlnaHQpIGl0ZXIgLT4gdFxuICAoKiogQWRkIHBhaXJzICopXG5cbiAgdmFsIGl0ZXJfbGVmdCA6IHQgLT4gbGVmdCBpdGVyXG4gIHZhbCBpdGVyX3JpZ2h0IDogdCAtPiByaWdodCBpdGVyXG5lbmRcblxubGV0IF9mb2xkX2l0ZXIgZiBhY2Mgc2VxID1cbiAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgc2VxIChmdW4geCAtPiBhY2MgOj0gZiAhYWNjIHgpO1xuICAhYWNjXG5cbmxldCBfaGVhZF9pdGVyIHNlcSA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzZXEgKGZ1biB4IC0+XG4gICAgICAgICByIDo9IFNvbWUgeDtcbiAgICAgICAgIHJhaXNlIEV4aXQpXG4gICB3aXRoIEV4aXQgLT4gKCkpO1xuICAhclxuXG5tb2R1bGUgTWFrZUJpZGlyIChMIDogT3JkZXJlZFR5cGUpIChSIDogT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIHR5cGUgbGVmdCA9IEwudFxuICB0eXBlIHJpZ2h0ID0gUi50XG5cbiAgbW9kdWxlIE1hcEwgPSBNYWtlIChMKSAoUilcbiAgbW9kdWxlIE1hcFIgPSBNYWtlIChSKSAoTClcblxuICB0eXBlIHQgPSB7XG4gICAgbGVmdDogTWFwTC50O1xuICAgIHJpZ2h0OiBNYXBSLnQ7XG4gIH1cblxuICBsZXQgZW1wdHkgPSB7IGxlZnQgPSBNYXBMLmVtcHR5OyByaWdodCA9IE1hcFIuZW1wdHkgfVxuICBsZXQgaXNfZW1wdHkgbSA9IE1hcEwuaXNfZW1wdHkgbS5sZWZ0XG4gIGxldCBhZGQgbSBhIGIgPSB7IGxlZnQgPSBNYXBMLmFkZCBtLmxlZnQgYSBiOyByaWdodCA9IE1hcFIuYWRkIG0ucmlnaHQgYiBhIH1cblxuICBsZXQgcmVtb3ZlIG0gYSBiID1cbiAgICB7IGxlZnQgPSBNYXBMLnJlbW92ZSBtLmxlZnQgYSBiOyByaWdodCA9IE1hcFIucmVtb3ZlIG0ucmlnaHQgYiBhIH1cblxuICBsZXQgY2FyZGluYWxfbGVmdCBtID0gTWFwTC5zaXplIG0ubGVmdFxuICBsZXQgY2FyZGluYWxfcmlnaHQgbSA9IE1hcFIuc2l6ZSBtLnJpZ2h0XG4gIGxldCBmaW5kX2xlZnQgbSBhID0gTWFwTC5maW5kIG0ubGVmdCBhXG4gIGxldCBmaW5kX2xlZnRfaXRlciBtIGEgPSBNYXBMLmZpbmRfaXRlciBtLmxlZnQgYVxuICBsZXQgZmluZF9yaWdodCBtIGIgPSBNYXBSLmZpbmQgbS5yaWdodCBiXG4gIGxldCBmaW5kX3JpZ2h0X2l0ZXIgbSBiID0gTWFwUi5maW5kX2l0ZXIgbS5yaWdodCBiXG5cbiAgbGV0IHJlbW92ZV9sZWZ0IG0gYSA9XG4gICAgX2ZvbGRfaXRlciAoZnVuIG0gYiAtPiByZW1vdmUgbSBhIGIpIG0gKGZpbmRfbGVmdF9pdGVyIG0gYSlcblxuICBsZXQgcmVtb3ZlX3JpZ2h0IG0gYiA9XG4gICAgX2ZvbGRfaXRlciAoZnVuIG0gYSAtPiByZW1vdmUgbSBhIGIpIG0gKGZpbmRfcmlnaHRfaXRlciBtIGIpXG5cbiAgbGV0IG1lbV9sZWZ0IG0gYSA9IE1hcEwubWVtIG0ubGVmdCBhXG4gIGxldCBtZW1fcmlnaHQgbSBiID0gTWFwUi5tZW0gbS5yaWdodCBiXG4gIGxldCBmaW5kMV9sZWZ0IG0gYSA9IF9oZWFkX2l0ZXIgKGZpbmRfbGVmdF9pdGVyIG0gYSlcbiAgbGV0IGZpbmQxX3JpZ2h0IG0gYiA9IF9oZWFkX2l0ZXIgKGZpbmRfcmlnaHRfaXRlciBtIGIpXG4gIGxldCBmb2xkIGYgYWNjIG0gPSBNYXBMLmZvbGQgbS5sZWZ0IGFjYyBmXG4gIGxldCBwYWlycyBtID0gTWFwTC50b19pdGVyIG0ubGVmdFxuICBsZXQgYWRkX3BhaXJzIG0gc2VxID0gX2ZvbGRfaXRlciAoZnVuIG0gKGEsIGIpIC0+IGFkZCBtIGEgYikgbSBzZXFcbiAgbGV0IGl0ZXJfbGVmdCBtID0gTWFwTC5rZXlzIG0ubGVmdFxuICBsZXQgaXRlcl9yaWdodCBtID0gTWFwUi5rZXlzIG0ucmlnaHRcbmVuZFxuIiwidHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubGV0IHggdCA9IEp2LmdldCB0IFwieFwiIHw+IEp2LnRvX2ludFxubGV0IHkgdCA9IEp2LmdldCB0IFwieVwiIHw+IEp2LnRvX2ludFxubGV0IHdpZHRoIHQgPSBKdi5nZXQgdCBcIndpZHRoXCIgfD4gSnYudG9faW50XG5sZXQgaGVpZ2h0IHQgPSBKdi5nZXQgdCBcImhlaWdodFwiIHw+IEp2LnRvX2ludFxubGV0IHRvcCB0ID0gSnYuZ2V0IHQgXCJ0b3BcIiB8PiBKdi50b19pbnRcbmxldCByaWdodCB0ID0gSnYuZ2V0IHQgXCJyaWdodFwiIHw+IEp2LnRvX2ludFxubGV0IGJvdHRvbSB0ID0gSnYuZ2V0IHQgXCJib3R0b21cIiB8PiBKdi50b19pbnRcbmxldCBsZWZ0IHQgPSBKdi5nZXQgdCBcImxlZnRcIiB8PiBKdi50b19pbnRcbiIsIm9wZW4gQnJyXG5cbnR5cGUgdCA9IEp2LnRcblxuZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbm1vZHVsZSBFbnRyeSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgdHlwZSBib3hfc2l6ZSA9IHsgYmxvY2tfc2l6ZSA6IGludDsgaW5saW5lX3NpemUgOiBpbnQgfVxuXG4gIGxldCBib3hfc2l6ZV9vZl9qdiBqdiA9XG4gICAge1xuICAgICAgYmxvY2tfc2l6ZSA9IEp2LmdldCBqdiBcImJsb2NrU2l6ZVwiIHw+IEp2LnRvX2ludDtcbiAgICAgIGlubGluZV9zaXplID0gSnYuZ2V0IGp2IFwiaW5saW5lU2l6ZVwiIHw+IEp2LnRvX2ludDtcbiAgICB9XG5cbiAgbGV0IGJvcmRlcl9ib3hfc2l6ZSB0ID0gSnYuZ2V0IHQgXCJib3JkZXJCb3hTaXplXCIgfD4gSnYudG9fYXJyYXkgYm94X3NpemVfb2ZfanZcblxuICBsZXQgY29udGVudF9ib3hfc2l6ZSB0ID1cbiAgICBKdi5nZXQgdCBcImNvbnRlbnRCb3hTaXplXCIgfD4gSnYudG9fYXJyYXkgYm94X3NpemVfb2ZfanZcblxuICBsZXQgY29udGVudF9yZWN0IHQgPSBKdi5nZXQgdCBcImNvbnRlbnRSZWN0XCIgfD4gRG9tX3JlY3RfcmVhZF9vbmx5Lm9mX2p2XG5cbiAgbGV0IGRldmljZV9waXhlbF9jb250ZW50X2JveF9zaXplIHQgPVxuICAgIEp2LmdldCB0IFwiZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZVwiIHw+IEp2LnRvX2FycmF5IGJveF9zaXplX29mX2p2XG5cbiAgbGV0IHRhcmdldCB0ID0gSnYuZ2V0IHQgXCJ0YXJnZXRcIiB8PiBFbC5vZl9qdlxuZW5kXG5cbnR5cGUgYm94ID0gQ29udGVudF9ib3ggfCBCb3JkZXJfYm94IHwgRGV2aWNlX3BpeGVsX2NvbnRlbnRfYm94XG5cbmxldCBzdHJpbmdfb2ZfYm94ID0gZnVuY3Rpb25cbiAgfCBDb250ZW50X2JveCAtPiBcImNvbnRlbnQtYm94XCJcbiAgfCBCb3JkZXJfYm94IC0+IFwiYm9yZGVyLWJveFwiXG4gIHwgRGV2aWNlX3BpeGVsX2NvbnRlbnRfYm94IC0+IFwiZGV2aWNlLXBpeGVsLWNvbnRlbnQtYm94XCJcblxubGV0IGRpc2Nvbm5lY3QgdCA9IGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJkaXNjb25uZWN0XCIgW3x8XVxuXG5sZXQgb2JzZXJ2ZSB0ID9ib3ggdGFyZ2V0ID1cbiAgbGV0IGFyZ3MgPVxuICAgIGxldCB0YXJnZXQgPSBFbC50b19qdiB0YXJnZXQgaW5cbiAgICBtYXRjaCBib3ggd2l0aFxuICAgIHwgTm9uZSAtPiBbfCB0YXJnZXQgfF1cbiAgICB8IFNvbWUgYiAtPlxuICAgICAgICBsZXQgYm94ID0gSnYub2JqIFt8IChcImJveFwiLCBKdi5vZl9zdHJpbmcgKHN0cmluZ19vZl9ib3ggYikpIHxdIGluXG4gICAgICAgIFt8IHRhcmdldDsgYm94IHxdXG4gIGluXG4gIEp2LmNhbGwgdCBcIm9ic2VydmVcIiBhcmdzIHw+IGlnbm9yZVxuXG5sZXQgdW5vYnNlcnZlIHQgdGFyZ2V0ID1cbiAgbGV0IHRhcmdldCA9IEVsLnRvX2p2IHRhcmdldCBpblxuICBpZ25vcmUgQEAgSnYuY2FsbCB0IFwiZGlzY29ubmVjdFwiIFt8IHRhcmdldCB8XVxuXG5sZXQgY3JlYXRlIH5jYWxsYmFjayA9XG4gIGxldCBjYWxsYmFjayBlbnRyaWVzIG9ic2VydmVyID1cbiAgICBsZXQgZW50cmllcyA9IEp2LnRvX2xpc3QgRW50cnkub2ZfanYgZW50cmllcyBpblxuICAgIGNhbGxiYWNrIGVudHJpZXMgKG9mX2p2IG9ic2VydmVyKVxuICBpblxuICBsZXQgYXJncyA9IFt8IEp2LnJlcHIgY2FsbGJhY2sgfF0gaW5cbiAgSnYubmV3JyAoSnYuZ2V0IEp2Lmdsb2JhbCBcIlJlc2l6ZU9ic2VydmVyXCIpIGFyZ3NcbiIsIm9wZW4gQnJyXG5cbnR5cGUgdCA9IEp2LnRcblxuZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBvZl9uYXZpZ2F0b3IgbiA9IEp2LmdldCAoTmF2aWdhdG9yLnRvX2p2IG4pIFwibWVkaWFTZXNzaW9uXCJcblxubW9kdWxlIE1lZGlhX21ldGFkYXRhID0gc3RydWN0XG4gIHR5cGUgaW1nID0geyBzcmMgOiBzdHJpbmc7IHNpemVzIDogc3RyaW5nOyB0eXBlJyA6IHN0cmluZyB9XG5cbiAgbGV0IGltZ190b19qdiBpbWcgPVxuICAgIEp2Lm9ialxuICAgICAgW3xcbiAgICAgICAgKFwic3JjXCIsIEp2Lm9mX3N0cmluZyBpbWcuc3JjKTtcbiAgICAgICAgKFwic2l6ZXNcIiwgSnYub2Zfc3RyaW5nIGltZy5zaXplcyk7XG4gICAgICAgIChcInR5cGVcIiwgSnYub2Zfc3RyaW5nIGltZy50eXBlJyk7XG4gICAgICB8XVxuXG4gIGxldCBtYXliZV9zdHJpbmcganYgcHJvcCA9XG4gICAgbWF0Y2ggSnYuZmluZCBqdiBwcm9wIHdpdGggTm9uZSAtPiBcInVua25vd25cIiB8IFNvbWUganYgLT4gSnYudG9fc3RyaW5nIGp2XG5cbiAgbGV0IGltZ19vZl9qdiBqdiA9XG4gICAgbGV0IHNyYyA9IG1heWJlX3N0cmluZyBqdiBcInNyY1wiIGluXG4gICAgbGV0IHNpemVzID0gbWF5YmVfc3RyaW5nIGp2IFwic2l6ZXNcIiBpblxuICAgIGxldCB0eXBlJyA9IG1heWJlX3N0cmluZyBqdiBcInR5cGVcIiBpblxuICAgIHsgc3JjOyBzaXplczsgdHlwZScgfVxuXG4gIHR5cGUgdCA9IHtcbiAgICB0aXRsZSA6IHN0cmluZztcbiAgICBhcnRpc3QgOiBzdHJpbmc7XG4gICAgYWxidW0gOiBzdHJpbmc7XG4gICAgYXJ0d29yayA6IGltZyBsaXN0O1xuICB9XG5cbiAgbGV0IHRvX2p2IHQgPVxuICAgIGxldCBhcnR3b3JrID0gSnYub2ZfbGlzdCBpbWdfdG9fanYgdC5hcnR3b3JrIGluXG4gICAgSnYub2JqXG4gICAgICBbfFxuICAgICAgICAoXCJ0aXRsZVwiLCBKdi5vZl9zdHJpbmcgdC50aXRsZSk7XG4gICAgICAgIChcImFydGlzdFwiLCBKdi5vZl9zdHJpbmcgdC5hcnRpc3QpO1xuICAgICAgICAoXCJhbGJ1bVwiLCBKdi5vZl9zdHJpbmcgdC5hbGJ1bSk7XG4gICAgICAgIChcImFydHdvcmtcIiwgYXJ0d29yayk7XG4gICAgICB8XVxuXG4gIGxldCBvZl9qdiBqdiA9XG4gICAgbGV0IHRpdGxlID0gbWF5YmVfc3RyaW5nIGp2IFwidGl0bGVcIiBpblxuICAgIGxldCBhcnRpc3QgPSBtYXliZV9zdHJpbmcganYgXCJhcnRpc3RcIiBpblxuICAgIGxldCBhbGJ1bSA9IG1heWJlX3N0cmluZyBqdiBcImFsYnVtXCIgaW5cbiAgICBsZXQgYXJ0d29yayA9XG4gICAgICBtYXRjaCBKdi5maW5kIGp2IFwiYXJ0d29ya1wiIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBbXVxuICAgICAgfCBTb21lIGp2IC0+IEp2LnRvX2xpc3QgaW1nX29mX2p2IGp2XG4gICAgaW5cbiAgICB7IHRpdGxlOyBhcnRpc3Q7IGFsYnVtOyBhcnR3b3JrIH1cbmVuZFxuXG5sZXQgbWV0YWRhdGEgdCA9IEp2LmdldCB0IFwibWV0YWRhdGFcIiB8PiBKdi50b19vcHRpb24gTWVkaWFfbWV0YWRhdGEub2ZfanZcblxubGV0IHNldF9tZXRhZGF0YSB0IHYgPVxuICBDb25zb2xlLmxvZyBbIFwiU2V0IG1ldGFkYXRhXCI7IE1lZGlhX21ldGFkYXRhLnRvX2p2IHYgXTtcbiAgbGV0IG1ldGFkYXRhID1cbiAgICBKdi5uZXcnIChKdi5nZXQgSnYuZ2xvYmFsIFwiTWVkaWFNZXRhZGF0YVwiKSBbfCBNZWRpYV9tZXRhZGF0YS50b19qdiB2IHxdXG4gIGluXG4gIEp2LnNldCB0IFwibWV0YWRhdGFcIiBtZXRhZGF0YVxuXG5tb2R1bGUgQWN0aW9uID0gc3RydWN0XG4gIHR5cGUgdCA9IEpzdHIudFxuXG4gIGxldCBuZXh0X3RyYWNrID0gSnN0ci52IFwibmV4dHRyYWNrXCJcbiAgbGV0IHByZXZpb3VzX3RyYWNrID0gSnN0ci52IFwicHJldmlvdXN0cmFja1wiXG5lbmRcblxubGV0IHNldF9hY3Rpb25faGFuZGxlciB0IGFjdGlvbiBmID1cbiAgbGV0IGNhbGxiYWNrID0gSnYuY2FsbGJhY2sgfmFyaXR5OjEgZiBpblxuICBKdi5jYWxsIHQgXCJzZXRBY3Rpb25IYW5kbGVyXCIgW3wgSnYub2ZfanN0ciBhY3Rpb247IGNhbGxiYWNrIHxdIHw+IGlnbm9yZVxuXG5sZXQgc2V0X3Bvc2l0aW9uX3N0YXRlID9kdXJhdGlvbiA/cGxheWJhY2tfcmF0ZSA/cG9zaXRpb24gdCA9XG4gIGxldCBtYXliZV9mbG9hdCBuYW1lIHYgPSBPcHRpb24ubWFwIChmdW4gdiAtPiAobmFtZSwgSnYub2ZfZmxvYXQgdikpIHYgaW5cbiAgbGV0IGR1cmF0aW9uID0gbWF5YmVfZmxvYXQgXCJkdXJhdGlvblwiIGR1cmF0aW9uIGluXG4gIGxldCBwbGF5YmFja19yYXRlID0gbWF5YmVfZmxvYXQgXCJwbGF5YmFja1JhdGVcIiBwbGF5YmFja19yYXRlIGluXG4gIGxldCBwb3NpdGlvbiA9IG1heWJlX2Zsb2F0IFwicG9zaXRpb25cIiBwb3NpdGlvbiBpblxuICBsZXQgYXJncyA9XG4gICAgbGV0IHN0YXRlX2RpY3QgPVxuICAgICAgTGlzdC5maWx0ZXJfbWFwIEZ1bi5pZCBbIGR1cmF0aW9uOyBwbGF5YmFja19yYXRlOyBwb3NpdGlvbiBdXG4gICAgaW5cbiAgICBtYXRjaCBzdGF0ZV9kaWN0IHdpdGggW10gLT4gW3x8XSB8IHNkIC0+IFt8IEp2Lm9iaiAoQXJyYXkub2ZfbGlzdCBzZCkgfF1cbiAgaW5cbiAgSnYuY2FsbCB0IFwic2V0UG9zaXRpb25TdGF0ZVwiIGFyZ3MgfD4gaWdub3JlXG4iLCJtb2R1bGUgSnYgPSBKdlxubW9kdWxlIEpzdHIgPSBKc3RyXG5cbm1vZHVsZSBCcnIgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBCcnJcblxuICBtb2R1bGUgRWwgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgUyA9IFN0eWxlXG4gICAgaW5jbHVkZSBFbFxuICAgIG1vZHVsZSBTdHlsZSA9IFNcbiAgZW5kXG5cbiAgbW9kdWxlIEV2ID0gc3RydWN0XG4gICAgaW5jbHVkZSBFdlxuXG4gICAgbW9kdWxlIFN1Ym1pdCA9IHN0cnVjdFxuICAgICAgdHlwZSAnYSBldmVudCA9ICdhIHRcbiAgICAgIHR5cGUgdCA9IEp2LnRcbiAgICBlbmRcblxuICAgIGxldCBzdWJtaXQgPSBUeXBlLnZvaWQgKEpzdHIudiBcInN1Ym1pdFwiKVxuICBlbmRcblxuICBtb2R1bGUgQXQgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIEF0XG5cbiAgICBtb2R1bGUgTmFtZSA9IHN0cnVjdFxuICAgICAgaW5jbHVkZSBOYW1lXG5cbiAgICAgIGxldCBwYXR0ZXJuID0gSnN0ci52IFwicGF0dGVyblwiXG4gICAgZW5kXG5cbiAgICBsZXQgZHJhZ2dhYmxlIHMgPSB2IE5hbWUuZHJhZ2dhYmxlIHNcbiAgZW5kXG5lbmRcblxubW9kdWxlIEJycl9pbyA9IHN0cnVjdFxuICBpbmNsdWRlIEJycl9pb1xuICBtb2R1bGUgSW5kZXhlZF9kYiA9IEluZGV4ZWRfZGJcblxuICBtb2R1bGUgTWVkaWEgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1lZGlhXG4gICAgbW9kdWxlIFNlc3Npb24gPSBNZWRpYV9zZXNzaW9uXG4gIGVuZFxuXG4gIG1vZHVsZSBTdG9yYWdlID0gc3RydWN0XG4gICAgaW5jbHVkZSBTdG9yYWdlXG5cbiAgICBtb2R1bGUgTWFuYWdlciA9IHN0cnVjdFxuICAgICAgKCogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1N0b3JhZ2VNYW5hZ2VyICopXG4gICAgICB0eXBlIHQgPSBKdi50XG5cbiAgICAgIGluY2x1ZGUgKEp2LklkIDogSnYuQ09OViB3aXRoIHR5cGUgdCA6PSB0KVxuXG4gICAgICBsZXQgcGVyc2lzdCB0ID0gSnYuY2FsbCB0IFwicGVyc2lzdFwiIFt8fF0gfD4gRnV0Lm9mX3Byb21pc2Ugfm9rOkp2LnRvX2Jvb2xcbiAgICBlbmRcblxuICAgIGxldCBtYW5hZ2VyIChuIDogQnJyLk5hdmlnYXRvci50KSA9XG4gICAgICBKdi5nZXQgKEJyci5OYXZpZ2F0b3IudG9fanYgbikgXCJzdG9yYWdlXCIgfD4gTWFuYWdlci5vZl9qdlxuICBlbmRcbmVuZFxuXG5tb2R1bGUgQnJyX3dlYndvcmtlcnMgPSBCcnJfd2Vid29ya2Vyc1xubW9kdWxlIEJycl93ZWJtaWRpID0gQnJyX3dlYm1pZGlcbm1vZHVsZSBCcnJfd2ViZ3B1ID0gQnJyX3dlYmdwdVxubW9kdWxlIEJycl93ZWJjcnlwdG8gPSBCcnJfd2ViY3J5cHRvXG5tb2R1bGUgQnJyX3dlYmF1ZGlvID0gQnJyX3dlYmF1ZGlvXG5tb2R1bGUgQnJyX2NhbnZhcyA9IEJycl9jYW52YXNcbm1vZHVsZSBGdXQgPSBGdXRcbm1vZHVsZSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXIgPSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXJcbm1vZHVsZSBNdXRhdGlvbl9vYnNlcnZlciA9IE11dGF0aW9uX29ic2VydmVyXG5tb2R1bGUgUmVzaXplX29ic2VydmVyID0gUmVzaXplX29ic2VydmVyXG5tb2R1bGUgRG9tX3JlY3RfcmVhZF9vbmx5ID0gRG9tX3JlY3RfcmVhZF9vbmx5XG4iLCJpbmNsdWRlIENvbnRhaW5lcnNMYWJlbHNcbm1vZHVsZSBCcnIgPSBCcnJlci5CcnJcblxuKCoqIFt0ZWUgZiB4XSBhcHBsaWVzIFtmXSB0byBbeF0gYW5kIHJldHVybnMgW3hdICopXG5sZXQgdGVlIGYgeCA9XG4gIGxldCAoKSA9IGYgeCBpblxuICB4XG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcbiAgbW9kdWxlIFNldCA9IFNldC5NYWtlIChTdHJpbmcpXG5lbmRcblxubW9kdWxlIEx3ZCA9IHN0cnVjdFxuICBpbmNsdWRlIEx3ZFxuZW5kXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcblxudHlwZSAnYSBvbmVfbWF5YmVfcmVhY3RpdmUgPSBbIGBQIG9mICdhIHwgYFIgb2YgJ2EgTHdkLnQgXVxudHlwZSAnYSBtYXliZV9yZWFjdGl2ZSA9IFsgJ2Egb25lX21heWJlX3JlYWN0aXZlIHwgYFMgb2YgJ2EgTHdkX3NlcS50IEx3ZC50IF1cblxubGV0IGlzX3B1cmVfZWxlbWVudCA9IGZ1bmN0aW9uXG4gIHwgYFAgXyAtPiB0cnVlXG4gIHwgYFIgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcbiAgfCBgUyB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgcHVyZSB0ID0gYFAgdFxubGV0IHJlYWN0aXZlIHQgPSBgUiB0XG5sZXQgc2VxdWVuY2UgdCA9IGBTIHRcblxubW9kdWxlIFVuaXQgPSBzdHJ1Y3RcbiAgKCoqIENvbnZlcnNpb24gYmV0d2VlbiBDU1MgdW5pdHMuIFZlcnkgZWFybHkgV0lQLiAqKVxuICB0eXBlIHQgPSBQeCBvZiBmbG9hdCB8IFJlbSBvZiBmbG9hdCB8IEVtIG9mIGZsb2F0XG5cbiAgbGV0IG9mX3N0cmluZyBzID1cbiAgICAoKiBUT0RPOiBwcm9wZXIgcGFyc2luZyAqKVxuICAgIG1hdGNoIFN0cmluZy5jaG9wX3N1ZmZpeCB+c3VmOlwicHhcIiBzIHdpdGhcbiAgICB8IFNvbWUgaSAtPiAoXG4gICAgICAgIG1hdGNoIEludC5vZl9zdHJpbmcgaSB3aXRoXG4gICAgICAgIHwgU29tZSBpIC0+IFNvbWUgKFB4IChmbG9hdF9vZl9pbnQgaSkpXG4gICAgICAgIHwgTm9uZSAtPiBGbG9hdC5vZl9zdHJpbmdfb3B0IGkgfD4gT3B0aW9uLm1hcCAoZnVuIGkgLT4gUHggaSkpXG4gICAgfCBOb25lIC0+IChcbiAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJyZW1cIiBzIHdpdGhcbiAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICB8IE5vbmUgLT4gKFxuICAgICAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJlbVwiIHMgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICAgICAgfCBOb25lIC0+IE5vbmUpKVxuXG4gIGxldCB0b19zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBQcmludGYuc3ByaW50ZiBcIiVmcHhcIiBpXG4gICAgfCBSZW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmcmVtXCIgZlxuICAgIHwgRW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmZW1cIiBmXG5cbiAgbGV0IHRvX3B4ID8ocGFyZW50ID0gRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSA9XG4gICAgbGV0IGdldF9mb250X3NpemVfaW5fcHggcGFyZW50ID1cbiAgICAgIGxldCBmb250X3NpemUgPVxuICAgICAgICBFbC5jb21wdXRlZF9zdHlsZSAoSnN0ci52IFwiZm9udC1zaXplXCIpIHBhcmVudCB8PiBKc3RyLnRvX3N0cmluZ1xuICAgICAgaW5cbiAgICAgIG1hdGNoIG9mX3N0cmluZyBmb250X3NpemUgd2l0aFxuICAgICAgfCBOb25lIC0+IDE2LlxuICAgICAgfCBTb21lIChQeCBpKSAtPiBpXG4gICAgICB8IFNvbWUgXyAtPiBmYWlsd2l0aCBcIm5vdCBpbXBsZW1lbnRlZFwiXG4gICAgaW5cbiAgICBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBpXG4gICAgfCBSZW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCAoRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSBpblxuICAgICAgICBmICouIGZvbnRfc2l6ZVxuICAgIHwgRW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCBwYXJlbnQgaW5cbiAgICAgICAgZiAqLiBmb250X3NpemVcbmVuZFxuXG5sZXQgbGlzdGVuIH5mIHQgPVxuICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIHQgaW5cbiAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+IGYgKEx3ZC5xdWlja19zYW1wbGUgcm9vdCkpO1xuICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG5cbmxldCBtYXAzIH5mIGEgYiBjID1cbiAgTHdkLm1hcDIgYSBiIH5mOihmdW4gYSBiIC0+IChhLCBiKSkgfD4gTHdkLm1hcDIgYyB+ZjooZnVuIGMgKGEsIGIpIC0+IGYgYSBiIGMpXG5cbmxldCB0cmlwbGUgYSBiIGMgPSBtYXAzIGEgYiBjIH5mOihmdW4gYSBiIGMgLT4gKGEsIGIsIGMpKVxuXG5tb2R1bGUgRm9yd2FyZF9yZWYgOiBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgZXhjZXB0aW9uIE5vdF9zZXRcbiAgZXhjZXB0aW9uIEFscmVhZHlfc2V0XG5cbiAgdmFsIG1ha2UgOiB1bml0IC0+ICdhIHRcbiAgdmFsIHNldF9leG4gOiAnYSB0IC0+ICdhIC0+IHVuaXRcbiAgdmFsIGdldF9leG4gOiAnYSB0IC0+ICdhXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2Egb3B0aW9uIHJlZlxuXG4gIGV4Y2VwdGlvbiBOb3Rfc2V0XG4gIGV4Y2VwdGlvbiBBbHJlYWR5X3NldFxuXG4gIGxldCBtYWtlICgpID0gcmVmIE5vbmVcblxuICBsZXQgc2V0X2V4biB0IHYgPVxuICAgIG1hdGNoICF0IHdpdGggTm9uZSAtPiB0IDo9IFNvbWUgdiB8IFNvbWUgXyAtPiByYWlzZSBBbHJlYWR5X3NldFxuXG4gIGxldCBnZXRfZXhuIHQgPSBtYXRjaCAhdCB3aXRoIE5vbmUgLT4gcmFpc2UgTm90X3NldCB8IFNvbWUgdiAtPiB2XG5lbmRcbiIsIm1vZHVsZSB0eXBlIENvbmZpZyA9IHNpZ1xuICB0eXBlIGxhbmdcblxuICAoKiB2YWwgZGVmYXVsdCA6IGxhbmcgKilcbiAgdmFsIGFjdGl2ZSA6IGxhbmcgTHdkLnZhclxuICB2YWwgZ2V0IDogbGFuZyAtPiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubGV0IG1ha2UgKHR5cGUgYSkgKG1vZHVsZSBDIDogQ29uZmlnIHdpdGggdHlwZSBsYW5nID0gYSkgPVxuICBsZXQgZ2V0IHN0cmluZyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBDLmFjdGl2ZSkgfmY6KGZ1biBsYW5nIC0+IEpzdHIudiBAQCBDLmdldCBsYW5nIHN0cmluZylcbiAgaW5cbiAgbGV0IHNldCAobGFuZyA6IGEpID0gTHdkLnNldCBDLmFjdGl2ZSBsYW5nIGluXG4gIChzZXQsIGdldClcbiIsIm9wZW4gSW1wb3J0XG5cbmxldCB0b19qc3RyIHQgPSBKdi5yZXByIHQgfD4gQnJyLkpzb24uZW5jb2RlXG5sZXQgdG9fanYgdCA9IHRvX2pzdHIgdCB8PiBKdi5vZl9qc3RyXG5cbmxldCBvZl9qc3RyIGpzdHIgPVxuICBtYXRjaCBCcnIuSnNvbi5kZWNvZGUganN0ciB3aXRoXG4gIHwgT2sgdiAtPiBPayAoT2JqLm1hZ2ljIHYpXG4gIHwgRXJyb3IgZXJyIC0+XG4gICAgICBCcnIuQ29uc29sZS5lcnJvciBbIGVyciBdO1xuICAgICAgRXJyb3IgKGBNc2cgXCJGYWlsZWQgdG8gdW5tYXJzaGFsIGRhdGFcIilcblxubGV0IG9mX2p2IGp2ID0gSnYudG9fanN0ciBqdiB8PiBvZl9qc3RyXG4iLCJvcGVuIEltcG9ydFxubW9kdWxlIEI2NCA9IEJhc2U2NFxub3BlbiEgQnJyXG5tb2R1bGUgU3RvcmFnZSA9IEJycl9pby5TdG9yYWdlXG5cbmxldCBrZXlzID0gSGFzaHRibC5jcmVhdGUgNjRcblxubGV0IGNoZWNrX2tleSBrZXkgPVxuICBpZiBIYXNodGJsLm1lbSBrZXlzIGtleSB0aGVuXG4gICAgZmFpbHdpdGggQEAgUHJpbnRmLnNwcmludGYgXCJNdWx0aXBsZSBwZXJzaXRlbnQgdmFyIGFyZSB1c2luZyB0aGUga2V5ICVzXCIga2V5XG4gIGVsc2UgSGFzaHRibC5hZGQga2V5cyBrZXkgKClcblxubGV0IGxvY2FsX3N0b3JhZ2UgPSBTdG9yYWdlLmxvY2FsIEcud2luZG93XG5cbmxldCBzdG9yZSB+a2V5IHZhbHVlID1cbiAgRW5jb2RpbmdzLnRvX2pzdHIgdmFsdWUgfD4gU3RvcmFnZS5zZXRfaXRlbSBsb2NhbF9zdG9yYWdlIGtleVxuXG5sZXQgZmV0Y2ggfmtleSA9XG4gIGxldCBvcGVuIFJlc3VsdC5JbmZpeCBpblxuICBsZXQqIGVuY29kZWRfdmFsdWUgPVxuICAgIG1hdGNoIFN0b3JhZ2UuZ2V0X2l0ZW0gbG9jYWxfc3RvcmFnZSBrZXkgd2l0aFxuICAgIHwgTm9uZSAtPiBFcnJvciBgTm90X2ZvdW5kXG4gICAgfCBTb21lIHYgLT4gT2sgdlxuICBpblxuICBFbmNvZGluZ3Mub2ZfanN0ciBlbmNvZGVkX3ZhbHVlXG5cbmxldCBpbml0aWFsX3ZhbHVlIH5rZXkgZiA9XG4gIG1hdGNoIGZldGNoIH5rZXkgd2l0aFxuICB8IEVycm9yIGBOb3RfZm91bmQgLT4gZiAoKVxuICB8IEVycm9yIChgTXNnIG1zZykgLT5cbiAgICAgIENvbnNvbGUud2FybiBbIG1zZyBdO1xuICAgICAgZiAoKVxuICB8IE9rIHYgLT4gdlxuXG5sZXQgaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmID1cbiAgbWF0Y2ggZmV0Y2ggfmtleSB3aXRoXG4gIHwgRXJyb3IgYE5vdF9mb3VuZCAtPiBmICgpXG4gIHwgRXJyb3IgKGBNc2cgbXNnKSAtPlxuICAgICAgQ29uc29sZS53YXJuIFsgbXNnIF07XG4gICAgICBmICgpXG4gIHwgT2sgdiAtPiBGdXQub2sgQEAgdlxuXG5sZXQgbWFrZV9wZXJzaXN0ZW50X3ZhciB+a2V5IHZhbHVlID1cbiAgaWdub3JlIEBAIHN0b3JlIH5rZXkgdmFsdWU7XG4gIGxldCB2YXIgPSBMd2QudmFyIHZhbHVlIGluXG4gIGxldCByb290ID0gTHdkLm9ic2VydmUgKEx3ZC5nZXQgdmFyKSBpblxuICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgIGxldCBuZXdfdmFsdWUgPSBMd2QucXVpY2tfc2FtcGxlIHJvb3QgaW5cbiAgICAgIGlnbm9yZSBAQCBzdG9yZSB+a2V5IG5ld192YWx1ZSk7XG4gIGxldCBfID0gTHdkLnF1aWNrX3NhbXBsZSByb290IGluXG4gIHZhclxuXG5sZXQgdmFyX2YgfmtleSBmID1cbiAgbGV0ICgpID0gY2hlY2tfa2V5IGtleSBpblxuICBsZXQga2V5ID0gSnN0ci52IGtleSBpblxuICBsZXQgdmFsdWUgPSBpbml0aWFsX3ZhbHVlIH5rZXkgZiBpblxuICBtYWtlX3BlcnNpc3RlbnRfdmFyIH5rZXkgdmFsdWVcblxubGV0IHZhciB+a2V5IGRlZmF1bHQgPSB2YXJfZiB+a2V5IChmdW4gKCkgLT4gZGVmYXVsdClcblxubGV0IHZhcl9mdXQgKHR5cGUgYSBiKSB+a2V5IChmIDogdW5pdCAtPiAoYSwgYikgRnV0LnJlc3VsdCkgOlxuICAgIChhIEx3ZC52YXIsIGIpIEZ1dC5yZXN1bHQgPVxuICBsZXQgKCkgPSBjaGVja19rZXkga2V5IGluXG4gIGxldCBrZXkgPSBKc3RyLnYga2V5IGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgKHZhbHVlIDogYSkgPSAoaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmIDogKGEsIGIpIEZ1dC5yZXN1bHQpIGluXG4gIG1ha2VfcGVyc2lzdGVudF92YXIgfmtleSB2YWx1ZVxuIiwib3BlbiBJbXBvcnRcblxub3BlbiBCcnJcblxudHlwZSBzZWN0aW9uID0gLi5cbnR5cGUgYWN0aXZlID0gQWxsIHwgT25seSBvZiBzZWN0aW9uIGxpc3RcbnR5cGUgbGV2ZWxzID0gTG9nIHwgRXJyb3IgfCBJbmZvIHwgRGVidWdcblxubGV0IGxvZ2dlciA9IGZ1bmN0aW9uXG4gIHwgTG9nIC0+IENvbnNvbGUubG9nXG4gIHwgRXJyb3IgLT4gQ29uc29sZS5lcnJvclxuICB8IEluZm8gLT4gQ29uc29sZS5pbmZvXG4gIHwgRGVidWcgLT4gQ29uc29sZS5kZWJ1Z1xuXG50eXBlIHQgPSB7XG4gIGxvZyA6IENvbnNvbGUubG9nO1xuICBlcnJvciA6IENvbnNvbGUubG9nO1xuICBpbmZvIDogQ29uc29sZS5sb2c7XG4gIGRlYnVnIDogQ29uc29sZS5sb2c7XG59XG5cbmxldCBmb3Jfc2VjdGlvbiBzID1cbiAgbGV0IGxvZyAobCA6IENvbnNvbGUubG9nKSA/KGZtdCA9IFwiXCIpIG1zZyA9XG4gICAgbGV0IGZtdCA9IFByaW50Zi5zcHJpbnRmIFwiWyVzXSAlc1wiIHMgZm10IGluXG4gICAgbCAoZm10IDo6IG1zZylcbiAgaW5cbiAge1xuICAgIGxvZyA9IGxvZyBDb25zb2xlLmxvZztcbiAgICBlcnJvciA9IGxvZyBDb25zb2xlLmVycm9yO1xuICAgIGluZm8gPSBsb2cgQ29uc29sZS5pbmZvO1xuICAgIGRlYnVnID0gbG9nIENvbnNvbGUuZGVidWc7XG4gIH1cbiIsIm9wZW4gSW1wb3J0XG5cbm1vZHVsZSBDbGFzc2VzID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nLlNldFxuXG4gIHR5cGUgbm9ucmVjIHQgPSB0XG4gIHR5cGUgbW9kaWZpZXIgPSBBZGQgb2Ygc3RyaW5nIGxpc3QgfCBSZXBsYWNlIG9mIHN0cmluZyBsaXN0XG5cbiAgbGV0IG1ha2UgbCA9IG9mX2xpc3QgbFxuICBsZXQgdXBkYXRlIHQgPSBmdW5jdGlvbiBBZGQgbCAtPiBhZGRfbGlzdCB0IGwgfCBSZXBsYWNlIGwgLT4gb2ZfbGlzdCBsXG5cbiAgbGV0IHRvX3N0cmluZyB0ID1cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4gYyAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgICAgUHJpbnRmLmJwcmludGYgYiBcIiVzXCIgYylcbiAgICAgICAgZWxzZSBQcmludGYuYnByaW50ZiBiIFwiICVzXCIgYylcbiAgICAgIHQ7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcblxuICBsZXQgYXRfb2Zfc3RyaW5nIGMgPSBCcnIuQXQuY2xhc3MnIEBAIEpzdHIudiBjXG5cbiAgbW9kdWxlIFAgPSBzdHJ1Y3RcbiAgICBsZXQgdG9fYXQgdCA9XG4gICAgICBMaXN0Lm1hcCAodG9fbGlzdCB0KSB+ZjooZnVuIGMgLT4gYFAgKEJyci5BdC5jbGFzcycgQEAgSnN0ci52IGMpKVxuICBlbmRcbmVuZFxuXG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgdCA9IHsgY2xhc3NlcyA6IENsYXNzZXMudDsgYXR0cnMgOiBBdC50IEVsd2QuY29sIH1cbigqKiBDbGFzc2VzIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBidXQgYXJlIGV2ZW50dWFsbHkgdHJhbnNsYXRlZCB0byBBdC50ICopXG5cbmxldCBlbXB0eSA9IHsgY2xhc3NlcyA9IENsYXNzZXMuZW1wdHk7IGF0dHJzID0gW10gfVxuXG5sZXQgdG9fYXQgP2lkIHQgPVxuICBsZXQgYXQgPSBMaXN0LnJldl9hcHBlbmQgdC5hdHRycyBAQCBDbGFzc2VzLlAudG9fYXQgdC5jbGFzc2VzIGluXG4gIG1hdGNoIGlkIHdpdGggTm9uZSAtPiBhdCB8IFNvbWUgaWQgLT4gYFAgKEF0LmlkIChKc3RyLnYgaWQpKSA6OiBhdFxuXG5sZXQgY2xhc3NlcyBsID0geyBlbXB0eSB3aXRoIGNsYXNzZXMgPSBDbGFzc2VzLm9mX2xpc3QgbCB9XG5cbmxldCB1bmlvbiB7IGNsYXNzZXM7IGF0dHJzIH0geyBjbGFzc2VzID0gYzsgYXR0cnMgPSBhIH0gPVxuICB7IGNsYXNzZXMgPSBDbGFzc2VzLnVuaW9uIGNsYXNzZXMgYzsgYXR0cnMgPSBMaXN0LnJldl9hcHBlbmQgYXR0cnMgYSB9XG5cbm1vZHVsZSBCdWlsZGVyID0gc3RydWN0XG4gIHR5cGUgYXQgPSBDIG9mIHN0cmluZyB8IEF0IG9mIEF0LnRcblxuICBsZXQgKCArICkgdCA9IGZ1bmN0aW9uXG4gICAgfCBDIGNsYXNzbmFtZSAtPlxuICAgICAgICBsZXQgY2xhc3NlcyA9IENsYXNzZXMuYWRkIGNsYXNzbmFtZSB0LmNsYXNzZXMgaW5cbiAgICAgICAgeyB0IHdpdGggY2xhc3NlcyB9XG4gICAgfCBBdCBhdCAtPlxuICAgICAgICBsZXQgYXR0cnMgPSBgUCBhdCA6OiB0LmF0dHJzIGluXG4gICAgICAgIHsgdCB3aXRoIGF0dHJzIH1cblxuICBsZXQgd2l0aF9pZCBzIHQgPVxuICAgIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICAgIHRvX2F0IHsgdCB3aXRoIGF0dHJzIH1cbmVuZFxuXG4oKiBuZXcgQVBJICopXG5cbmxldCBhZGQgYXRfbmFtZSB2IGF0ID1cbiAgbGV0IGEgPVxuICAgIG1hdGNoIHYgd2l0aFxuICAgIHwgYFAgdiAtPiBgUCAoQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KVxuICAgIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mOihmdW4gdiAtPiBBdC52IGF0X25hbWUgQEAgSnN0ci52IHYpKVxuICAgIHwgYFMgXyAtPiBmYWlsd2l0aCBcIlRPRE8gbm90IGltcGxlbWVudGVkXCJcbiAgaW5cbiAgYSA6OiBhdFxuXG5sZXQgYWRkX2Jvb2wgYXRfIHYgYXQgPSBtYXRjaCB2IHdpdGggZmFsc2UgLT4gYXQgfCB0cnVlIC0+IGBQIGF0XyA6OiBhdFxuXG5sZXQgYWRkX3N0ciBhdF9uYW1lIHYgYXQgPVxuICBtYXRjaCB2IHdpdGggXCJcIiAtPiBhdCB8IHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxubGV0IGFkZF9vcHQgYXRfbmFtZSB2IGF0ID1cbiAgbWF0Y2ggdiB3aXRoIE5vbmUgLT4gYXQgfCBTb21lIHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxudHlwZSBhdCA9IEMgb2Ygc3RyaW5nIHwgQSBvZiBBdC50XG50eXBlICdhdCB0JyA9ICdhdCBFbHdkLmNvbFxuXG5sZXQgbWFwX2NvbCBmID0gZnVuY3Rpb25cbiAgfCBgUCB2IC0+IGBQIChmIHYpXG4gIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mKVxuICB8IGBTIHYgLT4gYFMgKEx3ZF9zZXEubWFwIGYgdilcblxubGV0IG9mX2F0ID0gZnVuY3Rpb24gQSBhdCAtPiBhdCB8IEMgbmFtZSAtPiBBdC5jbGFzcycgKEpzdHIudiBuYW1lKVxubGV0IGNvbnMgYXQgdCA9IG1hcF9jb2wgb2ZfYXQgYXQgOjogdFxubGV0IGNsYXNzXyBuID0gY29ucyAobWFwX2NvbCAoZnVuIG4gLT4gQyBuKSBuKSBbXVxuXG5tb2R1bGUgTyA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyBhdCA9IGF0ID0gQyBvZiBzdHJpbmcgfCBBIG9mIEF0LnRcblxuICBsZXQgdiBhdCA9IGNvbnMgYXQgW11cbiAgbGV0ICggQDo6ICkgYXQgdCA9IGNvbnMgYXQgdFxuZW5kXG5cbmxldCB3aXRoX2lkIHMgdCA9XG4gIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICB0b19hdCB7IHQgd2l0aCBhdHRycyB9XG4iLCJvcGVuISBJbXBvcnRcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxubGV0IHYgP2QgPyhhdCA9IFtdKSA/ZXYgdmFsdWUgPVxuICBsZXQgYXQgPVxuICAgIEF0dHJzLmFkZCBBdC5OYW1lLnR5cGUnIChgUCBcImJ1dHRvblwiKSBhdCB8PiBBdHRycy5hZGQgQXQuTmFtZS52YWx1ZSB2YWx1ZVxuICBpblxuICBFbHdkLmlucHV0ID9kIH5hdCA/ZXYgKClcblxudHlwZSAnYSB1cGRhdGUgPSBOb25lIHwgTmV4dCB8IFNldCBvZiAnYVxuXG50eXBlICdzdGF0ZSBoYW5kbGVyX3dpdGhfc3RhdGUgPVxuICB8IEhhbmRsZXJfd2l0aF9zdGF0ZSA6IHtcbiAgICAgIG9wdHMgOiBFdi5saXN0ZW5fb3B0cyBvcHRpb247XG4gICAgICB0eXBlJyA6ICdhIEV2LnR5cGUnO1xuICAgICAgZnVuYyA6ICdzdGF0ZSAtPiAnYSBFdi50IC0+ICdzdGF0ZSB1cGRhdGU7XG4gICAgfVxuICAgICAgLT4gJ3N0YXRlIGhhbmRsZXJfd2l0aF9zdGF0ZVxuXG5sZXQgaGFuZGxlciA/b3B0cyB0eXBlJyBmdW5jID0gSGFuZGxlcl93aXRoX3N0YXRlIHsgb3B0czsgdHlwZSc7IGZ1bmMgfVxuXG5tb2R1bGUgdHlwZSBTdGF0ZSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgZGVmYXVsdCA6IHRcbiAgdmFsIG5leHQgOiB0IC0+IHRcbmVuZFxuXG5sZXQgYXBwbHlfc3RhdGUgc3RhdGUgZiA9IGYgc3RhdGVcblxubGV0IHdpdGhfc3RhdGUgPyhiYXNlID0gQXR0cnMuZW1wdHkpICh0eXBlIHQpIChtb2R1bGUgUyA6IFN0YXRlIHdpdGggdHlwZSB0ID0gdClcbiAgICA/KHN0YXRlID0gUy5kZWZhdWx0KSA/ZCA/KGF0IDogKFMudCAtPiBBdHRycy50KSBvcHRpb24pXG4gICAgPyhldiA6IHQgaGFuZGxlcl93aXRoX3N0YXRlIEVsd2QuY29sIG9wdGlvbilcbiAgICAoY29udGVudCA6IFMudCAtPiBFbC50IEVsd2QuY29sKSA9XG4gIGxldCB2X3N0YXRlID0gTHdkLnZhciBzdGF0ZSBpblxuICBsZXQgZ2V0X3N0YXRlICgpID0gTHdkLmdldCB2X3N0YXRlIGluXG4gIGxldCBzZXRfc3RhdGUgdCA9IEx3ZC5zZXQgdl9zdGF0ZSB0IGluXG4gIGxldCBlbHQgPVxuICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgIGxldCQqIHN0YXRlID0gZ2V0X3N0YXRlICgpIGluXG4gICAgbGV0IHdpdGhfc3RhdGUgKEhhbmRsZXJfd2l0aF9zdGF0ZSB7IG9wdHM7IHR5cGUnOyBmdW5jIH0pID1cbiAgICAgIGxldCBmdW5jIGV2ID1cbiAgICAgICAgbWF0Y2ggZnVuYyBzdGF0ZSBldiB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICB8IFNldCBzIC0+IHNldF9zdGF0ZSBzXG4gICAgICAgIHwgTmV4dCAtPiBzZXRfc3RhdGUgQEAgUy5uZXh0IHN0YXRlXG4gICAgICBpblxuICAgICAgRWx3ZC5oYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmNcbiAgICBpblxuICAgIGxldCBhdCA9XG4gICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmJhc2VcbiAgICAgICAgKGZ1biBhdCAtPiBBdHRycy51bmlvbiBiYXNlIEBAIGFwcGx5X3N0YXRlIHN0YXRlIGF0KVxuICAgICAgICBhdFxuICAgIGluXG4gICAgbGV0IGF0ID0gQXR0cnMudG9fYXQgYXQgaW5cbiAgICBsZXQgZXYgPVxuICAgICAgT3B0aW9uLm1hcFxuICAgICAgICAoTGlzdC5tYXAgfmY6KGZ1bmN0aW9uXG4gICAgICAgICAgfCBgUCBoIC0+IGBQICh3aXRoX3N0YXRlIGgpXG4gICAgICAgICAgfCBgUiBoIC0+IGBSIChMd2QubWFwIGggfmY6d2l0aF9zdGF0ZSlcbiAgICAgICAgICB8IGBTIGggLT4gYFMgKEx3ZF9zZXEubWFwIHdpdGhfc3RhdGUgaCkpKVxuICAgICAgICBldlxuICAgIGluXG4gICAgRWx3ZC5idXR0b24gP2QgfmF0ID9ldiAoY29udGVudCBzdGF0ZSlcbiAgaW5cbiAgKGVsdCwgZ2V0X3N0YXRlLCBzZXRfc3RhdGUpXG5cbnR5cGUgdHdvX3N0YXRlID0gT24gfCBPZmZcblxubW9kdWxlIFR3b19zdGF0ZSA9IHN0cnVjdFxuICB0eXBlIHQgPSB0d29fc3RhdGVcblxuICBsZXQgZGVmYXVsdCA9IE9uXG4gIGxldCBuZXh0ID0gZnVuY3Rpb24gT24gLT4gT2ZmIHwgT2ZmIC0+IE9uXG5lbmRcblxubGV0IHR3b19zdGF0ZSA/YmFzZSA9IHdpdGhfc3RhdGUgP2Jhc2UgKG1vZHVsZSBUd29fc3RhdGUpXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG50eXBlIHRhcmdldCA9IFBvcyBvZiBpbnQgfCBFbCBvZiBFbHdkLnRcbnR5cGUgX3QgPSB7IGVsdCA6IEVsd2QudCBMd2QudDsgc2Nyb2xsX3Bvc2l0aW9uIDogdGFyZ2V0IG9wdGlvbiBMd2QudmFyIH1cblxuKCogVE9ETzogbWFrZSBhIHByb3BlciBiaW5kaW5nICopXG5sZXQganNfc2Nyb2xsIGVsdCB0YXJnZXQgPVxuICBtYXRjaCB0YXJnZXQgd2l0aFxuICB8IFBvcyB4IC0+XG4gICAgICBsZXQgZWx0ID0gRWwudG9fanYgZWx0IGluXG4gICAgICBpZ25vcmUgQEAgSnYuY2FsbCBlbHQgXCJzY3JvbGxcIiBbfCBKdi5vZl9pbnQgMDsgSnYub2ZfaW50IHggfF1cbiAgfCBFbCBlbCAtPiBFbC5zY3JvbGxfaW50b192aWV3IGVsXG5cbmxldCBtYWtlID8oYXQgPSBbXSkgPyhldiA9IFtdKSA/b25fY3JlYXRlIH5zY3JvbGxfdGFyZ2V0IGVsdCA9XG4gIGxldCBhY3RpdmUgPSBMd2QudmFyIHRydWUgaW5cbiAgbGV0IGFjdGl2ZV9jbGFzcyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBhY3RpdmUpIH5mOihmdW5jdGlvblxuICAgICAgfCBmYWxzZSAtPiBBdHRycy5BIEF0LnZvaWRcbiAgICAgIHwgdHJ1ZSAtPiBBdHRycy5BIChBdC5jbGFzcycgKEpzdHIudiBcImxvY2tlZFwiKSkpXG4gIGluXG4gIGxldCBhdCA9XG4gICAgQXR0cnMuTy4oXG4gICAgICBgUCAoQyBcImx3ZHVpLWNvbnRyb2xsZWQtc2Nyb2xsLXdyYXBwZXJcIikgQDo6IGBSIGFjdGl2ZV9jbGFzcyBAOjogYXQpXG4gIGluXG4gIGxldCBjb250cm9scyA9XG4gICAgbGV0IGF0ID0gQXR0cnMuY2xhc3NfIChgUCBcImx3ZHVpLWNvbnRyb2xsZWQtc2Nyb2xsLWNvbnRyb2xzXCIpIGluXG4gICAgbGV0IGV2ID1cbiAgICAgIGxldCBvbl9jbGljayBfID0gTHdkLnNldCBhY3RpdmUgdHJ1ZSBpblxuICAgICAgbGV0IGhhbmRsZXIgPSBFbHdkLmhhbmRsZXIgRXYuY2xpY2sgb25fY2xpY2sgaW5cbiAgICAgIFsgYFAgaGFuZGxlciBdXG4gICAgaW5cbiAgICBFbHdkLmRpdiB+YXQgfmV2IFsgYFIgKEVsd2QuYnV0dG9uIFsgYFAgKEVsLnR4dCcgXCJTaG93IHBsYXlpbmdcIikgXSkgXVxuICBpblxuICBsZXQgb25fd2hlZWwgPVxuICAgIEVsd2QuaGFuZGxlciBFdi53aGVlbCAoZnVuIF9ldiAtPlxuICAgICAgICBpZiBMd2QucGVlayBhY3RpdmUgdGhlbiBMd2Quc2V0IGFjdGl2ZSBmYWxzZSlcbiAgaW5cbiAgbGV0IGVsdCA9XG4gICAgbGV0IHN0YXRlID0gVXRpbHMudHJpcGxlIGVsdCAoTHdkLmdldCBhY3RpdmUpIHNjcm9sbF90YXJnZXQgaW5cbiAgICBMd2QubWFwIHN0YXRlIH5mOihmdW4gKGVsdCwgYWN0aXZlLCBwb3MpIC0+XG4gICAgICAgIGlmIGFjdGl2ZSB0aGVuIE9wdGlvbi5pdGVyIChqc19zY3JvbGwgZWx0KSBwb3M7XG4gICAgICAgIGVsdClcbiAgaW5cbiAgRWx3ZC5kaXYgfmF0IH5ldjooYFAgb25fd2hlZWwgOjogZXYpID9vbl9jcmVhdGUgWyBgUiBlbHQ7IGBSIGNvbnRyb2xzIF1cbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJycmVyLkJyclxub3BlbiBCcnJfbHdkXG5tb2R1bGUgRmllbGQgPSBGaWVsZFxuXG50eXBlICgndCwgJ2EpIGZvcm1fc2V0dGVyID0gJ3QgLT4gJ2EgRmllbGQudmFsaWRhdGlvbiAtPiAndFxuXG50eXBlICdyZXMgZm9ybV9maWVsZCA9XG4gIHwgRiA6ICdhIEZpZWxkLnQgKiAoJ2Zvcm0sICdhKSBmb3JtX3NldHRlciAtPiAnZm9ybSBmb3JtX2ZpZWxkXG5cbm1vZHVsZSB0eXBlIEZvcm0gPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIGRlZmF1bHQgOiB0XG4gIHZhbCBmaWVsZHMgOiB0IGZvcm1fZmllbGQgTHdkLnQgTHdkX3NlcS50IEx3ZC50XG5lbmRcblxubGV0IGZpZWxkIGZpZWxkIHNldHRlciA9IEx3ZC5tYXAgZmllbGQgfmY6KGZ1biBmaWVsZCAtPiBGIChmaWVsZCwgc2V0dGVyKSlcblxubGV0IGNyZWF0ZSA/ZCA/YXQgP2V2ICh0eXBlIHQpIChtb2R1bGUgRm9ybSA6IEZvcm0gd2l0aCB0eXBlIHQgPSB0KSBvbl9zdWJtaXQgOlxuICAgIEVsd2QudCBMd2QudCA9XG4gIGxldCBmaWVsZHMgPVxuICAgIEx3ZF9zZXEubGlmdCBGb3JtLmZpZWxkc1xuICAgIHw+IEx3ZF9zZXEuZm9sZF9tb25vaWRcbiAgICAgICAgIChmdW4gKEYgKGZpZWxkLCBtYXBwZXIpKSAtPlxuICAgICAgICAgICAoIEx3ZF9zZXEuZWxlbWVudCBmaWVsZC5lbHQsXG4gICAgICAgICAgICAgbGV0IHZhbHVlICgpID1cbiAgICAgICAgICAgICAgIG1hdGNoIEx3ZC5wZWVrIGZpZWxkLnZhbHVlIHdpdGhcbiAgICAgICAgICAgICAgIHwgTm9uZSAtPiBGaWVsZC5FbXB0eVxuICAgICAgICAgICAgICAgfCBTb21lIHYgLT4gZmllbGQudmFsaWRhdGUgdlxuICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgZnVuIHQgLT4gbWFwcGVyIHQgQEAgdmFsdWUgKCkgKSlcbiAgICAgICAgICggKEx3ZF9zZXEuZW1wdHksIEZ1bi5pZCksXG4gICAgICAgICAgIGZ1biAoZWx0cywgZikgKGVsdHMnLCBmJykgLT5cbiAgICAgICAgICAgICAoTHdkX3NlcS5jb25jYXQgZWx0cyBlbHRzJywgZnVuIHQgLT4gZicgKGYgdCkpIClcbiAgaW5cbiAgbGV0IGhhbmRsZXIgPVxuICAgIEx3ZC5tYXAgZmllbGRzIH5mOihmdW4gKF8sIHZhbHVlKSAtPlxuICAgICAgICBsZXQgb25fc3VibWl0IGUgPVxuICAgICAgICAgIG9uX3N1Ym1pdCBAQCB2YWx1ZSBGb3JtLmRlZmF1bHQ7XG4gICAgICAgICAgRXYucHJldmVudF9kZWZhdWx0IGVcbiAgICAgICAgaW5cbiAgICAgICAgRWx3ZC5oYW5kbGVyIEV2LnN1Ym1pdCBvbl9zdWJtaXQpXG4gIGluXG4gIGxldCBvbl9zdWJtaXQgPSBgUiBoYW5kbGVyIGluXG4gIGxldCBlbHRzID0gTHdkLm1hcCBmaWVsZHMgfmY6KGZ1biAoZWx0cywgXykgLT4gZWx0cykgaW5cbiAgbGV0IGV2ID0gT3B0aW9uLm1hcF9vciB+ZGVmYXVsdDpbIG9uX3N1Ym1pdCBdIChMaXN0LmNvbnMgb25fc3VibWl0KSBldiBpblxuICBFbHdkLmZvcm0gP2QgP2F0IH5ldiBbIGBTIChMd2Rfc2VxLmxpZnQgZWx0cykgXVxuIiwib3BlbiEgSW1wb3J0XG5vcGVuISBCcnJlclxub3BlbiEgQnJyXG5vcGVuISBCcnJfbHdkXG5cbnR5cGUgJ2EgcmVhY3RpdmVfZmllbGQgPSB7XG4gIGZpZWxkIDogRWx3ZC50IEx3ZC50O1xuICBsYWJlbCA6IEVsd2QudCBMd2QudDtcbiAgdmFsdWUgOiAnYSBMd2QudDtcbn1cblxubGV0IG5hbWUgfmlkIGJhc2VfbmFtZSA9XG4gIGlmIGlkIHRoZW4gUHJpbnRmLnNwcmludGYgXCIlcy0taWRcIiBiYXNlX25hbWVcbiAgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVzXCIgYmFzZV9uYW1lXG5cbmxldCBtYWtlID8oYXQgPSBbXSkgPyhldiA9IFtdKSAoZGVzYyA6IHN0cmluZyBvcHRpb24gRmllbGQuZGVzYykgPVxuICBsZXQgaWQgPSBuYW1lIH5pZDp0cnVlIGRlc2MubmFtZSBpblxuICBsZXQgbmFtZSA9IG5hbWUgfmlkOmZhbHNlIGRlc2MubmFtZSBpblxuICBsZXQgdmFyID0gUGVyc2lzdGVudC52YXIgfmtleTppZCBkZXNjLmRlZmF1bHQgaW5cbiAgbGV0IGxhYmVsID0gRWx3ZC5sYWJlbCB+YXQ6WyBgUCAoQXQuZm9yJyAoSnN0ci52IGlkKSkgXSBkZXNjLmxhYmVsIGluXG4gIGxldCBmaWVsZCA9XG4gICAgbGV0IGF0ID1cbiAgICAgIGxldCBvcGVuIEF0dHJzIGluXG4gICAgICBhZGQgQXQuTmFtZS5pZCAoYFAgaWQpIGF0XG4gICAgICB8PiBhZGQgQXQuTmFtZS5uYW1lIChgUCBuYW1lKVxuICAgICAgfD4gYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwidGV4dFwiKVxuICAgIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIG1hdGNoIEx3ZC5wZWVrIHZhciB3aXRoXG4gICAgICB8IFNvbWUgdiAtPiBgUCAoQXQudmFsdWUgQEAgSnN0ci52IHYpIDo6IGF0XG4gICAgICB8IE5vbmUgLT4gYXRcbiAgICBpblxuICAgIGxldCBvbl9jaGFuZ2UgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmtleXVwIChmdW4gZXYgLT5cbiAgICAgICAgICBsZXQgdCA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgaW5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBKdi5nZXQgdCBcInZhbHVlXCIgaW5cbiAgICAgICAgICBMd2Quc2V0IHZhciAoU29tZSAoSnYudG9fc3RyaW5nIHZhbHVlKSkpXG4gICAgaW5cbiAgICBsZXQgZXYgPSBgUCBvbl9jaGFuZ2UgOjogZXYgaW5cbiAgICBFbHdkLmlucHV0IH5hdCB+ZXYgKClcbiAgaW5cbiAgeyBmaWVsZDsgbGFiZWw7IHZhbHVlID0gTHdkLmdldCB2YXIgfVxuIiwib3BlbiEgSW1wb3J0XG5vcGVuISBCcnJlclxub3BlbiEgQnJyXG5vcGVuISBCcnJfbHdkXG5cbnR5cGUgJ2EgcmVhY3RpdmVfZmllbGQgPSB7XG4gIGZpZWxkIDogRWx3ZC50IEx3ZC50O1xuICBsYWJlbCA6IEVsd2QudCBMd2QudDtcbiAgdmFsdWUgOiAnYSBMd2QudDtcbn1cblxubGV0IG5hbWUgfmlkIGJhc2VfbmFtZSA9XG4gIGlmIGlkIHRoZW4gUHJpbnRmLnNwcmludGYgXCIlcy0taWRcIiBiYXNlX25hbWUgZWxzZSBiYXNlX25hbWVcblxubGV0IG1ha2UgPyhhdCA9IFtdKSA/KGV2ID0gW10pIChkZXNjIDogc3RyaW5nIEZpZWxkLmRlc2MpIG9wdGlvbnMgPVxuICBsZXQgaWQgPSBuYW1lIH5pZDp0cnVlIGRlc2MubmFtZSBpblxuICBsZXQgbmFtZSA9IG5hbWUgfmlkOmZhbHNlIGRlc2MubmFtZSBpblxuICBsZXQgdmFyID0gUGVyc2lzdGVudC52YXIgfmtleTppZCBkZXNjLmRlZmF1bHQgaW5cbiAgbGV0IGxhYmVsID0gRWx3ZC5sYWJlbCB+YXQ6WyBgUCAoQXQuZm9yJyAoSnN0ci52IGlkKSkgXSBkZXNjLmxhYmVsIGluXG4gIGxldCBmaWVsZCA9XG4gICAgbGV0IGF0ID1cbiAgICAgIGxldCBvcGVuIEF0dHJzIGluXG4gICAgICBhZGQgQXQuTmFtZS5pZCAoYFAgaWQpIGF0XG4gICAgICB8PiBhZGQgQXQuTmFtZS5uYW1lIChgUCBuYW1lKVxuICAgICAgfD4gYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwidGV4dFwiKVxuICAgIGluXG4gICAgbGV0IG9uX2NoYW5nZSA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuY2hhbmdlIChmdW4gZXYgLT5cbiAgICAgICAgICBsZXQgdCA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgaW5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBKdi5nZXQgdCBcInZhbHVlXCIgaW5cbiAgICAgICAgICBMd2Quc2V0IHZhciAoSnYudG9fc3RyaW5nIHZhbHVlKSlcbiAgICBpblxuICAgIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBldiBpblxuICAgIGxldCBvcHRpb25zID1cbiAgICAgIEx3ZF9zZXEubWFwXG4gICAgICAgIChmdW4gKHZhbHVlLCBuYW1lKSAtPlxuICAgICAgICAgIGxldCBvcGVuIEF0dHJzLk8gaW5cbiAgICAgICAgICBsZXQgYXQgPSB2IChgUCAoQSAoQXQudmFsdWUgQEAgSnN0ci52IHZhbHVlKSkpIGluXG4gICAgICAgICAgbGV0IHNlbGVjdGVkID1cbiAgICAgICAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgdmFyKSB+ZjooZnVuIHNlbGVjdGVkIC0+XG4gICAgICAgICAgICAgICAgQSAoQXQuaWYnIChFcXVhbC5wb2x5IHNlbGVjdGVkIHZhbHVlKSBBdC5zZWxlY3RlZCkpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgYXQgPSBgUiBzZWxlY3RlZCBAOjogYXQgaW5cbiAgICAgICAgICBFbHdkLm9wdGlvbiB+YXQgWyBgUCAoRWwudHh0JyBuYW1lKSBdKVxuICAgICAgICBvcHRpb25zXG4gICAgaW5cbiAgICBFbHdkLnNlbGVjdCB+YXQgfmV2IFsgYFMgKEx3ZF9zZXEubGlmdCBvcHRpb25zKSBdXG4gIGluXG4gIHsgZmllbGQ7IGxhYmVsOyB2YWx1ZSA9IEx3ZC5nZXQgdmFyIH1cbiIsIm9wZW4hIEltcG9ydFxub3BlbiEgQnJyXG5vcGVuISBCcnJfbHdkXG5cbnR5cGUgY2hlY2tlZCA9IGJvb2xcbnR5cGUgbGFiZWwgPSBFbHdkLnQgRWx3ZC5jb2xcbnR5cGUgJ3ZhbHVlIGRlc2MgPSBDaGVjayBvZiAndmFsdWUgKiBsYWJlbCAqIGNoZWNrZWRcbigqIFRPRE8gfCBHcm91cCBvZiBsYWJlbCAqICd2YWx1ZSBkZXNjIGxpc3QgKilcblxudHlwZSAndmFsdWUgdCA9IHsgbmFtZSA6IHN0cmluZzsgZGVzYyA6ICd2YWx1ZSBkZXNjIEx3ZF9zZXEudCBMd2QudCB9XG50eXBlICdhIHJlYWN0aXZlX2ZpZWxkID0geyBmaWVsZCA6IEVsd2QudCBMd2QudDsgdmFsdWUgOiAnYSBMd2QudCB9XG5cbmxldCBuYW1lIH5nIH5uIH5pZCBiYXNlX25hbWUgPVxuICBpZiBpZCB0aGVuIFByaW50Zi5zcHJpbnRmIFwiJXMtJWktJWktaWRcIiBiYXNlX25hbWUgZyBuXG4gIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlcy0laS0laVwiIGJhc2VfbmFtZSBnIG5cblxubGV0IG1ha2UgdCA9XG4gIGxldCBtYWtlX2NoZWNrIH5nIH5uIHZhbHVlIGxhYmVsIGNoZWNrZWQgPVxuICAgIGxldCBpZCA9IG5hbWUgfmcgfm4gfmlkOnRydWUgdC5uYW1lIGluXG4gICAgbGV0IG5hbWUgPSBuYW1lIH5nIH5uIH5pZDpmYWxzZSB0Lm5hbWUgaW5cbiAgICBsZXQgcmVzdWx0IGNoZWNrZWQgPSBpZiBjaGVja2VkIHRoZW4gU29tZSB2YWx1ZSBlbHNlIE5vbmUgaW5cbiAgICBsZXQgdmFyID0gUGVyc2lzdGVudC52YXIgfmtleTppZCAocmVzdWx0IGNoZWNrZWQpIGluXG4gICAgbGV0IGxibCA9IEVsd2QubGFiZWwgfmF0OlsgYFAgKEF0LmZvcicgKEpzdHIudiBpZCkpIF0gbGFiZWwgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgW11cbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJjaGVja2JveFwiKVxuICAgIGluXG4gICAgbGV0IGNoZWNrZWQgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCB2YXIpIH5mOihmdW5jdGlvblxuICAgICAgICB8IFNvbWUgXyAtPiBBdC5jaGVja2VkXG4gICAgICAgIHwgTm9uZSAtPiBBdC52b2lkKVxuICAgIGluXG4gICAgbGV0IGF0ID0gYFIgY2hlY2tlZCA6OiBhdCBpblxuICAgIGxldCBvbl9jaGFuZ2UgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmNoYW5nZSAoZnVuIGV2IC0+XG4gICAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgICAgbGV0IGNoZWNrZWQgPSBKdi5nZXQgdCBcImNoZWNrZWRcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChyZXN1bHQgKEp2LnRvX2Jvb2wgY2hlY2tlZCkpKVxuICAgIGluXG4gICAgbGV0IGV2ID0gWyBgUCBvbl9jaGFuZ2UgXSBpblxuICAgIChFbHdkLihkaXYgWyBgUiAoaW5wdXQgfmF0IH5ldiAoKSk7IGBSIGxibCBdKSwgTHdkLmdldCB2YXIpXG4gIGluXG4gICgqIDxmaWVsZHNldD48bGVnZW5kPiAqKVxuICAoKiA8ZmllbGRzZXQ+PGxlZ2VuZD4gKilcbiAgbGV0IG1ha2VfYWxsIH5nIGRlc2MgPVxuICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICBMd2Rfc2VxLm1hcFxuICAgICAgKGZ1bmN0aW9uXG4gICAgICAgIHwgQ2hlY2sgKHYsIGwsIGMpIC0+XG4gICAgICAgICAgICBsZXQgZWx0LCB2YWx1ZSA9IG1ha2VfY2hlY2sgfmcgfm46IW4gdiBsIGMgaW5cbiAgICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICAgIChlbHQsIHZhbHVlKSlcbiAgICAgIGRlc2NcbiAgaW5cbiAgbGV0IGFsbCA9IG1ha2VfYWxsIH5nOjAgdC5kZXNjIGluXG4gIGxldCBlbHRzID0gTHdkX3NlcS5tYXAgKGZ1biAoZWx0LCBfKSAtPiBlbHQpIGFsbCBpblxuICBsZXQgdmFsdWUgPVxuICAgIEx3ZF9zZXEuZm9sZF9tb25vaWQgKGZ1biAoXywgdikgLT4gTHdkX3NlcS5lbGVtZW50IHYpIEx3ZF9zZXEubW9ub2lkIGFsbFxuICAgIHw+IEx3ZF9zZXEubGlmdCB8PiBMd2Rfc2VxLmZpbHRlcl9tYXAgRnVuLmlkXG4gIGluXG4gIHsgZmllbGQgPSBFbHdkLmRpdiBbIGBTIChMd2Rfc2VxLmxpZnQgZWx0cykgXTsgdmFsdWUgfVxuXG4oKiBsZXQgcmVjIG1ha2VfYWxsIH5nIH5uIChhY2NfZWx0LCBhY2NfdmFsdWUpIGRlc2MgPVxuICAgICBtYXRjaCBkZXNjIHdpdGhcbiAgICAgfCBDaGVjayAodiwgbCwgYykgOjogdGwgLT5cbiAgICAgICAgIGxldCBlbHQsIHZhbHVlID0gbWFrZV9jaGVjayB+ZyB+biB2IGwgYyBpblxuICAgICAgICAgbGV0IGFjY19lbHQgPSBMd2Rfc2VxLmNvbmNhdCBhY2NfZWx0IEBAIEx3ZF9zZXEuZWxlbWVudCBlbHQgaW5cbiAgICAgICAgIGxldCBhY2NfdmFsdWUgPVxuICAgICAgICAgICBMd2QubWFwMiBhY2NfdmFsdWUgdmFsdWUgfmY6KGZ1biBhY2MgLT4gZnVuY3Rpb25cbiAgICAgICAgICAgICB8IE5vbmUgLT4gYWNjIHwgU29tZSB2IC0+IHYgOjogYWNjKVxuICAgICAgICAgaW5cbiAgICAgICAgIG1ha2VfYWxsIH5nIH5uOihuICsgMSkgKGFjY19lbHQsIGFjY192YWx1ZSkgdGxcbiAgICAgfCBfIC0+IChMd2QucHVyZSBhY2NfZWx0LCBhY2NfdmFsdWUpXG4gICBpblxuICAgbGV0IGVsdHMsIHZhbHVlID0gbWFrZV9hbGwgfmc6MCB+bjowIChMd2Rfc2VxLmVtcHR5LCBMd2QucHVyZSBbXSkgdC5kZXNjIGluXG4gICB7IGZpZWxkID0gRWx3ZC5kaXYgWyBgUyAoTHdkX3NlcS5saWZ0IGVsdHMpIF07IHZhbHVlIH0gKilcbiIsIigqIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbnNwaXJlZCBieSBTaWV2ZTpcbiAgIC0gaHR0cHM6Ly9jYWNoZW1vbi5naXRodWIuaW8vU0lFVkUtd2Vic2l0ZS9cbiAgIC0gaHR0cHM6Ly9qdW5jaGVuZ3lhbmcuY29tL3B1YmxpY2F0aW9uL25zZGkyNC1TSUVWRS5wZGZcblxuICAgU2lldmUgdXNlcyBhIGRvdWJseS1saW5rZWQgbGlzdCBhbmQgYSBcImhhZCBwb2ludGVyXCIuXG4gICBXZSB1c2UgYSBGSUZPIGFuZCByZXBsYWNlIHRoZSBoYW5kIGJ5IGFub3RoZXIgRklGTy5cblxuICAgVGhlIGlkZWEgd2FzIHN1Z2dlc3RlZCBieSBAYXJ0LXcgKilcblxuKCogQSBbUkFfcXVldWVdIHBhaXJzIGEgW1F1ZXVlLnRdIHdpdGggYSBbSGFzaHRibC50XSB0byBlbmFibGUgZWZmaWNpZW50IHJhbmRvbVxuICAgYWNjZXNzIHRvIGVsZW1lbnRzIG9mIHRoZSBxdWV1ZS4gKilcbm1vZHVsZSBSQV9xdWV1ZSAoS2V5IDogTWFwLk9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuICBtb2R1bGUgUXVldWUgPSBDQ0ZRdWV1ZVxuICBtb2R1bGUgTWFwID0gTWFwLk1ha2UgKEtleSlcblxuICB0eXBlICd2IHQgPSB7IHF1ZXVlIDogS2V5LnQgUXVldWUudDsgZWx0cyA6ICd2IE1hcC50IH1cblxuICBsZXQgc2l6ZSB0ID0gUXVldWUuc2l6ZSB0LnF1ZXVlXG4gIGxldCBjcmVhdGUgKCkgPSB7IHF1ZXVlID0gUXVldWUuZW1wdHk7IGVsdHMgPSBNYXAuZW1wdHkgfVxuICBsZXQgX2VtcHR5ID0geyBxdWV1ZSA9IFF1ZXVlLmVtcHR5OyBlbHRzID0gTWFwLmVtcHR5IH1cbiAgbGV0IGFkZCB0IGsgeCA9IHsgcXVldWUgPSBRdWV1ZS5jb25zIGsgdC5xdWV1ZTsgZWx0cyA9IE1hcC5hZGQgayB4IHQuZWx0cyB9XG5cbiAgbGV0IHRha2Vfb3B0IHQgPVxuICAgIG1hdGNoIFF1ZXVlLnRha2VfYmFjayB0LnF1ZXVlIHdpdGhcbiAgICB8IE5vbmUgLT4gKHQsIE5vbmUpXG4gICAgfCBTb21lIChxdWV1ZSwgaykgLT5cbiAgICAgICAgbGV0IHggPSBNYXAuZmluZCBrIHQuZWx0cyBpblxuICAgICAgICAoeyBxdWV1ZTsgZWx0cyA9IE1hcC5yZW1vdmUgayB0LmVsdHMgfSwgU29tZSAoaywgeCkpXG5cbiAgbGV0IGZpbmQgdCBrID0gTWFwLmZpbmRfb3B0IGsgdC5lbHRzXG5lbmRcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICB0eXBlIGtleVxuICAoKiogVGhlIHR5cGUgb2YgdGhlIGNhY2hlIGtleXMuICopXG5cbiAgdHlwZSArISdhIHRcbiAgKCoqIFRoZSB0eXBlIG9mIGNhY2hlcyBmcm9tIHR5cGUgW2tleV0gdG8gdHlwZSBbJ2FdLiAqKVxuXG4gIHZhbCBjcmVhdGUgOiBzaXplOmludCAtPiAnYSB0XG4gICgqKiBDcmVhdGVzIGFuIGVtcHR5IGNhY2hlLiAqKVxuXG4gIHZhbCBpbnNlcnQgOlxuICAgICdhIHQgLT5cbiAgICA/b25faW5zZXJ0OignYSAtPiB1bml0KSAtPlxuICAgID9vbl9ldmljdDooJ2EgLT4gdW5pdCkgLT5cbiAgICBrZXkgLT5cbiAgICAnYSAtPlxuICAgICdhIHQgKiBib29sXG5lbmRcblxubW9kdWxlIE1ha2UgKEtleSA6IE1hcC5PcmRlcmVkVHlwZSkgOiBTIHdpdGggdHlwZSBrZXkgPSBLZXkudCA9IHN0cnVjdFxuICBtb2R1bGUgUkFfcXVldWUgPSBSQV9xdWV1ZSAoS2V5KVxuXG4gIHR5cGUga2V5ID0gS2V5LnRcbiAgdHlwZSAnYSBlbHQgPSB7IGVsdCA6ICdhOyB2aXNpdGVkIDogYm9vbCByZWYgfVxuICB0eXBlICdhIHQgPSB7IHExIDogJ2EgZWx0IFJBX3F1ZXVlLnQ7IHEyIDogJ2EgZWx0IFJBX3F1ZXVlLnQ7IHNpemUgOiBpbnQgfVxuXG4gIGxldCBjcmVhdGUgfnNpemUgPVxuICAgIGxldCBxMSA9IFJBX3F1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGxldCBxMiA9IFJBX3F1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIHsgcTE7IHEyOyBzaXplIH1cblxuICAoKiogW2V2aWN0X29uZSB0XSBmaXJzdCB0cmllcyB0byBldmljdCB0aGUgbGFzdCBlbGVtZW50IG9mIFt0LnEyXS5cbiAgICBJZiB0aGF0IGxhc3QgZWxlbWVudCBoYXMgYmVlbiB2aXNpdGVkLCBpdCBpcyBtb3ZlZCB0byB0aGUgaGVhZCBvZiBbdC5xMV0uXG4gICAgTG9vcCB1bnRpbCBhbiBlbGVtZW50IGlzIGV2aWN0ZWQgb3IgW3QucTJdIGlzIGVtcHR5LlxuICAgIElmIFt0LnEyXSBpcyBlbXB0eSB3ZSBwZXJmb3JtIHRoZSBzYW1lIHByb2Nlc3MgYnkgaW52ZXJzaW5nIHRoZSByb2xlcyBvZlxuICAgIFt0LnEyXSBhbmQgW3QucTFdLlxuXG4gICAgLyFcXCBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9vcCBpZiBib3RoIHF1ZXVlcyBhcmUgZW1wdHkuICopXG4gIGxldCByZWMgZXZpY3Rfb25lIH5vbl9ldmljdCB0ID0gZXZpY3RfcTIgfm9uX2V2aWN0IHRcblxuICBhbmQgZXZpY3RfcTIgfm9uX2V2aWN0IHQgPVxuICAgIG1hdGNoIFJBX3F1ZXVlLnRha2Vfb3B0IHQucTIgd2l0aFxuICAgIHwgcTIsIFNvbWUgKGssIHsgZWx0OyB2aXNpdGVkIH0pIHdoZW4gIXZpc2l0ZWQgLT5cbiAgICAgICAgbGV0IHExID0gUkFfcXVldWUuYWRkIHQucTEgayB7IGVsdDsgdmlzaXRlZCA9IHJlZiBmYWxzZSB9IGluXG4gICAgICAgIGV2aWN0X3EyIH5vbl9ldmljdCB7IHQgd2l0aCBxMTsgcTIgfVxuICAgIHwgcTIsIFNvbWUgKF9rLCB7IGVsdDsgXyB9KSAtPlxuICAgICAgICBvbl9ldmljdCBlbHQ7XG4gICAgICAgIHsgdCB3aXRoIHEyIH1cbiAgICB8IF8sIE5vbmUgLT4gZXZpY3RfcTEgfm9uX2V2aWN0IHRcblxuICBhbmQgZXZpY3RfcTEgfm9uX2V2aWN0IHQgPVxuICAgIG1hdGNoIFJBX3F1ZXVlLnRha2Vfb3B0IHQucTEgd2l0aFxuICAgIHwgcTEsIFNvbWUgKGssIHsgZWx0OyB2aXNpdGVkIH0pIHdoZW4gIXZpc2l0ZWQgLT5cbiAgICAgICAgbGV0IHEyID0gUkFfcXVldWUuYWRkIHQucTIgayB7IGVsdDsgdmlzaXRlZCA9IHJlZiBmYWxzZSB9IGluXG4gICAgICAgIGV2aWN0X3ExIH5vbl9ldmljdCB7IHQgd2l0aCBxMTsgcTIgfVxuICAgIHwgcTEsIFNvbWUgKF9rLCB7IGVsdDsgXyB9KSAtPlxuICAgICAgICBvbl9ldmljdCBlbHQ7XG4gICAgICAgIHsgdCB3aXRoIHExIH1cbiAgICB8IF8sIE5vbmUgLT4gZXZpY3RfcTIgfm9uX2V2aWN0IHRcblxuICBsZXQgcmVjIGV2aWN0IH5vbl9ldmljdCB0ID1cbiAgICBsZXQgc2l6ZSA9IFJBX3F1ZXVlLnNpemUgdC5xMSArIFJBX3F1ZXVlLnNpemUgdC5xMiBpblxuICAgIGlmIHNpemUgPiAwICYmIHNpemUgPiB0LnNpemUgdGhlbiBldmljdCB+b25fZXZpY3QgKGV2aWN0X29uZSB+b25fZXZpY3QgdClcbiAgICBlbHNlIHRcblxuICBsZXQgaW5zZXJ0IHQgPyhvbl9pbnNlcnQgPSBpZ25vcmUpID8ob25fZXZpY3QgPSBpZ25vcmUpIGsgeCA9XG4gICAgbWF0Y2ggUkFfcXVldWUuZmluZCB0LnExIGsgd2l0aFxuICAgIHwgU29tZSB7IGVsdCA9IF87IHZpc2l0ZWQgfSAtPlxuICAgICAgICAoKiBJZiB0aGUgZWx0IGlzIGFscmVhZHkgaW4gcTEgd2UgbWFyayBpdCBhcyB2aXNpdGVkICopXG4gICAgICAgIHZpc2l0ZWQgOj0gdHJ1ZTtcbiAgICAgICAgKHQsIGZhbHNlKVxuICAgIHwgTm9uZSAtPiAoXG4gICAgICAgIG1hdGNoIFJBX3F1ZXVlLmZpbmQgdC5xMiBrIHdpdGhcbiAgICAgICAgKCogSWYgdGhlIGVsdCBpcyBhbHJlYWR5IGluIHEyIHdlIG1hcmsgaXQgYXMgdmlzaXRlZCAqKVxuICAgICAgICB8IFNvbWUgeyBlbHQgPSBfOyB2aXNpdGVkIH0gLT5cbiAgICAgICAgICAgIHZpc2l0ZWQgOj0gdHJ1ZTtcbiAgICAgICAgICAgICh0LCBmYWxzZSlcbiAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAoKiBJZiB0aGUgZWx0IHdhcyBub3QgeWV0IGluIHRoZSBjYWNoZSB3ZSBhZGQgaXQgdG8gcTEgKilcbiAgICAgICAgICAgIGxldCBxMSA9IFJBX3F1ZXVlLmFkZCB0LnExIGsgeyBlbHQgPSB4OyB2aXNpdGVkID0gcmVmIGZhbHNlIH0gaW5cbiAgICAgICAgICAgIG9uX2luc2VydCB4O1xuICAgICAgICAgICAgKGV2aWN0IH5vbl9ldmljdCB7IHQgd2l0aCBxMSB9LCB0cnVlKSlcbmVuZFxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxubW9kdWxlIENvbHVtbnMgPSBzdHJ1Y3RcbiAgdHlwZSBjb2x1bW4gPSB7IG5hbWUgOiBzdHJpbmc7IGNzc19zaXplIDogc3RyaW5nOyBjb250ZW50IDogRWx3ZC50IEVsd2QuY29sIH1cbiAgdHlwZSB0ID0gY29sdW1uIGFycmF5XG5cbiAgbGV0IHYgbmFtZSBjc3Nfc2l6ZSBjb250ZW50ID0geyBuYW1lOyBjc3Nfc2l6ZTsgY29udGVudCB9XG5cbiAgbGV0IHRvX2hlYWRlciB0ID1cbiAgICBsZXQgY2VsbHMgPVxuICAgICAgQXJyYXkuZm9sZF9yaWdodCB0IH5pbml0OltdIH5mOihmdW4geyBjb250ZW50OyBfIH0gYWNjIC0+XG4gICAgICAgICAgYFIgKEVsd2QuZGl2IGNvbnRlbnQpIDo6IGFjYylcbiAgICBpblxuICAgIGNlbGxzXG5cbiAgbGV0IHN0eWxlIHQgPVxuICAgIGxldCB0ZW1wbGF0ZSA9XG4gICAgICBBcnJheS50b19zdHJpbmcgfnNlcDpcIiBcIiAoZnVuIHsgY3NzX3NpemU7IF8gfSAtPiBjc3Nfc2l6ZSkgdFxuICAgIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCIlczogJXM7XCIgXCJncmlkLXRlbXBsYXRlLWNvbHVtbnNcIiB0ZW1wbGF0ZVxuZW5kXG5cbnR5cGUgdCA9IHsgY29sdW1ucyA6IENvbHVtbnMudCB9XG50eXBlIGZpeGVkX3Jvd19oZWlnaHQgPSB7IHRhYmxlIDogdDsgcm93X2hlaWdodCA6IFV0aWxzLlVuaXQudCB9XG5cbmxldCBzdHlsZSB0ID1cbiAgbGV0IHN0eWxlID0gQ29sdW1ucy5zdHlsZSB0LnRhYmxlLmNvbHVtbnMgaW5cbiAgU3RyaW5nLmNvbmNhdCB+c2VwOlwiIFwiIFsgc3R5bGUgXVxuXG5sZXQgaGVhZGVyIHQgPVxuICBsZXQgcm93X2hlaWdodCA9IFV0aWxzLlVuaXQudG9fc3RyaW5nIHQucm93X2hlaWdodCBpblxuICBsZXQgYXQgPVxuICAgIFtcbiAgICAgIGBQIChBdC5zdHlsZSAoSnN0ci52IEBAIFByaW50Zi5zcHJpbnRmIFwiaGVpZ2h0OiAlc1wiIHJvd19oZWlnaHQpKTtcbiAgICAgIGBQIChBdC5jbGFzcycgKEpzdHIudiBcImx3ZHVpLWxhenktdGFibGUtaGVhZGVyXCIpKTtcbiAgICAgIGBQIChBdC5jbGFzcycgKEpzdHIudiBcImx3ZHVpLXZpcnR1YWwtdGFibGUtcm93XCIpKTtcbiAgICBdXG4gIGluXG4gIEVsd2QuZGl2IH5hdCBAQCBDb2x1bW5zLnRvX2hlYWRlciB0LnRhYmxlLmNvbHVtbnNcblxubGV0IF8gPSBVdGlscy5Vbml0LnRvX3B4IChSZW0gNC4pXG4iLCIoKiogQSB2aXJ0dWFsIHRhYmxlIHRoYXQgY2FuIGhhbmRsZSBsYXJnZSBkYXRhc2V0LlxuXG4gICAgVE9ETzogdGhpcyBpcyBjbGVhcmx5IG92ZXItZW5naW5lZXJlZDogdGhlIGxhcmdlIGx3ZCB0YWJsZSB0aGF0IHJlZHVjZXMgdG9cbiAgICByb3dzIGFuZCBwbGFjZWhvbGRlcnMgd2l0aCBhIG1vbm9pZCBpcyBlbGVnYW50IGJ1IGRvZXMgbm90IHNjYWxlIHdlbGwuIEl0XG4gICAgbWlnaHQgYmUgcG9zc2libGUgdG8gb3B0aW1pemUgaXQgKGVzcGVjaWFsbHkgdGhlIFwidW5pcXVldWVcIiBMUlUgdGhpbmd5KSxcbiAgICBidXQgaGF2aW5nIHRvbyBsYXJnZSBhIGx3ZF90YWJsZSBpcyBwcm9iYWJseSBhIGhhcmQgbGltaXQuICopXG5cbm9wZW4gSW1wb3J0XG5vcGVuIEJycmVyXG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5tb2R1bGUgRlJlZiA9IFV0aWxzLkZvcndhcmRfcmVmXG5cbmxldCBsb2dnZXIgPSBMb2dnZXIuZm9yX3NlY3Rpb24gXCJ2aXJ0dWFsIHRhYmxlXCJcblxudHlwZSAnYSByb3dfZGF0YSA9IHtcbiAgaW5kZXggOiBpbnQ7XG4gIGNvbnRlbnQgOiAnYSBvcHRpb247XG4gIHJlbmRlciA6IChpbnQgLT4gJ2EgLT4gRWx3ZC50IEVsd2QuY29sKSBMd2QudDtcbn1cblxudHlwZSAoJ2RhdGEsICdlcnJvcikgZGF0YV9zb3VyY2UgPSB7XG4gIHRvdGFsX2l0ZW1zIDogaW50IEx3ZC50O1xuICBmZXRjaCA6IChpbnQgYXJyYXkgLT4gKCdkYXRhIG9wdGlvbiBhcnJheSwgJ2Vycm9yKSBGdXQucmVzdWx0KSBMd2QudDtcbiAgcmVuZGVyIDogKGludCAtPiAnZGF0YSAtPiBFbHdkLnQgRWx3ZC5jb2wpIEx3ZC50O1xufVxuXG4oKiBUaGUgdmlydHVhbCB0YWJsZSBpcyBhIGNvbXBsZXggcmVhY3RpdmUgY29tcG9uZW50LiBQcmltYXJpbHksIGl0IHJlYWN0cyB0b1xuICAgY2hhbmdlcyBvZiB0aGUgW2RhdGFfc291cmNlXSBzbyB0aGF0IGNvbnRlbnQgaW4gdGhlIHRhYmxlIGlzIHByb3Blcmx5XG4gICByZWZyZXNoZWQgd2hlbiBpdCBkb2VzLiBBZGRpdGlvbm5hbHkgaXQgbmVlZHMgdG8gcmVhY3QgdG8gbXVsdGlwbGUgZG9tXG4gICBldmVudHMsIG5vdGFibHkgdmVydGljYWwgcmVzaXplIG9mIHRoZSBjb250YWluZXIgYW5kIHNjcm9sbCBldmVudHMsIHRvIGVuc3VyZVxuICAgdGhhdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSB0YWxiZSBpcyBhbHdheXMgcG9wdWxhdGVkIHdpdGggcm93cy4gKilcbm1vZHVsZSBDYWNoZSA9IEZGQ2FjaGUuTWFrZSAoSW50KVxuXG5sZXQgbWFrZSAodHlwZSBkYXRhKSB+KHVpX3RhYmxlIDogU2NoZW1hLmZpeGVkX3Jvd19oZWlnaHQpXG4gICAgPyhwbGFjZWhvbGRlciA6IGludCAtPiBFbHdkLnQgRWx3ZC5jb2wgPSBmdW4gXyAtPiBbXSlcbiAgICA/KHNjcm9sbF90YXJnZXQgOiBpbnQgTHdkLnQgb3B0aW9uKVxuICAgICh7IHRvdGFsX2l0ZW1zOyBmZXRjaDsgcmVuZGVyIH0gOiAoZGF0YSwgXykgZGF0YV9zb3VyY2UpID1cbiAgaWdub3JlIHBsYWNlaG9sZGVyO1xuXG4gIGxldCBtb2R1bGUgU3RhdGUgPSBzdHJ1Y3RcbiAgICAoKiBUaGUgd3JhcHBlcl9kaXYgcmVmIHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBjb3JyZWN0IGVsZW1lbnQgYXNcbiAgICAgICBzb29uIGFzIGl0IGlzIGNyZWF0ZWQuIEl0IGlzIG5vdCByZWFjdGl2ZSBwZXIgc2UuICopXG4gICAgbGV0IGNvbnRlbnRfZGl2IDogRWwudCBVdGlscy5Gb3J3YXJkX3JlZi50ID0gVXRpbHMuRm9yd2FyZF9yZWYubWFrZSAoKVxuXG4gICAgKCogVGhlIHdyYXBwZXJfZGl2IHJlZiBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29ycmVjdCBlbGVtZW50IGFzXG4gICAgICAgc29vbiBhcyBpdCBpcyBjcmVhdGVkLiBJdCBpcyBub3QgcmVhY3RpdmUgcGVyIHNlLiAqKVxuICAgIGxldCB3cmFwcGVyX2RpdiA6IEVsLnQgVXRpbHMuRm9yd2FyZF9yZWYudCA9IFV0aWxzLkZvcndhcmRfcmVmLm1ha2UgKClcblxuICAgICgqIFRoZSBoZWlnaHQgb2YgdGhlIHdpbmRvdyBpcyBhIHJlYWN0aXZlIHZhbHVlIHRoYXQgbWlnaHQgY2hhbmdlIGR1cmluZ1xuICAgICAgIGV4ZWN1dGlvbiB3aGVuIHRoZSBicm93c2VyIGlzIHJlc2l6ZWQgb3Igb3RoZXIgbGF5b3V0IGNoYW5nZXMgYXJlIG1hZGUuICopXG4gICAgbGV0IF93aW5kb3dfaGVpZ2h0IDogaW50IG9wdGlvbiBMd2QudmFyID0gTHdkLnZhciBOb25lXG4gIGVuZCBpblxuICBsZXQgcm93X3NpemUgPSB1aV90YWJsZS5yb3dfaGVpZ2h0IHw+IFV0aWxzLlVuaXQudG9fc3RyaW5nIGluXG4gIGxldCBoZWlnaHRfbiBuID0gUHJpbnRmLnNwcmludGYgXCJoZWlnaHQ6IGNhbGMoJXMgKiAlaSk7XCIgcm93X3NpemUgbiBpblxuICBsZXQgaGVpZ2h0ID0gUHJpbnRmLnNwcmludGYgXCJoZWlnaHQ6ICVzICFpbXBvcnRhbnQ7XCIgcm93X3NpemUgaW5cbiAgbGV0IHRhYmxlIDogZGF0YSByb3dfZGF0YSBMd2RfdGFibGUudCA9IEx3ZF90YWJsZS5tYWtlICgpIGluXG4gICgqIFRoZSBbcm93X2luZGV4XSB0YWJsZSBpcyB1c2VkIHRvIHByb3ZpZGUgZmFzdCByYW5kb20gYWNjZXNzIHRvIHRoZSB0YWJsZSdzXG4gICAgIHJvd3MgaW4gdGhlIG9ic2VydmVyJ3MgY2FsbGJhY2sgKilcbiAgbGV0IHJvd19pbmRleCA6IChpbnQsIGRhdGEgcm93X2RhdGEgTHdkX3RhYmxlLnJvdykgSGFzaHRibC50ID1cbiAgICBIYXNodGJsLmNyZWF0ZSAyMDQ4XG4gIGluXG4gIGxldCB1bmxvYWQgaSA9XG4gICAgbGV0IG9wZW4gT3B0aW9uLkluZml4IGluXG4gICAgKGxldCogcm93ID0gSGFzaHRibC5nZXQgcm93X2luZGV4IGkgaW5cbiAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgIEx3ZF90YWJsZS5zZXQgcm93IHsgcm93X2RhdGEgd2l0aCBjb250ZW50ID0gTm9uZSB9KVxuICAgIHw+IGlnbm9yZVxuICBpblxuICBsZXQgbmV3X2NhY2hlICgpID0gQ2FjaGUuY3JlYXRlIH5zaXplOjUwIGluXG4gICgqIFRoZSBjYWNoZSBpcyBzb21lIHNvcnQgb2YgTFJVIHRvIGtlZXAgbGl2ZSB0aGUgY29udGVudCBvZiByZWNlbnRseSBzZWVuXG4gICAgIHJvd3MgKilcbiAgbGV0IGNhY2hlX3JlZiA9IHJlZiAobmV3X2NhY2hlICgpKSBpblxuICBsZXQgYWRkIH5mZXRjaCA/KG1heF9pdGVtcyA9IDIwMCkgaW5kZXhlcyA9XG4gICAgbGV0IGNhY2hlID0gIWNhY2hlX3JlZiBpblxuICAgIGxldCBsb2FkIGluZGV4ZXMgPVxuICAgICAgKGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgbGV0KyAoZGF0YSA6IGRhdGEgb3B0aW9uIGFycmF5KSA9IGZldGNoIGluZGV4ZXMgaW5cbiAgICAgICBBcnJheS5pdGVyMiBpbmRleGVzIGRhdGEgfmY6KGZ1biBpIGRhdGEgLT5cbiAgICAgICAgICAgKGxldCBvcGVuIE9wdGlvbi5JbmZpeCBpblxuICAgICAgICAgICAgbGV0KiByb3cgPSBIYXNodGJsLmdldCByb3dfaW5kZXggaSBpblxuICAgICAgICAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgICAgICBsZXQgZGF0YSA9XG4gICAgICAgICAgICAgIG1hdGNoIGRhdGEgd2l0aCBTb21lIGRhdGEgLT4gZGF0YSB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgKCogdG9kbzogbGV0IHVzZXJzIHByb3ZpZGUgY29tcGFyaXNvbiAqKVxuICAgICAgICAgICAgaWYgbm90IChFcXVhbC5wb2x5IHJvd19kYXRhLmNvbnRlbnQgQEAgU29tZSBkYXRhKSB0aGVuXG4gICAgICAgICAgICAgIEx3ZF90YWJsZS5zZXQgcm93IHsgcm93X2RhdGEgd2l0aCBjb250ZW50ID0gU29tZSBkYXRhIH0pXG4gICAgICAgICAgIHw+IGlnbm9yZSkpXG4gICAgICB8PiBpZ25vcmVcbiAgICBpblxuICAgIGxldCBjYWNoZSwgdG9fbG9hZCA9XG4gICAgICBMaXN0LmZvbGRfbGVmdCB+aW5pdDooY2FjaGUsIFtdKSBpbmRleGVzIH5mOihmdW4gKGNhY2hlLCBhY2MpIGkgLT5cbiAgICAgICAgICBpZ25vcmUgbWF4X2l0ZW1zICgqIGNhY2hlIGlzIG5vdCBjb25maWd1cmFibGUgcmlnaHQgbm93ICopO1xuICAgICAgICAgIGxldCBjYWNoZSwgaW5zZXJ0ZWQgPSBDYWNoZS5pbnNlcnQgfm9uX2V2aWN0OnVubG9hZCBjYWNoZSBpIGkgaW5cbiAgICAgICAgICBpZiBpbnNlcnRlZCB0aGVuIChjYWNoZSwgaSA6OiBhY2MpIGVsc2UgKGNhY2hlLCBhY2MpKVxuICAgIGluXG4gICAgY2FjaGVfcmVmIDo9IGNhY2hlO1xuICAgIG1hdGNoIEFycmF5Lm9mX2xpc3QgdG9fbG9hZCB3aXRoIFt8fF0gLT4gKCkgfCB0b19sb2FkIC0+IGxvYWQgdG9fbG9hZFxuICBpblxuICBsZXQgdGFibGVfaGVpZ2h0ID0gTHdkLnZhciBOb25lIGluXG4gIGxldCBjb21wdXRlX3Zpc2libGVfcm93cyB+bGFzdF9zY3JvbGxfeSA9XG4gICAgbGV0IGhlaWdodCBlbHQgPVxuICAgICAgbGV0IGp2ID0gRWwudG9fanYgZWx0IGluXG4gICAgICBKdi5nZXQganYgXCJvZmZzZXRIZWlnaHRcIiB8PiBKdi50b19mbG9hdFxuICAgIGluXG4gICAgbGV0IGRpdiA9IEZSZWYuZ2V0X2V4biBTdGF0ZS53cmFwcGVyX2RpdiBpblxuICAgIGxldCBzY3JvbGxfeSA9IEVsLnNjcm9sbF95IGRpdiBpblxuICAgIGxldCBkaXJlY3Rpb24gPSBpZiBzY3JvbGxfeSA+LiAhbGFzdF9zY3JvbGxfeSB0aGVuIGBEb3duIGVsc2UgYFVwIGluXG4gICAgbGV0ICgpID0gbGFzdF9zY3JvbGxfeSA6PSBzY3JvbGxfeSBpblxuICAgIGxldCB2aXNpYmxlX2hlaWdodCA9IGhlaWdodCBkaXYgaW5cbiAgICBsZXQgcGFyZW50ID0gVXRpbHMuRm9yd2FyZF9yZWYuZ2V0X2V4biBTdGF0ZS5jb250ZW50X2RpdiBpblxuICAgIGxldCByb3dfaGVpZ2h0ID0gVXRpbHMuVW5pdC50b19weCB+cGFyZW50IHVpX3RhYmxlLnJvd19oZWlnaHQgaW5cbiAgICBsb2dnZXIuZGVidWcgWyBcIlZpc2libGUgaGVpZ2h0OlwiOyB2aXNpYmxlX2hlaWdodDsgXCJSb3cgaGVpZ2h0XCI7IHJvd19oZWlnaHQgXTtcbiAgICBsZXQgbnVtYmVyX29mX3Zpc2libGVfcm93cyA9XG4gICAgICBJbnQub2ZfZmxvYXQgKGNlaWwgKHZpc2libGVfaGVpZ2h0IC8uIHJvd19oZWlnaHQpKVxuICAgIGluXG4gICAgbGV0IGJsZWVkaW5nID0gbnVtYmVyX29mX3Zpc2libGVfcm93cyBpblxuICAgIGxldCBzY3JvbGxfeSA9IHNjcm9sbF95IGluXG4gICAgbGV0IGZpcnN0X3Zpc2libGVfcm93ID0gaW50X29mX2Zsb2F0IChzY3JvbGxfeSAvLiByb3dfaGVpZ2h0KSBpblxuICAgIGxldCBsYXN0X3Zpc2libGVfcm93ID0gZmlyc3RfdmlzaWJsZV9yb3cgKyBudW1iZXJfb2ZfdmlzaWJsZV9yb3dzIGluXG4gICAgbGV0IGZpcnN0ID1cbiAgICAgIGxldCBibGVlZGluZyA9XG4gICAgICAgIG1hdGNoIGRpcmVjdGlvbiB3aXRoIGBVcCAtPiBibGVlZGluZyB8IF8gLT4gYmxlZWRpbmcgLyAyXG4gICAgICBpblxuICAgICAgZmlyc3RfdmlzaWJsZV9yb3cgLSBibGVlZGluZyB8PiBtYXggMFxuICAgIGluXG4gICAgbGV0IGxhc3QgPVxuICAgICAgbGV0IGJsZWVkaW5nID1cbiAgICAgICAgbWF0Y2ggZGlyZWN0aW9uIHdpdGggYERvd24gLT4gYmxlZWRpbmcgfCBfIC0+IGJsZWVkaW5nIC8gMlxuICAgICAgaW5cbiAgICAgIGxhc3RfdmlzaWJsZV9yb3cgKyBibGVlZGluZ1xuICAgIGluXG4gICAgTGlzdC5pbml0IChsYXN0IC0gZmlyc3QpIH5mOihmdW4gaSAtPiBmaXJzdCArIGkpXG4gIGluXG4gIGxldCBwcmVwYXJlIH50b3RhbF9pdGVtczp0b3RhbCB+cmVuZGVyID1cbiAgICBsZXQgKCkgPSBjYWNoZV9yZWYgOj0gbmV3X2NhY2hlICgpIGluXG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCBjdXJyZW50X3JvdyA9IHJlZiAoTHdkX3RhYmxlLmZpcnN0IHRhYmxlKSBpblxuICAgIHdoaWxlIE9wdGlvbi5pc19zb21lICFjdXJyZW50X3JvdyB8fCAhaSA8PSB0b3RhbCAtIDEgZG9cbiAgICAgIG1hdGNoICFjdXJyZW50X3JvdyB3aXRoXG4gICAgICB8IFNvbWUgcm93IC0+XG4gICAgICAgICAgaWYgIWkgPD0gdG90YWwgLSAxIHRoZW5cbiAgICAgICAgICAgIGxldCAoKSA9IEhhc2h0YmwucmVwbGFjZSByb3dfaW5kZXggIWkgcm93IGluXG4gICAgICAgICAgICBMd2RfdGFibGUuc2V0IHJvdyB7IGluZGV4ID0gIWk7IGNvbnRlbnQgPSBOb25lOyByZW5kZXIgfVxuICAgICAgICAgIGVsc2UgTHdkX3RhYmxlLnVuc2V0IHJvdztcbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgY3VycmVudF9yb3cgOj0gTHdkX3RhYmxlLm5leHQgcm93XG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBpZiAhaSA8PSB0b3RhbCAtIDEgdGhlbiAoXG4gICAgICAgICAgICBsZXQgc2V0ID0geyBpbmRleCA9ICFpOyBjb250ZW50ID0gTm9uZTsgcmVuZGVyIH0gaW5cbiAgICAgICAgICAgIGxldCByb3cgPSBMd2RfdGFibGUuYXBwZW5kIH5zZXQgdGFibGUgaW5cbiAgICAgICAgICAgIEhhc2h0YmwuYWRkIHJvd19pbmRleCAhaSByb3c7XG4gICAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgICBjdXJyZW50X3JvdyA6PSBMd2RfdGFibGUubmV4dCByb3cpXG4gICAgZG9uZVxuICBpblxuICBsZXQgcG9wdWxhdGVfb25fc2Nyb2xsID1cbiAgICBsZXQgbGFzdF9zY3JvbGxfeSA9IHJlZiAwLiBpblxuICAgIGxldCB1cGRhdGUgPVxuICAgICAgTHdkLm1hcCBmZXRjaCB+ZjooZnVuIGZldGNoICgpIC0+XG4gICAgICAgICAgbGV0IHZpc2libGVfcm93cyA9IGNvbXB1dGVfdmlzaWJsZV9yb3dzIH5sYXN0X3Njcm9sbF95IGluXG4gICAgICAgICAgKCogdG9kbzogV2UgZG8gd2F5IHRvbyBtdWNoIHdvcmsgYW5kIHJlYnVpbGQgdGhlIHF1ZXVlIGVhY2hcbiAgICAgICAgICAgICB0aW1lLi4uIGl0J3MgdmVyeSBpbmVmaWNpZW50ICopXG4gICAgICAgICAgYWRkIH5mZXRjaCB+bWF4X2l0ZW1zOig0ICogTGlzdC5sZW5ndGggdmlzaWJsZV9yb3dzKSB2aXNpYmxlX3Jvd3MpXG4gICAgaW5cbiAgICBMd2QubWFwMiB0b3RhbF9pdGVtcyB1cGRhdGUgfmY6KGZ1biB0b3RhbF9pdGVtcyB1cGRhdGUgLT5cbiAgICAgICAgcHJlcGFyZSB+dG90YWxfaXRlbXMgfnJlbmRlcjtcbiAgICAgICAgdXBkYXRlKVxuICBpblxuICBsZXQgKCkgPVxuICAgIGxldCByZXBvcHVsYXRlX2RlcHMgPSBMd2QucGFpciBwb3B1bGF0ZV9vbl9zY3JvbGwgKEx3ZC5nZXQgdGFibGVfaGVpZ2h0KSBpblxuICAgIGxldCByb290ID0gTHdkLm9ic2VydmUgcmVwb3B1bGF0ZV9kZXBzIGluXG4gICAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+XG4gICAgICAgIG1hdGNoIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB3aXRoXG4gICAgICAgIHwgdXBkYXRlLCBTb21lIF9oIC0+IHVwZGF0ZSAoKVxuICAgICAgICB8IF8gLT4gKCkpO1xuICAgIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB8PiBpZ25vcmVcbiAgaW5cbiAgbGV0IG1ha2Vfc3BhY2VyIG4gPVxuICAgIGxldCBhdCA9IFsgQXQuY2xhc3MnIChKc3RyLnYgXCJyb3dfc3BhY2VyXCIpIF0gaW5cbiAgICBsZXQgc3R5bGUgPSBBdC5zdHlsZSAoSnN0ci52IEBAIGhlaWdodF9uIG4pIGluXG4gICAgRWwuZGl2IH5hdDooc3R5bGUgOjogYXQpIFtdXG4gIGluXG4gIGxldCByZW5kZXIgX3JvdyB7IGNvbnRlbnQ7IGluZGV4OyByZW5kZXIgfSA9XG4gICAgbGV0IGF0ID0gQXR0cnMuYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcImx3ZHVpLXZpcnR1YWwtdGFibGUtcm93XCIpIFtdIGluXG4gICAgbGV0IHN0eWxlID0gYFAgKEF0LnN0eWxlIChKc3RyLnYgaGVpZ2h0KSkgaW5cbiAgICBtYXRjaCBjb250ZW50IHdpdGhcbiAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICBsZXQgcmVuZGVyZWRfcm93ID1cbiAgICAgICAgICBMd2QubWFwIHJlbmRlciB+ZjooZnVuIHJlbmRlciAtPlxuICAgICAgICAgICAgICBMd2Rfc2VxLm9mX2xpc3RcbiAgICAgICAgICAgICAgICAoTGlzdC5tYXAgKHJlbmRlciBpbmRleCBkYXRhKSB+ZjooZnVuIGVsdCAtPiBFbHdkLmRpdiBbIGVsdCBdKSkpXG4gICAgICAgIGluXG4gICAgICAgICggMCxcbiAgICAgICAgICBMd2Rfc2VxLmVsZW1lbnRcbiAgICAgICAgICBAQCBFbHdkLmRpdiB+YXQ6KHN0eWxlIDo6IGF0KSBbIGBTIChMd2Rfc2VxLmxpZnQgcmVuZGVyZWRfcm93KSBdLFxuICAgICAgICAgIDAgKVxuICAgIHwgTm9uZSAtPiAoMSwgTHdkX3NlcS5lbXB0eSwgMClcbiAgaW5cbiAgbGV0IHRhYmxlX2JvZHkgPVxuICAgIGxldCByb3dzID1cbiAgICAgIEx3ZF90YWJsZS5tYXBfcmVkdWNlIHJlbmRlclxuICAgICAgICAoICgwLCBMd2Rfc2VxLmVtcHR5LCAwKSxcbiAgICAgICAgICBmdW4gKG4sIHMsIG0pIChwLCBzJywgcSkgLT5cbiAgICAgICAgICAgIG1hdGNoIChMd2Rfc2VxLnZpZXcgcywgTHdkX3NlcS52aWV3IHMnKSB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5LCBFbXB0eSAtPlxuICAgICAgICAgICAgICAgICgqIFNpbmNlIHMgaXMgZW1wdHkgaXQgZG9lcyBub3QgbWF0dGVyIG9uIHdoaWNoXG4gICAgICAgICAgICAgICAgICAgXCJzaWRlXCIgb2YgaXQgdGhlIHNwYWNlcyBhcmUgYWNjdW11bGF0ZWQuICopXG4gICAgICAgICAgICAgICAgKG4gKyBtICsgcCArIHEsIHMsIDApXG4gICAgICAgICAgICB8IEVtcHR5LCBfIC0+IChuICsgbSArIHAsIHMnLCBxKVxuICAgICAgICAgICAgfCBfLCBFbXB0eSAtPiAobiwgcywgbSArIHAgKyBxKVxuICAgICAgICAgICAgfCBfLCBfIC0+XG4gICAgICAgICAgICAgICAgbGV0IHMgPVxuICAgICAgICAgICAgICAgICAgaWYgbSArIHAgPiAwIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwYWNlciA9IEx3ZC5wdXJlIEBAIG1ha2Vfc3BhY2VyIChtICsgcCkgaW5cbiAgICAgICAgICAgICAgICAgICAgTHdkX3NlcS4oY29uY2F0IHMgQEAgY29uY2F0IChlbGVtZW50IHNwYWNlcikgcycpXG4gICAgICAgICAgICAgICAgICBlbHNlIEx3ZF9zZXEuY29uY2F0IHMgcydcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIChuLCBzLCBxKSApXG4gICAgICAgIHRhYmxlXG4gICAgaW5cbiAgICBMd2QubWFwIHJvd3MgfmY6KGZ1biAobiwgcywgbSkgLT5cbiAgICAgICAgbGV0IHJlc3VsdCA9XG4gICAgICAgICAgaWYgbiA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGZpcnN0X3NwYWNlciA9IEx3ZC5wdXJlIEBAIG1ha2Vfc3BhY2VyIG4gaW5cbiAgICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCAoZWxlbWVudCBmaXJzdF9zcGFjZXIpIHMpXG4gICAgICAgICAgZWxzZSBzXG4gICAgICAgIGluXG4gICAgICAgIGlmIG0gPiAwIHRoZW5cbiAgICAgICAgICBsZXQgbGFzdF9zcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciBtIGluXG4gICAgICAgICAgTHdkX3NlcS4oY29uY2F0IHJlc3VsdCAoZWxlbWVudCBsYXN0X3NwYWNlcikpXG4gICAgICAgIGVsc2UgcmVzdWx0KVxuICBpblxuICBsZXQgdGFibGVfaGVhZGVyID0gU2NoZW1hLmhlYWRlciB1aV90YWJsZSBpblxuICBsZXQgb2JzZXJ2ZXIgPVxuICAgICgqIFdlIG9ic2VydmUgdGhlIHNpemUgb2YgdGhlIHRhYmxlIHRvIHJlLXBvcHVsYXRlIGlmIG5lY2Vzc2FyeSAqKVxuICAgIFJlc2l6ZV9vYnNlcnZlci5jcmVhdGUgfmNhbGxiYWNrOihmdW4gZW50cmllcyBfIC0+XG4gICAgICAgIGxldCBlbnRyeSA9IExpc3QuaGQgZW50cmllcyBpblxuICAgICAgICBsZXQgcmVjdCA9IFJlc2l6ZV9vYnNlcnZlci5FbnRyeS5jb250ZW50X3JlY3QgZW50cnkgaW5cbiAgICAgICAgbGV0IGhlaWdodCA9IERvbV9yZWN0X3JlYWRfb25seS5oZWlnaHQgcmVjdCBpblxuICAgICAgICBtYXRjaCBMd2QucGVlayB0YWJsZV9oZWlnaHQgd2l0aFxuICAgICAgICB8IFNvbWUgaCB3aGVuIGggPD4gaGVpZ2h0IC0+IEx3ZC5zZXQgdGFibGVfaGVpZ2h0IChTb21lIGhlaWdodClcbiAgICAgICAgfCBOb25lIC0+IEx3ZC5zZXQgdGFibGVfaGVpZ2h0IChTb21lIGhlaWdodClcbiAgICAgICAgfCBfIC0+ICgpKVxuICBpblxuICBsZXQgcm93cyA9XG4gICAgbGV0IGF0ID0gQXR0cnMuTy4odiAoYFAgKEMgXCJsd2R1aS1sYXp5LXRhYmxlLWNvbnRlbnRcIikpKSBpblxuICAgIGxldCBvbl9jcmVhdGUgZWwgPSBVdGlscy5Gb3J3YXJkX3JlZi5zZXRfZXhuIFN0YXRlLmNvbnRlbnRfZGl2IGVsIGluXG4gICAgRWx3ZC5kaXYgfmF0IH5vbl9jcmVhdGUgWyBgUyAoTHdkX3NlcS5saWZ0IHRhYmxlX2JvZHkpIF1cbiAgaW5cbiAgbGV0IHdyYXBwZXIgPVxuICAgIGxldCBhdCA9IEF0dHJzLk8uKHYgKGBQIChDIFwibHdkdWktbGF6eS10YWJsZS1jb250ZW50LXdyYXBwZXJcIikpKSBpblxuICAgIGxldCBzY3JvbGxfaGFuZGxlciA9XG4gICAgICBMd2QubWFwIHBvcHVsYXRlX29uX3Njcm9sbCB+ZjooZnVuIHVwZGF0ZSAtPlxuICAgICAgICAgIEVsd2QuaGFuZGxlciBFdi5zY3JvbGwgKGZ1biBfZXYgLT5cbiAgICAgICAgICAgICAgaWdub3JlXG4gICAgICAgICAgICAgIEBAXG4gICAgICAgICAgICAgIGxldCBzY3JvbGxfaGFuZGxlciA9XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RfdXBkYXRlID0gcmVmIDAuIGluXG4gICAgICAgICAgICAgICAgbGV0IHRpbWVvdXQgPSByZWYgKC0xKSBpblxuICAgICAgICAgICAgICAgIGxldCByZXNldF90aWNrZXIgZGl2ID1cbiAgICAgICAgICAgICAgICAgIGxldCBkZWJvdW5jaW5nX2ludGVydmFsID0gODAwIGluXG4gICAgICAgICAgICAgICAgICAoKiBXZSB1c2UgW2xhc3RfdXBkYXRlXSB0byBoYXZlIHJlZ3VsYXIgZGVib3VuY2VkIHVwZGF0ZXMgYW5kIHRoZVxuICAgICAgICAgICAgICAgICAgICAgW3RpbWVvdXRdIHRvIGVuc3VyZSB0aGF0IHRoZSBsYXN0IHNjcm9sbCBldmVudCBpcyBhbHdheXMgdGFrZW4gaW50b1xuICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCBldmVuIGl0IGl0IGhhcHBlbnMgZHVyaW5nIHRoZSBkZWJvdW5jaW5nIGludGVydmFsLiAqKVxuICAgICAgICAgICAgICAgICAgbGV0IG5vdyA9IFBlcmZvcm1hbmNlLm5vd19tcyBHLnBlcmZvcm1hbmNlIGluXG4gICAgICAgICAgICAgICAgICBpZiAhdGltZW91dCA+PSAwIHRoZW4gRy5zdG9wX3RpbWVyICF0aW1lb3V0O1xuICAgICAgICAgICAgICAgICAgdGltZW91dCA6PVxuICAgICAgICAgICAgICAgICAgICBHLnNldF90aW1lb3V0IH5tczpkZWJvdW5jaW5nX2ludGVydmFsIChmdW4gKCkgLT4gdXBkYXRlIGRpdik7XG4gICAgICAgICAgICAgICAgICBpZiBub3cgLS4gIWxhc3RfdXBkYXRlID4uIGZsb2F0X29mX2ludCBkZWJvdW5jaW5nX2ludGVydmFsXG4gICAgICAgICAgICAgICAgICB0aGVuIChcbiAgICAgICAgICAgICAgICAgICAgbGFzdF91cGRhdGUgOj0gbm93O1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGUgZGl2KVxuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgZnVuIGRpdiAtPiByZXNldF90aWNrZXIgZGl2XG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIHNjcm9sbF9oYW5kbGVyICgpKSlcbiAgICBpblxuICAgIGxldCBldiA9IFsgYFIgc2Nyb2xsX2hhbmRsZXIgXSBpblxuICAgIGxldCBvbl9jcmVhdGUgZWwgPSBVdGlscy5Gb3J3YXJkX3JlZi5zZXRfZXhuIFN0YXRlLndyYXBwZXJfZGl2IGVsIGluXG4gICAgKG1hdGNoIHNjcm9sbF90YXJnZXQgd2l0aFxuICAgIHwgU29tZSBzY3JvbGxfdGFyZ2V0IC0+XG4gICAgICAgIGxldCBzY3JvbGxfdGFyZ2V0ID1cbiAgICAgICAgICBMd2QubWFwIHNjcm9sbF90YXJnZXQgfmY6KGZ1biBpIC0+XG4gICAgICAgICAgICAgIGxldCByb3dfaGVpZ2h0ID1cbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gVXRpbHMuRm9yd2FyZF9yZWYuZ2V0X2V4biBTdGF0ZS5jb250ZW50X2RpdiBpblxuICAgICAgICAgICAgICAgIEludC5vZl9mbG9hdCAoVXRpbHMuVW5pdC50b19weCB+cGFyZW50IHVpX3RhYmxlLnJvd19oZWlnaHQpXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIFNvbWUgKENvbnRyb2xsZWRfc2Nyb2xsLlBvcyAoaSAqIHJvd19oZWlnaHQpKSlcbiAgICAgICAgaW5cbiAgICAgICAgQ29udHJvbGxlZF9zY3JvbGwubWFrZSB+YXQgfmV2IH5vbl9jcmVhdGUgfnNjcm9sbF90YXJnZXQgcm93c1xuICAgIHwgTm9uZSAtPiBFbHdkLmRpdiB+YXQgfmV2IH5vbl9jcmVhdGUgWyBgUiByb3dzIF0pXG4gICAgfD4gTHdkLm1hcCB+ZjoodGVlIChmdW4gZWwgLT4gUmVzaXplX29ic2VydmVyLm9ic2VydmUgb2JzZXJ2ZXIgZWwpKVxuICBpblxuICBsZXQgdGFibGUgPVxuICAgIGxldCBhdCA9IEF0dHJzLnRvX2F0IEBAIEF0dHJzLmNsYXNzZXMgWyBcImx3ZHVpLWxhenktdGFibGVcIiBdIGluXG4gICAgbGV0IGdyaWRfc3R5bGUgPSBTY2hlbWEuc3R5bGUgdWlfdGFibGUgaW5cbiAgICBsZXQgcyA9IEF0LnN0eWxlIChKc3RyLnYgQEAgZ3JpZF9zdHlsZSkgaW5cbiAgICBsZXQgYXQgPSBgUCBzIDo6IGF0IGluXG4gICAgRWx3ZC5kaXYgfmF0IFsgYFIgdGFibGVfaGVhZGVyOyBgUiB3cmFwcGVyIF1cbiAgaW5cbiAgdGFibGVcblxuKCoqICMjIyMjIyMqKiMqKioqKiojJSUjPT09KysrKiMjIyUjIyMjIyMjIyMjIyorIyM9IyMjKysrKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjKiMjIyMqKioqJSUjIz09PT09PT09PT09KyM9PT0tPT09PT09PSojPSMjIysrKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyojIyMjIyoqKiMlIyM9PT09PT0tLS09PSsjPT0tLS09PT09PT0qIz0jIyMrKysrKysrKysrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjPT09PS0tLS09PS09Iz0tLT09PT09PT09KiM9KiMjJSMrKysrKyUlJSsrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMlIz09PT0tPT09PS0tPSM9PT09PT09PT09PSojPSojIyUjKys9KyMqKiUlKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyo9LS0tLS0tLS0tLT0jPT09PT09PT09PT0rIz0rIyMrJSMlKislKyUlJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIys9LS0tLS0tLS09PS0tLS0tIz09PT0tPT0tLS0tKyM9KyMjKislIyUlKyMjJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjKz0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT0tPSsjPSsjIyMrKysjKiUrIysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjPS0tLS0tLS0tLT0jIyMjPSM9LS0jPSsrPT09PS0tPT09Iz0rIyMjKisrKyUlKyslJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMqPT09PT09LS09PSoqIyMjIyMjKz09PT09Kz0rKysrKysqIyM9KyMjIyorKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjPS0tLS0tPT0rKisjIyMqIyMjIyMjPSM9PS0tLS09PT09PSsjPSsjIyMqKioqKysrKysrKytJUysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz09LT0tPSojKz0jKyUrIz09PSM9PT0jPT0tLT09PT09PT09Iz0rIyMjKioqKysrKysrKysrKysrVEhJUysrKysrK1xuIyMjIyMjIyMjIyMjIyM9LSMqIysqIyM9IyMjIyorIz0rKz09Iz09PT09PT09PT09KyM9KyMjIyoqKioqKiorKytBKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjPT0jIyM9IyMjIyMjIyMjIyMjKyMqKyM9PT09PT09PT09PT0jKysjIyMqKioqKioqKiorKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyM9KisjKiMjIyMjIyMjIyMjIyMjIz0jPT09PT09PT09PT09IysrIyMjKioqKioqKioqKioqTU9OT0lEKz8rKysrK1xuIyMjIyMjIyMjIyMjIyMjIz09IyMjIyMjIyMjIz09PT0jIyo9Iz09PT09PT0jKio9PSMrKyMjIyoqKioqKioqKioqKioqKioqKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjPT0rIyMjIyMjIyMjIyMjIyM9PSM9PT09PSMjIz09PT0jKysjIyMqKioqKioqKioqKioqKioqKioqKioqKysrXG4jIyMjIyMjIyMjIyMjIyMjIyM9PSMjIysjIyMjIyMjIyMrIyMjKis9PSMjIz09PT09IysrIyMrKysqKioqKioqKioqKioqKioqKioqKioqK1xuIyMjIyMjIyMjIyMjIyMrJSUlJSMjIyMjIyMjKyMjIyMqPT0rIz09KyMjIyMjIyMjIyMjIyMjKisrKioqKioqKioqKioqKioqKioqKioqKipcbiMjIyMjIyMjIyMjIyMjKysrKys9KyUjJSMqIyMjKiMlJSUlKyM9KyMjIyMjIyMjIyMqIyMjKyM9IyMqIyoqKioqKioqKioqKioqKioqKioqXG4jIyMjIyMjIyMjIyMjIyojPT0rPT09PSMjPT09IyMjJSUlJSUlJSMjIyMjIyMjIyMjIyM9IysjIyMjIyMqKioqKysqPT0rKioqKioqKioqKlxuIyMjIyMrPSsjIyMjIyMjIyMjIz0rPT0rPT09PSMjIyorIyUlJSUjIyMjIyMjIyMjIyorKyMjIyMjIyMjPT0qKz09PT09PSsrKioqKioqKipcbiMjIyMjIyMjIyMjIyMjIyMjIyMjKj09PT09PT0jIyMjIysjJSUqIyMjIyMjIyMqPT0jKysjIyMjIyMqPT09PT09PT09PT09PT09PSoqKioqXG4jIyMjIyMjIyMjIyMrIyMjIyMrIyMjIz09PSs9IyMjIyMjIysjIyMjIyMjIz09PT09IysrIyMjKz09PT09PT09PT09PT09PT09PT0rKioqKVxuIiwiaW5jbHVkZSBDb250YWluZXJzTGFiZWxzXG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcbiAgbW9kdWxlIFNldCA9IFNldC5NYWtlIChTdHJpbmcpXG5lbmRcblxuKCogbW9kdWxlIFlvanNvbiA9IHN0cnVjdFxuICAgICBpbmNsdWRlIEpzb254dC5Zb2pzb25cbiAgIGVuZCAqKVxuXG5tb2R1bGUgRW5jb2RpbmdzID0gc3RydWN0XG4gIGxldCB0b19qc3RyIHQgPSBKdi5yZXByIHQgfD4gQnJyLkpzb24uZW5jb2RlXG4gIGxldCB0b19qdiB0ID0gdG9fanN0ciB0IHw+IEp2Lm9mX2pzdHJcblxuICBsZXQgb2ZfanN0ciBqc3RyID1cbiAgICBtYXRjaCBCcnIuSnNvbi5kZWNvZGUganN0ciB3aXRoXG4gICAgfCBPayB2IC0+IE9rIChPYmoubWFnaWMgdilcbiAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICBCcnIuQ29uc29sZS5lcnJvciBbIGVyciBdO1xuICAgICAgICBFcnJvciAoYE1zZyBcIkZhaWxlZCB0byB1bm1hcnNoYWwgZGF0YVwiKVxuXG4gIGxldCBvZl9qdiBqdiA9IEp2LnRvX2pzdHIganYgfD4gb2ZfanN0clxuZW5kXG5cbmxldCByYW5kb21fc3RhdGUgPSBSYW5kb20uZ2V0X3N0YXRlICgpXG5sZXQgbmV3X3V1aWRfdjQgKCkgPSBVdWlkbS52NF9nZW4gcmFuZG9tX3N0YXRlICgpXG5cbigqKiBbdGVlIGYgeF0gYXBwbGllcyBbZl0gdG8gW3hdIGFuZCByZXR1cm5zIFt4XSAqKVxubGV0IHRlZSBmIHggPVxuICBsZXQgKCkgPSBmIHggaW5cbiAgeFxuIiwibGV0IHZlcnNpb24gPSBcIjIuMi4yXCJcblxuZXhjZXB0aW9uIEpzb25fZXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBqc29uX2Vycm9yIHMgPSByYWlzZSAoSnNvbl9lcnJvciBzKVxuXG5leGNlcHRpb24gRW5kX29mX2FycmF5XG5leGNlcHRpb24gRW5kX29mX29iamVjdFxuZXhjZXB0aW9uIEVuZF9vZl90dXBsZVxuZXhjZXB0aW9uIEVuZF9vZl9pbnB1dFxuXG50eXBlIGxleGVyX3N0YXRlID0ge1xuICBidWYgOiBCdWZmZXIudDsgKCogQnVmZmVyIHVzZWQgdG8gYWNjdW11bGF0ZSBzdWJzdHJpbmdzICopXG4gIG11dGFibGUgbG51bSA6IGludDsgKCogQ3VycmVudCBsaW5lIG51bWJlciAoc3RhcnRpbmcgZnJvbSAxKSAqKVxuICBtdXRhYmxlIGJvbCA6IGludDtcbiAgICAgICgqIEFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGN1cnJlbnQgbGluZVxuICAgICAgICAgKHN0YXJ0aW5nIGZyb20gMCkgKilcbiAgbXV0YWJsZSBmbmFtZSA6IHN0cmluZyBvcHRpb247ICgqIE5hbWUgZGVzY3JpYmluZyB0aGUgaW5wdXQgZmlsZSAqKVxufVxuXG5tb2R1bGUgTGV4ZXJfc3RhdGUgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gbGV4ZXJfc3RhdGUgPSB7XG4gICAgYnVmIDogQnVmZmVyLnQ7XG4gICAgbXV0YWJsZSBsbnVtIDogaW50O1xuICAgIG11dGFibGUgYm9sIDogaW50O1xuICAgIG11dGFibGUgZm5hbWUgOiBzdHJpbmcgb3B0aW9uO1xuICB9XG5lbmRcblxubGV0IGluaXRfbGV4ZXIgP2J1ZiA/Zm5hbWUgPyhsbnVtID0gMSkgKCkgPVxuICBsZXQgYnVmID0gbWF0Y2ggYnVmIHdpdGggTm9uZSAtPiBCdWZmZXIuY3JlYXRlIDI1NiB8IFNvbWUgYnVmIC0+IGJ1ZiBpblxuICB7IGJ1ZjsgbG51bTsgYm9sID0gMDsgZm5hbWUgfVxuIiwib3BlbiBTdGRMYWJlbHNcbm9wZW4gTW9yZUxhYmVsc1xub3BlbiEgWW9qc29uXG5cbnR5cGUgdCA9IFlvanNvbi5TYWZlLnRcblxubGV0IHlvanNvbl9vZl91bml0ICgpIDogdCA9IGBOdWxsXG5sZXQgeW9qc29uX29mX2Jvb2wgYiA6IHQgPSBgQm9vbCBiXG5sZXQgeW9qc29uX29mX3N0cmluZyBzdHIgOiB0ID0gYFN0cmluZyBzdHJcbmxldCB5b2pzb25fb2ZfYnl0ZXMgYnl0ZXMgOiB0ID0gYFN0cmluZyAoQnl0ZXMudG9fc3RyaW5nIGJ5dGVzKVxubGV0IHlvanNvbl9vZl9jaGFyIGMgOiB0ID0gYFN0cmluZyAoU3RyaW5nLm1ha2UgMSBjKVxubGV0IHlvanNvbl9vZl9pbnQgbiA6IHQgPSBgSW50IG5cbmxldCB5b2pzb25fb2ZfZmxvYXQgbiA6IHQgPSBgRmxvYXQgblxubGV0IHlvanNvbl9vZl9pbnQzMiAobiA6IEludDMyLnQpIDogdCA9IGBJbnRsaXQgKEludDMyLnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9pbnQ2NCAobiA6IEludDY0LnQpIDogdCA9IGBJbnRsaXQgKEludDY0LnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9uYXRpdmVpbnQgbiA6IHQgPSBgSW50bGl0IChOYXRpdmVpbnQudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX3JlZiB5b2pzb25fb2ZfX2EgcmYgPSB5b2pzb25fb2ZfX2EgIXJmXG5sZXQgeW9qc29uX29mX2xhenlfdCB5b2pzb25fb2ZfX2EgbHYgPSB5b2pzb25fb2ZfX2EgKExhenkuZm9yY2UgbHYpXG5cbmxldCB5b2pzb25fb2Zfb3B0aW9uIHlvanNvbl9vZl9fYSA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHlvanNvbl9vZl9fYSB4XG4gIHwgTm9uZSAtPiBgTnVsbFxuOztcblxubGV0IHlvanNvbl9vZl9wYWlyIHlvanNvbl9vZl9fYSB5b2pzb25fb2ZfX2IgKGEsIGIpID1cbiAgYExpc3QgWyB5b2pzb25fb2ZfX2EgYTsgeW9qc29uX29mX19iIGIgXVxuOztcblxubGV0IHlvanNvbl9vZl90cmlwbGUgeW9qc29uX29mX19hIHlvanNvbl9vZl9fYiB5b2pzb25fb2ZfX2MgKGEsIGIsIGMpID1cbiAgYExpc3QgWyB5b2pzb25fb2ZfX2EgYTsgeW9qc29uX29mX19iIGI7IHlvanNvbl9vZl9fYyBjIF1cbjs7XG5cbigqIExpc3QucmV2IChMaXN0LnJldl9tYXAgLi4uKSBpcyB0YWlsIHJlY3Vyc2l2ZSwgdGhlIE9DYW1sIHN0YW5kYXJkXG4gICBsaWJyYXJ5IExpc3QubWFwIGlzIE5PVC4gKilcbmxldCB5b2pzb25fb2ZfbGlzdCB5b2pzb25fb2ZfX2EgbHN0ID0gYExpc3QgKExpc3QucmV2IChMaXN0LnJldl9tYXAgfmY6eW9qc29uX29mX19hIGxzdCkpXG5cbmxldCB5b2pzb25fb2ZfYXJyYXkgeW9qc29uX29mX19hIGFyID1cbiAgbGV0IGxzdF9yZWYgPSByZWYgW10gaW5cbiAgZm9yIGkgPSBBcnJheS5sZW5ndGggYXIgLSAxIGRvd250byAwIGRvXG4gICAgbHN0X3JlZiA6PSB5b2pzb25fb2ZfX2EgYXIuKGkpIDo6ICFsc3RfcmVmXG4gIGRvbmU7XG4gIGBMaXN0ICFsc3RfcmVmXG47O1xuXG5sZXQgeW9qc29uX29mX2hhc2h0YmwgeW9qc29uX29mX2tleSB5b2pzb25fb2ZfdmFsIGh0YmwgPVxuICBsZXQgY29sbCB+a2V5OmsgfmRhdGE6diBhY2MgPSBgTGlzdCBbIHlvanNvbl9vZl9rZXkgazsgeW9qc29uX29mX3ZhbCB2IF0gOjogYWNjIGluXG4gIGBMaXN0IChIYXNodGJsLmZvbGQgaHRibCB+aW5pdDpbXSB+Zjpjb2xsKVxuOztcblxubGV0IHlvanNvbl9vZl9vcGFxdWUgXyA9IGBTdHJpbmcgXCI8b3BhcXVlPlwiXG5sZXQgeW9qc29uX29mX2Z1biBfID0gYFN0cmluZyBcIjxmdW4+XCJcblxuZXhjZXB0aW9uIE9mX3lvanNvbl9lcnJvciBvZiBleG4gKiB0XG5cbmxldCByZWNvcmRfY2hlY2tfZXh0cmFfZmllbGRzID0gcmVmIHRydWVcbmxldCBvZl95b2pzb25fZXJyb3JfZXhuIGV4YyB5b2pzb24gPSByYWlzZSAoT2ZfeW9qc29uX2Vycm9yIChleGMsIHlvanNvbikpXG5sZXQgb2ZfeW9qc29uX2Vycm9yIHdoYXQgeW9qc29uID0gcmFpc2UgKE9mX3lvanNvbl9lcnJvciAoRmFpbHVyZSB3aGF0LCB5b2pzb24pKVxuXG5sZXQgdW5pdF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTnVsbCAtPiAoKVxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwidW5pdF9vZl95b2pzb246IGBOdWxsIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGJvb2xfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEJvb2wgdiAtPiB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJib29sX29mX3lvanNvbjogdHJ1ZS9mYWxzZSBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBzdHJpbmdfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT4gc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJzdHJpbmdfb2ZfeW9qc29uOiBzdHJpbmcgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYnl0ZXNfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT4gQnl0ZXMub2Zfc3RyaW5nIHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYnl0ZXNfb2ZfeW9qc29uOiBzdHJpbmcgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgY2hhcl9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPlxuICAgIGlmIFN0cmluZy5sZW5ndGggc3RyIDw+IDFcbiAgICB0aGVuIG9mX3lvanNvbl9lcnJvciBcImNoYXJfb2ZfeW9qc29uOiBzdHJpbmcgbXVzdCBjb250YWluIG9uZSBjaGFyYWN0ZXIgb25seVwiIHlvanNvbjtcbiAgICBzdHIuWzBdXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJjaGFyX29mX3lvanNvbjogc3RyaW5nIG9mIHNpemUgb25lIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50IHYgLT4gdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBmbG9hdF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgRmxvYXQgdiAtPiB2XG4gIHwgYEludCBpIC0+IGZsb2F0X29mX2ludCBpXG4gIHwgYEludGxpdCBzdHIgLT4gZmxvYXRfb2Zfc3RyaW5nIHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiZmxvYXRfb2ZfeW9qc29uOiBmbG9hdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnQzMl9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBJbnQzMi5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IEludDMyLm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnQzMl9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50NjRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gSW50NjQub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBJbnQ2NC5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50NjRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IG5hdGl2ZWludF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBOYXRpdmVpbnQub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBOYXRpdmVpbnQub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcIm5hdGl2ZWludF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgcmVmX29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID0gcmVmIChhX19vZl95b2pzb24geW9qc29uKVxubGV0IGxhenlfdF9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9IExhenkuZnJvbV92YWwgKGFfX29mX3lvanNvbiB5b2pzb24pXG5cbmxldCBvcHRpb25fb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBOdWxsIC0+IE5vbmVcbiAgfCBlbCAtPiBTb21lIChhX19vZl95b2pzb24gZWwpXG47O1xuXG5sZXQgcGFpcl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIGJfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFsgYV95b2pzb247IGJfeW9qc29uIF0gLT5cbiAgICBsZXQgYSA9IGFfX29mX3lvanNvbiBhX3lvanNvbiBpblxuICAgIGxldCBiID0gYl9fb2ZfeW9qc29uIGJfeW9qc29uIGluXG4gICAgYSwgYlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwicGFpcl9vZl95b2pzb246IGludmFsaWQgZm9ybWF0XCIgeW9qc29uXG47O1xuXG5sZXQgdHJpcGxlX29mX3lvanNvbiBhX19vZl95b2pzb24gYl9fb2ZfeW9qc29uIGNfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFsgYV95b2pzb247IGJfeW9qc29uOyBjX3lvanNvbiBdIC0+XG4gICAgbGV0IGEgPSBhX19vZl95b2pzb24gYV95b2pzb24gaW5cbiAgICBsZXQgYiA9IGJfX29mX3lvanNvbiBiX3lvanNvbiBpblxuICAgIGxldCBjID0gY19fb2ZfeW9qc29uIGNfeW9qc29uIGluXG4gICAgYSwgYiwgY1xuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwidHJpcGxlX29mX3lvanNvbjogaW52YWxpZCBmb3JtYXRcIiB5b2pzb25cbjs7XG5cbmxldCBsaXN0X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBsc3QgLT5cbiAgICBsZXQgcmV2X2xzdCA9IExpc3QucmV2X21hcCBsc3QgfmY6YV9fb2ZfeW9qc29uIGluXG4gICAgTGlzdC5yZXYgcmV2X2xzdFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwibGlzdF9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYXJyYXlfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFtdIC0+IFt8fF1cbiAgfCBgTGlzdCAoaCA6OiB0KSAtPlxuICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCB0ICsgMSBpblxuICAgIGxldCByZXMgPSBBcnJheS5tYWtlIGxlbiAoYV9fb2ZfeW9qc29uIGgpIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiByZXNcbiAgICAgIHwgaCA6OiB0IC0+XG4gICAgICAgIHJlcy4oaSkgPC0gYV9fb2ZfeW9qc29uIGg7XG4gICAgICAgIGxvb3AgKGkgKyAxKSB0XG4gICAgaW5cbiAgICBsb29wIDEgdFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYXJyYXlfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGhhc2h0Ymxfb2ZfeW9qc29uIGtleV9vZl95b2pzb24gdmFsX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IGxzdCAtPlxuICAgIGxldCBodGJsID0gSGFzaHRibC5jcmVhdGUgMCBpblxuICAgIGxldCBhY3QgPSBmdW5jdGlvblxuICAgICAgfCBgTGlzdCBbIGtfeW9qc29uOyB2X3lvanNvbiBdIC0+XG4gICAgICAgIEhhc2h0YmwuYWRkIGh0YmwgfmtleTooa2V5X29mX3lvanNvbiBrX3lvanNvbikgfmRhdGE6KHZhbF9vZl95b2pzb24gdl95b2pzb24pXG4gICAgICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaGFzaHRibF9vZl95b2pzb246IHR1cGxlIGxpc3QgbmVlZGVkXCIgeW9qc29uXG4gICAgaW5cbiAgICBMaXN0Lml0ZXIgbHN0IH5mOmFjdDtcbiAgICBodGJsXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJoYXNodGJsX29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBvcGFxdWVfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciBcIm9wYXF1ZV9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IG9wYXF1ZSB2YWx1ZXNcIiB5b2pzb25cbjs7XG5cbmxldCBmdW5fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciBcImZ1bl9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IGZ1bmN0aW9uIHZhbHVlc1wiIHlvanNvblxuOztcblxubW9kdWxlIFByaW1pdGl2ZXMgPSBzdHJ1Y3RcbiAgbGV0IHlvanNvbl9vZl9hcnJheSA9IHlvanNvbl9vZl9hcnJheVxuICBsZXQgYXJyYXlfb2ZfeW9qc29uID0gYXJyYXlfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfYm9vbCA9IHlvanNvbl9vZl9ib29sXG4gIGxldCBib29sX29mX3lvanNvbiA9IGJvb2xfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfY2hhciA9IHlvanNvbl9vZl9jaGFyXG4gIGxldCBjaGFyX29mX3lvanNvbiA9IGNoYXJfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfZmxvYXQgPSB5b2pzb25fb2ZfZmxvYXRcbiAgbGV0IGZsb2F0X29mX3lvanNvbiA9IGZsb2F0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludCA9IHlvanNvbl9vZl9pbnRcbiAgbGV0IGludF9vZl95b2pzb24gPSBpbnRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50MzIgPSB5b2pzb25fb2ZfaW50MzJcbiAgbGV0IGludDMyX29mX3lvanNvbiA9IGludDMyX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludDY0ID0geW9qc29uX29mX2ludDY0XG4gIGxldCBpbnQ2NF9vZl95b2pzb24gPSBpbnQ2NF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9saXN0ID0geW9qc29uX29mX2xpc3RcbiAgbGV0IGxpc3Rfb2ZfeW9qc29uID0gbGlzdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9uYXRpdmVpbnQgPSB5b2pzb25fb2ZfbmF0aXZlaW50XG4gIGxldCBuYXRpdmVpbnRfb2ZfeW9qc29uID0gbmF0aXZlaW50X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX29wdGlvbiA9IHlvanNvbl9vZl9vcHRpb25cbiAgbGV0IG9wdGlvbl9vZl95b2pzb24gPSBvcHRpb25fb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfcmVmID0geW9qc29uX29mX3JlZlxuICBsZXQgcmVmX29mX3lvanNvbiA9IHJlZl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9zdHJpbmcgPSB5b2pzb25fb2Zfc3RyaW5nXG4gIGxldCBzdHJpbmdfb2ZfeW9qc29uID0gc3RyaW5nX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2J5dGVzID0geW9qc29uX29mX2J5dGVzXG4gIGxldCBieXRlc19vZl95b2pzb24gPSBieXRlc19vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl91bml0ID0geW9qc29uX29mX3VuaXRcbiAgbGV0IHVuaXRfb2ZfeW9qc29uID0gdW5pdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9sYXp5X3QgPSB5b2pzb25fb2ZfbGF6eV90XG4gIGxldCBsYXp5X3Rfb2ZfeW9qc29uID0gbGF6eV90X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2hhc2h0YmwgPSB5b2pzb25fb2ZfaGFzaHRibFxuICBsZXQgaGFzaHRibF9vZl95b2pzb24gPSBoYXNodGJsX29mX3lvanNvblxuZW5kXG4iLCJtb2R1bGUgWW9qc29uX2NvbnZfZXJyb3IgPSBZb2pzb25fY29udl9lcnJvclxubW9kdWxlIFlvanNvbl9jb252ID0gWW9qc29uX2NvbnZcbm1vZHVsZSBZb2pzb25hYmxlID0gWW9qc29uYWJsZV9pbnRmXG5tb2R1bGUgWW9qc29uID0gWW9qc29uXG5cbm1vZHVsZSBPcHRpb24gPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2Egb3B0aW9uID1cbiAgICB8IE5vbmVcbiAgICB8IFNvbWUgb2YgJ2FcbmVuZFxuXG5leHRlcm5hbCBpZ25vcmUgOiBfIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuZXh0ZXJuYWwgcG9seV9lcXVhbCA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5cbmxldCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IGZ1biB4IC0+ICF4XG4iLCJtb2R1bGUgQXBpID0gSmVsbHlmaW5fYXBpXG5cbnR5cGUgY3JlZGVudGlhbHMgPSB7IGJhc2VfdXJsIDogc3RyaW5nOyB1c2VybmFtZSA6IHN0cmluZzsgcGFzc3dvcmQgOiBzdHJpbmcgfVxuXG50eXBlIGNvbm5leGlvbiA9IHtcbiAgYmFzZV91cmwgOiBzdHJpbmc7XG4gIGF1dGhfcmVzcG9uc2UgOiBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUucmVzcG9uc2U7XG59XG5cbmxldCBnZXRfdG9rZW4gdCA9IHQuYXV0aF9yZXNwb25zZS5BcGkuQXV0aGVudGljYXRlX2J5X25hbWUuYWNjZXNzX3Rva2VuXG5cbmxldCBjb25uZWN0IGNyZWRlbnRpYWxzID1cbiAgbGV0IG1vZHVsZSBBdXRoID0gQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCB7IGJhc2VfdXJsOyB1c2VybmFtZTsgcGFzc3dvcmQgfSA9IGNyZWRlbnRpYWxzIGluXG4gIGxldCBhdXRoID0geyBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUudXNlcm5hbWU7IHB3ID0gcGFzc3dvcmQgfSBpblxuICBsZXQrIGF1dGhfcmVzcG9uc2UgPSBBcGkucmVxdWVzdCB+YmFzZV91cmwgKG1vZHVsZSBBdXRoKSBhdXRoICgpIGluXG4gIHsgYmFzZV91cmw7IGF1dGhfcmVzcG9uc2UgfVxuXG5sZXQgcXVlcnkgdCA9XG4gIGxldCB0b2tlbiA9IGdldF90b2tlbiB0IGluXG4gIGxldCBiYXNlX3VybCA9IHQuYmFzZV91cmwgaW5cbiAgSmVsbHlmaW5fYXBpLnJlcXVlc3QgfmJhc2VfdXJsIH50b2tlblxuIiwib3BlbiBTdGRcbm9wZW4gQnJyXG5cbnR5cGUgdGFnID0gQmxvY2sgb2YgaW50IHwgSW50IG9mIGludFxuXG5sZXQgdGFnX29mIHYgPVxuICAoKiB3b3cgd293IHdvdy4gaXMgdGhhdCBva2F5eWlzaCA/KilcbiAgbGV0IG9iaiA9IE9iai5yZXByIHYgaW5cbiAgaWYgT2JqLmlzX2Jsb2NrIG9iaiB0aGVuIEJsb2NrIChPYmoudGFnIG9iaikgZWxzZSBJbnQgKE9iai5tYWdpYyBvYmopXG5cbm1vZHVsZSB0eXBlIFF1ZXJpZXMgPSBzaWdcbiAgdHlwZSAnYSBxdWVyeVxuICB0eXBlICdhIGV2ZW50XG5lbmRcblxubW9kdWxlIE1ha2UgKFEgOiBRdWVyaWVzKSA9IHN0cnVjdFxuICB0eXBlIGVycm9yID0gWyBgSnYgb2YgSnYuRXJyb3IudCB8IGBNc2cgb2Ygc3RyaW5nIF1cbiAgdHlwZSAnYSBxdWVyeSA9ICdhIFEucXVlcnlcbiAgdHlwZSAnYSBldmVudCA9ICdhIFEuZXZlbnRcbiAgdHlwZSAnYSB3aXRoX3V1aWQgPSB7IHV1aWQgOiBzdHJpbmc7IGRhdGEgOiAnYSB9XG4gIHR5cGUgJ2EgbWVzc2FnZSA9IEFuc3dlciBvZiAnYSB3aXRoX3V1aWQgfCBFdmVudCBvZiAoJ2EgZXZlbnQgKiAnYSlcbiAgdHlwZSBsaXN0ZW5lciA9IHN0cmluZ1xuXG4gICgqIHRvZG86Y2hlY2sgdGhhdCB0aGUgd29ya2VyIGFuZCB0aGUgY2xpZW50IHNoYXJlIHRoZSBzYW1lIGFwaT8gKilcblxuICBtb2R1bGUgU3RhcnRfY2xpZW50IChQIDogc2lnXG4gICAgdmFsIHVybCA6IHN0cmluZ1xuICBlbmQpID1cbiAgc3RydWN0XG4gICAgbGV0IGZ1dHVyZXMgOiAoc3RyaW5nLCBKdi50IC0+IHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgbGV0IGxpc3RlbmVycyA6ICh0YWcsIEp2LnQgLT4gdW5pdCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNjRcbiAgICBsZXQgd29ya2VyID0gQnJyX3dlYndvcmtlcnMuV29ya2VyLmNyZWF0ZSBAQCBKc3RyLm9mX3N0cmluZyBQLnVybFxuXG4gICAgbGV0IHF1ZXJ5ICh0eXBlIGEpIChxdWVyeSA6IGEgcXVlcnkpIDogKGEsIGVycm9yKSBGdXQucmVzdWx0ID1cbiAgICAgIGxldCB1dWlkID0gbmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nIGluXG4gICAgICBsZXQgZnV0LCBzZXQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgICBsZXQgc2V0IGp2ID0gc2V0IEBAIEVuY29kaW5ncy5vZl9qdiBqdiBpblxuICAgICAgbGV0IHF1ZXJ5ID0geyB1dWlkOyBkYXRhID0gcXVlcnkgfSB8PiBFbmNvZGluZ3MudG9fanN0ciBpblxuICAgICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLnBvc3Qgd29ya2VyIChKdi5vZl9qc3RyIHF1ZXJ5KTtcbiAgICAgIEhhc2h0YmwuYWRkIGZ1dHVyZXMgdXVpZCBzZXQ7XG4gICAgICBmdXRcblxuICAgIGxldCBsaXN0ZW4gKHR5cGUgYSkgKGV2ZW50IDogYSBldmVudCkgfihmIDogYSAtPiB1bml0KSA6IGxpc3RlbmVyID1cbiAgICAgIGxldCB1dWlkID0gbmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nIGluXG4gICAgICBsZXQgc2V0IGp2ID0gZiAoT2JqLm1hZ2ljIGp2KSBpblxuICAgICAgSGFzaHRibC5hZGQgbGlzdGVuZXJzICh0YWdfb2YgZXZlbnQpIHNldDtcbiAgICAgIHV1aWRcblxuICAgIGxldCBvbl9tZXNzYWdlIGV2ID1cbiAgICAgIGxldCBtZXNzYWdlID0gRXYuYXNfdHlwZSBldiBpblxuICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICBpZ25vcmUgKCogVE9ETzogaGFuZGxlciBlcnJvcnMgKilcbiAgICAgIEBAXG4gICAgICBsZXQrIG1lc3NhZ2UgPVxuICAgICAgICBCcnJfaW8uTWVzc2FnZS5Fdi5kYXRhIG1lc3NhZ2UgfD4gSnYudG9fanN0ciB8PiBFbmNvZGluZ3Mub2ZfanN0clxuICAgICAgaW5cbiAgICAgIG1hdGNoIG1lc3NhZ2Ugd2l0aFxuICAgICAgfCBFdmVudCAoZSwgdikgLT5cbiAgICAgICAgICBIYXNodGJsLmZpbmRfYWxsIGxpc3RlbmVycyAodGFnX29mIGUpIHw+IExpc3QuaXRlciB+ZjooZnVuIGYgLT4gZiB2KVxuICAgICAgfCBBbnN3ZXIgeyB1dWlkOyBkYXRhIH0gLT5cbiAgICAgICAgICBsZXQgZiA9IEhhc2h0YmwuZmluZCBmdXR1cmVzIHV1aWQgaW5cbiAgICAgICAgICBIYXNodGJsLnJlbW92ZSBmdXR1cmVzIHV1aWQ7XG4gICAgICAgICAgZiBkYXRhXG5cbiAgICBsZXQgXyA9XG4gICAgICBFdi5saXN0ZW4gQnJyX2lvLk1lc3NhZ2UuRXYubWVzc2FnZSBvbl9tZXNzYWdlXG4gICAgICBAQCBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuYXNfdGFyZ2V0IHdvcmtlclxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBXb3JrZXJfaW1wbCA9IGZ1bmN0b3IgKCkgLT4gc2lnXG4gICAgdmFsIG9uX3F1ZXJ5IDogJ2EgcXVlcnkgLT4gKCdhLCBlcnJvcikgRnV0LnJlc3VsdFxuICBlbmRcblxuICBsZXQgZGlzcGF0Y2hfZXZlbnQgKHR5cGUgYSkgKGUgOiBhIGV2ZW50KSAodiA6IGEpID1cbiAgICAoKiBsZXQgZGF0YSA9IEVuY29kaW5ncy5tYXJzaGFsX3RvX2pzdHIgfD4gSnYub2ZfanN0ciBpbiAqKVxuICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5HLnBvc3QgKEVuY29kaW5ncy50b19qc3RyIChFdmVudCAoZSwgdikpIHw+IEp2Lm9mX2pzdHIpXG5cbiAgKCoqIEV4ZWN1dGUgVydzIGJvZHkgYW5kIGNvbmZpZ3VyZSBtZXNzYWdpbmcgKilcbiAgbW9kdWxlIE1ha2Vfd29ya2VyIChXIDogV29ya2VyX2ltcGwpID0gc3RydWN0XG4gICAgb3BlbiBCcnJcbiAgICBtb2R1bGUgVyA9IFcgKClcblxuICAgIGxldCBvbl9tZXNzYWdlIGV2ID1cbiAgICAgIGxldCBtZXNzYWdlID0gRXYuYXNfdHlwZSBldiBpblxuICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICBpZ25vcmUgKCogVE9ETzogaGFuZGxlciBlcnJvcnMgKilcbiAgICAgIEBAXG4gICAgICBsZXQrICh7IHV1aWQ7IGRhdGEgfSA6ICdhIHF1ZXJ5IHdpdGhfdXVpZCkgPVxuICAgICAgICBCcnJfaW8uTWVzc2FnZS5Fdi5kYXRhIG1lc3NhZ2UgfD4gSnYudG9fanN0ciB8PiBFbmNvZGluZ3Mub2ZfanN0clxuICAgICAgaW5cbiAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICBsZXQrIHJlc3VsdCA9IFcub25fcXVlcnkgZGF0YSBpblxuICAgICAgbGV0IGRhdGEgPSBFbmNvZGluZ3MudG9fanN0ciByZXN1bHQgfD4gSnYub2ZfanN0ciBpblxuICAgICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLkcucG9zdFxuICAgICAgICAoRW5jb2RpbmdzLnRvX2pzdHIgKEFuc3dlciB7IHV1aWQ7IGRhdGEgfSkgfD4gSnYub2ZfanN0cilcblxuICAgIGxldCBfID0gRXYubGlzdGVuIEJycl9pby5NZXNzYWdlLkV2Lm1lc3NhZ2Ugb25fbWVzc2FnZSBHLnRhcmdldFxuICBlbmRcbmVuZFxuIiwib3BlbiBTdGRcblxuKCoqIFNvbWUgc29ydHMgcmVxdWlyZSBhIGN1c3RvbSBvcmRlcmluZyB3aGljaCBpcyBkb25lIHVzaW5nIGEgdGFibGUgb2YgaW5kZXhlcy4gRm9yIGV4YW1wbGUsIHRvIGdldCBhIHJhbmRvbSBzb3J0IHdlIHNpbXBsZSBzaHVmZmxlIGFuIGFycmF5IHdoaWNoIHNpemUgaXMgdGhlIG9uZSBvZiB0aGUgcmVzdWx0LiAqKVxubW9kdWxlIE9yZGVyID0gc3RydWN0XG4gIHR5cGUgdCA9IEluaXRpYWwgfCBBc2MgfCBEZXNjIHwgQ3VzdG9tIG9mIGludCBhcnJheVxuXG4gIGxldCByYW5kb20gfnNpemUgPVxuICAgIGxldCB0YmwgPSBBcnJheS5pbml0IHNpemUgfmY6RnVuLmlkIGluXG4gICAgbGV0ICgpID0gQXJyYXkuc2h1ZmZsZSB0YmwgaW5cbiAgICBDdXN0b20gdGJsXG5cbiAgbGV0IG9mX3N0cmluZyB+c2l6ZSA9IGZ1bmN0aW9uXG4gICAgfCBcInJhbmRvbVwiIC0+IHJhbmRvbSB+c2l6ZVxuICAgIHwgXCJhc2NcIiAtPiBBc2NcbiAgICB8IFwiZGVzY1wiIC0+IERlc2NcbiAgICB8IF8gLT4gSW5pdGlhbFxuXG4gIGxldCBhcHBseSB0IH5zaXplIGkgPVxuICAgIG1hdGNoIHQgd2l0aFxuICAgIHwgSW5pdGlhbCB8IEFzYyAtPiBpXG4gICAgfCBEZXNjIC0+IHNpemUgLSAxIC0gaVxuICAgIHwgQ3VzdG9tIGEgLT4gKCogdG9kbyBjaGVjayBib3VuZHMgKikgYS4oaSlcbmVuZFxuXG5tb2R1bGUgU29ydCA9IHN0cnVjdFxuICB0eXBlIHQgPSBEYXRlX2FkZGVkIHwgTmFtZVxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJkYXRlX2FkZGVkXCIgLT4gRGF0ZV9hZGRlZFxuICAgIHwgXCJuYW1lXCIgLT4gTmFtZVxuICAgIHwgXyAtPiBEYXRlX2FkZGVkXG5lbmRcblxudHlwZSAnYSBzZWxlY3Rpb24gPSBBbGwgfCBPbmx5IG9mICdhIGxpc3RcbnR5cGUga2luZCA9IEF1ZGlvXG50eXBlIGZpbHRlciA9IFNlYXJjaCBvZiBzdHJpbmdcblxudHlwZSByZXEgPSB7XG4gIGtpbmQgOiBraW5kO1xuICBzcmNfdmlld3MgOiBzdHJpbmcgc2VsZWN0aW9uO1xuICBzb3J0IDogU29ydC50O1xuICBmaWx0ZXJzIDogZmlsdGVyIGxpc3Q7XG59XG5cbnR5cGUgdCA9IHsgcmVxdWVzdCA6IHJlcTsgc3RhcnRfb2Zmc2V0IDogaW50OyBpdGVtX2NvdW50IDogaW50IH1cbnR5cGUgcmFuZ2VkID0geyB2aWV3IDogdDsgZmlyc3QgOiBpbnQ7IGxhc3QgOiBpbnQ7IG9yZGVyIDogT3JkZXIudCB9XG5cbmxldCBpdGVtX2NvdW50IHQgPSB0Lml0ZW1fY291bnQgLSB0LnN0YXJ0X29mZnNldFxuXG5sZXQgcmVxIGtpbmQgPyhzcmNfdmlld3MgPSBBbGwpID8oc29ydCA9IFNvcnQuRGF0ZV9hZGRlZCkgPyhmaWx0ZXJzID0gW10pICgpID1cbiAgeyBraW5kOyBzcmNfdmlld3M7IHNvcnQ7IGZpbHRlcnMgfVxuXG5sZXQgaGFzaCByZXEgPSBIYXNodGJsLmhhc2ggKHJlcS5zcmNfdmlld3MsIHJlcS5maWx0ZXJzKVxuIiwib3BlbiEgU3RkXG5tb2R1bGUgRFMgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIEFwaSA9IERTLkFwaVxuXG50eXBlIHNlcnZlciA9IHN0cmluZyAqIERTLmNvbm5leGlvblxuXG5tb2R1bGUgUXVlcmllcyA9IHN0cnVjdFxuICB0eXBlICdhIHF1ZXJ5ID1cbiAgICB8IFNldF9zZXNzaW9uX3V1aWQgOiBzdHJpbmcgLT4gdW5pdCBxdWVyeVxuICAgIHwgQWRkX3NlcnZlcnMgOiBzZXJ2ZXIgbGlzdCAtPiB1bml0IHF1ZXJ5XG4gICAgfCBHZXRfYWxsIDogdW5pdCAtPiBBcGkuSXRlbS50IGxpc3QgcXVlcnlcbiAgICB8IEdldF9saWJyYXJpZXMgOiB1bml0IC0+IFN0b3Jlcy5JdGVtcy50IGxpc3QgcXVlcnlcbiAgICB8IEdldF9zZXJ2ZXJfbGlicmFyaWVzIDogc3RyaW5nIC0+IFN0b3Jlcy5JdGVtcy50IGxpc3QgcXVlcnlcbiAgICB8IENyZWF0ZV92aWV3IDogVmlldy5yZXEgLT4gVmlldy50IHF1ZXJ5XG4gICAgfCBHZXQgOlxuICAgICAgICBWaWV3LnQgKiBWaWV3Lk9yZGVyLnQgKiBpbnQgYXJyYXlcbiAgICAgICAgLT4gU3RvcmVzLkl0ZW1zLnQgb3B0aW9uIGFycmF5IHF1ZXJ5XG5cbiAgdHlwZSAnYSBldmVudCA9IFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSA6IChzdHJpbmcgKiBTeW5jLnJlcG9ydCkgZXZlbnRcbmVuZFxuXG5pbmNsdWRlIFdvcmtlcl9hcGkuTWFrZSAoUXVlcmllcylcbiIsImluY2x1ZGUgU3RkXG5tb2R1bGUgRFMgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIEVsd2QgPSBCcnJfbHdkLkVsd2Rcbm1vZHVsZSBVaV91dGlscyA9IEJycl9sd2RfdWkuVXRpbHNcbm1vZHVsZSBWaWV3ID0gRGIuVmlld1xubW9kdWxlIEF0dHJzID0gQnJyX2x3ZF91aS5BdHRyc1xuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG4gIG1vZHVsZSBNTWFwID0gQ0NNdWx0aU1hcC5NYWtlIChTdHJpbmcpXG4gIG1vZHVsZSBJdGVtc19NdWx0aU1hcCA9IE1NYXAgKERiLlN0b3Jlcy5JdGVtcylcbmVuZFxuXG5tb2R1bGUgVXRpbHMgPSBzdHJ1Y3RcbiAgbGV0IHdpdGhfdGltaW5nID8obmFtZSA9IFwiXCIpIGYgPVxuICAgIGxldCB0ID0gQnJyLlBlcmZvcm1hbmNlLm5vd19tcyBCcnIuRy5wZXJmb3JtYW5jZSBpblxuICAgIGxldCByZXMgPSBmICgpIGluXG4gICAgQnJyLkNvbnNvbGUubG9nXG4gICAgICBbIG5hbWU7IFwidG9va1wiOyBCcnIuUGVyZm9ybWFuY2Uubm93X21zIEJyci5HLnBlcmZvcm1hbmNlIC0uIHQgXTtcbiAgICByZXNcbmVuZFxuIiwib3BlbiEgSW1wb3J0XG5cbnR5cGUgbGF5b3V0ID0gTWFpbiB8IEtpb3NrXG5cbmxldCBhY3RpdmVfbGF5b3V0ID0gTHdkLnZhciBNYWluXG4iLCJvcGVuIEltcG9ydFxuXG50eXBlIG9yZGVyZWQgPSB7XG4gIHJlcXVlc3QgOiBWaWV3LnJlcSBMd2QudDtcbiAgaXRlbV9jb3VudCA6IGludCBMd2QudDtcbiAgc3RhcnRfb2Zmc2V0IDogaW50IEx3ZC50O1xuICBvcmRlciA6IFZpZXcuT3JkZXIudCBMd2QudDtcbn1cblxubGV0IHRvX3ZpZXcgdmlldyA9XG4gIFVpX3V0aWxzLm1hcDMgdmlldy5yZXF1ZXN0IHZpZXcuc3RhcnRfb2Zmc2V0IHZpZXcuaXRlbV9jb3VudFxuICAgIH5mOihmdW4gcmVxdWVzdCBzdGFydF9vZmZzZXQgaXRlbV9jb3VudCAtPlxuICAgICAgeyBWaWV3LnJlcXVlc3Q7IHN0YXJ0X29mZnNldDsgaXRlbV9jb3VudCB9KVxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyX2x3ZF91aVxuXG5tb2R1bGUgVHdvX3N0YXRlX2J1dHRvbiA9IHN0cnVjdFxuICBsZXQgYmFzZSA9IEF0dHJzLmNsYXNzZXMgWyBcImJ1dHRvblwiIF1cblxuICBsZXQgYXQgPSBmdW5jdGlvblxuICAgIHwgQnV0dG9uLk9uIC0+IEF0dHJzLmNsYXNzZXMgWyBcIm9uXCIgXVxuICAgIHwgT2ZmIC0+IEF0dHJzLmNsYXNzZXMgWyBcIm9mZlwiIF1cblxuICBsZXQgbWFrZSB+b25fY2xpY2sgPVxuICAgIGxldCBvbl9jbGljayA9IEJ1dHRvbi5oYW5kbGVyIEJyci5Fdi5jbGljayBvbl9jbGljayBpblxuICAgIEJ1dHRvbi50d29fc3RhdGUgfmJhc2UgfmF0IH5ldjpbIGBQIG9uX2NsaWNrIF1cbmVuZFxuXG5vcGVuIEJycmVyLkJyclxub3BlbiEgQnJyX2x3ZFxuXG5tb2R1bGUgRHJhZ2dhYmxlX3RhYmxlID0gc3RydWN0XG4gIG1vZHVsZSB0eXBlIFJvdyA9IHNpZ1xuICAgIHR5cGUgdFxuXG4gICAgdmFsIHJlbmRlciA6IHQgLT4gRWwudCBsaXN0XG4gIGVuZFxuXG4gICgqKiBDb2x1bW5zIGRlY2xhcmF0aW9uICopXG4gIG1vZHVsZSBDb2x1bW5zID0gc3RydWN0XG4gICAgdHlwZSBjb2x1bW4gPSB7IG5hbWUgOiBzdHJpbmc7IGNzc19zaXplIDogc3RyaW5nIH1cbiAgICB0eXBlIHQgPSBjb2x1bW4gYXJyYXlcblxuICAgIGxldCBjb2x1bW4gbmFtZSBjc3Nfc2l6ZSA9IHsgbmFtZTsgY3NzX3NpemUgfVxuXG4gICAgbGV0IHRvX3N0eWxlIHQgPVxuICAgICAgQXJyYXkudG9fc3RyaW5nIH5zZXA6XCIgXCIgKGZ1biB7IGNzc19zaXplOyBfIH0gLT4gY3NzX3NpemUpIHRcblxuICAgIGxldCB0b19oZWFkZXIgdCA9XG4gICAgICBsZXQgY2VsbHMgPVxuICAgICAgICBBcnJheS5mb2xkX3JpZ2h0IHQgfmluaXQ6W10gfmY6KGZ1biB7IG5hbWU7IF8gfSBhY2MgLT5cbiAgICAgICAgICAgIEVsLmRpdiBbIEVsLnR4dCcgbmFtZSBdIDo6IGFjYylcbiAgICAgIGluXG4gICAgICBFbC5kaXYgY2VsbHNcblxuICAgIGxldCBzZXQgZWx0IHQgPVxuICAgICAgbGV0IHZhbHVlID0gSnN0ci52IEBAIHRvX3N0eWxlIHQgaW5cbiAgICAgIEVsLnNldF9pbmxpbmVfc3R5bGUgRWwuU3R5bGUuZ3JpZF90ZW1wbGF0ZV9jb2x1bW5zIHZhbHVlIGVsdFxuICBlbmRcblxuICBsZXQgZ3JpZCA9IEF0dHJzLmNsYXNzZXMgWyBcImRyYWdnYWJsZS10YWJsZVwiIF1cblxuICBsZXQgcmVuZGVyX3JvdyAodHlwZSB0KSAobW9kdWxlIFJvdyA6IFJvdyB3aXRoIHR5cGUgdCA9IHQpIH5zaGFyZWRfZHJhZ19kYXRhXG4gICAgICB+biAodF9yb3cgOiB0IEx3ZF90YWJsZS5yb3cpIHJvdyA9XG4gICAgbGV0IGFkZF9oaW50IH50b3AgZWwgPVxuICAgICAgbGV0IGMgPSBpZiB0b3AgdGhlbiBcImhvdmVyLXRvcFwiIGVsc2UgXCJob3Zlci1ib3R0b21cIiBpblxuICAgICAgRWwuc2V0X2NsYXNzIChKc3RyLnYgYykgdHJ1ZSBlbFxuICAgIGluXG4gICAgbGV0IHJlbW92ZV9oaW50cyBlbCA9XG4gICAgICBMaXN0Lml0ZXIgWyBcImhvdmVyLXRvcFwiOyBcImhvdmVyLWJvdHRvbVwiIF0gfmY6KGZ1biBjIC0+XG4gICAgICAgICAgRWwuc2V0X2NsYXNzIChKc3RyLnYgYykgZmFsc2UgZWwpXG4gICAgaW5cbiAgICBsZXQgaXNfb25fdG9wIGUgPVxuICAgICAgbGV0IG1vdXNlX2V2ID0gRXYuRHJhZy5hc19tb3VzZSBAQCBFdi5hc190eXBlIGUgaW5cbiAgICAgIGxldCBvZmZzZXRfeSA9IEV2Lk1vdXNlLm9mZnNldF95IG1vdXNlX2V2IGluXG4gICAgICBsZXQgdGFyZ2V0ID0gRXYuY3VycmVudF90YXJnZXQgZSB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICAgIGxldCBzaXplX2ggPSBFbC5pbm5lcl9oIHRhcmdldCBpblxuICAgICAgb2Zmc2V0X3kgPC4gc2l6ZV9oIC8uIDIuXG4gICAgaW5cbiAgICBsZXQgZ2V0X2V2X3RhcmdldCBlID0gRXYuY3VycmVudF90YXJnZXQgZSB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICBMd2Rfc2VxLmVsZW1lbnRcbiAgICBAQFxuICAgIGxldCBjZWxscyA9IFJvdy5yZW5kZXIgcm93IGluXG4gICAgYXNzZXJ0IChMaXN0Lmxlbmd0aCBjZWxscyA9IG4pO1xuICAgIGxldCBvbl9kcmFnX3N0YXJ0ID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnc3RhcnQgKGZ1biBfIC0+XG4gICAgICAgICAgRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50IHw+IEVsLnNldF9jbGFzcyAoSnN0ci52IFwiZHJhZ2dpbmdcIikgdHJ1ZTtcbiAgICAgICAgICBMd2Quc2V0IHNoYXJlZF9kcmFnX2RhdGEgQEAgU29tZSB0X3JvdylcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX292ZXIgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdvdmVyIChmdW4gZSAtPlxuICAgICAgICAgIGxldCB0YXJnZXQgPSBnZXRfZXZfdGFyZ2V0IGUgaW5cbiAgICAgICAgICByZW1vdmVfaGludHMgdGFyZ2V0O1xuICAgICAgICAgIGxldCB0b3AgPSBpc19vbl90b3AgZSBpblxuICAgICAgICAgIGxldCBub29wID1cbiAgICAgICAgICAgIGxldCBvcGVuIE9wdGlvbiBpblxuICAgICAgICAgICAgbGV0KyByb3cgPSBMd2QucGVlayBzaGFyZWRfZHJhZ19kYXRhIGluXG4gICAgICAgICAgICBsZXQgZXF1YWxfcHJldiByb3cgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmZhbHNlIChFcXVhbC5waHlzaWNhbCByb3cpXG4gICAgICAgICAgICAgICAgKEx3ZF90YWJsZS5wcmV2IHRfcm93KVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGxldCBlcXVhbF9uZXh0IHJvdyA9XG4gICAgICAgICAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6ZmFsc2UgKEVxdWFsLnBoeXNpY2FsIHJvdylcbiAgICAgICAgICAgICAgICAoTHdkX3RhYmxlLm5leHQgdF9yb3cpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgRXF1YWwucGh5c2ljYWwgdF9yb3cgcm93XG4gICAgICAgICAgICB8fCAodG9wICYmIGVxdWFsX3ByZXYgcm93KVxuICAgICAgICAgICAgfHwgKChub3QgdG9wKSAmJiBlcXVhbF9uZXh0IHJvdylcbiAgICAgICAgICBpblxuICAgICAgICAgIGlmIG5vdCAoT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmZhbHNlIG5vb3ApIHRoZW4gKFxuICAgICAgICAgICAgYWRkX2hpbnQgfnRvcCB0YXJnZXQ7XG4gICAgICAgICAgICAoKiA+IElmIHRoZSBtb3VzZSBpcyByZWxlYXNlZCBvdmVyIGFuIGVsZW1lbnQgdGhhdCBpcyBhIHZhbGlkIGRyb3AgdGFyZ2V0LFxuICAgICAgICAgICAgICAgPiB0aGF0IGlzLCBvbmUgdGhhdCBjYW5jZWxsZWQgdGhlIGxhc3QgZHJhZ2VudGVyIG9yIGRyYWdvdmVyIGV2ZW50LFxuICAgICAgICAgICAgICAgPiB0aGVuIHRoZSBkcm9wIHdpbGwgYmUgc3VjY2Vzc2Z1bC5cbiAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MX0RyYWdfYW5kX0Ryb3BfQVBJL0RyYWdfb3BlcmF0aW9ucyNzcGVjaWZ5aW5nX2Ryb3BfdGFyZ2V0cyAqKVxuICAgICAgICAgICAgRXYucHJldmVudF9kZWZhdWx0IGUpKVxuICAgIGluXG4gICAgbGV0IG9uX2RyYWdfbGVhdmUgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdsZWF2ZSAoZnVuIGUgLT4gcmVtb3ZlX2hpbnRzIEBAIGdldF9ldl90YXJnZXQgZSlcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX2VuZCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJhZ2VuZCAoZnVuIF8gLT5cbiAgICAgICAgICBEb2N1bWVudC5ib2R5IEcuZG9jdW1lbnQgfD4gRWwuc2V0X2NsYXNzIChKc3RyLnYgXCJkcmFnZ2luZ1wiKSBmYWxzZSlcbiAgICBpblxuICAgIGxldCBvbl9kcm9wID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcm9wIChmdW4gZSAtPlxuICAgICAgICAgIHJlbW92ZV9oaW50cyBAQCBnZXRfZXZfdGFyZ2V0IGU7XG4gICAgICAgICAgbGV0IF8gPVxuICAgICAgICAgICAgbGV0IG9wZW4gT3B0aW9uIGluXG4gICAgICAgICAgICBsZXQqIHJvdyA9IEx3ZC5wZWVrIHNoYXJlZF9kcmFnX2RhdGEgaW5cbiAgICAgICAgICAgIGxldCsgc2V0ID0gTHdkX3RhYmxlLmdldCByb3cgaW5cbiAgICAgICAgICAgIGlmIGlzX29uX3RvcCBlIHRoZW4gaWdub3JlIEBAIEx3ZF90YWJsZS5iZWZvcmUgfnNldCB0X3Jvd1xuICAgICAgICAgICAgZWxzZSBpZ25vcmUgQEAgTHdkX3RhYmxlLmFmdGVyIH5zZXQgdF9yb3c7XG4gICAgICAgICAgICBMd2RfdGFibGUucmVtb3ZlIHJvd1xuICAgICAgICAgIGluXG4gICAgICAgICAgTHdkLnNldCBzaGFyZWRfZHJhZ19kYXRhIE5vbmUpXG4gICAgaW5cbiAgICBFbHdkLmRpdlxuICAgICAgfmF0OlsgYFAgKEF0LmRyYWdnYWJsZSBAQCBKc3RyLnYgXCJ0cnVlXCIpIF1cbiAgICAgIH5ldjpcbiAgICAgICAgW1xuICAgICAgICAgIGBQIG9uX2RyYWdfc3RhcnQ7XG4gICAgICAgICAgYFAgb25fZHJhZ19vdmVyO1xuICAgICAgICAgIGBQIG9uX2RyYWdfbGVhdmU7XG4gICAgICAgICAgYFAgb25fZHJhZ19lbmQ7XG4gICAgICAgICAgYFAgb25fZHJvcDtcbiAgICAgICAgXVxuICAgICAgKExpc3QubWFwIGNlbGxzIH5mOihmdW4gYyAtPiBgUCBjKSlcblxuICBsZXQgbWFrZSAodHlwZSB0KSAobW9kdWxlIFJvdyA6IFJvdyB3aXRoIHR5cGUgdCA9IHQpIH5jb2x1bW5zXG4gICAgICA/KHRhYmxlIDogdCBMd2RfdGFibGUudCA9IEx3ZF90YWJsZS5tYWtlICgpKVxuICAgICAgPyhzaGFyZWRfZHJhZ19kYXRhIDogdCBMd2RfdGFibGUucm93IG9wdGlvbiBMd2QudmFyID0gTHdkLnZhciBOb25lKSAoKSA9XG4gICAgbGV0IGF0ID0gQXR0cnMudG9fYXQgZ3JpZCBpblxuICAgIGxldCB0YWJsZV9oZWFkZXIgPSBDb2x1bW5zLnRvX2hlYWRlciBjb2x1bW5zIGluXG4gICAgbGV0IHRhYmxlX2JvZHkgPVxuICAgICAgTHdkX3RhYmxlLm1hcF9yZWR1Y2VcbiAgICAgICAgKHJlbmRlcl9yb3cgKG1vZHVsZSBSb3cpIH5zaGFyZWRfZHJhZ19kYXRhIH5uOihBcnJheS5sZW5ndGggY29sdW1ucykpXG4gICAgICAgIEx3ZF9zZXEubW9ub2lkIHRhYmxlXG4gICAgaW5cbiAgICBsZXQgZWx0ID1cbiAgICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgICAgbGV0JCBlbHQgPVxuICAgICAgICBFbHdkLmRpdiB+YXQgWyBgUCB0YWJsZV9oZWFkZXI7IGBTIChMd2Rfc2VxLmxpZnQgdGFibGVfYm9keSkgXVxuICAgICAgaW5cbiAgICAgIGxldCAoKSA9IENvbHVtbnMuc2V0IGVsdCBjb2x1bW5zIGluXG4gICAgICBlbHRcbiAgICBpblxuICAgIChlbHQsIHRhYmxlKVxuZW5kXG5cbmxldCBwbGF5bGlzdF9jb2x1bW5zID1cbiAgRHJhZ2dhYmxlX3RhYmxlLkNvbHVtbnMuXG4gICAgW3wgY29sdW1uIFwiRmlyc3RDT2xcIiBcIjI1NnB4XCI7IGNvbHVtbiBcIlNlY29uZFwiIFwiMjU2cHhcIiB8XVxuXG5tb2R1bGUgUGxheWxpc3Rfcm93ID0gc3RydWN0XG4gIHR5cGUgdCA9IHN0cmluZyAqIHN0cmluZ1xuXG4gIGxldCByZW5kZXIgKGwsIHIpID0gWyBFbC5kaXYgWyBFbC50eHQnIGwgXTsgRWwuZGl2IFsgRWwudHh0JyByIF0gXVxuZW5kXG5cbmxldCBtYWtlX3RhYmxlIHJvd3MgPVxuICBsZXQgdGFibGUgPSBMd2RfdGFibGUubWFrZSAoKSBpblxuICBMaXN0Lml0ZXIgcm93cyB+ZjooZnVuIHNldCAtPiBpZ25vcmUgQEAgTHdkX3RhYmxlLmFwcGVuZCB+c2V0IHRhYmxlKTtcbiAgdGFibGVcblxubGV0IGRyYWdnYWJsZV90YWJsZSA/c2hhcmVkX2RyYWdfZGF0YSAoKSA9XG4gIERyYWdnYWJsZV90YWJsZS5tYWtlXG4gICAgKG1vZHVsZSBQbGF5bGlzdF9yb3cpXG4gICAgfmNvbHVtbnM6cGxheWxpc3RfY29sdW1ucyA/c2hhcmVkX2RyYWdfZGF0YVxuICAgIH50YWJsZTpcbiAgICAgIChtYWtlX3RhYmxlXG4gICAgICAgICBbXG4gICAgICAgICAgIChcInRvdG9cIiwgXCJyMVwiKTtcbiAgICAgICAgICAgKFwidGF0YVwiLCBcInIyXCIpO1xuICAgICAgICAgICAoXCJ0aXRpXCIsIFwicjNcIik7XG4gICAgICAgICAgIChcInRhXCIsIFwicjRcIik7XG4gICAgICAgICAgIChcInR1XCIsIFwicjVcIik7XG4gICAgICAgICBdKVxuICAgICgpXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJlclxub3BlbiBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2RfdWlcbm9wZW4hIEJycl9sd2Rcbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxuKCoqIEFwcGxpY2F0aW9uIHBhcnQgKilcblxuKCoqIENvbHVtbnMgZGVjbGFyYXRpb24gKilcbmxldCBjb2x1bW5zICgpID1cbiAgVGFibGUuQ29sdW1ucy5cbiAgICBbfFxuICAgICAgdiBcIk9yZGVyXCIgXCI1cmVtXCIgQEAgWyBgUCAoRWwudHh0JyBcIiNcIikgXTtcbiAgICAgIHYgXCJDb3ZlclwiIFwiNXJlbVwiIEBAIFsgYFAgKEVsLnR4dCcgXCJDb3ZlclwiKSBdO1xuICAgICAgdiBcIlRpdGxlXCIgXCIxZnJcIiBAQCBbIGBQIChFbC50eHQnIFwiVGl0bGVcIikgXTtcbiAgICB8XVxuXG5sZXQgbWFrZSB+cmVzZXRfcGxheWxpc3QgfmZldGNoID9zY3JvbGxfdGFyZ2V0ICh2aWV3IDogTHdkX3ZpZXcub3JkZXJlZCkgPVxuICBsZXQgcmFuZ2VkID1cbiAgICBMd2QubWFwMiAoTHdkX3ZpZXcudG9fdmlldyB2aWV3KSB2aWV3Lm9yZGVyIH5mOihmdW4gdmlldyBvcmRlciAtPlxuICAgICAgICB7IFZpZXcudmlldzsgZmlyc3QgPSAwOyBsYXN0ID0gMDsgb3JkZXIgfSlcbiAgaW5cbiAgbGV0IGltZ191cmwgc2VydmVyX2lkIGl0ZW1faWQgPVxuICAgIGxldCBzZXJ2ZXJzID1cbiAgICAgICgqIHNob3VsZCB0aGlzIGJlIHJlYWN0aXZlID8gKilcbiAgICAgIEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucyB8PiBMd2Rfc2VxLnRvX2xpc3RcbiAgICBpblxuICAgIGxldCB1cmwgPVxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjb25uZXhpb24gOiBEUy5jb25uZXhpb24gPSBMaXN0LmFzc3Egc2VydmVyX2lkIHNlcnZlcnMgaW5cbiAgICAgICAgUHJpbnRmLnNwcmludGYgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD01MFwiIGNvbm5leGlvbi5iYXNlX3VybFxuICAgICAgICAgIGl0ZW1faWRcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+IFwic2VydmVyLWVycm9yLnBuZ1wiXG4gICAgaW5cbiAgICBBdC5zcmMgKEpzdHIudiB1cmwpXG4gIGluXG4gIGxldCByZW5kZXIgKHJhbmdlZCA6IFZpZXcucmFuZ2VkIEx3ZC50KSBzdGFydF9pbmRleFxuICAgICAge1xuICAgICAgICBEYi5TdG9yZXMuSXRlbXMuaXRlbSA9XG4gICAgICAgICAgeyBBcGkuSXRlbS5pZDsgbmFtZTsgYWxidW1faWQ7IHNlcnZlcl9pZDsgaW1hZ2VfYmx1cl9oYXNoZXM7IF8gfTtcbiAgICAgICAgXztcbiAgICAgIH0gPVxuICAgIGxldCBwbGF5X2Zyb20gKHJhbmdlZCA6IFZpZXcucmFuZ2VkIEx3ZC50KSA9XG4gICAgICBMd2QubWFwIHJhbmdlZCB+ZjooZnVuIHJhbmdlZCBfIC0+XG4gICAgICAgICAgaWdub3JlXG4gICAgICAgICAgICAocmVzZXRfcGxheWxpc3RcbiAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgcmFuZ2VkIHdpdGhcbiAgICAgICAgICAgICAgICAgdmlldyA9XG4gICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgcmFuZ2VkLnZpZXcgd2l0aFxuICAgICAgICAgICAgICAgICAgICAgc3RhcnRfb2Zmc2V0ID0gcmFuZ2VkLnZpZXcuc3RhcnRfb2Zmc2V0ICsgc3RhcnRfaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgIH0pKVxuICAgIGluXG4gICAgbGV0IHBsYXlfb25fY2xpY2sgPVxuICAgICAgTHdkLm1hcCAocGxheV9mcm9tIHJhbmdlZCkgfmY6KGZ1biBjYiAtPiBFbHdkLmhhbmRsZXIgRXYuY2xpY2sgY2IpXG4gICAgaW5cbiAgICBsZXQgaW1nX3VybCA9XG4gICAgICBtYXRjaCAoaW1hZ2VfYmx1cl9oYXNoZXMsIGFsYnVtX2lkKSB3aXRoXG4gICAgICB8IHsgcHJpbWFyeSA9IE5vbmUgfSwgXyB8IF8sIE5vbmUgLT5cbiAgICAgICAgICBMd2QucmV0dXJuIChBdC5zcmMgKEpzdHIudiBcInRyYWNrLnBuZ1wiKSlcbiAgICAgIHwgXywgU29tZSBpZCAtPiBMd2QucmV0dXJuIChpbWdfdXJsIHNlcnZlcl9pZCBpZClcbiAgICBpblxuICAgIGxldCBzdGF0dXMgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIubm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZCA9IGl0ZW1faWQ7IF8gfTsgXyB9IHdoZW4gU3RyaW5nLmVxdWFsIGl0ZW1faWQgaWQgLT5cbiAgICAgICAgICAgIEVsLmRpdiB+YXQ6WyBBdC5jbGFzcycgKEpzdHIudiBcInBsYXlpbmdcIikgXSBbIEVsLnR4dCcgXCJ8PlwiIF1cbiAgICAgICAgfCBTb21lIF8gfCBOb25lIC0+IEVsLmRpdiBbIEVsLnR4dCcgKHN0cmluZ19vZl9pbnQgKHN0YXJ0X2luZGV4ICsgMSkpIF0pXG4gICAgaW5cbiAgICBbXG4gICAgICBgUiBzdGF0dXM7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXZcbiAgICAgICAgICAgfmV2OlsgYFIgcGxheV9vbl9jbGljayBdXG4gICAgICAgICAgIFsgYFIgKEVsd2QuaW1nIH5hdDpbIGBSIGltZ191cmw7IGBQIChBdC53aWR0aCA1MCkgXSAoKSkgXSk7XG4gICAgICBgUCAoRWwuZGl2IFsgRWwuc3BhbiBbIEVsLnR4dCcgbmFtZSBdIF0pO1xuICAgIF1cbiAgaW5cbiAgbGV0IHBsYWNlaG9sZGVyIF9pID0gW10gaW5cbiAgbGV0IHVpX3RhYmxlID1cbiAgICB7IFRhYmxlLnRhYmxlID0geyBjb2x1bW5zID0gY29sdW1ucyAoKSB9OyByb3dfaGVpZ2h0ID0gRW0gNC4gfVxuICBpblxuICBsZXQgZGF0YV9zb3VyY2UgPVxuICAgIGxldCB0b3RhbF9pdGVtcyA9IHZpZXcuaXRlbV9jb3VudCBpblxuICAgIGxldCBmZXRjaCA9IEx3ZC5tYXAgcmFuZ2VkIH5mOihmdW4gcmFuZ2VkIGkgLT4gZmV0Y2ggcmFuZ2VkIGkpIGluXG4gICAgbGV0IHJlbmRlciA9IEx3ZC5wdXJlIChyZW5kZXIgcmFuZ2VkKSBpblxuICAgIHsgVGFibGUuVmlydHVhbC50b3RhbF9pdGVtczsgZmV0Y2g7IHJlbmRlciB9XG4gIGluXG4gIFRhYmxlLlZpcnR1YWwubWFrZSB+dWlfdGFibGUgfnBsYWNlaG9sZGVyID9zY3JvbGxfdGFyZ2V0IGRhdGFfc291cmNlXG5cbmxldCBtYWtlX25vd19wbGF5aW5nIH5yZXNldF9wbGF5bGlzdCB+ZmV0Y2ggdmlldyA9XG4gIGxldCBzY3JvbGxfdGFyZ2V0ID0gTHdkLmdldCBQbGF5ZXIucGxheXN0YXRlLmN1cnJlbnRfaW5kZXggaW5cbiAgbWFrZSB+c2Nyb2xsX3RhcmdldCB+cmVzZXRfcGxheWxpc3QgfmZldGNoIHZpZXdcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJyclxuXG4oKiBUaGUgc2Vzc2lvbiB1dWlkIGlzIHN0b3JlZCB0byB0aGUgbG9jYWwgc3RvcmFnZSBhbmQgdXNlZCB0byBpZGVudGlmeSBhIHVzZXJcbiAgIHNlc3Npb24uIFRoaXMgaXMgcmVxdWlyZWQgYnkgSmVsbHlmaW4gYXV0aG9yaXphdGlvbiBzY2hlbWUuICopXG4oKiBUaGUgb2ZmaWNpYWwgY2xpZW50IGRvZXMgaXQgbGlrZSB0aGlzOlxuXG4gICBmdW5jdGlvbiBnZW5lcmF0ZURldmljZUlkKCkge1xuICAgICAgIGNvbnN0IGtleXMgPSBbXTtcblxuICAgICAgIGtleXMucHVzaChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICBrZXlzLnB1c2gobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgICAgIGlmICh3aW5kb3cuYnRvYSkge1xuICAgICAgICAgICByZXR1cm4gYnRvYShrZXlzLmpvaW4oJ3wnKSkucmVwbGFjZUFsbCgnPScsICcxJyk7XG4gICAgICAgfVxuXG4gICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgfVxuKilcbmxldCBzZXNzaW9uX3V1aWQgPVxuICAoKiBXZSBuZXZlciByZWFjdCB0byB0aGlzIHZhciB3ZSBjb3VsZCByZXBsYWNlIGl0ICopXG4gIEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXJfZiB+a2V5Olwic2Vzc2lvbl91dWlkXCIgKGZ1biAoKSAtPlxuICAgICAgU3RkLm5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZylcblxubGV0IF8gPVxuICBsZXQgdXVpZCA9IEx3ZC5wZWVrIHNlc3Npb25fdXVpZCBpblxuICBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGkuc2V0X3Nlc3Npb25fdXVpZCB1dWlkO1xuICBXb3JrZXJfY2xpZW50LnF1ZXJ5IChTZXRfc2Vzc2lvbl91dWlkIChMd2QucGVlayBzZXNzaW9uX3V1aWQpKVxuXG5sZXQgZmV0Y2ggcmFuZ2VkX3ZpZXcgaSA9XG4gIFdvcmtlcl9jbGllbnQuKHF1ZXJ5IChHZXQgKHJhbmdlZF92aWV3LlZpZXcudmlldywgcmFuZ2VkX3ZpZXcub3JkZXIsIGkpKSlcblxubW9kdWxlIFAgPSBQbGF5ZXIuUGxheWJhY2tfY29udHJvbGxlciAoc3RydWN0XG4gIGxldCBmZXRjaCA9IGZldGNoXG5lbmQpXG5cbmxldCBhcHAgPVxuICBsZXQgb3BlbiBCcnJfbHdkX3VpLkZvcm1zIGluXG4gIGxldCBwbGF5bGlzdCA9IEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXIgfmtleTpcInRvdG8xXCIgMCBpblxuICBsZXQgb25fY2xpY2sgXyBfID1cbiAgICBMd2Quc2V0IHBsYXlsaXN0IChMd2QucGVlayBwbGF5bGlzdCArIDEpO1xuICAgIExhbmcuc2V0IExhbmcuRW47XG4gICAgQnJyX2x3ZF91aS5CdXR0b24uTmV4dFxuICBpblxuICBsZXQgX2J0bl9taXgsIF8sIF8gPVxuICAgIFVpLlR3b19zdGF0ZV9idXR0b24ubWFrZSB+b25fY2xpY2sgKGZ1biBfIC0+XG4gICAgICAgIFtcbiAgICAgICAgICBgUlxuICAgICAgICAgICAgKEx3ZC5tYXAgKEx3ZC5nZXQgcGxheWxpc3QpIH5mOihmdW4gcGwgLT5cbiAgICAgICAgICAgICAgICAgRWwudHh0JyAoXCJjbGlja1wiIF4gc3RyaW5nX29mX2ludCBwbCkpKTtcbiAgICAgICAgXSlcbiAgaW5cbiAgbGV0IHN0YXR1cyA9XG4gICAgRWx3ZC5kaXZcbiAgICAgIH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXVxuICAgICAgWyBgUCAoRWwuaDEgWyBFbC50eHQnIFwiV2VsY29tZSB0byBPQ0FNSVhcIiBdKTsgYFIgKFNlcnZlcnMudWkgKCkpIF1cbiAgaW5cbiAgbGV0IHBsYXllcl91aSA9XG4gICAgbGV0IHBsYXllciA9IFAubWFrZSAoKSBpblxuICAgIEVsd2QuZGl2IH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXSBbIGBSIHBsYXllciBdXG4gIGluXG4gIGxldCBmX3NlYXJjaCA9XG4gICAgbGV0IG9wZW4gRmllbGRfdGV4dGlucHV0IGluXG4gICAgbWFrZSB7IG5hbWUgPSBcInBvdWV0XCI7IGRlZmF1bHQgPSBOb25lOyBsYWJlbCA9IFtdIH1cbiAgaW5cbiAgbGV0IGZfc29ydCA9XG4gICAgbGV0IG9wZW4gRmllbGRfc2VsZWN0IGluXG4gICAgbGV0IG9wdGlvbnMgPVxuICAgICAgTHdkLnB1cmVcbiAgICAgICAgKEx3ZF9zZXEub2ZfbGlzdCBbIChcImRhdGVfYWRkZWRcIiwgXCJEYXRlIGFkZGVkXCIpOyAoXCJuYW1lXCIsIFwiTmFtZVwiKSBdKVxuICAgIGluXG4gICAgbWFrZSB7IG5hbWUgPSBcInZpZXctc29ydFwiOyBkZWZhdWx0ID0gXCJkYXRlX2FkZGVkXCI7IGxhYmVsID0gW10gfSBvcHRpb25zXG4gIGluXG4gIGxldCBmX29yZGVyID1cbiAgICBsZXQgb3BlbiBGaWVsZF9zZWxlY3QgaW5cbiAgICBsZXQgb3B0aW9ucyA9XG4gICAgICBMd2QucHVyZVxuICAgICAgICAoTHdkX3NlcS5vZl9saXN0XG4gICAgICAgICAgIFsgKFwiYXNjXCIsIFwiQXNjXCIpOyAoXCJkZXNjXCIsIFwiRGVzY1wiKTsgKFwicmFuZG9tXCIsIFwiUmFuZG9tXCIpIF0pXG4gICAgaW5cbiAgICBtYWtlIHsgbmFtZSA9IFwidmlldy1vcmRlclwiOyBkZWZhdWx0ID0gXCJkZXNjXCI7IGxhYmVsID0gW10gfSBvcHRpb25zXG4gIGluXG4gIGxldCBmX3NvcnRfb3JkZXIgPSBMd2QucGFpciBmX3NvcnQudmFsdWUgZl9vcmRlci52YWx1ZSBpblxuICBsZXQgZmlsdGVycywgZl92YWx1ZSA9XG4gICAgbGV0IGZfbGlicmFyaWVzID1cbiAgICAgIGxldCBvcGVuIEZpZWxkX2NoZWNrYm94ZXMgaW5cbiAgICAgIGxldCBjaG9pY2VzID1cbiAgICAgICAgTHdkX3NlcS5mb2xkX21vbm9pZFxuICAgICAgICAgIChmdW4gKF8sIGwpIC0+XG4gICAgICAgICAgICBMd2Rfc2VxLm1hcFxuICAgICAgICAgICAgICAoZnVuIChsIDogRGIuU3RvcmVzLkl0ZW1zLnQpIC0+XG4gICAgICAgICAgICAgICAgQ2hlY2sgKGwuaXRlbS5pZCwgWyBgUCAoRWwudHh0JyBsLml0ZW0ubmFtZSkgXSwgdHJ1ZSkpXG4gICAgICAgICAgICAgIGwpXG4gICAgICAgICAgKEx3ZC5yZXR1cm4gTHdkX3NlcS5lbXB0eSwgTHdkLm1hcDIgfmY6THdkX3NlcS5jb25jYXQpXG4gICAgICAgICAgU2VydmVycy5zZXJ2ZXJzX2xpYnJhcmllc1xuICAgICAgaW5cbiAgICAgIG1ha2UgeyBuYW1lID0gXCJwb3VldFwiOyBkZXNjID0gTHdkLmpvaW4gY2hvaWNlcyB9XG4gICAgaW5cbiAgICBsZXQgZmlsdGVycyA9XG4gICAgICBFbHdkLmRpdlxuICAgICAgICBbXG4gICAgICAgICAgYFIgZl9zb3J0LmZpZWxkO1xuICAgICAgICAgIGBSIGZfb3JkZXIuZmllbGQ7XG4gICAgICAgICAgYFIgZl9zZWFyY2guZmllbGQ7XG4gICAgICAgICAgYFIgZl9saWJyYXJpZXMuZmllbGQ7XG4gICAgICAgIF1cbiAgICBpblxuICAgIChmaWx0ZXJzLCBmX2xpYnJhcmllcy52YWx1ZSlcbiAgaW5cbiAgbGV0IG1haW5fdmlldyA9XG4gICAgbGV0IHByZXZpb3VzX3ZhbHVlID0gcmVmIE5vbmUgaW5cbiAgICBsZXQgcmVxdWVzdCA9XG4gICAgICBVaV91dGlscy5tYXAzIGZfdmFsdWUgZl9zZWFyY2gudmFsdWUgZl9zb3J0X29yZGVyIH5mOihmdW4gbCB0IChzLCBfbykgLT5cbiAgICAgICAgICBsZXQgZmlsdGVycyA9IE9wdGlvbi5tYXAgKGZ1biBzIC0+IFsgRGIuVmlldy5TZWFyY2ggcyBdKSB0IGluXG4gICAgICAgICAgQ29uc29sZS5sb2dcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgXCJVcGRhdGluZyBtYWluIHZpZXc6XCI7XG4gICAgICAgICAgICAgIEp2Lm9mX29wdGlvbiB+bm9uZTooSnYub2Zfc3RyaW5nIFwiXFxcIlxcXCJcIikgSnYub2Zfc3RyaW5nIHQ7XG4gICAgICAgICAgICAgICgqIEp2Lm9mX2xpc3QgSnYub2Zfc3RyaW5nIGw7ICopXG4gICAgICAgICAgICAgIEp2Lm9mX3N0cmluZyBzO1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICBsZXQgc29ydCA9IERiLlZpZXcuU29ydC5vZl9zdHJpbmcgcyBpblxuICAgICAgICAgIGxldCBuZXdfdmlldyA9XG4gICAgICAgICAgICBEYi5WaWV3LihcbiAgICAgICAgICAgICAgcmVxIEF1ZGlvIH5zcmNfdmlld3M6KE9ubHkgKEx3ZF9zZXEudG9fbGlzdCBsKSkgfnNvcnQgP2ZpbHRlcnMgKCkpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0Om5ld192aWV3XG4gICAgICAgICAgICAoZnVuIG9sZCAtPlxuICAgICAgICAgICAgICBpZiBFcXVhbC5wb2x5IG9sZCBuZXdfdmlldyB0aGVuIG9sZFxuICAgICAgICAgICAgICBlbHNlIChcbiAgICAgICAgICAgICAgICBwcmV2aW91c192YWx1ZSA6PSBTb21lIG5ld192aWV3O1xuICAgICAgICAgICAgICAgIG5ld192aWV3KSlcbiAgICAgICAgICAgICFwcmV2aW91c192YWx1ZSlcbiAgICBpblxuICAgIGxldCBpdGVtX2NvdW50ID1cbiAgICAgIEx3ZC5tYXAgcmVxdWVzdCB+ZjooZnVuIHJlcSAtPiBXb3JrZXJfY2xpZW50LmdldF92aWV3X2l0ZW1fY291bnQgcmVxKVxuICAgIGluXG4gICAgbGV0IGl0ZW1fY291bnQgPSAoKiBGSVhNRSAqKSBMd2Quam9pbiBpdGVtX2NvdW50IGluXG4gICAgbGV0IG9yZGVyID1cbiAgICAgIEx3ZC5tYXAyIGl0ZW1fY291bnQgZl9zb3J0X29yZGVyIH5mOihmdW4gaXRlbV9jb3VudCAoXywgb3JkZXIpIC0+XG4gICAgICAgICAgbGV0IHNpemUgPSBpdGVtX2NvdW50IGluXG4gICAgICAgICAgbGV0IG9yZGVyID0gVmlldy5PcmRlci5vZl9zdHJpbmcgfnNpemUgb3JkZXIgaW5cbiAgICAgICAgICBvcmRlcilcbiAgICBpblxuICAgIHsgTHdkX3ZpZXcucmVxdWVzdDsgaXRlbV9jb3VudDsgc3RhcnRfb2Zmc2V0ID0gTHdkLnB1cmUgMDsgb3JkZXIgfVxuICBpblxuXG4gIGxldCBtYWluX2xpc3QgPVxuICAgIFVpX3BsYXlsaXN0Lm1ha2UgfnJlc2V0X3BsYXlsaXN0OlAucmVzZXRfcGxheWxpc3QgfmZldGNoIG1haW5fdmlld1xuICBpblxuICBsZXQgbm93X3BsYXlpbmcgPVxuICAgIGxldCBwbGF5bGlzdCA9XG4gICAgICBMd2QubWFwIChMd2QuZ2V0IFBsYXllci5wbGF5c3RhdGUucGxheWxpc3QpIH5mOihmdW5jdGlvblxuICAgICAgICB8IE5vbmUgLT4gRWx3ZC5zcGFuIFsgYFAgKEVsLnR4dCcgXCJOb3RoaW5nIHBsYXlpbmdcIikgXVxuICAgICAgICB8IFNvbWUgcGxheWxpc3QgLT5cbiAgICAgICAgICAgIGxldCB2aWV3ID1cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEx3ZF92aWV3LnJlcXVlc3QgPSBMd2QucHVyZSBwbGF5bGlzdC52aWV3LnJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgaXRlbV9jb3VudCA9IEx3ZC5wdXJlIHBsYXlsaXN0LnZpZXcuaXRlbV9jb3VudDtcbiAgICAgICAgICAgICAgICBzdGFydF9vZmZzZXQgPSBMd2QucHVyZSBwbGF5bGlzdC52aWV3LnN0YXJ0X29mZnNldDtcbiAgICAgICAgICAgICAgICBvcmRlciA9IEx3ZC5wdXJlIHBsYXlsaXN0Lm9yZGVyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgVWlfcGxheWxpc3QubWFrZV9ub3dfcGxheWluZyB+cmVzZXRfcGxheWxpc3Q6UC5yZXNldF9wbGF5bGlzdCB+ZmV0Y2hcbiAgICAgICAgICAgICAgdmlldylcbiAgICBpblxuICAgICgqdG9kbzogZG8gd2UgbmVlZCB0aGF0IGpvaW4gPyopXG4gICAgTHdkLmpvaW4gcGxheWxpc3RcbiAgaW5cbiAgbGV0IGJpZ19jb3ZlciA9XG4gICAgbGV0IGRpc3BsYXlfbm9uZSA9XG4gICAgICBMd2QubWFwIChMd2QuZ2V0IEFwcF9zdGF0ZS5hY3RpdmVfbGF5b3V0KSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBNYWluIC0+IEF0LmNsYXNzJyAoSnN0ci52IFwiZGlzcGxheS1ub25lXCIpXG4gICAgICAgIHwgS2lvc2sgLT4gQXQudm9pZClcbiAgICBpblxuICAgIGxldCBzdHlsZSA9XG4gICAgICBMd2QubWFwIChMd2QuZ2V0IFBsYXllci5ub3dfcGxheWluZykgfmY6KGZ1biBucCAtPlxuICAgICAgICAgIGxldCBzcmMgPVxuICAgICAgICAgICAgbWF0Y2ggbnAgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IFwidHJhY2sucG5nXCJcbiAgICAgICAgICAgIHwgU29tZSB7IGl0ZW0gPSB7IGlkOyBhbGJ1bV9pZDsgc2VydmVyX2lkOyBfIH07IF8gfSAtPlxuICAgICAgICAgICAgICAgIGxldCBpbWFnZV9pZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDppZCBhbGJ1bV9pZCBpblxuICAgICAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gTHdkX3NlcS50b19saXN0IChMd2QucGVlayBTZXJ2ZXJzLmNvbm5leGlvbnMpIGluXG4gICAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9IExpc3QuYXNzcSBzZXJ2ZXJfaWQgc2VydmVycyBpblxuICAgICAgICAgICAgICAgICgqIHRvZG86IHRoaXMgaXMgZG9uZSBpbiBtdWx0aXBsZSBwbGFjZXMsIHdlIHNob3VsZCBmYWN0b3JcbiAgICAgICAgICAgICAgICAgICB0aGF0IG91dC4gKilcbiAgICAgICAgICAgICAgICBQcmludGYuc3ByaW50ZiBcIiVzL0l0ZW1zLyVzL0ltYWdlcy9QcmltYXJ5P3dpZHRoPTgwMCZmb3JtYXQ9SnBnXCJcbiAgICAgICAgICAgICAgICAgIGNvbm5leGlvbi5iYXNlX3VybCBpbWFnZV9pZFxuICAgICAgICAgIGluXG4gICAgICAgICAgQXQuc3R5bGUgKEpzdHIudiAoUHJpbnRmLnNwcmludGYgXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJVMpXCIgc3JjKSkpXG4gICAgaW5cbiAgICBsZXQgYXQgPSBbIGBSIGRpc3BsYXlfbm9uZTsgYFAgKEF0LmNsYXNzJyAoSnN0ci52IFwiYmlnLWNvdmVyXCIpKSBdIGluXG4gICAgRWx3ZC5kaXYgfmF0IFsgYFIgKEVsd2QuZGl2IH5hdDpbIGBSIHN0eWxlIF0gW10pIF1cbiAgaW5cbiAgRWx3ZC5kaXZcbiAgICB+YXQ6QnJyX2x3ZF91aS5BdHRycy4odG9fYXQgfmlkOlwibWFpbi1sYXlvdXRcIiBAQCBjbGFzc2VzIFtdKVxuICAgIFtcbiAgICAgIGBSIHN0YXR1cztcbiAgICAgIGBSXG4gICAgICAgIChFbHdkLmRpdlxuICAgICAgICAgICB+YXQ6WyBgUCAoQXQuY2xhc3MnIChKc3RyLnYgXCJpdGVtLWxpc3RcIikpIF1cbiAgICAgICAgICAgWyBgUiBiaWdfY292ZXI7IGBSIGZpbHRlcnM7IGBSIChFbHdkLmRpdiBbIGBSIG1haW5fbGlzdCBdKSBdKTtcbiAgICAgIGBSXG4gICAgICAgIChFbHdkLmRpdiB+YXQ6WyBgUCAoQXQuY2xhc3MnIChKc3RyLnYgXCJwbGF5bGlzdFwiKSkgXSBbIGBSIG5vd19wbGF5aW5nIF0pO1xuICAgICAgYFIgcGxheWVyX3VpO1xuICAgIF1cblxubGV0IGlzX3N0b3JhZ2VfcGVyc2lzdGVudCA9XG4gIEJycl9pby5TdG9yYWdlLihtYW5hZ2VyIEcubmF2aWdhdG9yIHw+IE1hbmFnZXIucGVyc2lzdClcblxubGV0IF8gPVxuICBsZXQgb25fbG9hZCBfID1cbiAgICBDb25zb2xlLmxvZyBbIFwiUGVyc2lzdCA/XCI7IGlzX3N0b3JhZ2VfcGVyc2lzdGVudCBdO1xuICAgIGxldCBhcHAgPSBMd2Qub2JzZXJ2ZSBAQCBhcHAgaW5cbiAgICBsZXQgb25faW52YWxpZGF0ZSBfID1cbiAgICAgIGlnbm9yZSBAQCBHLnJlcXVlc3RfYW5pbWF0aW9uX2ZyYW1lXG4gICAgICBAQCBmdW4gXyAtPiBpZ25vcmUgQEAgTHdkLnF1aWNrX3NhbXBsZSBhcHBcbiAgICBpblxuICAgIEVsLmFwcGVuZF9jaGlsZHJlbiAoRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50KSBbIEx3ZC5xdWlja19zYW1wbGUgYXBwIF07XG4gICAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIGFwcCBvbl9pbnZhbGlkYXRlXG4gIGluXG4gIEV2Lmxpc3RlbiBFdi5kb21fY29udGVudF9sb2FkZWQgb25fbG9hZCAoV2luZG93LmFzX3RhcmdldCBHLndpbmRvdylcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRW5zdXJlIHRoYXQgW2F0X2V4aXRdIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJvZ3JhbSAqKVxuXG5sZXQgXyA9IGRvX2F0X2V4aXQoKVxuIl19 +(function(a){typeof +globalThis!=="object"&&(this?b():(a.defineProperty(a.prototype,"_T_",{configurable:true,get:b}),_T_));function +b(){var +b=this||self;b.globalThis=b;delete +a.prototype._T_}}(Object));(function(z){"use strict";var +aV="0",pz="console",ql="duration",gL="int_of_string",oH="%u",oI=32752,py="member",jh=881518886,px="ImageBlurHashes",eE=427938126,q$="%a",ra="%ni",bT=0xff,jg=8100,oG="Series",ev=240,bx=737455525,oE="LiveTvProgram",oF=0x7ff0,ce=684370880,q_=218,oD="End_of_file",eu=-211558048,q7=19067,q8="Pw",q9="Out_of_memory",W=963043957,bQ=870828711,qj="AlbumId",qk="comment",jV="Failure",gK="Unix.Unix_error",qi="^",gJ="\\b",jf="text",pw="length",qh="Audio",er="null",jJ="ENOTDIR",q6="Program",qg="{}",dp=992790154,cI=17732,dA="+",eD="false",q5=", characters ",eq=726928360,jI=8097,gI=869834347,pv="SortName",oC=858694086,pu="MusicArtist",gx="Map.bal",bw=3455931,ep=1023,dz=125,qf="Pervasives.do_at_exit",dD=-211555818,pr=30214610,ps=143365725,pt="ChannelFolderItem",oB="%c",dn=65536,ex=57343,oA=",@ ",jG=-133,jH=0xf,gp=-588596599,pq="closedir",q4="Match_failure",je=3299808,pp=-32,q3="%s",eo=659980059,oz="background-image: url(",dC="illegal",po="MusicAlbum",e="",q2="pathname",pn="Year",qe="Photo",oy="infinity",bn=434236056,ox="CollectionFolder",qd="fd ",pm="append",gv="Id",gw=": ",q1="']')",ow="Playlist",ov="em",pl=0xe0,gH="object",eC="end",jF='\\"',qc=0xf0,ot="5rem",ou="Sys_error",bb=0x80,q0="EEXIST",qb="PhotoAlbum",en=1073741823,qZ=826371656,os="asc",qa="(','",pk="px",jE="e",jD="ENOENT",jd=-605101559,aC=15681,pj="Undefined_recursive_module",a6=2147483647,gu="\\t",jC="item",qY="%.16g",gG=224,bv=0x8000,gt="array",or=0x800,p$="playbackRate",oq="@{",p_="Division_by_zero",jU="surrogate",oo="MusicGenre",op="(Program not linked with -g, cannot print stack backtrace)\n",jB="track.png",p9="Channel",jc=55296,pi="random",qX=192,cd=0x3f,K=106380200,ph=114,jb=56320,ja=" : file already exists",I=128,gF=": No such file or directory",pg=" dst=",on="vendor/lwd/lib/brr-lwd/elwd.ml",jA=56319,ac=255,bP=256,i$="id",jz=100,o=848054398,n=-976970511,om="background-image: url(%S)",p8=3854881,qW="[]",pf="height: ",gA="click",qV=383,pe=3456159,cF="true",qU="grid-column:1/-1",i_="src/jsonm.ml",go=102,p7="box",jy=-97,qT="Printexc.handle_uncaught_exception",qS="Type",jT=" : flags Open_rdonly and Open_wronly are not compatible",dv=123,qR="item.Id",jx=4100401,qQ="class",ol=199,jp=82908052,jS="sorts",qO="LiveTvChannel",qP="@;",qN="Genre",ok=2047,pd=">",i9=237,jw="separator",p6="([^/]+)",et="Name",p5=759637122,i8="sort_name",du=127,by=0xffff,oj="documentElement",pc="Sys_blocked_io",p4="MusicVideo",a7="Unexpected end of input",jv="Form submitted:",qL="ServerName",qM="_",gz="\\n",qK="AggregateFolder",gs="_bigarr02",p3=-101336657,pb="Synchronized",jo="not",dy=3850876,aO=" ",jR="compare: functional value",jn="mkdir",eB=1000,gn=191,aI="vendor/lwd/lib/lwd/lwd_seq.pp.ml",pa="@[",gE="\\\\",qI="window",qJ="Primary",oi=-67383738,i7="fs",o$="BoxSet",o_=225181919,dB=-826170817,qG=14596,qH="/static/",p2="%i",eA="lib/db/stores.ml",oh=65279,jm=749039939,o9="Assert_failure",p1="0x",em=14610,o8=131,qF="Movie",p0=0xdfff,aB=365180284,o7=152,qD="%X",qE="OCAMLRUNPARAM",o6=253,pZ=": closedir failed",qC=122,pY=17718,jQ="in",dm="ServerId",pW="pouet",pX="Not_found",qB=".0",es="src/uutf.ml",pU="style",pV="Studio",ju="button",jP="views",o5="src",o4="Lwd_seq.rank: node is marked",o3=429931233,pT=" unfetched: ",Y=852405675,pS="%Li",qA="Recording",og="Invalid_argument",o2="lone",dx=254,gr="Set.bal",bO=0xffffff,jl=120,o1=1027,dt=1024,ds=246,of="Trailer",oZ="Season",o0="%s--id",qz=389604418,pR="Video",oe="submit",i6=512,cG=-752863768,gy=", ",qy="AccessToken",oc="%li",od=1026,pP=133,pQ="Cover",oY="%s/Items/%s/Images/Primary?width=500&format=Jpg",pO="BasePluginFolder",gm="/Items/",ob="b",oa="Person",gl="\\r",i5="nan",oX="stream",pN="%.17g",cf="or",i4="rmdir",jk="Fatal error: exception ",pM="Cstruct.blit_from_string src=",gD=1017453041,ah="camlinternalFormat.ml",n$="'}')",pL=" ",ez=708012133,n_=174,c=248,gC=24029,n9="User",pK="low",qx=713199754,dr="date_added",qw="ENOTEMPTY",gk="character",qv=726711616,jO=1255,bN="value",oW=508493173,jt=" : flags Open_text and Open_binary are not compatible",a="@ ",gB="JSON",oU="Book",oV="Stack_overflow",js=": Not a directory",oT="Failed to unmarshal data",pJ="Nothing playing",oS="Path",jN="string",ey=-48,n8=" : is a directory",jr="error",qu=732461442,gj=1006505782,n7="classList",cc=".",qt="TvProgram",el=-364210971,dq="",pI="/Images/Primary?width=500&format=Jpg",n5=438511779,n6="CollectionType",bR="name",qs="Folder",aN=737456202,oR=-10,jq="server_id",jM="desc",oQ="UserView",gi="lwd-to-remove",i3=",",n4="checked",oP="ParentId",i2="index out of bounds",qr=-937474657,bo="/",gq=605782321,ew=252,qq="body",i1="%d",pH="lwdui-virtual-table-row",bS=3654863,qp="Episode",pF="PlaylistsFolder",pG=": file descriptor already closed",cH="-",i0="EBADF",iZ=" len=",a5=-633954146,qo="Title",oO="--id",pE=12520,A="vendor/lwd/lib/lwd/lwd_table.ml",pD="Username",jL=756711075,oM=153884648,oN="Fatal error: exception %s\n",qn="sorts.views",bM=250,ji="input",jj="jsError",gh=103,dw='"',jK=737308346,n3="%.0f",pC=0xdc00,N="vendor/lwd/lib/lwd/lwd.ml",pB="TvChannel",oL="UserRootFolder",pA="buffer.ml",qm="AudioBook",oJ="ManualPlaylistsFolder",oK="rem";function +OJ(a,b,c,d,e){if(d<=b)for(var +f=1;f<=e;f++)c[d+f]=a[b+f];else +for(var +f=e;f>=1;f--)c[d+f]=a[b+f];return 0}function +OK(a,b,c){var +d=new +Array(c+1);d[0]=0;for(var +e=1,f=b+1;e<=c;e++,f++)d[e]=a[f];return d}function +rI(a){var +b=z.process;if(b&&b.env&&b.env[a]!=undefined)return b.env[a];if(z.jsoo_static_env&&z.jsoo_static_env[a])return z.jsoo_static_env[a]}var +ka=0;(function(){var +c=rI(qE);if(c!==undefined){var +b=c.split(i3);for(var +a=0;aa.hi)return 1;if(this.hia.mi)return 1;if(this.mia.lo)return 1;if(this.loc)return 1;if(ba.mi)return 1;if(this.mia.lo)return 1;if(this.lo>24),c=-this.hi+(b>>24);return new +q(a,b,c)};q.prototype.add=function(a){var +b=this.lo+a.lo,c=this.mi+a.mi+(b>>24),d=this.hi+a.hi+(c>>24);return new +q(b,c,d)};q.prototype.sub=function(a){var +b=this.lo-a.lo,c=this.mi-a.mi+(b>>24),d=this.hi-a.hi+(c>>24);return new +q(b,c,d)};q.prototype.mul=function(a){var +b=this.lo*a.lo,c=(b*rq|0)+this.mi*a.lo+this.lo*a.mi,d=(c*rq|0)+this.hi*a.lo+this.mi*a.mi+this.lo*a.hi;return new +q(b,c,d)};q.prototype.isZero=function(){return(this.lo|this.mi|this.hi)==0};q.prototype.isNeg=function(){return this.hi<<16<0};q.prototype.and=function(a){return new +q(this.lo&a.lo,this.mi&a.mi,this.hi&a.hi)};q.prototype.or=function(a){return new +q(this.lo|a.lo,this.mi|a.mi,this.hi|a.hi)};q.prototype.xor=function(a){return new +q(this.lo^a.lo,this.mi^a.mi,this.hi^a.hi)};q.prototype.shift_left=function(a){a=a&63;if(a==0)return this;if(a<24)return new +q(this.lo<>24-a,this.hi<>24-a);if(a<48)return new +q(0,this.lo<>48-a);return new +q(0,0,this.lo<>a|this.mi<<24-a,this.mi>>a|this.hi<<24-a,this.hi>>a);if(a<48)return new +q(this.mi>>a-24|this.hi<<48-a,this.hi>>a-24,0);return new +q(this.hi>>a-48,0,0)};q.prototype.shift_right=function(a){a=a&63;if(a==0)return this;var +c=this.hi<<16>>16;if(a<24)return new +q(this.lo>>a|this.mi<<24-a,this.mi>>a|c<<24-a,this.hi<<16>>a>>>16);var +b=this.hi<<16>>31;if(a<48)return new +q(this.mi>>a-24|this.hi<<48-a,this.hi<<16>>a-24>>16,b&by);return new +q(this.hi<<16>>a-32,b,b)};q.prototype.lsl1=function(){this.hi=this.hi<<1|this.mi>>23;this.mi=(this.mi<<1|this.lo>>23)&bO;this.lo=this.lo<<1&bO};q.prototype.lsr1=function(){this.lo=(this.lo>>>1|this.mi<<23)&bO;this.mi=(this.mi>>>1|this.hi<<23)&bO;this.hi=this.hi>>>1};q.prototype.udivmod=function(a){var +d=0,c=this.copy(),b=a.copy(),e=new +q(0,0,0);while(c.ucompare(b)>0){d++;b.lsl1()}while(d>=0){d--;e.lsl1();if(c.ucompare(b)>=0){e.lo++;c=c.sub(b)}b.lsr1()}return{quotient:e,modulus:c}};q.prototype.div=function(a){var +b=this;if(a.isZero())j$();var +d=b.hi^a.hi;if(b.hi&bv)b=b.neg();if(a.hi&bv)a=a.neg();var +c=b.udivmod(a).quotient;if(d&bv)c=c.neg();return c};q.prototype.mod=function(a){var +b=this;if(a.isZero())j$();var +d=b.hi;if(b.hi&bv)b=b.neg();if(a.hi&bv)a=a.neg();var +c=b.udivmod(a).modulus;if(d&bv)c=c.neg();return c};q.prototype.toInt=function(){return this.lo|this.mi<<24};q.prototype.toFloat=function(){return(this.hi<<16)*Math.pow(2,32)+this.mi*Math.pow(2,24)+this.lo};q.prototype.toArray=function(){return[this.hi>>8,this.hi&bT,this.mi>>16,this.mi>>8&bT,this.mi&bT,this.lo>>16,this.lo>>8&bT,this.lo&bT]};q.prototype.lo32=function(){return this.lo|(this.mi&bT)<<24};q.prototype.hi32=function(){return this.mi>>>8&by|this.hi<<16};function +O$(a,b){return new +q(a&bO,a>>>24&bT|(b&by)<<8,b>>>16&by)}function +j5(a){return a.hi32()}function +j6(a){return a.lo32()}function +cK(){X(i2)}var +OM=gs;function +cg(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}cg.prototype.caml_custom=OM;cg.prototype.offset=function(a){var +c=0;if(typeof +a==="number")a=[a];if(!(a +instanceof +Array))X("bigarray.js: invalid offset");if(this.dims.length!=a.length)X("Bigarray.get/set: bad number of dimensions");if(this.layout==0)for(var +b=0;b=this.dims[b])cK();c=c*this.dims[b]+a[b]}else +for(var +b=this.dims.length-1;b>=0;b--){if(a[b]<1||a[b]>this.dims[b])cK();c=c*this.dims[b]+(a[b]-1)}return c};cg.prototype.get=function(a){switch(this.kind){case +7:var +d=this.data[a*2+0],b=this.data[a*2+1];return O$(d,b);case +10:case +11:var +e=this.data[a*2+0],c=this.data[a*2+1];return[dx,e,c];default:return this.data[a]}};cg.prototype.set=function(a,b){switch(this.kind){case +7:this.data[a*2+0]=j6(b);this.data[a*2+1]=j5(b);break;case +10:case +11:this.data[a*2+0]=b[1];this.data[a*2+1]=b[2];break;default:this.data[a]=b;break}return 0};cg.prototype.fill=function(a){switch(this.kind){case +7:var +c=j6(a),e=j5(a);if(c==e)this.data.fill(c);else +for(var +b=0;be)return 1;if(d!=e){if(!b)return NaN;if(d==d)return 1;if(e==e)return-1}}break;case +7:for(var +c=0;ca.data[c+1])return 1;if(this.data[c]>>>0>>0)return-1;if(this.data[c]>>>0>a.data[c]>>>0)return 1}break;case +2:case +3:case +4:case +5:case +6:case +8:case +9:case +12:for(var +c=0;ca.data[c])return 1}break}return 0};function +dE(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}dE.prototype=new +cg();dE.prototype.offset=function(a){if(typeof +a!=="number")if(a +instanceof +Array&&a.length==1)a=a[0];else +X("Ml_Bigarray_c_1_1.offset");if(a<0||a>=this.dims[0])cK();return a};dE.prototype.get=function(a){return this.data[a]};dE.prototype.set=function(a,b){this.data[a]=b;return 0};dE.prototype.fill=function(a){this.data.fill(a);return 0};function +jW(a,b,c,d){var +e=rf(a);if(gN(c)*e!=d.length)X("length doesn't match dims");if(b==0&&c.length==1&&e==1)return new +dE(a,b,c,d);return new +cg(a,b,c,d)}function +gV(a){return a.slice(1)}function +OL(a,b,c){var +d=gV(c),e=rd(a,gN(d));return jW(a,b,d,e)}function +ON(a,b){if(b<0||b>=a.dims.length)X("Bigarray.dim");return a.dims[b]}function +OO(a){return ON(a,0)}function +OP(a,b){return a.get(a.offset(b))}function +eQ(a,b,c){var +d=String.fromCharCode;if(b==0&&c<=4096&&c==a.length)return d.apply(null,a);var +f=e;for(;0=c.l||c.t==2&&e>=c.c.length)){c.c=a.t==4?eQ(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else if(c.t==2&&d==c.c.length){c.c+=a.t==4?eQ(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else{if(c.t!=4)gR(c);var +g=a.c,h=c.c;if(a.t==4)if(d<=b)for(var +f=0;f=0;f--)h[d+f]=g[b+f];else{var +i=Math.min(e,g.length-b);for(var +f=0;f>=1;if(a==0)return d;b+=b;c++;if(c==9)b.slice(0,1)}}function +eG(a){if(a.t==2)a.c+=dI(a.l-a.c.length,"\0");else +a.c=eQ(a.c,0,a.c.length);a.t=0}function +kc(a){if(a.length<24){for(var +b=0;bdu)return false;return true}else +return!/[^\x00-\x7f]/.test(a)}function +rG(a){for(var +k=e,d=e,h,g,i,b,c=0,j=a.length;ci6){d.substr(0,1);k+=d;d=e;k+=a.slice(c,f)}else +d+=a.slice(c,f);if(f==j)break;c=f}b=1;if(++c=0xd7ff&&b<0xe000)b=2}else{b=3;if(++c0x10ffff)b=3}}}}}if(b<4){c-=b;d+="\ufffd"}else if(b>by)d+=String.fromCharCode(0xd7c0+(b>>10),pC+(b&0x3FF));else +d+=String.fromCharCode(b);if(d.length>dt){d.substr(0,1);k+=d;d=e}}return k+d}function +bU(a,b,c){this.t=a;this.c=b;this.l=c}bU.prototype.toString=function(){switch(this.t){case +9:return this.c;default:eG(this);case +0:if(kc(this.c)){this.t=9;return this.c}this.t=8;case +8:return this.c}};bU.prototype.toUtf16=function(){var +a=this.toString();if(this.t==9)return a;return rG(a)};bU.prototype.slice=function(){var +a=this.t==4?this.c.slice():this.c;return new +bU(this.t,a,this.l)};function +rj(a){return new +bU(0,a,a.length)}function +bq(a){return a}function +ci(a){return rj(bq(a))}function +ch(a,b,c,d,e){bc(ci(a),b,c,d,e);return 0}function +m(a){return a.length}function +aP(a,b){return a.charCodeAt(b)}function +rF(a){var +d=m(a),c=new +Uint8Array(d),b=0;for(;bm(a))cK();if(f+e>c.data.length)cK();var +g=rF(a).slice(b,b+e);c.data.set(g,f);return 0}var +OR=OQ;function +ri(){X(i2)}function +cL(a,b){switch(a.t&6){default:if(b>=a.c.length)return 0;case +0:return a.c.charCodeAt(b);case +4:return a.c[b]}}function +gO(a,b){if(b>>>0>=a.l)ri();return cL(a,b)}function +S(a,b,c){c&=bT;if(a.t!=4){if(b==a.c.length){a.c+=String.fromCharCode(c);if(b+1==a.l)a.t=0;return 0}gR(a)}a.c[b]=c;return 0}function +R(a,b,c){if(b>>>0>=a.l)ri();return S(a,b,c)}function +bV(d,c){var +f=d.l>=0?d.l:d.l=d.length,e=c.length,b=f-e;if(b==0)return d.apply(null,c);else if(b<0){var +a=d.apply(null,c.slice(0,f));if(typeof +a!=="function")return a;return bV(a,c.slice(f))}else{switch(b){case +1:{var +a=function(a){var +f=new +Array(e+1);for(var +b=0;b>>0>=a.length-1)cK();return a}function +gQ(a){if(isFinite(a)){if(Math.abs(a)>=2.2250738585072014e-308)return 0;if(a!=0)return 1;return 2}return isNaN(a)?4:3}function +rt(a){return 0}var +PS=Math.log2&&Math.log2(1.1235582092889474E+307)==1020;function +PR(a){if(PS)return Math.floor(Math.log2(a));var +b=0;if(a==0)return-Infinity;if(a>=1)while(a>=2){a/=2;b++}else +while(a<1){a*=2;b--}return b}function +j3(a){var +b=new +Float32Array(1);b[0]=a;var +c=new +Int32Array(b.buffer);return c[0]|0}function +cM(a,b,c){return new +q(a,b,c)}function +gS(a){if(!isFinite(a)){if(isNaN(a))return cM(1,0,oF);return a>0?cM(0,0,oF):cM(0,0,0xfff0)}var +f=a==0&&1/a==-Infinity?bv:a>=0?0:bv;if(f)a=-a;var +b=PR(a)+ep;if(b<=0){b=0;a/=Math.pow(2,-od)}else{a/=Math.pow(2,b-o1);if(a<16){a*=2;b-=1}if(b==0)a/=2}var +d=Math.pow(2,24),c=a|0;a=(a-c)*d;var +e=a|0;a=(a-e)*d;var +g=a|0;c=c&jH|f|b<<4;return cM(g,e,c)}function +eM(a){return a.toArray()}function +rh(a,b,c){a.write(32,b.dims.length);a.write(32,b.kind|b.layout<<8);if(b.caml_custom==gs)for(var +d=0;d>4;if(d==ok)return(f|g|c&jH)==0?c&bv?-Infinity:Infinity:NaN;var +e=Math.pow(2,-24),b=(f*e+g)*e+(c&jH);if(d>0){b+=16;b*=Math.pow(2,d-o1)}else +b*=Math.pow(2,-od);if(c&bv)b=-b;return b}function +aW(a){if(!aD.Failure)aD.Failure=[c,a8(jV),-3];j_(aD.Failure,a)}function +re(a,b,c){var +k=a.read32s();if(k<0||k>16)aW("input_value: wrong number of bigarray dimensions");var +r=a.read32s(),l=r&bT,q=r>>8&1,j=[];if(c==gs)for(var +d=0;d>>32-15;b=eO(b,0x1b873593);a^=b;a=a<<13|a>>>32-13;return(a+(a<<2)|0)+(0xe6546b64|0)|0}function +O6(a,b){a=aE(a,j6(b));a=aE(a,j5(b));return a}function +j1(a,b){return O6(a,gS(b))}function +rg(a){var +c=gN(a.dims),d=0;switch(a.kind){case +2:case +3:case +12:if(c>bP)c=bP;var +e=0,b=0;for(b=0;b+4<=a.data.length;b+=4){e=a.data[b+0]|a.data[b+1]<<8|a.data[b+2]<<16|a.data[b+3]<<24;d=aE(d,e)}e=0;switch(c&3){case +3:e=a.data[b+2]<<16;case +2:e|=a.data[b+1]<<8;case +1:e|=a.data[b+0];d=aE(d,e)}break;case +4:case +5:if(c>I)c=I;var +e=0,b=0;for(b=0;b+2<=a.data.length;b+=2){e=a.data[b+0]|a.data[b+1]<<16;d=aE(d,e)}if((c&1)!=0)d=aE(d,a.data[b]);break;case +6:if(c>64)c=64;for(var +b=0;b64)c=64;for(var +b=0;b32)c=32;c*=2;for(var +b=0;b64)c=64;for(var +b=0;b32)c=32;for(var +b=0;b0?f(b,a,d):f(a,b,d);if(d&&e!=e)return c;if(+e!=+e)return+e;if((e|0)!=0)return e|0}return c}function +gU(a){return typeof +a==="string"&&!/[^\x00-\xff]/.test(a)}function +gT(a){return a +instanceof +bU}function +rl(a){if(typeof +a==="number")return eB;else if(gT(a))return ew;else if(gU(a))return 1252;else if(a +instanceof +Array&&a[0]===a[0]>>>0&&a[0]<=ac){var +b=a[0]|0;return b==dx?0:b}else if(a +instanceof +String)return pE;else if(typeof +a=="string")return pE;else if(a +instanceof +Number)return eB;else if(a&&a.caml_custom)return jO;else if(a&&a.compare)return 1256;else if(typeof +a=="function")return 1247;else if(typeof +a=="symbol")return 1251;return 1001}function +rr(a,b){if(ab?1:0}function +OT(a,b){a.t&6&&eG(a);b.t&6&&eG(b);return a.cb.c?1:0}function +dF(a,b,c){var +f=[];for(;;){if(!(c&&a===b)){var +e=rl(a);if(e==bM){a=a[1];continue}var +g=rl(b);if(g==bM){b=b[1];continue}if(e!==g){if(e==eB){if(g==jO)return rk(a,b,-1,c);return-1}if(g==eB){if(e==jO)return rk(b,a,1,c);return 1}return eb)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case +1001:if(ab)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case +1251:if(a!==b){if(!c)return NaN;return 1}break;case +1252:var +a=bq(a),b=bq(b);if(a!==b){if(ab)return 1}break;case +12520:var +a=a.toString(),b=b.toString();if(a!==b){if(ab)return 1}break;case +246:case +254:default:if(rt(e)){X("compare: continuation value");break}if(a.length!=b.length)return a.length1)f.push(a,b,1);break}}if(f.length==0)return 0;var +h=f.pop();b=f.pop();a=f.pop();if(h+10)if(b==0&&(c>=a.l||a.t==2&&c>=a.c.length))if(d==0){a.c=e;a.t=2}else{a.c=dI(c,String.fromCharCode(d));a.t=c==a.l?0:2}else{if(a.t!=4)gR(a);for(c+=b;b0&&b===b)return b;a=a.replace(/_/g,e);b=+a;if(a.length>0&&b===b||/^[+-]?nan$/i.test(a))return b;var +c=/^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(a);if(c){var +d=c[3].replace(/0+$/,e),g=parseInt(c[1]+c[2]+d,16),f=(c[5]|0)-4*d.length;b=g*Math.pow(2,f);return b}if(/^\+?inf(inity)?$/i.test(a))return Infinity;if(/^-inf(inity)?$/i.test(a))return-Infinity;aW("float_of_string")}function +j9(a){a=bq(a);var +e=a.length;if(e>31)X("format_int: format too long");var +b={justify:dA,signstyle:cH,filler:aO,alternate:false,base:0,signedconv:false,width:0,uppercase:false,sign:1,prec:-1,conv:"f"};for(var +d=0;d=0&&c<=9){b.width=b.width*10+c;d++}d--;break;case".":b.prec=0;d++;while(c=a.charCodeAt(d)-48,c>=0&&c<=9){b.prec=b.prec*10+c;d++}d--;case"d":case"i":b.signedconv=true;case"u":b.base=10;break;case"x":b.base=16;break;case"X":b.base=16;b.uppercase=true;break;case"o":b.base=8;break;case"e":case"f":case"g":b.signedconv=true;b.conv=c;break;case"E":case"F":case"G":b.signedconv=true;b.uppercase=true;b.conv=c.toLowerCase();break}}return b}function +jZ(a,b){if(a.uppercase)b=b.toUpperCase();var +f=b.length;if(a.signedconv&&(a.sign<0||a.signstyle!=cH))f++;if(a.alternate){if(a.base==8)f+=1;if(a.base==16)f+=2}var +c=e;if(a.justify==dA&&a.filler==aO)for(var +d=f;d20){c-=20;a/=Math.pow(10,c);a+=new +Array(c+1).join(aV);if(b>0)a=a+cc+new +Array(b+1).join(aV);return a}else +return a.toFixed(b)}}var +c,f=j9(a),e=f.prec<0?6:f.prec;if(b<0||b==0&&1/b==-Infinity){f.sign=-1;b=-b}if(isNaN(b)){c=i5;f.filler=aO}else if(!isFinite(b)){c="inf";f.filler=aO}else +switch(f.conv){case"e":var +c=b.toExponential(e),d=c.length;if(c.charAt(d-3)==jE)c=c.slice(0,d-1)+aV+c.slice(d-1);break;case"f":c=j(b,e);break;case"g":e=e?e:1;c=b.toExponential(e-1);var +i=c.indexOf(jE),h=+c.slice(i+1);if(h<-4||b>=1e21||b.toFixed(0).length>e){var +d=i-1;while(c.charAt(d)==aV)d--;if(c.charAt(d)==cc)d--;c=c.slice(0,d+1)+c.slice(i);d=c.length;if(c.charAt(d-3)==jE)c=c.slice(0,d-1)+aV+c.slice(d-1);break}else{var +g=e;if(h<0){g-=h+1;c=b.toFixed(g)}else +while(c=b.toFixed(g),c.length>e+1)g--;if(g){var +d=c.length-1;while(c.charAt(d)==aV)d--;if(c.charAt(d)==cc)d--;c=c.slice(0,d+1)}}break}return jZ(f,c)}function +eK(a,b){if(bq(a)==i1)return a8(e+b);var +c=j9(a);if(b<0)if(c.signedconv){c.sign=-1;b=-b}else +b>>>=0;var +d=b.toString(c.base);if(c.prec>=0){c.filler=aO;var +f=c.prec-d.length;if(f>0)d=dI(f,aV)+d}return jZ(c,d)}var +PE=0;function +O(){return PE++}function +C(a){if(kc(a))return a;return rG(a)}function +eS(){return typeof +z.process!=="undefined"&&typeof +z.process.versions!=="undefined"&&typeof +z.process.versions.node!=="undefined"}function +PT(){function +a(a){if(a.charAt(0)===bo)return[e,a.substring(1)];return}function +b(a){var +h=/^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/,b=h.exec(a),c=b[1]||e,f=Boolean(c&&c.charAt(1)!==":");if(Boolean(b[2]||f)){var +d=b[1]||e,g=b[2]||e;return[d,a.substring(d.length+g.length)]}return}return eS()&&z.process&&z.process.platform?z.process.platform==="win32"?b:a:a}var +kd=PT();function +rE(a){return a.slice(-1)!==bo?a+bo:a}if(eS()&&z.process&&z.process.cwd)var +eH=z.process.cwd().replace(/\\/g,bo);else +var +eH="/static";eH=rE(eH);function +Pr(a){a=C(a);if(!kd(a))a=eH+a;var +e=kd(a),d=e[1].split(bo),b=[];for(var +c=0;c1)b.pop();break;case".":break;case"":break;default:b.push(d[c]);break}b.unshift(e[0]);b.orig=a;return b}function +PQ(a){for(var +g=e,c=g,b,i,d=0,h=a.length;di6){c.substr(0,1);g+=c;c=e;g+=a.slice(d,f)}else +c+=a.slice(d,f);if(f==h)break;d=f}if(b>6);c+=String.fromCharCode(bb|b&cd)}else if(b<0xd800||b>=p0)c+=String.fromCharCode(pl|b>>12,bb|b>>6&cd,bb|b&cd);else if(b>=0xdbff||d+1==h||(i=a.charCodeAt(d+1))p0)c+="\xef\xbf\xbd";else{d++;b=(b<<10)+i-0x35fdc00;c+=String.fromCharCode(qc|b>>18,bb|b>>12&cd,bb|b>>6&cd,bb|b&cd)}if(c.length>dt){c.substr(0,1);g+=c;c=e}}return g+c}function +aX(a){return kc(a)?a8(a):a8(PQ(a))}var +PU=["E2BIG","EACCES","EAGAIN",i0,"EBUSY","ECHILD","EDEADLK","EDOM",q0,"EFAULT","EFBIG","EINTR","EINVAL","EIO","EISDIR","EMFILE","EMLINK","ENAMETOOLONG","ENFILE","ENODEV",jD,"ENOEXEC","ENOLCK","ENOMEM","ENOSPC","ENOSYS",jJ,qw,"ENOTTY","ENXIO","EPERM","EPIPE","ERANGE","EROFS","ESPIPE","ESRCH","EXDEV","EWOULDBLOCK","EINPROGRESS","EALREADY","ENOTSOCK","EDESTADDRREQ","EMSGSIZE","EPROTOTYPE","ENOPROTOOPT","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EOPNOTSUPP","EPFNOSUPPORT","EAFNOSUPPORT","EADDRINUSE","EADDRNOTAVAIL","ENETDOWN","ENETUNREACH","ENETRESET","ECONNABORTED","ECONNRESET","ENOBUFS","EISCONN","ENOTCONN","ESHUTDOWN","ETOOMANYREFS","ETIMEDOUT","ECONNREFUSED","EHOSTDOWN","EHOSTUNREACH","ELOOP","EOVERFLOW"];function +b0(a,b,c,d){var +f=PU.indexOf(a);if(f<0){if(d==null)d=-9999;f=[0,d]}var +g=[f,aX(b||e),aX(c||e)];return g}var +rz={};function +ck(a){return rz[a]}function +bZ(a,b){throw h([0,a].concat(b))}function +jX(a){if(!(a +instanceof +Uint8Array))a=new +Uint8Array(a);return new +bU(4,a,a.length)}function +v(a){j_(aD.Sys_error,a)}function +rC(a){v(a+gF)}function +eR(a){if(a.t!=4)gR(a);return a.c}function +au(a){return a.l}function +rb(){}function +aJ(a){this.data=a}aJ.prototype=new +rb();aJ.prototype.constructor=aJ;aJ.prototype.truncate=function(a){var +b=this.data;this.data=M(a|0);bc(b,0,this.data,0,a)};aJ.prototype.length=function(){return au(this.data)};aJ.prototype.write=function(a,b,c,d){var +e=this.length();if(a+d>=e){var +f=M(a+d),g=this.data;this.data=f;bc(g,0,this.data,0,e)}bc(jX(b),c,this.data,a,d);return 0};aJ.prototype.read=function(a,b,c,d){var +e=this.length();if(a+d>=e)d=e-a;if(d){var +f=M(d|0);bc(this.data,a,f,0,d);b.set(eR(f),c)}return d};function +cJ(a,b,c){this.file=b;this.name=a;this.flags=c}cJ.prototype.err_closed=function(){v(this.name+pG)};cJ.prototype.length=function(){if(this.file)return this.file.length();this.err_closed()};cJ.prototype.write=function(a,b,c,d){if(this.file)return this.file.write(a,b,c,d);this.err_closed()};cJ.prototype.read=function(a,b,c,d){if(this.file)return this.file.read(a,b,c,d);this.err_closed()};cJ.prototype.close=function(){this.file=undefined};function +al(a,b){this.content={};this.root=a;this.lookupFun=b}al.prototype.nm=function(a){return this.root+a};al.prototype.create_dir_if_needed=function(a){var +d=a.split(bo),c=e;for(var +b=0;b=0)}function +j2(a,b){var +e=b.length,c,d;for(c=0;c+4<=e;c+=4){d=b.charCodeAt(c)|b.charCodeAt(c+1)<<8|b.charCodeAt(c+2)<<16|b.charCodeAt(c+3)<<24;a=aE(a,d)}d=0;switch(e&3){case +3:d=b.charCodeAt(c+2)<<16;case +2:d|=b.charCodeAt(c+1)<<8;case +1:d|=b.charCodeAt(c);a=aE(a,d)}a^=e;return a}function +O7(a,b){return j2(a,bq(b))}function +O4(a,b){var +e=b.length,c,d;for(c=0;c+4<=e;c+=4){d=b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24;a=aE(a,d)}d=0;switch(e&3){case +3:d=b[c+2]<<16;case +2:d|=b[c+1]<<8;case +1:d|=b[c];a=aE(a,d)}a^=e;return a}function +Pu(a){switch(a.t&6){default:eG(a);case +0:return a.c;case +4:return a.c}}function +O3(a,b){var +c=Pu(b);return typeof +c==="string"?j2(a,c):O4(a,c)}function +O5(a){a^=a>>>16;a=eO(a,0x85ebca6b|0);a^=a>>>13;a=eO(a,0xc2b2ae35|0);a^=a>>>16;return a}function +O2(a,b,c,d){var +j,k,l,h,g,f,e,i,m;h=b;if(h<0||h>bP)h=bP;g=a;f=c;j=[d];k=0;l=1;while(k0){e=j[k++];if(e&&e.caml_custom){if(eI[e.caml_custom]&&eI[e.caml_custom].hash){var +n=eI[e.caml_custom].hash(e);f=aE(f,n);g--}}else if(e +instanceof +Array&&e[0]===(e[0]|0))switch(e[0]){case +248:f=aE(f,e[2]);g--;break;case +250:j[--k]=e[1];break;default:if(rt(e[0]))break;var +o=e.length-1<<10|e[0];f=aE(f,o);for(i=1,m=e.length;i=h)break;j[l++]=e[i]}break}else if(gT(e)){f=O3(f,e);g--}else if(gU(e)){f=O7(f,e);g--}else if(typeof +e==="string"){f=j2(f,e);g--}else if(e===(e|0)){f=aE(f,e+e+1);g--}else if(typeof +e==="number"){f=j1(f,e);g--}}f=O5(f);return f&0x3FFFFFFF}function +O8(a,b,c){if(!isFinite(a)){if(isNaN(a))return aX(i5);return aX(a>0?oy:"-infinity")}var +k=a==0&&1/a==-Infinity?1:a>=0?0:1;if(k)a=-a;var +f=0;if(a==0);else if(a<1)while(a<1&&f>-1022){a*=2;f--}else +while(a>=2){a/=2;f++}var +l=f<0?e:dA,g=e;if(k)g=cH;else +switch(c){case +43:g=dA;break;case +32:g=aO;break;default:break}if(b>=0&&b<13){var +i=Math.pow(2,b*4);a=Math.round(a*i)/i}var +d=a.toString(16);if(b>=0){var +j=d.indexOf(cc);if(j<0)d+=cc+dI(b,aV);else{var +h=j+1+b;if(d.length>24&bO,a>>31&by)}function +Ph(a){return a.toInt()}function +Pc(a){return+a.isNeg()}function +Pf(a){return a.neg()}function +Pa(a,b){var +c=j9(a);if(c.signedconv&&Pc(b)){c.sign=-1;b=Pf(b)}var +d=e,i=Pg(c.base),h="0123456789abcdef";do{var +g=b.udivmod(i);b=g.quotient;d=h.charAt(Ph(g.modulus))+d}while(!Pd(b));if(c.prec>=0){c.filler=aO;var +f=c.prec-d.length;if(f>0)d=dI(f,aV)+d}return jZ(c,d)}function +PF(a){var +b=0,e=m(a),c=10,d=1;if(e>0)switch(aP(a,b)){case +45:b++;d=-1;break;case +43:b++;d=1;break}if(b+1=48&&a<=57)return a-48;if(a>=65&&a<=90)return a-55;if(a>=97&&a<=qC)return a-87;return-1}function +rs(a){var +h=PF(a),d=h[0],i=h[1],e=h[2],g=m(a),j=-1>>>0,f=d=e)aW(gL);var +b=c;for(d++;d=e)break;b=e*b+c;if(b>j)aW(gL)}if(d!=g)aW(gL);b=i*b;if(e==10&&(b|0)!=b)aW(gL);return b|0}function +dH(a,b,c){return a[C(b)].apply(a,gV(c))}function +Pk(a,b){switch(b.length){case +1:return new +a;case +2:return new +a(b[1]);case +3:return new +a(b[1],b[2]);case +4:return new +a(b[1],b[2],b[3]);case +5:return new +a(b[1],b[2],b[3],b[4]);case +6:return new +a(b[1],b[2],b[3],b[4],b[5]);case +7:return new +a(b[1],b[2],b[3],b[4],b[5],b[6]);case +8:return new +a(b[1],b[2],b[3],b[4],b[5],b[6],b[7])}function +c(){return a.apply(this,gV(b))}c.prototype=a.prototype;return new +c}function +Pl(a){var +c={};for(var +b=1;b>16;return c}function +ru(a,b,c){var +o=2,p=3,s=5,e=6,i=7,h=8,k=9,n=1,m=2,r=3,t=4,q=5;if(!a.lex_default){a.lex_base=eN(a[n]);a.lex_backtrk=eN(a[m]);a.lex_check=eN(a[q]);a.lex_trans=eN(a[t]);a.lex_default=eN(a[r])}var +f,d=b,l=eR(c[o]);if(d>=0){c[i]=c[s]=c[e];c[h]=-1}else +d=-d-1;for(;;){var +g=a.lex_base[d];if(g<0)return-g-1;var +j=a.lex_backtrk[d];if(j>=0){c[i]=c[e];c[h]=j}if(c[e]>=c[p])if(c[k]==0)return-d-1;else +f=bP;else{f=l[c[e]];c[e]++}if(a.lex_check[g+f]==d)d=a.lex_trans[g+f];else +d=a.lex_default[d];if(d<0){c[e]=c[i];if(c[h]==-1)aW("lexing: empty token");else +return c[h]}else if(f==bP)c[k]=0}}function +Pp(a){var +c=0;for(var +b=a.length-1;b>=0;b--){var +d=a[b];c=[0,d,c]}return c}function +Pq(a){var +b=[];for(;a!==0;a=a[2])b.push(a[1]);return b}function +bz(a,b){if(a<0)cK();var +a=a+1|0,c=new +Array(a);c[0]=0;for(var +d=1;d>>32-e,c)}function +g(a,b,c,d,e,f,g){return l(b&c|~b&d,a,b,e,f,g)}function +h(a,b,c,d,e,f,g){return l(b&d|c&~d,a,b,e,f,g)}function +i(a,b,c,d,e,f,g){return l(b^c^d,a,b,e,f,g)}function +j(a,b,c,d,e,f,g){return l(c^(b|~d),a,b,e,f,g)}return function(a,b){var +c=a[0],d=a[1],e=a[2],f=a[3];c=g(c,d,e,f,b[0],7,0xD76AA478);f=g(f,c,d,e,b[1],12,0xE8C7B756);e=g(e,f,c,d,b[2],17,0x242070DB);d=g(d,e,f,c,b[3],22,0xC1BDCEEE);c=g(c,d,e,f,b[4],7,0xF57C0FAF);f=g(f,c,d,e,b[5],12,0x4787C62A);e=g(e,f,c,d,b[6],17,0xA8304613);d=g(d,e,f,c,b[7],22,0xFD469501);c=g(c,d,e,f,b[8],7,0x698098D8);f=g(f,c,d,e,b[9],12,0x8B44F7AF);e=g(e,f,c,d,b[10],17,0xFFFF5BB1);d=g(d,e,f,c,b[11],22,0x895CD7BE);c=g(c,d,e,f,b[12],7,0x6B901122);f=g(f,c,d,e,b[13],12,0xFD987193);e=g(e,f,c,d,b[14],17,0xA679438E);d=g(d,e,f,c,b[15],22,0x49B40821);c=h(c,d,e,f,b[1],5,0xF61E2562);f=h(f,c,d,e,b[6],9,0xC040B340);e=h(e,f,c,d,b[11],14,0x265E5A51);d=h(d,e,f,c,b[0],20,0xE9B6C7AA);c=h(c,d,e,f,b[5],5,0xD62F105D);f=h(f,c,d,e,b[10],9,0x02441453);e=h(e,f,c,d,b[15],14,0xD8A1E681);d=h(d,e,f,c,b[4],20,0xE7D3FBC8);c=h(c,d,e,f,b[9],5,0x21E1CDE6);f=h(f,c,d,e,b[14],9,0xC33707D6);e=h(e,f,c,d,b[3],14,0xF4D50D87);d=h(d,e,f,c,b[8],20,0x455A14ED);c=h(c,d,e,f,b[13],5,0xA9E3E905);f=h(f,c,d,e,b[2],9,0xFCEFA3F8);e=h(e,f,c,d,b[7],14,0x676F02D9);d=h(d,e,f,c,b[12],20,0x8D2A4C8A);c=i(c,d,e,f,b[5],4,0xFFFA3942);f=i(f,c,d,e,b[8],11,0x8771F681);e=i(e,f,c,d,b[11],16,0x6D9D6122);d=i(d,e,f,c,b[14],23,0xFDE5380C);c=i(c,d,e,f,b[1],4,0xA4BEEA44);f=i(f,c,d,e,b[4],11,0x4BDECFA9);e=i(e,f,c,d,b[7],16,0xF6BB4B60);d=i(d,e,f,c,b[10],23,0xBEBFBC70);c=i(c,d,e,f,b[13],4,0x289B7EC6);f=i(f,c,d,e,b[0],11,0xEAA127FA);e=i(e,f,c,d,b[3],16,0xD4EF3085);d=i(d,e,f,c,b[6],23,0x04881D05);c=i(c,d,e,f,b[9],4,0xD9D4D039);f=i(f,c,d,e,b[12],11,0xE6DB99E5);e=i(e,f,c,d,b[15],16,0x1FA27CF8);d=i(d,e,f,c,b[2],23,0xC4AC5665);c=j(c,d,e,f,b[0],6,0xF4292244);f=j(f,c,d,e,b[7],10,0x432AFF97);e=j(e,f,c,d,b[14],15,0xAB9423A7);d=j(d,e,f,c,b[5],21,0xFC93A039);c=j(c,d,e,f,b[12],6,0x655B59C3);f=j(f,c,d,e,b[3],10,0x8F0CCC92);e=j(e,f,c,d,b[10],15,0xFFEFF47D);d=j(d,e,f,c,b[1],21,0x85845DD1);c=j(c,d,e,f,b[8],6,0x6FA87E4F);f=j(f,c,d,e,b[15],10,0xFE2CE6E0);e=j(e,f,c,d,b[6],15,0xA3014314);d=j(d,e,f,c,b[13],21,0x4E0811A1);c=j(c,d,e,f,b[4],6,0xF7537E82);f=j(f,c,d,e,b[11],10,0xBD3AF235);e=j(e,f,c,d,b[2],15,0x2AD7D2BB);d=j(d,e,f,c,b[9],21,0xEB86D391);a[0]=k(c,a[0]);a[1]=k(d,a[1]);a[2]=k(e,a[2]);a[3]=k(f,a[3])}}();function +OI(a,b,c){var +e=a.len&cd,d=0;a.len+=c;if(e){var +f=64-e;if(c=64){a.b8.set(b.subarray(d,d+64),0);gM(a.w,a.b32);c-=64;d+=64}if(c)a.b8.set(b.subarray(d,d+c),0)}function +OG(a){var +c=a.len&cd;a.b8[c]=bb;c++;if(c>56){for(var +b=c;b<64;b++)a.b8[b]=0;gM(a.w,a.b32);for(var +b=0;b<56;b++)a.b8[b]=0}else +for(var +b=c;b<56;b++)a.b8[b]=0;a.b32[14]=a.len<<3;a.b32[15]=a.len>>29&0x1FFFFFFF;gM(a.w,a.b32);var +e=new +Uint8Array(16);for(var +d=0;d<4;d++)for(var +b=0;b<4;b++)e[d*4+b]=a.w[d]>>8*b&0xFF;return e}function +PL(a){return a8(eQ(a,0,a.length))}function +Ps(a,b,c){var +d=OH(),e=eR(a);OI(d,e.subarray(b,b+c),c);return PL(OG(d))}function +Pt(a,b,c){return Ps(ci(a),b,c)}function +Pv(){return 0}var +cj=new +Array();function +j7(a){return cj[a]}function +cN(a){var +b=j7(a);if(!b.opened)v("Cannot flush a closed channel");if(!b.buffer||b.buffer_curr==0)return 0;if(b.output)b.output(eQ(b.buffer,0,b.buffer_curr));else +b.file.write(b.offset,b.buffer,0,b.buffer_curr);b.offset+=b.buffer_curr;b.buffer_curr=0;return 0}function +PI(a){if(a.refill!=null){var +e=a.refill(),b=rF(e);if(b.length==0)a.refill=null;else{if(a.buffer.length0){b.set(e.buffer.subarray(e.buffer_curr,e.buffer_curr+f),c);e.buffer_curr+=f;g=f}else{e.buffer_curr=0;e.buffer_max=0;PI(e);var +f=e.buffer_max-e.buffer_curr;if(g>f)g=f;b.set(e.buffer.subarray(e.buffer_curr,e.buffer_curr+g),c);e.buffer_curr+=g}return g|0}function +Pw(a,b,c,d){var +e=eR(b);return Px(a,e,c,d)}function +PN(a,b){if(b.name)try{var +d=require(i7),c=d.openSync(b.name,"rs");return new +bp(c,b)}catch(f){}return new +bp(a,b)}var +gZ=new +Array(3);function +eF(a,b){aJ.call(this,M(0));this.log=function(a){return 0};if(a==1&&typeof +console.log=="function")this.log=console.log;else if(a==2&&typeof +console.error=="function")this.log=console.error;else if(typeof +console.log=="function")this.log=console.log;this.flags=b}eF.prototype.length=function(){return 0};eF.prototype.write=function(a,b,c,d){if(this.log){if(d>0&&c>=0&&c+d<=b.length&&b[c+d-1]==10)d--;var +e=M(d);bc(jX(b),c,e,0,d);this.log(e.toUtf16());return 0}v(this.fd+pG)};eF.prototype.read=function(a,b,c,d){v(this.fd+": file descriptor is write only")};eF.prototype.close=function(){this.log=undefined};function +g0(a,b){if(b==undefined)b=gZ.length;gZ[b]=a;return b|0}function +PV(a,b,c){var +d={};while(b){switch(b[1]){case +0:d.rdonly=1;break;case +1:d.wronly=1;break;case +2:d.append=1;break;case +3:d.create=1;break;case +4:d.truncate=1;break;case +5:d.excl=1;break;case +6:d.binary=1;break;case +7:d.text=1;break;case +8:d.nonblock=1;break}b=b[2]}if(d.rdonly&&d.wronly)v(bq(a)+jT);if(d.text&&d.binary)v(bq(a)+jt);var +e=rJ(a),f=e.device.open(e.rest,d);return g0(f,undefined)}(function(){function +a(a,b){return eS()?PN(a,b):new +eF(a,b)}g0(a(0,{rdonly:1,altname:"/dev/stdin",isCharacterDevice:true}),0);g0(a(1,{buffered:2,wronly:1,isCharacterDevice:true}),1);g0(a(2,{buffered:2,wronly:1,isCharacterDevice:true}),2)}());function +Py(a){var +b=gZ[a];if(b.flags.wronly)v(qd+a+" is writeonly");var +d=null,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:false,buffer_curr:0,buffer_max:0,buffer:new +Uint8Array(dn),refill:d};cj[c.fd]=c;return c.fd}function +rv(a){var +b=gZ[a];if(b.flags.rdonly)v(qd+a+" is readonly");var +d=b.flags.buffered!==undefined?b.flags.buffered:1,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:true,buffer_curr:0,buffer:new +Uint8Array(dn),buffered:d};cj[c.fd]=c;return c.fd}function +Pz(){var +b=0;for(var +a=0;ae.buffer.length){var +g=new +Uint8Array(e.buffer_curr+b.length);g.set(e.buffer);e.buffer=g}switch(e.buffered){case +0:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;cN(a);break;case +1:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)cN(a);break;case +2:var +f=b.lastIndexOf(10);if(f<0){e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)cN(a)}else{e.buffer.set(b.subarray(0,f+1),e.buffer_curr);e.buffer_curr+=f+1;cN(a);e.buffer.set(b.subarray(f+1),e.buffer_curr);e.buffer_curr+=b.length-f-1}break}return 0}function +PA(a,b,c,d){var +b=eR(b);return PB(a,b,c,d)}function +j8(a,b,c,d){return PA(a,ci(b),c,d)}function +rw(a,b){var +c=a8(String.fromCharCode(b));j8(a,c,0,1);return 0}function +rx(a,b){if(b==0)j$();return a%b}function +ry(a){if(isFinite(a)){var +d=1/a<0;a=Math.abs(a);var +b=Math.floor(a),c=a-b;if(d){b=-b;c=-c}return[0,c,b]}if(isNaN(a))return[0,NaN,NaN];return[0,1/a,a]}function +eP(a,b){return+(dF(a,b,false)!=0)}function +PD(a,b){a[0]=bM;a[1]=b;return 0}function +bY(a){if(a +instanceof +Array&&a[0]==a[0]>>>0)return a[0];else if(gT(a))return ew;else if(gU(a))return ew;else if(a +instanceof +Function||typeof +a=="function")return 247;else if(a&&a.caml_custom)return ac;else +return eB}function +OS(a){var +c={};if(a)for(var +b=1;b=0)a=e;else +aW("caml_register_global: cannot locate "+d)}}aD[a+1]=b;if(c)aD[c]=b}function +kb(a,b){rz[bq(a)]=b;return 0}function +PK(){X(i2)}function +E(a,b){if(b>>>0>=m(a))PK();return aP(a,b)}function +gY(a){a.t&6&&eG(a);return a8(a.c)}function +PM(){return 0x7FFFFFFF/4|0}function +PG(){rB(aD.Not_found)}function +rD(a){var +b=rI(C(a));if(b===undefined)PG();return aX(b)}function +PO(){if(z.crypto)if(z.crypto.getRandomValues){var +a=z.crypto.getRandomValues(new +Int32Array(4));return[0,a[0],a[1],a[2],a[3]]}else if(z.crypto.randomBytes){var +a=new +Int32Array(z.crypto.randomBytes(16).buffer);return[0,a[0],a[1],a[2],a[3]]}var +b=new +Date().getTime(),c=b^0xffffffff*Math.random();return[0,c]}function +aY(a){var +b=1;while(a&&a.joo_tramp){a=a.joo_tramp.apply(null,a.joo_args);b++}return a}function +k(a,b){return{joo_tramp:a,joo_args:b}}function +PP(a,b){if(b.fun){a.fun=b.fun;return 0}if(typeof +b==="function"){a.fun=b;return 0}var +c=b.length;while(c--)a[c]=b[c];return 0}function +B(a){{if(a +instanceof +Array)return a;var +b;if(z.RangeError&&a +instanceof +z.RangeError&&a.message&&a.message.match(/maximum call stack/i))b=aD.Stack_overflow;else if(z.InternalError&&a +instanceof +z.InternalError&&a.message&&a.message.match(/too much recursion/i))b=aD.Stack_overflow;else if(a +instanceof +z.Error&&ck(jj))b=[0,ck(jj),a];else +b=[0,aD.Failure,aX(String(a))];if(a +instanceof +z.Error)b.js_error=a;return b}}function +Pj(a){switch(a[2]){case-8:case-11:case-12:return 1;default:return 0}}function +OY(a){var +b=e;if(a[0]==0){b+=a[1][1];if(a.length==3&&a[2][0]==0&&Pj(a[1]))var +g=a[2],h=1;else +var +h=2,g=a;b+="(";for(var +f=h;fh)b+=gy;var +d=g[f];if(typeof +d=="number")b+=d.toString();else if(d +instanceof +bU)b+=dw+d.toString()+dw;else if(typeof +d=="string")b+=dw+d.toString()+dw;else +b+=qM}b+=")"}else if(a[0]==c)b+=a[1];return b}function +rn(a){if(a +instanceof +Array&&(a[0]==0||a[0]==c)){var +d=ck(qT);if(d)gP(d,[a,false]);else{var +e=OY(a),b=ck(qf);if(b)gP(b,[0]);console.error(jk+e);if(a.js_error)throw a.js_error}}else +throw a}function +PJ(){var +c=z.process;if(c&&c.on)c.on("uncaughtException",function(a,b){rn(a);c.exit(2)});else if(z.addEventListener)z.addEventListener(jr,function(a){if(a.error)rn(a.error)})}PJ();function +g(a,b){return(a.l>=0?a.l:a.l=a.length)==1?a(b):bV(a,[b])}function +i(a,b,c){return(a.l>=0?a.l:a.l=a.length)==2?a(b,c):bV(a,[b,c])}function +ak(a,b,c,d){return(a.l>=0?a.l:a.l=a.length)==3?a(b,c,d):bV(a,[b,c,d])}function +ek(a,b,c,d,e){return(a.l>=0?a.l:a.l=a.length)==4?a(b,c,d,e):bV(a,[b,c,d,e])}function +dl(a,b,c,d,e,f){return(a.l>=0?a.l:a.l=a.length)==5?a(b,c,d,e,f):bV(a,[b,c,d,e,f])}function +OF(a,b,c,d,e,f,g,h){return(a.l>=0?a.l:a.l=a.length)==7?a(b,c,d,e,f,g,h):bV(a,[b,c,d,e,f,g,h])}var +gg=undefined;OZ();var +g3=[c,q9,-1],ki=[c,ou,-2],cl=[c,jV,-3],ke=[c,og,-4],am=[c,pX,-7],kg=[c,q4,-8],kh=[c,oV,-9],f=[c,o9,-11],kj=[c,pj,-12],hc=[0,e,0,0,-1],kA=[0,e,1,0,0],Ot=[4,0,0,0,[12,45,[4,0,0,0,0]]],hn=[0,[11,'File "',[2,0,[11,'", line ',[4,0,0,0,[11,q5,[4,0,0,0,[12,45,[4,0,0,0,[11,gw,[2,0,0]]]]]]]]]],'File "%s", line %d, characters %d-%d: %s'],mw=[0,0],Ou=[17,[0,a,1,0],[11,oX,[17,0,0]]],Ov=[17,[0,a,1,0],[12,40,0]],Ow=[11,"('\"'",[17,[0,a,1,0],[11,cf,[17,[0,a,1,0],[11,n$,[17,0,0]]]]]],Ox=[0,a,1,0],Oy=[11,qa,[17,[0,a,1,0],[11,cf,[17,[0,a,1,0],[11,n$,[17,0,0]]]]]],Oz=[0,a,1,0],OA=[11,cf,[17,[0,a,1,0],[11,q1,[17,0,0]]]],OB=[0,a,1,0],OC=[11,qa,[17,[0,a,1,0],[11,cf,[17,[0,a,1,0],[11,q1,[17,0,0]]]]]],OD=[0,a,1,0],OE=[17,[0,a,1,0],[12,40,[15,[12,41,[17,0,0]]]]],m$=[0,K,[0,bn,-991563951]],na=[0,K,[0,bn,qZ]],aA=[0,"\0\0\xec\xff\xed\xff\x03\0\xef\xff\x10\0\xf2\xff\xf3\xff\xf4\xff\xf5\xff\0\0\x1f\0\xf9\xffU\0\x01\0\0\0\0\0\x01\0\0\0\x01\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x01\0\x04\0\xfd\xff\x0b\0\xfc\xff\x03\0\x01\0\x03\0\x02\0\x03\0\0\0\xfb\xff\x15\0a\0\n\0\x16\0\x14\0\x10\0\x16\0\f\0\b\0\xfa\xffw\0\x81\0\x8b\0\xa1\0\xab\0\xb5\0\xc1\0\xd1\0\xf0\xff\x0b\0&\0\xfc\xffA\0\xfe\xff\xff\xffn\0\xfc\xff\xa3\0\xfe\xff\xff\xff\xea\0\xf7\xff\xf8\xff0\x01\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xffG\x01~\x01\x95\x01\xf9\xff'\0\xfd\xff\xfe\xff&\0\xbb\x01\xd2\x01\xf8\x01\x0f\x02\xff\xff\xdc\0\xfd\xff\xff\xff\xf5\0'\x02m\x02\x0e\x01X\x02\xa4\x02\xbb\x02\xe1\x02\r\0\xfc\xff\xfd\xff\xfe\xff\xff\xff\x0e\0\xfd\xff\xfe\xff\xff\xff\x1e\0\xfd\xff\xfe\xff\xff\xff\x0f\0\xfd\xff\xfe\xff\xff\xff\x11\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\x13\0\xfc\xff\xfd\xff\xfe\xff\x0f\0\xff\xff\x10\0\xff\xff\b\x01\x05\0\xfd\xff\x17\0\xfe\xff\x14\0\xff\xff.\0\xfd\xff\xfe\xff*\x004\x005\0\xff\xff5\x000\0[\0\\\0\xff\xff\x1b\x01\xfa\xff\xfb\xff\x89\0h\0Y\0X\0j\0\xff\xff\x8f\0\x89\0\xb1\0\xfe\xff\xb7\0\xa8\0\xa6\0\xb7\0\x02\0\xfd\xff\xb1\0\xac\0\xbb\0\x04\0\xfc\xff5\x02\xfb\xff\xfc\xff\xfd\xffg\x01\xff\xff\xf8\x02\xfe\xff\x06\x03\x1e\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff(\x032\x03J\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff=\x03T\x03l\x03\xf9\xff\xfa\xff\xfb\xff\xf4\0x\x03\x8e\x03\xb3\0\xc2\0\x0f\0\xff\xff\xbe\0\xbc\0\xbb\0\xc1\0\xb7\0\xb3\0\xfe\xff\xbf\0\xc9\0\xc8\0\xc4\0\xcb\0\xc1\0\xbd\0\xfd\xff\x9d\x03_\x03\xae\x03\xc4\x03\xce\x03\xd8\x03\xe4\x03\xef\x03<\0\xfd\xff\xfe\xff\xff\xff\f\x04\xfc\xff\xfd\xffW\x04\xff\xff\x91\x04\xfc\xff\xfd\xff\xdd\x04\xff\xff\xe5\0\xfd\xff\xfe\xff\xff\xff\xe7\0\xfd\xff\xfe\xff\xff\xff\x02\0\xff\xff\x12\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\"\x01\xfd\xff\xfe\xff\xff\xff\0\0\xff\xff\x03\0\xfe\xff\xff\xff&\x01\xfc\xff\xfd\xff\xfe\xff\xff\xffx\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\xd0\0\xfd\xff\xfe\xff\xff\xff\xd3\0\xfd\xff\xfe\xff\xff\xff\xbd\0\xff\xff\x8f\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\r\x01\xfd\xff\xfe\xff\xff\xff_\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff2\x01\xfd\xff\xfe\xff\xff\xff\x1a\x01\xfd\xff\xfe\xff\xff\xff\xe9\0\xfd\xff\xfe\xff\xff\xff\xde\0\xfd\xff\xfe\xff\xff\xffO\x05\xed\xff\xee\xff\n\0\xf0\xff,\x01\xf3\xff\xf4\xff\xf5\xff\xf6\xff=\x01\x02\x04\xf9\xff-\x05\xd1\0\xe4\0\xd3\0\xe8\0\xe1\0\xdf\0\xf0\0\xff\xff\xeb\0\xea\0\b\x01\xfe\xff\x04\x01\x17\x01\xfd\xff6\x01\xfc\xff\x1f\x01\x1d\x01 \x01'\x011\x01-\x01\xfb\xff9\x01R\x01P\x01N\x01T\x01J\x01V\x01\xfa\xffn\x05\f\x04{\x05\x9b\x05\xa5\x05\xb1\x05\xbb\x05\xc5\x05\xf1\xff\xc7\x01M\x02\xfd\xff\xff\xff\x9a\x02\xde\x05\xd1\x05\x9b\x02\xef\x055\x06L\x06r\x06\x10\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x98\x06\xfc\xff\xfd\xff\xe3\x06\xff\xffU\x07\xf4\xff\xf5\xff\x0b\0\xf7\xffL\x02\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\x1f\x02\xf3\x053\x07d\x01s\x01h\x01\x85\x01v\x01\x9a\x01\xab\x01\xff\xff\xad\x01\xb0\x01\xbf\x01\xb9\x01\xbb\x01\xfd\x01\xe6\x01\xe6\x01\xea\x01\xf7\x01\xed\x01\xea\x01\t\x02\x13\x02\x13\x02\x0f\x02\x15\x02\x0b\x02\x07\x02\x8e\x06\x98\x06t\x07\xaa\x07\xb4\x07\xbe\x07\xc8\x07\xd2\x07\xf8\xffx\x02\xa7\x02\xfd\xff\xff\xff\xd8\x02R\x07\xdc\x07\xec\x02\xf4\x07:\bQ\bw\bL\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x9d\b\xfc\xff\xfd\xff\xe8\b\xff\xff\x87\x02x\x02\xfd\xffd\x02\xfe\xff\xb6\x02\xff\xff\x0b\x02\xff\xff\xcc\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff.\x02\xff\xff\xb2\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x17\0\xff\xff\xb7\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\xbb\x02\xfd\xff\xfe\xff\xff\xffy\x02\xfd\xff\xfe\xff\xff\xff\xb8\x02\xfc\xff\xfd\xff\xfe\xff\x13\0\xff\xff","\xff\xff\xff\xff\xff\xff\x11\0\xff\xff\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x13\0\x13\0\x13\0\x13\0\x13\0\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\t\0\xff\xff\t\0\xff\xff\xff\xff\x0e\0\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\x04\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\0\0\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\x03\0\x05\0\x05\0\x05\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x03\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\xff\xff\b\0\xff\xff\b\0\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff","\x01\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\x009\0<\0\0\0<\0\0\0\0\0A\0\0\0A\0\0\0\0\0F\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0T\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0^\0\0\0\0\0a\0\xff\xff\xff\xffa\0\xff\xff\xff\xff\xff\xff\xff\xffh\0\0\0\0\0\0\0\0\0m\0\0\0\0\0\0\0q\0\0\0\0\0\0\0u\0\0\0\0\0\0\0y\0\0\0\0\0\0\0\0\0\0\0~\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\x8a\0\0\0\x8e\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x9a\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xb2\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xbb\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc2\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc9\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\0\0\0\0\0\0\xef\0\0\0\0\0\xff\xff\0\0\xf4\0\0\0\0\0\xff\xff\0\0\xf9\0\0\0\0\0\0\0\xfd\0\0\0\0\0\0\0\xff\xff\0\0\x03\x01\0\0\0\0\0\0\0\0\b\x01\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\x11\x01\0\0\0\0\0\0\0\0\x16\x01\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\0\0 \x01\0\0\0\0\0\0\xff\xff\0\0&\x01\0\0\0\0\0\0\0\0+\x01\0\0\0\0\0\0/\x01\0\0\0\0\0\0\0\x004\x01\0\0\0\0\0\x008\x01\0\0\0\0\0\0<\x01\0\0\0\0\0\0@\x01\0\0\0\0\0\0C\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0y\x01}\x01\0\0\0\0\x80\x01\xff\xff\xff\xff\x80\x01\xff\xff\xff\xff\xff\xff\xff\xff\x87\x01\0\0\0\0\0\0\0\0\x8c\x01\0\0\0\0\xff\xff\0\0\x90\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xc1\x01\xc5\x01\0\0\0\0\xc8\x01\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x01\0\0\0\0\0\0\0\0\xd4\x01\0\0\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xdc\x01\0\0\xff\xff\0\0\xe2\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xe9\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xf0\x01\0\0\0\0\0\0\0\0\xf5\x01\0\0\0\0\0\0\xf9\x01\0\0\0\0\0\0\xfc\x01\0\0\0\0\0\0\xff\xff\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\x03\0\x03\0\x86\0\0\0\x03\0\0\0\x86\0E\x01\x92\x01\xff\xff\0\0E\x01\x92\x01\0\0\0\0\0\0\0\0\x7f\0\x8b\0\0\0\x03\0\0\0\f\0\x03\0\xaa\0\x86\0\xaf\0\0\0\x07\0\x0b\x01E\x01\x92\x01\x0e\x01\r\x001\0\x05\0\n\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\x008\0v\0\x06\0\x81\0\x82\x009\0\xed\x01\x89\0\0\x021\0\0\x000\0\x8a\0j\0>\0\x0e\0n\0i\0\0\x001\0\x0f\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1e\x000\0\b\0r\0\xd1\0\xec\0\0\x01\r\x01\x1d\0\x16\0\xff\xff0\x000\0\x11\0\x15\0\x19\0 \0!\0#\0\x17\0\x1b\0\x10\0\x1f\0\x1c\0\"\0\x13\0\x18\0\x12\0\x1a\0\x14\0$\0)\0%\x000\0\t\0*\0+\0,\0-\0.\0/\0=\0U\x000\0&\0'\0'\0'\0'\0'\0'\0'\0'\0'\x001\0C\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0V\0\x8f\0\xff\xff(\0\x90\0\x91\0\x92\x007\0\x94\x007\0\x95\x000\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0\xff\xff0\0\x96\0\x97\0\xa1\0B\0\x9e\x005\0\x9f\x005\0\xa0\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\0\xa5\x003\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa2\0\xa3\0\xa6\0]\0\xff\xff\x02\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xff\xffM\0g\0l\0t\0\x84\0\x86\0\x87\0\x80\0\x8b\0\x86\0\xa4\0]\0\xab\0M\0\xa7\0\xa8\0\xa9\0\xac\0p\0\xad\0\xae\0\xd2\0\xe2\0\xd0\0\xd3\0\xd4\0;\0S\0\x86\0\xd5\0\xd6\0\xd7\0\xd8\0\xda\0\x8d\0\xdb\0]\0\xdc\0\xdd\0{\0\xde\0\xdf\0\xe0\0\x88\0_\0\xe1\0#\x01A\x01\xea\0\x9b\0\x05\x01a\x01\xfa\0\xff\xff\xfe\x009\x01=\x01_\x01M\0,\x01\\\x01X\x01\t\x01\x1d\x01L\0|\0!\x01\x12\x01K\0b\0\x13\x01U\x01V\x01W\x01x\x01Y\x01J\0\xe1\x005\x01y\x01I\0Z\x01H\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0b\0q\x01z\0[\x01@\0\x04\x01]\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\x9c\0p\x01^\x01`\x01b\x01c\x011\x01O\0O\0O\0O\0O\0O\0d\x01\x9d\0e\x01N\0N\0N\0N\0N\0N\0\xb7\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\x18\x01p\x01\xff\xff\x19\x01f\x01g\x01i\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0j\x01k\x010\x01(\x01l\x01m\x01n\x01P\0P\0P\0P\0P\0P\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0o\x01\x1b\x01\xff\xff\xab\x01\x1f\x01\xaa\x01\x17\x01Q\0Q\0Q\0Q\0Q\0Q\0\\\0\xa8\x01?\x01P\0P\0P\0P\0P\0P\0\xf8\0\xa5\x01\xfc\0\xa2\x01;\x01E\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\xff\xffQ\0Q\0Q\0Q\0Q\0Q\0W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0'\x01*\x01\xff\xff\xa3\x01\xa4\x01x\0\x02\x01X\0X\0X\0X\0X\0X\0\xa6\x017\x01\x99\0W\0W\0W\0W\0W\0W\0\x07\x01\xa7\x01\xa4\x01\xa9\x01\x10\x01\xa4\x01Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\x003\x01X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0a\0\x89\x01\xa4\x01\xac\x01\xb9\x01\x88\x01\xad\x01Z\0Z\0Z\0Z\0Z\0Z\0a\0\xb3\0\xae\x01Y\0Y\0Y\0Y\0Y\0Y\0.\x01\xaf\x01\xb0\x01\xb4\0\xa4\x01\xb8\x01\xb5\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0|\x01Z\0Z\0Z\0Z\0Z\0Z\0\xc0\x01\xb2\x01\x15\x01\xb3\x01a\0\xc1\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xa4\x01\xd8\x01\xff\xffa\0\xb8\x01\xd8\x01\xd1\x01a\0\xdf\x01a\0\xd0\x01\xe6\x01\0\0a\0\xdb\x01%\x01\xd8\x01\xd9\x01\0\0\xdc\x01\xd8\x01a\0\0\0\0\0\xd8\x01a\0\0\0a\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xd8\x01\0\0~\x01\0\0\0\0\0\0\0\0c\0c\0c\0c\0c\0c\0a\0\0\0\xda\x01\xfa\x01\0\0\0\0a\0\0\0|\x01|\x01a\0\0\0\xdd\x01\0\0\xfd\x01\0\0\0\0\0\0a\0\xff\xff\0\0\xc4\x01a\0\0\0a\0`\0c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xeb\x01\0\0\xf1\x01\0\0\xff\x01\xf2\x01\0\0d\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xf6\x01\x81\x01\x81\x01\xe4\x01\0\0\xc4\x01\0\0e\0e\0e\0e\0e\0e\0\0\0\xc6\x01\0\0d\0d\0d\0d\0d\0d\0\0\0\0\0\0\0\xc4\x01\xea\x01\x86\x01a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0\0\0e\0e\0e\0e\0e\0e\0a\0a\0a\0a\0a\0a\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\0\0\0\0\xc9\x01\xb1\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xbc\0\0\0a\0a\0a\0a\0a\0a\0\xc9\x01\xe3\x01\0\0\xbf\0\xce\x01{\x01\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xc3\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc6\0\xff\xff\xf8\x01\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xca\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xcd\0\xff\xff\xff\xff\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe2\0\xc3\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\x01\0\0\0\0\xce\0\xdd\x01\xef\x01\xfe\x01\0\0\xcf\0\xf4\x01\0\0\xe1\0\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\0\0\0\xe8\0\0\0\xe1\x01\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xd9\0\xff\xff\0\0\0\0\0\0\0\0\xe1\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\xe6\0\0\0\xe6\0\0\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\0\0\xe4\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xba\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\xf1\0\0\0q\x01\0\0M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01\0\0p\x01\0\0\0\0\xc1\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0p\x01\0\0\0\0\0\0\xf0\0\xc8\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\xf6\0\0\0\0\0\xf0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xee\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0E\x01F\x01\0\0\0\0E\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\x01\0\0N\x01\0\0\0\0\0\0\0\0h\x01I\x01\0\0\0\0\0\0\0\0O\x01\0\0G\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0H\x01\0\0\0\0\0\0\0\0\0\0\xf3\0\0\0\0\0\0\0\0\0\0\0\0\0P\x01w\x01\0\0w\x01\0\0Q\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\0\0J\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01S\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\x01\0\0\0\0s\x01\0\0\0\0T\x01\0\0\0\0u\x01\0\0u\x01\0\0K\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\0\0s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\xb9\x01\0\0\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xb8\x01\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\0\0\0\0D\x01\x80\x01\x80\x01\x80\x01\x7f\x01\0\0\x80\x01\0\0\0\0\xb8\x01\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\x80\x01\x7f\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\xbf\x01\x8e\x01\xbf\x01\0\0\0\0\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x92\x01\x93\x01\0\0\0\0\x92\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\x92\x01\0\0\x99\x01\0\0\0\0\0\0\0\0\xb1\x01\x96\x01\0\0\0\0\0\0\xc8\x01\x9c\x01\0\0\x94\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\x95\x01\0\0\0\0\0\0\0\0\0\0\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\0\0\x9e\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc8\x01\0\0\x97\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\xbb\x01\0\0\xa0\x01\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\x9f\x01\xc8\x01\0\0\xc8\x01\xc7\x01\0\0\xa1\x01\0\0\0\0\0\0\0\0\0\0\0\0\x98\x01\0\0\0\0\0\0\0\0\xbd\x01\0\0\xbd\x01\0\0\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\x91\x01\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\xc8\x01\xc7\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xd6\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd3\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x03\0\0\0\x86\0\xff\xff\x03\0\xff\xff\x86\0E\x01\x92\x019\0\xff\xffE\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff}\0\x8a\0\xff\xff\0\0\xff\xff\0\0\x03\0\xa9\0\x86\0\xae\0\xff\xff\0\0\n\x01E\x01\x92\x01\f\x01\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x05\0s\0\0\0}\0\x81\0\x05\0\xec\x01\x88\0\xff\x01&\0\xff\xff\n\0\x88\0f\0:\0\0\0k\0f\0\xff\xff\x0b\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1d\0&\0\0\0o\0\xd0\0\xe9\0\xff\0\f\x01\x0f\0\x11\0<\0\x0b\0\n\0\0\0\x14\0\x18\0\x1f\0 \0\"\0\x16\0\x1a\0\0\0\x0e\0\x1b\0!\0\x12\0\x17\0\0\0\x10\0\x13\0#\0(\0$\0&\0\0\0)\0*\0+\0,\0-\0.\0:\0R\0\x0b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0'\0?\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0U\0\x8c\0<\0\r\0\x8f\0\x90\0\x91\x000\0\x93\x000\0\x94\0'\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x001\x001\x001\x001\x001\x001\x001\x001\x001\x001\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0A\0'\0\x95\0\x96\0\x9c\0?\0\x9d\x003\0\x9e\x003\0\x9f\x002\x003\x003\x003\x003\x003\x003\x003\x003\x003\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x005\x005\x005\x005\x005\x005\x005\x005\x005\x005\0\x9b\x002\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa1\0\xa2\0\x9b\0[\0A\0\0\x007\x007\x007\x007\x007\x007\x007\x007\x007\x007\x009\0D\0f\0k\0s\0\x83\0\x85\0\x85\0}\0\x8a\0\x85\0\xa3\0^\0\xa5\0D\0\xa6\0\xa7\0\xa8\0\xab\0o\0\xac\0\xad\0\xce\0\xcb\0\xcf\0\xd2\0\xd3\0:\0R\0\x85\0\xd4\0\xd5\0\xd6\0\xd7\0\xd9\0\x8c\0\xda\0a\0\xdb\0\xdc\0w\0\xdd\0\xde\0\xdf\0\x85\0[\0\xcb\0\"\x01>\x01\xe9\0\x98\0\x01\x01P\x01\xf7\0<\0\xfb\x006\x01:\x01Q\x01D\0)\x01R\x01S\x01\x06\x01\x1a\x01D\0w\0\x1e\x01\x0f\x01D\0^\0\x0f\x01T\x01U\x01V\x01G\x01X\x01D\0\xcb\x002\x01G\x01D\0Y\x01D\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0a\0L\x01w\0Z\x01?\0\x01\x01\\\x01G\0G\0G\0G\0G\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0\x98\0L\x01]\x01_\x01a\x01b\x01-\x01N\0N\0N\0N\0N\0N\0c\x01\x98\0d\x01G\0G\0G\0G\0G\0G\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\x14\x01L\x01A\0\x14\x01e\x01f\x01h\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0i\x01j\x01-\x01$\x01k\x01l\x01m\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0n\x01\x1a\x01y\x01\x9d\x01\x1e\x01\x9e\x01\x14\x01P\0P\0P\0P\0P\0P\0[\0\x9f\x01>\x01O\0O\0O\0O\0O\0O\0\xf7\0\xa0\x01\xfb\0\xa1\x01:\x01D\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0^\0P\0P\0P\0P\0P\0P\0V\0V\0V\0V\0V\0V\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0$\x01)\x01a\0\xa2\x01\xa3\x01w\0\x01\x01W\0W\0W\0W\0W\0W\0\xa5\x016\x01\x98\0V\0V\0V\0V\0V\0V\0\x06\x01\xa6\x01\xa7\x01\xa8\x01\x0f\x01\xa9\x01X\0X\0X\0X\0X\0X\0X\0X\0X\0X\x002\x01W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0_\0\x85\x01\xaa\x01\xab\x01\x9a\x01\x85\x01\xac\x01Y\0Y\0Y\0Y\0Y\0Y\0_\0\xb0\0\xad\x01X\0X\0X\0X\0X\0X\0-\x01\xae\x01\xaf\x01\xb0\0\xb0\x01\x9a\x01\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0z\x01Y\0Y\0Y\0Y\0Y\0Y\0\x94\x01\xb1\x01\x14\x01\xb2\x01b\0\x94\x01\xb3\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xd8\x01\xc1\x01_\0\x9a\x01\xd8\x01\xcd\x01b\0\xde\x01_\0\xcd\x01\xe5\x01\xff\xff_\0\xda\x01$\x01\xd7\x01\xd7\x01\xff\xff\xda\x01\xd7\x01_\0\xff\xff\xff\xff\xd8\x01_\0\xff\xff_\0_\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xd7\x01\xff\xffz\x01\xff\xff\xff\xff\xff\xff\xff\xff`\0`\0`\0`\0`\0`\0b\0\xff\xff\xd7\x01\xf7\x01\xff\xff\xff\xffb\0\xff\xff}\x01\x80\x01b\0\xff\xff\xdc\x01\xff\xff\xfb\x01\xff\xff\xff\xff\xff\xffb\0y\x01\xff\xff\xc2\x01b\0\xff\xffb\0b\0`\0`\0`\0`\0`\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xe7\x01\xff\xff\xee\x01\xff\xff\xfb\x01\xee\x01\xff\xffc\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xf3\x01}\x01\x80\x01\xe0\x01\xff\xff\xc5\x01\xff\xffd\0d\0d\0d\0d\0d\0\xff\xff\xc2\x01\xff\xffc\0c\0c\0c\0c\0c\0\xff\xff\xff\xff\xff\xff\xc8\x01\xe7\x01\x85\x01e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xffd\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xff\xff\xff\xff\xc5\x01\xb0\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb9\0\xff\xffe\0e\0e\0e\0e\0e\0\xc8\x01\xe0\x01\xff\xff\xb9\0\xcd\x01z\x01\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xc0\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc0\0\xc1\x01\xf7\x01\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc7\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xc7\0}\x01\x80\x01\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xcc\0\xc2\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe7\x01\xff\xff\xff\xff\xc7\0\xdc\x01\xee\x01\xfb\x01\xff\xff\xc7\0\xf3\x01\xff\xff\xcc\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xe1\0\xff\xff\xe1\0\xff\xff\xe0\x01\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xcd\0\xc5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcc\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xe4\0\xff\xff\xe4\0\xff\xff\xe3\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xe3\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xb9\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xff\xffM\x01\xff\xffM\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01\xff\xffM\x01\xff\xff\xff\xff\xc0\0\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0M\x01\xff\xff\xff\xff\xff\xff\xed\0\xc7\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xf2\0\xff\xff\xff\xff\xf0\0\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xed\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0B\x01B\x01\xff\xff\xff\xffB\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xffO\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01p\x01\xff\xffp\x01\xff\xffB\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01\xff\xff\xff\xffB\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xff\xff\xffr\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xffs\x01\xff\xffs\x01\xff\xffB\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\xff\xffr\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01\xff\xff~\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\x81\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x9b\x01\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01~\x01\xff\xff\xff\xffB\x01~\x01\x81\x01~\x01~\x01\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\x81\x01\x81\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xb8\x01\x8a\x01\xb8\x01\xff\xff\xff\xff\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x01\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xba\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\x8f\x01\xc6\x01\xff\xff\xc6\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xbb\x01\xff\xff\xbb\x01\xff\xff\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xc9\x01\xc9\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",e,e,e,e,e,e],f4="lib/data_source/jellyfin_api.ml.user",f5="lib/data_source/jellyfin_api.ml.Authenticate_by_name.params",f6="lib/data_source/jellyfin_api.ml.Authenticate_by_name.response",iO="lib/data_source/jellyfin_api.ml.Item.image_blur_hashes",u="lib/data_source/jellyfin_api.ml.Item.type_",f7="lib/data_source/jellyfin_api.ml.Item.t",f8="lib/db/stores.ml.Items.sorts",f9="lib/db/stores.ml.Items.t",gb="items",nF=[0,0,0];bd(11,kj,pj);bd(10,f,o9);bd(9,[c,pc,oR],pc);bd(8,kh,oV);bd(7,kg,q4);bd(6,am,pX);bd(5,[c,p_,-6],p_);bd(4,[c,oD,-5],oD);bd(3,ke,og);bd(2,cl,jV);bd(1,ki,ou);bd(0,g3,q9);var +r4=ji,r2="output_substring",rY=cc,rV=cF,rW=eD,rK="Stdlib.Exit",rO=cM(0,0,oI),rQ=cM(0,0,65520),rS=cM(1,0,oI),r7="CamlinternalLazy.Undefined",sb="option is None",sf=gE,sg="\\'",sh=gJ,si=gu,sj=gz,sk=gl,sd="Char.chr",sn=" is not an Unicode scalar value",sv="List.init",ss="hd",sG="String.blit / Bytes.blit_string",sF="Bytes.blit",sE="String.sub / Bytes.sub",sV="String.contains_from / Bytes.contains_from",sQ=e,sN="String.concat",s4="Array.iter2: arrays must have the same length",s2="Array.blit",s1="Array.sub",sZ="Array.init",tf="Set.remove_min_elt",tg=[0,0,0,0],th=[0,"set.ml",570,18],tb=gr,tc=gr,td=gr,te=gr,to="Map.remove_min_elt",tp=[0,0,0,0],tq=[0,"map.ml",400,10],tk=gx,tl=gx,tm=gx,tn=gx,ts="Stdlib.Stack.Empty",tw="Stdlib.Queue.Empty",tH="Buffer.add_substring/add_subbytes",tG="Buffer.add: cannot grow buffer",tF=[0,pA,93,2],tE=[0,pA,94,2],tB="Buffer.sub",tT=oB,tU=q3,tV=p2,tW=oc,tX=ra,tY=pS,tZ="%f",t0="%B",t1="%{",t2="%}",t3="%(",t4="%)",t5=q$,t6="%t",t7="%?",t8="%r",t9="%_r",t_=[0,ah,850,23],uj=[0,ah,814,21],ub=[0,ah,815,21],uk=[0,ah,818,21],uc=[0,ah,819,21],ul=[0,ah,822,19],ud=[0,ah,823,19],um=[0,ah,826,22],ue=[0,ah,827,22],un=[0,ah,831,30],uf=[0,ah,832,30],uh=[0,ah,836,26],t$=[0,ah,837,26],ui=[0,ah,846,28],ua=[0,ah,847,28],ug=[0,ah,851,23],vz=[0,ah,1558,4],vA="Printf: bad conversion %[",vB=[0,ah,1626,39],vC=[0,ah,1649,31],vD=[0,ah,1650,31],vE="Printf: bad conversion %_",vF=oq,vG=pa,vH=oq,vI=pa,vL=[0,[11,"invalid box description ",[3,0,0]],"invalid box description %S"],vK=[0,0,4],vu=i5,vs="neg_infinity",vt=oy,vr=cc,vm=[0,gh],va="%+nd",vb="% nd",vd="%+ni",ve="% ni",vf="%nx",vg="%#nx",vh="%nX",vi="%#nX",vj="%no",vk="%#no",u$="%nd",vc=ra,vl="%nu",uY="%+ld",uZ="% ld",u1="%+li",u2="% li",u3="%lx",u4="%#lx",u5="%lX",u6="%#lX",u7="%lo",u8="%#lo",uX="%ld",u0=oc,u9="%lu",uK="%+Ld",uL="% Ld",uN="%+Li",uO="% Li",uP="%Lx",uQ="%#Lx",uR="%LX",uS="%#LX",uT="%Lo",uU="%#Lo",uJ="%Ld",uM=pS,uV="%Lu",uw="%+d",ux="% d",uz="%+i",uA="% i",uB="%x",uC="%#x",uD=qD,uE="%#X",uF="%o",uG="%#o",uv=i1,uy=p2,uH=oH,tL="@]",tM="@}",tN="@?",tO="@\n",tP="@.",tQ="@@",tR="@%",tS="@",uo="CamlinternalFormat.Type_mismatch",vQ=e,vR=[0,[11,gy,[2,0,[2,0,0]]],", %s%s"],wn=[0,[11,jk,[2,0,[12,10,0]]],oN],wo=[0,[11,"Fatal error in uncaught exception handler: exception ",[2,0,[12,10,0]]],"Fatal error in uncaught exception handler: exception %s\n"],wm="Fatal error: out of memory in uncaught exception handler",wj=[0,[11,jk,[2,0,[12,10,0]]],oN],wd=[0,[2,0,[12,10,0]],"%s\n"],we=[0,[11,op,0],op],v6="Raised at",v7="Re-raised at",v8="Raised by primitive operation at",v9="Called from",v_=" (inlined)",wa=e,v$=[0,[2,0,[12,32,[2,0,[11,' in file "',[2,0,[12,34,[2,0,[11,", line ",[4,0,0,0,[11,q5,Ot]]]]]]]]]],'%s %s in file "%s"%s, line %d, characters %d-%d'],wb=[0,[2,0,[11," unknown location",0]],"%s unknown location"],vZ="Out of memory",v0="Stack overflow",v1="Pattern matching failed",v2="Assertion failed",v3="Undefined recursive module",vT=[0,[12,40,[2,0,[2,0,[12,41,0]]]],"(%s%s)"],vU=e,vV=e,vW=[0,[12,40,[2,0,[12,41,0]]],"(%s)"],vP=[0,[4,0,0,0,0],i1],vN=[0,[3,0,0],"%S"],vO=qM,wg=[0,e,"(Cannot print locations:\n bytecode executable program file not found)","(Cannot print locations:\n bytecode executable program file appears to be corrupt)","(Cannot print locations:\n bytecode executable program file has wrong magic number)","(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"],ws="Fun.Finally_raised: ",wq="Stdlib.Fun.Finally_raised",wB="Random.int",ww="x",wC=[0,987910699,495797812,364182224,414272206,318284740,990407751,383018966,270373319,840823159,24560019,536292337,512266505,189156120,730249596,143776328,51606627,140166561,366354223,1003410265,700563762,981890670,913149062,526082594,1021425055,784300257,667753350,630144451,949649812,48546892,415514493,258888527,511570777,89983870,283659902,308386020,242688715,482270760,865188196,1027664170,207196989,193777847,619708188,671350186,149669678,257044018,87658204,558145612,183450813,28133145,901332182,710253903,510646120,652377910,409934019,801085050],wK="Hashtbl: unsupported hash table format",wG=e,xx=[3,0,3],xy=cc,xr=pd,xs="<\/",xt=e,xn=pd,xo="<",xp=e,xl="\n",xf=e,xg=e,xh=e,xi=e,w5=[0,e],w0=e,w1=e,w2=e,w3=e,wW=[0,e,0,e],wS="Stdlib.Format.String_tag",xK="Jsoo_runtime.Error.Exn",xL=jj,xN=[0,N,157,10],xP=[0,N,179,10],xR=[0,N,gn,10],xU=[0,N,q_,17],x4=[0,N,367,16],x5=[0,N,368,18],x6=[0,N,372,15],x7=[0,N,377,15],x8=[0,N,qV,15],x9=[0,N,386,10],x_=[0,N,362,16],x$=[0,N,517,12],ya=[0,N,459,14],yl=[0,N,686,27],yk=[0,N,651,27],ye=[0,N,560,16],yb=[0,N,550,23],yc=[0,N,544,14],x3=[0,N,334,9],xY=[0,N,309,9],xX=[0,N,305,9],xW=[0,[11,"Lwd: unsafe mutation (variable invalidated during evaluation) at\n",[15,0]],"Lwd: unsafe mutation (variable invalidated during evaluation) at\n%a"],xT=[0,N,ol,14],xQ=[0,N,186,14],xO=[0,N,169,14],xM=[0,N,o7,14],yf="Lwd.Release_failure",ys=[0,A,64,12],yF=[0,A,205,18],yE=[0,A,q_,9],yH=[0,A,gG,18],yG=[0,A,i9,9],yI=[0,A,ev,21],yJ=[0,A,bM,21],yK=[0,A,260,21],yM=[0,A,296,14],za=[0,A,553,18],zb=[0,A,557,12],zc=[0,A,546,14],y$=[0,A,538,21],y9=[0,A,531,14],y7=[0,A,523,14],y5=[0,A,492,29],y4=[0,A,499,29],y2=[0,A,462,21],yX=[0,A,420,10],yY=[0,A,423,15],yZ=[0,A,435,10],y0=[0,A,457,2],yS=[0,A,371,24],yT=[0,A,391,16],yU=[0,A,394,2],yP=[0,A,315,18],yO=[0,A,317,9],yB=[0,A,193,4],yA=[0,A,ol,21],yy=[0,A,n_,4],yz=[0,A,177,14],yw=[0,A,113,14],yu=[0,A,82,21],yq=[0,A,32,14],zF=[0,aI,571,12],zq=[0,aI,321,37],zr=[0,aI,322,37],zt=[0,aI,346,10],zu=[0,aI,357,42],zs=[0,aI,337,37],zw=[0,aI,375,10],zx=[0,aI,qV,42],zv=[0,aI,338,37],zA=[0,aI,425,16],zD=[0,aI,513,50],zB=[0,aI,480,6],zz=[0,aI,395,14],zi=[0,aI,n_,57],zj=[0,aI,182,57],zk=[0,aI,238,11],zd=o4,ze=o4,z4=[0,"src/fut.ml",34,25],A2="debug",A1="warn",AZ=jr,AY="log",AI="scrollTop",Ap="search",Aj=[0,1],Ah=q2,A6="isSecureContext",Bc="cache",Bd="credentials",Be="headers",Bf="integrity",Bg="keepalive",Bh="method",Bi="mode",Bj="redirect",Bk="referrer",Bl="referrerPolicy",BH=[0,on,233,16],BF=[0,on,201,16],BA=[0,0,0],By=[0,0,0],BQ=gy,Cd=e,Cc=e,B4=[0,[0,aC,qr],0],B5=[0,[0,aC,jp],[0,bx,0]],B6=[0,[0,aC,gp],[0,bx,0]],B7=[0,[0,aC,jx],[0,bx,0]],B8=[0,[0,aC,jd],[0,bx,0]],B9=[0,[0,aC,jL],[0,bx,0]],B_=[0,[0,aC,jm],[0,bx,0]],B$=[0,[0,aC,jK],[0,bx,0]],Ca=[0,[0,aC,qr],[0,bx,0]],BV=[0,[0,aC,jp],0],BW=[0,[0,aC,gp],0],BX=[0,p3,0],BY=[0,[0,aC,jx],0],BZ=[0,[0,aC,jd],0],B0=[0,[0,aC,jL],0],B1=[0,[0,aC,jm],0],B2=[0,bx,0],B3=[0,[0,aC,jK],0],BT=[0,[11,"\x1b[",[4,0,0,0,[12,109,0]]],"\x1b[%dm"],BU="CCFormat.ANSI_codes.No_such_style",Ce="CCFormat.Style",Ct="CCResult.Get_error",CC="CCFQueue.Empty",CD=[0,0],CM="content-box",CN="border-box",CO="device-pixel-content-box",CX=ql,CY=p$,CZ="position",CT="Set metadata",Da="not implemented",C9=[0,[8,[0,0,0],0,0,[11,pk,0]],"%fpx"],C_=[0,[8,[0,0,0],0,0,[11,oK,0]],"%frem"],C$=[0,[8,[0,0,0],0,0,[11,ov,0]],"%fem"],C6=pk,C7=oK,C8=ov,Dc="Common.Utils.Forward_ref.Not_set",De="Common.Utils.Forward_ref.Already_set",Dj=[1,[0,p8,oT]],Dn=[1,-358247754],Dl=[0,[11,"Multiple persitent var are using the key ",[2,0,0]],"Multiple persitent var are using the key %s"],Ds=e,Dr=[0,[12,91,[2,0,[11,"] ",[2,0,0]]]],"[%s] %s"],Dy="TODO not implemented",DD=[0,80,ju],DL=[0,80,[0,"lwdui-controlled-scroll-wrapper"]],DM=[0,80,"lwdui-controlled-scroll-controls"],DN="Show playing",DT=oe,DR="password",DP=jf,DY=[0,80,jf],DV=[0,[2,0,[11,oO,0]],o0],DW=[0,[2,0,0],q3],D0=[0,80,jf],DZ=[0,[2,0,[11,oO,0]],o0],D4=[0,80,"checkbox"],D1=[0,[2,0,[12,45,[4,3,0,0,[12,45,[4,3,0,0,[11,"-id",0]]]]]],"%s-%i-%i-id"],D2=[0,[2,0,[12,45,[4,3,0,0,[12,45,[4,3,0,0,0]]]]],"%s-%i-%i"],Ed=[0,[11,pf,[2,0,0]],"height: %s"],Eb=aO,D9=[0,aO],D_="grid-template-columns",D$=[0,[2,0,[11,gw,[2,0,[12,59,0]]]],"%s: %s;"],Ee=[1,4.],Em=[0,80,pH],Ek="Row height",El="Visible height:",Ei=[0,[11,"height: calc(",[2,0,[11," * ",[4,3,0,0,[11,");",0]]]]],"height: calc(%s * %i);"],Ej=[0,[11,pf,[2,0,[11," !important;",0]]],"height: %s !important;"],En=[0,80,[0,"lwdui-lazy-table-content"]],Eo=[0,80,[0,"lwdui-lazy-table-content-wrapper"]],Ep=[0,"lwdui-lazy-table",0],Ef="virtual table",Et="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",EG=[0,[17,[0,qP,1,0],0],qP],EF=[0,[12,32,0],aO],EE=[0,[11,pL,0],pL],EH=[0,[15,[4,6,0,[0,2],[15,0]]],"%a%.2x%a"],Ez=[0,[11,pM,[15,[11,pg,[15,[11," dst-off=",[4,0,0,0,[11,iZ,[4,0,0,0,0]]]]]]]],"Cstruct.blit_from_string src=%a dst=%a dst-off=%d len=%d"],Ex=[0,[11,pM,[15,[11,pg,[15,[11," src-off=",[4,0,0,0,[11,iZ,[4,0,0,0,0]]]]]]]],"Cstruct.blit_from_string src=%a dst=%a src-off=%d len=%d"],Ev=[0,[12,91,[4,0,0,0,[12,93,0]]],"[%d]"],Eu=[0,[12,91,[4,0,0,0,[12,44,[4,0,0,0,[11,"](",[4,0,0,0,[12,41,0]]]]]]],"[%d,%d](%d)"],EI=[0,[17,3,[15,[17,4,0]]],"@\n%a@."],EJ=e,Ff=[0,[8,[0,0,0],0,[0,0],0],n3],E0=[0,[12,44,0],i3],E7=[0,[15,[12,58,[15,0]]],"%a:%a"],E6=[0,[12,44,0],i3],EZ=[0,[11,er,0],er],E2=[0,[11,cF,0],cF],E3=[0,[11,eD,0],eD],E4=[0,[8,[0,0,0],0,[0,0],0],n3],E5=[0,[8,[0,0,3],0,0,0],"%g"],E8=[0,[12,dv,[15,[12,dz,0]]],"{%a}"],E1=[0,[12,91,[15,[12,93,0]]],"[%a]"],E9=[0,[12,44,[17,[0,a,1,0],0]],oA],Fb=[0,[18,[1,[0,[11,dq,0],dq]],[15,[12,58,[17,[0,a,1,0],[15,[17,0,0]]]]]],"@[%a:@ %a@]"],Fa=[0,[12,44,[17,[0,a,1,0],0]],oA],Fc=[0,[18,[1,[0,[11,dq,0],dq]],[11,"{ ",[15,[11," }",[17,0,0]]]]],"@[{ %a }@]"],Fd=[0,[11,qg,0],qg],E_=[0,[18,[1,[0,[11,dq,0],dq]],[11,"[ ",[15,[11," ]",[17,0,0]]]]],"@[[ %a ]@]"],E$=[0,[11,qW,0],qW],EO=[0,[12,34,0],dw],ES=[0,[0,0],oB],ER=[0,[11,gE,0],gE],EU=[0,[11,gJ,0],gJ],EV=[0,[11,gu,0],gu],EW=[0,[11,gz,0],gz],EX=[0,[11,gl,0],gl],EQ=[0,[11,jF,0],jF],ET=[0,[11,"\\u",[4,6,[0,2,4],0,0]],"\\u%04x"],EP=[0,[12,34,0],dw],FD=[0,es,363,9],Fw=[0,dD,je],Fr=[0,eu,je],Fx=[0,ce,je],Fv=[0,ce,eE],Fs=[0,eu,eE],Ft=[0,es,153,55],Fu=[0,ce,eE],Fy=[0,es,o7,55],Fz=[0,es,154,55],FA=[0,ce,bw],Fp=[0,es,jl,9],Fh=[0,[11,"invalid bounds (index ",[4,0,0,0,[11,", length ",[4,0,0,0,[12,41,0]]]]],"invalid bounds (index %d, length %d)"],Fo=[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0],GS=[0,a5,[0,aN,1]],GT=[0,a5,bQ],GU=[0,a5,[0,aN,0]],GW=[0,a5,em],GV=[0,a5,cI],G7=[0,i_,397,27],G1=[0,a5,pY],GY=[0,a5,qG],GQ=[0,i_,211,8],GP=[0,i_,204,45],Gl=[0,[18,[1,[0,0,e]],[11,dC,[17,[0,a,1,0],[11,"initial",[17,[0,a,1,0],[11,"BOM",[17,[0,a,1,0],[11,jQ,[17,[0,a,1,0],[11,gk,Ou]]]]]]]]]],"@[illegal@ initial@ BOM@ in@ character@ stream@]"],Gm=[0,[18,[1,[0,0,e]],[11,dC,[17,[0,a,1,0],[11,"escape,",[17,[0,a,1,0],0]]]]],"@[illegal@ escape,@ "],Go=[0,[15,[17,[0,a,1,0],[11,jo,[17,[0,a,1,0],[11,"an",[17,[0,a,1,0],[11,"escaped",[17,[0,a,1,0],[11,gk,[17,0,0]]]]]]]]]],"%a@ not@ an@ escaped@ character@]"],Gp=[0,[15,[17,[0,a,1,0],[11,o2,[17,[0,a,1,0],[11,pK,[17,[0,a,1,0],[11,jU,[17,0,0]]]]]]]],"%a@ lone@ low@ surrogate@]"],Gq=[0,[15,[17,[0,a,1,0],[11,o2,[17,[0,a,1,0],[11,"high",[17,[0,a,1,0],[11,jU,[17,0,0]]]]]]]],"%a@ lone@ high@ surrogate@]"],Gr=[0,[15,[17,[0,a,1,0],[11,jo,[17,[0,a,1,0],[12,97,[17,[0,a,1,0],[11,"hex",[17,[0,a,1,0],[11,"digit",[17,0,0]]]]]]]]]],"%a@ not@ a@ hex@ digit@]"],Gn=[0,[15,[17,[0,a,1,0],[11,jo,[17,[0,a,1,0],[12,97,[17,[0,a,1,0],[11,pK,[17,[0,a,1,0],[11,jU,[17,0,0]]]]]]]]]],"%a@ not@ a@ low@ surrogate@]"],Gs=[0,[18,[1,[0,0,e]],[11,dC,[17,[0,a,1,0],[11,"bytes",[17,[0,a,1,0],[11,jQ,[17,[0,a,1,0],[11,gk,[17,[0,a,1,0],[11,oX,Ov]]]]]]]]]],"@[illegal@ bytes@ in@ character@ stream@ ("],Gt=[0,[4,8,[0,2,2],0,0],"%02X"],Gv=[0,[12,32,[4,8,[0,2,2],0,0]]," %02X"],Gu=[0,[12,41,[17,0,0]],")@]"],Gw=[0,[18,[1,[0,0,e]],[11,"expected",[17,[0,a,1,0],0]]],"@[expected@ "],Gx=[0,[11,py,[17,[0,a,1,0],[11,bR,[17,0,0]]]],"member@ name@]"],Gy=[0,[11,gB,[17,[0,a,1,0],[11,"text (JSON value)",[17,0,0]]]],"JSON@ text (JSON value)@]"],Gz=[0,[11,bR,[17,[0,a,1,0],[11,jw,[17,[0,a,1,0],[11,"(':')",[17,0,0]]]]]],"name@ separator@ (':')@]"],GA=[0,[11,eC,[17,[0,a,1,0],[11,"of",[17,[0,a,1,0],[11,ji,[17,0,0]]]]]],"end@ of@ input@]"],GB=[0,[11,"JavaScript",[17,[0,a,1,0],[11,qk,[17,0,0]]]],"JavaScript@ comment@]"],GC=[0,[11,gB,[17,[0,a,1,0],[11,bN,[17,0,0]]]],"JSON@ value@]"],GD=[0,[11,py,[17,[0,a,1,0],[11,bR,[17,[0,a,1,0],[11,cf,[17,[0,a,1,0],[11,gH,[17,[0,a,1,0],[11,eC,[17,Ox,Ow]]]]]]]]]],"member@ name@ or@ object@ end@ ('\"'@ or@ '}')@]"],GE=[0,[11,bN,[17,[0,a,1,0],[11,jw,[17,[0,a,1,0],[11,cf,[17,[0,a,1,0],[11,gH,[17,[0,a,1,0],[11,eC,[17,Oz,Oy]]]]]]]]]],"value@ separator@ or@ object@ end@ (','@ or@ '}')@]"],GF=[0,[11,bN,[17,[0,a,1,0],[11,cf,[17,[0,a,1,0],[11,gt,[17,[0,a,1,0],[11,eC,[17,[0,a,1,0],[11,"(value",[17,OB,OA]]]]]]]]]],"value@ or@ array@ end@ (value@ or@ ']')@]"],GG=[0,[11,bN,[17,[0,a,1,0],[11,jw,[17,[0,a,1,0],[11,cf,[17,[0,a,1,0],[11,gt,[17,[0,a,1,0],[11,eC,[17,OD,OC]]]]]]]]]],"value@ separator@ or@ array@ end@ (','@ or@ ']')@]"],GH=[0,[18,[1,[0,0,e]],[11,dC,[17,[0,a,1,0],[11,"number",[17,[0,a,1,0],[12,40,[2,0,[12,41,[17,0,0]]]]]]]]],"@[illegal@ number@ (%s)@]"],GN=[0,[18,[1,[0,0,e]],[11,dC,[17,[0,a,1,0],[11,"literal",[17,[0,a,1,0],[12,40,[2,0,[12,41,[17,0,0]]]]]]]]],"@[illegal@ literal@ (%s)@]"],GO=[0,[18,[1,[0,0,e]],[11,dC,[17,[0,a,1,0],[11,gk,[17,[0,a,1,0],[11,jQ,[17,[0,a,1,0],[11,gB,[17,[0,a,1,0],[11,jN,OE]]]]]]]]]],"@[illegal@ character@ in@ JSON@ string@ (%a)@]"],GI=[0,[18,[1,[0,0,e]],[11,"unclosed",[17,[0,a,1,0],0]]],"@[unclosed@ "],GJ=[0,[11,gH,[17,0,0]],"object@]"],GK=[0,[11,gt,[17,0,0]],"array@]"],GL=[0,[11,qk,[17,0,0]],"comment@]"],GM=[0,[11,jN,[17,0,0]],"string@]"],Gj=[0,[12,39,[2,0,[11,"' (",[15,[12,41,0]]]]],"'%s' (%a)"],Gi=[0,[11,"U+",[4,8,[0,2,4],0,0]],"U+%04X"],FZ=[0,K,-543455433],F6=[0,K,[0,el,dB]],F7=[0,K,[0,el,n]],F8=[0,K,[0,el,em]],F9=[0,K,[0,el,cI]],Ga=[0,K,[0,bn,dB]],Gb=[0,K,[0,bn,gI]],Gc=[0,K,[0,bn,qx]],Gd=[0,K,[0,bn,[0,qv,1]]],Ge=[0,K,[0,bn,[0,qv,0]]],Gf=[0,K,[0,bn,[0,jh,1]]],Gg=[0,K,[0,bn,[0,jh,0]]],Gh=[0,K,[0,bn,pe]],Hp="not a valid JSON array/object",Hm=[0,[11,"JSON.of_buffer ",[2,0,0]],"JSON.of_buffer %s"],Hh=[0,[11,a7,0],a7],Hi=[0,[11,"Unexpected input when parsing a ",[2,0,0]],"Unexpected input when parsing a %s"],Hj=[0,[15,0],q$],Hg="We expected a well-formed JSON document (array or object)",Hb=bN,Hc="object fields",G$=[0,"lib/ezjsonm.ml",61,19],Ha=[0,gD,357123046],G_="Abort",Hd="Ezjsonm.Parse_error",Ht=[1,[0,p8,oT]],Hr=[0,1],Hw=[0,"lib/codec.ml",32,4],Hz="Yojson__Common.Json_error",HB="Yojson__Common.End_of_array",HC="Yojson__Common.End_of_object",HD="Yojson__Common.End_of_tuple",HE="Yojson__Common.End_of_input",HG=[0,"\0\0\xfe\xff\xff\xff","\xff\xff\xff\xff\xff\xff","\x01\0\0\0\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0","\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0",e,e,e,e,e,e],IY=[0,aN,1],IZ=[0,aN,0],I0=a7,I1="Invalid token",I2=a7,I3="Invalid escape sequence",I4=a7,I5="Invalid low surrogate for code point beyond U+FFFF",I6="Missing escape sequence representing low surrogate for code point beyond U+FFFF",I7=a7,I8="Expected ':' or '>' but found",I9=a7,I_="Expected '>' but found",I$=a7,Ja="Unterminated comment",Jb="Expected string or identifier but found",Jc=a7,Jd="Expected ',' or ']' but found",Je=a7,Jf="Expected ',' or ')' but found",Jg=a7,Jh="Expected ',' or '}' but found",Ji=a7,Jj="Expected ':' but found",Jk=a7,JG="Expected string, got ",JF="Expected object, got ",Jt=er,Jv=gH,Jw="floatlit",Jx=gt,Jy="tuple",Ju="bool",JA="variant",JB="float",JC="int",JD=jN,Jz="intlit",Jp="Blank input data",Jm="Junk after end of JSON value:",Iu=[0,[2,0,[11," '",[2,0,[2,0,[12,39,0]]]]],"%s '%s%s'"],Ip=[0,[11,"File ",[2,0,[11,", line",0]]],"File %s, line"],It="Line",Iq=[0,[11,"byte ",[4,3,0,0,0]],"byte %i"],Is=[0,[11,"bytes ",[4,3,0,0,[12,45,[4,3,0,0,0]]]],"bytes %i-%i"],Ir=[0,[2,0,[12,32,[4,3,0,0,[11,gy,[2,0,[11,":\n",[2,0,0]]]]]]],"%s %i, %s:\n%s"],Io=[0,"lib/read.mll",41,13],In=e,Il=e,H9="NaN value not allowed in standard JSON",H_=[0,[8,[0,0,3],0,[0,16],0],qY],Ia=[0,[8,[0,0,3],0,[0,17],0],pN],H$=qB,H7="Infinity value not allowed in standard JSON",H8="-Infinity value not allowed in standard JSON",H2="NaN",H3=[0,[8,[0,0,3],0,[0,16],0],qY],H5=[0,[8,[0,0,3],0,[0,17],0],pN],H4=qB,H0="Infinity",H1="-Infinity",HW=cF,HX=eD,HV=er,HP=gJ,HQ=gu,HR=gz,HS="\\f",HT=gl,HU=jF,HO=gE,HM=[0,[11,"src=",[3,0,[11," start=",[4,3,0,0,[11,iZ,[4,3,0,0,[12,10,[10,0]]]]]]]],"src=%S start=%i len=%i\n%!"],HK="\\u00",Iv="Yojson__Safe.Int_overflow",Jq="Yojson__Safe.Util.Type_error",JP="list_of_yojson: list needed",JN="int_of_yojson: integer needed",JL="string_of_yojson: string needed",JJ="Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error",J2=aO,J4="_of_yojson: list instead of atom for record expected",J3=[0,[2,0,[11,"_of_yojson: the following record elements were undefined: ",[2,0,0]]],"%s_of_yojson: the following record elements were undefined: %s"],J0="extra fields",JZ="duplicate fields",JX=aO,JY=[0,[2,0,[11,"_of_yojson: ",[2,0,[11,gw,[2,0,0]]]]],"%s_of_yojson: %s: %s"],JW="_of_yojson: unexpected variant constructor",JU="_of_yojson: expected a variant type, saw an empty list",JS="_of_yojson: expected a variant type, saw a nested list",JQ="_of_yojson: this constructor does not take arguments",LB="An error occured while decoding response: ",Lw=[0,[11,", Token=",[3,0,0]],", Token=%S"],Lz=e,Lx=e,Ly=[0,[11,'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="',[2,0,[11,'", Version="0.1"',[2,0,0]]]],'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'],Lt=n6,Lk=qS,Ll=px,Lm=dm,Ln=oP,Lo=qj,Lp=oS,Lq=gv,Lr=pv,Ls=et,Le="type_",Lf="image_blur_hashes",Lg=jq,Lh=i$,Li=bR,Lc=[0,"lib/data_source/jellyfin_api.ml",194,64],KB=[0,o,[0,[0,n,qK],0]],KC=[0,o,[0,[0,n,qh],0]],KD=[0,o,[0,[0,n,qm],0]],KE=[0,o,[0,[0,n,pO],0]],KF=[0,o,[0,[0,n,oU],0]],KG=[0,o,[0,[0,n,o$],0]],KH=[0,o,[0,[0,n,p9],0]],KI=[0,o,[0,[0,n,pt],0]],KJ=[0,o,[0,[0,n,ox],0]],KK=[0,o,[0,[0,n,qp],0]],KL=[0,o,[0,[0,n,qs],0]],KM=[0,o,[0,[0,n,qN],0]],KN=[0,o,[0,[0,n,qO],0]],KO=[0,o,[0,[0,n,oE],0]],KP=[0,o,[0,[0,n,oJ],0]],KQ=[0,o,[0,[0,n,qF],0]],KR=[0,o,[0,[0,n,po],0]],KS=[0,o,[0,[0,n,pu],0]],KT=[0,o,[0,[0,n,oo],0]],KU=[0,o,[0,[0,n,p4],0]],KV=[0,o,[0,[0,n,oa],0]],KW=[0,o,[0,[0,n,qe],0]],KX=[0,o,[0,[0,n,qb],0]],KY=[0,o,[0,[0,n,ow],0]],KZ=[0,o,[0,[0,n,pF],0]],K0=[0,o,[0,[0,n,q6],0]],K1=[0,o,[0,[0,n,qA],0]],K2=[0,o,[0,[0,n,oZ],0]],K3=[0,o,[0,[0,n,oG],0]],K4=[0,o,[0,[0,n,pV],0]],K5=[0,o,[0,[0,n,of],0]],K6=[0,o,[0,[0,n,pB],0]],K7=[0,o,[0,[0,n,qt],0]],K8=[0,o,[0,[0,n,oL],0]],K9=[0,o,[0,[0,n,oQ],0]],K_=[0,o,[0,[0,n,pR],0]],K$=[0,o,[0,[0,n,pn],0]],Ky=qJ,Kt=[0,"Users",[0,"AuthenticateByName",0]],Ko=dm,Kp=qy,Kq=n9,Kk=jq,Kl="access_token",Km="user",Kh=q8,Ki=pD,Ke="pw",Kf="username",J$=gv,Ka=qL,Kb=dm,Kc=et,J7=i$,J8=jq,J9=bR,L$=[0,eA,o8,13],L_=[0,eA,qC,19],L7=[0,eA,ph,13],L6=[0,eA,108,19],L0=[0,eA,81,13],LX=jC,LY=jS,LU=jC,LV=jS,LQ=i8,LR=jP,LS=dr,LM=i8,LN=jP,LO=dr,L1=[0,qn],L2=[0,"item.Name"],L3=[0,qR],L4=[0,"sorts.date_added"],L5=[0,qR],L8=[0,qn],L9=[0,"item.Type"],Ma=[0,"sorts.sort_name"],Mb=[0,"item.CollectionType"],Mt=[0,[2,0,[15,0]],"%s%a"],Mr=[0,[12,40,[4,3,0,0,[12,47,[4,3,0,0,[12,41,0]]]]],"(%i/%i)"],Ml="Unknown",Mm=pb,Mn="Inconsistent",Mo=[0,[11,"New items: last: ",[4,3,0,0,[11," missing: ",[4,3,0,0,[11,pT,[4,3,0,0,0]]]]]],"New items: last: %i missing: %i unfetched: %i"],Mp=[0,[11,"Partial: last: ",[4,3,0,0,[11,pT,[4,3,0,0,0]]]],"Partial: last: %i unfetched: %i"],Mw=[0,[0,[0,0,gA],"Cliquez sur le bouton !"],[0,[0,[0,1,gA],"Click on the Button !"],0]],MF="Start offset:",MG="Item count:",MH="ERROR",MC=[0,[11,"Server ",[2,0,[11,gw,[15,0]]]],"Server %s: %a"],Mz="./db_worker.bc.js",MA=e,M8="GOT L=",M7=[0,"NEW REF",0],M3=pb,M1=[0,[11,"Sync in progress: ",[4,3,0,0,[12,47,[4,3,0,0,0]]]],"Sync in progress: %i/%i"],M2="Desynchronized",MW=jv,MZ=jv,MX=jv,MY=e,MI="ui_servers",MK=[0,0,0,0],ML=[0,"https://demo.jellyfin.org/stable"],MM=[0,1],MO=[0,"demo"],MP=[0,1],MR=[0,0],MT=[0,80,"Connect"],Np=pJ,Nk=[0,[2,0,[11,gm,[2,0,[11,pI,0]]]],oY],Nm=jB,Nl=[0,[11,oz,[3,0,[12,41,0]]],om],Ni="A playback error happened. This is probably due to a codec unsupported by the browser.",Nj=[0,80,"NEXT"],Nn=[0,80,"now-playing-cover"],No=[0,80,"now-playing-details"],Nq=[0,80,p7],Nr=[0,80,"now-playing-display"],Ns=[0,80,"player-wrapper"],Nt=[0,80,p7],Nc="Now playing:",Nd=[0,[2,0,[11,gm,[2,0,[11,pI,0]]]],oY],Ne=e,Nf=e,Ng="image/jpeg",Nh="500x500",Na=[0,[2,0,[11,"/Audio/",[2,0,[11,"/universal?api_key=",[2,0,[11,"&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls",0]]]]]],"%s/Audio/%s/universal?api_key=%s&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls"],Nx=[0,"off",0],Ny=[0,"on",0],Nu=[0,ju,0],NA=[0,"draggable-table",0],NN="|>",NM=[0,[2,0,[11,gm,[2,0,[11,"/Images/Primary?width=50",0]]]],"%s/Items/%s/Images/Primary?width=50"],NL="server-error.png",NO=[2,4.],NC=qo,ND="1fr",NE=qo,NF=pQ,NG=ot,NH=pQ,NI="#",NJ=ot,NK="Order",Oq="Persist ?",Oe=[0,[2,0,[11,gm,[2,0,[11,"/Images/Primary?width=800&format=Jpg",0]]]],"%s/Items/%s/Images/Primary?width=800&format=Jpg"],Og=jB,Of=[0,[11,oz,[3,0,[12,41,0]]],om],Ob=pJ,N8='""',N9="Updating main view:",NS=gA,NQ="session_uuid",NR="toto1",NU="Welcome to OCAMIX",NZ=[0,pW,0,0],N0=[0,[0,dr,"Date added"],[0,[0,bR,et],0]],N2=[0,"view-sort",dr,0],N3=[0,[0,os,"Asc"],[0,[0,jM,"Desc"],[0,[0,pi,"Random"],0]]],N5=[0,"view-order",jM,0],N6=pW,On=[0,"main-layout"];function +P(a){if(typeof +a==="number")return 0;switch(a[0]){case +0:return[0,P(a[1])];case +1:return[1,P(a[1])];case +2:return[2,P(a[1])];case +3:return[3,P(a[1])];case +4:return[4,P(a[1])];case +5:return[5,P(a[1])];case +6:return[6,P(a[1])];case +7:return[7,P(a[1])];case +8:var +c=a[1];return[8,c,P(a[2])];case +9:var +b=a[1];return[9,b,b,P(a[3])];case +10:return[10,P(a[1])];case +11:return[11,P(a[1])];case +12:return[12,P(a[1])];case +13:return[13,P(a[1])];default:return[14,P(a[1])]}}function +aF(a,b){if(typeof +a==="number")return b;switch(a[0]){case +0:return[0,aF(a[1],b)];case +1:return[1,aF(a[1],b)];case +2:return[2,aF(a[1],b)];case +3:return[3,aF(a[1],b)];case +4:return[4,aF(a[1],b)];case +5:return[5,aF(a[1],b)];case +6:return[6,aF(a[1],b)];case +7:return[7,aF(a[1],b)];case +8:var +c=a[1];return[8,c,aF(a[2],b)];case +9:var +d=a[2],e=a[1];return[9,e,d,aF(a[3],b)];case +10:return[10,aF(a[1],b)];case +11:return[11,aF(a[1],b)];case +12:return[12,aF(a[1],b)];case +13:return[13,aF(a[1],b)];default:return[14,aF(a[1],b)]}}function +L(a,b){if(typeof +a==="number")return b;switch(a[0]){case +0:return[0,L(a[1],b)];case +1:return[1,L(a[1],b)];case +2:var +c=a[1];return[2,c,L(a[2],b)];case +3:var +d=a[1];return[3,d,L(a[2],b)];case +4:var +e=a[3],f=a[2],g=a[1];return[4,g,f,e,L(a[4],b)];case +5:var +h=a[3],i=a[2],j=a[1];return[5,j,i,h,L(a[4],b)];case +6:var +k=a[3],l=a[2],m=a[1];return[6,m,l,k,L(a[4],b)];case +7:var +n=a[3],o=a[2],p=a[1];return[7,p,o,n,L(a[4],b)];case +8:var +q=a[3],r=a[2],s=a[1];return[8,s,r,q,L(a[4],b)];case +9:var +t=a[1];return[9,t,L(a[2],b)];case +10:return[10,L(a[1],b)];case +11:var +u=a[1];return[11,u,L(a[2],b)];case +12:var +v=a[1];return[12,v,L(a[2],b)];case +13:var +w=a[2],x=a[1];return[13,x,w,L(a[3],b)];case +14:var +y=a[2],z=a[1];return[14,z,y,L(a[3],b)];case +15:return[15,L(a[1],b)];case +16:return[16,L(a[1],b)];case +17:var +A=a[1];return[17,A,L(a[2],b)];case +18:var +B=a[1];return[18,B,L(a[2],b)];case +19:return[19,L(a[1],b)];case +20:var +C=a[2],D=a[1];return[20,D,C,L(a[3],b)];case +21:var +E=a[1];return[21,E,L(a[2],b)];case +22:return[22,L(a[1],b)];case +23:var +F=a[1];return[23,F,L(a[2],b)];default:var +G=a[2],H=a[1];return[24,H,G,L(a[3],b)]}}function +g1(a){return[0,a]}function +eT(a){return a[1]}function +g2(a,b,c){return a[1]===b?(a[1]=c,1):0}function +cO(a){throw h([0,cl,a],1)}function +x(a){throw h([0,ke,a],1)}var +kf=[c,rK,O(0)];function +kk(a,b){return Pn(a,b)?a:b}function +dL(a){return 0<=a?a:-a|0}var +eU=a6;function +an(a,b){return a+b}function +kl(a){return e+a}function +rX(b){var +e=m(b);return function(a){var +c=a;for(;;){if(e<=c)return an(b,rY);var +d=E(b,c);a:{if(48<=d){if(58>d)break a}else if(45===d)break a;return b}c=c+1|0}}(0)}function +km(a,b){if(!a)return b;var +c=a[1];return[0,c,km(a[2],b)]}Py(0);var +r0=rv(1),be=rv(2);function +dM(a,b){j8(a,b,0,m(b));return}function +kn(a){dM(be,a);rw(be,10);return cN(be)}var +g4=g1(function(a){return function(a){var +b=a;for(;;){if(!b)return 0;var +d=b[2],e=b[1];try{cN(e)}catch(f){var +c=B(f);if(c[1]!==ki)throw h(c,0)}b=d}}(Pz(0))});function +g5(a){return g(eT(g4),0)}kb(qf,g5);function +rL(a,b){return O1(a,b)?a:b}function +rM(a){return a^-1}var +rN=-2147483648,rP=dG(rO),rR=dG(rQ),rT=dG(rS);function +rU(a){return a?rV:rW}function +rZ(a){return rX(j0("%.12g",a))}function +r1(a,b,c,d){if(0<=c&&0<=d&&(m(b)-d|0)>=c)return j8(a,b,c,d);return x(r2)}function +r3(a,b,c,d){if(0<=c&&0<=d&&(au(b)-d|0)>=c)return Pw(a,b,c,d);return x(r4)}function +r5(c){for(;;){var +d=g1(1),a=eT(g4);let +e=d,f=a;var +b=1-g2(g4,a,function(a){if(g2(e,1,0))g(c,0);return g(f,0)});if(!b)return b}}function +eV(a){return cN(a)}function +r6(a,b){rw(a,b);return}var +g6=PM(0),dN=(4*g6|0)-1|0;function +ko(a){return 1-(typeof +a==="number"?1:0)}var +r8=[c,r7,O(0)];function +r9(a){throw h(r8,1)}function +g7(a){var +d=a[1];a[1]=r9;try{var +c=g(d,0);PD(a,c);return c}catch(f){var +b=B(f);a[1]=function(a){throw h(b,0)};throw h(b,0)}}function +r_(a){var +b=bY(a);if(b!==bM&&b!==ds&&b!==o6)return a;return Pm(a)}function +kp(a,b){return b?[0,g(a,b[1])]:0}function +kq(a){return a?1:0}function +r$(a,b){return a?a[1]:b}function +sa(a){return a?a[1]:x(sb)}function +sc(a,b){return 0===b[0]?[0,g(a,b[1])]:b}function +T(a){if(0<=a&&ac>=a)return a;return x(sd)}function +se(a){a:{if(40<=a){if(92===a)return sf;if(du>a)break a}else{if(32<=a){if(39<=a)return sg;break a}if(14>a)switch(a){case +8:return sh;case +9:return si;case +10:return sj;case +13:return sk}}var +b=M(4);S(b,0,92);S(b,1,48+(a/jz|0)|0);S(b,2,48+((a/10|0)%10|0)|0);S(b,3,48+(a%10|0)|0);return gY(b)}var +c=M(1);S(c,0,a);return gY(c)}function +sl(a){return 25>>0?a:a+pp|0}function +sm(a){return an(eK(qD,a),sn)}function +so(a){var +b=0<=a?1:0,c=b?a<=55295?1:0:b;if(c)var +d=c;else +var +e=57344<=a?1:0,d=e?a<=1114111?1:0:e;return d}function +g8(a){return so(a)?a:x(sm(a))}function +bf(a){return a}function +a9(a){return a}function +sp(a,b){var +d=a,c=b;for(;;){if(!c)return d;d=d+1|0;c=c[2]}}function +g9(a){return sp(0,a)}function +cm(a,b){var +c=a,d=b;for(;;){if(!c)return d;var +e=[0,c[1],d];c=c[2];d=e}}function +av(a){return cm(a,0)}function +kr(a,b,c){if(b<=a)return 0;var +d=g(c,a);return[0,d,kr(a+1|0,b,c)]}function +sq(a,b){return[0,a,b]}function +sr(a){return a?a[1]:cO(ss)}function +st(a,b,c,d){var +f=a,e=b;for(;;){if(c<=e)return f;f=[0,g(d,e),f];e=e+1|0}}function +eW(a){if(!a)return 0;var +b=a[1];return km(b,eW(a[2]))}function +cn(a,b){if(!b)return 0;var +c=b[2],d=g(a,b[1]);return[0,d,cn(a,c)]}function +ks(e,b){return function(a,b){var +d=a,c=b;for(;;){if(!c)return d;var +f=c[2];d=[0,g(e,c[1]),d];c=f}}(0,b)}function +bA(a,b){var +c=b;for(;;){if(!c)return 0;var +d=c[2];g(a,c[1]);c=d}}function +g_(a,b,c){var +e=b,d=c;for(;;){if(!d)return e;var +f=d[2];e=i(a,e,d[1]);d=f}}function +eX(a,b){var +c=b;for(;;){if(!c)throw h(am,1);var +d=c[1],e=c[2],f=d[2];if(d[1]===a)return f;c=e}}function +su(a,b){return 0<=a?50>1,s=p(r,b),D=s[1],t=p(a-r|0,s[2]),E=t[2];return[0,B(D,t[1],0),E]}function +p(a,b){if(2===a){if(b){var +j=b[2];if(j){var +k=j[1],g=b[1],B=j[2],q=i(d,g,k),C=0===q?[0,g,0]:0>1,s=h(r,b),D=s[1],t=h(a-r|0,s[2]),E=t[2];return[0,A(D,t[1],0),E]}var +a=g9(b);return 2<=a?h(a,b)[1]:b}function +eY(a,b){return b<=a?a:b}function +kt(a){return e+a}function +sC(a,b){return rr(a,b)}function +sD(a,b){return a<=b?a:b}function +co(a,b){var +c=M(a);OX(c,0,a,b);return c}var +eZ=M(0);function +ku(a){var +b=au(a),c=M(b);bc(a,0,c,0,b);return c}function +kv(a){return ku(ci(a))}function +e0(a,b,c){if(0<=b&&0<=c&&(au(a)-c|0)>=b){var +d=M(c);bc(a,b,d,0,c);return d}return x(sE)}function +cP(a,b,c){return gY(e0(a,b,c))}function +kw(a,b,c,d,e){if(0<=e&&0<=b&&(au(a)-e|0)>=b&&0<=d&&(au(c)-e|0)>=d){bc(a,b,c,d,e);return}return x(sF)}function +bB(a,b,c,d,e){if(0<=e&&0<=b&&(m(a)-e|0)>=b&&0<=d&&(au(c)-e|0)>=d){ch(a,b,c,d,e);return}return x(sG)}function +kx(a){var +b=a-9|0;a:{if(4>>0){if(23!==b)break a}else if(2===b)break a;return 1}return 0}function +sK(a,b){var +d=au(b);if(0===d)return b;var +e=M(d),f=d-1|0,h=0;if(f>=0){var +c=h;for(;;){S(e,c,g(a,cL(b,c)));var +i=c+1|0;if(f===c)break;c=i}}return e}function +dO(a){return ci(a)}function +aw(a){return gY(a)}function +sH(a,b){var +c=au(a),e=au(b),d=M(c+e|0);bc(a,0,d,0,c);bc(b,0,d,c,e);return d}function +sI(a){var +d=au(a),b=[0,0];for(;;){if(b[1]>=d)break;if(!kx(cL(a,b[1])))break;b[1]++}var +c=[0,d-1|0];for(;;){if(b[1]<=c[1]&&kx(cL(a,c[1]))){c[1]--;continue}return b[1]<=c[1]?e0(a,b[1],(c[1]-b[1]|0)+1|0):eZ}}function +sJ(a){var +b=[0,0],j=au(a)-1|0,l=0;if(j>=0){var +g=l;for(;;){var +e=cL(a,g);a:{b:{c:{if(32<=e){var +h=e-34|0;if(58>>0){if(93<=h)break c}else if(56>>0)break b;var +i=1;break a}if(11<=e){if(13===e)break b}else if(8<=e)break b}var +i=4;break a}var +i=2}b[1]=b[1]+i|0;var +o=g+1|0;if(j===g)break;g=o}}if(b[1]===au(a))return ku(a);var +c=M(b[1]);b[1]=0;var +k=au(a)-1|0,m=0;if(k>=0){var +f=m;for(;;){var +d=cL(a,f);a:{b:{c:{if(35<=d){if(92!==d){if(du<=d)break c;break b}}else{if(32>d){if(14<=d)break c;switch(d){case +8:S(c,b[1],92);b[1]++;S(c,b[1],98);break a;case +9:S(c,b[1],92);b[1]++;S(c,b[1],116);break a;case +10:S(c,b[1],92);b[1]++;S(c,b[1],110);break a;case +13:S(c,b[1],92);b[1]++;S(c,b[1],ph);break a;default:break c}}if(34>d)break b}S(c,b[1],92);b[1]++;S(c,b[1],d);break a}S(c,b[1],92);b[1]++;S(c,b[1],48+(d/jz|0)|0);b[1]++;S(c,b[1],48+((d/10|0)%10|0)|0);b[1]++;S(c,b[1],48+(d%10|0)|0);break a}S(c,b[1],d)}b[1]++;var +n=f+1|0;if(k===f)break;f=n}}return c}function +sL(a){return sK(sl,a)}function +dP(a,b){return aw(co(a,b))}function +g$(a,b,c){return aw(e0(dO(a),b,c))}function +sM(a,b){return b<=a?a:x(sN)}function +sO(a,b,c){var +e=a,d=c;for(;;){if(!d)return e;var +f=d[1];if(!d[2])return m(f)+e|0;var +g=d[2];e=sM((m(f)+b|0)+e|0,e);d=g}}function +sP(a,b,c,d,e){var +h=b,g=e;for(;;){if(!g)return a;var +f=g[1];if(!g[2]){ch(f,0,a,h,m(f));return a}var +i=g[2];ch(f,0,a,h,m(f));ch(c,0,a,h+m(f)|0,d);h=(h+m(f)|0)+d|0;g=i}}function +e1(a,b){if(!b)return sQ;var +c=m(a);return aw(sP(M(sO(0,c,b)),0,a,c,b))}function +ky(a){var +b=a-9|0;a:{if(4>>0){if(23!==b)break a}else if(2===b)break a;return 1}return 0}function +sT(a,b,c,d){var +e=c;for(;;){if(b<=e)throw h(am,1);if(aP(a,e)===d)return e;e=e+1|0}}function +sU(a,b,c){var +d=m(a);if(0<=b&&d>=b)try{sT(a,d,b,c);var +f=1;return f}catch(f){var +e=B(f);if(e===am)return 0;throw h(e,0)}return x(sV)}function +e2(a,b){return dJ(a,b)}function +ha(a,b){return a==b?1:0}function +sR(a){if(a==e)return a;if(!ky(aP(a,0))&&!ky(aP(a,m(a)-1|0)))return a;return aw(sI(dO(a)))}function +sS(a){return function(a,b,c){var +d=c;for(;;){if(b<=d)return a;var +e=aP(a,d)+pp|0;a:{if(59>>0){if(33>>0)break a}else if(2===e)break a;d=d+1|0;continue}return aw(sJ(dO(a)))}}(a,m(a),0)}function +sW(a,b){return sU(a,0,b)}function +sX(a){return aw(sL(dO(a)))}function +kz(a,b,c,d,e){if(0<=e&&0<=b&&(a.length-1-e|0)>=b&&0<=d&&(c.length-1-e|0)>=d){OJ(a,b,c,d,e);return}return x(s2)}function +s6(a,b){var +d=a,c=b;for(;;){if(!c)return d;d=d+1|0;c=c[2]}}function +hb(a){if(!a)return[0];var +b=a[2],c=a[1],e=bz(s6(0,a),c);return function(a,b){var +d=a,c=b;for(;;){if(!c)return e;var +f=c[2];e[1+d]=c[1];d=d+1|0;c=f}}(1,b)}function +sY(a,b){if(0===a)return[0];if(0>a)return x(sZ);var +d=bz(a,g(b,0)),e=a-1|0,f=1;if(e>=1){var +c=f;for(;;){d[1+c]=g(b,c);var +h=c+1|0;if(e===c)break;c=h}}return d}function +s0(a,b,c){if(0<=b&&0<=c&&(a.length-1-c|0)>=b)return OK(a,b,c);return x(s1)}function +s3(a,b,c){if(b.length-1!==c.length-1)return x(s4);var +e=b.length-2|0,f=0;if(e>=0){var +d=f;for(;;){i(a,b[1+d],c[1+d]);var +g=d+1|0;if(e===d)break;d=g}}return 0}function +s5(e){return function(a,b){var +c=a,d=b;for(;;){if(0>c)return d;var +f=[0,e[1+c],d];c=c-1|0;d=f}}(e.length-2|0,0)}function +s7(a,b,c){var +e=[0,c],f=b.length-2|0;if(f>=0){var +d=f;for(;;){e[1]=i(a,b[1+d],e[1]);var +g=d-1|0;if(0===d)break;d=g}}return e[1]}function +e3(a){return cP(a[2],a[5],a[6]-a[5]|0)}function +bC(a,b){return gO(a[2],b)}function +s8(a,b,c){var +e=ru(a,b,c),f=0<=e?1:0,g=f?c[12]!==hc?1:0:f;if(g){c[11]=c[12];var +d=c[12];c[12]=[0,d[1],d[2],d[3],c[4]+c[6]|0]}return e}function +s9(a,b){var +c=a?a[1]:1,d=c?kA:hc,e=c?kA:hc;return[0,function(a){a[9]=1;return 0},kv(b),m(b),0,0,0,0,0,1,[0],e,d]}function +s_(a,b,c){return cP(a[2],b,c-b|0)}function +s$(a,b){return gO(a[2],a[5]+b|0)}function +ta(l){function +q(a){return a?a[4]:0}function +d(a,b,c){var +d=a?a[4]:0,e=c?c[4]:0,f=e<=d?d+1|0:e+1|0;return[0,a,b,c,f]}function +e(a,b,c){var +g=a?a[4]:0,h=c?c[4]:0;if((h+2|0)=h){var +v=h<=g?g+1|0:h+1|0;return[0,a,b,c,v]}if(!c)return x(te);var +j=c[3],l=c[2],f=c[1],r=q(f);if(r<=q(j))return d(d(a,b,f),l,j);if(!f)return x(td);var +s=f[2],t=f[1],u=d(f[3],l,j);return d(d(a,b,t),s,u)}function +c(a,b){if(!b)return[0,0,a,0,1];var +d=b[3],f=b[2],g=b[1],h=i(l[1],a,f);if(0===h)return b;if(0<=h){var +j=c(a,d);return d===j?b:e(g,f,j)}var +k=c(a,g);return g===k?b:e(k,f,d)}function +k(a){return[0,0,a,0,1]}function +v(a,b){if(!b)return k(a);var +c=b[3],d=b[2];return e(v(a,b[1]),d,c)}function +w(a,b){if(!b)return k(a);var +c=b[2],d=b[1];return e(d,c,w(a,b[3]))}function +j(a,b,c){if(!a)return v(b,c);if(!c)return w(b,a);var +f=c[4],g=a[4],h=c[3],i=c[2],k=c[1],l=a[3],m=a[2],n=a[1];return(f+2|0)=a>>>0)switch(a){case +0:return[0,0,b];case +1:if(b)return[0,[0,0,b[1],0,1],b[2]];break;case +2:if(b){var +g=b[2];if(g)return[0,[0,[0,0,b[1],0,1],g[1],0,2],g[2]]}break;default:if(b){var +i=b[2];if(i){var +j=i[2];if(j)return[0,[0,[0,0,b[1],0,1],i[1],[0,0,j[1],0,1],2],j[2]]}}}var +k=a/2|0,l=c(k,b),e=l[2],n=l[1];if(!e)throw h([0,f,th],1);var +o=e[1],m=c((a-k|0)-1|0,e[2]),p=m[2];return[0,d(n,o,m[1]),p]}return c(g9(a),a)[1]}return[0,,,,c,,,,,,,,,,,,,A,function(a){return a?0:1},,u,n,o,,,p,,,B,function(a,b){return 0===B(a,b)?1:0},s,C,D,,,,,b,,function(a){return E(0,a)},,,,,,,,,,,function(a,b){var +c=b;for(;;){if(!c)return;var +d=c[2],e=c[3],f=c[1];if(g(a,d))return H(d,a,e);c=f}},,,,,,,function(a){if(!a)return A;var +e=a[2],b=a[1];if(!e)return k(b);var +f=e[2],d=e[1];if(!f)return c(d,k(b));var +g=f[2],h=f[1];if(!g)return c(h,c(d,k(b)));var +i=g[2],j=g[1];if(!i)return c(j,c(h,c(d,k(b))));if(i[2])return I(sB(l[1],a));var +m=i[1];return c(m,c(j,c(h,c(d,k(b)))))}]}function +ti(a){var +b=ta(a);return[0,b[17],b[18],,b[4],,b[20],b[21],b[22],,b[25],b[28],b[29],b[30],b[31],,b[32],,,,,,b[37],b[39],,,,,,,,,,,,,b[50],b[57]]}function +tj(d){function +k(a){return a?a[5]:0}function +e(a,b,c,d){var +e=k(a),f=k(d),g=f<=e?e+1|0:f+1|0;return[0,a,b,c,d,g]}function +q(a,b){return[0,0,a,b,0,1]}function +g(a,b,c,d){var +h=a?a[5]:0,i=d?d[5]:0;if((i+2|0)=i){var +B=i<=h?h+1|0:i+1|0;return[0,a,b,c,d,B]}if(!d)return x(tn);var +l=d[4],o=d[3],p=d[2],g=d[1],v=k(g);if(v<=k(l))return e(e(a,b,c,g),p,o,l);if(!g)return x(tm);var +w=g[3],y=g[2],z=g[1],A=e(g[4],p,o,l);return e(e(a,b,c,z),y,w,A)}function +o(a,b,c){if(!c)return[0,0,a,b,0,1];var +e=c[4],h=c[3],j=c[2],f=c[1],n=c[5],k=i(d[1],a,j);if(0===k)return h===b?c:[0,f,a,b,e,n];if(0<=k){var +l=o(a,b,e);return e===l?c:g(f,j,h,l)}var +m=o(a,b,f);return f===m?c:g(m,j,h,e)}function +r(a){var +b=a;for(;;){if(!b)throw h(am,1);var +c=b[1];if(!c)return[0,b[2],b[3]];b=c}}function +c(a){if(!a)return x(to);var +b=a[1];if(!b)return a[4];var +d=a[4],e=a[3],f=a[2];return g(c(b),f,e,d)}function +z(a,b){if(!a)return b;if(!b)return a;var +d=r(b),e=d[2],f=d[1];return g(a,f,e,c(b))}function +p(a,b){if(!b)return 0;var +c=b[4],h=b[3],f=b[2],e=b[1],j=i(d[1],a,f);if(0===j)return z(e,c);if(0<=j){var +k=p(a,c);return c===k?b:g(e,f,h,k)}var +l=p(a,e);return e===l?b:g(l,f,h,c)}function +s(a,b){var +c=b;for(;;){if(!c)return;var +d=c[4],e=c[3],f=c[2];s(a,c[1]);i(a,f,e);c=d}}function +t(a,b,c){var +d=b,e=c;for(;;){if(!d)return e;var +f=d[4],g=d[3],h=d[2],i=ak(a,h,g,t(a,d[1],e));d=f;e=i}}function +u(a,b){var +c=b;for(;;){if(!c)return 1;var +g=c[4],h=c[1],d=i(a,c[2],c[3]);if(d){var +e=u(a,h);if(e){c=g;continue}var +f=e}else +var +f=d;return f}}function +v(a,b,c){if(!c)return q(a,b);var +d=c[4],e=c[3],f=c[2];return g(v(a,b,c[1]),f,e,d)}function +w(a,b,c){if(!c)return q(a,b);var +d=c[3],e=c[2],f=c[1];return g(f,e,d,w(a,b,c[4]))}function +l(a,b,c,d){if(!a)return v(b,c,d);if(!d)return w(b,c,a);var +f=d[5],h=a[5],i=d[4],j=d[3],k=d[2],m=d[1],n=a[4],o=a[3],p=a[2],q=a[1];return(f+2|0)=(d+b|0))break;c[1]=2*c[1]|0}if(dNa[3])throw h([0,f,tF],1);if((d+b|0)<=a[3])return;throw h([0,f,tE],1)}function +l(a,b){var +c=a[2];if(a[3]<=c)hi(a,1);S(a[1],c,b);a[2]=c+1|0;return 0}function +dS(a,b,c,d){var +e=c<0?1:0;if(e)var +f=e;else +var +h=d<0?1:0,f=h||((m(b)-d|0)=b)return cP(a[1],b,c);return x(tB)}function +tC(a){return a[2]}function +tD(a){a[2]=0;a[1]=a[4];a[3]=au(a[1]);return}function +tI(a,b,c,d){return dS(a,aw(b),c,d)}function +hj(a){return 5===a[2]?12:-6}function +kC(a){return[0,0,M(a)]}function +kD(a,b){var +c=au(a[2]),d=a[1]+b|0;if(ce){if(32!==e){if(43>e)break a;switch(e-43|0){case +5:c:if(c<(d+2|0)&&1=(d+1|0))break a;var +f=co(d+1|0,48);R(f,0,e);bB(b,1,f,(d-c|0)+2|0,c-1|0);return aw(f)}if(71<=e){if(5>>0)break a}else if(65>e)break a}if(ca)return b;var +h=[0,0],i=m(b)-1|0,o=0;if(i>=0){var +d=o;for(;;){if(9>=aP(b,d)+ey>>>0)h[1]++;var +r=d+1|0;if(i===d)break;d=r}}var +j=h[1],k=M(m(b)+((j-1|0)/3|0)|0),l=[0,0];function +e(a){R(k,l[1],a);l[1]++;return}var +f=[0,((j-1|0)%3|0)+1|0],n=m(b)-1|0,p=0;if(n>=0){var +c=p;for(;;){var +g=aP(b,c);if(9>>0)e(g);else{if(0===f[1]){e(95);f[1]=3}f[1]--;e(g)}var +q=c+1|0;if(n===c)break;c=q}}return aw(k)}function +vn(a,b){return e5(a,eK(uu(a),b))}function +vo(a,b){return e5(a,eK(uW(a),b))}function +vp(a,b){return e5(a,eK(u_(a),b))}function +vq(a,b){return e5(a,Pa(uI(a),b))}function +bD(d,b,c){function +a(a){switch(d[1]){case +0:var +e=45;break;case +1:var +e=43;break;default:var +e=32}return O8(c,b,e)}function +e(a){var +b=gQ(c);return 3===b?c<0.?vs:vt:4<=b?vu:a}function +f(b){var +e=m(b);return function(a){var +c=a;for(;;){if(c===e)return 0;var +d=E(b,c)-46|0;a:{if(23>>0){if(55===d)break a}else if(21>>0)break a;c=c+1|0;continue}return 1}}(0)?b:an(b,vr)}switch(d[2]){case +5:return e(f(j0(kG(d,b),c)));case +6:return a(0);case +7:return sX(a(0));case +8:return e(a(0));default:return j0(kG(d,b),c)}}function +vv(a){var +b=se(a),c=m(b),d=co(c+2|0,39);ch(b,0,d,1,c);return aw(d)}function +vw(a){var +b=kC(16);hk(b,a);return kE(b)}function +eg(a,b,c,d){var +l=b,j=c,e=d;for(;;){if(typeof +e==="number")return g(l,j);switch(e[0]){case +0:var +s=e[1];return function(a){return w(l,[5,j,a],s)};case +1:var +t=e[1];return function(a){return w(l,[4,j,vv(a)],t)};case +2:return hl(l,j,e[2],e[1],function(a){return a});case +3:return hl(l,j,e[2],e[1],ut);case +4:return e6(l,j,e[4],e[2],e[3],vn,e[1]);case +5:return e6(l,j,e[4],e[2],e[3],vo,e[1]);case +6:return e6(l,j,e[4],e[2],e[3],vp,e[1]);case +7:return e6(l,j,e[4],e[2],e[3],vq,e[1]);case +8:return vx(l,j,e[4],e[2],e[3],e[1]);case +9:return hl(l,j,e[2],e[1],rU);case +10:j=[7,j];e=e[1];break;case +11:j=[2,j,e[1]];e=e[2];break;case +12:j=[3,j,e[1]];e=e[2];break;case +13:var +u=e[3],v=vw(e[2]);return function(a){return w(l,[4,j,v],u)};case +14:var +x=e[3],y=e[2];return function(a){return w(l,j,L(us(a[1],y),x))};case +15:var +z=e[1];return function(c,b){return w(l,[6,j,function(a){return i(c,a,b)}],z)};case +16:var +A=e[1];return function(a){return w(l,[6,j,a],A)};case +17:j=[0,j,e[1]];e=e[2];break;case +18:var +m=e[1];if(0===m[0]){let +b=j,c=l,d=e[2];l=function(a){return w(c,[1,b,[0,a]],d)};j=0;e=m[1][1]}else{let +b=j,c=l,d=e[2];l=function(a){return w(c,[1,b,[1,a]],d)};j=0;e=m[1][1]}break;case +19:throw h([0,f,vz],1);case +20:var +B=e[3],C=[8,j,vA];return function(a){return w(l,C,B)};case +21:var +D=e[2];return function(a){return w(l,[4,j,eK(oH,a)],D)};case +22:var +E=e[1];return function(a){return w(l,[5,j,a],E)};case +23:var +n=e[2],o=e[1];return a<50?nU(a+1|0,l,j,o,n):k(nU,[0,l,j,o,n]);default:var +p=e[3],q=e[1],r=g(e[2],0);return a<50?iU(a+1|0,l,j,p,q,r):k(iU,[0,l,j,p,q,r])}}}function +w(a,b,c){return aY(eg(0,a,b,c))}function +nU(a,b,c,d,e){if(typeof +d==="number")switch(d){case +0:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +1:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +2:throw h([0,f,vB],1);default:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e])}switch(d[0]){case +0:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +1:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +2:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +3:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +4:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +5:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +6:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +7:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +8:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);case +9:var +g=d[2];return a<50?iV(a+1|0,b,c,g,e):k(iV,[0,b,c,g,e]);case +10:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e]);default:return a<50?G(a+1|0,b,c,e):k(G,[0,b,c,e])}}function +iV(a,g,c,d,e){if(typeof +d==="number")return a<50?G(a+1|0,g,c,e):k(G,[0,g,c,e]);switch(d[0]){case +0:var +b=d[1];return function(a){return aZ(g,c,b,e)};case +1:var +i=d[1];return function(a){return aZ(g,c,i,e)};case +2:var +j=d[1];return function(a){return aZ(g,c,j,e)};case +3:var +l=d[1];return function(a){return aZ(g,c,l,e)};case +4:var +m=d[1];return function(a){return aZ(g,c,m,e)};case +5:var +n=d[1];return function(a){return aZ(g,c,n,e)};case +6:var +o=d[1];return function(a){return aZ(g,c,o,e)};case +7:var +p=d[1];return function(a){return aZ(g,c,p,e)};case +8:var +q=d[2];return function(a){return aZ(g,c,q,e)};case +9:var +r=d[3],s=d[2],t=ae(Z(d[1]),s);return function(a){return aZ(g,c,aF(t,r),e)};case +10:var +u=d[1];return function(a,b){return aZ(g,c,u,e)};case +11:var +v=d[1];return function(a){return aZ(g,c,v,e)};case +12:var +w=d[1];return function(a){return aZ(g,c,w,e)};case +13:throw h([0,f,vC],1);default:throw h([0,f,vD],1)}}function +aZ(a,b,c,d){return aY(iV(0,a,b,c,d))}function +G(a,b,c,d){var +e=[8,c,vE];return a<50?eg(a+1|0,b,e,d):k(eg,[0,b,e,d])}function +hl(h,f,c,d,e){if(typeof +d==="number")return function(a){return w(h,[4,f,g(e,a)],c)};if(0===d[0]){var +b=d[2],i=d[1];return function(a){return w(h,[4,f,aR(i,b,g(e,a))],c)}}var +j=d[1];return function(a,b){return w(h,[4,f,aR(j,a,g(e,b))],c)}}function +e6(k,j,h,d,e,f,g){if(typeof +d==="number"){if(typeof +e==="number")return e?function(a,b){return w(k,[4,j,cU(a,i(f,g,b))],h)}:function(a){return w(k,[4,j,i(f,g,a)],h)};var +b=e[1];return function(a){return w(k,[4,j,cU(b,i(f,g,a))],h)}}if(0===d[0]){var +c=d[2],l=d[1];if(typeof +e==="number")return e?function(a,b){return w(k,[4,j,aR(l,c,cU(a,i(f,g,b)))],h)}:function(a){return w(k,[4,j,aR(l,c,i(f,g,a))],h)};var +n=e[1];return function(a){return w(k,[4,j,aR(l,c,cU(n,i(f,g,a)))],h)}}var +m=d[1];if(typeof +e==="number")return e?function(a,b,c){return w(k,[4,j,aR(m,a,cU(b,i(f,g,c)))],h)}:function(a,b){return w(k,[4,j,aR(m,a,i(f,g,b))],h)};var +o=e[1];return function(a,b){return w(k,[4,j,aR(m,a,cU(o,i(f,g,b)))],h)}}function +vx(i,h,g,d,e,f){if(typeof +d==="number"){if(typeof +e==="number")return e?function(a,b){return w(i,[4,h,bD(f,a,b)],g)}:function(a){return w(i,[4,h,bD(f,hj(f),a)],g)};var +b=e[1];return function(a){return w(i,[4,h,bD(f,b,a)],g)}}if(0===d[0]){var +c=d[2],j=d[1];if(typeof +e==="number")return e?function(a,b){return w(i,[4,h,aR(j,c,bD(f,a,b))],g)}:function(a){return w(i,[4,h,aR(j,c,bD(f,hj(f),a))],g)};var +l=e[1];return function(a){return w(i,[4,h,aR(j,c,bD(f,l,a))],g)}}var +k=d[1];if(typeof +e==="number")return e?function(a,b,c){return w(i,[4,h,aR(k,a,bD(f,b,c))],g)}:function(a,b){return w(i,[4,h,aR(k,a,bD(f,hj(f),b))],g)};var +m=e[1];return function(a,b){return w(i,[4,h,aR(k,a,bD(f,m,b))],g)}}function +iU(a,b,c,d,e,f){if(e){var +i=e[1];return function(a){return vy(b,c,d,i,g(f,a))}}var +h=[4,c,f];return a<50?eg(a+1|0,b,h,d):k(eg,[0,b,h,d])}function +vy(a,b,c,d,e){return aY(iU(0,a,b,c,d,e))}function +bE(a,b){var +c=b;for(;;){if(typeof +c==="number")return;switch(c[0]){case +0:var +f=c[1],h=kF(c[2]);bE(a,f);return dM(a,h);case +1:var +d=c[2],e=c[1];if(0===d[0]){var +i=d[1];bE(a,e);dM(a,vF);c=i}else{var +j=d[1];bE(a,e);dM(a,vG);c=j}break;case +6:var +m=c[2];bE(a,c[1]);return g(m,a);case +7:bE(a,c[1]);return eV(a);case +8:var +n=c[2];bE(a,c[1]);return x(n);case +2:case +4:var +k=c[2];bE(a,c[1]);return dM(a,k);default:var +l=c[2];bE(a,c[1]);return r6(a,l)}}}function +bF(a,b){var +c=b;for(;;){if(typeof +c==="number")return;switch(c[0]){case +0:var +f=c[1],h=kF(c[2]);bF(a,f);return ao(a,h);case +1:var +d=c[2],e=c[1];if(0===d[0]){var +i=d[1];bF(a,e);ao(a,vH);c=i}else{var +j=d[1];bF(a,e);ao(a,vI);c=j}break;case +6:var +n=c[2];bF(a,c[1]);return ao(a,g(n,0));case +7:c=c[1];break;case +8:var +o=c[2];bF(a,c[1]);return x(o);case +2:case +4:var +k=c[2];bF(a,c[1]);return ao(a,k);default:var +m=c[2];bF(a,c[1]);return l(a,m)}}}function +vJ(a){var +c=a[1],b=bg(bP);return w(function(a){bF(b,a);return cO(bh(b))},0,c)}function +kH(c){if(c==e)return vK;var +f=m(c);function +j(a){return g(vJ(vL),c)}function +k(a){var +b=a;for(;;){if(b===f)return b;var +d=E(c,b);if(9!==d&&32!==d)return b;b=b+1|0}}var +i=k(0),o=function(a,b){var +d=b;for(;;){if(d===f)return d;if(25>>0)return d;d=d+1|0}}(i,i),a=g$(c,i,o-i|0),d=k(o),l=function(a,b){var +d=b;for(;;){if(d===f)return d;var +e=E(c,d);a:{if(48<=e){if(58>e)break a}else if(45===e)break a;return d}d=d+1|0}}(d,d);if(d===l)var +n=0;else +try{var +r=rs(g$(c,d,l-d|0)),n=r}catch(f){var +p=B(f);if(p[1]!==cl)throw h(p,0);var +q=j(0),n=q}if(k(l)!==f)j(0);a:{if(a!==e&&a!==ob){if(a==="h"){var +b=0;break a}if(a==="hov"){var +b=3;break a}if(a==="hv"){var +b=2;break a}if(a!=="v"){var +b=j(0);break a}var +b=1;break a}var +b=4}return[0,n,b]}function +vM(d,b,c){return w(function(a){bE(b,a);return g(d,b)},0,c[1])}function +e7(a,b){return vM(function(a){return 0},a,b)}function +e8(a){return e7(be,a)}function +kI(c,b){return w(function(a){var +b=bg(64);bF(b,a);return g(c,bh(b))},0,b[1])}function +p(a){return kI(function(a){return a},a)}var +hm=g1(0);function +ho(a,b){var +c=a[1+b];return ko(c)?bY(c)===ew?g(p(vN),c):bY(c)===o6?rZ(c):vO:g(p(vP),c)}function +kJ(a,b){if(a.length-1<=b)return vQ;var +c=kJ(a,b+1|0),d=ho(a,b);return i(p(vR),d,c)}function +vS(a){var +b=a.length-1;if(2>=b>>>0)switch(b){case +0:return vU;case +1:return vV;default:var +e=ho(a,1);return g(p(vW),e)}var +c=kJ(a,2),d=ho(a,1);return i(p(vT),d,c)}function +vX(d){return function(a){var +b=a;for(;;){if(!b)return 0;var +e=b[2],f=b[1];a:{try{var +c=g(f,d)}catch(f){break a}if(c)return[0,c[1]]}b=e}}(eT(hm))}function +vY(a){if(a===g3)return vZ;if(a===kh)return v0;if(a[1]===kg){var +b=a[2],e=b[3],i=b[2],j=b[1];return dl(p(hn),j,i,e,e+5|0,v1)}if(a[1]===f){var +c=a[2],g=c[3],k=c[2],l=c[1];return dl(p(hn),l,k,g,g+6|0,v2)}if(a[1]===kj){var +d=a[2],h=d[3],m=d[2],n=d[1];return dl(p(hn),n,m,h,h+6|0,v3)}if(0!==bY(a))return a[1];var +o=a[1][1];return an(o,vS(a))}function +e9(a){var +b=vX(a);return b?b[1]:vY(a)}function +v4(a){var +b=[0,OU(a)];return b}function +v5(c,b){function +a(a){return a?0===c?v6:v7:0===c?v8:v9}if(0===b[0]){var +d=b[5],e=b[4],f=b[3],h=b[6]?v_:wa,i=b[2],j=b[7],k=a(b[1]);return[0,OF(p(v$),k,j,i,h,f,e,d)]}if(b[1])return 0;var +l=a(0);return[0,g(p(wb),l)]}function +wc(a,b){if(!b)return e7(a,we);var +d=b[1],e=d.length-2|0,h=0;if(e>=0){var +c=h;for(;;){var +f=v5(c,j(d,c)[1+c]);if(f){var +i=f[1];g(e7(a,wd),i)}var +k=c+1|0;if(e===c)break;c=k}}return 0}function +e_(a,b){return wc(a,v4(b))}var +wh=wg.slice();function +wi(a,b){var +e=e9(a);g(e8(wj),e);e_(be,b);var +c=Pv(0);if(c<0){var +d=dL(c);kn(j(wh,d)[1+d])}return eV(be)}var +wk=[0];function +kK(a){var +b=ro(0);return b}function +wl(a,b){try{var +d=b?wk:kK(0);try{g5(0)}catch(f){}try{var +f=wi(a,d),e=f}catch(f){var +i=B(f),j=kK(0),k=e9(a);g(e8(wn),k);e_(be,d);var +l=e9(i);g(e8(wo),l);e_(be,j);var +e=eV(be)}return e}catch(f){var +c=B(f);if(c===g3)return kn(wm);throw h(c,0)}}kb(qT,function(a,b){try{var +c=wl(a,b);return c}catch(f){return 0}});function +wf(a){for(;;){var +b=eT(hm),c=1-g2(hm,b,[0,a,b]);if(!c)return c}}function +wp(a){return ro(a)}var +wr=[c,wq,O(0)];wf(function(a){return a[1]===wr?[0,an(ws,e9(a[2]))]:0});function +wt(a){return Pt(a,0,m(a))}function +kL(a){return[0,bz(55,0),0]}function +wu(a,b){kz(b[1],0,a[1],0,55);a[2]=b[2];return}function +wv(a,b){function +l(a,b){return wt(an(a,kt(b)))}function +m(a){var +b=E(a,3)<<24,c=E(a,2)<<16,d=E(a,1)<<8;return((E(a,0)+d|0)+c|0)+b|0}var +g=0===b.length-1?[0,0]:b,h=g.length-1,c=0;for(;;){j(a[1],c)[1+c]=c;var +s=c+1|0;if(54===c)break;c=s}var +f=[0,ww],i=54+eY(55,h)|0,n=0;if(i>=0){var +d=n;for(;;){var +e=d%55|0,k=rx(d,h),o=j(g,k)[1+k];f[1]=l(f[1],o);var +p=m(f[1]),q=(j(a[1],e)[1+e]^p)&en;j(a[1],e)[1+e]=q;var +r=d+1|0;if(i===d)break;d=r}}a[2]=0;return}function +wx(a){var +b=kL(0);wv(b,a);return b}function +hp(a){return wx(PO(0))}function +hq(a){a[2]=(a[2]+1|0)%55|0;var +b=a[2],c=j(a[1],b)[1+b],d=(a[2]+24|0)%55|0,e=(j(a[1],d)[1+d]+(c^(c>>>25|0)&31)|0)&en,f=a[2];j(a[1],f)[1+f]=e;return e}function +wz(a,b){for(;;){var +c=hq(a),d=rx(c,b);if(((en-b|0)+1|0)>=(c-d|0))return d}}function +wy(a){var +b=kL(0);wu(b,a);return b}function +wA(a,b){if(en>=b&&0=0){var +e=o;for(;;){n(j(c,e)[1+e]);var +r=e+1|0;if(i===e)break;e=r}}if(b){var +k=h-1|0,p=0;if(k>=0){var +a=p;for(;;){var +l=j(f,a)[1+a];if(l)l[3]=0;var +q=a+1|0;if(k===a)break;a=q}}}return}function +kR(a,b){var +c=b[2],d=(c.length-1)*2|0,e=d>>0)return;return kW(a,d)}function +wY(a){var +b=tz(a[28]);if(!b)return;var +c=b[1],d=c[1];a[12]=a[12]-c[3]|0;var +e=ax(d);a[9]=a[9]+e|0;return}function +wZ(a,b,c){if(typeof +c==="number")switch(c){case +0:var +j=cS(a[3]);if(!j)return;var +k=j[1][1],l=function(a,b){if(!b)return[0,a,0];var +c=b[1],d=b[2];return Po(a,c)?[0,a,b]:[0,c,l(a,d)]};k[1]=l(a[6]-a[9]|0,k[1]);return;case +1:cR(a[2]);return;case +2:cR(a[3]);return;case +3:var +n=cS(a[2]);return n?kW(a,n[1][2]):fb(a);case +4:var +o=a[10]!==(a[6]-a[9]|0)?1:0;return o?wY(a):o;default:var +p=cR(a[5]);if(p)return hs(a,g(a[25],p[1]));return}switch(c[0]){case +0:return kV(a,b,c[1]);case +1:var +d=c[2],f=c[1],q=d[1],z=d[2],r=cS(a[2]);if(!r)return;var +s=r[1],e=s[2];switch(s[1]){case +0:return cW(a,f);case +1:return cp(a,d,e);case +2:return cp(a,d,e);case +3:return a[9]<(b+m(q)|0)?cp(a,d,e):cW(a,f);case +4:return a[11]?cW(a,f):a[9]<(b+m(q)|0)?cp(a,d,e):((a[6]-e|0)+z|0)=a[14]){a[13]=kU;kX(a);if(b)fb(a);return w$(a)}hv(a,0)}}function +cX(a,b,c){var +d=a[14]=c)return ak(a[17],k5,0,c);ak(a[17],k5,0,80);c=c-80|0}}function +xm(a){return a[1]===cV?an(xo,an(a[2],xn)):xp}function +xq(a){return a[1]===cV?an(xs,an(a[2],xr)):xt}function +xu(a){return 0}function +xv(a){return 0}function +xw(a,b,c,d,e){var +g=he(0),h=[0,kS,xx,0];hg(h,g);var +f=cQ(0);ht(f);b1([0,1,h],f);var +i=78,j=cQ(0),k=cQ(0),l=cQ(0);return[0,f,cQ(0),l,k,j,i,10,68,i,0,1,1,1,1,eU,xy,a,b,c,d,e,0,0,xm,xq,xu,xv,g]}function +k7(a,b){var +c=xw(a,b,function(a){return 0},function(a){return 0},function(a){return 0});c[19]=function(a){return xk(c,a)};c[20]=function(a){return k6(c,a)};c[21]=function(a){return k6(c,a)};return c}function +k8(d){return k7(function(a,b,c){return r1(d,a,b,c)},function(a){return eV(d)})}function +cZ(d){return k7(function(a,b,c){return dS(d,a,b,c)},function(a){return 0})}var +xz=i6;function +hy(a){return bg(xz)}var +k9=hy(0),k_=k8(r0),xA=k8(be),k$=cZ(k9);function +xc(a,b){hw(a,1);return g(a[18],0)}function +xd(a,b){var +c=a[14]=0){var +e=q;for(;;){b4(b,c,j(d[3],e)[1+e]);var +r=e+1|0;if(l===e)break;e=r}}return}}function +xV(a){return i(e7(be,xW),e_,O0(20))}function +fi(a,b){var +c=[0,0];b4(c,a,b);var +d=2<=c[1]?1:0;return d?xV(0):d}function +aL(a){return c1([5,a])}function +Q(a){return a}function +U(a,b){if(1===a[0]){var +c=a[4];if(5===c[0]){c[1]=b;return fi(0,a)}}throw h([0,f,xX],1)}function +aj(a){if(1===a[0]){var +b=a[4];if(5===b[0])return b[1]}throw h([0,f,xY],1)}function +c2(a,b,c){var +k=a,g=b,d=c;for(;;)switch(d[0]){case +0:return k;case +1:var +e=d[2];if(typeof +e==="number")throw h([0,f,x4],1);switch(e[0]){case +0:if(e[1]!==g)throw h([0,f,x5],1);var +o=0;break;case +1:var +C=e[2],D=e[1];if(D===g)var +E=[0,C];else{if(C!==g)throw h([0,f,x6],1);var +E=[0,D]}var +o=E;break;case +2:var +u=e[3],v=e[2],w=e[1];if(w===g)var +x=[1,v,u];else if(v===g)var +x=[1,w,u];else{if(u!==g)throw h([0,f,x7],1);var +x=[1,w,v]}var +o=x;break;case +3:var +p=e[4],q=e[3],r=e[2],s=e[1];if(s===g)var +t=[2,r,q,p];else if(r===g)var +t=[2,s,q,p];else if(q===g)var +t=[2,s,r,p];else{if(p!==g)throw h([0,f,x8],1);var +t=[2,s,r,q]}var +o=t;break;default:var +n=dZ(d,g);if(j(e[3],n)[1+n]!==g)throw h([0,f,x9],1);var +m=e[2]-1|0;e[2]=m;if(n>>2|0))var +U=s0(e[3],0,L>>>1|0),M=[4,e[1],e[2],U];else +var +M=e;var +K=M}var +o=K}d[2]=o;if(typeof +o!=="number")return k;var +y=d[1];d[1]=1;var +l=d[4];switch(l[0]){case +0:g=d;d=l[1];break;case +1:var +N=l[2];k=c2(k,d,l[1]);g=d;d=N;break;case +2:var +O=l[2];k=c2(k,d,l[1]);g=d;d=O;break;case +3:var +P=l[2];k=c2(k,d,l[1]);g=d;d=P;break;case +4:var +z=l[2],A=c2(k,d,l[1]);if(!z)return A;var +Q=z[1];l[2]=0;k=A;g=d;d=Q;break;case +5:return k;case +6:if(typeof +y==="number")return k;var +R=y[1];try{i(l[2],d,R);return k}catch(f){var +S=B(f);return[0,[0,S,wp(0)],k]}default:var +T=l[1];k=c2(k,d,l[2]);g=d;d=T}break;default:throw h([0,f,x_],1)}}function +b5(a,b){var +e=a,c=b;for(;;)switch(c[0]){case +0:return;case +1:var +n=typeof +c[2]==="number"?1:0,d=c[2];if(typeof +d==="number")var +k=[0,e];else +switch(d[0]){case +0:var +k=[1,e,d[1]];break;case +1:var +k=[2,e,d[1],d[2]];break;case +2:var +k=[3,e,d[1],d[2],d[3]];break;case +3:var +o=[0,d[1],d[2],d[3],d[4],e,c0,c0,c0],l=0;for(;;){lf(c,l,j(o,l)[1+l]);var +w=l+1|0;if(4===l)break;l=w}var +k=[4,5,5,o];break;default:var +i=d[2];if(i>>1|0)}function +lq(a,b,c){if(typeof +a!=="number"){if(0!==a[0]){if(a[2]!==b)throw h([0,f,yB],1);a[2]=c;return}if(a[2]===b){a[2]=c;return}if(a[4]===b){a[4]=c;return}}throw h([0,f,yA],1)}function +iX(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=c[4];if(typeof +d!=="number"&&1!==d[0]){var +g=c[5],e=d[2];if(typeof +e==="number")var +i=0;else{if(0!==e[0])throw h([0,f,yF],1);e[5]=c;var +i=e}d[2]=c;c[4]=i;c[5]=d;d[5]=g;lq(g,c,d);hF(b,c);return a<50?eh(a+1|0,b,d):k(eh,[0,b,d])}}throw h([0,f,yE],1)}function +yC(a,b){return aY(iX(0,a,b))}function +iW(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=c[2];if(typeof +d!=="number"&&1!==d[0]){var +g=c[5],e=d[4];if(typeof +e==="number")var +i=0;else{if(0!==e[0])throw h([0,f,yH],1);e[5]=c;var +i=e}d[4]=c;c[2]=i;c[5]=d;d[5]=g;lq(g,c,d);hF(b,c);return a<50?eh(a+1|0,b,d):k(eh,[0,b,d])}}throw h([0,f,yG],1)}function +yD(a,b){return aY(iW(0,a,b))}function +nX(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=c[4];a:if(typeof +d!=="number"&&0===d[0]){var +e=c3(d[2]);if(hE(c3(d[4]),e)){yD(b,d);break a}}return a<50?iX(a+1|0,b,c):k(iX,[0,b,c])}throw h([0,f,yI],1)}function +nW(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=c[2];a:if(typeof +d!=="number"&&0===d[0]){var +e=c3(d[4]);if(hE(c3(d[2]),e)){yC(b,d);break a}}return a<50?iW(a+1|0,b,c):k(iW,[0,b,c])}throw h([0,f,yJ],1)}function +eh(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=c3(c[2]),e=c3(c[4]);return d>>2|0}function +bi(a,b){if(typeof +a==="number")var +c=b;else{if(typeof +b!=="number"){var +d=fn(b);return[1,(lv(fn(a),d)+1|0)<<2,a,b]}var +c=a}return c}function +d0(a){return typeof +a==="number"?0:0===a[0]?[0,a[2]]:[1,a[2],a[3]]}var +hG=1,hH=2,zf=3;function +lw(a){return-1===a?1:0}function +hI(a){return-1!==a?1:0}function +c4(a){return(a&3)===3?1:0}function +lx(a){return(a&3)===1?1:0}function +ly(a){return(a&3)===2?1:0}function +lz(a){return a|3}function +zg(a){return a>>>2|0}function +lA(a){return a<<2|2}function +d1(a){return a&rM(zf)}function +lB(a){return a[2]}function +lC(a){return a[3]}function +lD(a){return[0,0,0,0]}function +fo(a){a[1]=a[1]+1|0;return}function +fp(a){a[2]=a[2]+1|0;return}function +fq(a){a[3]=a[3]+1|0;return}function +hJ(a,b,c){var +d=c;for(;;){if(typeof +d==="number")return;if(0===d[0]){var +e=d[1],i=(e&3)!==3?1:0,l=i?0!==(e&3)?1:0:i;if(l){if(0!==(e&b))throw h([0,f,zi],1);fo(a);fq(a);d[1]=e|3}return}var +g=d[1],j=(g&3)!==3?1:0,k=j?0!==(g&3)?1:0:j;if(!k)return k;if(0!==(g&b))throw h([0,f,zj],1);fo(a);fq(a);d[1]=g|3;hJ(a,b,d[2]);d=d[3]}}function +fr(a,b,c,d){if(typeof +d==="number")return;if(0===d[0]){var +e=d[1];if(0===(e&c)){fo(a);if(0===(e&3))d[1]=e|c;else{d[1]=-1;fq(a);fp(a)}}var +g=-1!==e?1:0,h=g?(e&3)===3?1:0:g;return h?(d[1]=-1,fp(a)):h}var +f=d[1];if(0===(f&c)){fo(a);if(0===(f&3)){d[1]=f|c;hg(d,b)}else{d[1]=-1;fq(a);fp(a);hJ(a,c,d[2]);hJ(a,c,d[3])}}var +i=-1!==f?1:0,j=i?(f&3)===3?1:0:i;return j?(d[1]=-1,fp(a)):j}function +hK(a,b,c){var +d=kB(b);if(typeof +d!=="number"&&1===d[0]){var +e=(d[1]&3)===c?1:0;return e?(fr(a,b,c,d[2]),fr(a,b,c,d[3])):e}throw h([0,f,zk],1)}function +lE(a,b,c){for(;;){if(hh(b))return;hK(a,b,c)}}function +zl(a,b,c,d){for(;;){if(hh(c))return lE(b,d,hH);if(hh(d))return lE(a,c,hG);hK(a,c,hG);hK(b,d,hH)}}function +hL(a){var +b=a[6];a[6]=b+1|0;return b}function +hM(a){var +b=a;for(;;){if(typeof +b==="number")return;if(0===b[0]){var +c=b[1];if(typeof +c!=="number"&&0===c[0]){var +e=c[1],i=hI(e),l=i?c4(e):i;if(l)c[1]=d1(e);return}throw h([0,f,zq],1)}var +d=b[1];if(typeof +d!=="number"&&1===d[0]){var +g=d[1],m=b[4],n=b[3],j=hI(g),k=j?c4(g):j;if(!k)return k;d[1]=d1(g);hM(n);b=m;continue}throw h([0,f,zr],1)}}function +lF(a,b){var +c=b;for(;;){if(typeof +c==="number")return;if(0===c[0]){var +d=c[1];if(typeof +d!=="number"&&0===d[0]){var +e=d[1],u=c[2];if(!lx(e)){if(lw(e)){var +k=hL(a);j(a[4],k)[1+k]=d;j(a[5],k)[1+k]=[0,c,0];d[1]=lA(k);return}if(ly(e)){var +n=zg(e),v=[0,c,j(a[5],n)[1+n]];j(a[5],n)[1+n]=v;return}var +q=c4(e);if(q)throw h([0,f,zu],1);return q}var +m=a[2];if(-1a[3])throw h([0,f,zt],1)}d[1]=d1(e);return}throw h([0,f,zs],1)}var +g=c[1];if(typeof +g!=="number"&&1===g[0]){var +r=c[4],s=c[3],i=g[1],w=c[2];if(lw(i)){var +l=hL(a);j(a[4],l)[1+l]=g;j(a[5],l)[1+l]=[0,c,0];g[1]=lA(l);hM(s);return hM(r)}if(!lx(i)){if(ly(i)){var +o=i>>>2|0,x=[0,c,j(a[5],o)[1+o]];j(a[5],o)[1+o]=x;return}var +t=c4(i);if(t)throw h([0,f,zx],1);return t}if(-1a[3])throw h([0,f,zw],1)}g[1]=d1(i);lF(a,s);c=r;continue}throw h([0,f,zv],1)}}function +d2(a,b){if(typeof +b==="number")return 0;if(0!==b[0]){var +i=b[1];if(-1===i){var +l=hL(a);b[1]=0;j(a[4],l)[1+l]=b;var +p=d2(a,b[2]);return[1,b,0,p,d2(a,b[3])]}if(!c4(i)){b[1]=d1(b[1]);var +r=d2(a,b[2]);return[1,b,0,r,d2(a,b[3])]}var +d=i>>>2|0,k=j(a[5],d)[1+d];if(!k)throw h([0,f,zA],1);var +m=k[2],q=k[1];j(a[5],d)[1+d]=m;if(0===m)b[1]=0;return q}var +e=b[1];if(hI(e)&&c4(e)){var +c=e>>>2|0,g=j(a[5],c)[1+c];if(!g)return[0,b,0];var +n=g[2],o=g[1];j(a[5],c)[1+c]=n;return o}b[1]=0;return[0,b,0]}var +hN=[0,0,[0],0,0];function +zh(a){return a[1]}function +zm(a){return a[1]}function +zn(a){return a[2]}function +zo(a,b){var +c=lD(0),d=lD(0),e=he(0),f=he(0);fr(c,e,hG,a);fr(d,f,hH,b);zl(c,d,e,f);return[0,c,d]}function +zp(a){if(typeof +a==="number")return;if(0===a[0]){a[1]=0;return}var +b=fn(a[3]);a[1]=(lv(fn(a[2]),b)+1|0)<<2;return}function +zy(a){var +e=a[6]-1|0,g=0;if(e>=0){var +b=g;for(;;){var +c=j(a[4],b)[1+b];if(typeof +c!=="number")if(0===c[0])c[1]=lz(c[1]);else +c[1]=lz(c[1]);var +d=j(a[5],b)[1+b];if(!d)throw h([0,f,zz],1);if(d[2]){var +i=av(d);j(a[5],b)[1+b]=i}var +k=b+1|0;if(e===b)break;b=k}}return}function +lG(a,b,c){if(typeof +b==="number"){if(typeof +c==="number")return[0,hN,0]}else if(b[1]===c)return[0,hN,b];var +t=typeof +b==="number"?bs:b[1],m=zo(t,c),i=zm(m),n=zn(m),u=lC(n),v=lC(i)+u|0,o=zh(i)-v|0,w=lB(n),p=lB(i)+w|0,x=0,y=bz(p,0),z=bz(p,0),A=a?o:-1,B=a?0:-1,C=a?bz(o,0):[0],d=[0,C,B,A,z,y,x];lF(d,b);if(d[2]!==d[3])throw h([0,f,zB],1);zy(d);var +q=d2(d,c),r=d[6]-1|0;if(r>=0){var +g=r;for(;;){zp(j(d[4],g)[1+g]);var +F=g-1|0;if(0===g)break;g=F}}if(!a)return[0,hN,q];var +k=[0,0],l=[0,0],s=d[6]-1|0,D=0;if(s>=0){var +e=D;for(;;){bA(function(a){if(typeof +a!=="number")if(0===a[0]){var +b=a[2];if(b){k[1]=[0,b[1],k[1]];return 0}}else{var +c=a[2];if(c){l[1]=[0,c[1],l[1]];return 0}}return 0},j(d[5],e)[1+e]);var +E=e+1|0;if(s===e)break;e=E}}return[0,[0,d[2],d[1],k[1],l[1]],q]}function +zC(d,b){if(typeof +b==="number")return 0;function +c(a){a:if(typeof +a!=="number"){b:{if(0===a[0]){var +b=a[1];if(typeof +b!=="number"&&0===b[0]){var +e=a[2];if(e){var +j=e[1];break b}var +k=g(d[1],b[2]);a[2]=[0,k];return k}break a}var +l=a[2];if(!l){var +n=c(a[3]),o=c(a[4]),m=i(d[2],n,o);a[2]=[0,m];return m}var +j=l[1]}return j}throw h([0,f,zD],1)}return[0,c(b)]}function +fs(a,b){return[0,[0,a,b],0]}function +ft(a){return zC(a[1],a[2])}function +zE(a,b){var +c=a[1];return[0,c,lG(0,a[2],b)[2]]}function +hO(a,b){var +d=a[1],c=lG(1,a[2],b);return[0,c[1],[0,d,c[2]]]}function +fu(a,b,c,d){var +e=[0,d];if(dy===a)var +h=c[1],g=0;else if(oC<=a)var +h=c[2].length-1,g=c[1];else +var +h=c[2].length-1,g=0;var +k=h-1|0;if(k>=g){var +f=g;for(;;){var +l=j(c[2],f)[1+f];if(l)e[1]=i(b,l[1],e[1]);var +m=f+1|0;if(k===f)break;f=m}}if(oC>a)bA(function(a){e[1]=i(b,a,e[1]);return 0},c[3]);if(dy!==a)bA(function(a){e[1]=i(b,a,e[1]);return 0},c[4]);return}function +hP(a,b,c){if(typeof +c==="number")throw h([0,f,zF],1);if(0===c[0])return g(a,c[2]);var +d=hP(a,b,c[3]);return i(b,hP(a,b,c[2]),d)}function +c5(a,b,c){var +d=b[2],e=b[1],f=fh(c);if(f){var +g=f[1];return typeof +g==="number"?_(e):_(hP(a,d,g))}var +h=[0,fs(a,d)];return t(c,function(a){var +b=zE(h[1],a);h[1]=b;var +c=ft(b);return c?c[1]:e})}var +fv=[0,bs,bi];function +zG(a,b){return fl(b,fv,a)}function +d3(a){return zG(a,aM)}function +cq(a){function +e(a,b){var +c=a,d=b;for(;;){if(typeof +c==="number")return d;if(0===c[0])return[0,c[2],d];var +f=e(c[3],d);c=c[2];d=f}}return e(a,0)}var +lH=[0,_(0),function(a,b){return br(a,b,bi)}];function +bG(c,b){return c5(function(a){return aM(g(c,a))},fv,b)}function +zI(a,b){return dY(c5(b,lH,a))}function +bH(a){return zI(a,function(a){return t(a,aM)})}function +zH(c,b){return c5(function(a){var +b=g(c,a);return b?aM(b[1]):bs},fv,b)}var +b7=e;function +zJ(a){return a[pw]}function +hQ(a,b){var +c=a?a[1]:b7;return Pq(b).join(c)}function +hR(a){return 0===zJ(a)?1:0}function +fw(a,b){return rm(a,b)}z["Number"];function +zK(a,b){var +c=a?a[1]:10;return b.toString(c)}function +zL(a,b){return a.concat(b)}function +zM(a,b,c){var +d=a?a[1]:0,e=b?[0,d,b[1]]:[0,d];return dH(c,"slice",e)}function +zN(a,b){return Pp(b.split(a))}function +zO(a,b){return b.startsWith(a)|0}var +hS=null,c6=undefined;function +d4(a){return a===hS?1:0}function +lI(a){return a===c6?1:0}function +fx(a){var +b=d4(a);return b?b:lI(a)}function +lJ(a){return 1-fx(a)}function +lK(a,b){return fx(b)?0:[0,g(a,b)]}function +hT(a,b,c){return c?g(b,c[1]):a}var +r=z;function +zS(a,b,c){a[b]=!!c;return}function +lL(a,b,c){a[b]=c;return}function +b8(a,b,c){if(c)return lL(a,b,c[1]);return}function +lM(a){return new +r["Array"](a)}function +zX(a){return a[pw]}function +hU(c,b){return su(zX(b),function(a){return g(c,b[a])})}function +lN(f,b){return function(a,b,c){var +e=a,d=c;for(;;){if(!d)return b;var +h=d[2];b[e]=g(f,d[1]);e=e+1|0;d=h}}(0,lM(0),b)}function +zY(a,b){var +c=new +r["Error"](b);return a?(c[bR]=a[1],c):c}function +lO(a,b){return g(function(a){throw a},zY(a,b))}var +lP=r["Promise"];function +zW(a){return aX(a)}function +hV(a){return lP.resolve(a)}function +cr(a,b,c){return dH(a,zW(b),c)}function +a_(a){return aX(a)}function +aG(a){return C(a)}function +zP(a,b,c){if(!c)return;a[b]=c[1];return}var +zQ=true;function +zR(a,b){a[b];return}function +zT(a,b,c){if(c)return zS(a,b,c[1]);return}function +zU(a,b){return a[b]}function +zV(a,b){return a[b]}function +zZ(a){return new +lP(bX(2,function(c,b){return i(a,function(a){return c(a)},function(a){return b(a)})}))}function +z0(a,b){a.then(bX(1,b));return}function +z1(a,b){return a.then(bX(1,b))}function +z2(a,b,c){return a.then(bX(1,b),bX(1,c))}function +fy(a){return{fut:a}}function +hW(a){return a["fut"]}function +lQ(a,b){return z0(hW(a),b)}function +hX(a){return fy(hV(a))}function +lR(a,b){return fy(z1(hW(a),function(a){return hW(g(b,a))}))}function +fz(c,b){return lR(b,function(a){return hX(g(c,a))})}function +z6(d,b,c){return fy(z2(c,function(a){return hV([0,g(d,a)])},function(a){return hV([1,g(b,a)])}))}function +hY(a,b){return z6(a,function(a){return a},b)}function +cs(a,b){return fz(function(a){return sc(b,a)},a)}function +z3(a){var +c=[0,function(a){throw h([0,f,z4],1)}];function +b(a){return lO(0,"The future is already set")}return[0,fy(zZ(function(a,b){c[1]=a;return 0})),function(a){g(c[1],a);c[1]=b;return 0}]}function +z5(a){return hX([0,a])}function +z7(c,b){return function(a){return lR(c,a)}(function(a){return 0===a[0]?g(b,a[1]):hX(a)})}r["Event"];function +fA(a){return a["target"]}function +lS(a){a.preventDefault();return 0}function +ct(a,b,c,d){var +e=a?a[1]:{},f=bX(1,c);d.addEventListener(b,f,e);return function(a){d.removeEventListener(b,f,e);return 0}}function +lT(a){return g(a,0)}var +hZ="change",d5=gA,h0="keyup";r["ArrayBuffer"];r["DataView"];function +z8(a){a.stopImmediatePropagation();return}var +z9="DOMContentLoaded",z_="ended",z$=jr,Aa="play",Ab="scroll",Ac="wheel";r["Blob"];r["File"];var +lU=r[gB];function +h1(a){return lU.stringify(a)}function +fB(a){try{var +c=lU.parse(a)}catch(f){var +b=B(f);if(b[1]===dX)return[1,b[2]];throw h(b,0)}return[0,c]}r["encodeURI"];r["decodeURI"];var +Ad=r["encodeURIComponent"],Ae=r["decodeURIComponent"],fC=r["URL"],h2=bo;function +Ag(a){return zV(a,Ah)}var +Al=r["URLSearchParams"];function +Am(a){return a.toString()}function +lV(a){return a.toString()}function +a0(a,b){return[0,a,b]}var +fD=[0,b7,b7];function +h3(a){return[0,a,b7]}function +lW(a){return a}var +bj=qQ,fE=i$,h4=bR,lX="placeholder",h5=pU,d6="type",fF=bN,As="for";function +bk(a){return a0(bj,a)}function +h6(a){return a0(As,a)}var +Av=h3(n4),Ax=h3("required");function +Ar(a,b){return[0,a,zK(0,b)]}var +At=o5,Au="width";function +lY(a){return a0(At,a)}function +cu(a){return a0(h5,a)}function +lZ(a){return a0(fF,a)}var +Ay=h3("selected"),cv=r["document"];function +Af(a,b){return a?new +fC(b,a[1]):new +fC(b)}function +Ai(a){function +d(a){return Ae(a)}try{var +c=Ag(a),e=zO(h2,c)?zM(Aj,0,c):c,f=[0,cn(d,zN(h2,e))];return f}catch(f){var +b=B(f);if(b[1]===dX)return[1,b[2]];throw h(b,0)}}function +Ak(a,b){function +e(a){return zL(h2,Ad(a))}try{var +d=new +fC(a);d[q2]=hQ(0,cn(e,b));var +f=[0,d];return f}catch(f){var +c=B(f);if(c[1]===dX)return[1,c[2]];throw h(c,0)}}function +An(a){return new +Al(a)}function +Ao(a,b){var +c=new +fC(a);lL(c,Ap,Am(b));return c}function +Aq(a,b){return a?b:fD}function +Aw(a){return a0(fE,a)}function +Az(a){return a0(d6,a)}function +AA(a){return Ar(Au,a)}function +AB(a){return a["ownerDocument"]}if(!fx(cv))cv[oj];function +AC(a,b){a.appendChild(b);return 0}function +AD(a,b,c,d){var +g=b,f=c,e=d;for(;;){if(!e){if(0!==g)a.setAttribute(pU,hQ([0,";"],av(g)));if(0!==f)a.setAttribute(qQ,hQ([0,aO],av(f)));return}var +h=e[2],k=e[1],i=k[2],j=k[1];if(hR(j))e=h;else if(fw(j,h5)){g=[0,i,g];e=h}else if(fw(j,bj)){var +l=hR(i)?f:[0,i,f];f=l;e=h}else{a.setAttribute(j,i);e=h}}}function +l0(a,b,c,d){var +f=a?a[1]:cv,g=b?b[1]:0,e=f.createElement(c);AD(e,0,0,g);bA(function(a){return AC(e,a)},d);return e}function +ay(a,b){var +c=a?a[1]:cv;return c.createTextNode(aG(b))}function +h7(a,b,c){return hR(a)?0:b?(c.setAttribute(a,b[1]),0):(c.removeAttribute(a),0)}function +AF(a){return lI(a)?0.:a}function +h8(a){return[0,a,AF,function(a){return a}]}function +h9(a,b){var +c=b[a[1]];return g(a[2],c)}function +l1(a,b,c){return b?(c[n7].add(a),0):(c[n7].remove(a),0)}var +l2="div",l3="span",AK="audio",AN="h1";function +fG(a,b,c,d){return l0(b,c,a,d)}function +fH(a,b,c){return fG(l2,a,b,c)}function +l4(a){return a[oj]}function +fI(a,b,c){dH(a,b,c);return 0}var +fJ=r[pz];function +fK(a){return gW(function(a,b,c){var +e=b,d=c;for(;;){if(!d)return a;var +f=d[2];a[e]=d[1];e=e+1|0;d=f}}(lM(0),0,a))}function +a1(a){return fI(fJ,AY,fK(a))}function +l5(a){return fI(fJ,AZ,fK(a))}function +h_(a){return fI(fJ,A2,fK(a))}r[pz];var +h$=r["navigator"],A5=r["performance"],l6=r[qI];zR(r,A6);function +AE(a,b){dH(a,pm,hb(b));return}function +AG(a,b,c){var +e=a?a[1]:r[qI],d=e.getComputedStyle(c)[b];return fx(d)?b7:d}function +AH(a){return zU(a,AI)}function +AJ(a,b){var +c=a?a[1]:qz,d=qz<=c?1:0;b.scrollIntoView(!!d);return 0}var +AL=ju,AM="form",AO="img",AP=ji,AQ="label",AR="option",AS="select";function +AT(a,b,c){return fG(AK,a,b,c)}function +AU(a,b,c){return fG(AN,a,b,c)}function +AV(a,b,c){return fG(l3,a,b,c)}function +AW(a){var +b=a[qq];return lJ(b)?b:lO(0,"Document body is null. Try to defer your script execution.")}function +AX(a){return lK(function(a){return a},a["activeElement"])}function +A0(a){return fI(fJ,A1,fK(a))}function +A3(a){return a}function +A4(a){return a.now()}function +A7(a,b){return r.setTimeout(bX(1,b),a)}function +A8(a){r.clearTimeout(a);return}function +A9(a){r.requestAnimationFrame(bX(1,a));return}r["ClipboardItem"];r["FormData"];var +Ba=r["Headers"];function +l7(a,b,c,d,e,f,g,h,i,j,k,l,m){var +n={};n[qq]=hT(c6,function(a){return a},a);b8(n,Bc,b);b8(n,Bd,c);zP(n,Be,kp(function(a){return a},d));b8(n,Bf,e);zT(n,Bg,f);b8(n,Bh,g);b8(n,Bi,h);b8(n,Bj,i);b8(n,Bk,j);b8(n,Bl,k);n["signal"]=hT(c6,function(a){return a},l);return n}var +Bm=r["Request"];r["Response"];var +Bo=r["fetch"];r["MediaStream"];r["MediaRecorder"];r["MessageChannel"];r["BroadcastChannel"];var +l8="message";function +l9(a){return a["data"]}r["Notification"];r["WebSocket"];function +A_(a){return a}function +A$(a){return hY(function(a){return a},a.text())}function +Bb(a,b){var +d=a?[0,a[1]]:[0],c=Pk(Ba,d);function +e(a,b){a.append(b[1],b[2]);return 0}bA(function(a){return e(c,a)},b);return c}function +Bn(a,b){var +c=a?a[1]:{};return new +Bm(b,c)}function +Bp(a){function +b(a){return a}return function(a){return hY(b,a)}(Bo(a))}function +Bq(a){return a["localStorage"]}function +Br(a,b){function +c(a){return a}return function(a){return lK(c,a)}(a.getItem(b))}function +Bs(a,b,c){try{a.setItem(b,c);return}catch(f){var +d=B(f);if(d[1]===dX)return;throw h(d,0)}}var +Bt=r["Worker"];r["SharedWorker"];r["clients"];r["registration"];r["serviceWorker"];function +Bu(a,b){var +c=a?a[1]:c6;return new +Bt(b,c)}function +Bv(a,b,c){var +d=a?a[1]:c6;b.postMessage(c,d);return}function +Bw(a,b){var +c=a?a[1]:c6;r.postMessage(b,c);return 0}function +a$(a,b,c){return[0,a,b,c]}function +l_(a){var +b=a[1];return 82===b?kq(fh(a[2])):83<=b?kq(fh(a[2])):1}function +fL(a){return sa(fh(a))}function +Bx(a){return eW(cn(function(a){var +b=a[1];return 82===b?[0,fL(a[2]),0]:83<=b?cq(fL(a[2])):[0,a[2],0]},a))}function +l$(a){if(!a)return By;var +b=sA(l_,a),c=b[2];return[0,Bx(b[1]),c]}var +ma=pm,ia="before";function +BB(a){return[0,a]}function +BC(a,b){return[1,hS,a,b]}var +BD="remove",BE="contains";function +mb(a){var +b=AX(AB(a));return b?cr(a,BE,[0,b[1]])|0:0}function +mc(e,b){var +c=[0,fs(BB,BC)];return t(b,function(a){var +b=hO(c[1],a),d=b[2],g=b[1];c[1]=d;fu(dy,function(a,b){return 0===a[0]?a[1][gi]=zQ:0},g,0);var +h=mb(e),i=ft(d);if(i){var +f=function(d,b){if(0!==b[0]){if(!d4(b[1]))return b[1];var +l=f(d,b[3]),k=f(l,b[2]);b[1]=k;return k}var +c=b[1];delete +c[gi];if(c.parentNode!==e)if(d4(d))cr(e,ma,[0,c]);else +cr(d,ia,[0,c]);else{var +a=c.nextSibling!==d?1:0;if(a){if(h)var +g=mb(c),i=g?function(a){for(;;){var +b=c.nextSibling;if(b===d)return 1;if(d4(b))return 0;cr(c,ia,[0,b])}}(0):g;else +var +i=h;var +j=1-i}else +var +j=a;if(j)if(d4(d))cr(e,ma,[0,c]);else +cr(d,ia,[0,c])}return c};f(hS,i[1])}fu(dy,function(a,b){if(0!==a[0])return 0;var +c=a[1],d=lJ(c[gi]),e=d?(delete +c[gi],cr(c,BD,[0]),0):d;return e},g,0);return e})}var +fM=_(0),ib=[0,b7,b7];function +Bz(a){if(!a)return BA;var +b=a[1],c=b[1];if(82===c){if(!a[2])return[0,0,[0,t(b[2],aM)]]}else +if(83<=c){if(!a[2])return[0,0,[0,b[2]]]}else if(!a[2])return[0,[0,b[2],0],0];return sw(l_,a)?[0,eW(cn(function(a){var +b=a[1];return 82===b?[0,fL(a[2]),0]:83<=b?cq(fL(a[2])):[0,a[2],0]},a)),0]:[0,0,[0,fl(function(a){var +b=a[1];return 82===b?t(a[2],aM):83<=b?a[2]:_(aM(a[2]))},lH,a)]]}function +md(c,b){function +d(a){var +b=a[2],d=a[1];return fw(d,bj)?l1(b,1,c):h7(d,[0,b],c)}function +e(a){var +b=a[1],d=a[2];return fw(b,bj)?l1(d,0,c):h7(b,0,c)}function +g(a){var +b=[0,ib];return function(a){if(b[1]!==ib)e(b[1]);var +c=lW(a);d(c);b[1]=c;return 0}}return fl(function(a){var +b=a[1];if(82===b){var +i=a[2];return t(i,g(0))}if(83>b)throw h([0,f,BF],1);var +j=a[2],c=[0,fs(function(a){var +b=lW(a);d(b);return b},function(a,b){return ib})];return t(j,function(a){var +b=hO(c[1],a),d=b[2],f=b[1];c[1]=d;fu(dy,function(a,b){return e(a)},f,0);ft(d);return 0})},[0,fM,function(a,b){return fM}],b)}function +ic(a,b){return ct(b[1],b[2],b[3],a)}function +BG(c,b){return fl(function(a){var +b=a[1];if(82===b){var +d=[0,0];return t(a[2],function(a){var +b=d[1];if(b)lT(b[1]);d[1]=[0,ic(c,a)];return 0})}if(83>b)throw h([0,f,BH],1);var +g=a[2],e=[0,fs(function(a){return ic(c,a)},function(a,b){return a})];return t(g,function(a){var +b=hO(e[1],a),c=b[2],d=b[1];e[1]=c;fu(dy,function(a,b){return lT(a)},d,0);ft(c);return 0})},[0,fM,function(a,b){return fM}],b)}function +me(a,b,c,d,e,f){var +p=b?b[1]:0,q=c?c[1]:0,r=d?d[1]:function(a){return},l=l$(p),k=l[2],s=l[1],m=l$(q),n=m[2],u=m[1],o=Bz(f),i=o[2],h=l0(a,[0,s],e,o[1]);g(r,h);if(k)if(i)var +v=mc(h,i[1]),j=br(md(h,k),v,function(a,b){return b});else +var +j=t(md(h,k),function(a){return h});else +var +j=i?mc(h,i[1]):_(h);bA(function(a){ic(h,a);return 0},u);var +w=n?br(BG(h,n),j,function(a,b){return b}):j;return w}function +cw(a,b,c,d,e,f){return me(b,c,d,e,a,f)}function +mf(a,b,c,d,e,f){return me(b,c,d,e,a,0)}function +mg(a,b,c,d,e){return cw(AL,a,b,c,d,e)}function +J(a,b,c,d,e){return cw(l2,a,b,c,d,e)}function +fN(a,b,c,d,e){return mf(AP,a,b,c,d,e)}function +id(a,b,c,d,e){return cw(AQ,a,b,c,d,e)}function +mh(a,b,c,d,e){return cw(l3,a,b,c,d,e)}function +BI(a,b,c,d,e){return cw(AM,a,b,c,d,e)}function +BJ(a,b,c,d,e){return mf(AO,a,b,c,d,e)}function +BK(a,b,c,d,e){return cw(AR,a,b,c,d,e)}function +BL(a,b,c,d,e){return cw(AS,a,b,c,d,e)}function +ie(a,b){return a===b?1:0}function +mi(a,b){return a!==b?1:0}function +fO(a,b){return b=i){var +e=h;for(;;){var +f=g(a,e+1|0),k=j(b,f)[1+f];b[1+f]=j(b,e)[1+e];b[1+e]=k;var +l=e-1|0;if(i===e)break;e=l}}return}function +BO(a){return BN(wD,a,0,a.length-1)}function +BP(a,b,c){var +d=a?a[1]:BQ;return function(a){return e1(d,a)}(function(a){return cn(b,a)}(s5(c)))}function +c7(a,b){return rm(a,b)}function +ih(a){try{var +c=[0,eJ(a)];return c}catch(f){var +b=B(f);if(b[1]===cl)return 0;throw h(b,0)}}function +BR(a){return 4===gQ(a)?1:0}function +mk(a){return jp<=a?jm<=a?jL<=a?2:6:jK<=a?4:3:gp<=a?jx<=a?1:7:jd<=a?5:0}function +BS(a){return typeof +a==="number"?bx<=a?1:0:aC<=a[1]?30+mk(a[2])|0:40+mk(a[2])|0}(function(a){var +b=BS(a);return g(p(BT),b)}(p3));var +ii=[c,BU,O(0)];function +ml(a){var +b=sR(a),c=dJ(b,"blue");if(0<=c){if(0>=c)return B3;if(b==="bold")return B2;if(b==="cyan")return B1;if(b==="green")return B0;if(b==="magenta")return BZ;if(b==="red")return BY;if(b==="reset")return BX;if(b==="white")return BW;if(b==="yellow")return BV}else{if(b==="Black")return Ca;if(b==="Blue")return B$;if(b==="Cyan")return B_;if(b==="Green")return B9;if(b==="Magenta")return B8;if(b==="Red")return B7;if(b==="White")return B6;if(b==="Yellow")return B5;if(b==="black")return B4}throw h(ii,1)}function +mm(a,b){b1(b,a);return Cc}function +mn(a){try{tt(a);tu(a)}catch(f){var +b=B(f);if(b!==hd)throw h(b,0)}return Cd}var +mo=[c,Ce,O(0)],Cb=0;function +Cf(a,b,c){if(c[1]===mo)return mm(a,c[2]);if(c[1]!==cV)return g(b,c);var +e=c[2];try{var +f=mm(a,ml(e));return f}catch(f){var +d=B(f);if(d===ii)return g(b,c);throw h(d,0)}}function +Cg(a,b,c){if(c[1]===mo)return mn(a);if(c[1]!==cV)return g(b,c);var +e=c[2];try{ml(e)}catch(f){var +d=B(f);if(d===ii)return g(b,c);throw h(d,0)}return mn(a)}function +Ch(a){var +c=cQ(0);w8(a,1);var +b=w9(a,0),d=b[2],e=b[1];return w_(a,[0,function(a){return Cf(c,e,a)},function(a){return Cg(c,d,a)},b[3],b[4]])}function +Ci(a,b){var +d=bg(64),c=cZ(d),e=a?Cb:a;if(e)Ch(c);return hA(function(a){b3(c,0);return bh(d)},c,b)}function +mp(a){return Ci(1,a)}function +mq(a){return a|0}function +Cj(a,b){return sC(a,b)}function +Ck(a){try{var +c=[0,rs(a)];return c}catch(f){var +b=B(f);if(b[1]===cl)return 0;throw h(b,0)}}function +mr(a,b){try{var +d=[0,hr(a,b)];return d}catch(f){var +c=B(f);if(c===am)return 0;throw h(c,0)}}function +Cl(a,b,c){try{var +f=hr(a,c);return f}catch(f){var +d=B(f);if(d!==am)throw h(d,0);var +e=g(b,c);dV(a,c,e);return e}}function +c8(a,b){if(!b)return 0;var +d=b[2],c=[0,g(a,b[1]),gC];Cm(c,1,a,d);return c}function +Cm(a,b,c,d){var +h=a,f=b,e=d;for(;;){if(!e){h[1+f]=0;return}var +j=e[2],i=[0,g(c,e[1]),gC];h[1+f]=i;h=i;f=1;e=j}}function +Cn(a,b){function +e(a,b,c,d,e){var +i=a,h=b,f=c;for(;;){if(ie(f,d)){i[1+h]=0;return}var +j=[0,g(e,f),gC];i[1+h]=j;i=j;h=1;f=f+1|0}}return function(a,b,c){if(ie(a,b))return 0;var +d=[0,g(c,a),gC];e(d,1,a+1|0,b,c);return d}(0,a,b)}function +c9(a,b){return b?[0,g(a,b[1])]:0}function +fP(a,b,c){return c?g(b,c[1]):a}function +Cp(a,b){if(b)return g(a,b[1]);return}function +ms(a,b){return Cp(b,a)}function +c_(a,b){return a?a[1]:b}function +mt(a,b){return c9(b,a)}function +Co(a){return a?1:0}function +Cq(a,b){if(b)return g(a,b[1]);return}function +Cr(a){return a?[0,a[1],0]:0}hp(0);function +Cs(a,b){if(0!==b[0])return;g(a,b[1]);return}var +Cu=[c,Ct,O(0)];function +d7(a){if(0===a[0])return a[1];throw h(Cu,1)}function +Cw(a,b){return 0===b[0]?g(a,b[1]):[1,b[1]]}function +mu(a,b){return Cs(b,a)}function +Cv(a,b){return 0===a[0]?a[1]:b}function +Cx(a,b){return Cw(b,a)}function +Cy(a){var +b=ti(a);return[0,,,,b[1],,,,,,b[7],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,b[37],,,,,,,,,,,b[23]]}function +mv(a){var +b=Cy(a);return[0,b[4],,,,,,b[10],,,,,,,,,,,,,,,,,,,,,,b[40],,,,,,,,,,,,,,,,,,,,b[51]]}function +Cz(e,b){var +d=m(e);if(fO(d,m(b)))return 0;var +f=m(b)-d|0;return function(a){var +c=a;for(;;){if(ie(c,d))return 1;if(aP(b,f+c|0)!==aP(e,c))return 0;c=c+1|0}}(0)}function +ij(a,b){return Cz(a,b)?[0,g$(b,0,m(b)-m(a)|0)]:0}function +CA(a,b){return}function +CB(a,b){CA(a,b);return}var +mx=[c,CC,O(0)];function +my(a){return[0,[0,a]]}function +cx(a,b,c,d){return[1,a,b,c,d]}function +CE(a){if(0===a[0]&&typeof +a[1]==="number")return 1;return 0}function +mz(a,b){if(0===b[0]){var +c=b[1];if(typeof +c==="number")return my(a);switch(c[0]){case +0:return[0,[1,a,c[1]]];case +1:return[0,[2,a,c[1],c[2]]];default:return cx(4,[1,a,c[1]],CD,[1,c[2],c[3]])}}var +d=b[2],f=b[1];if(typeof +d!=="number")switch(d[0]){case +0:break;case +1:return cx(f+1|0,[2,a,d[1],d[2]],b[3],b[4]);default:var +e=b[3],h=d[3],i=d[2],j=d[1],g=bY(e),k=bM===g?e[1]:ds===g?g7(e):e;return cx(f+1|0,[1,a,j],[ds,function(a){return mz([0,i,h],k)}],b[4])}return cx(f+1|0,[1,a,d[1]],b[3],b[4])}function +mA(a){if(0===a[0]){var +b=a[1];if(typeof +b==="number")throw h(mx,1);switch(b[0]){case +0:return[0,mw,b[1]];case +1:var +n=b[2];return[0,my(b[1]),n];default:return[0,[0,[1,b[1],b[2]]],b[3]]}}var +d=a[3],e=a[2],f=a[1],i=bY(d),j=bM===i?d[1]:ds===i?g7(d):d,g=a[4];if(typeof +g!=="number"&&0!==g[0]){var +c=a[4];if(typeof +c!=="number"&&2===c[0]){var +q=c[3];return[0,cx(f-1|0,e,d,[1,c[1],c[2]]),q]}var +p=c[2];return[0,cx(f-1|0,e,d,[0,c[1]]),p]}var +k=g[1];if(CE(j))return[0,[0,e],k];var +l=mA(j),m=l[2],o=[1,m[1],m[2]];return[0,cx(f-1|0,e,r_(l[1]),o),k]}function +CG(a){if(typeof +a==="number")return 0;switch(a[0]){case +0:return 1;case +1:return 2;default:return 3}}function +CF(a){try{var +c=[0,mA(a)];return c}catch(f){var +b=B(f);if(b===mx)return 0;throw h(b,0)}}function +CH(a){return 0===a[0]?CG(a[1]):a[1]}function +CI(a){return a["height"]}function +CJ(a){return a}function +CL(a){switch(a){case +0:return CM;case +1:return CN;default:return CO}}function +CK(a){return CJ(a["contentRect"])}function +CP(a,b,c){var +d=b?[0,c,{box:aG(CL(b[1]))}]:[0,c];dH(a,"observe",d);return 0}function +CQ(c){return new +r["ResizeObserver"](function(a,b){return i(c,hU(function(a){return a},a),b)})}function +mB(a){return a["mediaSession"]}function +CR(a){var +b=aG(a[3]),c=aG(a[2]);return{src:aG(a[1]),sizes:c,type:b}}function +mC(a){var +b=lN(CR,a[4]),c=aG(a[3]),d=aG(a[2]);return{title:aG(a[1]),artist:d,album:c,artwork:b}}function +mD(a,b,c){a.setActionHandler(b,bX(1,c));return}function +CS(a,b){a1([0,CT,[0,mC(b),0]]);var +c=mC(b);a["metadata"]=new +r["MediaMetadata"](c);return}var +CU="nexttrack",CV="previoustrack";function +CW(a,b,c,d){function +e(c,b){return kp(function(a){return[0,c,a]},b)}var +g=e(CX,a),h=e(CY,b),i=[0,g,[0,h,[0,e(CZ,c),0]]],f=sz(function(a){return a})(i),j=f?[0,Pl(hb(f))]:[0];dH(d,"setPositionState",j);return 0}function +fQ(a,b,c){return}var +C0=oe,C1="pattern";function +C2(a){function +b(a){return a|0}return function(a){return hY(b,a)}(a.persist())}function +C3(a){return a["storage"]}var +fR=mv([0,e2]);function +C4(a,b){g(a,b);return b}function +C5(a){var +b=ij(C6,a);if(b){var +c=b[1],d=Ck(c);if(d)return[0,[0,d[1]]];var +g=function(a){return[0,a]};return function(a){return c9(g,a)}(ih(c))}var +e=ij(C7,a);if(e){var +h=function(a){return[1,a]};return function(a){return c9(h,a)}(ih(e[1]))}var +f=ij(C8,a);if(!f)return 0;function +i(a){return[1,a]}return function(a){return c9(i,a)}(ih(f[1]))}function +mE(a){switch(a[0]){case +0:var +b=a[1];return g(p(C9),b);case +1:var +c=a[1];return g(p(C_),c);default:var +d=a[1];return g(p(C$),d)}}function +ik(a){var +c=a?a[1]:l4(cv);function +b(a){var +b=C5(aX(AG(0,"font-size",a)));if(!b)return 16.;var +c=b[1];return 0===c[0]?c[1]:cO(Da)}return function(a){switch(a[0]){case +0:return a[1];case +1:var +d=a[1];return d*b(l4(cv));default:var +e=a[1];return e*b(c)}}}function +il(e,b,c,d){function +f(a,b){return br(d,a,b)}function +g(a,b){return ak(e,b[1],b[2],a)}return function(a){return f(a,g)}(br(b,c,function(a,b){return[0,a,b]}))}var +Dd=[c,Dc,O(0)],Df=[c,De,O(0)];function +mF(a){return[0,0]}function +mG(a,b){if(a[1])throw h(Df,1);a[1]=[0,b];return 0}function +im(a){var +b=a[1];if(b)return b[1];throw h(Dd,1)}function +Db(a,b,c){return il(function(a,b,c){return[0,a,b,c]},a,b,c)}function +Dg(b){return[0,function(a){return U(b[1],a)}]}function +Dh(a){return h1(a)}function +Di(a){var +b=fB(a);return 0===b[0]?[0,b[1]]:(l5([0,b[1],0]),Dj)}var +mH=dU(0,64),mI=Bq(l6);function +Dk(a){return wR(mH,a)?cO(g(p(Dl),a)):dV(mH,a,0)}function +mJ(c,b){return function(a){return Bs(mI,c,a)}(Dh(b))}function +Dm(a){var +b=Br(mI,a);function +c(a){return Di(a)}var +d=b?[0,b[1]]:Dn;return Cx(d,c)}function +Do(a,b){var +c=Dm(a);if(0===c[0])return c[1];var +d=c[1];return typeof +d==="number"?g(b,0):(A0([0,d[2],0]),g(b,0))}function +Dp(d,b){mJ(d,b);var +a=aL(b),c=fj(0,Q(a));fk(c,function(a){mJ(d,b6(c));return 0});b6(c);return a}function +mK(a,b){Dk(a);var +c=C(a);return Dp(c,Do(c,b))}function +d8(a,b){return mK(a,function(a){return b})}function +Dq(d){function +c(a,b,c){var +e=b?b[1]:Ds;return g(a,[0,i(p(Dr),d,e),c])}function +b(a,b){return c(h_,a,b)}return[0,,,,function(a){return b(0,a)}]}var +Dv=fR[49],mL=[0,fR[1],0],Dt=fR[7],Du=fR[29];function +Dw(a){return c8(function(a){return[0,80,bk(C(a))]},Dv(a))}function +io(a,b){var +d=Dw(b[1]),e=b[2],c=function(a){return cm(e,a)}(d);return a?[0,[0,80,Aw(C(a[1]))],c]:c}function +c$(a){var +b=mL[2];return[0,Du(a),b]}function +af(d,b,c){var +a=b[1],e=82===a?[0,82,t(b[2],function(a){return function(a){return a0(d,a)}(C(a))})]:83<=a?cO(Dy):[0,80,function(a){return a0(d,a)}(C(b[2]))];return[0,e,c]}function +fS(d,b,c){return b?[0,[0,80,function(a){return a0(d,a)}(C(b[1]))],c]:c}function +mM(a,b){var +c=b[1];return 82===c?[0,82,t(b[2],a)]:83<=c?[0,83,bG(a,b[2])]:[0,80,g(a,b[2])]}function +DA(a){return 0===a[0]?bk(C(a[1])):a[1]}function +ip(a,b){return[0,mM(DA,a),b]}function +iq(a){return ip(a,0)}function +ir(a,b){return ip(a,b)}function +Dx(a,b){var +c=b[1],d=a[1],e=cm(a[2],b[2]);return[0,Dt(d,c),e]}function +Dz(a,b,c){return b?[0,[0,80,a],c]:c}function +DB(a){return ip(mM(function(a){return[0,a]},a),0)}function +DF(a,b){return g(b,a)}function +DG(a,h){var +j=a?a[1]:mL;return function(a,k,c){var +l=a?a[1]:h[1];return function(a,b){var +d=aL(l);function +f(a){return Q(d)}function +e(a){return U(d,a)}return[0,ym(f(0),function(d){function +f(a){var +c=a[3];return a$(a[1],a[2],function(a){var +b=i(c,d,a);return typeof +b==="number"?b?e(g(h[2],d)):0:e(b[1])})}function +m(a){var +b=a[1];return 82===b?[0,82,t(a[2],f)]:83<=b?[0,83,bG(f,a[2])]:[0,80,f(a[2])]}var +l=io(0,fP(j,function(a){return function(a){return Dx(j,a)}(DF(d,a))},c)),n=c9(function(a){return c8(m,a)},a);return mg(k,[0,l],n,0,g(b,d))}),f,e]}}}var +DH=[0,0,function(a){return a?0:1}];function +DC(a,b,c,d){var +e=b?b[1]:0;return fN(a,[0,function(a){return af(fF,d,a)}(af(d6,DD,e))],c,0,0)}function +DE(a,b,c){return[0,a,b,c]}function +DI(a){return DG(a,DH)}function +DJ(a,b){return 0===b[0]?(a.scroll(0,b[1]),0):AJ(0,b[1])}function +DK(a,b,c,d,e){var +g=a?a[1]:0,h=b?b[1]:0,f=aL(1),i=ir(DL,ir([0,82,t(Q(f),function(a){return a?[1,bk("locked")]:[1,fD]})],g)),j=DB(DM),k=[0,[0,80,a$(0,d5,function(a){return U(f,1)})],0],l=J(0,[0,j],[0,k],0,[0,[0,82,mg(0,0,0,0,[0,[0,80,ay(0,DN)],0])],0]),m=a$(0,Ac,function(a){var +b=aj(f);return b?U(f,0):b});return J(0,[0,i],[0,[0,[0,80,m],h]],c,[0,[0,82,t(Db(e,Q(f),d),function(a){var +b=a[1],c=a[3];if(a[2])Cq(function(a){return DJ(b,a)},c);return b})],[0,[0,82,l],0]])}function +DO(e,b,c){var +d=aL(c);return[0,a$(0,b,function(a){return U(d,[0,g(e,fA(a)[bN])])}),d]}function +is(a,b,c,d,e,f,g,h,i,j){var +l=d?d[1]:0,m=f?f[1]:0,n=function(a){return fS(C1,h,a)}(function(a){return Dz(Ax,m,a)}([0,[0,80,Az(C(i))],l])),o=c_(b,function(a){return[0,a]}),k=DO(a,g,j),p=k[2],q=k[1];return[0,fN(c,[0,n],[0,[0,[0,80,q],Cr(e)]],0,0),p,o]}function +mN(a,b,c,d,e,f,g,h){var +i=c?c[1]:0;return is(a_,a,b,[0,function(a){return fS(fF,h,a)}(function(a){return fS(lX,g,a)}(i))],d,e,h0,f,DP,h)}function +DQ(a,b,c,d,e,f,g,h){var +i=c?c[1]:0;return is(a_,a,b,[0,function(a){return fS(lX,g,a)}(i)],d,e,h0,f,DR,0)}function +DS(a,b,c,d){var +e=b?b[1]:0;return is(function(a){return 0},0,a,[0,af(fF,d,e)],c,0,hZ,0,DT,0)}function +fT(a,b){return t(a,function(a){return[0,a,b]})}function +DU(a,b,c,d){return function(h){var +i=[0,[0,bs,function(a){return a}],function(a,b){var +c=b[2],d=a[2];return[0,bi(a[1],b[1]),function(a){return g(c,g(d,a))}]}];function +j(a){var +b=a[1],c=a[2];function +d(a){var +c=aj(b[2]);return c?g(b[3],c[1]):0}return[0,aM(b[1]),function(a){var +b=d(0);return g(g(c,a),b)}]}var +e=function(a){return c5(j,i,a)}(bH(d[2])),f=[0,82,t(e,function(a){var +b=a[2];return a$(0,C0,function(a){g(h,g(b,d[1]));return lS(a)})})],k=t(e,function(a){return a[1]}),l=fP([0,f,0],function(a){return sq(f,a)},c);return BI(a,b,[0,l],0,[0,[0,83,bH(k)],0])}}function +mO(a,b){return a?g(p(DV),b):g(p(DW),b)}function +DX(a,b,c){var +h=a?a[1]:0,i=b?b[1]:0,d=mO(1,c[1]),j=mO(0,c[1]),e=d8(d,c[2]),k=c[3];id(0,[0,[0,[0,80,h6(C(d))],0]],0,0,k);var +l=[0,80,j],f=function(a){return af(d6,DY,a)}(function(a){return af(h4,l,a)}(af(fE,[0,80,d],h))),g=aj(e),m=g?[0,[0,80,lZ(C(g[1]))],f]:f,n=fN(0,[0,m],[0,[0,[0,80,a$(0,h0,function(a){return U(e,[0,a_(fA(a)[bN])])})],i]],0,0);return[0,n,,Q(e)]}function +mP(a,b){return a?g(p(DZ),b):b}function +mQ(a,b,c){var +e=a?a[1]:0,f=b?b[1]:0;return function(a){var +b=mP(1,c[1]),g=mP(0,c[1]),d=d8(b,c[2]),h=c[3];id(0,[0,[0,[0,80,h6(C(b))],0]],0,0,h);var +i=[0,80,g],j=function(a){return af(d6,D0,a)}(function(a){return af(h4,i,a)}(af(fE,[0,80,b],e))),k=[0,[0,80,a$(0,hZ,function(a){return U(d,a_(fA(a)[bN]))})],f],l=BL(0,[0,j],[0,k],0,[0,[0,83,bH(bG(function(a){var +b=a[1],c=a[2],e=iq([0,80,[1,lZ(C(b))]]),f=ir([0,82,t(Q(d),function(a){return[1,Aq(c7(a,b),Ay)]})],e);return BK(0,[0,f],0,0,[0,[0,80,ay(0,c)],0])},a))],0]);return[0,l,,Q(d)]}}function +mR(a,b,c,d){return c?ak(p(D1),d,a,b):ak(p(D2),d,a,b)}function +D3(f){function +d(a,b,c,d,e){var +g=mR(a,b,1,f[1]);function +i(a){return a?[0,c]:0}var +j=mR(a,b,0,f[1]),h=d8(g,i(e)),k=id(0,[0,[0,[0,80,h6(C(g))],0]],0,0,d),l=[0,80,j],m=function(a){return af(d6,D4,a)}(function(a){return af(h4,l,a)}(af(fE,[0,80,g],0))),n=[0,[0,82,t(Q(h),function(a){return a?Av:fD})],m],o=[0,[0,80,a$(0,hZ,function(a){return U(h,i(fA(a)[n4]|0))})],0],p=Q(h);return[0,J(0,0,0,0,[0,[0,82,fN(0,[0,n],[0,o],0,0)],[0,[0,82,k],0]]),p]}var +a=function(e,b){var +c=[0,0];return bG(function(a){var +b=d(e,c[1],a[1],a[2],a[3]),f=b[2],g=b[1];c[1]++;return[0,g,f]},b)}(0,f[2]),b=bG(function(a){return a[1]},a);function +c(a){return a}var +e=function(a){return zH(c,a)}(bH(c5(function(a){return aM(a[2])},fv,a)));return[0,J(0,0,0,0,[0,[0,83,bH(b)],0]),e]}function +D5(a){var +d=tr(a);return[0,,function(a){return CH(a[1])},function(a){return[0,mw,d[1]]},,function(a,b,c){var +e=d[4].call(null,b,c,a[2]);return[0,mz(b,a[1]),e]},function(a){var +c=CF(a[1]);if(!c)return[0,a,0];var +e=c[1],b=e[2],f=e[1],g=[0,[0,b,d[28].call(null,b,a[2])]];return[0,[0,f,d[7].call(null,b,a[2])],g]},function(a,b){return d[29].call(null,b,a[2])}]}function +D6(a){var +f=D5(a);function +h(a,b){return c(a,b)}function +e(a,b,c){var +d=c;for(;;){var +e=f[6].call(null,d[2]),h=e[2],i=e[1];if(!h)return a<50?n(a+1|0,b,d):k(n,[0,b,d]);var +j=h[1],l=j[2],m=l[1],o=j[1];if(!l[2][1]){g(b,m);return[0,d[1],i,d[3]]}var +p=f[5].call(null,d[1],o,[0,m,[0,0]]);d=[0,p,i,d[3]]}}function +c(a,b){return aY(e(0,a,b))}function +n(a,b,c){var +d=c;for(;;){var +h=f[6].call(null,d[1]),i=h[2],j=h[1];if(!i)return a<50?e(a+1|0,b,d):k(e,[0,b,d]);var +l=i[1],m=l[2],n=m[1],o=l[1];if(!m[2][1]){g(b,n);return[0,j,d[2],d[3]]}var +p=f[5].call(null,d[2],o,[0,n,[0,0]]);d=[0,j,p,d[3]]}}function +j(a,b){var +c=b;for(;;){var +e=f[2].call(null,c[2]),d=f[2].call(null,c[1])+e|0;if(0>>8|0)&ac));var +m=2;function +n(a,b,c){R(a,b,c);return}(function(a){return n(b,m,a)}((e>>>16|0)&ac));var +o=3;function +p(a,b,c){R(a,b,c);return}(function(a){return p(b,o,a)}(c&ac));var +q=4;function +r(a,b,c){R(a,b,c);return}(function(a){return r(b,q,a)}((c>>>8|0)&ac));var +s=5;function +t(a,b,c){R(a,b,c);return}(function(a){return t(b,s,a)}((c>>>16|0)&ac));var +u=6;function +v(a,b,c){R(a,b,c);return}(function(a){return v(b,u,a)}(64|(c>>>24|0)&15));var +w=7;function +x(a,b,c){R(a,b,c);return}(function(a){return x(b,w,a)}(d&ac));var +y=8;function +z(a,b,c){R(a,b,c);return}(function(a){return z(b,y,a)}(I|(d>>>24|0)&63));var +A=9;function +B(a,b,c){R(a,b,c);return}(function(a){return B(b,A,a)}((d>>>8|0)&ac));var +C=10;function +D(a,b,c){R(a,b,c);return}(function(a){return D(b,C,a)}((d>>>16|0)&ac));var +E=11;function +F(a,b,c){R(a,b,c);return}(function(a){return F(b,E,a)}(f&ac));var +G=12;function +H(a,b,c){R(a,b,c);return}(function(a){return H(b,G,a)}((f>>>8|0)&ac));var +J=13;function +K(a,b,c){R(a,b,c);return}(function(a){return K(b,J,a)}((f>>>16|0)&ac));var +L=14;function +N(a,b,c){R(a,b,c);return}(function(a){return N(b,L,a)}(h&ac));var +O=15;function +P(a,b,c){R(a,b,c);return}(function(a){return P(b,O,a)}((h>>>8|0)&ac));return aw(b)}function +iu(a,b){var +i=a?a[1]:0,g=i?55:87;function +h(a,b){return 10<=b?a+b|0:48+b|0}var +e=kv(Et),c=[0,0],d=[0,0];function +f(d,b,c){function +e(a,b,c){R(a,b,c);return}(function(a){return e(d,b,a)}(h(g,c>>>4|0)));var +f=b+1|0;function +i(a,b,c){R(a,b,c);return}return function(a){return i(d,f,a)}(h(g,c&15))}for(;;){if(4<=d[1])break;var +n=E(b,d[1]);f(e,c[1],n);c[1]=c[1]+2|0;d[1]++}c[1]++;for(;;){if(6<=d[1])break;var +m=E(b,d[1]);f(e,c[1],m);c[1]=c[1]+2|0;d[1]++}c[1]++;for(;;){if(8<=d[1])break;var +l=E(b,d[1]);f(e,c[1],l);c[1]=c[1]+2|0;d[1]++}c[1]++;for(;;){if(10<=d[1])break;var +k=E(b,d[1]);f(e,c[1],k);c[1]=c[1]+2|0;d[1]++}c[1]++;for(;;){if(16<=d[1])return aw(e);var +j=E(b,d[1]);f(e,c[1],j);c[1]=c[1]+2|0;d[1]++}}function +Es(b){function +c(a){return Eq(b,a)}return function(a){return Er(c)}}function +mT(a,b){var +c=OO(b[1]),e=b[3],f=b[2];return ak(d(a)(Eu),f,e,c)}function +mU(a,b){return g(d(a)(Ev),m(b))}function +mV(a){var +b=bg(20);return hA(function(a){b3(a,0);return x(bh(b))},cZ(b),a)}function +mW(a){return[0,xJ(xH,xI,a),0,a]}mW(0);function +Ew(a,b){return ek(mV(Ex),mU,a,mT,b)}function +Ey(a,b){return ek(mV(Ez),mU,a,mT,b)}function +EA(a,b,c,d,e){if(0<=e&&0<=b&&0<=d&&(m(a)-b|0)>=e)return(c[3]-d|0)=0){var +c=i;for(;;){var +f=c%16|0,j=OP(b[1],b[2]+c|0);dl(d(a)(EH),g,f,j,h,f);var +k=c+1|0;if(e===c)break;c=k}}return hv(a,0)});function +ED(a,b,c,d){return EC(EA,function(a){return m(a)},a,b,c,d)}ED(0,0,0,EJ);function +EK(a,b){return cn(b,a)}function +EL(a,c){function +o(a,b){var +e=a,d=b;for(;;){if(!d)return e;var +c=d[1];e=[0,c[1],[0,c[2],[0,c[3],[0,c[4],[0,c[5],[0,c[6],[0,c[7],[0,c[8],[0,c[9],e]]]]]]]]];d=d[2]}}return function(a,b){var +e=a,d=b;for(;;){if(d){var +f=d[2];if(f){var +h=f[2];if(h){var +i=h[2];if(i){var +j=i[2];if(j){var +k=j[2];if(k){var +l=k[2];if(l){var +m=l[2];if(m){var +n=m[2];if(n){var +p=n[2],q=n[1],r=m[1],s=l[1],t=k[1],u=j[1],v=i[1],w=h[1],x=f[1],y=g(c,d[1]),z=g(c,x),A=g(c,w),B=g(c,v),C=g(c,u),D=g(c,t),E=g(c,s),F=g(c,r);e=[0,[0,y,z,A,B,C,D,E,F,g(c,q)],e];d=p;continue}}}}}}}}}return o(EK(d,c),e)}}(0,a)}function +mX(a,b,c){if(!b)return 0;var +f=b[2],d=b[1];if(!f)return[0,g(a,d),0];var +h=f[2],e=f[1];if(!h){var +z=g(a,d);return[0,z,[0,g(a,e),0]]}var +i=h[2],j=h[1];if(!i){var +x=g(a,d),y=g(a,e);return[0,x,[0,y,[0,g(a,j),0]]]}var +k=i[2],l=i[1];if(k){var +m=k[2],n=k[1],o=g(a,d),p=g(a,e),q=g(a,j),r=g(a,l),s=g(a,n),t=50=0){var +e=h;for(;;){var +c=E(b,e);a:if(34===c)d(a)(EQ);else if(32<=c)if(92===c)d(a)(ER);else +g(d(a)(ES),c);else{if(14>c)switch(c){case +8:d(a)(EU);break a;case +9:d(a)(EV);break a;case +10:d(a)(EW);break a;case +13:d(a)(EX);break a}g(d(a)(ET),c)}var +i=e+1|0;if(f===e)break;e=i}}return d(a)(EP)}var +EM=[0,function(a){if(typeof +a==="number")return bQ;var +b=a[1];if(ez>b)return bS<=b?aB<=b?[0,aB,a[2]]:[0,aB,a[2]]:cG<=b?[0,n,a[2]]:[0,n,a[2]];if(eq===b)return[0,65,a[2]];if(o<=b)return W<=b?[0,79,a[2]]:[0,65,a[2]];if(aN<=b)return[0,aN,a[2]];var +c=a[2],d=c[2],e=c[1];return d?[0,65,[0,[0,n,e],[0,d[1],0]]]:[0,n,e]},function(a){if(typeof +a==="number")return bQ;var +b=a[1];return 65===b?[0,o,a[2]]:aB<=b?aN<=b?[0,aN,a[2]]:[0,aB,a[2]]:79<=b?[0,W,a[2]]:[0,n,a[2]]},function(a){return[0,0]}(0)];function +EY(a,b,c){var +e=a?a[1]:0,j=b?b[1]:EN;return function(a,b){function +f(a,b){var +e=g(c[1],b);if(typeof +e==="number")return d(a)(EZ);var +h=e[1];if(65===h){var +n=[0,function(a,b){return d(a)(E0)}],m=e[2];return i(d(a)(E1),function(a,b){return fe(n,f,a,b)},m)}if(aB<=h){if(aN<=h)return e[2]?d(a)(E2):d(a)(E3);var +k=e[2],l=ry(k),o=l[2];return l[1]==0.?g(d(a)(E4),o):g(d(a)(E5),k)}if(79>h)return i(j,a,e[2]);function +q(a,b){var +c=b[2],e=b[1];return ek(d(a)(E7),j,e,f,c)}var +r=[0,function(a,b){return d(a)(E6)}],p=e[2];return i(d(a)(E8),function(a,b){return fe(r,q,a,b)},p)}function +h(a,b){var +e=g(c[1],b);if(typeof +e!=="number"){var +k=e[1];if(65===k){var +l=e[2];if(!l)return d(a)(E$);var +n=[0,function(a,b){return d(a)(E9)}];return i(d(a)(E_),function(a,b){return fe(n,h,a,b)},l)}if(79===k){var +m=e[2];if(!m)return d(a)(Fd);var +o=function(a,b){var +c=b[2],e=b[1];return ek(d(a)(Fb),j,e,h,c)},p=[0,function(a,b){return d(a)(Fa)}];return i(d(a)(Fc),function(a,b){return fe(p,o,a,b)},m)}}return f(a,b)}return e?f(a,b):h(a,b)}}function +Fe(a){function +d(a){if(typeof +a==="number")return bQ;var +b=a[1];if(65===b)return[0,o,mY(d,a[2])];if(aB>b)return 79<=b?[0,W,mY(function(a){var +b=a[1];return[0,b,d(a[2])]},a[2])]:[0,n,a[2]];if(aN<=b)return[0,aN,a[2]];var +e=a[2],f=ry(e),c=f[2];if(f[1]!=0.)return[0,aB,e];if(-1073741824.<=c&&c<=en)return[0,bS,c|0];return[0,cG,g(p(Ff),c)]}return d(a)}function +V(a,b){return cL(a,b)}function +da(a,b,c){S(a,b,c);return}var +mZ=a9(oh);function +$(a,b,c){return[0,eo,cP(a,b,c)]}function +fU(a,b,c,d,e){var +f=M(2),i=e0(c,d,e);if(a)var +h=1,g=0;else +var +h=0,g=1;da(f,g,b>>>8|0);da(f,h,b&ac);return[0,eo,aw(sH(f,i))]}var +Fl=a9(65533),d9=Fo.slice();function +Fg(a,b){return x(i(p(Fh),a,b))}function +Fi(a){return a}function +Fj(a,b,c,d,e){bc(a,b,c,d,e);return}function +Fk(a,b){return a[1+b]}function +Fm(a,b){var +c=V(a,b);return du>>0)throw h([0,f,Fp],1);switch(m){case +0:return d(V(a,b));case +1:var +r=V(a,b),n=V(a,b+1|0);return 2===(n>>>6|0)?d((r&31)<<6|n&63):$(a,b,c);case +2:var +i=V(a,b),e=V(a,b+1|0),o=V(a,b+2|0),j=(i&15)<<12|(e&63)<<6|o&63;if(2!==(o>>>6|0))return $(a,b,c);if(gG===i){if(160<=e&&gn>=e)return d(j);return $(a,b,c)}if(i9!==i)return 2===(e>>>6|0)?d(j):$(a,b,c);if(I<=e&&159>=e)return d(j);return $(a,b,c);default:var +k=V(a,b),g=V(a,b+1|0),p=V(a,b+2|0),q=V(a,b+3|0),l=(k&7)<<18|(g&63)<<12|(p&63)<<6|q&63;if(2===(q>>>6|0)&&2===(p>>>6|0)){if(ev===k){if(144<=g&&gn>=g)return d(l);return $(a,b,c)}if(244!==k)return 2===(g>>>6|0)?d(l):$(a,b,c);if(I<=g&&143>=g)return d(l);return $(a,b,c)}return $(a,b,c)}}function +d_(a,b,c){var +e=V(a,b),d=e<<8|V(a,c);if(jc<=d&&ex>=d)return jA=e)return[0,Y,a9(((a&ep)<<10|e&ep)+dn|0)];return fU(c=(c+d|0)){if(0===d)return m0(a);a[5]=b;a[6]=c;a[7]=(c+d|0)-1|0;return}return Fg(c,d)}function +db(a,b){var +c=b[1];if(typeof +c==="number"){b[18]=a;return gj}if(n5<=c[1]){var +d=r3(c[2],b[5],0,au(b[5]));FB(b,b[5],0,d);return g(a,b)}m0(b);return g(a,b)}function +dc(a,b){a[9]=0;a[10]=b;return}function +bl(c,b){function +d(a,b){Fj(a[5],a[6],a[8],a[9],b);a[6]=a[6]+b|0;a[9]=a[9]+b|0;return}var +a=b9(b);if(0>a)return g(c,b);var +e=b[10]-b[9]|0;return a=b)return 0<=b?db(iv,a):bw;var +c=a[6];a[6]=a[6]+1|0;return D(iv,Fm(a[5],c),1,a)}function +iw(a){var +b=b9(a);if(0>=b)return 0<=b?db(iw,a):bw;var +c=a[6];a[6]=a[6]+1|0;return D(iw,Fn(a[5],c),1,a)}function +fW(a){if(a[9]=c)return 0<=c?db(aH,a):bw;var +b=Fk(d9,V(a[5],a[6]));if(c=a[10])return m3(d_(a[8],0,1),a);var +b=a[9];return D(bm,$(a[8],0,a[9]),b,a)}function +m3(a,b){if(eo<=a[1])return D(bm,a,2,b);var +c=a[2];if(2<=b9(b)){var +d=b[6];b[6]=b[6]+2|0;return D(bm,fV(c,b[5],d,d+1|0),4,b)}dc(b,2);return bl(function(a){return m1(c,a)},b)}function +bm(a){var +b=b9(a);if(0>=b)return 0<=b?db(bm,a):bw;if(2<=b){var +c=a[6];a[6]=a[6]+2|0;return m3(d_(a[5],c,c+1|0),a)}dc(a,2);return bl(m2,a)}function +m4(a,b){var +c=b[9]+2|0;return b[9]=a[10])return m6(d_(a[8],1,0),a);var +b=a[9];return D(bt,$(a[8],0,a[9]),b,a)}function +m6(a,b){if(eo<=a[1])return D(bt,a,2,b);var +c=a[2];if(2<=b9(b)){var +d=b[6];b[6]=b[6]+2|0;return D(bt,fV(c,b[5],d+1|0,d),4,b)}dc(b,2);return bl(function(a){return m4(c,a)},b)}function +bt(a){var +b=b9(a);if(0>=b)return 0<=b?db(bt,a):bw;if(2<=b){var +c=a[6];a[6]=a[6]+2|0;return m6(d_(a[5],c+1|0,c),a)}dc(a,2);return bl(m5,a)}function +FC(a){function +d(a){var +b=V(a[8],2),c=j(d9,b)[1+b];return 0===c?D(aH,$(a[8],2,1),1,a):(a[10]=c,a[9]=1,da(a[8],0,b),bl(fW,a))}var +b=V(a[8],0);function +g(a){var +b=V(a[8],1),e=2>>0)throw h([0,f,FD],1);switch(e){case +0:return D(c,$(a[8],0,1),1,a);case +1:return D(c,cy(a[8],0,1),1,a);case +2:return 2<=a[9]?3<=a[9]?D(d,cy(a[8],0,2),2,a):D(aH,cy(a[8],0,2),2,a):D(aH,$(a[8],0,1),1,a);case +3:if(3<=a[9])return D(aH,cy(a[8],0,3),3,a);var +i=a[9];return D(aH,$(a[8],0,a[9]),i,a);default:if(3<=a[9]){a[10]=4;return bl(fW,a)}var +k=a[9];return D(aH,$(a[8],0,a[9]),k,a)}}function +m7(a,b,c){if(b)var +j=1,i=0,h=m1,d=m2,f=bm;else +var +j=0,i=1,h=m4,d=m5,f=bt;function +e(a,b){if(3>b[9])return f(b);b[10]=2;b[9]=1;var +c=V(b[8],2);da(b[8],0,c);return bl(a,b)}if(typeof +c!=="number")return D(function(a){return e(d,a)},[0,Y,a9(c[2])],2,a);if(eE>c)return D(function(a){return e(d,a)},[0,Y,mZ],2,a);var +g=d_(a[8],i,j);if(eo<=g[1])return D(function(a){return e(d,a)},g,2,a);var +k=g[2];if(3<=a[9]){var +l=function(a){return h(k,a)};return function(a){return e(l,a)}(a)}var +m=a[9];return D(f,fU(b,k,eZ,0,0),m,a)}function +FE(a){dc(a,3);return bl(function(a){var +b=Fq(a[8],0,a[9]),c=b[1];if(dD===c){var +e=b[2];a[2]=dD;a[18]=bt;return m7(a,0,e)}if(ce<=c){var +d=b[2];a[2]=ce;a[18]=aH;return bw===d?bw:eE<=d?FC(a):D(aH,[0,Y,mZ],3,a)}var +f=b[2];a[2]=eu;a[18]=bm;return m7(a,1,f)},a)}function +a2(a){a[14]=0;a[13]=a[13]+1|0;return}function +b_(a){a[14]=a[14]+1|0;return}function +aa(a){a[16]=a[16]+1|0;return}function +ab(a,b){a[12]=b;return}function +FF(a,b,c,d){if(Y>d[1]){c[11]=0;c[17]=b;return i(c[17],c,d)}var +e=bf(d[2]);if(oh===e){if(a){c[2]=eu;c[18]=bm}c[11]=1;c[17]=b;return g(c[18],c)}if(65534===e&&a){c[2]=dD;c[18]=bt;c[11]=1;c[17]=b;return g(c[18],c)}c[11]=0;c[17]=b;return i(c[17],c,d)}function +FG(a,b){if(Y>b[1]){ab(a,0);aa(a);b_(a);return b}var +c=bf(b[2])+jG|0;a:{if(jg>>0){var +d=c+dv|0;if(3>>0)break a;switch(d){case +0:var +e=a[12];ab(a,0);aa(a);return e?b:(a2(a),b);case +1:break a;case +2:break;default:ab(a,1);aa(a);a2(a);return b}}else if(jI>=c-1>>>0)break a;ab(a,0);aa(a);a2(a);return b}ab(a,0);aa(a);b_(a);return b}function +FH(a,b){if(Y>b[1]){ab(a,0);aa(a);b_(a);return b}var +c=bf(b[2])+jG|0;a:{if(jg>>0){var +d=c+dv|0;if(3>>0)break a;switch(d){case +0:var +e=a[12];ab(a,0);return e?g(a[18],a):(aa(a),a2(a),[0,Y,a[4]]);case +1:break a;case +2:break;default:ab(a,1);aa(a);a2(a);return[0,Y,a[4]]}}else if(jI>=c-1>>>0)break a;ab(a,0);aa(a);a2(a);return[0,Y,a[4]]}ab(a,0);aa(a);b_(a);return b}function +FI(a,b){if(Y>b[1]){ab(a,0);aa(a);b_(a);return b}var +c=bf(b[2]);a:{if(14<=c){if(8232<=c){if(8234>c)break a}else if(pP===c){ab(a,0);aa(a);a2(a);return[0,Y,a[4]]}}else if(10<=c)switch(c+oR|0){case +0:var +d=a[12];ab(a,0);return d?g(a[18],a):(aa(a),a2(a),[0,Y,a[4]]);case +1:break;case +2:break a;default:ab(a,1);aa(a);a2(a);return[0,Y,a[4]]}ab(a,0);aa(a);b_(a);return b}ab(a,0);aa(a);a2(a);return b}function +FJ(a,b){if(Y>b[1]){ab(a,0);aa(a);b_(a);return b}var +c=bf(b[2])+jG|0;a:{if(jg>>0){var +d=c+dv|0;if(3>>0)break a;switch(d){case +0:var +e=a[12];ab(a,0);return e?g(a[18],a):(aa(a),a2(a),[0,Y,a[4]]);case +1:break a;case +2:break;default:ab(a,1);aa(a);a2(a);return[0,Y,a[4]]}}else if(jI>=c-1>>>0)break a;ab(a,0);aa(a);a2(a);return b}ab(a,0);aa(a);b_(a);return b}function +FK(a){return ps<=a?423112016<=a?ce<=a?aH:iv:338302576<=a?iw:bm:dD<=a?bt:bm}function +ix(a){return a[13]}function +iy(a){return a[14]}function +iz(d,b){var +a=bf(b);function +c(a){return l(d,Fi(a))}return du>>18|0),c(I|(a>>>12|0)&63),c(I|(a>>>6|0)&63),c(I|a&63)):(c(gG|a>>>12|0),c(I|(a>>>6|0)&63),c(I|a&63)):(c(qX|a>>>6|0),c(I|a&63)):c(a)}function +FL(a,b,c){if(a){var +d=a[1],k=d[1];if(3895880===k)var +f=d[2],e=FI;else if(gq<=k)var +f=d[2],e=FJ;else +var +f=d[2],e=FH}else +var +f=a9(10),e=FG;if(b)var +l=b[1],n=FK(l),g=l;else +var +n=FE,g=ce;if(typeof +c==="number")var +j=0,i=1,h=eZ;else if(n5<=c[1])var +j=0,i=1,h=M(dn);else +var +o=c[2],j=m(o)-1|0,i=0,h=dO(o);var +p=ps===g?1:0;return[0,c,g,a,f,h,i,j,M(4),0,0,0,0,1,0,0,0,function(a,b){return FF(p,e,a,b)},n]}function +FM(a){return g(a[18],a)}function +FN(a){return a[11]}var +m8=44,fX=bf(Fl),FP=10,FQ=34,FR=93,FS=dz,FT=47,FU=92,FV=42;function +FW(a){var +b=a<=31?1:0;if(b)var +c=b;else +var +d=34===a?1:0,c=d||(92===a?1:0);return c}function +FX(a){var +b=48<=a?1:0,c=b?a<=57?1:0:b;return c}function +FY(a){var +c=48<=a?1:0,d=c?a<=57?1:0:c;if(d)var +b=d;else{var +e=65<=a?1:0,f=e?a<=70?1:0:e;if(f)var +b=f;else +var +g=97<=a?1:0,b=g?a<=go?1:0:g}return b}function +fY(a){a:{if(11<=a){if(32===a)break a}else if(9<=a)break a;return 0}return 1}function +m9(a){a:{if(44<=a){var +b=a-45|0;if(79>>0){if(81<=b)break a}else if(48!==b)break a}else +if(11<=a){if(32!==a)break a}else if(9>a)break a;return 1}return 0}function +F0(a){return[0,K,[0,dp,[0,-542918501,g8(a)]]]}function +F1(a){return[0,K,[0,dp,[0,oW,g8(a)]]]}function +F2(a){return[0,K,[0,dp,[0,oM,a]]]}function +F3(a){return[0,K,[0,dp,[0,o3,a]]]}function +m_(a){return[0,K,[0,dp,[0,o_,a]]]}function +F4(a){return[0,K,[0,-635137946,g8(a)]]}function +F5(a){return[0,K,[0,qu,a]]}function +F_(a){return[0,K,[0,pr,a]]}function +F$(a){return[0,K,[0,oi,a]]}function +d$(a,b){return g(d(a)(Gi),b)}function +iA(a,b){if(31>=bf(b))return d$(a,bf(b));var +c=bg(4);iz(c,b);var +e=bf(b),f=bh(c);return ak(d(a)(Gj),f,d$,e)}function +aU(a,b){var +c=a9(b);return iz(a[2],c)}function +b$(a){var +b=a9(a[8]);return iz(a[2],b)}function +cz(a){var +b=bh(a[2]);dR(a[2]);return b}function +nb(a){var +b=iy(a[1]);return[0,ix(a[1]),b]}function +a3(a){a[4]=ix(a[1]);a[5]=iy(a[1]);return}function +ag(a){a[6]=ix(a[1]);a[7]=iy(a[1]);return}function +nc(a){var +b=a[9];if(!b)throw h([0,f,GP],1);var +c=b[1][2],d=c[2];a[4]=c[1];a[5]=d;return ag(a)}function +nd(a){a3(a);ag(a);var +c=a[9];if(!c)throw h([0,f,GQ],1);var +b=c[2];if(!b){a[10]=0;a[9]=0;return}if(cI<=b[1][1]){a[10]=1;a[9]=b;return}a[10]=0;a[9]=b;return}function +dd(a){return bw}function +F(a,b,c){c[12]=b;return a}function +s(c,b){var +a=FM(b[1]);if(typeof +a==="number")return gj<=a?F(gj,function(a){return s(c,a)},b):(b[8]=eU,g(c,b));if(Y<=a[1]){b[8]=bf(a[2]);return g(c,b)}var +d=a[2];b[8]=fX;ag(b);return F(F5(d),c,b)}function +ne(c,b){if(b[8]!==10&&b[8]!==a6){b$(b);return s(function(a){return ne(c,a)},b)}ag(b);return F([0,dB,[0,83,cz(b)]],function(a){return s(c,a)},b)}function +ea(a,b,c){if(c[8]===a6){ag(c);return F(F6,dd,c)}if(a){if(c[8]===47){ag(c);return F([0,dB,[0,77,cz(c)]],function(a){return s(b,a)},c)}if(c[8]===42){b$(c);var +d=1;return s(function(a){return ea(d,b,a)},c)}aU(c,FV);b$(c);var +e=0;return s(function(a){return ea(e,b,a)},c)}if(c[8]===42){var +f=1;return s(function(a){return ea(f,b,a)},c)}b$(c);var +g=0;return s(function(a){return ea(g,b,a)},c)}function +GR(c,b){if(b[8]===47)return s(function(a){return ne(c,a)},b);if(b[8]===42){var +d=0;return s(function(a){return ea(d,c,a)},b)}ag(b);return F(Ga,c,b)}function +nf(c,b){return fY(b[8])?(ag(b),b$(b),s(function(a){return nf(c,a)},b)):F([0,gp,cz(b)],c,b)}function +iB(c,b){if(fY(b[8])){a3(b);return nf(function(a){return iB(c,a)},b)}if(b[8]!==47)return g(c,b);a3(b);function +d(a){return iB(c,a)}return s(function(a){return GR(d,a)},b)}function +ng(c,b){return fY(b[8])?s(function(a){return ng(c,a)},b):g(c,b)}function +bI(a,b){return b[3]?iB(a,b):ng(a,b)}function +iC(h,b,c,d,e){function +f(a,b,c){aU(c,fX);return F(a,b,c)}if(0=b)return jA=b){aU(e,((k&ep)<<10|b&ep)+dn|0);return g(d,e)}return f(F2(b),d,e)}function +nh(c,b){var +a=b[8];if(34===a){aU(b,FQ);return s(c,b)}if(92<=a){if(118>a)switch(a-92|0){case +0:aU(b,FU);return s(c,b);case +6:aU(b,8);return s(c,b);case +10:aU(b,12);return s(c,b);case +18:aU(b,FP);return s(c,b);case +22:aU(b,13);return s(c,b);case +24:aU(b,9);return s(c,b);case +25:var +d=4,e=0,f=0;return s(function(a){return iC(f,e,d,c,a)},b)}}else if(47===a){aU(b,FT);return s(c,b)}ag(b);aU(b,fX);return F(F1(a),function(a){return s(c,a)},b)}function +eb(c,b){if(b[8]===a6){ag(b);return F(F7,dd,b)}if(!FW(b[8])){b$(b);return s(function(a){return eb(c,a)},b)}if(b[8]===34){ag(b);return s(c,b)}if(b[8]===92){var +d=function(a){return eb(c,a)};return s(function(a){return nh(d,a)},b)}ag(b);aU(b,fX);function +e(a){return eb(c,a)}return F(F4(b[8]),function(a){return s(e,a)},b)}function +ni(c,b){if(!m9(b[8])&&b[8]!==a6){ag(b);b$(b);return s(function(a){return ni(c,a)},b)}var +a=cz(b);try{var +e=F([0,a5,[0,aB,eJ(a)]],c,b);return e}catch(f){var +d=B(f);if(d[1]===cl)return F(F_(a),c,b);throw h(d,0)}}function +nj(c,b){if(!m9(b[8])&&b[8]!==a6){ag(b);b$(b);return s(function(a){return nj(c,a)},b)}var +a=cz(b);return a!==eD?a!==er?a!==cF?F(F$(a),c,b):F(GS,c,b):F(GT,c,b):F(GU,c,b)}function +fZ(a,b,c){var +d=c[8];a:{if(gh<=d){var +e=d-110|0;if(6>>0){if(13!==e)break a;a3(c);ag(c);c[11]=1;c[10]=1;var +f=c[9];c[9]=[0,[0,cI,nb(c)],f];return F(GV,function(a){return s(b,a)},c)}if(4>=e-1>>>0)break a}else{if(34===d){a3(c);var +g=function(a,b){return F([0,a5,[0,n,cz(b)]],a,b)},h=function(a){return g(b,a)};return s(function(a){return eb(h,a)},c)}if(91===d){a3(c);ag(c);c[11]=1;var +j=c[9];c[9]=[0,[0,em,nb(c)],j];return F(GW,function(a){return s(b,a)},c)}if(go>d)break a}a3(c);return nj(b,c)}if(!FX(d)&&d!==45)return i(a,b,c);a3(c);return ni(b,c)}function +f0(f,b,c,d,e){if(e[8]!==f&&e[8]!==b&&e[8]!==a6){ag(e);return s(function(a){return f0(f,b,c,d,a)},e)}return F(c,d,e)}function +GX(c,b){function +d(a,b,c){a3(c);return f0(m8,FR,a,b,c)}var +a=b[11];b[11]=0;if(b[8]===a6){nc(b);return F(F8,dd,b)}if(b[8]===93){nd(b);return F(GY,function(a){return s(c,a)},b)}if(a)return fZ(function(a,b){return d(Gd,a,b)},c,b);if(b[8]!==44)return d(Ge,c,b);function +e(a,b){return d(m$,a,b)}function +f(a){return fZ(e,c,a)}return s(function(a){return bI(f,a)},b)}function +f1(a,b,c){a3(c);c[10]=1;return f0(m8,FS,a,b,c)}function +GZ(c,b){b[10]=1;if(b[8]!==58)return f1(Gc,c,b);function +d(a,b){return f1(m$,a,b)}function +e(a){return fZ(d,c,a)}return s(function(a){return bI(e,a)},b)}function +G0(c,b){function +d(a,b,c){function +d(a,b){return F([0,a5,[0,gI,cz(b)]],a,b)}if(c[8]!==34)return f1(a,b,c);a3(c);function +e(a){return d(b,a)}return s(function(a){return eb(e,a)},c)}var +a=b[11];b[11]=0;b[10]=0;if(b[8]===a6){nc(b);return F(F9,dd,b)}if(b[8]===dz){nd(b);return F(G1,function(a){return s(c,a)},b)}if(a)return d(Gf,c,b);if(b[8]!==44)return f1(Gg,c,b);function +e(a){return d(Gb,c,a)}return s(function(a){return bI(e,a)},b)}function +G2(a,b){return b[8]===a6?F(bw,dd,b):function(a,b){a3(b);return f0(eU,eU,Gh,a,b)}(dd,b)}function +ec(a){var +b=a[9];return b?cI<=b[1][1]?a[10]?bI(function(a){return G0(ec,a)},a):bI(function(a){return GZ(ec,a)},a):bI(function(a){return GX(ec,a)},a):bI(function(a){return G2(ec,a)},a)}function +nk(d,b,c){if(!fY(c[8])&&c[8]!==a6){ag(c);return s(function(a){return nk(d,b,a)},c)}return F(d,b,c)}function +nl(a,b){function +c(c,b){a3(b);function +d(a){return nl(c,a)}return nk(na,function(a){return bI(d,a)},b)}return b[8]!==a6?fZ(c,a,b):F(na,a,b)}var +FO=2147483646;function +G3(a){function +b(a,b){return FN(b[1])?F(FZ,a,b):g(a,b)}function +c(a){return nl(ec,a)}function +d(a){return bI(c,a)}return s(function(a){return b(d,a)},a)}var +G4=[0,gq,a9(10)];function +Gk(a,b){if(typeof +b==="number")return d(a)(Gl);var +e=b[1];if(pr>e){if(el===e){var +l=b[2];d(a)(GI);return em<=l?cI<=l?d(a)(GJ):d(a)(GK):dB<=l?d(a)(GL):d(a)(GM)}if(oi<=e){var +z=b[2];return g(d(a)(GN),z)}var +A=b[2];return i(d(a)(GO),iA,A)}if(qu>e){if(bn<=e){var +c=b[2];d(a)(Gw);return typeof +c==="number"?pe<=c?qZ<=c?gI<=c?d(a)(Gx):d(a)(Gy):qx<=c?d(a)(Gz):d(a)(GA):dB<=c?d(a)(GB):d(a)(GC):jh<=c[1]?c[2]?d(a)(GD):d(a)(GE):c[2]?d(a)(GF):d(a)(GG)}var +y=b[2];return g(d(a)(GH),y)}if(dp<=e){var +f=b[2];d(a)(Gm);var +h=f[1];if(oM===h){var +p=f[2];return i(d(a)(Gn),d$,p)}if(o3<=h){if(oW<=h){var +q=f[2];return i(d(a)(Go),iA,q)}var +r=f[2];return i(d(a)(Gp),d$,r)}if(o_<=h){var +s=f[2];return i(d(a)(Gq),d$,s)}var +t=f[2];return i(d(a)(Gr),iA,t)}var +k=b[2],n=m(k);d(a)(Gs);if(0=1){var +j=v;for(;;){var +w=E(k,j);g(d(a)(Gv),w);var +x=j+1|0;if(o===j)break;j=x}}return d(a)(Gu)}function +G5(a,b){var +c=FL([0,G4],a,b);return[0,c,bg(dt),0,1,0,1,0,FO,0,0,0,G3]}function +G6(a){a[3]=0;var +b=g(a[12],a);if(typeof +b!=="number"){var +c=b[1];if(a5!==c&&K>c)throw h([0,f,G7],1)}return b}function +G8(a){return[0,[0,a[4],a[5]],[0,a[6],a[7]]]}var +nm=[c,Hd,O(0)];function +G9(a){var +o=G5(0,a),e=[c,G_,O(0)];function +m(a){return G8(o)}function +i(a){var +b=G6(o);if(typeof +b==="number"){if(gj<=b)throw h([0,f,G$],1);throw h([0,e,Ha],1)}if(K>b[1])return b[2];var +c=b[2];throw h([0,e,[0,K,[0,m(0),c]]],1)}function +g(a,b,c){a:{if(typeof +b==="number"){if(em===b){var +g=0;return a<50?l(a+1|0,g,c):k(l,[0,g,c])}if(cI===b){var +i=0;return a<50?j(a+1|0,i,c):k(j,[0,i,c])}if(bQ===b)break a}else{var +f=b[1];if(n===f||aB===f||aN===f)break a}throw h([0,e,[0,gD,[0,a5,[0,m(0),b,Hb]]]],1)}return a<50?d(a+1|0,b,c):k(d,[0,b,c])}function +l(a,b,c){var +e=i(0);if(qG===e){var +f=[0,65,av(b)];return a<50?d(a+1|0,f,c):k(d,[0,f,c])}var +h=[0,b,c];return a<50?g(a+1|0,e,h):k(g,[0,e,h])}function +j(a,b,c){var +f=i(0);if(typeof +f==="number"){if(pY===f){var +j=[0,79,av(b)];return a<50?d(a+1|0,j,c):k(d,[0,j,c])}}else if(gI===f[1]){var +l=[1,f[2],b,c],n=i(0);return a<50?g(a+1|0,n,l):k(g,[0,n,l])}throw h([0,e,[0,gD,[0,a5,[0,m(0),f,Hc]]]],1)}function +d(a,b,c){if(typeof +c==="number")return b;if(0===c[0]){var +d=c[2],e=[0,b,c[1]];return a<50?l(a+1|0,e,d):k(l,[0,e,d])}var +f=c[3],g=[0,[0,c[1],b],c[2]];return a<50?j(a+1|0,g,f):k(j,[0,g,f])}function +p(a,b){return aY(g(0,a,b))}try{var +q=[0,p(i(0),0)];return q}catch(f){var +b=B(f);if(b[1]===e)return[1,b[2]];throw h(b,0)}}function +He(c,b){return kI(function(a){throw h([0,nm,c,a],1)},b)}function +Hf(a){var +b=a[1];if(381139274===b)return Hg;if(gD>b){var +e=a[2][2];return i(lc(Hj),Gk,e)}var +c=a[2];if(typeof +c==="number")return lb(Hh);var +d=c[2][3];return g(lb(Hi),d)}function +Hk(a){return G9(a)}function +Hl(a){var +b=Hk(a);if(0===b[0])return b[1];var +c=Hf(b[1]);return g(He(bQ,Hm),c)}function +Hn(a){return Hl([0,n,a])}function +Ho(a){a:if(typeof +a!=="number"){var +b=a[1];if(65!==b&&79!==b)break a;return a}throw h([0,nm,a,Hp],1)}function +Hq(a){return Ho(Hn(a))}mv([0,e2]);function +nn(a){EY(Hr,0,EM)(k$,a);return xB(0)}function +iD(a){return h1(a)}function +iE(a){var +b=fB(a);return 0===b[0]?[0,b[1]]:(l5([0,b[1],0]),Ht)}var +Hv=wE(0);function +iF(a){return Es(Hv)(0)}function +Hs(a){return Fe(Hq(a))}function +Hu(a){return iE(a)}function +no(a,b){function +d(a,b){return 0===(b>>>a|0)?1:0}if(d(7,b))return l(a,T(b));if(d(11,b)){l(a,T(qX|(b>>>6|0)&31));return l(a,T(I|b&63))}if(d(16,b)){l(a,T(gG|(b>>>12|0)&15));l(a,T(I|(b>>>6|0)&63));return l(a,T(I|b&63))}if(d(21,b)){l(a,T(ev|(b>>>18|0)&7));l(a,T(I|(b>>>12|0)&63));l(a,T(I|(b>>>6|0)&63));return l(a,T(I|b&63))}if(d(26,b)){l(a,T(c|(b>>>24|0)&3));l(a,T(I|(b>>>18|0)&63));l(a,T(I|(b>>>12|0)&63));l(a,T(I|(b>>>6|0)&63));return l(a,T(I|b&63))}if(!d(31,b))throw h([0,f,Hw],1);l(a,T(ew|(b>>>30|0)&1));l(a,T(I|(b>>>24|0)&63));l(a,T(I|(b>>>18|0)&63));l(a,T(I|(b>>>12|0)&63));l(a,T(I|(b>>>6|0)&63));return l(a,T(I|b&63))}function +Hx(a,b){return dn+((a-55296|0)<<10|b-56320|0)|0}function +Hy(a,b,c){return no(a,Hx(b,c))}var +HA=[c,Hz,O(0)];function +f2(a){throw h([0,HA,a],1)}var +iG=[c,HB,O(0)],iH=[c,HC,O(0)],iI=[c,HD,O(0)],np=[c,HE,O(0)];function +HF(a,b,c,d){var +e=c?c[1]:1,f=a?a[1]:bg(bP);return[0,f,e,0,b]}function +iY(a,b,c,d){var +e=0;return a<50?nY(a+1|0,b,c,d,e):k(nY,[0,b,c,d,e])}function +HH(a,b,c){return aY(iY(0,a,b,c))}function +nY(a,b,c,d,e){var +h=e;for(;;){var +f=s8(HG,h,d);if(0===f)return;if(1===f){if(0>=c)return;l(b,s$(d,0));var +i=c-1|0;return a<50?iY(a+1|0,b,i,d):k(iY,[0,b,i,d])}g(d[1],d);h=f}}function +HI(a,b,c){var +d=c[4],e=c[5];HH(a,b,c);c[5]=e+1|0;c[4]=d;return}function +nq(a){var +b=10<=a?a+87|0:a+48|0;return T(b)}function +cA(a,b,c,d,e){dS(d,a,b[1],c-b[1]|0);ao(d,e);b[1]=c+1|0;return}function +HJ(a,b,c,d,e){dS(d,a,b[1],c-b[1]|0);ao(d,HK);l(d,nq(e>>>4|0));l(d,nq(e&15));b[1]=c+1|0;return}function +HL(a,b,c){try{dS(c,a,b[1],m(a)-b[1]|0);return}catch(f){var +d=B(f),e=m(a)-b[1]|0,g=b[1];ak(e8(HM),a,g,e);throw h(d,0)}}function +HN(a,b){var +d=[0,0],f=m(b)-1|0,g=0;if(f>=0){var +c=g;for(;;){var +e=E(b,c);a:if(92===e)cA(b,d,c,a,HO);else{b:{c:{if(35>e){if(8>e)break b;switch(e-8|0){case +0:cA(b,d,c,a,HP);break;case +1:cA(b,d,c,a,HQ);break;case +2:cA(b,d,c,a,HR);break;case +4:cA(b,d,c,a,HS);break;case +5:cA(b,d,c,a,HT);break;case +26:cA(b,d,c,a,HU);break;case +24:case +25:break c;default:break b}break a}if(du===e)break b}break a}HJ(b,d,c,a,e)}var +h=c+1|0;if(f===c)break;c=h}}return HL(b,d,a)}function +cB(a,b){l(a,34);HN(a,b);return l(a,34)}function +nr(a,b){return ao(a,HV)}function +ns(a,b){var +c=b?HW:HX;return ao(a,c)}function +HY(a){return T(a+48|0)}function +iJ(a,b){return 0===b?0:(iJ(a,b/10|0),l(a,HY(dL(b%10|0))))}function +nt(a,b){return 0=0){var +b=f;for(;;){var +c=E(a,b);a:{if(48<=c){if(58>c)break a}else if(45===c)break a;throw h(kf,1)}var +i=b+1|0;if(e===b)break;b=i}}var +g=1;return g}catch(f){var +d=B(f);if(d===kf)return 0;throw h(d,0)}}function +HZ(a,b){var +c=gQ(b);if(3===c){var +h=0.c)return bS<=c?aB<=c?HZ(a,b[2]):nt(a,b[2]):cG<=c?ao(a,b[2]):cB(a,b[2]);if(eq===c)return Ie(a,b[2]);if(o<=c)return W<=c?Ic(a,b[2]):Id(a,b[2]);if(aN<=c)return ns(a,b[2]);var +d=b[2];return If(a,d[1],d[2])}function +Ic(a,b){l(a,dv);de(function(a,b){var +c=b[2];cB(a,b[1]);l(a,58);return ed(a,c)},df,a,b);return l(a,dz)}function +Id(a,b){l(a,91);de(ed,df,a,b);return l(a,93)}function +Ie(a,b){l(a,40);de(ed,df,a,b);return l(a,41)}function +If(a,b,c){l(a,60);cB(a,b);if(c){var +d=c[1];l(a,58);ed(a,d)}return l(a,62)}function +ee(a,b){if(typeof +b==="number")return nr(a,0);var +c=b[1];if(ez>c)return bS<=c?aB<=c?H6(a,b[2]):nt(a,b[2]):cG<=c?ao(a,b[2]):cB(a,b[2]);if(eq===c)return Ii(a,b[2]);if(o<=c)return W<=c?Ig(a,b[2]):Ih(a,b[2]);if(aN<=c)return ns(a,b[2]);var +d=b[2];return Ij(a,d[1],d[2])}function +Ig(a,b){l(a,dv);de(function(a,b){var +c=b[2];cB(a,b[1]);l(a,58);return ee(a,c)},df,a,b);return l(a,dz)}function +Ih(a,b){l(a,91);de(ee,df,a,b);return l(a,93)}function +Ii(a,b){l(a,91);de(ee,df,a,b);return l(a,93)}function +Ij(a,b,c){if(!c)return cB(a,b);var +d=c[1];l(a,91);cB(a,b);l(a,44);ee(a,d);return l(a,93)}function +Ik(a,b,c,d){var +e=a?a[1]:Il,f=b?b[1]:0;if(f)ee(c,d);else +ed(c,d);return ao(c,e)}function +az(a,b,c){return ru(a,b,c)}function +nv(a){return a+ey|0}function +ca(a){if(65<=a){if(97<=a){if(gh>a)return(a-97|0)+10|0}else if(71>a)return(a-65|0)+10|0}else if(9>=a+ey>>>0)return a-48|0;throw h([0,f,Io],1)}function +ba(a,b,c){var +e=c[4]-1|0,f=b[3],d=((e+c[5]|0)-f|0)-1|0,h=rL(d,(e+c[6]|0)-f|0),j=b[4];if(j)var +l=j[1],k=g(p(Ip),l);else +var +k=It;var +m=d===h?g(p(Iq),d+1|0):i(p(Is),d+1|0,h+1|0),n=b[2];return f2(ek(p(Ir),k,n,m,a))}function +a4(a,b,c){var +d=32,f=e3(c),e=bg(d);HI(e,d,c);var +g=bh(e);return ba(ak(p(Iu),a,f,g),b,c)}function +Im(a,b,c,d,e){var +h=b?b[1]:bP,i=c?c[1]:In;if(a){var +g=a[1];dR(g);var +f=g}else +var +f=bg(h);Ik([0,i],d,f,e);var +j=bh(f);dR(f);return j}var +dg=[c,Iv,O(0)];function +Iw(a){var +d=a[5],b=[0,0],e=a[6]-1|0,f=a[2];if(e>=d){var +c=d;for(;;){if(214748365<=b[1])throw h(dg,1);var +g=nv(gO(f,c));b[1]=(10*b[1]|0)+g|0;var +i=c+1|0;if(e===c)break;c=i}}if(0<=b[1])return b[1];throw h(dg,1)}function +Ix(a,b){try{var +d=[0,bS,Iw(b)];return d}catch(f){var +c=B(f);if(c===dg)return[0,cG,e3(b)];throw h(c,0)}}function +Iy(a){var +d=a[5]+1|0,b=[0,0],e=a[6]-1|0,f=a[2];if(e>=d){var +c=d;for(;;){if(b[1]<=-214748365)throw h(dg,1);var +g=nv(gO(f,c));b[1]=(10*b[1]|0)-g|0;var +i=c+1|0;if(e===c)break;c=i}}if(0>>0){g(c[1],c);l=f}else +switch(f){case +0:return IY;case +1:return IZ;case +2:return bQ;case +3:return[0,aB,rT];case +4:return[0,aB,rP];case +5:return[0,aB,rR];case +6:dR(b[1]);return[0,n,nw(b,c)];case +7:return Ix(b,c);case +8:return Iz(b,c);case +9:return[0,aB,eJ(e3(c))];case +10:var +e=[0,0];try{ar(b,c);IT(c);var +r=iK(b,c);ar(b,c);nz(b,c);ar(b,c);var +s=e[1];e[1]=[0,[0,r,cb(b,c)],s];for(;;){ar(b,c);IV(b,c);ar(b,c);var +t=iK(b,c);ar(b,c);nz(b,c);ar(b,c);var +u=e[1];e[1]=[0,[0,t,cb(b,c)],u]}}catch(f){var +m=B(f);if(m===iH)return[0,W,av(e[1])];throw h(m,0)}break;case +11:var +i=[0,0];try{ar(b,c);IL(c);var +v=i[1];i[1]=[0,cb(b,c),v];for(;;){ar(b,c);IN(b,c);ar(b,c);var +w=i[1];i[1]=[0,cb(b,c),w]}}catch(f){var +p=B(f);if(p===iG)return[0,o,av(i[1])];throw h(p,0)}break;case +12:var +j=[0,0];try{ar(b,c);IP(c);var +x=j[1];j[1]=[0,cb(b,c),x];for(;;){ar(b,c);IR(b,c);ar(b,c);var +y=j[1];j[1]=[0,cb(b,c),y]}}catch(f){var +q=B(f);if(q===iI)return[0,eq,av(j[1])];throw h(q,0)}break;case +13:ar(b,c);var +z=iK(b,c);ar(b,c);return[0,ez,[0,z,IF(b,c)]];case +14:return a<50?bL(a+1|0,b,c):k(bL,[0,b,c]);case +15:nx(b,c);return a<50?bL(a+1|0,b,c):k(bL,[0,b,c]);case +16:f3(b,c);return a<50?bL(a+1|0,b,c):k(bL,[0,b,c]);case +17:return a<50?bL(a+1|0,b,c):k(bL,[0,b,c]);case +18:return ba(I0,b,c);default:return a4(I1,b,c)}}}function +ej(a,b,c){var +d=58;return a<50?n1(a+1|0,b,c,d):k(n1,[0,b,c,d])}function +nw(a,b){return aY(ej(0,a,b))}function +n1(a,b,c,d){var +f=d;for(;;){var +e=az(aA,f,c);if(3>=e>>>0)switch(e){case +0:return bh(b[1]);case +1:IB(b,c);return a<50?ej(a+1|0,b,c):k(ej,[0,b,c]);case +2:IA(b[1],c);return a<50?ej(a+1|0,b,c):k(ej,[0,b,c]);default:return ba(I2,b,c)}g(c[1],c);f=e}}function +IB(a,b){return IC(a,b,68)}function +IC(a,b,c){var +f=c;for(;;){var +e=az(aA,f,b);if(8>=e>>>0)switch(e){case +0:var +h=bC(b,b[5]);return l(a[1],h);case +1:return l(a[1],8);case +2:return l(a[1],12);case +3:return l(a[1],10);case +4:return l(a[1],13);case +5:return l(a[1],9);case +6:var +i=bC(b,b[5]+1|0),j=bC(b,b[5]+2|0),k=bC(b,b[5]+3|0),m=ca(bC(b,b[5]+4|0)),n=ca(k)<<4,o=ca(j)<<8,d=ca(i)<<12|o|n|m;if(jc<=d&&jA>=d)return ID(a,d,b);return no(a[1],d);case +7:return a4(I3,a,b);default:return ba(I4,a,b)}g(b[1],b);f=e}}function +ID(a,b,c){return IE(a,b,c,82)}function +IE(a,b,c,d){var +h=d;for(;;){var +e=az(aA,h,c);if(2>=e>>>0)switch(e){case +0:var +i=bC(c,c[5]+2|0),j=bC(c,c[5]+3|0),k=bC(c,c[5]+4|0),l=ca(bC(c,c[5]+5|0)),m=ca(k)<<4,n=ca(j)<<8,f=ca(i)<<12|n|m|l;if(jb<=f&&ex>=f)return Hy(a[1],b,f);return a4(I5,a,c);case +1:return a4(I6,a,c);default:return ba(I7,a,c)}g(c[1],c);h=e}}function +IF(a,b){return IG(a,b,go)}function +IG(a,b,c){var +e=c;for(;;){var +d=az(aA,e,b);if(3>=d>>>0)switch(d){case +0:var +f=cb(a,b);ar(a,b);IH(a,b);return[0,f];case +1:return 0;case +2:return a4(I8,a,b);default:return ba(I9,a,b)}g(b[1],b);e=d}}function +IH(a,b){return II(a,b,111)}function +II(a,b,c){var +e=c;for(;;){var +d=az(aA,e,b);if(2>=d>>>0)switch(d){case +0:return;case +1:return a4(I_,a,b);default:return ba(I$,a,b)}g(b[1],b);e=d}}function +ei(a,b,c){var +d=dz;return a<50?n0(a+1|0,b,c,d):k(n0,[0,b,c,d])}function +nx(a,b){return aY(ei(0,a,b))}function +n0(a,b,c,d){var +f=d;for(;;){var +e=az(aA,f,c);if(3>=e>>>0)switch(e){case +0:return;case +1:return a4(Ja,b,c);case +2:f3(b,c);return a<50?ei(a+1|0,b,c):k(ei,[0,b,c]);default:return a<50?ei(a+1|0,b,c):k(ei,[0,b,c])}g(c[1],c);f=e}}function +ny(a){return IJ(a,o8)}function +IJ(a,b){var +d=b;for(;;){var +c=az(aA,d,a);if(0===c)return 1;if(1===c)return 0;g(a[1],a);d=c}}function +bK(a,b,c){var +d=pP;return a<50?nZ(a+1|0,b,c,d):k(nZ,[0,b,c,d])}function +ar(a,b){return aY(bK(0,a,b))}function +nZ(a,b,c,d){var +f=d;for(;;){var +e=az(aA,f,c);if(4>=e>>>0)switch(e){case +0:f3(b,c);return a<50?bK(a+1|0,b,c):k(bK,[0,b,c]);case +1:nx(b,c);return a<50?bK(a+1|0,b,c):k(bK,[0,b,c]);case +2:f3(b,c);return a<50?bK(a+1|0,b,c):k(bK,[0,b,c]);case +3:return a<50?bK(a+1|0,b,c):k(bK,[0,b,c]);default:return}g(c[1],c);f=e}}function +iK(a,b){return IK(a,b,i9)}function +IK(a,b,c){var +e=c;for(;;){var +d=az(aA,e,b);if(3>=d>>>0)switch(d){case +0:dR(a[1]);return nw(a,b);case +1:return s_(b,b[5],b[6]);case +2:return a4(Jb,a,b);default:return ba(Jc,a,b)}g(b[1],b);e=d}}function +IL(a){return IM(a,ac)}function +IM(a,b){var +d=b;for(;;){var +c=az(aA,d,a);if(0===c)throw h(iG,1);if(1===c)return;g(a[1],a);d=c}}function +IN(a,b){return IO(a,b,257)}function +IO(a,b,c){var +e=c;for(;;){var +d=az(aA,e,b);if(3>=d>>>0)switch(d){case +0:return;case +1:throw h(iG,1);case +2:return a4(Jd,a,b);default:return ba(Je,a,b)}g(b[1],b);e=d}}function +IP(a){return IQ(a,266)}function +IQ(a,b){var +d=b;for(;;){var +c=az(aA,d,a);if(0===c)throw h(iI,1);if(1===c)return;g(a[1],a);d=c}}function +IR(a,b){return IS(a,b,271)}function +IS(a,b,c){var +e=c;for(;;){var +d=az(aA,e,b);if(3>=d>>>0)switch(d){case +0:return;case +1:throw h(iI,1);case +2:return a4(Jf,a,b);default:return ba(Jg,a,b)}g(b[1],b);e=d}}function +IT(a){return IU(a,290)}function +IU(a,b){var +d=b;for(;;){var +c=az(aA,d,a);if(0===c)throw h(iH,1);if(1===c)return;g(a[1],a);d=c}}function +IV(a,b){return IW(a,b,292)}function +IW(a,b,c){var +e=c;for(;;){var +d=az(aA,e,b);if(3>=d>>>0)switch(d){case +0:return;case +1:throw h(iH,1);case +2:return a4(Jh,a,b);default:return ba(Ji,a,b)}g(b[1],b);e=d}}function +nz(a,b){return IX(a,b,297)}function +IX(a,b,c){var +e=c;for(;;){var +d=az(aA,e,b);if(2>=d>>>0)switch(d){case +0:return;case +1:return a4(Jj,a,b);default:return ba(Jk,a,b)}g(b[1],b);e=d}}function +Jl(a,b){ar(a,b);var +c=1-ny(b);return c?a4(Jm,a,b):c}function +Jn(a,b,c){var +d=b?b[1]:0;ar(a,c);if(ny(c))throw h(np,1);var +e=cb(a,c);if(1-d)Jl(a,c);return e}var +Jr=[c,Jq,O(0)];function +Js(a){if(typeof +a==="number")return Jt;var +b=a[1];return eq<=b?aN===b?Ju:928231259<=b?W<=b?Jv:Jw:o<=b?Jx:Jy:cG===b?Jz:aB<=b?ez<=b?JA:JB:bS<=b?JC:JD}function +nA(a,b){throw h([0,Jr,an(a,Js(b)),b],1)}function +nB(a){if(typeof +a!=="number"&&n===a[1])return a[2];return nA(JG,a)}function +Jo(a,b,c,d){try{var +f=s9(0,d),g=Jn(HF(a,b,c,0),0,f);return g}catch(f){var +e=B(f);if(e===np)return f2(Jp);throw h(e,0)}}function +JE(a){if(typeof +a!=="number"&&W===a[1])return a[2];return nA(JF,a)}function +as(a){return[0,n,a]}function +iL(a,b){return b?g(a,b[1]):bQ}var +iM=[0,1],JK=[c,JJ,O(0)];function +bu(a,b){throw h([0,JK,[0,cl,a],b],1)}function +at(a){if(typeof +a!=="number"&&n===a[1])return a[2];return bu(JL,a)}function +iN(a,b){return bQ===b?0:[0,g(a,b)]}function +JH(a){return[0,bS,a]}function +JI(a,b){return[0,o,av(ks(a,b))]}function +JM(a){if(typeof +a!=="number"&&bS===a[1])return a[2];return bu(JN,a)}function +JO(a,b){if(typeof +b!=="number"&&o===b[1])return av(ks(a,b[2]));return bu(JP,b)}function +y(a,b){return bu(an(a,JQ),b)}function +nC(a,b,c,d){var +e=e1(JX,av(c));return bu(ak(p(JY),b,a,e),d)}function +cC(a,b,c){return nC(JZ,a,b,c)}function +cD(a,b,c){return nC(J0,a,b,c)}function +J1(a,b){var +d=a,c=b;for(;;){if(!c)return e1(J2,av(d));var +e=c[1];if(e[1]){d=[0,e[2],d];c=c[2]}else +c=c[2]}}function +dh(a,b,c){var +d=J1(0,c);return bu(i(p(J3),a,d),b)}function +cE(a,b){return bu(an(a,J4),b)}function +JR(a,b){return bu(an(a,JS),b)}function +JT(a,b){return bu(an(a,JU),b)}function +JV(a,b){return bu(an(a,JW),b)}function +b(a){return a[1]}function +J6(a){if(typeof +a!=="number"&&W===a[1]){var +e=[0,0],f=[0,0],j=[0,0],g=[0,0],c=[0,0],d=[0,0];(function(a){var +h=a;for(;;){if(!h)return;var +k=h[1],i=k[2],d=k[1],l=h[2];if(d!==gv)if(d!==et)if(d!==dm){if(d===qL)if(b(j))c[1]=[0,d,b(c)];else +j[1]=[0,iN(at,i)]}else if(b(f))c[1]=[0,d,b(c)];else +f[1]=[0,at(i)];else if(b(e))c[1]=[0,d,b(c)];else +e[1]=[0,at(i)];else if(b(g))c[1]=[0,d,b(c)];else +g[1]=[0,at(i)];h=l}}(a[2]));if(b(c))return cC(f4,b(c),a);if(b(d))return cD(f4,b(d),a);var +h=b(e),i=b(f),k=b(j),l=b(g);if(h&&i&&l){var +m=l[1],n=i[1],o=h[1],p=k?k[1]:0;return[0,o,n,p,m]}var +q=[0,[0,0===b(g)?1:0,J7],0],r=[0,[0,0===b(f)?1:0,J8],q];return dh(f4,a,[0,[0,0===b(e)?1:0,J9],r])}return cE(f4,a)}function +J_(a){var +b=a[3],c=a[2],d=a[1],e=[0,[0,J$,as(a[4])],0],f=[0,[0,Ka,iL(as,b)],e],g=[0,[0,Kb,as(c)],f];return[0,W,[0,[0,Kc,as(d)],g]]}function +Ku(a){return c8(function(a){var +b=a[1];return[0,b,nB(a[2])]},JE(a))}function +Kv(a){return[0,W,c8(function(a){return[0,a[1],[0,n,a[2]]]},a)]}function +Kw(a){if(typeof +a!=="number"&&W===a[1]){var +e=[0,0],c=[0,0],d=[0,0];(function(a){var +d=a;for(;;){if(!d)return;var +f=d[1],g=f[1],h=d[2],i=f[2];if(g===qJ)if(b(e))c[1]=[0,g,b(c)];else +e[1]=[0,Ku(i)];d=h}}(a[2]));return b(c)?cC(iO,b(c),a):b(d)?cD(iO,b(d),a):[0,b(e)]}return cE(iO,a)}function +Kx(a){var +b=a[1],c=0,d=b?[0,[0,Ky,Kv(b[1])],c]:c;return[0,W,d]}function +Kz(a){if(typeof +a!=="number"&&o===a[1]){var +b=a[2];if(!b)return JT(u,a);var +d=b[1];if(typeof +d!=="number"){var +e=d[1];if(n===e){var +c=d[2],f=dJ(c,oo);if(0<=f){if(0>=f)return b[2]?y(u,a):18;var +g=dJ(c,oG);if(0<=g){if(0>=g)return b[2]?y(u,a):28;if(c===pV)return b[2]?y(u,a):29;if(c===of)return b[2]?y(u,a):30;if(c===pB)return b[2]?y(u,a):31;if(c===qt)return b[2]?y(u,a):32;if(c===oL)return b[2]?y(u,a):33;if(c===oQ)return b[2]?y(u,a):34;if(c===pR)return b[2]?y(u,a):35;if(c===pn)return b[2]?y(u,a):36}else{if(c===p4)return b[2]?y(u,a):19;if(c===oa)return b[2]?y(u,a):20;if(c===qe)return b[2]?y(u,a):21;if(c===qb)return b[2]?y(u,a):22;if(c===ow)return b[2]?y(u,a):23;if(c===pF)return b[2]?y(u,a):24;if(c===q6)return b[2]?y(u,a):25;if(c===qA)return b[2]?y(u,a):26;if(c===oZ)return b[2]?y(u,a):27}}else{var +h=dJ(c,qp);if(0<=h){if(0>=h)return b[2]?y(u,a):9;if(c===qs)return b[2]?y(u,a):10;if(c===qN)return b[2]?y(u,a):11;if(c===qO)return b[2]?y(u,a):12;if(c===oE)return b[2]?y(u,a):13;if(c===oJ)return b[2]?y(u,a):14;if(c===qF)return b[2]?y(u,a):15;if(c===po)return b[2]?y(u,a):16;if(c===pu)return b[2]?y(u,a):17}else{if(c===qK)return b[2]?y(u,a):0;if(c===qh)return b[2]?y(u,a):1;if(c===qm)return b[2]?y(u,a):2;if(c===pO)return b[2]?y(u,a):3;if(c===oU)return b[2]?y(u,a):4;if(c===o$)return b[2]?y(u,a):5;if(c===p9)return b[2]?y(u,a):6;if(c===pt)return b[2]?y(u,a):7;if(c===ox)return b[2]?y(u,a):8}}}else if(o===e)return JR(u,a)}}return JV(u,a)}function +KA(a){switch(a){case +0:return KB;case +1:return KC;case +2:return KD;case +3:return KE;case +4:return KF;case +5:return KG;case +6:return KH;case +7:return KI;case +8:return KJ;case +9:return KK;case +10:return KL;case +11:return KM;case +12:return KN;case +13:return KO;case +14:return KP;case +15:return KQ;case +16:return KR;case +17:return KS;case +18:return KT;case +19:return KU;case +20:return KV;case +21:return KW;case +22:return KX;case +23:return KY;case +24:return KZ;case +25:return K0;case +26:return K1;case +27:return K2;case +28:return K3;case +29:return K4;case +30:return K5;case +31:return K6;case +32:return K7;case +33:return K8;case +34:return K9;case +35:return K_;default:return K$}}function +La(a){return Kz([0,o,[0,[0,n,nB(a)],0]])}function +Lb(a){var +b=KA(a);if(typeof +b!=="number"&&o===b[1]){var +c=b[2];if(c&&!c[2])return c[1]}throw h([0,f,Lc],1)}var +nD=[0,0];function +J5(a){return a?"POST":"GET"}function +Lv(a,b){if(a)var +d=a[1],c=g(p(Lw),d);else +var +c=Lz;var +e=c_(nD[1],Lx);return i(p(Ly),e,c)}function +Kd(a){if(typeof +a!=="number"&&W===a[1]){var +e=[0,0],f=[0,0],c=[0,0],g=[0,0];(function(a){var +h=a;for(;;){if(!h)return;var +i=h[1],j=i[2],d=i[1],k=h[2];if(d!==q8)if(d!==pD){if(b(iM))g[1]=[0,d,b(g)]}else if(b(e))c[1]=[0,d,b(c)];else +e[1]=[0,at(j)];else if(b(f))c[1]=[0,d,b(c)];else +f[1]=[0,at(j)];h=k}}(a[2]));if(b(c))return cC(f5,b(c),a);if(b(g))return cD(f5,b(g),a);var +d=b(e),h=b(f);if(d&&h)return[0,d[1],h[1]];var +i=[0,[0,0===b(f)?1:0,Ke],0];return dh(f5,a,[0,[0,0===b(e)?1:0,Kf],i])}return cE(f5,a)}function +Kg(a){var +b=a[1],c=[0,[0,Kh,as(a[2])],0];return[0,W,[0,[0,Ki,as(b)],c]]}function +Kj(a){if(typeof +a!=="number"&&W===a[1]){var +e=[0,0],f=[0,0],g=[0,0],c=[0,0],d=[0,0];(function(a){var +h=a;for(;;){if(!h)return;var +j=h[1],i=j[2],d=j[1],k=h[2];if(d!==qy)if(d!==dm){if(d===n9)if(b(e))c[1]=[0,d,b(c)];else +e[1]=[0,J6(i)]}else if(b(g))c[1]=[0,d,b(c)];else +g[1]=[0,at(i)];else if(b(f))c[1]=[0,d,b(c)];else +f[1]=[0,at(i)];h=k}}(a[2]));if(b(c))return cC(f6,b(c),a);if(b(d))return cD(f6,b(d),a);var +h=b(e),i=b(f),j=b(g);if(h&&i&&j)return[0,h[1],i[1],j[1]];var +k=[0,[0,0===b(g)?1:0,Kk],0],l=[0,[0,0===b(f)?1:0,Kl],k];return dh(f6,a,[0,[0,0===b(e)?1:0,Km],l])}return cE(f6,a)}function +Kn(a){var +b=a[2],c=a[1],d=[0,[0,Ko,as(a[3])],0],e=[0,[0,Kp,as(b)],d];return[0,W,[0,[0,Kq,J_(c)],e]]}var +Kr=1;function +Ks(a){return Kt}function +Ld(a){if(typeof +a!=="number"&&W===a[1]){var +f=[0,0],l=[0,0],g=[0,0],m=[0,0],n=[0,0],o=[0,0],h=[0,0],i=[0,0],j=[0,0],p=[0,0],c=[0,0],d=[0,0];(function(a){var +k=a;for(;;){if(!k)return;var +q=k[1],e=q[2],d=q[1],r=dJ(d,oP);a:b:{var +s=k[2];if(0<=r)if(0 + + + + OCAMIX + + + + + + + + + + diff --git a/vtable/main.bc.js b/vtable/main.bc.js new file mode 100644 index 0000000..def0867 --- /dev/null +++ b/vtable/main.bc.js @@ -0,0 +1,3196 @@ +// Generated by js_of_ocaml +//# buildInfo:effects=false, kind=exe, use-js-string=true, version=5.8.2+5.8.2 +(function(a){typeof +globalThis!=="object"&&(this?b():(a.defineProperty(a.prototype,"_T_",{configurable:true,get:b}),_T_));function +b(){var +b=this||self;b.globalThis=b;delete +a.prototype._T_}}(Object));(function(n){"use strict";var +bd=3850876,aa=" ",R="0",d_="compare: functional value",d9="mkdir",bD=1000,M="vendor/lwd/lib/lwd/lwd_seq.pp.ml",hs="@[",hr="window",hQ="console",cC="int_of_string",dZ="fs",hc="%u",hq="/static/",gP="%i",hP="%ni",av=0xff,hp="Assert_failure",gO="0x",hb=0x7ff0,hO=218,gN=0xdfff,ha="End_of_file",ho="OCAMLRUNPARAM",gM=": closedir failed",hn=253,hM=19067,hN="Out_of_memory",gL="Not_found",eb="Failure",cB="Unix.Unix_error",gK="style",g$="^",hL="length",d5="ENOTDIR",hm="Lwd_seq.rank: node is marked",gJ="%Li",gI="Invalid_argument",cu=254,be="+",cw="Set.bal",hK=", characters ",au=0xffffff,g_=858694086,hl=120,hk=1027,bC=1024,cA="Map.bal",bf=246,g9="Pervasives.do_at_exit",hj=389604418,g8=65536,d4=0xf,dX=", ",dY=512,hI="Match_failure",hJ="closedir",gG="%li",gH=1026,hH=-32,dW="nan",e="",dV="rmdir",d8="Fatal error: exception ",g7="infinity",B="camlinternalFormat.ml",g6="fd ",hF="append",hG=": ",gF=174,c=248,g5="em",hE=0xe0,cv=24029,g4=0xf0,g3="Sys_error",ab=0x80,hi="ENOTEMPTY",hD="EEXIST",d7=1255,g2=1073741823,dU=" : flags Open_text and Open_binary are not compatible",hC="px",d3="e",dT=": Not a directory",d2="ENOENT",hh="Stack_overflow",hB="Undefined_recursive_module",hA=2147483647,aj=0x8000,hg="a",g1=0x800,hf=-48,gE=" : is a directory",gZ="@{",g0="Division_by_zero",gD="classList",aE=".",gY="(Program not linked with -g, cannot print stack backtrace)\n",aF=0x3f,d1=" : file already exists",bB=128,cz=": No such file or directory",gW="vendor/lwd/lib/brr-lwd/elwd.ml",gX=255,ct="lwd-to-remove",cy=256,d0=100,gV="id",dS="index out of bounds",ak="/",cs=252,hz="height: ",gC="lwdui-virtual-table-row",dR="%d",hy=383,gB=": file descriptor already closed",aV="-",dQ="EBADF",gU=-97,hx="Printexc.handle_uncaught_exception",gA=12520,ea=" : flags Open_rdonly and Open_wronly are not compatible",a="vendor/lwd/lib/lwd/lwd_table.ml",he="Fatal error: exception %s\n",hw="class",at=250,gT=199,hv=">",gS="([^/]+)",gR=759637122,d6="jsError",gz=103,cr='"',al=0xffff,d$=127,gy=0xdc00,gQ="documentElement",hu="Sys_blocked_io",b="vendor/lwd/lib/lwd/lwd.ml",gx="buffer.ml",ht="_",hd="rem",cx="_bigarr02";function +sl(a,b,c,d,e){if(d<=b)for(var +f=1;f<=e;f++)c[d+f]=a[b+f];else +for(var +f=e;f>=1;f--)c[d+f]=a[b+f];return 0}function +sm(a,b,c){var +d=new +Array(c+1);d[0]=0;for(var +e=1,f=b+1;e<=c;e++,f++)d[e]=a[f];return d}function +bN(a,b,c){var +d=String.fromCharCode;if(b==0&&c<=4096&&c==a.length)return d.apply(null,a);var +f=e;for(;0=c.l||c.t==2&&e>=c.c.length)){c.c=a.t==4?bN(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else if(c.t==2&&d==c.c.length){c.c+=a.t==4?bN(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else{if(c.t!=4)cG(c);var +g=a.c,h=c.c;if(a.t==4)if(d<=b)for(var +f=0;f=0;f--)h[d+f]=g[b+f];else{var +i=Math.min(e,g.length-b);for(var +f=0;f>=1;if(a==0)return d;b+=b;c++;if(c==9)b.slice(0,1)}}function +bH(a){if(a.t==2)a.c+=bj(a.l-a.c.length,"\0");else +a.c=bN(a.c,0,a.c.length);a.t=0}function +ew(a){if(a.length<24){for(var +b=0;bd$)return false;return true}else +return!/[^\x00-\x7f]/.test(a)}function +ig(a){for(var +k=e,d=e,h,g,i,b,c=0,j=a.length;cdY){d.substr(0,1);k+=d;d=e;k+=a.slice(c,f)}else +d+=a.slice(c,f);if(f==j)break;c=f}b=1;if(++c=0xd7ff&&b<0xe000)b=2}else{b=3;if(++c0x10ffff)b=3}}}}}if(b<4){c-=b;d+="\ufffd"}else if(b>al)d+=String.fromCharCode(0xd7c0+(b>>10),gy+(b&0x3FF));else +d+=String.fromCharCode(b);if(d.length>bC){d.substr(0,1);k+=d;d=e}}return k+d}function +aw(a,b,c){this.t=a;this.c=b;this.l=c}aw.prototype.toString=function(){switch(this.t){case +9:return this.c;default:bH(this);case +0:if(ew(this.c)){this.t=9;return this.c}this.t=8;case +8:return this.c}};aw.prototype.toUtf16=function(){var +a=this.toString();if(this.t==9)return a;return ig(a)};aw.prototype.slice=function(){var +a=this.t==4?this.c.slice():this.c;return new +aw(this.t,a,this.l)};function +hY(a){return new +aw(0,a,a.length)}function +an(a){return a}function +aX(a){return hY(an(a))}function +aH(a,b,c,d,e){ax(aX(a),b,c,d,e);return 0}function +ii(a){var +b=n.process;if(b&&b.env&&b.env[a]!=undefined)return b.env[a];if(n.jsoo_static_env&&n.jsoo_static_env[a])return n.jsoo_static_env[a]}var +et=0;(function(){var +c=ii(ho);if(c!==undefined){var +b=c.split(",");for(var +a=0;a>>0>=a.l)sq();return v(a,b,c)}function +ee(a,b){switch(a.t&6){default:if(b>=a.c.length)return 0;case +0:return a.c.charCodeAt(b);case +4:return a.c[b]}}function +aI(d,c){var +f=d.l>=0?d.l:d.l=d.length,e=c.length,b=f-e;if(b==0)return d.apply(null,c);else if(b<0){var +a=d.apply(null,c.slice(0,f));if(typeof +a!=="function")return a;return aI(a,c.slice(f))}else{switch(b){case +1:{var +a=function(a){var +f=new +Array(e+1);for(var +b=0;b>>0>=a.length-1)bF();return a}function +ss(a){if(isFinite(a)){if(Math.abs(a)>=2.2250738585072014e-308)return 0;if(a!=0)return 1;return 2}return isNaN(a)?4:3}function +h7(a){return 0}var +tp=Math.log2&&Math.log2(1.1235582092889474E+307)==1020;function +to(a){if(tp)return Math.floor(Math.log2(a));var +b=0;if(a==0)return-Infinity;if(a>=1)while(a>=2){a/=2;b++}else +while(a<1){a*=2;b--}return b}function +ek(a){var +b=new +Float32Array(1);b[0]=a;var +c=new +Int32Array(b.buffer);return c[0]|0}var +h5=Math.pow(2,-24);function +ib(a){throw a}function +es(){ib(J.Division_by_zero)}function +d(a,b,c){this.lo=a&au;this.mi=b&au;this.hi=c&al}d.prototype.caml_custom="_j";d.prototype.copy=function(){return new +d(this.lo,this.mi,this.hi)};d.prototype.ucompare=function(a){if(this.hi>a.hi)return 1;if(this.hia.mi)return 1;if(this.mia.lo)return 1;if(this.loc)return 1;if(ba.mi)return 1;if(this.mia.lo)return 1;if(this.lo>24),c=-this.hi+(b>>24);return new +d(a,b,c)};d.prototype.add=function(a){var +b=this.lo+a.lo,c=this.mi+a.mi+(b>>24),e=this.hi+a.hi+(c>>24);return new +d(b,c,e)};d.prototype.sub=function(a){var +b=this.lo-a.lo,c=this.mi-a.mi+(b>>24),e=this.hi-a.hi+(c>>24);return new +d(b,c,e)};d.prototype.mul=function(a){var +b=this.lo*a.lo,c=(b*h5|0)+this.mi*a.lo+this.lo*a.mi,e=(c*h5|0)+this.hi*a.lo+this.mi*a.mi+this.lo*a.hi;return new +d(b,c,e)};d.prototype.isZero=function(){return(this.lo|this.mi|this.hi)==0};d.prototype.isNeg=function(){return this.hi<<16<0};d.prototype.and=function(a){return new +d(this.lo&a.lo,this.mi&a.mi,this.hi&a.hi)};d.prototype.or=function(a){return new +d(this.lo|a.lo,this.mi|a.mi,this.hi|a.hi)};d.prototype.xor=function(a){return new +d(this.lo^a.lo,this.mi^a.mi,this.hi^a.hi)};d.prototype.shift_left=function(a){a=a&63;if(a==0)return this;if(a<24)return new +d(this.lo<>24-a,this.hi<>24-a);if(a<48)return new +d(0,this.lo<>48-a);return new +d(0,0,this.lo<>a|this.mi<<24-a,this.mi>>a|this.hi<<24-a,this.hi>>a);if(a<48)return new +d(this.mi>>a-24|this.hi<<48-a,this.hi>>a-24,0);return new +d(this.hi>>a-48,0,0)};d.prototype.shift_right=function(a){a=a&63;if(a==0)return this;var +c=this.hi<<16>>16;if(a<24)return new +d(this.lo>>a|this.mi<<24-a,this.mi>>a|c<<24-a,this.hi<<16>>a>>>16);var +b=this.hi<<16>>31;if(a<48)return new +d(this.mi>>a-24|this.hi<<48-a,this.hi<<16>>a-24>>16,b&al);return new +d(this.hi<<16>>a-32,b,b)};d.prototype.lsl1=function(){this.hi=this.hi<<1|this.mi>>23;this.mi=(this.mi<<1|this.lo>>23)&au;this.lo=this.lo<<1&au};d.prototype.lsr1=function(){this.lo=(this.lo>>>1|this.mi<<23)&au;this.mi=(this.mi>>>1|this.hi<<23)&au;this.hi=this.hi>>>1};d.prototype.udivmod=function(a){var +e=0,c=this.copy(),b=a.copy(),f=new +d(0,0,0);while(c.ucompare(b)>0){e++;b.lsl1()}while(e>=0){e--;f.lsl1();if(c.ucompare(b)>=0){f.lo++;c=c.sub(b)}b.lsr1()}return{quotient:f,modulus:c}};d.prototype.div=function(a){var +b=this;if(a.isZero())es();var +d=b.hi^a.hi;if(b.hi&aj)b=b.neg();if(a.hi&aj)a=a.neg();var +c=b.udivmod(a).quotient;if(d&aj)c=c.neg();return c};d.prototype.mod=function(a){var +b=this;if(a.isZero())es();var +d=b.hi;if(b.hi&aj)b=b.neg();if(a.hi&aj)a=a.neg();var +c=b.udivmod(a).modulus;if(d&aj)c=c.neg();return c};d.prototype.toInt=function(){return this.lo|this.mi<<24};d.prototype.toFloat=function(){return(this.hi<<16)*Math.pow(2,32)+this.mi*Math.pow(2,24)+this.lo};d.prototype.toArray=function(){return[this.hi>>8,this.hi&av,this.mi>>16,this.mi>>8&av,this.mi&av,this.lo>>16,this.lo>>8&av,this.lo&av]};d.prototype.lo32=function(){return this.lo|(this.mi&av)<<24};d.prototype.hi32=function(){return this.mi>>>8&al|this.hi<<16};function +cJ(a,b,c){return new +d(a,b,c)}function +cI(a){if(!isFinite(a)){if(isNaN(a))return cJ(1,0,hb);return a>0?cJ(0,0,hb):cJ(0,0,0xfff0)}var +f=a==0&&1/a==-Infinity?aj:a>=0?0:aj;if(f)a=-a;var +b=to(a)+1023;if(b<=0){b=0;a/=Math.pow(2,-gH)}else{a/=Math.pow(2,b-hk);if(a<16){a*=2;b-=1}if(b==0)a/=2}var +d=Math.pow(2,24),c=a|0;a=(a-c)*d;var +e=a|0;a=(a-e)*d;var +g=a|0;c=c&d4|f|b<<4;return cJ(g,e,c)}function +bL(a){return a.toArray()}function +hX(a,b,c){a.write(32,b.dims.length);a.write(32,b.kind|b.layout<<8);if(b.caml_custom==cx)for(var +d=0;d>4;if(d==2047)return(f|g|c&d4)==0?c&aj?-Infinity:Infinity:NaN;var +e=Math.pow(2,-24),b=(f*e+g)*e+(c&d4);if(d>0){b+=16;b*=Math.pow(2,d-hk)}else +b*=Math.pow(2,-gH);if(c&aj)b=-b;return b}function +ec(a){var +d=a.length,c=1;for(var +b=0;b>>24&av|(b&al)<<8,b>>>16&al)}function +en(a){return a.hi32()}function +eo(a){return a.lo32()}var +so=cx;function +aG(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}aG.prototype.caml_custom=so;aG.prototype.offset=function(a){var +c=0;if(typeof +a==="number")a=[a];if(!(a +instanceof +Array))z("bigarray.js: invalid offset");if(this.dims.length!=a.length)z("Bigarray.get/set: bad number of dimensions");if(this.layout==0)for(var +b=0;b=this.dims[b])bF();c=c*this.dims[b]+a[b]}else +for(var +b=this.dims.length-1;b>=0;b--){if(a[b]<1||a[b]>this.dims[b])bF();c=c*this.dims[b]+(a[b]-1)}return c};aG.prototype.get=function(a){switch(this.kind){case +7:var +d=this.data[a*2+0],b=this.data[a*2+1];return sK(d,b);case +10:case +11:var +e=this.data[a*2+0],c=this.data[a*2+1];return[cu,e,c];default:return this.data[a]}};aG.prototype.set=function(a,b){switch(this.kind){case +7:this.data[a*2+0]=eo(b);this.data[a*2+1]=en(b);break;case +10:case +11:this.data[a*2+0]=b[1];this.data[a*2+1]=b[2];break;default:this.data[a]=b;break}return 0};aG.prototype.fill=function(a){switch(this.kind){case +7:var +c=eo(a),e=en(a);if(c==e)this.data.fill(c);else +for(var +b=0;be)return 1;if(d!=e){if(!b)return NaN;if(d==d)return 1;if(e==e)return-1}}break;case +7:for(var +c=0;ca.data[c+1])return 1;if(this.data[c]>>>0>>0)return-1;if(this.data[c]>>>0>a.data[c]>>>0)return 1}break;case +2:case +3:case +4:case +5:case +6:case +8:case +9:case +12:for(var +c=0;ca.data[c])return 1}break}return 0};function +bg(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}bg.prototype=new +aG();bg.prototype.offset=function(a){if(typeof +a!=="number")if(a +instanceof +Array&&a.length==1)a=a[0];else +z("Ml_Bigarray_c_1_1.offset");if(a<0||a>=this.dims[0])bF();return a};bg.prototype.get=function(a){return this.data[a]};bg.prototype.set=function(a,b){this.data[a]=b;return 0};bg.prototype.fill=function(a){this.data.fill(a);return 0};function +hT(a,b,c,d){var +e=hV(a);if(ec(c)*e!=d.length)z("length doesn't match dims");if(b==0&&c.length==1&&e==1)return new +bg(a,b,c,d);return new +aG(a,b,c,d)}function +V(a){if(!J.Failure)J.Failure=[c,W(eb),-3];er(J.Failure,a)}function +hU(a,b,c){var +k=a.read32s();if(k<0||k>16)V("input_value: wrong number of bigarray dimensions");var +r=a.read32s(),l=r&av,q=r>>8&1,j=[];if(c==cx)for(var +d=0;d>>32-15;b=bi(b,0x1b873593);a^=b;a=a<<13|a>>>32-13;return(a+(a<<2)|0)+(0xe6546b64|0)|0}function +sF(a,b){a=K(a,eo(b));a=K(a,en(b));return a}function +ei(a,b){return sF(a,cI(b))}function +hW(a){var +c=ec(a.dims),d=0;switch(a.kind){case +2:case +3:case +12:if(c>cy)c=cy;var +e=0,b=0;for(b=0;b+4<=a.data.length;b+=4){e=a.data[b+0]|a.data[b+1]<<8|a.data[b+2]<<16|a.data[b+3]<<24;d=K(d,e)}e=0;switch(c&3){case +3:e=a.data[b+2]<<16;case +2:e|=a.data[b+1]<<8;case +1:e|=a.data[b+0];d=K(d,e)}break;case +4:case +5:if(c>bB)c=bB;var +e=0,b=0;for(b=0;b+2<=a.data.length;b+=2){e=a.data[b+0]|a.data[b+1]<<16;d=K(d,e)}if((c&1)!=0)d=K(d,a.data[b]);break;case +6:if(c>64)c=64;for(var +b=0;b64)c=64;for(var +b=0;b32)c=32;c*=2;for(var +b=0;b64)c=64;for(var +b=0;b32)c=32;for(var +b=0;b0?f(b,a,d):f(a,b,d);if(d&&e!=e)return c;if(+e!=+e)return+e;if((e|0)!=0)return e|0}return c}function +cL(a){return typeof +a==="string"&&!/[^\x00-\xff]/.test(a)}function +cK(a){return a +instanceof +aw}function +h0(a){if(typeof +a==="number")return bD;else if(cK(a))return cs;else if(cL(a))return 1252;else if(a +instanceof +Array&&a[0]===a[0]>>>0&&a[0]<=gX){var +b=a[0]|0;return b==cu?0:b}else if(a +instanceof +String)return gA;else if(typeof +a=="string")return gA;else if(a +instanceof +Number)return bD;else if(a&&a.caml_custom)return d7;else if(a&&a.compare)return 1256;else if(typeof +a=="function")return 1247;else if(typeof +a=="symbol")return 1251;return 1001}function +h6(a,b){if(ab?1:0}function +sr(a,b){a.t&6&&bH(a);b.t&6&&bH(b);return a.cb.c?1:0}function +cF(a,b,c){var +f=[];for(;;){if(!(c&&a===b)){var +e=h0(a);if(e==at){a=a[1];continue}var +g=h0(b);if(g==at){b=b[1];continue}if(e!==g){if(e==bD){if(g==d7)return hZ(a,b,-1,c);return-1}if(g==bD){if(e==d7)return hZ(b,a,1,c);return 1}return eb)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case +1001:if(ab)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case +1251:if(a!==b){if(!c)return NaN;return 1}break;case +1252:var +a=an(a),b=an(b);if(a!==b){if(ab)return 1}break;case +12520:var +a=a.toString(),b=b.toString();if(a!==b){if(ab)return 1}break;case +246:case +254:default:if(h7(e)){z("compare: continuation value");break}if(a.length!=b.length)return a.length1)f.push(a,b,1);break}}if(f.length==0)return 0;var +h=f.pop();b=f.pop();a=f.pop();if(h+10)if(b==0&&(c>=a.l||a.t==2&&c>=a.c.length))if(d==0){a.c=e;a.t=2}else{a.c=bj(c,String.fromCharCode(d));a.t=c==a.l?0:2}else{if(a.t!=4)cG(a);for(c+=b;b0&&b===b)return b;a=a.replace(/_/g,e);b=+a;if(a.length>0&&b===b||/^[+-]?nan$/i.test(a))return b;var +c=/^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(a);if(c){var +d=c[3].replace(/0+$/,e),g=parseInt(c[1]+c[2]+d,16),f=(c[5]|0)-4*d.length;b=g*Math.pow(2,f);return b}if(/^\+?inf(inity)?$/i.test(a))return Infinity;if(/^-inf(inity)?$/i.test(a))return-Infinity;V("float_of_string")}function +eq(a){a=an(a);var +e=a.length;if(e>31)z("format_int: format too long");var +b={justify:be,signstyle:aV,filler:aa,alternate:false,base:0,signedconv:false,width:0,uppercase:false,sign:1,prec:-1,conv:"f"};for(var +d=0;d=0&&c<=9){b.width=b.width*10+c;d++}d--;break;case".":b.prec=0;d++;while(c=a.charCodeAt(d)-48,c>=0&&c<=9){b.prec=b.prec*10+c;d++}d--;case"d":case"i":b.signedconv=true;case"u":b.base=10;break;case"x":b.base=16;break;case"X":b.base=16;b.uppercase=true;break;case"o":b.base=8;break;case"e":case"f":case"g":b.signedconv=true;b.conv=c;break;case"E":case"F":case"G":b.signedconv=true;b.uppercase=true;b.conv=c.toLowerCase();break}}return b}function +eg(a,b){if(a.uppercase)b=b.toUpperCase();var +f=b.length;if(a.signedconv&&(a.sign<0||a.signstyle!=aV))f++;if(a.alternate){if(a.base==8)f+=1;if(a.base==16)f+=2}var +c=e;if(a.justify==be&&a.filler==aa)for(var +d=f;d20){c-=20;a/=Math.pow(10,c);a+=new +Array(c+1).join(R);if(b>0)a=a+aE+new +Array(b+1).join(R);return a}else +return a.toFixed(b)}}var +c,f=eq(a),e=f.prec<0?6:f.prec;if(b<0||b==0&&1/b==-Infinity){f.sign=-1;b=-b}if(isNaN(b)){c=dW;f.filler=aa}else if(!isFinite(b)){c="inf";f.filler=aa}else +switch(f.conv){case"e":var +c=b.toExponential(e),d=c.length;if(c.charAt(d-3)==d3)c=c.slice(0,d-1)+R+c.slice(d-1);break;case"f":c=j(b,e);break;case"g":e=e?e:1;c=b.toExponential(e-1);var +i=c.indexOf(d3),h=+c.slice(i+1);if(h<-4||b>=1e21||b.toFixed(0).length>e){var +d=i-1;while(c.charAt(d)==R)d--;if(c.charAt(d)==aE)d--;c=c.slice(0,d+1)+c.slice(i);d=c.length;if(c.charAt(d-3)==d3)c=c.slice(0,d-1)+R+c.slice(d-1);break}else{var +g=e;if(h<0){g-=h+1;c=b.toFixed(g)}else +while(c=b.toFixed(g),c.length>e+1)g--;if(g){var +d=c.length-1;while(c.charAt(d)==R)d--;if(c.charAt(d)==aE)d--;c=c.slice(0,d+1)}}break}return eg(f,c)}function +cH(a,b){if(an(a)==dR)return W(e+b);var +c=eq(a);if(b<0)if(c.signedconv){c.sign=-1;b=-b}else +b>>>=0;var +d=b.toString(c.base);if(c.prec>=0){c.filler=aa;var +f=c.prec-d.length;if(f>0)d=bj(f,R)+d}return eg(c,d)}var +tb=0;function +am(){return tb++}function +S(a){if(ew(a))return a;return ig(a)}function +bO(){return typeof +n.process!=="undefined"&&typeof +n.process.versions!=="undefined"&&typeof +n.process.versions.node!=="undefined"}function +tq(){function +a(a){if(a.charAt(0)===ak)return[e,a.substring(1)];return}function +b(a){var +h=/^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/,b=h.exec(a),c=b[1]||e,f=Boolean(c&&c.charAt(1)!==":");if(Boolean(b[2]||f)){var +d=b[1]||e,g=b[2]||e;return[d,a.substring(d.length+g.length)]}return}return bO()&&n.process&&n.process.platform?n.process.platform==="win32"?b:a:a}var +ex=tq();function +ie(a){return a.slice(-1)!==ak?a+ak:a}if(bO()&&n.process&&n.process.cwd)var +bI=n.process.cwd().replace(/\\/g,ak);else +var +bI="/static";bI=ie(bI);function +s1(a){a=S(a);if(!ex(a))a=bI+a;var +e=ex(a),d=e[1].split(ak),b=[];for(var +c=0;c1)b.pop();break;case".":break;case"":break;default:b.push(d[c]);break}b.unshift(e[0]);b.orig=a;return b}function +tn(a){for(var +g=e,c=g,b,i,d=0,h=a.length;ddY){c.substr(0,1);g+=c;c=e;g+=a.slice(d,f)}else +c+=a.slice(d,f);if(f==h)break;d=f}if(b>6);c+=String.fromCharCode(ab|b&aF)}else if(b<0xd800||b>=gN)c+=String.fromCharCode(hE|b>>12,ab|b>>6&aF,ab|b&aF);else if(b>=0xdbff||d+1==h||(i=a.charCodeAt(d+1))gN)c+="\xef\xbf\xbd";else{d++;b=(b<<10)+i-0x35fdc00;c+=String.fromCharCode(g4|b>>18,ab|b>>12&aF,ab|b>>6&aF,ab|b&aF)}if(c.length>bC){c.substr(0,1);g+=c;c=e}}return g+c}function +ag(a){return ew(a)?W(a):W(tn(a))}var +tr=["E2BIG","EACCES","EAGAIN",dQ,"EBUSY","ECHILD","EDEADLK","EDOM",hD,"EFAULT","EFBIG","EINTR","EINVAL","EIO","EISDIR","EMFILE","EMLINK","ENAMETOOLONG","ENFILE","ENODEV",d2,"ENOEXEC","ENOLCK","ENOMEM","ENOSPC","ENOSYS",d5,hi,"ENOTTY","ENXIO","EPERM","EPIPE","ERANGE","EROFS","ESPIPE","ESRCH","EXDEV","EWOULDBLOCK","EINPROGRESS","EALREADY","ENOTSOCK","EDESTADDRREQ","EMSGSIZE","EPROTOTYPE","ENOPROTOOPT","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EOPNOTSUPP","EPFNOSUPPORT","EAFNOSUPPORT","EADDRINUSE","EADDRNOTAVAIL","ENETDOWN","ENETUNREACH","ENETRESET","ECONNABORTED","ECONNRESET","ENOBUFS","EISCONN","ENOTCONN","ESHUTDOWN","ETOOMANYREFS","ETIMEDOUT","ECONNREFUSED","EHOSTDOWN","EHOSTUNREACH","ELOOP","EOVERFLOW"];function +az(a,b,c,d){var +f=tr.indexOf(a);if(f<0){if(d==null)d=-9999;f=[0,d]}var +g=[f,ag(b||e),ag(c||e)];return g}var +h$={};function +aK(a){return h$[a]}function +ay(a,b){throw g([0,a].concat(b))}function +ed(a){if(!(a +instanceof +Uint8Array))a=new +Uint8Array(a);return new +aw(4,a,a.length)}function +m(a){er(J.Sys_error,a)}function +ic(a){m(a+cz)}function +ev(a){if(a.t!=4)cG(a);return a.c}function +af(a){return a.l}function +hR(){}function +N(a){this.data=a}N.prototype=new +hR();N.prototype.constructor=N;N.prototype.truncate=function(a){var +b=this.data;this.data=C(a|0);ax(b,0,this.data,0,a)};N.prototype.length=function(){return af(this.data)};N.prototype.write=function(a,b,c,d){var +e=this.length();if(a+d>=e){var +f=C(a+d),g=this.data;this.data=f;ax(g,0,this.data,0,e)}ax(ed(b),c,this.data,a,d);return 0};N.prototype.read=function(a,b,c,d){var +e=this.length();if(a+d>=e)d=e-a;if(d){var +f=C(d|0);ax(this.data,a,f,0,d);b.set(ev(f),c)}return d};function +aW(a,b,c){this.file=b;this.name=a;this.flags=c}aW.prototype.err_closed=function(){m(this.name+gB)};aW.prototype.length=function(){if(this.file)return this.file.length();this.err_closed()};aW.prototype.write=function(a,b,c,d){if(this.file)return this.file.write(a,b,c,d);this.err_closed()};aW.prototype.read=function(a,b,c,d){if(this.file)return this.file.read(a,b,c,d);this.err_closed()};aW.prototype.close=function(){this.file=undefined};function +E(a,b){this.content={};this.root=a;this.lookupFun=b}E.prototype.nm=function(a){return this.root+a};E.prototype.create_dir_if_needed=function(a){var +d=a.split(ak),c=e;for(var +b=0;b>>16;a=bi(a,0x85ebca6b|0);a^=a>>>13;a=bi(a,0xc2b2ae35|0);a^=a>>>16;return a}function +sB(a,b,c,d){var +j,k,l,h,g,f,e,i,m;h=b;if(h<0||h>cy)h=cy;g=a;f=c;j=[d];k=0;l=1;while(k0){e=j[k++];if(e&&e.caml_custom){if(bJ[e.caml_custom]&&bJ[e.caml_custom].hash){var +n=bJ[e.caml_custom].hash(e);f=K(f,n);g--}}else if(e +instanceof +Array&&e[0]===(e[0]|0))switch(e[0]){case +248:f=K(f,e[2]);g--;break;case +250:j[--k]=e[1];break;default:if(h7(e[0]))break;var +o=e.length-1<<10|e[0];f=K(f,o);for(i=1,m=e.length;i=h)break;j[l++]=e[i]}break}else if(cK(e)){f=sC(f,e);g--}else if(cL(e)){f=sG(f,e);g--}else if(typeof +e==="string"){f=ej(f,e);g--}else if(e===(e|0)){f=K(f,e+e+1);g--}else if(typeof +e==="number"){f=ei(f,e);g--}}f=sE(f);return f&0x3FFFFFFF}function +sH(a,b,c){if(!isFinite(a)){if(isNaN(a))return ag(dW);return ag(a>0?g7:"-infinity")}var +k=a==0&&1/a==-Infinity?1:a>=0?0:1;if(k)a=-a;var +f=0;if(a==0);else if(a<1)while(a<1&&f>-1022){a*=2;f--}else +while(a>=2){a/=2;f++}var +l=f<0?e:be,g=e;if(k)g=aV;else +switch(c){case +43:g=be;break;case +32:g=aa;break;default:break}if(b>=0&&b<13){var +i=Math.pow(2,b*4);a=Math.round(a*i)/i}var +d=a.toString(16);if(b>=0){var +j=d.indexOf(aE);if(j<0)d+=aE+bj(b,R);else{var +h=j+1+b;if(d.length>24&au,a>>31&al)}function +sS(a){return a.toInt()}function +sN(a){return+a.isNeg()}function +sQ(a){return a.neg()}function +sL(a,b){var +c=eq(a);if(c.signedconv&&sN(b)){c.sign=-1;b=sQ(b)}var +d=e,i=sR(c.base),h="0123456789abcdef";do{var +g=b.udivmod(i);b=g.quotient;d=h.charAt(sS(g.modulus))+d}while(!sO(b));if(c.prec>=0){c.filler=aa;var +f=c.prec-d.length;if(f>0)d=bj(f,R)+d}return eg(c,d)}function +tc(a){var +b=0,e=l(a),c=10,d=1;if(e>0)switch(X(a,b)){case +45:b++;d=-1;break;case +43:b++;d=1;break}if(b+1=48&&a<=57)return a-48;if(a>=65&&a<=90)return a-55;if(a>=97&&a<=122)return a-87;return-1}function +sU(a){var +h=tc(a),d=h[0],i=h[1],e=h[2],g=l(a),j=-1>>>0,f=d=e)V(cC);var +b=c;for(d++;d=e)break;b=e*b+c;if(b>j)V(cC)}if(d!=g)V(cC);b=i*b;if(e==10&&(b|0)!=b)V(cC);return b|0}function +sW(a){return a.slice(1)}function +cM(a,b,c){return a[S(b)].apply(a,sW(c))}function +sX(a){var +d=a.length,c=new +Array(d+1);c[0]=0;for(var +b=0;b>>32-e,c)}function +g(a,b,c,d,e,f,g){return l(b&c|~b&d,a,b,e,f,g)}function +h(a,b,c,d,e,f,g){return l(b&d|c&~d,a,b,e,f,g)}function +i(a,b,c,d,e,f,g){return l(b^c^d,a,b,e,f,g)}function +j(a,b,c,d,e,f,g){return l(c^(b|~d),a,b,e,f,g)}return function(a,b){var +c=a[0],d=a[1],e=a[2],f=a[3];c=g(c,d,e,f,b[0],7,0xD76AA478);f=g(f,c,d,e,b[1],12,0xE8C7B756);e=g(e,f,c,d,b[2],17,0x242070DB);d=g(d,e,f,c,b[3],22,0xC1BDCEEE);c=g(c,d,e,f,b[4],7,0xF57C0FAF);f=g(f,c,d,e,b[5],12,0x4787C62A);e=g(e,f,c,d,b[6],17,0xA8304613);d=g(d,e,f,c,b[7],22,0xFD469501);c=g(c,d,e,f,b[8],7,0x698098D8);f=g(f,c,d,e,b[9],12,0x8B44F7AF);e=g(e,f,c,d,b[10],17,0xFFFF5BB1);d=g(d,e,f,c,b[11],22,0x895CD7BE);c=g(c,d,e,f,b[12],7,0x6B901122);f=g(f,c,d,e,b[13],12,0xFD987193);e=g(e,f,c,d,b[14],17,0xA679438E);d=g(d,e,f,c,b[15],22,0x49B40821);c=h(c,d,e,f,b[1],5,0xF61E2562);f=h(f,c,d,e,b[6],9,0xC040B340);e=h(e,f,c,d,b[11],14,0x265E5A51);d=h(d,e,f,c,b[0],20,0xE9B6C7AA);c=h(c,d,e,f,b[5],5,0xD62F105D);f=h(f,c,d,e,b[10],9,0x02441453);e=h(e,f,c,d,b[15],14,0xD8A1E681);d=h(d,e,f,c,b[4],20,0xE7D3FBC8);c=h(c,d,e,f,b[9],5,0x21E1CDE6);f=h(f,c,d,e,b[14],9,0xC33707D6);e=h(e,f,c,d,b[3],14,0xF4D50D87);d=h(d,e,f,c,b[8],20,0x455A14ED);c=h(c,d,e,f,b[13],5,0xA9E3E905);f=h(f,c,d,e,b[2],9,0xFCEFA3F8);e=h(e,f,c,d,b[7],14,0x676F02D9);d=h(d,e,f,c,b[12],20,0x8D2A4C8A);c=i(c,d,e,f,b[5],4,0xFFFA3942);f=i(f,c,d,e,b[8],11,0x8771F681);e=i(e,f,c,d,b[11],16,0x6D9D6122);d=i(d,e,f,c,b[14],23,0xFDE5380C);c=i(c,d,e,f,b[1],4,0xA4BEEA44);f=i(f,c,d,e,b[4],11,0x4BDECFA9);e=i(e,f,c,d,b[7],16,0xF6BB4B60);d=i(d,e,f,c,b[10],23,0xBEBFBC70);c=i(c,d,e,f,b[13],4,0x289B7EC6);f=i(f,c,d,e,b[0],11,0xEAA127FA);e=i(e,f,c,d,b[3],16,0xD4EF3085);d=i(d,e,f,c,b[6],23,0x04881D05);c=i(c,d,e,f,b[9],4,0xD9D4D039);f=i(f,c,d,e,b[12],11,0xE6DB99E5);e=i(e,f,c,d,b[15],16,0x1FA27CF8);d=i(d,e,f,c,b[2],23,0xC4AC5665);c=j(c,d,e,f,b[0],6,0xF4292244);f=j(f,c,d,e,b[7],10,0x432AFF97);e=j(e,f,c,d,b[14],15,0xAB9423A7);d=j(d,e,f,c,b[5],21,0xFC93A039);c=j(c,d,e,f,b[12],6,0x655B59C3);f=j(f,c,d,e,b[3],10,0x8F0CCC92);e=j(e,f,c,d,b[10],15,0xFFEFF47D);d=j(d,e,f,c,b[1],21,0x85845DD1);c=j(c,d,e,f,b[8],6,0x6FA87E4F);f=j(f,c,d,e,b[15],10,0xFE2CE6E0);e=j(e,f,c,d,b[6],15,0xA3014314);d=j(d,e,f,c,b[13],21,0x4E0811A1);c=j(c,d,e,f,b[4],6,0xF7537E82);f=j(f,c,d,e,b[11],10,0xBD3AF235);e=j(e,f,c,d,b[2],15,0x2AD7D2BB);d=j(d,e,f,c,b[9],21,0xEB86D391);a[0]=k(c,a[0]);a[1]=k(d,a[1]);a[2]=k(e,a[2]);a[3]=k(f,a[3])}}();function +sk(a,b,c){var +e=a.len&aF,d=0;a.len+=c;if(e){var +f=64-e;if(c=64){a.b8.set(b.subarray(d,d+64),0);cD(a.w,a.b32);c-=64;d+=64}if(c)a.b8.set(b.subarray(d,d+c),0)}function +si(a){var +c=a.len&aF;a.b8[c]=ab;c++;if(c>56){for(var +b=c;b<64;b++)a.b8[b]=0;cD(a.w,a.b32);for(var +b=0;b<56;b++)a.b8[b]=0}else +for(var +b=c;b<56;b++)a.b8[b]=0;a.b32[14]=a.len<<3;a.b32[15]=a.len>>29&0x1FFFFFFF;cD(a.w,a.b32);var +e=new +Uint8Array(16);for(var +d=0;d<4;d++)for(var +b=0;b<4;b++)e[d*4+b]=a.w[d]>>8*b&0xFF;return e}function +ti(a){return W(bN(a,0,a.length))}function +s2(a,b,c){var +d=sj(),e=ev(a);sk(d,e.subarray(b,b+c),c);return ti(si(d))}function +s3(a,b,c){return s2(aX(a),b,c)}function +s5(){return 0}var +aJ=new +Array();function +h8(a){return aJ[a]}function +aY(a){var +b=h8(a);if(!b.opened)m("Cannot flush a closed channel");if(!b.buffer||b.buffer_curr==0)return 0;if(b.output)b.output(bN(b.buffer,0,b.buffer_curr));else +b.file.write(b.offset,b.buffer,0,b.buffer_curr);b.offset+=b.buffer_curr;b.buffer_curr=0;return 0}function +tk(a,b){if(b.name)try{var +d=require(dZ),c=d.openSync(b.name,"rs");return new +ae(c,b)}catch(f){}return new +ae(a,b)}var +cQ=new +Array(3);function +bE(a,b){N.call(this,C(0));this.log=function(a){return 0};if(a==1&&typeof +console.log=="function")this.log=console.log;else if(a==2&&typeof +console.error=="function")this.log=console.error;else if(typeof +console.log=="function")this.log=console.log;this.flags=b}bE.prototype.length=function(){return 0};bE.prototype.write=function(a,b,c,d){if(this.log){if(d>0&&c>=0&&c+d<=b.length&&b[c+d-1]==10)d--;var +e=C(d);ax(ed(b),c,e,0,d);this.log(e.toUtf16());return 0}m(this.fd+gB)};bE.prototype.read=function(a,b,c,d){m(this.fd+": file descriptor is write only")};bE.prototype.close=function(){this.log=undefined};function +cR(a,b){if(b==undefined)b=cQ.length;cQ[b]=a;return b|0}function +tt(a,b,c){var +d={};while(b){switch(b[1]){case +0:d.rdonly=1;break;case +1:d.wronly=1;break;case +2:d.append=1;break;case +3:d.create=1;break;case +4:d.truncate=1;break;case +5:d.excl=1;break;case +6:d.binary=1;break;case +7:d.text=1;break;case +8:d.nonblock=1;break}b=b[2]}if(d.rdonly&&d.wronly)m(an(a)+ea);if(d.text&&d.binary)m(an(a)+dU);var +e=ij(a),f=e.device.open(e.rest,d);return cR(f,undefined)}(function(){function +a(a,b){return bO()?tk(a,b):new +bE(a,b)}cR(a(0,{rdonly:1,altname:"/dev/stdin",isCharacterDevice:true}),0);cR(a(1,{buffered:2,wronly:1,isCharacterDevice:true}),1);cR(a(2,{buffered:2,wronly:1,isCharacterDevice:true}),2)}());function +s6(a){var +b=cQ[a];if(b.flags.wronly)m(g6+a+" is writeonly");var +d=null,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:false,buffer_curr:0,buffer_max:0,buffer:new +Uint8Array(g8),refill:d};aJ[c.fd]=c;return c.fd}function +h9(a){var +b=cQ[a];if(b.flags.rdonly)m(g6+a+" is readonly");var +d=b.flags.buffered!==undefined?b.flags.buffered:1,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:true,buffer_curr:0,buffer:new +Uint8Array(g8),buffered:d};aJ[c.fd]=c;return c.fd}function +s7(){var +b=0;for(var +a=0;ae.buffer.length){var +g=new +Uint8Array(e.buffer_curr+b.length);g.set(e.buffer);e.buffer=g}switch(e.buffered){case +0:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;aY(a);break;case +1:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)aY(a);break;case +2:var +f=b.lastIndexOf(10);if(f<0){e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)aY(a)}else{e.buffer.set(b.subarray(0,f+1),e.buffer_curr);e.buffer_curr+=f+1;aY(a);e.buffer.set(b.subarray(f+1),e.buffer_curr);e.buffer_curr+=b.length-f-1}break}return 0}function +s8(a,b,c,d){var +b=ev(b);return s9(a,b,c,d)}function +ep(a,b,c,d){return s8(a,aX(b),c,d)}function +h_(a,b){var +c=W(String.fromCharCode(b));ep(a,c,0,1);return 0}function +s_(a,b){if(b==0)es();return a%b}function +bM(a,b){return+(cF(a,b,false)!=0)}function +ta(a,b){a[0]=at;a[1]=b;return 0}function +aL(a){if(a +instanceof +Array&&a[0]==a[0]>>>0)return a[0];else if(cK(a))return cs;else if(cL(a))return cs;else if(a +instanceof +Function||typeof +a=="function")return 247;else if(a&&a.caml_custom)return gX;else +return bD}function +sp(a){var +c={};if(a)for(var +b=1;b=0)a=e;else +V("caml_register_global: cannot locate "+d)}}J[a+1]=b;if(c)J[c]=b}function +eu(a,b){h$[an(a)]=b;return 0}function +tg(){z(dS)}function +I(a,b){if(b>>>0>=l(a))tg();return X(a,b)}function +cP(a){a.t&6&&bH(a);return W(a.c)}function +tj(){return 0x7FFFFFFF/4|0}function +td(){ib(J.Not_found)}function +id(a){var +b=ii(S(a));if(b===undefined)td();return ag(b)}function +tl(){if(n.crypto)if(n.crypto.getRandomValues){var +a=n.crypto.getRandomValues(new +Int32Array(4));return[0,a[0],a[1],a[2],a[3]]}else if(n.crypto.randomBytes){var +a=new +Int32Array(n.crypto.randomBytes(16).buffer);return[0,a[0],a[1],a[2],a[3]]}var +b=new +Date().getTime(),c=b^0xffffffff*Math.random();return[0,c]}function +aM(a){var +b=1;while(a&&a.joo_tramp){a=a.joo_tramp.apply(null,a.joo_args);b++}return a}function +p(a,b){return{joo_tramp:a,joo_args:b}}function +tm(a,b){if(b.fun){a.fun=b.fun;return 0}if(typeof +b==="function"){a.fun=b;return 0}var +c=b.length;while(c--)a[c]=b[c];return 0}function +Y(a){{if(a +instanceof +Array)return a;var +b;if(n.RangeError&&a +instanceof +n.RangeError&&a.message&&a.message.match(/maximum call stack/i))b=J.Stack_overflow;else if(n.InternalError&&a +instanceof +n.InternalError&&a.message&&a.message.match(/too much recursion/i))b=J.Stack_overflow;else if(a +instanceof +n.Error&&aK(d6))b=[0,aK(d6),a];else +b=[0,J.Failure,ag(String(a))];if(a +instanceof +n.Error)b.js_error=a;return b}}function +sV(a){switch(a[2]){case-8:case-11:case-12:return 1;default:return 0}}function +sy(a){var +b=e;if(a[0]==0){b+=a[1][1];if(a.length==3&&a[2][0]==0&&sV(a[1]))var +g=a[2],h=1;else +var +h=2,g=a;b+="(";for(var +f=h;fh)b+=dX;var +d=g[f];if(typeof +d=="number")b+=d.toString();else if(d +instanceof +aw)b+=cr+d.toString()+cr;else if(typeof +d=="string")b+=cr+d.toString()+cr;else +b+=ht}b+=")"}else if(a[0]==c)b+=a[1];return b}function +h2(a){if(a +instanceof +Array&&(a[0]==0||a[0]==c)){var +d=aK(hx);if(d)cE(d,[a,false]);else{var +e=sy(a),b=aK(g9);if(b)cE(b,[0]);console.error(d8+e);if(a.js_error)throw a.js_error}}else +throw a}function +tf(){var +c=n.process;if(c&&c.on)c.on("uncaughtException",function(a,b){h2(a);c.exit(2)});else if(n.addEventListener)n.addEventListener("error",function(a){if(a.error)h2(a.error)})}tf();function +h(a,b){return(a.l>=0?a.l:a.l=a.length)==1?a(b):aI(a,[b])}function +i(a,b,c){return(a.l>=0?a.l:a.l=a.length)==2?a(b,c):aI(a,[b,c])}function +bA(a,b,c,d){return(a.l>=0?a.l:a.l=a.length)==3?a(b,c,d):aI(a,[b,c,d])}function +dP(a,b,c,d,e,f){return(a.l>=0?a.l:a.l=a.length)==5?a(b,c,d,e,f):aI(a,[b,c,d,e,f])}function +sh(a,b,c,d,e,f,g,h){return(a.l>=0?a.l:a.l=a.length)==7?a(b,c,d,e,f,g,h):aI(a,[b,c,d,e,f,g,h])}var +ts=undefined;sz();var +cU=[c,hN,-1],eB=[c,g3,-2],bR=[c,eb,-3],ey=[c,gI,-4],T=[c,gL,-7],ez=[c,hI,-8],eA=[c,hh,-9],f=[c,hp,-11],eC=[c,hB,-12],sg=[4,0,0,0,[12,45,[4,0,0,0,0]]],dc=[0,[11,'File "',[2,0,[11,'", line ',[4,0,0,0,[11,hK,[4,0,0,0,[12,45,[4,0,0,0,[11,hG,[2,0,0]]]]]]]]]],'File "%s", line %d, characters %d-%d: %s'],gg=[0,0];ac(11,eC,hB);ac(10,f,hp);ac(9,[c,hu,-10],hu);ac(8,eA,hh);ac(7,ez,hI);ac(6,T,gL);ac(5,[c,g0,-6],g0);ac(4,[c,ha,-5],ha);ac(3,ey,gI);ac(2,bR,eb);ac(1,eB,g3);ac(0,cU,hN);var +iv="output_substring",ir=aE,io="true",ip="false",iz="CamlinternalLazy.Undefined",iE="option is None",iH="\\\\",iI="\\'",iJ="\\b",iK="\\t",iL="\\n",iM="\\r",iT="List.init",iQ="hd",i3="String.blit / Bytes.blit_string",i2="Bytes.blit",i1="String.sub / Bytes.sub",je="String.contains_from / Bytes.contains_from",ja=e,i9="String.concat",jn="Array.iter2: arrays must have the same length",jl="Array.blit",jj="Array.sub",jx=[0,"set.ml",570,18],jt=cw,ju=cw,jv=cw,jw=cw,jE="Map.remove_min_elt",jA=cA,jB=cA,jC=cA,jD=cA,jH="Stdlib.Queue.Empty",jR="Buffer.add_substring/add_subbytes",jO="Buffer.add: cannot grow buffer",jN=[0,gx,93,2],jM=[0,gx,94,2],j2="%c",j3="%s",j4=gP,j5=gG,j6=hP,j7=gJ,j8="%f",j9="%B",j_="%{",j$="%}",ka="%(",kb="%)",kc="%a",kd="%t",ke="%?",kf="%r",kg="%_r",kh=[0,B,850,23],ks=[0,B,814,21],kk=[0,B,815,21],kt=[0,B,818,21],kl=[0,B,819,21],ku=[0,B,822,19],km=[0,B,823,19],kv=[0,B,826,22],kn=[0,B,827,22],kw=[0,B,831,30],ko=[0,B,832,30],kq=[0,B,836,26],ki=[0,B,837,26],kr=[0,B,846,28],kj=[0,B,847,28],kp=[0,B,851,23],lI=[0,B,1558,4],lJ="Printf: bad conversion %[",lK=[0,B,1626,39],lL=[0,B,1649,31],lM=[0,B,1650,31],lN="Printf: bad conversion %_",lO=gZ,lP=hs,lQ=gZ,lR=hs,lD=dW,lB="neg_infinity",lC=g7,lA=aE,lv=[0,gz],lj="%+nd",lk="% nd",lm="%+ni",ln="% ni",lo="%nx",lp="%#nx",lq="%nX",lr="%#nX",ls="%no",lt="%#no",li="%nd",ll=hP,lu="%nu",k7="%+ld",k8="% ld",k_="%+li",k$="% li",la="%lx",lb="%#lx",lc="%lX",ld="%#lX",le="%lo",lf="%#lo",k6="%ld",k9=gG,lg="%lu",kT="%+Ld",kU="% Ld",kW="%+Li",kX="% Li",kY="%Lx",kZ="%#Lx",k0="%LX",k1="%#LX",k2="%Lo",k3="%#Lo",kS="%Ld",kV=gJ,k4="%Lu",kF="%+d",kG="% d",kI="%+i",kJ="% i",kK="%x",kL="%#x",kM="%X",kN="%#X",kO="%o",kP="%#o",kE=dR,kH=gP,kQ=hc,jU="@]",jV="@}",jW="@?",jX="@\n",jY="@.",jZ="@@",j0="@%",j1="@",kx="CamlinternalFormat.Type_mismatch",lX=e,lY=[0,[11,dX,[2,0,[2,0,0]]],", %s%s"],mu=[0,[11,d8,[2,0,[12,10,0]]],he],mv=[0,[11,"Fatal error in uncaught exception handler: exception ",[2,0,[12,10,0]]],"Fatal error in uncaught exception handler: exception %s\n"],mt="Fatal error: out of memory in uncaught exception handler",mq=[0,[11,d8,[2,0,[12,10,0]]],he],mk=[0,[2,0,[12,10,0]],"%s\n"],ml=[0,[11,gY,0],gY],mb="Raised at",mc="Re-raised at",md="Raised by primitive operation at",me="Called from",mf=" (inlined)",mh=e,mg=[0,[2,0,[12,32,[2,0,[11,' in file "',[2,0,[12,34,[2,0,[11,", line ",[4,0,0,0,[11,hK,sg]]]]]]]]]],'%s %s in file "%s"%s, line %d, characters %d-%d'],mi=[0,[2,0,[11," unknown location",0]],"%s unknown location"],l6="Out of memory",l7="Stack overflow",l8="Pattern matching failed",l9="Assertion failed",l_="Undefined recursive module",l0=[0,[12,40,[2,0,[2,0,[12,41,0]]]],"(%s%s)"],l1=e,l2=e,l3=[0,[12,40,[2,0,[12,41,0]]],"(%s)"],lW=[0,[4,0,0,0,0],dR],lU=[0,[3,0,0],"%S"],lV=ht,mn=[0,e,"(Cannot print locations:\n bytecode executable program file not found)","(Cannot print locations:\n bytecode executable program file appears to be corrupt)","(Cannot print locations:\n bytecode executable program file has wrong magic number)","(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"],mz="Fun.Finally_raised: ",mx="Stdlib.Fun.Finally_raised",mD="x",mN="Hashtbl: unsupported hash table format",mI=e,nt=[3,0,3],nu=aE,nn=hv,no="<\/",np=e,nj=hv,nk="<",nl=e,nh="\n",m8=[0,e],m1=e,m2=e,m3=e,m4=e,mX=[0,e,0,e],mT="Stdlib.Format.String_tag",nA="Jsoo_runtime.Error.Exn",nB=d6,nF=[0,b,157,10],nH=[0,b,179,10],nJ=[0,b,191,10],nM=[0,b,hO,17],nV=[0,b,367,16],nW=[0,b,368,18],nX=[0,b,372,15],nY=[0,b,377,15],nZ=[0,b,hy,15],n0=[0,b,386,10],n1=[0,b,362,16],n2=[0,b,517,12],n3=[0,b,459,14],oc=[0,b,686,27],ob=[0,b,651,27],n7=[0,b,560,16],n4=[0,b,550,23],n5=[0,b,544,14],nU=[0,b,334,9],nQ=[0,b,309,9],nP=[0,b,305,9],nO=[0,[11,"Lwd: unsafe mutation (variable invalidated during evaluation) at\n",[15,0]],"Lwd: unsafe mutation (variable invalidated during evaluation) at\n%a"],nL=[0,b,gT,14],nI=[0,b,186,14],nG=[0,b,169,14],nE=[0,b,152,14],n8="Lwd.Release_failure",oi=[0,a,64,12],ov=[0,a,205,18],ou=[0,a,hO,9],ox=[0,a,224,18],ow=[0,a,237,9],oy=[0,a,240,21],oz=[0,a,at,21],oA=[0,a,260,21],oC=[0,a,296,14],o2=[0,a,553,18],o3=[0,a,557,12],o4=[0,a,546,14],o1=[0,a,538,21],oZ=[0,a,531,14],oX=[0,a,523,14],oV=[0,a,492,29],oU=[0,a,499,29],oS=[0,a,462,21],oN=[0,a,420,10],oO=[0,a,423,15],oP=[0,a,435,10],oQ=[0,a,457,2],oI=[0,a,371,24],oJ=[0,a,391,16],oK=[0,a,394,2],oF=[0,a,315,18],oE=[0,a,317,9],or=[0,a,193,4],oq=[0,a,gT,21],oo=[0,a,gF,4],op=[0,a,177,14],om=[0,a,113,14],ok=[0,a,82,21],og=[0,a,32,14],pv=[0,M,571,12],pg=[0,M,321,37],ph=[0,M,322,37],pj=[0,M,346,10],pk=[0,M,357,42],pi=[0,M,337,37],pm=[0,M,375,10],pn=[0,M,hy,42],pl=[0,M,338,37],pq=[0,M,425,16],pt=[0,M,513,50],pr=[0,M,480,6],pp=[0,M,395,14],o_=[0,M,gF,57],o$=[0,M,182,57],pa=[0,M,238,11],o5=hm,o6=hm,qf="debug",p7="scrollTop",qk="isSecureContext",qy=[0,gW,233,16],qw=[0,gW,201,16],qr=[0,0,0],qp=[0,0,0],qE=dX,qQ="CCFQueue.Empty",qR=[0,0],q0="content-box",q1="border-box",q2="device-pixel-content-box",rb="not implemented",q_=[0,[8,[0,0,0],0,0,[11,hC,0]],"%fpx"],q$=[0,[8,[0,0,0],0,0,[11,hd,0]],"%frem"],ra=[0,[8,[0,0,0],0,0,[11,g5,0]],"%fem"],q7=hC,q8=hd,q9=g5,re="Common.Utils.Forward_ref.Not_set",rg="Common.Utils.Forward_ref.Already_set",rk=e,rj=[0,[12,91,[2,0,[11,"] ",[2,0,0]]]],"[%s] %s"],rs="TODO not implemented",rx=[0,80,[0,"lwdui-controlled-scroll-wrapper"]],ry=[0,80,"lwdui-controlled-scroll-controls"],rz="Show playing",rK=[0,[11,hz,[2,0,0]],"height: %s"],rI=aa,rE=[0,aa],rF="grid-template-columns",rG=[0,[2,0,[11,hG,[2,0,[12,59,0]]]],"%s: %s;"],rL=[1,4.],rT=[0,80,gC],rR="Row height",rS="Visible height:",rP=[0,[11,"height: calc(",[2,0,[11," * ",[4,3,0,0,[11,");",0]]]]],"height: calc(%s * %i);"],rQ=[0,[11,hz,[2,0,[11," !important;",0]]],"height: %s !important;"],rU=[0,80,[0,"lwdui-lazy-table-content"]],rV=[0,80,[0,"lwdui-lazy-table-content-wrapper"]],rW=[0,"lwdui-lazy-table",0],rM="virtual table",r0="square",r1="1fr",r2=hg,r4=gV,r5="5em",r6=hg,r7=[2,5.],r_=[0,80,[0,"table"]],sa="options",sc=[0,80,[0,"flex"]];function +u(a){if(typeof +a==="number")return 0;switch(a[0]){case +0:return[0,u(a[1])];case +1:return[1,u(a[1])];case +2:return[2,u(a[1])];case +3:return[3,u(a[1])];case +4:return[4,u(a[1])];case +5:return[5,u(a[1])];case +6:return[6,u(a[1])];case +7:return[7,u(a[1])];case +8:var +c=a[1];return[8,c,u(a[2])];case +9:var +b=a[1];return[9,b,b,u(a[3])];case +10:return[10,u(a[1])];case +11:return[11,u(a[1])];case +12:return[12,u(a[1])];case +13:return[13,u(a[1])];default:return[14,u(a[1])]}}function +L(a,b){if(typeof +a==="number")return b;switch(a[0]){case +0:return[0,L(a[1],b)];case +1:return[1,L(a[1],b)];case +2:return[2,L(a[1],b)];case +3:return[3,L(a[1],b)];case +4:return[4,L(a[1],b)];case +5:return[5,L(a[1],b)];case +6:return[6,L(a[1],b)];case +7:return[7,L(a[1],b)];case +8:var +c=a[1];return[8,c,L(a[2],b)];case +9:var +d=a[2],e=a[1];return[9,e,d,L(a[3],b)];case +10:return[10,L(a[1],b)];case +11:return[11,L(a[1],b)];case +12:return[12,L(a[1],b)];case +13:return[13,L(a[1],b)];default:return[14,L(a[1],b)]}}function +s(a,b){if(typeof +a==="number")return b;switch(a[0]){case +0:return[0,s(a[1],b)];case +1:return[1,s(a[1],b)];case +2:var +c=a[1];return[2,c,s(a[2],b)];case +3:var +d=a[1];return[3,d,s(a[2],b)];case +4:var +e=a[3],f=a[2],g=a[1];return[4,g,f,e,s(a[4],b)];case +5:var +h=a[3],i=a[2],j=a[1];return[5,j,i,h,s(a[4],b)];case +6:var +k=a[3],l=a[2],m=a[1];return[6,m,l,k,s(a[4],b)];case +7:var +n=a[3],o=a[2],p=a[1];return[7,p,o,n,s(a[4],b)];case +8:var +q=a[3],r=a[2],t=a[1];return[8,t,r,q,s(a[4],b)];case +9:var +u=a[1];return[9,u,s(a[2],b)];case +10:return[10,s(a[1],b)];case +11:var +v=a[1];return[11,v,s(a[2],b)];case +12:var +w=a[1];return[12,w,s(a[2],b)];case +13:var +x=a[2],y=a[1];return[13,y,x,s(a[3],b)];case +14:var +z=a[2],A=a[1];return[14,A,z,s(a[3],b)];case +15:return[15,s(a[1],b)];case +16:return[16,s(a[1],b)];case +17:var +B=a[1];return[17,B,s(a[2],b)];case +18:var +C=a[1];return[18,C,s(a[2],b)];case +19:return[19,s(a[1],b)];case +20:var +D=a[2],E=a[1];return[20,E,D,s(a[3],b)];case +21:var +F=a[1];return[21,F,s(a[2],b)];case +22:return[22,s(a[1],b)];case +23:var +G=a[1];return[23,G,s(a[2],b)];default:var +H=a[2],I=a[1];return[24,I,H,s(a[3],b)]}}function +cS(a){return[0,a]}function +bP(a){return a[1]}function +cT(a,b,c){return a[1]===b?(a[1]=c,1):0}function +bQ(a){throw g([0,bR,a],1)}function +t(a){throw g([0,ey,a],1)}function +bS(a){return 0<=a?a:-a|0}function +ah(a,b){return a+b}function +eD(a){return e+a}function +iq(b){var +e=l(b);return function(a){var +c=a;for(;;){if(e<=c)return ah(b,ir);var +d=I(b,c);a:{if(48<=d){if(58>d)break a}else if(45===d)break a;return b}c=c+1|0}}(0)}function +eE(a,b){if(!a)return b;var +c=a[1];return[0,c,eE(a[2],b)]}s6(0);var +it=h9(1),ad=h9(2);function +bl(a,b){ep(a,b,0,l(b));return}function +eF(a){bl(ad,a);h_(ad,10);return aY(ad)}var +cV=cS(function(a){return function(a){var +b=a;for(;;){if(!b)return 0;var +d=b[2],e=b[1];try{aY(e)}catch(f){var +c=Y(f);if(c[1]!==eB)throw g(c,0)}b=d}}(s7(0))});function +cW(a){return h(bP(cV),0)}eu(g9,cW);function +ik(a){return a^-1}var +il=hA;function +im(a){return a?io:ip}function +is(a){return iq(eh("%.12g",a))}function +iu(a,b,c,d){if(0<=c&&0<=d&&(l(b)-d|0)>=c)return ep(a,b,c,d);return t(iv)}function +iw(c){for(;;){var +d=cS(1),a=bP(cV);let +e=d,f=a;var +b=1-cT(cV,a,function(a){if(cT(e,1,0))h(c,0);return h(f,0)});if(!b)return b}}function +bT(a){return aY(a)}function +ix(a,b){h_(a,b);return}var +cX=tj(0),bm=(4*cX|0)-1|0;function +iy(a){return 1-(typeof +a==="number"?1:0)}var +iA=[c,iz,am(0)];function +iB(a){throw g(iA,1)}function +cY(a){var +d=a[1];a[1]=iB;try{var +c=h(d,0);ta(a,c);return c}catch(f){var +b=Y(f);a[1]=function(a){throw g(b,0)};throw g(b,0)}}function +iC(a){var +b=aL(a);if(b!==at&&b!==bf&&b!==hn)return a;return sY(a)}function +eG(a){return a?1:0}function +iD(a){return a?a[1]:t(iE)}function +iF(a,b){return 0===b[0]?[0,h(a,b[1])]:b}function +iG(a){a:{if(40<=a){if(92===a)return iH;if(d$>a)break a}else{if(32<=a){if(39<=a)return iI;break a}if(14>a)switch(a){case +8:return iJ;case +9:return iK;case +10:return iL;case +13:return iM}}var +b=C(4);v(b,0,92);v(b,1,48+(a/d0|0)|0);v(b,2,48+((a/10|0)%10|0)|0);v(b,3,48+(a%10|0)|0);return cP(b)}var +c=C(1);v(c,0,a);return cP(c)}function +iN(a){return 25>>0?a:a+hH|0}function +iO(a,b){var +d=a,c=b;for(;;){if(!c)return d;d=d+1|0;c=c[2]}}function +cZ(a){return iO(0,a)}function +aZ(a,b){var +c=a,d=b;for(;;){if(!c)return d;var +e=[0,c[1],d];c=c[2];d=e}}function +aN(a){return aZ(a,0)}function +eH(a,b,c){if(b<=a)return 0;var +d=h(c,a);return[0,d,eH(a+1|0,b,c)]}function +iP(a){return a?a[1]:bQ(iQ)}function +iR(a,b,c,d){var +f=a,e=b;for(;;){if(c<=e)return f;f=[0,h(d,e),f];e=e+1|0}}function +c0(a){if(!a)return 0;var +b=a[1];return eE(b,c0(a[2]))}function +bU(a,b){if(!b)return 0;var +c=b[2],d=h(a,b[1]);return[0,d,bU(a,c)]}function +aO(a,b){var +c=b;for(;;){if(!c)return;var +d=c[2];h(a,c[1]);c=d}}function +c1(a,b,c){var +e=b,d=c;for(;;){if(!d)return e;var +f=d[2];e=i(a,e,d[1]);d=f}}function +iS(a,b){return 0<=a?50>1,s=p(r,b),D=s[1],t=p(a-r|0,s[2]),E=t[2];return[0,B(D,t[1],0),E]}function +p(a,b){if(2===a){if(b){var +j=b[2];if(j){var +k=j[1],g=b[1],B=j[2],q=i(d,g,k),C=0===q?[0,g,0]:0>1,s=h(r,b),D=s[1],t=h(a-r|0,s[2]),E=t[2];return[0,A(D,t[1],0),E]}var +a=cZ(b);return 2<=a?h(a,b)[1]:b}function +c2(a,b){return b<=a?a:b}function +eI(a){return e+a}function +iY(a,b){return h6(a,b)}function +iZ(a,b){return a<=b?a:b}function +aP(a,b){var +c=C(a);sw(c,0,a,b);return c}function +i0(a){var +b=af(a),c=C(b);ax(a,0,c,0,b);return c}function +eJ(a,b,c){if(0<=b&&0<=c&&(af(a)-c|0)>=b){var +d=C(c);ax(a,b,d,0,c);return d}return t(i1)}function +eK(a,b,c){return cP(eJ(a,b,c))}function +eL(a,b,c,d,e){if(0<=e&&0<=b&&(af(a)-e|0)>=b&&0<=d&&(af(c)-e|0)>=d){ax(a,b,c,d,e);return}return t(i2)}function +ap(a,b,c,d,e){if(0<=e&&0<=b&&(l(a)-e|0)>=b&&0<=d&&(af(c)-e|0)>=d){aH(a,b,c,d,e);return}return t(i3)}function +i5(a,b){var +d=af(b);if(0===d)return b;var +e=C(d),f=d-1|0,g=0;if(f>=0){var +c=g;for(;;){v(e,c,h(a,ee(b,c)));var +i=c+1|0;if(f===c)break;c=i}}return e}function +c3(a){return aX(a)}function +Z(a){return cP(a)}function +i4(a){var +b=[0,0],j=af(a)-1|0,l=0;if(j>=0){var +g=l;for(;;){var +e=ee(a,g);a:{b:{c:{if(32<=e){var +h=e-34|0;if(58>>0){if(93<=h)break c}else if(56>>0)break b;var +i=1;break a}if(11<=e){if(13===e)break b}else if(8<=e)break b}var +i=4;break a}var +i=2}b[1]=b[1]+i|0;var +o=g+1|0;if(j===g)break;g=o}}if(b[1]===af(a))return i0(a);var +c=C(b[1]);b[1]=0;var +k=af(a)-1|0,m=0;if(k>=0){var +f=m;for(;;){var +d=ee(a,f);a:{b:{c:{if(35<=d){if(92!==d){if(d$<=d)break c;break b}}else{if(32>d){if(14<=d)break c;switch(d){case +8:v(c,b[1],92);b[1]++;v(c,b[1],98);break a;case +9:v(c,b[1],92);b[1]++;v(c,b[1],116);break a;case +10:v(c,b[1],92);b[1]++;v(c,b[1],110);break a;case +13:v(c,b[1],92);b[1]++;v(c,b[1],114);break a;default:break c}}if(34>d)break b}v(c,b[1],92);b[1]++;v(c,b[1],d);break a}v(c,b[1],92);b[1]++;v(c,b[1],48+(d/d0|0)|0);b[1]++;v(c,b[1],48+((d/10|0)%10|0)|0);b[1]++;v(c,b[1],48+(d%10|0)|0);break a}v(c,b[1],d)}b[1]++;var +n=f+1|0;if(k===f)break;f=n}}return c}function +i6(a){return i5(iN,a)}function +eM(a,b){return Z(aP(a,b))}function +i8(a,b){return b<=a?a:t(i9)}function +i_(a,b,c){var +e=a,d=c;for(;;){if(!d)return e;var +f=d[1];if(!d[2])return l(f)+e|0;var +g=d[2];e=i8((l(f)+b|0)+e|0,e);d=g}}function +i$(a,b,c,d,e){var +h=b,g=e;for(;;){if(!g)return a;var +f=g[1];if(!g[2]){aH(f,0,a,h,l(f));return a}var +i=g[2];aH(f,0,a,h,l(f));aH(c,0,a,h+l(f)|0,d);h=(h+l(f)|0)+d|0;g=i}}function +eN(a,b){if(!b)return ja;var +c=l(a);return Z(i$(C(i_(0,c,b)),0,a,c,b))}function +jc(a,b,c,d){var +e=c;for(;;){if(b<=e)throw g(T,1);if(X(a,e)===d)return e;e=e+1|0}}function +jd(a,b,c){var +d=l(a);if(0<=b&&d>=b)try{jc(a,d,b,c);var +f=1;return f}catch(f){var +e=Y(f);if(e===T)return 0;throw g(e,0)}return t(je)}function +i7(a,b,c){return Z(eJ(c3(a),b,c))}function +jb(a){return function(a,b,c){var +d=c;for(;;){if(b<=d)return a;var +e=X(a,d)+hH|0;a:{if(59>>0){if(33>>0)break a}else if(2===e)break a;d=d+1|0;continue}return Z(i4(c3(a)))}}(a,l(a),0)}function +jf(a,b){return jd(a,0,b)}function +jg(a){return Z(i6(c3(a)))}function +jh(a,b){return th(a,b)}function +jq(a,b){var +d=a,c=b;for(;;){if(!c)return d;d=d+1|0;c=c[2]}}function +eO(a){if(!a)return[0];var +b=a[2],c=a[1],e=ao(jq(0,a),c);return function(a,b){var +d=a,c=b;for(;;){if(!c)return e;var +f=c[2];e[1+d]=c[1];d=d+1|0;c=f}}(1,b)}function +ji(a,b,c){if(0<=b&&0<=c&&(a.length-1-c|0)>=b)return sm(a,b,c);return t(jj)}function +jk(a,b,c,d,e){if(0<=e&&0<=b&&(a.length-1-e|0)>=b&&0<=d&&(c.length-1-e|0)>=d){sl(a,b,c,d,e);return}return t(jl)}function +jm(a,b,c){if(b.length-1!==c.length-1)return t(jn);var +e=b.length-2|0,f=0;if(e>=0){var +d=f;for(;;){i(a,b[1+d],c[1+d]);var +g=d+1|0;if(e===d)break;d=g}}return 0}function +jo(a,b){var +d=b.length-1;if(0===d)return[0];var +e=ao(d,h(a,b[1])),f=d-1|0,g=1;if(f>=1){var +c=g;for(;;){e[1+c]=h(a,b[1+c]);var +i=c+1|0;if(f===c)break;c=i}}return e}function +jp(e){return function(a,b){var +c=a,d=b;for(;;){if(0>c)return d;var +f=[0,e[1+c],d];c=c-1|0;d=f}}(e.length-2|0,0)}function +jr(a,b,c){var +e=[0,c],f=b.length-2|0;if(f>=0){var +d=f;for(;;){e[1]=i(a,b[1+d],e[1]);var +g=d-1|0;if(0===d)break;d=g}}return e[1]}function +js(k){function +j(a){return a?a[4]:0}function +d(a,b,c){var +d=a?a[4]:0,e=c?c[4]:0,f=e<=d?d+1|0:e+1|0;return[0,a,b,c,f]}function +l(a,b,c){var +g=a?a[4]:0,h=c?c[4]:0;if((h+2|0)=h){var +w=h<=g?g+1|0:h+1|0;return[0,a,b,c,w]}if(!c)return t(jw);var +k=c[3],m=c[2],f=c[1],r=j(f);if(r<=j(k))return d(d(a,b,f),m,k);if(!f)return t(jv);var +s=f[2],u=f[1],v=d(f[3],m,k);return d(d(a,b,u),s,v)}function +c(a,b){if(!b)return[0,0,a,0,1];var +d=b[3],e=b[2],f=b[1],g=i(k[1],a,e);if(0===g)return b;if(0<=g){var +h=c(a,d);return d===h?b:l(f,e,h)}var +j=c(a,f);return f===j?b:l(j,e,d)}function +b(a){return[0,0,a,0,1]}var +m=0;function +e(a,b){var +c=b;for(;;){if(!c)return;var +d=c[3],f=c[2];e(a,c[1]);h(a,f);c=d}}function +n(a,b){var +d=a,c=b;for(;;){if(!c)return d;var +e=c[2],f=c[1];d=[0,e,n(d,c[3])];c=f}}function +o(a,b,c){var +d=c;for(;;){if(!d)return;var +e=d[3],f=d[1];d=h(b,d[2])?e:f}}function +p(a){function +c(a,b){if(3>=a>>>0)switch(a){case +0:return[0,0,b];case +1:if(b)return[0,[0,0,b[1],0,1],b[2]];break;case +2:if(b){var +h=b[2];if(h)return[0,[0,[0,0,b[1],0,1],h[1],0,2],h[2]]}break;default:if(b){var +i=b[2];if(i){var +j=i[2];if(j)return[0,[0,[0,0,b[1],0,1],i[1],[0,0,j[1],0,1],2],j[2]]}}}var +k=a/2|0,l=c(k,b),e=l[2],n=l[1];if(!e)throw g([0,f,jx],1);var +o=e[1],m=c((a-k|0)-1|0,e[2]),p=m[2];return[0,d(n,o,m[1]),p]}return c(cZ(a),a)[1]}return[0,,,,c,,,,,,,,,,,,,m,,,,,,,,,,,,,,e,,,,,,,,function(a){return n(0,a)},,,,,,,,,,,function(a,b){var +c=b;for(;;){if(!c)return;var +d=c[2],e=c[3],f=c[1];if(h(a,d))return o(d,a,e);c=f}},,,,,,,function(a){if(!a)return m;var +f=a[2],d=a[1];if(!f)return b(d);var +g=f[2],e=f[1];if(!g)return c(e,b(d));var +h=g[2],i=g[1];if(!h)return c(i,c(e,b(d)));var +j=h[2],l=h[1];if(!j)return c(l,c(i,c(e,b(d))));if(j[2])return p(iX(k[1],a));var +n=j[1];return c(n,c(l,c(i,c(e,b(d)))))}]}function +jy(a){var +b=js(a);return[0,b[17],,,b[4],,,,,,,,,,b[31],,,,,,,,,b[39],,,,,,,,,,,,,b[50],b[57]]}function +jz(f){function +h(a){return a?a[5]:0}function +e(a,b,c,d){var +e=h(a),f=h(d),g=f<=e?e+1|0:f+1|0;return[0,a,b,c,d,g]}function +d(a,b,c,d){var +i=a?a[5]:0,j=d?d[5]:0;if((j+2|0)=j){var +B=j<=i?i+1|0:j+1|0;return[0,a,b,c,d,B]}if(!d)return t(jD);var +l=d[4],o=d[3],p=d[2],g=d[1],w=h(g);if(w<=h(l))return e(e(a,b,c,g),p,o,l);if(!g)return t(jC);var +x=g[3],y=g[2],z=g[1],A=e(g[4],p,o,l);return e(e(a,b,c,z),y,x,A)}function +j(a,b,c){if(!c)return[0,0,a,b,0,1];var +e=c[4],h=c[3],k=c[2],g=c[1],o=c[5],l=i(f[1],a,k);if(0===l)return h===b?c:[0,g,a,b,e,o];if(0<=l){var +m=j(a,b,e);return e===m?c:d(g,k,h,m)}var +n=j(a,b,g);return g===n?c:d(n,k,h,e)}function +l(a){var +b=a;for(;;){if(!b)throw g(T,1);var +c=b[1];if(!c)return[0,b[2],b[3]];b=c}}function +c(a){if(!a)return t(jE);var +b=a[1];if(!b)return a[4];var +e=a[4],f=a[3],g=a[2];return d(c(b),g,f,e)}function +n(a,b){if(!a)return b;if(!b)return a;var +e=l(b),f=e[2],g=e[1];return d(a,g,f,c(b))}function +k(a,b){if(!b)return 0;var +c=b[4],h=b[3],g=b[2],e=b[1],j=i(f[1],a,g);if(0===j)return n(e,c);if(0<=j){var +l=k(a,c);return c===l?b:d(e,g,h,l)}var +m=k(a,e);return e===m?b:d(m,g,h,c)}return[0,,,,,0,,j,function(a,b){var +c=b;for(;;){if(!c)throw g(T,1);var +e=c[4],h=c[3],j=c[1],d=i(f[1],a,c[2]);if(0===d)return h;var +k=0<=d?e:j;c=k}},,,,,,,,,function(a,b){var +c=b;for(;;){if(!c)return 0;var +e=c[4],g=c[3],h=c[1],d=i(f[1],a,c[2]);if(0===d)return[0,g];var +j=0<=d?e:h;c=j}},,,,,,,k]}function +jF(a){var +b=jz(a);return[0,b[5],,,b[7],,,b[24],,,,,,,,,,,,,,,,,,,,,b[8],b[17]]}function +bn(a){return[0,0,0]}function +bo(a){a[1]=0;a[2]=0;return}function +a0(a,b){b[1]=[0,a,b[1]];b[2]=b[2]+1|0;return 0}function +a1(a){var +b=a[1];if(!b)return 0;var +c=b[1];a[1]=b[2];a[2]=a[2]-1|0;return[0,c]}function +a2(a){var +b=a[1];return b?[0,b[1]]:0}function +jG(a,b){return aO(a,b[1])}var +jI=[c,jH,am(0)];function +c4(a){return[0,0,0,0]}function +c5(a){a[1]=0;a[2]=0;a[3]=0;return}function +c6(a,b){var +c=[0,a,0],d=b[3];return d?(b[1]=b[1]+1|0,d[2]=c,b[3]=c,0):(b[1]=1,b[2]=c,b[3]=c,0)}function +eP(a){var +b=a[2];if(!b)throw g(jI,1);var +c=b[1];if(b[2]){var +d=b[2];a[1]=a[1]-1|0;a[2]=d;return c}c5(a);return c}function +c7(a){return 0===a[1]?1:0}function +jJ(a){var +b=a[2];return b?[0,b[1]]:0}function +jK(a){var +b=a[2];if(!b)return 0;var +c=b[1];if(b[2]){var +d=b[2];a[1]=a[1]-1|0;a[2]=d;return[0,c]}c5(a);return[0,c]}function +eQ(a){var +b=1<=a?a:1,c=bm=(d+b|0))break;c[1]=2*c[1]|0}if(bma[3])throw g([0,f,jN],1);if((d+b|0)<=a[3])return;throw g([0,f,jM],1)}function +bp(a,b){var +c=l(b),d=a[2]+c|0;if(a[3]e){if(32!==e){if(43>e)break a;switch(e-43|0){case +5:c:if(c<(d+2|0)&&1=(d+1|0))break a;var +f=aP(d+1|0,48);bh(f,0,e);ap(b,1,f,(d-c|0)+2|0,c-1|0);return Z(f)}if(71<=e){if(5>>0)break a}else if(65>e)break a}if(ca)return b;var +h=[0,0],i=l(b)-1|0,o=0;if(i>=0){var +d=o;for(;;){if(9>=X(b,d)+hf>>>0)h[1]++;var +r=d+1|0;if(i===d)break;d=r}}var +j=h[1],k=C(l(b)+((j-1|0)/3|0)|0),m=[0,0];function +e(a){bh(k,m[1],a);m[1]++;return}var +f=[0,((j-1|0)%3|0)+1|0],n=l(b)-1|0,p=0;if(n>=0){var +c=p;for(;;){var +g=X(b,c);if(9>>0)e(g);else{if(0===f[1]){e(95);f[1]=3}f[1]--;e(g)}var +q=c+1|0;if(n===c)break;c=q}}return Z(k)}function +lw(a,b){return bW(a,cH(kD(a),b))}function +lx(a,b){return bW(a,cH(k5(a),b))}function +ly(a,b){return bW(a,cH(lh(a),b))}function +lz(a,b){return bW(a,sL(kR(a),b))}function +aq(d,b,c){function +a(a){switch(d[1]){case +0:var +e=45;break;case +1:var +e=43;break;default:var +e=32}return sH(c,b,e)}function +e(a){var +b=ss(c);return 3===b?c<0.?lB:lC:4<=b?lD:a}function +f(b){var +e=l(b);return function(a){var +c=a;for(;;){if(c===e)return 0;var +d=I(b,c)-46|0;a:{if(23>>0){if(55===d)break a}else if(21>>0)break a;c=c+1|0;continue}return 1}}(0)?b:ah(b,lA)}switch(d[2]){case +5:return e(f(eh(eV(d,b),c)));case +6:return a(0);case +7:return jg(a(0));case +8:return e(a(0));default:return eh(eV(d,b),c)}}function +lE(a){var +b=iG(a),c=l(b),d=aP(c+2|0,39);aH(b,0,d,1,c);return Z(d)}function +lF(a){var +b=eR(16);c_(b,a);return eT(b)}function +by(a,b,c,d){var +k=b,j=c,e=d;for(;;){if(typeof +e==="number")return h(k,j);switch(e[0]){case +0:var +u=e[1];return function(a){return o(k,[5,j,a],u)};case +1:var +v=e[1];return function(a){return o(k,[4,j,lE(a)],v)};case +2:return c$(k,j,e[2],e[1],function(a){return a});case +3:return c$(k,j,e[2],e[1],kC);case +4:return bX(k,j,e[4],e[2],e[3],lw,e[1]);case +5:return bX(k,j,e[4],e[2],e[3],lx,e[1]);case +6:return bX(k,j,e[4],e[2],e[3],ly,e[1]);case +7:return bX(k,j,e[4],e[2],e[3],lz,e[1]);case +8:return lG(k,j,e[4],e[2],e[3],e[1]);case +9:return c$(k,j,e[2],e[1],im);case +10:j=[7,j];e=e[1];break;case +11:j=[2,j,e[1]];e=e[2];break;case +12:j=[3,j,e[1]];e=e[2];break;case +13:var +w=e[3],x=lF(e[2]);return function(a){return o(k,[4,j,x],w)};case +14:var +y=e[3],z=e[2];return function(a){return o(k,j,s(kB(a[1],z),y))};case +15:var +A=e[1];return function(c,b){return o(k,[6,j,function(a){return i(c,a,b)}],A)};case +16:var +B=e[1];return function(a){return o(k,[6,j,a],B)};case +17:j=[0,j,e[1]];e=e[2];break;case +18:var +l=e[1];if(0===l[0]){let +b=j,c=k,d=e[2];k=function(a){return o(c,[1,b,[0,a]],d)};j=0;e=l[1][1]}else{let +b=j,c=k,d=e[2];k=function(a){return o(c,[1,b,[1,a]],d)};j=0;e=l[1][1]}break;case +19:throw g([0,f,lI],1);case +20:var +C=e[3],D=[8,j,lJ];return function(a){return o(k,D,C)};case +21:var +E=e[2];return function(a){return o(k,[4,j,cH(hc,a)],E)};case +22:var +F=e[1];return function(a){return o(k,[5,j,a],F)};case +23:var +m=e[2],n=e[1];return a<50?gt(a+1|0,k,j,n,m):p(gt,[0,k,j,n,m]);default:var +q=e[3],r=e[1],t=h(e[2],0);return a<50?dL(a+1|0,k,j,q,r,t):p(dL,[0,k,j,q,r,t])}}}function +o(a,b,c){return aM(by(0,a,b,c))}function +gt(a,b,c,d,e){if(typeof +d==="number")switch(d){case +0:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +1:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +2:throw g([0,f,lK],1);default:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e])}switch(d[0]){case +0:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +1:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +2:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +3:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +4:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +5:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +6:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +7:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +8:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);case +9:var +h=d[2];return a<50?dM(a+1|0,b,c,h,e):p(dM,[0,b,c,h,e]);case +10:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e]);default:return a<50?q(a+1|0,b,c,e):p(q,[0,b,c,e])}}function +dM(a,h,c,d,e){if(typeof +d==="number")return a<50?q(a+1|0,h,c,e):p(q,[0,h,c,e]);switch(d[0]){case +0:var +b=d[1];return function(a){return U(h,c,b,e)};case +1:var +i=d[1];return function(a){return U(h,c,i,e)};case +2:var +j=d[1];return function(a){return U(h,c,j,e)};case +3:var +k=d[1];return function(a){return U(h,c,k,e)};case +4:var +l=d[1];return function(a){return U(h,c,l,e)};case +5:var +m=d[1];return function(a){return U(h,c,m,e)};case +6:var +n=d[1];return function(a){return U(h,c,n,e)};case +7:var +o=d[1];return function(a){return U(h,c,o,e)};case +8:var +r=d[2];return function(a){return U(h,c,r,e)};case +9:var +s=d[3],t=d[2],u=A(w(d[1]),t);return function(a){return U(h,c,L(u,s),e)};case +10:var +v=d[1];return function(a,b){return U(h,c,v,e)};case +11:var +x=d[1];return function(a){return U(h,c,x,e)};case +12:var +y=d[1];return function(a){return U(h,c,y,e)};case +13:throw g([0,f,lL],1);default:throw g([0,f,lM],1)}}function +U(a,b,c,d){return aM(dM(0,a,b,c,d))}function +q(a,b,c,d){var +e=[8,c,lN];return a<50?by(a+1|0,b,e,d):p(by,[0,b,e,d])}function +c$(g,f,c,d,e){if(typeof +d==="number")return function(a){return o(g,[4,f,h(e,a)],c)};if(0===d[0]){var +b=d[2],i=d[1];return function(a){return o(g,[4,f,Q(i,b,h(e,a))],c)}}var +j=d[1];return function(a,b){return o(g,[4,f,Q(j,a,h(e,b))],c)}}function +bX(k,j,h,d,e,f,g){if(typeof +d==="number"){if(typeof +e==="number")return e?function(a,b){return o(k,[4,j,a4(a,i(f,g,b))],h)}:function(a){return o(k,[4,j,i(f,g,a)],h)};var +b=e[1];return function(a){return o(k,[4,j,a4(b,i(f,g,a))],h)}}if(0===d[0]){var +c=d[2],l=d[1];if(typeof +e==="number")return e?function(a,b){return o(k,[4,j,Q(l,c,a4(a,i(f,g,b)))],h)}:function(a){return o(k,[4,j,Q(l,c,i(f,g,a))],h)};var +n=e[1];return function(a){return o(k,[4,j,Q(l,c,a4(n,i(f,g,a)))],h)}}var +m=d[1];if(typeof +e==="number")return e?function(a,b,c){return o(k,[4,j,Q(m,a,a4(b,i(f,g,c)))],h)}:function(a,b){return o(k,[4,j,Q(m,a,i(f,g,b))],h)};var +p=e[1];return function(a,b){return o(k,[4,j,Q(m,a,a4(p,i(f,g,b)))],h)}}function +lG(i,h,g,d,e,f){if(typeof +d==="number"){if(typeof +e==="number")return e?function(a,b){return o(i,[4,h,aq(f,a,b)],g)}:function(a){return o(i,[4,h,aq(f,c9(f),a)],g)};var +b=e[1];return function(a){return o(i,[4,h,aq(f,b,a)],g)}}if(0===d[0]){var +c=d[2],j=d[1];if(typeof +e==="number")return e?function(a,b){return o(i,[4,h,Q(j,c,aq(f,a,b))],g)}:function(a){return o(i,[4,h,Q(j,c,aq(f,c9(f),a))],g)};var +l=e[1];return function(a){return o(i,[4,h,Q(j,c,aq(f,l,a))],g)}}var +k=d[1];if(typeof +e==="number")return e?function(a,b,c){return o(i,[4,h,Q(k,a,aq(f,b,c))],g)}:function(a,b){return o(i,[4,h,Q(k,a,aq(f,c9(f),b))],g)};var +m=e[1];return function(a,b){return o(i,[4,h,Q(k,a,aq(f,m,b))],g)}}function +dL(a,b,c,d,e,f){if(e){var +i=e[1];return function(a){return lH(b,c,d,i,h(f,a))}}var +g=[4,c,f];return a<50?by(a+1|0,b,g,d):p(by,[0,b,g,d])}function +lH(a,b,c,d,e){return aM(dL(0,a,b,c,d,e))}function +ar(a,b){var +c=b;for(;;){if(typeof +c==="number")return;switch(c[0]){case +0:var +f=c[1],g=eU(c[2]);ar(a,f);return bl(a,g);case +1:var +d=c[2],e=c[1];if(0===d[0]){var +i=d[1];ar(a,e);bl(a,lO);c=i}else{var +j=d[1];ar(a,e);bl(a,lP);c=j}break;case +6:var +m=c[2];ar(a,c[1]);return h(m,a);case +7:ar(a,c[1]);return bT(a);case +8:var +n=c[2];ar(a,c[1]);return t(n);case +2:case +4:var +k=c[2];ar(a,c[1]);return bl(a,k);default:var +l=c[2];ar(a,c[1]);return ix(a,l)}}}function +aA(a,b){var +c=b;for(;;){if(typeof +c==="number")return;switch(c[0]){case +0:var +f=c[1],g=eU(c[2]);aA(a,f);return bp(a,g);case +1:var +d=c[2],e=c[1];if(0===d[0]){var +i=d[1];aA(a,e);bp(a,lQ);c=i}else{var +j=d[1];aA(a,e);bp(a,lR);c=j}break;case +6:var +m=c[2];aA(a,c[1]);return bp(a,h(m,0));case +7:c=c[1];break;case +8:var +n=c[2];aA(a,c[1]);return t(n);case +2:case +4:var +k=c[2];aA(a,c[1]);return bp(a,k);default:var +l=c[2];aA(a,c[1]);return jP(a,l)}}}function +lS(d,b,c){return o(function(a){ar(b,a);return h(d,b)},0,c[1])}function +bY(a,b){return lS(function(a){return 0},a,b)}function +da(a){return bY(ad,a)}function +lT(c,b){return o(function(a){var +b=eQ(64);aA(b,a);return h(c,jL(b))},0,b[1])}function +H(a){return lT(function(a){return a},a)}var +db=cS(0);function +dd(a,b){var +c=a[1+b];return iy(c)?aL(c)===cs?h(H(lU),c):aL(c)===hn?is(c):lV:h(H(lW),c)}function +eW(a,b){if(a.length-1<=b)return lX;var +c=eW(a,b+1|0),d=dd(a,b);return i(H(lY),d,c)}function +lZ(a){var +b=a.length-1;if(2>=b>>>0)switch(b){case +0:return l1;case +1:return l2;default:var +e=dd(a,1);return h(H(l3),e)}var +c=eW(a,2),d=dd(a,1);return i(H(l0),d,c)}function +l4(d){return function(a){var +b=a;for(;;){if(!b)return 0;var +e=b[2],f=b[1];a:{try{var +c=h(f,d)}catch(f){break a}if(c)return[0,c[1]]}b=e}}(bP(db))}function +l5(a){if(a===cU)return l6;if(a===eA)return l7;if(a[1]===ez){var +b=a[2],e=b[3],i=b[2],j=b[1];return dP(H(dc),j,i,e,e+5|0,l8)}if(a[1]===f){var +c=a[2],g=c[3],k=c[2],l=c[1];return dP(H(dc),l,k,g,g+6|0,l9)}if(a[1]===eC){var +d=a[2],h=d[3],m=d[2],n=d[1];return dP(H(dc),n,m,h,h+6|0,l_)}if(0!==aL(a))return a[1];var +o=a[1][1];return ah(o,lZ(a))}function +bZ(a){var +b=l4(a);return b?b[1]:l5(a)}function +l$(a){var +b=[0,st(a)];return b}function +ma(c,b){function +a(a){return a?0===c?mb:mc:0===c?md:me}if(0===b[0]){var +d=b[5],e=b[4],f=b[3],g=b[6]?mf:mh,i=b[2],j=b[7],k=a(b[1]);return[0,sh(H(mg),k,j,i,g,f,e,d)]}if(b[1])return 0;var +l=a(0);return[0,h(H(mi),l)]}function +mj(a,b){if(!b)return bY(a,ml);var +d=b[1],e=d.length-2|0,g=0;if(e>=0){var +c=g;for(;;){var +f=ma(c,j(d,c)[1+c]);if(f){var +i=f[1];h(bY(a,mk),i)}var +k=c+1|0;if(e===c)break;c=k}}return 0}function +b0(a,b){return mj(a,l$(b))}var +mo=mn.slice();function +mp(a,b){var +e=bZ(a);h(da(mq),e);b0(ad,b);var +c=s5(0);if(c<0){var +d=bS(c);eF(j(mo,d)[1+d])}return bT(ad)}var +mr=[0];function +eX(a){var +b=h3(0);return b}function +ms(a,b){try{var +d=b?mr:eX(0);try{cW(0)}catch(f){}try{var +f=mp(a,d),e=f}catch(f){var +i=Y(f),j=eX(0),k=bZ(a);h(da(mu),k);b0(ad,d);var +l=bZ(i);h(da(mv),l);b0(ad,j);var +e=bT(ad)}return e}catch(f){var +c=Y(f);if(c===cU)return eF(mt);throw g(c,0)}}eu(hx,function(a,b){try{var +c=ms(a,b);return c}catch(f){return 0}});function +mm(a){for(;;){var +b=bP(db),c=1-cT(db,b,[0,a,b]);if(!c)return c}}function +mw(a){return h3(a)}var +my=[c,mx,am(0)];mm(function(a){return a[1]===my?[0,ah(mz,bZ(a[2]))]:0});function +mA(a){return s3(a,0,l(a))}function +mB(a){return[0,ao(55,0),0]}function +mC(a,b){function +l(a,b){return mA(ah(a,eI(b)))}function +m(a){var +b=I(a,3)<<24,c=I(a,2)<<16,d=I(a,1)<<8;return((I(a,0)+d|0)+c|0)+b|0}var +g=0===b.length-1?[0,0]:b,h=g.length-1,c=0;for(;;){j(a[1],c)[1+c]=c;var +s=c+1|0;if(54===c)break;c=s}var +f=[0,mD],i=54+c2(55,h)|0,n=0;if(i>=0){var +d=n;for(;;){var +e=d%55|0,k=s_(d,h),o=j(g,k)[1+k];f[1]=l(f[1],o);var +p=m(f[1]),q=(j(a[1],e)[1+e]^p)&g2;j(a[1],e)[1+e]=q;var +r=d+1|0;if(i===d)break;d=r}}a[2]=0;return}function +mE(a){var +b=mB(0);mC(b,a);return b}function +mF(a){return mE(tl(0))}function +mG(a){a[2]=(a[2]+1|0)%55|0;var +b=a[2],c=j(a[1],b)[1+b],d=(a[2]+24|0)%55|0,e=(j(a[1],d)[1+d]+(c^(c>>>25|0)&31)|0)&g2,f=a[2];j(a[1],f)[1+f]=e;return e}function +mH(a){var +b=a.length-1<4?1:0,c=b||(a[4]<0?1:0);return c}try{var +sf=id(ho),e1=sf}catch(f){var +eY=Y(f);if(eY!==T)throw g(eY,0);try{var +se=id("CAMLRUNPARAM"),e0=se}catch(f){var +eZ=Y(f);if(eZ!==T)throw g(eZ,0);var +e0=mI}var +e1=e0}var +b1=[bf,function(a){return mF(0)}],mJ=jf(e1,82);function +mK(a,b){var +c=a;for(;;){if(b<=c)return c;if(cX<(c*2|0))return c;c=c*2|0}}function +mM(m,b,c,d){var +g=d.length-1,f=ao(g,0),i=c.length-2|0;function +n(a){var +c=a;for(;;){if(!c)return;var +i=c[1],l=c[2],n=c[3],g=b?c:[0,i,l,0],e=h(m,i),k=j(f,e)[1+e];if(k)k[3]=g;else +j(d,e)[1+e]=g;j(f,e)[1+e]=g;c=n}}var +o=0;if(i>=0){var +e=o;for(;;){n(j(c,e)[1+e]);var +r=e+1|0;if(i===e)break;e=r}}if(b){var +k=g-1|0,p=0;if(k>=0){var +a=p;for(;;){var +l=j(f,a)[1+a];if(l)l[3]=0;var +q=a+1|0;if(k===a)break;a=q}}}return}function +e2(a,b){var +c=b[2],d=(c.length-1)*2|0,e=d>>0)return;return e9(a,d)}function +mZ(a){var +b=jK(a[28]);if(!b)return;var +c=b[1],d=c[1];a[12]=a[12]-c[3]|0;var +e=aB(d);a[9]=a[9]+e|0;return}function +m0(a,b,c){if(typeof +c==="number")switch(c){case +0:var +j=a2(a[3]);if(!j)return;var +k=j[1][1],m=function(a,b){if(!b)return[0,a,0];var +c=b[1],d=b[2];return sZ(a,c)?[0,a,b]:[0,c,m(a,d)]};k[1]=m(a[6]-a[9]|0,k[1]);return;case +1:a1(a[2]);return;case +2:a1(a[3]);return;case +3:var +n=a2(a[2]);return n?e9(a,n[1][2]):b3(a);case +4:var +o=a[10]!==(a[6]-a[9]|0)?1:0;return o?mZ(a):o;default:var +p=a1(a[5]);if(p)return de(a,h(a[25],p[1]));return}switch(c[0]){case +0:return e8(a,b,c[1]);case +1:var +d=c[2],f=c[1],q=d[1],z=d[2],r=a2(a[2]);if(!r)return;var +s=r[1],e=s[2];switch(s[1]){case +0:return a5(a,f);case +1:return aQ(a,d,e);case +2:return aQ(a,d,e);case +3:return a[9]<(b+l(q)|0)?aQ(a,d,e):a5(a,f);case +4:return a[11]?a5(a,f):a[9]<(b+l(q)|0)?aQ(a,d,e):((a[6]-e|0)+z|0)=a[14]){a[13]=e7;e_(a);if(b)b3(a);return nd(a)}na(a,0)}}function +e$(a,b){nf(a,0);return h(a[18],0)}var +fa=eM(80,32);function +ng(a,b){return bA(a[17],nh,0,1)}function +fb(a,b){var +c=b;for(;;){var +d=0=c)return bA(a[17],fa,0,c);bA(a[17],fa,0,80);c=c-80|0}}function +ni(a){return a[1]===e6?ah(nk,ah(a[2],nj)):nl}function +nm(a){return a[1]===e6?ah(no,ah(a[2],nn)):np}function +nq(a){return 0}function +nr(a){return 0}function +ns(a,b,c,d,e){var +g=c4(0),h=[0,e4,nt,0];c6(h,g);var +f=bn(0);df(f);a0([0,1,h],f);var +i=78,j=bn(0),k=bn(0),l=bn(0);return[0,f,bn(0),l,k,j,i,10,68,i,0,1,1,1,1,il,nu,a,b,c,d,e,0,0,ni,nm,nq,nr,g]}function +fc(a,b){var +c=ns(a,b,function(a){return 0},function(a){return 0},function(a){return 0});c[19]=function(a){return ng(c,a)};c[20]=function(a){return fb(c,a)};c[21]=function(a){return fb(c,a)};return c}function +fd(d){return fc(function(a,b,c){return iu(d,a,b,c)},function(a){return bT(d)})}var +nv=dY,nw=function(a){return eQ(nv)}(0),nx=fd(it),ny=fd(ad);(function(d){return fc(function(a,b,c){return jQ(d,a,b,c)},function(a){return 0})}(nw));iw(function(a){e$(nx,0);return e$(ny,0)});function +nz(a,b){var +d=aL(b)===c?b:b[1];eu(a,d);return}nz(nB,[0,[c,nA,am(0)],[0]]);(function(a){throw a});function +_(a){return[0,a]}function +b5(a){return 0===a[0]?[0,a[1]]:0}var +a6=[0,function(a){return a}(0)];function +a7(a){return[1,0,0,0,a]}function +x(a,b){return 0===a[0]?[0,h(b,a[1])]:a7([0,a,b])}function +a8(a,b,c){if(0===a[0]){var +d=a[1];if(0===b[0])return[0,i(c,d,b[1])]}return a7([1,a,b,c])}function +fe(a,b,c){switch(c[0]){case +0:throw g([0,f,nE],1);case +1:c[3]=[0,b,a,c[3]];return;default:c[2]=[0,b,a,c[2]];return}}function +dh(a,b){if(!b)throw g([0,f,nF],1);if(b[2]===a)return[0,b[1],b[3]];var +c=dh(a,b[3]),d=c[1];b[3]=c[2];return[0,d,b]}function +bs(a,b){switch(b[0]){case +0:throw g([0,f,nG],1);case +1:var +c=dh(a,b[3]),e=c[1];b[3]=c[2];return e;default:var +d=dh(a,b[2]),h=d[1];b[2]=d[2];return h}}function +ff(a,b,c,d){var +e=d;for(;;){if(!e)throw g([0,f,nH],1);if(e[1]===b&&e[2]===a){e[1]=c;return}e=e[3]}}function +di(a,b,c,d){switch(d[0]){case +0:throw g([0,f,nI],1);case +1:return ff(a,b,c,d[3]);default:return ff(a,b,c,d[2])}}function +fg(a,b){var +c=b;for(;;){if(!c)throw g([0,f,nJ],1);if(c[2]===a)return c[1];c=c[3]}}function +nK(a,b){switch(b[0]){case +0:throw g([0,f,nL],1);case +1:return fg(a,b[3]);default:return fg(a,b[2])}}function +as(a,b,c,d){switch(d[0]){case +0:throw g([0,f,nM],1);case +1:var +j=d[1];if(typeof +j==="number"&&!j){if(!c)return;if(b[1])return;b[1]=1;return}var +k=d[4];if(7===k[0]){var +n=k[2];if(1===n[0]){var +o=n[1];if(typeof +o==="number"){if(!o&&c){if(b[1])return;b[1]=1;return}}else if(c)return}}var +l=d[1];a:{if(typeof +l==="number"&&l){var +e=1;break a}var +e=c}d[1]=0;var +m=d[2];return a<50?gu(a+1|0,b,e,m):p(gu,[0,b,e,m]);default:var +i=d[1];d[1]=0;if(typeof +i==="number"){if(!i)return;b[1]=2;return}var +q=i[1];if(c)b[1]=2;return h(d[3],q)}}function +aC(a,b,c){return aM(as(0,a,b,c))}function +gu(a,b,c,d){if(typeof +d==="number")return;switch(d[0]){case +0:var +f=d[1];return a<50?as(a+1|0,b,c,f):p(as,[0,b,c,f]);case +1:var +g=d[2];aC(b,c,d[1]);return a<50?as(a+1|0,b,c,g):p(as,[0,b,c,g]);case +2:var +h=d[3],l=d[2];aC(b,c,d[1]);aC(b,c,l);return a<50?as(a+1|0,b,c,h):p(as,[0,b,c,h]);case +3:var +i=d[4],m=d[3],n=d[2];aC(b,c,d[1]);aC(b,c,n);aC(b,c,m);return a<50?as(a+1|0,b,c,i):p(as,[0,b,c,i]);default:var +o=d[1];d[1]=0;var +k=o-1|0,q=0;if(k>=0){var +e=q;for(;;){aC(b,c,j(d[3],e)[1+e]);var +r=e+1|0;if(k===e)break;e=r}}return}}function +nN(a){return i(bY(ad,nO),b0,sA(20))}function +b6(a,b){var +c=[0,0];aC(c,a,b);var +d=2<=c[1]?1:0;return d?nN(0):d}function +dj(a){return a7([5,a])}function +b7(a){return a}function +b8(a,b){if(1===a[0]){var +c=a[4];if(5===c[0]){c[1]=b;return b6(0,a)}}throw g([0,f,nP],1)}function +fh(a){if(1===a[0]){var +b=a[4];if(5===b[0])return b[1]}throw g([0,f,nQ],1)}function +a9(a,b,c){var +k=a,h=b,d=c;for(;;)switch(d[0]){case +0:return k;case +1:var +e=d[2];if(typeof +e==="number")throw g([0,f,nV],1);switch(e[0]){case +0:if(e[1]!==h)throw g([0,f,nW],1);var +o=0;break;case +1:var +B=e[2],C=e[1];if(C===h)var +D=[0,B];else{if(B!==h)throw g([0,f,nX],1);var +D=[0,C]}var +o=D;break;case +2:var +u=e[3],v=e[2],w=e[1];if(w===h)var +x=[1,v,u];else if(v===h)var +x=[1,w,u];else{if(u!==h)throw g([0,f,nY],1);var +x=[1,w,v]}var +o=x;break;case +3:var +p=e[4],q=e[3],r=e[2],s=e[1];if(s===h)var +t=[2,r,q,p];else if(r===h)var +t=[2,s,q,p];else if(q===h)var +t=[2,s,r,p];else{if(p!==h)throw g([0,f,nZ],1);var +t=[2,s,r,q]}var +o=t;break;default:var +n=bs(d,h);if(j(e[3],n)[1+n]!==h)throw g([0,f,n0],1);var +m=e[2]-1|0;e[2]=m;if(n>>2|0))var +T=ji(e[3],0,K>>>1|0),L=[4,e[1],e[2],T];else +var +L=e;var +J=L}var +o=J}d[2]=o;if(typeof +o!=="number")return k;var +y=d[1];d[1]=1;var +l=d[4];switch(l[0]){case +0:h=d;d=l[1];break;case +1:var +M=l[2];k=a9(k,d,l[1]);h=d;d=M;break;case +2:var +N=l[2];k=a9(k,d,l[1]);h=d;d=N;break;case +3:var +O=l[2];k=a9(k,d,l[1]);h=d;d=O;break;case +4:var +z=l[2],A=a9(k,d,l[1]);if(!z)return A;var +P=z[1];l[2]=0;k=A;h=d;d=P;break;case +5:return k;case +6:if(typeof +y==="number")return k;var +Q=y[1];try{i(l[2],d,Q);return k}catch(f){var +R=Y(f);return[0,[0,R,mw(0)],k]}default:var +S=l[1];k=a9(k,d,l[2]);h=d;d=S}break;default:throw g([0,f,n1],1)}}function +aD(a,b){var +e=a,c=b;for(;;)switch(c[0]){case +0:return;case +1:var +n=typeof +c[2]==="number"?1:0,d=c[2];if(typeof +d==="number")var +k=[0,e];else +switch(d[0]){case +0:var +k=[1,e,d[1]];break;case +1:var +k=[2,e,d[1],d[2]];break;case +2:var +k=[3,e,d[1],d[2],d[3]];break;case +3:var +o=[0,d[1],d[2],d[3],d[4],e,a6,a6,a6],l=0;for(;;){fe(c,l,j(o,l)[1+l]);var +w=l+1|0;if(4===l)break;l=w}var +k=[4,5,5,o];break;default:var +i=d[2];if(i>>1|0)}function +fs(a,b,c){if(typeof +a!=="number"){if(0!==a[0]){if(a[2]!==b)throw g([0,f,or],1);a[2]=c;return}if(a[2]===b){a[2]=c;return}if(a[4]===b){a[4]=c;return}}throw g([0,f,oq],1)}function +dO(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=c[4];if(typeof +d!=="number"&&1!==d[0]){var +h=c[5],e=d[2];if(typeof +e==="number")var +i=0;else{if(0!==e[0])throw g([0,f,ov],1);e[5]=c;var +i=e}d[2]=c;c[4]=i;c[5]=d;d[5]=h;fs(h,c,d);dm(b,c);return a<50?bz(a+1|0,b,d):p(bz,[0,b,d])}}throw g([0,f,ou],1)}function +os(a,b){return aM(dO(0,a,b))}function +dN(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=c[2];if(typeof +d!=="number"&&1!==d[0]){var +h=c[5],e=d[4];if(typeof +e==="number")var +i=0;else{if(0!==e[0])throw g([0,f,ox],1);e[5]=c;var +i=e}d[4]=c;c[2]=i;c[5]=d;d[5]=h;fs(h,c,d);dm(b,c);return a<50?bz(a+1|0,b,d):p(bz,[0,b,d])}}throw g([0,f,ow],1)}function +ot(a,b){return aM(dN(0,a,b))}function +gw(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=c[4];a:if(typeof +d!=="number"&&0===d[0]){var +e=a_(d[2]);if(dl(a_(d[4]),e)){ot(b,d);break a}}return a<50?dO(a+1|0,b,c):p(dO,[0,b,c])}throw g([0,f,oy],1)}function +gv(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=c[2];a:if(typeof +d!=="number"&&0===d[0]){var +e=a_(d[4]);if(dl(a_(d[2]),e)){os(b,d);break a}}return a<50?dN(a+1|0,b,c):p(dN,[0,b,c])}throw g([0,f,oz],1)}function +bz(a,b,c){if(typeof +c!=="number"&&0===c[0]){var +d=a_(c[2]),e=a_(c[4]);return d>>2|0}function +aR(a,b){if(typeof +a==="number")var +c=b;else{if(typeof +b!=="number"){var +d=cb(b);return[1,(fx(cb(a),d)+1|0)<<2,a,b]}var +c=a}return c}function +fy(a){return typeof +a==="number"?0:0===a[0]?[0,a[2]]:[1,a[2],a[3]]}var +dn=1,dp=2,o7=3;function +fz(a){return-1===a?1:0}function +dq(a){return-1!==a?1:0}function +a$(a){return(a&3)===3?1:0}function +fA(a){return(a&3)===1?1:0}function +fB(a){return(a&3)===2?1:0}function +fC(a){return a|3}function +o8(a){return a>>>2|0}function +fD(a){return a<<2|2}function +bt(a){return a&ik(o7)}function +fE(a){return a[2]}function +fF(a){return a[3]}function +fG(a){return[0,0,0,0]}function +cc(a){a[1]=a[1]+1|0;return}function +cd(a){a[2]=a[2]+1|0;return}function +ce(a){a[3]=a[3]+1|0;return}function +dr(a,b,c){var +d=c;for(;;){if(typeof +d==="number")return;if(0===d[0]){var +e=d[1],i=(e&3)!==3?1:0,l=i?0!==(e&3)?1:0:i;if(l){if(0!==(e&b))throw g([0,f,o_],1);cc(a);ce(a);d[1]=e|3}return}var +h=d[1],j=(h&3)!==3?1:0,k=j?0!==(h&3)?1:0:j;if(!k)return k;if(0!==(h&b))throw g([0,f,o$],1);cc(a);ce(a);d[1]=h|3;dr(a,b,d[2]);d=d[3]}}function +cf(a,b,c,d){if(typeof +d==="number")return;if(0===d[0]){var +e=d[1];if(0===(e&c)){cc(a);if(0===(e&3))d[1]=e|c;else{d[1]=-1;ce(a);cd(a)}}var +g=-1!==e?1:0,h=g?(e&3)===3?1:0:g;return h?(d[1]=-1,cd(a)):h}var +f=d[1];if(0===(f&c)){cc(a);if(0===(f&3)){d[1]=f|c;c6(d,b)}else{d[1]=-1;ce(a);cd(a);dr(a,c,d[2]);dr(a,c,d[3])}}var +i=-1!==f?1:0,j=i?(f&3)===3?1:0:i;return j?(d[1]=-1,cd(a)):j}function +ds(a,b,c){var +d=eP(b);if(typeof +d!=="number"&&1===d[0]){var +e=(d[1]&3)===c?1:0;return e?(cf(a,b,c,d[2]),cf(a,b,c,d[3])):e}throw g([0,f,pa],1)}function +fH(a,b,c){for(;;){if(c7(b))return;ds(a,b,c)}}function +pb(a,b,c,d){for(;;){if(c7(c))return fH(b,d,dp);if(c7(d))return fH(a,c,dn);ds(a,c,dn);ds(b,d,dp)}}function +dt(a){var +b=a[6];a[6]=b+1|0;return b}function +du(a){var +b=a;for(;;){if(typeof +b==="number")return;if(0===b[0]){var +c=b[1];if(typeof +c!=="number"&&0===c[0]){var +e=c[1],i=dq(e),l=i?a$(e):i;if(l)c[1]=bt(e);return}throw g([0,f,pg],1)}var +d=b[1];if(typeof +d!=="number"&&1===d[0]){var +h=d[1],m=b[4],n=b[3],j=dq(h),k=j?a$(h):j;if(!k)return k;d[1]=bt(h);du(n);b=m;continue}throw g([0,f,ph],1)}}function +fI(a,b){var +c=b;for(;;){if(typeof +c==="number")return;if(0===c[0]){var +d=c[1];if(typeof +d!=="number"&&0===d[0]){var +e=d[1],u=c[2];if(!fA(e)){if(fz(e)){var +k=dt(a);j(a[4],k)[1+k]=d;j(a[5],k)[1+k]=[0,c,0];d[1]=fD(k);return}if(fB(e)){var +n=o8(e),v=[0,c,j(a[5],n)[1+n]];j(a[5],n)[1+n]=v;return}var +q=a$(e);if(q)throw g([0,f,pk],1);return q}var +m=a[2];if(-1a[3])throw g([0,f,pj],1)}d[1]=bt(e);return}throw g([0,f,pi],1)}var +h=c[1];if(typeof +h!=="number"&&1===h[0]){var +r=c[4],s=c[3],i=h[1],w=c[2];if(fz(i)){var +l=dt(a);j(a[4],l)[1+l]=h;j(a[5],l)[1+l]=[0,c,0];h[1]=fD(l);du(s);return du(r)}if(!fA(i)){if(fB(i)){var +o=i>>>2|0,x=[0,c,j(a[5],o)[1+o]];j(a[5],o)[1+o]=x;return}var +t=a$(i);if(t)throw g([0,f,pn],1);return t}if(-1a[3])throw g([0,f,pm],1)}h[1]=bt(i);fI(a,s);c=r;continue}throw g([0,f,pl],1)}}function +bu(a,b){if(typeof +b==="number")return 0;if(0!==b[0]){var +i=b[1];if(-1===i){var +l=dt(a);b[1]=0;j(a[4],l)[1+l]=b;var +p=bu(a,b[2]);return[1,b,0,p,bu(a,b[3])]}if(!a$(i)){b[1]=bt(b[1]);var +r=bu(a,b[2]);return[1,b,0,r,bu(a,b[3])]}var +d=i>>>2|0,k=j(a[5],d)[1+d];if(!k)throw g([0,f,pq],1);var +m=k[2],q=k[1];j(a[5],d)[1+d]=m;if(0===m)b[1]=0;return q}var +e=b[1];if(dq(e)&&a$(e)){var +c=e>>>2|0,h=j(a[5],c)[1+c];if(!h)return[0,b,0];var +n=h[2],o=h[1];j(a[5],c)[1+c]=n;return o}b[1]=0;return[0,b,0]}var +dv=[0,0,[0],0,0];function +o9(a){return a[1]}function +pc(a){return a[1]}function +pd(a){return a[2]}function +pe(a,b){var +c=fG(0),d=fG(0),e=c4(0),f=c4(0);cf(c,e,dn,a);cf(d,f,dp,b);pb(c,d,e,f);return[0,c,d]}function +pf(a){if(typeof +a==="number")return;if(0===a[0]){a[1]=0;return}var +b=cb(a[3]);a[1]=(fx(cb(a[2]),b)+1|0)<<2;return}function +po(a){var +e=a[6]-1|0,h=0;if(e>=0){var +b=h;for(;;){var +c=j(a[4],b)[1+b];if(typeof +c!=="number")if(0===c[0])c[1]=fC(c[1]);else +c[1]=fC(c[1]);var +d=j(a[5],b)[1+b];if(!d)throw g([0,f,pp],1);if(d[2]){var +i=aN(d);j(a[5],b)[1+b]=i}var +k=b+1|0;if(e===b)break;b=k}}return}function +fJ(a,b,c){if(typeof +b==="number"){if(typeof +c==="number")return[0,dv,0]}else if(b[1]===c)return[0,dv,b];var +t=typeof +b==="number"?ca:b[1],m=pe(t,c),i=pc(m),n=pd(m),u=fF(n),v=fF(i)+u|0,o=o9(i)-v|0,w=fE(n),p=fE(i)+w|0,x=0,y=ao(p,0),z=ao(p,0),A=a?o:-1,B=a?0:-1,C=a?ao(o,0):[0],d=[0,C,B,A,z,y,x];fI(d,b);if(d[2]!==d[3])throw g([0,f,pr],1);po(d);var +q=bu(d,c),r=d[6]-1|0;if(r>=0){var +h=r;for(;;){pf(j(d[4],h)[1+h]);var +F=h-1|0;if(0===h)break;h=F}}if(!a)return[0,dv,q];var +k=[0,0],l=[0,0],s=d[6]-1|0,D=0;if(s>=0){var +e=D;for(;;){aO(function(a){if(typeof +a!=="number")if(0===a[0]){var +b=a[2];if(b){k[1]=[0,b[1],k[1]];return 0}}else{var +c=a[2];if(c){l[1]=[0,c[1],l[1]];return 0}}return 0},j(d[5],e)[1+e]);var +E=e+1|0;if(s===e)break;e=E}}return[0,[0,d[2],d[1],k[1],l[1]],q]}function +ps(d,b){if(typeof +b==="number")return 0;function +c(a){a:if(typeof +a!=="number"){b:{if(0===a[0]){var +b=a[1];if(typeof +b!=="number"&&0===b[0]){var +e=a[2];if(e){var +j=e[1];break b}var +k=h(d[1],b[2]);a[2]=[0,k];return k}break a}var +l=a[2];if(!l){var +n=c(a[3]),o=c(a[4]),m=i(d[2],n,o);a[2]=[0,m];return m}var +j=l[1]}return j}throw g([0,f,pt],1)}return[0,c(b)]}function +cg(a,b){return[0,[0,a,b],0]}function +ch(a){return ps(a[1],a[2])}function +pu(a,b){var +c=a[1];return[0,c,fJ(0,a[2],b)[2]]}function +dw(a,b){var +d=a[1],c=fJ(1,a[2],b);return[0,c[1],[0,d,c[2]]]}function +ci(a,b,c,d){var +e=[0,d];if(bd===a)var +h=c[1],g=0;else if(g_<=a)var +h=c[2].length-1,g=c[1];else +var +h=c[2].length-1,g=0;var +k=h-1|0;if(k>=g){var +f=g;for(;;){var +l=j(c[2],f)[1+f];if(l)e[1]=i(b,l[1],e[1]);var +m=f+1|0;if(k===f)break;f=m}}if(g_>a)aO(function(a){e[1]=i(b,a,e[1]);return 0},c[3]);if(bd!==a)aO(function(a){e[1]=i(b,a,e[1]);return 0},c[4]);return}function +dx(a,b,c){if(typeof +c==="number")throw g([0,f,pv],1);if(0===c[0])return h(a,c[2]);var +d=dx(a,b,c[3]);return i(b,dx(a,b,c[2]),d)}function +fK(a,b,c){var +d=b[2],e=b[1],f=b5(c);if(f){var +g=f[1];return typeof +g==="number"?_(e):_(dx(a,d,g))}var +h=[0,cg(a,d)];return x(c,function(a){var +b=pu(h[1],a);h[1]=b;var +c=ch(b);return c?c[1]:e})}var +fL=[0,ca,aR];function +pw(a,b){return b_(b,fL,a)}function +fM(a){function +e(a,b){var +c=a,d=b;for(;;){if(typeof +c==="number")return d;if(0===c[0])return[0,c[2],d];var +f=e(c[3],d);c=c[2];d=f}}return e(a,0)}var +fN=[0,_(0),function(a,b){return a8(a,b,aR)}];function +pz(a,b){return nD(fK(b,fN,a))}function +fO(a){return pz(a,function(a){return x(a,ai)})}function +px(a){return pw(a,ai)}function +py(c,b){return fK(function(a){return ai(h(c,a))},fL,b)}var +ba=e;function +pA(a){return a[hL]}function +fP(a,b){var +c=a?a[1]:ba;return s0(b).join(c)}function +dy(a){return 0===pA(a)?1:0}function +cj(a,b){return h1(a,b)}n["Number"];var +dz=null,pB=undefined;function +bv(a){return a===dz?1:0}function +pC(a){return a===pB?1:0}function +ck(a){var +b=bv(a);return b?b:pC(a)}function +fQ(a){return 1-ck(a)}var +k=n;function +pJ(a){return a[hL]}function +pL(a,b){var +c=new +k["Error"](b);return a?(c["name"]=a[1],c):c}function +pH(a){return ag(a)}var +pN=k["Promise"];function +aS(a,b,c){return cM(a,pH(b),c)}function +fR(a){return S(a)}function +pD(a,b){return ck(b)?0:[0,h(a,b)]}var +pE=true;function +pF(a,b){a[b];return}function +pG(a,b){return a[b]}function +pI(a){return new +k["Array"](a)}function +pK(c,b){return iS(pJ(b),function(a){return h(c,b[a])})}function +pM(a,b){return h(function(a){throw a},pL(a,b))}function +pO(a){return pN.resolve(a)}function +pP(a,b){return a.then(cN(1,b))}function +fS(a){return{fut:a}}function +fT(a){return a["fut"]}function +fU(a){return fS(pO(a))}function +pQ(a,b){return fS(pP(fT(a),function(a){return fT(h(b,a))}))}function +pR(c,b){return pQ(b,function(a){return fU(h(c,a))})}function +pS(a){return fU([0,a])}function +pT(a,b){return pR(function(a){return iF(b,a)},a)}k["Event"];function +fV(a,b,c,d){var +e=a?a[1]:{},f=cN(1,c);d.addEventListener(b,f,e);return function(a){d.removeEventListener(b,f,e);return 0}}function +fW(a){return h(a,0)}k["ArrayBuffer"];k["DataView"];var +pU="click",pV="DOMContentLoaded",pW="scroll",pX="wheel";k["Blob"];k["File"];k["JSON"];k["encodeURI"];k["decodeURI"];k["encodeURIComponent"];k["decodeURIComponent"];k["URL"];k["URLSearchParams"];function +bw(a,b){return[0,a,b]}function +fX(a){return a}var +bx=hw,fY=gK,pZ=gV;function +bb(a){return bw(bx,a)}function +cl(a){return bw(fY,a)}var +aT=k["document"],pY=[0,ba,ba];function +p0(a){return bw(pZ,a)}function +p1(a){return a["ownerDocument"]}if(!ck(aT))aT[gQ];function +p2(a,b){a.appendChild(b);return 0}function +p3(a,b,c,d){var +g=b,f=c,e=d;for(;;){if(!e){if(0!==g)a.setAttribute(gK,fP([0,";"],aN(g)));if(0!==f)a.setAttribute(hw,fP([0,aa],aN(f)));return}var +h=e[2],k=e[1],i=k[2],j=k[1];if(dy(j))e=h;else if(cj(j,fY)){g=[0,i,g];e=h}else if(cj(j,bx)){var +l=dy(i)?f:[0,i,f];f=l;e=h}else{a.setAttribute(j,i);e=h}}}function +fZ(a,b,c,d){var +f=a?a[1]:aT,g=b?b[1]:0,e=f.createElement(c);p3(e,0,0,g);aO(function(a){return p2(e,a)},d);return e}function +bc(a,b){var +c=a?a[1]:aT;return c.createTextNode(fR(b))}function +f0(a,b,c){return dy(a)?0:b?(c.setAttribute(a,b[1]),0):(c.removeAttribute(a),0)}function +f1(a,b,c){return b?(c[gD].add(a),0):(c[gD].remove(a),0)}var +f2="div";function +p_(a,b,c,d){return fZ(b,c,a,d)}function +f3(a,b,c){return p_(f2,a,b,c)}function +f4(a){return a[gQ]}function +qb(a,b,c){cM(a,b,c);return 0}var +qc=k[hQ];function +qd(a){return sX(function(a,b,c){var +e=b,d=c;for(;;){if(!d)return a;var +f=d[2];a[e]=d[1];e=e+1|0;d=f}}(pI(0),0,a))}k[hQ];k["navigator"];var +qi=k["performance"],qj=k[hr];pF(k,qk);function +p4(a,b){cM(a,hF,eO(b));return}function +p5(a,b,c){var +e=a?a[1]:k[hr],d=e.getComputedStyle(c)[b];return ck(d)?ba:d}function +p6(a){return pG(a,p7)}function +p8(a,b){var +c=a?a[1]:hj,d=hj<=c?1:0;b.scrollIntoView(!!d);return 0}var +p9="button";function +p$(a){var +b=a["body"];return fQ(b)?b:pM(0,"Document body is null. Try to defer your script execution.")}function +qa(a){return pD(function(a){return a},a["activeElement"])}function +qe(a){return qb(qc,qf,qd(a))}function +qg(a){return a}function +qh(a){return a.now()}function +ql(a,b){return k.setTimeout(cN(1,b),a)}function +qm(a){k.clearTimeout(a);return}function +qn(a){k.requestAnimationFrame(cN(1,a));return}k["ClipboardItem"];k["FormData"];k["Headers"];k["Request"];k["Response"];k["fetch"];k["MediaStream"];k["MediaRecorder"];k["MessageChannel"];k["BroadcastChannel"];k["Notification"];k["WebSocket"];function +dA(a,b,c){return[0,a,b,c]}function +f5(a){var +b=a[1];return 82===b?eG(b5(a[2])):83<=b?eG(b5(a[2])):1}function +cm(a){return iD(b5(a))}function +qo(a){return c0(bU(function(a){var +b=a[1];return 82===b?[0,cm(a[2]),0]:83<=b?fM(cm(a[2])):[0,a[2],0]},a))}function +f6(a){if(!a)return qp;var +b=iW(f5,a),c=b[2];return[0,qo(b[1]),c]}var +f7=hF,dB="before";function +qs(a){return[0,a]}function +qt(a,b){return[1,dz,a,b]}var +qu="remove",qv="contains";function +f8(a){var +b=qa(p1(a));return b?aS(a,qv,[0,b[1]])|0:0}function +f9(e,b){var +c=[0,cg(qs,qt)];return x(b,function(a){var +b=dw(c[1],a),d=b[2],g=b[1];c[1]=d;ci(bd,function(a,b){return 0===a[0]?a[1][ct]=pE:0},g,0);var +h=f8(e),i=ch(d);if(i){var +f=function(d,b){if(0!==b[0]){if(!bv(b[1]))return b[1];var +l=f(d,b[3]),k=f(l,b[2]);b[1]=k;return k}var +c=b[1];delete +c[ct];if(c.parentNode!==e)if(bv(d))aS(e,f7,[0,c]);else +aS(d,dB,[0,c]);else{var +a=c.nextSibling!==d?1:0;if(a){if(h)var +g=f8(c),i=g?function(a){for(;;){var +b=c.nextSibling;if(b===d)return 1;if(bv(b))return 0;aS(c,dB,[0,b])}}(0):g;else +var +i=h;var +j=1-i}else +var +j=a;if(j)if(bv(d))aS(e,f7,[0,c]);else +aS(d,dB,[0,c])}return c};f(dz,i[1])}ci(bd,function(a,b){if(0!==a[0])return 0;var +c=a[1],d=fQ(c[ct]),e=d?(delete +c[ct],aS(c,qu,[0]),0):d;return e},g,0);return e})}var +cn=_(0),dC=[0,ba,ba];function +qq(a){if(!a)return qr;var +b=a[1],c=b[1];if(82===c){if(!a[2])return[0,0,[0,x(b[2],ai)]]}else +if(83<=c){if(!a[2])return[0,0,[0,b[2]]]}else if(!a[2])return[0,[0,b[2],0],0];return iU(f5,a)?[0,c0(bU(function(a){var +b=a[1];return 82===b?[0,cm(a[2]),0]:83<=b?fM(cm(a[2])):[0,a[2],0]},a)),0]:[0,0,[0,b_(function(a){var +b=a[1];return 82===b?x(a[2],ai):83<=b?a[2]:_(ai(a[2]))},fN,a)]]}function +f_(c,b){function +d(a){var +b=a[2],d=a[1];return cj(d,bx)?f1(b,1,c):f0(d,[0,b],c)}function +e(a){var +b=a[1],d=a[2];return cj(b,bx)?f1(d,0,c):f0(b,0,c)}function +h(a){var +b=[0,dC];return function(a){if(b[1]!==dC)e(b[1]);var +c=fX(a);d(c);b[1]=c;return 0}}return b_(function(a){var +b=a[1];if(82===b){var +i=a[2];return x(i,h(0))}if(83>b)throw g([0,f,qw],1);var +j=a[2],c=[0,cg(function(a){var +b=fX(a);d(b);return b},function(a,b){return dC})];return x(j,function(a){var +b=dw(c[1],a),d=b[2],f=b[1];c[1]=d;ci(bd,function(a,b){return e(a)},f,0);ch(d);return 0})},[0,cn,function(a,b){return cn}],b)}function +dD(a,b){return fV(b[1],b[2],b[3],a)}function +qx(c,b){return b_(function(a){var +b=a[1];if(82===b){var +d=[0,0];return x(a[2],function(a){var +b=d[1];if(b)fW(b[1]);d[1]=[0,dD(c,a)];return 0})}if(83>b)throw g([0,f,qy],1);var +h=a[2],e=[0,cg(function(a){return dD(c,a)},function(a,b){return a})];return x(h,function(a){var +b=dw(e[1],a),c=b[2],d=b[1];e[1]=c;ci(bd,function(a,b){return fW(a)},d,0);ch(c);return 0})},[0,cn,function(a,b){return cn}],b)}function +qz(a,b,c,d,e,f){var +p=b?b[1]:0,q=c?c[1]:0,r=d?d[1]:function(a){return},l=f6(p),k=l[2],s=l[1],m=f6(q),n=m[2],t=m[1],o=qq(f),i=o[2],g=fZ(a,[0,s],e,o[1]);h(r,g);if(k)if(i)var +u=f9(g,i[1]),j=a8(f_(g,k),u,function(a,b){return b});else +var +j=x(f_(g,k),function(a){return g});else +var +j=i?f9(g,i[1]):_(g);aO(function(a){dD(g,a);return 0},t);var +v=n?a8(qx(g,n),j,function(a,b){return b}):j;return v}function +f$(a,b,c,d,e,f){return qz(b,c,d,e,a,f)}function +$(a,b,c,d,e){return f$(f2,a,b,c,d,e)}function +qA(a,b,c,d,e){return f$(p9,a,b,c,d,e)}function +dE(a,b){return a===b?1:0}function +co(a,b){return b