dubuval/linge.html
2022-12-03 10:27:48 +01:00

49129 lines
3.6 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Tarifs de location du linge — SCI Dubuval — 2022-2023</title>
<meta charset="UTF-8"/>
<style type="text/css">
/* <![CDATA[ */
body,div,table,thead,tbody,tfoot,tr,th,td,p {color: darkslategrey; font-family:Arial; font-size:medium;}
table.montablo {border:0; border-collapse: collapse}
table.montablo tr td {border: 1px solid; text-align: center; padding: 5px}
table.montablo tr.gras td {font-weight: bold; background-color: darkslategrey; color: mediumturquoise}
td.gras {font-weight: bold; background-color: darkslategrey; color: mediumturquoise}
/* ]]> */
</style>
</head>
<body onpageshow="compute()">
<script>
//<![CDATA[
//# 1 "mechanic.bc.runtime.js"
// Generated by js_of_ocaml 4.0.0
(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_int64_is_zero(x){return + x.isZero()}
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)}}
var caml_int64_offset=Math.pow(2,- 24);
function caml_raise_constant(tag){throw tag}
var caml_global_data=[0];
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_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_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_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 caml_jsbytes_of_string(s)
{s.t & 6 && caml_convert_string_to_bytes(s);return s.c}
function caml_raise_with_arg(tag,arg){throw [0,tag,arg]}
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_string_of_jsbytes(s){return caml_bytes_of_jsbytes(s)}
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_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 += "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_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_expm1_float(x){return Math.expm1(x)}
function caml_jsstring_of_string(s){return s.toUtf16()}
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;
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_bytes_of_utf16_jsstring(s)
{var tag=9;
if(! jsoo_is_ascii(s))tag = 8,s = caml_utf8_of_utf16(s);
return new MlBytes(tag,s,s.length)}
function caml_string_of_jsstring(s)
{return caml_bytes_of_utf16_jsstring(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 [0,tag].concat(args)}
function caml_is_ml_bytes(s){return s instanceof MlBytes}
function caml_is_ml_string(s){return caml_is_ml_bytes(s)}
function caml_bytes_of_array(a){return new MlBytes(4,a,a.length)}
function caml_bytes_of_string(s){return s}
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_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_create_bytes(len)
{if(len < 0)caml_invalid_argument("Bytes.create");
return new MlBytes(len?2:9,"",len)}
function caml_ml_bytes_length(s){return s.l}
function caml_convert_bytes_to_array(s)
{if(globalThis.Uint8Array)
var a=new (globalThis.Uint8Array)(s.l);
else
var a=new Array(s.l);
var 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_blit_string(a,b,c,d,e)
{caml_blit_bytes(caml_bytes_of_string(a),b,c,d,e);return 0}
function MlFile(){}
function MlFakeFile(content){this.data = content}
MlFakeFile.prototype = new MlFile();
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_string(buf,pos,this.data,offset,len);
return 0};
MlFakeFile.prototype.read
=
function(offset,buf,pos,len)
{var clen=this.length();
caml_blit_bytes(this.data,offset,buf,pos,len);
return 0};
MlFakeFile.prototype.read_one
=
function(offset){return caml_bytes_get(this.data,offset)};
MlFakeFile.prototype.close = function(){};
MlFakeFile.prototype.constructor = MlFakeFile;
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.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.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)
{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");
var file=this.content[name];
if(f.truncate)file.truncate();
return file}
else
if(f.create)
{this.create_dir_if_needed(name);
this.content[name] = new MlFakeFile(caml_create_bytes(0));
return this.content[name]}
else
caml_raise_no_such_file(this.nm(name))};
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 caml_ml_bytes_length(s)}
function caml_string_unsafe_get(s,i){return caml_bytes_unsafe_get(s,i)}
function caml_array_of_string(s)
{var l=caml_ml_string_length(s),a=new Array(l),i=0;
for(;i < l;i++)a[i] = caml_string_unsafe_get(s,i);
return a}
function caml_array_of_bytes(s)
{if(s.t != 4)caml_convert_bytes_to_array(s);return s.c}
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 MlNodeFile(fd){this.fs = require("fs");this.fd = fd}
MlNodeFile.prototype = new MlFile();
MlNodeFile.prototype.truncate
=
function(len)
{try
{this.fs.ftruncateSync(this.fd,len | 0)}
catch(err){caml_raise_sys_error(err.toString())}};
MlNodeFile.prototype.length
=
function()
{try
{return this.fs.fstatSync(this.fd).size}
catch(err){caml_raise_sys_error(err.toString())}};
MlNodeFile.prototype.write
=
function(offset,buf,buf_offset,len)
{var a=caml_array_of_string(buf);
if(! (a instanceof globalThis.Uint8Array))
a = new (globalThis.Uint8Array)(a);
var buffer=globalThis.Buffer.from(a);
try
{this.fs.writeSync(this.fd,buffer,buf_offset,len,offset)}
catch(err){caml_raise_sys_error(err.toString())}
return 0};
MlNodeFile.prototype.read
=
function(offset,buf,buf_offset,len)
{var a=caml_array_of_bytes(buf);
if(! (a instanceof globalThis.Uint8Array))
a = new (globalThis.Uint8Array)(a);
var buffer=globalThis.Buffer.from(a);
try
{this.fs.readSync(this.fd,buffer,buf_offset,len,offset)}
catch(err){caml_raise_sys_error(err.toString())}
for(var i=0;i < len;i++)
caml_bytes_set(buf,buf_offset + i,buffer[buf_offset + i]);
return 0};
MlNodeFile.prototype.read_one
=
function(offset)
{var a=new (globalThis.Uint8Array)(1),buffer=globalThis.Buffer.from(a);
try
{this.fs.readSync(this.fd,buffer,0,1,offset)}
catch(err){caml_raise_sys_error(err.toString())}
return buffer[0]};
MlNodeFile.prototype.close
=
function()
{try
{this.fs.closeSync(this.fd)}
catch(err){caml_raise_sys_error(err.toString())}};
MlNodeFile.prototype.constructor = MlNodeFile;
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.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);return new MlNodeFile(fd)}
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.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] + "/"}
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)}
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_sys_is_directory(name)
{var root=resolve_fs_device(name),a=root.device.is_dir(root.rest);
return a?1:0}
function caml_raise_not_found()
{caml_raise_constant(caml_global_data.Not_found)}
function caml_sys_getenv(name)
{var g=globalThis,n=caml_jsstring_of_string(name);
if(g.process && g.process.env && g.process.env[n] != undefined)
return caml_string_of_jsstring(g.process.env[n]);
if(globalThis.jsoo_static_env && globalThis.jsoo_static_env[n])
return caml_string_of_jsstring(globalThis.jsoo_static_env[n]);
caml_raise_not_found()}
function shift_right_nat(nat1,ofs1,len1,nat2,ofs2,nbits)
{if(nbits == 0){nat2.data[ofs2] = 0;return 0}
var wrap=0;
for(var i=len1 - 1;i >= 0;i--)
{var a=nat1.data[ofs1 + i] >>> 0;
nat1.data[ofs1 + i] = a >>> nbits | wrap;
wrap = a << 32 - nbits}
nat2.data[ofs2] = wrap;
return 0}
var caml_gr_state;
function caml_gr_state_get()
{if(caml_gr_state)return caml_gr_state;
throw [0,
caml_named_value("Graphics.Graphic_failure"),
caml_string_of_jsbytes("Not initialized")]}
function caml_gr_point_color(x,y)
{var
s=caml_gr_state_get(),
im=s.context.getImageData(x,s.height - y,1,1),
d=im.data;
return (d[0] << 16) + (d[1] << 8) + d[2]}
var MlObjectTable;
if(typeof globalThis.WeakMap === "undefined")
MlObjectTable
=
function()
{function NaiveLookup(objs){this.objs = objs}
NaiveLookup.prototype.get
=
function(v)
{for(var i=0;i < this.objs.length;i++)if(this.objs[i] === v)return i};
NaiveLookup.prototype.set = function(){};
return function()
{this.objs = [];this.lookup = new NaiveLookup(this.objs)}}
();
else
MlObjectTable
=
function(){this.objs = [];this.lookup = new (globalThis.WeakMap)()};
MlObjectTable.prototype.store
=
function(v){this.lookup.set(v,this.objs.length);this.objs.push(v)};
MlObjectTable.prototype.recall
=
function(v)
{var i=this.lookup.get(v);
return i === undefined?undefined:this.objs.length - i};
function caml_sys_rename(o,n)
{var o_root=resolve_fs_device(o),n_root=resolve_fs_device(n);
if(o_root.device != n_root.device)
caml_failwith
("caml_sys_rename: cannot move file between two filesystem");
if(! o_root.device.rename)
caml_failwith("caml_sys_rename: no implemented");
o_root.device.rename(o_root.rest,n_root.rest)}
function caml_log10_float(x){return Math.log10(x)}
function unix_unlink(name)
{var root=resolve_fs_device(name);
if(! root.device.unlink)caml_failwith("unix_unlink: not implemented");
return root.device.unlink(root.rest,true)}
var caml_runtime_warnings=0;
function caml_ml_enable_runtime_warnings(bool)
{caml_runtime_warnings = bool;return 0}
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 unix_rmdir(name)
{var root=resolve_fs_device(name);
if(! root.device.rmdir)caml_failwith("unix_rmdir: not implemented");
return root.device.rmdir(root.rest,true)}
function caml_ml_refill_input(chan)
{var str=chan.refill(),str_len=caml_ml_string_length(str);
if(str_len == 0)chan.refill = null;
chan.file.write(chan.file.length(),str,0,str_len);
return str_len}
var caml_ml_channels=new Array();
function caml_ml_may_refill_input(chanid)
{var chan=caml_ml_channels[chanid];
if(chan.refill == null)return;
if(chan.file.length() != chan.offset)return;
caml_ml_refill_input(chan)}
function caml_array_bound_error()
{caml_invalid_argument("index out of bounds")}
function caml_ml_input_scan_line(chanid)
{var chan=caml_ml_channels[chanid];
caml_ml_may_refill_input(chanid);
var p=chan.offset,len=chan.file.length();
if(p >= len)return 0;
while(true)
{if(p >= len)return - (p - chan.offset);
if(chan.file.read_one(p) == 10)return p - chan.offset + 1;
p++}}
function caml_gc_minor(){return 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_ba_uint8_get64(ba,i0)
{var ofs=ba.offset(i0);
if(ofs + 7 >= ba.data.length)caml_array_bound_error();
var
b1=ba.get(ofs + 0),
b2=ba.get(ofs + 1),
b3=ba.get(ofs + 2),
b4=ba.get(ofs + 3),
b5=ba.get(ofs + 4),
b6=ba.get(ofs + 5),
b7=ba.get(ofs + 6),
b8=ba.get(ofs + 7);
return caml_int64_of_bytes([b8,b7,b6,b5,b4,b3,b2,b1])}
function caml_int64_to_bytes(x){return x.toArray()}
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_ba_num_dims(ba){return ba.dims.length}
function caml_return_exn_constant(tag){return tag}
function caml_wrap_exception(e)
{if(e instanceof Array)return e;
if
(globalThis.RangeError
&&
e instanceof globalThis.RangeError
&&
e.message
&&
e.message.match(/maximum call stack/i))
return caml_return_exn_constant(caml_global_data.Stack_overflow);
if
(globalThis.InternalError
&&
e instanceof globalThis.InternalError
&&
e.message
&&
e.message.match(/too much recursion/i))
return caml_return_exn_constant(caml_global_data.Stack_overflow);
if(e instanceof globalThis.Error && caml_named_value("jsError"))
return [0,caml_named_value("jsError"),e];
return [0,caml_global_data.Failure,caml_string_of_jsstring(String(e))]}
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_set_parser_trace(){return 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 unix_gettimeofday(){return new Date().getTime() / 1000}
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 num_digits_nat(nat,ofs,len)
{for(var i=len - 1;i >= 0;i--)if(nat.data[ofs + i] != 0)return i + 1;
return 1}
function caml_hash_nat(x)
{var len=num_digits_nat(x,0,x.data.length),h=0;
for(var i=0;i < len;i++)h = caml_hash_mix_int(h,x.data[i]);
return h}
function caml_call_gen(f,args)
{if(f.fun)return caml_call_gen(f.fun,args);
if(typeof f !== "function")return f;
var n=f.length | 0;
if(n === 0)return f.apply(null,args);
var argsLen=args.length | 0,d=n - argsLen | 0;
if(d == 0)
return f.apply(null,args);
else
if(d < 0)
return caml_call_gen(f.apply(null,args.slice(0,n)),args.slice(n));
else
return 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)}}
function caml_js_wrap_callback_arguments(f)
{return function()
{var len=arguments.length,args=new Array(len);
for(var i=0;i < len;i++)args[i] = arguments[i];
return caml_call_gen(f,[args])}}
function caml_sys_chdir(dir)
{var root=resolve_fs_device(dir);
if(root.device.exists(root.rest))
{if(root.rest)
caml_current_dir = caml_trailing_slash(root.path + root.rest);
else
caml_current_dir = root.path;
return 0}
else
caml_raise_no_such_file(caml_jsbytes_of_string(dir))}
function caml_gc_counters(){return [254,0,0,0]}
function caml_gr_synchronize()
{caml_failwith("caml_gr_synchronize not Implemented")}
function unix_has_symlink(unit){return fs_node_supported()?1: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 (globalThis.Float32Array)(1);
float32a[0] = x;
var int32a=new (globalThis.Int32Array)(float32a.buffer);
return int32a[0] | 0}
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_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 g=globalThis,view;
switch(kind)
{case 0:view = g.Float32Array;break;
case 1:view = g.Float64Array;break;
case 2:view = g.Int8Array;break;
case 3:view = g.Uint8Array;break;
case 4:view = g.Int16Array;break;
case 5:view = g.Uint16Array;break;
case 6:view = g.Int32Array;break;
case 7:view = g.Int32Array;break;
case 8:view = g.Int32Array;break;
case 9:view = g.Int32Array;break;
case 10:view = g.Float32Array;break;
case 11:view = g.Float64Array;break;
case 12:view = g.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 (globalThis.Int32Array)(1);
int32a[0] = x;
var float32a=new (globalThis.Float32Array)(int32a.buffer);
return float32a[0]}
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_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_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_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_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_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_string_compare(s1,s2){return caml_bytes_compare(s1,s2)}
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(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_greaterthan(x,y){return + (caml_compare_val(x,y,false) > 0)}
function div_helper(a,b,c)
{var
x=a * 65536 + (b >>> 16),
y=Math.floor(x / c) * 65536,
z=x % c * 65536,
w=z + (b & 0x0000FFFF);
return [y + Math.floor(w / c),w % c]}
function div_digit_nat(natq,ofsq,natr,ofsr,nat1,ofs1,len,nat2,ofs2)
{var rem=nat1.data[ofs1 + len - 1] >>> 0;
for(var i=len - 2;i >= 0;i--)
{var x=div_helper(rem,nat1.data[ofs1 + i] >>> 0,nat2.data[ofs2] >>> 0);
natq.data[ofsq + i] = x[0];
rem = x[1]}
natr.data[ofsr] = rem;
return 0}
function num_leading_zero_bits_in_digit(nat,ofs)
{var a=nat.data[ofs],b=0;
if(a & 0xFFFF0000){b += 16;a >>>= 16}
if(a & 0xFF00){b += 8;a >>>= 8}
if(a & 0xF0){b += 4;a >>>= 4}
if(a & 12){b += 2;a >>>= 2}
if(a & 2){b += 1;a >>>= 1}
if(a & 1)b += 1;
return 32 - b}
function shift_left_nat(nat1,ofs1,len1,nat2,ofs2,nbits)
{if(nbits == 0){nat2.data[ofs2] = 0;return 0}
var wrap=0;
for(var i=0;i < len1;i++)
{var a=nat1.data[ofs1 + i] >>> 0;
nat1.data[ofs1 + i] = a << nbits | wrap;
wrap = a >>> 32 - nbits}
nat2.data[ofs2] = wrap;
return 0}
function MlNat(x)
{this.data = new (globalThis.Int32Array)(x);
this.length = this.data.length + 2}
MlNat.prototype.caml_custom = "_nat";
function create_nat(size)
{var arr=new MlNat(size);
for(var i=0;i < size;i++)arr.data[i] = - 1;
return arr}
function set_to_zero_nat(nat,ofs,len)
{for(var i=0;i < len;i++)nat.data[ofs + i] = 0;return 0}
function incr_nat(nat,ofs,len,carry_in)
{var carry=carry_in;
for(var i=0;i < len;i++)
{var x=(nat.data[ofs + i] >>> 0) + carry;
nat.data[ofs + i] = x | 0;
if(x == x >>> 0){carry = 0;break}else carry = 1}
return carry}
function add_nat(nat1,ofs1,len1,nat2,ofs2,len2,carry_in)
{var carry=carry_in;
for(var i=0;i < len2;i++)
{var
x=
(nat1.data[ofs1 + i] >>> 0) + (nat2.data[ofs2 + i] >>> 0) + carry;
nat1.data[ofs1 + i] = x;
if(x == x >>> 0)carry = 0;else carry = 1}
return incr_nat(nat1,ofs1 + len2,len1 - len2,carry)}
function nat_of_array(l){return new MlNat(l)}
function mult_digit_nat(nat1,ofs1,len1,nat2,ofs2,len2,nat3,ofs3)
{var carry=0,a=nat3.data[ofs3] >>> 0;
for(var i=0;i < len2;i++)
{var
x1=
(nat1.data[ofs1 + i] >>> 0)
+
(nat2.data[ofs2 + i] >>> 0)
*
(a & 0x0000FFFF)
+
carry,
x2=(nat2.data[ofs2 + i] >>> 0) * (a >>> 16);
carry = Math.floor(x2 / 65536);
var x3=x1 + x2 % 65536 * 65536;
nat1.data[ofs1 + i] = x3;
carry += Math.floor(x3 / 4294967296)}
return len2 < len1 && carry
?add_nat
(nat1,ofs1 + len2,len1 - len2,nat_of_array([carry]),0,1,0)
:carry}
function decr_nat(nat,ofs,len,carry_in)
{var borrow=carry_in == 1?0:1;
for(var i=0;i < len;i++)
{var x=(nat.data[ofs + i] >>> 0) - borrow;
nat.data[ofs + i] = x;
if(x >= 0){borrow = 0;break}else borrow = 1}
return borrow == 1?0:1}
function sub_nat(nat1,ofs1,len1,nat2,ofs2,len2,carry_in)
{var borrow=carry_in == 1?0:1;
for(var i=0;i < len2;i++)
{var
x=
(nat1.data[ofs1 + i] >>> 0) - (nat2.data[ofs2 + i] >>> 0) - borrow;
nat1.data[ofs1 + i] = x;
if(x >= 0)borrow = 0;else borrow = 1}
return decr_nat(nat1,ofs1 + len2,len1 - len2,borrow == 1?0:1)}
function compare_nat(nat1,ofs1,len1,nat2,ofs2,len2)
{var a=num_digits_nat(nat1,ofs1,len1),b=num_digits_nat(nat2,ofs2,len2);
if(a > b)return 1;
if(a < b)return - 1;
for(var i=len1 - 1;i >= 0;i--)
{if(nat1.data[ofs1 + i] >>> 0 > nat2.data[ofs2 + i] >>> 0)return 1;
if(nat1.data[ofs1 + i] >>> 0 < nat2.data[ofs2 + i] >>> 0)return - 1}
return 0}
function div_nat(nat1,ofs1,len1,nat2,ofs2,len2)
{if(len2 == 1)
{div_digit_nat(nat1,ofs1 + 1,nat1,ofs1,nat1,ofs1,len1,nat2,ofs2);
return 0}
var s=num_leading_zero_bits_in_digit(nat2,ofs2 + len2 - 1);
shift_left_nat(nat2,ofs2,len2,nat_of_array([0]),0,s);
shift_left_nat(nat1,ofs1,len1,nat_of_array([0]),0,s);
var d=(nat2.data[ofs2 + len2 - 1] >>> 0) + 1,a=create_nat(len2 + 1);
for(var i=len1 - 1;i >= len2;i--)
{var
quo=
d == 4294967296
?nat1.data[ofs1 + i] >>> 0
:div_helper
(nat1.data[ofs1 + i] >>> 0,nat1.data[ofs1 + i - 1] >>> 0,d)
[0];
set_to_zero_nat(a,0,len2 + 1);
mult_digit_nat(a,0,len2 + 1,nat2,ofs2,len2,nat_of_array([quo]),0);
sub_nat(nat1,ofs1 + i - len2,len2 + 1,a,0,len2 + 1,1);
while
(nat1.data[ofs1 + i]
!=
0
||
compare_nat(nat1,ofs1 + i - len2,len2,nat2,ofs2,len2)
>=
0)
{quo = quo + 1;
sub_nat(nat1,ofs1 + i - len2,len2 + 1,nat2,ofs2,len2,1)}
nat1.data[ofs1 + i] = quo}
shift_right_nat(nat1,ofs1,len2,nat_of_array([0]),0,s);
shift_right_nat(nat2,ofs2,len2,nat_of_array([0]),0,s);
return 0}
function caml_ba_blit(src,dst)
{if(dst.dims.length != src.dims.length)
caml_invalid_argument("Bigarray.blit: dimension mismatch");
for(var i=0;i < dst.dims.length;i++)
if(dst.dims[i] != src.dims[i])
caml_invalid_argument("Bigarray.blit: dimension mismatch");
dst.data.set(src.data);
return 0}
function is_digit_int(nat,ofs){if(nat.data[ofs] >= 0)return 1;return 0}
function caml_int64_div(x,y){return x.div(y)}
function caml_js_html_entities(s)
{var entity=/^&#?[0-9a-zA-Z]+;$/;
if(s.match(entity))
{var str,temp=document.createElement("p");
temp.innerHTML = s;
str = temp.textContent || temp.innerText;
temp = null;
return str}
else
caml_failwith("Invalid entity " + s)}
function caml_string_unsafe_set(s,i,c)
{return caml_bytes_unsafe_set(s,i,c)}
function caml_int64_of_float(x)
{if(x < 0)x = Math.ceil(x);
return new
MlInt64
(x & 0xffffff,
Math.floor(x * caml_int64_offset) & 0xffffff,
Math.floor(x * caml_int64_offset * caml_int64_offset) & 0xffff)}
function caml_ml_channel_size_64(chanid)
{var chan=caml_ml_channels[chanid];
return caml_int64_of_float(chan.file.length())}
function caml_ba_set_2(ba,i0,i1,v){ba.set(ba.offset([i0,i1]),v);return 0}
var
caml_argv=
function()
{var g=globalThis,main="a.out",args=[];
if(g.process && g.process.argv && g.process.argv.length > 1)
{var argv=g.process.argv;main = argv[1];args = argv.slice(2)}
var p=caml_string_of_jsstring(main),args2=[0,p];
for(var i=0;i < args.length;i++)
args2.push(caml_string_of_jsstring(args[i]));
return args2}
(),
caml_executable_name=caml_argv[1];
function caml_js_eval_string(s){return eval(caml_jsstring_of_string(s))}
function serialize_nat(writer,nat,sz)
{var len=nat.data.length;
writer.write(32,len);
for(var i=0;i < len;i++)writer.write(32,nat.data[i]);
sz[0] = len * 4;
sz[1] = len * 8}
function caml_memprof_set(_control){return 0}
function caml_sys_exit(code)
{var g=globalThis;
if(g.quit)g.quit(code);
if(g.process && g.process.exit)g.process.exit(code);
caml_invalid_argument("Function 'exit' not implemented")}
function caml_channel_descriptor(chanid)
{var chan=caml_ml_channels[chanid];return chan.fd}
function caml_js_from_array(a){return a.slice(1)}
function caml_ba_reshape(ba,vind)
{vind = caml_js_from_array(vind);
var new_dim=[],num_dims=vind.length;
if(num_dims < 0 || num_dims > 16)
caml_invalid_argument("Bigarray.reshape: bad number of dimensions");
var num_elts=1;
for(var i=0;i < num_dims;i++)
{new_dim[i] = vind[i];
if(new_dim[i] < 0)
caml_invalid_argument("Bigarray.reshape: negative dimension");
num_elts = num_elts * new_dim[i]}
var size=caml_ba_get_size(ba.dims);
if(num_elts != size)
caml_invalid_argument("Bigarray.reshape: size mismatch");
return caml_ba_create_unsafe(ba.kind,ba.layout,new_dim,ba.data)}
var caml_oo_last_id=0;
function caml_set_oo_id(b){b[2] = caml_oo_last_id++;return b}
function caml_gr_fill_rect(x,y,w,h)
{var s=caml_gr_state_get();
s.context.fillRect(x,s.height - y,w,- h);
return 0}
function caml_bigstring_blit_string_to_ba(str1,pos1,ba2,pos2,len)
{if(12 != ba2.kind)
caml_invalid_argument
("caml_bigstring_blit_string_to_ba: kind mismatch");
if(len == 0)return 0;
var ofs2=ba2.offset(pos2);
if(pos1 + len > caml_ml_string_length(str1))caml_array_bound_error();
if(ofs2 + len > ba2.data.length)caml_array_bound_error();
var slice=caml_array_of_string(str1).slice(pos1,pos1 + len);
ba2.data.set(slice,ofs2);
return 0}
function caml_gr_set_window_title(name)
{var s=caml_gr_state_get();
s.title = name;
var jsname=caml_jsstring_of_string(name);
if(s.set_title)s.set_title(jsname);
return 0}
function caml_get_global_data(){return caml_global_data}
function caml_int64_shift_right_unsigned(x,s)
{return x.shift_right_unsigned(s)}
function caml_ba_uint8_get16(ba,i0)
{var ofs=ba.offset(i0);
if(ofs + 1 >= ba.data.length)caml_array_bound_error();
var b1=ba.get(ofs),b2=ba.get(ofs + 1);
return b1 | b2 << 8}
function caml_compare(a,b){return caml_compare_val(a,b,true)}
function caml_fresh_oo_id(){return caml_oo_last_id++}
function caml_int64_to_float(x){return x.toFloat()}
function caml_ba_get_1(ba,i0){return ba.get(ba.offset(i0))}
function caml_bigstring_memcmp(s1,pos1,s2,pos2,len)
{for(var i=0;i < len;i++)
{var a=caml_ba_get_1(s1,pos1 + i),b=caml_ba_get_1(s2,pos2 + i);
if(a < b)return - 1;
if(a > b)return 1}
return 0}
function caml_new_string(s){return caml_string_of_jsbytes(s)}
function caml_erf_float(x)
{var
a1=0.254829592,
a2=- 0.284496736,
a3=1.421413741,
a4=- 1.453152027,
a5=1.061405429,
p=0.3275911,
sign=1;
if(x < 0)sign = - 1;
x = Math.abs(x);
var
t=1.0 / (1.0 + p * x),
y=
1.0
-
((((a5 * t + a4) * t + a3) * t + a2) * t + a1)
*
t
*
Math.exp(- (x * x));
return sign * y}
function caml_ba_uint8_get32(ba,i0)
{var ofs=ba.offset(i0);
if(ofs + 3 >= ba.data.length)caml_array_bound_error();
var
b1=ba.get(ofs + 0),
b2=ba.get(ofs + 1),
b3=ba.get(ofs + 2),
b4=ba.get(ofs + 3);
return b1 << 0 | b2 << 8 | b3 << 16 | b4 << 24}
function caml_raw_backtrace_length(){return 0}
function caml_obj_block(tag,size)
{var o=new Array(size + 1);
o[0] = tag;
for(var i=1;i <= size;i++)o[i] = 0;
return o}
function caml_gr_clear_graph()
{var s=caml_gr_state_get();
s.canvas.width = s.width;
s.canvas.height = s.height;
return 0}
function bigstring_to_array_buffer(bs){return bs.data.buffer}
function caml_sys_const_naked_pointers_checked(_unit){return 0}
function lxor_digit_nat(nat1,ofs1,nat2,ofs2)
{nat1.data[ofs1] ^= nat2.data[ofs2];return 0}
function caml_obj_add_offset(v,offset)
{caml_failwith("Obj.add_offset is not supported")}
function caml_final_release(){return 0}
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}
function caml_gr_plot(x,y)
{var
s=caml_gr_state_get(),
im=s.context.createImageData(1,1),
d=im.data,
color=s.color;
d[0] = color >> 16 & 0xff;
d[1] = color >> 8 & 0xff,d[2] = color >> 0 & 0xff;
d[3] = 0xFF;
s.x = x;
s.y = y;
s.context.putImageData(im,x,s.height - y);
return 0}
function caml_bytes_set16(s,i,i16)
{if(i >>> 0 >= s.l - 1)caml_bytes_bound_error();
var b2=0xFF & i16 >> 8,b1=0xFF & i16;
caml_bytes_unsafe_set(s,i + 0,b1);
caml_bytes_unsafe_set(s,i + 1,b2);
return 0}
function caml_string_set16(s,i,i16){return caml_bytes_set16(s,i,i16)}
function caml_bytes_set64(s,i,i64)
{if(i >>> 0 >= s.l - 7)caml_bytes_bound_error();
var a=caml_int64_to_bytes(i64);
for(var j=0;j < 8;j++)caml_bytes_unsafe_set(s,i + 7 - j,a[j]);
return 0}
function caml_int64_bswap(x)
{var y=caml_int64_to_bytes(x);
return caml_int64_of_bytes([y[7],y[6],y[5],y[4],y[3],y[2],y[1],y[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}
var caml_fill_string=caml_fill_bytes;
function caml_gc_major(){return 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_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 unix_getuid(unit)
{if(globalThis.process && globalThis.process.getuid)
return globalThis.process.getuid();
caml_raise_not_found()}
function caml_sys_file_exists(name)
{var root=resolve_fs_device(name);return root.device.exists(root.rest)}
function caml_convert_raw_backtrace_slot()
{caml_failwith("caml_convert_raw_backtrace_slot")}
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_bytes_equal(s1,s2)
{if(s1 === s2)return 1;
s1.t & 6 && caml_convert_string_to_bytes(s1);
s2.t & 6 && caml_convert_string_to_bytes(s2);
return s1.c == s2.c?1:0}
function caml_gr_size_x(){var s=caml_gr_state_get();return s.width}
function caml_ml_debug_info_status(){return 0}
var
os_type=
globalThis.process
&&
globalThis.process.platform
&&
globalThis.process.platform
==
"win32"
?"Cygwin"
:"Unix";
function caml_sys_const_ostype_cygwin(){return os_type == "Cygwin"?1:0}
function caml_cosh_float(x){return Math.cosh(x)}
var caml_ephe_key_offset=3;
function caml_weak_check(x,i)
{return x[caml_ephe_key_offset + i]
!==
undefined
&&
x[caml_ephe_key_offset + i]
!==
0
?1
:0}
var caml_ephe_check_key=caml_weak_check;
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_gr_text_size(txt)
{var
s=caml_gr_state_get(),
w=s.context.measureText(caml_jsstring_of_string(txt)).width;
return [0,w,s.text_size]}
function caml_lex_run_mem(s,i,mem,curr_pos)
{for(;;)
{var dst=s.charCodeAt(i);
i++;
if(dst == 0xff)return;
var src=s.charCodeAt(i);
i++;
if(src == 0xff)
mem[dst + 1] = curr_pos;
else
mem[dst + 1] = mem[src + 1]}}
function caml_lex_run_tag(s,i,mem)
{for(;;)
{var dst=s.charCodeAt(i);
i++;
if(dst == 0xff)return;
var src=s.charCodeAt(i);
i++;
if(src == 0xff)mem[dst + 1] = - 1;else mem[dst + 1] = mem[src + 1]}}
function caml_new_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_mem=10,
lex_base=1,
lex_backtrk=2,
lex_default=3,
lex_trans=4,
lex_check=5,
lex_base_code=6,
lex_backtrk_code=7,
lex_default_code=8,
lex_trans_code=9,
lex_check_code=10,
lex_code=11;
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])}
if(! tbl.lex_default_code)
{tbl.lex_base_code = caml_lex_array(tbl[lex_base_code]);
tbl.lex_backtrk_code = caml_lex_array(tbl[lex_backtrk_code]);
tbl.lex_check_code = caml_lex_array(tbl[lex_check_code]);
tbl.lex_trans_code = caml_lex_array(tbl[lex_trans_code]);
tbl.lex_default_code = caml_lex_array(tbl[lex_default_code])}
if(tbl.lex_code == null)
tbl.lex_code = caml_jsbytes_of_string(tbl[lex_code]);
var c,state=start_state,buffer=caml_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)
{var pc_off=tbl.lex_base_code[state];
caml_lex_run_tag(tbl.lex_code,pc_off,lexbuf[lex_mem]);
return - base - 1}
var backtrk=tbl.lex_backtrk[state];
if(backtrk >= 0)
{var pc_off=tbl.lex_backtrk_code[state];
caml_lex_run_tag(tbl.lex_code,pc_off,lexbuf[lex_mem]);
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]++}
var pstate=state;
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
{var base_code=tbl.lex_base_code[pstate],pc_off;
if(tbl.lex_check_code[base_code + c] == pstate)
pc_off = tbl.lex_trans_code[base_code + c];
else
pc_off = tbl.lex_default_code[pstate];
if(pc_off > 0)
caml_lex_run_mem
(tbl.lex_code,pc_off,lexbuf[lex_mem],lexbuf[lex_curr_pos]);
if(c == 256)lexbuf[lex_eof_reached] = 0}}}
function caml_ba_uint8_set64(ba,i0,v)
{var ofs=ba.offset(i0);
if(ofs + 7 >= ba.data.length)caml_array_bound_error();
var v=caml_int64_to_bytes(v);
for(var i=0;i < 8;i++)ba.set(ofs + i,v[7 - i]);
return 0}
function caml_sys_executable_name(a){return caml_executable_name}
function caml_lessequal(x,y){return + (caml_compare_val(x,y,false) <= 0)}
function caml_acosh_float(x){return Math.acosh(x)}
function caml_ml_flush(chanid)
{var chan=caml_ml_channels[chanid];
if(! chan.opened)caml_raise_sys_error("Cannot flush a closed channel");
if(! chan.buffer || chan.buffer == "")return 0;
if
(chan.fd
&&
caml_global_data.fds[chan.fd]
&&
caml_global_data.fds[chan.fd].output)
{var output=caml_global_data.fds[chan.fd].output;
switch(output.length)
{case 2:output(chanid,chan.buffer);break;default:output(chan.buffer)}}
chan.buffer = "";
return 0}
function caml_ml_seek_out_64(chanid,pos)
{caml_ml_flush(chanid);
caml_ml_channels[chanid].offset = caml_int64_to_float(pos);
return 0}
function compare_nat_real(nat1,nat2)
{return compare_nat(nat1,0,nat1.data.length,nat2,0,nat2.data.length)}
function caml_gc_set(_control){return 0}
function caml_js_get(o,f){return o[f]}
function caml_ml_set_buffered(c,v){return 0}
function caml_gc_compaction(){return 0}
function caml_weak_get(x,i)
{if(i < 0 || caml_ephe_key_offset + i >= x.length)
caml_invalid_argument("Weak.get_key");
return x[caml_ephe_key_offset + i] === undefined
?0
:x[caml_ephe_key_offset + i]}
var caml_ephe_get_key=caml_weak_get;
function caml_bigstring_blit_bytes_to_ba(str1,pos1,ba2,pos2,len)
{if(12 != ba2.kind)
caml_invalid_argument
("caml_bigstring_blit_string_to_ba: kind mismatch");
if(len == 0)return 0;
var ofs2=ba2.offset(pos2);
if(pos1 + len > caml_ml_bytes_length(str1))caml_array_bound_error();
if(ofs2 + len > ba2.data.length)caml_array_bound_error();
var slice=caml_array_of_bytes(str1).slice(pos1,pos1 + len);
ba2.data.set(slice,ofs2);
return 0}
function win_cleanup(){}
function caml_sys_close(fd){delete caml_global_data.fds[fd];return 0}
function caml_ml_close_channel(chanid)
{var chan=caml_ml_channels[chanid];
caml_ml_flush(chanid);
chan.opened = false;
chan.file.close();
caml_sys_close(chan.fd);
return 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_sys_isatty(_chan){return 0}
function is_digit_zero(nat,ofs){if(nat.data[ofs] == 0)return 1;return 0}
function unix_inet_addr_of_string(){return 0}
function caml_js_set(o,f,v){o[f] = v;return 0}
function caml_array_get(array,index)
{if(index < 0 || index >= array.length - 1)caml_array_bound_error();
return array[index + 1]}
function caml_log2_float(x){return Math.log2(x)}
function caml_gc_huge_fallback_count(unit){return 0}
function caml_spacetime_only_works_for_native_code()
{caml_failwith("Spacetime profiling only works for native code")}
function caml_int64_sub(x,y){return x.sub(y)}
function caml_ml_seek_in_64(chanid,pos)
{var chan=caml_ml_channels[chanid];
if(chan.refill != null)caml_raise_sys_error("Illegal seek");
chan.offset = caml_int64_to_float(pos);
return 0}
function caml_int64_shift_left(x,s){return x.shift_left(s)}
function caml_notequal(x,y){return + (caml_compare_val(x,y,false) != 0)}
function caml_sys_const_int_size(){return 32}
function caml_js_wrap_meth_callback(f)
{return function()
{var len=arguments.length,args=new Array(len + 1);
args[0] = this;
for(var i=0;i < len;i++)args[i + 1] = arguments[i];
return caml_call_gen(f,args)}}
function caml_is_js(){return 1}
function caml_ba_dim(ba,i)
{if(i < 0 || i >= ba.dims.length)caml_invalid_argument("Bigarray.dim");
return ba.dims[i]}
function caml_ba_dim_1(ba){return caml_ba_dim(ba,0)}
function unix_localtime(t)
{var
d=new Date(t * 1000),
d_num=d.getTime(),
januaryfirst=new Date(d.getFullYear(),0,1).getTime(),
doy=Math.floor((d_num - januaryfirst) / 86400000),
jan=new Date(d.getFullYear(),0,1),
jul=new Date(d.getFullYear(),6,1),
stdTimezoneOffset=
Math.max(jan.getTimezoneOffset(),jul.getTimezoneOffset());
return [0,
d.getSeconds(),
d.getMinutes(),
d.getHours(),
d.getDate(),
d.getMonth(),
d.getFullYear() - 1900,
d.getDay(),
doy,
d.getTimezoneOffset() < stdTimezoneOffset | 0]}
function caml_js_meth_call(o,f,args)
{return o[caml_jsstring_of_string(f)].apply(o,caml_js_from_array(args))}
function caml_weak_create(n)
{if(n < 0)caml_invalid_argument("Weak.create");
var x=[251,"caml_ephe_list_head"];
x.length = caml_ephe_key_offset + n;
return x}
var caml_ephe_create=caml_weak_create;
function caml_js_to_byte_string(s){return caml_string_of_jsbytes(s)}
function unix_mktime(tm)
{var
d=new Date(tm[6] + 1900,tm[5],tm[4],tm[3],tm[2],tm[1]).getTime(),
t=Math.floor(d / 1000),
tm2=unix_localtime(t);
return [0,t,tm2]}
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_bytes_get64(s,i)
{if(i >>> 0 >= s.l - 7)caml_bytes_bound_error();
var a=new Array(8);
for(var j=0;j < 8;j++)a[7 - j] = caml_bytes_unsafe_get(s,i + j);
return caml_int64_of_bytes(a)}
function caml_weak_set(x,i,v)
{if(i < 0 || caml_ephe_key_offset + i >= x.length)
caml_invalid_argument("Weak.set");
x[caml_ephe_key_offset + i] = v;
return 0}
function caml_sys_remove(name)
{var root=resolve_fs_device(name),ok=root.device.unlink(root.rest);
if(ok == 0)caml_raise_no_such_file(caml_jsbytes_of_string(name));
return 0}
function caml_string_bound_error()
{caml_invalid_argument("index out of bounds")}
function caml_string_get32(s,i)
{if(i >>> 0 >= caml_ml_string_length(s) - 3)caml_string_bound_error();
var
b1=caml_string_unsafe_get(s,i),
b2=caml_string_unsafe_get(s,i + 1),
b3=caml_string_unsafe_get(s,i + 2),
b4=caml_string_unsafe_get(s,i + 3);
return b4 << 24 | b3 << 16 | b2 << 8 | b1}
function caml_hypot_float(x,y){return Math.hypot(x,y)}
function caml_js_call(f,o,args)
{return f.apply(o,caml_js_from_array(args))}
function caml_sys_const_max_wosize(){return 0x7FFFFFFF / 4 | 0}
function caml_ephe_unset_key(x,i){return caml_weak_set(x,i,0)}
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_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_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_bytes_lessthan(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:0}
function caml_erfc_float(x){return 1 - caml_erf_float(x)}
function caml_gr_fill_poly(ar)
{var s=caml_gr_state_get();
s.context.beginPath();
s.context.moveTo(ar[1][1],s.height - ar[1][2]);
for(var i=2;i < ar.length;i++)
s.context.lineTo(ar[i][1],s.height - ar[i][2]);
s.context.lineTo(ar[1][1],s.height - ar[1][2]);
s.context.fill();
return 0}
function caml_gc_quick_stat(){return [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}
function caml_raise_end_of_file()
{caml_raise_constant(caml_global_data.End_of_file)}
function caml_ml_input_int(chanid)
{var chan=caml_ml_channels[chanid],file=chan.file;
while(chan.offset + 3 >= file.length())
{var l=caml_ml_refill_input(chan);if(l == 0)caml_raise_end_of_file()}
var
o=chan.offset,
r=
file.read_one(o)
<<
24
|
file.read_one(o + 1)
<<
16
|
file.read_one(o + 2)
<<
8
|
file.read_one(o + 3);
chan.offset += 4;
return r}
function caml_gr_display_mode()
{caml_failwith("caml_gr_display_mode not Implemented")}
function caml_obj_reachable_words(o){return 0}
function nth_digit_nat(nat,ofs){return nat.data[ofs]}
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_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_sys_getcwd()
{return caml_string_of_jsbytes(caml_current_dir)}
function caml_sys_const_big_endian(){return 0}
function caml_list_to_js_array(l)
{var a=[];for(;l !== 0;l = l[2])a.push(l[1]);return a}
var
caml_legacy_custom_code=false,
caml_output_val=
function()
{function Writer(){this.chunk = []}
Writer.prototype
=
{chunk_idx:20,
block_len:0,
obj_counter:0,
size_32:0,
size_64:0,
write:
function(size,value)
{for(var i=size - 8;i >= 0;i -= 8)
this.chunk[this.chunk_idx++] = value >> i & 0xFF},
write_at:
function(pos,size,value)
{var pos=pos;
for(var i=size - 8;i >= 0;i -= 8)
this.chunk[pos++] = value >> i & 0xFF},
write_code:
function(size,code,value)
{this.chunk[this.chunk_idx++] = code;
for(var i=size - 8;i >= 0;i -= 8)
this.chunk[this.chunk_idx++] = value >> i & 0xFF},
write_shared:
function(offset)
{if(offset < 1 << 8)
this.write_code(8,0x04,offset);
else
if(offset < 1 << 16)
this.write_code(16,0x05,offset);
else
this.write_code(32,0x06,offset)},
pos:function(){return this.chunk_idx},
finalize:
function()
{this.block_len = this.chunk_idx - 20;
this.chunk_idx = 0;
this.write(32,0x8495A6BE);
this.write(32,this.block_len);
this.write(32,this.obj_counter);
this.write(32,this.size_32);
this.write(32,this.size_64);
return this.chunk}};
return function(v,flags)
{flags = caml_list_to_js_array(flags);
var
no_sharing=flags.indexOf(0) !== - 1,
closures=flags.indexOf(1) !== - 1;
if(closures)
globalThis.console.warn
("in caml_output_val: flag Marshal.Closures is not supported.");
var
writer=new Writer(),
stack=[],
intern_obj_table=no_sharing?null:new MlObjectTable();
function memo(v)
{if(no_sharing)return false;
var existing_offset=intern_obj_table.recall(v);
if(existing_offset)
{writer.write_shared(existing_offset);return true}
else
{intern_obj_table.store(v);return false}}
function extern_rec(v)
{if(v.caml_custom)
{if(memo(v))return;
var
name=v.caml_custom,
ops=caml_custom_ops[name],
sz_32_64=[0,0];
if(! ops.serialize)
caml_invalid_argument("output_value: abstract value (Custom)");
if(caml_legacy_custom_code)
{writer.write(8,0x12);
for(var i=0;i < name.length;i++)
writer.write(8,name.charCodeAt(i));
writer.write(8,0);
ops.serialize(writer,v,sz_32_64)}
else
if(ops.fixed_length == undefined)
{writer.write(8,0x18);
for(var i=0;i < name.length;i++)
writer.write(8,name.charCodeAt(i));
writer.write(8,0);
var header_pos=writer.pos();
for(var i=0;i < 12;i++)writer.write(8,0);
ops.serialize(writer,v,sz_32_64);
writer.write_at(header_pos,32,sz_32_64[0]);
writer.write_at(header_pos + 4,32,0);
writer.write_at(header_pos + 8,32,sz_32_64[1])}
else
{writer.write(8,0x19);
for(var i=0;i < name.length;i++)
writer.write(8,name.charCodeAt(i));
writer.write(8,0);
var old_pos=writer.pos();
ops.serialize(writer,v,sz_32_64);
if(ops.fixed_length != writer.pos() - old_pos)
caml_failwith
("output_value: incorrect fixed sizes specified by " + name)}
writer.size_32 += 2 + (sz_32_64[0] + 3 >> 2);
writer.size_64 += 2 + (sz_32_64[1] + 7 >> 3)}
else
if(v instanceof Array && v[0] === (v[0] | 0))
{if(v[0] == 251)
caml_failwith("output_value: abstract value (Abstract)");
if(v.length > 1 && memo(v))return;
if(v[0] < 16 && v.length - 1 < 8)
writer.write(8,0x80 + v[0] + (v.length - 1 << 4));
else
writer.write_code(32,0x08,v.length - 1 << 10 | v[0]);
writer.size_32 += v.length;
writer.size_64 += v.length;
if(v.length > 1)stack.push(v,1)}
else
if(caml_is_ml_bytes(v))
{if(! caml_is_ml_bytes(caml_string_of_jsbytes("")))
caml_failwith
("output_value: [Bytes.t] cannot safely be marshaled with [--enable use-js-string]");
if(memo(v))return;
var len=caml_ml_bytes_length(v);
if(len < 0x20)
writer.write(8,0x20 + len);
else
if(len < 0x100)
writer.write_code(8,0x09,len);
else
writer.write_code(32,0x0A,len);
for(var i=0;i < len;i++)
writer.write(8,caml_bytes_unsafe_get(v,i));
writer.size_32 += 1 + ((len + 4) / 4 | 0);
writer.size_64 += 1 + ((len + 8) / 8 | 0)}
else
if(caml_is_ml_string(v))
{var len=caml_ml_string_length(v);
if(len < 0x20)
writer.write(8,0x20 + len);
else
if(len < 0x100)
writer.write_code(8,0x09,len);
else
writer.write_code(32,0x0A,len);
for(var i=0;i < len;i++)
writer.write(8,caml_string_unsafe_get(v,i));
writer.size_32 += 1 + ((len + 4) / 4 | 0);
writer.size_64 += 1 + ((len + 8) / 8 | 0)}
else
if(v != (v | 0))
{var type_of_v=typeof v;
caml_failwith
("output_value: abstract value (" + type_of_v + ")")}
else
if(v >= 0 && v < 0x40)
writer.write(8,0X40 + v);
else
if(v >= - (1 << 7) && v < 1 << 7)
writer.write_code(8,0x00,v);
else
if(v >= - (1 << 15) && v < 1 << 15)
writer.write_code(16,0x01,v);
else
writer.write_code(32,0x02,v)}
extern_rec(v);
while(stack.length > 0)
{var i=stack.pop(),v=stack.pop();
if(i + 1 < v.length)stack.push(v,i + 1);
extern_rec(v[i])}
if(intern_obj_table)
writer.obj_counter = intern_obj_table.objs.length;
writer.finalize();
return writer.chunk}}
();
function caml_string_of_array(a)
{return caml_string_of_jsbytes(caml_subarray_to_jsbytes(a,0,a.length))}
function caml_output_value_to_string(v,flags)
{return caml_string_of_array(caml_output_val(v,flags))}
function caml_raise_not_a_dir(name)
{caml_raise_sys_error(name + ": Not a directory")}
function caml_sys_system_command(cmd)
{var cmd=caml_jsstring_of_string(cmd);
if
(typeof require
!=
"undefined"
&&
require("child_process")
&&
require("child_process").execSync)
try
{require("child_process").execSync(cmd,{stdio:"inherit"});return 0}
catch(e){return 1}
else
return 127}
function unix_isatty(fileDescriptor)
{if(fs_node_supported())
{var tty=require("tty");return tty.isatty(fileDescriptor)?1:0}
else
return 0}
function caml_js_error_of_exception(exn)
{if(exn.js_error)return exn.js_error;return null}
function deserialize_nat(reader,sz)
{var len=reader.read32s(),nat=new MlNat(len);
for(var i=0;i < len;i++)nat.data[i] = reader.read32s();
sz[0] = len * 4;
return nat}
function initialize_nat()
{caml_custom_ops["_nat"]
=
{deserialize:deserialize_nat,serialize:serialize_nat,hash:caml_hash_nat}}
function caml_gr_open_subwindow(a,b,c,d)
{caml_failwith("caml_gr_open_subwindow not Implemented")}
function unix_lstat(name)
{var root=resolve_fs_device(name);
if(! root.device.lstat)caml_failwith("unix_lstat: not implemented");
return root.device.lstat(root.rest,true)}
var unix_lstat_64=unix_lstat;
function js_print_stdout(s)
{var s=caml_utf16_of_utf8(s),g=globalThis;
if(g.process && g.process.stdout && g.process.stdout.write)
g.process.stdout.write(s);
else
{if(s.charCodeAt(s.length - 1) == 10)s = s.substr(0,s.length - 1);
var v=g.console;
v && v.log && v.log(s)}}
function caml_copysign_float(x,y)
{if(y == 0)y = 1 / y;x = Math.abs(x);return y < 0?- x:x}
function caml_gr_set_text_size(size)
{var s=caml_gr_state_get();
s.text_size = size;
s.context.font = s.text_size + "px " + caml_jsstring_of_string(s.font);
return 0}
var
caml_md5_bytes=
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)}
function md5(buffer,length)
{var i=length;
buffer[i >> 2] |= 0x80 << 8 * (i & 3);
for(i = (i & ~ 0x3) + 8;(i & 0x3F) < 60;i += 4)
buffer[(i >> 2) - 1] = 0;
buffer[(i >> 2) - 1] = length << 3;
buffer[i >> 2] = length >> 29 & 0x1FFFFFFF;
var w=[0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476];
for(i = 0;i < buffer.length;i += 16)
{var a=w[0],b=w[1],c=w[2],d=w[3];
a = ff(a,b,c,d,buffer[i + 0],7,0xD76AA478);
d = ff(d,a,b,c,buffer[i + 1],12,0xE8C7B756);
c = ff(c,d,a,b,buffer[i + 2],17,0x242070DB);
b = ff(b,c,d,a,buffer[i + 3],22,0xC1BDCEEE);
a = ff(a,b,c,d,buffer[i + 4],7,0xF57C0FAF);
d = ff(d,a,b,c,buffer[i + 5],12,0x4787C62A);
c = ff(c,d,a,b,buffer[i + 6],17,0xA8304613);
b = ff(b,c,d,a,buffer[i + 7],22,0xFD469501);
a = ff(a,b,c,d,buffer[i + 8],7,0x698098D8);
d = ff(d,a,b,c,buffer[i + 9],12,0x8B44F7AF);
c = ff(c,d,a,b,buffer[i + 10],17,0xFFFF5BB1);
b = ff(b,c,d,a,buffer[i + 11],22,0x895CD7BE);
a = ff(a,b,c,d,buffer[i + 12],7,0x6B901122);
d = ff(d,a,b,c,buffer[i + 13],12,0xFD987193);
c = ff(c,d,a,b,buffer[i + 14],17,0xA679438E);
b = ff(b,c,d,a,buffer[i + 15],22,0x49B40821);
a = gg(a,b,c,d,buffer[i + 1],5,0xF61E2562);
d = gg(d,a,b,c,buffer[i + 6],9,0xC040B340);
c = gg(c,d,a,b,buffer[i + 11],14,0x265E5A51);
b = gg(b,c,d,a,buffer[i + 0],20,0xE9B6C7AA);
a = gg(a,b,c,d,buffer[i + 5],5,0xD62F105D);
d = gg(d,a,b,c,buffer[i + 10],9,0x02441453);
c = gg(c,d,a,b,buffer[i + 15],14,0xD8A1E681);
b = gg(b,c,d,a,buffer[i + 4],20,0xE7D3FBC8);
a = gg(a,b,c,d,buffer[i + 9],5,0x21E1CDE6);
d = gg(d,a,b,c,buffer[i + 14],9,0xC33707D6);
c = gg(c,d,a,b,buffer[i + 3],14,0xF4D50D87);
b = gg(b,c,d,a,buffer[i + 8],20,0x455A14ED);
a = gg(a,b,c,d,buffer[i + 13],5,0xA9E3E905);
d = gg(d,a,b,c,buffer[i + 2],9,0xFCEFA3F8);
c = gg(c,d,a,b,buffer[i + 7],14,0x676F02D9);
b = gg(b,c,d,a,buffer[i + 12],20,0x8D2A4C8A);
a = hh(a,b,c,d,buffer[i + 5],4,0xFFFA3942);
d = hh(d,a,b,c,buffer[i + 8],11,0x8771F681);
c = hh(c,d,a,b,buffer[i + 11],16,0x6D9D6122);
b = hh(b,c,d,a,buffer[i + 14],23,0xFDE5380C);
a = hh(a,b,c,d,buffer[i + 1],4,0xA4BEEA44);
d = hh(d,a,b,c,buffer[i + 4],11,0x4BDECFA9);
c = hh(c,d,a,b,buffer[i + 7],16,0xF6BB4B60);
b = hh(b,c,d,a,buffer[i + 10],23,0xBEBFBC70);
a = hh(a,b,c,d,buffer[i + 13],4,0x289B7EC6);
d = hh(d,a,b,c,buffer[i + 0],11,0xEAA127FA);
c = hh(c,d,a,b,buffer[i + 3],16,0xD4EF3085);
b = hh(b,c,d,a,buffer[i + 6],23,0x04881D05);
a = hh(a,b,c,d,buffer[i + 9],4,0xD9D4D039);
d = hh(d,a,b,c,buffer[i + 12],11,0xE6DB99E5);
c = hh(c,d,a,b,buffer[i + 15],16,0x1FA27CF8);
b = hh(b,c,d,a,buffer[i + 2],23,0xC4AC5665);
a = ii(a,b,c,d,buffer[i + 0],6,0xF4292244);
d = ii(d,a,b,c,buffer[i + 7],10,0x432AFF97);
c = ii(c,d,a,b,buffer[i + 14],15,0xAB9423A7);
b = ii(b,c,d,a,buffer[i + 5],21,0xFC93A039);
a = ii(a,b,c,d,buffer[i + 12],6,0x655B59C3);
d = ii(d,a,b,c,buffer[i + 3],10,0x8F0CCC92);
c = ii(c,d,a,b,buffer[i + 10],15,0xFFEFF47D);
b = ii(b,c,d,a,buffer[i + 1],21,0x85845DD1);
a = ii(a,b,c,d,buffer[i + 8],6,0x6FA87E4F);
d = ii(d,a,b,c,buffer[i + 15],10,0xFE2CE6E0);
c = ii(c,d,a,b,buffer[i + 6],15,0xA3014314);
b = ii(b,c,d,a,buffer[i + 13],21,0x4E0811A1);
a = ii(a,b,c,d,buffer[i + 4],6,0xF7537E82);
d = ii(d,a,b,c,buffer[i + 11],10,0xBD3AF235);
c = ii(c,d,a,b,buffer[i + 2],15,0x2AD7D2BB);
b = ii(b,c,d,a,buffer[i + 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])}
var t=new Array(16);
for(var i=0;i < 4;i++)
for(var j=0;j < 4;j++)t[i * 4 + j] = w[i] >> 8 * j & 0xFF;
return t}
return function(s,ofs,len)
{var buf=[],content=caml_ml_bytes_content(s);
if(typeof content === "string")
{var b=content;
for(var i=0;i < len;i += 4)
{var j=i + ofs;
buf[i >> 2]
=
b.charCodeAt(j)
|
b.charCodeAt(j + 1)
<<
8
|
b.charCodeAt(j + 2)
<<
16
|
b.charCodeAt(j + 3)
<<
24}
for(;i < len;i++)
buf[i >> 2] |= b.charCodeAt(i + ofs) << 8 * (i & 3)}
else
{var a=content;
for(var i=0;i < len;i += 4)
{var j=i + ofs;
buf[i >> 2]
=
a[j]
|
a[j + 1]
<<
8
|
a[j + 2]
<<
16
|
a[j + 3]
<<
24}
for(;i < len;i++)buf[i >> 2] |= a[i + ofs] << 8 * (i & 3)}
return caml_string_of_array(md5(buf,len))}}
();
function caml_ba_set_generic(ba,i,v)
{ba.set(ba.offset(caml_js_from_array(i)),v);return 0}
function caml_ephe_set_key(x,i,v){return caml_weak_set(x,i,[0,v])}
function caml_bytes_lessequal(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:0}
function caml_string_lessequal(s1,s2){return caml_bytes_lessequal(s1,s2)}
function caml_string_greaterequal(s1,s2)
{return caml_string_lessequal(s2,s1)}
function caml_int64_add(x,y){return x.add(y)}
function caml_nextafter_float(x,y)
{if(isNaN(x) || isNaN(y))return NaN;
if(x == y)return y;
if(x == 0)return y < 0?- Math.pow(2,- 1074):Math.pow(2,- 1074);
var bits=caml_int64_bits_of_float(x),one=caml_int64_of_int32(1);
if(x < y == x > 0)
bits = caml_int64_add(bits,one);
else
bits = caml_int64_sub(bits,one);
return caml_int64_float_of_bits(bits)}
function caml_gr_size_y(){var s=caml_gr_state_get();return s.height}
function caml_ml_pos_in(chanid){return caml_ml_channels[chanid].offset}
function caml_int64_and(x,y){return x.and(y)}
function caml_sys_const_word_size(){return 32}
function caml_std_output(chanid,s)
{var
chan=caml_ml_channels[chanid],
str=caml_string_of_jsbytes(s),
slen=caml_ml_string_length(str);
chan.file.write(chan.offset,str,0,slen);
chan.offset += slen;
return 0}
function js_print_stderr(s)
{var s=caml_utf16_of_utf8(s),g=globalThis;
if(g.process && g.process.stdout && g.process.stdout.write)
g.process.stderr.write(s);
else
{if(s.charCodeAt(s.length - 1) == 10)s = s.substr(0,s.length - 1);
var v=g.console;
v && v.error && v.error(s)}}
function caml_sys_open_internal(idx,output,file,flags)
{if(caml_global_data.fds === undefined)
caml_global_data.fds = new Array();
flags = flags?flags:{};
var info={};
info.file = file;
info.offset = flags.append?file.length():0;
info.flags = flags;
info.output = output;
caml_global_data.fds[idx] = info;
if(! caml_global_data.fd_last_idx || idx > caml_global_data.fd_last_idx)
caml_global_data.fd_last_idx = idx;
return idx}
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),
idx=caml_global_data.fd_last_idx?caml_global_data.fd_last_idx:0;
return caml_sys_open_internal(idx + 1,caml_std_output,file,f)}
caml_sys_open_internal
(0,caml_std_output,new MlFakeFile(caml_create_bytes(0)));
caml_sys_open_internal
(1,js_print_stdout,new MlFakeFile(caml_create_bytes(0)));
caml_sys_open_internal
(2,js_print_stderr,new MlFakeFile(caml_create_bytes(0)));
function MlStringReader(s,i)
{this.s = caml_jsbytes_of_string(s);this.i = i}
MlStringReader.prototype
=
{read8u:function(){return this.s.charCodeAt(this.i++)},
read8s:function(){return this.s.charCodeAt(this.i++) << 24 >> 24},
read16u:
function()
{var s=this.s,i=this.i;
this.i = i + 2;
return s.charCodeAt(i) << 8 | s.charCodeAt(i + 1)},
read16s:
function()
{var s=this.s,i=this.i;
this.i = i + 2;
return s.charCodeAt(i) << 24 >> 16 | s.charCodeAt(i + 1)},
read32u:
function()
{var s=this.s,i=this.i;
this.i = i + 4;
return (s.charCodeAt(i)
<<
24
|
s.charCodeAt(i + 1)
<<
16
|
s.charCodeAt(i + 2)
<<
8
|
s.charCodeAt(i + 3))
>>>
0},
read32s:
function()
{var s=this.s,i=this.i;
this.i = i + 4;
return s.charCodeAt(i)
<<
24
|
s.charCodeAt(i + 1)
<<
16
|
s.charCodeAt(i + 2)
<<
8
|
s.charCodeAt(i + 3)},
readstr:
function(len)
{var i=this.i;
this.i = i + len;
return caml_string_of_jsbytes(this.s.substring(i,i + len))}};
function caml_float_of_bytes(a)
{return caml_int64_float_of_bits(caml_int64_of_bytes(a))}
function caml_input_value_from_reader(reader,ofs)
{var
_magic=reader.read32u(),
_block_len=reader.read32u(),
num_objects=reader.read32u(),
_size_32=reader.read32u(),
_size_64=reader.read32u(),
stack=[],
intern_obj_table=num_objects > 0?[]:null,
obj_counter=0;
function intern_rec()
{var code=reader.read8u();
if(code >= 0x40)
if(code >= 0x80)
{var tag=code & 0xF,size=code >> 4 & 0x7,v=[tag];
if(size == 0)return v;
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
stack.push(v,size);
return v}
else
return code & 0x3F;
else
if(code >= 0x20)
{var len=code & 0x1F,v=reader.readstr(len);
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
return v}
else
switch(code)
{case 0x00:return reader.read8s();
case 0x01:return reader.read16s();
case 0x02:return reader.read32s();
case 0x03:caml_failwith("input_value: integer too large");break;
case 0x04:
var offset=reader.read8u();
return intern_obj_table[obj_counter - offset];
case 0x05:
var offset=reader.read16u();
return intern_obj_table[obj_counter - offset];
case 0x06:
var offset=reader.read32u();
return intern_obj_table[obj_counter - offset];
case 0x08:
var
header=reader.read32u(),
tag=header & 0xFF,
size=header >> 10,
v=[tag];
if(size == 0)return v;
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
stack.push(v,size);
return v;
case 0x13:
caml_failwith("input_value: data block too large");break;
case 0x09:
var len=reader.read8u(),v=reader.readstr(len);
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
return v;
case 0x0A:
var len=reader.read32u(),v=reader.readstr(len);
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
return v;
case 0x0C:
var t=new Array(8);
for(var i=0;i < 8;i++)t[7 - i] = reader.read8u();
var v=caml_float_of_bytes(t);
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
return v;
case 0x0B:
var t=new Array(8);
for(var i=0;i < 8;i++)t[i] = reader.read8u();
var v=caml_float_of_bytes(t);
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
return v;
case 0x0E:
var len=reader.read8u(),v=new Array(len + 1);
v[0] = 254;
var t=new Array(8);
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
for(var i=1;i <= len;i++)
{for(var j=0;j < 8;j++)t[7 - j] = reader.read8u();
v[i] = caml_float_of_bytes(t)}
return v;
case 0x0D:
var len=reader.read8u(),v=new Array(len + 1);
v[0] = 254;
var t=new Array(8);
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
for(var i=1;i <= len;i++)
{for(var j=0;j < 8;j++)t[j] = reader.read8u();
v[i] = caml_float_of_bytes(t)}
return v;
case 0x07:
var len=reader.read32u(),v=new Array(len + 1);
v[0] = 254;
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
var t=new Array(8);
for(var i=1;i <= len;i++)
{for(var j=0;j < 8;j++)t[7 - j] = reader.read8u();
v[i] = caml_float_of_bytes(t)}
return v;
case 0x0F:
var len=reader.read32u(),v=new Array(len + 1);
v[0] = 254;
var t=new Array(8);
for(var i=1;i <= len;i++)
{for(var j=0;j < 8;j++)t[j] = reader.read8u();
v[i] = caml_float_of_bytes(t)}
return v;
case 0x10:
case 0x11:caml_failwith("input_value: code pointer");break;
case 0x12:
case 0x18:
case 0x19:
var c,s="";
while((c = reader.read8u()) != 0)s += String.fromCharCode(c);
var ops=caml_custom_ops[s],expected_size;
if(! ops)
caml_failwith("input_value: unknown custom block identifier");
switch(code)
{case 0x12:break;
case 0x19:
if(! ops.fixed_length)
caml_failwith
("input_value: expected a fixed-size custom block");
expected_size = ops.fixed_length;
break;
case 0x18:
expected_size = reader.read32u();
reader.read32s();
reader.read32s();
break
}
var old_pos=reader.i,size=[0],v=ops.deserialize(reader,size);
if(expected_size != undefined)
if(expected_size != size[0])
caml_failwith
("input_value: incorrect length of serialized custom block");
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
return v;
default:caml_failwith("input_value: ill-formed message")}}
var res=intern_rec();
while(stack.length > 0)
{var size=stack.pop(),v=stack.pop(),d=v.length;
if(d < size)stack.push(v,size);
v[d] = intern_rec()}
if(typeof ofs != "number")ofs[0] = reader.i;
return res}
function caml_string_of_bytes(s){return s}
function caml_input_value_from_bytes(s,ofs)
{var
reader=
new
MlStringReader
(caml_string_of_bytes(s),typeof ofs == "number"?ofs:ofs[0]);
return caml_input_value_from_reader(reader,ofs)}
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)}
var
re_match=
function()
{var
re_word_letters=
[0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xFF,
0x03,
0xFE,
0xFF,
0xFF,
0x87,
0xFE,
0xFF,
0xFF,
0x07,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xFF,
0xFF,
0x7F,
0xFF,
0xFF,
0xFF,
0x7F,
0xFF],
opcodes=
{CHAR:0,
CHARNORM:1,
STRING:2,
STRINGNORM:3,
CHARCLASS:4,
BOL:5,
EOL:6,
WORDBOUNDARY:7,
BEGGROUP:8,
ENDGROUP:9,
REFGROUP:10,
ACCEPT:11,
SIMPLEOPT:12,
SIMPLESTAR:13,
SIMPLEPLUS:14,
GOTO:15,
PUSHBACK:16,
SETMARK:17,
CHECKPROGRESS:18};
function is_word_letter(c)
{return re_word_letters[c >> 3] >> (c & 7) & 1}
function in_bitset(s,i)
{return caml_string_get(s,i >> 3) >> (i & 7) & 1}
function re_match_impl(re,s,pos,partial)
{var
prog=caml_js_from_array(re[1]),
cpool=caml_js_from_array(re[2]),
normtable=caml_jsbytes_of_string(re[3]),
numgroups=re[4] | 0,
numregisters=re[5] | 0,
startchars=re[6] | 0,
s=caml_array_of_string(s),
pc=0,
quit=false,
stack=[],
groups=new Array(numgroups),
re_register=new Array(numregisters);
for(var i=0;i < groups.length;i++)groups[i] = {start:- 1,end:- 1};
groups[0].start = pos;
function backtrack()
{while(stack.length)
{var item=stack.pop();
if(item.undo)
item.undo.obj[item.undo.prop] = item.undo.value;
else
if(item.pos){pc = item.pos.pc;pos = item.pos.txt;return}}
quit = true}
function push(item){stack.push(item)}
function accept()
{groups[0].end = pos;
var result=new Array(1 + groups.length * 2);
result[0] = 0;
for(var i=0;i < groups.length;i++)
{var g=groups[i];
if(g.start < 0 || g.end < 0)g.start = g.end = - 1;
result[2 * i + 1] = g.start;
result[2 * i + 1 + 1] = g.end}
return result}
function prefix_match()
{if(partial)return accept();else backtrack()}
while(! quit)
{var
op=prog[pc] & 0xff,
sarg=prog[pc] >> 8,
uarg=sarg & 0xff,
c=s[pos],
group;
pc++;
switch(op)
{case opcodes.CHAR:
if(pos === s.length){prefix_match();break}
if(c === uarg)pos++;else backtrack();
break;
case opcodes.CHARNORM:
if(pos === s.length){prefix_match();break}
if(normtable.charCodeAt(c) === uarg)pos++;else backtrack();
break;
case opcodes.STRING:
for
(var arg=caml_jsbytes_of_string(cpool[uarg]),i=0;
i
<
arg.length;
i++)
{if(pos === s.length){prefix_match();break}
if(c === arg.charCodeAt(i))
c = s[++pos];
else
{backtrack();break}}
break;
case opcodes.STRINGNORM:
for
(var arg=caml_jsbytes_of_string(cpool[uarg]),i=0;
i
<
arg.length;
i++)
{if(pos === s.length){prefix_match();break}
if(normtable.charCodeAt(c) === arg.charCodeAt(i))
c = s[++pos];
else
{backtrack();break}}
break;
case opcodes.CHARCLASS:
if(pos === s.length){prefix_match();break}
if(in_bitset(cpool[uarg],c))pos++;else backtrack();
break;
case opcodes.BOL:
if(pos > 0 && s[pos - 1] != 10)backtrack();break;
case opcodes.EOL:
if(pos < s.length && s[pos] != 10)backtrack();break;
case opcodes.WORDBOUNDARY:
if(pos == 0)
{if(pos === s.length){prefix_match();break}
if(is_word_letter(s[0]))break;
backtrack()}
else
if(pos === s.length)
{if(is_word_letter(s[pos - 1]))break;backtrack()}
else
{if(is_word_letter(s[pos - 1]) != is_word_letter(s[pos]))
break;
backtrack()}
break;
case opcodes.BEGGROUP:
group = groups[uarg];
push({undo:{obj:group,prop:"start",value:group.start}});
group.start = pos;
break;
case opcodes.ENDGROUP:
group = groups[uarg];
push({undo:{obj:group,prop:"end",value:group.end}});
group.end = pos;
break;
case opcodes.REFGROUP:
group = groups[uarg];
if(group.start < 0 || group.end < 0){backtrack();break}
for(var i=group.start;i < group.end;i++)
{if(pos === s.length){prefix_match();break}
if(s[i] != s[pos]){backtrack();break}
pos++}
break;
case opcodes.SIMPLEOPT:if(in_bitset(cpool[uarg],c))pos++;break;
case opcodes.SIMPLESTAR:
while(in_bitset(cpool[uarg],c))c = s[++pos];break;
case opcodes.SIMPLEPLUS:
if(pos === s.length){prefix_match();break}
if(in_bitset(cpool[uarg],c))
do c = s[++pos];while(in_bitset(cpool[uarg],c));
else
backtrack();
break;
case opcodes.ACCEPT:return accept();
case opcodes.GOTO:pc = pc + sarg;break;
case opcodes.PUSHBACK:push({pos:{pc:pc + sarg,txt:pos}});break;
case opcodes.SETMARK:
push
({undo:{obj:re_register,prop:uarg,value:re_register[uarg]}});
re_register[uarg] = pos;
break;
case opcodes.CHECKPROGRESS:
if(re_register[uarg] === pos)backtrack();break;
default:throw new Error("Invalid bytecode")}}
return 0}
return re_match_impl}
();
function re_search_backward(re,s,pos)
{if(pos < 0 || pos > caml_ml_string_length(s))
caml_invalid_argument("Str.search_backward");
while(pos >= 0){var res=re_match(re,s,pos,0);if(res)return res;pos--}
return [0]}
function caml_js_from_string(s){return caml_jsstring_of_string(s)}
function caml_ba_sub(ba,ofs,len)
{var changed_dim,mul=1;
if(ba.layout == 0)
{for(var i=1;i < ba.dims.length;i++)mul = mul * ba.dims[i];
changed_dim = 0}
else
{for(var i=0;i < ba.dims.length - 1;i++)mul = mul * ba.dims[i];
changed_dim = ba.dims.length - 1;
ofs = ofs - 1}
if(ofs < 0 || len < 0 || ofs + len > ba.dims[changed_dim])
caml_invalid_argument("Bigarray.sub: bad sub-array");
var new_dims=[];
for(var i=0;i < ba.dims.length;i++)new_dims[i] = ba.dims[i];
new_dims[changed_dim] = len;
mul *= caml_ba_get_size_per_element(ba.kind);
var new_data=ba.data.subarray(ofs * mul,(ofs + len) * mul);
return caml_ba_create_unsafe(ba.kind,ba.layout,new_dims,new_data)}
function caml_gc_full_major(){return 0}
function caml_bytes_set32(s,i,i32)
{if(i >>> 0 >= s.l - 3)caml_bytes_bound_error();
var
b4=0xFF & i32 >> 24,
b3=0xFF & i32 >> 16,
b2=0xFF & i32 >> 8,
b1=0xFF & i32;
caml_bytes_unsafe_set(s,i + 0,b1);
caml_bytes_unsafe_set(s,i + 1,b2);
caml_bytes_unsafe_set(s,i + 2,b3);
caml_bytes_unsafe_set(s,i + 3,b4);
return 0}
function caml_gr_sigio_signal(){return 0}
function caml_ba_uint8_set32(ba,i0,v)
{var ofs=ba.offset(i0);
if(ofs + 3 >= ba.data.length)caml_array_bound_error();
ba.set(ofs + 0,v & 0xff);
ba.set(ofs + 1,v >>> 8 & 0xff);
ba.set(ofs + 2,v >>> 16 & 0xff);
ba.set(ofs + 3,v >>> 24 & 0xff);
return 0}
function caml_sys_const_ostype_unix(){return os_type == "Unix"?1:0}
function caml_signbit_float(x){if(x == 0)x = 1 / x;return x < 0?1:0}
function caml_gr_set_line_width(w)
{var s=caml_gr_state_get();
s.line_width = w;
s.context.lineWidth = w;
return 0}
function caml_gr_set_font(f)
{var s=caml_gr_state_get();
s.font = f;
s.context.font = s.text_size + "px " + caml_jsstring_of_string(s.font);
return 0}
function caml_gr_set_color(color)
{var s=caml_gr_state_get();
function convert(number)
{var str="" + number.toString(16);
while(str.length < 2)str = "0" + str;
return str}
var r=color >> 16 & 0xff,g=color >> 8 & 0xff,b=color >> 0 & 0xff;
s.color = color;
var c_str="#" + convert(r) + convert(g) + convert(b);
s.context.fillStyle = c_str;
s.context.strokeStyle = c_str;
return 0}
function caml_gr_moveto(x,y)
{var s=caml_gr_state_get();s.x = x;s.y = y;return 0}
function caml_gr_resize_window(w,h)
{var s=caml_gr_state_get();
s.width = w;
s.height = h;
s.canvas.width = w;
s.canvas.height = h;
return 0}
function caml_gr_state_init()
{caml_gr_moveto(caml_gr_state.x,caml_gr_state.y);
caml_gr_resize_window(caml_gr_state.width,caml_gr_state.height);
caml_gr_set_line_width(caml_gr_state.line_width);
caml_gr_set_text_size(caml_gr_state.text_size);
caml_gr_set_font(caml_gr_state.font);
caml_gr_set_color(caml_gr_state.color);
caml_gr_set_window_title(caml_gr_state.title);
caml_gr_state.context.textBaseline = "bottom"}
function caml_gr_current_x(){var s=caml_gr_state_get();return s.x}
function caml_ba_kind_of_typed_array(ta)
{var g=globalThis,kind;
if(ta instanceof g.Float32Array)
kind = 0;
else
if(ta instanceof g.Float64Array)
kind = 1;
else
if(ta instanceof g.Int8Array)
kind = 2;
else
if(ta instanceof g.Uint8Array)
kind = 3;
else
if(ta instanceof g.Int16Array)
kind = 4;
else
if(ta instanceof g.Uint16Array)
kind = 5;
else
if(ta instanceof g.Int32Array)
kind = 6;
else
if(ta instanceof g.Uint32Array)
kind = 6;
else
caml_invalid_argument
("caml_ba_kind_of_typed_array: unsupported kind");
return kind}
function caml_ba_from_typed_array(ta)
{var kind=caml_ba_kind_of_typed_array(ta);
return caml_ba_create_unsafe(kind,0,[ta.length],ta)}
function caml_ml_seek_out(chanid,pos)
{caml_ml_flush(chanid);caml_ml_channels[chanid].offset = pos;return 0}
function caml_js_typeof(o){return typeof o}
function caml_restore_raw_backtrace(exn,bt){return 0}
function caml_gr_lineto(x,y)
{var s=caml_gr_state_get();
s.context.beginPath();
s.context.moveTo(s.x,s.height - s.y);
s.context.lineTo(x,s.height - y);
s.context.stroke();
s.x = x;
s.y = y;
return 0}
function caml_js_wrap_meth_callback_unsafe(f)
{return function()
{var len=arguments.length,args=new Array(len + 1);
args[0] = this;
for(var i=0;i < len;i++)args[i + 1] = arguments[i];
return f.apply(null,args)}}
function caml_ba_dim_3(ba){return caml_ba_dim(ba,2)}
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)
handler(err,false);
else
{var
msg=caml_format_exception(err),
at_exit=caml_named_value("Pervasives.do_at_exit");
if(at_exit)at_exit(0);
globalThis.console.error("Fatal error: exception " + msg + "\n")}}
else
throw err}
var caml_ephe_data_offset=2;
function caml_ephe_check_data(x)
{return x[caml_ephe_data_offset] === undefined?0:1}
function caml_bytes_get16(s,i)
{if(i >>> 0 >= s.l - 1)caml_bytes_bound_error();
var b1=caml_bytes_unsafe_get(s,i),b2=caml_bytes_unsafe_get(s,i + 1);
return b2 << 8 | b1}
function caml_obj_make_forward(b,v){b[0] = 250;b[1] = v;return 0}
function caml_js_from_bool(x){return ! ! x}
function caml_ml_set_channel_name(){return 0}
function caml_exp2_float(x){return Math.pow(2,x)}
function caml_gr_close_graph()
{var s=caml_gr_state_get();
s.canvas.width = 0;
s.canvas.height = 0;
return 0}
function caml_create_string(len)
{if(len < 0)caml_invalid_argument("String.create");
return new MlBytes(len?2:9,"",len)}
function caml_md5_string(s,ofs,len)
{return caml_md5_bytes(caml_bytes_of_string(s),ofs,len)}
function caml_md5_chan(chanid,len)
{var chan=caml_ml_channels[chanid],chan_len=chan.file.length();
if(len < 0)len = chan_len - chan.offset;
if(chan.offset + len > chan_len)caml_raise_end_of_file();
var buf=caml_create_bytes(len);
chan.file.read(chan.offset,buf,0,len);
return caml_md5_string(caml_string_of_bytes(buf),0,len)}
function caml_obj_dup(x)
{var l=x.length,a=new Array(l);
for(var i=0;i < l;i++)a[i] = x[i];
return a}
function caml_weak_get_copy(x,i)
{if(i < 0 || caml_ephe_key_offset + i >= x.length)
caml_invalid_argument("Weak.get_copy");
var y=caml_weak_get(x,i);
if(y === 0)return y;
var z=y[1];
if(z instanceof Array)return [0,caml_obj_dup(z)];
return y}
function caml_atanh_float(x){return Math.atanh(x)}
function caml_ml_output_bytes(chanid,buffer,offset,len)
{var chan=caml_ml_channels[chanid];
if(! chan.opened)
caml_raise_sys_error("Cannot output to a closed channel");
var bytes;
if(offset == 0 && caml_ml_bytes_length(buffer) == len)
bytes = buffer;
else
{bytes = caml_create_bytes(len);
caml_blit_bytes(buffer,offset,bytes,0,len)}
var
string=caml_string_of_bytes(bytes),
jsstring=caml_jsbytes_of_string(string),
id=jsstring.lastIndexOf("\n");
if(id < 0)
chan.buffer += jsstring;
else
{chan.buffer += jsstring.substr(0,id + 1);
caml_ml_flush(chanid);
chan.buffer += jsstring.substr(id + 1)}
return 0}
function caml_ml_output(chanid,buffer,offset,len)
{return caml_ml_output_bytes
(chanid,caml_bytes_of_string(buffer),offset,len)}
function caml_ephe_get_data(x)
{return x[caml_ephe_data_offset] === undefined
?0
:[0,x[caml_ephe_data_offset]]}
function caml_xmlhttprequest_create(unit)
{var g=globalThis;
if(typeof g.XMLHttpRequest !== "undefined")
try {return new (g.XMLHttpRequest)()}catch(e){}
if(typeof g.activeXObject !== "undefined")
{try {return new (g.activeXObject)("Msxml2.XMLHTTP")}catch(e){}
try {return new (g.activeXObject)("Msxml3.XMLHTTP")}catch(e){}
try {return new (g.activeXObject)("Microsoft.XMLHTTP")}catch(e){}}
caml_failwith("Cannot create a XMLHttpRequest")}
function caml_trampoline_return(f,args)
{return {joo_tramp:f,joo_args:args}}
function caml_ml_is_buffered(c){return 1}
function caml_array_append(a1,a2)
{var l1=a1.length,l2=a2.length,l=l1 + l2 - 1,a=new Array(l);
a[0] = 0;
var i=1,j=1;
for(;i < l1;i++)a[i] = a1[i];
for(;i < l;i++,j++)a[i] = a2[j];
return a}
function caml_ml_set_channel_refill(chanid,f)
{caml_ml_channels[chanid].refill = f;return 0}
function caml_js_expr(s)
{js_print_stderr("caml_js_expr: fallback to runtime evaluation\n");
return eval(caml_jsstring_of_string(s))}
function caml_int64_mul(x,y){return x.mul(y)}
function caml_ml_runtime_warnings_enabled(_unit)
{return caml_runtime_warnings}
function caml_output_value_to_bytes(v,flags)
{return caml_bytes_of_array(caml_output_val(v,flags))}
function caml_eventlog_resume(unit){return 0}
function caml_hash_univ_param(count,limit,obj)
{var hash_accu=0;
function hash_aux(obj)
{limit--;
if(count < 0 || limit < 0)return;
if(obj instanceof Array && obj[0] === (obj[0] | 0))
switch(obj[0])
{case 248:count--;hash_accu = hash_accu * 65599 + obj[2] | 0;break;
case 250:limit++;hash_aux(obj);break;
default:
count--;
hash_accu = hash_accu * 19 + obj[0] | 0;
for(var i=obj.length - 1;i > 0;i--)hash_aux(obj[i])}
else
if(caml_is_ml_bytes(obj))
{count--;
var content=caml_ml_bytes_content(obj);
if(typeof content === "string")
for(var b=content,l=b.length,i=0;i < l;i++)
hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0;
else
for(var a=content,l=a.length,i=0;i < l;i++)
hash_accu = hash_accu * 19 + a[i] | 0}
else
if(caml_is_ml_string(obj))
{var jsbytes=caml_jsbytes_of_string(obj);
for(var b=jsbytes,l=jsbytes.length,i=0;i < l;i++)
hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0}
else
if(typeof obj === "string")
for(var b=obj,l=obj.length,i=0;i < l;i++)
hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0;
else
if(obj === (obj | 0))
{count--;hash_accu = hash_accu * 65599 + obj | 0}
else
if(obj === + obj)
{count--;
var p=caml_int64_to_bytes(caml_int64_bits_of_float(obj));
for(var i=7;i >= 0;i--)hash_accu = hash_accu * 19 + p[i] | 0}
else
if(obj && obj.caml_custom)
if
(caml_custom_ops[obj.caml_custom]
&&
caml_custom_ops[obj.caml_custom].hash)
{var h=caml_custom_ops[obj.caml_custom].hash(obj) | 0;
hash_accu = hash_accu * 65599 + h | 0}}
hash_aux(obj);
return hash_accu & 0x3FFFFFFF}
function caml_string_equal(s1,s2){return caml_bytes_equal(s1,s2)}
function caml_output_value_to_buffer(s,ofs,len,v,flags)
{var t=caml_output_val(v,flags);
if(t.length > len)caml_failwith("Marshal.to_buffer: buffer overflow");
caml_blit_bytes(t,0,s,ofs,t.length);
return 0}
function re_replacement_text(repl,groups,orig)
{var
repl=caml_jsbytes_of_string(repl),
len=repl.length,
orig=caml_jsbytes_of_string(orig),
res="",
n=0,
cur,
start,
end,
c;
while(n < len)
{cur = repl.charAt(n++);
if(cur != "\\")
res += cur;
else
{if(n == len)
caml_failwith("Str.replace: illegal backslash sequence");
cur = repl.charAt(n++);
switch(cur)
{case "\\":res += cur;break;
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
c = + cur;
if(c * 2 >= groups.length - 1)
caml_failwith("Str.replace: reference to unmatched group");
start = caml_array_get(groups,c * 2);
end = caml_array_get(groups,c * 2 + 1);
if(start == - 1)
caml_failwith("Str.replace: reference to unmatched group");
res += orig.slice(start,end);
break;
default:res += "\\" + cur}}}
return caml_string_of_jsbytes(res)}
function caml_pure_js_expr(s)
{js_print_stderr("caml_pure_js_expr: fallback to runtime evaluation\n");
return eval(caml_jsstring_of_string(s))}
function blit_nat(nat1,ofs1,nat2,ofs2,len)
{for(var i=0;i < len;i++)nat1.data[ofs1 + i] = nat2.data[ofs2 + i];
return 0}
function caml_int64_ult(x,y){return x.ucompare(y) < 0}
function caml_int64_xor(x,y){return x.xor(y)}
function caml_bigstring_blit_ba_to_bytes(ba1,pos1,bytes2,pos2,len)
{if(12 != ba1.kind)
caml_invalid_argument
("caml_bigstring_blit_string_to_ba: kind mismatch");
if(len == 0)return 0;
var ofs1=ba1.offset(pos1);
if(ofs1 + len > ba1.data.length)caml_array_bound_error();
if(pos2 + len > caml_ml_bytes_length(bytes2))caml_array_bound_error();
var slice=ba1.data.slice(ofs1,ofs1 + len);
caml_blit_bytes(caml_bytes_of_array(slice),0,bytes2,pos2,len);
return 0}
function caml_register_named_value(nm,v)
{caml_named_values[caml_jsbytes_of_string(nm)] = v;return 0}
function jsoo_create_file_extern(name,content)
{if(globalThis.jsoo_create_file)
globalThis.jsoo_create_file(name,content);
else
{if(! globalThis.caml_fs_tmp)globalThis.caml_fs_tmp = [];
globalThis.caml_fs_tmp.push({name:name,content:content})}
return 0}
function caml_to_js_string(s){return caml_jsstring_of_string(s)}
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_int64_of_string(s)
{var
r=caml_parse_sign_and_base(s),
i=r[0],
sign=r[1],
base=r[2],
base64=caml_int64_of_int32(base),
threshold=
new MlInt64(0xffffff,0xfffffff,0xffff).udivmod(base64).quotient,
c=caml_string_unsafe_get(s,i),
d=caml_parse_digit(c);
if(d < 0 || d >= base)caml_failwith("int_of_string");
var res=caml_int64_of_int32(d);
for(;;)
{i++;
c = caml_string_unsafe_get(s,i);
if(c == 95)continue;
d = caml_parse_digit(c);
if(d < 0 || d >= base)break;
if(caml_int64_ult(threshold,res))caml_failwith("int_of_string");
d = caml_int64_of_int32(d);
res = caml_int64_add(caml_int64_mul(base64,res),d);
if(caml_int64_ult(res,d))caml_failwith("int_of_string")}
if(i != caml_ml_string_length(s))caml_failwith("int_of_string");
if(base == 10 && caml_int64_ult(new MlInt64(0,0,0x8000),res))
caml_failwith("int_of_string");
if(sign < 0)res = caml_int64_neg(res);
return res}
function re_search_forward(re,s,pos)
{if(pos < 0 || pos > caml_ml_string_length(s))
caml_invalid_argument("Str.search_forward");
while(pos <= caml_ml_string_length(s))
{var res=re_match(re,s,pos,0);if(res)return res;pos++}
return [0]}
var caml_blit_string_to_bigstring=caml_bigstring_blit_string_to_ba;
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_ml_seek_in(chanid,pos)
{var chan=caml_ml_channels[chanid];
if(chan.refill != null)caml_raise_sys_error("Illegal seek");
chan.offset = pos;
return 0}
function caml_sys_read_directory(name)
{var
root=resolve_fs_device(name),
a=root.device.readdir(root.rest),
l=new Array(a.length + 1);
l[0] = 0;
for(var i=0;i < a.length;i++)l[i + 1] = caml_string_of_jsbytes(a[i]);
return l}
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_sys_const_ostype_win32(){return os_type == "Win32"?1:0}
function caml_obj_is_block(x){return + (x instanceof Array)}
function caml_ml_input_char(chanid)
{var chan=caml_ml_channels[chanid];
caml_ml_may_refill_input(chanid);
if(chan.offset >= chan.file.length())caml_raise_end_of_file();
var res=chan.file.read_one(chan.offset);
chan.offset++;
return res}
function caml_obj_set_raw_field(o,i,v){return o[i + 1] = v}
function caml_js_var(x)
{var x=caml_jsstring_of_string(x);
if(! x.match(/^[a-zA-Z_$][a-zA-Z_$0-9]*(\.[a-zA-Z_$][a-zA-Z_$0-9]*)*$/))
js_print_stderr
('caml_js_var: "'
+
x
+
'" is not a valid JavaScript variable. continuing ..');
return eval(x)}
function caml_trunc_float(x){return Math.trunc(x)}
function caml_ephe_blit_data(src,dst)
{dst[caml_ephe_data_offset] = src[caml_ephe_data_offset];return 0}
function caml_is_printable(c){return + (c > 31 && c < 127)}
function caml_equal(x,y){return + (caml_compare_val(x,y,false) == 0)}
function re_partial_match(re,s,pos)
{if(pos < 0 || pos > caml_ml_string_length(s))
caml_invalid_argument("Str.partial_match");
var res=re_match(re,s,pos,1);
return res?res:[0]}
function caml_sys_random_seed()
{if(globalThis.crypto)
if(typeof globalThis.crypto.getRandomValues === "function")
{var a=new (globalThis.Uint32Array)(1);
globalThis.crypto.getRandomValues(a);
return [0,a[0]]}
else
if(globalThis.crypto.randomBytes === "function")
{var
buff=globalThis.crypto.randomBytes(4),
a=new (globalThis.Uint32Array)(buff);
return [0,a[0]]}
var now=new Date().getTime(),x=now ^ 0xffffffff * Math.random();
return [0,x]}
function caml_final_register_called_without_value(){return 0}
function caml_ba_get_2(ba,i0,i1){return ba.get(ba.offset([i0,i1]))}
function win_handle_fd(x){return x}
function caml_ba_uint8_set16(ba,i0,v)
{var ofs=ba.offset(i0);
if(ofs + 1 >= ba.data.length)caml_array_bound_error();
ba.set(ofs + 0,v & 0xff);
ba.set(ofs + 1,v >>> 8 & 0xff);
return 0}
var win_filedescr_of_channel=caml_channel_descriptor;
function caml_js_delete(o,f){delete o[f];return 0}
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_list_mount_point()
{var prev=0;
for(var i=0;i < jsoo_mount_point.length;i++)
{var old=prev;
prev = [0,caml_string_of_jsbytes(jsoo_mount_point[i].path),old]}
return prev}
var
caml_marshal_constants=
{PREFIX_SMALL_BLOCK:0x80,
PREFIX_SMALL_INT:0x40,
PREFIX_SMALL_STRING:0x20,
CODE_INT8:0x00,
CODE_INT16:0x01,
CODE_INT32:0x02,
CODE_INT64:0x03,
CODE_SHARED8:0x04,
CODE_SHARED16:0x05,
CODE_SHARED32:0x06,
CODE_BLOCK32:0x08,
CODE_BLOCK64:0x13,
CODE_STRING8:0x09,
CODE_STRING32:0x0A,
CODE_DOUBLE_BIG:0x0B,
CODE_DOUBLE_LITTLE:0x0C,
CODE_DOUBLE_ARRAY8_BIG:0x0D,
CODE_DOUBLE_ARRAY8_LITTLE:0x0E,
CODE_DOUBLE_ARRAY32_BIG:0x0F,
CODE_DOUBLE_ARRAY32_LITTLE:0x07,
CODE_CODEPOINTER:0x10,
CODE_INFIXPOINTER:0x11,
CODE_CUSTOM:0x12,
CODE_CUSTOM_LEN:0x18,
CODE_CUSTOM_FIXED:0x19};
function caml_obj_raw_field(o,i){return o[i + 1]}
function caml_js_equals(x,y){return + (x == y)}
function bigstring_to_typed_array(bs){return bs.data}
function caml_gr_arc_aux(ctx,cx,cy,ry,rx,a1,a2)
{while(a1 > a2)a2 += 360;
a1 /= 180;
a2 /= 180;
var
rot=0,
xPos,
yPos,
xPos_prev,
yPos_prev,
space=2,
num=(a2 - a1) * Math.PI * ((rx + ry) / 2) / space | 0,
delta=(a2 - a1) * Math.PI / num,
i=a1 * Math.PI;
for(var j=0;j <= num;j++)
{xPos
=
cx
-
rx
*
Math.sin(i)
*
Math.sin(rot * Math.PI)
+
ry
*
Math.cos(i)
*
Math.cos(rot * Math.PI);
xPos = xPos.toFixed(2);
yPos
=
cy
+
ry
*
Math.cos(i)
*
Math.sin(rot * Math.PI)
+
rx
*
Math.sin(i)
*
Math.cos(rot * Math.PI);
yPos = yPos.toFixed(2);
if(j == 0)
ctx.moveTo(xPos,yPos);
else
if(xPos_prev != xPos || yPos_prev != yPos)ctx.lineTo(xPos,yPos);
xPos_prev = xPos;
yPos_prev = yPos;
i -= delta}
return 0}
function caml_gr_fill_arc(x,y,rx,ry,a1,a2)
{var s=caml_gr_state_get();
s.context.beginPath();
caml_gr_arc_aux(s.context,x,s.height - y,rx,ry,a1,a2);
s.context.fill();
return 0}
function caml_ba_slice(ba,vind)
{vind = caml_js_from_array(vind);
var num_inds=vind.length,index=[],sub_dims=[],ofs;
if(num_inds > ba.dims.length)
caml_invalid_argument("Bigarray.slice: too many indices");
if(ba.layout == 0)
{for(var i=0;i < num_inds;i++)index[i] = vind[i];
for(;i < ba.dims.length;i++)index[i] = 0;
sub_dims = ba.dims.slice(num_inds)}
else
{for(var i=0;i < num_inds;i++)
index[ba.dims.length - num_inds + i] = vind[i];
for(var i=0;i < ba.dims.length - num_inds;i++)index[i] = 1;
sub_dims = ba.dims.slice(0,ba.dims.length - num_inds)}
ofs = ba.offset(index);
var
size=caml_ba_get_size(sub_dims),
size_per_element=caml_ba_get_size_per_element(ba.kind),
new_data=
ba.data.subarray
(ofs * size_per_element,(ofs + size) * size_per_element);
return caml_ba_create_unsafe(ba.kind,ba.layout,sub_dims,new_data)}
function caml_marshal_data_size(s,ofs)
{function get32(s,i)
{return caml_bytes_unsafe_get(s,i)
<<
24
|
caml_bytes_unsafe_get(s,i + 1)
<<
16
|
caml_bytes_unsafe_get(s,i + 2)
<<
8
|
caml_bytes_unsafe_get(s,i + 3)}
if(get32(s,ofs) != (0x8495A6BE | 0))
caml_failwith("Marshal.data_size: bad object");
return get32(s,ofs + 4)}
function caml_input_value(chanid)
{var chan=caml_ml_channels[chanid],buf=caml_create_bytes(8);
chan.file.read(chan.offset,buf,0,8);
var len=caml_marshal_data_size(buf,0) + 20,buf=caml_create_bytes(len);
chan.file.read(chan.offset,buf,0,len);
var offset=[0],res=caml_input_value_from_bytes(buf,offset);
chan.offset = chan.offset + offset[0];
return res}
function caml_ba_kind(ba){return ba.kind}
function caml_js_fun_call(f,a)
{switch(a.length)
{case 1:return f();
case 2:return f(a[1]);
case 3:return f(a[1],a[2]);
case 4:return f(a[1],a[2],a[3]);
case 5:return f(a[1],a[2],a[3],a[4]);
case 6:return f(a[1],a[2],a[3],a[4],a[5]);
case 7:return f(a[1],a[2],a[3],a[4],a[5],a[6]);
case 8:return f(a[1],a[2],a[3],a[4],a[5],a[6],a[7])
}
return f.apply(null,caml_js_from_array(a))}
function caml_gc_major_slice(work){return 0}
function caml_js_pure_expr(f){return f()}
function compare_digits_nat(nat1,ofs1,nat2,ofs2)
{if(nat1.data[ofs1] > nat2.data[ofs2])return 1;
if(nat1.data[ofs1] < nat2.data[ofs2])return - 1;
return 0}
function caml_ml_input(chanid,s,i,l)
{var chan=caml_ml_channels[chanid],l2=chan.file.length() - chan.offset;
if(l2 == 0 && chan.refill != null)l2 = caml_ml_refill_input(chan);
if(l2 < l)l = l2;
chan.file.read(chan.offset,s,i,l);
chan.offset += l;
return l}
function caml_gr_wait_event(_evl)
{caml_failwith
("caml_gr_wait_event not Implemented: use Graphics_js instead")}
function caml_gr_sigio_handler(){return 0}
function caml_hash_mix_bigstring(h,bs)
{return caml_hash_mix_bytes_arr(h,bs.data)}
function caml_record_backtrace(){return 0}
function unix_gmtime(t)
{var
d=new Date(t * 1000),
d_num=d.getTime(),
januaryfirst=new Date(Date.UTC(d.getUTCFullYear(),0,1)).getTime(),
doy=Math.floor((d_num - januaryfirst) / 86400000);
return [0,
d.getUTCSeconds(),
d.getUTCMinutes(),
d.getUTCHours(),
d.getUTCDate(),
d.getUTCMonth(),
d.getUTCFullYear() - 1900,
d.getUTCDay(),
doy,
false | 0]}
function caml_sys_const_backend_type()
{return [0,caml_string_of_jsbytes("js_of_ocaml")]}
function caml_sys_get_config()
{return [0,caml_string_of_jsbytes(os_type),32,0]}
function unix_time(){return Math.floor(unix_gettimeofday())}
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_asinh_float(x){return Math.asinh(x)}
function bigstring_of_array_buffer(ab)
{var ta=new (globalThis.Uint8Array)(ab);
return caml_ba_create_unsafe(12,0,[ta.length],ta)}
function caml_mod(x,y){if(y == 0)caml_raise_zero_divide();return x % y}
function caml_ba_init(){return 0}
function re_string_match(re,s,pos)
{if(pos < 0 || pos > caml_ml_string_length(s))
caml_invalid_argument("Str.string_match");
var res=re_match(re,s,pos,0);
return res?res:[0]}
function BigStringReader(bs,i){this.s = bs;this.i = i}
BigStringReader.prototype
=
{read8u:function(){return caml_ba_get_1(this.s,this.i++)},
read8s:function(){return caml_ba_get_1(this.s,this.i++) << 24 >> 24},
read16u:
function()
{var s=this.s,i=this.i;
this.i = i + 2;
return caml_ba_get_1(s,i) << 8 | caml_ba_get_1(s,i + 1)},
read16s:
function()
{var s=this.s,i=this.i;
this.i = i + 2;
return caml_ba_get_1(s,i) << 24 >> 16 | caml_ba_get_1(s,i + 1)},
read32u:
function()
{var s=this.s,i=this.i;
this.i = i + 4;
return (caml_ba_get_1(s,i)
<<
24
|
caml_ba_get_1(s,i + 1)
<<
16
|
caml_ba_get_1(s,i + 2)
<<
8
|
caml_ba_get_1(s,i + 3))
>>>
0},
read32s:
function()
{var s=this.s,i=this.i;
this.i = i + 4;
return caml_ba_get_1(s,i)
<<
24
|
caml_ba_get_1(s,i + 1)
<<
16
|
caml_ba_get_1(s,i + 2)
<<
8
|
caml_ba_get_1(s,i + 3)},
readstr:
function(len)
{var i=this.i,arr=new Array(len);
for(var j=0;j < len;j++)arr[j] = caml_ba_get_1(this.s,i + j);
this.i = i + len;
return caml_string_of_array(arr)}};
function caml_gr_dump_image(im)
{var data=[0];
for(var i=0;i < im.height;i++)
{data[i + 1] = [0];
for(var j=0;j < im.width;j++)
{var
o=i * (im.width * 4) + j * 4,
r=im.data[o + 0],
g=im.data[o + 1],
b=im.data[o + 2];
data[i + 1][j + 1] = (r << 16) + (g << 8) + b}}
return data}
function caml_ba_get_generic(ba,i)
{var ofs=ba.offset(caml_js_from_array(i));return ba.get(ofs)}
function caml_get_exception_backtrace(){return 0}
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_mount_autoload(name,f)
{var path=caml_make_path(name),name=caml_trailing_slash(path.join("/"));
jsoo_mount_point.push({path:name,device:new MlFakeDevice(name,f)});
return 0}
function caml_bigstring_blit_ba_to_ba(ba1,pos1,ba2,pos2,len)
{if(12 != ba1.kind)
caml_invalid_argument("caml_bigstring_blit_ba_to_ba: kind mismatch");
if(12 != ba2.kind)
caml_invalid_argument("caml_bigstring_blit_ba_to_ba: kind mismatch");
if(len == 0)return 0;
var ofs1=ba1.offset(pos1),ofs2=ba2.offset(pos2);
if(ofs1 + len > ba1.data.length)caml_array_bound_error();
if(ofs2 + len > ba2.data.length)caml_array_bound_error();
var slice=ba1.data.subarray(ofs1,ofs1 + len);
ba2.data.set(slice,pos2);
return 0}
var caml_blit_bigstring_to_bigstring=caml_bigstring_blit_ba_to_ba;
function caml_string_lessthan(s1,s2){return caml_bytes_lessthan(s1,s2)}
function caml_string_greaterthan(s1,s2)
{return caml_string_lessthan(s2,s1)}
function caml_div(x,y)
{if(y == 0)caml_raise_zero_divide();return x / y | 0}
function caml_ephe_get_data_copy(x)
{return x[caml_ephe_data_offset] === undefined
?0
:[0,caml_obj_dup(x[caml_ephe_data_offset])]}
function caml_memprof_start(rate,stack_size,tracker){return 0}
function caml_sys_get_argv(a){return [0,caml_argv[1],caml_argv]}
function caml_js_to_bool(x){return + x}
function caml_gr_create_image(x,y)
{var s=caml_gr_state_get();return s.context.createImageData(x,y)}
var caml_ephe_get_key_copy=caml_weak_get_copy;
function caml_lessthan(x,y){return + (caml_compare_val(x,y,false) < 0)}
function caml_raw_backtrace_next_slot(){return 0}
function caml_register_global(n,v,name_opt)
{if(name_opt && globalThis.toplevelReloc)
n = globalThis.toplevelReloc(name_opt);
caml_global_data[n + 1] = v;
if(name_opt)caml_global_data[name_opt] = v}
function mult_nat(nat1,ofs1,len1,nat2,ofs2,len2,nat3,ofs3,len3)
{var carry=0;
for(var i=0;i < len3;i++)
carry
+=
mult_digit_nat(nat1,ofs1 + i,len1 - i,nat2,ofs2,len2,nat3,ofs3 + i);
return carry}
function square_nat(nat1,ofs1,len1,nat2,ofs2,len2)
{var carry=0;
carry += add_nat(nat1,ofs1,len1,nat1,ofs1,len1,0);
carry += mult_nat(nat1,ofs1,len1,nat2,ofs2,len2,nat2,ofs2,len2);
return carry}
function caml_js_from_float(x){return x}
function caml_floatarray_create(len)
{if(len < 0)caml_array_bound_error();
var len=len + 1 | 0,b=new Array(len);
b[0] = 254;
for(var i=1;i < len;i++)b[i] = 0;
return b}
function caml_gc_stat(){return [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}
function caml_get_major_credit(n){return 0}
function caml_sys_modify_argv(arg){caml_argv = arg;return 0}
var caml_method_cache=[];
function caml_get_public_method(obj,tag,cacheid)
{var meths=obj[1],ofs=caml_method_cache[cacheid];
if(ofs === undefined)
for(var i=caml_method_cache.length;i < cacheid;i++)
caml_method_cache[i] = 0;
else
if(meths[ofs] === tag)return meths[ofs - 1];
var li=3,hi=meths[1] * 2 + 1,mi;
while(li < hi)
{mi = li + hi >> 1 | 1;if(tag < meths[mi + 1])hi = mi - 2;else li = mi}
caml_method_cache[cacheid] = li + 1;
return tag == meths[li + 1]?meths[li]:0}
function caml_js_get_console()
{var
c=globalThis.console?globalThis.console:{},
m=
["log",
"debug",
"info",
"warn",
"error",
"assert",
"dir",
"dirxml",
"trace",
"group",
"groupCollapsed",
"groupEnd",
"time",
"timeEnd"];
function f(){}
for(var i=0;i < m.length;i++)if(! c[m[i]])c[m[i]] = f;
return c}
function caml_sys_unsafe_getenv(name){return caml_sys_getenv(name)}
function caml_ml_open_descriptor_in(fd)
{var data=caml_global_data.fds[fd];
if(data.flags.wronly)caml_raise_sys_error("fd " + fd + " is writeonly");
var refill=null;
if(fd == 0 && fs_node_supported())
{var fs=require("fs");
refill
=
function(){return caml_string_of_jsstring(fs.readFileSync(0,"utf8"))}}
var
channel=
{file:data.file,
offset:data.offset,
fd:fd,
opened:true,
out:false,
refill:refill};
caml_ml_channels[channel.fd] = channel;
return channel.fd}
function bigstring_of_typed_array(ba)
{var
ta=
new
(globalThis.Uint8Array)
(ba.buffer,ba.byteOffset,ba.length * ba.BYTES_PER_ELEMENT);
return caml_ba_create_unsafe(12,0,[ta.length],ta)}
function caml_round_float(x){return Math.round(x)}
function unix_stat(name)
{var root=resolve_fs_device(name);
if(! root.device.stat)caml_failwith("unix_stat: not implemented");
return root.device.stat(root.rest,true)}
var unix_stat_64=unix_stat;
function caml_ojs_new_arr(c,a)
{switch(a.length)
{case 0:return new c();
case 1:return new c(a[0]);
case 2:return new c(a[0],a[1]);
case 3:return new c(a[0],a[1],a[2]);
case 4:return new c(a[0],a[1],a[2],a[3]);
case 5:return new c(a[0],a[1],a[2],a[3],a[4]);
case 6:return new c(a[0],a[1],a[2],a[3],a[4],a[5]);
case 7:return new c(a[0],a[1],a[2],a[3],a[4],a[5],a[6])
}
function F(){return c.apply(this,a)}
F.prototype = c.prototype;
return new F()}
function complement_nat(nat,ofs,len)
{for(var i=0;i < len;i++)
nat.data[ofs + i] = (- 1 >>> 0) - (nat.data[ofs + i] >>> 0)}
var caml_js_regexps={amp:/&/g,lt:/</g,quot:/\"/g,all:/[&<\"]/};
function caml_js_html_escape(s)
{if(! caml_js_regexps.all.test(s))return s;
return s.replace(caml_js_regexps.amp,"&amp;").replace
(caml_js_regexps.lt,"&lt;").replace
(caml_js_regexps.quot,"&quot;")}
function caml_ba_dim_2(ba){return caml_ba_dim(ba,1)}
function caml_js_wrap_meth_callback_arguments(f)
{return function()
{var len=arguments.length,args=new Array(len);
for(var i=0;i < len;i++)args[i] = arguments[i];
return caml_call_gen(f,[this,args])}}
function caml_sinh_float(x){return Math.sinh(x)}
function caml_ldexp_float(x,exp)
{exp |= 0;
if(exp > 1023)
{exp -= 1023;
x *= Math.pow(2,1023);
if(exp > 1023){exp -= 1023;x *= Math.pow(2,1023)}}
if(exp < - 1023){exp += 1023;x *= Math.pow(2,- 1023)}
x *= Math.pow(2,exp);
return x}
function caml_gr_state_set(ctx)
{caml_gr_state = ctx;caml_gr_state_init();return 0}
function caml_js_wrap_callback_strict(arity,f)
{return function()
{var n=arguments.length;
if(n == arity && f.length == arity)return f.apply(null,arguments);
var args=new Array(arity),len=Math.min(arguments.length,arity);
for(var i=0;i < len;i++)args[i] = arguments[i];
return caml_call_gen(f,args)}}
function caml_gc_minor_words(unit){return 0}
function caml_ba_set_1(ba,i0,v){ba.set(ba.offset(i0),v);return 0}
function caml_get_current_callstack(){return [0]}
function land_digit_nat(nat1,ofs1,nat2,ofs2)
{nat1.data[ofs1] &= nat2.data[ofs2];return 0}
function caml_int64_mod(x,y){return x.mod(y)}
function unix_readlink(name)
{var root=resolve_fs_device(name);
if(! root.device.readlink)
caml_failwith("unix_readlink: not implemented");
return root.device.readlink(root.rest,true)}
function caml_obj_set_tag(x,tag){x[0] = tag;return 0}
function caml_int32_bswap(x)
{return (x & 0x000000FF)
<<
24
|
(x & 0x0000FF00)
<<
8
|
(x & 0x00FF0000)
>>>
8
|
(x & 0xFF000000)
>>>
24}
function win_startup(){}
function caml_ba_set_3(ba,i0,i1,i2,v)
{ba.set(ba.offset([i0,i1,i2]),v);return 0}
function caml_js_instanceof(o,c){return o instanceof c?1:0}
function caml_get_major_bucket(n){return 0}
var caml_blit_bigstring_to_string=caml_bigstring_blit_ba_to_bytes;
function set_digit_nat_native(nat,ofs,digit)
{nat.data[ofs] = digit;return 0}
function nth_digit_nat_native(nat,ofs){return nat.data[ofs]}
function caml_string_set64(s,i,i64){return caml_bytes_set64(s,i,i64)}
function caml_gr_state_create(canvas,w,h)
{var context=canvas.getContext("2d");
return {context:context,
canvas:canvas,
x:0,
y:0,
width:w,
height:h,
line_width:1,
font:caml_string_of_jsbytes("fixed"),
text_size:26,
color:0x000000,
title:caml_string_of_jsbytes("")}}
function caml_js_wrap_callback(f)
{return function()
{var len=arguments.length;
if(len > 0)
{var args=new Array(len);
for(var i=0;i < len;i++)args[i] = arguments[i];
return caml_call_gen(f,args)}
else
return caml_call_gen(f,[undefined])}}
function caml_gr_draw_arc(x,y,rx,ry,a1,a2)
{var s=caml_gr_state_get();
s.context.beginPath();
caml_gr_arc_aux(s.context,x,s.height - y,rx,ry,a1,a2);
s.context.stroke();
return 0}
function caml_ba_map_file(vfd,kind,layout,shared,dims,pos)
{caml_failwith("caml_ba_map_file not implemented")}
function caml_ba_map_file_bytecode(argv,argn)
{return caml_ba_map_file(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5])}
function unix_symlink(to_dir,src,dst)
{var src_root=resolve_fs_device(src),dst_root=resolve_fs_device(dst);
if(src_root.device != dst_root.device)
caml_failwith("unix_symlink: cannot symlink between two filesystems");
if(! src_root.device.symlink)
caml_failwith("unix_symlink: not implemented");
return src_root.device.symlink(to_dir,src_root.rest,dst_root.rest,true)}
function caml_ba_create_from(data1,data2,jstyp,kind,layout,dims)
{if(data2 || caml_ba_get_size_per_element(kind) == 2)
caml_invalid_argument
("caml_ba_create_from: use return caml_ba_create_unsafe");
return caml_ba_create_unsafe(kind,layout,dims,data1)}
function caml_tanh_float(x){return Math.tanh(x)}
function caml_gr_draw_str(str)
{var s=caml_gr_state_get(),m=s.context.measureText(str),dx=m.width;
s.context.fillText(str,s.x,s.height - s.y);
s.x += dx | 0;
return 0}
function caml_gr_draw_string(str)
{caml_gr_draw_str(caml_jsstring_of_string(str));return 0}
function caml_gr_draw_char(c)
{caml_gr_draw_str(String.fromCharCode(c));return 0}
function caml_unmount(name)
{var
path=caml_make_path(name),
name=caml_trailing_slash(path.join("/")),
idx=- 1;
for(var i=0;i < jsoo_mount_point.length;i++)
if(jsoo_mount_point[i].path == name)idx = i;
if(idx > - 1)jsoo_mount_point.splice(idx,1);
return 0}
function caml_input_value_from_string(s,ofs)
{var reader=new MlStringReader(s,typeof ofs == "number"?ofs:ofs[0]);
return caml_input_value_from_reader(reader,ofs)}
function caml_ml_pos_in_64(chanid)
{return caml_int64_of_float(caml_ml_channels[chanid].offset)}
function caml_gr_draw_image(im,x,y)
{var s=caml_gr_state_get();
if(! im.image)
{var canvas=document.createElement("canvas");
canvas.width = s.width;
canvas.height = s.height;
canvas.getContext("2d").putImageData(im,0,0);
var image=new (globalThis.Image)();
image.onload
=
function()
{s.context.drawImage(image,x,s.height - im.height - y);
im.image = image};
image.src = canvas.toDataURL("image/png")}
else
s.context.drawImage(im.image,x,s.height - im.height - y);
return 0}
function caml_register_channel_for_spacetime(_channel){return 0}
function caml_string_set(s,i,c)
{if(i >>> 0 >= s.l)caml_string_bound_error();
return caml_string_unsafe_set(s,i,c)}
function caml_sys_rmdir(name)
{var root=resolve_fs_device(name);root.device.rmdir(root.rest);return 0}
function caml_ml_pos_out(chanid)
{caml_ml_flush(chanid);return caml_ml_channels[chanid].offset}
function caml_spacetime_enabled(_unit){return 0}
function caml_bytes_notequal(s1,s2){return 1 - caml_bytes_equal(s1,s2)}
function caml_runtime_parameters(_unit){return caml_string_of_jsbytes("")}
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_ba_create(kind,layout,dims_ml)
{var
dims=caml_js_from_array(dims_ml),
data=caml_ba_create_buffer(kind,caml_ba_get_size(dims));
return caml_ba_create_unsafe(kind,layout,dims,data)}
function caml_weak_blit(a1,i1,a2,i2,len)
{caml_array_blit
(a1,caml_ephe_key_offset + i1 - 1,a2,caml_ephe_key_offset + i2 - 1,len);
return 0}
function caml_gr_remember_mode()
{caml_failwith("caml_gr_remember_mode not Implemented")}
function caml_fma_float(x,y,z)
{var
SPLIT=Math.pow(2,27) + 1,
MIN_VALUE=Math.pow(2,- 1022),
EPSILON=Math.pow(2,- 52),
C=416,
A=Math.pow(2,+ C),
B=Math.pow(2,- C);
function multiply(a,b)
{var
at=SPLIT * a,
ahi=at - (at - a),
alo=a - ahi,
bt=SPLIT * b,
bhi=bt - (bt - b),
blo=b - bhi,
p=a * b,
e=ahi * bhi - p + ahi * blo + alo * bhi + alo * blo;
return {p:p,e:e}}
function add(a,b)
{var s=a + b,v=s - a,e=a - (s - v) + (b - v);return {s:s,e:e}}
function adjust(x,y)
{return x !== 0 && y !== 0 && SPLIT * x - (SPLIT * x - x) === x
?x * (1 + (x < 0?- 1:+ 1) * (y < 0?- 1:+ 1) * EPSILON)
:x}
if
(x
===
0
||
x
!==
x
||
x
===
+
(1 / 0)
||
x
===
-
(1 / 0)
||
y
===
0
||
y
!==
y
||
y
===
+
(1 / 0)
||
y
===
-
(1 / 0))
return x * y + z;
if(z === 0)return x * y;
if(z !== z || z === + (1 / 0) || z === - (1 / 0))return z;
var scale=1;
while(Math.abs(x) > A){scale *= A;x *= B}
while(Math.abs(y) > A){scale *= A;y *= B}
if(scale === 1 / 0)return x * y * scale;
while(Math.abs(x) < B){scale *= B;x *= A}
while(Math.abs(y) < B){scale *= B;y *= A}
if(scale === 0)return z;
var xs=x,ys=y,zs=z / scale;
if(Math.abs(zs) > Math.abs(xs * ys) * 4 / EPSILON)return z;
if(Math.abs(zs) < Math.abs(xs * ys) * EPSILON / 4 * EPSILON / 4)
zs = (z < 0?- 1:+ 1) * MIN_VALUE;
var
xy=multiply(xs,ys),
s=add(xy.p,zs),
u=add(xy.e,s.e),
i=add(s.s,u.s),
f=i.s + adjust(i.e,u.e);
if(f === 0)return f;
var fs=f * scale;
if(Math.abs(fs) > MIN_VALUE)return fs;
return fs + adjust(f - fs / scale,i.e) * scale}
function caml_bswap16(x){return (x & 0x00FF) << 8 | (x & 0xFF00) >> 8}
function caml_ml_set_binary_mode(chanid,mode)
{var chan=caml_ml_channels[chanid],data=caml_global_data.fds[chan.fd];
data.flags.text = ! mode;
data.flags.binary = mode;
return 0}
function caml_final_register(){return 0}
function caml_gr_draw_rect(x,y,w,h)
{var s=caml_gr_state_get();
s.context.strokeRect(x,s.height - y,w,- h);
return 0}
function caml_string_get16(s,i)
{if(i >>> 0 >= caml_ml_string_length(s) - 1)caml_string_bound_error();
var b1=caml_string_unsafe_get(s,i),b2=caml_string_unsafe_get(s,i + 1);
return b2 << 8 | b1}
function caml_ephe_unset_data(x,data)
{x[caml_ephe_data_offset] = undefined;return 0}
function caml_output_value(chanid,v,flags)
{var s=caml_output_value_to_string(v,flags);
caml_ml_output(chanid,s,0,caml_ml_string_length(s));
return 0}
function caml_ba_get_3(ba,i0,i1,i2){return ba.get(ba.offset([i0,i1,i2]))}
var
caml_ephe_blit_key=caml_weak_blit,
caml_initial_time=new Date().getTime() * 0.001;
function caml_sys_time()
{var now=new Date().getTime();return now * 0.001 - caml_initial_time}
function caml_sys_time_include_children(b){return caml_sys_time()}
function caml_check_bound(array,index)
{if(index >>> 0 >= array.length - 1)caml_array_bound_error();
return array}
function unix_getpwuid(unit){caml_raise_not_found()}
function caml_hash_mix_string(h,v)
{return caml_hash_mix_jsbytes(h,caml_jsbytes_of_string(v))}
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:
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(v === + v){h = caml_hash_mix_float(h,v);num--}}
h = caml_hash_mix_final(h);
return h & 0x3FFFFFFF}
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_ba_to_typed_array(ba){return ba.data}
function caml_bytes_get32(s,i)
{if(i >>> 0 >= s.l - 3)caml_bytes_bound_error();
var
b1=caml_bytes_unsafe_get(s,i),
b2=caml_bytes_unsafe_get(s,i + 1),
b3=caml_bytes_unsafe_get(s,i + 2),
b4=caml_bytes_unsafe_get(s,i + 3);
return b4 << 24 | b3 << 16 | b2 << 8 | b1}
function caml_frexp_float(x)
{if(x == 0 || ! isFinite(x))return [0,x,0];
var neg=x < 0;
if(neg)x = - x;
var exp=Math.max(- 1023,jsoo_floor_log2(x) + 1);
x *= Math.pow(2,- exp);
while(x < 0.5){x *= 2;exp--}
while(x >= 1){x *= 0.5;exp++}
if(neg)x = - x;
return [0,x,exp]}
function caml_string_get64(s,i)
{if(i >>> 0 >= caml_ml_string_length(s) - 7)caml_string_bound_error();
var a=new Array(8);
for(var j=0;j < 8;j++)a[7 - j] = caml_string_unsafe_get(s,i + j);
return caml_int64_of_bytes(a)}
function caml_js_error_option_of_exception(exn)
{if(exn.js_error)return [0,exn.js_error];return 0}
function caml_ml_pos_out_64(chanid)
{caml_ml_flush(chanid);
return caml_int64_of_float(caml_ml_channels[chanid].offset)}
function caml_gr_close_subwindow(a)
{caml_failwith("caml_gr_close_subwindow not Implemented")}
function caml_floatarray_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_get_minor_free(unit){return 0}
function caml_set_static_env(k,v)
{if(! globalThis.jsoo_static_env)globalThis.jsoo_static_env = {};
globalThis.jsoo_static_env[k] = v;
return 0}
function caml_ba_change_layout(ba,layout)
{if(ba.layout == layout)return ba;
var new_dims=[];
for(var i=0;i < ba.dims.length;i++)
new_dims[i] = ba.dims[ba.dims.length - i - 1];
return caml_ba_create_unsafe(ba.kind,layout,new_dims,ba.data)}
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 unix_mkdir(name,perm)
{var root=resolve_fs_device(name);
if(! root.device.mkdir)caml_failwith("unix_mkdir: not implemented");
return root.device.mkdir(root.rest,perm,true)}
function caml_gr_current_y(){var s=caml_gr_state_get();return s.y}
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)}
function caml_obj_truncate(x,s)
{if(s <= 0 || s + 1 > x.length)caml_invalid_argument("Obj.truncate");
if(x.length != s + 1)x.length = s + 1;
return 0}
function caml_js_to_string(s){return caml_string_of_jsstring(s)}
function is_digit_odd(nat,ofs){if(nat.data[ofs] & 1)return 1;return 0}
function caml_runtime_variant(_unit){return caml_string_of_jsbytes("")}
function caml_ml_open_descriptor_out(fd)
{var data=caml_global_data.fds[fd];
if(data.flags.rdonly)caml_raise_sys_error("fd " + fd + " is readonly");
var
channel=
{file:data.file,
offset:data.offset,
fd:fd,
opened:true,
out:true,
buffer:""};
caml_ml_channels[channel.fd] = channel;
return channel.fd}
function caml_array_concat(l)
{var a=[0];
while(l !== 0)
{var b=l[1];for(var i=1;i < b.length;i++)a.push(b[i]);l = l[2]}
return a}
function caml_gr_open_graph(info)
{var g=globalThis,info=caml_jsstring_of_string(info);
function get(name)
{var res=info.match("(^|,) *" + name + " *= *([a-zA-Z0-9_]+) *(,|$)");
if(res)return res[2]}
var specs=[];
if(! (info == ""))specs.push(info);
var target=get("target");
if(! target)target = "";
var status=get("status");
if(! status)specs.push("status=1");
var w=get("width");
w = w?parseInt(w):200;
specs.push("width=" + w);
var h=get("height");
h = h?parseInt(h):200;
specs.push("height=" + h);
var win=g.open("about:blank",target,specs.join(","));
if(! win)caml_failwith("Graphics.open_graph: cannot open the window");
var doc=win.document,canvas=doc.createElement("canvas");
canvas.width = w;
canvas.height = h;
var ctx=caml_gr_state_create(canvas,w,h);
ctx.set_title = function(title){doc.title = title};
caml_gr_state_set(ctx);
var body=doc.body;
body.style.margin = "0px";
body.appendChild(canvas);
return 0}
function caml_ephe_set_data(x,data)
{x[caml_ephe_data_offset] = data;return 0}
function caml_make_float_vect(len)
{if(len < 0)caml_array_bound_error();
var len=len + 1 | 0,b=new Array(len);
b[0] = 254;
for(var i=1;i < len;i++)b[i] = 0;
return b}
function caml_cbrt_float(x){return Math.cbrt(x)}
function caml_memprof_stop(unit){return 0}
function caml_eventlog_pause(unit){return 0}
function caml_greaterequal(x,y)
{return + (caml_compare_val(x,y,false) >= 0)}
function caml_get_exception_raw_backtrace(){return [0]}
function caml_log1p_float(x){return Math.log1p(x)}
function caml_int64_or(x,y){return x.or(y)}
function caml_lazy_make_forward(v){return [250,v]}
function lor_digit_nat(nat1,ofs1,nat2,ofs2)
{nat1.data[ofs1] |= nat2.data[ofs2];return 0}
function caml_gr_blit_image(im,x,y)
{var
s=caml_gr_state_get(),
im2=
s.context.getImageData(x,s.height - im.height - y,im.width,im.height);
for(var i=0;i < im2.data.length;i += 4)
{im.data[i] = im2.data[i];
im.data[i + 1] = im2.data[i + 1];
im.data[i + 2] = im2.data[i + 2];
im.data[i + 3] = im2.data[i + 3]}
return 0}
function caml_gr_window_id(a)
{caml_failwith("caml_gr_window_id not Implemented")}
function caml_js_on_ie()
{var ua=globalThis.navigator?globalThis.navigator.userAgent:"";
return ua.indexOf("MSIE") != - 1 && ua.indexOf("Opera") != 0}
function caml_int64_shift_right(x,s){return x.shift_right(s)}
function caml_ba_layout(ba){return ba.layout}
function caml_convert_raw_backtrace(){return [0]}
function caml_array_set(array,index,newval)
{if(index < 0 || index >= array.length - 1)caml_array_bound_error();
array[index + 1] = newval;
return 0}
function caml_bytes_greaterequal(s1,s2)
{return caml_bytes_lessequal(s2,s1)}
function set_digit_nat(nat,ofs,digit){nat.data[ofs] = digit;return 0}
function caml_gr_doc_of_state(state)
{if(state.canvas.ownerDocument)return state.canvas.ownerDocument}
function caml_ml_output_int(chanid,i)
{var
arr=[i >> 24 & 0xFF,i >> 16 & 0xFF,i >> 8 & 0xFF,i & 0xFF],
s=caml_string_of_array(arr);
caml_ml_output(chanid,s,0,4);
return 0}
function caml_obj_with_tag(tag,x)
{var l=x.length,a=new Array(l);
a[0] = tag;
for(var i=1;i < l;i++)a[i] = x[i];
return a}
function caml_ml_channel_size(chanid)
{var chan=caml_ml_channels[chanid];return chan.file.length()}
function caml_raw_backtrace_slot()
{caml_invalid_argument
("Printexc.get_raw_backtrace_slot: index out of bounds")}
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_js_wrap_meth_callback_strict(arity,f)
{return function()
{var args=new Array(arity + 1),len=Math.min(arguments.length,arity);
args[0] = this;
for(var i=0;i < len;i++)args[i + 1] = arguments[i];
return caml_call_gen(f,args)}}
function caml_backtrace_status(){return 0}
function caml_sys_argv(a){return caml_argv}
function caml_install_signal_handler(){return 0}
function caml_ba_fill(ba,v){ba.fill(v);return 0}
function caml_modf_float(x)
{if(isFinite(x))
{var neg=1 / x < 0;
x = Math.abs(x);
var i=Math.floor(x),f=x - i;
if(neg){i = - i;f = - f}
return [0,f,i]}
if(isNaN(x))return [0,NaN,NaN];
return [0,1 / x,x]}
function caml_gc_get(){return [0,0,0,0,0,0,0,0,0]}
function caml_float_compare(x,y)
{if(x === y)return 0;
if(x < y)return - 1;
if(x > y)return 1;
if(x === x)return 1;
if(y === y)return - 1;
return 0}
function caml_string_set32(s,i,i32){return caml_bytes_set32(s,i,i32)}
function caml_parse_engine(tables,env,cmd,arg)
{var
ERRCODE=256,
loop=6,
testshift=7,
shift=8,
shift_recover=9,
reduce=10,
READ_TOKEN=0,
RAISE_PARSE_ERROR=1,
GROW_STACKS_1=2,
GROW_STACKS_2=3,
COMPUTE_SEMANTIC_ACTION=4,
CALL_ERROR_FUNCTION=5,
env_s_stack=1,
env_v_stack=2,
env_symb_start_stack=3,
env_symb_end_stack=4,
env_stacksize=5,
env_stackbase=6,
env_curr_char=7,
env_lval=8,
env_symb_start=9,
env_symb_end=10,
env_asp=11,
env_rule_len=12,
env_rule_number=13,
env_sp=14,
env_state=15,
env_errflag=16,
tbl_transl_const=2,
tbl_transl_block=3,
tbl_lhs=4,
tbl_len=5,
tbl_defred=6,
tbl_dgoto=7,
tbl_sindex=8,
tbl_rindex=9,
tbl_gindex=10,
tbl_tablesize=11,
tbl_table=12,
tbl_check=13;
if(! tables.dgoto)
{tables.defred = caml_lex_array(tables[tbl_defred]);
tables.sindex = caml_lex_array(tables[tbl_sindex]);
tables.check = caml_lex_array(tables[tbl_check]);
tables.rindex = caml_lex_array(tables[tbl_rindex]);
tables.table = caml_lex_array(tables[tbl_table]);
tables.len = caml_lex_array(tables[tbl_len]);
tables.lhs = caml_lex_array(tables[tbl_lhs]);
tables.gindex = caml_lex_array(tables[tbl_gindex]);
tables.dgoto = caml_lex_array(tables[tbl_dgoto])}
var
res=0,
n,
n1,
n2,
state1,
sp=env[env_sp],
state=env[env_state],
errflag=env[env_errflag];
exit:
for(;;)
switch(cmd)
{case 0:state = 0;errflag = 0;
case 6:
n = tables.defred[state];
if(n != 0){cmd = reduce;break}
if(env[env_curr_char] >= 0){cmd = testshift;break}
res = READ_TOKEN;
break exit;
case 1:
if(arg instanceof Array)
{env[env_curr_char] = tables[tbl_transl_block][arg[0] + 1];
env[env_lval] = arg[1]}
else
{env[env_curr_char] = tables[tbl_transl_const][arg + 1];
env[env_lval] = 0}
case 7:
n1 = tables.sindex[state];
n2 = n1 + env[env_curr_char];
if
(n1
!=
0
&&
n2
>=
0
&&
n2
<=
tables[tbl_tablesize]
&&
tables.check[n2]
==
env[env_curr_char])
{cmd = shift;break}
n1 = tables.rindex[state];
n2 = n1 + env[env_curr_char];
if
(n1
!=
0
&&
n2
>=
0
&&
n2
<=
tables[tbl_tablesize]
&&
tables.check[n2]
==
env[env_curr_char])
{n = tables.table[n2];cmd = reduce;break}
if(errflag <= 0){res = CALL_ERROR_FUNCTION;break exit}
case 5:
if(errflag < 3)
{errflag = 3;
for(;;)
{state1 = env[env_s_stack][sp + 1];
n1 = tables.sindex[state1];
n2 = n1 + ERRCODE;
if
(n1
!=
0
&&
n2
>=
0
&&
n2
<=
tables[tbl_tablesize]
&&
tables.check[n2]
==
ERRCODE)
{cmd = shift_recover;break}
else
{if(sp <= env[env_stackbase])return RAISE_PARSE_ERROR;sp--}}}
else
{if(env[env_curr_char] == 0)return RAISE_PARSE_ERROR;
env[env_curr_char] = - 1;
cmd = loop;
break}
case 8:env[env_curr_char] = - 1;if(errflag > 0)errflag--;
case 9:
state = tables.table[n2];
sp++;
if(sp >= env[env_stacksize]){res = GROW_STACKS_1;break exit}
case 2:
env[env_s_stack][sp + 1] = state;
env[env_v_stack][sp + 1] = env[env_lval];
env[env_symb_start_stack][sp + 1] = env[env_symb_start];
env[env_symb_end_stack][sp + 1] = env[env_symb_end];
cmd = loop;
break;
case 10:
var m=tables.len[n];
env[env_asp] = sp;
env[env_rule_number] = n;
env[env_rule_len] = m;
sp = sp - m + 1;
m = tables.lhs[n];
state1 = env[env_s_stack][sp];
n1 = tables.gindex[m];
n2 = n1 + state1;
if
(n1
!=
0
&&
n2
>=
0
&&
n2
<=
tables[tbl_tablesize]
&&
tables.check[n2]
==
state1)
state = tables.table[n2];
else
state = tables.dgoto[m];
if(sp >= env[env_stacksize]){res = GROW_STACKS_2;break exit}
case 3:res = COMPUTE_SEMANTIC_ACTION;break exit;
case 4:
env[env_s_stack][sp + 1] = state;
env[env_v_stack][sp + 1] = arg;
var asp=env[env_asp];
env[env_symb_end_stack][sp + 1] = env[env_symb_end_stack][asp + 1];
if(sp > asp)
env[env_symb_start_stack][sp + 1]
=
env[env_symb_end_stack][asp + 1];
cmd = loop;
break;
default:return RAISE_PARSE_ERROR}
env[env_sp] = sp;
env[env_state] = state;
env[env_errflag] = errflag;
return res}
function caml_update_dummy(x,y)
{if(typeof y === "function"){x.fun = y;return 0}
if(y.fun){x.fun = y.fun;return 0}
var i=y.length;
while(i--)x[i] = y[i];
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_sys_mkdir(name,perm)
{var root=resolve_fs_device(name);
root.device.mkdir(root.rest,perm);
return 0}
function caml_string_notequal(s1,s2){return 1 - caml_string_equal(s1,s2)}
function caml_bytes_greaterthan(s1,s2){return caml_bytes_lessthan(s2,s1)}
function caml_gr_make_image(arr)
{var
s=caml_gr_state_get(),
h=arr.length - 1,
w=arr[1].length - 1,
im=s.context.createImageData(w,h);
for(var i=0;i < h;i++)
for(var j=0;j < w;j++)
{var c=arr[i + 1][j + 1],o=i * (w * 4) + j * 4;
if(c == - 1)
{im.data[o + 0] = 0;
im.data[o + 1] = 0;
im.data[o + 2] = 0;
im.data[o + 3] = 0}
else
{im.data[o + 0] = c >> 16 & 0xff;
im.data[o + 1] = c >> 8 & 0xff;
im.data[o + 2] = c >> 0 & 0Xff;
im.data[o + 3] = 0xff}}
return im}
function caml_ml_set_channel_output(chanid,f)
{var chan=caml_ml_channels[chanid];
caml_global_data.fds[chan.fd].output = f;
return 0}
function caml_read_file_content(name)
{var
name=typeof name == "string"?caml_string_of_jsbytes(name):name,
root=resolve_fs_device(name);
if(root.device.exists(root.rest))
{var
file=root.device.open(root.rest,{rdonly:1}),
len=file.length(),
buf=caml_create_bytes(len);
file.read(0,buf,0,len);
return caml_string_of_bytes(buf)}
caml_raise_no_such_file(caml_jsbytes_of_string(name))}
function caml_js_to_float(x){return x}
function caml_setup_uncaught_exception_handler()
{var g=globalThis;
if(g.process && g.process.on)
g.process.on
("uncaughtException",
function(err,origin)
{caml_fatal_uncaught_exception(err);g.process.exit(2)});
else
if(g.addEventListener)
g.addEventListener
("error",
function(event)
{if(event.error)caml_fatal_uncaught_exception(event.error)})}
caml_setup_uncaught_exception_handler();
globalThis.jsoo_runtime
=
{caml_ephe_key_offset:caml_ephe_key_offset,
caml_ephe_data_offset:caml_ephe_data_offset,
caml_weak_create:caml_weak_create,
caml_weak_set:caml_weak_set,
caml_weak_get:caml_weak_get,
caml_weak_get_copy:caml_weak_get_copy,
caml_weak_check:caml_weak_check,
caml_weak_blit:caml_weak_blit,
caml_ephe_create:caml_ephe_create,
caml_ephe_blit_key:caml_ephe_blit_key,
caml_ephe_get_key:caml_ephe_get_key,
caml_ephe_get_key_copy:caml_ephe_get_key_copy,
caml_ephe_check_key:caml_ephe_check_key,
caml_ephe_set_key:caml_ephe_set_key,
caml_ephe_unset_key:caml_ephe_unset_key,
caml_ephe_blit_data:caml_ephe_blit_data,
caml_ephe_get_data:caml_ephe_get_data,
caml_ephe_get_data_copy:caml_ephe_get_data_copy,
caml_ephe_set_data:caml_ephe_set_data,
caml_ephe_unset_data:caml_ephe_unset_data,
caml_ephe_check_data:caml_ephe_check_data,
unix_gettimeofday:unix_gettimeofday,
unix_time:unix_time,
unix_gmtime:unix_gmtime,
unix_localtime:unix_localtime,
unix_mktime:unix_mktime,
win_startup:win_startup,
win_cleanup:win_cleanup,
win_handle_fd:win_handle_fd,
unix_isatty:unix_isatty,
make_unix_err_args:make_unix_err_args,
unix_stat:unix_stat,
unix_stat_64:unix_stat_64,
unix_lstat:unix_lstat,
unix_lstat_64:unix_lstat_64,
unix_mkdir:unix_mkdir,
unix_rmdir:unix_rmdir,
unix_symlink:unix_symlink,
unix_readlink:unix_readlink,
unix_unlink:unix_unlink,
unix_getuid:unix_getuid,
unix_getpwuid:unix_getpwuid,
unix_has_symlink:unix_has_symlink,
re_match:re_match,
re_search_forward:re_search_forward,
re_search_backward:re_search_backward,
re_string_match:re_string_match,
re_partial_match:re_partial_match,
re_replacement_text:re_replacement_text,
caml_raise_sys_error:caml_raise_sys_error,
caml_sys_exit:caml_sys_exit,
caml_is_special_exception:caml_is_special_exception,
caml_format_exception:caml_format_exception,
caml_fatal_uncaught_exception:caml_fatal_uncaught_exception,
caml_set_static_env:caml_set_static_env,
caml_sys_getenv:caml_sys_getenv,
caml_sys_unsafe_getenv:caml_sys_unsafe_getenv,
caml_argv:caml_argv,
caml_executable_name:caml_executable_name,
caml_sys_get_argv:caml_sys_get_argv,
caml_sys_argv:caml_sys_argv,
caml_sys_modify_argv:caml_sys_modify_argv,
caml_sys_executable_name:caml_sys_executable_name,
caml_sys_system_command:caml_sys_system_command,
caml_sys_time:caml_sys_time,
caml_sys_time_include_children:caml_sys_time_include_children,
caml_sys_random_seed:caml_sys_random_seed,
caml_sys_const_big_endian:caml_sys_const_big_endian,
caml_sys_const_word_size:caml_sys_const_word_size,
caml_sys_const_int_size:caml_sys_const_int_size,
caml_sys_const_max_wosize:caml_sys_const_max_wosize,
caml_sys_const_ostype_unix:caml_sys_const_ostype_unix,
caml_sys_const_ostype_win32:caml_sys_const_ostype_win32,
caml_sys_const_ostype_cygwin:caml_sys_const_ostype_cygwin,
caml_sys_const_backend_type:caml_sys_const_backend_type,
os_type:os_type,
caml_sys_get_config:caml_sys_get_config,
caml_sys_isatty:caml_sys_isatty,
caml_runtime_variant:caml_runtime_variant,
caml_runtime_parameters:caml_runtime_parameters,
caml_install_signal_handler:caml_install_signal_handler,
unix_inet_addr_of_string:unix_inet_addr_of_string,
caml_runtime_warnings:caml_runtime_warnings,
caml_ml_enable_runtime_warnings:caml_ml_enable_runtime_warnings,
caml_ml_runtime_warnings_enabled:caml_ml_runtime_warnings_enabled,
caml_spacetime_enabled:caml_spacetime_enabled,
caml_sys_const_naked_pointers_checked:
caml_sys_const_naked_pointers_checked,
caml_register_channel_for_spacetime:caml_register_channel_for_spacetime,
caml_spacetime_only_works_for_native_code:
caml_spacetime_only_works_for_native_code,
caml_call_gen:caml_call_gen,
caml_named_values:caml_named_values,
caml_register_named_value:caml_register_named_value,
caml_named_value:caml_named_value,
caml_global_data:caml_global_data,
caml_register_global:caml_register_global,
caml_get_global_data:caml_get_global_data,
caml_is_printable:caml_is_printable,
caml_parse_engine:caml_parse_engine,
caml_set_parser_trace:caml_set_parser_trace,
caml_update_dummy:caml_update_dummy,
caml_obj_is_block:caml_obj_is_block,
caml_obj_tag:caml_obj_tag,
caml_obj_set_tag:caml_obj_set_tag,
caml_obj_block:caml_obj_block,
caml_obj_with_tag:caml_obj_with_tag,
caml_obj_dup:caml_obj_dup,
caml_obj_truncate:caml_obj_truncate,
caml_obj_make_forward:caml_obj_make_forward,
caml_lazy_make_forward:caml_lazy_make_forward,
caml_get_public_method:caml_get_public_method,
caml_oo_last_id:caml_oo_last_id,
caml_set_oo_id:caml_set_oo_id,
caml_fresh_oo_id:caml_fresh_oo_id,
caml_obj_raw_field:caml_obj_raw_field,
caml_obj_set_raw_field:caml_obj_set_raw_field,
caml_obj_reachable_words:caml_obj_reachable_words,
caml_obj_add_offset:caml_obj_add_offset,
initialize_nat:initialize_nat,
MlNat:MlNat,
caml_hash_nat:caml_hash_nat,
nat_of_array:nat_of_array,
create_nat:create_nat,
set_to_zero_nat:set_to_zero_nat,
blit_nat:blit_nat,
set_digit_nat:set_digit_nat,
nth_digit_nat:nth_digit_nat,
set_digit_nat_native:set_digit_nat_native,
nth_digit_nat_native:nth_digit_nat_native,
num_digits_nat:num_digits_nat,
num_leading_zero_bits_in_digit:num_leading_zero_bits_in_digit,
is_digit_int:is_digit_int,
is_digit_zero:is_digit_zero,
is_digit_odd:is_digit_odd,
incr_nat:incr_nat,
add_nat:add_nat,
complement_nat:complement_nat,
decr_nat:decr_nat,
sub_nat:sub_nat,
mult_digit_nat:mult_digit_nat,
mult_nat:mult_nat,
square_nat:square_nat,
shift_left_nat:shift_left_nat,
div_helper:div_helper,
div_digit_nat:div_digit_nat,
div_nat:div_nat,
shift_right_nat:shift_right_nat,
compare_digits_nat:compare_digits_nat,
compare_nat:compare_nat,
compare_nat_real:compare_nat_real,
land_digit_nat:land_digit_nat,
lor_digit_nat:lor_digit_nat,
lxor_digit_nat:lxor_digit_nat,
serialize_nat:serialize_nat,
deserialize_nat:deserialize_nat,
caml_str_repeat:caml_str_repeat,
caml_subarray_to_jsbytes:caml_subarray_to_jsbytes,
caml_utf8_of_utf16:caml_utf8_of_utf16,
caml_utf16_of_utf8:caml_utf16_of_utf8,
jsoo_is_ascii:jsoo_is_ascii,
caml_bytes_unsafe_get:caml_bytes_unsafe_get,
caml_bytes_unsafe_set:caml_bytes_unsafe_set,
caml_string_bound_error:caml_string_bound_error,
caml_bytes_bound_error:caml_bytes_bound_error,
caml_string_get:caml_string_get,
caml_string_get16:caml_string_get16,
caml_bytes_get16:caml_bytes_get16,
caml_string_get32:caml_string_get32,
caml_bytes_get32:caml_bytes_get32,
caml_string_get64:caml_string_get64,
caml_bytes_get64:caml_bytes_get64,
caml_bytes_get:caml_bytes_get,
caml_string_set:caml_string_set,
caml_bytes_set16:caml_bytes_set16,
caml_string_set16:caml_string_set16,
caml_bytes_set32:caml_bytes_set32,
caml_string_set32:caml_string_set32,
caml_bytes_set64:caml_bytes_set64,
caml_string_set64:caml_string_set64,
caml_bytes_set:caml_bytes_set,
caml_bytes_of_utf16_jsstring:caml_bytes_of_utf16_jsstring,
MlBytes:MlBytes,
caml_convert_string_to_bytes:caml_convert_string_to_bytes,
caml_convert_bytes_to_array:caml_convert_bytes_to_array,
caml_array_of_bytes:caml_array_of_bytes,
caml_array_of_string:caml_array_of_string,
caml_create_string:caml_create_string,
caml_create_bytes:caml_create_bytes,
caml_string_of_array:caml_string_of_array,
caml_bytes_of_array:caml_bytes_of_array,
caml_bytes_compare:caml_bytes_compare,
caml_bytes_equal:caml_bytes_equal,
caml_string_notequal:caml_string_notequal,
caml_bytes_notequal:caml_bytes_notequal,
caml_bytes_lessequal:caml_bytes_lessequal,
caml_bytes_lessthan:caml_bytes_lessthan,
caml_string_greaterequal:caml_string_greaterequal,
caml_bytes_greaterequal:caml_bytes_greaterequal,
caml_string_greaterthan:caml_string_greaterthan,
caml_bytes_greaterthan:caml_bytes_greaterthan,
caml_fill_bytes:caml_fill_bytes,
caml_fill_string:caml_fill_string,
caml_blit_bytes:caml_blit_bytes,
caml_blit_string:caml_blit_string,
caml_ml_bytes_length:caml_ml_bytes_length,
caml_bytes_of_jsbytes:caml_bytes_of_jsbytes,
caml_string_unsafe_get:caml_string_unsafe_get,
caml_string_unsafe_set:caml_string_unsafe_set,
caml_ml_string_length:caml_ml_string_length,
caml_string_compare:caml_string_compare,
caml_string_equal:caml_string_equal,
caml_string_lessequal:caml_string_lessequal,
caml_string_lessthan:caml_string_lessthan,
caml_string_of_bytes:caml_string_of_bytes,
caml_bytes_of_string:caml_bytes_of_string,
caml_string_of_jsbytes:caml_string_of_jsbytes,
caml_jsbytes_of_string:caml_jsbytes_of_string,
caml_jsstring_of_string:caml_jsstring_of_string,
caml_string_of_jsstring:caml_string_of_jsstring,
caml_is_ml_bytes:caml_is_ml_bytes,
caml_ml_bytes_content:caml_ml_bytes_content,
caml_is_ml_string:caml_is_ml_string,
caml_js_to_byte_string:caml_js_to_byte_string,
caml_new_string:caml_new_string,
caml_js_from_string:caml_js_from_string,
caml_to_js_string:caml_to_js_string,
caml_js_to_string:caml_js_to_string,
caml_md5_chan:caml_md5_chan,
caml_md5_string:caml_md5_string,
caml_md5_bytes:caml_md5_bytes,
caml_marshal_constants:caml_marshal_constants,
MlStringReader:MlStringReader,
BigStringReader:BigStringReader,
caml_float_of_bytes:caml_float_of_bytes,
caml_input_value_from_string:caml_input_value_from_string,
caml_input_value_from_bytes:caml_input_value_from_bytes,
caml_int64_unmarshal:caml_int64_unmarshal,
caml_int64_marshal:caml_int64_marshal,
caml_int32_unmarshal:caml_int32_unmarshal,
caml_nativeint_unmarshal:caml_nativeint_unmarshal,
caml_custom_ops:caml_custom_ops,
caml_input_value_from_reader:caml_input_value_from_reader,
caml_marshal_data_size:caml_marshal_data_size,
MlObjectTable:MlObjectTable,
caml_legacy_custom_code:caml_legacy_custom_code,
caml_output_val:caml_output_val,
caml_output_value_to_string:caml_output_value_to_string,
caml_output_value_to_bytes:caml_output_value_to_bytes,
caml_output_value_to_buffer:caml_output_value_to_buffer,
caml_lex_array:caml_lex_array,
caml_lex_engine:caml_lex_engine,
caml_new_lex_engine:caml_new_lex_engine,
caml_js_on_ie:caml_js_on_ie,
caml_js_html_escape:caml_js_html_escape,
caml_js_html_entities:caml_js_html_entities,
caml_js_get_console:caml_js_get_console,
caml_xmlhttprequest_create:caml_xmlhttprequest_create,
caml_js_error_of_exception:caml_js_error_of_exception,
caml_js_pure_expr:caml_js_pure_expr,
caml_js_set:caml_js_set,
caml_js_get:caml_js_get,
caml_js_delete:caml_js_delete,
caml_js_instanceof:caml_js_instanceof,
caml_js_typeof:caml_js_typeof,
caml_trampoline:caml_trampoline,
caml_trampoline_return:caml_trampoline_return,
js_print_stdout:js_print_stdout,
js_print_stderr:js_print_stderr,
caml_is_js:caml_is_js,
caml_wrap_exception:caml_wrap_exception,
caml_exn_with_js_backtrace:caml_exn_with_js_backtrace,
caml_js_error_option_of_exception:caml_js_error_option_of_exception,
caml_js_from_bool:caml_js_from_bool,
caml_js_to_bool:caml_js_to_bool,
caml_js_from_float:caml_js_from_float,
caml_js_to_float:caml_js_to_float,
caml_js_from_array:caml_js_from_array,
caml_js_to_array:caml_js_to_array,
caml_list_of_js_array:caml_list_of_js_array,
caml_list_to_js_array:caml_list_to_js_array,
caml_js_var:caml_js_var,
caml_js_call:caml_js_call,
caml_js_fun_call:caml_js_fun_call,
caml_js_meth_call:caml_js_meth_call,
caml_js_new:caml_js_new,
caml_ojs_new_arr:caml_ojs_new_arr,
caml_js_wrap_callback:caml_js_wrap_callback,
caml_js_wrap_callback_arguments:caml_js_wrap_callback_arguments,
caml_js_wrap_callback_strict:caml_js_wrap_callback_strict,
caml_js_wrap_meth_callback:caml_js_wrap_meth_callback,
caml_js_wrap_meth_callback_arguments:caml_js_wrap_meth_callback_arguments,
caml_js_wrap_meth_callback_strict:caml_js_wrap_meth_callback_strict,
caml_js_wrap_meth_callback_unsafe:caml_js_wrap_meth_callback_unsafe,
caml_js_equals:caml_js_equals,
caml_js_eval_string:caml_js_eval_string,
caml_js_expr:caml_js_expr,
caml_pure_js_expr:caml_pure_js_expr,
caml_js_object:caml_js_object,
caml_sys_close:caml_sys_close,
caml_std_output:caml_std_output,
caml_sys_open:caml_sys_open,
caml_ml_set_channel_name:caml_ml_set_channel_name,
caml_ml_channels:caml_ml_channels,
caml_ml_out_channels_list:caml_ml_out_channels_list,
caml_ml_open_descriptor_out:caml_ml_open_descriptor_out,
caml_ml_open_descriptor_in:caml_ml_open_descriptor_in,
caml_channel_descriptor:caml_channel_descriptor,
win_filedescr_of_channel:win_filedescr_of_channel,
caml_ml_set_binary_mode:caml_ml_set_binary_mode,
caml_ml_close_channel:caml_ml_close_channel,
caml_ml_channel_size:caml_ml_channel_size,
caml_ml_channel_size_64:caml_ml_channel_size_64,
caml_ml_set_channel_output:caml_ml_set_channel_output,
caml_ml_set_channel_refill:caml_ml_set_channel_refill,
caml_ml_refill_input:caml_ml_refill_input,
caml_ml_may_refill_input:caml_ml_may_refill_input,
caml_ml_input:caml_ml_input,
caml_input_value:caml_input_value,
caml_ml_input_char:caml_ml_input_char,
caml_ml_input_int:caml_ml_input_int,
caml_ml_seek_in:caml_ml_seek_in,
caml_ml_seek_in_64:caml_ml_seek_in_64,
caml_ml_pos_in:caml_ml_pos_in,
caml_ml_pos_in_64:caml_ml_pos_in_64,
caml_ml_input_scan_line:caml_ml_input_scan_line,
caml_ml_flush:caml_ml_flush,
caml_ml_output_bytes:caml_ml_output_bytes,
caml_ml_output:caml_ml_output,
caml_ml_output_char:caml_ml_output_char,
caml_output_value:caml_output_value,
caml_ml_seek_out:caml_ml_seek_out,
caml_ml_seek_out_64:caml_ml_seek_out_64,
caml_ml_pos_out:caml_ml_pos_out,
caml_ml_pos_out_64:caml_ml_pos_out_64,
caml_ml_output_int:caml_ml_output_int,
caml_ml_is_buffered:caml_ml_is_buffered,
caml_ml_set_buffered:caml_ml_set_buffered,
caml_format_int:caml_format_int,
caml_parse_sign_and_base:caml_parse_sign_and_base,
caml_parse_digit:caml_parse_digit,
caml_int_of_string:caml_int_of_string,
caml_mul:caml_mul,
caml_div:caml_div,
caml_mod:caml_mod,
caml_bswap16:caml_bswap16,
caml_int32_bswap:caml_int32_bswap,
caml_int64_bswap:caml_int64_bswap,
caml_int64_offset:caml_int64_offset,
MlInt64:MlInt64,
caml_int64_ult:caml_int64_ult,
caml_int64_compare:caml_int64_compare,
caml_int64_neg:caml_int64_neg,
caml_int64_add:caml_int64_add,
caml_int64_sub:caml_int64_sub,
caml_int64_mul:caml_int64_mul,
caml_int64_is_zero:caml_int64_is_zero,
caml_int64_is_negative:caml_int64_is_negative,
caml_int64_and:caml_int64_and,
caml_int64_or:caml_int64_or,
caml_int64_xor:caml_int64_xor,
caml_int64_shift_left:caml_int64_shift_left,
caml_int64_shift_right_unsigned:caml_int64_shift_right_unsigned,
caml_int64_shift_right:caml_int64_shift_right,
caml_int64_div:caml_int64_div,
caml_int64_mod:caml_int64_mod,
caml_int64_of_int32:caml_int64_of_int32,
caml_int64_to_int32:caml_int64_to_int32,
caml_int64_to_float:caml_int64_to_float,
caml_int64_of_float:caml_int64_of_float,
caml_int64_format:caml_int64_format,
caml_int64_of_string:caml_int64_of_string,
caml_int64_create_lo_mi_hi:caml_int64_create_lo_mi_hi,
caml_int64_create_lo_hi:caml_int64_create_lo_hi,
caml_int64_lo32:caml_int64_lo32,
caml_int64_hi32:caml_int64_hi32,
caml_int64_of_bytes:caml_int64_of_bytes,
caml_int64_to_bytes:caml_int64_to_bytes,
caml_int64_hash:caml_int64_hash,
jsoo_floor_log2:jsoo_floor_log2,
caml_int64_bits_of_float:caml_int64_bits_of_float,
caml_int32_bits_of_float:caml_int32_bits_of_float,
caml_hexstring_of_float:caml_hexstring_of_float,
caml_int64_float_of_bits:caml_int64_float_of_bits,
caml_nextafter_float:caml_nextafter_float,
caml_trunc_float:caml_trunc_float,
caml_int32_float_of_bits:caml_int32_float_of_bits,
caml_classify_float:caml_classify_float,
caml_modf_float:caml_modf_float,
caml_ldexp_float:caml_ldexp_float,
caml_frexp_float:caml_frexp_float,
caml_float_compare:caml_float_compare,
caml_copysign_float:caml_copysign_float,
caml_signbit_float:caml_signbit_float,
caml_expm1_float:caml_expm1_float,
caml_exp2_float:caml_exp2_float,
caml_log1p_float:caml_log1p_float,
caml_log2_float:caml_log2_float,
caml_hypot_float:caml_hypot_float,
caml_log10_float:caml_log10_float,
caml_cosh_float:caml_cosh_float,
caml_acosh_float:caml_acosh_float,
caml_sinh_float:caml_sinh_float,
caml_asinh_float:caml_asinh_float,
caml_tanh_float:caml_tanh_float,
caml_atanh_float:caml_atanh_float,
caml_round_float:caml_round_float,
caml_cbrt_float:caml_cbrt_float,
caml_erf_float:caml_erf_float,
caml_erfc_float:caml_erfc_float,
caml_fma_float:caml_fma_float,
caml_format_float:caml_format_float,
caml_float_of_string:caml_float_of_string,
caml_hash_univ_param:caml_hash_univ_param,
caml_hash_mix_int:caml_hash_mix_int,
caml_hash_mix_final:caml_hash_mix_final,
caml_hash_mix_float:caml_hash_mix_float,
caml_hash_mix_int64:caml_hash_mix_int64,
caml_hash_mix_jsbytes:caml_hash_mix_jsbytes,
caml_hash_mix_bytes_arr:caml_hash_mix_bytes_arr,
caml_hash_mix_bytes:caml_hash_mix_bytes,
caml_hash_mix_string:caml_hash_mix_string,
caml_hash:caml_hash,
caml_gr_state:caml_gr_state,
caml_gr_state_get:caml_gr_state_get,
caml_gr_state_set:caml_gr_state_set,
caml_gr_open_graph:caml_gr_open_graph,
caml_gr_state_init:caml_gr_state_init,
caml_gr_state_create:caml_gr_state_create,
caml_gr_doc_of_state:caml_gr_doc_of_state,
caml_gr_close_graph:caml_gr_close_graph,
caml_gr_set_window_title:caml_gr_set_window_title,
caml_gr_resize_window:caml_gr_resize_window,
caml_gr_clear_graph:caml_gr_clear_graph,
caml_gr_size_x:caml_gr_size_x,
caml_gr_size_y:caml_gr_size_y,
caml_gr_set_color:caml_gr_set_color,
caml_gr_plot:caml_gr_plot,
caml_gr_point_color:caml_gr_point_color,
caml_gr_moveto:caml_gr_moveto,
caml_gr_current_x:caml_gr_current_x,
caml_gr_current_y:caml_gr_current_y,
caml_gr_lineto:caml_gr_lineto,
caml_gr_draw_rect:caml_gr_draw_rect,
caml_gr_arc_aux:caml_gr_arc_aux,
caml_gr_draw_arc:caml_gr_draw_arc,
caml_gr_set_line_width:caml_gr_set_line_width,
caml_gr_fill_rect:caml_gr_fill_rect,
caml_gr_fill_poly:caml_gr_fill_poly,
caml_gr_fill_arc:caml_gr_fill_arc,
caml_gr_draw_str:caml_gr_draw_str,
caml_gr_draw_char:caml_gr_draw_char,
caml_gr_draw_string:caml_gr_draw_string,
caml_gr_set_font:caml_gr_set_font,
caml_gr_set_text_size:caml_gr_set_text_size,
caml_gr_text_size:caml_gr_text_size,
caml_gr_make_image:caml_gr_make_image,
caml_gr_dump_image:caml_gr_dump_image,
caml_gr_draw_image:caml_gr_draw_image,
caml_gr_create_image:caml_gr_create_image,
caml_gr_blit_image:caml_gr_blit_image,
caml_gr_sigio_handler:caml_gr_sigio_handler,
caml_gr_sigio_signal:caml_gr_sigio_signal,
caml_gr_wait_event:caml_gr_wait_event,
caml_gr_synchronize:caml_gr_synchronize,
caml_gr_remember_mode:caml_gr_remember_mode,
caml_gr_display_mode:caml_gr_display_mode,
caml_gr_window_id:caml_gr_window_id,
caml_gr_open_subwindow:caml_gr_open_subwindow,
caml_gr_close_subwindow:caml_gr_close_subwindow,
caml_gc_minor:caml_gc_minor,
caml_gc_major:caml_gc_major,
caml_gc_full_major:caml_gc_full_major,
caml_gc_compaction:caml_gc_compaction,
caml_gc_counters:caml_gc_counters,
caml_gc_quick_stat:caml_gc_quick_stat,
caml_gc_stat:caml_gc_stat,
caml_gc_set:caml_gc_set,
caml_gc_get:caml_gc_get,
caml_memprof_set:caml_memprof_set,
caml_final_register:caml_final_register,
caml_final_register_called_without_value:
caml_final_register_called_without_value,
caml_final_release:caml_final_release,
caml_memprof_start:caml_memprof_start,
caml_memprof_stop:caml_memprof_stop,
caml_eventlog_resume:caml_eventlog_resume,
caml_eventlog_pause:caml_eventlog_pause,
caml_gc_huge_fallback_count:caml_gc_huge_fallback_count,
caml_gc_major_slice:caml_gc_major_slice,
caml_gc_minor_words:caml_gc_minor_words,
caml_get_minor_free:caml_get_minor_free,
caml_get_major_bucket:caml_get_major_bucket,
caml_get_major_credit:caml_get_major_credit,
fs_node_supported:fs_node_supported,
MlNodeDevice:MlNodeDevice,
MlNodeFile:MlNodeFile,
MlFakeDevice:MlFakeDevice,
MlFakeFile:MlFakeFile,
caml_trailing_slash:caml_trailing_slash,
caml_current_dir:caml_current_dir,
caml_get_root:caml_get_root,
caml_root:caml_root,
MlFile:MlFile,
path_is_absolute:path_is_absolute,
caml_make_path:caml_make_path,
jsoo_mount_point:jsoo_mount_point,
caml_list_mount_point:caml_list_mount_point,
resolve_fs_device:resolve_fs_device,
caml_mount_autoload:caml_mount_autoload,
caml_unmount:caml_unmount,
caml_sys_getcwd:caml_sys_getcwd,
caml_sys_chdir:caml_sys_chdir,
caml_raise_no_such_file:caml_raise_no_such_file,
caml_raise_not_a_dir:caml_raise_not_a_dir,
caml_sys_file_exists:caml_sys_file_exists,
caml_sys_read_directory:caml_sys_read_directory,
caml_sys_remove:caml_sys_remove,
caml_sys_is_directory:caml_sys_is_directory,
caml_sys_rename:caml_sys_rename,
caml_sys_mkdir:caml_sys_mkdir,
caml_sys_rmdir:caml_sys_rmdir,
caml_ba_map_file:caml_ba_map_file,
caml_ba_map_file_bytecode:caml_ba_map_file_bytecode,
jsoo_create_file_extern:jsoo_create_file_extern,
caml_fs_init:caml_fs_init,
caml_create_file:caml_create_file,
jsoo_create_file:jsoo_create_file,
caml_read_file_content:caml_read_file_content,
caml_parse_format:caml_parse_format,
caml_finish_formatting:caml_finish_formatting,
caml_raise_constant:caml_raise_constant,
caml_return_exn_constant:caml_return_exn_constant,
caml_raise_with_arg:caml_raise_with_arg,
caml_raise_with_args:caml_raise_with_args,
caml_raise_with_string:caml_raise_with_string,
caml_failwith:caml_failwith,
caml_invalid_argument:caml_invalid_argument,
caml_raise_end_of_file:caml_raise_end_of_file,
caml_raise_zero_divide:caml_raise_zero_divide,
caml_raise_not_found:caml_raise_not_found,
caml_array_bound_error:caml_array_bound_error,
caml_compare_val_tag:caml_compare_val_tag,
caml_compare_val_get_custom:caml_compare_val_get_custom,
caml_compare_val_number_custom:caml_compare_val_number_custom,
caml_compare_val:caml_compare_val,
caml_compare:caml_compare,
caml_int_compare:caml_int_compare,
caml_equal:caml_equal,
caml_notequal:caml_notequal,
caml_greaterequal:caml_greaterequal,
caml_greaterthan:caml_greaterthan,
caml_lessequal:caml_lessequal,
caml_lessthan:caml_lessthan,
caml_blit_bigstring_to_bigstring:caml_blit_bigstring_to_bigstring,
caml_blit_bigstring_to_string:caml_blit_bigstring_to_string,
caml_blit_string_to_bigstring:caml_blit_string_to_bigstring,
caml_hash_mix_bigstring:caml_hash_mix_bigstring,
bigstring_to_array_buffer:bigstring_to_array_buffer,
bigstring_to_typed_array:bigstring_to_typed_array,
bigstring_of_array_buffer:bigstring_of_array_buffer,
bigstring_of_typed_array:bigstring_of_typed_array,
caml_bigstring_memcmp:caml_bigstring_memcmp,
caml_bigstring_blit_ba_to_ba:caml_bigstring_blit_ba_to_ba,
caml_bigstring_blit_string_to_ba:caml_bigstring_blit_string_to_ba,
caml_bigstring_blit_bytes_to_ba:caml_bigstring_blit_bytes_to_ba,
caml_bigstring_blit_ba_to_bytes:caml_bigstring_blit_ba_to_bytes,
caml_ba_init:caml_ba_init,
caml_ba_get_size:caml_ba_get_size,
caml_ba_get_size_per_element:caml_ba_get_size_per_element,
caml_ba_create_buffer:caml_ba_create_buffer,
caml_ba_custom_name:caml_ba_custom_name,
Ml_Bigarray:Ml_Bigarray,
Ml_Bigarray_c_1_1:Ml_Bigarray_c_1_1,
caml_ba_compare:caml_ba_compare,
caml_ba_create_unsafe:caml_ba_create_unsafe,
caml_ba_create:caml_ba_create,
caml_ba_change_layout:caml_ba_change_layout,
caml_ba_kind:caml_ba_kind,
caml_ba_layout:caml_ba_layout,
caml_ba_num_dims:caml_ba_num_dims,
caml_ba_dim:caml_ba_dim,
caml_ba_dim_1:caml_ba_dim_1,
caml_ba_dim_2:caml_ba_dim_2,
caml_ba_dim_3:caml_ba_dim_3,
caml_ba_get_generic:caml_ba_get_generic,
caml_ba_uint8_get16:caml_ba_uint8_get16,
caml_ba_uint8_get32:caml_ba_uint8_get32,
caml_ba_uint8_get64:caml_ba_uint8_get64,
caml_ba_get_1:caml_ba_get_1,
caml_ba_get_2:caml_ba_get_2,
caml_ba_get_3:caml_ba_get_3,
caml_ba_set_generic:caml_ba_set_generic,
caml_ba_uint8_set16:caml_ba_uint8_set16,
caml_ba_uint8_set32:caml_ba_uint8_set32,
caml_ba_uint8_set64:caml_ba_uint8_set64,
caml_ba_set_1:caml_ba_set_1,
caml_ba_set_2:caml_ba_set_2,
caml_ba_set_3:caml_ba_set_3,
caml_ba_fill:caml_ba_fill,
caml_ba_blit:caml_ba_blit,
caml_ba_sub:caml_ba_sub,
caml_ba_slice:caml_ba_slice,
caml_ba_reshape:caml_ba_reshape,
caml_ba_serialize:caml_ba_serialize,
caml_ba_deserialize:caml_ba_deserialize,
caml_ba_create_from:caml_ba_create_from,
caml_ba_hash:caml_ba_hash,
caml_ba_to_typed_array:caml_ba_to_typed_array,
caml_ba_kind_of_typed_array:caml_ba_kind_of_typed_array,
caml_ba_from_typed_array:caml_ba_from_typed_array,
caml_ml_debug_info_status:caml_ml_debug_info_status,
caml_backtrace_status:caml_backtrace_status,
caml_get_exception_backtrace:caml_get_exception_backtrace,
caml_get_exception_raw_backtrace:caml_get_exception_raw_backtrace,
caml_record_backtrace:caml_record_backtrace,
caml_convert_raw_backtrace:caml_convert_raw_backtrace,
caml_raw_backtrace_length:caml_raw_backtrace_length,
caml_raw_backtrace_next_slot:caml_raw_backtrace_next_slot,
caml_raw_backtrace_slot:caml_raw_backtrace_slot,
caml_restore_raw_backtrace:caml_restore_raw_backtrace,
caml_get_current_callstack:caml_get_current_callstack,
caml_convert_raw_backtrace_slot:caml_convert_raw_backtrace_slot,
caml_array_sub:caml_array_sub,
caml_array_append:caml_array_append,
caml_array_concat:caml_array_concat,
caml_array_blit:caml_array_blit,
caml_floatarray_blit:caml_floatarray_blit,
caml_array_set:caml_array_set,
caml_array_get:caml_array_get,
caml_array_fill:caml_array_fill,
caml_check_bound:caml_check_bound,
caml_make_vect:caml_make_vect,
caml_make_float_vect:caml_make_float_vect,
caml_floatarray_create:caml_floatarray_create};
caml_fs_init();
caml_register_global
(0,[248,caml_string_of_jsbytes("Out_of_memory"),-1],"Out_of_memory");
caml_register_global
(1,[248,caml_string_of_jsbytes("Sys_error"),-2],"Sys_error");
caml_register_global
(2,[248,caml_string_of_jsbytes("Failure"),-3],"Failure");
caml_register_global
(3,
[248,caml_string_of_jsbytes("Invalid_argument"),-4],
"Invalid_argument");
caml_register_global
(4,[248,caml_string_of_jsbytes("End_of_file"),-5],"End_of_file");
caml_register_global
(5,
[248,caml_string_of_jsbytes("Division_by_zero"),-6],
"Division_by_zero");
caml_register_global
(6,[248,caml_string_of_jsbytes("Not_found"),-7],"Not_found");
caml_register_global
(7,[248,caml_string_of_jsbytes("Match_failure"),-8],"Match_failure");
caml_register_global
(8,[248,caml_string_of_jsbytes("Stack_overflow"),-9],"Stack_overflow");
caml_register_global
(9,[248,caml_string_of_jsbytes("Sys_blocked_io"),-10],"Sys_blocked_io");
caml_register_global
(10,[248,caml_string_of_jsbytes("Assert_failure"),-11],"Assert_failure");
caml_register_global
(11,
[248,caml_string_of_jsbytes("Undefined_recursive_module"),-12],
"Undefined_recursive_module");
return}
(globalThis));
//# 1 "../.js/stdlib/stdlib.cma.js"
(function(globalThis)
{"use strict";
var
runtime=globalThis.jsoo_runtime,
caml_array_concat=runtime.caml_array_concat,
caml_array_get=runtime.caml_array_get,
caml_array_set=runtime.caml_array_set,
caml_array_sub=runtime.caml_array_sub,
caml_ba_change_layout=runtime.caml_ba_change_layout,
caml_ba_create=runtime.caml_ba_create,
caml_ba_dim_1=runtime.caml_ba_dim_1,
caml_ba_dim_2=runtime.caml_ba_dim_2,
caml_ba_kind=runtime.caml_ba_kind,
caml_ba_num_dims=runtime.caml_ba_num_dims,
caml_ba_reshape=runtime.caml_ba_reshape,
caml_ba_set_1=runtime.caml_ba_set_1,
caml_ba_set_2=runtime.caml_ba_set_2,
caml_ba_set_3=runtime.caml_ba_set_3,
caml_ba_set_generic=runtime.caml_ba_set_generic,
caml_ba_slice=runtime.caml_ba_slice,
caml_blit_bytes=runtime.caml_blit_bytes,
caml_blit_string=runtime.caml_blit_string,
caml_bswap16=runtime.caml_bswap16,
caml_bytes_get=runtime.caml_bytes_get,
caml_bytes_get16=runtime.caml_bytes_get16,
caml_bytes_get32=runtime.caml_bytes_get32,
caml_bytes_get64=runtime.caml_bytes_get64,
caml_bytes_of_string=runtime.caml_bytes_of_string,
caml_bytes_set=runtime.caml_bytes_set,
caml_bytes_set16=runtime.caml_bytes_set16,
caml_bytes_set32=runtime.caml_bytes_set32,
caml_bytes_set64=runtime.caml_bytes_set64,
caml_bytes_unsafe_get=runtime.caml_bytes_unsafe_get,
caml_bytes_unsafe_set=runtime.caml_bytes_unsafe_set,
caml_check_bound=runtime.caml_check_bound,
caml_compare=runtime.caml_compare,
caml_create_bytes=runtime.caml_create_bytes,
caml_div=runtime.caml_div,
caml_ephe_set_key=runtime.caml_ephe_set_key,
caml_ephe_unset_key=runtime.caml_ephe_unset_key,
caml_equal=runtime.caml_equal,
caml_fill_bytes=runtime.caml_fill_bytes,
caml_float_compare=runtime.caml_float_compare,
caml_float_of_string=runtime.caml_float_of_string,
caml_floatarray_blit=runtime.caml_floatarray_blit,
caml_floatarray_create=runtime.caml_floatarray_create,
caml_format_float=runtime.caml_format_float,
caml_format_int=runtime.caml_format_int,
caml_fresh_oo_id=runtime.caml_fresh_oo_id,
caml_get_exception_raw_backtra=runtime.caml_get_exception_raw_backtrace,
caml_get_public_method=runtime.caml_get_public_method,
caml_greaterequal=runtime.caml_greaterequal,
caml_greaterthan=runtime.caml_greaterthan,
caml_hash=runtime.caml_hash,
caml_input_value=runtime.caml_input_value,
caml_int32_bswap=runtime.caml_int32_bswap,
caml_int64_add=runtime.caml_int64_add,
caml_int64_bswap=runtime.caml_int64_bswap,
caml_int64_compare=runtime.caml_int64_compare,
caml_int64_float_of_bits=runtime.caml_int64_float_of_bits,
caml_int64_format=runtime.caml_int64_format,
caml_int64_mul=runtime.caml_int64_mul,
caml_int64_of_int32=runtime.caml_int64_of_int32,
caml_int64_of_string=runtime.caml_int64_of_string,
caml_int64_or=runtime.caml_int64_or,
caml_int64_shift_left=runtime.caml_int64_shift_left,
caml_int64_shift_right_unsigne=runtime.caml_int64_shift_right_unsigned,
caml_int64_sub=runtime.caml_int64_sub,
caml_int_compare=runtime.caml_int_compare,
caml_int_of_string=runtime.caml_int_of_string,
caml_lessequal=runtime.caml_lessequal,
caml_lessthan=runtime.caml_lessthan,
caml_make_vect=runtime.caml_make_vect,
caml_marshal_data_size=runtime.caml_marshal_data_size,
caml_md5_string=runtime.caml_md5_string,
caml_ml_bytes_length=runtime.caml_ml_bytes_length,
caml_ml_channel_size=runtime.caml_ml_channel_size,
caml_ml_channel_size_64=runtime.caml_ml_channel_size_64,
caml_ml_close_channel=runtime.caml_ml_close_channel,
caml_ml_flush=runtime.caml_ml_flush,
caml_ml_input=runtime.caml_ml_input,
caml_ml_input_char=runtime.caml_ml_input_char,
caml_ml_open_descriptor_in=runtime.caml_ml_open_descriptor_in,
caml_ml_open_descriptor_out=runtime.caml_ml_open_descriptor_out,
caml_ml_output=runtime.caml_ml_output,
caml_ml_output_bytes=runtime.caml_ml_output_bytes,
caml_ml_output_char=runtime.caml_ml_output_char,
caml_ml_pos_in=runtime.caml_ml_pos_in,
caml_ml_set_binary_mode=runtime.caml_ml_set_binary_mode,
caml_ml_set_channel_name=runtime.caml_ml_set_channel_name,
caml_ml_string_length=runtime.caml_ml_string_length,
caml_mod=runtime.caml_mod,
caml_mul=runtime.caml_mul,
caml_nextafter_float=runtime.caml_nextafter_float,
caml_notequal=runtime.caml_notequal,
caml_obj_block=runtime.caml_obj_block,
caml_obj_make_forward=runtime.caml_obj_make_forward,
caml_obj_tag=runtime.caml_obj_tag,
caml_output_value=runtime.caml_output_value,
caml_register_global=runtime.caml_register_global,
caml_register_named_value=runtime.caml_register_named_value,
caml_restore_raw_backtrace=runtime.caml_restore_raw_backtrace,
caml_set_oo_id=runtime.caml_set_oo_id,
caml_signbit_float=runtime.caml_signbit_float,
caml_string_compare=runtime.caml_string_compare,
caml_string_equal=runtime.caml_string_equal,
caml_string_get=runtime.caml_string_get,
caml_string_notequal=runtime.caml_string_notequal,
caml_string_of_bytes=runtime.caml_string_of_bytes,
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
caml_string_unsafe_get=runtime.caml_string_unsafe_get,
caml_sys_argv=runtime.caml_sys_argv,
caml_sys_getenv=runtime.caml_sys_getenv,
caml_sys_open=runtime.caml_sys_open,
caml_sys_random_seed=runtime.caml_sys_random_seed,
caml_trampoline=runtime.caml_trampoline,
caml_trampoline_return=runtime.caml_trampoline_return,
caml_wrap_exception=runtime.caml_wrap_exception;
function caml_call1(f,a0)
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
function caml_call2(f,a0,a1)
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
function caml_call3(f,a0,a1,a2)
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
function caml_call4(f,a0,a1,a2,a3)
{return f.length == 4
?f(a0,a1,a2,a3)
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
function caml_call5(f,a0,a1,a2,a3,a4)
{return f.length == 5
?f(a0,a1,a2,a3,a4)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
function caml_call7(f,a0,a1,a2,a3,a4,a5,a6)
{return f.length == 7
?f(a0,a1,a2,a3,a4,a5,a6)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6])}
var
global_data=runtime.caml_get_global_data(),
cst$0=caml_string_of_jsbytes("%,"),
cst_really_input=caml_string_of_jsbytes("really_input"),
cst_input=caml_string_of_jsbytes("input"),
cst_output_substring=caml_string_of_jsbytes("output_substring"),
cst_output=caml_string_of_jsbytes("output"),
cst_12g=caml_string_of_jsbytes("%.12g"),
cst=caml_string_of_jsbytes("."),
cst_false$1=caml_string_of_jsbytes("false"),
cst_true$1=caml_string_of_jsbytes("true"),
cst_false$0=caml_string_of_jsbytes("false"),
cst_true$0=caml_string_of_jsbytes("true"),
cst_bool_of_string=caml_string_of_jsbytes("bool_of_string"),
cst_true=caml_string_of_jsbytes("true"),
cst_false=caml_string_of_jsbytes("false"),
cst_char_of_int=caml_string_of_jsbytes("char_of_int"),
cst_Stdlib_Exit=caml_string_of_jsbytes("Stdlib.Exit"),
cst_Stdlib_Pervasives_Exit=
caml_string_of_jsbytes("Stdlib.Pervasives.Exit"),
cst_Stdlib_Sys_Break=caml_string_of_jsbytes("Stdlib.Sys.Break"),
ocaml_version=caml_string_of_jsbytes("4.14.0"),
ocaml_release=[0,4,14,0,0],
cst_Obj_Ephemeron_blit_key=
caml_string_of_jsbytes("Obj.Ephemeron.blit_key"),
cst_Obj_Ephemeron_check_key=
caml_string_of_jsbytes("Obj.Ephemeron.check_key"),
cst_Obj_Ephemeron_unset_key=
caml_string_of_jsbytes("Obj.Ephemeron.unset_key"),
cst_Obj_Ephemeron_set_key=caml_string_of_jsbytes("Obj.Ephemeron.set_key"),
cst_Obj_Ephemeron_get_key_copy=
caml_string_of_jsbytes("Obj.Ephemeron.get_key_copy"),
cst_Obj_Ephemeron_get_key=caml_string_of_jsbytes("Obj.Ephemeron.get_key"),
cst_Obj_Ephemeron_create=caml_string_of_jsbytes("Obj.Ephemeron.create"),
cst_Obj_extension_constructor$0=
caml_string_of_jsbytes("Obj.extension_constructor"),
cst_Obj_extension_constructor=
caml_string_of_jsbytes("Obj.extension_constructor"),
cst_CamlinternalLazy_Undefined=
caml_string_of_jsbytes("CamlinternalLazy.Undefined"),
cst_Seq_drop=caml_string_of_jsbytes("Seq.drop"),
cst_Seq_take=caml_string_of_jsbytes("Seq.take"),
cst_Seq_init=caml_string_of_jsbytes("Seq.init"),
cst_Stdlib_Seq_Forced_twice=
caml_string_of_jsbytes("Stdlib.Seq.Forced_twice"),
cst_option_is_None=caml_string_of_jsbytes("option is None"),
cst_result_is_Ok=caml_string_of_jsbytes("result is Ok _"),
cst_result_is_Error=caml_string_of_jsbytes("result is Error _"),
cst_true$2=caml_string_of_jsbytes("true"),
cst_false$2=caml_string_of_jsbytes("false"),
cst$1=caml_string_of_jsbytes("\\\\"),
cst$2=caml_string_of_jsbytes("\\'"),
cst_b=caml_string_of_jsbytes("\\b"),
cst_t=caml_string_of_jsbytes("\\t"),
cst_n=caml_string_of_jsbytes("\\n"),
cst_r=caml_string_of_jsbytes("\\r"),
cst_Char_chr=caml_string_of_jsbytes("Char.chr"),
cst_is_not_a_latin1_character=
caml_string_of_jsbytes(" is not a latin1 character"),
cst_04X=caml_string_of_jsbytes("%04X"),
cst_U=caml_string_of_jsbytes("U+"),
cst_is_not_an_Unicode_scalar_v=
caml_string_of_jsbytes(" is not an Unicode scalar value"),
cst_X=caml_string_of_jsbytes("%X"),
err_no_pred=caml_string_of_jsbytes("U+0000 has no predecessor"),
err_no_succ=caml_string_of_jsbytes("U+10FFFF has no successor"),
cst_List_map2=caml_string_of_jsbytes("List.map2"),
cst_List_iter2=caml_string_of_jsbytes("List.iter2"),
cst_List_fold_left2=caml_string_of_jsbytes("List.fold_left2"),
cst_List_fold_right2=caml_string_of_jsbytes("List.fold_right2"),
cst_List_for_all2=caml_string_of_jsbytes("List.for_all2"),
cst_List_exists2=caml_string_of_jsbytes("List.exists2"),
cst_List_combine=caml_string_of_jsbytes("List.combine"),
cst_List_rev_map2=caml_string_of_jsbytes("List.rev_map2"),
cst_List_init=caml_string_of_jsbytes("List.init"),
cst_List_nth$0=caml_string_of_jsbytes("List.nth"),
cst_nth=caml_string_of_jsbytes("nth"),
cst_List_nth=caml_string_of_jsbytes("List.nth"),
cst_tl=caml_string_of_jsbytes("tl"),
cst_hd=caml_string_of_jsbytes("hd"),
cst_index_out_of_bounds$2=caml_string_of_jsbytes("index out of bounds"),
cst_index_out_of_bounds$1=caml_string_of_jsbytes("index out of bounds"),
cst_index_out_of_bounds$0=caml_string_of_jsbytes("index out of bounds"),
cst_index_out_of_bounds=caml_string_of_jsbytes("index out of bounds"),
cst_Bytes_of_seq_cannot_grow_b=
caml_string_of_jsbytes("Bytes.of_seq: cannot grow bytes"),
cst_String_rcontains_from_Byte=
caml_string_of_jsbytes("String.rcontains_from / Bytes.rcontains_from"),
cst_String_contains_from_Bytes=
caml_string_of_jsbytes("String.contains_from / Bytes.contains_from"),
cst_String_rindex_from_opt_Byt=
caml_string_of_jsbytes("String.rindex_from_opt / Bytes.rindex_from_opt"),
cst_String_rindex_from_Bytes_r=
caml_string_of_jsbytes("String.rindex_from / Bytes.rindex_from"),
cst_String_index_from_opt_Byte=
caml_string_of_jsbytes("String.index_from_opt / Bytes.index_from_opt"),
cst_String_index_from_Bytes_in=
caml_string_of_jsbytes("String.index_from / Bytes.index_from"),
cst_Bytes_concat=caml_string_of_jsbytes("Bytes.concat"),
cst_String_blit_Bytes_blit_str=
caml_string_of_jsbytes("String.blit / Bytes.blit_string"),
cst_Bytes_blit=caml_string_of_jsbytes("Bytes.blit"),
cst_String_fill_Bytes_fill=
caml_string_of_jsbytes("String.fill / Bytes.fill"),
cst_Bytes_extend=caml_string_of_jsbytes("Bytes.extend"),
cst_String_sub_Bytes_sub=caml_string_of_jsbytes("String.sub / Bytes.sub"),
cst_String_rcontains_from_Byte$0=
caml_string_of_jsbytes("String.rcontains_from / Bytes.rcontains_from"),
cst_String_contains_from_Bytes$0=
caml_string_of_jsbytes("String.contains_from / Bytes.contains_from"),
cst_String_rindex_from_opt_Byt$0=
caml_string_of_jsbytes("String.rindex_from_opt / Bytes.rindex_from_opt"),
cst_String_rindex_from_Bytes_r$0=
caml_string_of_jsbytes("String.rindex_from / Bytes.rindex_from"),
cst_String_index_from_opt_Byte$0=
caml_string_of_jsbytes("String.index_from_opt / Bytes.index_from_opt"),
cst_String_index_from_Bytes_in$0=
caml_string_of_jsbytes("String.index_from / Bytes.index_from"),
cst$4=caml_string_of_jsbytes(""),
cst$3=caml_string_of_jsbytes(""),
cst_String_concat=caml_string_of_jsbytes("String.concat"),
empty$1=caml_string_of_jsbytes(""),
cst$5=caml_string_of_jsbytes("()"),
cst_Marshal_from_bytes=caml_string_of_jsbytes("Marshal.from_bytes"),
cst_Marshal_from_bytes$0=caml_string_of_jsbytes("Marshal.from_bytes"),
cst_Marshal_data_size=caml_string_of_jsbytes("Marshal.data_size"),
cst_Marshal_to_buffer_substrin=
caml_string_of_jsbytes("Marshal.to_buffer: substring out of bounds"),
cst_Array_combine=caml_string_of_jsbytes("Array.combine"),
cst_Array_exists2=caml_string_of_jsbytes("Array.exists2"),
cst_Array_for_all2=caml_string_of_jsbytes("Array.for_all2"),
cst_Array_map2_arrays_must_hav=
caml_string_of_jsbytes("Array.map2: arrays must have the same length"),
cst_Array_iter2_arrays_must_ha=
caml_string_of_jsbytes("Array.iter2: arrays must have the same length"),
cst_Array_blit=caml_string_of_jsbytes("Array.blit"),
cst_Array_fill=caml_string_of_jsbytes("Array.fill"),
cst_Array_sub=caml_string_of_jsbytes("Array.sub"),
cst_Array_init=caml_string_of_jsbytes("Array.init"),
cst_Stdlib_Array_Bottom=caml_string_of_jsbytes("Stdlib.Array.Bottom"),
cst_Float_Array_map2_arrays_mu=
caml_string_of_jsbytes
("Float.Array.map2: arrays must have the same length"),
cst_Float_Array_iter2_arrays_m=
caml_string_of_jsbytes
("Float.Array.iter2: arrays must have the same length"),
cst_Float_array_blit=caml_string_of_jsbytes("Float.array.blit"),
cst_Float_array_blit$0=caml_string_of_jsbytes("Float.array.blit"),
cst_Float_Array_fill=caml_string_of_jsbytes("Float.Array.fill"),
cst_Float_Array_sub=caml_string_of_jsbytes("Float.Array.sub"),
cst_Float_Array_concat=caml_string_of_jsbytes("Float.Array.concat"),
cst_Float_Array_init=caml_string_of_jsbytes("Float.Array.init"),
cst_Stdlib_Float_Array_Bottom=
caml_string_of_jsbytes("Stdlib.Float.Array.Bottom"),
cst_d=caml_string_of_jsbytes("%d"),
cst_d$0=caml_string_of_jsbytes("%d"),
zero$2=runtime.caml_int64_create_lo_mi_hi(0,0,0),
one$2=runtime.caml_int64_create_lo_mi_hi(1,0,0),
minus_one$2=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,65535),
min_int$2=runtime.caml_int64_create_lo_mi_hi(0,0,32768),
max_int$2=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,32767),
cst_d$1=caml_string_of_jsbytes("%d"),
cst_Lexing_lex_refill_cannot_g=
caml_string_of_jsbytes("Lexing.lex_refill: cannot grow buffer"),
dummy_pos=[0,caml_string_of_jsbytes(""),0,0,-1],
zero_pos=[0,caml_string_of_jsbytes(""),1,0,0],
cst_syntax_error=caml_string_of_jsbytes("syntax error"),
cst_Stdlib_Parsing_YYexit=caml_string_of_jsbytes("Stdlib.Parsing.YYexit"),
cst_Stdlib_Parsing_Parse_error=
caml_string_of_jsbytes("Stdlib.Parsing.Parse_error"),
cst_Set_remove_min_elt=caml_string_of_jsbytes("Set.remove_min_elt"),
cst_Set_bal=caml_string_of_jsbytes("Set.bal"),
cst_Set_bal$0=caml_string_of_jsbytes("Set.bal"),
cst_Set_bal$1=caml_string_of_jsbytes("Set.bal"),
cst_Set_bal$2=caml_string_of_jsbytes("Set.bal"),
cst_Map_remove_min_elt=caml_string_of_jsbytes("Map.remove_min_elt"),
cst_Map_bal=caml_string_of_jsbytes("Map.bal"),
cst_Map_bal$0=caml_string_of_jsbytes("Map.bal"),
cst_Map_bal$1=caml_string_of_jsbytes("Map.bal"),
cst_Map_bal$2=caml_string_of_jsbytes("Map.bal"),
cst_Stdlib_Stack_Empty=caml_string_of_jsbytes("Stdlib.Stack.Empty"),
cst_Stdlib_Queue_Empty=caml_string_of_jsbytes("Stdlib.Queue.Empty"),
cst_count=caml_string_of_jsbytes("{count = "),
cst_data=caml_string_of_jsbytes("; data = "),
cst$6=caml_string_of_jsbytes("}"),
cst_Sempty=caml_string_of_jsbytes("Sempty"),
cst_Scons=caml_string_of_jsbytes("Scons ("),
cst$7=caml_string_of_jsbytes(", "),
cst$8=caml_string_of_jsbytes(")"),
cst_Sapp=caml_string_of_jsbytes("Sapp ("),
cst$9=caml_string_of_jsbytes(", "),
cst$10=caml_string_of_jsbytes(")"),
cst_Slazy=caml_string_of_jsbytes("Slazy"),
cst_Sgen=caml_string_of_jsbytes("Sgen"),
cst_Sbuffio=caml_string_of_jsbytes("Sbuffio"),
cst_Stdlib_Stream_Failure=caml_string_of_jsbytes("Stdlib.Stream.Failure"),
cst_Stdlib_Stream_Error=caml_string_of_jsbytes("Stdlib.Stream.Error"),
cst_Buffer_truncate=caml_string_of_jsbytes("Buffer.truncate"),
cst_Buffer_add_channel=caml_string_of_jsbytes("Buffer.add_channel"),
cst_Buffer_add_substring_add_s=
caml_string_of_jsbytes("Buffer.add_substring/add_subbytes"),
cst_Buffer_add_cannot_grow_buf=
caml_string_of_jsbytes("Buffer.add: cannot grow buffer"),
cst_Buffer_nth=caml_string_of_jsbytes("Buffer.nth"),
cst_Buffer_blit=caml_string_of_jsbytes("Buffer.blit"),
cst_Buffer_sub=caml_string_of_jsbytes("Buffer.sub"),
cst_c=caml_string_of_jsbytes("%c"),
cst_s=caml_string_of_jsbytes("%s"),
cst_i=caml_string_of_jsbytes("%i"),
cst_li=caml_string_of_jsbytes("%li"),
cst_ni=caml_string_of_jsbytes("%ni"),
cst_Li=caml_string_of_jsbytes("%Li"),
cst_f=caml_string_of_jsbytes("%f"),
cst_B=caml_string_of_jsbytes("%B"),
cst$21=caml_string_of_jsbytes("%{"),
cst$22=caml_string_of_jsbytes("%}"),
cst$23=caml_string_of_jsbytes("%("),
cst$24=caml_string_of_jsbytes("%)"),
cst_a=caml_string_of_jsbytes("%a"),
cst_t$0=caml_string_of_jsbytes("%t"),
cst$25=caml_string_of_jsbytes("%?"),
cst_r$0=caml_string_of_jsbytes("%r"),
cst_r$1=caml_string_of_jsbytes("%_r"),
cst_u$0=caml_string_of_jsbytes("%u"),
cst_Printf_bad_conversion=
caml_string_of_jsbytes("Printf: bad conversion %["),
cst_Printf_bad_conversion$0=
caml_string_of_jsbytes("Printf: bad conversion %_"),
cst$30=caml_string_of_jsbytes("@{"),
cst$31=caml_string_of_jsbytes("@["),
cst$32=caml_string_of_jsbytes("@{"),
cst$33=caml_string_of_jsbytes("@["),
cst$34=caml_string_of_jsbytes("@{"),
cst$35=caml_string_of_jsbytes("@["),
cst_0=caml_string_of_jsbytes("0"),
cst_padding=caml_string_of_jsbytes("padding"),
cst_precision=caml_string_of_jsbytes("precision"),
cst$40=caml_string_of_jsbytes("'*'"),
cst$38=caml_string_of_jsbytes("'-'"),
cst_0$2=caml_string_of_jsbytes("'0'"),
cst$39=caml_string_of_jsbytes("'*'"),
cst_0$0=caml_string_of_jsbytes("0"),
cst_0$1=caml_string_of_jsbytes("0"),
cst_precision$0=caml_string_of_jsbytes("precision"),
cst_precision$1=caml_string_of_jsbytes("precision"),
cst$41=caml_string_of_jsbytes("'+'"),
cst$42=caml_string_of_jsbytes("'#'"),
cst$43=caml_string_of_jsbytes("' '"),
cst_padding$0=caml_string_of_jsbytes("`padding'"),
cst_precision$2=caml_string_of_jsbytes("`precision'"),
cst$44=caml_string_of_jsbytes("'+'"),
cst$45=caml_string_of_jsbytes("'_'"),
sub_format=[0,0,caml_string_of_jsbytes("")],
formatting_lit=[0,caml_string_of_jsbytes("@;"),1,0],
cst_digit=caml_string_of_jsbytes("digit"),
cst_character=caml_string_of_jsbytes("character ')'"),
cst_character$0=caml_string_of_jsbytes("character '}'"),
cst$49=caml_string_of_jsbytes("'#'"),
cst$46=caml_string_of_jsbytes("'+'"),
cst$47=caml_string_of_jsbytes("'+'"),
cst$48=caml_string_of_jsbytes("' '"),
cst$50=caml_string_of_jsbytes("'+'"),
cst_non_zero_widths_are_unsupp=
caml_string_of_jsbytes
("non-zero widths are unsupported for %c conversions"),
cst_unexpected_end_of_format=
caml_string_of_jsbytes("unexpected end of format"),
cst$36=caml_string_of_jsbytes(""),
cst$37=caml_string_of_jsbytes(""),
cst_b$0=caml_string_of_jsbytes("b"),
cst_h=caml_string_of_jsbytes("h"),
cst_hov=caml_string_of_jsbytes("hov"),
cst_hv=caml_string_of_jsbytes("hv"),
cst_v=caml_string_of_jsbytes("v"),
cst_nan=caml_string_of_jsbytes("nan"),
cst_neg_infinity=caml_string_of_jsbytes("neg_infinity"),
cst_infinity=caml_string_of_jsbytes("infinity"),
cst$29=caml_string_of_jsbytes("."),
cst_nd$0=caml_string_of_jsbytes("%+nd"),
cst_nd$1=caml_string_of_jsbytes("% nd"),
cst_ni$1=caml_string_of_jsbytes("%+ni"),
cst_ni$2=caml_string_of_jsbytes("% ni"),
cst_nx=caml_string_of_jsbytes("%nx"),
cst_nx$0=caml_string_of_jsbytes("%#nx"),
cst_nX=caml_string_of_jsbytes("%nX"),
cst_nX$0=caml_string_of_jsbytes("%#nX"),
cst_no=caml_string_of_jsbytes("%no"),
cst_no$0=caml_string_of_jsbytes("%#no"),
cst_nd=caml_string_of_jsbytes("%nd"),
cst_ni$0=caml_string_of_jsbytes("%ni"),
cst_nu=caml_string_of_jsbytes("%nu"),
cst_ld$0=caml_string_of_jsbytes("%+ld"),
cst_ld$1=caml_string_of_jsbytes("% ld"),
cst_li$1=caml_string_of_jsbytes("%+li"),
cst_li$2=caml_string_of_jsbytes("% li"),
cst_lx=caml_string_of_jsbytes("%lx"),
cst_lx$0=caml_string_of_jsbytes("%#lx"),
cst_lX=caml_string_of_jsbytes("%lX"),
cst_lX$0=caml_string_of_jsbytes("%#lX"),
cst_lo=caml_string_of_jsbytes("%lo"),
cst_lo$0=caml_string_of_jsbytes("%#lo"),
cst_ld=caml_string_of_jsbytes("%ld"),
cst_li$0=caml_string_of_jsbytes("%li"),
cst_lu=caml_string_of_jsbytes("%lu"),
cst_Ld$0=caml_string_of_jsbytes("%+Ld"),
cst_Ld$1=caml_string_of_jsbytes("% Ld"),
cst_Li$1=caml_string_of_jsbytes("%+Li"),
cst_Li$2=caml_string_of_jsbytes("% Li"),
cst_Lx=caml_string_of_jsbytes("%Lx"),
cst_Lx$0=caml_string_of_jsbytes("%#Lx"),
cst_LX=caml_string_of_jsbytes("%LX"),
cst_LX$0=caml_string_of_jsbytes("%#LX"),
cst_Lo=caml_string_of_jsbytes("%Lo"),
cst_Lo$0=caml_string_of_jsbytes("%#Lo"),
cst_Ld=caml_string_of_jsbytes("%Ld"),
cst_Li$0=caml_string_of_jsbytes("%Li"),
cst_Lu=caml_string_of_jsbytes("%Lu"),
cst_d$3=caml_string_of_jsbytes("%+d"),
cst_d$4=caml_string_of_jsbytes("% d"),
cst_i$1=caml_string_of_jsbytes("%+i"),
cst_i$2=caml_string_of_jsbytes("% i"),
cst_x=caml_string_of_jsbytes("%x"),
cst_x$0=caml_string_of_jsbytes("%#x"),
cst_X$0=caml_string_of_jsbytes("%X"),
cst_X$1=caml_string_of_jsbytes("%#X"),
cst_o=caml_string_of_jsbytes("%o"),
cst_o$0=caml_string_of_jsbytes("%#o"),
cst_d$2=caml_string_of_jsbytes("%d"),
cst_i$0=caml_string_of_jsbytes("%i"),
cst_u=caml_string_of_jsbytes("%u"),
cst$26=caml_string_of_jsbytes("%!"),
cst$27=caml_string_of_jsbytes("@{"),
cst$28=caml_string_of_jsbytes("@["),
cst_0c=caml_string_of_jsbytes("0c"),
cst$20=caml_string_of_jsbytes("%%"),
cst$12=caml_string_of_jsbytes("@]"),
cst$13=caml_string_of_jsbytes("@}"),
cst$14=caml_string_of_jsbytes("@?"),
cst$15=caml_string_of_jsbytes("@\n"),
cst$16=caml_string_of_jsbytes("@."),
cst$17=caml_string_of_jsbytes("@@"),
cst$18=caml_string_of_jsbytes("@%"),
cst$19=caml_string_of_jsbytes("@"),
cst$11=caml_string_of_jsbytes(".*"),
cst_CamlinternalFormat_Type_mi=
caml_string_of_jsbytes("CamlinternalFormat.Type_mismatch"),
cst$58=caml_string_of_jsbytes(""),
cst$59=caml_string_of_jsbytes("\n"),
cst_a_boolean=caml_string_of_jsbytes("a boolean"),
cst_an_integer=caml_string_of_jsbytes("an integer"),
cst_an_integer$0=caml_string_of_jsbytes("an integer"),
cst_a_float=caml_string_of_jsbytes("a float"),
cst_a_float$0=caml_string_of_jsbytes("a float"),
cst$55=caml_string_of_jsbytes(""),
cst$56=caml_string_of_jsbytes(" "),
cst$57=caml_string_of_jsbytes(""),
cst_one_of=caml_string_of_jsbytes("one of: "),
cst_Arg_Expand_is_is_only_allo=
caml_string_of_jsbytes
("Arg.Expand is is only allowed with Arg.parse_and_expand_argv_dynamic"),
cst_no_argument=caml_string_of_jsbytes("no argument"),
cst$54=caml_string_of_jsbytes("(?)"),
cst_help$3=caml_string_of_jsbytes("--help"),
cst_help$4=caml_string_of_jsbytes("-help"),
cst_help$2=caml_string_of_jsbytes("-help"),
cst_Display_this_list_of_optio=
caml_string_of_jsbytes(" Display this list of options"),
cst_help=caml_string_of_jsbytes("-help"),
cst_help$1=caml_string_of_jsbytes("--help"),
cst_Display_this_list_of_optio$0=
caml_string_of_jsbytes(" Display this list of options"),
cst_help$0=caml_string_of_jsbytes("--help"),
cst$51=caml_string_of_jsbytes("}"),
cst$52=caml_string_of_jsbytes("|"),
cst$53=caml_string_of_jsbytes("{"),
cst_none=caml_string_of_jsbytes("<none>"),
cst_Stdlib_Arg_Bad=caml_string_of_jsbytes("Stdlib.Arg.Bad"),
cst_Stdlib_Arg_Help=caml_string_of_jsbytes("Stdlib.Arg.Help"),
cst_Stdlib_Arg_Stop=caml_string_of_jsbytes("Stdlib.Arg.Stop"),
cst$61=caml_string_of_jsbytes(""),
cst_Fatal_error_out_of_memory_=
caml_string_of_jsbytes
("Fatal error: out of memory in uncaught exception handler"),
cst$65=caml_string_of_jsbytes(""),
cst_Program_not_linked_with_g_=
caml_string_of_jsbytes
("(Program not linked with -g, cannot print stack backtrace)\n"),
cst_Raised_at=caml_string_of_jsbytes("Raised at"),
cst_Re_raised_at=caml_string_of_jsbytes("Re-raised at"),
cst_Raised_by_primitive_operat=
caml_string_of_jsbytes("Raised by primitive operation at"),
cst_Called_from=caml_string_of_jsbytes("Called from"),
cst_inlined=caml_string_of_jsbytes(" (inlined)"),
cst$64=caml_string_of_jsbytes(""),
partial=[4,0,0,0,[12,45,[4,0,0,0,0]]],
cst_Out_of_memory=caml_string_of_jsbytes("Out of memory"),
cst_Stack_overflow=caml_string_of_jsbytes("Stack overflow"),
cst_Pattern_matching_failed=
caml_string_of_jsbytes("Pattern matching failed"),
cst_Assertion_failed=caml_string_of_jsbytes("Assertion failed"),
cst_Undefined_recursive_module=
caml_string_of_jsbytes("Undefined recursive module"),
cst$62=caml_string_of_jsbytes(""),
cst$63=caml_string_of_jsbytes(""),
cst$60=caml_string_of_jsbytes("_"),
locfmt=
[0,
[11,
caml_string_of_jsbytes('File "'),
[2,
0,
[11,
caml_string_of_jsbytes('", line '),
[4,
0,
0,
0,
[11,
caml_string_of_jsbytes(", characters "),
[4,
0,
0,
0,
[12,45,[4,0,0,0,[11,caml_string_of_jsbytes(": "),[2,0,0]]]]]]]]]],
caml_string_of_jsbytes('File "%s", line %d, characters %d-%d: %s')],
cst_Fun_Finally_raised=caml_string_of_jsbytes("Fun.Finally_raised: "),
cst_Stdlib_Fun_Finally_raised=
caml_string_of_jsbytes("Stdlib.Fun.Finally_raised"),
cst_Digest_from_hex$0=caml_string_of_jsbytes("Digest.from_hex"),
cst_Digest_from_hex=caml_string_of_jsbytes("Digest.from_hex"),
cst_Digest_to_hex=caml_string_of_jsbytes("Digest.to_hex"),
cst_Digest_substring=caml_string_of_jsbytes("Digest.substring"),
cst_Random_int64=caml_string_of_jsbytes("Random.int64"),
cst_Random_int32=caml_string_of_jsbytes("Random.int32"),
cst_Random_full_int=caml_string_of_jsbytes("Random.full_int"),
cst_Random_int=caml_string_of_jsbytes("Random.int"),
cst_x$1=caml_string_of_jsbytes("x"),
cst_Hashtbl_unsupported_hash_t=
caml_string_of_jsbytes("Hashtbl: unsupported hash table format"),
cst_OCAMLRUNPARAM=caml_string_of_jsbytes("OCAMLRUNPARAM"),
cst_CAMLRUNPARAM=caml_string_of_jsbytes("CAMLRUNPARAM"),
cst$66=caml_string_of_jsbytes(""),
cst_Weak_Make_hash_bucket_cann=
caml_string_of_jsbytes("Weak.Make: hash bucket cannot grow more"),
cst_Weak_fill=caml_string_of_jsbytes("Weak.fill"),
cst_Weak_blit=caml_string_of_jsbytes("Weak.blit"),
cst_Weak_check=caml_string_of_jsbytes("Weak.check"),
cst_Weak_get_copy=caml_string_of_jsbytes("Weak.get_copy"),
cst_Weak_get=caml_string_of_jsbytes("Weak.get"),
cst_Weak_set=caml_string_of_jsbytes("Weak.set"),
cst_Weak_create=caml_string_of_jsbytes("Weak.create"),
cst$84=caml_string_of_jsbytes(""),
cst$85=caml_string_of_jsbytes(""),
cst$83=caml_string_of_jsbytes("."),
cst$80=caml_string_of_jsbytes(">"),
cst$81=caml_string_of_jsbytes("<\/"),
cst$82=caml_string_of_jsbytes(""),
cst$77=caml_string_of_jsbytes(">"),
cst$78=caml_string_of_jsbytes("<"),
cst$79=caml_string_of_jsbytes(""),
cst$76=caml_string_of_jsbytes("\n"),
cst_Format_pp_set_geometry=
caml_string_of_jsbytes("Format.pp_set_geometry: "),
cst$72=caml_string_of_jsbytes(""),
cst$73=caml_string_of_jsbytes(""),
cst$74=caml_string_of_jsbytes(""),
cst$75=caml_string_of_jsbytes(""),
cst$68=caml_string_of_jsbytes(""),
cst$69=caml_string_of_jsbytes(""),
cst$70=caml_string_of_jsbytes(""),
cst$71=caml_string_of_jsbytes(""),
cst$67=caml_string_of_jsbytes(""),
cst_Stdlib_Format_String_tag=
caml_string_of_jsbytes("Stdlib.Format.String_tag"),
cst_end_of_input_not_found=
caml_string_of_jsbytes("end of input not found"),
cst_scanf_bad_conversion_a=
caml_string_of_jsbytes('scanf: bad conversion "%a"'),
cst_scanf_bad_conversion_t=
caml_string_of_jsbytes('scanf: bad conversion "%t"'),
cst_scanf_missing_reader=caml_string_of_jsbytes("scanf: missing reader"),
cst_scanf_bad_conversion_custo=
caml_string_of_jsbytes('scanf: bad conversion "%?" (custom converter)'),
cst_scanf_bad_conversion=
caml_string_of_jsbytes('scanf: bad conversion "%*"'),
cst_scanf_bad_conversion$0=
caml_string_of_jsbytes('scanf: bad conversion "%*"'),
cst_scanf_bad_conversion$1=
caml_string_of_jsbytes('scanf: bad conversion "%-"'),
cst_scanf_bad_conversion$2=
caml_string_of_jsbytes('scanf: bad conversion "%*"'),
cst$91=caml_string_of_jsbytes('"'),
cst$92=caml_string_of_jsbytes('"'),
cst$89=caml_string_of_jsbytes('"'),
cst$90=caml_string_of_jsbytes('"'),
cst$88=caml_string_of_jsbytes('"'),
cst_in_format=caml_string_of_jsbytes(' in format "'),
cst_an=caml_string_of_jsbytes("an"),
cst_x$2=caml_string_of_jsbytes("x"),
cst_nfinity=caml_string_of_jsbytes("nfinity"),
cst_digits=caml_string_of_jsbytes("digits"),
cst_decimal_digits=caml_string_of_jsbytes("decimal digits"),
cst_0b=caml_string_of_jsbytes("0b"),
cst_0o=caml_string_of_jsbytes("0o"),
cst_0u=caml_string_of_jsbytes("0u"),
cst_0x=caml_string_of_jsbytes("0x"),
cst_false$3=caml_string_of_jsbytes("false"),
cst_true$3=caml_string_of_jsbytes("true"),
cst_not_a_valid_float_in_hexad=
caml_string_of_jsbytes("not a valid float in hexadecimal notation"),
cst_no_dot_or_exponent_part_fo=
caml_string_of_jsbytes("no dot or exponent part found in float token"),
cst$87=caml_string_of_jsbytes("-"),
cst_unnamed_function=caml_string_of_jsbytes("unnamed function"),
cst_unnamed_character_string=
caml_string_of_jsbytes("unnamed character string"),
cst_unnamed_Stdlib_input_chann=
caml_string_of_jsbytes("unnamed Stdlib input channel"),
cst$86=caml_string_of_jsbytes("-"),
cst_Stdlib_Scanf_Scan_failure=
caml_string_of_jsbytes("Stdlib.Scanf.Scan_failure"),
cst_binary=caml_string_of_jsbytes("binary"),
cst_octal=caml_string_of_jsbytes("octal"),
cst_hexadecimal=caml_string_of_jsbytes("hexadecimal"),
cst_a_Char=caml_string_of_jsbytes("a Char"),
cst_a_String=caml_string_of_jsbytes("a String"),
cst$93=caml_string_of_jsbytes(""),
cst_CamlinternalMod_update_mod=
caml_string_of_jsbytes("CamlinternalMod.update_mod: not a module"),
cst_CamlinternalMod_init_mod_n=
caml_string_of_jsbytes("CamlinternalMod.init_mod: not a module"),
cst$94=caml_string_of_jsbytes(""),
cst$95=caml_string_of_jsbytes(""),
cst$96=caml_string_of_jsbytes(""),
cst$97=caml_string_of_jsbytes(""),
cst$99=caml_string_of_jsbytes(""),
cst$98=caml_string_of_jsbytes(""),
cst_Illegal_character=caml_string_of_jsbytes("Illegal character "),
cst_Filename_chop_extension=
caml_string_of_jsbytes("Filename.chop_extension"),
cst$127=caml_string_of_jsbytes(""),
cst_Filename_chop_suffix=caml_string_of_jsbytes("Filename.chop_suffix"),
cst$126=caml_string_of_jsbytes(""),
cst_2_1$0=caml_string_of_jsbytes(" 2>&1"),
cst_2$0=caml_string_of_jsbytes(" 2>"),
cst$125=caml_string_of_jsbytes(""),
cst$117=caml_string_of_jsbytes(" >"),
cst$124=caml_string_of_jsbytes(""),
cst$118=caml_string_of_jsbytes(" <"),
cst$123=caml_string_of_jsbytes(""),
cst$119=caml_string_of_jsbytes(" "),
cst$120=caml_string_of_jsbytes(" "),
cst$121=caml_string_of_jsbytes('"'),
cst$122=caml_string_of_jsbytes(""),
cst_Filename_quote_command_bad=
caml_string_of_jsbytes("Filename.quote_command: bad file name "),
cst$115=caml_string_of_jsbytes('"'),
cst$116=caml_string_of_jsbytes('"'),
cst$113=caml_string_of_jsbytes("./"),
cst$112=caml_string_of_jsbytes(".\\"),
cst$111=caml_string_of_jsbytes("../"),
cst$110=caml_string_of_jsbytes("..\\"),
cst_2_1=caml_string_of_jsbytes(" 2>&1"),
cst_2=caml_string_of_jsbytes(" 2>"),
cst$109=caml_string_of_jsbytes(""),
cst$104=caml_string_of_jsbytes(" >"),
cst$108=caml_string_of_jsbytes(""),
cst$105=caml_string_of_jsbytes(" <"),
cst$107=caml_string_of_jsbytes(""),
cst$106=caml_string_of_jsbytes(" "),
cst$103=caml_string_of_jsbytes("./"),
cst$102=caml_string_of_jsbytes("../"),
cst$101=caml_string_of_jsbytes(""),
cst$100=caml_string_of_jsbytes(""),
null$0=caml_string_of_jsbytes("/dev/null"),
current_dir_name=caml_string_of_jsbytes("."),
parent_dir_name=caml_string_of_jsbytes(".."),
dir_sep=caml_string_of_jsbytes("/"),
cst_TMPDIR=caml_string_of_jsbytes("TMPDIR"),
cst_tmp=caml_string_of_jsbytes("/tmp"),
quotequote=caml_string_of_jsbytes("'\\''"),
null$1=caml_string_of_jsbytes("NUL"),
current_dir_name$0=caml_string_of_jsbytes("."),
parent_dir_name$0=caml_string_of_jsbytes(".."),
dir_sep$0=caml_string_of_jsbytes("\\"),
cst_TEMP=caml_string_of_jsbytes("TEMP"),
cst$114=caml_string_of_jsbytes("."),
null$2=caml_string_of_jsbytes("/dev/null"),
current_dir_name$1=caml_string_of_jsbytes("."),
parent_dir_name$1=caml_string_of_jsbytes(".."),
dir_sep$1=caml_string_of_jsbytes("/"),
cst_Cygwin=caml_string_of_jsbytes("Cygwin"),
cst_Win32=caml_string_of_jsbytes("Win32"),
zero$4=[254,0.,0.],
one$4=[254,1.,0.],
i=[254,0.,1.],
cst_Bigarray_array3_of_genarra=
caml_string_of_jsbytes("Bigarray.array3_of_genarray"),
cst_Bigarray_array2_of_genarra=
caml_string_of_jsbytes("Bigarray.array2_of_genarray"),
cst_Bigarray_array1_of_genarra=
caml_string_of_jsbytes("Bigarray.array1_of_genarray"),
cst_Bigarray_array0_of_genarra=
caml_string_of_jsbytes("Bigarray.array0_of_genarray"),
cst_Bigarray_Array3_of_array_n=
caml_string_of_jsbytes("Bigarray.Array3.of_array: non-cubic data"),
cst_Bigarray_Array3_of_array_n$0=
caml_string_of_jsbytes("Bigarray.Array3.of_array: non-cubic data"),
cst_Bigarray_Array2_of_array_n=
caml_string_of_jsbytes("Bigarray.Array2.of_array: non-rectangular data"),
cst_In_channel_input_all_chann=
caml_string_of_jsbytes
("In_channel.input_all: channel content is larger than maximum string length"),
Invalid_argument=global_data.Invalid_argument,
Failure=global_data.Failure,
Match_failure=global_data.Match_failure,
Assert_failure=global_data.Assert_failure,
Not_found=global_data.Not_found,
Out_of_memory=global_data.Out_of_memory,
Stack_overflow=global_data.Stack_overflow,
Sys_error=global_data.Sys_error,
End_of_file=global_data.End_of_file,
Division_by_zero=global_data.Division_by_zero,
Sys_blocked_io=global_data.Sys_blocked_io,
Undefined_recursive_module=global_data.Undefined_recursive_module,
_l_=[0,0,[0,6,0]],
_k_=[0,0,[0,7,0]],
_j_=[0,1,[0,3,[0,4,[0,6,0]]]],
_i_=[0,1,[0,3,[0,4,[0,7,0]]]],
_g_=[0,1],
_h_=[0,0],
_a_=runtime.caml_int64_create_lo_mi_hi(0,0,32752),
_b_=runtime.caml_int64_create_lo_mi_hi(0,0,65520),
_c_=runtime.caml_int64_create_lo_mi_hi(1,0,32752),
_d_=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,32751),
_e_=runtime.caml_int64_create_lo_mi_hi(0,0,16),
_f_=runtime.caml_int64_create_lo_mi_hi(0,0,15536),
_n_=[0,caml_string_of_jsbytes("obj.ml"),95,4],
_r_=[0,caml_string_of_jsbytes("seq.ml"),596,4],
_x_=[0,caml_string_of_jsbytes("uchar.ml"),88,18],
_w_=[0,caml_string_of_jsbytes("uchar.ml"),91,7],
_v_=[0,caml_string_of_jsbytes("uchar.ml"),80,18],
_u_=[0,caml_string_of_jsbytes("uchar.ml"),85,7],
_A_=[0,0,0],
_G_=[0,caml_string_of_jsbytes("bytes.ml"),808,20],
_F_=[0,caml_string_of_jsbytes("bytes.ml"),819,9],
_E_=[0,caml_string_of_jsbytes("bytes.ml"),754,20],
_D_=[0,caml_string_of_jsbytes("bytes.ml"),765,9],
_C_=[0,caml_string_of_jsbytes("bytes.ml"),642,20],
_B_=[0,caml_string_of_jsbytes("bytes.ml"),667,9],
_H_=[0,caml_string_of_jsbytes("array.ml"),322,4],
_J_=[0,caml_string_of_jsbytes("float.ml"),395,6],
_I_=[0,caml_string_of_jsbytes("float.ml"),222,14],
_U_=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,65535),
_T_=runtime.caml_int64_create_lo_mi_hi(0,0,0),
_S_=runtime.caml_int64_create_lo_mi_hi(1,0,0),
_R_=runtime.caml_int64_create_lo_mi_hi(1,0,0),
_V_=[0,0,0,0],
_W_=[0,0,0],
_X_=[0,caml_string_of_jsbytes("set.ml"),570,18],
_Y_=[0,0,0,0],
_Z_=[0,caml_string_of_jsbytes("map.ml"),400,10],
___=[0,0,0],
_$_=[0,caml_string_of_jsbytes("stream.ml"),53,12],
_aa_=[0,0],
_ab_=[0,caml_string_of_jsbytes("stream.ml"),82,12],
_af_=[0,caml_string_of_jsbytes("buffer.ml"),231,9],
_ae_=[0,caml_string_of_jsbytes("buffer.ml"),212,2],
_ad_=[0,caml_string_of_jsbytes("buffer.ml"),93,2],
_ac_=[0,caml_string_of_jsbytes("buffer.ml"),94,2],
_ah_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),850,23],
_as_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),814,21],
_ak_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),815,21],
_at_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),818,21],
_al_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),819,21],
_au_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),822,19],
_am_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),823,19],
_av_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),826,22],
_an_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),827,22],
_aw_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),831,30],
_ao_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),832,30],
_aq_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),836,26],
_ai_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),837,26],
_ar_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),846,28],
_aj_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),847,28],
_ap_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),851,23],
_ay_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1558,4],
_az_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1626,39],
_aA_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1649,31],
_aB_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1650,31],
_aC_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1830,8],
_a6_=
[0,
[11,
caml_string_of_jsbytes("bad input: format type mismatch between "),
[3,0,[11,caml_string_of_jsbytes(" and "),[3,0,0]]]],
caml_string_of_jsbytes
("bad input: format type mismatch between %S and %S")],
_a5_=
[0,
[11,
caml_string_of_jsbytes("bad input: format type mismatch between "),
[3,0,[11,caml_string_of_jsbytes(" and "),[3,0,0]]]],
caml_string_of_jsbytes
("bad input: format type mismatch between %S and %S")],
_aI_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(": at character number "),
[4,0,0,0,[11,caml_string_of_jsbytes(", duplicate flag "),[1,0]]]]]],
caml_string_of_jsbytes
("invalid format %S: at character number %d, duplicate flag %C")],
_aJ_=[0,1,0],
_aK_=[0,0],
_aL_=[1,0],
_aM_=[1,1],
_aO_=[1,1],
_aN_=[1,1],
_aS_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(": at character number "),
[4,
0,
0,
0,
[11,
caml_string_of_jsbytes(", flag "),
[1,
[11,
caml_string_of_jsbytes(" is only allowed after the '"),
[12,
37,
[11,
caml_string_of_jsbytes("', before padding and precision"),
0]]]]]]]]],
caml_string_of_jsbytes
("invalid format %S: at character number %d, flag %C is only allowed after the '%%', before padding and precision")],
_aP_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(": at character number "),
[4,
0,
0,
0,
[11,
caml_string_of_jsbytes(', invalid conversion "'),
[12,37,[0,[12,34,0]]]]]]]],
caml_string_of_jsbytes
('invalid format %S: at character number %d, invalid conversion "%%%c"')],
_aQ_=[0,0],
_aR_=[0,0],
_aT_=[0,[12,64,0]],
_aU_=[0,caml_string_of_jsbytes("@ "),1,0],
_aV_=[0,caml_string_of_jsbytes("@,"),0,0],
_aW_=[2,60],
_aX_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(": '"),
[12,
37,
[11,
caml_string_of_jsbytes
("' alone is not accepted in character sets, use "),
[12,
37,
[12,
37,
[11,
caml_string_of_jsbytes(" instead at position "),
[4,0,0,0,[12,46,0]]]]]]]]]],
caml_string_of_jsbytes
("invalid format %S: '%%' alone is not accepted in character sets, use %%%% instead at position %d.")],
_aY_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(": integer "),
[4,
0,
0,
0,
[11,
caml_string_of_jsbytes(" is greater than the limit "),
[4,0,0,0,0]]]]]],
caml_string_of_jsbytes
("invalid format %S: integer %d is greater than the limit %d")],
_aZ_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2837,11],
_a0_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(': unclosed sub-format, expected "'),
[12,
37,
[0,
[11,caml_string_of_jsbytes('" at character number '),[4,0,0,0,0]]]]]]],
caml_string_of_jsbytes
('invalid format %S: unclosed sub-format, expected "%%%c" at character number %d')],
_a1_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2899,34],
_a2_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2935,28],
_a3_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2957,11],
_a4_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(": at character number "),
[4,
0,
0,
0,
[11,
caml_string_of_jsbytes(", "),
[2,
0,
[11,
caml_string_of_jsbytes(" is incompatible with '"),
[0,[11,caml_string_of_jsbytes("' in sub-format "),[3,0,0]]]]]]]]]],
caml_string_of_jsbytes
("invalid format %S: at character number %d, %s is incompatible with '%c' in sub-format %S")],
_aH_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(": at character number "),
[4,
0,
0,
0,
[11,
caml_string_of_jsbytes(", "),
[2,0,[11,caml_string_of_jsbytes(" expected, read "),[1,0]]]]]]]],
caml_string_of_jsbytes
("invalid format %S: at character number %d, %s expected, read %C")],
_aG_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(": at character number "),
[4,
0,
0,
0,
[11,
caml_string_of_jsbytes(", '"),
[0,[11,caml_string_of_jsbytes("' without "),[2,0,0]]]]]]]],
caml_string_of_jsbytes
("invalid format %S: at character number %d, '%c' without %s")],
_aF_=
[0,
[11,
caml_string_of_jsbytes("invalid format "),
[3,
0,
[11,
caml_string_of_jsbytes(": at character number "),
[4,0,0,0,[11,caml_string_of_jsbytes(", "),[2,0,0]]]]]],
caml_string_of_jsbytes("invalid format %S: at character number %d, %s")],
_aE_=
[0,
[11,caml_string_of_jsbytes("invalid box description "),[3,0,0]],
caml_string_of_jsbytes("invalid box description %S")],
_aD_=[0,0,4],
_ax_=[0,103],
_ag_=[0,0,0],
_bq_=[0,[2,0,[0,0]],caml_string_of_jsbytes("%s%c")],
_bk_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
_bl_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
_bi_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
_bj_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
_bg_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
_bh_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
_ba_=
[0,
[2,
0,
[11,
caml_string_of_jsbytes(": unknown option '"),
[2,0,[11,caml_string_of_jsbytes("'.\n"),0]]]],
caml_string_of_jsbytes("%s: unknown option '%s'.\n")],
_bd_=
[0,
[2,
0,
[11,
caml_string_of_jsbytes(": wrong argument '"),
[2,
0,
[11,
caml_string_of_jsbytes("'; option '"),
[2,
0,
[11,
caml_string_of_jsbytes("' expects "),
[2,0,[11,caml_string_of_jsbytes(".\n"),0]]]]]]]],
caml_string_of_jsbytes
("%s: wrong argument '%s'; option '%s' expects %s.\n")],
_be_=
[0,
[2,
0,
[11,
caml_string_of_jsbytes(": option '"),
[2,0,[11,caml_string_of_jsbytes("' needs an argument.\n"),0]]]],
caml_string_of_jsbytes("%s: option '%s' needs an argument.\n")],
_bf_=
[0,
[2,
0,
[11,
caml_string_of_jsbytes(": "),
[2,0,[11,caml_string_of_jsbytes(".\n"),0]]]],
caml_string_of_jsbytes("%s: %s.\n")],
_bb_=[0,caml_string_of_jsbytes("-help")],
_bc_=[0,caml_string_of_jsbytes("--help")],
_a$_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
_a__=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")],
_a9_=[0,caml_string_of_jsbytes("-help")],
_a7_=
[0,
[11,caml_string_of_jsbytes(" "),[2,0,[12,32,[2,0,[12,10,0]]]]],
caml_string_of_jsbytes(" %s %s\n")],
_a8_=
[0,
[11,caml_string_of_jsbytes(" "),[2,0,[12,32,[2,0,[2,0,[12,10,0]]]]]],
caml_string_of_jsbytes(" %s %s%s\n")],
_bv_=
[0,
[11,caml_string_of_jsbytes(", "),[2,0,[2,0,0]]],
caml_string_of_jsbytes(", %s%s")],
_bH_=
[0,
[11,caml_string_of_jsbytes("Fatal error: exception "),[2,0,[12,10,0]]],
caml_string_of_jsbytes("Fatal error: exception %s\n")],
_bI_=
[0,
[11,
caml_string_of_jsbytes
("Fatal error in uncaught exception handler: exception "),
[2,0,[12,10,0]]],
caml_string_of_jsbytes
("Fatal error in uncaught exception handler: exception %s\n")],
_bG_=
[0,
[11,caml_string_of_jsbytes("Fatal error: exception "),[2,0,[12,10,0]]],
caml_string_of_jsbytes("Fatal error: exception %s\n")],
_bE_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")],
_bC_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")],
_bD_=
[0,
[11,
caml_string_of_jsbytes
("(Program not linked with -g, cannot print stack backtrace)\n"),
0],
caml_string_of_jsbytes
("(Program not linked with -g, cannot print stack backtrace)\n")],
_bA_=
[0,
[2,
0,
[12,
32,
[2,
0,
[11,
caml_string_of_jsbytes(' in file "'),
[2,
0,
[12,
34,
[2,
0,
[11,
caml_string_of_jsbytes(", line "),
[4,0,0,0,[11,caml_string_of_jsbytes(", characters "),partial]]]]]]]]]],
caml_string_of_jsbytes
('%s %s in file "%s"%s, line %d, characters %d-%d')],
_bB_=
[0,
[2,0,[11,caml_string_of_jsbytes(" unknown location"),0]],
caml_string_of_jsbytes("%s unknown location")],
_bz_=
[0,
[11,caml_string_of_jsbytes("Uncaught exception: "),[2,0,[12,10,0]]],
caml_string_of_jsbytes("Uncaught exception: %s\n")],
_by_=
[0,
[11,caml_string_of_jsbytes("Uncaught exception: "),[2,0,[12,10,0]]],
caml_string_of_jsbytes("Uncaught exception: %s\n")],
_bw_=[0,[12,40,[2,0,[2,0,[12,41,0]]]],caml_string_of_jsbytes("(%s%s)")],
_bx_=[0,[12,40,[2,0,[12,41,0]]],caml_string_of_jsbytes("(%s)")],
_bu_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")],
_bt_=[0,[3,0,0],caml_string_of_jsbytes("%S")],
_bF_=
[0,
caml_string_of_jsbytes(""),
caml_string_of_jsbytes
("(Cannot print locations:\n bytecode executable program file not found)"),
caml_string_of_jsbytes
("(Cannot print locations:\n bytecode executable program file appears to be corrupt)"),
caml_string_of_jsbytes
("(Cannot print locations:\n bytecode executable program file has wrong magic number)"),
caml_string_of_jsbytes
("(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)")],
_bP_=
[0,
[11,
caml_string_of_jsbytes("minor_collections: "),
[4,0,0,0,[12,10,0]]],
caml_string_of_jsbytes("minor_collections: %d\n")],
_bQ_=
[0,
[11,
caml_string_of_jsbytes("major_collections: "),
[4,0,0,0,[12,10,0]]],
caml_string_of_jsbytes("major_collections: %d\n")],
_bR_=
[0,
[11,
caml_string_of_jsbytes("compactions: "),
[4,0,0,0,[12,10,0]]],
caml_string_of_jsbytes("compactions: %d\n")],
_bS_=
[0,
[11,
caml_string_of_jsbytes("forced_major_collections: "),
[4,0,0,0,[12,10,0]]],
caml_string_of_jsbytes("forced_major_collections: %d\n")],
_bT_=[0,[12,10,0],caml_string_of_jsbytes("\n")],
_bU_=[0,[8,[0,0,0],0,[0,0],0],caml_string_of_jsbytes("%.0f")],
_bV_=
[0,
[11,
caml_string_of_jsbytes("minor_words: "),
[8,[0,0,0],[1,1],[0,0],[12,10,0]]],
caml_string_of_jsbytes("minor_words: %*.0f\n")],
_bW_=
[0,
[11,
caml_string_of_jsbytes("promoted_words: "),
[8,[0,0,0],[1,1],[0,0],[12,10,0]]],
caml_string_of_jsbytes("promoted_words: %*.0f\n")],
_bX_=
[0,
[11,
caml_string_of_jsbytes("major_words: "),
[8,[0,0,0],[1,1],[0,0],[12,10,0]]],
caml_string_of_jsbytes("major_words: %*.0f\n")],
_bY_=[0,[12,10,0],caml_string_of_jsbytes("\n")],
_bZ_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")],
_b0_=
[0,
[11,caml_string_of_jsbytes("top_heap_words: "),[4,0,[1,1],0,[12,10,0]]],
caml_string_of_jsbytes("top_heap_words: %*d\n")],
_b1_=
[0,
[11,caml_string_of_jsbytes("heap_words: "),[4,0,[1,1],0,[12,10,0]]],
caml_string_of_jsbytes("heap_words: %*d\n")],
_b2_=
[0,
[11,caml_string_of_jsbytes("live_words: "),[4,0,[1,1],0,[12,10,0]]],
caml_string_of_jsbytes("live_words: %*d\n")],
_b3_=
[0,
[11,caml_string_of_jsbytes("free_words: "),[4,0,[1,1],0,[12,10,0]]],
caml_string_of_jsbytes("free_words: %*d\n")],
_b4_=
[0,
[11,caml_string_of_jsbytes("largest_free: "),[4,0,[1,1],0,[12,10,0]]],
caml_string_of_jsbytes("largest_free: %*d\n")],
_b5_=
[0,
[11,caml_string_of_jsbytes("fragments: "),[4,0,[1,1],0,[12,10,0]]],
caml_string_of_jsbytes("fragments: %*d\n")],
_b6_=[0,[12,10,0],caml_string_of_jsbytes("\n")],
_b7_=
[0,
[11,caml_string_of_jsbytes("live_blocks: "),[4,0,0,0,[12,10,0]]],
caml_string_of_jsbytes("live_blocks: %d\n")],
_b8_=
[0,
[11,caml_string_of_jsbytes("free_blocks: "),[4,0,0,0,[12,10,0]]],
caml_string_of_jsbytes("free_blocks: %d\n")],
_b9_=
[0,
[11,caml_string_of_jsbytes("heap_chunks: "),[4,0,0,0,[12,10,0]]],
caml_string_of_jsbytes("heap_chunks: %d\n")],
_cf_=runtime.caml_int64_create_lo_mi_hi(1,0,0),
_cg_=runtime.caml_int64_create_lo_mi_hi(0,0,0),
_ch_=
[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],
_ck_=[0,0],
_cq_=[3,0,3],
_cp_=[1,caml_string_of_jsbytes("max_indent < 2")],
_cn_=[1,caml_string_of_jsbytes("margin <= max_indent")],
_co_=[0,0],
_cm_=[0,caml_string_of_jsbytes("")],
_cl_=[0,caml_string_of_jsbytes(""),0,caml_string_of_jsbytes("")],
_cG_=[0,91],
_cF_=[0,123],
_cH_=[0,caml_string_of_jsbytes("scanf.ml"),1453,13],
_cI_=[0,[3,0,[10,0]],caml_string_of_jsbytes("%S%!")],
_cE_=[0,37,caml_string_of_jsbytes("")],
_cD_=
[0,
[11,
caml_string_of_jsbytes("scanf: bad input at char number "),
[4,3,0,0,[11,caml_string_of_jsbytes(": "),[2,0,0]]]],
caml_string_of_jsbytes("scanf: bad input at char number %i: %s")],
_cC_=
[0,
[11,
caml_string_of_jsbytes("the character "),
[1,[11,caml_string_of_jsbytes(" cannot start a boolean"),0]]],
caml_string_of_jsbytes("the character %C cannot start a boolean")],
_cB_=
[0,
[11,
caml_string_of_jsbytes("bad character hexadecimal encoding \\"),
[0,[0,0]]],
caml_string_of_jsbytes("bad character hexadecimal encoding \\%c%c")],
_cA_=
[0,
[11,
caml_string_of_jsbytes("bad character decimal encoding \\"),
[0,[0,[0,0]]]],
caml_string_of_jsbytes("bad character decimal encoding \\%c%c%c")],
_cz_=
[0,
[11,
caml_string_of_jsbytes("character "),
[1,
[11,
caml_string_of_jsbytes(" is not a valid "),
[2,0,[11,caml_string_of_jsbytes(" digit"),0]]]]],
caml_string_of_jsbytes("character %C is not a valid %s digit")],
_cy_=
[0,
[11,
caml_string_of_jsbytes("character "),
[1,[11,caml_string_of_jsbytes(" is not a decimal digit"),0]]],
caml_string_of_jsbytes("character %C is not a decimal digit")],
_cx_=[0,caml_string_of_jsbytes("scanf.ml"),555,9],
_cw_=
[0,
[11,caml_string_of_jsbytes("invalid boolean '"),[2,0,[12,39,0]]],
caml_string_of_jsbytes("invalid boolean '%s'")],
_cv_=
[0,
[11,
caml_string_of_jsbytes("looking for "),
[1,[11,caml_string_of_jsbytes(", found "),[1,0]]]],
caml_string_of_jsbytes("looking for %C, found %C")],
_cu_=
[0,
[11,
caml_string_of_jsbytes("scanning of "),
[2,
0,
[11,
caml_string_of_jsbytes
(" failed: premature end of file occurred before end of token"),
0]]],
caml_string_of_jsbytes
("scanning of %s failed: premature end of file occurred before end of token")],
_ct_=
[0,
[11,
caml_string_of_jsbytes("scanning of "),
[2,
0,
[11,
caml_string_of_jsbytes
(" failed: the specified length was too short for token"),
0]]],
caml_string_of_jsbytes
("scanning of %s failed: the specified length was too short for token")],
_cs_=
[0,
[11,caml_string_of_jsbytes("illegal escape character "),[1,0]],
caml_string_of_jsbytes("illegal escape character %C")],
_cP_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),439,17],
_cO_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),421,13],
_cN_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),418,13],
_cM_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),415,13],
_cL_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),412,13],
_cK_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),409,13],
_cJ_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),281,50],
_cQ_=[0,caml_string_of_jsbytes("camlinternalMod.ml"),72,5],
_cR_=[0,caml_string_of_jsbytes("camlinternalMod.ml"),81,2],
_cU_=[0,0],
_cT_=[0,0],
_cS_=[0,0],
_cZ_=[0,7,0],
_cY_=[0,1,[0,3,[0,5,0]]],
_cX_=[0,[2,0,[4,6,[0,2,6],0,[2,0,0]]],caml_string_of_jsbytes("%s%06x%s")],
_cW_=[0,caml_string_of_jsbytes('"'),0],
_c0_=[254,0.,0.],
_c1_=[0,0];
function erase_rel(param)
{if(typeof param === "number")
return 0;
else
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;
else
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;
else
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)]}}
var CamlinternalFormatBasics=[0,concat_fmtty,erase_rel,concat_fmt];
caml_register_global
(761,CamlinternalFormatBasics,"CamlinternalFormatBasics");
function make(v){return [0,v]}
function get(r){return r[1]}
function set(r,v){r[1] = v;return 0}
function exchange(r,v){var cur=r[1];r[1] = v;return cur}
function compare_and_set(r,seen,v)
{var cur=r[1];return cur === seen?(r[1] = v,1):0}
function fetch_and_add(r,n){var cur=r[1];r[1] = cur + n | 0;return cur}
function incr(r){fetch_and_add(r,1);return 0}
function decr(r){fetch_and_add(r,-1);return 0}
var
include=
[0,make,get,set,exchange,compare_and_set,fetch_and_add,incr,decr];
caml_register_global(762,include,"CamlinternalAtomic");
function failwith(s){throw [0,Failure,s]}
function invalid_arg(s){throw [0,Invalid_argument,s]}
var Exit=[248,cst_Stdlib_Exit,caml_fresh_oo_id(0)];
function min(x,y){return caml_lessequal(x,y)?x:y}
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(_a_),
neg_infinity=caml_int64_float_of_bits(_b_),
nan=caml_int64_float_of_bits(_c_),
max_float=caml_int64_float_of_bits(_d_),
min_float=caml_int64_float_of_bits(_e_),
epsilon=caml_int64_float_of_bits(_f_),
max_int=2147483647,
min_int=-2147483648;
function cat(s1,s2)
{var
l1=caml_ml_string_length(s1),
l2=caml_ml_string_length(s2),
s=caml_create_bytes(l1 + l2 | 0);
caml_blit_string(s1,0,s,0,l1);
caml_blit_string(s2,0,s,l1,l2);
return caml_string_of_bytes(s)}
function char_of_int(n)
{if(0 <= n && ! (255 < n))return n;return invalid_arg(cst_char_of_int)}
function string_of_bool(b){return b?cst_true:cst_false}
function bool_of_string(param)
{return caml_string_notequal(param,cst_false$0)
?caml_string_notequal(param,cst_true$0)
?invalid_arg(cst_bool_of_string)
:1
:0}
function bool_of_string_opt(param)
{return caml_string_notequal(param,cst_false$1)
?caml_string_notequal(param,cst_true$1)?0:_g_
:_h_}
function string_of_int(n){return caml_string_of_jsbytes("" + n)}
function int_of_string_opt(s)
{try
{var _EE_=[0,caml_int_of_string(s)];return _EE_}
catch(_EF_)
{_EF_ = caml_wrap_exception(_EF_);
if(_EF_[1] === Failure)return 0;
throw _EF_}}
function valid_float_lexem(s)
{var l=caml_ml_string_length(s),i=0;
for(;;)
{if(l <= i)return cat(s,cst);
var match=caml_string_get(s,i),switch$0=0;
if(48 <= match)
{if(! (58 <= match))switch$0 = 1}
else
if(45 === match)switch$0 = 1;
if(switch$0){var i$0=i + 1 | 0,i=i$0;continue}
return s}}
function to_string(f)
{return valid_float_lexem(caml_format_float(cst_12g,f))}
function of_string_opt(s)
{try
{var _EC_=[0,caml_float_of_string(s)];return _EC_}
catch(_ED_)
{_ED_ = caml_wrap_exception(_ED_);
if(_ED_[1] === Failure)return 0;
throw _ED_}}
function append(l1,l2)
{if(l1){var tl=l1[2],hd=l1[1];return [0,hd,append(tl,l2)]}return l2}
var
stdin=caml_ml_open_descriptor_in(0),
stdout=caml_ml_open_descriptor_out(1),
stderr=caml_ml_open_descriptor_out(2);
function open_gen(mode,perm,name)
{var c=caml_ml_open_descriptor_out(caml_sys_open(name,mode,perm));
caml_ml_set_channel_name(c,name);
return c}
function open_text(name){return open_gen(_i_,438,name)}
function open_bin(name){return open_gen(_j_,438,name)}
function flush_all(param)
{function iter(param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],a=param$0[1];
try
{caml_ml_flush(a)}
catch(_EB_)
{_EB_ = caml_wrap_exception(_EB_);
if(_EB_[1] !== Sys_error)throw _EB_;
var _EA_=_EB_}
var param$0=l;
continue}
return 0}}
return iter(runtime.caml_ml_out_channels_list(0))}
function output_bytes(oc,s)
{return caml_ml_output_bytes(oc,s,0,caml_ml_bytes_length(s))}
function output_string(oc,s)
{return caml_ml_output(oc,s,0,caml_ml_string_length(s))}
function output(oc,s,ofs,len)
{if
(0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs))
return caml_ml_output_bytes(oc,s,ofs,len);
return invalid_arg(cst_output)}
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(cst_output_substring)}
function output_value(chan,v){return caml_output_value(chan,v,0)}
function close(oc){caml_ml_flush(oc);return caml_ml_close_channel(oc)}
function close_noerr(oc)
{try {caml_ml_flush(oc)}catch(_Ez_){}
try
{var _Ex_=caml_ml_close_channel(oc);return _Ex_}
catch(_Ey_){return 0}}
function open_gen$0(mode,perm,name)
{var c=caml_ml_open_descriptor_in(caml_sys_open(name,mode,perm));
caml_ml_set_channel_name(c,name);
return c}
function open_text$0(name){return open_gen$0(_k_,0,name)}
function open_bin$0(name){return open_gen$0(_l_,0,name)}
function input(ic,s,ofs,len)
{if
(0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs))
return caml_ml_input(ic,s,ofs,len);
return invalid_arg(cst_input)}
function unsafe_really_input(ic,s,ofs,len)
{var ofs$0=ofs,len$0=len;
for(;;)
{if(0 < len$0)
{var r=caml_ml_input(ic,s,ofs$0,len$0);
if(0 === r)throw End_of_file;
var len$1=len$0 - r | 0,ofs$1=ofs$0 + r | 0,ofs$0=ofs$1,len$0=len$1;
continue}
return 0}}
function really_input(ic,s,ofs,len)
{if
(0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs))
return unsafe_really_input(ic,s,ofs,len);
return invalid_arg(cst_really_input)}
function really_input_string(ic,len)
{var s=caml_create_bytes(len);
really_input(ic,s,0,len);
return caml_string_of_bytes(s)}
function input_line(chan)
{function build_result(buf,pos,param)
{var pos$0=pos,param$0=param;
for(;;)
{if(param$0)
{var tl=param$0[2],hd=param$0[1],len=caml_ml_bytes_length(hd);
caml_blit_bytes(hd,0,buf,pos$0 - len | 0,len);
var pos$1=pos$0 - len | 0,pos$0=pos$1,param$0=tl;
continue}
return buf}}
var accu=0,len=0;
for(;;)
{var n=runtime.caml_ml_input_scan_line(chan);
if(0 === n)
{if(! accu)throw End_of_file;
var _Ew_=build_result(caml_create_bytes(len),len,accu)}
else
{if(! (0 < n))
{var beg=caml_create_bytes(- n | 0);
caml_ml_input(chan,beg,0,- n | 0);
var len$1=len - n | 0,accu$0=[0,beg,accu],accu=accu$0,len=len$1;
continue}
var res=caml_create_bytes(n - 1 | 0);
caml_ml_input(chan,res,0,n - 1 | 0);
caml_ml_input_char(chan);
if(accu)
var
len$0=(len + n | 0) - 1 | 0,
_Ew_=build_result(caml_create_bytes(len$0),len$0,[0,res,accu]);
else
var _Ew_=res}
return caml_string_of_bytes(_Ew_)}}
function close_noerr$0(ic)
{try
{var _Eu_=caml_ml_close_channel(ic);return _Eu_}
catch(_Ev_){return 0}}
function print_char(c){return caml_ml_output_char(stdout,c)}
function print_string(s){return output_string(stdout,s)}
function print_bytes(s){return output_bytes(stdout,s)}
function print_int(i)
{return output_string(stdout,caml_string_of_jsbytes("" + i))}
function print_float(f){return output_string(stdout,to_string(f))}
function print_endline(s)
{output_string(stdout,s);
caml_ml_output_char(stdout,10);
return caml_ml_flush(stdout)}
function print_newline(param)
{caml_ml_output_char(stdout,10);return caml_ml_flush(stdout)}
function prerr_char(c){return caml_ml_output_char(stderr,c)}
function prerr_string(s){return output_string(stderr,s)}
function prerr_bytes(s){return output_bytes(stderr,s)}
function prerr_int(i)
{return output_string(stderr,caml_string_of_jsbytes("" + i))}
function prerr_float(f){return output_string(stderr,to_string(f))}
function prerr_endline(s)
{output_string(stderr,s);
caml_ml_output_char(stderr,10);
return caml_ml_flush(stderr)}
function prerr_newline(param)
{caml_ml_output_char(stderr,10);return caml_ml_flush(stderr)}
function read_line(param){caml_ml_flush(stdout);return input_line(stdin)}
function read_int(param){return caml_int_of_string(read_line(0))}
function read_int_opt(param){return int_of_string_opt(read_line(0))}
function read_float(param){return caml_float_of_string(read_line(0))}
function read_float_opt(param){return of_string_opt(read_line(0))}
function string_of_format(param){var str=param[2];return str}
function symbol(param,_Es_)
{var
str2=_Es_[2],
fmt2=_Es_[1],
str1=param[2],
fmt1=param[1],
_Et_=cat(str1,cat(cst$0,str2));
return [0,concat_fmt(fmt1,fmt2),_Et_]}
var exit_function=[0,flush_all];
function at_exit(f)
{for(;;)
{var
f_yet_to_run=[0,1],
old_exit=exit_function[1],
new_exit$0=
function(f_yet_to_run,old_exit)
{function new_exit(param)
{if(compare_and_set(f_yet_to_run,1,0))caml_call1(f,0);
return caml_call1(old_exit,0)}
return new_exit},
new_exit=new_exit$0(f_yet_to_run,old_exit),
success=compare_and_set(exit_function,old_exit,new_exit),
_Er_=1 - success;
if(_Er_)continue;
return _Er_}}
function do_at_exit(param){return caml_call1(exit_function[1],0)}
function exit(retcode)
{do_at_exit(0);return runtime.caml_sys_exit(retcode)}
caml_register_named_value
(caml_string_of_jsbytes("Pervasives.do_at_exit"),do_at_exit);
var
_m_=
[0,
runtime.caml_ml_seek_out_64,
runtime.caml_ml_pos_out_64,
caml_ml_channel_size_64,
runtime.caml_ml_seek_in_64,
runtime.caml_ml_pos_in_64,
caml_ml_channel_size_64],
set_binary_mode=caml_ml_set_binary_mode,
close$0=caml_ml_close_channel,
in_channel_length=caml_ml_channel_size,
pos_in=caml_ml_pos_in,
seek_in=runtime.caml_ml_seek_in,
input_value=caml_input_value,
input_binary_int=runtime.caml_ml_input_int,
input_byte=caml_ml_input_char,
input_char=caml_ml_input_char,
set_binary_mode$0=caml_ml_set_binary_mode,
out_channel_length=caml_ml_channel_size,
pos_out=runtime.caml_ml_pos_out,
seek_out=runtime.caml_ml_seek_out,
output_binary_int=runtime.caml_ml_output_int,
output_byte=caml_ml_output_char,
output_char=caml_ml_output_char,
flush=caml_ml_flush,
Stdlib=
[0,
invalid_arg,
failwith,
Exit,
Match_failure,
Assert_failure,
Invalid_argument,
Failure,
Not_found,
Out_of_memory,
Stack_overflow,
Sys_error,
End_of_file,
Division_by_zero,
Sys_blocked_io,
Undefined_recursive_module,
min,
max,
abs,
max_int,
min_int,
lnot,
infinity,
neg_infinity,
nan,
max_float,
min_float,
epsilon,
cat,
char_of_int,
string_of_bool,
bool_of_string_opt,
bool_of_string,
string_of_int,
int_of_string_opt,
to_string,
of_string_opt,
append,
stdin,
stdout,
stderr,
print_char,
print_string,
print_bytes,
print_int,
print_float,
print_endline,
print_newline,
prerr_char,
prerr_string,
prerr_bytes,
prerr_int,
prerr_float,
prerr_endline,
prerr_newline,
read_line,
read_int_opt,
read_int,
read_float_opt,
read_float,
open_text,
open_bin,
open_gen,
flush,
flush_all,
output_char,
output_string,
output_bytes,
output,
output_substring,
output_byte,
output_binary_int,
output_value,
seek_out,
pos_out,
out_channel_length,
close,
close_noerr,
set_binary_mode$0,
open_text$0,
open_bin$0,
open_gen$0,
input_char,
input_line,
input,
really_input,
really_input_string,
input_byte,
input_binary_int,
input_value,
seek_in,
pos_in,
in_channel_length,
close$0,
close_noerr$0,
set_binary_mode,
_m_,
string_of_format,
symbol,
exit,
at_exit,
valid_float_lexem,
unsafe_really_input,
do_at_exit];
caml_register_global(775,Stdlib,"Stdlib");
var
Exit$0=[248,cst_Stdlib_Pervasives_Exit,caml_fresh_oo_id(0)],
Stdlib_Pervasives=
[0,
invalid_arg,
failwith,
Exit$0,
min,
max,
abs,
max_int,
min_int,
lnot,
infinity,
neg_infinity,
nan,
max_float,
min_float,
epsilon,
cat,
char_of_int,
string_of_bool,
bool_of_string,
bool_of_string_opt,
string_of_int,
int_of_string_opt,
to_string,
of_string_opt,
append,
stdin,
stdout,
stderr,
print_char,
print_string,
print_bytes,
print_int,
print_float,
print_endline,
print_newline,
prerr_char,
prerr_string,
prerr_bytes,
prerr_int,
prerr_float,
prerr_endline,
prerr_newline,
read_line,
read_int,
read_int_opt,
read_float,
read_float_opt,
open_text,
open_bin,
open_gen,
flush,
flush_all,
output_char,
output_string,
output_bytes,
output,
output_substring,
output_byte,
output_binary_int,
output_value,
seek_out,
pos_out,
out_channel_length,
close,
close_noerr,
set_binary_mode$0,
open_text$0,
open_bin$0,
open_gen$0,
input_char,
input_line,
input,
really_input,
really_input_string,
input_byte,
input_binary_int,
input_value,
seek_in,
pos_in,
in_channel_length,
close$0,
close_noerr$0,
set_binary_mode,
string_of_format,
symbol,
exit,
at_exit,
valid_float_lexem,
do_at_exit];
caml_register_global(776,Stdlib_Pervasives,"Stdlib__Pervasives");
function left(v){return [0,v]}
function right(v){return [1,v]}
function is_left(param){return 0 === param[0]?1:0}
function is_right(param){return 0 === param[0]?0:1}
function find_left(param)
{if(0 === param[0]){var v=param[1];return [0,v]}return 0}
function find_right(param)
{if(0 === param[0])return 0;var v=param[1];return [0,v]}
function map_left(f,e)
{if(0 === e[0]){var v=e[1];return [0,caml_call1(f,v)]}return e}
function map_right(f,e)
{if(0 === e[0])return e;var v=e[1];return [1,caml_call1(f,v)]}
function map(left,right,param)
{if(0 === param[0]){var v=param[1];return [0,caml_call1(left,v)]}
var v$0=param[1];
return [1,caml_call1(right,v$0)]}
function fold(left,right,param)
{if(0 === param[0]){var v=param[1];return caml_call1(left,v)}
var v$0=param[1];
return caml_call1(right,v$0)}
function equal(left,right,e1,e2)
{if(0 === e1[0])
{var _Ep_=e1[1];
if(0 === e2[0]){var v2=e2[1];return caml_call2(left,_Ep_,v2)}}
else
{var _Eq_=e1[1];
if(0 !== e2[0]){var v2$0=e2[1];return caml_call2(right,_Eq_,v2$0)}}
return 0}
function compare(left,right,e1,e2)
{if(0 === e1[0])
{var _En_=e1[1];
if(0 === e2[0]){var v2=e2[1];return caml_call2(left,_En_,v2)}
return -1}
var _Eo_=e1[1];
if(0 === e2[0])return 1;
var v2$0=e2[1];
return caml_call2(right,_Eo_,v2$0)}
var
Stdlib_Either=
[0,
left,
right,
is_left,
is_right,
find_left,
find_right,
map_left,
map_right,
map,
fold,
fold,
fold,
equal,
compare];
caml_register_global(777,Stdlib_Either,"Stdlib__Either");
var
executable_name=runtime.caml_sys_executable_name(0),
match=runtime.caml_sys_get_config(0),
os_type=match[1],
match$0=[0,caml_string_of_jsbytes("js_of_ocaml")],
unix=runtime.caml_sys_const_ostype_unix(0),
win32=runtime.caml_sys_const_ostype_win32(0),
cygwin=runtime.caml_sys_const_ostype_cygwin(0),
max_array_length=runtime.caml_sys_const_max_wosize(0),
max_floatarray_length=max_array_length / 2 | 0,
max_string_length=(4 * max_array_length | 0) - 1 | 0,
big_endian=0,
match$1=32,
int_size=32;
function getenv_opt(s)
{try
{var _El_=[0,caml_sys_getenv(s)];return _El_}
catch(_Em_)
{_Em_ = caml_wrap_exception(_Em_);
if(_Em_ === Not_found)return 0;
throw _Em_}}
var interactive=[0,0];
function set_signal(sig_num,sig_beh){return 0}
var
Break=[248,cst_Stdlib_Sys_Break,caml_fresh_oo_id(0)],
sigabrt=-1,
sigalrm=-2,
sigfpe=-3,
sighup=-4,
sigill=-5,
sigint=-6,
sigkill=-7,
sigpipe=-8,
sigquit=-9,
sigsegv=-10,
sigterm=-11,
sigusr1=-12,
sigusr2=-13,
sigchld=-14,
sigcont=-15,
sigstop=-16,
sigtstp=-17,
sigttin=-18,
sigttou=-19,
sigvtalrm=-20,
sigprof=-21,
sigbus=-22,
sigpoll=-23,
sigsys=-24,
sigtrap=-25,
sigurg=-26,
sigxcpu=-27,
sigxfsz=-28;
function catch_break(on){return on?0:0}
var development_version=0;
function Make(_Ek_,_Ej_){return [0,1]}
var
Immediate64=[0,Make],
Stdlib_Sys=
[0,
executable_name,
getenv_opt,
interactive,
os_type,
match$0,
unix,
win32,
cygwin,
match$1,
int_size,
big_endian,
max_string_length,
max_array_length,
max_floatarray_length,
set_signal,
sigabrt,
sigalrm,
sigfpe,
sighup,
sigill,
sigint,
sigkill,
sigpipe,
sigquit,
sigsegv,
sigterm,
sigusr1,
sigusr2,
sigchld,
sigcont,
sigstop,
sigtstp,
sigttin,
sigttou,
sigvtalrm,
sigprof,
sigbus,
sigpoll,
sigsys,
sigtrap,
sigurg,
sigxcpu,
sigxfsz,
Break,
catch_break,
ocaml_version,
development_version,
ocaml_release,
runtime.caml_ml_enable_runtime_warnings,
runtime.caml_ml_runtime_warnings_enabled,
Immediate64];
caml_register_global(778,Stdlib_Sys,"Stdlib__Sys");
function is_block(a){return 1 - (typeof a === "number"?1:0)}
function double_field(x,i){return caml_array_get(x,i)}
function set_double_field(x,i,v){return caml_array_set(x,i,v)}
var
first_non_constant_constructor=0,
last_non_constant_constructor_=245,
lazy_tag=246,
closure_tag=247,
object_tag=248,
infix_tag=249,
forward_tag=250,
no_scan_tag=251,
abstract_tag=251,
string_tag=252,
double_tag=253,
double_array_tag=254,
custom_tag=255,
int_tag=1000,
out_of_heap_tag=1001,
unaligned_tag=1002;
function info(obj)
{if(caml_obj_tag(obj) === 247)
{var
info=runtime.caml_obj_raw_field(obj,1),
arity=info >> 24,
start_env=info << 8 >>> 9 | 0;
return [0,arity,start_env]}
throw [0,Assert_failure,_n_]}
function of_val(x)
{var switch$0=0;
if(is_block(x) && caml_obj_tag(x) !== 248 && 1 <= x.length - 1)
{var slot=x[1];switch$0 = 1}
if(! switch$0)var slot=x;
var switch$1=0;
if(is_block(slot) && caml_obj_tag(slot) === 248)
{var name=slot[1];switch$1 = 1}
if(! switch$1)var name=invalid_arg(cst_Obj_extension_constructor$0);
return caml_obj_tag(name) === 252
?slot
:invalid_arg(cst_Obj_extension_constructor)}
function name(slot){return slot[1]}
function id(slot){return slot[2]}
var
Extension_constructor=[0,of_val,name,id],
extension_constructor=Extension_constructor[1],
extension_name=Extension_constructor[2],
extension_id=Extension_constructor[3],
max_ephe_length=max_array_length - 2 | 0;
function create(l)
{var _Eh_=0 <= l?1:0,_Ei_=_Eh_?l <= max_ephe_length?1:0:_Eh_;
if(1 - _Ei_)invalid_arg(cst_Obj_Ephemeron_create);
return runtime.caml_ephe_create(l)}
function length(x){return x.length - 1 - 2 | 0}
function raise_if_invalid_offset(e,o,msg)
{var _Ee_=0 <= o?1:0,_Ef_=_Ee_?o < length(e)?1:0:_Ee_,_Eg_=1 - _Ef_;
return _Eg_?invalid_arg(msg):_Eg_}
function get_key(e,o)
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_get_key);
return runtime.caml_ephe_get_key(e,o)}
function get_key_copy(e,o)
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_get_key_copy);
return runtime.caml_ephe_get_key_copy(e,o)}
function set_key(e,o,x)
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_set_key);
return caml_ephe_set_key(e,o,x)}
function unset_key(e,o)
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_unset_key);
return caml_ephe_unset_key(e,o)}
function check_key(e,o)
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_check_key);
return runtime.caml_ephe_check_key(e,o)}
function blit_key(e1,o1,e2,o2,l)
{if
(0
<=
l
&&
0
<=
o1
&&
!
((length(e1) - l | 0) < o1)
&&
0
<=
o2
&&
!
((length(e2) - l | 0) < o2))
{var
_Ec_=0 !== l?1:0,
_Ed_=_Ec_?runtime.caml_ephe_blit_key(e1,o1,e2,o2,l):_Ec_;
return _Ed_}
return invalid_arg(cst_Obj_Ephemeron_blit_key)}
var
_o_=runtime.caml_ephe_blit_data,
_p_=runtime.caml_ephe_check_data,
_q_=
[0,
create,
length,
get_key,
get_key_copy,
set_key,
unset_key,
check_key,
blit_key,
runtime.caml_ephe_get_data,
runtime.caml_ephe_get_data_copy,
runtime.caml_ephe_set_data,
function(_Eb_){return runtime.caml_ephe_unset_data(_Eb_)},
_p_,
_o_,
max_ephe_length],
Stdlib_Obj=
[0,
is_block,
double_field,
set_double_field,
first_non_constant_constructor,
last_non_constant_constructor_,
lazy_tag,
closure_tag,
object_tag,
infix_tag,
forward_tag,
no_scan_tag,
abstract_tag,
string_tag,
double_tag,
double_array_tag,
custom_tag,
custom_tag,
int_tag,
out_of_heap_tag,
unaligned_tag,
[0,info],
Extension_constructor,
extension_constructor,
extension_name,
extension_id,
_q_];
caml_register_global(779,Stdlib_Obj,"Stdlib__Obj");
var Undefined=[248,cst_CamlinternalLazy_Undefined,caml_fresh_oo_id(0)];
function raise_undefined(param){throw Undefined}
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)
{e = caml_wrap_exception(e);blk[1] = function(param){throw e};throw e}}
function force_val_lazy_block(blk)
{var closure=blk[1];
blk[1] = raise_undefined;
var result=caml_call1(closure,0);
caml_obj_make_forward(blk,result);
return result}
function force(lzv)
{var t=caml_obj_tag(lzv);
return t === 250?lzv[1]:t !== 246?lzv:force_lazy_block(lzv)}
function force_val(lzv)
{var t=caml_obj_tag(lzv);
return t === 250?lzv[1]:t !== 246?lzv:force_val_lazy_block(lzv)}
var
CamlinternalLazy=
[0,Undefined,force_lazy_block,force_val_lazy_block,force,force_val];
caml_register_global(780,CamlinternalLazy,"CamlinternalLazy");
function to_lazy(f){var x=caml_obj_block(246,1);x[1] = f;return x}
function from_val(v)
{var t=caml_obj_tag(v);
if(t !== 250 && t !== 246 && t !== 253)return v;
return runtime.caml_lazy_make_forward(v)}
function is_val(l){return caml_obj_tag(l) !== 246?1:0}
function map$0(f,x)
{return [246,
function(_D__)
{var
_D$_=caml_obj_tag(x),
_Ea_=250 === _D$_?x[1]:246 === _D$_?force_lazy_block(x):x;
return caml_call1(f,_Ea_)}]}
function map_val(f,x)
{if(is_val(x))
{var
_D5_=caml_obj_tag(x),
_D6_=250 === _D5_?x[1]:246 === _D5_?force_lazy_block(x):x;
return from_val(caml_call1(f,_D6_))}
return [246,
function(_D7_)
{var
_D8_=caml_obj_tag(x),
_D9_=250 === _D8_?x[1]:246 === _D8_?force_lazy_block(x):x;
return caml_call1(f,_D9_)}]}
var
Stdlib_Lazy=
[0,
Undefined,
map$0,
is_val,
from_val,
map_val,
to_lazy,
force_val,
to_lazy,
from_val,
is_val];
caml_register_global(781,Stdlib_Lazy,"Stdlib__Lazy");
function empty(param){return 0}
function return$0(x,param){return [0,x,empty]}
function cons(x,next,param){return [0,x,next]}
function append$0(seq1,seq2,param)
{var match=caml_call1(seq1,0);
if(match)
{var next=match[2],x=match[1];
return [0,x,function(_D4_){return append$0(next,seq2,_D4_)}]}
return caml_call1(seq2,0)}
function map$1(f,seq,param)
{var match=caml_call1(seq,0);
if(match)
{var
next=match[2],
x=match[1],
_D2_=function(_D3_){return map$1(f,next,_D3_)};
return [0,caml_call1(f,x),_D2_]}
return 0}
function filter_map(f,seq,param)
{var seq$0=seq;
for(;;)
{var match=caml_call1(seq$0,0);
if(match)
{var next=match[2],x=match[1],match$0=caml_call1(f,x);
if(match$0)
{var y=match$0[1];
return [0,y,function(_D1_){return filter_map(f,next,_D1_)}]}
var seq$0=next;
continue}
return 0}}
function filter(f,seq,param)
{var seq$0=seq;
for(;;)
{var match=caml_call1(seq$0,0);
if(match)
{var next=match[2],x=match[1];
if(caml_call1(f,x))
return [0,x,function(_D0_){return filter(f,next,_D0_)}];
var seq$0=next;
continue}
return 0}}
function concat(seq,param)
{var match=caml_call1(seq,0);
if(match)
{var next=match[2],x=match[1],_DY_=0;
return append$0(x,function(_DZ_){return concat(next,_DZ_)},_DY_)}
return 0}
function flat_map(f,seq,param)
{var match=caml_call1(seq,0);
if(match)
{var
next=match[2],
x=match[1],
_DV_=0,
_DW_=function(_DX_){return flat_map(f,next,_DX_)};
return append$0(caml_call1(f,x),_DW_,_DV_)}
return 0}
function fold_left(f,acc,seq)
{var acc$0=acc,seq$0=seq;
for(;;)
{var match=caml_call1(seq$0,0);
if(match)
{var
next=match[2],
x=match[1],
acc$1=caml_call2(f,acc$0,x),
acc$0=acc$1,
seq$0=next;
continue}
return acc$0}}
function iter(f,seq)
{var seq$0=seq;
for(;;)
{var match=caml_call1(seq$0,0);
if(match)
{var next=match[2],x=match[1];
caml_call1(f,x);
var seq$0=next;
continue}
return 0}}
function unfold(f,u,param)
{var match=caml_call1(f,u);
if(match)
{var match$0=match[1],u$0=match$0[2],x=match$0[1];
return [0,x,function(_DU_){return unfold(f,u$0,_DU_)}]}
return 0}
function is_empty(xs){var match=caml_call1(xs,0);return match?0:1}
function uncons(xs)
{var match=caml_call1(xs,0);
if(match){var xs$0=match[2],x=match[1];return [0,[0,x,xs$0]]}
return 0}
function length$0(xs$1)
{var accu=0,xs=xs$1;
for(;;)
{var match=caml_call1(xs,0);
if(match)
{var xs$0=match[2],accu$0=accu + 1 | 0,accu=accu$0,xs=xs$0;continue}
return accu}}
function iteri(f,xs$1)
{var i=0,xs=xs$1;
for(;;)
{var match=caml_call1(xs,0);
if(match)
{var xs$0=match[2],x=match[1];
caml_call2(f,i,x);
var i$0=i + 1 | 0,i=i$0,xs=xs$0;
continue}
return 0}}
function fold_lefti(f,accu$1,xs$1)
{var accu=accu$1,i=0,xs=xs$1;
for(;;)
{var match=caml_call1(xs,0);
if(match)
{var
xs$0=match[2],
x=match[1],
accu$0=caml_call3(f,accu,i,x),
i$0=i + 1 | 0,
accu=accu$0,
i=i$0,
xs=xs$0;
continue}
return accu}}
function for_all(p,xs)
{var xs$0=xs;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1],_DT_=caml_call1(p,x);
if(_DT_){var xs$0=xs$1;continue}
return _DT_}
return 1}}
function exists(p,xs)
{var xs$0=xs;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1],_DS_=caml_call1(p,x);
if(_DS_)return _DS_;
var xs$0=xs$1;
continue}
return 0}}
function find(p,xs)
{var xs$0=xs;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1];
if(caml_call1(p,x))return [0,x];
var xs$0=xs$1;
continue}
return 0}}
function find_map(f,xs)
{var xs$0=xs;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1],result=caml_call1(f,x);
if(result)return result;
var xs$0=xs$1;
continue}
return 0}}
function iter2(f,xs,ys)
{var xs$0=xs,ys$0=ys;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1],match$0=caml_call1(ys$0,0);
if(match$0)
{var ys$1=match$0[2],y=match$0[1];
caml_call2(f,x,y);
var xs$0=xs$1,ys$0=ys$1;
continue}
return 0}
return 0}}
function fold_left2(f,accu,xs,ys)
{var accu$0=accu,xs$0=xs,ys$0=ys;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1],match$0=caml_call1(ys$0,0);
if(match$0)
{var
ys$1=match$0[2],
y=match$0[1],
accu$1=caml_call3(f,accu$0,x,y),
accu$0=accu$1,
xs$0=xs$1,
ys$0=ys$1;
continue}
return accu$0}
return accu$0}}
function for_all2(f,xs,ys)
{var xs$0=xs,ys$0=ys;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1],match$0=caml_call1(ys$0,0);
if(match$0)
{var ys$1=match$0[2],y=match$0[1],_DR_=caml_call2(f,x,y);
if(_DR_){var xs$0=xs$1,ys$0=ys$1;continue}
return _DR_}
return 1}
return 1}}
function exists2(f,xs,ys)
{var xs$0=xs,ys$0=ys;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1],match$0=caml_call1(ys$0,0);
if(match$0)
{var ys$1=match$0[2],y=match$0[1],_DQ_=caml_call2(f,x,y);
if(_DQ_)return _DQ_;
var xs$0=xs$1,ys$0=ys$1;
continue}
return 0}
return 0}}
function equal$0(eq,xs,ys)
{var xs$0=xs,ys$0=ys;
for(;;)
{var match=caml_call1(xs$0,0),match$0=caml_call1(ys$0,0);
if(match)
{if(match$0)
{var
ys$1=match$0[2],
y=match$0[1],
xs$1=match[2],
x=match[1],
_DP_=caml_call2(eq,x,y);
if(_DP_){var xs$0=xs$1,ys$0=ys$1;continue}
return _DP_}}
else
if(! match$0)return 1;
return 0}}
function compare$0(cmp,xs,ys)
{var xs$0=xs,ys$0=ys;
for(;;)
{var match=caml_call1(xs$0,0),match$0=caml_call1(ys$0,0);
if(match)
{var _DN_=match[2],_DO_=match[1];
if(match$0)
{var ys$1=match$0[2],y=match$0[1],c=caml_call2(cmp,_DO_,y);
if(0 === c){var xs$0=_DN_,ys$0=ys$1;continue}
return c}
return 1}
return match$0?-1:0}}
function init_aux(f,i,j,param)
{if(i < j)
{var
_DK_=i + 1 | 0,
_DL_=function(_DM_){return init_aux(f,_DK_,j,_DM_)};
return [0,caml_call1(f,i),_DL_]}
return 0}
function init(n,f)
{if(0 <= n)
{var _DI_=0;return function(_DJ_){return init_aux(f,_DI_,n,_DJ_)}}
return invalid_arg(cst_Seq_init)}
function repeat(x,param)
{return [0,x,function(_DH_){return repeat(x,_DH_)}]}
function forever(f,param)
{function _DF_(_DG_){return forever(f,_DG_)}
return [0,caml_call1(f,0),_DF_]}
function cycle_nonempty(xs,param)
{var _DD_=0;
return append$0(xs,function(_DE_){return cycle_nonempty(xs,_DE_)},_DD_)}
function cycle(xs,param)
{var match=caml_call1(xs,0);
if(match)
{var
xs$0=match[2],
x=match[1],
_DA_=function(_DC_){return cycle_nonempty(xs,_DC_)};
return [0,x,function(_DB_){return append$0(xs$0,_DA_,_DB_)}]}
return 0}
function iterate1(f,x,param)
{var y=caml_call1(f,x);
return [0,y,function(_Dz_){return iterate1(f,y,_Dz_)}]}
function iterate(f,x)
{function _Dw_(_Dy_){return iterate1(f,x,_Dy_)}
return function(_Dx_){return [0,x,_Dw_]}}
function mapi_aux(f,i,xs,param)
{var match=caml_call1(xs,0);
if(match)
{var
xs$0=match[2],
x=match[1],
_Dt_=i + 1 | 0,
_Du_=function(_Dv_){return mapi_aux(f,_Dt_,xs$0,_Dv_)};
return [0,caml_call2(f,i,x),_Du_]}
return 0}
function mapi(f,xs)
{var _Dr_=0;return function(_Ds_){return mapi_aux(f,_Dr_,xs,_Ds_)}}
function tail_scan(f,s,xs,param)
{var match=caml_call1(xs,0);
if(match)
{var xs$0=match[2],x=match[1],s$0=caml_call2(f,s,x);
return [0,s$0,function(_Dq_){return tail_scan(f,s$0,xs$0,_Dq_)}]}
return 0}
function scan(f,s,xs)
{function _Dn_(_Dp_){return tail_scan(f,s,xs,_Dp_)}
return function(_Do_){return [0,s,_Dn_]}}
function take_aux(n,xs)
{return 0 === n
?empty
:function(param)
{var match=caml_call1(xs,0);
if(match)
{var xs$0=match[2],x=match[1];
return [0,x,take_aux(n - 1 | 0,xs$0)]}
return 0}}
function take(n,xs)
{if(n < 0)invalid_arg(cst_Seq_take);return take_aux(n,xs)}
function drop(n,xs)
{return 0 <= n
?0 === n
?xs
:function(param)
{var n$0=n,xs$0=xs;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],n$1=n$0 - 1 | 0;
if(0 === n$1)return caml_call1(xs$1,0);
var n$0=n$1,xs$0=xs$1;
continue}
return 0}}
:invalid_arg(cst_Seq_drop)}
function take_while(p,xs,param)
{var match=caml_call1(xs,0);
if(match)
{var xs$0=match[2],x=match[1];
return caml_call1(p,x)
?[0,x,function(_Dm_){return take_while(p,xs$0,_Dm_)}]
:0}
return 0}
function drop_while(p,xs,param)
{var xs$0=xs;
for(;;)
{var node=caml_call1(xs$0,0);
if(node)
{var xs$1=node[2],x=node[1];
if(caml_call1(p,x)){var xs$0=xs$1;continue}
return node}
return 0}}
function group(eq,xs,param)
{var match=caml_call1(xs,0);
if(match)
{var
xs$0=match[2],
x=match[1],
_Dd_=caml_call1(eq,x),
_De_=function(_Dl_){return drop_while(_Dd_,xs$0,_Dl_)},
_Df_=function(_Dk_){return group(eq,_De_,_Dk_)},
_Dg_=caml_call1(eq,x),
_Dh_=function(_Dj_){return take_while(_Dg_,xs$0,_Dj_)};
return [0,function(_Di_){return [0,x,_Dh_]},_Df_]}
return 0}
var Forced_twice=[248,cst_Stdlib_Seq_Forced_twice,caml_fresh_oo_id(0)];
function failure(param){throw Forced_twice}
function memoize(xs)
{function s$0(param)
{var match=caml_call1(xs,0);
if(match){var xs$0=match[2],x=match[1];return [0,x,memoize(xs$0)]}
return 0}
var s=to_lazy(s$0);
return function(_Dc_)
{var _Db_=caml_obj_tag(s);
return 250 === _Db_?s[1]:246 === _Db_?force_lazy_block(s):s}}
function once(xs)
{function f(param)
{var match=caml_call1(xs,0);
if(match){var xs$0=match[2],x=match[1];return [0,x,once(xs$0)]}
return 0}
var action=[0,f];
return function(param)
{var f=exchange(action,failure);return caml_call1(f,0)}}
function zip(xs,ys,param)
{var match=caml_call1(xs,0);
if(match)
{var xs$0=match[2],x=match[1],match$0=caml_call1(ys,0);
if(match$0)
{var ys$0=match$0[2],y=match$0[1];
return [0,[0,x,y],function(_Da_){return zip(xs$0,ys$0,_Da_)}]}
return 0}
return 0}
function map2(f,xs,ys,param)
{var match=caml_call1(xs,0);
if(match)
{var xs$0=match[2],x=match[1],match$0=caml_call1(ys,0);
if(match$0)
{var
ys$0=match$0[2],
y=match$0[1],
_C__=function(_C$_){return map2(f,xs$0,ys$0,_C$_)};
return [0,caml_call2(f,x,y),_C__]}
return 0}
return 0}
function interleave(xs,ys,param)
{var match=caml_call1(xs,0);
if(match)
{var xs$0=match[2],x=match[1];
return [0,x,function(_C9_){return interleave(ys,xs$0,_C9_)}]}
return caml_call1(ys,0)}
function sorted_merge1(cmp,x,xs,y,ys)
{return 0 < caml_call2(cmp,x,y)
?[0,
y,
function(_C7_)
{var match=caml_call1(ys,0);
if(match)
{var ys$0=match[2],y=match[1];
return sorted_merge1(cmp,x,xs,y,ys$0)}
return [0,x,xs]}]
:[0,
x,
function(_C8_)
{var match=caml_call1(xs,0);
if(match)
{var xs$0=match[2],x=match[1];
return sorted_merge1(cmp,x,xs$0,y,ys)}
return [0,y,ys]}]}
function sorted_merge(cmp,xs,ys,param)
{var match=caml_call1(xs,0),match$0=caml_call1(ys,0);
if(match)
{if(match$0)
{var ys$0=match$0[2],y=match$0[1],xs$0=match[2],x=match[1];
return sorted_merge1(cmp,x,xs$0,y,ys$0)}
var c=match}
else
{if(! match$0)return 0;var c=match$0}
return c}
function map_fst(xys,param)
{var match=caml_call1(xys,0);
if(match)
{var xys$0=match[2],match$0=match[1],x=match$0[1];
return [0,x,function(_C6_){return map_fst(xys$0,_C6_)}]}
return 0}
function map_snd(xys,param)
{var match=caml_call1(xys,0);
if(match)
{var xys$0=match[2],match$0=match[1],y=match$0[2];
return [0,y,function(_C5_){return map_snd(xys$0,_C5_)}]}
return 0}
function unzip(xys)
{function _C2_(_C4_){return map_snd(xys,_C4_)}
return [0,function(_C3_){return map_fst(xys,_C3_)},_C2_]}
function filter_map_find_left_map(f,xs,param)
{var xs$0=xs;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1],match$0=caml_call1(f,x);
if(0 === match$0[0])
{var y=match$0[1];
return [0,
y,
function(_C1_){return filter_map_find_left_map(f,xs$1,_C1_)}]}
var xs$0=xs$1;
continue}
return 0}}
function filter_map_find_right_map(f,xs,param)
{var xs$0=xs;
for(;;)
{var match=caml_call1(xs$0,0);
if(match)
{var xs$1=match[2],x=match[1],match$0=caml_call1(f,x);
if(0 === match$0[0]){var xs$0=xs$1;continue}
var z=match$0[1];
return [0,
z,
function(_C0_)
{return filter_map_find_right_map(f,xs$1,_C0_)}]}
return 0}}
function partition_map(f,xs)
{function _CX_(_CZ_){return filter_map_find_right_map(f,xs,_CZ_)}
return [0,
function(_CY_){return filter_map_find_left_map(f,xs,_CY_)},
_CX_]}
function partition(p,xs)
{function _CT_(x){return 1 - caml_call1(p,x)}
function _CU_(_CW_){return filter(_CT_,xs,_CW_)}
return [0,function(_CV_){return filter(p,xs,_CV_)},_CU_]}
function peel(xss)
{return unzip(function(_CS_){return filter_map(uncons,xss,_CS_)})}
function transpose(xss,param)
{var match=peel(xss),tails=match[2],heads=match[1];
if(is_empty(heads))
{if(is_empty(tails))return 0;throw [0,Assert_failure,_r_]}
return [0,heads,function(_CR_){return transpose(tails,_CR_)}]}
function _s_(remainders,xss,param)
{var match=caml_call1(xss,0);
if(match)
{var xss$0=match[2],xs=match[1],match$0=caml_call1(xs,0);
if(match$0)
{var
xs$0=match$0[2],
x=match$0[1],
match$1=peel(remainders),
tails=match$1[2],
heads=match$1[1],
_CL_=function(_CQ_){return [0,xs$0,tails]},
_CM_=function(_CP_){return _s_(_CL_,xss$0,_CP_)};
return [0,function(_CO_){return [0,x,heads]},_CM_]}
var match$2=peel(remainders),tails$0=match$2[2],heads$0=match$2[1];
return [0,heads$0,function(_CN_){return _s_(tails$0,xss$0,_CN_)}]}
return transpose(remainders,0)}
function map_product(f,xs,ys)
{function _CF_(x)
{function _CJ_(y){return caml_call2(f,x,y)}
return function(_CK_){return map$1(_CJ_,ys,_CK_)}}
function xss(_CI_){return map$1(_CF_,xs,_CI_)}
function _CE_(_CH_){return _s_(empty,xss,_CH_)}
return function(_CG_){return concat(_CE_,_CG_)}}
function product(xs,ys)
{return map_product(function(x,y){return [0,x,y]},xs,ys)}
function of_dispenser(it)
{function c(param)
{var match=caml_call1(it,0);
if(match){var x=match[1];return [0,x,c]}
return 0}
return c}
function to_dispenser(xs)
{var s=[0,xs];
return function(param)
{var match=caml_call1(s[1],0);
if(match){var xs=match[2],x=match[1];s[1] = xs;return [0,x]}
return 0}}
function ints(i,param)
{var _CC_=i + 1 | 0;return [0,i,function(_CD_){return ints(_CC_,_CD_)}]}
var
Stdlib_Seq=
[0,
is_empty,
uncons,
length$0,
iter,
fold_left,
iteri,
fold_lefti,
for_all,
exists,
find,
find_map,
iter2,
fold_left2,
for_all2,
exists2,
equal$0,
compare$0,
empty,
return$0,
cons,
init,
unfold,
repeat,
forever,
cycle,
iterate,
map$1,
mapi,
filter,
filter_map,
scan,
take,
drop,
take_while,
drop_while,
group,
memoize,
Forced_twice,
once,
transpose,
append$0,
concat,
flat_map,
flat_map,
zip,
map2,
interleave,
sorted_merge,
product,
map_product,
unzip,
unzip,
partition_map,
partition,
of_dispenser,
to_dispenser,
ints];
caml_register_global(782,Stdlib_Seq,"Stdlib__Seq");
var none=0;
function some(v){return [0,v]}
function value(o,default$0){if(o){var v=o[1];return v}return default$0}
function get$0(param)
{if(param){var v=param[1];return v}
return invalid_arg(cst_option_is_None)}
function bind(o,f){if(o){var v=o[1];return caml_call1(f,v)}return 0}
function join(param){if(param){var o=param[1];return o}return 0}
function map$2(f,o){if(o){var v=o[1];return [0,caml_call1(f,v)]}return 0}
function fold$0(none,some,param)
{if(param){var v=param[1];return caml_call1(some,v)}return none}
function iter$0(f,param)
{if(param){var v=param[1];return caml_call1(f,v)}return 0}
function is_none(param){return param?0:1}
function is_some(param){return param?1:0}
function equal$1(eq,o0,o1)
{if(o0)
{if(o1){var v1=o1[1],v0=o0[1];return caml_call2(eq,v0,v1)}}
else
if(! o1)return 1;
return 0}
function compare$1(cmp,o0,o1)
{if(o0)
{var _CB_=o0[1];
if(o1){var v1=o1[1];return caml_call2(cmp,_CB_,v1)}
return 1}
return o1?-1:0}
function to_result(none,param)
{if(param){var v=param[1];return [0,v]}return [1,none]}
function to_list(param){if(param){var v=param[1];return [0,v,0]}return 0}
function to_seq(param)
{if(param){var v=param[1];return function(_CA_){return return$0(v,_CA_)}}
return empty}
var
Stdlib_Option=
[0,
none,
some,
value,
get$0,
bind,
join,
map$2,
fold$0,
iter$0,
is_none,
is_some,
equal$1,
compare$1,
to_result,
to_list,
to_seq];
caml_register_global(783,Stdlib_Option,"Stdlib__Option");
function ok(v){return [0,v]}
function error(e){return [1,e]}
function value$0(r,default$0)
{if(0 === r[0]){var v=r[1];return v}return default$0}
function get_ok(param)
{if(0 === param[0]){var v=param[1];return v}
return invalid_arg(cst_result_is_Error)}
function get_error(param)
{if(0 === param[0])return invalid_arg(cst_result_is_Ok);
var e=param[1];
return e}
function bind$0(r,f)
{if(0 === r[0]){var v=r[1];return caml_call1(f,v)}return r}
function join$0(e){if(0 === e[0]){var r=e[1];return r}return e}
function map$3(f,e)
{if(0 === e[0]){var v=e[1];return [0,caml_call1(f,v)]}return e}
function map_error(f,v)
{if(0 === v[0])return v;var e=v[1];return [1,caml_call1(f,e)]}
function fold$1(ok,error,param)
{if(0 === param[0]){var v=param[1];return caml_call1(ok,v)}
var e=param[1];
return caml_call1(error,e)}
function iter$1(f,param)
{if(0 === param[0]){var v=param[1];return caml_call1(f,v)}return 0}
function iter_error(f,param)
{if(0 === param[0])return 0;var e=param[1];return caml_call1(f,e)}
function is_ok(param){return 0 === param[0]?1:0}
function is_error(param){return 0 === param[0]?0:1}
function equal$2(ok,error,r0,r1)
{if(0 === r0[0])
{var _Cy_=r0[1];
if(0 === r1[0]){var v1=r1[1];return caml_call2(ok,_Cy_,v1)}}
else
{var _Cz_=r0[1];
if(0 !== r1[0]){var e1=r1[1];return caml_call2(error,_Cz_,e1)}}
return 0}
function compare$2(ok,error,r0,r1)
{if(0 === r0[0])
{var _Cw_=r0[1];
if(0 === r1[0]){var v1=r1[1];return caml_call2(ok,_Cw_,v1)}
return -1}
var _Cx_=r0[1];
if(0 === r1[0])return 1;
var e1=r1[1];
return caml_call2(error,_Cx_,e1)}
function to_option(param)
{if(0 === param[0]){var v=param[1];return [0,v]}return 0}
function to_list$0(param)
{if(0 === param[0]){var v=param[1];return [0,v,0]}return 0}
function to_seq$0(param)
{if(0 === param[0])
{var v=param[1];return function(_Cv_){return return$0(v,_Cv_)}}
return empty}
var
Stdlib_Result=
[0,
ok,
error,
value$0,
get_ok,
get_error,
bind$0,
join$0,
map$3,
map_error,
fold$1,
iter$1,
iter_error,
is_ok,
is_error,
equal$2,
compare$2,
to_option,
to_list$0,
to_seq$0];
caml_register_global(784,Stdlib_Result,"Stdlib__Result");
function equal$3(_Cu_,_Ct_){return _Cu_ === _Ct_?1:0}
var compare$3=caml_int_compare;
function to_float(param){return param?1.:0.}
function to_string$0(param){return param?cst_true$2:cst_false$2}
function _t_(_Cs_){return _Cs_}
var
Stdlib_Bool=
[0,
function(_Cr_){return 1 - _Cr_},
equal$3,
compare$3,
_t_,
to_float,
to_string$0];
caml_register_global(785,Stdlib_Bool,"Stdlib__Bool");
function chr(n)
{if(0 <= n && ! (255 < n))return n;return invalid_arg(cst_Char_chr)}
function escaped(c)
{var switch$0=0;
if(40 <= c)
{if(92 === c)return cst$1;if(! (127 <= c))switch$0 = 1}
else
if(32 <= c)
{if(39 <= c)return cst$2;switch$0 = 1}
else
if(! (14 <= c))
switch(c)
{case 8:return cst_b;
case 9:return cst_t;
case 10:return cst_n;
case 13:return cst_r
}
if(switch$0)
{var s$0=caml_create_bytes(1);
caml_bytes_unsafe_set(s$0,0,c);
return caml_string_of_bytes(s$0)}
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)}
function lowercase(c)
{var _Cq_=c - 192 | 0,switch$0=0;
if(30 < _Cq_ >>> 0)
{if(! (25 < _Cq_ + 127 >>> 0))switch$0 = 1}
else
if(23 !== _Cq_)switch$0 = 1;
return switch$0?c + 32 | 0:c}
function uppercase(c)
{var _Cp_=c - 224 | 0,switch$0=0;
if(30 < _Cp_ >>> 0)
{if(! (25 < _Cp_ + 127 >>> 0))switch$0 = 1}
else
if(23 !== _Cp_)switch$0 = 1;
return switch$0?c - 32 | 0:c}
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$4(c1,c2){return c1 - c2 | 0}
function equal$4(c1,c2){return 0 === (c1 - c2 | 0)?1:0}
var
Stdlib_Char=
[0,
chr,
escaped,
lowercase,
uppercase,
lowercase_ascii,
uppercase_ascii,
compare$4,
equal$4];
caml_register_global(786,Stdlib_Char,"Stdlib__Char");
var
min$0=0,
max$0=1114111,
lo_bound=55295,
hi_bound=57344,
bom=65279,
rep=65533;
function succ(u)
{return u === 55295
?hi_bound
:u === 1114111?invalid_arg(err_no_succ):u + 1 | 0}
function pred(u)
{return u === 57344?lo_bound:u === 0?invalid_arg(err_no_pred):u - 1 | 0}
function is_valid(i)
{var _Cl_=0 <= i?1:0,_Cm_=_Cl_?i <= 55295?1:0:_Cl_;
if(_Cm_)
var _Cn_=_Cm_;
else
var _Co_=57344 <= i?1:0,_Cn_=_Co_?i <= 1114111?1:0:_Co_;
return _Cn_}
function of_int(i)
{return is_valid(i)
?i
:invalid_arg
(cat(caml_format_int(cst_X,i),cst_is_not_an_Unicode_scalar_v))}
function is_char(u){return u < 256?1:0}
function of_char(c){return c}
function to_char(u)
{return 255 < u
?invalid_arg
(cat
(cst_U,
cat
(caml_format_int(cst_04X,u),cst_is_not_a_latin1_character)))
:u}
function unsafe_to_char(_Ck_){return _Ck_}
function equal$5(_Cj_,_Ci_){return _Cj_ === _Ci_?1:0}
var compare$5=caml_int_compare;
function hash(_Ch_){return _Ch_}
function utf_decode_is_valid(d){return 1 === (d >>> 27 | 0)?1:0}
function utf_decode_length(d){return (d >>> 24 | 0) & 7}
function utf_decode_uchar(d){return d & 16777215}
function utf_decode(n,u){return (8 | n) << 24 | u}
function dec_invalid(n){return n << 24 | 65533}
function utf_8_byte_length(u)
{if(0 <= u)
{if(127 < u)
{if(2047 < u)
{if(65535 < u)
{if(1114111 < u)throw [0,Assert_failure,_u_];return 4}
return 3}
return 2}
return 1}
throw [0,Assert_failure,_v_]}
function utf_16_byte_length(u)
{if(0 <= u)
{if(65535 < u){if(1114111 < u)throw [0,Assert_failure,_w_];return 4}
return 2}
throw [0,Assert_failure,_x_]}
function _y_(_Cg_){return _Cg_}
var
Stdlib_Uchar=
[0,
min$0,
max$0,
bom,
rep,
succ,
pred,
is_valid,
of_int,
function(_Cf_){return _Cf_},
_y_,
is_char,
of_char,
to_char,
unsafe_to_char,
equal$5,
compare$5,
hash,
utf_decode_is_valid,
utf_decode_uchar,
utf_decode_length,
utf_decode,
dec_invalid,
utf_8_byte_length,
utf_16_byte_length];
caml_register_global(787,Stdlib_Uchar,"Stdlib__Uchar");
function length$1(l)
{var len=0,param=l;
for(;;)
{if(param)
{var param$0=param[2],len$0=len + 1 | 0,len=len$0,param=param$0;
continue}
return len}}
function cons$0(a,l){return [0,a,l]}
function hd(param)
{if(param){var a=param[1];return a}return failwith(cst_hd)}
function tl(param)
{if(param){var l=param[2];return l}return failwith(cst_tl)}
function nth(l,n)
{if(0 <= n)
{var l$0=l,n$0=n;
for(;;)
{if(l$0)
{var l$1=l$0[2],a=l$0[1];
if(0 === n$0)return a;
var n$1=n$0 - 1 | 0,l$0=l$1,n$0=n$1;
continue}
return failwith(cst_nth)}}
return invalid_arg(cst_List_nth)}
function nth_opt(l,n)
{if(0 <= n)
{var l$0=l,n$0=n;
for(;;)
{if(l$0)
{var l$1=l$0[2],a=l$0[1];
if(0 === n$0)return [0,a];
var n$1=n$0 - 1 | 0,l$0=l$1,n$0=n$1;
continue}
return 0}}
return invalid_arg(cst_List_nth$0)}
function rev_append(l1,l2)
{var l1$0=l1,l2$0=l2;
for(;;)
{if(l1$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;
continue}
return l2$0}}
function rev(l){return rev_append(l,0)}
function init_aux$0(i,n,f)
{if(n <= i)return 0;
var r=caml_call1(f,i);
return [0,r,init_aux$0(i + 1 | 0,n,f)]}
function init$0(len,f)
{if(0 <= len)
{if(50 < len)
{var acc=0,i=0;
for(;;)
{if(len <= i)return rev(acc);
var i$0=i + 1 | 0,acc$0=[0,caml_call1(f,i),acc],acc=acc$0,i=i$0;
continue}}
return init_aux$0(0,len,f)}
return invalid_arg(cst_List_init)}
function flatten(param)
{if(param){var r=param[2],l=param[1];return append(l,flatten(r))}
return 0}
function map$4(f,param)
{if(param)
{var l=param[2],a=param[1],r=caml_call1(f,a);return [0,r,map$4(f,l)]}
return 0}
function _z_(i,f,param)
{if(param)
{var l=param[2],a=param[1],r=caml_call2(f,i,a);
return [0,r,_z_(i + 1 | 0,f,l)]}
return 0}
function mapi$0(f,l){return _z_(0,f,l)}
function rev_map(f,param)
{var accu=0,param$0=param;
for(;;)
{if(param$0)
{var
l=param$0[2],
a=param$0[1],
accu$0=[0,caml_call1(f,a),accu],
accu=accu$0,
param$0=l;
continue}
return accu}}
function iter$2(f,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],a=param$0[1];
caml_call1(f,a);
var param$0=l;
continue}
return 0}}
function iteri$0(f,l$0)
{var i=0,param=l$0;
for(;;)
{if(param)
{var l=param[2],a=param[1];
caml_call2(f,i,a);
var i$0=i + 1 | 0,i=i$0,param=l;
continue}
return 0}}
function fold_left$0(f,accu,l)
{var accu$0=accu,l$0=l;
for(;;)
{if(l$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;
continue}
return accu$0}}
function fold_right(f,l,accu)
{if(l){var l$0=l[2],a=l[1];return caml_call2(f,a,fold_right(f,l$0,accu))}
return accu}
function map2$0(f,l1,l2)
{if(l1)
{if(l2)
{var l2$0=l2[2],a2=l2[1],l1$0=l1[2],a1=l1[1],r=caml_call2(f,a1,a2);
return [0,r,map2$0(f,l1$0,l2$0)]}}
else
if(! l2)return 0;
return invalid_arg(cst_List_map2)}
function rev_map2(f,l1,l2)
{var accu=0,l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{if(l2$0)
{var
l2$1=l2$0[2],
a2=l2$0[1],
l1$1=l1$0[2],
a1=l1$0[1],
accu$0=[0,caml_call2(f,a1,a2),accu],
accu=accu$0,
l1$0=l1$1,
l2$0=l2$1;
continue}}
else
if(! l2$0)return accu;
return invalid_arg(cst_List_rev_map2)}}
function iter2$0(f,l1,l2)
{var l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{if(l2$0)
{var l2$1=l2$0[2],a2=l2$0[1],l1$1=l1$0[2],a1=l1$0[1];
caml_call2(f,a1,a2);
var l1$0=l1$1,l2$0=l2$1;
continue}}
else
if(! l2$0)return 0;
return invalid_arg(cst_List_iter2)}}
function fold_left2$0(f,accu,l1,l2)
{var accu$0=accu,l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{if(l2$0)
{var
l2$1=l2$0[2],
a2=l2$0[1],
l1$1=l1$0[2],
a1=l1$0[1],
accu$1=caml_call3(f,accu$0,a1,a2),
accu$0=accu$1,
l1$0=l1$1,
l2$0=l2$1;
continue}}
else
if(! l2$0)return accu$0;
return invalid_arg(cst_List_fold_left2)}}
function fold_right2(f,l1,l2,accu)
{if(l1)
{if(l2)
{var l2$0=l2[2],a2=l2[1],l1$0=l1[2],a1=l1[1];
return caml_call3(f,a1,a2,fold_right2(f,l1$0,l2$0,accu))}}
else
if(! l2)return accu;
return invalid_arg(cst_List_fold_right2)}
function for_all$0(p,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],a=param$0[1],_Ce_=caml_call1(p,a);
if(_Ce_){var param$0=l;continue}
return _Ce_}
return 1}}
function exists$0(p,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],a=param$0[1],_Cd_=caml_call1(p,a);
if(_Cd_)return _Cd_;
var param$0=l;
continue}
return 0}}
function for_all2$0(p,l1,l2)
{var l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{if(l2$0)
{var
l2$1=l2$0[2],
a2=l2$0[1],
l1$1=l1$0[2],
a1=l1$0[1],
_Cc_=caml_call2(p,a1,a2);
if(_Cc_){var l1$0=l1$1,l2$0=l2$1;continue}
return _Cc_}}
else
if(! l2$0)return 1;
return invalid_arg(cst_List_for_all2)}}
function exists2$0(p,l1,l2)
{var l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{if(l2$0)
{var
l2$1=l2$0[2],
a2=l2$0[1],
l1$1=l1$0[2],
a1=l1$0[1],
_Cb_=caml_call2(p,a1,a2);
if(_Cb_)return _Cb_;
var l1$0=l1$1,l2$0=l2$1;
continue}}
else
if(! l2$0)return 0;
return invalid_arg(cst_List_exists2)}}
function mem(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],a=param$0[1],_Ca_=0 === caml_compare(a,x)?1:0;
if(_Ca_)return _Ca_;
var param$0=l;
continue}
return 0}}
function memq(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],a=param$0[1],_B$_=a === x?1:0;
if(_B$_)return _B$_;
var param$0=l;
continue}
return 0}}
function assoc(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],match=param$0[1],b=match[2],a=match[1];
if(0 === caml_compare(a,x))return b;
var param$0=l;
continue}
throw Not_found}}
function assoc_opt(x,param)
{var param$0=param;
for(;;)
{if(param$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];
var param$0=l;
continue}
return 0}}
function assq(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],match=param$0[1],b=match[2],a=match[1];
if(a === x)return b;
var param$0=l;
continue}
throw Not_found}}
function assq_opt(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],match=param$0[1],b=match[2],a=match[1];
if(a === x)return [0,b];
var param$0=l;
continue}
return 0}}
function mem_assoc(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
l=param$0[2],
match=param$0[1],
a=match[1],
_B__=0 === caml_compare(a,x)?1:0;
if(_B__)return _B__;
var param$0=l;
continue}
return 0}}
function mem_assq(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],match=param$0[1],a=match[1],_B9_=a === x?1:0;
if(_B9_)return _B9_;
var param$0=l;
continue}
return 0}}
function remove_assoc(x,param)
{if(param)
{var l=param[2],pair=param[1],a=pair[1];
return 0 === caml_compare(a,x)?l:[0,pair,remove_assoc(x,l)]}
return 0}
function remove_assq(x,param)
{if(param)
{var l=param[2],pair=param[1],a=pair[1];
return a === x?l:[0,pair,remove_assq(x,l)]}
return 0}
function find$0(p,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],x=param$0[1];
if(caml_call1(p,x))return x;
var param$0=l;
continue}
throw Not_found}}
function find_opt(p,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],x=param$0[1];
if(caml_call1(p,x))return [0,x];
var param$0=l;
continue}
return 0}}
function find_map$0(f,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],x=param$0[1],result=caml_call1(f,x);
if(result)return result;
var param$0=l;
continue}
return 0}}
function find_all(p)
{var accu=0;
return function(param$0)
{var accu$0=accu,param=param$0;
for(;;)
{if(param)
{var l=param[2],x=param[1];
if(caml_call1(p,x))
{var accu$1=[0,x,accu$0],accu$0=accu$1,param=l;continue}
var param=l;
continue}
return rev(accu$0)}}}
function filteri(p,param)
{var i=0,acc=0,param$0=param;
for(;;)
{if(param$0)
{var
l=param$0[2],
x=param$0[1],
acc$0=caml_call2(p,i,x)?[0,x,acc]:acc,
i$0=i + 1 | 0,
i=i$0,
acc=acc$0,
param$0=l;
continue}
return rev(acc)}}
function filter_map$0(f)
{var accu=0;
return function(param$0)
{var accu$0=accu,param=param$0;
for(;;)
{if(param)
{var l=param[2],x=param[1],match=caml_call1(f,x);
if(match)
{var v=match[1],accu$1=[0,v,accu$0],accu$0=accu$1,param=l;
continue}
var param=l;
continue}
return rev(accu$0)}}}
function concat_map(f,param)
{var acc=0,param$0=param;
for(;;)
{if(param$0)
{var
l=param$0[2],
x=param$0[1],
xs=caml_call1(f,x),
acc$0=rev_append(xs,acc),
acc=acc$0,
param$0=l;
continue}
return rev(acc)}}
function fold_left_map(f,accu,param)
{var accu$0=accu,l_accu=0,param$0=param;
for(;;)
{if(param$0)
{var
l=param$0[2],
x=param$0[1],
match=caml_call2(f,accu$0,x),
x$0=match[2],
accu$1=match[1],
l_accu$0=[0,x$0,l_accu],
accu$0=accu$1,
l_accu=l_accu$0,
param$0=l;
continue}
return [0,accu$0,rev(l_accu)]}}
function partition$0(p,param)
{var yes=0,no=0,param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],x=param$0[1];
if(caml_call1(p,x))
{var yes$0=[0,x,yes],yes=yes$0,param$0=l;continue}
var no$0=[0,x,no],no=no$0,param$0=l;
continue}
var _B8_=rev(no);
return [0,rev(yes),_B8_]}}
function partition_map$0(p,param)
{var left=0,right=0,param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],x=param$0[1],match=caml_call1(p,x);
if(0 === match[0])
{var v=match[1],left$0=[0,v,left],left=left$0,param$0=l;continue}
var v$0=match[1],right$0=[0,v$0,right],right=right$0,param$0=l;
continue}
var _B7_=rev(right);
return [0,rev(left),_B7_]}}
function split(param)
{if(param)
{var
l=param[2],
match=param[1],
y=match[2],
x=match[1],
match$0=split(l),
ry=match$0[2],
rx=match$0[1];
return [0,[0,x,rx],[0,y,ry]]}
return _A_}
function combine(l1,l2)
{if(l1)
{if(l2)
{var l2$0=l2[2],a2=l2[1],l1$0=l1[2],a1=l1[1];
return [0,[0,a1,a2],combine(l1$0,l2$0)]}}
else
if(! l2)return 0;
return invalid_arg(cst_List_combine)}
function merge(cmp,l1,l2)
{if(l1)
{if(l2)
{var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1];
return 0 < caml_call2(cmp,h1,h2)
?[0,h2,merge(cmp,l1,t2)]
:[0,h1,merge(cmp,t1,l2)]}
return l1}
return l2}
function fast_sort(cmp,l)
{function rev_sort(n,l)
{if(2 === n)
{if(l)
{var _B3_=l[2];
if(_B3_)
{var
tl=_B3_[2],
x2=_B3_[1],
x1=l[1],
s=0 < caml_call2(cmp,x1,x2)?[0,x1,[0,x2,0]]:[0,x2,[0,x1,0]];
return [0,s,tl]}}}
else
if(3 === n && l)
{var _B5_=l[2];
if(_B5_)
{var _B6_=_B5_[2];
if(_B6_)
{var
tl$1=_B6_[2],
x3=_B6_[1],
x2$0=_B5_[1],
x1$0=l[1],
s$0=
0 < caml_call2(cmp,x1$0,x2$0)
?0 < caml_call2(cmp,x2$0,x3)
?[0,x1$0,[0,x2$0,[0,x3,0]]]
:0 < caml_call2(cmp,x1$0,x3)
?[0,x1$0,[0,x3,[0,x2$0,0]]]
:[0,x3,[0,x1$0,[0,x2$0,0]]]
:0 < caml_call2(cmp,x1$0,x3)
?[0,x2$0,[0,x1$0,[0,x3,0]]]
:0 < caml_call2(cmp,x2$0,x3)
?[0,x2$0,[0,x3,[0,x1$0,0]]]
:[0,x3,[0,x2$0,[0,x1$0,0]]];
return [0,s$0,tl$1]}}}
var
n1=n >> 1,
n2=n - n1 | 0,
match=sort(n1,l),
l2$0=match[2],
s1=match[1],
match$0=sort(n2,l2$0),
tl$0=match$0[2],
s2=match$0[1],
l1=s1,
l2=s2,
accu=0;
for(;;)
{if(l1)
{if(l2)
{var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1];
if(0 < caml_call2(cmp,h1,h2))
{var accu$0=[0,h2,accu],l2=t2,accu=accu$0;continue}
var accu$1=[0,h1,accu],l1=t1,accu=accu$1;
continue}
var _B4_=rev_append(l1,accu)}
else
var _B4_=rev_append(l2,accu);
return [0,_B4_,tl$0]}}
function sort(n,l)
{if(2 === n)
{if(l)
{var _BZ_=l[2];
if(_BZ_)
{var
tl=_BZ_[2],
x2=_BZ_[1],
x1=l[1],
s=0 < caml_call2(cmp,x1,x2)?[0,x2,[0,x1,0]]:[0,x1,[0,x2,0]];
return [0,s,tl]}}}
else
if(3 === n && l)
{var _B1_=l[2];
if(_B1_)
{var _B2_=_B1_[2];
if(_B2_)
{var
tl$1=_B2_[2],
x3=_B2_[1],
x2$0=_B1_[1],
x1$0=l[1],
s$0=
0 < caml_call2(cmp,x1$0,x2$0)
?0 < caml_call2(cmp,x1$0,x3)
?0 < caml_call2(cmp,x2$0,x3)
?[0,x3,[0,x2$0,[0,x1$0,0]]]
:[0,x2$0,[0,x3,[0,x1$0,0]]]
:[0,x2$0,[0,x1$0,[0,x3,0]]]
:0 < caml_call2(cmp,x2$0,x3)
?0 < caml_call2(cmp,x1$0,x3)
?[0,x3,[0,x1$0,[0,x2$0,0]]]
:[0,x1$0,[0,x3,[0,x2$0,0]]]
:[0,x1$0,[0,x2$0,[0,x3,0]]];
return [0,s$0,tl$1]}}}
var
n1=n >> 1,
n2=n - n1 | 0,
match=rev_sort(n1,l),
l2$0=match[2],
s1=match[1],
match$0=rev_sort(n2,l2$0),
tl$0=match$0[2],
s2=match$0[1],
l1=s1,
l2=s2,
accu=0;
for(;;)
{if(l1)
{if(l2)
{var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1];
if(0 < caml_call2(cmp,h1,h2))
{var accu$0=[0,h1,accu],l1=t1,accu=accu$0;continue}
var accu$1=[0,h2,accu],l2=t2,accu=accu$1;
continue}
var _B0_=rev_append(l1,accu)}
else
var _B0_=rev_append(l2,accu);
return [0,_B0_,tl$0]}}
var len=length$1(l);
return 2 <= len?sort(len,l)[1]:l}
function sort_uniq(cmp,l)
{function rev_sort(n,l)
{if(2 === n)
{if(l)
{var _BQ_=l[2];
if(_BQ_)
{var
tl=_BQ_[2],
x2=_BQ_[1],
x1=l[1],
c$0=caml_call2(cmp,x1,x2),
s=0 === c$0?[0,x1,0]:0 < c$0?[0,x1,[0,x2,0]]:[0,x2,[0,x1,0]];
return [0,s,tl]}}}
else
if(3 === n && l)
{var _BS_=l[2];
if(_BS_)
{var _BT_=_BS_[2];
if(_BT_)
{var
tl$1=_BT_[2],
x3=_BT_[1],
x2$0=_BS_[1],
x1$0=l[1],
c$1=caml_call2(cmp,x1$0,x2$0);
if(0 === c$1)
var
c$2=caml_call2(cmp,x2$0,x3),
_BU_=
0 === c$2
?[0,x2$0,0]
:0 < c$2?[0,x2$0,[0,x3,0]]:[0,x3,[0,x2$0,0]],
s$0=_BU_;
else
if(0 < c$1)
{var c$3=caml_call2(cmp,x2$0,x3);
if(0 === c$3)
var _BV_=[0,x1$0,[0,x2$0,0]];
else
if(0 < c$3)
var _BV_=[0,x1$0,[0,x2$0,[0,x3,0]]];
else
var
c$4=caml_call2(cmp,x1$0,x3),
_BW_=
0 === c$4
?[0,x1$0,[0,x2$0,0]]
:0 < c$4
?[0,x1$0,[0,x3,[0,x2$0,0]]]
:[0,x3,[0,x1$0,[0,x2$0,0]]],
_BV_=_BW_;
var s$0=_BV_}
else
{var c$5=caml_call2(cmp,x1$0,x3);
if(0 === c$5)
var _BX_=[0,x2$0,[0,x1$0,0]];
else
if(0 < c$5)
var _BX_=[0,x2$0,[0,x1$0,[0,x3,0]]];
else
var
c$6=caml_call2(cmp,x2$0,x3),
_BY_=
0 === c$6
?[0,x2$0,[0,x1$0,0]]
:0 < c$6
?[0,x2$0,[0,x3,[0,x1$0,0]]]
:[0,x3,[0,x2$0,[0,x1$0,0]]],
_BX_=_BY_;
var s$0=_BX_}
return [0,s$0,tl$1]}}}
var
n1=n >> 1,
n2=n - n1 | 0,
match=sort(n1,l),
l2$0=match[2],
s1=match[1],
match$0=sort(n2,l2$0),
tl$0=match$0[2],
s2=match$0[1],
l1=s1,
l2=s2,
accu=0;
for(;;)
{if(l1)
{if(l2)
{var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1],c=caml_call2(cmp,h1,h2);
if(0 === c)
{var accu$0=[0,h1,accu],l1=t1,l2=t2,accu=accu$0;continue}
if(0 <= c){var accu$1=[0,h2,accu],l2=t2,accu=accu$1;continue}
var accu$2=[0,h1,accu],l1=t1,accu=accu$2;
continue}
var _BR_=rev_append(l1,accu)}
else
var _BR_=rev_append(l2,accu);
return [0,_BR_,tl$0]}}
function sort(n,l)
{if(2 === n)
{if(l)
{var _BH_=l[2];
if(_BH_)
{var
tl=_BH_[2],
x2=_BH_[1],
x1=l[1],
c$0=caml_call2(cmp,x1,x2),
s=0 === c$0?[0,x1,0]:0 <= c$0?[0,x2,[0,x1,0]]:[0,x1,[0,x2,0]];
return [0,s,tl]}}}
else
if(3 === n && l)
{var _BJ_=l[2];
if(_BJ_)
{var _BK_=_BJ_[2];
if(_BK_)
{var
tl$1=_BK_[2],
x3=_BK_[1],
x2$0=_BJ_[1],
x1$0=l[1],
c$1=caml_call2(cmp,x1$0,x2$0);
if(0 === c$1)
var
c$2=caml_call2(cmp,x2$0,x3),
_BL_=
0 === c$2
?[0,x2$0,0]
:0 <= c$2?[0,x3,[0,x2$0,0]]:[0,x2$0,[0,x3,0]],
s$0=_BL_;
else
if(0 <= c$1)
{var c$3=caml_call2(cmp,x1$0,x3);
if(0 === c$3)
var _BM_=[0,x2$0,[0,x1$0,0]];
else
if(0 <= c$3)
var
c$4=caml_call2(cmp,x2$0,x3),
_BN_=
0 === c$4
?[0,x2$0,[0,x1$0,0]]
:0 <= c$4
?[0,x3,[0,x2$0,[0,x1$0,0]]]
:[0,x2$0,[0,x3,[0,x1$0,0]]],
_BM_=_BN_;
else
var _BM_=[0,x2$0,[0,x1$0,[0,x3,0]]];
var s$0=_BM_}
else
{var c$5=caml_call2(cmp,x2$0,x3);
if(0 === c$5)
var _BO_=[0,x1$0,[0,x2$0,0]];
else
if(0 <= c$5)
var
c$6=caml_call2(cmp,x1$0,x3),
_BP_=
0 === c$6
?[0,x1$0,[0,x2$0,0]]
:0 <= c$6
?[0,x3,[0,x1$0,[0,x2$0,0]]]
:[0,x1$0,[0,x3,[0,x2$0,0]]],
_BO_=_BP_;
else
var _BO_=[0,x1$0,[0,x2$0,[0,x3,0]]];
var s$0=_BO_}
return [0,s$0,tl$1]}}}
var
n1=n >> 1,
n2=n - n1 | 0,
match=rev_sort(n1,l),
l2$0=match[2],
s1=match[1],
match$0=rev_sort(n2,l2$0),
tl$0=match$0[2],
s2=match$0[1],
l1=s1,
l2=s2,
accu=0;
for(;;)
{if(l1)
{if(l2)
{var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1],c=caml_call2(cmp,h1,h2);
if(0 === c)
{var accu$0=[0,h1,accu],l1=t1,l2=t2,accu=accu$0;continue}
if(0 < c){var accu$1=[0,h1,accu],l1=t1,accu=accu$1;continue}
var accu$2=[0,h2,accu],l2=t2,accu=accu$2;
continue}
var _BI_=rev_append(l1,accu)}
else
var _BI_=rev_append(l2,accu);
return [0,_BI_,tl$0]}}
var len=length$1(l);
return 2 <= len?sort(len,l)[1]:l}
function compare_lengths(l1,l2)
{var l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{if(l2$0){var l2$1=l2$0[2],l1$1=l1$0[2],l1$0=l1$1,l2$0=l2$1;continue}
return 1}
return l2$0?-1:0}}
function compare_length_with(l,n)
{var l$0=l,n$0=n;
for(;;)
{if(l$0)
{var l$1=l$0[2];
if(0 < n$0){var n$1=n$0 - 1 | 0,l$0=l$1,n$0=n$1;continue}
return 1}
return 0 === n$0?0:0 < n$0?-1:1}}
function equal$6(eq,l1,l2)
{var l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{if(l2$0)
{var
l2$1=l2$0[2],
a2=l2$0[1],
l1$1=l1$0[2],
a1=l1$0[1],
_BG_=caml_call2(eq,a1,a2);
if(_BG_){var l1$0=l1$1,l2$0=l2$1;continue}
return _BG_}}
else
if(! l2$0)return 1;
return 0}}
function compare$6(cmp,l1,l2)
{var l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{var _BE_=l1$0[2],_BF_=l1$0[1];
if(l2$0)
{var l2$1=l2$0[2],a2=l2$0[1],c=caml_call2(cmp,_BF_,a2);
if(0 === c){var l1$0=_BE_,l2$0=l2$1;continue}
return c}
return 1}
return l2$0?-1:0}}
function to_seq$1(l)
{function aux(l,param)
{if(l)
{var tail=l[2],x=l[1];
return [0,x,function(_BD_){return aux(tail,_BD_)}]}
return 0}
return function(_BC_){return aux(l,_BC_)}}
function of_seq(seq)
{function direct(depth,seq)
{if(0 === depth)
{var _BB_=0;
return rev(fold_left(function(acc,x){return [0,x,acc]},_BB_,seq))}
var match=caml_call1(seq,0);
if(match)
{var next=match[2],x=match[1];
return [0,x,direct(depth - 1 | 0,next)]}
return 0}
return direct(500,seq)}
var
include$0=
[0,
length$1,
compare_lengths,
compare_length_with,
cons$0,
hd,
tl,
nth,
nth_opt,
rev,
init$0,
append,
rev_append,
flatten,
flatten,
equal$6,
compare$6,
iter$2,
iteri$0,
map$4,
mapi$0,
rev_map,
filter_map$0,
concat_map,
fold_left_map,
fold_left$0,
fold_right,
iter2$0,
map2$0,
rev_map2,
fold_left2$0,
fold_right2,
for_all$0,
exists$0,
for_all2$0,
exists2$0,
mem,
memq,
find$0,
find_opt,
find_map$0,
find_all,
find_all,
filteri,
partition$0,
partition_map$0,
assoc,
assoc_opt,
assq,
assq_opt,
mem_assoc,
mem_assq,
remove_assoc,
remove_assq,
split,
combine,
fast_sort,
fast_sort,
fast_sort,
sort_uniq,
merge,
to_seq$1,
of_seq];
caml_register_global(788,include$0,"Stdlib__List");
var zero=0,one=1,minus_one=-1;
function abs$0(x){return 0 <= x?x:- x | 0}
var max_int$0=2147483647,min_int$0=-2147483648;
function lognot(x){return x ^ -1}
function equal$7(_BA_,_Bz_){return _BA_ === _Bz_?1:0}
var compare$7=caml_int_compare;
function min$1(x,y){return x <= y?x:y}
function max$1(x,y){return y <= x?x:y}
function to_string$1(x){return caml_string_of_jsbytes("" + x)}
var
Stdlib_Int=
[0,
zero,
one,
minus_one,
abs$0,
max_int$0,
min_int$0,
lognot,
equal$7,
compare$7,
min$1,
max$1,
to_string$1];
caml_register_global(789,Stdlib_Int,"Stdlib__Int");
function make$0(n,c)
{var s=caml_create_bytes(n);caml_fill_bytes(s,0,n,c);return s}
function init$1(n,f)
{var s=caml_create_bytes(n),_Bx_=n - 1 | 0,_Bw_=0;
if(! (_Bx_ < 0))
{var i=_Bw_;
for(;;)
{caml_bytes_unsafe_set(s,i,caml_call1(f,i));
var _By_=i + 1 | 0;
if(_Bx_ !== i){var i=_By_;continue}
break}}
return s}
var empty$0=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_bytes(b){return caml_string_of_bytes(copy(b))}
function to_bytes(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(cst_String_sub_Bytes_sub)}
function sub_string(b,ofs,len)
{return caml_string_of_bytes(sub(b,ofs,len))}
function symbol$0(a,b)
{var c=a + b | 0,_Bv_=b < 0?1:0,match=c < 0?1:0,switch$0=0;
if(a < 0)
{if(_Bv_ && ! match)switch$0 = 1}
else
if(! _Bv_ && match)switch$0 = 1;
return switch$0?invalid_arg(cst_Bytes_extend):c}
function extend(s,left,right)
{var
len=symbol$0(symbol$0(caml_ml_bytes_length(s),left),right),
r=caml_create_bytes(len);
if(0 <= left)
var dstoff=left,srcoff=0;
else
var dstoff=0,srcoff=- left | 0;
var cpylen=min$1(caml_ml_bytes_length(s) - srcoff | 0,len - dstoff | 0);
if(0 < cpylen)caml_blit_bytes(s,srcoff,r,dstoff,cpylen);
return r}
function fill(s,ofs,len,c)
{if
(0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs))
return caml_fill_bytes(s,ofs,len,c);
return invalid_arg(cst_String_fill_Bytes_fill)}
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))
return caml_blit_bytes(s1,ofs1,s2,ofs2,len);
return invalid_arg(cst_Bytes_blit)}
function blit$0(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))
return caml_blit_string(s1,ofs1,s2,ofs2,len);
return invalid_arg(cst_String_blit_Bytes_blit_str)}
function iter$3(f,a)
{var _Bt_=caml_ml_bytes_length(a) - 1 | 0,_Bs_=0;
if(! (_Bt_ < 0))
{var i=_Bs_;
for(;;)
{caml_call1(f,caml_bytes_unsafe_get(a,i));
var _Bu_=i + 1 | 0;
if(_Bt_ !== i){var i=_Bu_;continue}
break}}
return 0}
function iteri$1(f,a)
{var _Bq_=caml_ml_bytes_length(a) - 1 | 0,_Bp_=0;
if(! (_Bq_ < 0))
{var i=_Bp_;
for(;;)
{caml_call2(f,i,caml_bytes_unsafe_get(a,i));
var _Br_=i + 1 | 0;
if(_Bq_ !== i){var i=_Br_;continue}
break}}
return 0}
function concat$0(sep,l)
{if(l)
{var seplen=caml_ml_bytes_length(sep),acc=0,param=l,pos$1=0;
for(;;)
{if(param)
{var _Bm_=param[1];
if(param[2])
{var
tl=param[2],
x=(caml_ml_bytes_length(_Bm_) + seplen | 0) + acc | 0,
acc$0=acc <= x?x:invalid_arg(cst_Bytes_concat),
acc=acc$0,
param=tl;
continue}
var _Bo_=caml_ml_bytes_length(_Bm_) + acc | 0}
else
var _Bo_=acc;
var dst=caml_create_bytes(_Bo_),pos=pos$1,param$0=l;
for(;;)
{if(param$0)
{var _Bn_=param$0[1];
if(param$0[2])
{var tl$0=param$0[2];
caml_blit_bytes(_Bn_,0,dst,pos,caml_ml_bytes_length(_Bn_));
caml_blit_bytes
(sep,0,dst,pos + caml_ml_bytes_length(_Bn_) | 0,seplen);
var
pos$0=(pos + caml_ml_bytes_length(_Bn_) | 0) + seplen | 0,
pos=pos$0,
param$0=tl$0;
continue}
caml_blit_bytes(_Bn_,0,dst,pos,caml_ml_bytes_length(_Bn_));
return dst}
return dst}}}
return empty$0}
function cat$0(s1,s2)
{var
l1=caml_ml_bytes_length(s1),
l2=caml_ml_bytes_length(s2),
r=caml_create_bytes(l1 + l2 | 0);
caml_blit_bytes(s1,0,r,0,l1);
caml_blit_bytes(s2,0,r,l1,l2);
return r}
function is_space(param)
{var _Bl_=param - 9 | 0,switch$0=0;
if(4 < _Bl_ >>> 0)
{if(23 === _Bl_)switch$0 = 1}
else
if(2 !== _Bl_)switch$0 = 1;
return switch$0?1:0}
function trim(s)
{var len=caml_ml_bytes_length(s),i=[0,0];
for(;;)
{if(i[1] < len && is_space(caml_bytes_unsafe_get(s,i[1])))
{i[1]++;continue}
var j=[0,len - 1 | 0];
for(;;)
{if(i[1] <= j[1] && is_space(caml_bytes_unsafe_get(s,j[1])))
{j[1] += -1;continue}
return i[1] <= j[1]?sub(s,i[1],(j[1] - i[1] | 0) + 1 | 0):empty$0}}}
function escaped$0(s)
{var n=[0,0],_Be_=caml_ml_bytes_length(s) - 1 | 0,_Bd_=0;
if(! (_Be_ < 0))
{var i$0=_Bd_;
for(;;)
{var match=caml_bytes_unsafe_get(s,i$0),switch$0=0;
if(32 <= match)
{var _Bi_=match - 34 | 0,switch$1=0;
if(58 < _Bi_ >>> 0)
{if(93 <= _Bi_)switch$1 = 1}
else
if(56 < _Bi_ - 1 >>> 0){switch$0 = 1;switch$1 = 1}
if(! switch$1){var _Bj_=1;switch$0 = 2}}
else
if(11 <= match)
{if(13 === match)switch$0 = 1}
else
if(8 <= match)switch$0 = 1;
switch(switch$0){case 0:var _Bj_=4;break;case 1:var _Bj_=2;break}
n[1] = n[1] + _Bj_ | 0;
var _Bk_=i$0 + 1 | 0;
if(_Be_ !== i$0){var i$0=_Bk_;continue}
break}}
if(n[1] === caml_ml_bytes_length(s))return copy(s);
var s$0=caml_create_bytes(n[1]);
n[1] = 0;
var _Bg_=caml_ml_bytes_length(s) - 1 | 0,_Bf_=0;
if(! (_Bg_ < 0))
{var i=_Bf_;
for(;;)
{var c=caml_bytes_unsafe_get(s,i),switch$2=0;
if(35 <= c)
if(92 === c)
switch$2 = 2;
else
if(127 <= c)switch$2 = 1;else switch$2 = 3;
else
if(32 <= c)
if(34 <= c)switch$2 = 2;else switch$2 = 3;
else
if(14 <= c)
switch$2 = 1;
else
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;
case 9:
caml_bytes_unsafe_set(s$0,n[1],92);
n[1]++;
caml_bytes_unsafe_set(s$0,n[1],116);
break;
case 10:
caml_bytes_unsafe_set(s$0,n[1],92);
n[1]++;
caml_bytes_unsafe_set(s$0,n[1],110);
break;
case 13:
caml_bytes_unsafe_set(s$0,n[1],92);
n[1]++;
caml_bytes_unsafe_set(s$0,n[1],114);
break;
default:switch$2 = 1}
switch(switch$2)
{case 1:
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;
case 2:
caml_bytes_unsafe_set(s$0,n[1],92);
n[1]++;
caml_bytes_unsafe_set(s$0,n[1],c);
break;
case 3:caml_bytes_unsafe_set(s$0,n[1],c);break
}
n[1]++;
var _Bh_=i + 1 | 0;
if(_Bg_ !== i){var i=_Bh_;continue}
break}}
return s$0}
function map$5(f,s)
{var l=caml_ml_bytes_length(s);
if(0 === l)return s;
var r=caml_create_bytes(l),_Bb_=l - 1 | 0,_Ba_=0;
if(! (_Bb_ < 0))
{var i=_Ba_;
for(;;)
{caml_bytes_unsafe_set(r,i,caml_call1(f,caml_bytes_unsafe_get(s,i)));
var _Bc_=i + 1 | 0;
if(_Bb_ !== i){var i=_Bc_;continue}
break}}
return r}
function mapi$1(f,s)
{var l=caml_ml_bytes_length(s);
if(0 === l)return s;
var r=caml_create_bytes(l),_A__=l - 1 | 0,_A9_=0;
if(! (_A__ < 0))
{var i=_A9_;
for(;;)
{caml_bytes_unsafe_set
(r,i,caml_call2(f,i,caml_bytes_unsafe_get(s,i)));
var _A$_=i + 1 | 0;
if(_A__ !== i){var i=_A$_;continue}
break}}
return r}
function fold_left$1(f,x,a)
{var r=[0,x],_A7_=caml_ml_bytes_length(a) - 1 | 0,_A6_=0;
if(! (_A7_ < 0))
{var i=_A6_;
for(;;)
{r[1] = caml_call2(f,r[1],caml_bytes_unsafe_get(a,i));
var _A8_=i + 1 | 0;
if(_A7_ !== i){var i=_A8_;continue}
break}}
return r[1]}
function fold_right$0(f,a,x)
{var r=[0,x],_A4_=caml_ml_bytes_length(a) - 1 | 0;
if(! (_A4_ < 0))
{var i=_A4_;
for(;;)
{r[1] = caml_call2(f,caml_bytes_unsafe_get(a,i),r[1]);
var _A5_=i - 1 | 0;
if(0 !== i){var i=_A5_;continue}
break}}
return r[1]}
function exists$1(p,s)
{var n=caml_ml_bytes_length(s),i=0;
for(;;)
{if(i === n)return 0;
if(caml_call1(p,caml_bytes_unsafe_get(s,i)))return 1;
var i$0=i + 1 | 0,i=i$0;
continue}}
function for_all$1(p,s)
{var n=caml_ml_bytes_length(s),i=0;
for(;;)
{if(i === n)return 1;
if(caml_call1(p,caml_bytes_unsafe_get(s,i)))
{var i$0=i + 1 | 0,i=i$0;continue}
return 0}}
function uppercase_ascii$0(s){return map$5(uppercase_ascii,s)}
function lowercase_ascii$0(s){return map$5(lowercase_ascii,s)}
function apply1(f,s)
{if(0 === caml_ml_bytes_length(s))return s;
var r=copy(s);
caml_bytes_unsafe_set(r,0,caml_call1(f,caml_bytes_unsafe_get(s,0)));
return r}
function capitalize_ascii(s){return apply1(uppercase_ascii,s)}
function uncapitalize_ascii(s){return apply1(lowercase_ascii,s)}
function starts_with(prefix,s)
{var
len_s=caml_ml_bytes_length(s),
len_pre=caml_ml_bytes_length(prefix),
_A3_=len_pre <= len_s?1:0;
if(_A3_)
{var i=0;
for(;;)
{if(i === len_pre)return 1;
if(caml_bytes_unsafe_get(s,i) !== caml_bytes_unsafe_get(prefix,i))
return 0;
var i$0=i + 1 | 0,i=i$0;
continue}}
return _A3_}
function ends_with(suffix,s)
{var
len_s=caml_ml_bytes_length(s),
len_suf=caml_ml_bytes_length(suffix),
diff=len_s - len_suf | 0,
_A2_=0 <= diff?1:0;
if(_A2_)
{var i=0;
for(;;)
{if(i === len_suf)return 1;
if
(caml_bytes_unsafe_get(s,diff + i | 0)
!==
caml_bytes_unsafe_get(suffix,i))
return 0;
var i$0=i + 1 | 0,i=i$0;
continue}}
return _A2_}
function index_rec(s,lim,i,c)
{var i$0=i;
for(;;)
{if(lim <= i$0)throw Not_found;
if(caml_bytes_unsafe_get(s,i$0) === c)return i$0;
var i$1=i$0 + 1 | 0,i$0=i$1;
continue}}
function index(s,c){return index_rec(s,caml_ml_bytes_length(s),0,c)}
function index_rec_opt(s,lim,i,c)
{var i$0=i;
for(;;)
{if(lim <= i$0)return 0;
if(caml_bytes_unsafe_get(s,i$0) === c)return [0,i$0];
var i$1=i$0 + 1 | 0,i$0=i$1;
continue}}
function index_opt(s,c)
{return index_rec_opt(s,caml_ml_bytes_length(s),0,c)}
function index_from(s,i,c)
{var l=caml_ml_bytes_length(s);
if(0 <= i && ! (l < i))return index_rec(s,l,i,c);
return invalid_arg(cst_String_index_from_Bytes_in)}
function index_from_opt(s,i,c)
{var l=caml_ml_bytes_length(s);
if(0 <= i && ! (l < i))return index_rec_opt(s,l,i,c);
return invalid_arg(cst_String_index_from_opt_Byte)}
function rindex_rec(s,i,c)
{var i$0=i;
for(;;)
{if(0 <= i$0)
{if(caml_bytes_unsafe_get(s,i$0) === c)return i$0;
var i$1=i$0 - 1 | 0,i$0=i$1;
continue}
throw Not_found}}
function rindex(s,c)
{return rindex_rec(s,caml_ml_bytes_length(s) - 1 | 0,c)}
function rindex_from(s,i,c)
{if(-1 <= i && ! (caml_ml_bytes_length(s) <= i))return rindex_rec(s,i,c);
return invalid_arg(cst_String_rindex_from_Bytes_r)}
function rindex_rec_opt(s,i,c)
{var i$0=i;
for(;;)
{if(0 <= i$0)
{if(caml_bytes_unsafe_get(s,i$0) === c)return [0,i$0];
var i$1=i$0 - 1 | 0,i$0=i$1;
continue}
return 0}}
function rindex_opt(s,c)
{return rindex_rec_opt(s,caml_ml_bytes_length(s) - 1 | 0,c)}
function rindex_from_opt(s,i,c)
{if(-1 <= i && ! (caml_ml_bytes_length(s) <= i))
return rindex_rec_opt(s,i,c);
return invalid_arg(cst_String_rindex_from_opt_Byt)}
function contains_from(s,i,c)
{var l=caml_ml_bytes_length(s);
if(0 <= i && ! (l < i))
try
{index_rec(s,l,i,c);var _A0_=1;return _A0_}
catch(_A1_)
{_A1_ = caml_wrap_exception(_A1_);
if(_A1_ === Not_found)return 0;
throw _A1_}
return invalid_arg(cst_String_contains_from_Bytes)}
function contains(s,c){return contains_from(s,0,c)}
function rcontains_from(s,i,c)
{if(0 <= i && ! (caml_ml_bytes_length(s) <= i))
try
{rindex_rec(s,i,c);var _AY_=1;return _AY_}
catch(_AZ_)
{_AZ_ = caml_wrap_exception(_AZ_);
if(_AZ_ === Not_found)return 0;
throw _AZ_}
return invalid_arg(cst_String_rcontains_from_Byte)}
function compare$8(x,y){return runtime.caml_bytes_compare(x,y)}
function split_on_char(sep,s)
{var
r=[0,0],
j=[0,caml_ml_bytes_length(s)],
_AU_=caml_ml_bytes_length(s) - 1 | 0;
if(! (_AU_ < 0))
{var i=_AU_;
for(;;)
{if(caml_bytes_unsafe_get(s,i) === sep)
{var _AW_=r[1];
r[1] = [0,sub(s,i + 1 | 0,(j[1] - i | 0) - 1 | 0),_AW_];
j[1] = i}
var _AX_=i - 1 | 0;
if(0 !== i){var i=_AX_;continue}
break}}
var _AV_=r[1];
return [0,sub(s,0,j[1]),_AV_]}
function uppercase$0(s){return map$5(uppercase,s)}
function lowercase$0(s){return map$5(lowercase,s)}
function capitalize(s){return apply1(uppercase,s)}
function uncapitalize(s){return apply1(lowercase,s)}
function to_seq$2(s)
{function aux(i,param)
{if(i === caml_ml_bytes_length(s))return 0;
var x=caml_bytes_get(s,i),_AS_=i + 1 | 0;
return [0,x,function(_AT_){return aux(_AS_,_AT_)}]}
var _AQ_=0;
return function(_AR_){return aux(_AQ_,_AR_)}}
function to_seqi(s)
{function aux(i,param)
{if(i === caml_ml_bytes_length(s))return 0;
var x=caml_bytes_get(s,i),_AO_=i + 1 | 0;
return [0,[0,i,x],function(_AP_){return aux(_AO_,_AP_)}]}
var _AM_=0;
return function(_AN_){return aux(_AM_,_AN_)}}
function of_seq$0(i)
{var n=[0,0],buf=[0,make$0(256,0)];
iter
(function(c)
{if(n[1] === caml_ml_bytes_length(buf[1]))
{var
new_len=
min$1(2 * caml_ml_bytes_length(buf[1]) | 0,max_string_length);
if(caml_ml_bytes_length(buf[1]) === new_len)
failwith(cst_Bytes_of_seq_cannot_grow_b);
var new_buf=make$0(new_len,0);
blit(buf[1],0,new_buf,0,n[1]);
buf[1] = new_buf}
caml_bytes_set(buf[1],n[1],c);
n[1]++;
return 0},
i);
return sub(buf[1],0,n[1])}
function get$1(b,i){return caml_bswap16(caml_bytes_get16(b,i))}
function get_int8(b,i){return caml_bytes_get(b,i) << 24 >> 24}
function get_uint16_le(b,i){return caml_bytes_get16(b,i)}
function get_uint16_be(b,i){return caml_bswap16(caml_bytes_get16(b,i))}
function get_int16_ne(b,i){return caml_bytes_get16(b,i) << 16 >> 16}
function get_int16_le(b,i){return caml_bytes_get16(b,i) << 16 >> 16}
function get_int16_be(b,i){return get_uint16_be(b,i) << 16 >> 16}
function get_int32_le(b,i){return caml_bytes_get32(b,i)}
function get_int32_be(b,i){return caml_int32_bswap(caml_bytes_get32(b,i))}
function get_int64_le(b,i){return caml_bytes_get64(b,i)}
function get_int64_be(b,i){return caml_int64_bswap(caml_bytes_get64(b,i))}
function set$0(b,i,x){return caml_bytes_set16(b,i,caml_bswap16(x))}
function set_int16_le(b,i,x){return caml_bytes_set16(b,i,x)}
function set_int16_be(b,i,x){return caml_bytes_set16(b,i,caml_bswap16(x))}
function set_int32_le(b,i,x){return caml_bytes_set32(b,i,x)}
function set_int32_be(b,i,x)
{return caml_bytes_set32(b,i,caml_int32_bswap(x))}
function set_int64_le(b,i,x){return caml_bytes_set64(b,i,x)}
function set_int64_be(b,i,x)
{return caml_bytes_set64(b,i,caml_int64_bswap(x))}
var set_uint8=caml_bytes_set,set_uint16_ne=caml_bytes_set16;
function dec_ret(n,u){return utf_decode(n,u)}
function not_in_x80_to_xBF(b){return 2 !== (b >>> 6 | 0)?1:0}
function not_in_xA0_to_xBF(b){return 5 !== (b >>> 5 | 0)?1:0}
function not_in_x80_to_x9F(b){return 4 !== (b >>> 5 | 0)?1:0}
function not_in_x90_to_xBF(b)
{var _AK_=b < 144?1:0,_AL_=_AK_ || (191 < b?1:0);return _AL_}
function not_in_x80_to_x8F(b){return 8 !== (b >>> 4 | 0)?1:0}
function utf_8_uchar_3(b0,b1,b2)
{return (b0 & 15) << 12 | (b1 & 63) << 6 | b2 & 63}
function utf_8_uchar_4(b0,b1,b2,b3)
{return (b0 & 7) << 18 | (b1 & 63) << 12 | (b2 & 63) << 6 | b3 & 63}
function get_utf_8_uchar(b,i)
{var b0=caml_bytes_get(b,i),max=caml_ml_bytes_length(b) - 1 | 0;
if(224 <= b0)
{var switch$0=0;
if(237 <= b0)
{if(! (245 <= b0))
switch(b0 - 237 | 0)
{case 0:
var i$0=i + 1 | 0;
if(max < i$0)return dec_invalid(1);
var b1=caml_bytes_unsafe_get(b,i$0);
if(not_in_x80_to_x9F(b1))return dec_invalid(1);
var i$1=i$0 + 1 | 0;
if(max < i$1)return dec_invalid(2);
var b2=caml_bytes_unsafe_get(b,i$1);
return not_in_x80_to_xBF(b2)
?dec_invalid(2)
:dec_ret(3,utf_8_uchar_3(b0,b1,b2));
case 3:
var i$4=i + 1 | 0;
if(max < i$4)return dec_invalid(1);
var b1$1=caml_bytes_unsafe_get(b,i$4);
if(not_in_x90_to_xBF(b1$1))return dec_invalid(1);
var i$5=i$4 + 1 | 0;
if(max < i$5)return dec_invalid(2);
var b2$1=caml_bytes_unsafe_get(b,i$5);
if(not_in_x80_to_xBF(b2$1))return dec_invalid(2);
var i$6=i$5 + 1 | 0;
if(max < i$6)return dec_invalid(3);
var b3=caml_bytes_unsafe_get(b,i$6);
return not_in_x80_to_xBF(b3)
?dec_invalid(3)
:dec_ret(4,utf_8_uchar_4(b0,b1$1,b2$1,b3));
case 7:
var i$10=i + 1 | 0;
if(max < i$10)return dec_invalid(1);
var b1$3=caml_bytes_unsafe_get(b,i$10);
if(not_in_x80_to_x8F(b1$3))return dec_invalid(1);
var i$11=i$10 + 1 | 0;
if(max < i$11)return dec_invalid(2);
var b2$3=caml_bytes_unsafe_get(b,i$11);
if(not_in_x80_to_xBF(b2$3))return dec_invalid(2);
var i$12=i$11 + 1 | 0;
if(max < i$12)return dec_invalid(3);
var b3$1=caml_bytes_unsafe_get(b,i$12);
return not_in_x80_to_xBF(b3$1)
?dec_invalid(3)
:dec_ret(4,utf_8_uchar_4(b0,b1$3,b2$3,b3$1));
case 1:
case 2:switch$0 = 1;break;
default:
var i$7=i + 1 | 0;
if(max < i$7)return dec_invalid(1);
var b1$2=caml_bytes_unsafe_get(b,i$7);
if(not_in_x80_to_xBF(b1$2))return dec_invalid(1);
var i$8=i$7 + 1 | 0;
if(max < i$8)return dec_invalid(2);
var b2$2=caml_bytes_unsafe_get(b,i$8);
if(not_in_x80_to_xBF(b2$2))return dec_invalid(2);
var i$9=i$8 + 1 | 0;
if(max < i$9)return dec_invalid(3);
var b3$0=caml_bytes_unsafe_get(b,i$9);
return not_in_x80_to_xBF(b3$0)
?dec_invalid(3)
:dec_ret(4,utf_8_uchar_4(b0,b1$2,b2$2,b3$0))}}
else
{if(! (225 <= b0))
{var i$13=i + 1 | 0;
if(max < i$13)return dec_invalid(1);
var b1$4=caml_bytes_unsafe_get(b,i$13);
if(not_in_xA0_to_xBF(b1$4))return dec_invalid(1);
var i$14=i$13 + 1 | 0;
if(max < i$14)return dec_invalid(2);
var b2$4=caml_bytes_unsafe_get(b,i$14);
return not_in_x80_to_xBF(b2$4)
?dec_invalid(2)
:dec_ret(3,utf_8_uchar_3(b0,b1$4,b2$4))}
switch$0 = 1}
if(switch$0)
{var i$2=i + 1 | 0;
if(max < i$2)return dec_invalid(1);
var b1$0=caml_bytes_unsafe_get(b,i$2);
if(not_in_x80_to_xBF(b1$0))return dec_invalid(1);
var i$3=i$2 + 1 | 0;
if(max < i$3)return dec_invalid(2);
var b2$0=caml_bytes_unsafe_get(b,i$3);
return not_in_x80_to_xBF(b2$0)
?dec_invalid(2)
:dec_ret(3,utf_8_uchar_3(b0,b1$0,b2$0))}}
else
{if(! (128 <= b0))return dec_ret(1,b0);
if(194 <= b0)
{var i$15=i + 1 | 0;
if(max < i$15)return dec_invalid(1);
var b1$5=caml_bytes_unsafe_get(b,i$15);
return not_in_x80_to_xBF(b1$5)
?dec_invalid(1)
:dec_ret(2,(b0 & 31) << 6 | b1$5 & 63)}}
return dec_invalid(1)}
function set_utf_8_uchar(b,i,u)
{function set(_AJ_,_AI_,_AH_)
{caml_bytes_unsafe_set(_AJ_,_AI_,_AH_);return 0}
var max=caml_ml_bytes_length(b) - 1 | 0;
if(0 <= u)
{if(127 < u)
{if(2047 < u)
{if(65535 < u)
{if(1114111 < u)throw [0,Assert_failure,_B_];
var last=i + 3 | 0;
return max < last
?0
:(caml_bytes_set(b,i,240 | u >>> 18 | 0),
set(b,i + 1 | 0,128 | (u >>> 12 | 0) & 63),
set(b,i + 2 | 0,128 | (u >>> 6 | 0) & 63),
set(b,last,128 | u & 63),
4)}
var last$0=i + 2 | 0;
return max < last$0
?0
:(caml_bytes_set(b,i,224 | u >>> 12 | 0),
set(b,i + 1 | 0,128 | (u >>> 6 | 0) & 63),
set(b,last$0,128 | u & 63),
3)}
var last$1=i + 1 | 0;
return max < last$1
?0
:(caml_bytes_set(b,i,192 | u >>> 6 | 0),
set(b,last$1,128 | u & 63),
2)}
caml_bytes_set(b,i,u);
return 1}
throw [0,Assert_failure,_C_]}
function is_valid_utf_8(b)
{var max=caml_ml_bytes_length(b) - 1 | 0,i=0;
for(;;)
{if(max < i)return 1;
var match=caml_bytes_unsafe_get(b,i);
if(224 <= match)
{var switch$0=0;
if(237 <= match)
{if(! (245 <= match))
switch(match - 237 | 0)
{case 0:
var last=i + 2 | 0;
if
(!
(max < last)
&&
!
not_in_x80_to_x9F(caml_bytes_unsafe_get(b,i + 1 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last)))
{var i$0=last + 1 | 0,i=i$0;continue}
return 0;
case 3:
var last$1=i + 3 | 0;
if
(!
(max < last$1)
&&
!
not_in_x90_to_xBF(caml_bytes_unsafe_get(b,i + 1 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 2 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$1)))
{var i$2=last$1 + 1 | 0,i=i$2;continue}
return 0;
case 7:
var last$3=i + 3 | 0;
if
(!
(max < last$3)
&&
!
not_in_x80_to_x8F(caml_bytes_unsafe_get(b,i + 1 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 2 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$3)))
{var i$4=last$3 + 1 | 0,i=i$4;continue}
return 0;
case 1:
case 2:switch$0 = 1;break;
default:
var last$2=i + 3 | 0;
if
(!
(max < last$2)
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 1 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 2 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$2)))
{var i$3=last$2 + 1 | 0,i=i$3;continue}
return 0}}
else
{if(! (225 <= match))
{var last$4=i + 2 | 0;
if
(!
(max < last$4)
&&
!
not_in_xA0_to_xBF(caml_bytes_unsafe_get(b,i + 1 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$4)))
{var i$5=last$4 + 1 | 0,i=i$5;continue}
return 0}
switch$0 = 1}
if(switch$0)
{var last$0=i + 2 | 0;
if
(!
(max < last$0)
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 1 | 0))
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$0)))
{var i$1=last$0 + 1 | 0,i=i$1;continue}
return 0}}
else
{if(! (128 <= match)){var i$7=i + 1 | 0,i=i$7;continue}
if(194 <= match)
{var last$5=i + 1 | 0;
if
(!
(max < last$5)
&&
!
not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$5)))
{var i$6=last$5 + 1 | 0,i=i$6;continue}
return 0}}
return 0}}
function get_utf_16be_uchar(b,i)
{var max=caml_ml_bytes_length(b) - 1 | 0;
if(0 <= i && ! (max < i))
{if(i === max)return dec_invalid(1);
var hi=get$1(b,i);
if(55296 <= hi && ! (57343 < hi))
{if(56319 < hi)return dec_invalid(2);
var last=i + 3 | 0;
if(max < last)return dec_invalid((max - i | 0) + 1 | 0);
var u=get$1(b,i + 2 | 0);
if(56320 <= u && ! (57343 < u))
{var u$0=((hi & 1023) << 10 | u & 1023) + 65536 | 0;
return dec_ret(4,u$0)}
return dec_invalid(2)}
return dec_ret(2,hi)}
return invalid_arg(cst_index_out_of_bounds)}
function set_utf_16be_uchar(b,i,u)
{var max=caml_ml_bytes_length(b) - 1 | 0;
if(0 <= i && ! (max < i))
{if(0 <= u)
{if(65535 < u)
{if(1114111 < u)throw [0,Assert_failure,_D_];
var last=i + 3 | 0;
if(max < last)return 0;
var
u$0=u - 65536 | 0,
hi=55296 | u$0 >>> 10 | 0,
lo=56320 | u$0 & 1023;
set$0(b,i,hi);
set$0(b,i + 2 | 0,lo);
return 4}
var last$0=i + 1 | 0;
return max < last$0?0:(set$0(b,i,u),2)}
throw [0,Assert_failure,_E_]}
return invalid_arg(cst_index_out_of_bounds$0)}
function is_valid_utf_16be(b)
{var max=caml_ml_bytes_length(b) - 1 | 0,i=0;
for(;;)
{if(max < i)return 1;
if(i === max)return 0;
var u=get$1(b,i);
if(55296 <= u && ! (57343 < u))
{if(56319 < u)return 0;
var last=i + 3 | 0;
if(max < last)return 0;
var u$0=get$1(b,i + 2 | 0);
if(56320 <= u$0 && ! (57343 < u$0))
{var i$1=i + 4 | 0,i=i$1;continue}
return 0}
var i$0=i + 2 | 0,i=i$0;
continue}}
function get_utf_16le_uchar(b,i)
{var max=caml_ml_bytes_length(b) - 1 | 0;
if(0 <= i && ! (max < i))
{if(i === max)return dec_invalid(1);
var hi=caml_bytes_get16(b,i);
if(55296 <= hi && ! (57343 < hi))
{if(56319 < hi)return dec_invalid(2);
var last=i + 3 | 0;
if(max < last)return dec_invalid((max - i | 0) + 1 | 0);
var u=caml_bytes_get16(b,i + 2 | 0);
if(56320 <= u && ! (57343 < u))
{var u$0=((hi & 1023) << 10 | u & 1023) + 65536 | 0;
return dec_ret(4,u$0)}
return dec_invalid(2)}
return dec_ret(2,hi)}
return invalid_arg(cst_index_out_of_bounds$1)}
function set_utf_16le_uchar(b,i,u)
{var max=caml_ml_bytes_length(b) - 1 | 0;
if(0 <= i && ! (max < i))
{if(0 <= u)
{if(65535 < u)
{if(1114111 < u)throw [0,Assert_failure,_F_];
var last=i + 3 | 0;
if(max < last)return 0;
var
u$0=u - 65536 | 0,
hi=55296 | u$0 >>> 10 | 0,
lo=56320 | u$0 & 1023;
caml_bytes_set16(b,i,hi);
caml_bytes_set16(b,i + 2 | 0,lo);
return 4}
var last$0=i + 1 | 0;
return max < last$0?0:(caml_bytes_set16(b,i,u),2)}
throw [0,Assert_failure,_G_]}
return invalid_arg(cst_index_out_of_bounds$2)}
function is_valid_utf_16le(b)
{var max=caml_ml_bytes_length(b) - 1 | 0,i=0;
for(;;)
{if(max < i)return 1;
if(i === max)return 0;
var u=caml_bytes_get16(b,i);
if(55296 <= u && ! (57343 < u))
{if(56319 < u)return 0;
var last=i + 3 | 0;
if(max < last)return 0;
var u$0=caml_bytes_get16(b,i + 2 | 0);
if(56320 <= u$0 && ! (57343 < u$0))
{var i$1=i + 4 | 0,i=i$1;continue}
return 0}
var i$0=i + 2 | 0,i=i$0;
continue}}
var
set_int64_ne=caml_bytes_set64,
set_int32_ne=caml_bytes_set32,
set_int16_ne=caml_bytes_set16,
set_int8=caml_bytes_set,
get_int64_ne=caml_bytes_get64,
get_int32_ne=caml_bytes_get32,
get_uint16_ne=caml_bytes_get16,
get_uint8=caml_bytes_get,
unsafe_of_string=caml_bytes_of_string,
unsafe_to_string=caml_string_of_bytes,
equal$8=runtime.caml_bytes_equal,
include$1=
[0,
make$0,
init$1,
empty$0,
copy,
to_bytes,
of_bytes,
sub,
sub_string,
extend,
fill,
blit,
blit$0,
concat$0,
cat$0,
iter$3,
iteri$1,
map$5,
mapi$1,
fold_left$1,
fold_right$0,
for_all$1,
exists$1,
trim,
escaped$0,
index,
index_opt,
rindex,
rindex_opt,
index_from,
index_from_opt,
rindex_from,
rindex_from_opt,
contains,
contains_from,
rcontains_from,
uppercase$0,
lowercase$0,
capitalize,
uncapitalize,
uppercase_ascii$0,
lowercase_ascii$0,
capitalize_ascii,
uncapitalize_ascii,
compare$8,
equal$8,
starts_with,
ends_with,
unsafe_to_string,
unsafe_of_string,
split_on_char,
to_seq$2,
to_seqi,
of_seq$0,
get_utf_8_uchar,
set_utf_8_uchar,
is_valid_utf_8,
get_utf_16be_uchar,
set_utf_16be_uchar,
is_valid_utf_16be,
get_utf_16le_uchar,
set_utf_16le_uchar,
is_valid_utf_16le,
get_uint8,
get_int8,
get_uint16_ne,
get_uint16_be,
get_uint16_le,
get_int16_ne,
get_int16_be,
get_int16_le,
get_int32_ne,
get_int32_be,
get_int32_le,
get_int64_ne,
get_int64_be,
get_int64_le,
set_uint8,
set_int8,
set_uint16_ne,
set_int16_be,
set_int16_le,
set_int16_ne,
set_int16_be,
set_int16_le,
set_int32_ne,
set_int32_be,
set_int32_le,
set_int64_ne,
set_int64_be,
set_int64_le];
caml_register_global(790,include$1,"Stdlib__Bytes");
function make$1(n,c){return caml_string_of_bytes(make$0(n,c))}
function init$2(n,f){return caml_string_of_bytes(init$1(n,f))}
function copy$0(s)
{return caml_string_of_bytes(copy(caml_bytes_of_string(s)))}
function sub$0(s,ofs,len)
{return caml_string_of_bytes(sub(caml_bytes_of_string(s),ofs,len))}
function concat$1(sep,l)
{if(l)
{var seplen=caml_ml_string_length(sep),acc=0,param=l,pos$1=0;
for(;;)
{if(param)
{var _AE_=param[1];
if(param[2])
{var
tl=param[2],
x=(caml_ml_string_length(_AE_) + seplen | 0) + acc | 0,
acc$0=acc <= x?x:invalid_arg(cst_String_concat),
acc=acc$0,
param=tl;
continue}
var _AG_=caml_ml_string_length(_AE_) + acc | 0}
else
var _AG_=acc;
var dst=caml_create_bytes(_AG_),pos=pos$1,param$0=l;
for(;;)
{if(param$0)
{var _AF_=param$0[1];
if(param$0[2])
{var tl$0=param$0[2];
caml_blit_string(_AF_,0,dst,pos,caml_ml_string_length(_AF_));
caml_blit_string
(sep,0,dst,pos + caml_ml_string_length(_AF_) | 0,seplen);
var
pos$0=(pos + caml_ml_string_length(_AF_) | 0) + seplen | 0,
pos=pos$0,
param$0=tl$0;
continue}
caml_blit_string(_AF_,0,dst,pos,caml_ml_string_length(_AF_))}
return caml_string_of_bytes(dst)}}}
return cst$3}
function iter$4(f,s)
{var _AC_=caml_ml_string_length(s) - 1 | 0,_AB_=0;
if(! (_AC_ < 0))
{var i=_AB_;
for(;;)
{caml_call1(f,caml_string_unsafe_get(s,i));
var _AD_=i + 1 | 0;
if(_AC_ !== i){var i=_AD_;continue}
break}}
return 0}
function iteri$2(f,s)
{var _Az_=caml_ml_string_length(s) - 1 | 0,_Ay_=0;
if(! (_Az_ < 0))
{var i=_Ay_;
for(;;)
{caml_call2(f,i,caml_string_unsafe_get(s,i));
var _AA_=i + 1 | 0;
if(_Az_ !== i){var i=_AA_;continue}
break}}
return 0}
function map$6(f,s)
{return caml_string_of_bytes(map$5(f,caml_bytes_of_string(s)))}
function mapi$2(f,s)
{return caml_string_of_bytes(mapi$1(f,caml_bytes_of_string(s)))}
function fold_right$1(f,x,a)
{return fold_right$0(f,caml_bytes_of_string(x),a)}
function fold_left$2(f,a,x)
{return fold_left$1(f,a,caml_bytes_of_string(x))}
function exists$2(f,s){return exists$1(f,caml_bytes_of_string(s))}
function for_all$2(f,s){return for_all$1(f,caml_bytes_of_string(s))}
function is_space$0(param)
{var _Ax_=param - 9 | 0,switch$0=0;
if(4 < _Ax_ >>> 0)
{if(23 === _Ax_)switch$0 = 1}
else
if(2 !== _Ax_)switch$0 = 1;
return switch$0?1:0}
function trim$0(s)
{if(caml_string_equal(s,cst$4))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 caml_string_of_bytes(trim(caml_bytes_of_string(s)))}
function escaped$1(s)
{var n=caml_ml_string_length(s),i=0;
for(;;)
{if(n <= i)return s;
var match=caml_string_unsafe_get(s,i),_Aw_=match - 32 | 0,switch$0=0;
if(59 < _Aw_ >>> 0)
{if(33 < _Aw_ - 61 >>> 0)switch$0 = 1}
else
if(2 === _Aw_)switch$0 = 1;
if(switch$0)
return caml_string_of_bytes(escaped$0(caml_bytes_of_string(s)));
var i$0=i + 1 | 0,i=i$0;
continue}}
function index_rec$0(s,lim,i,c)
{var i$0=i;
for(;;)
{if(lim <= i$0)throw Not_found;
if(caml_string_unsafe_get(s,i$0) === c)return i$0;
var i$1=i$0 + 1 | 0,i$0=i$1;
continue}}
function index$0(s,c){return index_rec$0(s,caml_ml_string_length(s),0,c)}
function index_rec_opt$0(s,lim,i,c)
{var i$0=i;
for(;;)
{if(lim <= i$0)return 0;
if(caml_string_unsafe_get(s,i$0) === c)return [0,i$0];
var i$1=i$0 + 1 | 0,i$0=i$1;
continue}}
function index_opt$0(s,c)
{return index_rec_opt$0(s,caml_ml_string_length(s),0,c)}
function index_from$0(s,i,c)
{var l=caml_ml_string_length(s);
if(0 <= i && ! (l < i))return index_rec$0(s,l,i,c);
return invalid_arg(cst_String_index_from_Bytes_in$0)}
function index_from_opt$0(s,i,c)
{var l=caml_ml_string_length(s);
if(0 <= i && ! (l < i))return index_rec_opt$0(s,l,i,c);
return invalid_arg(cst_String_index_from_opt_Byte$0)}
function rindex_rec$0(s,i,c)
{var i$0=i;
for(;;)
{if(0 <= i$0)
{if(caml_string_unsafe_get(s,i$0) === c)return i$0;
var i$1=i$0 - 1 | 0,i$0=i$1;
continue}
throw Not_found}}
function rindex$0(s,c)
{return rindex_rec$0(s,caml_ml_string_length(s) - 1 | 0,c)}
function rindex_from$0(s,i,c)
{if(-1 <= i && ! (caml_ml_string_length(s) <= i))
return rindex_rec$0(s,i,c);
return invalid_arg(cst_String_rindex_from_Bytes_r$0)}
function rindex_rec_opt$0(s,i,c)
{var i$0=i;
for(;;)
{if(0 <= i$0)
{if(caml_string_unsafe_get(s,i$0) === c)return [0,i$0];
var i$1=i$0 - 1 | 0,i$0=i$1;
continue}
return 0}}
function rindex_opt$0(s,c)
{return rindex_rec_opt$0(s,caml_ml_string_length(s) - 1 | 0,c)}
function rindex_from_opt$0(s,i,c)
{if(-1 <= i && ! (caml_ml_string_length(s) <= i))
return rindex_rec_opt$0(s,i,c);
return invalid_arg(cst_String_rindex_from_opt_Byt$0)}
function contains_from$0(s,i,c)
{var l=caml_ml_string_length(s);
if(0 <= i && ! (l < i))
try
{index_rec$0(s,l,i,c);var _Au_=1;return _Au_}
catch(_Av_)
{_Av_ = caml_wrap_exception(_Av_);
if(_Av_ === Not_found)return 0;
throw _Av_}
return invalid_arg(cst_String_contains_from_Bytes$0)}
function contains$0(s,c){return contains_from$0(s,0,c)}
function rcontains_from$0(s,i,c)
{if(0 <= i && ! (caml_ml_string_length(s) <= i))
try
{rindex_rec$0(s,i,c);var _As_=1;return _As_}
catch(_At_)
{_At_ = caml_wrap_exception(_At_);
if(_At_ === Not_found)return 0;
throw _At_}
return invalid_arg(cst_String_rcontains_from_Byte$0)}
function uppercase_ascii$1(s)
{return caml_string_of_bytes(uppercase_ascii$0(caml_bytes_of_string(s)))}
function lowercase_ascii$1(s)
{return caml_string_of_bytes(lowercase_ascii$0(caml_bytes_of_string(s)))}
function capitalize_ascii$0(s)
{return caml_string_of_bytes(capitalize_ascii(caml_bytes_of_string(s)))}
function uncapitalize_ascii$0(s)
{return caml_string_of_bytes(uncapitalize_ascii(caml_bytes_of_string(s)))}
function starts_with$0(prefix,s)
{var
len_s=caml_ml_string_length(s),
len_pre=caml_ml_string_length(prefix),
_Ar_=len_pre <= len_s?1:0;
if(_Ar_)
{var i=0;
for(;;)
{if(i === len_pre)return 1;
if(caml_string_unsafe_get(s,i) !== caml_string_unsafe_get(prefix,i))
return 0;
var i$0=i + 1 | 0,i=i$0;
continue}}
return _Ar_}
function ends_with$0(suffix,s)
{var
len_s=caml_ml_string_length(s),
len_suf=caml_ml_string_length(suffix),
diff=len_s - len_suf | 0,
_Aq_=0 <= diff?1:0;
if(_Aq_)
{var i=0;
for(;;)
{if(i === len_suf)return 1;
if
(caml_string_unsafe_get(s,diff + i | 0)
!==
caml_string_unsafe_get(suffix,i))
return 0;
var i$0=i + 1 | 0,i=i$0;
continue}}
return _Aq_}
function split_on_char$0(sep,s)
{var
r=[0,0],
j=[0,caml_ml_string_length(s)],
_Am_=caml_ml_string_length(s) - 1 | 0;
if(! (_Am_ < 0))
{var i=_Am_;
for(;;)
{if(caml_string_unsafe_get(s,i) === sep)
{var _Ao_=r[1];
r[1] = [0,sub$0(s,i + 1 | 0,(j[1] - i | 0) - 1 | 0),_Ao_];
j[1] = i}
var _Ap_=i - 1 | 0;
if(0 !== i){var i=_Ap_;continue}
break}}
var _An_=r[1];
return [0,sub$0(s,0,j[1]),_An_]}
function uppercase$1(s)
{return caml_string_of_bytes(uppercase$0(caml_bytes_of_string(s)))}
function lowercase$1(s)
{return caml_string_of_bytes(lowercase$0(caml_bytes_of_string(s)))}
function capitalize$0(s)
{return caml_string_of_bytes(capitalize(caml_bytes_of_string(s)))}
function uncapitalize$0(s)
{return caml_string_of_bytes(uncapitalize(caml_bytes_of_string(s)))}
function compare$9(x,y){return caml_string_compare(x,y)}
function to_seq$3(s){return to_seq$2(caml_bytes_of_string(s))}
function to_seqi$0(s){return to_seqi(caml_bytes_of_string(s))}
function of_seq$1(g){return caml_string_of_bytes(of_seq$0(g))}
function get_utf_8_uchar$0(s,i)
{return get_utf_8_uchar(caml_bytes_of_string(s),i)}
function is_valid_utf_8$0(s)
{return is_valid_utf_8(caml_bytes_of_string(s))}
function get_utf_16be_uchar$0(s,i)
{return get_utf_16be_uchar(caml_bytes_of_string(s),i)}
function is_valid_utf_16be$0(s)
{return is_valid_utf_16be(caml_bytes_of_string(s))}
function get_utf_16le_uchar$0(s,i)
{return get_utf_16le_uchar(caml_bytes_of_string(s),i)}
function is_valid_utf_16le$0(s)
{return is_valid_utf_16le(caml_bytes_of_string(s))}
function get_int8$0(s,i){return get_int8(caml_bytes_of_string(s),i)}
function get_uint16_le$0(s,i)
{return caml_bytes_get16(caml_bytes_of_string(s),i)}
function get_uint16_be$0(s,i)
{return get_uint16_be(caml_bytes_of_string(s),i)}
function get_int16_ne$0(s,i)
{return get_int16_ne(caml_bytes_of_string(s),i)}
function get_int16_le$0(s,i)
{return get_int16_le(caml_bytes_of_string(s),i)}
function get_int16_be$0(s,i)
{return get_int16_be(caml_bytes_of_string(s),i)}
function get_int32_le$0(s,i)
{return caml_bytes_get32(caml_bytes_of_string(s),i)}
function get_int32_be$0(s,i)
{return get_int32_be(caml_bytes_of_string(s),i)}
function get_int64_le$0(s,i)
{return caml_bytes_get64(caml_bytes_of_string(s),i)}
function get_int64_be$0(s,i)
{return get_int64_be(caml_bytes_of_string(s),i)}
var
get_int64_ne$0=runtime.caml_string_get64,
get_int32_ne$0=runtime.caml_string_get32,
get_uint16_ne$0=runtime.caml_string_get16,
get_uint8$0=caml_string_get,
equal$9=caml_string_equal,
include$2=
[0,
make$1,
init$2,
empty$1,
of_bytes,
to_bytes,
concat$1,
cat,
equal$9,
compare$9,
starts_with$0,
ends_with$0,
contains_from$0,
rcontains_from$0,
contains$0,
sub$0,
split_on_char$0,
map$6,
mapi$2,
fold_left$2,
fold_right$1,
for_all$2,
exists$2,
trim$0,
escaped$1,
uppercase_ascii$1,
lowercase_ascii$1,
capitalize_ascii$0,
uncapitalize_ascii$0,
iter$4,
iteri$2,
index_from$0,
index_from_opt$0,
rindex_from$0,
rindex_from_opt$0,
index$0,
index_opt$0,
rindex$0,
rindex_opt$0,
to_seq$3,
to_seqi$0,
of_seq$1,
get_utf_8_uchar$0,
is_valid_utf_8$0,
get_utf_16be_uchar$0,
is_valid_utf_16be$0,
get_utf_16le_uchar$0,
is_valid_utf_16le$0,
blit$0,
copy$0,
fill,
uppercase$1,
lowercase$1,
capitalize$0,
uncapitalize$0,
get_uint8$0,
get_int8$0,
get_uint16_ne$0,
get_uint16_be$0,
get_uint16_le$0,
get_int16_ne$0,
get_int16_be$0,
get_int16_le$0,
get_int32_ne$0,
get_int32_be$0,
get_int32_le$0,
get_int64_ne$0,
get_int64_be$0,
get_int64_le$0];
caml_register_global(791,include$2,"Stdlib__String");
function equal$10(param,_Al_){return 1}
function compare$10(param,_Ak_){return 0}
function to_string$2(param){return cst$5}
var Stdlib_Unit=[0,equal$10,compare$10,to_string$2];
caml_register_global(792,Stdlib_Unit,"Stdlib__Unit");
function to_buffer(buff,ofs,len,v,flags)
{if
(0
<=
ofs
&&
0
<=
len
&&
!
((caml_ml_bytes_length(buff) - len | 0) < ofs))
return runtime.caml_output_value_to_buffer(buff,ofs,len,v,flags);
return invalid_arg(cst_Marshal_to_buffer_substrin)}
var header_size=20;
function data_size(buff,ofs)
{if(0 <= ofs && ! ((caml_ml_bytes_length(buff) - 20 | 0) < ofs))
return caml_marshal_data_size(buff,ofs);
return invalid_arg(cst_Marshal_data_size)}
function total_size(buff,ofs){return 20 + data_size(buff,ofs) | 0}
function from_bytes(buff,ofs)
{if(0 <= ofs && ! ((caml_ml_bytes_length(buff) - 20 | 0) < ofs))
{var len=caml_marshal_data_size(buff,ofs);
return (caml_ml_bytes_length(buff) - (20 + len | 0) | 0) < ofs
?invalid_arg(cst_Marshal_from_bytes$0)
:runtime.caml_input_value_from_bytes(buff,ofs)}
return invalid_arg(cst_Marshal_from_bytes)}
function from_string(buff,ofs)
{return from_bytes(caml_bytes_of_string(buff),ofs)}
var
Stdlib_Marshal=
[0,
caml_output_value,
to_buffer,
caml_input_value,
from_bytes,
from_string,
header_size,
data_size,
total_size];
caml_register_global(793,Stdlib_Marshal,"Stdlib__Marshal");
var make_float=runtime.caml_make_float_vect,Floatarray=[0];
function init$3(l,f)
{if(0 === l)return [0];
if(0 <= l)
{var res=caml_make_vect(l,caml_call1(f,0)),_Ai_=l - 1 | 0,_Ah_=1;
if(! (_Ai_ < 1))
{var i=_Ah_;
for(;;)
{res[1 + i] = caml_call1(f,i);
var _Aj_=i + 1 | 0;
if(_Ai_ !== i){var i=_Aj_;continue}
break}}
return res}
return invalid_arg(cst_Array_init)}
function create_matrix(sx,sy,init)
{var res=caml_make_vect(sx,[0]),_Af_=sx - 1 | 0,_Ae_=0;
if(! (_Af_ < 0))
{var x=_Ae_;
for(;;)
{res[1 + x] = caml_make_vect(sy,init);
var _Ag_=x + 1 | 0;
if(_Af_ !== x){var x=_Ag_;continue}
break}}
return res}
function copy$1(a)
{var l=a.length - 1;return 0 === l?[0]:caml_array_sub(a,0,l)}
function append$1(a1,a2)
{var l1=a1.length - 1;
return 0 === l1
?copy$1(a2)
:0 === a2.length - 1
?caml_array_sub(a1,0,l1)
:runtime.caml_array_append(a1,a2)}
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(cst_Array_sub)}
function fill$0(a,ofs,len,v)
{if(0 <= ofs && 0 <= len && ! ((a.length - 1 - len | 0) < ofs))
return runtime.caml_array_fill(a,ofs,len,v);
return invalid_arg(cst_Array_fill)}
function blit$1(a1,ofs1,a2,ofs2,len)
{if
(0
<=
len
&&
0
<=
ofs1
&&
!
((a1.length - 1 - len | 0) < ofs1)
&&
0
<=
ofs2
&&
!
((a2.length - 1 - len | 0) < ofs2))
return runtime.caml_array_blit(a1,ofs1,a2,ofs2,len);
return invalid_arg(cst_Array_blit)}
function iter$5(f,a)
{var _Ac_=a.length - 1 - 1 | 0,_Ab_=0;
if(! (_Ac_ < 0))
{var i=_Ab_;
for(;;)
{caml_call1(f,a[1 + i]);
var _Ad_=i + 1 | 0;
if(_Ac_ !== i){var i=_Ad_;continue}
break}}
return 0}
function iter2$1(f,a,b)
{if(a.length - 1 !== b.length - 1)
return invalid_arg(cst_Array_iter2_arrays_must_ha);
var _z$_=a.length - 1 - 1 | 0,_z__=0;
if(! (_z$_ < 0))
{var i=_z__;
for(;;)
{caml_call2(f,a[1 + i],b[1 + i]);
var _Aa_=i + 1 | 0;
if(_z$_ !== i){var i=_Aa_;continue}
break}}
return 0}
function map$7(f,a)
{var l=a.length - 1;
if(0 === l)return [0];
var r=caml_make_vect(l,caml_call1(f,a[1])),_z8_=l - 1 | 0,_z7_=1;
if(! (_z8_ < 1))
{var i=_z7_;
for(;;)
{r[1 + i] = caml_call1(f,a[1 + i]);
var _z9_=i + 1 | 0;
if(_z8_ !== i){var i=_z9_;continue}
break}}
return r}
function map2$1(f,a,b)
{var la=a.length - 1,lb=b.length - 1;
if(la !== lb)return invalid_arg(cst_Array_map2_arrays_must_hav);
if(0 === la)return [0];
var r=caml_make_vect(la,caml_call2(f,a[1],b[1])),_z5_=la - 1 | 0,_z4_=1;
if(! (_z5_ < 1))
{var i=_z4_;
for(;;)
{r[1 + i] = caml_call2(f,a[1 + i],b[1 + i]);
var _z6_=i + 1 | 0;
if(_z5_ !== i){var i=_z6_;continue}
break}}
return r}
function iteri$3(f,a)
{var _z2_=a.length - 1 - 1 | 0,_z1_=0;
if(! (_z2_ < 0))
{var i=_z1_;
for(;;)
{caml_call2(f,i,a[1 + i]);
var _z3_=i + 1 | 0;
if(_z2_ !== i){var i=_z3_;continue}
break}}
return 0}
function mapi$3(f,a)
{var l=a.length - 1;
if(0 === l)return [0];
var r=caml_make_vect(l,caml_call2(f,0,a[1])),_zZ_=l - 1 | 0,_zY_=1;
if(! (_zZ_ < 1))
{var i=_zY_;
for(;;)
{r[1 + i] = caml_call2(f,i,a[1 + i]);
var _z0_=i + 1 | 0;
if(_zZ_ !== i){var i=_z0_;continue}
break}}
return r}
function to_list$1(a)
{var i$1=a.length - 1 - 1 | 0,i=i$1,res=0;
for(;;)
{if(0 <= i)
{var res$0=[0,a[1 + i],res],i$0=i - 1 | 0,i=i$0,res=res$0;continue}
return res}}
function list_length(accu,param)
{var accu$0=accu,param$0=param;
for(;;)
{if(param$0)
{var
param$1=param$0[2],
accu$1=accu$0 + 1 | 0,
accu$0=accu$1,
param$0=param$1;
continue}
return accu$0}}
function of_list(l)
{if(l)
{var
tl=l[2],
hd=l[1],
a=caml_make_vect(list_length(0,l),hd),
i=1,
param=tl;
for(;;)
{if(param)
{var tl$0=param[2],hd$0=param[1];
a[1 + i] = hd$0;
var i$0=i + 1 | 0,i=i$0,param=tl$0;
continue}
return a}}
return [0]}
function fold_left$3(f,x,a)
{var r=[0,x],_zW_=a.length - 1 - 1 | 0,_zV_=0;
if(! (_zW_ < 0))
{var i=_zV_;
for(;;)
{r[1] = caml_call2(f,r[1],a[1 + i]);
var _zX_=i + 1 | 0;
if(_zW_ !== i){var i=_zX_;continue}
break}}
return r[1]}
function fold_left_map$0(f,acc,input_array)
{var len=input_array.length - 1;
if(0 === len)return [0,acc,[0]];
var
match=caml_call2(f,acc,input_array[1]),
elt=match[2],
acc$0=match[1],
output_array=caml_make_vect(len,elt),
acc$1=[0,acc$0],
_zT_=len - 1 | 0,
_zS_=1;
if(! (_zT_ < 1))
{var i=_zS_;
for(;;)
{var
match$0=caml_call2(f,acc$1[1],input_array[1 + i]),
elt$0=match$0[2],
acc$2=match$0[1];
acc$1[1] = acc$2;
output_array[1 + i] = elt$0;
var _zU_=i + 1 | 0;
if(_zT_ !== i){var i=_zU_;continue}
break}}
return [0,acc$1[1],output_array]}
function fold_right$2(f,a,x)
{var r=[0,x],_zQ_=a.length - 1 - 1 | 0;
if(! (_zQ_ < 0))
{var i=_zQ_;
for(;;)
{r[1] = caml_call2(f,a[1 + i],r[1]);
var _zR_=i - 1 | 0;
if(0 !== i){var i=_zR_;continue}
break}}
return r[1]}
function exists$3(p,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 0;
if(caml_call1(p,a[1 + i]))return 1;
var i$0=i + 1 | 0,i=i$0;
continue}}
function for_all$3(p,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 1;
if(caml_call1(p,a[1 + i])){var i$0=i + 1 | 0,i=i$0;continue}
return 0}}
function for_all2$1(p,l1,l2)
{var n1=l1.length - 1,n2=l2.length - 1;
if(n1 !== n2)return invalid_arg(cst_Array_for_all2);
var i=0;
for(;;)
{if(i === n1)return 1;
if(caml_call2(p,l1[1 + i],l2[1 + i]))
{var i$0=i + 1 | 0,i=i$0;continue}
return 0}}
function exists2$1(p,l1,l2)
{var n1=l1.length - 1,n2=l2.length - 1;
if(n1 !== n2)return invalid_arg(cst_Array_exists2);
var i=0;
for(;;)
{if(i === n1)return 0;
if(caml_call2(p,l1[1 + i],l2[1 + i]))return 1;
var i$0=i + 1 | 0,i=i$0;
continue}}
function mem$0(x,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 0;
if(0 === caml_compare(a[1 + i],x))return 1;
var i$0=i + 1 | 0,i=i$0;
continue}}
function memq$0(x,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 0;
if(x === a[1 + i])return 1;
var i$0=i + 1 | 0,i=i$0;
continue}}
function find_opt$0(p,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 0;
var x=a[1 + i];
if(caml_call1(p,x))return [0,x];
var i$0=i + 1 | 0,i=i$0;
continue}}
function find_map$1(f,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 0;
var r=caml_call1(f,a[1 + i]);
if(r)return r;
var i$0=i + 1 | 0,i=i$0;
continue}}
function split$0(x)
{if(caml_equal(x,[0]))return [0,[0],[0]];
var
match=x[1],
b0=match[2],
a0=match[1],
n=x.length - 1,
a=caml_make_vect(n,a0),
b=caml_make_vect(n,b0),
_zO_=n - 1 | 0,
_zN_=1;
if(! (_zO_ < 1))
{var i=_zN_;
for(;;)
{var match$0=x[1 + i],bi=match$0[2],ai=match$0[1];
a[1 + i] = ai;
b[1 + i] = bi;
var _zP_=i + 1 | 0;
if(_zO_ !== i){var i=_zP_;continue}
break}}
return [0,a,b]}
function combine$0(a,b)
{var na=a.length - 1,nb=b.length - 1;
if(na !== nb)invalid_arg(cst_Array_combine);
if(0 === na)return [0];
var x=caml_make_vect(na,[0,a[1],b[1]]),_zL_=na - 1 | 0,_zK_=1;
if(! (_zL_ < 1))
{var i=_zK_;
for(;;)
{x[1 + i] = [0,a[1 + i],b[1 + i]];
var _zM_=i + 1 | 0;
if(_zL_ !== i){var i=_zM_;continue}
break}}
return x}
var Bottom=[248,cst_Stdlib_Array_Bottom,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 _zD_=i31 + 1 | 0,_zE_=caml_check_bound(a,_zD_)[1 + _zD_];
if(caml_call2(cmp,caml_check_bound(a,i31)[1 + i31],_zE_) < 0)
x[1] = i31 + 1 | 0;
var
_zF_=i31 + 2 | 0,
_zG_=caml_check_bound(a,_zF_)[1 + _zF_],
_zH_=x[1];
if(caml_call2(cmp,caml_check_bound(a,_zH_)[1 + _zH_],_zG_) < 0)
x[1] = i31 + 2 | 0;
return x[1]}
if((i31 + 1 | 0) < l)
{var _zI_=i31 + 1 | 0,_zJ_=caml_check_bound(a,_zI_)[1 + _zI_];
if(! (0 <= caml_call2(cmp,caml_check_bound(a,i31)[1 + i31],_zJ_)))
return i31 + 1 | 0}
if(i31 < l)return i31;
throw [0,Bottom,i]}
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))
{var _zC_=caml_check_bound(a,j)[1 + j];
caml_check_bound(a,i$0)[1 + i$0] = _zC_;
var i$0=j;
continue}
caml_check_bound(a,i$0)[1 + i$0] = e;
return 0}}
function trickle(l,i,e)
{try
{var _zB_=trickledown(l,i,e);return _zB_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] === Bottom)
{var i$0=exn[2];caml_check_bound(a,i$0)[1 + i$0] = e;return 0}
throw exn}}
function bubbledown(l,i)
{var i$0=i;
for(;;)
{var i$1=maxson(l,i$0),_zA_=caml_check_bound(a,i$1)[1 + i$1];
caml_check_bound(a,i$0)[1 + i$0] = _zA_;
var i$0=i$1;
continue}}
function bubble(l,i)
{try
{var _zz_=bubbledown(l,i);return _zz_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] === Bottom){var i$0=exn[2];return i$0}
throw exn}}
var l=a.length - 1,_zr_=((l + 1 | 0) / 3 | 0) - 1 | 0;
if(! (_zr_ < 0))
{var i$2=_zr_;
for(;;)
{trickle(l,i$2,caml_check_bound(a,i$2)[1 + i$2]);
var _zy_=i$2 - 1 | 0;
if(0 !== i$2){var i$2=_zy_;continue}
break}}
var _zs_=l - 1 | 0;
if(! (_zs_ < 2))
{var i$0=_zs_;
a:
for(;;)
{var
e$0=caml_check_bound(a,i$0)[1 + i$0],
_zw_=caml_check_bound(a,0)[1];
caml_check_bound(a,i$0)[1 + i$0] = _zw_;
var i$1=bubble(i$0,0),i=i$1;
for(;;)
{var father=(i - 1 | 0) / 3 | 0;
if(i === father)throw [0,Assert_failure,_H_];
if
(0 <= caml_call2(cmp,caml_check_bound(a,father)[1 + father],e$0))
caml_check_bound(a,i)[1 + i] = e$0;
else
{var _zq_=caml_check_bound(a,father)[1 + father];
caml_check_bound(a,i)[1 + i] = _zq_;
if(0 < father){var i=father;continue}
caml_check_bound(a,0)[1] = e$0}
var _zx_=i$0 - 1 | 0;
if(2 !== i$0){var i$0=_zx_;continue a}
break}
break}}
var _zt_=1 < l?1:0;
if(_zt_)
{var e=caml_check_bound(a,1)[2],_zu_=caml_check_bound(a,0)[1];
caml_check_bound(a,1)[2] = _zu_;
caml_check_bound(a,0)[1] = e;
var _zv_=0}
else
var _zv_=_zt_;
return _zv_}
function fast_sort$0(cmp,a)
{function merge(src1ofs,src1len,src2,src2ofs,src2len,dst,dstofs)
{var
src1r=src1ofs + src1len | 0,
src2r=src2ofs + src2len | 0,
s2$1=caml_check_bound(src2,src2ofs)[1 + src2ofs],
s1$1=caml_check_bound(a,src1ofs)[1 + src1ofs],
i1=src1ofs,
s1=s1$1,
i2=src2ofs,
s2=s2$1,
d=dstofs;
for(;;)
{if(0 < caml_call2(cmp,s1,s2))
{caml_check_bound(dst,d)[1 + d] = s2;
var i2$0=i2 + 1 | 0;
if(i2$0 < src2r)
{var
d$0=d + 1 | 0,
s2$0=caml_check_bound(src2,i2$0)[1 + i2$0],
i2=i2$0,
s2=s2$0,
d=d$0;
continue}
return blit$1(a,i1,dst,d + 1 | 0,src1r - i1 | 0)}
caml_check_bound(dst,d)[1 + d] = s1;
var i1$0=i1 + 1 | 0;
if(i1$0 < src1r)
{var
d$1=d + 1 | 0,
s1$0=caml_check_bound(a,i1$0)[1 + i1$0],
i1=i1$0,
s1=s1$0,
d=d$1;
continue}
return blit$1(src2,i2,dst,d + 1 | 0,src2r - i2 | 0)}}
function isortto(srcofs,dst,dstofs,len)
{var _zi_=len - 1 | 0,_zh_=0;
if(! (_zi_ < 0))
{var i=_zh_;
a:
for(;;)
{var
_zj_=srcofs + i | 0,
e=caml_check_bound(a,_zj_)[1 + _zj_],
j=[0,(dstofs + i | 0) - 1 | 0];
for(;;)
{if(dstofs <= j[1])
{var _zk_=j[1];
if(0 < caml_call2(cmp,caml_check_bound(dst,_zk_)[1 + _zk_],e))
{var
_zl_=j[1],
_zm_=caml_check_bound(dst,_zl_)[1 + _zl_],
_zn_=j[1] + 1 | 0;
caml_check_bound(dst,_zn_)[1 + _zn_] = _zm_;
j[1] += -1;
continue}}
var _zo_=j[1] + 1 | 0;
caml_check_bound(dst,_zo_)[1 + _zo_] = e;
var _zp_=i + 1 | 0;
if(_zi_ !== i){var i=_zp_;continue a}
break}
break}}
return 0}
function sortto(srcofs,dst,dstofs,len)
{if(len <= 5)return isortto(srcofs,dst,dstofs,len);
var l1=len / 2 | 0,l2=len - l1 | 0;
sortto(srcofs + l1 | 0,dst,dstofs + l1 | 0,l2);
sortto(srcofs,a,srcofs + l2 | 0,l1);
return merge(srcofs + l2 | 0,l1,dst,dstofs + l1 | 0,l2,dst,dstofs)}
var l=a.length - 1;
if(l <= 5)return isortto(0,a,0,l);
var
l1=l / 2 | 0,
l2=l - l1 | 0,
t=caml_make_vect(l2,caml_check_bound(a,0)[1]);
sortto(l1,t,0,l2);
sortto(0,a,l2,l1);
return merge(l2,l1,t,0,l2,a,0)}
function to_seq$4(a)
{function aux(i,param)
{if(i < a.length - 1)
{var x=a[1 + i],_zf_=i + 1 | 0;
return [0,x,function(_zg_){return aux(_zf_,_zg_)}]}
return 0}
var _zd_=0;
return function(_ze_){return aux(_zd_,_ze_)}}
function to_seqi$1(a)
{function aux(i,param)
{if(i < a.length - 1)
{var x=a[1 + i],_zb_=i + 1 | 0;
return [0,[0,i,x],function(_zc_){return aux(_zb_,_zc_)}]}
return 0}
var _y$_=0;
return function(_za_){return aux(_y$_,_za_)}}
function of_seq$2(i$2)
{var _y__=0,l=fold_left(function(acc,x){return [0,x,acc]},_y__,i$2);
if(l)
{var
tl=l[2],
hd=l[1],
len=list_length(0,l),
a=caml_make_vect(len,hd),
i$1=len - 2 | 0,
i=i$1,
param=tl;
for(;;)
{if(param)
{var tl$0=param[2],hd$0=param[1];
a[1 + i] = hd$0;
var i$0=i - 1 | 0,i=i$0,param=tl$0;
continue}
return a}}
return [0]}
var
concat$2=caml_array_concat,
include$3=
[0,
make_float,
init$3,
create_matrix,
create_matrix,
append$1,
concat$2,
sub$1,
copy$1,
fill$0,
blit$1,
to_list$1,
of_list,
iter$5,
iteri$3,
map$7,
mapi$3,
fold_left$3,
fold_left_map$0,
fold_right$2,
iter2$1,
map2$1,
for_all$3,
exists$3,
for_all2$1,
exists2$1,
mem$0,
memq$0,
find_opt$0,
find_map$1,
split$0,
combine$0,
sort,
fast_sort$0,
fast_sort$0,
to_seq$4,
to_seqi$1,
of_seq$2,
Floatarray];
caml_register_global(794,include$3,"Stdlib__Array");
var zero$0=0.,one$0=1.,minus_one$0=-1.;
function is_finite(x){return x - x == 0.?1:0}
function is_infinite(x){return 1. / x == 0.?1:0}
function is_nan(x){return x != x?1:0}
var pi=3.14159265358979312;
function is_integer(x)
{var _y9_=x == runtime.caml_trunc_float(x)?1:0;
return _y9_?is_finite(x):_y9_}
function succ$0(x){return caml_nextafter_float(x,infinity)}
function pred$0(x){return caml_nextafter_float(x,neg_infinity)}
function equal$11(x,y){return 0 === caml_float_compare(x,y)?1:0}
function min$2(x,y)
{if(! (x < y))
{var switch$0=0;
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
if(switch$0)return x != x?x:y}
return y != y?y:x}
function max$2(x,y)
{if(! (x < y))
{var switch$0=0;
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
if(switch$0)return y != y?y:x}
return x != x?x:y}
function min_max(x,y)
{if(x == x && y == y)
{if(! (x < y))
{var switch$0=0;
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
if(switch$0)return [0,y,x]}
return [0,x,y]}
return [0,nan,nan]}
function min_num(x,y)
{if(! (x < y))
{var switch$0=0;
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
if(switch$0)return y != y?x:y}
return x != x?y:x}
function max_num(x,y)
{if(! (x < y))
{var switch$0=0;
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
if(switch$0)return x != x?y:x}
return y != y?x:y}
function min_max_num(x,y)
{if(x != x)return [0,y,y];
if(y != y)return [0,x,x];
if(! (x < y))
{var switch$0=0;
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
if(switch$0)return [0,y,x]}
return [0,x,y]}
function hash$0(x){return caml_hash(10,100,0,x)}
function unsafe_fill(a,ofs,len,v)
{var _y7_=(ofs + len | 0) - 1 | 0;
if(! (_y7_ < ofs))
{var i=ofs;
for(;;)
{a[1 + i] = v;
var _y8_=i + 1 | 0;
if(_y7_ !== i){var i=_y8_;continue}
break}}
return 0}
function check(a,ofs,len,msg)
{var _y3_=ofs < 0?1:0;
if(_y3_)
var _y4_=_y3_;
else
{var _y5_=len < 0?1:0;
if(_y5_)
var _y4_=_y5_;
else
var
_y6_=(ofs + len | 0) < 0?1:0,
_y4_=_y6_ || (a.length - 1 < (ofs + len | 0)?1:0)}
return _y4_?invalid_arg(msg):_y4_}
function make$2(n,v)
{var result=caml_floatarray_create(n);
unsafe_fill(result,0,n,v);
return result}
function init$4(l,f)
{if(0 <= l)
{var res=caml_floatarray_create(l),_y1_=l - 1 | 0,_y0_=0;
if(! (_y1_ < 0))
{var i=_y0_;
for(;;)
{res[1 + i] = caml_call1(f,i);
var _y2_=i + 1 | 0;
if(_y1_ !== i){var i=_y2_;continue}
break}}
return res}
return invalid_arg(cst_Float_Array_init)}
function append$2(a1,a2)
{var
l1=a1.length - 1,
l2=a2.length - 1,
result=caml_floatarray_create(l1 + l2 | 0);
caml_floatarray_blit(a1,0,result,0,l1);
caml_floatarray_blit(a2,0,result,l1,l2);
return result}
function concat$3(l)
{var acc=0,param=l;
for(;;)
{if(param)
{var
tl=param[2],
hd=param[1],
x=hd.length - 1 + acc | 0,
acc$0=acc <= x?x:invalid_arg(cst_Float_Array_concat),
acc=acc$0,
param=tl;
continue}
var result=caml_floatarray_create(acc),l$0=l,i=0;
for(;;)
{if(l$0)
{var tl$0=l$0[2],hd$0=l$0[1],hlen=hd$0.length - 1;
caml_floatarray_blit(hd$0,0,result,i,hlen);
var i$0=i + hlen | 0,l$0=tl$0,i=i$0;
continue}
if(i === acc)return result;
throw [0,Assert_failure,_I_]}}}
function sub$2(a,ofs,len)
{check(a,ofs,len,cst_Float_Array_sub);
var result=caml_floatarray_create(len);
caml_floatarray_blit(a,ofs,result,0,len);
return result}
function copy$2(a)
{var l=a.length - 1,result=caml_floatarray_create(l);
caml_floatarray_blit(a,0,result,0,l);
return result}
function fill$1(a,ofs,len,v)
{check(a,ofs,len,cst_Float_Array_fill);return unsafe_fill(a,ofs,len,v)}
function blit$2(src,sofs,dst,dofs,len)
{check(src,sofs,len,cst_Float_array_blit);
check(dst,dofs,len,cst_Float_array_blit$0);
return caml_floatarray_blit(src,sofs,dst,dofs,len)}
function to_list$2(a)
{return init$0(a.length - 1,function(_yZ_){return a[1 + _yZ_]})}
function of_list$0(l)
{var result=caml_floatarray_create(length$1(l)),i=0,l$0=l;
for(;;)
{if(l$0)
{var t=l$0[2],h=l$0[1];
result[1 + i] = h;
var i$0=i + 1 | 0,i=i$0,l$0=t;
continue}
return result}}
function iter$6(f,a)
{var _yX_=a.length - 1 - 1 | 0,_yW_=0;
if(! (_yX_ < 0))
{var i=_yW_;
for(;;)
{caml_call1(f,a[1 + i]);
var _yY_=i + 1 | 0;
if(_yX_ !== i){var i=_yY_;continue}
break}}
return 0}
function iter2$2(f,a,b)
{if(a.length - 1 !== b.length - 1)
return invalid_arg(cst_Float_Array_iter2_arrays_m);
var _yU_=a.length - 1 - 1 | 0,_yT_=0;
if(! (_yU_ < 0))
{var i=_yT_;
for(;;)
{caml_call2(f,a[1 + i],b[1 + i]);
var _yV_=i + 1 | 0;
if(_yU_ !== i){var i=_yV_;continue}
break}}
return 0}
function map$8(f,a)
{var l=a.length - 1,r=caml_floatarray_create(l),_yR_=l - 1 | 0,_yQ_=0;
if(! (_yR_ < 0))
{var i=_yQ_;
for(;;)
{r[1 + i] = caml_call1(f,a[1 + i]);
var _yS_=i + 1 | 0;
if(_yR_ !== i){var i=_yS_;continue}
break}}
return r}
function map2$2(f,a,b)
{var la=a.length - 1,lb=b.length - 1;
if(la !== lb)return invalid_arg(cst_Float_Array_map2_arrays_mu);
var r=caml_floatarray_create(la),_yO_=la - 1 | 0,_yN_=0;
if(! (_yO_ < 0))
{var i=_yN_;
for(;;)
{r[1 + i] = caml_call2(f,a[1 + i],b[1 + i]);
var _yP_=i + 1 | 0;
if(_yO_ !== i){var i=_yP_;continue}
break}}
return r}
function iteri$4(f,a)
{var _yL_=a.length - 1 - 1 | 0,_yK_=0;
if(! (_yL_ < 0))
{var i=_yK_;
for(;;)
{caml_call2(f,i,a[1 + i]);
var _yM_=i + 1 | 0;
if(_yL_ !== i){var i=_yM_;continue}
break}}
return 0}
function mapi$4(f,a)
{var l=a.length - 1,r=caml_floatarray_create(l),_yI_=l - 1 | 0,_yH_=0;
if(! (_yI_ < 0))
{var i=_yH_;
for(;;)
{r[1 + i] = caml_call2(f,i,a[1 + i]);
var _yJ_=i + 1 | 0;
if(_yI_ !== i){var i=_yJ_;continue}
break}}
return r}
function fold_left$4(f,x,a)
{var r=[0,x],_yF_=a.length - 1 - 1 | 0,_yE_=0;
if(! (_yF_ < 0))
{var i=_yE_;
for(;;)
{r[1] = caml_call2(f,r[1],a[1 + i]);
var _yG_=i + 1 | 0;
if(_yF_ !== i){var i=_yG_;continue}
break}}
return r[1]}
function fold_right$3(f,a,x)
{var r=[0,x],_yC_=a.length - 1 - 1 | 0;
if(! (_yC_ < 0))
{var i=_yC_;
for(;;)
{r[1] = caml_call2(f,a[1 + i],r[1]);
var _yD_=i - 1 | 0;
if(0 !== i){var i=_yD_;continue}
break}}
return r[1]}
function exists$4(p,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 0;
if(caml_call1(p,a[1 + i]))return 1;
var i$0=i + 1 | 0,i=i$0;
continue}}
function for_all$4(p,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 1;
if(caml_call1(p,a[1 + i])){var i$0=i + 1 | 0,i=i$0;continue}
return 0}}
function mem$1(x,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 0;
if(0 === caml_float_compare(a[1 + i],x))return 1;
var i$0=i + 1 | 0,i=i$0;
continue}}
function mem_ieee(x,a)
{var n=a.length - 1,i=0;
for(;;)
{if(i === n)return 0;
if(x == a[1 + i])return 1;
var i$0=i + 1 | 0,i=i$0;
continue}}
var Bottom$0=[248,cst_Stdlib_Float_Array_Bottom,caml_fresh_oo_id(0)];
function sort$0(cmp,a)
{function maxson(l,i)
{var i31=((i + i | 0) + i | 0) + 1 | 0,x=[0,i31];
if((i31 + 2 | 0) < l)
{if
(caml_call2
(cmp,caml_array_get(a,i31),caml_array_get(a,i31 + 1 | 0))
<
0)
x[1] = i31 + 1 | 0;
if
(caml_call2
(cmp,caml_array_get(a,x[1]),caml_array_get(a,i31 + 2 | 0))
<
0)
x[1] = i31 + 2 | 0;
return x[1]}
if
((i31 + 1 | 0)
<
l
&&
!
(0
<=
caml_call2(cmp,caml_array_get(a,i31),caml_array_get(a,i31 + 1 | 0))))
return i31 + 1 | 0;
if(i31 < l)return i31;
throw [0,Bottom$0,i]}
function trickledown(l,i,e)
{var i$0=i;
for(;;)
{var j=maxson(l,i$0);
if(0 < caml_call2(cmp,caml_array_get(a,j),e))
{caml_array_set(a,i$0,caml_array_get(a,j));var i$0=j;continue}
return caml_array_set(a,i$0,e)}}
function trickle(l,i,e)
{try
{var _yB_=trickledown(l,i,e);return _yB_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] === Bottom$0)
{var i$0=exn[2];return caml_array_set(a,i$0,e)}
throw exn}}
function bubbledown(l,i)
{var i$0=i;
for(;;)
{var i$1=maxson(l,i$0);
caml_array_set(a,i$0,caml_array_get(a,i$1));
var i$0=i$1;
continue}}
function bubble(l,i)
{try
{var _yA_=bubbledown(l,i);return _yA_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] === Bottom$0){var i$0=exn[2];return i$0}
throw exn}}
var l=a.length - 1,_yu_=((l + 1 | 0) / 3 | 0) - 1 | 0;
if(! (_yu_ < 0))
{var i$2=_yu_;
for(;;)
{trickle(l,i$2,caml_array_get(a,i$2));
var _yz_=i$2 - 1 | 0;
if(0 !== i$2){var i$2=_yz_;continue}
break}}
var _yv_=l - 1 | 0;
if(! (_yv_ < 2))
{var i$0=_yv_;
a:
for(;;)
{var e$0=caml_array_get(a,i$0);
caml_array_set(a,i$0,caml_array_get(a,0));
var i$1=bubble(i$0,0),i=i$1;
for(;;)
{var father=(i - 1 | 0) / 3 | 0;
if(i === father)throw [0,Assert_failure,_J_];
if(0 <= caml_call2(cmp,caml_array_get(a,father),e$0))
caml_array_set(a,i,e$0);
else
{caml_array_set(a,i,caml_array_get(a,father));
if(0 < father){var i=father;continue}
caml_array_set(a,0,e$0)}
var _yy_=i$0 - 1 | 0;
if(2 !== i$0){var i$0=_yy_;continue a}
break}
break}}
var _yw_=1 < l?1:0;
if(_yw_)
{var e=caml_array_get(a,1);
caml_array_set(a,1,caml_array_get(a,0));
var _yx_=caml_array_set(a,0,e)}
else
var _yx_=_yw_;
return _yx_}
function stable_sort(cmp,a)
{function merge(src1ofs,src1len,src2,src2ofs,src2len,dst,dstofs)
{var
src1r=src1ofs + src1len | 0,
src2r=src2ofs + src2len | 0,
s2$1=caml_array_get(src2,src2ofs),
s1$1=caml_array_get(a,src1ofs),
i1=src1ofs,
s1=s1$1,
i2=src2ofs,
s2=s2$1,
d=dstofs;
for(;;)
{if(0 < caml_call2(cmp,s1,s2))
{caml_array_set(dst,d,s2);
var i2$0=i2 + 1 | 0;
if(i2$0 < src2r)
{var
d$0=d + 1 | 0,
s2$0=caml_array_get(src2,i2$0),
i2=i2$0,
s2=s2$0,
d=d$0;
continue}
return blit$2(a,i1,dst,d + 1 | 0,src1r - i1 | 0)}
caml_array_set(dst,d,s1);
var i1$0=i1 + 1 | 0;
if(i1$0 < src1r)
{var
d$1=d + 1 | 0,
s1$0=caml_array_get(a,i1$0),
i1=i1$0,
s1=s1$0,
d=d$1;
continue}
return blit$2(src2,i2,dst,d + 1 | 0,src2r - i2 | 0)}}
function isortto(srcofs,dst,dstofs,len)
{var _ys_=len - 1 | 0,_yr_=0;
if(! (_ys_ < 0))
{var i=_yr_;
a:
for(;;)
{var
e=caml_array_get(a,srcofs + i | 0),
j=[0,(dstofs + i | 0) - 1 | 0];
for(;;)
{if
(dstofs
<=
j[1]
&&
0
<
caml_call2(cmp,caml_array_get(dst,j[1]),e))
{caml_array_set(dst,j[1] + 1 | 0,caml_array_get(dst,j[1]));
j[1] += -1;
continue}
caml_array_set(dst,j[1] + 1 | 0,e);
var _yt_=i + 1 | 0;
if(_ys_ !== i){var i=_yt_;continue a}
break}
break}}
return 0}
function sortto(srcofs,dst,dstofs,len)
{if(len <= 5)return isortto(srcofs,dst,dstofs,len);
var l1=len / 2 | 0,l2=len - l1 | 0;
sortto(srcofs + l1 | 0,dst,dstofs + l1 | 0,l2);
sortto(srcofs,a,srcofs + l2 | 0,l1);
return merge(srcofs + l2 | 0,l1,dst,dstofs + l1 | 0,l2,dst,dstofs)}
var l=a.length - 1;
if(l <= 5)return isortto(0,a,0,l);
var l1=l / 2 | 0,l2=l - l1 | 0,t=caml_floatarray_create(l2);
sortto(l1,t,0,l2);
sortto(0,a,l2,l1);
return merge(l2,l1,t,0,l2,a,0)}
function to_seq$5(a)
{function aux(i,param)
{if(i < a.length - 1)
{var x=a[1 + i],_yp_=i + 1 | 0;
return [0,x,function(_yq_){return aux(_yp_,_yq_)}]}
return 0}
var _yn_=0;
return function(_yo_){return aux(_yn_,_yo_)}}
function to_seqi$2(a)
{function aux(i,param)
{if(i < a.length - 1)
{var x=a[1 + i],_yl_=i + 1 | 0;
return [0,[0,i,x],function(_ym_){return aux(_yl_,_ym_)}]}
return 0}
var _yj_=0;
return function(_yk_){return aux(_yj_,_yk_)}}
function of_seq$3(i$2)
{var
_yi_=0,
param$0=fold_left(function(acc,x){return [0,x,acc]},_yi_,i$2),
len=length$1(param$0),
a=caml_floatarray_create(len),
i$1=len - 1 | 0,
i=i$1,
param=param$0;
for(;;)
{if(param)
{var tl=param[2],hd=param[1];
a[1 + i] = hd;
var i$0=i - 1 | 0,i=i$0,param=tl;
continue}
return a}}
function map_to_array(f,a)
{var l=a.length - 1;
if(0 === l)return [0];
var r=caml_make_vect(l,caml_call1(f,a[1])),_yg_=l - 1 | 0,_yf_=1;
if(! (_yg_ < 1))
{var i=_yf_;
for(;;)
{r[1 + i] = caml_call1(f,a[1 + i]);
var _yh_=i + 1 | 0;
if(_yg_ !== i){var i=_yh_;continue}
break}}
return r}
function map_from_array(f,a)
{var l=a.length - 1,r=caml_floatarray_create(l),_yd_=l - 1 | 0,_yc_=0;
if(! (_yd_ < 0))
{var i=_yc_;
for(;;)
{r[1 + i] = caml_call1(f,a[1 + i]);
var _ye_=i + 1 | 0;
if(_yd_ !== i){var i=_ye_;continue}
break}}
return r}
var
_K_=caml_floatarray_create,
_L_=caml_array_set,
_M_=caml_array_get,
_N_=
[0,
function(_yb_){return _yb_.length - 1},
_M_,
_L_,
make$2,
_K_,
init$4,
append$2,
concat$3,
sub$2,
copy$2,
fill$1,
blit$2,
to_list$2,
of_list$0,
iter$6,
iteri$4,
map$8,
mapi$4,
fold_left$4,
fold_right$3,
iter2$2,
map2$2,
for_all$4,
exists$4,
mem$1,
mem_ieee,
sort$0,
stable_sort,
stable_sort,
to_seq$5,
to_seqi$2,
of_seq$3,
map_to_array,
map_from_array],
_O_=caml_floatarray_create,
_P_=caml_array_set,
_Q_=caml_array_get,
Stdlib_Float=
[0,
zero$0,
one$0,
minus_one$0,
succ$0,
pred$0,
infinity,
neg_infinity,
nan,
pi,
max_float,
min_float,
epsilon,
is_finite,
is_infinite,
is_nan,
is_integer,
of_string_opt,
to_string,
caml_float_compare,
equal$11,
min$2,
max$2,
min_max,
min_num,
max_num,
min_max_num,
hash$0,
[0,
function(_ya_){return _ya_.length - 1},
_Q_,
_P_,
make$2,
_O_,
init$4,
append$2,
concat$3,
sub$2,
copy$2,
fill$1,
blit$2,
to_list$2,
of_list$0,
iter$6,
iteri$4,
map$8,
mapi$4,
fold_left$4,
fold_right$3,
iter2$2,
map2$2,
for_all$4,
exists$4,
mem$1,
mem_ieee,
sort$0,
stable_sort,
stable_sort,
to_seq$5,
to_seqi$2,
of_seq$3,
map_to_array,
map_from_array],
_N_];
caml_register_global(795,Stdlib_Float,"Stdlib__Float");
var zero$1=0,one$1=1,minus_one$1=-1;
function succ$1(n){return n + 1 | 0}
function pred$1(n){return n - 1 | 0}
function abs$1(n){return caml_greaterequal(n,0)?n:- n | 0}
var min_int$1=-2147483648,max_int$1=2147483647;
function lognot$0(n){return n ^ -1}
function unsigned_to_int(n)
{if
(!
(0 < caml_int_compare(0,n))
&&
!
(0 < caml_int_compare(n,2147483647)))
return [0,n];
return 0}
function to_string$3(n){return caml_format_int(cst_d,n)}
function of_string_opt$0(s)
{try
{var _x__=[0,caml_int_of_string(s)];return _x__}
catch(_x$_)
{_x$_ = caml_wrap_exception(_x$_);
if(_x$_[1] === Failure)return 0;
throw _x$_}}
function compare$11(x,y){return caml_int_compare(x,y)}
function equal$12(x,y){return 0 === caml_int_compare(x,y)?1:0}
function unsigned_compare(n,m)
{return caml_int_compare(n + 2147483648 | 0,m + 2147483648 | 0)}
function min$3(x,y){return caml_lessequal(x,y)?x:y}
function max$3(x,y){return caml_greaterequal(x,y)?x:y}
function unsigned_div(n,d)
{if(caml_lessthan(d,0))return 0 <= unsigned_compare(n,d)?one$1:zero$1;
var q=caml_div(n >>> 1 | 0,d) << 1,r=n - caml_mul(q,d) | 0;
return 0 <= unsigned_compare(r,d)?q + 1 | 0:q}
function unsigned_rem(n,d){return n - caml_mul(unsigned_div(n,d),d) | 0}
var
Stdlib_Int32=
[0,
zero$1,
one$1,
minus_one$1,
unsigned_div,
unsigned_rem,
succ$1,
pred$1,
abs$1,
max_int$1,
min_int$1,
lognot$0,
unsigned_to_int,
of_string_opt$0,
to_string$3,
compare$11,
unsigned_compare,
equal$12,
min$3,
max$3];
caml_register_global(796,Stdlib_Int32,"Stdlib__Int32");
function succ$2(n){return caml_int64_add(n,_R_)}
function pred$2(n){return caml_int64_sub(n,_S_)}
function abs$2(n)
{return caml_greaterequal(n,_T_)?n:runtime.caml_int64_neg(n)}
function lognot$1(n){return runtime.caml_int64_xor(n,_U_)}
var max_int$3=caml_int64_of_int32(2147483647);
function unsigned_to_int$0(n)
{if
(!
(0 < caml_int64_compare(zero$2,n))
&&
!
(0 < caml_int64_compare(n,max_int$3)))
return [0,runtime.caml_int64_to_int32(n)];
return 0}
function to_string$4(n){return caml_int64_format(cst_d$0,n)}
function of_string_opt$1(s)
{try
{var _x8_=[0,caml_int64_of_string(s)];return _x8_}
catch(_x9_)
{_x9_ = caml_wrap_exception(_x9_);
if(_x9_[1] === Failure)return 0;
throw _x9_}}
function compare$12(x,y){return caml_int64_compare(x,y)}
function equal$13(x,y){return 0 === caml_int64_compare(x,y)?1:0}
function unsigned_compare$0(n,m)
{return caml_int64_compare
(caml_int64_sub(n,min_int$2),caml_int64_sub(m,min_int$2))}
function min$4(x,y){return caml_lessequal(x,y)?x:y}
function max$4(x,y){return caml_greaterequal(x,y)?x:y}
function unsigned_div$0(n,d)
{if(caml_lessthan(d,zero$2))
return 0 <= unsigned_compare$0(n,d)?one$2:zero$2;
var
q=
caml_int64_shift_left
(runtime.caml_int64_div(caml_int64_shift_right_unsigne(n,1),d),1),
r=caml_int64_sub(n,caml_int64_mul(q,d));
return 0 <= unsigned_compare$0(r,d)?succ$2(q):q}
function unsigned_rem$0(n,d)
{return caml_int64_sub(n,caml_int64_mul(unsigned_div$0(n,d),d))}
var
Stdlib_Int64=
[0,
zero$2,
one$2,
minus_one$2,
unsigned_div$0,
unsigned_rem$0,
succ$2,
pred$2,
abs$2,
max_int$2,
min_int$2,
lognot$1,
unsigned_to_int$0,
of_string_opt$1,
to_string$4,
compare$12,
unsigned_compare$0,
equal$13,
min$4,
max$4];
caml_register_global(797,Stdlib_Int64,"Stdlib__Int64");
var zero$3=0,one$3=1,minus_one$3=-1;
function succ$3(n){return n + 1 | 0}
function pred$3(n){return n - 1 | 0}
function abs$3(n){return caml_greaterequal(n,0)?n:- n | 0}
var min_int$3=-2147483648,max_int$4=2147483647;
function lognot$2(n){return n ^ -1}
function unsigned_to_int$1(n)
{if
(!
(0 < caml_int_compare(0,n))
&&
!
(0 < caml_int_compare(n,2147483647)))
return [0,n];
return 0}
function to_string$5(n){return caml_format_int(cst_d$1,n)}
function of_string_opt$2(s)
{try
{var _x6_=[0,caml_int_of_string(s)];return _x6_}
catch(_x7_)
{_x7_ = caml_wrap_exception(_x7_);
if(_x7_[1] === Failure)return 0;
throw _x7_}}
function compare$13(x,y){return caml_int_compare(x,y)}
function equal$14(x,y){return 0 === caml_int_compare(x,y)?1:0}
function unsigned_compare$1(n,m)
{return caml_int_compare(n + 2147483648 | 0,m + 2147483648 | 0)}
function min$5(x,y){return caml_lessequal(x,y)?x:y}
function max$5(x,y){return caml_greaterequal(x,y)?x:y}
function unsigned_div$1(n,d)
{if(caml_lessthan(d,0))return 0 <= unsigned_compare$1(n,d)?one$3:zero$3;
var q=caml_div(n >>> 1 | 0,d) << 1,r=n - caml_mul(q,d) | 0;
return 0 <= unsigned_compare$1(r,d)?q + 1 | 0:q}
function unsigned_rem$1(n,d)
{return n - caml_mul(unsigned_div$1(n,d),d) | 0}
var
Stdlib_Nativeint=
[0,
zero$3,
one$3,
minus_one$3,
unsigned_div$1,
unsigned_rem$1,
succ$3,
pred$3,
abs$3,
match$1,
max_int$4,
min_int$3,
lognot$2,
unsigned_to_int$1,
of_string_opt$2,
to_string$5,
compare$13,
unsigned_compare$1,
equal$14,
min$5,
max$5];
caml_register_global(798,Stdlib_Nativeint,"Stdlib__Nativeint");
function engine(tbl,state,buf)
{var
result=runtime.caml_lex_engine(tbl,state,buf),
_x3_=0 <= result?1:0,
_x4_=_x3_?buf[12] !== dummy_pos?1:0:_x3_;
if(_x4_)
{buf[11] = buf[12];
var _x5_=buf[12];
buf[12] = [0,_x5_[1],_x5_[2],_x5_[3],buf[4] + buf[6] | 0]}
return result}
function new_engine(tbl,state,buf)
{var
result=runtime.caml_new_lex_engine(tbl,state,buf),
_x0_=0 <= result?1:0,
_x1_=_x0_?buf[12] !== dummy_pos?1:0:_x0_;
if(_x1_)
{buf[11] = buf[12];
var _x2_=buf[12];
buf[12] = [0,_x2_[1],_x2_[2],_x2_[3],buf[4] + buf[6] | 0]}
return result}
function from_function(opt,f)
{if(opt)var sth=opt[1],with_positions=sth;else var with_positions=1;
var
_xM_=with_positions?zero_pos:dummy_pos,
_xN_=with_positions?zero_pos:dummy_pos,
aux_buffer=caml_create_bytes(512),
_xO_=[0],
_xP_=0,
_xQ_=0,
_xR_=0,
_xS_=0,
_xT_=0,
_xU_=0,
_xV_=0,
_xW_=caml_create_bytes(1024);
return [0,
function(lexbuf)
{var
read=
caml_call2(f,aux_buffer,caml_ml_bytes_length(aux_buffer)),
n=0 < read?read:(lexbuf[9] = 1,0);
if(caml_ml_bytes_length(lexbuf[2]) < (lexbuf[3] + n | 0))
{if
(((lexbuf[3] - lexbuf[5] | 0) + n | 0)
<=
caml_ml_bytes_length(lexbuf[2]))
blit
(lexbuf[2],lexbuf[5],lexbuf[2],0,lexbuf[3] - lexbuf[5] | 0);
else
{var
newlen=
min$1
(2 * caml_ml_bytes_length(lexbuf[2]) | 0,max_string_length);
if(newlen < ((lexbuf[3] - lexbuf[5] | 0) + n | 0))
failwith(cst_Lexing_lex_refill_cannot_g);
var newbuf=caml_create_bytes(newlen);
blit(lexbuf[2],lexbuf[5],newbuf,0,lexbuf[3] - lexbuf[5] | 0);
lexbuf[2] = newbuf}
var s=lexbuf[5];
lexbuf[4] = lexbuf[4] + s | 0;
lexbuf[6] = lexbuf[6] - s | 0;
lexbuf[5] = 0;
lexbuf[7] = lexbuf[7] - s | 0;
lexbuf[3] = lexbuf[3] - s | 0;
var t=lexbuf[10],_xY_=t.length - 1 - 1 | 0,_xX_=0;
if(! (_xY_ < 0))
{var i=_xX_;
for(;;)
{var v=caml_check_bound(t,i)[1 + i];
if(0 <= v)caml_check_bound(t,i)[1 + i] = v - s | 0;
var _xZ_=i + 1 | 0;
if(_xY_ !== i){var i=_xZ_;continue}
break}}}
blit(aux_buffer,0,lexbuf[2],lexbuf[3],n);
lexbuf[3] = lexbuf[3] + n | 0;
return 0},
_xW_,
_xV_,
_xU_,
_xT_,
_xS_,
_xR_,
_xQ_,
_xP_,
_xO_,
_xN_,
_xM_]}
function from_channel(with_positions,ic)
{return from_function
(with_positions,function(buf,n){return input(ic,buf,0,n)})}
function from_string$0(opt,s)
{if(opt)var sth=opt[1],with_positions=sth;else var with_positions=1;
var
_xB_=with_positions?zero_pos:dummy_pos,
_xC_=with_positions?zero_pos:dummy_pos,
_xD_=[0],
_xE_=1,
_xF_=0,
_xG_=0,
_xH_=0,
_xI_=0,
_xJ_=0,
_xK_=caml_ml_string_length(s),
_xL_=to_bytes(s);
return [0,
function(lexbuf){lexbuf[9] = 1;return 0},
_xL_,
_xK_,
_xJ_,
_xI_,
_xH_,
_xG_,
_xF_,
_xE_,
_xD_,
_xC_,
_xB_]}
function set_position(lexbuf,position)
{lexbuf[12] = [0,lexbuf[12][1],position[2],position[3],position[4]];
lexbuf[4] = position[4];
return 0}
function set_filename(lexbuf,fname)
{var _xA_=lexbuf[12];
lexbuf[12] = [0,fname,_xA_[2],_xA_[3],_xA_[4]];
return 0}
function with_positions(lexbuf){return lexbuf[12] !== dummy_pos?1:0}
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_opt(lexbuf,i1,i2)
{if(0 <= i1){var len=i2 - i1 | 0;return [0,sub_string(lexbuf[2],i1,len)]}
return 0}
function sub_lexeme_char(lexbuf,i){return caml_bytes_get(lexbuf[2],i)}
function sub_lexeme_char_opt(lexbuf,i)
{return 0 <= i?[0,caml_bytes_get(lexbuf[2],i)]:0}
function lexeme_char(lexbuf,i)
{return caml_bytes_get(lexbuf[2],lexbuf[5] + i | 0)}
function lexeme_start(lexbuf){return lexbuf[11][4]}
function lexeme_end(lexbuf){return lexbuf[12][4]}
function lexeme_start_p(lexbuf){return lexbuf[11]}
function lexeme_end_p(lexbuf){return lexbuf[12]}
function new_line(lexbuf)
{var
lcp=lexbuf[12],
_xy_=lcp !== dummy_pos?1:0,
_xz_=_xy_?(lexbuf[12] = [0,lcp[1],lcp[2] + 1 | 0,lcp[4],lcp[4]],0):_xy_;
return _xz_}
function flush_input(lb)
{lb[6] = 0;
lb[4] = 0;
var lcp=lb[12];
if(lcp !== dummy_pos)
lb[12] = [0,lcp[1],zero_pos[2],zero_pos[3],zero_pos[4]];
lb[3] = 0;
return 0}
var
Stdlib_Lexing=
[0,
dummy_pos,
from_channel,
from_string$0,
from_function,
set_position,
set_filename,
with_positions,
lexeme,
lexeme_char,
lexeme_start,
lexeme_end,
lexeme_start_p,
lexeme_end_p,
new_line,
flush_input,
sub_lexeme,
sub_lexeme_opt,
sub_lexeme_char,
sub_lexeme_char_opt,
engine,
new_engine];
caml_register_global(799,Stdlib_Lexing,"Stdlib__Lexing");
var
YYexit=[248,cst_Stdlib_Parsing_YYexit,caml_fresh_oo_id(0)],
Parse_error=[248,cst_Stdlib_Parsing_Parse_error,caml_fresh_oo_id(0)],
env=
[0,
caml_make_vect(100,0),
caml_make_vect(100,0),
caml_make_vect(100,dummy_pos),
caml_make_vect(100,dummy_pos),
100,
0,
0,
0,
dummy_pos,
dummy_pos,
0,
0,
0,
0,
0,
0];
function grow_stacks(param)
{var
oldsize=env[5],
newsize=oldsize * 2 | 0,
new_s=caml_make_vect(newsize,0),
new_v=caml_make_vect(newsize,0),
new_start=caml_make_vect(newsize,dummy_pos),
new_end=caml_make_vect(newsize,dummy_pos);
blit$1(env[1],0,new_s,0,oldsize);
env[1] = new_s;
blit$1(env[2],0,new_v,0,oldsize);
env[2] = new_v;
blit$1(env[3],0,new_start,0,oldsize);
env[3] = new_start;
blit$1(env[4],0,new_end,0,oldsize);
env[4] = new_end;
env[5] = newsize;
return 0}
function clear_parser(param)
{fill$0(env[2],0,env[5],0);env[8] = 0;return 0}
var current_lookahead_fun=[0,function(param){return 0}];
function yyparse(tables,start,lexer,lexbuf)
{var
init_asp=env[11],
init_sp=env[14],
init_stackbase=env[6],
init_state=env[15],
init_curr_char=env[7],
init_lval=env[8],
init_errflag=env[16];
env[6] = env[14] + 1 | 0;
env[7] = start;
env[10] = lexbuf[12];
try
{var cmd=0,arg=0;
for(;;)
{var match=runtime.caml_parse_engine(tables,env,cmd,arg);
switch(match)
{case 0:
var arg$0=caml_call1(lexer,lexbuf);
env[9] = lexbuf[11];
env[10] = lexbuf[12];
var cmd=1,arg=arg$0;
continue;
case 1:throw Parse_error;
case 2:grow_stacks(0);var cmd=2,arg=0;continue;
case 3:grow_stacks(0);var cmd=3,arg=0;continue;
case 4:
try
{var
_xs_=env[13],
_xt_=
caml_call1(caml_check_bound(tables[1],_xs_)[1 + _xs_],env),
_xu_=4,
arg$1=_xt_,
cmd$0=_xu_}
catch(_xx_)
{_xx_ = caml_wrap_exception(_xx_);
if(_xx_ !== Parse_error)throw _xx_;
var arg$1=0,cmd$0=5,_xv_=_xx_}
var cmd=cmd$0,arg=arg$1;
continue;
default:
caml_call1(tables[14],cst_syntax_error);var cmd=5,arg=0;continue}}}
catch(exn)
{exn = caml_wrap_exception(exn);
var curr_char=env[7];
env[11] = init_asp;
env[14] = init_sp;
env[6] = init_stackbase;
env[15] = init_state;
env[7] = init_curr_char;
env[8] = init_lval;
env[16] = init_errflag;
if(exn[1] === YYexit){var v=exn[2];return v}
current_lookahead_fun[1]
=
function(tok)
{if(is_block(tok))
{var _xw_=caml_obj_tag(tok);
return caml_check_bound(tables[3],_xw_)[1 + _xw_] === curr_char
?1
:0}
return caml_check_bound(tables[2],tok)[1 + tok] === curr_char?1:0};
throw exn}}
function peek_val(env,n)
{var _xr_=env[11] - n | 0;return caml_check_bound(env[2],_xr_)[1 + _xr_]}
function symbol_start_pos(param)
{var i=env[12];
for(;;)
{if(0 < i)
{var
_xo_=(env[11] - i | 0) + 1 | 0,
st=caml_check_bound(env[3],_xo_)[1 + _xo_],
_xp_=(env[11] - i | 0) + 1 | 0,
en=caml_check_bound(env[4],_xp_)[1 + _xp_];
if(caml_notequal(st,en))return st;
var i$0=i - 1 | 0,i=i$0;
continue}
var _xq_=env[11];
return caml_check_bound(env[4],_xq_)[1 + _xq_]}}
function symbol_end_pos(param)
{var _xn_=env[11];return caml_check_bound(env[4],_xn_)[1 + _xn_]}
function rhs_start_pos(n)
{var _xm_=env[11] - (env[12] - n | 0) | 0;
return caml_check_bound(env[3],_xm_)[1 + _xm_]}
function rhs_end_pos(n)
{var _xl_=env[11] - (env[12] - n | 0) | 0;
return caml_check_bound(env[4],_xl_)[1 + _xl_]}
function symbol_start(param){return symbol_start_pos(0)[4]}
function symbol_end(param){return symbol_end_pos(0)[4]}
function rhs_start(n){return rhs_start_pos(n)[4]}
function rhs_end(n){return rhs_end_pos(n)[4]}
function is_current_lookahead(tok)
{return caml_call1(current_lookahead_fun[1],tok)}
function parse_error(param){return 0}
var
Stdlib_Parsing=
[0,
symbol_start,
symbol_end,
rhs_start,
rhs_end,
symbol_start_pos,
symbol_end_pos,
rhs_start_pos,
rhs_end_pos,
clear_parser,
Parse_error,
function(_xk_){return runtime.caml_set_parser_trace(_xk_)},
YYexit,
yyparse,
peek_val,
is_current_lookahead,
parse_error];
caml_register_global(800,Stdlib_Parsing,"Stdlib__Parsing");
var
Stdlib_Set=
[0,
function(Ord)
{function height(param){if(param){var h=param[4];return h}return 0}
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 _xj_=hr <= hl?hl + 1 | 0:hr + 1 | 0;
return [0,l,v,r,_xj_]}
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)
{var lr=l[3],lv=l[2],ll=l[1],_xe_=height(lr);
if(_xe_ <= height(ll))return create(ll,lv,create(lr,v,r));
if(lr)
{var lrr=lr[3],lrv=lr[2],lrl=lr[1],_xf_=create(lrr,v,r);
return create(create(ll,lv,lrl),lrv,_xf_)}
return invalid_arg(cst_Set_bal)}
return invalid_arg(cst_Set_bal$0)}
if((hl + 2 | 0) < hr)
{if(r)
{var rr=r[3],rv=r[2],rl=r[1],_xg_=height(rl);
if(_xg_ <= height(rr))return create(create(l,v,rl),rv,rr);
if(rl)
{var rlr=rl[3],rlv=rl[2],rll=rl[1],_xh_=create(rlr,rv,rr);
return create(create(l,v,rll),rlv,_xh_)}
return invalid_arg(cst_Set_bal$1)}
return invalid_arg(cst_Set_bal$2)}
var _xi_=hr <= hl?hl + 1 | 0:hr + 1 | 0;
return [0,l,v,r,_xi_]}
function add(x,t)
{if(t)
{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)}
return [0,0,x,0,1]}
function singleton(x){return [0,0,x,0,1]}
function add_min_element(x,param)
{if(param)
{var r=param[3],v=param[2],l=param[1];
return bal(add_min_element(x,l),v,r)}
return singleton(x)}
function add_max_element(x,param)
{if(param)
{var r=param[3],v=param[2],l=param[1];
return bal(l,v,add_max_element(x,r))}
return singleton(x)}
function join(l,v,r)
{if(l)
{if(r)
{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)}
return add_max_element(v,l)}
return add_min_element(v,r)}
function min_elt(param)
{var param$0=param;
for(;;)
{if(param$0)
{var _xd_=param$0[1];
if(_xd_){var param$0=_xd_;continue}
var v=param$0[2];
return v}
throw Not_found}}
function min_elt_opt(param)
{var param$0=param;
for(;;)
{if(param$0)
{var _xc_=param$0[1];
if(_xc_){var param$0=_xc_;continue}
var v=param$0[2];
return [0,v]}
return 0}}
function max_elt(param)
{var param$0=param;
for(;;)
{if(param$0)
{if(param$0[3]){var param$1=param$0[3],param$0=param$1;continue}
var v=param$0[2];
return v}
throw Not_found}}
function max_elt_opt(param)
{var param$0=param;
for(;;)
{if(param$0)
{if(param$0[3]){var param$1=param$0[3],param$0=param$1;continue}
var v=param$0[2];
return [0,v]}
return 0}}
function remove_min_elt(param)
{if(param)
{var _xb_=param[1];
if(_xb_)
{var r=param[3],v=param[2];return bal(remove_min_elt(_xb_),v,r)}
var r$0=param[3];
return r$0}
return invalid_arg(cst_Set_remove_min_elt)}
function concat(t1,t2)
{if(t1)
{if(t2)
{var _xa_=remove_min_elt(t2);return join(t1,min_elt(t2),_xa_)}
return t1}
return t2}
function split(x,param)
{if(param)
{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)]}
return _V_}
var empty=0;
function is_empty(param){return param?0:1}
function mem(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
r=param$0[3],
v=param$0[2],
l=param$0[1],
c=caml_call2(Ord[1],x,v),
_w$_=0 === c?1:0;
if(_w$_)return _w$_;
var param$1=0 <= c?r:l,param$0=param$1;
continue}
return 0}}
function remove(x,t)
{if(t)
{var r=t[3],v=t[2],l=t[1],c=caml_call2(Ord[1],x,v);
if(0 === c)
{if(l)
{if(r)
{var _w__=remove_min_elt(r);return bal(l,min_elt(r),_w__)}
return l}
return 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)}
return 0}
function union(s1,s2)
{if(s1)
{if(s2)
{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],
_w8_=union(r1,r2$0);
return join(union(l1,l2$0),v1,_w8_)}
if(1 === h1)return add(v1,s2);
var
match$0=split(v2,s1),
r1$0=match$0[3],
l1$0=match$0[1],
_w9_=union(r1$0,r2);
return join(union(l1$0,l2),v2,_w9_)}
return s1}
return s2}
function inter(s1,s2)
{if(s1)
{if(s2)
{var r1=s1[3],v1=s1[2],l1=s1[1],_w4_=split(v1,s2),_w5_=_w4_[1];
if(_w4_[2])
{var r2=_w4_[3],_w6_=inter(r1,r2);
return join(inter(l1,_w5_),v1,_w6_)}
var r2$0=_w4_[3],_w7_=inter(r1,r2$0);
return concat(inter(l1,_w5_),_w7_)}
return 0}
return 0}
function split_bis(x,param)
{if(param)
{var r=param[3],v=param[2],l=param[1],c=caml_call2(Ord[1],x,v);
if(0 === c)return 0;
if(0 <= c)
{var match=split_bis(x,r);
if(match)
{var rr=match[2],lr=match[1];return [0,join(l,v,lr),rr]}
return 0}
var match$0=split_bis(x,l);
if(match$0)
{var rl=match$0[2],ll=match$0[1];
return [0,
ll,
function(param){return join(caml_call1(rl,0),v,r)}]}
return 0}
return [0,0,function(param){return 0}]}
function disjoint(s1,s2)
{var s1$0=s1,s2$0=s2;
for(;;)
{if(s1$0 && s2$0)
{var r1=s1$0[3],v1=s1$0[2],l1=s1$0[1];
if(s1$0 === s2$0)return 0;
var match=split_bis(v1,s2$0);
if(match)
{var r2=match[2],l2=match[1],_w3_=disjoint(l1,l2);
if(_w3_)
{var s2$1=caml_call1(r2,0),s1$0=r1,s2$0=s2$1;continue}
return _w3_}
return 0}
return 1}}
function diff(s1,s2)
{if(s1)
{if(s2)
{var r1=s1[3],v1=s1[2],l1=s1[1],_wZ_=split(v1,s2),_w0_=_wZ_[1];
if(_wZ_[2])
{var r2=_wZ_[3],_w1_=diff(r1,r2);
return concat(diff(l1,_w0_),_w1_)}
var r2$0=_wZ_[3],_w2_=diff(r1,r2$0);
return join(diff(l1,_w0_),v1,_w2_)}
return s1}
return 0}
function cons_enum(s,e)
{var s$0=s,e$0=e;
for(;;)
{if(s$0)
{var
r=s$0[3],
v=s$0[2],
s$1=s$0[1],
e$1=[0,v,r,e$0],
s$0=s$1,
e$0=e$1;
continue}
return e$0}}
function compare(s1,s2)
{var e2$2=cons_enum(s2,0),e1$2=cons_enum(s1,0),e1=e1$2,e2=e2$2;
for(;;)
{if(e1)
{if(e2)
{var
e2$0=e2[3],
r2=e2[2],
v2=e2[1],
e1$0=e1[3],
r1=e1[2],
v1=e1[1],
c=caml_call2(Ord[1],v1,v2);
if(0 === c)
{var
e2$1=cons_enum(r2,e2$0),
e1$1=cons_enum(r1,e1$0),
e1=e1$1,
e2=e2$1;
continue}
return c}
return 1}
return e2?-1:0}}
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)
{if(s2$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 _wW_=subset(l1,l2);
if(_wW_){var s1$0=r1,s2$0=r2;continue}
return _wW_}
if(0 <= c)
{var _wX_=subset([0,0,v1,r1,0],r2);
if(_wX_){var s1$0=l1;continue}
return _wX_}
var _wY_=subset([0,l1,v1,0,0],l2);
if(_wY_){var s1$0=r1;continue}
return _wY_}
return 0}
return 1}}
function iter(f,param)
{var param$0=param;
for(;;)
{if(param$0)
{var r=param$0[3],v=param$0[2],l=param$0[1];
iter(f,l);
caml_call1(f,v);
var param$0=r;
continue}
return 0}}
function fold(f,s,accu)
{var s$0=s,accu$0=accu;
for(;;)
{if(s$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;
continue}
return accu$0}}
function for_all(p,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
r=param$0[3],
v=param$0[2],
l=param$0[1],
_wT_=caml_call1(p,v);
if(_wT_)
{var _wU_=for_all(p,l);
if(_wU_){var param$0=r;continue}
var _wV_=_wU_}
else
var _wV_=_wT_;
return _wV_}
return 1}}
function exists(p,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
r=param$0[3],
v=param$0[2],
l=param$0[1],
_wQ_=caml_call1(p,v);
if(_wQ_)
var _wR_=_wQ_;
else
{var _wS_=exists(p,l);
if(! _wS_){var param$0=r;continue}
var _wR_=_wS_}
return _wR_}
return 0}}
function filter(p,t)
{if(t)
{var
r=t[3],
v=t[2],
l=t[1],
l$0=filter(p,l),
pv=caml_call1(p,v),
r$0=filter(p,r);
if(pv){if(l === l$0 && r === r$0)return t;return join(l$0,v,r$0)}
return concat(l$0,r$0)}
return 0}
function partition(p,param)
{if(param)
{var
r=param[3],
v=param[2],
l=param[1],
match=partition(p,l),
lf=match[2],
lt=match[1],
pv=caml_call1(p,v),
match$0=partition(p,r),
rf=match$0[2],
rt=match$0[1];
if(pv){var _wO_=concat(lf,rf);return [0,join(lt,v,rt),_wO_]}
var _wP_=join(lf,v,rf);
return [0,concat(lt,rt),_wP_]}
return _W_}
function cardinal(param)
{if(param)
{var r=param[3],l=param[1],_wN_=cardinal(r);
return (cardinal(l) + 1 | 0) + _wN_ | 0}
return 0}
function elements_aux(accu,param)
{var accu$0=accu,param$0=param;
for(;;)
{if(param$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;
continue}
return accu$0}}
function elements(s){return elements_aux(0,s)}
function find(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
r=param$0[3],
v=param$0[2],
l=param$0[1],
c=caml_call2(Ord[1],x,v);
if(0 === c)return v;
var param$1=0 <= c?r:l,param$0=param$1;
continue}
throw Not_found}}
function find_first(f,param$0)
{var param$1=param$0;
for(;;)
{if(param$1)
{var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1];
if(caml_call1(f,v$0))
{var v0=v$0,param=l$0;
for(;;)
{if(param)
{var r=param[3],v=param[2],l=param[1];
if(caml_call1(f,v)){var v0=v,param=l;continue}
var param=r;
continue}
return v0}}
var param$1=r$0;
continue}
throw Not_found}}
function find_first_opt(f,param$0)
{var param$1=param$0;
for(;;)
{if(param$1)
{var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1];
if(caml_call1(f,v$0))
{var v0=v$0,param=l$0;
for(;;)
{if(param)
{var r=param[3],v=param[2],l=param[1];
if(caml_call1(f,v)){var v0=v,param=l;continue}
var param=r;
continue}
return [0,v0]}}
var param$1=r$0;
continue}
return 0}}
function find_last(f,param$0)
{var param$1=param$0;
for(;;)
{if(param$1)
{var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1];
if(caml_call1(f,v$0))
{var v0=v$0,param=r$0;
for(;;)
{if(param)
{var r=param[3],v=param[2],l=param[1];
if(caml_call1(f,v)){var v0=v,param=r;continue}
var param=l;
continue}
return v0}}
var param$1=l$0;
continue}
throw Not_found}}
function find_last_opt(f,param$0)
{var param$1=param$0;
for(;;)
{if(param$1)
{var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1];
if(caml_call1(f,v$0))
{var v0=v$0,param=r$0;
for(;;)
{if(param)
{var r=param[3],v=param[2],l=param[1];
if(caml_call1(f,v)){var v0=v,param=r;continue}
var param=l;
continue}
return [0,v0]}}
var param$1=l$0;
continue}
return 0}}
function find_opt(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
r=param$0[3],
v=param$0[2],
l=param$0[1],
c=caml_call2(Ord[1],x,v);
if(0 === c)return [0,v];
var param$1=0 <= c?r:l,param$0=param$1;
continue}
return 0}}
function try_join(l,v,r)
{var switch$0=0;
if(0 !== l)
{var _wM_=max_elt(l);
if(0 <= caml_call2(Ord[1],_wM_,v))switch$0 = 1}
if(! switch$0)
{var switch$1=0;
if(0 !== r)
{var _wL_=min_elt(r);
if(0 <= caml_call2(Ord[1],v,_wL_))switch$1 = 1}
if(! switch$1)return join(l,v,r)}
return union(l,add(v,r))}
function map(f,t)
{if(t)
{var
r=t[3],
v=t[2],
l=t[1],
l$0=map(f,l),
v$0=caml_call1(f,v),
r$0=map(f,r);
if(l === l$0 && v === v$0 && r === r$0)return t;
return try_join(l$0,v$0,r$0)}
return 0}
function filter_map(f,t)
{if(t)
{var
r=t[3],
v=t[2],
l=t[1],
t1=filter_map(f,l),
v$0=caml_call1(f,v),
t2=filter_map(f,r);
if(v$0)
{var v$1=v$0[1];
if(l === t1 && v === v$1 && r === t2)return t;
return try_join(t1,v$1,t2)}
if(t1)
{if(t2)
{var _wK_=remove_min_elt(t2);
return try_join(t1,min_elt(t2),_wK_)}
return t1}
return t2}
return 0}
function of_list(l)
{if(l)
{var _wz_=l[2],_wA_=l[1];
if(_wz_)
{var _wB_=_wz_[2],_wC_=_wz_[1];
if(_wB_)
{var _wD_=_wB_[2],_wE_=_wB_[1];
if(_wD_)
{var _wF_=_wD_[2],_wG_=_wD_[1];
if(_wF_)
{if(_wF_[2])
{var
l$0=sort_uniq(Ord[1],l),
sub=
function(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 _wH_=l[2];
if(_wH_)
{var l$4=_wH_[2],x1=_wH_[1],x0$0=l[1];
return [0,[0,[0,0,x0$0,0,1],x1,0,2],l$4]}}
break;
default:
if(l)
{var _wI_=l[2];
if(_wI_)
{var _wJ_=_wI_[2];
if(_wJ_)
{var l$5=_wJ_[2],x2=_wJ_[1],x1$0=_wI_[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)
{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]}
throw [0,Assert_failure,_X_]};
return sub(length$1(l$0),l$0)[1]}
var x4=_wF_[1];
return add(x4,add(_wG_,add(_wE_,add(_wC_,singleton(_wA_)))))}
return add(_wG_,add(_wE_,add(_wC_,singleton(_wA_))))}
return add(_wE_,add(_wC_,singleton(_wA_)))}
return add(_wC_,singleton(_wA_))}
return singleton(_wA_)}
return empty}
function add_seq(i,m)
{return fold_left(function(s,x){return add(x,s)},m,i)}
function of_seq(i){return add_seq(i,empty)}
function seq_of_enum(c,param)
{if(c)
{var rest=c[3],t=c[2],x=c[1],_wx_=cons_enum(t,rest);
return [0,x,function(_wy_){return seq_of_enum(_wx_,_wy_)}]}
return 0}
function to_seq(c)
{var _wv_=cons_enum(c,0);
return function(_ww_){return seq_of_enum(_wv_,_ww_)}}
function snoc_enum(s,e)
{var s$0=s,e$0=e;
for(;;)
{if(s$0)
{var
s$1=s$0[3],
v=s$0[2],
l=s$0[1],
e$1=[0,v,l,e$0],
s$0=s$1,
e$0=e$1;
continue}
return e$0}}
function rev_seq_of_enum(c,param)
{if(c)
{var rest=c[3],t=c[2],x=c[1],_wt_=snoc_enum(t,rest);
return [0,x,function(_wu_){return rev_seq_of_enum(_wt_,_wu_)}]}
return 0}
function to_rev_seq(c)
{var _wr_=snoc_enum(c,0);
return function(_ws_){return rev_seq_of_enum(_wr_,_ws_)}}
function to_seq_from(low,s)
{var s$0=s,c=0;
for(;;)
{if(s$0)
{var r=s$0[3],v=s$0[2],l=s$0[1],n=caml_call2(Ord[1],v,low);
if(0 !== n)
{if(0 <= n){var c$0=[0,v,r,c],s$0=l,c=c$0;continue}
var s$0=r;
continue}
var _wp_=[0,v,r,c]}
else
var _wp_=c;
return function(_wq_){return seq_of_enum(_wp_,_wq_)}}}
return [0,
empty,
is_empty,
mem,
add,
singleton,
remove,
union,
inter,
disjoint,
diff,
compare,
equal,
subset,
iter,
map,
fold,
for_all,
exists,
filter,
filter_map,
partition,
cardinal,
elements,
min_elt,
min_elt_opt,
max_elt,
max_elt_opt,
min_elt,
min_elt_opt,
split,
find,
find_opt,
find_first,
find_first_opt,
find_last,
find_last_opt,
of_list,
to_seq_from,
to_seq,
to_rev_seq,
add_seq,
of_seq]}];
caml_register_global(801,Stdlib_Set,"Stdlib__Set");
var
Stdlib_Map=
[0,
function(Ord)
{function height(param){if(param){var h=param[5];return h}return 0}
function create(l,x,d,r)
{var hl=height(l),hr=height(r),_wo_=hr <= hl?hl + 1 | 0:hr + 1 | 0;
return [0,l,x,d,r,_wo_]}
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)
{var lr=l[4],ld=l[3],lv=l[2],ll=l[1],_wj_=height(lr);
if(_wj_ <= height(ll))return create(ll,lv,ld,create(lr,x,d,r));
if(lr)
{var
lrr=lr[4],
lrd=lr[3],
lrv=lr[2],
lrl=lr[1],
_wk_=create(lrr,x,d,r);
return create(create(ll,lv,ld,lrl),lrv,lrd,_wk_)}
return invalid_arg(cst_Map_bal)}
return invalid_arg(cst_Map_bal$0)}
if((hl + 2 | 0) < hr)
{if(r)
{var rr=r[4],rd=r[3],rv=r[2],rl=r[1],_wl_=height(rl);
if(_wl_ <= height(rr))return create(create(l,x,d,rl),rv,rd,rr);
if(rl)
{var
rlr=rl[4],
rld=rl[3],
rlv=rl[2],
rll=rl[1],
_wm_=create(rlr,rv,rd,rr);
return create(create(l,x,d,rll),rlv,rld,_wm_)}
return invalid_arg(cst_Map_bal$1)}
return invalid_arg(cst_Map_bal$2)}
var _wn_=hr <= hl?hl + 1 | 0:hr + 1 | 0;
return [0,l,x,d,r,_wn_]}
var empty=0;
function is_empty(param){return param?0:1}
function add(x,data,m)
{if(m)
{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)}
return [0,0,x,data,0,1]}
function find(x,param)
{var param$0=param;
for(;;)
{if(param$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 d;
var param$1=0 <= c?r:l,param$0=param$1;
continue}
throw Not_found}}
function find_first(f,param$0)
{var param$1=param$0;
for(;;)
{if(param$1)
{var
r$0=param$1[4],
d$0=param$1[3],
v$0=param$1[2],
l$0=param$1[1];
if(caml_call1(f,v$0))
{var v0=v$0,d0=d$0,param=l$0;
for(;;)
{if(param)
{var r=param[4],d=param[3],v=param[2],l=param[1];
if(caml_call1(f,v)){var v0=v,d0=d,param=l;continue}
var param=r;
continue}
return [0,v0,d0]}}
var param$1=r$0;
continue}
throw Not_found}}
function find_first_opt(f,param$0)
{var param$1=param$0;
for(;;)
{if(param$1)
{var
r$0=param$1[4],
d$0=param$1[3],
v$0=param$1[2],
l$0=param$1[1];
if(caml_call1(f,v$0))
{var v0=v$0,d0=d$0,param=l$0;
for(;;)
{if(param)
{var r=param[4],d=param[3],v=param[2],l=param[1];
if(caml_call1(f,v)){var v0=v,d0=d,param=l;continue}
var param=r;
continue}
return [0,[0,v0,d0]]}}
var param$1=r$0;
continue}
return 0}}
function find_last(f,param$0)
{var param$1=param$0;
for(;;)
{if(param$1)
{var
r$0=param$1[4],
d$0=param$1[3],
v$0=param$1[2],
l$0=param$1[1];
if(caml_call1(f,v$0))
{var v0=v$0,d0=d$0,param=r$0;
for(;;)
{if(param)
{var r=param[4],d=param[3],v=param[2],l=param[1];
if(caml_call1(f,v)){var v0=v,d0=d,param=r;continue}
var param=l;
continue}
return [0,v0,d0]}}
var param$1=l$0;
continue}
throw Not_found}}
function find_last_opt(f,param$0)
{var param$1=param$0;
for(;;)
{if(param$1)
{var
r$0=param$1[4],
d$0=param$1[3],
v$0=param$1[2],
l$0=param$1[1];
if(caml_call1(f,v$0))
{var v0=v$0,d0=d$0,param=r$0;
for(;;)
{if(param)
{var r=param[4],d=param[3],v=param[2],l=param[1];
if(caml_call1(f,v)){var v0=v,d0=d,param=r;continue}
var param=l;
continue}
return [0,[0,v0,d0]]}}
var param$1=l$0;
continue}
return 0}}
function find_opt(x,param)
{var param$0=param;
for(;;)
{if(param$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 param$1=0 <= c?r:l,param$0=param$1;
continue}
return 0}}
function mem(x,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
r=param$0[4],
v=param$0[2],
l=param$0[1],
c=caml_call2(Ord[1],x,v),
_wi_=0 === c?1:0;
if(_wi_)return _wi_;
var param$1=0 <= c?r:l,param$0=param$1;
continue}
return 0}}
function min_binding(param)
{var param$0=param;
for(;;)
{if(param$0)
{var _wh_=param$0[1];
if(_wh_){var param$0=_wh_;continue}
var d=param$0[3],v=param$0[2];
return [0,v,d]}
throw Not_found}}
function min_binding_opt(param)
{var param$0=param;
for(;;)
{if(param$0)
{var _wg_=param$0[1];
if(_wg_){var param$0=_wg_;continue}
var d=param$0[3],v=param$0[2];
return [0,[0,v,d]]}
return 0}}
function max_binding(param)
{var param$0=param;
for(;;)
{if(param$0)
{if(param$0[4]){var param$1=param$0[4],param$0=param$1;continue}
var d=param$0[3],v=param$0[2];
return [0,v,d]}
throw Not_found}}
function max_binding_opt(param)
{var param$0=param;
for(;;)
{if(param$0)
{if(param$0[4]){var param$1=param$0[4],param$0=param$1;continue}
var d=param$0[3],v=param$0[2];
return [0,[0,v,d]]}
return 0}}
function remove_min_binding(param)
{if(param)
{var _wf_=param[1];
if(_wf_)
{var r=param[4],d=param[3],v=param[2];
return bal(remove_min_binding(_wf_),v,d,r)}
var r$0=param[4];
return r$0}
return invalid_arg(cst_Map_remove_min_elt)}
function _vQ_(t1,t2)
{if(t1)
{if(t2)
{var match=min_binding(t2),d=match[2],x=match[1];
return bal(t1,x,d,remove_min_binding(t2))}
return t1}
return t2}
function remove(x,m)
{if(m)
{var r=m[4],d=m[3],v=m[2],l=m[1],c=caml_call2(Ord[1],x,v);
if(0 === c)return _vQ_(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)}
return 0}
function update(x,f,m)
{if(m)
{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)
{var match=caml_call1(f,[0,d]);
if(match)
{var data=match[1];return d === data?m:[0,l,x,data,r,h]}
return _vQ_(l,r)}
if(0 <= c){var rr=update(x,f,r);return r === rr?m:bal(l,v,d,rr)}
var ll=update(x,f,l);
return l === ll?m:bal(ll,v,d,r)}
var match$0=caml_call1(f,0);
if(match$0){var data$0=match$0[1];return [0,0,x,data$0,0,1]}
return 0}
function iter(f,param)
{var param$0=param;
for(;;)
{if(param$0)
{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);
var param$0=r;
continue}
return 0}}
function map(f,param)
{if(param)
{var
h=param[5],
r=param[4],
d=param[3],
v=param[2],
l=param[1],
l$0=map(f,l),
d$0=caml_call1(f,d),
r$0=map(f,r);
return [0,l$0,v,d$0,r$0,h]}
return 0}
function mapi(f,param)
{if(param)
{var
h=param[5],
r=param[4],
d=param[3],
v=param[2],
l=param[1],
l$0=mapi(f,l),
d$0=caml_call2(f,v,d),
r$0=mapi(f,r);
return [0,l$0,v,d$0,r$0,h]}
return 0}
function fold(f,m,accu)
{var m$0=m,accu$0=accu;
for(;;)
{if(m$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;
continue}
return accu$0}}
function for_all(p,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
r=param$0[4],
d=param$0[3],
v=param$0[2],
l=param$0[1],
_wc_=caml_call2(p,v,d);
if(_wc_)
{var _wd_=for_all(p,l);
if(_wd_){var param$0=r;continue}
var _we_=_wd_}
else
var _we_=_wc_;
return _we_}
return 1}}
function exists(p,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
r=param$0[4],
d=param$0[3],
v=param$0[2],
l=param$0[1],
_v$_=caml_call2(p,v,d);
if(_v$_)
var _wa_=_v$_;
else
{var _wb_=exists(p,l);
if(! _wb_){var param$0=r;continue}
var _wa_=_wb_}
return _wa_}
return 0}}
function add_min_binding(k,x,param)
{if(param)
{var r=param[4],d=param[3],v=param[2],l=param[1];
return bal(add_min_binding(k,x,l),v,d,r)}
return singleton(k,x)}
function add_max_binding(k,x,param)
{if(param)
{var r=param[4],d=param[3],v=param[2],l=param[1];
return bal(l,v,d,add_max_binding(k,x,r))}
return singleton(k,x)}
function join(l,v,d,r)
{if(l)
{if(r)
{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)}
return add_max_binding(v,d,l)}
return add_min_binding(v,d,r)}
function concat(t1,t2)
{if(t1)
{if(t2)
{var match=min_binding(t2),d=match[2],x=match[1];
return join(t1,x,d,remove_min_binding(t2))}
return t1}
return t2}
function concat_or_join(t1,v,d,t2)
{if(d){var d$0=d[1];return join(t1,v,d$0,t2)}return concat(t1,t2)}
function split(x,param)
{if(param)
{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)]}
return _Y_}
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],
_v7_=merge(f,r1,r2),
_v8_=caml_call3(f,v1,[0,d1],d2);
return concat_or_join(merge(f,l1,l2),v1,_v8_,_v7_)}}
else
if(! s2)return 0;
if(s2)
{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],
_v9_=merge(f,r1$0,r2$0),
_v__=caml_call3(f,v2,d1$0,[0,d2$0]);
return concat_or_join(merge(f,l1$0,l2$0),v2,_v__,_v9_)}
throw [0,Assert_failure,_Z_]}
function union(f,s1,s2)
{if(s1)
{if(s2)
{var
h2=s2[5],
r2=s2[4],
d2=s2[3],
v2=s2[2],
l2=s2[1],
h1=s1[5],
r1=s1[4],
d1=s1[3],
v1=s1[2],
l1=s1[1];
if(h2 <= h1)
{var
match=split(v1,s2),
r2$0=match[3],
d2$0=match[2],
l2$0=match[1],
l=union(f,l1,l2$0),
r=union(f,r1,r2$0);
if(d2$0)
{var d2$1=d2$0[1];
return concat_or_join(l,v1,caml_call3(f,v1,d1,d2$1),r)}
return join(l,v1,d1,r)}
var
match$0=split(v2,s1),
r1$0=match$0[3],
d1$0=match$0[2],
l1$0=match$0[1],
l$0=union(f,l1$0,l2),
r$0=union(f,r1$0,r2);
if(d1$0)
{var d1$1=d1$0[1];
return concat_or_join(l$0,v2,caml_call3(f,v2,d1$1,d2),r$0)}
return join(l$0,v2,d2,r$0)}
var s=s1}
else
var s=s2;
return s}
function filter(p,m)
{if(m)
{var
r=m[4],
d=m[3],
v=m[2],
l=m[1],
l$0=filter(p,l),
pvd=caml_call2(p,v,d),
r$0=filter(p,r);
if(pvd)
{if(l === l$0 && r === r$0)return m;return join(l$0,v,d,r$0)}
return concat(l$0,r$0)}
return 0}
function filter_map(f,param)
{if(param)
{var
r=param[4],
d=param[3],
v=param[2],
l=param[1],
l$0=filter_map(f,l),
fvd=caml_call2(f,v,d),
r$0=filter_map(f,r);
if(fvd){var d$0=fvd[1];return join(l$0,v,d$0,r$0)}
return concat(l$0,r$0)}
return 0}
function partition(p,param)
{if(param)
{var
r=param[4],
d=param[3],
v=param[2],
l=param[1],
match=partition(p,l),
lf=match[2],
lt=match[1],
pvd=caml_call2(p,v,d),
match$0=partition(p,r),
rf=match$0[2],
rt=match$0[1];
if(pvd){var _v5_=concat(lf,rf);return [0,join(lt,v,d,rt),_v5_]}
var _v6_=join(lf,v,d,rf);
return [0,concat(lt,rt),_v6_]}
return ___}
function cons_enum(m,e)
{var m$0=m,e$0=e;
for(;;)
{if(m$0)
{var
r=m$0[4],
d=m$0[3],
v=m$0[2],
m$1=m$0[1],
e$1=[0,v,d,r,e$0],
m$0=m$1,
e$0=e$1;
continue}
return e$0}}
function compare(cmp,m1,m2)
{var e2$2=cons_enum(m2,0),e1$2=cons_enum(m1,0),e1=e1$2,e2=e2$2;
for(;;)
{if(e1)
{if(e2)
{var
e2$0=e2[4],
r2=e2[3],
d2=e2[2],
v2=e2[1],
e1$0=e1[4],
r1=e1[3],
d1=e1[2],
v1=e1[1],
c=caml_call2(Ord[1],v1,v2);
if(0 === c)
{var c$0=caml_call2(cmp,d1,d2);
if(0 === c$0)
{var
e2$1=cons_enum(r2,e2$0),
e1$1=cons_enum(r1,e1$0),
e1=e1$1,
e2=e2$1;
continue}
return c$0}
return c}
return 1}
return e2?-1:0}}
function equal(cmp,m1,m2)
{var e2$2=cons_enum(m2,0),e1$2=cons_enum(m1,0),e1=e1$2,e2=e2$2;
for(;;)
{if(e1)
{if(e2)
{var
e2$0=e2[4],
r2=e2[3],
d2=e2[2],
v2=e2[1],
e1$0=e1[4],
r1=e1[3],
d1=e1[2],
v1=e1[1],
_v2_=0 === caml_call2(Ord[1],v1,v2)?1:0;
if(_v2_)
{var _v3_=caml_call2(cmp,d1,d2);
if(_v3_)
{var
e2$1=cons_enum(r2,e2$0),
e1$1=cons_enum(r1,e1$0),
e1=e1$1,
e2=e2$1;
continue}
var _v4_=_v3_}
else
var _v4_=_v2_;
return _v4_}
return 0}
return e2?0:1}}
function cardinal(param)
{if(param)
{var r=param[4],l=param[1],_v1_=cardinal(r);
return (cardinal(l) + 1 | 0) + _v1_ | 0}
return 0}
function bindings_aux(accu,param)
{var accu$0=accu,param$0=param;
for(;;)
{if(param$0)
{var
r=param$0[4],
d=param$0[3],
v=param$0[2],
l=param$0[1],
accu$1=[0,[0,v,d],bindings_aux(accu$0,r)],
accu$0=accu$1,
param$0=l;
continue}
return accu$0}}
function bindings(s){return bindings_aux(0,s)}
function add_seq(i,m)
{return fold_left
(function(m,param)
{var v=param[2],k=param[1];return add(k,v,m)},
m,
i)}
function of_seq(i){return add_seq(i,empty)}
function seq_of_enum(c,param)
{if(c)
{var rest=c[4],t=c[3],v=c[2],k=c[1],_vZ_=cons_enum(t,rest);
return [0,[0,k,v],function(_v0_){return seq_of_enum(_vZ_,_v0_)}]}
return 0}
function to_seq(m)
{var _vX_=cons_enum(m,0);
return function(_vY_){return seq_of_enum(_vX_,_vY_)}}
function snoc_enum(s,e)
{var s$0=s,e$0=e;
for(;;)
{if(s$0)
{var
s$1=s$0[4],
d=s$0[3],
v=s$0[2],
l=s$0[1],
e$1=[0,v,d,l,e$0],
s$0=s$1,
e$0=e$1;
continue}
return e$0}}
function rev_seq_of_enum(c,param)
{if(c)
{var rest=c[4],t=c[3],v=c[2],k=c[1],_vV_=snoc_enum(t,rest);
return [0,
[0,k,v],
function(_vW_){return rev_seq_of_enum(_vV_,_vW_)}]}
return 0}
function to_rev_seq(c)
{var _vT_=snoc_enum(c,0);
return function(_vU_){return rev_seq_of_enum(_vT_,_vU_)}}
function to_seq_from(low,m)
{var m$0=m,c=0;
for(;;)
{if(m$0)
{var
r=m$0[4],
d=m$0[3],
v=m$0[2],
l=m$0[1],
n=caml_call2(Ord[1],v,low);
if(0 !== n)
{if(0 <= n){var c$0=[0,v,d,r,c],m$0=l,c=c$0;continue}
var m$0=r;
continue}
var _vR_=[0,v,d,r,c]}
else
var _vR_=c;
return function(_vS_){return seq_of_enum(_vR_,_vS_)}}}
return [0,
empty,
is_empty,
mem,
add,
update,
singleton,
remove,
merge,
union,
compare,
equal,
iter,
fold,
for_all,
exists,
filter,
filter_map,
partition,
cardinal,
bindings,
min_binding,
min_binding_opt,
max_binding,
max_binding_opt,
min_binding,
min_binding_opt,
split,
find,
find_opt,
find_first,
find_first_opt,
find_last,
find_last_opt,
map,
mapi,
to_seq,
to_rev_seq,
to_seq_from,
add_seq,
of_seq]}];
caml_register_global(802,Stdlib_Map,"Stdlib__Map");
var Empty=[248,cst_Stdlib_Stack_Empty,caml_fresh_oo_id(0)];
function create$0(param){return [0,0,0]}
function clear(s){s[1] = 0;s[2] = 0;return 0}
function copy$3(s){return [0,s[1],s[2]]}
function push(x,s){s[1] = [0,x,s[1]];s[2] = s[2] + 1 | 0;return 0}
function pop(s)
{var _vP_=s[1];
if(_vP_)
{var tl=_vP_[2],hd=_vP_[1];s[1] = tl;s[2] = s[2] - 1 | 0;return hd}
throw Empty}
function pop_opt(s)
{var _vO_=s[1];
if(_vO_)
{var tl=_vO_[2],hd=_vO_[1];s[1] = tl;s[2] = s[2] - 1 | 0;return [0,hd]}
return 0}
function top(s)
{var _vN_=s[1];if(_vN_){var hd=_vN_[1];return hd}throw Empty}
function top_opt(s)
{var _vM_=s[1];if(_vM_){var hd=_vM_[1];return [0,hd]}return 0}
function is_empty$0(s){return 0 === s[1]?1:0}
function length$2(s){return s[2]}
function iter$7(f,s){return iter$2(f,s[1])}
function fold$2(f,acc,s){return fold_left$0(f,acc,s[1])}
function to_seq$6(s){return to_seq$1(s[1])}
function add_seq(q,i){return iter(function(x){return push(x,q)},i)}
function of_seq$4(g){var s=create$0(0);add_seq(s,g);return s}
var
Stdlib_Stack=
[0,
Empty,
create$0,
push,
pop,
pop_opt,
top,
top_opt,
clear,
copy$3,
is_empty$0,
length$2,
iter$7,
fold$2,
to_seq$6,
add_seq,
of_seq$4];
caml_register_global(803,Stdlib_Stack,"Stdlib__Stack");
var Empty$0=[248,cst_Stdlib_Queue_Empty,caml_fresh_oo_id(0)];
function create$1(param){return [0,0,0,0]}
function clear$0(q){q[1] = 0;q[2] = 0;q[3] = 0;return 0}
function add(x,q)
{var cell=[0,x,0],_vL_=q[3];
return _vL_
?(q[1] = q[1] + 1 | 0,_vL_[2] = cell,q[3] = cell,0)
:(q[1] = 1,q[2] = cell,q[3] = cell,0)}
function peek(q)
{var _vK_=q[2];if(_vK_){var content=_vK_[1];return content}throw Empty$0}
function peek_opt(q)
{var _vJ_=q[2];if(_vJ_){var content=_vJ_[1];return [0,content]}return 0}
function take$0(q)
{var _vH_=q[2];
if(_vH_)
{var _vI_=_vH_[1];
if(_vH_[2])
{var next=_vH_[2];q[1] = q[1] - 1 | 0;q[2] = next;return _vI_}
clear$0(q);
return _vI_}
throw Empty$0}
function take_opt(q)
{var _vF_=q[2];
if(_vF_)
{var _vG_=_vF_[1];
if(_vF_[2])
{var next=_vF_[2];q[1] = q[1] - 1 | 0;q[2] = next;return [0,_vG_]}
clear$0(q);
return [0,_vG_]}
return 0}
function copy$4(q)
{var q_res=[0,q[1],0,0],prev=0,cell=q[2];
for(;;)
{if(cell)
{var content=cell[1],next=cell[2],res=[0,content,0];
if(prev)prev[2] = res;else q_res[2] = res;
var prev=res,cell=next;
continue}
q_res[3] = prev;
return q_res}}
function is_empty$1(q){return 0 === q[1]?1:0}
function length$3(q){return q[1]}
function iter$8(f,q)
{var cell=q[2];
for(;;)
{if(cell)
{var content=cell[1],next=cell[2];
caml_call1(f,content);
var cell=next;
continue}
return 0}}
function fold$3(f,accu$1,q)
{var accu=accu$1,cell=q[2];
for(;;)
{if(cell)
{var
content=cell[1],
next=cell[2],
accu$0=caml_call2(f,accu,content),
accu=accu$0,
cell=next;
continue}
return accu}}
function transfer(q1,q2)
{var _vD_=0 < q1[1]?1:0;
if(_vD_)
{var _vE_=q2[3];
return _vE_
?(q2[1]
=
q2[1]
+
q1[1]
|
0,
_vE_[2]
=
q1[2],
q2[3]
=
q1[3],
clear$0(q1))
:(q2[1] = q1[1],q2[2] = q1[2],q2[3] = q1[3],clear$0(q1))}
return _vD_}
function to_seq$7(q)
{function aux(c,param)
{if(c)
{var x=c[1],next=c[2];
return [0,x,function(_vC_){return aux(next,_vC_)}]}
return 0}
var _vA_=q[2];
return function(_vB_){return aux(_vA_,_vB_)}}
function add_seq$0(q,i){return iter(function(x){return add(x,q)},i)}
function of_seq$5(g){var q=create$1(0);add_seq$0(q,g);return q}
var
Stdlib_Queue=
[0,
Empty$0,
create$1,
add,
add,
take$0,
take_opt,
take$0,
peek,
peek_opt,
peek,
clear$0,
copy$4,
is_empty$1,
length$3,
iter$8,
fold$3,
transfer,
to_seq$7,
add_seq$0,
of_seq$5];
caml_register_global(804,Stdlib_Queue,"Stdlib__Queue");
var
Failure$0=[248,cst_Stdlib_Stream_Failure,caml_fresh_oo_id(0)],
Error=[248,cst_Stdlib_Stream_Error,caml_fresh_oo_id(0)];
function count(param)
{if(param){var match=param[1],count=match[1];return count}return 0}
function data(param)
{if(param){var match=param[1],data=match[2];return data}return 0}
function fill_buff(b)
{b[3] = input(b[1],b[2],0,caml_ml_bytes_length(b[2]));b[4] = 0;return 0}
function get_data(count,d)
{var d$0=d;
for(;;)
{if(typeof d$0 !== "number")
switch(d$0[0])
{case 1:
var d2=d$0[2],d1=d$0[1],match=get_data(count,d1);
if(typeof match === "number")
{var d$0=d2;continue}
else
{if(0 === match[0])
{var d11=match[2],a=match[1];return [0,a,[1,d11,d2]]}
throw [0,Assert_failure,_$_]}
case 2:
var
f=d$0[1],
_vw_=caml_obj_tag(f),
d$1=250 === _vw_?f[1]:246 === _vw_?force_lazy_block(f):f,
d$0=d$1;
continue;
case 3:
var _vx_=d$0[1],_vy_=_vx_[1];
if(_vy_)
{var _vz_=_vy_[1];
if(_vz_){var a$0=_vz_[1];_vx_[1] = 0;return [0,a$0,d$0]}
return 0}
var match$0=caml_call1(_vx_[2],count);
if(match$0){var a$1=match$0[1];return [0,a$1,d$0]}
_vx_[1] = _aa_;
return 0;
case 4:
var b=d$0[1];
if(b[3] <= b[4])fill_buff(b);
if(0 === b[3])return 0;
var r=caml_bytes_unsafe_get(b[2],b[4]);
b[4] = b[4] + 1 | 0;
return [0,r,d$0]
}
return d$0}}
function peek_data(s)
{for(;;)
{var _vr_=s[2];
if(typeof _vr_ === "number")
return 0;
else
switch(_vr_[0])
{case 0:var a=_vr_[1];return [0,a];
case 1:
var d=get_data(s[1],s[2]);
if(typeof d === "number")
return 0;
else
{if(0 === d[0]){var a$0=d[1];s[2] = d;return [0,a$0]}
throw [0,Assert_failure,_ab_]}
case 2:
var
f=_vr_[1],
_vs_=caml_obj_tag(f),
_vt_=250 === _vs_?f[1]:246 === _vs_?force_lazy_block(f):f;
s[2] = _vt_;
continue;
case 3:
var _vu_=_vr_[1],_vv_=_vu_[1];
if(_vv_){var a$1=_vv_[1];return a$1}
var x=caml_call1(_vu_[2],s[1]);
_vu_[1] = [0,x];
return x;
default:
var b=_vr_[1];
if(b[3] <= b[4])fill_buff(b);
return 0 === b[3]
?(s[2] = 0,0)
:[0,caml_bytes_unsafe_get(b[2],b[4])]}}}
function peek$0(param)
{if(param){var s=param[1];return peek_data(s)}return 0}
function junk_data(s)
{for(;;)
{var _vp_=s[2];
if(typeof _vp_ !== "number")
switch(_vp_[0])
{case 0:var d=_vp_[2];s[1] = s[1] + 1 | 0;s[2] = d;return 0;
case 3:
var _vq_=_vp_[1];
if(_vq_[1]){s[1] = s[1] + 1 | 0;_vq_[1] = 0;return 0}
break;
case 4:
var b=_vp_[1];
if(b[3] <= b[4])fill_buff(b);
return 0 === b[3]
?(s[2] = 0,0)
:(s[1] = s[1] + 1 | 0,b[4] = b[4] + 1 | 0,0)
}
var match=peek_data(s);
if(match)continue;
return 0}}
function junk(param)
{if(param){var data=param[1];return junk_data(data)}return 0}
function nget_data(n,s)
{if(0 < n)
{var match=peek_data(s);
if(match)
{var a=match[1];
junk_data(s);
var
match$0=nget_data(n - 1 | 0,s),
k=match$0[3],
d=match$0[2],
al=match$0[1];
return [0,[0,a,al],[0,a,d],k + 1 | 0]}
return [0,0,s[2],0]}
return [0,0,s[2],0]}
function npeek(n,param)
{if(param)
{var
d$0=param[1],
match=nget_data(n,d$0),
len=match[3],
d=match[2],
al=match[1];
d$0[1] = d$0[1] - len | 0;
d$0[2] = d;
return al}
return 0}
function next(s)
{var match=peek$0(s);
if(match){var a=match[1];junk(s);return a}
throw Failure$0}
function empty$2(s){var match=peek$0(s);if(match)throw Failure$0;return 0}
function iter$9(f,strm)
{for(;;)
{var match=peek$0(strm);
if(match){var a=match[1];junk(strm);caml_call1(f,a);continue}
return 0}}
function from(f){return [0,[0,0,[3,[0,0,f]]]]}
function of_list$1(l)
{var _vo_=0;
return [0,[0,0,fold_right(function(x,l){return [0,x,l]},l,_vo_)]]}
function of_string(s)
{var count=[0,0];
return from
(function(param)
{var c=count[1];
return c < caml_ml_string_length(s)
?(count[1]++,[0,caml_string_get(s,c)])
:0})}
function of_bytes$0(s)
{var count=[0,0];
return from
(function(param)
{var c=count[1];
return c < caml_ml_bytes_length(s)
?(count[1]++,[0,caml_bytes_get(s,c)])
:0})}
function of_channel(ic)
{return [0,[0,0,[4,[0,ic,caml_create_bytes(4096),0,0]]]]}
function iapp(i,s){var _vn_=data(s);return [0,[0,0,[1,data(i),_vn_]]]}
function icons(i,s){return [0,[0,0,[0,i,data(s)]]]}
function ising(i){return [0,[0,0,[0,i,0]]]}
function lapp(f,s)
{return [0,
[0,
0,
[2,
[246,
function(_vl_)
{var _vm_=data(s);return [1,data(caml_call1(f,0)),_vm_]}]]]]}
function lcons(f,s)
{return [0,
[0,
0,
[2,
[246,
function(_vj_)
{var _vk_=data(s);return [0,caml_call1(f,0),_vk_]}]]]]}
function lsing(f)
{return [0,[0,0,[2,[246,function(_vi_){return [0,caml_call1(f,0),0]}]]]]}
var sempty=0;
function slazy(f)
{return [0,[0,0,[2,[246,function(_vh_){return data(caml_call1(f,0))}]]]]}
function dump_data(f,param)
{if(typeof param === "number")
return print_string(cst_Sempty);
else
switch(param[0])
{case 0:
var d=param[2],a=param[1];
print_string(cst_Scons);
caml_call1(f,a);
print_string(cst$7);
dump_data(f,d);
return print_string(cst$8);
case 1:
var d2=param[2],d1=param[1];
print_string(cst_Sapp);
dump_data(f,d1);
print_string(cst$9);
dump_data(f,d2);
return print_string(cst$10);
case 2:return print_string(cst_Slazy);
case 3:return print_string(cst_Sgen);
default:return print_string(cst_Sbuffio)}}
function dump(f,s)
{print_string(cst_count);
print_int(count(s));
print_string(cst_data);
dump_data(f,data(s));
print_string(cst$6);
return print_newline(0)}
var
Stdlib_Stream=
[0,
Failure$0,
Error,
from,
of_list$1,
of_string,
of_bytes$0,
of_channel,
iter$9,
next,
empty$2,
peek$0,
junk,
count,
npeek,
iapp,
icons,
ising,
lapp,
lcons,
lsing,
sempty,
slazy,
dump];
caml_register_global(805,Stdlib_Stream,"Stdlib__Stream");
function create$2(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 to_bytes$0(b){return sub(b[1],0,b[2])}
function sub$3(b,ofs,len)
{if(0 <= ofs && 0 <= len && ! ((b[2] - len | 0) < ofs))
return sub_string(b[1],ofs,len);
return invalid_arg(cst_Buffer_sub)}
function blit$3(src,srcoff,dst,dstoff,len)
{if
(0
<=
len
&&
0
<=
srcoff
&&
!
((src[2] - len | 0) < srcoff)
&&
0
<=
dstoff
&&
!
((caml_ml_bytes_length(dst) - len | 0) < dstoff))
return caml_blit_bytes(src[1],srcoff,dst,dstoff,len);
return invalid_arg(cst_Buffer_blit)}
function nth$0(b,ofs)
{if(0 <= ofs && ! (b[2] <= ofs))return caml_bytes_unsafe_get(b[1],ofs);
return invalid_arg(cst_Buffer_nth)}
function length$4(b){return b[2]}
function clear$1(b){b[2] = 0;return 0}
function reset(b)
{b[2] = 0;b[1] = b[4];b[3] = caml_ml_bytes_length(b[1]);return 0}
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))
{new_len[1] = 2 * new_len[1] | 0;continue}
if(max_string_length < new_len[1])
if((old_pos + more | 0) <= max_string_length)
new_len[1] = max_string_length;
else
failwith(cst_Buffer_add_cannot_grow_buf);
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])
{if((old_pos + more | 0) <= b[3])return 0;
throw [0,Assert_failure,_ac_]}
throw [0,Assert_failure,_ad_]}}
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}
var uchar_utf_8_byte_length_max=4,uchar_utf_16_byte_length_max=4;
function add_utf_8_uchar(b,u)
{for(;;)
{var pos=b[2];
if(b[3] <= pos)resize(b,uchar_utf_8_byte_length_max);
var n=set_utf_8_uchar(b[1],pos,u);
if(0 === n){resize(b,uchar_utf_8_byte_length_max);continue}
b[2] = pos + n | 0;
return 0}}
function add_utf_16be_uchar(b,u)
{for(;;)
{var pos=b[2];
if(b[3] <= pos)resize(b,uchar_utf_16_byte_length_max);
var n=set_utf_16be_uchar(b[1],pos,u);
if(0 === n){resize(b,uchar_utf_16_byte_length_max);continue}
b[2] = pos + n | 0;
return 0}}
function add_utf_16le_uchar(b,u)
{for(;;)
{var pos=b[2];
if(b[3] <= pos)resize(b,uchar_utf_16_byte_length_max);
var n=set_utf_16le_uchar(b[1],pos,u);
if(0 === n){resize(b,uchar_utf_16_byte_length_max);continue}
b[2] = pos + n | 0;
return 0}}
function add_substring(b,s,offset,len)
{var _ve_=offset < 0?1:0;
if(_ve_)
var _vf_=_ve_;
else
var
_vg_=len < 0?1:0,
_vf_=_vg_ || ((caml_ml_string_length(s) - len | 0) < offset?1:0);
if(_vf_)invalid_arg(cst_Buffer_add_substring_add_s);
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,caml_string_of_bytes(s),offset,len)}
function add_string(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 add_bytes(b,s){return add_string(b,caml_string_of_bytes(s))}
function add_buffer(b,bs){return add_subbytes(b,bs[1],0,bs[2])}
function add_channel(b,ic,len)
{var _vc_=len < 0?1:0,_vd_=_vc_ || (max_string_length < len?1:0);
if(_vd_)invalid_arg(cst_Buffer_add_channel);
if(b[3] < (b[2] + len | 0))resize(b,len);
var already_read=0,ofs=b[2],to_read=len,_vb_=b[1];
for(;;)
{if(0 !== to_read)
{var r=input(ic,_vb_,ofs,to_read);
if(0 !== r)
{var
already_read$0=already_read + r | 0,
ofs$0=ofs + r | 0,
to_read$0=to_read - r | 0,
already_read=already_read$0,
ofs=ofs$0,
to_read=to_read$0;
continue}}
if((b[2] + already_read | 0) <= b[3])
{b[2] = b[2] + already_read | 0;
if(already_read < len)throw End_of_file;
return 0}
throw [0,Assert_failure,_ae_]}}
function output_buffer(oc,b){return output(oc,b[1],0,b[2])}
function add_substitute(b,f,s)
{var lim$1=caml_ml_string_length(s),previous=32,i$7=0;
for(;;)
{if(i$7 < lim$1)
{var current=caml_string_get(s,i$7);
if(36 === current)
{if(92 === previous)
{add_char(b,current);
var i$8=i$7 + 1 | 0,previous=32,i$7=i$8;
continue}
var start=i$7 + 1 | 0;
if(lim$1 <= start)throw Not_found;
var opening=caml_string_get(s,start),switch$0=0;
if(40 !== opening && 123 !== opening)
{var i$6=start + 1 | 0,lim$0=caml_ml_string_length(s),i$3=i$6;
for(;;)
{if(lim$0 <= i$3)
var stop=lim$0;
else
{var match=caml_string_get(s,i$3),switch$1=0;
if(91 <= match)
{if(97 <= match)
{if(! (123 <= match))switch$1 = 1}
else
if(95 === match)switch$1 = 1}
else
if(58 <= match)
{if(65 <= match)switch$1 = 1}
else
if(48 <= match)switch$1 = 1;
if(switch$1){var i$4=i$3 + 1 | 0,i$3=i$4;continue}
var stop=i$3}
var match$0=[0,sub$0(s,start,stop - start | 0),stop];
switch$0 = 1;
break}}
if(! switch$0)
{var i$5=start + 1 | 0,k$2=0;
if(40 === opening)
var _u$_=41;
else
{if(123 !== opening)throw [0,Assert_failure,_af_];var _u$_=125}
var lim=caml_ml_string_length(s),k=k$2,i=i$5;
for(;;)
{if(lim <= i)throw Not_found;
if(caml_string_get(s,i) === opening)
{var i$0=i + 1 | 0,k$0=k + 1 | 0,k=k$0,i=i$0;continue}
if(caml_string_get(s,i) !== _u$_)
{var i$2=i + 1 | 0,i=i$2;continue}
if(0 !== k)
{var i$1=i + 1 | 0,k$1=k - 1 | 0,k=k$1,i=i$1;continue}
var
match$0=
[0,sub$0(s,i$5,(i - start | 0) - 1 | 0),i + 1 | 0];
break}}
var next_i=match$0[2],ident=match$0[1];
add_string(b,caml_call1(f,ident));
var previous=32,i$7=next_i;
continue}
if(92 === previous)
{add_char(b,92);
add_char(b,current);
var i$9=i$7 + 1 | 0,previous=32,i$7=i$9;
continue}
if(92 === current)
{var i$10=i$7 + 1 | 0,previous=current,i$7=i$10;continue}
add_char(b,current);
var i$11=i$7 + 1 | 0,previous=current,i$7=i$11;
continue}
var _va_=92 === previous?1:0;
return _va_?add_char(b,previous):_va_}}
function truncate(b,len)
{if(0 <= len && ! (b[2] < len)){b[2] = len;return 0}
return invalid_arg(cst_Buffer_truncate)}
function to_seq$8(b)
{function aux(i,param)
{if(b[2] <= i)return 0;
var x=caml_bytes_unsafe_get(b[1],i),_u9_=i + 1 | 0;
return [0,x,function(_u__){return aux(_u9_,_u__)}]}
var _u7_=0;
return function(_u8_){return aux(_u7_,_u8_)}}
function to_seqi$3(b)
{function aux(i,param)
{if(b[2] <= i)return 0;
var x=caml_bytes_unsafe_get(b[1],i),_u5_=i + 1 | 0;
return [0,[0,i,x],function(_u6_){return aux(_u5_,_u6_)}]}
var _u3_=0;
return function(_u4_){return aux(_u3_,_u4_)}}
function add_seq$1(b,seq)
{return iter(function(_u2_){return add_char(b,_u2_)},seq)}
function of_seq$6(i){var b=create$2(32);add_seq$1(b,i);return b}
function add_int8(b,x)
{var new_position=b[2] + 1 | 0;
if(b[3] < new_position)resize(b,1);
caml_bytes_unsafe_set(b[1],b[2],x);
b[2] = new_position;
return 0}
function add_int16_ne(b,x)
{var new_position=b[2] + 2 | 0;
if(b[3] < new_position)resize(b,2);
caml_bytes_set16(b[1],b[2],x);
b[2] = new_position;
return 0}
function add_int32_ne(b,x)
{var new_position=b[2] + 4 | 0;
if(b[3] < new_position)resize(b,4);
caml_bytes_set32(b[1],b[2],x);
b[2] = new_position;
return 0}
function add_int64_ne(b,x)
{var new_position=b[2] + 8 | 0;
if(b[3] < new_position)resize(b,8);
caml_bytes_set64(b[1],b[2],x);
b[2] = new_position;
return 0}
function add_int16_le(b,x){return add_int16_ne(b,x)}
function add_int16_be(b,x)
{var x$0=caml_bswap16(x);return add_int16_ne(b,x$0)}
function add_int32_le(b,x){return add_int32_ne(b,x)}
function add_int32_be(b,x)
{var x$0=caml_int32_bswap(x);return add_int32_ne(b,x$0)}
function add_int64_le(b,x){return add_int64_ne(b,x)}
function add_int64_be(b,x)
{var x$0=caml_int64_bswap(x);return add_int64_ne(b,x$0)}
var
Stdlib_Buffer=
[0,
create$2,
contents,
to_bytes$0,
sub$3,
blit$3,
nth$0,
length$4,
clear$1,
reset,
output_buffer,
truncate,
add_char,
add_utf_8_uchar,
add_utf_16le_uchar,
add_utf_16be_uchar,
add_string,
add_bytes,
add_substring,
add_subbytes,
add_substitute,
add_buffer,
add_channel,
to_seq$8,
to_seqi$3,
add_seq$1,
of_seq$6,
add_int8,
add_int8,
add_int16_ne,
add_int16_be,
add_int16_le,
add_int16_ne,
add_int16_be,
add_int16_le,
add_int32_ne,
add_int32_be,
add_int32_le,
add_int64_ne,
add_int64_be,
add_int64_le];
caml_register_global(806,Stdlib_Buffer,"Stdlib__Buffer");
function create_char_set(param){return make$0(32,0)}
function add_in_char_set(char_set,c)
{var str_ind=c >>> 3 | 0,mask=1 << (c & 7);
return caml_bytes_set
(char_set,
str_ind,
char_of_int(caml_bytes_get(char_set,str_ind) | mask))}
function freeze_char_set(char_set){return of_bytes(char_set)}
function rev_char_set(char_set)
{var char_set$0=create_char_set(0),i=0;
for(;;)
{caml_bytes_set
(char_set$0,i,char_of_int(caml_string_get(char_set,i) ^ 255));
var _u1_=i + 1 | 0;
if(31 !== i){var i=_u1_;continue}
return caml_string_of_bytes(char_set$0)}}
function is_in_char_set(char_set,c)
{var str_ind=c >>> 3 | 0,mask=1 << (c & 7);
return 0 !== (caml_string_get(char_set,str_ind) & mask)?1:0}
function pad_of_pad_opt(pad_opt)
{if(pad_opt){var width=pad_opt[1];return [0,1,width]}return 0}
function param_format_of_ignored_format(ign,fmt)
{if(typeof ign === "number")
switch(ign)
{case 0:return [0,[0,fmt]];
case 1:return [0,[1,fmt]];
case 2:return [0,[19,fmt]];
default:return [0,[22,fmt]]}
else
switch(ign[0])
{case 0:var pad_opt=ign[1];return [0,[2,pad_of_pad_opt(pad_opt),fmt]];
case 1:
var pad_opt$0=ign[1];return [0,[3,pad_of_pad_opt(pad_opt$0),fmt]];
case 2:
var pad_opt$1=ign[2],iconv=ign[1];
return [0,[4,iconv,pad_of_pad_opt(pad_opt$1),0,fmt]];
case 3:
var pad_opt$2=ign[2],iconv$0=ign[1];
return [0,[5,iconv$0,pad_of_pad_opt(pad_opt$2),0,fmt]];
case 4:
var pad_opt$3=ign[2],iconv$1=ign[1];
return [0,[6,iconv$1,pad_of_pad_opt(pad_opt$3),0,fmt]];
case 5:
var pad_opt$4=ign[2],iconv$2=ign[1];
return [0,[7,iconv$2,pad_of_pad_opt(pad_opt$4),0,fmt]];
case 6:
var prec_opt=ign[2],pad_opt$5=ign[1];
if(prec_opt)var ndec=prec_opt[1],_u0_=[0,ndec];else var _u0_=0;
return [0,[8,_ag_,pad_of_pad_opt(pad_opt$5),_u0_,fmt]];
case 7:
var pad_opt$6=ign[1];return [0,[9,pad_of_pad_opt(pad_opt$6),fmt]];
case 8:
var fmtty=ign[2],pad_opt$7=ign[1];
return [0,[13,pad_opt$7,fmtty,fmt]];
case 9:
var fmtty$0=ign[2],pad_opt$8=ign[1];
return [0,[14,pad_opt$8,fmtty$0,fmt]];
case 10:
var char_set=ign[2],width_opt=ign[1];
return [0,[20,width_opt,char_set,fmt]];
default:var counter=ign[1];return [0,[21,counter,fmt]]}}
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,
_uY_=len < min_len?1:0;
if(_uY_)
{var
new_len=max$1(len * 2 | 0,min_len),
new_str=caml_create_bytes(new_len);
blit(buf[2],0,new_str,0,len);
buf[2] = new_str;
var _uZ_=0}
else
var _uZ_=_uY_;
return _uZ_}
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 0}
function buffer_add_string(buf,s)
{var str_len=caml_ml_string_length(s);
buffer_check_size(buf,str_len);
blit$0(s,0,buf[2],buf[1],str_len);
buf[1] = buf[1] + str_len | 0;
return 0}
function buffer_contents(buf){return sub_string(buf[2],0,buf[1])}
function char_of_iconv(iconv)
{switch(iconv)
{case 6:
case 7:return 120;
case 8:
case 9:return 88;
case 10:
case 11:return 111;
case 12:
case 15:return 117;
case 0:
case 1:
case 2:
case 13:return 100;
default:return 105}}
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_padty(buf,padty)
{switch(padty)
{case 0:return buffer_add_char(buf,45);
case 1:return 0;
default:return buffer_add_char(buf,48)}}
function bprint_ignored_flag(buf,ign_flag)
{return ign_flag?buffer_add_char(buf,95):ign_flag}
function bprint_pad_opt(buf,pad_opt)
{if(pad_opt)
{var width=pad_opt[1];
return buffer_add_string(buf,caml_string_of_jsbytes("" + width))}
return 0}
function bprint_padding(buf,pad)
{if(typeof pad === "number")
return 0;
else
{if(0 === pad[0])
{var n=pad[2],padty=pad[1];
bprint_padty(buf,padty);
return buffer_add_string(buf,caml_string_of_jsbytes("" + n))}
var padty$0=pad[1];
bprint_padty(buf,padty$0);
return buffer_add_char(buf,42)}}
function bprint_precision(buf,prec)
{if(typeof prec === "number")return prec?buffer_add_string(buf,cst$11):0;
var n=prec[1];
buffer_add_char(buf,46);
return buffer_add_string(buf,caml_string_of_jsbytes("" + n))}
function bprint_iconv_flag(buf,iconv)
{switch(iconv)
{case 1:
case 4:return buffer_add_char(buf,43);
case 2:
case 5:return buffer_add_char(buf,32);
case 7:
case 9:
case 11:
case 13:
case 14:
case 15:return buffer_add_char(buf,35);
default:return 0}}
function bprint_altint_fmt(buf,ign_flag,iconv,pad,prec,c)
{buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag);
bprint_iconv_flag(buf,iconv);
bprint_padding(buf,pad);
bprint_precision(buf,prec);
buffer_add_char(buf,c);
return buffer_add_char(buf,char_of_iconv(iconv))}
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)}
return 8 <= fconv[2]?buffer_add_char(buf,35):0}
function string_of_formatting_lit(formatting_lit)
{if(typeof formatting_lit === "number")
switch(formatting_lit)
{case 0:return cst$12;
case 1:return cst$13;
case 2:return cst$14;
case 3:return cst$15;
case 4:return cst$16;
case 5:return cst$17;
default:return cst$18}
else
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 cat(cst$19,make$1(1,c))}}
function bprint_char_literal(buf,chr)
{return 37 === chr?buffer_add_string(buf,cst$20):buffer_add_char(buf,chr)}
function bprint_string_literal(buf,str)
{var _uW_=caml_ml_string_length(str) - 1 | 0,_uV_=0;
if(! (_uW_ < 0))
{var i=_uV_;
for(;;)
{bprint_char_literal(buf,caml_string_get(str,i));
var _uX_=i + 1 | 0;
if(_uW_ !== i){var i=_uX_;continue}
break}}
return 0}
function bprint_fmtty(buf,fmtty)
{var fmtty$0=fmtty;
for(;;)
if(typeof fmtty$0 === "number")
return 0;
else
switch(fmtty$0[0])
{case 0:
var rest=fmtty$0[1];
buffer_add_string(buf,cst_c);
var fmtty$0=rest;
continue;
case 1:
var rest$0=fmtty$0[1];
buffer_add_string(buf,cst_s);
var fmtty$0=rest$0;
continue;
case 2:
var rest$1=fmtty$0[1];
buffer_add_string(buf,cst_i);
var fmtty$0=rest$1;
continue;
case 3:
var rest$2=fmtty$0[1];
buffer_add_string(buf,cst_li);
var fmtty$0=rest$2;
continue;
case 4:
var rest$3=fmtty$0[1];
buffer_add_string(buf,cst_ni);
var fmtty$0=rest$3;
continue;
case 5:
var rest$4=fmtty$0[1];
buffer_add_string(buf,cst_Li);
var fmtty$0=rest$4;
continue;
case 6:
var rest$5=fmtty$0[1];
buffer_add_string(buf,cst_f);
var fmtty$0=rest$5;
continue;
case 7:
var rest$6=fmtty$0[1];
buffer_add_string(buf,cst_B);
var fmtty$0=rest$6;
continue;
case 8:
var rest$7=fmtty$0[2],sub_fmtty=fmtty$0[1];
buffer_add_string(buf,cst$21);
bprint_fmtty(buf,sub_fmtty);
buffer_add_string(buf,cst$22);
var fmtty$0=rest$7;
continue;
case 9:
var rest$8=fmtty$0[3],sub_fmtty$0=fmtty$0[1];
buffer_add_string(buf,cst$23);
bprint_fmtty(buf,sub_fmtty$0);
buffer_add_string(buf,cst$24);
var fmtty$0=rest$8;
continue;
case 10:
var rest$9=fmtty$0[1];
buffer_add_string(buf,cst_a);
var fmtty$0=rest$9;
continue;
case 11:
var rest$10=fmtty$0[1];
buffer_add_string(buf,cst_t$0);
var fmtty$0=rest$10;
continue;
case 12:
var rest$11=fmtty$0[1];
buffer_add_string(buf,cst$25);
var fmtty$0=rest$11;
continue;
case 13:
var rest$12=fmtty$0[1];
buffer_add_string(buf,cst_r$0);
var fmtty$0=rest$12;
continue;
default:
var rest$13=fmtty$0[1];
buffer_add_string(buf,cst_r$1);
var fmtty$0=rest$13;
continue}}
function int_of_custom_arity(param)
{if(param){var x=param[1];return 1 + int_of_custom_arity(x) | 0}return 0}
function string_of_fmt(fmt)
{var buf=buffer_create(16);
function fmtiter(fmt,ign_flag)
{var fmt$0=fmt,ign_flag$0=ign_flag;
a:
for(;;)
if(typeof fmt$0 === "number")
return 0;
else
switch(fmt$0[0])
{case 0:
var rest=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
buffer_add_char(buf,99);
var fmt$0=rest,ign_flag$0=0;
continue;
case 1:
var rest$0=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
buffer_add_char(buf,67);
var fmt$0=rest$0,ign_flag$0=0;
continue;
case 2:
var rest$1=fmt$0[2],pad=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
bprint_padding(buf,pad);
buffer_add_char(buf,115);
var fmt$0=rest$1,ign_flag$0=0;
continue;
case 3:
var rest$2=fmt$0[2],pad$0=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
bprint_padding(buf,pad$0);
buffer_add_char(buf,83);
var fmt$0=rest$2,ign_flag$0=0;
continue;
case 4:
var rest$3=fmt$0[4],prec=fmt$0[3],pad$1=fmt$0[2],iconv=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
bprint_iconv_flag(buf,iconv);
bprint_padding(buf,pad$1);
bprint_precision(buf,prec);
buffer_add_char(buf,char_of_iconv(iconv));
var fmt$0=rest$3,ign_flag$0=0;
continue;
case 5:
var
rest$4=fmt$0[4],
prec$0=fmt$0[3],
pad$2=fmt$0[2],
iconv$0=fmt$0[1];
bprint_altint_fmt(buf,ign_flag$0,iconv$0,pad$2,prec$0,108);
var fmt$0=rest$4,ign_flag$0=0;
continue;
case 6:
var
rest$5=fmt$0[4],
prec$1=fmt$0[3],
pad$3=fmt$0[2],
iconv$1=fmt$0[1];
bprint_altint_fmt(buf,ign_flag$0,iconv$1,pad$3,prec$1,110);
var fmt$0=rest$5,ign_flag$0=0;
continue;
case 7:
var
rest$6=fmt$0[4],
prec$2=fmt$0[3],
pad$4=fmt$0[2],
iconv$2=fmt$0[1];
bprint_altint_fmt(buf,ign_flag$0,iconv$2,pad$4,prec$2,76);
var fmt$0=rest$6,ign_flag$0=0;
continue;
case 8:
var
rest$7=fmt$0[4],
prec$3=fmt$0[3],
pad$5=fmt$0[2],
fconv=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
bprint_fconv_flag(buf,fconv);
bprint_padding(buf,pad$5);
bprint_precision(buf,prec$3);
buffer_add_char(buf,char_of_fconv(0,fconv));
var fmt$0=rest$7,ign_flag$0=0;
continue;
case 9:
var rest$8=fmt$0[2],pad$6=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
bprint_padding(buf,pad$6);
buffer_add_char(buf,66);
var fmt$0=rest$8,ign_flag$0=0;
continue;
case 10:
var rest$9=fmt$0[1];
buffer_add_string(buf,cst$26);
var fmt$0=rest$9;
continue;
case 11:
var rest$10=fmt$0[2],str=fmt$0[1];
bprint_string_literal(buf,str);
var fmt$0=rest$10;
continue;
case 12:
var rest$11=fmt$0[2],chr$0=fmt$0[1];
bprint_char_literal(buf,chr$0);
var fmt$0=rest$11;
continue;
case 13:
var rest$12=fmt$0[3],fmtty=fmt$0[2],pad_opt=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
bprint_pad_opt(buf,pad_opt);
buffer_add_char(buf,123);
bprint_fmtty(buf,fmtty);
buffer_add_char(buf,37);
buffer_add_char(buf,125);
var fmt$0=rest$12,ign_flag$0=0;
continue;
case 14:
var rest$13=fmt$0[3],fmtty$0=fmt$0[2],pad_opt$0=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
bprint_pad_opt(buf,pad_opt$0);
buffer_add_char(buf,40);
bprint_fmtty(buf,fmtty$0);
buffer_add_char(buf,37);
buffer_add_char(buf,41);
var fmt$0=rest$13,ign_flag$0=0;
continue;
case 15:
var rest$14=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
buffer_add_char(buf,97);
var fmt$0=rest$14,ign_flag$0=0;
continue;
case 16:
var rest$15=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
buffer_add_char(buf,116);
var fmt$0=rest$15,ign_flag$0=0;
continue;
case 17:
var rest$16=fmt$0[2],fmting_lit=fmt$0[1];
bprint_string_literal(buf,string_of_formatting_lit(fmting_lit));
var fmt$0=rest$16;
continue;
case 18:
var rest$17=fmt$0[2],fmting_gen=fmt$0[1];
if(0 === fmting_gen[0])
{var match$1=fmting_gen[1],str$0=match$1[2];
buffer_add_string(buf,cst$27);
buffer_add_string(buf,str$0)}
else
{var match$2=fmting_gen[1],str$1=match$2[2];
buffer_add_string(buf,cst$28);
buffer_add_string(buf,str$1)}
var fmt$0=rest$17;
continue;
case 19:
var rest$18=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
buffer_add_char(buf,114);
var fmt$0=rest$18,ign_flag$0=0;
continue;
case 20:
var rest$19=fmt$0[3],char_set=fmt$0[2],width_opt=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
bprint_pad_opt(buf,width_opt);
var
print_char=
function(buf,i)
{var c=char_of_int(i);
return 37 === c
?(buffer_add_char(buf,37),buffer_add_char(buf,37))
:64 === c
?(buffer_add_char(buf,37),buffer_add_char(buf,64))
:buffer_add_char(buf,c)};
buffer_add_char(buf,91);
var
_uL_=
is_in_char_set(char_set,0)
?(buffer_add_char(buf,94),rev_char_set(char_set))
:char_set,
is_alone$0=
function(_uQ_)
{function is_alone(c)
{var
after=chr(c + 1 | 0),
before=chr(c - 1 | 0),
_uR_=is_in_char_set(_uQ_,c);
if(_uR_)
var
_uS_=is_in_char_set(_uQ_,before),
_uT_=_uS_?is_in_char_set(_uQ_,after):_uS_,
_uU_=1 - _uT_;
else
var _uU_=_uR_;
return _uU_}
return is_alone},
is_alone=is_alone$0(_uL_);
if(is_alone(93))buffer_add_char(buf,93);
var i=1;
b:
for(;;)
{if(i < 256)
{if(! is_in_char_set(_uL_,char_of_int(i)))
{var i$0=i + 1 | 0,i=i$0;continue}
var match=char_of_int(i),switcher=match - 45 | 0,switch$0=0;
if(48 < switcher >>> 0)
if(210 <= switcher)print_char(buf,255);else switch$0 = 1;
else
{if(46 < switcher - 1 >>> 0)
{var i$2=i + 1 | 0,i=i$2;continue}
switch$0 = 1}
if(switch$0)
{var i$1=i + 1 | 0;
if(! is_in_char_set(_uL_,char_of_int(i$1)))
{print_char(buf,i$1 - 1 | 0);
var i$6=i$1 + 1 | 0,i=i$6;
continue}
var
match$0=char_of_int(i$1),
switcher$0=match$0 - 45 | 0,
switch$1=0;
if(48 < switcher$0 >>> 0)
if(210 <= switcher$0)
{print_char(buf,254);print_char(buf,255)}
else
switch$1 = 1;
else
if(46 < switcher$0 - 1 >>> 0)
{if(! is_in_char_set(_uL_,char_of_int(i$1 + 1 | 0)))
{print_char(buf,i$1 - 1 | 0);
var i$5=i$1 + 1 | 0,i=i$5;
continue}
switch$1 = 1}
else
switch$1 = 1;
if(switch$1)
{if(! is_in_char_set(_uL_,char_of_int(i$1 + 1 | 0)))
{print_char(buf,i$1 - 1 | 0);
print_char(buf,i$1);
var i$4=i$1 + 2 | 0,i=i$4;
continue}
var j=i$1 + 2 | 0,i$3=i$1 - 1 | 0,j$0=j;
for(;;)
{if(256 !== j$0 && is_in_char_set(_uL_,char_of_int(j$0)))
{var j$1=j$0 + 1 | 0,j$0=j$1;continue}
print_char(buf,i$3);
print_char(buf,45);
print_char(buf,j$0 - 1 | 0);
if(j$0 < 256){var i$7=j$0 + 1 | 0,i=i$7;continue b}
break}}}}
if(is_alone(45))buffer_add_char(buf,45);
buffer_add_char(buf,93);
var fmt$0=rest$19,ign_flag$0=0;
continue a}
case 21:
var rest$20=fmt$0[2],counter=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
switch(counter)
{case 0:var _uM_=108;break;
case 1:var _uM_=110;break;
default:var _uM_=78}
buffer_add_char(buf,_uM_);
var fmt$0=rest$20,ign_flag$0=0;
continue;
case 22:
var rest$21=fmt$0[1];
buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
bprint_string_literal(buf,cst_0c);
var fmt$0=rest$21,ign_flag$0=0;
continue;
case 23:
var
rest$22=fmt$0[2],
ign=fmt$0[1],
match$3=param_format_of_ignored_format(ign,rest$22),
fmt$1=match$3[1],
fmt$0=fmt$1,
ign_flag$0=1;
continue;
default:
var
rest$23=fmt$0[3],
arity=fmt$0[1],
_uO_=int_of_custom_arity(arity),
_uN_=1;
if(! (_uO_ < 1))
{var i$8=_uN_;
for(;;)
{buffer_add_char(buf,37);
bprint_ignored_flag(buf,ign_flag$0);
buffer_add_char(buf,63);
var _uP_=i$8 + 1 | 0;
if(_uO_ !== i$8){var i$8=_uP_;continue}
break}}
var fmt$0=rest$23,ign_flag$0=0;
continue}}
fmtiter(fmt,0);
return buffer_contents(buf)}
function symm(param)
{if(typeof param === "number")
return 0;
else
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 trans(ty1,ty2)
{var switch$0=0;
if(typeof ty1 === "number")
if(typeof ty2 === "number")
return 0;
else
switch(ty2[0])
{case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:switch$0 = 4;break;
case 8:switch$0 = 5;break;
case 9:switch$0 = 6;break;
default:throw [0,Assert_failure,_ah_]}
else
switch(ty1[0])
{case 0:
var switch$1=0,_us_=ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0])
{case 0:var rest2=ty2[1];return [0,trans(_us_,rest2)];
case 8:switch$0 = 5;switch$1 = 1;break;
case 9:switch$0 = 6;switch$1 = 1;break;
case 10:switch$1 = 1;break;
case 11:switch$0 = 1;switch$1 = 1;break;
case 12:switch$0 = 2;switch$1 = 1;break;
case 13:switch$0 = 3;switch$1 = 1;break;
case 14:switch$0 = 4;switch$1 = 1;break
}
if(! switch$1)switch$0 = 7;
break;
case 1:
var switch$2=0,_ut_=ty1[1];
if(typeof ty2 !== "number")
switch(ty2[0])
{case 1:var rest2$0=ty2[1];return [1,trans(_ut_,rest2$0)];
case 8:switch$0 = 5;switch$2 = 1;break;
case 9:switch$0 = 6;switch$2 = 1;break;
case 10:switch$2 = 1;break;
case 11:switch$0 = 1;switch$2 = 1;break;
case 12:switch$0 = 2;switch$2 = 1;break;
case 13:switch$0 = 3;switch$2 = 1;break;
case 14:switch$0 = 4;switch$2 = 1;break
}
if(! switch$2)switch$0 = 7;
break;
case 2:
var switch$3=0,_uu_=ty1[1];
if(typeof ty2 === "number")
switch$3 = 1;
else
switch(ty2[0])
{case 2:var rest2$1=ty2[1];return [2,trans(_uu_,rest2$1)];
case 8:switch$0 = 5;break;
case 9:switch$0 = 6;break;
case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:switch$0 = 4;break;
default:switch$3 = 1}
if(switch$3)switch$0 = 7;
break;
case 3:
var switch$4=0,_uv_=ty1[1];
if(typeof ty2 === "number")
switch$4 = 1;
else
switch(ty2[0])
{case 3:var rest2$2=ty2[1];return [3,trans(_uv_,rest2$2)];
case 8:switch$0 = 5;break;
case 9:switch$0 = 6;break;
case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:switch$0 = 4;break;
default:switch$4 = 1}
if(switch$4)switch$0 = 7;
break;
case 4:
var switch$5=0,_uw_=ty1[1];
if(typeof ty2 === "number")
switch$5 = 1;
else
switch(ty2[0])
{case 4:var rest2$3=ty2[1];return [4,trans(_uw_,rest2$3)];
case 8:switch$0 = 5;break;
case 9:switch$0 = 6;break;
case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:switch$0 = 4;break;
default:switch$5 = 1}
if(switch$5)switch$0 = 7;
break;
case 5:
var switch$6=0,_ux_=ty1[1];
if(typeof ty2 === "number")
switch$6 = 1;
else
switch(ty2[0])
{case 5:var rest2$4=ty2[1];return [5,trans(_ux_,rest2$4)];
case 8:switch$0 = 5;break;
case 9:switch$0 = 6;break;
case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:switch$0 = 4;break;
default:switch$6 = 1}
if(switch$6)switch$0 = 7;
break;
case 6:
var switch$7=0,_uy_=ty1[1];
if(typeof ty2 === "number")
switch$7 = 1;
else
switch(ty2[0])
{case 6:var rest2$5=ty2[1];return [6,trans(_uy_,rest2$5)];
case 8:switch$0 = 5;break;
case 9:switch$0 = 6;break;
case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:switch$0 = 4;break;
default:switch$7 = 1}
if(switch$7)switch$0 = 7;
break;
case 7:
var switch$8=0,_uz_=ty1[1];
if(typeof ty2 === "number")
switch$8 = 1;
else
switch(ty2[0])
{case 7:var rest2$6=ty2[1];return [7,trans(_uz_,rest2$6)];
case 8:switch$0 = 5;break;
case 9:switch$0 = 6;break;
case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:switch$0 = 4;break;
default:switch$8 = 1}
if(switch$8)switch$0 = 7;
break;
case 8:
var switch$9=0,_uA_=ty1[2],_uB_=ty1[1];
if(typeof ty2 === "number")
switch$9 = 1;
else
switch(ty2[0])
{case 8:
var rest2$7=ty2[2],ty2$0=ty2[1],_uC_=trans(_uA_,rest2$7);
return [8,trans(_uB_,ty2$0),_uC_];
case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:switch$0 = 4;break;
default:switch$9 = 1}
if(switch$9)throw [0,Assert_failure,_aq_];
break;
case 9:
var switch$10=0,_uD_=ty1[3],_uE_=ty1[2],_uF_=ty1[1];
if(typeof ty2 === "number")
switch$10 = 1;
else
switch(ty2[0])
{case 8:switch$0 = 5;break;
case 9:
var
rest2$8=ty2[3],
ty22=ty2[2],
ty21=ty2[1],
ty=trans(symm(_uE_),ty21),
match=fmtty_rel_det(ty),
f4=match[4],
f2=match[2];
caml_call1(f2,0);
caml_call1(f4,0);
return [9,_uF_,ty22,trans(_uD_,rest2$8)];
case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:switch$0 = 4;break;
default:switch$10 = 1}
if(switch$10)throw [0,Assert_failure,_ar_];
break;
case 10:
var _uG_=ty1[1];
if(typeof ty2 !== "number" && 10 === ty2[0])
{var rest2$9=ty2[1];return [10,trans(_uG_,rest2$9)]}
throw [0,Assert_failure,_as_];
case 11:
var switch$11=0,_uH_=ty1[1];
if(typeof ty2 === "number")
switch$11 = 1;
else
switch(ty2[0])
{case 10:break;
case 11:var rest2$10=ty2[1];return [11,trans(_uH_,rest2$10)];
default:switch$11 = 1}
if(switch$11)throw [0,Assert_failure,_at_];
break;
case 12:
var switch$12=0,_uI_=ty1[1];
if(typeof ty2 === "number")
switch$12 = 1;
else
switch(ty2[0])
{case 10:break;
case 11:switch$0 = 1;break;
case 12:var rest2$11=ty2[1];return [12,trans(_uI_,rest2$11)];
default:switch$12 = 1}
if(switch$12)throw [0,Assert_failure,_au_];
break;
case 13:
var switch$13=0,_uJ_=ty1[1];
if(typeof ty2 === "number")
switch$13 = 1;
else
switch(ty2[0])
{case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:var rest2$12=ty2[1];return [13,trans(_uJ_,rest2$12)];
default:switch$13 = 1}
if(switch$13)throw [0,Assert_failure,_av_];
break;
default:
var switch$14=0,_uK_=ty1[1];
if(typeof ty2 === "number")
switch$14 = 1;
else
switch(ty2[0])
{case 10:break;
case 11:switch$0 = 1;break;
case 12:switch$0 = 2;break;
case 13:switch$0 = 3;break;
case 14:var rest2$13=ty2[1];return [14,trans(_uK_,rest2$13)];
default:switch$14 = 1}
if(switch$14)throw [0,Assert_failure,_aw_]}
switch(switch$0)
{case 0:throw [0,Assert_failure,_ak_];
case 1:throw [0,Assert_failure,_al_];
case 2:throw [0,Assert_failure,_am_];
case 3:throw [0,Assert_failure,_an_];
case 4:throw [0,Assert_failure,_ao_];
case 5:throw [0,Assert_failure,_ai_];
case 6:throw [0,Assert_failure,_aj_];
default:throw [0,Assert_failure,_ap_]}}
function fmtty_rel_det(param)
{if(typeof param === "number")
{var
_t6_=function(param){return 0},
_t7_=function(param){return 0},
_t8_=function(param){return 0};
return [0,function(param){return 0},_t8_,_t7_,_t6_]}
else
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],
_t9_=function(param){caml_call1(af,0);return 0};
return [0,function(param){caml_call1(fa,0);return 0},_t9_,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],
_t__=function(param){caml_call1(af$0,0);return 0};
return [0,
function(param){caml_call1(fa$0,0);return 0},
_t__,
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],
_t$_=function(param){caml_call1(af$1,0);return 0};
return [0,
function(param){caml_call1(fa$1,0);return 0},
_t$_,
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],
_ua_=function(param){caml_call1(af$2,0);return 0};
return [0,
function(param){caml_call1(fa$2,0);return 0},
_ua_,
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],
_ub_=function(param){caml_call1(af$3,0);return 0};
return [0,
function(param){caml_call1(fa$3,0);return 0},
_ub_,
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],
_uc_=function(param){caml_call1(af$4,0);return 0};
return [0,
function(param){caml_call1(fa$4,0);return 0},
_uc_,
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],
_ud_=function(param){caml_call1(af$5,0);return 0};
return [0,
function(param){caml_call1(fa$5,0);return 0},
_ud_,
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],
_ue_=function(param){caml_call1(af$6,0);return 0};
return [0,
function(param){caml_call1(fa$6,0);return 0},
_ue_,
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],
_uf_=function(param){caml_call1(af$7,0);return 0};
return [0,
function(param){caml_call1(fa$7,0);return 0},
_uf_,
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],
_ug_=function(param){caml_call1(jd,0);caml_call1(de$8,0);return 0},
_uh_=function(param){caml_call1(ed$8,0);caml_call1(dj,0);return 0},
_ui_=function(param){caml_call1(ga,0);caml_call1(af$8,0);return 0};
return [0,
function(param)
{caml_call1(fa$8,0);caml_call1(ag,0);return 0},
_ui_,
_uh_,
_ug_];
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],
_uj_=function(param){caml_call1(af$9,0);return 0};
return [0,
function(param){caml_call1(fa$9,0);return 0},
_uj_,
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],
_uk_=function(param){caml_call1(af$10,0);return 0};
return [0,
function(param){caml_call1(fa$10,0);return 0},
_uk_,
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],
_ul_=function(param){caml_call1(af$11,0);return 0};
return [0,
function(param){caml_call1(fa$11,0);return 0},
_ul_,
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],
_um_=function(param){caml_call1(de$12,0);return 0},
_un_=function(param){caml_call1(ed$12,0);return 0},
_uo_=function(param){caml_call1(af$12,0);return 0};
return [0,
function(param){caml_call1(fa$12,0);return 0},
_uo_,
_un_,
_um_];
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],
_up_=function(param){caml_call1(de$13,0);return 0},
_uq_=function(param){caml_call1(ed$13,0);return 0},
_ur_=function(param){caml_call1(af$13,0);return 0};
return [0,
function(param){caml_call1(fa$13,0);return 0},
_ur_,
_uq_,
_up_]}}
function fmtty_of_precision_fmtty(prec,fmtty)
{return typeof prec === "number"?prec?[2,fmtty]:fmtty:fmtty}
function fmtty_of_padding_fmtty(pad,fmtty)
{return typeof pad === "number"?fmtty:0 === pad[0]?fmtty:[2,fmtty]}
function fmtty_of_custom(arity,fmtty)
{if(arity)
{var arity$0=arity[1];return [12,fmtty_of_custom(arity$0,fmtty)]}
return fmtty}
function fmtty_of_fmt(fmtty)
{var fmtty$0=fmtty;
for(;;)
if(typeof fmtty$0 === "number")
return 0;
else
switch(fmtty$0[0])
{case 0:var rest=fmtty$0[1];return [0,fmtty_of_fmt(rest)];
case 1:var rest$0=fmtty$0[1];return [0,fmtty_of_fmt(rest$0)];
case 2:
var rest$1=fmtty$0[2],pad=fmtty$0[1];
return fmtty_of_padding_fmtty(pad,[1,fmtty_of_fmt(rest$1)]);
case 3:
var rest$2=fmtty$0[2],pad$0=fmtty$0[1];
return fmtty_of_padding_fmtty(pad$0,[1,fmtty_of_fmt(rest$2)]);
case 4:
var
rest$3=fmtty$0[4],
prec=fmtty$0[3],
pad$1=fmtty$0[2],
ty_rest=fmtty_of_fmt(rest$3),
prec_ty=fmtty_of_precision_fmtty(prec,[2,ty_rest]);
return fmtty_of_padding_fmtty(pad$1,prec_ty);
case 5:
var
rest$4=fmtty$0[4],
prec$0=fmtty$0[3],
pad$2=fmtty$0[2],
ty_rest$0=fmtty_of_fmt(rest$4),
prec_ty$0=fmtty_of_precision_fmtty(prec$0,[3,ty_rest$0]);
return fmtty_of_padding_fmtty(pad$2,prec_ty$0);
case 6:
var
rest$5=fmtty$0[4],
prec$1=fmtty$0[3],
pad$3=fmtty$0[2],
ty_rest$1=fmtty_of_fmt(rest$5),
prec_ty$1=fmtty_of_precision_fmtty(prec$1,[4,ty_rest$1]);
return fmtty_of_padding_fmtty(pad$3,prec_ty$1);
case 7:
var
rest$6=fmtty$0[4],
prec$2=fmtty$0[3],
pad$4=fmtty$0[2],
ty_rest$2=fmtty_of_fmt(rest$6),
prec_ty$2=fmtty_of_precision_fmtty(prec$2,[5,ty_rest$2]);
return fmtty_of_padding_fmtty(pad$4,prec_ty$2);
case 8:
var
rest$7=fmtty$0[4],
prec$3=fmtty$0[3],
pad$5=fmtty$0[2],
ty_rest$3=fmtty_of_fmt(rest$7),
prec_ty$3=fmtty_of_precision_fmtty(prec$3,[6,ty_rest$3]);
return fmtty_of_padding_fmtty(pad$5,prec_ty$3);
case 9:
var rest$8=fmtty$0[2],pad$6=fmtty$0[1];
return fmtty_of_padding_fmtty(pad$6,[7,fmtty_of_fmt(rest$8)]);
case 10:var fmtty$1=fmtty$0[1],fmtty$0=fmtty$1;continue;
case 11:var fmtty$2=fmtty$0[2],fmtty$0=fmtty$2;continue;
case 12:var fmtty$3=fmtty$0[2],fmtty$0=fmtty$3;continue;
case 13:
var rest$9=fmtty$0[3],ty=fmtty$0[2];
return [8,ty,fmtty_of_fmt(rest$9)];
case 14:
var rest$10=fmtty$0[3],ty$0=fmtty$0[2];
return [9,ty$0,ty$0,fmtty_of_fmt(rest$10)];
case 15:var rest$11=fmtty$0[1];return [10,fmtty_of_fmt(rest$11)];
case 16:var rest$12=fmtty$0[1];return [11,fmtty_of_fmt(rest$12)];
case 17:var fmtty$4=fmtty$0[2],fmtty$0=fmtty$4;continue;
case 18:
var
rest$13=fmtty$0[2],
fmting_gen=fmtty$0[1],
_t4_=fmtty_of_fmt(rest$13);
if(0 === fmting_gen[0])
var match=fmting_gen[1],fmt=match[1],_t5_=fmtty_of_fmt(fmt);
else
var
match$0=fmting_gen[1],
fmt$0=match$0[1],
_t5_=fmtty_of_fmt(fmt$0);
return concat_fmtty(_t5_,_t4_);
case 19:var rest$14=fmtty$0[1];return [13,fmtty_of_fmt(rest$14)];
case 20:var rest$15=fmtty$0[3];return [1,fmtty_of_fmt(rest$15)];
case 21:var rest$16=fmtty$0[2];return [2,fmtty_of_fmt(rest$16)];
case 22:var rest$17=fmtty$0[1];return [0,fmtty_of_fmt(rest$17)];
case 23:
var rest$18=fmtty$0[2],ign=fmtty$0[1];
if(typeof ign === "number")
switch(ign)
{case 0:var fmtty$0=rest$18;continue;
case 1:var fmtty$0=rest$18;continue;
case 2:return [14,fmtty_of_fmt(rest$18)];
default:var fmtty$0=rest$18;continue}
else
switch(ign[0])
{case 0:var fmtty$0=rest$18;continue;
case 1:var fmtty$0=rest$18;continue;
case 2:var fmtty$0=rest$18;continue;
case 3:var fmtty$0=rest$18;continue;
case 4:var fmtty$0=rest$18;continue;
case 5:var fmtty$0=rest$18;continue;
case 6:var fmtty$0=rest$18;continue;
case 7:var fmtty$0=rest$18;continue;
case 8:var fmtty$0=rest$18;continue;
case 9:
var fmtty$5=ign[2];
return concat_fmtty(fmtty$5,fmtty_of_fmt(rest$18));
case 10:var fmtty$0=rest$18;continue;
default:var fmtty$0=rest$18;continue}
default:
var rest$19=fmtty$0[3],arity=fmtty$0[1];
return fmtty_of_custom(arity,fmtty_of_fmt(rest$19))}}
var
Type_mismatch=
[248,cst_CamlinternalFormat_Type_mi,caml_fresh_oo_id(0)];
function type_padding(pad,fmtty)
{if(typeof pad === "number")
return [0,0,fmtty];
else
{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 Type_mismatch}}
function type_padprec(pad,prec,fmtty)
{var match=type_padding(pad,fmtty);
if(typeof prec === "number")
{if(prec)
{var _t3_=match[2];
if(typeof _t3_ !== "number" && 2 === _t3_[0])
{var rest=_t3_[1],pad$0=match[1];return [0,pad$0,1,rest]}
throw Type_mismatch}
var rest$0=match[2],pad$1=match[1];
return [0,pad$1,0,rest$0]}
var rest$1=match[2],pad$2=match[1],p=prec[1];
return [0,pad$2,[0,p],rest$1]}
function type_ignored_format_substituti(sub_fmtty,fmt,fmtty)
{if(typeof sub_fmtty === "number")
return [0,0,type_format_gen(fmt,fmtty)];
else
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 Type_mismatch;
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],
_t1_=[0,erase_rel(sub1_fmtty)];
if(caml_notequal([0,erase_rel(sub1_fmtty$0)],_t1_))
throw Type_mismatch;
var _t2_=[0,erase_rel(sub2_fmtty$1)];
if(caml_notequal([0,erase_rel(sub2_fmtty$2)],_t2_))
throw Type_mismatch;
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];
caml_call1(f2,0);
caml_call1(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 Type_mismatch}
function type_format_gen(fmt,fmtty)
{if(typeof fmt === "number")
return [0,0,fmtty];
else
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),
_tK_=match$1[2],
_tJ_=match$1[1];
if(typeof _tK_ !== "number" && 1 === _tK_[0])
{var
fmtty_rest$1=_tK_[1],
match$2=type_format_gen(fmt_rest$1,fmtty_rest$1),
fmtty$2=match$2[2],
fmt$2=match$2[1];
return [0,[2,_tJ_,fmt$2],fmtty$2]}
throw Type_mismatch;
case 3:
var
fmt_rest$2=fmt[2],
pad$0=fmt[1],
match$3=type_padding(pad$0,fmtty),
_tM_=match$3[2],
_tL_=match$3[1];
if(typeof _tM_ !== "number" && 1 === _tM_[0])
{var
fmtty_rest$2=_tM_[1],
match$4=type_format_gen(fmt_rest$2,fmtty_rest$2),
fmtty$3=match$4[2],
fmt$3=match$4[1];
return [0,[3,_tL_,fmt$3],fmtty$3]}
throw Type_mismatch;
case 4:
var
fmt_rest$3=fmt[4],
prec=fmt[3],
pad$1=fmt[2],
iconv=fmt[1],
match$5=type_padprec(pad$1,prec,fmtty),
_tO_=match$5[3],
_tN_=match$5[1];
if(typeof _tO_ !== "number" && 2 === _tO_[0])
{var
fmtty_rest$3=_tO_[1],
prec$0=match$5[2],
match$6=type_format_gen(fmt_rest$3,fmtty_rest$3),
fmtty$4=match$6[2],
fmt$4=match$6[1];
return [0,[4,iconv,_tN_,prec$0,fmt$4],fmtty$4]}
throw Type_mismatch;
case 5:
var
fmt_rest$4=fmt[4],
prec$1=fmt[3],
pad$2=fmt[2],
iconv$0=fmt[1],
match$7=type_padprec(pad$2,prec$1,fmtty),
_tQ_=match$7[3],
_tP_=match$7[1];
if(typeof _tQ_ !== "number" && 3 === _tQ_[0])
{var
fmtty_rest$4=_tQ_[1],
prec$2=match$7[2],
match$8=type_format_gen(fmt_rest$4,fmtty_rest$4),
fmtty$5=match$8[2],
fmt$5=match$8[1];
return [0,[5,iconv$0,_tP_,prec$2,fmt$5],fmtty$5]}
throw Type_mismatch;
case 6:
var
fmt_rest$5=fmt[4],
prec$3=fmt[3],
pad$3=fmt[2],
iconv$1=fmt[1],
match$9=type_padprec(pad$3,prec$3,fmtty),
_tS_=match$9[3],
_tR_=match$9[1];
if(typeof _tS_ !== "number" && 4 === _tS_[0])
{var
fmtty_rest$5=_tS_[1],
prec$4=match$9[2],
match$10=type_format_gen(fmt_rest$5,fmtty_rest$5),
fmtty$6=match$10[2],
fmt$6=match$10[1];
return [0,[6,iconv$1,_tR_,prec$4,fmt$6],fmtty$6]}
throw Type_mismatch;
case 7:
var
fmt_rest$6=fmt[4],
prec$5=fmt[3],
pad$4=fmt[2],
iconv$2=fmt[1],
match$11=type_padprec(pad$4,prec$5,fmtty),
_tU_=match$11[3],
_tT_=match$11[1];
if(typeof _tU_ !== "number" && 5 === _tU_[0])
{var
fmtty_rest$6=_tU_[1],
prec$6=match$11[2],
match$12=type_format_gen(fmt_rest$6,fmtty_rest$6),
fmtty$7=match$12[2],
fmt$7=match$12[1];
return [0,[7,iconv$2,_tT_,prec$6,fmt$7],fmtty$7]}
throw Type_mismatch;
case 8:
var
fmt_rest$7=fmt[4],
prec$7=fmt[3],
pad$5=fmt[2],
fconv=fmt[1],
match$13=type_padprec(pad$5,prec$7,fmtty),
_tW_=match$13[3],
_tV_=match$13[1];
if(typeof _tW_ !== "number" && 6 === _tW_[0])
{var
fmtty_rest$7=_tW_[1],
prec$8=match$13[2],
match$14=type_format_gen(fmt_rest$7,fmtty_rest$7),
fmtty$8=match$14[2],
fmt$8=match$14[1];
return [0,[8,fconv,_tV_,prec$8,fmt$8],fmtty$8]}
throw Type_mismatch;
case 9:
var
fmt_rest$8=fmt[2],
pad$6=fmt[1],
match$15=type_padding(pad$6,fmtty),
_tY_=match$15[2],
_tX_=match$15[1];
if(typeof _tY_ !== "number" && 7 === _tY_[0])
{var
fmtty_rest$8=_tY_[1],
match$16=type_format_gen(fmt_rest$8,fmtty_rest$8),
fmtty$9=match$16[2],
fmt$9=match$16[1];
return [0,[9,_tX_,fmt$9],fmtty$9]}
throw Type_mismatch;
case 10:
var
fmt_rest$9=fmt[1],
match$17=type_format_gen(fmt_rest$9,fmtty),
fmtty$10=match$17[2],
fmt$10=match$17[1];
return [0,[10,fmt$10],fmtty$10];
case 11:
var
fmt_rest$10=fmt[2],
str=fmt[1],
match$18=type_format_gen(fmt_rest$10,fmtty),
fmtty$11=match$18[2],
fmt$11=match$18[1];
return [0,[11,str,fmt$11],fmtty$11];
case 12:
var
fmt_rest$11=fmt[2],
chr=fmt[1],
match$19=type_format_gen(fmt_rest$11,fmtty),
fmtty$12=match$19[2],
fmt$12=match$19[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 Type_mismatch;
var
match$20=type_format_gen(fmt_rest$12,fmtty_rest$9),
fmtty$13=match$20[2],
fmt$13=match$20[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],
_tZ_=[0,erase_rel(sub_fmtty1)];
if(caml_notequal([0,erase_rel(sub_fmtty$1)],_tZ_))
throw Type_mismatch;
var
match$21=type_format_gen(fmt_rest$13,erase_rel(fmtty_rest$10)),
fmtty$14=match$21[2],
fmt$14=match$21[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$22=type_format_gen(fmt_rest$14,fmtty_rest$11),
fmtty$15=match$22[2],
fmt$15=match$22[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$23=type_format_gen(fmt_rest$15,fmtty_rest$12),
fmtty$16=match$23[2],
fmt$16=match$23[1];
return [0,[16,fmt$16],fmtty$16]}
break;
case 17:
var
fmt_rest$16=fmt[2],
formatting_lit=fmt[1],
match$24=type_format_gen(fmt_rest$16,fmtty),
fmtty$17=match$24[2],
fmt$17=match$24[1];
return [0,[17,formatting_lit,fmt$17],fmtty$17];
case 18:
var fmt_rest$17=fmt[2],formatting_gen=fmt[1];
if(0 === formatting_gen[0])
{var
match$28=formatting_gen[1],
str$0=match$28[2],
fmt1=match$28[1],
match$29=type_format_gen(fmt1,fmtty),
fmtty2=match$29[2],
fmt2=match$29[1],
match$30=type_format_gen(fmt_rest$17,fmtty2),
fmtty3=match$30[2],
fmt3=match$30[1];
return [0,[18,[0,[0,fmt2,str$0]],fmt3],fmtty3]}
var
match$31=formatting_gen[1],
str$1=match$31[2],
fmt1$0=match$31[1],
match$32=type_format_gen(fmt1$0,fmtty),
fmtty2$0=match$32[2],
fmt2$0=match$32[1],
match$33=type_format_gen(fmt_rest$17,fmtty2$0),
fmtty3$0=match$33[2],
fmt3$0=match$33[1];
return [0,[18,[1,[0,fmt2$0,str$1]],fmt3$0],fmtty3$0];
case 19:
if(typeof fmtty !== "number" && 13 === fmtty[0])
{var
fmtty_rest$13=fmtty[1],
fmt_rest$18=fmt[1],
match$25=type_format_gen(fmt_rest$18,fmtty_rest$13),
fmtty$18=match$25[2],
fmt$18=match$25[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$26=type_format_gen(fmt_rest$19,fmtty_rest$14),
fmtty$19=match$26[2],
fmt$19=match$26[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$27=type_format_gen(fmt_rest$20,fmtty_rest$15),
fmtty$20=match$27[2],
fmt$20=match$27[1];
return [0,[21,counter,fmt$20],fmtty$20]}
break;
case 23:
var rest=fmt[2],ign=fmt[1];
if(typeof ign === "number")
switch(ign)
{case 0:return type_ignored_param_one(ign,rest,fmtty);
case 1:return type_ignored_param_one(ign,rest,fmtty);
case 2:
if(typeof fmtty !== "number" && 14 === fmtty[0])
{var
fmtty_rest$16=fmtty[1],
match$34=type_format_gen(rest,fmtty_rest$16),
fmtty$21=match$34[2],
fmt$21=match$34[1];
return [0,[23,2,fmt$21],fmtty$21]}
throw Type_mismatch;
default:return type_ignored_param_one(ign,rest,fmtty)}
else
switch(ign[0])
{case 0:return type_ignored_param_one(ign,rest,fmtty);
case 1:return type_ignored_param_one(ign,rest,fmtty);
case 2:return type_ignored_param_one(ign,rest,fmtty);
case 3:return type_ignored_param_one(ign,rest,fmtty);
case 4:return type_ignored_param_one(ign,rest,fmtty);
case 5:return type_ignored_param_one(ign,rest,fmtty);
case 6:return type_ignored_param_one(ign,rest,fmtty);
case 7:return type_ignored_param_one(ign,rest,fmtty);
case 8:
var sub_fmtty$2=ign[2],pad_opt$1=ign[1];
return type_ignored_param_one
([8,pad_opt$1,sub_fmtty$2],rest,fmtty);
case 9:
var
sub_fmtty$3=ign[2],
pad_opt$2=ign[1],
_t0_=type_ignored_format_substituti(sub_fmtty$3,rest,fmtty),
match$35=_t0_[2],
fmtty$22=match$35[2],
fmt$22=match$35[1],
sub_fmtty$4=_t0_[1];
return [0,[23,[9,pad_opt$2,sub_fmtty$4],fmt$22],fmtty$22];
case 10:return type_ignored_param_one(ign,rest,fmtty);
default:return type_ignored_param_one(ign,rest,fmtty)}
}
throw Type_mismatch}
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_format(fmt,fmtty)
{var _tI_=type_format_gen(fmt,fmtty);
if(typeof _tI_[2] === "number"){var fmt$0=_tI_[1];return fmt$0}
throw Type_mismatch}
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 _tH_=2 === padty$0?48:32,res=make$0(width$0,_tH_);
switch(padty$0)
{case 0:blit$0(str,0,res,0,len);break;
case 1:blit$0(str,0,res,width$0 - len | 0,len);break;
default:
var switch$0=0;
if(0 < len)
{var switch$1=0;
if
(43
!==
caml_string_get(str,0)
&&
45
!==
caml_string_get(str,0)
&&
32
!==
caml_string_get(str,0))
{switch$0 = 1;switch$1 = 1}
if(! switch$1)
{caml_bytes_set(res,0,caml_string_get(str,0));
blit$0(str,1,res,(width$0 - len | 0) + 1 | 0,len - 1 | 0)}}
else
switch$0 = 1;
if(switch$0)
{var switch$2=0;
if(1 < len && 48 === caml_string_get(str,0))
{var switch$3=0;
if
(120
!==
caml_string_get(str,1)
&&
88
!==
caml_string_get(str,1))
{switch$2 = 1;switch$3 = 1}
if(! switch$3)
{caml_bytes_set(res,1,caml_string_get(str,1));
blit$0(str,2,res,(width$0 - len | 0) + 2 | 0,len - 2 | 0)}}
else
switch$2 = 1;
if(switch$2)blit$0(str,0,res,width$0 - len | 0,len)}}
return caml_string_of_bytes(res)}
function fix_int_precision(prec,str)
{var
prec$0=abs(prec),
len=caml_ml_string_length(str),
c=caml_string_get(str,0),
switch$0=0;
if(58 <= c)
{if(71 <= c)
{if(! (5 < c - 97 >>> 0))switch$0 = 1}
else
if(65 <= c)switch$0 = 1}
else
{var switch$1=0;
if(32 !== c)
if(43 <= c)
switch(c - 43 | 0)
{case 5:
if(len < (prec$0 + 2 | 0) && 1 < len)
{var switch$2=0;
if
(120
===
caml_string_get(str,1)
||
88
===
caml_string_get(str,1))
switch$2 = 1;
if(switch$2)
{var res$1=make$0(prec$0 + 2 | 0,48);
caml_bytes_set(res$1,1,caml_string_get(str,1));
blit$0(str,2,res$1,(prec$0 - len | 0) + 4 | 0,len - 2 | 0);
return caml_string_of_bytes(res$1)}}
switch$0 = 1;
switch$1 = 1;
break;
case 0:
case 2:break;
case 1:
case 3:
case 4:switch$1 = 1;break;
default:switch$0 = 1;switch$1 = 1}
else
switch$1 = 1;
if(! switch$1 && len < (prec$0 + 1 | 0))
{var res$0=make$0(prec$0 + 1 | 0,48);
caml_bytes_set(res$0,0,c);
blit$0(str,1,res$0,(prec$0 - len | 0) + 2 | 0,len - 1 | 0);
return caml_string_of_bytes(res$0)}}
if(switch$0 && len < prec$0)
{var res=make$0(prec$0,48);
blit$0(str,0,res,prec$0 - len | 0,len);
return caml_string_of_bytes(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 caml_string_of_bytes(res)}
function format_of_fconv(fconv,prec)
{var
prec$0=abs(prec),
symb=char_of_fconv(_ax_,fconv),
buf=buffer_create(16);
buffer_add_char(buf,37);
bprint_fconv_flag(buf,fconv);
buffer_add_char(buf,46);
buffer_add_string(buf,caml_string_of_jsbytes("" + prec$0));
buffer_add_char(buf,symb);
return buffer_contents(buf)}
function transform_int_alt(iconv,s)
{if(13 <= iconv)
{var n=[0,0],_tC_=caml_ml_string_length(s) - 1 | 0,_tB_=0;
if(! (_tC_ < 0))
{var i$0=_tB_;
for(;;)
{var match=caml_string_unsafe_get(s,i$0);
if(! (9 < match - 48 >>> 0))n[1]++;
var _tG_=i$0 + 1 | 0;
if(_tC_ !== i$0){var i$0=_tG_;continue}
break}}
var
digits=n[1],
buf=
caml_create_bytes
(caml_ml_string_length(s) + ((digits - 1 | 0) / 3 | 0) | 0),
pos=[0,0],
put=function(c){caml_bytes_set(buf,pos[1],c);pos[1]++;return 0},
left=[0,((digits - 1 | 0) % 3 | 0) + 1 | 0],
_tE_=caml_ml_string_length(s) - 1 | 0,
_tD_=0;
if(! (_tE_ < 0))
{var i=_tD_;
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] += -1;put(c)}
var _tF_=i + 1 | 0;
if(_tE_ !== i){var i=_tF_;continue}
break}}
return caml_string_of_bytes(buf)}
return s}
function convert_int(iconv,n)
{switch(iconv)
{case 1:var _tA_=cst_d$3;break;
case 2:var _tA_=cst_d$4;break;
case 4:var _tA_=cst_i$1;break;
case 5:var _tA_=cst_i$2;break;
case 6:var _tA_=cst_x;break;
case 7:var _tA_=cst_x$0;break;
case 8:var _tA_=cst_X$0;break;
case 9:var _tA_=cst_X$1;break;
case 10:var _tA_=cst_o;break;
case 11:var _tA_=cst_o$0;break;
case 0:
case 13:var _tA_=cst_d$2;break;
case 3:
case 14:var _tA_=cst_i$0;break;
default:var _tA_=cst_u}
return transform_int_alt(iconv,caml_format_int(_tA_,n))}
function convert_int32(iconv,n)
{switch(iconv)
{case 1:var _tz_=cst_ld$0;break;
case 2:var _tz_=cst_ld$1;break;
case 4:var _tz_=cst_li$1;break;
case 5:var _tz_=cst_li$2;break;
case 6:var _tz_=cst_lx;break;
case 7:var _tz_=cst_lx$0;break;
case 8:var _tz_=cst_lX;break;
case 9:var _tz_=cst_lX$0;break;
case 10:var _tz_=cst_lo;break;
case 11:var _tz_=cst_lo$0;break;
case 0:
case 13:var _tz_=cst_ld;break;
case 3:
case 14:var _tz_=cst_li$0;break;
default:var _tz_=cst_lu}
return transform_int_alt(iconv,caml_format_int(_tz_,n))}
function convert_nativeint(iconv,n)
{switch(iconv)
{case 1:var _ty_=cst_nd$0;break;
case 2:var _ty_=cst_nd$1;break;
case 4:var _ty_=cst_ni$1;break;
case 5:var _ty_=cst_ni$2;break;
case 6:var _ty_=cst_nx;break;
case 7:var _ty_=cst_nx$0;break;
case 8:var _ty_=cst_nX;break;
case 9:var _ty_=cst_nX$0;break;
case 10:var _ty_=cst_no;break;
case 11:var _ty_=cst_no$0;break;
case 0:
case 13:var _ty_=cst_nd;break;
case 3:
case 14:var _ty_=cst_ni$0;break;
default:var _ty_=cst_nu}
return transform_int_alt(iconv,caml_format_int(_ty_,n))}
function convert_int64(iconv,n)
{switch(iconv)
{case 1:var _tx_=cst_Ld$0;break;
case 2:var _tx_=cst_Ld$1;break;
case 4:var _tx_=cst_Li$1;break;
case 5:var _tx_=cst_Li$2;break;
case 6:var _tx_=cst_Lx;break;
case 7:var _tx_=cst_Lx$0;break;
case 8:var _tx_=cst_LX;break;
case 9:var _tx_=cst_LX$0;break;
case 10:var _tx_=cst_Lo;break;
case 11:var _tx_=cst_Lo$0;break;
case 0:
case 13:var _tx_=cst_Ld;break;
case 3:
case 14:var _tx_=cst_Li$0;break;
default:var _tx_=cst_Lu}
return transform_int_alt(iconv,caml_int64_format(_tx_,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 runtime.caml_hexstring_of_float(x,prec,sign)}
function caml_special_val(str)
{var match=runtime.caml_classify_float(x);
return 3 === match
?x < 0.?cst_neg_infinity:cst_infinity
:4 <= match?cst_nan:str}
switch(fconv[2])
{case 5:
var
str=caml_format_float(format_of_fconv(fconv,prec),x),
len=caml_ml_string_length(str),
i=0;
for(;;)
{if(i === len)
var _tv_=0;
else
{var match=caml_string_get(str,i),_tu_=match - 46 | 0,switch$0=0;
if(23 < _tu_ >>> 0)
{if(55 === _tu_)switch$0 = 1}
else
if(21 < _tu_ - 1 >>> 0)switch$0 = 1;
if(! switch$0){var i$0=i + 1 | 0,i=i$0;continue}
var _tv_=1}
var _tw_=_tv_?str:cat(str,cst$29);
return caml_special_val(_tw_)}
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 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);
else
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
str=escaped(c),
l=caml_ml_string_length(str),
res=make$0(l + 2 | 0,39);
caml_blit_string(str,0,res,1,l);
var new_acc=[4,acc$0,caml_string_of_bytes(res)];
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];
if(typeof pad$5 === "number")
{if(typeof prec$3 === "number")
return prec$3
?function(p,x)
{var str=convert_float(fconv,p,x);
return make_printf(k$0,[4,acc$0,str],rest$7)}
:function(x)
{var
str=
convert_float(fconv,default_float_precision(fconv),x);
return make_printf(k$0,[4,acc$0,str],rest$7)};
var p=prec$3[1];
return function(x)
{var str=convert_float(fconv,p,x);
return make_printf(k$0,[4,acc$0,str],rest$7)}}
else
{if(0 === pad$5[0])
{var _tr_=pad$5[2],_ts_=pad$5[1];
if(typeof prec$3 === "number")
return prec$3
?function(p,x)
{var str=fix_padding(_ts_,_tr_,convert_float(fconv,p,x));
return make_printf(k$0,[4,acc$0,str],rest$7)}
:function(x)
{var
str=convert_float(fconv,default_float_precision(fconv),x),
str$0=fix_padding(_ts_,_tr_,str);
return make_printf(k$0,[4,acc$0,str$0],rest$7)};
var p$0=prec$3[1];
return function(x)
{var str=fix_padding(_ts_,_tr_,convert_float(fconv,p$0,x));
return make_printf(k$0,[4,acc$0,str],rest$7)}}
var _tt_=pad$5[1];
if(typeof prec$3 === "number")
return prec$3
?function(w,p,x)
{var str=fix_padding(_tt_,w,convert_float(fconv,p,x));
return make_printf(k$0,[4,acc$0,str],rest$7)}
:function(w,x)
{var
str=convert_float(fconv,default_float_precision(fconv),x),
str$0=fix_padding(_tt_,w,str);
return make_printf(k$0,[4,acc$0,str$0],rest$7)};
var p$1=prec$3[1];
return function(w,x)
{var str=fix_padding(_tt_,w,convert_float(fconv,p$1,x));
return make_printf(k$0,[4,acc$0,str],rest$7)}}
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 fmt$1=fmt$0[1],acc$1=[7,acc$0],acc$0=acc$1,fmt$0=fmt$1;
continue;
case 11:
var
fmt$2=fmt$0[2],
str=fmt$0[1],
acc$2=[2,acc$0,str],
acc$0=acc$2,
fmt$0=fmt$2;
continue;
case 12:
var
fmt$3=fmt$0[2],
chr=fmt$0[1],
acc$3=[3,acc$0,chr],
acc$0=acc$3,
fmt$0=fmt$3;
continue;
case 13:
var
rest$9=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$9)};
case 14:
var rest$10=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$10))};
case 15:
var rest$11=fmt$0[1];
return function(f,x)
{return make_printf
(k$0,
[6,acc$0,function(o){return caml_call2(f,o,x)}],
rest$11)};
case 16:
var rest$12=fmt$0[1];
return function(f){return make_printf(k$0,[6,acc$0,f],rest$12)};
case 17:
var
fmt$4=fmt$0[2],
fmting_lit=fmt$0[1],
acc$4=[0,acc$0,fmting_lit],
acc$0=acc$4,
fmt$0=fmt$4;
continue;
case 18:
var _tp_=fmt$0[1];
if(0 === _tp_[0])
{var
rest$13=fmt$0[2],
match=_tp_[1],
fmt$5=match[1],
k$3=
function(acc,k,rest)
{function k$0(kacc)
{return make_printf(k,[1,acc,[0,kacc]],rest)}
return k$0},
k$1=k$3(acc$0,k$0,rest$13),
k$0=k$1,
acc$0=0,
fmt$0=fmt$5;
continue}
var
rest$14=fmt$0[2],
match$0=_tp_[1],
fmt$6=match$0[1],
k$4=
function(acc,k,rest)
{function k$0(kacc){return make_printf(k,[1,acc,[1,kacc]],rest)}
return k$0},
k$2=k$4(acc$0,k$0,rest$14),
k$0=k$2,
acc$0=0,
fmt$0=fmt$6;
continue;
case 19:throw [0,Assert_failure,_ay_];
case 20:
var rest$15=fmt$0[3],new_acc=[8,acc$0,cst_Printf_bad_conversion];
return function(param){return make_printf(k$0,new_acc,rest$15)};
case 21:
var rest$16=fmt$0[2];
return function(n)
{var new_acc=[4,acc$0,caml_format_int(cst_u$0,n)];
return make_printf(k$0,new_acc,rest$16)};
case 22:
var rest$17=fmt$0[1];
return function(c)
{var new_acc=[5,acc$0,c];return make_printf(k$0,new_acc,rest$17)};
case 23:
var rest$18=fmt$0[2],ign=fmt$0[1];
if(counter < 50)
{var counter$1=counter + 1 | 0;
return make_ignored_param$0(counter$1,k$0,acc$0,ign,rest$18)}
return caml_trampoline_return
(make_ignored_param$0,[0,k$0,acc$0,ign,rest$18]);
default:
var
rest$19=fmt$0[3],
f=fmt$0[2],
arity=fmt$0[1],
_tq_=caml_call1(f,0);
if(counter < 50)
{var counter$0=counter + 1 | 0;
return make_custom$0(counter$0,k$0,acc$0,rest$19,arity,_tq_)}
return caml_trampoline_return
(make_custom$0,[0,k$0,acc$0,rest$19,arity,_tq_])}}
function make_ignored_param$0(counter,k,acc,ign,fmt)
{if(typeof ign === "number")
switch(ign)
{case 0:
if(counter < 50)
{var counter$0=counter + 1 | 0;
return make_invalid_arg(counter$0,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 1:
if(counter < 50)
{var counter$1=counter + 1 | 0;
return make_invalid_arg(counter$1,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 2:throw [0,Assert_failure,_az_];
default:
if(counter < 50)
{var counter$2=counter + 1 | 0;
return make_invalid_arg(counter$2,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt])}
else
switch(ign[0])
{case 0:
if(counter < 50)
{var counter$3=counter + 1 | 0;
return make_invalid_arg(counter$3,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 1:
if(counter < 50)
{var counter$4=counter + 1 | 0;
return make_invalid_arg(counter$4,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 2:
if(counter < 50)
{var counter$5=counter + 1 | 0;
return make_invalid_arg(counter$5,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 3:
if(counter < 50)
{var counter$6=counter + 1 | 0;
return make_invalid_arg(counter$6,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 4:
if(counter < 50)
{var counter$7=counter + 1 | 0;
return make_invalid_arg(counter$7,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 5:
if(counter < 50)
{var counter$8=counter + 1 | 0;
return make_invalid_arg(counter$8,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 6:
if(counter < 50)
{var counter$9=counter + 1 | 0;
return make_invalid_arg(counter$9,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 7:
if(counter < 50)
{var counter$10=counter + 1 | 0;
return make_invalid_arg(counter$10,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 8:
if(counter < 50)
{var counter$11=counter + 1 | 0;
return make_invalid_arg(counter$11,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
case 9:
var fmtty=ign[2];
if(counter < 50)
{var counter$14=counter + 1 | 0;
return make_from_fmtty$0(counter$14,k,acc,fmtty,fmt)}
return caml_trampoline_return(make_from_fmtty$0,[0,k,acc,fmtty,fmt]);
case 10:
if(counter < 50)
{var counter$12=counter + 1 | 0;
return make_invalid_arg(counter$12,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
default:
if(counter < 50)
{var counter$13=counter + 1 | 0;
return make_invalid_arg(counter$13,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt])}}
function make_from_fmtty$0(counter,k,acc,fmtty,fmt)
{if(typeof fmtty === "number")
{if(counter < 50)
{var counter$0=counter + 1 | 0;
return make_invalid_arg(counter$0,k,acc,fmt)}
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt])}
else
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,_to_)
{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 [0,Assert_failure,_aA_];
default:throw [0,Assert_failure,_aB_]}}
function make_invalid_arg(counter,k,acc,fmt)
{var _tn_=[8,acc,cst_Printf_bad_conversion$0];
if(counter < 50)
{var counter$0=counter + 1 | 0;
return make_printf$0(counter$0,k,_tn_,fmt)}
return caml_trampoline_return(make_printf$0,[0,k,_tn_,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 _tm_=[4,acc,f];
if(counter < 50)
{var counter$0=counter + 1 | 0;
return make_printf$0(counter$0,k,_tm_,rest)}
return caml_trampoline_return(make_printf$0,[0,k,_tm_,rest])}
function make_printf(k,acc,fmt)
{return caml_trampoline(make_printf$0(0,k,acc,fmt))}
function make_ignored_param(k,acc,ign,fmt)
{return caml_trampoline(make_ignored_param$0(0,k,acc,ign,fmt))}
function make_from_fmtty(k,acc,fmtty,fmt)
{return caml_trampoline(make_from_fmtty$0(0,k,acc,fmtty,fmt))}
function make_custom(k,acc,rest,arity,f)
{return caml_trampoline(make_custom$0(0,k,acc,rest,arity,f))}
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)};
else
{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)}}
else
{if(0 === pad[0])
{var _tj_=pad[2],_tk_=pad[1];
if(typeof prec === "number")
return prec
?function(p,x)
{var
str=
fix_padding
(_tk_,_tj_,fix_int_precision(p,caml_call2(trans,iconv,x)));
return make_printf(k,[4,acc,str],fmt)}
:function(x)
{var str=fix_padding(_tk_,_tj_,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
(_tk_,_tj_,fix_int_precision(p$0,caml_call2(trans,iconv,x)));
return make_printf(k,[4,acc,str],fmt)}}
var _tl_=pad[1];
if(typeof prec === "number")
return prec
?function(w,p,x)
{var
str=
fix_padding
(_tl_,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(_tl_,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
(_tl_,w,fix_int_precision(p$1,caml_call2(trans,iconv,x)));
return make_printf(k,[4,acc,str],fmt)}}}
function make_iprintf$0(counter,k,o,fmt)
{var k$0=k,fmt$0=fmt;
for(;;)
if(typeof fmt$0 === "number")
return caml_call1(k$0,o);
else
switch(fmt$0[0])
{case 0:
var rest=fmt$0[1],_sA_=make_iprintf(k$0,o,rest);
return function(_ti_){return _sA_};
case 1:
var rest$0=fmt$0[1],_sB_=make_iprintf(k$0,o,rest$0);
return function(_th_){return _sB_};
case 2:
var _sC_=fmt$0[1];
if(typeof _sC_ === "number")
{var rest$1=fmt$0[2],_sD_=make_iprintf(k$0,o,rest$1);
return function(_td_){return _sD_}}
else
{if(0 === _sC_[0])
{var rest$2=fmt$0[2],_sE_=make_iprintf(k$0,o,rest$2);
return function(_tg_){return _sE_}}
var
rest$3=fmt$0[2],
_sF_=make_iprintf(k$0,o,rest$3),
_sG_=function(_tf_){return _sF_};
return function(_te_){return _sG_}}
case 3:
var _sH_=fmt$0[1];
if(typeof _sH_ === "number")
{var rest$4=fmt$0[2],_sI_=make_iprintf(k$0,o,rest$4);
return function(_s$_){return _sI_}}
else
{if(0 === _sH_[0])
{var rest$5=fmt$0[2],_sJ_=make_iprintf(k$0,o,rest$5);
return function(_tc_){return _sJ_}}
var
rest$6=fmt$0[2],
_sK_=make_iprintf(k$0,o,rest$6),
_sL_=function(_tb_){return _sK_};
return function(_ta_){return _sL_}}
case 4:
var rest$7=fmt$0[4],prec=fmt$0[3],pad=fmt$0[2];
return fn_of_padding_precision(k$0,o,rest$7,pad,prec);
case 5:
var rest$8=fmt$0[4],prec$0=fmt$0[3],pad$0=fmt$0[2];
return fn_of_padding_precision(k$0,o,rest$8,pad$0,prec$0);
case 6:
var rest$9=fmt$0[4],prec$1=fmt$0[3],pad$1=fmt$0[2];
return fn_of_padding_precision(k$0,o,rest$9,pad$1,prec$1);
case 7:
var rest$10=fmt$0[4],prec$2=fmt$0[3],pad$2=fmt$0[2];
return fn_of_padding_precision(k$0,o,rest$10,pad$2,prec$2);
case 8:
var rest$11=fmt$0[4],prec$3=fmt$0[3],pad$3=fmt$0[2];
return fn_of_padding_precision(k$0,o,rest$11,pad$3,prec$3);
case 9:
var _sM_=fmt$0[1];
if(typeof _sM_ === "number")
{var rest$12=fmt$0[2],_sN_=make_iprintf(k$0,o,rest$12);
return function(_s7_){return _sN_}}
else
{if(0 === _sM_[0])
{var rest$13=fmt$0[2],_sO_=make_iprintf(k$0,o,rest$13);
return function(_s__){return _sO_}}
var
rest$14=fmt$0[2],
_sP_=make_iprintf(k$0,o,rest$14),
_sQ_=function(_s9_){return _sP_};
return function(_s8_){return _sQ_}}
case 10:var fmt$1=fmt$0[1],fmt$0=fmt$1;continue;
case 11:var fmt$2=fmt$0[2],fmt$0=fmt$2;continue;
case 12:var fmt$3=fmt$0[2],fmt$0=fmt$3;continue;
case 13:
var rest$15=fmt$0[3],_sR_=make_iprintf(k$0,o,rest$15);
return function(_s6_){return _sR_};
case 14:
var rest$16=fmt$0[3],fmtty=fmt$0[2];
return function(param)
{var fmt=param[1];
return make_iprintf(k$0,o,concat_fmt(recast(fmt,fmtty),rest$16))};
case 15:
var
rest$17=fmt$0[1],
_sS_=make_iprintf(k$0,o,rest$17),
_sT_=function(_s5_){return _sS_};
return function(_s4_){return _sT_};
case 16:
var rest$18=fmt$0[1],_sU_=make_iprintf(k$0,o,rest$18);
return function(_s3_){return _sU_};
case 17:var fmt$4=fmt$0[2],fmt$0=fmt$4;continue;
case 18:
var _sV_=fmt$0[1];
if(0 === _sV_[0])
{var
rest$19=fmt$0[2],
match=_sV_[1],
fmt$5=match[1],
k$3=
function(k,rest)
{function k$0(koc){return make_iprintf(k,koc,rest)}return k$0},
k$1=k$3(k$0,rest$19),
k$0=k$1,
fmt$0=fmt$5;
continue}
var
rest$20=fmt$0[2],
match$0=_sV_[1],
fmt$6=match$0[1],
k$4=
function(k,rest)
{function k$0(koc){return make_iprintf(k,koc,rest)}return k$0},
k$2=k$4(k$0,rest$20),
k$0=k$2,
fmt$0=fmt$6;
continue;
case 19:throw [0,Assert_failure,_aC_];
case 20:
var rest$21=fmt$0[3],_sW_=make_iprintf(k$0,o,rest$21);
return function(_s2_){return _sW_};
case 21:
var rest$22=fmt$0[2],_sX_=make_iprintf(k$0,o,rest$22);
return function(_s1_){return _sX_};
case 22:
var rest$23=fmt$0[1],_sY_=make_iprintf(k$0,o,rest$23);
return function(_s0_){return _sY_};
case 23:
var rest$24=fmt$0[2],ign=fmt$0[1],_sZ_=0;
return make_ignored_param
(function(param){return caml_call1(k$0,o)},_sZ_,ign,rest$24);
default:
var rest$25=fmt$0[3],arity=fmt$0[1];
if(counter < 50)
{var counter$0=counter + 1 | 0;
return fn_of_custom_arity$0(counter$0,k$0,o,rest$25,arity)}
return caml_trampoline_return
(fn_of_custom_arity$0,[0,k$0,o,rest$25,arity])}}
function fn_of_custom_arity$0(counter,k,o,fmt,param)
{if(param)
{var arity=param[1],_sy_=fn_of_custom_arity(k,o,fmt,arity);
return function(_sz_){return _sy_}}
if(counter < 50)
{var counter$0=counter + 1 | 0;
return make_iprintf$0(counter$0,k,o,fmt)}
return caml_trampoline_return(make_iprintf$0,[0,k,o,fmt])}
function make_iprintf(k,o,fmt)
{return caml_trampoline(make_iprintf$0(0,k,o,fmt))}
function fn_of_custom_arity(k,o,fmt,param)
{return caml_trampoline(fn_of_custom_arity$0(0,k,o,fmt,param))}
function fn_of_padding_precision(k,o,fmt,pad,prec)
{if(typeof pad === "number")
{if(typeof prec === "number")
{if(prec)
{var _r6_=make_iprintf(k,o,fmt),_r7_=function(_sm_){return _r6_};
return function(_sl_){return _r7_}}
var _r8_=make_iprintf(k,o,fmt);
return function(_sk_){return _r8_}}
var _r9_=make_iprintf(k,o,fmt);
return function(_sj_){return _r9_}}
else
{if(0 === pad[0])
{if(typeof prec === "number")
{if(prec)
{var _r__=make_iprintf(k,o,fmt),_r$_=function(_sx_){return _r__};
return function(_sw_){return _r$_}}
var _sa_=make_iprintf(k,o,fmt);
return function(_sv_){return _sa_}}
var _sb_=make_iprintf(k,o,fmt);
return function(_su_){return _sb_}}
if(typeof prec === "number")
{if(prec)
{var
_sc_=make_iprintf(k,o,fmt),
_sd_=function(_st_){return _sc_},
_se_=function(_ss_){return _sd_};
return function(_sr_){return _se_}}
var _sf_=make_iprintf(k,o,fmt),_sg_=function(_sq_){return _sf_};
return function(_sp_){return _sg_}}
var _sh_=make_iprintf(k,o,fmt),_si_=function(_so_){return _sh_};
return function(_sn_){return _si_}}}
function output_acc(o,acc)
{var acc$0=acc;
for(;;)
if(typeof acc$0 === "number")
return 0;
else
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 _r4_=acc$0[2],_r5_=acc$0[1];
if(0 === _r4_[0])
{var acc$1=_r4_[1];
output_acc(o,_r5_);
output_string(o,cst$30);
var acc$0=acc$1;
continue}
var acc$2=_r4_[1];
output_acc(o,_r5_);
output_string(o,cst$31);
var acc$0=acc$2;
continue;
case 6:
var f=acc$0[2],p$2=acc$0[1];
output_acc(o,p$2);
return caml_call1(f,o);
case 7:var p$3=acc$0[1];output_acc(o,p$3);return caml_ml_flush(o);
case 8:
var msg=acc$0[2],p$4=acc$0[1];
output_acc(o,p$4);
return invalid_arg(msg);
case 2:
case 4:
var s$0=acc$0[2],p$0=acc$0[1];
output_acc(o,p$0);
return output_string(o,s$0);
default:
var c=acc$0[2],p$1=acc$0[1];
output_acc(o,p$1);
return caml_ml_output_char(o,c)}}
function bufput_acc(b,acc)
{var acc$0=acc;
for(;;)
if(typeof acc$0 === "number")
return 0;
else
switch(acc$0[0])
{case 0:
var
fmting_lit=acc$0[2],
p=acc$0[1],
s=string_of_formatting_lit(fmting_lit);
bufput_acc(b,p);
return add_string(b,s);
case 1:
var _r2_=acc$0[2],_r3_=acc$0[1];
if(0 === _r2_[0])
{var acc$1=_r2_[1];
bufput_acc(b,_r3_);
add_string(b,cst$32);
var acc$0=acc$1;
continue}
var acc$2=_r2_[1];
bufput_acc(b,_r3_);
add_string(b,cst$33);
var acc$0=acc$2;
continue;
case 6:
var f=acc$0[2],p$2=acc$0[1];
bufput_acc(b,p$2);
return caml_call1(f,b);
case 7:var acc$3=acc$0[1],acc$0=acc$3;continue;
case 8:
var msg=acc$0[2],p$3=acc$0[1];
bufput_acc(b,p$3);
return invalid_arg(msg);
case 2:
case 4:
var s$0=acc$0[2],p$0=acc$0[1];
bufput_acc(b,p$0);
return add_string(b,s$0);
default:
var c=acc$0[2],p$1=acc$0[1];bufput_acc(b,p$1);return add_char(b,c)}}
function strput_acc(b,acc)
{var acc$0=acc;
for(;;)
if(typeof acc$0 === "number")
return 0;
else
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 add_string(b,s);
case 1:
var _r0_=acc$0[2],_r1_=acc$0[1];
if(0 === _r0_[0])
{var acc$1=_r0_[1];
strput_acc(b,_r1_);
add_string(b,cst$34);
var acc$0=acc$1;
continue}
var acc$2=_r0_[1];
strput_acc(b,_r1_);
add_string(b,cst$35);
var acc$0=acc$2;
continue;
case 6:
var f=acc$0[2],p$2=acc$0[1];
strput_acc(b,p$2);
return add_string(b,caml_call1(f,0));
case 7:var acc$3=acc$0[1],acc$0=acc$3;continue;
case 8:
var msg=acc$0[2],p$3=acc$0[1];
strput_acc(b,p$3);
return invalid_arg(msg);
case 2:
case 4:
var s$0=acc$0[2],p$0=acc$0[1];
strput_acc(b,p$0);
return add_string(b,s$0);
default:
var c=acc$0[2],p$1=acc$0[1];strput_acc(b,p$1);return add_char(b,c)}}
function failwith_message(param)
{var fmt=param[1],buf=create$2(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(caml_string_equal(str,cst$36))return _aD_;
var len=caml_ml_string_length(str);
function invalid_box(param)
{return caml_call1(failwith_message(_aE_),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;
continue}}
function parse_lword(i,j)
{var j$0=j;
for(;;)
{if(j$0 === len)return j$0;
var match=caml_string_get(str,j$0);
if(25 < match - 97 >>> 0)return j$0;
var j$1=j$0 + 1 | 0,j$0=j$1;
continue}}
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),switch$0=0;
if(48 <= match)
{if(! (58 <= match))switch$0 = 1}
else
if(45 === match)switch$0 = 1;
if(switch$0){var j$1=j$0 + 1 | 0,j$0=j$1;continue}
return j$0}}
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
_rY_=caml_int_of_string(sub$0(str,nstart,nend - nstart | 0)),
indent=_rY_}
catch(_rZ_)
{_rZ_ = caml_wrap_exception(_rZ_);
if(_rZ_[1] !== Failure)throw _rZ_;
var indent=invalid_box(0)}
var exp_end=parse_spaces(nend);
if(exp_end !== len)invalid_box(0);
var switch$0=0;
if
(caml_string_notequal(box_name,cst$37)
&&
caml_string_notequal(box_name,cst_b$0))
var
box_type=
caml_string_notequal(box_name,cst_h)
?caml_string_notequal(box_name,cst_hov)
?caml_string_notequal(box_name,cst_hv)
?caml_string_notequal(box_name,cst_v)?invalid_box(0):1
:2
:3
:0;
else
switch$0 = 1;
if(switch$0)var box_type=4;
return [0,indent,box_type]}
function make_padding_fmt_ebb(pad,fmt)
{if(typeof pad === "number")
return [0,0,fmt];
else
{if(0 === pad[0]){var w=pad[2],s=pad[1];return [0,[0,s,w],fmt]}
var s$0=pad[1];
return [0,[1,s$0],fmt]}}
function make_padprec_fmt_ebb(pad,prec,fmt)
{if(typeof prec === "number")
var match=prec?[0,1,fmt]:[0,0,fmt];
else
var p=prec[1],match=[0,[0,p],fmt];
var prec$0=match[1];
if(typeof pad === "number")
return [0,0,prec$0,fmt];
else
{if(0 === pad[0]){var w=pad[2],s=pad[1];return [0,[0,s,w],prec$0,fmt]}
var s$0=pad[1];
return [0,[1,s$0],prec$0,fmt]}}
function fmt_ebb_of_string(legacy_behavior,str)
{if(legacy_behavior)
var flag=legacy_behavior[1],legacy_behavior$0=flag;
else
var legacy_behavior$0=1;
function invalid_format_message(str_ind,msg)
{return caml_call3(failwith_message(_aF_),str,str_ind,msg)}
function unexpected_end_of_format(end_ind)
{return invalid_format_message(end_ind,cst_unexpected_end_of_format)}
function invalid_format_without(str_ind,c,s)
{return caml_call4(failwith_message(_aG_),str,str_ind,c,s)}
function expected_character(str_ind,expected,read)
{return caml_call4(failwith_message(_aH_),str,str_ind,expected,read)}
function add_literal(lit_start,str_ind,fmt)
{var size=str_ind - lit_start | 0;
return 0 === size
?[0,fmt]
:1 === size
?[0,[12,caml_string_get(str,lit_start),fmt]]
:[0,[11,sub$0(str,lit_start,size),fmt]]}
function parse_positive(str_ind,end_ind,acc)
{var str_ind$0=str_ind,acc$0=acc;
for(;;)
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
var c=caml_string_get(str,str_ind$0);
if(9 < c - 48 >>> 0)return [0,str_ind$0,acc$0];
var acc$1=(acc$0 * 10 | 0) + (c - 48 | 0) | 0;
if(max_string_length < acc$1)
return caml_call3
(failwith_message(_aY_),str,acc$1,max_string_length);
var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1,acc$0=acc$1;
continue}}
function parse_integer(str_ind,end_ind)
{if(str_ind === end_ind)unexpected_end_of_format(end_ind);
var match=caml_string_get(str,str_ind);
if(48 <= match)
{if(! (58 <= match))return parse_positive(str_ind,end_ind,0)}
else
if(45 === match)
{if((str_ind + 1 | 0) === end_ind)unexpected_end_of_format(end_ind);
var c=caml_string_get(str,str_ind + 1 | 0);
if(9 < c - 48 >>> 0)
return expected_character(str_ind + 1 | 0,cst_digit,c);
var
match$0=parse_positive(str_ind + 1 | 0,end_ind,0),
n=match$0[2],
next_ind=match$0[1];
return [0,next_ind,- n | 0]}
throw [0,Assert_failure,_aZ_]}
function parse_spaces(str_ind,end_ind)
{var str_ind$0=str_ind;
for(;;)
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
if(32 === caml_string_get(str,str_ind$0))
{var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1;continue}
return str_ind$0}}
function incompatible_flag(pct_ind,str_ind,symb,option)
{var subfmt=sub$0(str,pct_ind,str_ind - pct_ind | 0);
return caml_call5
(failwith_message(_a4_),str,pct_ind,option,symb,subfmt)}
function compute_int_conv(pct_ind,str_ind,plus,hash,space,symb)
{var plus$0=plus,hash$0=hash,space$0=space;
for(;;)
{var switch$0=0;
if(plus$0)
{if(hash$0)
switch$0 = 1;
else
if(! space$0){if(100 === symb)return 1;if(105 === symb)return 4}}
else
if(hash$0)
if(space$0)
switch$0 = 1;
else
{var switcher$0=symb - 88 | 0;
if(32 < switcher$0 >>> 0)
switch$0 = 1;
else
switch(switcher$0)
{case 0:return 9;
case 12:return 13;
case 17:return 14;
case 23:return 11;
case 29:return 15;
case 32:return 7;
default:switch$0 = 1}}
else
if(space$0)
{if(100 === symb)return 2;if(105 === symb)return 5}
else
{var switcher$1=symb - 88 | 0;
if(! (32 < switcher$1 >>> 0))
switch(switcher$1)
{case 0:return 8;
case 12:return 0;
case 17:return 3;
case 23:return 10;
case 29:return 12;
case 32:return 6
}}
if(switch$0)
{var switcher=symb - 88 | 0;
if(! (32 < switcher >>> 0))
switch(switcher)
{case 0:if(legacy_behavior$0)return 9;break;
case 23:if(legacy_behavior$0)return 11;break;
case 32:if(legacy_behavior$0)return 7;break;
case 12:
case 17:
case 29:
if(legacy_behavior$0){var hash$0=0;continue}
return incompatible_flag(pct_ind,str_ind,symb,cst$49)
}}
if(plus$0)
{if(space$0)
{if(legacy_behavior$0){var space$0=0;continue}
return incompatible_flag(pct_ind,str_ind,32,cst$46)}
if(legacy_behavior$0){var plus$0=0;continue}
return incompatible_flag(pct_ind,str_ind,symb,cst$47)}
if(space$0)
{if(legacy_behavior$0){var space$0=0;continue}
return incompatible_flag(pct_ind,str_ind,symb,cst$48)}
throw [0,Assert_failure,_a2_]}}
function search_subformat_end(str_ind,end_ind,c)
{var str_ind$0=str_ind;
for(;;)
{if(str_ind$0 === end_ind)
caml_call3(failwith_message(_a0_),str,c,end_ind);
var match=caml_string_get(str,str_ind$0);
if(37 === match)
{if((str_ind$0 + 1 | 0) === end_ind)
unexpected_end_of_format(end_ind);
if(caml_string_get(str,str_ind$0 + 1 | 0) === c)return str_ind$0;
var match$0=caml_string_get(str,str_ind$0 + 1 | 0);
if(95 <= match$0)
{if(123 <= match$0)
{if(! (126 <= match$0))
switch(match$0 - 123 | 0)
{case 0:
var
sub_end=search_subformat_end(str_ind$0 + 2 | 0,end_ind,125),
str_ind$2=sub_end + 2 | 0,
str_ind$0=str_ind$2;
continue;
case 1:break;
default:
return expected_character
(str_ind$0 + 1 | 0,cst_character,125)}}
else
if(! (96 <= match$0))
{if((str_ind$0 + 2 | 0) === end_ind)
unexpected_end_of_format(end_ind);
var match$1=caml_string_get(str,str_ind$0 + 2 | 0);
if(40 === match$1)
{var
sub_end$0=search_subformat_end(str_ind$0 + 3 | 0,end_ind,41),
str_ind$3=sub_end$0 + 2 | 0,
str_ind$0=str_ind$3;
continue}
if(123 === match$1)
{var
sub_end$1=
search_subformat_end(str_ind$0 + 3 | 0,end_ind,125),
str_ind$4=sub_end$1 + 2 | 0,
str_ind$0=str_ind$4;
continue}
var str_ind$5=str_ind$0 + 3 | 0,str_ind$0=str_ind$5;
continue}}
else
{if(40 === match$0)
{var
sub_end$2=search_subformat_end(str_ind$0 + 2 | 0,end_ind,41),
str_ind$6=sub_end$2 + 2 | 0,
str_ind$0=str_ind$6;
continue}
if(41 === match$0)
return expected_character(str_ind$0 + 1 | 0,cst_character$0,41)}
var str_ind$1=str_ind$0 + 2 | 0,str_ind$0=str_ind$1;
continue}
var str_ind$7=str_ind$0 + 1 | 0,str_ind$0=str_ind$7;
continue}}
function parse_magic_size(str_ind,end_ind)
{try
{var
str_ind_1=parse_spaces(str_ind,end_ind),
match$2=caml_string_get(str,str_ind_1),
switch$0=0;
if(48 <= match$2)
{if(! (58 <= match$2))switch$0 = 1}
else
if(45 === match$2)switch$0 = 1;
if(switch$0)
{var
match$3=parse_integer(str_ind_1,end_ind),
size=match$3[2],
str_ind_2=match$3[1],
str_ind_3=parse_spaces(str_ind_2,end_ind);
if(62 !== caml_string_get(str,str_ind_3))throw Not_found;
var
s=sub$0(str,str_ind - 2 | 0,(str_ind_3 - str_ind | 0) + 3 | 0),
_rW_=[0,[0,str_ind_3 + 1 | 0,[1,s,size]]]}
else
var _rW_=0;
var _rV_=_rW_}
catch(_rX_)
{_rX_ = caml_wrap_exception(_rX_);
if(_rX_ !== Not_found && _rX_[1] !== Failure)throw _rX_;
var _rV_=0}
if(_rV_)
{var
match=_rV_[1],
formatting_lit=match[2],
next_ind=match[1],
match$0=parse(next_ind,end_ind),
fmt_rest=match$0[1];
return [0,[17,formatting_lit,fmt_rest]]}
var match$1=parse(str_ind,end_ind),fmt_rest$0=match$1[1];
return [0,[17,_aW_,fmt_rest$0]]}
function parse_good_break(str_ind,end_ind)
{try
{var
_rO_=str_ind === end_ind?1:0,
_rP_=_rO_ || (60 !== caml_string_get(str,str_ind)?1:0);
if(_rP_)throw Not_found;
var
str_ind_1=parse_spaces(str_ind + 1 | 0,end_ind),
match$0=caml_string_get(str,str_ind_1),
switch$0=0;
if(48 <= match$0)
{if(! (58 <= match$0))switch$0 = 1}
else
if(45 === match$0)switch$0 = 1;
if(! switch$0)throw Not_found;
var
match$1=parse_integer(str_ind_1,end_ind),
width=match$1[2],
str_ind_2=match$1[1],
str_ind_3=parse_spaces(str_ind_2,end_ind),
match$2=caml_string_get(str,str_ind_3),
switcher=match$2 - 45 | 0,
switch$1=0;
if(12 < switcher >>> 0)
if(17 === switcher)
var
s=sub$0(str,str_ind - 2 | 0,(str_ind_3 - str_ind | 0) + 3 | 0),
_rQ_=[0,s,width,0],
_rR_=str_ind_3 + 1 | 0,
formatting_lit$0=_rQ_,
next_ind=_rR_;
else
switch$1 = 1;
else
if(1 < switcher - 1 >>> 0)
{var
match$3=parse_integer(str_ind_3,end_ind),
offset=match$3[2],
str_ind_4=match$3[1],
str_ind_5=parse_spaces(str_ind_4,end_ind);
if(62 !== caml_string_get(str,str_ind_5))throw Not_found;
var
s$0=sub$0(str,str_ind - 2 | 0,(str_ind_5 - str_ind | 0) + 3 | 0),
_rS_=[0,s$0,width,offset],
_rT_=str_ind_5 + 1 | 0,
formatting_lit$0=_rS_,
next_ind=_rT_}
else
switch$1 = 1;
if(switch$1)throw Not_found}
catch(_rU_)
{_rU_ = caml_wrap_exception(_rU_);
if(_rU_ !== Not_found && _rU_[1] !== Failure)throw _rU_;
var formatting_lit$0=formatting_lit,next_ind=str_ind}
var match=parse(next_ind,end_ind),fmt_rest=match[1];
return [0,[17,formatting_lit$0,fmt_rest]]}
function parse_tag(is_open_tag,str_ind,end_ind)
{try
{if(str_ind === end_ind)throw Not_found;
var match$0=caml_string_get(str,str_ind);
if(60 === match$0)
{var ind=index_from$0(str,str_ind + 1 | 0,62);
if(end_ind <= ind)throw Not_found;
var
sub_str=sub$0(str,str_ind,(ind - str_ind | 0) + 1 | 0),
match$1=parse(ind + 1 | 0,end_ind),
fmt_rest$0=match$1[1],
match$2=parse(str_ind,ind + 1 | 0),
sub_fmt=match$2[1],
sub_format$0=[0,sub_fmt,sub_str],
formatting$0=is_open_tag?[0,sub_format$0]:[1,sub_format$0],
_rM_=[0,[18,formatting$0,fmt_rest$0]];
return _rM_}
throw Not_found}
catch(_rN_)
{_rN_ = caml_wrap_exception(_rN_);
if(_rN_ === Not_found)
{var
match=parse(str_ind,end_ind),
fmt_rest=match[1],
formatting=is_open_tag?[0,sub_format]:[1,sub_format];
return [0,[18,formatting,fmt_rest]]}
throw _rN_}}
function parse_flags(pct_ind,str_ind,end_ind,ign)
{var zero=[0,0],minus=[0,0],plus=[0,0],space=[0,0],hash=[0,0];
function set_flag(str_ind,flag)
{var _rJ_=flag[1],_rK_=_rJ_?1 - legacy_behavior$0:_rJ_;
if(_rK_)
{var _rL_=caml_string_get(str,str_ind);
caml_call3(failwith_message(_aI_),str,str_ind,_rL_)}
flag[1] = 1;
return 0}
var str_ind$0=str_ind;
for(;;)
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
var match=caml_string_get(str,str_ind$0),switcher=match - 32 | 0;
if(! (16 < switcher >>> 0))
switch(switcher)
{case 0:
set_flag(str_ind$0,space);
var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1;
continue;
case 3:
set_flag(str_ind$0,hash);
var str_ind$2=str_ind$0 + 1 | 0,str_ind$0=str_ind$2;
continue;
case 11:
set_flag(str_ind$0,plus);
var str_ind$3=str_ind$0 + 1 | 0,str_ind$0=str_ind$3;
continue;
case 13:
set_flag(str_ind$0,minus);
var str_ind$4=str_ind$0 + 1 | 0,str_ind$0=str_ind$4;
continue;
case 16:
set_flag(str_ind$0,zero);
var str_ind$5=str_ind$0 + 1 | 0,str_ind$0=str_ind$5;
continue
}
var
_rE_=space[1],
_rF_=hash[1],
_rG_=plus[1],
_rH_=minus[1],
_rI_=zero[1];
if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
var
padty=
_rI_
?_rH_
?legacy_behavior$0
?0
:incompatible_flag(pct_ind,str_ind$0,45,cst_0)
:2
:_rH_?0:1,
match$0=caml_string_get(str,str_ind$0);
if(48 <= match$0)
{if(! (58 <= match$0))
{var
match$1=parse_positive(str_ind$0,end_ind,0),
width=match$1[2],
new_ind=match$1[1];
return parse_after_padding
(pct_ind,
new_ind,
end_ind,
_rH_,
_rG_,
_rF_,
_rE_,
ign,
[0,padty,width])}}
else
if(42 === match$0)
return parse_after_padding
(pct_ind,
str_ind$0 + 1 | 0,
end_ind,
_rH_,
_rG_,
_rF_,
_rE_,
ign,
[1,padty]);
switch(padty)
{case 0:
if(1 - legacy_behavior$0)
invalid_format_without(str_ind$0 - 1 | 0,45,cst_padding);
return parse_after_padding
(pct_ind,str_ind$0,end_ind,_rH_,_rG_,_rF_,_rE_,ign,0);
case 1:
return parse_after_padding
(pct_ind,str_ind$0,end_ind,_rH_,_rG_,_rF_,_rE_,ign,0);
default:
return parse_after_padding
(pct_ind,str_ind$0,end_ind,_rH_,_rG_,_rF_,_rE_,ign,_aJ_)}}}
function parse_after_padding
(pct_ind,str_ind,end_ind,minus,plus,hash,space,ign,pad)
{if(str_ind === end_ind)unexpected_end_of_format(end_ind);
var symb=caml_string_get(str,str_ind);
if(46 === symb)
{var str_ind$0=str_ind + 1 | 0;
if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
var
parse_literal=
function(minus,str_ind)
{var
match=parse_positive(str_ind,end_ind,0),
prec=match[2],
new_ind=match[1];
return parse_after_precision
(pct_ind,
new_ind,
end_ind,
minus,
plus,
hash,
space,
ign,
pad,
[0,prec])},
symb$0=caml_string_get(str,str_ind$0);
if(48 <= symb$0)
{if(! (58 <= symb$0))return parse_literal(minus,str_ind$0)}
else
if(42 <= symb$0)
switch(symb$0 - 42 | 0)
{case 0:
return parse_after_precision
(pct_ind,
str_ind$0 + 1 | 0,
end_ind,
minus,
plus,
hash,
space,
ign,
pad,
1);
case 1:
case 3:
if(legacy_behavior$0)
{var
_rD_=str_ind$0 + 1 | 0,
minus$0=minus || (45 === symb$0?1:0);
return parse_literal(minus$0,_rD_)}
break
}
return legacy_behavior$0
?parse_after_precision
(pct_ind,
str_ind$0,
end_ind,
minus,
plus,
hash,
space,
ign,
pad,
_aK_)
:invalid_format_without(str_ind$0 - 1 | 0,46,cst_precision)}
return parse_conversion
(pct_ind,
str_ind + 1 | 0,
end_ind,
plus,
hash,
space,
ign,
pad,
0,
pad,
symb)}
function parse_after_precision
(pct_ind,str_ind,end_ind,minus,plus,hash,space,ign,pad,prec)
{if(str_ind === end_ind)unexpected_end_of_format(end_ind);
function parse_conv(padprec)
{return parse_conversion
(pct_ind,
str_ind + 1 | 0,
end_ind,
plus,
hash,
space,
ign,
pad,
prec,
padprec,
caml_string_get(str,str_ind))}
if(typeof pad === "number")
{if(typeof prec === "number" && ! prec)return parse_conv(0);
if(minus)
{if(typeof prec === "number")return parse_conv(_aL_);
var n=prec[1];
return parse_conv([0,0,n])}
if(typeof prec === "number")return parse_conv(_aM_);
var n$0=prec[1];
return parse_conv([0,1,n$0])}
return parse_conv(pad)}
function parse_conversion
(pct_ind,str_ind,end_ind,plus,hash,space,ign,pad,prec,padprec,symb)
{var
plus_used=[0,0],
hash_used=[0,0],
space_used=[0,0],
ign_used=[0,0],
pad_used=[0,0],
prec_used=[0,0];
function get_plus(param){plus_used[1] = 1;return plus}
function get_hash(param){hash_used[1] = 1;return hash}
function get_space(param){space_used[1] = 1;return space}
function get_ign(param){ign_used[1] = 1;return ign}
function get_pad(param){pad_used[1] = 1;return pad}
function get_prec(param){prec_used[1] = 1;return prec}
function get_padprec(param){pad_used[1] = 1;return padprec}
function get_int_pad(param)
{var pad=get_pad(0),match=get_prec(0);
if(typeof match === "number" && ! match)return pad;
if(typeof pad === "number")
return 0;
else
{if(0 === pad[0])
{if(2 <= pad[1])
{var n=pad[2];
return legacy_behavior$0
?[0,1,n]
:incompatible_flag(pct_ind,str_ind,48,cst_precision$0)}
return pad}
return 2 <= pad[1]
?legacy_behavior$0
?_aN_
:incompatible_flag(pct_ind,str_ind,48,cst_precision$1)
:pad}}
function check_no_0(symb,pad)
{if(typeof pad === "number")
return pad;
else
{if(0 === pad[0])
{if(2 <= pad[1])
{var width=pad[2];
return legacy_behavior$0
?[0,1,width]
:incompatible_flag(pct_ind,str_ind,symb,cst_0$0)}
return pad}
return 2 <= pad[1]
?legacy_behavior$0
?_aO_
:incompatible_flag(pct_ind,str_ind,symb,cst_0$1)
:pad}}
function opt_of_pad(c,pad)
{if(typeof pad === "number")
return 0;
else
{if(0 === pad[0])
switch(pad[1])
{case 0:
var width=pad[2];
return legacy_behavior$0
?[0,width]
:incompatible_flag(pct_ind,str_ind,c,cst$38);
case 1:var width$0=pad[2];return [0,width$0];
default:
var width$1=pad[2];
return legacy_behavior$0
?[0,width$1]
:incompatible_flag(pct_ind,str_ind,c,cst_0$2)}
return incompatible_flag(pct_ind,str_ind,c,cst$39)}}
function get_pad_opt(c){return opt_of_pad(c,get_pad(0))}
function get_padprec_opt(c){return opt_of_pad(c,get_padprec(0))}
var switch$0=0;
if(124 <= symb)
switch$0 = 1;
else
switch(symb)
{case 33:
var
match$6=parse(str_ind,end_ind),
fmt_rest$5=match$6[1],
fmt_result=[0,[10,fmt_rest$5]];
break;
case 40:
var
sub_end=search_subformat_end(str_ind,end_ind,41),
match$8=parse(sub_end + 2 | 0,end_ind),
fmt_rest$7=match$8[1],
match$9=parse(str_ind,sub_end),
sub_fmt=match$9[1],
sub_fmtty=fmtty_of_fmt(sub_fmt);
if(get_ign(0))
var
ignored$2=[9,get_pad_opt(95),sub_fmtty],
_ra_=[0,[23,ignored$2,fmt_rest$7]];
else
var _ra_=[0,[14,get_pad_opt(40),sub_fmtty,fmt_rest$7]];
var fmt_result=_ra_;
break;
case 44:var fmt_result=parse(str_ind,end_ind);break;
case 67:
var
match$12=parse(str_ind,end_ind),
fmt_rest$10=match$12[1],
_rc_=get_ign(0)?[0,[23,1,fmt_rest$10]]:[0,[1,fmt_rest$10]],
fmt_result=_rc_;
break;
case 78:
var
match$16=parse(str_ind,end_ind),
fmt_rest$14=match$16[1],
counter$0=2;
if(get_ign(0))
var ignored$6=[11,counter$0],_ri_=[0,[23,ignored$6,fmt_rest$14]];
else
var _ri_=[0,[21,counter$0,fmt_rest$14]];
var fmt_result=_ri_;
break;
case 83:
var
pad$6=check_no_0(symb,get_padprec(0)),
match$17=parse(str_ind,end_ind),
fmt_rest$15=match$17[1];
if(get_ign(0))
var
ignored$7=[1,get_padprec_opt(95)],
_rj_=[0,[23,ignored$7,fmt_rest$15]];
else
var
match$18=make_padding_fmt_ebb(pad$6,fmt_rest$15),
fmt_rest$16=match$18[2],
pad$7=match$18[1],
_rj_=[0,[3,pad$7,fmt_rest$16]];
var fmt_result=_rj_;
break;
case 91:
if(str_ind === end_ind)unexpected_end_of_format(end_ind);
var
char_set=create_char_set(0),
add_char=function(c){return add_in_char_set(char_set,c)},
add_range=
function(c$0,c)
{if(! (c < c$0))
{var i=c$0;
for(;;)
{add_in_char_set(char_set,char_of_int(i));
var _rC_=i + 1 | 0;
if(c !== i){var i=_rC_;continue}
break}}
return 0},
fail_single_percent=
function(str_ind)
{return caml_call2(failwith_message(_aX_),str,str_ind)},
parse_char_set_content=
function(counter,str_ind,end_ind)
{var str_ind$0=str_ind;
for(;;)
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
var c=caml_string_get(str,str_ind$0);
if(45 === c)
{add_char(45);
var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1;
continue}
if(93 === c)return str_ind$0 + 1 | 0;
var _rB_=str_ind$0 + 1 | 0;
if(counter < 50)
{var counter$0=counter + 1 | 0;
return parse_char_set_after_char$0(counter$0,_rB_,end_ind,c)}
return caml_trampoline_return
(parse_char_set_after_char$0,[0,_rB_,end_ind,c])}},
parse_char_set_after_char$0=
function(counter,str_ind,end_ind,c)
{var str_ind$0=str_ind,c$0=c;
for(;;)
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
var c$1=caml_string_get(str,str_ind$0),switch$0=0;
if(46 <= c$1)
{if(64 === c$1)
switch$0 = 1;
else
if(93 === c$1){add_char(c$0);return str_ind$0 + 1 | 0}}
else
if(37 === c$1)
switch$0 = 1;
else
if(45 <= c$1)
{var str_ind$2=str_ind$0 + 1 | 0;
if(str_ind$2 === end_ind)unexpected_end_of_format(end_ind);
var c$2=caml_string_get(str,str_ind$2);
if(37 === c$2)
{if((str_ind$2 + 1 | 0) === end_ind)
unexpected_end_of_format(end_ind);
var c$3=caml_string_get(str,str_ind$2 + 1 | 0);
if(37 !== c$3 && 64 !== c$3)
return fail_single_percent(str_ind$2);
add_range(c$0,c$3);
var _rz_=str_ind$2 + 2 | 0;
if(counter < 50)
{var counter$2=counter + 1 | 0;
return parse_char_set_content(counter$2,_rz_,end_ind)}
return caml_trampoline_return
(parse_char_set_content,[0,_rz_,end_ind])}
if(93 === c$2)
{add_char(c$0);add_char(45);return str_ind$2 + 1 | 0}
add_range(c$0,c$2);
var _rA_=str_ind$2 + 1 | 0;
if(counter < 50)
{var counter$1=counter + 1 | 0;
return parse_char_set_content(counter$1,_rA_,end_ind)}
return caml_trampoline_return
(parse_char_set_content,[0,_rA_,end_ind])}
if(switch$0 && 37 === c$0)
{add_char(c$1);
var _ry_=str_ind$0 + 1 | 0;
if(counter < 50)
{var counter$0=counter + 1 | 0;
return parse_char_set_content(counter$0,_ry_,end_ind)}
return caml_trampoline_return
(parse_char_set_content,[0,_ry_,end_ind])}
if(37 === c$0)fail_single_percent(str_ind$0);
add_char(c$0);
var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1,c$0=c$1;
continue}},
parse_char_set_after_char=
function(str_ind,end_ind,c)
{return caml_trampoline
(parse_char_set_after_char$0(0,str_ind,end_ind,c))};
if(str_ind === end_ind)unexpected_end_of_format(end_ind);
var match$31=caml_string_get(str,str_ind);
if(94 === match$31)
var str_ind$0=str_ind + 1 | 0,reverse=1,str_ind$1=str_ind$0;
else
var reverse=0,str_ind$1=str_ind;
if(str_ind$1 === end_ind)unexpected_end_of_format(end_ind);
var
c=caml_string_get(str,str_ind$1),
next_ind=parse_char_set_after_char(str_ind$1 + 1 | 0,end_ind,c),
char_set$0=freeze_char_set(char_set),
char_set$1=reverse?rev_char_set(char_set$0):char_set$0,
match$21=parse(next_ind,end_ind),
fmt_rest$19=match$21[1];
if(get_ign(0))
var
ignored$9=[10,get_pad_opt(95),char_set$1],
_ro_=[0,[23,ignored$9,fmt_rest$19]];
else
var _ro_=[0,[20,get_pad_opt(91),char_set$1,fmt_rest$19]];
var fmt_result=_ro_;
break;
case 97:
var
match$22=parse(str_ind,end_ind),
fmt_rest$20=match$22[1],
fmt_result=[0,[15,fmt_rest$20]];
break;
case 99:
var
char_format=
function(fmt_rest)
{return get_ign(0)?[0,[23,0,fmt_rest]]:[0,[0,fmt_rest]]},
match$23=parse(str_ind,end_ind),
fmt_rest$21=match$23[1],
match$24=get_pad_opt(99);
if(match$24)
{if(0 === match$24[1])
var
_rp_=get_ign(0)?[0,[23,3,fmt_rest$21]]:[0,[22,fmt_rest$21]],
_rq_=_rp_;
else
var
_rq_=
legacy_behavior$0
?char_format(fmt_rest$21)
:invalid_format_message
(str_ind,cst_non_zero_widths_are_unsupp);
var _rr_=_rq_}
else
var _rr_=char_format(fmt_rest$21);
var fmt_result=_rr_;
break;
case 114:
var
match$25=parse(str_ind,end_ind),
fmt_rest$22=match$25[1],
_rs_=get_ign(0)?[0,[23,2,fmt_rest$22]]:[0,[19,fmt_rest$22]],
fmt_result=_rs_;
break;
case 115:
var
pad$9=check_no_0(symb,get_padprec(0)),
match$26=parse(str_ind,end_ind),
fmt_rest$23=match$26[1];
if(get_ign(0))
var
ignored$10=[0,get_padprec_opt(95)],
_rt_=[0,[23,ignored$10,fmt_rest$23]];
else
var
match$27=make_padding_fmt_ebb(pad$9,fmt_rest$23),
fmt_rest$24=match$27[2],
pad$10=match$27[1],
_rt_=[0,[2,pad$10,fmt_rest$24]];
var fmt_result=_rt_;
break;
case 116:
var
match$28=parse(str_ind,end_ind),
fmt_rest$25=match$28[1],
fmt_result=[0,[16,fmt_rest$25]];
break;
case 123:
var
sub_end$0=search_subformat_end(str_ind,end_ind,125),
match$29=parse(str_ind,sub_end$0),
sub_fmt$0=match$29[1],
match$30=parse(sub_end$0 + 2 | 0,end_ind),
fmt_rest$26=match$30[1],
sub_fmtty$0=fmtty_of_fmt(sub_fmt$0);
if(get_ign(0))
var
ignored$11=[8,get_pad_opt(95),sub_fmtty$0],
_ru_=[0,[23,ignored$11,fmt_rest$26]];
else
var _ru_=[0,[13,get_pad_opt(123),sub_fmtty$0,fmt_rest$26]];
var fmt_result=_ru_;
break;
case 66:
case 98:
var
pad$3=check_no_0(symb,get_padprec(0)),
match$10=parse(str_ind,end_ind),
fmt_rest$8=match$10[1];
if(get_ign(0))
var
ignored$3=[7,get_padprec_opt(95)],
_rb_=[0,[23,ignored$3,fmt_rest$8]];
else
var
match$11=make_padding_fmt_ebb(pad$3,fmt_rest$8),
fmt_rest$9=match$11[2],
pad$4=match$11[1],
_rb_=[0,[9,pad$4,fmt_rest$9]];
var fmt_result=_rb_;
break;
case 37:
case 64:
var
match$7=parse(str_ind,end_ind),
fmt_rest$6=match$7[1],
fmt_result=[0,[12,symb,fmt_rest$6]];
break;
case 76:
case 108:
case 110:
var switch$1=0;
if(str_ind !== end_ind)
{var
symb$0=caml_string_get(str,str_ind),
_rv_=symb$0 - 88 | 0,
switch$2=0;
if(! (32 < _rv_ >>> 0))
switch(_rv_)
{case 0:
case 12:
case 17:
case 23:
case 29:
case 32:var _rh_=1;switch$2 = 1;break
}
if(! switch$2)var _rh_=0;
if(_rh_){switch$0 = 1;switch$1 = 1}}
if(! switch$1)
{var
match$15=parse(str_ind,end_ind),
fmt_rest$13=match$15[1],
switch$3=0;
if(108 <= symb)
{if(! (111 <= symb))
switch(symb - 108 | 0)
{case 0:var counter=0;switch$3 = 1;break;
case 1:break;
default:var counter=1;switch$3 = 1}}
else
if(76 === symb){var counter=2;switch$3 = 1}
if(! switch$3)throw [0,Assert_failure,_a1_];
if(get_ign(0))
var ignored$5=[11,counter],_rg_=[0,[23,ignored$5,fmt_rest$13]];
else
var _rg_=[0,[21,counter,fmt_rest$13]];
var fmt_result=_rg_}
break;
case 32:
case 35:
case 43:
case 45:
case 95:
var
fmt_result=
caml_call3(failwith_message(_aS_),str,pct_ind,symb);
break;
case 88:
case 100:
case 105:
case 111:
case 117:
case 120:
var
_rk_=get_space(0),
_rl_=get_hash(0),
iconv$2=
compute_int_conv(pct_ind,str_ind,get_plus(0),_rl_,_rk_,symb),
match$19=parse(str_ind,end_ind),
fmt_rest$17=match$19[1];
if(get_ign(0))
var
ignored$8=[2,iconv$2,get_pad_opt(95)],
_rm_=[0,[23,ignored$8,fmt_rest$17]];
else
var
_rn_=get_prec(0),
match$20=make_padprec_fmt_ebb(get_int_pad(0),_rn_,fmt_rest$17),
fmt_rest$18=match$20[3],
prec$4=match$20[2],
pad$8=match$20[1],
_rm_=[0,[4,iconv$2,pad$8,prec$4,fmt_rest$18]];
var fmt_result=_rm_;
break;
case 69:
case 70:
case 71:
case 72:
case 101:
case 102:
case 103:
case 104:
var
space$1=get_space(0),
hash$1=get_hash(0),
plus$2=get_plus(0),
flag=
plus$2
?space$1
?legacy_behavior$0
?1
:incompatible_flag(pct_ind,str_ind,32,cst$50)
:1
:space$1?2:0,
switch$4=0;
if(73 <= symb)
{var switcher=symb - 101 | 0;
if(3 < switcher >>> 0)
switch$4 = 1;
else
{switch(switcher)
{case 0:var _rw_=1;break;
case 1:var _rw_=0;break;
case 2:var _rw_=3;break;
default:var _rw_=6}
var kind=_rw_}}
else
if(69 <= symb)
{var switch$5=0;
switch(symb - 69 | 0)
{case 0:var _rx_=2;break;
case 1:switch$4 = 1;switch$5 = 1;break;
case 2:var _rx_=4;break;
default:var _rx_=7}
if(! switch$5)var kind=_rx_}
else
switch$4 = 1;
if(switch$4)
{var switch$6=0;
if(hash$1)
if(70 === symb)var kind=8;else switch$6 = 1;
else
if(70 === symb)var kind=5;else switch$6 = 1;
if(switch$6)throw [0,Assert_failure,_a3_]}
var
fconv=[0,flag,kind],
match$13=parse(str_ind,end_ind),
fmt_rest$11=match$13[1];
if(get_ign(0))
{var match=get_prec(0);
if(typeof match === "number")
var _rd_=match?incompatible_flag(pct_ind,str_ind,95,cst$40):0;
else
var ndec=match[1],_rd_=[0,ndec];
var
ignored$4=[6,get_pad_opt(95),_rd_],
_re_=[0,[23,ignored$4,fmt_rest$11]]}
else
var
_rf_=get_prec(0),
match$14=make_padprec_fmt_ebb(get_pad(0),_rf_,fmt_rest$11),
fmt_rest$12=match$14[3],
prec$3=match$14[2],
pad$5=match$14[1],
_re_=[0,[8,fconv,pad$5,prec$3,fmt_rest$12]];
var fmt_result=_re_;
break;
default:switch$0 = 1}
if(switch$0)
{var switch$7=0;
if(108 <= symb)
if(111 <= symb)
switch$7 = 1;
else
{var switch$8=0;
switch(symb - 108 | 0)
{case 0:
var
_qW_=caml_string_get(str,str_ind),
_qX_=get_space(0),
_qY_=get_hash(0),
iconv=
compute_int_conv
(pct_ind,str_ind + 1 | 0,get_plus(0),_qY_,_qX_,_qW_),
match$0=parse(str_ind + 1 | 0,end_ind),
fmt_rest=match$0[1];
if(get_ign(0))
var
ignored=[3,iconv,get_pad_opt(95)],
_qZ_=[0,[23,ignored,fmt_rest]];
else
var
_q1_=get_prec(0),
match$1=make_padprec_fmt_ebb(get_int_pad(0),_q1_,fmt_rest),
fmt_rest$0=match$1[3],
prec$0=match$1[2],
pad$0=match$1[1],
_qZ_=[0,[5,iconv,pad$0,prec$0,fmt_rest$0]];
var _q0_=_qZ_;
break;
case 1:switch$7 = 1;switch$8 = 1;break;
default:
var
_q2_=caml_string_get(str,str_ind),
_q3_=get_space(0),
_q4_=get_hash(0),
iconv$0=
compute_int_conv
(pct_ind,str_ind + 1 | 0,get_plus(0),_q4_,_q3_,_q2_),
match$2=parse(str_ind + 1 | 0,end_ind),
fmt_rest$1=match$2[1];
if(get_ign(0))
var
ignored$0=[4,iconv$0,get_pad_opt(95)],
_q5_=[0,[23,ignored$0,fmt_rest$1]];
else
var
_q6_=get_prec(0),
match$3=make_padprec_fmt_ebb(get_int_pad(0),_q6_,fmt_rest$1),
fmt_rest$2=match$3[3],
prec$1=match$3[2],
pad$1=match$3[1],
_q5_=[0,[6,iconv$0,pad$1,prec$1,fmt_rest$2]];
var _q0_=_q5_}
if(! switch$8)var fmt_result=_q0_}
else
if(76 === symb)
{var
_q7_=caml_string_get(str,str_ind),
_q8_=get_space(0),
_q9_=get_hash(0),
iconv$1=
compute_int_conv
(pct_ind,str_ind + 1 | 0,get_plus(0),_q9_,_q8_,_q7_),
match$4=parse(str_ind + 1 | 0,end_ind),
fmt_rest$3=match$4[1];
if(get_ign(0))
var
ignored$1=[5,iconv$1,get_pad_opt(95)],
_q__=[0,[23,ignored$1,fmt_rest$3]];
else
var
_q$_=get_prec(0),
match$5=make_padprec_fmt_ebb(get_int_pad(0),_q$_,fmt_rest$3),
fmt_rest$4=match$5[3],
prec$2=match$5[2],
pad$2=match$5[1],
_q__=[0,[7,iconv$1,pad$2,prec$2,fmt_rest$4]];
var fmt_result=_q__}
else
switch$7 = 1;
if(switch$7)
var
fmt_result=
caml_call3(failwith_message(_aP_),str,str_ind - 1 | 0,symb)}
if(1 - legacy_behavior$0)
{var _qN_=1 - plus_used[1],plus$0=_qN_?plus:_qN_;
if(plus$0)incompatible_flag(pct_ind,str_ind,symb,cst$41);
var _qO_=1 - hash_used[1],hash$0=_qO_?hash:_qO_;
if(hash$0)incompatible_flag(pct_ind,str_ind,symb,cst$42);
var _qP_=1 - space_used[1],space$0=_qP_?space:_qP_;
if(space$0)incompatible_flag(pct_ind,str_ind,symb,cst$43);
var _qQ_=1 - pad_used[1],_qR_=_qQ_?caml_notequal([0,pad],_aQ_):_qQ_;
if(_qR_)incompatible_flag(pct_ind,str_ind,symb,cst_padding$0);
var
_qS_=1 - prec_used[1],
_qT_=_qS_?caml_notequal([0,prec],_aR_):_qS_;
if(_qT_)
{var _qU_=ign?95:symb;
incompatible_flag(pct_ind,str_ind,_qU_,cst_precision$2)}
var plus$1=ign?plus:ign;
if(plus$1)incompatible_flag(pct_ind,str_ind,95,cst$44)}
var _qV_=1 - ign_used[1],ign$0=_qV_?ign:_qV_;
if(ign$0)
{var switch$9=0;
if(38 <= symb)
{if(44 !== symb && 64 !== symb)switch$9 = 1}
else
if(33 !== symb && ! (37 <= symb))switch$9 = 1;
var switch$10=0;
if(switch$9 || ! legacy_behavior$0)switch$10 = 1;
if(switch$10)incompatible_flag(pct_ind,str_ind,symb,cst$45)}
return fmt_result}
function parse(lit_start,end_ind)
{var str_ind=lit_start;
for(;;)
{if(str_ind === end_ind)return add_literal(lit_start,str_ind,0);
var match=caml_string_get(str,str_ind);
if(37 === match)
{var str_ind$2=str_ind + 1 | 0;
if(str_ind$2 === end_ind)unexpected_end_of_format(end_ind);
var
match$1=caml_string_get(str,str_ind$2),
_qM_=
95 === match$1
?parse_flags(str_ind,str_ind$2 + 1 | 0,end_ind,1)
:parse_flags(str_ind,str_ind$2,end_ind,0),
fmt_rest=_qM_[1];
return add_literal(lit_start,str_ind,fmt_rest)}
if(64 === match)
{var str_ind$0=str_ind + 1 | 0;
if(str_ind$0 === end_ind)
var match$0=_aT_;
else
{var c=caml_string_get(str,str_ind$0),switch$0=0;
if(65 <= c)
if(94 <= c)
{var switcher=c - 123 | 0;
if(2 < switcher >>> 0)
switch$0 = 1;
else
switch(switcher)
{case 0:
var match$0=parse_tag(1,str_ind$0 + 1 | 0,end_ind);break;
case 1:switch$0 = 1;break;
default:
var
match$3=parse(str_ind$0 + 1 | 0,end_ind),
fmt_rest$2=match$3[1],
match$0=[0,[17,1,fmt_rest$2]]}}
else
if(91 <= c)
switch(c - 91 | 0)
{case 0:
var match$0=parse_tag(0,str_ind$0 + 1 | 0,end_ind);break;
case 1:switch$0 = 1;break;
default:
var
match$4=parse(str_ind$0 + 1 | 0,end_ind),
fmt_rest$3=match$4[1],
match$0=[0,[17,0,fmt_rest$3]]}
else
switch$0 = 1;
else
if(10 === c)
var
match$5=parse(str_ind$0 + 1 | 0,end_ind),
fmt_rest$4=match$5[1],
match$0=[0,[17,3,fmt_rest$4]];
else
if(32 <= c)
switch(c - 32 | 0)
{case 0:
var
match$6=parse(str_ind$0 + 1 | 0,end_ind),
fmt_rest$5=match$6[1],
match$0=[0,[17,_aU_,fmt_rest$5]];
break;
case 5:
var switch$1=0;
if
((str_ind$0 + 1 | 0)
<
end_ind
&&
37
===
caml_string_get(str,str_ind$0 + 1 | 0))
{var
match$7=parse(str_ind$0 + 2 | 0,end_ind),
fmt_rest$6=match$7[1],
match$0=[0,[17,6,fmt_rest$6]];
switch$1 = 1}
if(! switch$1)
var
match$8=parse(str_ind$0,end_ind),
fmt_rest$7=match$8[1],
match$0=[0,[12,64,fmt_rest$7]];
break;
case 12:
var
match$9=parse(str_ind$0 + 1 | 0,end_ind),
fmt_rest$8=match$9[1],
match$0=[0,[17,_aV_,fmt_rest$8]];
break;
case 14:
var
match$10=parse(str_ind$0 + 1 | 0,end_ind),
fmt_rest$9=match$10[1],
match$0=[0,[17,4,fmt_rest$9]];
break;
case 27:
var match$0=parse_good_break(str_ind$0 + 1 | 0,end_ind);
break;
case 28:
var match$0=parse_magic_size(str_ind$0 + 1 | 0,end_ind);
break;
case 31:
var
match$11=parse(str_ind$0 + 1 | 0,end_ind),
fmt_rest$10=match$11[1],
match$0=[0,[17,2,fmt_rest$10]];
break;
case 32:
var
match$12=parse(str_ind$0 + 1 | 0,end_ind),
fmt_rest$11=match$12[1],
match$0=[0,[17,5,fmt_rest$11]];
break;
default:switch$0 = 1}
else
switch$0 = 1;
if(switch$0)
var
match$2=parse(str_ind$0 + 1 | 0,end_ind),
fmt_rest$1=match$2[1],
match$0=[0,[17,[2,c],fmt_rest$1]]}
var fmt_rest$0=match$0[1];
return add_literal(lit_start,str_ind,fmt_rest$0)}
var str_ind$1=str_ind + 1 | 0,str_ind=str_ind$1;
continue}}
return parse(0,caml_ml_string_length(str))}
function format_of_string_fmtty(str,fmtty)
{var match=fmt_ebb_of_string(0,str),fmt=match[1];
try
{var _qK_=[0,type_format(fmt,fmtty),str];return _qK_}
catch(_qL_)
{_qL_ = caml_wrap_exception(_qL_);
if(_qL_ === Type_mismatch)
{var _qJ_=string_of_fmtty(fmtty);
return caml_call2(failwith_message(_a5_),str,_qJ_)}
throw _qL_}}
function format_of_string_format(str,param)
{var
str$0=param[2],
fmt=param[1],
match=fmt_ebb_of_string(0,str),
fmt$0=match[1];
try
{var _qH_=[0,type_format(fmt$0,fmtty_of_fmt(fmt)),str];return _qH_}
catch(_qI_)
{_qI_ = caml_wrap_exception(_qI_);
if(_qI_ === Type_mismatch)
return caml_call2(failwith_message(_a6_),str,str$0);
throw _qI_}}
var
CamlinternalFormat=
[0,
is_in_char_set,
rev_char_set,
create_char_set,
add_in_char_set,
freeze_char_set,
param_format_of_ignored_format,
make_printf,
make_iprintf,
output_acc,
bufput_acc,
strput_acc,
type_format,
fmt_ebb_of_string,
format_of_string_fmtty,
format_of_string_format,
char_of_iconv,
string_of_formatting_lit,
string_of_fmtty,
string_of_fmt,
open_box_of_string,
symm,
trans,
recast];
caml_register_global(807,CamlinternalFormat,"CamlinternalFormat");
function kfprintf(k,o,param)
{var fmt=param[1],_qG_=0;
return make_printf
(function(acc){output_acc(o,acc);return caml_call1(k,o)},
_qG_,
fmt)}
function kbprintf(k,b,param)
{var fmt=param[1],_qF_=0;
return make_printf
(function(acc){bufput_acc(b,acc);return caml_call1(k,b)},
_qF_,
fmt)}
function ikfprintf(k,oc,param)
{var fmt=param[1];return make_iprintf(k,oc,fmt)}
function fprintf(oc,fmt){return kfprintf(function(_qE_){return 0},oc,fmt)}
function bprintf(b,fmt){return kbprintf(function(_qD_){return 0},b,fmt)}
function ifprintf(oc,fmt)
{return ikfprintf(function(_qC_){return 0},oc,fmt)}
function ibprintf(b,fmt){return ikfprintf(function(_qB_){return 0},b,fmt)}
function printf(fmt){return fprintf(stdout,fmt)}
function eprintf(fmt){return fprintf(stderr,fmt)}
function ksprintf(k,param)
{var fmt=param[1];
function k$0(acc)
{var buf=create$2(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
Stdlib_Printf=
[0,
fprintf,
printf,
eprintf,
sprintf,
bprintf,
ifprintf,
ibprintf,
kfprintf,
ikfprintf,
ksprintf,
kbprintf,
ikfprintf,
ksprintf];
caml_register_global(808,Stdlib_Printf,"Stdlib__Printf");
var
Bad=[248,cst_Stdlib_Arg_Bad,caml_fresh_oo_id(0)],
Help=[248,cst_Stdlib_Arg_Help,caml_fresh_oo_id(0)],
Stop=[248,cst_Stdlib_Arg_Stop,caml_fresh_oo_id(0)];
function assoc3(x,l)
{var l$0=l;
for(;;)
{if(l$0)
{var match=l$0[1],y2=match[2],y1=match[1];
if(caml_equal(y1,x))return y2;
var l$1=l$0[2],l$0=l$1;
continue}
throw Not_found}}
function split$1(s)
{var
i=index$0(s,61),
len=caml_ml_string_length(s),
_qA_=sub$0(s,i + 1 | 0,len - (i + 1 | 0) | 0);
return [0,sub$0(s,0,i),_qA_]}
function make_symlist(prefix,sep,suffix,l)
{if(l)
{var t=l[2],h=l[1],_qz_=cat(prefix,h);
return cat
(fold_left$0(function(x,y){return cat(x,cat(sep,y))},_qz_,t),
suffix)}
return cst_none}
function help_action(param){throw [0,Stop,_a9_]}
function add_help(speclist)
{try
{assoc3(cst_help$2,speclist);var _qw_=0,_qu_=_qw_}
catch(_qy_)
{_qy_ = caml_wrap_exception(_qy_);
if(_qy_ !== Not_found)throw _qy_;
var
_qu_=
[0,[0,cst_help,[0,help_action],cst_Display_this_list_of_optio],0]}
try
{assoc3(cst_help$1,speclist);var _qv_=0,add2=_qv_}
catch(_qx_)
{_qx_ = caml_wrap_exception(_qx_);
if(_qx_ !== Not_found)throw _qx_;
var
add2=
[0,
[0,cst_help$0,[0,help_action],cst_Display_this_list_of_optio$0],
0]}
return append(speclist,append(_qu_,add2))}
function usage_b(buf,speclist,errmsg)
{caml_call1(bprintf(buf,_a__),errmsg);
var _qr_=add_help(speclist);
return iter$2
(function(param)
{var
doc=param[3],
spec=param[2],
key=param[1],
_qs_=0 < caml_ml_string_length(doc)?1:0;
if(_qs_)
{if(11 === spec[0])
{var l=spec[1],_qt_=make_symlist(cst$53,cst$52,cst$51,l);
return caml_call3(bprintf(buf,_a8_),key,_qt_,doc)}
return caml_call2(bprintf(buf,_a7_),key,doc)}
return _qs_},
_qr_)}
function usage_string(speclist,errmsg)
{var b=create$2(200);usage_b(b,speclist,errmsg);return contents(b)}
function usage(speclist,errmsg)
{var _qq_=usage_string(speclist,errmsg);
return caml_call1(eprintf(_a$_),_qq_)}
var current=[0,0];
function bool_of_string_opt$0(x)
{try
{var _qo_=[0,bool_of_string(x)];return _qo_}
catch(_qp_)
{_qp_ = caml_wrap_exception(_qp_);
if(_qp_[1] === Invalid_argument)return 0;
throw _qp_}}
function int_of_string_opt$0(x)
{try
{var _qm_=[0,caml_int_of_string(x)];return _qm_}
catch(_qn_)
{_qn_ = caml_wrap_exception(_qn_);
if(_qn_[1] === Failure)return 0;
throw _qn_}}
function float_of_string_opt(x)
{try
{var _qk_=[0,caml_float_of_string(x)];return _qk_}
catch(_ql_)
{_ql_ = caml_wrap_exception(_ql_);
if(_ql_[1] === Failure)return 0;
throw _ql_}}
function parse_and_expand_argv_dynamic_
(allow_expand,current,argv,speclist,anonfun,errmsg)
{var initpos=current[1];
function convert_error(error)
{var
b=create$2(200),
progname=
initpos < argv[1].length - 1
?caml_check_bound(argv[1],initpos)[1 + initpos]
:cst$54;
switch(error[0])
{case 0:
var _qj_=error[1];
if
(caml_string_notequal(_qj_,cst_help$3)
&&
caml_string_notequal(_qj_,cst_help$4))
caml_call2(bprintf(b,_ba_),progname,_qj_);
break;
case 1:
var expected=error[3],arg=error[2],opt=error[1];
caml_call4(bprintf(b,_bd_),progname,arg,opt,expected);
break;
case 2:var s=error[1];caml_call2(bprintf(b,_be_),progname,s);break;
default:var s$0=error[1];caml_call2(bprintf(b,_bf_),progname,s$0)}
usage_b(b,speclist[1],errmsg);
if(! caml_equal(error,_bb_) && ! caml_equal(error,_bc_))
return [0,Bad,contents(b)];
return [0,Help,contents(b)]}
current[1]++;
for(;;)
{if(current[1] < argv[1].length - 1)
{try
{var
_p__=current[1],
s=caml_check_bound(argv[1],_p__)[1 + _p__],
switch$0=0;
if(1 <= caml_ml_string_length(s) && 45 === caml_string_get(s,0))
{try
{var
follow$1=0,
_qa_=assoc3(s,speclist[1]),
follow$0=follow$1,
action=_qa_}
catch(_qh_)
{_qh_ = caml_wrap_exception(_qh_);
if(_qh_ !== Not_found)throw _qh_;
try
{var
match=split$1(s),
arg=match[2],
keyword=match[1],
follow=[0,arg],
_p$_=assoc3(keyword,speclist[1])}
catch(_qi_)
{_qi_ = caml_wrap_exception(_qi_);
if(_qi_ === Not_found)throw [0,Stop,[0,s]];
throw _qi_;
var _qb_=_qi_}
var follow$0=follow,action=_p$_,_qc_=_qh_}
var
no_arg$0=
function(s,follow)
{function no_arg(param)
{if(follow)
{var arg=follow[1];throw [0,Stop,[1,s,arg,cst_no_argument]]}
return 0}
return no_arg},
no_arg=no_arg$0(s,follow$0),
get_arg$0=
function(s,follow)
{function get_arg(param)
{if(follow){var arg=follow[1];return arg}
if((current[1] + 1 | 0) < argv[1].length - 1)
{var _qg_=current[1] + 1 | 0;
return caml_check_bound(argv[1],_qg_)[1 + _qg_]}
throw [0,Stop,[2,s]]}
return get_arg},
get_arg=get_arg$0(s,follow$0),
consume_arg$0=
function(follow)
{function consume_arg(param)
{return follow?0:(current[1]++,0)}
return consume_arg},
consume_arg=consume_arg$0(follow$0),
treat_action$0=
function(s,no_arg,get_arg,consume_arg)
{function treat_action(param)
{switch(param[0])
{case 0:var f=param[1];no_arg(0);return caml_call1(f,0);
case 1:
var
f$0=param[1],
arg=get_arg(0),
match=bool_of_string_opt$0(arg);
if(match)
{var s$0=match[1];caml_call1(f$0,s$0);return consume_arg(0)}
throw [0,Stop,[1,s,arg,cst_a_boolean]];
case 2:var r=param[1];no_arg(0);r[1] = 1;return 0;
case 3:var r$0=param[1];no_arg(0);r$0[1] = 0;return 0;
case 4:
var f$1=param[1],arg$0=get_arg(0);
caml_call1(f$1,arg$0);
return consume_arg(0);
case 5:
var r$1=param[1];r$1[1] = get_arg(0);return consume_arg(0);
case 6:
var
f$2=param[1],
arg$1=get_arg(0),
match$0=int_of_string_opt$0(arg$1);
if(match$0)
{var x=match$0[1];caml_call1(f$2,x);return consume_arg(0)}
throw [0,Stop,[1,s,arg$1,cst_an_integer]];
case 7:
var
r$2=param[1],
arg$2=get_arg(0),
match$1=int_of_string_opt$0(arg$2);
if(match$1)
{var x$0=match$1[1];r$2[1] = x$0;return consume_arg(0)}
throw [0,Stop,[1,s,arg$2,cst_an_integer$0]];
case 8:
var
f$3=param[1],
arg$3=get_arg(0),
match$2=float_of_string_opt(arg$3);
if(match$2)
{var x$1=match$2[1];
caml_call1(f$3,x$1);
return consume_arg(0)}
throw [0,Stop,[1,s,arg$3,cst_a_float]];
case 9:
var
r$3=param[1],
arg$4=get_arg(0),
match$3=float_of_string_opt(arg$4);
if(match$3)
{var x$2=match$3[1];r$3[1] = x$2;return consume_arg(0)}
throw [0,Stop,[1,s,arg$4,cst_a_float$0]];
case 10:
var specs=param[1];
no_arg(0);
return iter$2(treat_action,specs);
case 11:
var f$4=param[2],symb=param[1],arg$5=get_arg(0);
if(mem(arg$5,symb))
{caml_call1(f$4,arg$5);return consume_arg(0)}
throw [0,
Stop,
[1,
s,
arg$5,
cat(cst_one_of,make_symlist(cst$57,cst$56,cst$55,symb))]];
case 12:
var f$5=param[1];
no_arg(0);
for(;;)
{if(current[1] < (argv[1].length - 1 - 1 | 0))
{var _qd_=current[1] + 1 | 0;
caml_call1(f$5,caml_check_bound(argv[1],_qd_)[1 + _qd_]);
consume_arg(0);
continue}
return 0}
case 13:
var f$6=param[1];
no_arg(0);
var acc=[0,0];
for(;;)
{if(current[1] < (argv[1].length - 1 - 1 | 0))
{var _qf_=current[1] + 1 | 0,_qe_=acc[1];
acc[1] = [0,caml_check_bound(argv[1],_qf_)[1 + _qf_],_qe_];
consume_arg(0);
continue}
return caml_call1(f$6,rev(acc[1]))}
default:
var f$7=param[1];
if(1 - allow_expand)
throw [0,Invalid_argument,cst_Arg_Expand_is_is_only_allo];
var arg$6=get_arg(0),newarg=caml_call1(f$7,arg$6);
consume_arg(0);
var
before=sub$1(argv[1],0,current[1] + 1 | 0),
after=
sub$1
(argv[1],
current[1] + 1 | 0,
(argv[1].length - 1 - current[1] | 0) - 1 | 0);
argv[1]
=
caml_array_concat([0,before,[0,newarg,[0,after,0]]]);
return 0}}
return treat_action},
treat_action=treat_action$0(s,no_arg,get_arg,consume_arg);
treat_action(action);
switch$0 = 1}
if(! switch$0)caml_call1(anonfun,s)}
catch(exn$0)
{exn$0 = caml_wrap_exception(exn$0);
if(exn$0[1] === Bad){var m=exn$0[2];throw convert_error([3,m])}
if(exn$0[1] === Stop){var e=exn$0[2];throw convert_error(e)}
throw exn$0;
var exn=exn$0}
current[1]++;
continue}
return 0}}
function parse_and_expand_argv_dynamic
(current,argv,speclist,anonfun,errmsg)
{return parse_and_expand_argv_dynamic_
(1,current,argv,speclist,anonfun,errmsg)}
function parse_argv_dynamic(opt,argv,speclist,anonfun,errmsg)
{if(opt)var sth=opt[1],current$0=sth;else var current$0=current;
return parse_and_expand_argv_dynamic_
(0,current$0,[0,argv],speclist,anonfun,errmsg)}
function parse_argv(opt,argv,speclist,anonfun,errmsg)
{if(opt)var sth=opt[1],current$0=sth;else var current$0=current;
return parse_argv_dynamic
([0,current$0],argv,[0,speclist],anonfun,errmsg)}
function parse(l,f,msg)
{try
{var _p9_=parse_argv(0,caml_sys_argv(0),l,f,msg);return _p9_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] === Bad)
{var msg$0=exn[2];caml_call1(eprintf(_bg_),msg$0);return exit(2)}
if(exn[1] === Help)
{var msg$1=exn[2];caml_call1(printf(_bh_),msg$1);return exit(0)}
throw exn}}
function parse_dynamic(l,f,msg)
{try
{var _p8_=parse_argv_dynamic(0,caml_sys_argv(0),l,f,msg);return _p8_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] === Bad)
{var msg$0=exn[2];caml_call1(eprintf(_bi_),msg$0);return exit(2)}
if(exn[1] === Help)
{var msg$1=exn[2];caml_call1(printf(_bj_),msg$1);return exit(0)}
throw exn}}
function parse_expand(l,f,msg)
{try
{var
argv=[0,caml_sys_argv(0)],
spec=[0,l],
current$0=[0,current[1]],
_p7_=parse_and_expand_argv_dynamic(current$0,argv,spec,f,msg);
return _p7_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] === Bad)
{var msg$0=exn[2];caml_call1(eprintf(_bk_),msg$0);return exit(2)}
if(exn[1] === Help)
{var msg$1=exn[2];caml_call1(printf(_bl_),msg$1);return exit(0)}
throw exn}}
function second_word(s)
{var len=caml_ml_string_length(s);
function loop(n)
{var n$0=n;
for(;;)
{if(len <= n$0)return len;
if(32 === caml_string_get(s,n$0))
{var n$1=n$0 + 1 | 0,n$0=n$1;continue}
return n$0}}
try
{var n$0=index$0(s,9)}
catch(_p5_)
{_p5_ = caml_wrap_exception(_p5_);
if(_p5_ === Not_found)
{try
{var n=index$0(s,32)}
catch(_p6_)
{_p6_ = caml_wrap_exception(_p6_);
if(_p6_ === Not_found)return len;
throw _p6_}
return loop(n + 1 | 0)}
throw _p5_}
return loop(n$0 + 1 | 0)}
function max_arg_len(cur,param)
{var doc=param[3],spec=param[2],kwd=param[1];
return 11 === spec[0]
?max$1(cur,caml_ml_string_length(kwd))
:max$1(cur,caml_ml_string_length(kwd) + second_word(doc) | 0)}
function replace_leading_tab(s)
{var seen=[0,0];
return map$6
(function(c)
{if(9 === c && ! seen[1]){seen[1] = 1;return 32}return c},
s)}
function align(opt,speclist)
{if(opt)var sth=opt[1],limit=sth;else var limit=max_int;
var
completed=add_help(speclist),
len=fold_left$0(max_arg_len,0,completed),
len$0=min$1(len,limit);
return map$4
(function(ksd)
{var _p3_=ksd[1],_p4_=ksd[2];
if(caml_string_notequal(ksd[3],cst$58))
{if(11 === _p4_[0])
{var
msg$0=ksd[3],
cutcol$0=second_word(msg$0),
spaces$0=make$1(max$1(0,len$0 - cutcol$0 | 0) + 3 | 0,32);
return [0,
_p3_,
_p4_,
cat(cst$59,cat(spaces$0,replace_leading_tab(msg$0)))]}
var
msg=ksd[3],
spec=ksd[2],
cutcol=second_word(msg),
kwd_len=caml_ml_string_length(_p3_),
diff=(len$0 - kwd_len | 0) - cutcol | 0;
if(0 < diff)
{var
spaces=make$1(diff,32),
prefix=sub$0(replace_leading_tab(msg),0,cutcol),
suffix=
sub$0(msg,cutcol,caml_ml_string_length(msg) - cutcol | 0);
return [0,_p3_,spec,cat(prefix,cat(spaces,suffix))]}
return [0,_p3_,spec,replace_leading_tab(msg)]}
return ksd},
completed)}
function read_aux(trim,sep,file)
{var ic=open_bin$0(file),buf=create$2(200),words=[0,0];
function stash(param)
{var s=contents(buf);
if(trim)
{var len=caml_ml_string_length(s),switch$0=0;
if(0 < len && 13 === caml_string_get(s,len - 1 | 0))
{var _p2_=sub$0(s,0,len - 1 | 0);switch$0 = 1}
if(! switch$0)var _p2_=s;
var word=_p2_}
else
var word=s;
words[1] = [0,word,words[1]];
return clear$1(buf)}
try
{for(;;)
{var c=caml_ml_input_char(ic);
if(c === sep)stash(0);else add_char(buf,c);
continue}}
catch(_p1_)
{_p1_ = caml_wrap_exception(_p1_);
if(_p1_ === End_of_file)
{if(0 < buf[2])stash(0);
caml_ml_close_channel(ic);
return of_list(rev(words[1]))}
throw _p1_}}
var _bm_=10,_bn_=1;
function read_arg(_p0_){return read_aux(_bn_,_bm_,_p0_)}
var _bo_=0,_bp_=0;
function read_arg0(_pZ_){return read_aux(_bp_,_bo_,_pZ_)}
function write_aux(sep,file,args)
{var oc=open_bin(file);
iter$5(function(s){return caml_call2(fprintf(oc,_bq_),s,sep)},args);
return close(oc)}
var _br_=10;
function write_arg(_pX_,_pY_){return write_aux(_br_,_pX_,_pY_)}
var _bs_=0;
function write_arg0(_pV_,_pW_){return write_aux(_bs_,_pV_,_pW_)}
var
Stdlib_Arg=
[0,
parse,
parse_dynamic,
parse_argv,
parse_argv_dynamic,
parse_and_expand_argv_dynamic,
parse_expand,
Help,
Bad,
usage,
usage_string,
align,
current,
read_arg,
read_arg0,
write_arg,
write_arg0];
caml_register_global(809,Stdlib_Arg,"Stdlib__Arg");
var
Stdlib_Atomic=
[0,make,get,set,exchange,compare_and_set,fetch_and_add,incr,decr];
caml_register_global(810,Stdlib_Atomic,"Stdlib__Atomic");
var printers=[0,0];
function field(x,i)
{var f=x[1 + i];
return is_block(f)
?caml_obj_tag(f) === 252
?caml_call1(sprintf(_bt_),f)
:caml_obj_tag(f) === 253?to_string(f):cst$60
:caml_call1(sprintf(_bu_),f)}
function other_fields(x,i)
{if(x.length - 1 <= i)return cst$61;
var _pT_=other_fields(x,i + 1 | 0),_pU_=field(x,i);
return caml_call2(sprintf(_bv_),_pU_,_pT_)}
function use_printers(x)
{function conv(param)
{var param$0=param;
for(;;)
{if(param$0)
{var tl=param$0[2],hd=param$0[1];
try
{var switch$0=0,val=caml_call1(hd,x);switch$0 = 1}
catch(_pS_){}
if(switch$0 && val){var s=val[1];return [0,s]}
var param$0=tl;
continue}
return 0}}
return conv(printers[1])}
function to_string_default(x)
{if(x === Out_of_memory)return cst_Out_of_memory;
if(x === Stack_overflow)return cst_Stack_overflow;
if(x[1] === Match_failure)
{var match$0=x[2],char$0=match$0[3],line=match$0[2],file=match$0[1];
return caml_call5
(sprintf(locfmt),
file,
line,
char$0,
char$0 + 5 | 0,
cst_Pattern_matching_failed)}
if(x[1] === Assert_failure)
{var
match$1=x[2],
char$1=match$1[3],
line$0=match$1[2],
file$0=match$1[1];
return caml_call5
(sprintf(locfmt),
file$0,
line$0,
char$1,
char$1 + 6 | 0,
cst_Assertion_failed)}
if(x[1] === Undefined_recursive_module)
{var
match$2=x[2],
char$2=match$2[3],
line$1=match$2[2],
file$1=match$2[1];
return caml_call5
(sprintf(locfmt),
file$1,
line$1,
char$2,
char$2 + 6 | 0,
cst_Undefined_recursive_module)}
if(0 === caml_obj_tag(x))
{var constructor=x[1][1],match=x.length - 1;
if(2 < match >>> 0)
var
_pO_=other_fields(x,2),
_pP_=field(x,1),
_pR_=caml_call2(sprintf(_bw_),_pP_,_pO_);
else
switch(match)
{case 0:var _pR_=cst$62;break;
case 1:var _pR_=cst$63;break;
default:var _pQ_=field(x,1),_pR_=caml_call1(sprintf(_bx_),_pQ_)}
return cat(constructor,_pR_)}
return x[1]}
function to_string$6(e)
{var match=use_printers(e);
if(match){var s=match[1];return s}
return to_string_default(e)}
function print(fct,arg)
{try
{var _pN_=caml_call1(fct,arg);return _pN_}
catch(x)
{x = caml_wrap_exception(x);
var _pM_=to_string$6(x);
caml_call1(eprintf(_by_),_pM_);
caml_ml_flush(stderr);
throw x}}
function catch$0(fct,arg)
{try
{var _pL_=caml_call1(fct,arg);return _pL_}
catch(x)
{x = caml_wrap_exception(x);
caml_ml_flush(stdout);
var _pK_=to_string$6(x);
caml_call1(eprintf(_bz_),_pK_);
return exit(2)}}
function raw_backtrace_entries(bt){return bt}
function convert_raw_backtrace(bt)
{return [0,runtime.caml_convert_raw_backtrace(bt)]}
function format_backtrace_slot(pos,slot)
{function info(is_raise)
{return is_raise
?0 === pos?cst_Raised_at:cst_Re_raised_at
:0 === pos?cst_Raised_by_primitive_operat:cst_Called_from}
if(0 === slot[0])
{var
_pC_=slot[5],
_pD_=slot[4],
_pE_=slot[3],
_pF_=slot[6]?cst_inlined:cst$64,
_pG_=slot[2],
_pH_=slot[7],
_pI_=info(slot[1]);
return [0,
caml_call7(sprintf(_bA_),_pI_,_pH_,_pG_,_pF_,_pE_,_pD_,_pC_)]}
if(slot[1])return 0;
var _pJ_=info(0);
return [0,caml_call1(sprintf(_bB_),_pJ_)]}
function print_raw_backtrace(outchan,raw_backtrace)
{var backtrace=convert_raw_backtrace(raw_backtrace);
if(backtrace)
{var a=backtrace[1],_pA_=a.length - 1 - 1 | 0,_pz_=0;
if(! (_pA_ < 0))
{var i=_pz_;
for(;;)
{var match=format_backtrace_slot(i,caml_check_bound(a,i)[1 + i]);
if(match){var str=match[1];caml_call1(fprintf(outchan,_bC_),str)}
var _pB_=i + 1 | 0;
if(_pA_ !== i){var i=_pB_;continue}
break}}
return 0}
return fprintf(outchan,_bD_)}
function print_backtrace(outchan)
{return print_raw_backtrace(outchan,caml_get_exception_raw_backtra(0))}
function raw_backtrace_to_string(raw_backtrace)
{var backtrace=convert_raw_backtrace(raw_backtrace);
if(backtrace)
{var a=backtrace[1],b=create$2(1024),_px_=a.length - 1 - 1 | 0,_pw_=0;
if(! (_px_ < 0))
{var i=_pw_;
for(;;)
{var match=format_backtrace_slot(i,caml_check_bound(a,i)[1 + i]);
if(match){var str=match[1];caml_call1(bprintf(b,_bE_),str)}
var _py_=i + 1 | 0;
if(_px_ !== i){var i=_py_;continue}
break}}
return contents(b)}
return cst_Program_not_linked_with_g_}
function backtrace_slot_is_raise(param)
{return 0 === param[0]?param[1]:param[1]}
function backtrace_slot_is_inline(param){return 0 === param[0]?param[6]:0}
function backtrace_slot_location(param)
{return 0 === param[0]?[0,[0,param[2],param[3],param[4],param[5]]]:0}
function backtrace_slot_defname(param)
{if(0 === param[0] && caml_string_notequal(param[7],cst$65))
return [0,param[7]];
return 0}
function backtrace_slots(raw_backtrace)
{var match=convert_raw_backtrace(raw_backtrace);
if(match)
{var backtrace=match[1],i$1=backtrace.length - 1 - 1 | 0,i=i$1;
for(;;)
{if(-1 === i)
var _pv_=0;
else
{var
param=caml_check_bound(backtrace,i)[1 + i],
_pu_=0 === param[0]?1:0;
if(! _pu_){var i$0=i - 1 | 0,i=i$0;continue}
var _pv_=_pu_}
return _pv_?[0,backtrace]:0}}
return 0}
function backtrace_slots_of_raw_entry(entry)
{return backtrace_slots([0,entry])}
function raw_backtrace_length(bt){return bt.length - 1}
function get_backtrace(param)
{return raw_backtrace_to_string(caml_get_exception_raw_backtra(0))}
function register_printer(fn)
{for(;;)
{var
old_printers=printers[1],
new_printers=[0,fn,old_printers],
success=compare_and_set(printers,old_printers,new_printers),
_pt_=1 - success;
if(_pt_)continue;
return _pt_}}
function exn_slot(x){return 0 === caml_obj_tag(x)?x[1]:x}
function exn_slot_id(x){var slot=exn_slot(x);return slot[2]}
function exn_slot_name(x){var slot=exn_slot(x);return slot[1]}
var errors=_bF_.slice();
function default_uncaught_exception_han(exn,raw_backtrace)
{var _pr_=to_string$6(exn);
caml_call1(eprintf(_bG_),_pr_);
print_raw_backtrace(stderr,raw_backtrace);
var status=runtime.caml_ml_debug_info_status(0);
if(status < 0)
{var _ps_=abs(status);
prerr_endline(caml_check_bound(errors,_ps_)[1 + _ps_])}
return caml_ml_flush(stderr)}
var uncaught_exception_handler=[0,default_uncaught_exception_han];
function set_uncaught_exception_handler(fn)
{uncaught_exception_handler[1] = fn;return 0}
var empty_backtrace=[0];
function handle_uncaught_exception(exn,debugger_in_use)
{try
{try
{var
raw_backtrace=
debugger_in_use?empty_backtrace:caml_get_exception_raw_backtra(0);
try {do_at_exit(0)}catch(_pq_){}
try
{var
_pm_=caml_call2(uncaught_exception_handler[1],exn,raw_backtrace),
_pl_=_pm_}
catch(exn$0)
{exn$0 = caml_wrap_exception(exn$0);
var
raw_backtrace$0=caml_get_exception_raw_backtra(0),
_pj_=to_string$6(exn);
caml_call1(eprintf(_bH_),_pj_);
print_raw_backtrace(stderr,raw_backtrace);
var _pk_=to_string$6(exn$0);
caml_call1(eprintf(_bI_),_pk_);
print_raw_backtrace(stderr,raw_backtrace$0);
var _pl_=caml_ml_flush(stderr)}
var _pn_=_pl_}
catch(_pp_)
{_pp_ = caml_wrap_exception(_pp_);
if(_pp_ !== Out_of_memory)throw _pp_;
var _pn_=prerr_endline(cst_Fatal_error_out_of_memory_)}
return _pn_}
catch(_po_){return 0}}
caml_register_named_value
(caml_string_of_jsbytes("Printexc.handle_uncaught_exception"),
handle_uncaught_exception);
function _bJ_(_pi_){return runtime.caml_raw_backtrace_next_slot(_pi_)}
function _bK_(_ph_){return runtime.caml_convert_raw_backtrace_slot(_ph_)}
function _bL_(_pg_,_pf_)
{return runtime.caml_raw_backtrace_slot(_pg_,_pf_)}
var
_bM_=
[0,
backtrace_slot_is_raise,
backtrace_slot_is_inline,
backtrace_slot_location,
backtrace_slot_defname,
format_backtrace_slot];
function _bN_(_pe_){return caml_get_exception_raw_backtra(_pe_)}
function _bO_(_pd_){return runtime.caml_backtrace_status(_pd_)}
var
Stdlib_Printexc=
[0,
to_string$6,
to_string_default,
print,
catch$0,
print_backtrace,
get_backtrace,
function(_pc_){return runtime.caml_record_backtrace(_pc_)},
_bO_,
register_printer,
use_printers,
raw_backtrace_entries,
_bN_,
print_raw_backtrace,
raw_backtrace_to_string,
default_uncaught_exception_han,
set_uncaught_exception_handler,
backtrace_slots,
backtrace_slots_of_raw_entry,
_bM_,
raw_backtrace_length,
_bL_,
_bK_,
_bJ_,
exn_slot_id,
exn_slot_name];
caml_register_global(811,Stdlib_Printexc,"Stdlib__Printexc");
function const$0(c,param){return c}
function flip(f,x,y){return caml_call2(f,y,x)}
function negate(p,v){return 1 - caml_call1(p,v)}
var
Finally_raised=
[248,cst_Stdlib_Fun_Finally_raised,caml_fresh_oo_id(0)];
register_printer
(function(param)
{if(param[1] === Finally_raised)
{var exn=param[2];
return [0,cat(cst_Fun_Finally_raised,to_string$6(exn))]}
return 0});
function protect(finally$0,work)
{function finally_no_exn(param)
{try
{var _pb_=caml_call1(finally$0,0);return _pb_}
catch(e)
{e = caml_wrap_exception(e);
var bt=caml_get_exception_raw_backtra(0),exn=[0,Finally_raised,e];
caml_restore_raw_backtrace(exn,bt);
throw exn}}
try
{var result=caml_call1(work,0)}
catch(work_exn)
{work_exn = caml_wrap_exception(work_exn);
var work_bt=caml_get_exception_raw_backtra(0);
finally_no_exn(0);
caml_restore_raw_backtrace(work_exn,work_bt);
throw work_exn}
finally_no_exn(0);
return result}
var Stdlib_Fun=[0,const$0,flip,negate,protect,Finally_raised];
caml_register_global(812,Stdlib_Fun,"Stdlib__Fun");
function print_stat(c)
{var st=runtime.caml_gc_stat(0),_oV_=st[4];
caml_call1(fprintf(c,_bP_),_oV_);
var _oW_=st[5];
caml_call1(fprintf(c,_bQ_),_oW_);
var _oX_=st[14];
caml_call1(fprintf(c,_bR_),_oX_);
var _oY_=st[17];
caml_call1(fprintf(c,_bS_),_oY_);
fprintf(c,_bT_);
var
_oZ_=st[1],
l1=caml_ml_string_length(caml_call1(sprintf(_bU_),_oZ_)),
_o0_=st[1];
caml_call2(fprintf(c,_bV_),l1,_o0_);
var _o1_=st[2];
caml_call2(fprintf(c,_bW_),l1,_o1_);
var _o2_=st[3];
caml_call2(fprintf(c,_bX_),l1,_o2_);
fprintf(c,_bY_);
var
_o3_=st[15],
l2=caml_ml_string_length(caml_call1(sprintf(_bZ_),_o3_)),
_o4_=st[15];
caml_call2(fprintf(c,_b0_),l2,_o4_);
var _o5_=st[6];
caml_call2(fprintf(c,_b1_),l2,_o5_);
var _o6_=st[8];
caml_call2(fprintf(c,_b2_),l2,_o6_);
var _o7_=st[10];
caml_call2(fprintf(c,_b3_),l2,_o7_);
var _o8_=st[12];
caml_call2(fprintf(c,_b4_),l2,_o8_);
var _o9_=st[13];
caml_call2(fprintf(c,_b5_),l2,_o9_);
fprintf(c,_b6_);
var _o__=st[9];
caml_call1(fprintf(c,_b7_),_o__);
var _o$_=st[11];
caml_call1(fprintf(c,_b8_),_o$_);
var _pa_=st[7];
return caml_call1(fprintf(c,_b9_),_pa_)}
function allocated_bytes(param)
{var
match=runtime.caml_gc_counters(0),
ma=match[3],
pro=match[2],
mi=match[1];
return (mi + ma - pro) * 4}
function create_alarm(f){return [0,1]}
function delete_alarm(a){a[1] = 0;return 0}
function _b__(param){return 0}
function _b$_(param){return 0}
function _ca_(param){return 0}
function _cb_(param){return 0}
var null_tracker=[0,function(param){return 0},_cb_,_ca_,_b$_,_b__];
function start(sampling_rate,opt,tracker)
{if(opt)
var sth=opt[1],callstack_size=sth;
else
var callstack_size=max_int;
return runtime.caml_memprof_start(sampling_rate,callstack_size,tracker)}
var _cc_=[0,null_tracker,start,runtime.caml_memprof_stop];
function _cd_(_oU_){return runtime.caml_final_release(_oU_)}
function _ce_(_oT_,_oS_)
{return runtime.caml_final_register_called_without_value(_oT_,_oS_)}
var
Stdlib_Gc=
[0,
print_stat,
allocated_bytes,
function(_oR_,_oQ_){return runtime.caml_final_register(_oR_,_oQ_)},
_ce_,
_cd_,
create_alarm,
delete_alarm,
_cc_];
caml_register_global(813,Stdlib_Gc,"Stdlib__Gc");
function string(str)
{return caml_md5_string(str,0,caml_ml_string_length(str))}
function bytes(b){return string(caml_string_of_bytes(b))}
function substring(str,ofs,len)
{if
(0
<=
ofs
&&
0
<=
len
&&
!
((caml_ml_string_length(str) - len | 0) < ofs))
return caml_md5_string(str,ofs,len);
return invalid_arg(cst_Digest_substring)}
function subbytes(b,ofs,len)
{return substring(caml_string_of_bytes(b),ofs,len)}
function file(filename)
{var ic=open_bin$0(filename);
try
{var d=runtime.caml_md5_chan(ic,-1)}
catch(e){e = caml_wrap_exception(e);caml_ml_close_channel(ic);throw e}
caml_ml_close_channel(ic);
return d}
function output$0(chan,digest){return output_string(chan,digest)}
function input$0(chan){return really_input_string(chan,16)}
function char_hex(n){var _oP_=10 <= n?87:48;return n + _oP_ | 0}
function to_hex(d)
{if(16 !== caml_ml_string_length(d))invalid_arg(cst_Digest_to_hex);
var result=caml_create_bytes(32),i=0;
for(;;)
{var x=caml_string_get(d,i);
caml_bytes_unsafe_set(result,i * 2 | 0,char_hex(x >>> 4 | 0));
caml_bytes_unsafe_set(result,(i * 2 | 0) + 1 | 0,char_hex(x & 15));
var _oO_=i + 1 | 0;
if(15 !== i){var i=_oO_;continue}
return caml_string_of_bytes(result)}}
function from_hex(s)
{if(32 !== caml_ml_string_length(s))invalid_arg(cst_Digest_from_hex);
function digit(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 [0,Invalid_argument,cst_Digest_from_hex$0]}
var result=caml_create_bytes(16),i=0;
for(;;)
{var i$0=2 * i | 0,_oM_=digit(caml_string_get(s,i$0 + 1 | 0));
caml_bytes_set
(result,i,chr((digit(caml_string_get(s,i$0)) << 4) + _oM_ | 0));
var _oN_=i + 1 | 0;
if(15 !== i){var i=_oN_;continue}
return caml_string_of_bytes(result)}}
var
Stdlib_Digest=
[0,
compare$9,
equal$9,
string,
bytes,
substring,
subbytes,
file,
output$0,
input$0,
to_hex,
from_hex];
caml_register_global(814,Stdlib_Digest,"Stdlib__Digest");
function new_state(param){return [0,caml_make_vect(55,0),0]}
function assign(st1,st2)
{blit$1(st2[1],0,st1[1],0,55);st1[2] = st2[2];return 0}
function full_init(s,seed)
{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 _oL_=i$0 + 1 | 0;
if(54 !== i$0){var i$0=_oL_;continue}
var accu=[0,cst_x$1],_oH_=54 + max$1(55,l) | 0,_oG_=0;
if(! (_oH_ < 0))
{var i=_oG_;
for(;;)
{var
j=i % 55 | 0,
k=caml_mod(i,l),
x=caml_check_bound(seed$0,k)[1 + k];
accu[1] = string(cat(accu[1],caml_string_of_jsbytes("" + x)));
var
_oI_=accu[1],
_oC_=caml_string_get(_oI_,3) << 24,
_oD_=caml_string_get(_oI_,2) << 16,
_oE_=caml_string_get(_oI_,1) << 8,
_oF_=((caml_string_get(_oI_,0) + _oE_ | 0) + _oD_ | 0) + _oC_ | 0,
_oJ_=(caml_check_bound(s[1],j)[1 + j] ^ _oF_) & 1073741823;
caml_check_bound(s[1],j)[1 + j] = _oJ_;
var _oK_=i + 1 | 0;
if(_oH_ !== i){var i=_oK_;continue}
break}}
s[2] = 0;
return 0}}
function make$3(seed)
{var result=new_state(0);full_init(result,seed);return result}
function make_self_init(param){return make$3(caml_sys_random_seed(0))}
function copy$5(s){var result=new_state(0);assign(result,s);return result}
function bits(s)
{s[2] = (s[2] + 1 | 0) % 55 | 0;
var
_oz_=s[2],
curval=caml_check_bound(s[1],_oz_)[1 + _oz_],
_oA_=(s[2] + 24 | 0) % 55 | 0,
newval=
caml_check_bound(s[1],_oA_)[1 + _oA_]
+
(curval ^ (curval >>> 25 | 0) & 31)
|
0,
newval30=newval & 1073741823,
_oB_=s[2];
caml_check_bound(s[1],_oB_)[1 + _oB_] = 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))continue;
return v}}
function int$0(s,bound)
{if(! (1073741823 < bound) && 0 < bound)return intaux(s,bound);
return invalid_arg(cst_Random_int)}
function full_int(s,bound)
{if(0 < bound)
{if(1073741823 < bound)
for(;;)
{var b1=bits(s),b2=bits(s);
if(bound <= 2147483647)
var bpos=(b2 & 1073725440) << 1 | b1 >>> 15 | 0,r=bpos;
else
var
b3=bits(s),
bpos$0=
((b3 & 1073741312) << 12 | b2 >>> 9 | 0)
<<
20
|
b1
>>>
10
|
0,
r=bpos$0;
var v=caml_mod(r,bound);
if(((2147483647 - bound | 0) + 1 | 0) < (r - v | 0))continue;
return v}
return intaux(s,bound)}
return invalid_arg(cst_Random_full_int)}
function int32(s,bound)
{if(caml_lessequal(bound,0))return invalid_arg(cst_Random_int32);
for(;;)
{var b1=bits(s),b2=(bits(s) & 1) << 30,r=b1 | b2,v=caml_mod(r,bound);
if(caml_greaterthan(r - v | 0,(2147483647 - bound | 0) + 1 | 0))
continue;
return v}}
function int64(s,bound)
{if(caml_lessequal(bound,_cg_))return invalid_arg(cst_Random_int64);
for(;;)
{var
b1=caml_int64_of_int32(bits(s)),
b2=caml_int64_shift_left(caml_int64_of_int32(bits(s)),30),
b3=caml_int64_shift_left(caml_int64_of_int32(bits(s) & 7),60),
r=caml_int64_or(b1,caml_int64_or(b2,b3)),
v=runtime.caml_int64_mod(r,bound);
if
(caml_greaterthan
(caml_int64_sub(r,v),
caml_int64_add(caml_int64_sub(max_int$2,bound),_cf_)))
continue;
return v}}
function nativeint(s,bound){return int32(s,bound)}
function float$0(s,bound)
{var r1=bits(s),r2=bits(s);
return (r1 / 1073741824. + r2) / 1073741824. * bound}
function bool(s){return 0 === (bits(s) & 1)?1:0}
function bits32(s)
{var b1=bits(s) >>> 14 | 0,b2=bits(s) >>> 14 | 0;return b1 | b2 << 16}
function bits64(s)
{var
b1=caml_int64_shift_right_unsigne(caml_int64_of_int32(bits(s)),9),
b2=caml_int64_shift_right_unsigne(caml_int64_of_int32(bits(s)),9),
b3=caml_int64_shift_right_unsigne(caml_int64_of_int32(bits(s)),8);
return caml_int64_or
(b1,
caml_int64_or
(caml_int64_shift_left(b2,21),caml_int64_shift_left(b3,42)))}
function nativebits(s){return bits32(s)}
var default$0=[0,_ch_.slice(),0];
function bits$0(param){return bits(default$0)}
function int$1(bound){return int$0(default$0,bound)}
function full_int$0(bound){return full_int(default$0,bound)}
function int32$0(bound){return int32(default$0,bound)}
function nativeint$0(bound){return nativeint(default$0,bound)}
function int64$0(bound){return int64(default$0,bound)}
function float$1(scale){return float$0(default$0,scale)}
function bool$0(param){return bool(default$0)}
function bits32$0(param){return bits32(default$0)}
function bits64$0(param){return bits64(default$0)}
function nativebits$0(param){return nativebits(default$0)}
function full_init$0(seed){return full_init(default$0,seed)}
function init$5(seed){return full_init(default$0,[0,seed])}
function self_init(param){return full_init$0(caml_sys_random_seed(0))}
function get_state(param){return copy$5(default$0)}
function set_state(s){return assign(default$0,s)}
var
_ci_=
[0,
make$3,
make_self_init,
copy$5,
bits,
int$0,
full_int,
int32,
nativeint,
int64,
float$0,
bool,
bits32,
bits64,
nativebits],
Stdlib_Random=
[0,
init$5,
full_init$0,
self_init,
bits$0,
int$1,
full_int$0,
int32$0,
nativeint$0,
int64$0,
float$1,
bool$0,
bits32$0,
bits64$0,
nativebits$0,
_ci_,
get_state,
set_state];
caml_register_global(815,Stdlib_Random,"Stdlib__Random");
function ongoing_traversal(h)
{var _ox_=h.length - 1 < 4?1:0,_oy_=_ox_ || (h[4] < 0?1:0);return _oy_}
function flip_ongoing_traversal(h){h[4] = - h[4] | 0;return 0}
try
{var _c5_=caml_sys_getenv(cst_OCAMLRUNPARAM),params=_c5_}
catch(_ov_)
{_ov_ = caml_wrap_exception(_ov_);
if(_ov_ !== Not_found)throw _ov_;
try
{var _c4_=caml_sys_getenv(cst_CAMLRUNPARAM),_cj_=_c4_}
catch(_ow_)
{_ow_ = caml_wrap_exception(_ow_);
if(_ow_ !== Not_found)throw _ow_;
var _cj_=cst$66}
var params=_cj_}
var
randomized_default=contains$0(params,82),
randomized=[0,randomized_default];
function randomize(param){randomized[1] = 1;return 0}
function is_randomized(param){return randomized[1]}
var prng=[246,function(_ou_){return caml_call1(_ci_[2],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;
continue}}
function create$3(opt,initial_size)
{if(opt)var sth=opt[1],random=sth;else var random=randomized[1];
var s=power_2_above(16,initial_size);
if(random)
var
_os_=caml_obj_tag(prng),
_ot_=250 === _os_?prng[1]:246 === _os_?force_lazy_block(prng):prng,
seed=caml_call1(_ci_[4],_ot_);
else
var seed=0;
return [0,0,caml_make_vect(s,0),seed,s]}
function clear$2(h)
{var _or_=0 < h[1]?1:0;
return _or_?(h[1] = 0,fill$0(h[2],0,h[2].length - 1,0)):_or_}
function reset$0(h)
{var len=h[2].length - 1;
if(4 <= h.length - 1 && len !== abs(h[4]))
{h[1] = 0;h[2] = caml_make_vect(abs(h[4]),0);return 0}
return clear$2(h)}
function copy_bucketlist(param)
{if(param)
{var
key=param[1],
data=param[2],
next=param[3],
prec$0=[0,key,data,next],
prec=prec$0,
param$0=next;
for(;;)
{if(param$0)
{var
key$0=param$0[1],
data$0=param$0[2],
next$0=param$0[3],
r=[0,key$0,data$0,next$0];
prec[3] = r;
var prec=r,param$0=next$0;
continue}
return prec$0}}
return 0}
function copy$6(init)
{var _oo_=init[4],_op_=init[3],_oq_=map$7(copy_bucketlist,init[2]);
return [0,init[1],_oq_,_op_,_oo_]}
function length$5(h){return h[1]}
function insert_all_buckets(indexfun,inplace,odata,ndata)
{var
nsize=ndata.length - 1,
ndata_tail=caml_make_vect(nsize,0),
_oi_=odata.length - 1 - 1 | 0,
_oh_=0;
if(! (_oi_ < 0))
{var i$0=_oh_;
a:
for(;;)
{var cell$1=caml_check_bound(odata,i$0)[1 + i$0],cell=cell$1;
for(;;)
{if(cell)
{var
key=cell[1],
data=cell[2],
next=cell[3],
cell$0=inplace?cell:[0,key,data,0],
nidx=caml_call1(indexfun,key),
match=caml_check_bound(ndata_tail,nidx)[1 + nidx];
if(match)
match[3] = cell$0;
else
caml_check_bound(ndata,nidx)[1 + nidx] = cell$0;
caml_check_bound(ndata_tail,nidx)[1 + nidx] = cell$0;
var cell=next;
continue}
var _on_=i$0 + 1 | 0;
if(_oi_ !== i$0){var i$0=_on_;continue a}
break}
break}}
if(inplace)
{var _ok_=nsize - 1 | 0,_oj_=0;
if(! (_ok_ < 0))
{var i=_oj_;
for(;;)
{var match$0=caml_check_bound(ndata_tail,i)[1 + i];
if(match$0)match$0[3] = 0;
var _om_=i + 1 | 0;
if(_ok_ !== i){var i=_om_;continue}
break}}
var _ol_=0}
else
var _ol_=inplace;
return _ol_}
function resize$0(indexfun,h)
{var
odata=h[2],
osize=odata.length - 1,
nsize=osize * 2 | 0,
_og_=nsize < max_array_length?1:0;
if(_og_)
{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)}
return _og_}
function iter$10(f,h)
{function do_bucket(param)
{var param$0=param;
for(;;)
{if(param$0)
{var key=param$0[1],data=param$0[2],next=param$0[3];
caml_call2(f,key,data);
var param$0=next;
continue}
return 0}}
var old_trav=ongoing_traversal(h);
if(1 - old_trav)flip_ongoing_traversal(h);
try
{var d=h[2],_oc_=d.length - 1 - 1 | 0,_ob_=0;
if(! (_oc_ < 0))
{var i=_ob_;
for(;;)
{do_bucket(caml_check_bound(d,i)[1 + i]);
var _of_=i + 1 | 0;
if(_oc_ !== i){var i=_of_;continue}
break}}
var _od_=1 - old_trav,_oe_=_od_?flip_ongoing_traversal(h):_od_;
return _oe_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(old_trav)throw exn;
flip_ongoing_traversal(h);
throw exn}}
function filter_map_inplace_bucket(f,h,i,prec,slot)
{var prec$0=prec,slot$0=slot;
for(;;)
{if(slot$0)
{var
key=slot$0[1],
data=slot$0[2],
next=slot$0[3],
match=caml_call2(f,key,data);
if(match)
{var data$0=match[1];
if(prec$0)
prec$0[3] = slot$0;
else
caml_check_bound(h[2],i)[1 + i] = slot$0;
slot$0[2] = data$0;
var prec$0=slot$0,slot$0=next;
continue}
h[1] = h[1] - 1 | 0;
var slot$0=next;
continue}
return prec$0
?(prec$0[3] = 0,0)
:(caml_check_bound(h[2],i)[1 + i] = 0,0)}}
function filter_map_inplace(f,h)
{var d=h[2],old_trav=ongoing_traversal(h);
if(1 - old_trav)flip_ongoing_traversal(h);
try
{var _n9_=d.length - 1 - 1 | 0,_n8_=0;
if(! (_n9_ < 0))
{var i=_n8_;
for(;;)
{filter_map_inplace_bucket(f,h,i,0,caml_check_bound(h[2],i)[1 + i]);
var _oa_=i + 1 | 0;
if(_n9_ !== i){var i=_oa_;continue}
break}}
var _n__=1 - old_trav,_n$_=_n__?flip_ongoing_traversal(h):_n__;
return _n$_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(old_trav)throw exn;
flip_ongoing_traversal(h);
throw exn}}
function fold$4(f,h,init)
{function do_bucket(b,accu)
{var b$0=b,accu$0=accu;
for(;;)
{if(b$0)
{var
key=b$0[1],
data=b$0[2],
next=b$0[3],
accu$1=caml_call3(f,key,data,accu$0),
b$0=next,
accu$0=accu$1;
continue}
return accu$0}}
var old_trav=ongoing_traversal(h);
if(1 - old_trav)flip_ongoing_traversal(h);
try
{var d=h[2],accu=[0,init],_n4_=d.length - 1 - 1 | 0,_n3_=0;
if(! (_n4_ < 0))
{var i=_n3_;
for(;;)
{var _n6_=accu[1];
accu[1] = do_bucket(caml_check_bound(d,i)[1 + i],_n6_);
var _n7_=i + 1 | 0;
if(_n4_ !== i){var i=_n7_;continue}
break}}
if(1 - old_trav)flip_ongoing_traversal(h);
var _n5_=accu[1];
return _n5_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(old_trav)throw exn;
flip_ongoing_traversal(h);
throw exn}}
function bucket_length(accu,param)
{var accu$0=accu,param$0=param;
for(;;)
{if(param$0)
{var
param$1=param$0[3],
accu$1=accu$0 + 1 | 0,
accu$0=accu$1,
param$0=param$1;
continue}
return accu$0}}
function stats(h)
{var
_nZ_=h[2],
_n0_=0,
mbl=
fold_left$3
(function(m,b){return max$1(m,bucket_length(0,b))},_n0_,_nZ_),
histo=caml_make_vect(mbl + 1 | 0,0),
_n1_=h[2];
iter$5
(function(b)
{var
l=bucket_length(0,b),
_n2_=caml_check_bound(histo,l)[1 + l] + 1 | 0;
caml_check_bound(histo,l)[1 + l] = _n2_;
return 0},
_n1_);
return [0,h[1],h[2].length - 1,mbl,histo]}
function to_seq$9(tbl)
{var tbl_data=tbl[2];
function aux(i,buck,param)
{var i$0=i,buck$0=buck;
for(;;)
{if(buck$0)
{var key=buck$0[1],data=buck$0[2],next=buck$0[3];
return [0,[0,key,data],function(_nY_){return aux(i$0,next,_nY_)}]}
if(i$0 === tbl_data.length - 1)return 0;
var
buck$1=caml_check_bound(tbl_data,i$0)[1 + i$0],
i$1=i$0 + 1 | 0,
i$0=i$1,
buck$0=buck$1;
continue}}
var _nV_=0,_nW_=0;
return function(_nX_){return aux(_nW_,_nV_,_nX_)}}
function to_seq_keys(m)
{var _nR_=to_seq$9(m);
function _nS_(_nU_){return _nU_[1]}
return function(_nT_){return map$1(_nS_,_nR_,_nT_)}}
function to_seq_values(m)
{var _nN_=to_seq$9(m);
function _nO_(_nQ_){return _nQ_[2]}
return function(_nP_){return map$1(_nO_,_nN_,_nP_)}}
function MakeSeeded(H)
{function key_index(h,key)
{var _nM_=h[2].length - 1 - 1 | 0;
return caml_call2(H[2],h[3],key) & _nM_}
function add(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 _nL_=h[2].length - 1 << 1 < h[1]?1:0;
return _nL_?resize$0(key_index,h):_nL_}
function remove(h,key)
{var
i=key_index(h,key),
c$0=caml_check_bound(h[2],i)[1 + i],
prec=0,
c=c$0;
for(;;)
{if(c)
{var k=c[1],next=c[3];
if(caml_call2(H[1],k,key))
{h[1] = h[1] - 1 | 0;
return prec
?(prec[3] = next,0)
:(caml_check_bound(h[2],i)[1 + i] = next,0)}
var prec=c,c=next;
continue}
return 0}}
function find(h,key)
{var _nK_=key_index(h,key),match=caml_check_bound(h[2],_nK_)[1 + _nK_];
if(match)
{var k1=match[1],d1=match[2],next1=match[3];
if(caml_call2(H[1],key,k1))return d1;
if(next1)
{var k2=next1[1],d2=next1[2],next2=next1[3];
if(caml_call2(H[1],key,k2))return d2;
if(next2)
{var k3=next2[1],d3=next2[2],next3=next2[3];
if(caml_call2(H[1],key,k3))return d3;
var param=next3;
for(;;)
{if(param)
{var k=param[1],data=param[2],next=param[3];
if(caml_call2(H[1],key,k))return data;
var param=next;
continue}
throw Not_found}}
throw Not_found}
throw Not_found}
throw Not_found}
function find_opt(h,key)
{var _nJ_=key_index(h,key),match=caml_check_bound(h[2],_nJ_)[1 + _nJ_];
if(match)
{var k1=match[1],d1=match[2],next1=match[3];
if(caml_call2(H[1],key,k1))return [0,d1];
if(next1)
{var k2=next1[1],d2=next1[2],next2=next1[3];
if(caml_call2(H[1],key,k2))return [0,d2];
if(next2)
{var k3=next2[1],d3=next2[2],next3=next2[3];
if(caml_call2(H[1],key,k3))return [0,d3];
var param=next3;
for(;;)
{if(param)
{var k=param[1],data=param[2],next=param[3];
if(caml_call2(H[1],key,k))return [0,data];
var param=next;
continue}
return 0}}
return 0}
return 0}
return 0}
function find_all(h,key)
{function find_in_bucket(param)
{var param$0=param;
for(;;)
{if(param$0)
{var k=param$0[1],d=param$0[2],next=param$0[3];
if(caml_call2(H[1],k,key))return [0,d,find_in_bucket(next)];
var param$0=next;
continue}
return 0}}
var _nI_=key_index(h,key);
return find_in_bucket(caml_check_bound(h[2],_nI_)[1 + _nI_])}
function replace(h,key,data)
{var
i=key_index(h,key),
param$0=caml_check_bound(h[2],i)[1 + i],
param=param$0;
for(;;)
{if(param)
{var k=param[1],next=param[3];
if(! caml_call2(H[1],k,key)){var param=next;continue}
param[1] = key;
param[2] = data;
var _nF_=0}
else
var _nF_=1;
if(_nF_)
{caml_check_bound(h[2],i)[1 + i] = [0,key,data,param$0];
h[1] = h[1] + 1 | 0;
var _nG_=h[2].length - 1 << 1 < h[1]?1:0;
if(_nG_)return resize$0(key_index,h);
var _nH_=_nG_}
else
var _nH_=_nF_;
return _nH_}}
function mem(h,key)
{var
_nE_=key_index(h,key),
param$0=caml_check_bound(h[2],_nE_)[1 + _nE_],
param=param$0;
for(;;)
{if(param)
{var k=param[1],next=param[3],_nD_=caml_call2(H[1],k,key);
if(_nD_)return _nD_;
var param=next;
continue}
return 0}}
function add_seq(tbl,i)
{return iter
(function(param)
{var v=param[2],k=param[1];return add(tbl,k,v)},
i)}
function replace_seq(tbl,i)
{return iter
(function(param)
{var v=param[2],k=param[1];return replace(tbl,k,v)},
i)}
function of_seq(i){var tbl=create$3(0,16);replace_seq(tbl,i);return tbl}
return [0,
create$3,
clear$2,
reset$0,
copy$6,
add,
remove,
find,
find_opt,
find_all,
replace,
mem,
iter$10,
filter_map_inplace,
fold$4,
length$5,
stats,
to_seq$9,
to_seq_keys,
to_seq_values,
add_seq,
replace_seq,
of_seq]}
function Make$0(H)
{var equal=H[1];
function hash(seed,x){return caml_call1(H[2],x)}
var
include=MakeSeeded([0,equal,hash]),
clear=include[2],
reset=include[3],
copy=include[4],
add=include[5],
remove=include[6],
find=include[7],
find_opt=include[8],
find_all=include[9],
replace=include[10],
mem=include[11],
iter=include[12],
filter_map_inplace=include[13],
fold=include[14],
length=include[15],
stats=include[16],
to_seq=include[17],
to_seq_keys=include[18],
to_seq_values=include[19],
add_seq=include[20],
replace_seq=include[21],
_nC_=include[1];
function create(sz){return caml_call2(_nC_,_ck_,sz)}
function of_seq(i)
{var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl}
return [0,
create,
clear,
reset,
copy,
add,
remove,
find,
find_opt,
find_all,
replace,
mem,
iter,
filter_map_inplace,
fold,
length,
stats,
to_seq,
to_seq_keys,
to_seq_values,
add_seq,
replace_seq,
of_seq]}
function hash$1(x){return caml_hash(10,100,0,x)}
function hash_param(n1,n2,x){return caml_hash(n1,n2,0,x)}
function seeded_hash(seed,x){return caml_hash(10,100,seed,x)}
function key_index(h,key)
{return 4 <= h.length - 1
?caml_hash(10,100,h[3],key) & (h[2].length - 1 - 1 | 0)
:invalid_arg(cst_Hashtbl_unsupported_hash_t)}
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 _nB_=h[2].length - 1 << 1 < h[1]?1:0;
return _nB_?resize$0(key_index,h):_nB_}
function remove(h,key)
{var i=key_index(h,key),c$0=caml_check_bound(h[2],i)[1 + i],prec=0,c=c$0;
for(;;)
{if(c)
{var k=c[1],next=c[3];
if(0 === caml_compare(k,key))
{h[1] = h[1] - 1 | 0;
return prec
?(prec[3] = next,0)
:(caml_check_bound(h[2],i)[1 + i] = next,0)}
var prec=c,c=next;
continue}
return 0}}
function find$1(h,key)
{var _nA_=key_index(h,key),match=caml_check_bound(h[2],_nA_)[1 + _nA_];
if(match)
{var k1=match[1],d1=match[2],next1=match[3];
if(0 === caml_compare(key,k1))return d1;
if(next1)
{var k2=next1[1],d2=next1[2],next2=next1[3];
if(0 === caml_compare(key,k2))return d2;
if(next2)
{var k3=next2[1],d3=next2[2],next3=next2[3];
if(0 === caml_compare(key,k3))return d3;
var param=next3;
for(;;)
{if(param)
{var k=param[1],data=param[2],next=param[3];
if(0 === caml_compare(key,k))return data;
var param=next;
continue}
throw Not_found}}
throw Not_found}
throw Not_found}
throw Not_found}
function find_opt$1(h,key)
{var _nz_=key_index(h,key),match=caml_check_bound(h[2],_nz_)[1 + _nz_];
if(match)
{var k1=match[1],d1=match[2],next1=match[3];
if(0 === caml_compare(key,k1))return [0,d1];
if(next1)
{var k2=next1[1],d2=next1[2],next2=next1[3];
if(0 === caml_compare(key,k2))return [0,d2];
if(next2)
{var k3=next2[1],d3=next2[2],next3=next2[3];
if(0 === caml_compare(key,k3))return [0,d3];
var param=next3;
for(;;)
{if(param)
{var k=param[1],data=param[2],next=param[3];
if(0 === caml_compare(key,k))return [0,data];
var param=next;
continue}
return 0}}
return 0}
return 0}
return 0}
function find_all$0(h,key)
{function find_in_bucket(param)
{var param$0=param;
for(;;)
{if(param$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)];
var param$0=next;
continue}
return 0}}
var _ny_=key_index(h,key);
return find_in_bucket(caml_check_bound(h[2],_ny_)[1 + _ny_])}
function replace(h,key,data)
{var
i=key_index(h,key),
param$0=caml_check_bound(h[2],i)[1 + i],
param=param$0;
for(;;)
{if(param)
{var k=param[1],next=param[3];
if(0 !== caml_compare(k,key)){var param=next;continue}
param[1] = key;
param[2] = data;
var _nv_=0}
else
var _nv_=1;
if(_nv_)
{caml_check_bound(h[2],i)[1 + i] = [0,key,data,param$0];
h[1] = h[1] + 1 | 0;
var _nw_=h[2].length - 1 << 1 < h[1]?1:0;
if(_nw_)return resize$0(key_index,h);
var _nx_=_nw_}
else
var _nx_=_nv_;
return _nx_}}
function mem$2(h,key)
{var
_nu_=key_index(h,key),
param$0=caml_check_bound(h[2],_nu_)[1 + _nu_],
param=param$0;
for(;;)
{if(param)
{var k=param[1],next=param[3],_nt_=0 === caml_compare(k,key)?1:0;
if(_nt_)return _nt_;
var param=next;
continue}
return 0}}
function add_seq$2(tbl,i)
{return iter
(function(param)
{var v=param[2],k=param[1];return add$0(tbl,k,v)},
i)}
function replace_seq(tbl,i)
{return iter
(function(param)
{var v=param[2],k=param[1];return replace(tbl,k,v)},
i)}
function of_seq$7(i){var tbl=create$3(0,16);replace_seq(tbl,i);return tbl}
function rebuild(opt,h)
{if(opt)var sth=opt[1],random=sth;else var random=randomized[1];
var s=power_2_above(16,h[2].length - 1);
if(random)
var
_nm_=caml_obj_tag(prng),
_nn_=250 === _nm_?prng[1]:246 === _nm_?force_lazy_block(prng):prng,
seed=caml_call1(_ci_[4],_nn_);
else
var seed=4 <= h.length - 1?h[3]:0;
var
_no_=4 <= h.length - 1?h[4]:s,
h$0=[0,h[1],caml_make_vect(s,0),seed,_no_],
_np_=h$0[2],
_nq_=h[2],
_nr_=0;
insert_all_buckets
(function(_ns_){return key_index(h$0,_ns_)},_nr_,_nq_,_np_);
return h$0}
var
Stdlib_Hashtbl=
[0,
create$3,
clear$2,
reset$0,
copy$6,
add$0,
find$1,
find_opt$1,
find_all$0,
mem$2,
remove,
replace,
iter$10,
filter_map_inplace,
fold$4,
length$5,
randomize,
is_randomized,
rebuild,
stats,
to_seq$9,
to_seq_keys,
to_seq_values,
add_seq$2,
replace_seq,
of_seq$7,
Make$0,
MakeSeeded,
hash$1,
seeded_hash,
hash_param,
caml_hash];
caml_register_global(816,Stdlib_Hashtbl,"Stdlib__Hashtbl");
function weak_create(l)
{var _nk_=0 <= l?1:0,_nl_=_nk_?l <= _q_[15]?1:0:_nk_;
if(1 - _nl_)invalid_arg(cst_Weak_create);
return runtime.caml_weak_create(l)}
function length$6(x){return x.length - 1 - 2 | 0}
function raise_if_invalid_offset$0(e,o,msg)
{var _nh_=0 <= o?1:0,_ni_=_nh_?o < length$6(e)?1:0:_nh_,_nj_=1 - _ni_;
return _nj_?invalid_arg(msg):_nj_}
function set$1(e,o,x)
{raise_if_invalid_offset$0(e,o,cst_Weak_set);
if(x){var x$0=x[1];return caml_ephe_set_key(e,o,x$0)}
return caml_ephe_unset_key(e,o)}
function get$2(e,o)
{raise_if_invalid_offset$0(e,o,cst_Weak_get);
return runtime.caml_weak_get(e,o)}
function get_copy(e,o)
{raise_if_invalid_offset$0(e,o,cst_Weak_get_copy);
return runtime.caml_weak_get_copy(e,o)}
function check$0(e,o)
{raise_if_invalid_offset$0(e,o,cst_Weak_check);
return runtime.caml_weak_check(e,o)}
function blit$4(e1,o1,e2,o2,l)
{if
(0
<=
l
&&
0
<=
o1
&&
!
((length$6(e1) - l | 0) < o1)
&&
0
<=
o2
&&
!
((length$6(e2) - l | 0) < o2))
{var
_nf_=0 !== l?1:0,
_ng_=_nf_?runtime.caml_weak_blit(e1,o1,e2,o2,l):_nf_;
return _ng_}
return invalid_arg(cst_Weak_blit)}
function fill$2(ar,ofs,len,x)
{if(0 <= ofs && 0 <= len && ! ((length$6(ar) - len | 0) < ofs))
{var _nd_=(ofs + len | 0) - 1 | 0;
if(! (_nd_ < ofs))
{var i=ofs;
for(;;)
{set$1(ar,i,x);
var _ne_=i + 1 | 0;
if(_nd_ !== i){var i=_ne_;continue}
break}}
return 0}
throw [0,Invalid_argument,cst_Weak_fill]}
function Make$1(H)
{var emptybucket=weak_create(0);
function get_index(t,h){return caml_mod(h & 2147483647,t[1].length - 1)}
var limit=7;
function create(sz)
{var
sz$0=7 <= sz?sz:7,
sz$1=max_array_length < sz$0?max_array_length:sz$0;
return [0,
caml_make_vect(sz$1,emptybucket),
caml_make_vect(sz$1,[0]),
limit,
0,
0]}
function clear(t)
{var _nb_=t[1].length - 1 - 1 | 0,_na_=0;
if(! (_nb_ < 0))
{var i=_na_;
for(;;)
{caml_check_bound(t[1],i)[1 + i] = emptybucket;
caml_check_bound(t[2],i)[1 + i] = [0];
var _nc_=i + 1 | 0;
if(_nb_ !== i){var i=_nc_;continue}
break}}
t[3] = limit;
t[4] = 0;
return 0}
function fold(f,t,init)
{var _m$_=t[1],i=0;
return fold_right$2
(function(b,accu$1)
{var i$0=i,accu=accu$1;
for(;;)
{if(length$6(b) <= i$0)return accu;
var match=get$2(b,i$0);
if(match)
{var
v=match[1],
accu$0=caml_call2(f,v,accu),
i$1=i$0 + 1 | 0,
i$0=i$1,
accu=accu$0;
continue}
var i$2=i$0 + 1 | 0,i$0=i$2;
continue}},
_m$_,
init)}
function iter(f,t)
{var _m__=t[1],i=0;
return iter$5
(function(b)
{var i$0=i;
for(;;)
{if(length$6(b) <= i$0)return 0;
var match=get$2(b,i$0);
if(match)
{var v=match[1];
caml_call1(f,v);
var i$1=i$0 + 1 | 0,i$0=i$1;
continue}
var i$2=i$0 + 1 | 0,i$0=i$2;
continue}},
_m__)}
function count_bucket(i,b,accu)
{var i$0=i,accu$0=accu;
for(;;)
{if(length$6(b) <= i$0)return accu$0;
var
_m9_=check$0(b,i$0)?1:0,
accu$1=accu$0 + _m9_ | 0,
i$1=i$0 + 1 | 0,
i$0=i$1,
accu$0=accu$1;
continue}}
function count(t)
{var _m4_=0,_m5_=t[1],_m6_=0;
return fold_right$2
(function(_m7_,_m8_){return count_bucket(_m6_,_m7_,_m8_)},
_m5_,
_m4_)}
function add_aux(t,setter,d,h,index)
{var
bucket$0=caml_check_bound(t[1],index)[1 + index],
hashes=caml_check_bound(t[2],index)[1 + index],
sz=length$6(bucket$0),
i$3=0;
for(;;)
{if(sz <= i$3)
{var
newsz=
min$1(((3 * sz | 0) / 2 | 0) + 3 | 0,max_array_length - 2 | 0);
if(newsz <= sz)failwith(cst_Weak_Make_hash_bucket_cann);
var
newbucket$0=weak_create(newsz),
newhashes=caml_make_vect(newsz,0);
blit$4(bucket$0,0,newbucket$0,0,sz);
blit$1(hashes,0,newhashes,0,sz);
caml_call3(setter,newbucket$0,sz,d);
caml_check_bound(newhashes,sz)[1 + sz] = h;
caml_check_bound(t[1],index)[1 + index] = newbucket$0;
caml_check_bound(t[2],index)[1 + index] = newhashes;
var _m0_=sz <= t[3]?1:0,_m1_=_m0_?t[3] < newsz?1:0:_m0_;
if(_m1_)
{t[4] = t[4] + 1 | 0;
var i$4=0;
for(;;)
{var
_mQ_=t[5],
bucket=caml_check_bound(t[1],_mQ_)[1 + _mQ_],
_mR_=t[5],
hbucket=caml_check_bound(t[2],_mR_)[1 + _mR_],
n=length$6(bucket),
prev_len=(((n - 3 | 0) * 2 | 0) + 2 | 0) / 3 | 0,
live=count_bucket(0,bucket,0);
if(live <= prev_len)
{var j$2=length$6(bucket) - 1 | 0,i$0=0,j=j$2;
for(;;)
{if(prev_len <= j)
{if(check$0(bucket,i$0))
{var i$1=i$0 + 1 | 0,i$0=i$1;continue}
if(check$0(bucket,j))
{blit$4(bucket,j,bucket,i$0,1);
var _mS_=caml_check_bound(hbucket,j)[1 + j];
caml_check_bound(hbucket,i$0)[1 + i$0] = _mS_;
var j$0=j - 1 | 0,i$2=i$0 + 1 | 0,i$0=i$2,j=j$0;
continue}
var j$1=j - 1 | 0,j=j$1;
continue}
if(0 === prev_len)
{var _mT_=t[5];
caml_check_bound(t[1],_mT_)[1 + _mT_] = emptybucket;
var _mU_=t[5];
caml_check_bound(t[2],_mU_)[1 + _mU_] = [0]}
else
{var newbucket=weak_create(prev_len);
blit$4(bucket,0,newbucket,0,prev_len);
var _mX_=t[5];
caml_check_bound(t[1],_mX_)[1 + _mX_] = newbucket;
var _mY_=sub$1(hbucket,0,prev_len),_mZ_=t[5];
caml_check_bound(t[2],_mZ_)[1 + _mZ_] = _mY_}
var _mV_=t[3] < n?1:0,_mW_=_mV_?prev_len <= t[3]?1:0:_mV_;
if(_mW_)t[4] = t[4] - 1 | 0;
break}}
t[5] = caml_mod(t[5] + 1 | 0,t[1].length - 1);
var _m3_=i$4 + 1 | 0;
if(2 !== i$4){var i$4=_m3_;continue}
break}}
var _m2_=((t[1].length - 1) / 2 | 0) < t[4]?1:0;
if(_m2_)
{var
n$0=t[1].length - 1,
newlen=min$1(((3 * n$0 | 0) / 2 | 0) + 3 | 0,max_array_length);
if(n$0 < newlen)
{var newt=create(newlen),_mP_=t[1],i=0;
iteri$3
(function(j,ob)
{var i$0=i;
for(;;)
{if(length$6(ob) <= i$0)return 0;
var match=check$0(ob,i$0);
if(match)
{var
oh=caml_check_bound(t[2],j)[1 + j],
setter$0=
function(i)
{function setter(nb,ni,param){return blit$4(ob,i,nb,ni,1)}
return setter},
setter=setter$0(i$0),
h=caml_check_bound(oh,i$0)[1 + i$0];
add_aux(newt,setter,0,h,get_index(newt,h));
var i$1=i$0 + 1 | 0,i$0=i$1;
continue}
var i$2=i$0 + 1 | 0,i$0=i$2;
continue}},
_mP_);
t[1] = newt[1];
t[2] = newt[2];
t[3] = newt[3];
t[4] = newt[4];
t[5] = caml_mod(t[5],newt[1].length - 1);
return 0}
t[3] = max_int;
t[4] = 0;
return 0}
return _m2_}
if(check$0(bucket$0,i$3)){var i$5=i$3 + 1 | 0,i$3=i$5;continue}
caml_call3(setter,bucket$0,i$3,d);
caml_check_bound(hashes,i$3)[1 + i$3] = h;
return 0}}
function add(t,d)
{var h=caml_call1(H[2],d);
return add_aux(t,set$1,[0,d],h,get_index(t,h))}
function find_or(t,d,ifnotfound)
{var
h=caml_call1(H[2],d),
index=get_index(t,h),
bucket=caml_check_bound(t[1],index)[1 + index],
hashes=caml_check_bound(t[2],index)[1 + index],
sz=length$6(bucket),
i=0;
for(;;)
{if(sz <= i)return caml_call2(ifnotfound,h,index);
if(h === caml_check_bound(hashes,i)[1 + i])
{var match=get_copy(bucket,i);
if(match)
{var v=match[1];
if(caml_call2(H[1],v,d))
{var match$0=get$2(bucket,i);
if(match$0){var v$0=match$0[1];return v$0}
var i$0=i + 1 | 0,i=i$0;
continue}}
var i$1=i + 1 | 0,i=i$1;
continue}
var i$2=i + 1 | 0,i=i$2;
continue}}
function merge(t,d)
{return find_or
(t,
d,
function(h,index){add_aux(t,set$1,[0,d],h,index);return d})}
function find(t,d)
{return find_or(t,d,function(h,index){throw Not_found})}
function find_opt(t,d)
{var
h=caml_call1(H[2],d),
index=get_index(t,h),
bucket=caml_check_bound(t[1],index)[1 + index],
hashes=caml_check_bound(t[2],index)[1 + index],
sz=length$6(bucket),
i=0;
for(;;)
{if(sz <= i)return 0;
if(h === caml_check_bound(hashes,i)[1 + i])
{var match=get_copy(bucket,i);
if(match)
{var v=match[1];
if(caml_call2(H[1],v,d))
{var v$0=get$2(bucket,i);
if(v$0)return v$0;
var i$0=i + 1 | 0,i=i$0;
continue}}
var i$1=i + 1 | 0,i=i$1;
continue}
var i$2=i + 1 | 0,i=i$2;
continue}}
function find_shadow(t,d,iffound,ifnotfound)
{var
h=caml_call1(H[2],d),
index=get_index(t,h),
bucket=caml_check_bound(t[1],index)[1 + index],
hashes=caml_check_bound(t[2],index)[1 + index],
sz=length$6(bucket),
i=0;
for(;;)
{if(sz <= i)return ifnotfound;
if(h === caml_check_bound(hashes,i)[1 + i])
{var match=get_copy(bucket,i);
if(match)
{var v=match[1];
if(caml_call2(H[1],v,d))return caml_call2(iffound,bucket,i)}
var i$0=i + 1 | 0,i=i$0;
continue}
var i$1=i + 1 | 0,i=i$1;
continue}}
function remove(t,d)
{var _mO_=0;
return find_shadow(t,d,function(w,i){return set$1(w,i,0)},_mO_)}
function mem(t,d)
{var _mN_=0;return find_shadow(t,d,function(w,i){return 1},_mN_)}
function find_all(t,d)
{var
h=caml_call1(H[2],d),
index=get_index(t,h),
bucket=caml_check_bound(t[1],index)[1 + index],
hashes=caml_check_bound(t[2],index)[1 + index],
sz=length$6(bucket),
i=0,
accu=0;
for(;;)
{if(sz <= i)return accu;
if(h === caml_check_bound(hashes,i)[1 + i])
{var match=get_copy(bucket,i);
if(match)
{var v=match[1];
if(caml_call2(H[1],v,d))
{var match$0=get$2(bucket,i);
if(match$0)
{var
v$0=match$0[1],
accu$0=[0,v$0,accu],
i$0=i + 1 | 0,
i=i$0,
accu=accu$0;
continue}
var i$1=i + 1 | 0,i=i$1;
continue}}
var i$2=i + 1 | 0,i=i$2;
continue}
var i$3=i + 1 | 0,i=i$3;
continue}}
function stats(t)
{var len=t[1].length - 1,lens=map$7(length$6,t[1]);
sort(caml_int_compare,lens);
var
_mF_=0,
totlen=
fold_left$3(function(_mM_,_mL_){return _mM_ + _mL_ | 0},_mF_,lens),
_mG_=len - 1 | 0,
_mI_=len / 2 | 0,
_mH_=caml_check_bound(lens,_mG_)[1 + _mG_],
_mJ_=caml_check_bound(lens,_mI_)[1 + _mI_],
_mK_=caml_check_bound(lens,0)[1];
return [0,len,count(t),totlen,_mK_,_mJ_,_mH_]}
return [0,
create,
clear,
merge,
add,
remove,
find,
find_opt,
find_all,
mem,
iter,
fold,
count,
stats]}
var
Stdlib_Weak=
[0,
weak_create,
length$6,
set$1,
get$2,
get_copy,
check$0,
fill$2,
blit$4,
Make$1];
caml_register_global(817,Stdlib_Weak,"Stdlib__Weak");
function id$0(x){return x}
var
String_tag=[248,cst_Stdlib_Format_String_tag,caml_fresh_oo_id(0)],
size=0,
unknown=-1;
function pp_enqueue(state,token)
{state[13] = state[13] + token[3] | 0;return add(token,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 format_pp_text(state,size,text)
{state[9] = state[9] - size | 0;
pp_output_string(state,text);
state[11] = 0;
return 0}
function format_string(state,s)
{var _mE_=caml_string_notequal(s,cst$67);
return _mE_?format_pp_text(state,caml_ml_string_length(s),s):_mE_}
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$1(state[8],indent);
state[10] = real_indent;
state[9] = state[6] - state[10] | 0;
caml_call1(state[21],state[10]);
return format_string(state,after)}
function break_line(state,width){return break_new_line(state,_cl_,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;
caml_call1(state[20],width);
return format_string(state,after)}
function format_pp_token(state,size$0,param)
{if(typeof param === "number")
switch(param)
{case 0:
var match$3=top_opt(state[3]);
if(match$3)
{var
match$4=match$3[1],
tabs=match$4[1],
add_tab=
function(n,ls)
{if(ls)
{var l=ls[2],x=ls[1];
return caml_lessthan(n,x)?[0,n,ls]:[0,x,add_tab(n,l)]}
return [0,n,0]};
tabs[1] = add_tab(state[6] - state[9] | 0,tabs[1]);
return 0}
return 0;
case 1:pop_opt(state[2]);return 0;
case 2:pop_opt(state[3]);return 0;
case 3:
var match$5=top_opt(state[2]);
if(match$5)
{var match$6=match$5[1],width$0=match$6[2];
return break_line(state,width$0)}
return pp_output_newline(state);
case 4:
var _mB_=state[10] !== (state[6] - state[9] | 0)?1:0;
if(_mB_)
{var match$1=take_opt(state[28]);
if(match$1)
{var match$2=match$1[1],size=match$2[1],length=match$2[3];
state[12] = state[12] - length | 0;
state[9] = state[9] + size | 0;
return 0}
return 0}
return _mB_;
default:
var match$7=pop_opt(state[5]);
if(match$7)
{var tag_name=match$7[1],marker=caml_call1(state[25],tag_name);
return pp_output_string(state,marker)}
return 0}
else
switch(param[0])
{case 0:var s=param[1];return format_pp_text(state,size$0,s);
case 1:
var
breaks=param[2],
fits=param[1],
off=breaks[2],
before=breaks[1],
match$8=top_opt(state[2]);
if(match$8)
{var match$9=match$8[1],width$1=match$9[2],box_type$0=match$9[1];
switch(box_type$0)
{case 0:return break_same_line(state,fits);
case 1:return break_new_line(state,breaks,width$1);
case 2:return break_new_line(state,breaks,width$1);
case 3:
return state[9] < (size$0 + caml_ml_string_length(before) | 0)
?break_new_line(state,breaks,width$1)
:break_same_line(state,fits);
case 4:
return state[11]
?break_same_line(state,fits)
:state[9] < (size$0 + caml_ml_string_length(before) | 0)
?break_new_line(state,breaks,width$1)
:((state[6] - width$1 | 0) + off | 0) < state[10]
?break_new_line(state,breaks,width$1)
:break_same_line(state,fits);
default:return break_same_line(state,fits)}}
return 0;
case 2:
var
off$0=param[2],
n=param[1],
insertion_point=state[6] - state[9] | 0,
match$10=top_opt(state[3]);
if(match$10)
{var match$11=match$10[1],tabs$0=match$11[1],_mC_=tabs$0[1];
if(_mC_)
{var first=_mC_[1],param$0=tabs$0[1];
for(;;)
{if(param$0)
{var tail=param$0[2],head=param$0[1];
if(! (insertion_point <= head)){var param$0=tail;continue}
var _mD_=head}
else
var _mD_=first;
var tab=_mD_;
break}}
else
var tab=insertion_point;
var offset=tab - insertion_point | 0;
return 0 <= offset
?break_same_line(state,[0,cst$69,offset + n | 0,cst$68])
:break_new_line
(state,[0,cst$71,tab + off$0 | 0,cst$70],state[6])}
return 0;
case 3:
var
ty=param[2],
off$1=param[1],
insertion_point$0=state[6] - state[9] | 0;
if(state[8] < insertion_point$0)
{var match=top_opt(state[2]);
if(match)
{var match$0=match[1],width=match$0[2],box_type=match$0[1];
if(state[9] < width && ! (3 < box_type - 1 >>> 0))
break_line(state,width)}
else
pp_output_newline(state)}
var
width$2=state[9] - off$1 | 0,
box_type$1=1 === ty?1:state[9] < size$0?ty:5;
return push([0,box_type$1,width$2],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)
{var
match$0=match[1],
size=match$0[1],
length=match$0[3],
token=match$0[2],
pending_count=state[13] - state[12] | 0,
_mz_=0 <= size?1:0,
_mA_=_mz_ || (state[9] <= pending_count?1:0);
if(_mA_)
{take$0(state[28]);
var size$0=0 <= size?size:pp_infinity;
format_pp_token(state,size$0,token);
state[12] = length + state[12] | 0;
continue}
return _mA_}
return 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],size])}
function initialize_scan_stack(stack)
{clear(stack);
var queue_elem=[0,unknown,_cm_,0];
return push([0,-1,queue_elem],stack)}
function set_size(state,ty)
{var match=top_opt(state[1]);
if(match)
{var
match$0=match[1],
queue_elem=match$0[2],
left_total=match$0[1],
_mu_=queue_elem[1];
if(left_total < state[12])return initialize_scan_stack(state[1]);
var _mv_=queue_elem[2];
if(typeof _mv_ !== "number")
switch(_mv_[0])
{case 3:
var
_mx_=1 - ty,
_my_=
_mx_
?(queue_elem[1] = state[13] + _mu_ | 0,pop_opt(state[1]),0)
:_mx_;
return _my_;
case 1:
case 2:
var
_mw_=
ty?(queue_elem[1] = state[13] + _mu_ | 0,pop_opt(state[1]),0):ty;
return _mw_
}
return 0}
return 0}
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=- state[13] | 0,elem=[0,size,[3,indent,br_ty],0];
return scan_push(state,0,elem)}
var _ms_=state[14] === state[15]?1:0;
if(_ms_)
{var _mt_=state[16];
return enqueue_string_as(state,caml_ml_string_length(_mt_),_mt_)}
return _ms_}
function pp_close_box(state,param)
{var _mq_=1 < state[14]?1:0;
if(_mq_)
{if(state[14] < state[15])
{pp_enqueue(state,[0,size,1,0]);set_size(state,1);set_size(state,0)}
state[14] = state[14] - 1 | 0;
var _mr_=0}
else
var _mr_=_mq_;
return _mr_}
function pp_open_stag(state,tag_name)
{if(state[22]){push(tag_name,state[4]);caml_call1(state[26],tag_name)}
var _mp_=state[23];
if(_mp_)
{var token=[5,tag_name];return pp_enqueue(state,[0,size,token,0])}
return _mp_}
function pp_close_stag(state,param)
{if(state[23])pp_enqueue(state,[0,size,5,0]);
var _mn_=state[22];
if(_mn_)
{var match=pop_opt(state[4]);
if(match){var tag_name=match[1];return caml_call1(state[27],tag_name)}
var _mo_=0}
else
var _mo_=_mn_;
return _mo_}
function pp_open_tag(state,s){return pp_open_stag(state,[0,String_tag,s])}
function pp_close_tag(state,param){return pp_close_stag(state,0)}
function pp_set_print_tags(state,b){state[22] = b;return 0}
function pp_set_mark_tags(state,b){state[23] = b;return 0}
function pp_get_print_tags(state,param){return state[22]}
function pp_get_mark_tags(state,param){return state[23]}
function pp_set_tags(state,b)
{pp_set_print_tags(state,b);return pp_set_mark_tags(state,b)}
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 0}
function pp_rinit(state)
{state[12] = 1;
state[13] = 1;
clear$0(state[28]);
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_box_gen(state,0,3)}
function pp_flush_queue(state,b)
{var _mm_=state[4];
iter$7(function(param){return pp_close_tag(state,0)},_mm_);
for(;;)
{if(1 < state[14]){pp_close_box(state,0);continue}
state[13] = pp_infinity;
advance_left(state);
if(b)pp_output_newline(state);
return pp_rinit(state)}}
function pp_print_as_size(state,size,s)
{var _ml_=state[14] < state[15]?1:0;
return _ml_?enqueue_string_as(state,size,s):_ml_}
function pp_print_as(state,isize,s)
{return pp_print_as_size(state,isize,s)}
function pp_print_string(state,s)
{return pp_print_as(state,caml_ml_string_length(s),s)}
function pp_print_bytes(state,s)
{return pp_print_as(state,caml_ml_bytes_length(s),of_bytes(s))}
function pp_print_int(state,i)
{return pp_print_string(state,caml_string_of_jsbytes("" + i))}
function pp_print_float(state,f)
{return pp_print_string(state,to_string(f))}
function pp_print_bool(state,b)
{return pp_print_string(state,string_of_bool(b))}
function pp_print_char(state,c){return pp_print_as(state,1,make$1(1,c))}
function pp_open_hbox(state,param){return pp_open_box_gen(state,0,0)}
function pp_open_vbox(state,indent)
{return pp_open_box_gen(state,indent,1)}
function pp_open_hvbox(state,indent)
{return pp_open_box_gen(state,indent,2)}
function pp_open_hovbox(state,indent)
{return pp_open_box_gen(state,indent,3)}
function pp_open_box(state,indent){return pp_open_box_gen(state,indent,4)}
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 _mk_=state[14] < state[15]?1:0;
return _mk_?enqueue_advance(state,[0,size,3,0]):_mk_}
function pp_print_if_newline(state,param)
{var _mj_=state[14] < state[15]?1:0;
return _mj_?enqueue_advance(state,[0,size,4,0]):_mj_}
function pp_print_custom_break(state,fits,breaks)
{var
after=fits[3],
width=fits[2],
before=fits[1],
_mi_=state[14] < state[15]?1:0;
if(_mi_)
{var
size=- 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)}
return _mi_}
function pp_print_break(state,width,offset)
{return pp_print_custom_break
(state,[0,cst$75,width,cst$74],[0,cst$73,offset,cst$72])}
function pp_print_space(state,param){return pp_print_break(state,1,0)}
function pp_print_cut(state,param){return pp_print_break(state,0,0)}
function pp_open_tbox(state,param)
{state[14] = state[14] + 1 | 0;
var _mh_=state[14] < state[15]?1:0;
if(_mh_)
{var elem=[0,size,[4,[0,[0,0]]],0];return enqueue_advance(state,elem)}
return _mh_}
function pp_close_tbox(state,param)
{var _me_=1 < state[14]?1:0;
if(_me_)
{var _mf_=state[14] < state[15]?1:0;
if(_mf_)
{var elem=[0,size,2,0];
enqueue_advance(state,elem);
state[14] = state[14] - 1 | 0;
var _mg_=0}
else
var _mg_=_mf_}
else
var _mg_=_me_;
return _mg_}
function pp_print_tbreak(state,width,offset)
{var _md_=state[14] < state[15]?1:0;
if(_md_)
{var size=- state[13] | 0,elem=[0,size,[2,width,offset],width];
return scan_push(state,1,elem)}
return _md_}
function pp_print_tab(state,param){return pp_print_tbreak(state,0,0)}
function pp_set_tab(state,param)
{var _mc_=state[14] < state[15]?1:0;
if(_mc_){var elem=[0,size,0,0];return enqueue_advance(state,elem)}
return _mc_}
function pp_set_max_boxes(state,n)
{var _ma_=1 < n?1:0,_mb_=_ma_?(state[15] = n,0):_ma_;return _mb_}
function pp_get_max_boxes(state,param){return state[15]}
function pp_over_max_boxes(state,param)
{return state[14] === state[15]?1:0}
function pp_set_ellipsis_text(state,s){state[16] = s;return 0}
function pp_get_ellipsis_text(state,param){return state[16]}
function pp_limit(n){return n < 1000000010?n:1000000009}
function pp_set_max_indent(state,n$0)
{var _l$_=1 < n$0?1:0;
if(_l$_)
{var n$1=state[6] - n$0 | 0,_l__=1 <= n$1?1:0;
if(_l__)
{var n=pp_limit(n$1);
state[7] = n;
state[8] = state[6] - state[7] | 0;
return pp_rinit(state)}
return _l__}
return _l$_}
function pp_get_max_indent(state,param){return state[8]}
function pp_set_margin(state,n)
{var _l9_=1 <= n?1:0;
if(_l9_)
{var n$0=pp_limit(n);
state[6] = n$0;
var
new_max_indent=
state[8] <= state[6]
?state[8]
:max$1(max$1(state[6] - state[7] | 0,state[6] / 2 | 0),1);
return pp_set_max_indent(state,new_max_indent)}
return _l9_}
function validate_geometry(param)
{var margin=param[2],max_indent=param[1];
return 2 <= max_indent?margin <= max_indent?_cn_:_co_:_cp_}
function check_geometry(geometry)
{var match=validate_geometry(geometry);return 0 === match[0]?1:0}
function pp_get_margin(state,param){return state[6]}
function pp_set_full_geometry(state,param)
{var margin=param[2],max_indent=param[1];
pp_set_margin(state,margin);
pp_set_max_indent(state,max_indent);
return 0}
function pp_set_geometry(state,max_indent,margin)
{var geometry=[0,max_indent,margin],match=validate_geometry(geometry);
if(0 === match[0])return pp_set_full_geometry(state,geometry);
var msg=match[1];
throw [0,Invalid_argument,cat(cst_Format_pp_set_geometry,msg)]}
function pp_safe_set_geometry(state,max_indent,margin)
{var geometry=[0,max_indent,margin],match=validate_geometry(geometry);
return 0 === match[0]?pp_set_full_geometry(state,geometry):0}
function pp_get_geometry(state,param){return [0,state[8],state[6]]}
function pp_update_geometry(state,update)
{var geometry=pp_get_geometry(state,0);
return pp_set_full_geometry(state,caml_call1(update,geometry))}
function pp_set_formatter_out_functions(state,param)
{var j=param[5],i=param[4],h=param[3],g=param[2],f=param[1];
state[17] = f;
state[18] = g;
state[19] = h;
state[20] = i;
state[21] = j;
return 0}
function pp_get_formatter_out_functions(state,param)
{return [0,state[17],state[18],state[19],state[20],state[21]]}
function pp_set_formatter_output_functi(state,f,g)
{state[17] = f;state[18] = g;return 0}
function pp_get_formatter_output_functi(state,param)
{return [0,state[17],state[18]]}
function display_newline(state,param)
{return caml_call3(state[17],cst$76,0,1)}
var blank_line=make$1(80,32);
function display_indent(state,n)
{var n$0=n;
for(;;)
{var _l8_=0 < n$0?1:0;
if(_l8_)
{if(80 < n$0)
{caml_call3(state[17],blank_line,0,80);
var n$1=n$0 - 80 | 0,n$0=n$1;
continue}
return caml_call3(state[17],blank_line,0,n$0)}
return _l8_}}
function pp_set_formatter_out_channel(state,oc)
{state[17]
=
function(_l5_,_l6_,_l7_){return output_substring(oc,_l5_,_l6_,_l7_)};
state[18] = function(param){return caml_ml_flush(oc)};
state[19] = function(_l4_){return display_newline(state,_l4_)};
state[20] = function(_l3_){return display_indent(state,_l3_)};
state[21] = function(_l2_){return display_indent(state,_l2_)};
return 0}
function default_pp_mark_open_tag(param)
{if(param[1] === String_tag)
{var s=param[2];return cat(cst$78,cat(s,cst$77))}
return cst$79}
function default_pp_mark_close_tag(param)
{if(param[1] === String_tag)
{var s=param[2];return cat(cst$81,cat(s,cst$80))}
return cst$82}
function default_pp_print_open_tag(_l1_){return 0}
function default_pp_print_close_tag(_l0_){return 0}
function pp_make_formatter(f,g,h,i,j)
{var pp_queue=create$1(0),sys_tok=[0,unknown,_cq_,0];
add(sys_tok,pp_queue);
var scan_stack=create$0(0);
initialize_scan_stack(scan_stack);
push([0,1,sys_tok],scan_stack);
var _lX_=create$0(0),_lY_=create$0(0),_lZ_=create$0(0);
return [0,
scan_stack,
create$0(0),
_lZ_,
_lY_,
_lX_,
78,
10,
68,
78,
0,
1,
1,
1,
1,
max_int,
cst$83,
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 formatter_of_out_functions(out_funs)
{return pp_make_formatter
(out_funs[1],out_funs[2],out_funs[3],out_funs[4],out_funs[5])}
function make_formatter(output,flush)
{function _lP_(_lW_){return 0}
function _lQ_(_lV_){return 0}
var
ppf=
pp_make_formatter(output,flush,function(_lU_){return 0},_lQ_,_lP_);
ppf[19] = function(_lT_){return display_newline(ppf,_lT_)};
ppf[20] = function(_lS_){return display_indent(ppf,_lS_)};
ppf[21] = function(_lR_){return display_indent(ppf,_lR_)};
return ppf}
function formatter_of_out_channel(oc)
{function _lL_(param){return caml_ml_flush(oc)}
return make_formatter
(function(_lM_,_lN_,_lO_)
{return output_substring(oc,_lM_,_lN_,_lO_)},
_lL_)}
function formatter_of_buffer(b)
{function _lG_(_lK_){return 0}
return make_formatter
(function(_lH_,_lI_,_lJ_)
{return add_substring(b,_lH_,_lI_,_lJ_)},
_lG_)}
var pp_buffer_size=512;
function pp_make_buffer(param){return create$2(pp_buffer_size)}
var
stdbuf=pp_make_buffer(0),
std_formatter=formatter_of_out_channel(stdout),
err_formatter=formatter_of_out_channel(stderr),
str_formatter=formatter_of_buffer(stdbuf);
function flush_buffer_formatter(buf,ppf)
{pp_flush_queue(ppf,0);var s=contents(buf);reset(buf);return s}
function flush_str_formatter(param)
{return flush_buffer_formatter(stdbuf,str_formatter)}
function make_symbolic_output_buffer(param){return [0,0]}
function clear_symbolic_output_buffer(sob){sob[1] = 0;return 0}
function get_symbolic_output_buffer(sob){return rev(sob[1])}
function flush_symbolic_output_buffer(sob)
{var items=get_symbolic_output_buffer(sob);
clear_symbolic_output_buffer(sob);
return items}
function add_symbolic_output_item(sob,item)
{sob[1] = [0,item,sob[1]];return 0}
function formatter_of_symbolic_output_b(sob)
{function f(s,i,n){return add_symbolic_output_item(sob,[0,sub$0(s,i,n)])}
function g(_lF_){return add_symbolic_output_item(sob,0)}
function h(_lE_){return add_symbolic_output_item(sob,1)}
function i(n){return add_symbolic_output_item(sob,[1,n])}
function j(n){return add_symbolic_output_item(sob,[2,n])}
return pp_make_formatter(f,g,h,i,j)}
function open_hbox(_lD_){return pp_open_hbox(std_formatter,_lD_)}
function open_vbox(_lC_){return pp_open_vbox(std_formatter,_lC_)}
function open_hvbox(_lB_){return pp_open_hvbox(std_formatter,_lB_)}
function open_hovbox(_lA_){return pp_open_hovbox(std_formatter,_lA_)}
function open_box(_lz_){return pp_open_box(std_formatter,_lz_)}
function close_box(_ly_){return pp_close_box(std_formatter,_ly_)}
function open_tag(_lx_){return pp_open_tag(std_formatter,_lx_)}
function close_tag(_lw_){return pp_close_tag(std_formatter,_lw_)}
function open_stag(_lv_){return pp_open_stag(std_formatter,_lv_)}
function close_stag(_lu_){return pp_close_stag(std_formatter,_lu_)}
function print_as(_ls_,_lt_){return pp_print_as(std_formatter,_ls_,_lt_)}
function print_string$0(_lr_){return pp_print_string(std_formatter,_lr_)}
function print_bytes$0(_lq_){return pp_print_bytes(std_formatter,_lq_)}
function print_int$0(_lp_){return pp_print_int(std_formatter,_lp_)}
function print_float$0(_lo_){return pp_print_float(std_formatter,_lo_)}
function print_char$0(_ln_){return pp_print_char(std_formatter,_ln_)}
function print_bool(_lm_){return pp_print_bool(std_formatter,_lm_)}
function print_break(_lk_,_ll_)
{return pp_print_break(std_formatter,_lk_,_ll_)}
function print_cut(_lj_){return pp_print_cut(std_formatter,_lj_)}
function print_space(_li_){return pp_print_space(std_formatter,_li_)}
function force_newline(_lh_){return pp_force_newline(std_formatter,_lh_)}
function print_flush(_lg_){return pp_print_flush(std_formatter,_lg_)}
function print_newline$0(_lf_)
{return pp_print_newline(std_formatter,_lf_)}
function print_if_newline(_le_)
{return pp_print_if_newline(std_formatter,_le_)}
function open_tbox(_ld_){return pp_open_tbox(std_formatter,_ld_)}
function close_tbox(_lc_){return pp_close_tbox(std_formatter,_lc_)}
function print_tbreak(_la_,_lb_)
{return pp_print_tbreak(std_formatter,_la_,_lb_)}
function set_tab(_k$_){return pp_set_tab(std_formatter,_k$_)}
function print_tab(_k__){return pp_print_tab(std_formatter,_k__)}
function set_margin(_k9_){return pp_set_margin(std_formatter,_k9_)}
function get_margin(_k8_){return std_formatter[6]}
function set_max_indent(_k7_)
{return pp_set_max_indent(std_formatter,_k7_)}
function get_max_indent(_k6_){return std_formatter[8]}
function set_geometry(_k4_,_k5_)
{return pp_set_geometry(std_formatter,_k4_,_k5_)}
function safe_set_geometry(_k2_,_k3_)
{return pp_safe_set_geometry(std_formatter,_k2_,_k3_)}
function get_geometry(_k1_){return pp_get_geometry(std_formatter,_k1_)}
function update_geometry(_k0_)
{return pp_update_geometry(std_formatter,_k0_)}
function set_max_boxes(_kZ_){return pp_set_max_boxes(std_formatter,_kZ_)}
function get_max_boxes(_kY_){return std_formatter[15]}
function over_max_boxes(_kX_)
{return pp_over_max_boxes(std_formatter,_kX_)}
function set_ellipsis_text(_kW_)
{return pp_set_ellipsis_text(std_formatter,_kW_)}
function get_ellipsis_text(_kV_){return std_formatter[16]}
function set_formatter_out_channel(_kU_)
{return pp_set_formatter_out_channel(std_formatter,_kU_)}
function set_formatter_out_functions(_kT_)
{return pp_set_formatter_out_functions(std_formatter,_kT_)}
function get_formatter_out_functions(_kS_)
{return pp_get_formatter_out_functions(std_formatter,_kS_)}
function set_formatter_output_functions(_kQ_,_kR_)
{return pp_set_formatter_output_functi(std_formatter,_kQ_,_kR_)}
function get_formatter_output_functions(_kP_)
{return pp_get_formatter_output_functi(std_formatter,_kP_)}
function set_formatter_stag_functions(_kO_)
{return pp_set_formatter_stag_function(std_formatter,_kO_)}
function get_formatter_stag_functions(_kN_)
{return pp_get_formatter_stag_function(std_formatter,_kN_)}
function set_print_tags(_kM_)
{return pp_set_print_tags(std_formatter,_kM_)}
function get_print_tags(_kL_){return std_formatter[22]}
function set_mark_tags(_kK_){return pp_set_mark_tags(std_formatter,_kK_)}
function get_mark_tags(_kJ_){return std_formatter[23]}
function set_tags(_kI_){return pp_set_tags(std_formatter,_kI_)}
function pp_print_list(opt,pp_v,ppf,param)
{var opt$0=opt,param$0=param;
for(;;)
{if(opt$0)var sth=opt$0[1],pp_sep=sth;else var pp_sep=pp_print_cut;
if(param$0)
{var _kH_=param$0[1];
if(param$0[2])
{var vs=param$0[2];
caml_call2(pp_v,ppf,_kH_);
caml_call2(pp_sep,ppf,0);
var opt$1=[0,pp_sep],opt$0=opt$1,param$0=vs;
continue}
return caml_call2(pp_v,ppf,_kH_)}
return 0}}
function pp_print_seq(opt,pp_v,ppf,seq$1)
{if(opt)var sth=opt[1],pp_sep=sth;else var pp_sep=pp_print_cut;
var match$0=caml_call1(seq$1,0);
if(match$0)
{var seq$2=match$0[2],v$0=match$0[1];
caml_call2(pp_v,ppf,v$0);
var seq=seq$2;
for(;;)
{var match=caml_call1(seq,0);
if(match)
{var seq$0=match[2],v=match[1];
caml_call2(pp_sep,ppf,0);
caml_call2(pp_v,ppf,v);
var seq=seq$0;
continue}
return 0}}
return 0}
function pp_print_text(ppf,s)
{var len=caml_ml_string_length(s),left=[0,0],right=[0,0];
function flush(param)
{pp_print_string(ppf,sub$0(s,left[1],right[1] - left[1] | 0));
right[1]++;
left[1] = right[1];
return 0}
for(;;)
{if(right[1] !== len)
{var match=caml_string_get(s,right[1]);
if(10 === match)
{flush(0);pp_force_newline(ppf,0)}
else
if(32 === match){flush(0);pp_print_space(ppf,0)}else right[1]++;
continue}
var _kG_=left[1] !== len?1:0;
return _kG_?flush(0):_kG_}}
function pp_print_option(opt,pp_v,ppf,param)
{if(opt)
var sth=opt[1],none=sth;
else
var none=function(param,_kF_){return 0};
if(param){var v=param[1];return caml_call2(pp_v,ppf,v)}
return caml_call2(none,ppf,0)}
function pp_print_result(ok,error,ppf,param)
{if(0 === param[0]){var v=param[1];return caml_call2(ok,ppf,v)}
var e=param[1];
return caml_call2(error,ppf,e)}
function pp_print_either(left,right,ppf,param)
{if(0 === param[0]){var l=param[1];return caml_call2(left,ppf,l)}
var r=param[1];
return caml_call2(right,ppf,r)}
function compute_tag(output,tag_acc)
{var buf=create$2(16),ppf=formatter_of_buffer(buf);
caml_call2(output,ppf,tag_acc);
pp_print_flush(ppf,0);
var len=buf[2];
return 2 <= len?sub$3(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)}
else
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)
{var switch$0=0;
if(typeof acc === "number")
return 0;
else
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 _kv_=acc[2],_kw_=acc[1];
if(0 === _kv_[0])
{var acc$0=_kv_[1];
output_acc$0(ppf,_kw_);
return pp_open_stag
(ppf,[0,String_tag,compute_tag(output_acc$0,acc$0)])}
var acc$1=_kv_[1];
output_acc$0(ppf,_kw_);
var
match=open_box_of_string(compute_tag(output_acc$0,acc$1)),
bty=match[2],
indent=match[1];
return pp_open_box_gen(ppf,indent,bty);
case 2:
var _kx_=acc[1],switch$1=0;
if(typeof _kx_ !== "number" && 0 === _kx_[0])
{var _ky_=_kx_[2],switch$2=0;
if(typeof _ky_ !== "number" && 1 === _ky_[0])
{var s$0=acc[2],size=_ky_[2],p$1=_kx_[1];
switch$1 = 1;
switch$2 = 1}}
if(! switch$1){var s=acc[2],p$0=_kx_;switch$0 = 2}
break;
case 3:
var _kz_=acc[1],switch$3=0;
if(typeof _kz_ !== "number" && 0 === _kz_[0])
{var _kA_=_kz_[2],switch$4=0;
if(typeof _kA_ !== "number" && 1 === _kA_[0])
{var c$0=acc[2],size$0=_kA_[2],p$3=_kz_[1];
switch$0 = 1;
switch$3 = 1;
switch$4 = 1}}
if(! switch$3){var c=acc[2],p$2=_kz_;switch$0 = 3}
break;
case 4:
var _kB_=acc[1],switch$5=0;
if(typeof _kB_ !== "number" && 0 === _kB_[0])
{var _kC_=_kB_[2],switch$6=0;
if(typeof _kC_ !== "number" && 1 === _kC_[0])
{var s$0=acc[2],size=_kC_[2],p$1=_kB_[1];
switch$5 = 1;
switch$6 = 1}}
if(! switch$5){var s=acc[2],p$0=_kB_;switch$0 = 2}
break;
case 5:
var _kD_=acc[1],switch$7=0;
if(typeof _kD_ === "number" || ! (0 === _kD_[0]))
switch$7 = 1;
else
{var _kE_=_kD_[2],switch$8=0;
if(typeof _kE_ !== "number" && 1 === _kE_[0])
{var c$0=acc[2],size$0=_kE_[2],p$3=_kD_[1];
switch$0 = 1;
switch$8 = 1}
if(! switch$8)switch$7 = 1}
if(switch$7){var c=acc[2],p$2=_kD_;switch$0 = 3}
break;
case 6:
var f$0=acc[2],p$4=acc[1];
output_acc$0(ppf,p$4);
return caml_call1(f$0,ppf);
case 7:
var p$5=acc[1];output_acc$0(ppf,p$5);return pp_print_flush(ppf,0);
default:
var msg=acc[2],p$6=acc[1];
output_acc$0(ppf,p$6);
return invalid_arg(msg)}
switch(switch$0)
{case 0:output_acc$0(ppf,p$1);return pp_print_as_size(ppf,size,s$0);
case 1:
output_acc$0(ppf,p$3);
return pp_print_as_size(ppf,size$0,make$1(1,c$0));
case 2:output_acc$0(ppf,p$0);return pp_print_string(ppf,s);
default:output_acc$0(ppf,p$2);return pp_print_char(ppf,c)}}
function strput_acc$0(ppf,acc)
{var switch$0=0;
if(typeof acc === "number")
return 0;
else
switch(acc[0])
{case 0:
var f=acc[2],p=acc[1];
strput_acc$0(ppf,p);
return output_formatting_lit(ppf,f);
case 1:
var _kj_=acc[2],_kk_=acc[1];
if(0 === _kj_[0])
{var acc$0=_kj_[1];
strput_acc$0(ppf,_kk_);
return pp_open_stag
(ppf,[0,String_tag,compute_tag(strput_acc$0,acc$0)])}
var acc$1=_kj_[1];
strput_acc$0(ppf,_kk_);
var
match=open_box_of_string(compute_tag(strput_acc$0,acc$1)),
bty=match[2],
indent=match[1];
return pp_open_box_gen(ppf,indent,bty);
case 2:
var _kl_=acc[1],switch$1=0;
if(typeof _kl_ !== "number" && 0 === _kl_[0])
{var _km_=_kl_[2],switch$2=0;
if(typeof _km_ !== "number" && 1 === _km_[0])
{var s$0=acc[2],size=_km_[2],p$1=_kl_[1];
switch$1 = 1;
switch$2 = 1}}
if(! switch$1){var s=acc[2],p$0=_kl_;switch$0 = 2}
break;
case 3:
var _kn_=acc[1],switch$3=0;
if(typeof _kn_ !== "number" && 0 === _kn_[0])
{var _ko_=_kn_[2],switch$4=0;
if(typeof _ko_ !== "number" && 1 === _ko_[0])
{var c$0=acc[2],size$0=_ko_[2],p$3=_kn_[1];
switch$0 = 1;
switch$3 = 1;
switch$4 = 1}}
if(! switch$3){var c=acc[2],p$2=_kn_;switch$0 = 3}
break;
case 4:
var _kp_=acc[1],switch$5=0;
if(typeof _kp_ !== "number" && 0 === _kp_[0])
{var _kq_=_kp_[2],switch$6=0;
if(typeof _kq_ !== "number" && 1 === _kq_[0])
{var s$0=acc[2],size=_kq_[2],p$1=_kp_[1];
switch$5 = 1;
switch$6 = 1}}
if(! switch$5){var s=acc[2],p$0=_kp_;switch$0 = 2}
break;
case 5:
var _kr_=acc[1],switch$7=0;
if(typeof _kr_ === "number" || ! (0 === _kr_[0]))
switch$7 = 1;
else
{var _ks_=_kr_[2],switch$8=0;
if(typeof _ks_ !== "number" && 1 === _ks_[0])
{var c$0=acc[2],size$0=_ks_[2],p$3=_kr_[1];
switch$0 = 1;
switch$8 = 1}
if(! switch$8)switch$7 = 1}
if(switch$7){var c=acc[2],p$2=_kr_;switch$0 = 3}
break;
case 6:
var _kt_=acc[1];
if(typeof _kt_ !== "number" && 0 === _kt_[0])
{var _ku_=_kt_[2];
if(typeof _ku_ !== "number" && 1 === _ku_[0])
{var f$1=acc[2],size$1=_ku_[2],p$4=_kt_[1];
strput_acc$0(ppf,p$4);
return pp_print_as_size(ppf,size$1,caml_call1(f$1,0))}}
var f$0=acc[2];
strput_acc$0(ppf,_kt_);
return pp_print_string(ppf,caml_call1(f$0,0));
case 7:
var p$5=acc[1];strput_acc$0(ppf,p$5);return pp_print_flush(ppf,0);
default:
var msg=acc[2],p$6=acc[1];
strput_acc$0(ppf,p$6);
return invalid_arg(msg)}
switch(switch$0)
{case 0:strput_acc$0(ppf,p$1);return pp_print_as_size(ppf,size,s$0);
case 1:
strput_acc$0(ppf,p$3);
return pp_print_as_size(ppf,size$0,make$1(1,c$0));
case 2:strput_acc$0(ppf,p$0);return pp_print_string(ppf,s);
default:strput_acc$0(ppf,p$2);return pp_print_char(ppf,c)}}
function kfprintf$0(k,ppf,param)
{var fmt=param[1],_ki_=0;
return make_printf
(function(acc){output_acc$0(ppf,acc);return caml_call1(k,ppf)},
_ki_,
fmt)}
function ikfprintf$0(k,ppf,param)
{var fmt=param[1];return make_iprintf(k,ppf,fmt)}
function ifprintf$0(ppf,param)
{var fmt=param[1],_kg_=0;
return make_iprintf(function(_kh_){return 0},_kg_,fmt)}
function fprintf$0(ppf)
{function _kd_(_kf_){return 0}
return function(_ke_){return kfprintf$0(_kd_,ppf,_ke_)}}
function printf$0(fmt){return caml_call1(fprintf$0(std_formatter),fmt)}
function eprintf$0(fmt){return caml_call1(fprintf$0(err_formatter),fmt)}
function kdprintf(k,param)
{var fmt=param[1],_kc_=0;
return make_printf
(function(acc)
{return caml_call1
(k,function(ppf){return output_acc$0(ppf,acc)})},
_kc_,
fmt)}
function dprintf(fmt){return kdprintf(function(i){return i},fmt)}
function kprintf(k,param)
{var fmt=param[1],b=pp_make_buffer(0),ppf=formatter_of_buffer(b);
function k$0(acc)
{strput_acc$0(ppf,acc);
return caml_call1(k,flush_buffer_formatter(b,ppf))}
return make_printf(k$0,0,fmt)}
function sprintf$0(fmt){return kprintf(id$0,fmt)}
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$0,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 pp_set_all_formatter_output_fu(state,f,g,h,i)
{pp_set_formatter_output_functi(state,f,g);
state[19] = h;
state[20] = i;
return 0}
function pp_get_all_formatter_output_fu(state,param)
{return [0,state[17],state[18],state[19],state[20]]}
function set_all_formatter_output_funct(_j__,_j$_,_ka_,_kb_)
{return pp_set_all_formatter_output_fu(std_formatter,_j__,_j$_,_ka_,_kb_)}
function get_all_formatter_output_funct(_j9_)
{return pp_get_all_formatter_output_fu(std_formatter,_j9_)}
function bprintf$0(b,param)
{var fmt=param[1],ppf=formatter_of_buffer(b);
function k(acc){output_acc$0(ppf,acc);return pp_flush_queue(ppf,0)}
return make_printf(k,0,fmt)}
function pp_set_formatter_tag_functions(state,param)
{var pct=param[4],pot=param[3],mct=param[2],mot=param[1];
function stringify(f,e,param)
{if(param[1] === String_tag){var s=param[2];return caml_call1(f,s)}
return e}
state[24] = function(_j8_){return stringify(mot,cst$84,_j8_)};
state[25] = function(_j7_){return stringify(mct,cst$85,_j7_)};
var _j3_=0;
state[26] = function(_j6_){return stringify(pot,_j3_,_j6_)};
var _j4_=0;
state[27] = function(_j5_){return stringify(pct,_j4_,_j5_)};
return 0}
function pp_get_formatter_tag_functions(fmt,param)
{var funs=pp_get_formatter_stag_function(fmt,0);
function mark_open_tag(s){return caml_call1(funs[1],[0,String_tag,s])}
function mark_close_tag(s){return caml_call1(funs[2],[0,String_tag,s])}
function print_open_tag(s){return caml_call1(funs[3],[0,String_tag,s])}
function print_close_tag(s){return caml_call1(funs[4],[0,String_tag,s])}
return [0,mark_open_tag,mark_close_tag,print_open_tag,print_close_tag]}
function set_formatter_tag_functions(_j2_)
{return pp_set_formatter_tag_functions(std_formatter,_j2_)}
function get_formatter_tag_functions(_j1_)
{return pp_get_formatter_tag_functions(std_formatter,_j1_)}
var
Stdlib_Format=
[0,
pp_open_box,
open_box,
pp_close_box,
close_box,
pp_open_hbox,
open_hbox,
pp_open_vbox,
open_vbox,
pp_open_hvbox,
open_hvbox,
pp_open_hovbox,
open_hovbox,
pp_print_string,
print_string$0,
pp_print_bytes,
print_bytes$0,
pp_print_as,
print_as,
pp_print_int,
print_int$0,
pp_print_float,
print_float$0,
pp_print_char,
print_char$0,
pp_print_bool,
print_bool,
pp_print_space,
print_space,
pp_print_cut,
print_cut,
pp_print_break,
print_break,
pp_print_custom_break,
pp_force_newline,
force_newline,
pp_print_if_newline,
print_if_newline,
pp_print_flush,
print_flush,
pp_print_newline,
print_newline$0,
pp_set_margin,
set_margin,
pp_get_margin,
get_margin,
pp_set_max_indent,
set_max_indent,
pp_get_max_indent,
get_max_indent,
check_geometry,
pp_set_geometry,
set_geometry,
pp_safe_set_geometry,
safe_set_geometry,
pp_update_geometry,
update_geometry,
pp_get_geometry,
get_geometry,
pp_set_max_boxes,
set_max_boxes,
pp_get_max_boxes,
get_max_boxes,
pp_over_max_boxes,
over_max_boxes,
pp_open_tbox,
open_tbox,
pp_close_tbox,
close_tbox,
pp_set_tab,
set_tab,
pp_print_tab,
print_tab,
pp_print_tbreak,
print_tbreak,
pp_set_ellipsis_text,
set_ellipsis_text,
pp_get_ellipsis_text,
get_ellipsis_text,
String_tag,
pp_open_stag,
open_stag,
pp_close_stag,
close_stag,
pp_set_tags,
set_tags,
pp_set_print_tags,
set_print_tags,
pp_set_mark_tags,
set_mark_tags,
pp_get_print_tags,
get_print_tags,
pp_get_mark_tags,
get_mark_tags,
pp_set_formatter_out_channel,
set_formatter_out_channel,
pp_set_formatter_output_functi,
set_formatter_output_functions,
pp_get_formatter_output_functi,
get_formatter_output_functions,
pp_set_formatter_out_functions,
set_formatter_out_functions,
pp_get_formatter_out_functions,
get_formatter_out_functions,
pp_set_formatter_stag_function,
set_formatter_stag_functions,
pp_get_formatter_stag_function,
get_formatter_stag_functions,
formatter_of_out_channel,
std_formatter,
err_formatter,
formatter_of_buffer,
stdbuf,
str_formatter,
flush_str_formatter,
make_formatter,
formatter_of_out_functions,
make_symbolic_output_buffer,
clear_symbolic_output_buffer,
get_symbolic_output_buffer,
flush_symbolic_output_buffer,
add_symbolic_output_item,
formatter_of_symbolic_output_b,
pp_print_list,
pp_print_seq,
pp_print_text,
pp_print_option,
pp_print_result,
pp_print_either,
fprintf$0,
printf$0,
eprintf$0,
sprintf$0,
asprintf,
dprintf,
ifprintf$0,
kfprintf$0,
kdprintf,
ikfprintf$0,
kprintf,
kasprintf,
bprintf$0,
kprintf,
set_all_formatter_output_funct,
get_all_formatter_output_funct,
pp_set_all_formatter_output_fu,
pp_get_all_formatter_output_fu,
pp_open_tag,
open_tag,
pp_close_tag,
close_tag,
pp_set_formatter_tag_functions,
set_formatter_tag_functions,
pp_get_formatter_tag_functions,
get_formatter_tag_functions];
caml_register_global(818,Stdlib_Format,"Stdlib__Format");
var null_char=0;
function next_char(ib)
{try
{var c=caml_call1(ib[7],0);
ib[2] = c;
ib[3] = 1;
ib[4] = ib[4] + 1 | 0;
if(10 === c)ib[5] = ib[5] + 1 | 0;
return c}
catch(_j0_)
{_j0_ = caml_wrap_exception(_j0_);
if(_j0_ === End_of_file)
{ib[2] = null_char;ib[3] = 0;ib[1] = 1;return null_char}
throw _j0_}}
function peek_char(ib){return ib[3]?ib[2]:next_char(ib)}
function checked_peek_char(ib)
{var c=peek_char(ib);if(ib[1])throw End_of_file;return c}
function end_of_input(ib){peek_char(ib);return ib[1]}
function beginning_of_input(ib){return 0 === ib[4]?1:0}
function name_of_input(ib)
{var _jZ_=ib[9];
if(typeof _jZ_ === "number")
return 0 === _jZ_?cst_unnamed_function:cst_unnamed_character_string;
else
{if(0 === _jZ_[0])return cst_unnamed_Stdlib_input_chann;
var fname=_jZ_[1];
return fname}}
function char_count(ib){return ib[3]?ib[4] - 1 | 0:ib[4]}
function reset_token(ib){return reset(ib[8])}
function invalidate_current_char(ib){ib[3] = 0;return 0}
function token_string(ib)
{var token_buffer=ib[8],tok=contents(token_buffer);
clear$1(token_buffer);
ib[6] = ib[6] + 1 | 0;
return tok}
function skip_char(width,ib){invalidate_current_char(ib);return width}
function ignore_char(width,ib){return skip_char(width - 1 | 0,ib)}
function store_char(width,ib,c)
{add_char(ib[8],c);return ignore_char(width,ib)}
var default_token_buffer_size=1024;
function create$4(iname,next)
{return [0,
0,
null_char,
0,
0,
0,
0,
next,
create$2(default_token_buffer_size),
iname]}
function from_string$1(s)
{var i=[0,0],len=caml_ml_string_length(s);
function next(param)
{if(len <= i[1])throw End_of_file;
var c=caml_string_get(s,i[1]);
i[1]++;
return c}
return create$4(1,next)}
var _cr_=0;
function from_function$0(_jY_){return create$4(_cr_,_jY_)}
var len=1024;
function scan_close_at_end(ic)
{caml_ml_close_channel(ic);throw End_of_file}
function scan_raise_at_end(ic){throw End_of_file}
function from_ic(scan_close_ic,iname,ic)
{var buf=caml_create_bytes(1024),i=[0,0],lim=[0,0],eof=[0,0];
function next(param)
{if(i[1] < lim[1]){var c=caml_bytes_get(buf,i[1]);i[1]++;return c}
if(eof[1])throw End_of_file;
lim[1] = input(ic,buf,0,len);
return 0 === lim[1]
?(eof[1] = 1,caml_call1(scan_close_ic,ic))
:(i[1] = 1,caml_bytes_get(buf,0))}
return create$4(iname,next)}
var stdib=from_ic(scan_raise_at_end,[1,cst$86,stdin],stdin);
function open_in_file(open_in,fname)
{if(caml_string_notequal(fname,cst$87))
{var ic=caml_call1(open_in,fname);
return from_ic(scan_close_at_end,[1,fname,ic],ic)}
return stdib}
function from_file(_jX_){return open_in_file(open_text$0,_jX_)}
function from_file_bin(_jW_){return open_in_file(open_bin$0,_jW_)}
function from_channel$0(ic){return from_ic(scan_raise_at_end,[0,ic],ic)}
function close_in(ib)
{var _jV_=ib[9];
if(typeof _jV_ === "number")
return 0;
else
{if(0 === _jV_[0]){var ic=_jV_[1];return caml_ml_close_channel(ic)}
var ic$0=_jV_[2];
return caml_ml_close_channel(ic$0)}}
var memo=[0,0];
function memo_from_ic(scan_close_ic,ic)
{try
{var _jT_=assq(ic,memo[1]);return _jT_}
catch(_jU_)
{_jU_ = caml_wrap_exception(_jU_);
if(_jU_ === Not_found)
{var ib=from_ic(scan_close_ic,[0,ic],ic);
memo[1] = [0,[0,ic,ib],memo[1]];
return ib}
throw _jU_}}
function memo_from_channel(_jS_)
{return memo_from_ic(scan_raise_at_end,_jS_)}
var Scan_failure=[248,cst_Stdlib_Scanf_Scan_failure,caml_fresh_oo_id(0)];
function bad_input(s){throw [0,Scan_failure,s]}
function bad_input_escape(c)
{return bad_input(caml_call1(sprintf(_cs_),c))}
function bad_token_length(message)
{return bad_input(caml_call1(sprintf(_ct_),message))}
function bad_float(param)
{return bad_input(cst_no_dot_or_exponent_part_fo)}
function bad_hex_float(param)
{return bad_input(cst_not_a_valid_float_in_hexad)}
function character_mismatch(c,ci)
{return bad_input(caml_call2(sprintf(_cv_),c,ci))}
function check_this_char(ib,c)
{var ci=checked_peek_char(ib);
return ci === c?invalidate_current_char(ib):character_mismatch(c,ci)}
function check_char(ib,c$0)
{if(10 === c$0)
{var ci=checked_peek_char(ib);
return 10 === ci
?invalidate_current_char(ib)
:13 === ci
?(invalidate_current_char(ib),check_this_char(ib,10))
:character_mismatch(10,ci)}
if(32 === c$0)
for(;;)
{var c=peek_char(ib),_jQ_=1 - ib[1];
if(_jQ_)
{var _jR_=c - 9 | 0,switch$0=0;
if(4 < _jR_ >>> 0)
{if(23 === _jR_)switch$0 = 1}
else
if(1 < _jR_ - 2 >>> 0)switch$0 = 1;
if(switch$0){invalidate_current_char(ib);continue}
return 0}
return _jQ_}
return check_this_char(ib,c$0)}
function token_char(ib){return caml_string_get(token_string(ib),0)}
function token_bool(ib)
{var s=token_string(ib);
return caml_string_notequal(s,cst_false$3)
?caml_string_notequal(s,cst_true$3)
?bad_input(caml_call1(sprintf(_cw_),s))
:1
:0}
function integer_conversion_of_char(param)
{var switcher=param - 88 | 0;
if(! (32 < switcher >>> 0))
switch(switcher)
{case 10:return 0;
case 12:return 1;
case 17:return 2;
case 23:return 3;
case 29:return 4;
case 0:
case 32:return 5
}
throw [0,Assert_failure,_cx_]}
function token_int_literal(conv,ib)
{switch(conv)
{case 0:var tok=cat(cst_0b,token_string(ib));break;
case 3:var tok=cat(cst_0o,token_string(ib));break;
case 4:var tok=cat(cst_0u,token_string(ib));break;
case 5:var tok=cat(cst_0x,token_string(ib));break;
default:var tok=token_string(ib)}
var l=caml_ml_string_length(tok);
if(0 !== l && 43 === caml_string_get(tok,0))
return sub$0(tok,1,l - 1 | 0);
return tok}
function token_float(ib){return caml_float_of_string(token_string(ib))}
function scan_decimal_digit_star(width,ib)
{var width$0=width;
for(;;)
{if(0 === width$0)return width$0;
var c=peek_char(ib);
if(ib[1])return width$0;
if(58 <= c)
{if(95 === c)
{var width$1=ignore_char(width$0,ib),width$0=width$1;continue}}
else
if(48 <= c)
{var width$2=store_char(width$0,ib,c),width$0=width$2;continue}
return width$0}}
function scan_unsigned_decimal_int(width,ib)
{if(0 === width)return bad_token_length(cst_decimal_digits);
var c=checked_peek_char(ib);
if(9 < c - 48 >>> 0)return bad_input(caml_call1(sprintf(_cy_),c));
var width$0=store_char(width,ib,c);
return scan_decimal_digit_star(width$0,ib)}
function scan_digit_plus(basis,digitp,width$2,ib)
{if(0 === width$2)return bad_token_length(cst_digits);
var c$0=checked_peek_char(ib);
if(caml_call1(digitp,c$0))
{var width$3=store_char(width$2,ib,c$0),width=width$3;
for(;;)
{if(0 === width)return width;
var c=peek_char(ib);
if(ib[1])return width;
if(caml_call1(digitp,c))
{var width$0=store_char(width,ib,c),width=width$0;continue}
if(95 === c)
{var width$1=ignore_char(width,ib),width=width$1;continue}
return width}}
return bad_input(caml_call2(sprintf(_cz_),c$0,basis))}
function is_binary_digit(param){return 1 < param - 48 >>> 0?0:1}
function scan_binary_int(_jO_,_jP_)
{return scan_digit_plus(cst_binary,is_binary_digit,_jO_,_jP_)}
function is_octal_digit(param){return 7 < param - 48 >>> 0?0:1}
function scan_octal_int(_jM_,_jN_)
{return scan_digit_plus(cst_octal,is_octal_digit,_jM_,_jN_)}
function is_hexa_digit(param)
{var _jL_=param - 48 | 0,switch$0=0;
if(22 < _jL_ >>> 0)
{if(! (5 < _jL_ - 49 >>> 0))switch$0 = 1}
else
if(6 < _jL_ - 10 >>> 0)switch$0 = 1;
return switch$0?1:0}
function scan_hexadecimal_int(_jJ_,_jK_)
{return scan_digit_plus(cst_hexadecimal,is_hexa_digit,_jJ_,_jK_)}
function scan_sign(width,ib)
{var c=checked_peek_char(ib),switcher=c - 43 | 0;
if(! (2 < switcher >>> 0))
switch(switcher)
{case 0:return store_char(width,ib,c);
case 1:break;
default:return store_char(width,ib,c)}
return width}
function scan_optionally_signed_decimal(width,ib)
{var width$0=scan_sign(width,ib);
return scan_unsigned_decimal_int(width$0,ib)}
function scan_int_conversion(conv,width$1,ib)
{switch(conv)
{case 0:return scan_binary_int(width$1,ib);
case 1:return scan_optionally_signed_decimal(width$1,ib);
case 2:
var width$0=scan_sign(width$1,ib),c=checked_peek_char(ib);
if(48 === c)
{var width=store_char(width$0,ib,c);
if(0 === width)return width;
var c$0=peek_char(ib);
if(ib[1])return width;
var switch$0=0;
if(99 <= c$0)
{if(111 === c$0)
return scan_octal_int(store_char(width,ib,c$0),ib);
if(120 === c$0)switch$0 = 1}
else
if(88 === c$0)
switch$0 = 1;
else
if(98 <= c$0)return scan_binary_int(store_char(width,ib,c$0),ib);
return switch$0
?scan_hexadecimal_int(store_char(width,ib,c$0),ib)
:scan_decimal_digit_star(width,ib)}
return scan_unsigned_decimal_int(width$0,ib);
case 3:return scan_octal_int(width$1,ib);
case 4:return scan_unsigned_decimal_int(width$1,ib);
default:return scan_hexadecimal_int(width$1,ib)}}
function scan_fractional_part(width,ib)
{if(0 === width)return width;
var c=peek_char(ib);
return ib[1]
?width
:9 < c - 48 >>> 0
?width
:scan_decimal_digit_star(store_char(width,ib,c),ib)}
function scan_exponent_part(width,ib)
{if(0 === width)return width;
var c=peek_char(ib);
if(ib[1])return width;
if(69 !== c && 101 !== c)return width;
return scan_optionally_signed_decimal(store_char(width,ib,c),ib)}
function scan_float(width$1,precision,ib)
{var
width=scan_sign(width$1,ib),
width$0=scan_decimal_digit_star(width,ib);
if(0 === width$0)return [0,width$0,precision];
var c=peek_char(ib);
if(ib[1])return [0,width$0,precision];
if(46 === c)
{var
width$2=store_char(width$0,ib,c),
precision$0=min$1(width$2,precision),
width$3=
width$2
-
(precision$0 - scan_fractional_part(precision$0,ib) | 0)
|
0;
return [0,scan_exponent_part(width$3,ib),precision$0]}
return [0,scan_exponent_part(width$0,ib),precision]}
function check_case_insensitive_string(width,ib,error,str)
{function lowercase(c)
{return 25 < c - 65 >>> 0?c:char_of_int((c - 65 | 0) + 97 | 0)}
var
len=caml_ml_string_length(str),
width$0=[0,width],
_jG_=len - 1 | 0,
_jF_=0;
if(! (_jG_ < 0))
{var i=_jF_;
for(;;)
{var c=peek_char(ib),_jH_=lowercase(caml_string_get(str,i));
if(lowercase(c) !== _jH_)caml_call1(error,0);
if(0 === width$0[1])caml_call1(error,0);
width$0[1] = store_char(width$0[1],ib,c);
var _jI_=i + 1 | 0;
if(_jG_ !== i){var i=_jI_;continue}
break}}
return width$0[1]}
function scan_hex_float(width,precision,ib)
{var _js_=0 === width?1:0,_jt_=_js_ || end_of_input(ib);
if(_jt_)bad_hex_float(0);
var
width$0=scan_sign(width,ib),
_ju_=0 === width$0?1:0,
_jv_=_ju_ || end_of_input(ib);
if(_jv_)bad_hex_float(0);
var c=peek_char(ib),switch$0=0;
if(78 <= c)
{var switcher=c - 79 | 0;
if(30 < switcher >>> 0)
{if(! (32 <= switcher))
{var
width$1=store_char(width$0,ib,c),
_jw_=0 === width$1?1:0,
_jx_=_jw_ || end_of_input(ib);
if(_jx_)bad_hex_float(0);
return check_case_insensitive_string
(width$1,ib,bad_hex_float,cst_an)}}
else
if(26 === switcher)switch$0 = 1}
else
{if(48 === c)
{var
width$3=store_char(width$0,ib,c),
_jA_=0 === width$3?1:0,
_jB_=_jA_ || end_of_input(ib);
if(_jB_)bad_hex_float(0);
var
width$4=
check_case_insensitive_string(width$3,ib,bad_hex_float,cst_x$2);
if(0 !== width$4 && ! end_of_input(ib))
{var match=peek_char(ib),_jC_=match - 46 | 0,switch$1=0;
if(34 < _jC_ >>> 0)
{if(66 === _jC_)switch$1 = 1}
else
if(32 < _jC_ - 1 >>> 0)switch$1 = 1;
var width$5=switch$1?width$4:scan_hexadecimal_int(width$4,ib);
if(0 !== width$5 && ! end_of_input(ib))
{var c$0=peek_char(ib);
if(46 === c$0)
{var width$6=store_char(width$5,ib,c$0),switch$2=0;
if(0 !== width$6 && ! end_of_input(ib))
{var match$0=peek_char(ib),switch$3=0;
if(80 !== match$0 && 112 !== match$0)
{var
precision$0=min$1(width$6,precision),
width$10=
width$6
-
(precision$0 - scan_hexadecimal_int(precision$0,ib) | 0)
|
0;
switch$3 = 1}
if(! switch$3)var width$10=width$6;
var width$7=width$10;
switch$2 = 1}
if(! switch$2)var width$7=width$6;
var width$8=width$7}
else
var width$8=width$5;
if(0 !== width$8 && ! end_of_input(ib))
{var c$1=peek_char(ib);
if(80 !== c$1 && 112 !== c$1)return width$8;
var
width$9=store_char(width$8,ib,c$1),
_jD_=0 === width$9?1:0,
_jE_=_jD_ || end_of_input(ib);
if(_jE_)bad_hex_float(0);
return scan_optionally_signed_decimal(width$9,ib)}
return width$8}
return width$5}
return width$4}
if(73 === c)switch$0 = 1}
if(switch$0)
{var
width$2=store_char(width$0,ib,c),
_jy_=0 === width$2?1:0,
_jz_=_jy_ || end_of_input(ib);
if(_jz_)bad_hex_float(0);
return check_case_insensitive_string
(width$2,ib,bad_hex_float,cst_nfinity)}
return bad_hex_float(0)}
function scan_caml_float_rest(width,precision,ib)
{var _jo_=0 === width?1:0,_jp_=_jo_ || end_of_input(ib);
if(_jp_)bad_float(0);
var
width$0=scan_decimal_digit_star(width,ib),
_jq_=0 === width$0?1:0,
_jr_=_jq_ || end_of_input(ib);
if(_jr_)bad_float(0);
var c=peek_char(ib),switcher=c - 69 | 0;
if(32 < switcher >>> 0)
{if(-23 === switcher)
{var
width$1=store_char(width$0,ib,c),
precision$0=min$1(width$1,precision),
width_precision=scan_fractional_part(precision$0,ib),
frac_width=precision$0 - width_precision | 0,
width$2=width$1 - frac_width | 0;
return scan_exponent_part(width$2,ib)}}
else
if(30 < switcher - 1 >>> 0)return scan_exponent_part(width$0,ib);
return bad_float(0)}
function scan_caml_float(width,precision,ib)
{var _ja_=0 === width?1:0,_jb_=_ja_ || end_of_input(ib);
if(_jb_)bad_float(0);
var
width$0=scan_sign(width,ib),
_jc_=0 === width$0?1:0,
_jd_=_jc_ || end_of_input(ib);
if(_jd_)bad_float(0);
var c=peek_char(ib);
if(49 <= c)
{if(! (58 <= c))
{var
width$1=store_char(width$0,ib,c),
_je_=0 === width$1?1:0,
_jf_=_je_ || end_of_input(ib);
if(_jf_)bad_float(0);
return scan_caml_float_rest(width$1,precision,ib)}}
else
if(48 <= c)
{var
width$2=store_char(width$0,ib,c),
_jg_=0 === width$2?1:0,
_jh_=_jg_ || end_of_input(ib);
if(_jh_)bad_float(0);
var c$0=peek_char(ib);
if(88 !== c$0 && 120 !== c$0)
return scan_caml_float_rest(width$2,precision,ib);
var
width$3=store_char(width$2,ib,c$0),
_ji_=0 === width$3?1:0,
_jj_=_ji_ || end_of_input(ib);
if(_jj_)bad_float(0);
var
width$4=scan_hexadecimal_int(width$3,ib),
_jk_=0 === width$4?1:0,
_jl_=_jk_ || end_of_input(ib);
if(_jl_)bad_float(0);
var c$1=peek_char(ib),switcher=c$1 - 80 | 0,switch$0=0;
if(32 < switcher >>> 0)
if(-34 === switcher)
{var width$5=store_char(width$4,ib,c$1),switch$1=0;
if(0 !== width$5 && ! end_of_input(ib))
{var match=peek_char(ib),switch$2=0;
if(80 !== match && 112 !== match)
{var
precision$0=min$1(width$5,precision),
width$10=
width$5
-
(precision$0 - scan_hexadecimal_int(precision$0,ib) | 0)
|
0;
switch$2 = 1}
if(! switch$2)var width$10=width$5;
var width$6=width$10;
switch$1 = 1}
if(! switch$1)var width$6=width$5;
var width$7=width$6}
else
switch$0 = 1;
else
if(30 < switcher - 1 >>> 0)var width$7=width$4;else switch$0 = 1;
var width$8=switch$0?bad_float(0):width$7;
if(0 !== width$8 && ! end_of_input(ib))
{var c$2=peek_char(ib);
if(80 !== c$2 && 112 !== c$2)return width$8;
var
width$9=store_char(width$8,ib,c$2),
_jm_=0 === width$9?1:0,
_jn_=_jm_ || end_of_input(ib);
if(_jn_)bad_hex_float(0);
return scan_optionally_signed_decimal(width$9,ib)}
return width$8}
return bad_float(0)}
function scan_string(stp,width,ib)
{var width$0=width;
for(;;)
{if(0 === width$0)return width$0;
var c=peek_char(ib);
if(ib[1])return width$0;
if(stp)
{var c$0=stp[1];
if(c === c$0)return skip_char(width$0,ib);
var width$1=store_char(width$0,ib,c),width$0=width$1;
continue}
var _i$_=c - 9 | 0,switch$0=0;
if(4 < _i$_ >>> 0)
{if(23 === _i$_)switch$0 = 1}
else
if(1 < _i$_ - 2 >>> 0)switch$0 = 1;
if(switch$0)return width$0;
var width$2=store_char(width$0,ib,c),width$0=width$2;
continue}}
function scan_char(width,ib)
{return store_char(width,ib,checked_peek_char(ib))}
function hexadecimal_value_of_char(d)
{return 97 <= d?d - 87 | 0:65 <= d?d - 55 | 0:d - 48 | 0}
function check_next_char(message,width,ib)
{if(0 === width)return bad_token_length(message);
var c=peek_char(ib);
return ib[1]?bad_input(caml_call1(sprintf(_cu_),message)):c}
function check_next_char_for_char(_i9_,_i__)
{return check_next_char(cst_a_Char,_i9_,_i__)}
function check_next_char_for_string(_i7_,_i8_)
{return check_next_char(cst_a_String,_i7_,_i8_)}
function scan_backslash_char(width,ib)
{var c0=check_next_char_for_char(width,ib),switch$0=0;
if(40 <= c0)
{if(58 <= c0)
{var switcher=c0 - 92 | 0;
if(! (28 < switcher >>> 0))
switch(switcher)
{case 28:
var
get_digit=
function(param)
{var c=next_char(ib),_i6_=c - 48 | 0,switch$0=0;
if(22 < _i6_ >>> 0)
{if(! (5 < _i6_ - 49 >>> 0))switch$0 = 1}
else
if(6 < _i6_ - 10 >>> 0)switch$0 = 1;
return switch$0?c:bad_input_escape(c)},
c1=get_digit(0),
c2=get_digit(0),
_i2_=hexadecimal_value_of_char(c2),
c$0=(16 * hexadecimal_value_of_char(c1) | 0) + _i2_ | 0,
switch$1=0;
if(0 <= c$0 && ! (255 < c$0))
{var _i4_=char_of_int(c$0);switch$1 = 1}
if(! switch$1)
var _i4_=bad_input(caml_call2(sprintf(_cB_),c1,c2));
return store_char(width - 2 | 0,ib,_i4_);
case 0:
case 6:
case 18:
case 22:
case 24:switch$0 = 1;break
}}
else
if(48 <= c0)
{var
get_digit$0=
function(param)
{var c=next_char(ib);
return 9 < c - 48 >>> 0?bad_input_escape(c):c},
c1$0=get_digit$0(0),
c2$0=get_digit$0(0),
c=
((100 * (c0 - 48 | 0) | 0) + (10 * (c1$0 - 48 | 0) | 0) | 0)
+
(c2$0 - 48 | 0)
|
0,
switch$2=0;
if(0 <= c && ! (255 < c)){var _i5_=char_of_int(c);switch$2 = 1}
if(! switch$2)
var _i5_=bad_input(caml_call3(sprintf(_cA_),c0,c1$0,c2$0));
return store_char(width - 2 | 0,ib,_i5_)}}
else
if(34 === c0 || 39 <= c0)switch$0 = 1;
if(switch$0)
{var switch$3=0;
if(110 <= c0)
if(117 <= c0)
switch$3 = 1;
else
switch(c0 - 110 | 0)
{case 0:var _i3_=10;break;
case 4:var _i3_=13;break;
case 6:var _i3_=9;break;
default:switch$3 = 1}
else
if(98 === c0)var _i3_=8;else switch$3 = 1;
if(switch$3)var _i3_=c0;
return store_char(width,ib,_i3_)}
return bad_input_escape(c0)}
function scan_caml_char(width,ib)
{function find_stop(width)
{var c=check_next_char_for_char(width,ib);
return 39 === c?ignore_char(width,ib):character_mismatch(39,c)}
var c=checked_peek_char(ib);
if(39 === c)
{var
width$0=ignore_char(width,ib),
c$0=check_next_char_for_char(width$0,ib);
return 92 === c$0
?find_stop(scan_backslash_char(ignore_char(width$0,ib),ib))
:find_stop(store_char(width$0,ib,c$0))}
return character_mismatch(39,c)}
function scan_caml_string(width,ib)
{function find_stop$0(counter,width)
{var width$0=width;
for(;;)
{var c=check_next_char_for_string(width$0,ib);
if(34 === c)return ignore_char(width$0,ib);
if(92 === c)
{var
width$1=ignore_char(width$0,ib),
match=check_next_char_for_string(width$1,ib);
if(10 === match)
{var _i0_=ignore_char(width$1,ib);
if(counter < 50)
{var counter$0=counter + 1 | 0;
return skip_spaces(counter$0,_i0_)}
return caml_trampoline_return(skip_spaces,[0,_i0_])}
if(13 === match)
{var
width$3=ignore_char(width$1,ib),
match$0=check_next_char_for_string(width$3,ib);
if(10 === match$0)
{var _i1_=ignore_char(width$3,ib);
if(counter < 50)
{var counter$1=counter + 1 | 0;
return skip_spaces(counter$1,_i1_)}
return caml_trampoline_return(skip_spaces,[0,_i1_])}
var width$5=store_char(width$3,ib,13),width$0=width$5;
continue}
var width$4=scan_backslash_char(width$1,ib),width$0=width$4;
continue}
var width$2=store_char(width$0,ib,c),width$0=width$2;
continue}}
function skip_spaces(counter,width)
{var width$0=width;
for(;;)
{var match=check_next_char_for_string(width$0,ib);
if(32 === match)
{var width$1=ignore_char(width$0,ib),width$0=width$1;continue}
if(counter < 50)
{var counter$0=counter + 1 | 0;
return find_stop$0(counter$0,width$0)}
return caml_trampoline_return(find_stop$0,[0,width$0])}}
function find_stop(width){return caml_trampoline(find_stop$0(0,width))}
var c=checked_peek_char(ib);
return 34 === c
?find_stop(ignore_char(width,ib))
:character_mismatch(34,c)}
function scan_chars_in_char_set(char_set,scan_indic,width,ib)
{function scan_chars(i,stp)
{var i$0=i;
for(;;)
{var c=peek_char(ib),_iW_=0 < i$0?1:0;
if(_iW_)
{var _iX_=1 - ib[1];
if(_iX_)
var _iY_=is_in_char_set(char_set,c),_iZ_=_iY_?c !== stp?1:0:_iY_;
else
var _iZ_=_iX_}
else
var _iZ_=_iW_;
if(_iZ_)
{store_char(max_int,ib,c);var i$1=i$0 - 1 | 0,i$0=i$1;continue}
return _iZ_}}
if(scan_indic)
{var c=scan_indic[1];
scan_chars(width,c);
var _iV_=1 - ib[1];
if(_iV_)
{var ci=peek_char(ib);
return c === ci?invalidate_current_char(ib):character_mismatch(c,ci)}
return _iV_}
return scan_chars(width,-1)}
function scanf_bad_input(ib,x)
{if(x[1] === Scan_failure)
var s=x[2];
else
{if(x[1] !== Failure)throw x;var s=x[2]}
var i=char_count(ib);
return bad_input(caml_call2(sprintf(_cD_),i,s))}
function get_counter(ib,counter)
{switch(counter)
{case 0:return ib[5];case 1:return char_count(ib);default:return ib[6]}}
function width_of_pad_opt(pad_opt)
{if(pad_opt){var width=pad_opt[1];return width}return max_int}
function stopper_of_formatting_lit(fmting)
{if(6 === fmting)return _cE_;
var
str=string_of_formatting_lit(fmting),
stp=caml_string_get(str,1),
sub_str=sub$0(str,2,caml_ml_string_length(str) - 2 | 0);
return [0,stp,sub_str]}
function take_format_readers$0(counter,k,fmt)
{var fmt$0=fmt;
for(;;)
if(typeof fmt$0 === "number")
return caml_call1(k,0);
else
switch(fmt$0[0])
{case 0:var fmt$1=fmt$0[1],fmt$0=fmt$1;continue;
case 1:var fmt$2=fmt$0[1],fmt$0=fmt$2;continue;
case 2:var fmt$3=fmt$0[2],fmt$0=fmt$3;continue;
case 3:var fmt$4=fmt$0[2],fmt$0=fmt$4;continue;
case 4:var fmt$5=fmt$0[4],fmt$0=fmt$5;continue;
case 5:var fmt$6=fmt$0[4],fmt$0=fmt$6;continue;
case 6:var fmt$7=fmt$0[4],fmt$0=fmt$7;continue;
case 7:var fmt$8=fmt$0[4],fmt$0=fmt$8;continue;
case 8:var fmt$9=fmt$0[4],fmt$0=fmt$9;continue;
case 9:var fmt$10=fmt$0[2],fmt$0=fmt$10;continue;
case 10:var fmt$11=fmt$0[1],fmt$0=fmt$11;continue;
case 11:var fmt$12=fmt$0[2],fmt$0=fmt$12;continue;
case 12:var fmt$13=fmt$0[2],fmt$0=fmt$13;continue;
case 13:var fmt$14=fmt$0[3],fmt$0=fmt$14;continue;
case 14:
var rest=fmt$0[3],fmtty=fmt$0[2],_iT_=erase_rel(symm(fmtty));
if(counter < 50)
{var counter$0=counter + 1 | 0;
return take_fmtty_format_readers$0(counter$0,k,_iT_,rest)}
return caml_trampoline_return
(take_fmtty_format_readers$0,[0,k,_iT_,rest]);
case 15:var fmt$15=fmt$0[1],fmt$0=fmt$15;continue;
case 16:var fmt$16=fmt$0[1],fmt$0=fmt$16;continue;
case 17:var fmt$17=fmt$0[2],fmt$0=fmt$17;continue;
case 18:
var _iU_=fmt$0[1];
if(0 === _iU_[0])
{var
rest$0=fmt$0[2],
match=_iU_[1],
fmt$18=match[1],
fmt$19=concat_fmt(fmt$18,rest$0),
fmt$0=fmt$19;
continue}
var
rest$1=fmt$0[2],
match$0=_iU_[1],
fmt$20=match$0[1],
fmt$21=concat_fmt(fmt$20,rest$1),
fmt$0=fmt$21;
continue;
case 19:
var fmt_rest=fmt$0[1];
return function(reader)
{function new_k(readers_rest)
{return caml_call1(k,[0,reader,readers_rest])}
return take_format_readers(new_k,fmt_rest)};
case 20:var fmt$22=fmt$0[3],fmt$0=fmt$22;continue;
case 21:var fmt$23=fmt$0[2],fmt$0=fmt$23;continue;
case 22:var fmt$24=fmt$0[1],fmt$0=fmt$24;continue;
case 23:
var rest$2=fmt$0[2],ign=fmt$0[1];
if(typeof ign === "number")
switch(ign)
{case 0:var fmt$0=rest$2;continue;
case 1:var fmt$0=rest$2;continue;
case 2:
return function(reader)
{function new_k(readers_rest)
{return caml_call1(k,[0,reader,readers_rest])}
return take_format_readers(new_k,rest$2)};
default:var fmt$0=rest$2;continue}
else
switch(ign[0])
{case 0:var fmt$0=rest$2;continue;
case 1:var fmt$0=rest$2;continue;
case 2:var fmt$0=rest$2;continue;
case 3:var fmt$0=rest$2;continue;
case 4:var fmt$0=rest$2;continue;
case 5:var fmt$0=rest$2;continue;
case 6:var fmt$0=rest$2;continue;
case 7:var fmt$0=rest$2;continue;
case 8:var fmt$0=rest$2;continue;
case 9:
var fmtty$0=ign[2];
if(counter < 50)
{var counter$1=counter + 1 | 0;
return take_fmtty_format_readers$0
(counter$1,k,fmtty$0,rest$2)}
return caml_trampoline_return
(take_fmtty_format_readers$0,[0,k,fmtty$0,rest$2]);
case 10:var fmt$0=rest$2;continue;
default:var fmt$0=rest$2;continue}
default:var fmt$25=fmt$0[3],fmt$0=fmt$25;continue}}
function take_fmtty_format_readers$0(counter,k,fmtty,fmt)
{var fmtty$0=fmtty;
for(;;)
if(typeof fmtty$0 === "number")
{if(counter < 50)
{var counter$0=counter + 1 | 0;
return take_format_readers$0(counter$0,k,fmt)}
return caml_trampoline_return(take_format_readers$0,[0,k,fmt])}
else
switch(fmtty$0[0])
{case 0:var fmtty$1=fmtty$0[1],fmtty$0=fmtty$1;continue;
case 1:var fmtty$2=fmtty$0[1],fmtty$0=fmtty$2;continue;
case 2:var fmtty$3=fmtty$0[1],fmtty$0=fmtty$3;continue;
case 3:var fmtty$4=fmtty$0[1],fmtty$0=fmtty$4;continue;
case 4:var fmtty$5=fmtty$0[1],fmtty$0=fmtty$5;continue;
case 5:var fmtty$6=fmtty$0[1],fmtty$0=fmtty$6;continue;
case 6:var fmtty$7=fmtty$0[1],fmtty$0=fmtty$7;continue;
case 7:var fmtty$8=fmtty$0[1],fmtty$0=fmtty$8;continue;
case 8:var fmtty$9=fmtty$0[2],fmtty$0=fmtty$9;continue;
case 9:
var
rest=fmtty$0[3],
ty2=fmtty$0[2],
ty1=fmtty$0[1],
ty=trans(symm(ty1),ty2),
fmtty$10=concat_fmtty(ty,rest),
fmtty$0=fmtty$10;
continue;
case 10:var fmtty$11=fmtty$0[1],fmtty$0=fmtty$11;continue;
case 11:var fmtty$12=fmtty$0[1],fmtty$0=fmtty$12;continue;
case 12:var fmtty$13=fmtty$0[1],fmtty$0=fmtty$13;continue;
case 13:
var fmt_rest=fmtty$0[1];
return function(reader)
{function new_k(readers_rest)
{return caml_call1(k,[0,reader,readers_rest])}
return take_fmtty_format_readers(new_k,fmt_rest,fmt)};
default:
var fmt_rest$0=fmtty$0[1];
return function(reader)
{function new_k(readers_rest)
{return caml_call1(k,[0,reader,readers_rest])}
return take_fmtty_format_readers(new_k,fmt_rest$0,fmt)}}}
function take_format_readers(k,fmt)
{return caml_trampoline(take_format_readers$0(0,k,fmt))}
function take_fmtty_format_readers(k,fmtty,fmt)
{return caml_trampoline(take_fmtty_format_readers$0(0,k,fmtty,fmt))}
function make_scanf(ib,fmt,readers)
{var fmt$0=fmt;
for(;;)
if(typeof fmt$0 === "number")
return 0;
else
switch(fmt$0[0])
{case 0:
var rest=fmt$0[1];
scan_char(0,ib);
var c=token_char(ib);
return [0,c,make_scanf(ib,rest,readers)];
case 1:
var rest$0=fmt$0[1];
scan_caml_char(0,ib);
var c$0=token_char(ib);
return [0,c$0,make_scanf(ib,rest$0,readers)];
case 2:
var _iG_=fmt$0[1],_iH_=fmt$0[2];
if(typeof _iH_ !== "number")
switch(_iH_[0])
{case 17:
var
rest$2=_iH_[2],
fmting_lit=_iH_[1],
match=stopper_of_formatting_lit(fmting_lit),
str=match[2],
stp=match[1],
scan$0=
function(width,param,ib)
{return scan_string([0,stp],width,ib)},
str_rest=[11,str,rest$2];
return pad_prec_scanf
(ib,str_rest,readers,_iG_,0,scan$0,token_string);
case 18:
var _iI_=_iH_[1];
if(0 === _iI_[0])
{var
rest$3=_iH_[2],
match$0=_iI_[1],
fmt$1=match$0[1],
scan$1=
function(width,param,ib){return scan_string(_cF_,width,ib)};
return pad_prec_scanf
(ib,
concat_fmt(fmt$1,rest$3),
readers,
_iG_,
0,
scan$1,
token_string)}
var
rest$4=_iH_[2],
match$1=_iI_[1],
fmt$2=match$1[1],
scan$2=
function(width,param,ib){return scan_string(_cG_,width,ib)};
return pad_prec_scanf
(ib,
concat_fmt(fmt$2,rest$4),
readers,
_iG_,
0,
scan$2,
token_string)
}
var
rest$1=fmt$0[2],
scan=function(width,param,ib){return scan_string(0,width,ib)};
return pad_prec_scanf(ib,rest$1,readers,_iG_,0,scan,token_string);
case 3:
var
rest$5=fmt$0[2],
pad=fmt$0[1],
scan$3=function(width,param,ib){return scan_caml_string(width,ib)};
return pad_prec_scanf(ib,rest$5,readers,pad,0,scan$3,token_string);
case 4:
var
rest$6=fmt$0[4],
prec=fmt$0[3],
pad$0=fmt$0[2],
iconv=fmt$0[1],
conv=integer_conversion_of_char(char_of_iconv(iconv)),
scan$4=
function(width,param,ib)
{return scan_int_conversion(conv,width,ib)};
return pad_prec_scanf
(ib,
rest$6,
readers,
pad$0,
prec,
scan$4,
function(ib)
{return caml_int_of_string(token_int_literal(conv,ib))});
case 5:
var
rest$7=fmt$0[4],
prec$0=fmt$0[3],
pad$1=fmt$0[2],
iconv$0=fmt$0[1],
conv$0=integer_conversion_of_char(char_of_iconv(iconv$0)),
scan$5=
function(width,param,ib)
{return scan_int_conversion(conv$0,width,ib)};
return pad_prec_scanf
(ib,
rest$7,
readers,
pad$1,
prec$0,
scan$5,
function(ib)
{return caml_int_of_string(token_int_literal(conv$0,ib))});
case 6:
var
rest$8=fmt$0[4],
prec$1=fmt$0[3],
pad$2=fmt$0[2],
iconv$1=fmt$0[1],
conv$1=integer_conversion_of_char(char_of_iconv(iconv$1)),
scan$6=
function(width,param,ib)
{return scan_int_conversion(conv$1,width,ib)};
return pad_prec_scanf
(ib,
rest$8,
readers,
pad$2,
prec$1,
scan$6,
function(ib)
{return caml_int_of_string(token_int_literal(conv$1,ib))});
case 7:
var
rest$9=fmt$0[4],
prec$2=fmt$0[3],
pad$3=fmt$0[2],
iconv$2=fmt$0[1],
conv$2=integer_conversion_of_char(char_of_iconv(iconv$2)),
scan$7=
function(width,param,ib)
{return scan_int_conversion(conv$2,width,ib)};
return pad_prec_scanf
(ib,
rest$9,
readers,
pad$3,
prec$2,
scan$7,
function(ib)
{return caml_int64_of_string(token_int_literal(conv$2,ib))});
case 8:
switch(fmt$0[1][2])
{case 5:
case 8:
var rest$11=fmt$0[4],prec$4=fmt$0[3],pad$5=fmt$0[2];
return pad_prec_scanf
(ib,
rest$11,
readers,
pad$5,
prec$4,
scan_caml_float,
token_float);
case 6:
case 7:
var rest$12=fmt$0[4],prec$5=fmt$0[3],pad$6=fmt$0[2];
return pad_prec_scanf
(ib,rest$12,readers,pad$6,prec$5,scan_hex_float,token_float);
default:
var rest$10=fmt$0[4],prec$3=fmt$0[3],pad$4=fmt$0[2];
return pad_prec_scanf
(ib,rest$10,readers,pad$4,prec$3,scan_float,token_float)}
case 9:
var
rest$13=fmt$0[2],
pad$7=fmt$0[1],
scan$8=
function(param,_iS_,ib)
{var
c=checked_peek_char(ib),
m=
102 === c
?5
:116 === c?4:bad_input(caml_call1(sprintf(_cC_),c));
return scan_string(0,m,ib)};
return pad_prec_scanf(ib,rest$13,readers,pad$7,0,scan$8,token_bool);
case 10:
var rest$14=fmt$0[1];
if(end_of_input(ib)){var fmt$0=rest$14;continue}
return bad_input(cst_end_of_input_not_found);
case 11:
var rest$15=fmt$0[2],str$0=fmt$0[1];
iter$4(function(_iR_){return check_char(ib,_iR_)},str$0);
var fmt$0=rest$15;
continue;
case 12:
var rest$16=fmt$0[2],chr=fmt$0[1];
check_char(ib,chr);
var fmt$0=rest$16;
continue;
case 13:
var rest$17=fmt$0[3],fmtty=fmt$0[2],pad_opt=fmt$0[1];
scan_caml_string(width_of_pad_opt(pad_opt),ib);
var s=token_string(ib);
try
{var _iJ_=format_of_string_fmtty(s,fmtty),fmt$3=_iJ_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] !== Failure)throw exn;
var msg=exn[2],fmt$3=bad_input(msg)}
return [0,fmt$3,make_scanf(ib,rest$17,readers)];
case 14:
var rest$18=fmt$0[3],fmtty$0=fmt$0[2],pad_opt$0=fmt$0[1];
scan_caml_string(width_of_pad_opt(pad_opt$0),ib);
var s$0=token_string(ib);
try
{var
match$2=fmt_ebb_of_string(0,s$0),
fmt$6=match$2[1],
match$3=fmt_ebb_of_string(0,s$0),
fmt$7=match$3[1],
fmt$8=type_format(fmt$7,erase_rel(symm(fmtty$0))),
_iL_=type_format(fmt$6,erase_rel(fmtty$0)),
fmt$5=fmt$8,
fmt$4=_iL_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] !== Failure)throw exn;
var
msg$0=exn[2],
_iK_=bad_input(msg$0),
fmt$5=_iK_[2],
fmt$4=_iK_[1]}
return [0,
[0,fmt$4,s$0],
make_scanf(ib,concat_fmt(fmt$5,rest$18),readers)];
case 15:return invalid_arg(cst_scanf_bad_conversion_a);
case 16:return invalid_arg(cst_scanf_bad_conversion_t);
case 17:
var
rest$19=fmt$0[2],
formatting_lit=fmt$0[1],
_iM_=string_of_formatting_lit(formatting_lit);
iter$4(function(_iQ_){return check_char(ib,_iQ_)},_iM_);
var fmt$0=rest$19;
continue;
case 18:
var _iN_=fmt$0[1];
if(0 === _iN_[0])
{var rest$20=fmt$0[2],match$4=_iN_[1],fmt$9=match$4[1];
check_char(ib,64);
check_char(ib,123);
var fmt$10=concat_fmt(fmt$9,rest$20),fmt$0=fmt$10;
continue}
var rest$21=fmt$0[2],match$5=_iN_[1],fmt$11=match$5[1];
check_char(ib,64);
check_char(ib,91);
var fmt$12=concat_fmt(fmt$11,rest$21),fmt$0=fmt$12;
continue;
case 19:
var fmt_rest=fmt$0[1];
if(readers)
{var
readers_rest=readers[2],
reader=readers[1],
x=caml_call1(reader,ib);
return [0,x,make_scanf(ib,fmt_rest,readers_rest)]}
return invalid_arg(cst_scanf_missing_reader);
case 20:
var _iO_=fmt$0[1],_iP_=fmt$0[3];
if(typeof _iP_ !== "number" && 17 === _iP_[0])
{var
rest$23=_iP_[2],
fmting_lit$0=_iP_[1],
char_set$0=fmt$0[2],
match$6=stopper_of_formatting_lit(fmting_lit$0),
str$1=match$6[2],
stp$0=match$6[1],
width$0=width_of_pad_opt(_iO_);
scan_chars_in_char_set(char_set$0,[0,stp$0],width$0,ib);
var s$2=token_string(ib),str_rest$0=[11,str$1,rest$23];
return [0,s$2,make_scanf(ib,str_rest$0,readers)]}
var
rest$22=fmt$0[3],
char_set=fmt$0[2],
width=width_of_pad_opt(_iO_);
scan_chars_in_char_set(char_set,0,width,ib);
var s$1=token_string(ib);
return [0,s$1,make_scanf(ib,rest$22,readers)];
case 21:
var
rest$24=fmt$0[2],
counter=fmt$0[1],
count=get_counter(ib,counter);
return [0,count,make_scanf(ib,rest$24,readers)];
case 22:
var rest$25=fmt$0[1],c$1=checked_peek_char(ib);
return [0,c$1,make_scanf(ib,rest$25,readers)];
case 23:
var
rest$26=fmt$0[2],
ign=fmt$0[1],
match$7=param_format_of_ignored_format(ign,rest$26),
fmt$13=match$7[1],
match$8=make_scanf(ib,fmt$13,readers);
if(match$8){var arg_rest=match$8[2];return arg_rest}
throw [0,Assert_failure,_cH_];
default:return invalid_arg(cst_scanf_bad_conversion_custo)}}
function pad_prec_scanf(ib,fmt,readers,pad,prec,scan,token)
{if(typeof pad === "number")
{if(typeof prec === "number")
{if(prec)return invalid_arg(cst_scanf_bad_conversion);
caml_call3(scan,max_int,max_int,ib);
var x=caml_call1(token,ib);
return [0,x,make_scanf(ib,fmt,readers)]}
var p=prec[1];
caml_call3(scan,max_int,p,ib);
var x$0=caml_call1(token,ib);
return [0,x$0,make_scanf(ib,fmt,readers)]}
else
{if(0 === pad[0])
{if(pad[1])
{var _iF_=pad[2];
if(typeof prec === "number")
{if(prec)return invalid_arg(cst_scanf_bad_conversion$0);
caml_call3(scan,_iF_,max_int,ib);
var x$1=caml_call1(token,ib);
return [0,x$1,make_scanf(ib,fmt,readers)]}
var p$0=prec[1];
caml_call3(scan,_iF_,p$0,ib);
var x$2=caml_call1(token,ib);
return [0,x$2,make_scanf(ib,fmt,readers)]}
return invalid_arg(cst_scanf_bad_conversion$1)}
return invalid_arg(cst_scanf_bad_conversion$2)}}
function kscanf(ib,ef,param)
{var str=param[2],fmt=param[1];
function apply(f,args)
{var f$0=f,args$0=args;
for(;;)
{if(args$0)
{var
r=args$0[2],
x=args$0[1],
f$1=caml_call1(f$0,x),
f$0=f$1,
args$0=r;
continue}
return f$0}}
function k(readers,f)
{reset_token(ib);
try
{var _iE_=[0,make_scanf(ib,fmt,readers)],_iD_=_iE_}
catch(exc)
{exc = caml_wrap_exception(exc);
var switch$0=0;
if
(exc[1]
!==
Scan_failure
&&
exc[1]
!==
Failure
&&
exc
!==
End_of_file)
{if(exc[1] !== Invalid_argument)throw exc;
var
msg=exc[2],
_iC_=
invalid_arg
(cat(msg,cat(cst_in_format,cat(escaped$1(str),cst$88))));
switch$0 = 1}
if(! switch$0)var _iC_=[1,exc];
var _iD_=_iC_}
if(0 === _iD_[0]){var args=_iD_[1];return apply(f,args)}
var exc=_iD_[1];
return caml_call2(ef,ib,exc)}
return take_format_readers(k,fmt)}
function bscanf(ib,fmt){return kscanf(ib,scanf_bad_input,fmt)}
function ksscanf(s,ef,fmt){return kscanf(from_string$1(s),ef,fmt)}
function sscanf(s,fmt)
{return kscanf(from_string$1(s),scanf_bad_input,fmt)}
function scanf(fmt){return kscanf(stdib,scanf_bad_input,fmt)}
function bscanf_format(ib,format,f)
{scan_caml_string(max_int,ib);
var str=token_string(ib);
try
{var _iB_=format_of_string_format(str,format),fmt=_iB_}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] !== Failure)throw exn;
var msg=exn[2],fmt=bad_input(msg)}
return caml_call1(f,fmt)}
function sscanf_format(s,format,f)
{return bscanf_format(from_string$1(s),format,f)}
function format_from_string(s,fmt)
{function _iA_(x){return x}
return sscanf_format(cat(cst$90,cat(escaped$1(s),cst$89)),fmt,_iA_)}
function unescaped(s)
{function _iz_(x){return x}
return caml_call1(sscanf(cat(cst$92,cat(s,cst$91)),_cI_),_iz_)}
function kfscanf(ic,ef,fmt){return kscanf(memo_from_channel(ic),ef,fmt)}
function fscanf(ic,fmt)
{return kscanf(memo_from_channel(ic),scanf_bad_input,fmt)}
var
Stdlib_Scanf=
[0,
[0,
stdib,
from_file,
from_file_bin,
close_in,
from_file,
from_file_bin,
from_string$1,
from_function$0,
from_channel$0,
end_of_input,
beginning_of_input,
name_of_input,
stdib],
Scan_failure,
bscanf,
sscanf,
scanf,
kscanf,
ksscanf,
bscanf_format,
sscanf_format,
format_from_string,
unescaped,
fscanf,
kfscanf];
caml_register_global(819,Stdlib_Scanf,"Stdlib__Scanf");
function register(name,v){return caml_register_named_value(name,v)}
function register_exception(name,exn)
{var slot=caml_obj_tag(exn) === 248?exn:exn[1];
return caml_register_named_value(name,slot)}
var Stdlib_Callback=[0,register,register_exception];
caml_register_global(820,Stdlib_Callback,"Stdlib__Callback");
function copy$7(o){var o$0=o.slice();return caml_set_oo_id(o$0)}
var params$0=[0,1,1,1,3,16],initial_object_size=2,dummy_item=0;
function public_method_label(s)
{var accu=[0,0],_iw_=caml_ml_string_length(s) - 1 | 0,_iv_=0;
if(! (_iw_ < 0))
{var i=_iv_;
for(;;)
{var _ix_=caml_string_get(s,i);
accu[1] = (223 * accu[1] | 0) + _ix_ | 0;
var _iy_=i + 1 | 0;
if(_iw_ !== i){var i=_iy_;continue}
break}}
accu[1] = accu[1] & 2147483647;
var tag=1073741823 < accu[1]?accu[1] + 2147483648 | 0:accu[1];
return tag}
function compare$14(x,y){return caml_string_compare(x,y)}
var Vars=caml_call1(Stdlib_Map[1],[0,compare$14]);
function compare$15(x,y){return caml_string_compare(x,y)}
var
Meths=caml_call1(Stdlib_Map[1],[0,compare$15]),
compare$16=caml_int_compare,
Labs=caml_call1(Stdlib_Map[1],[0,compare$16]),
dummy_table=[0,0,[0,dummy_item],Meths[1],Labs[1],0,0,Vars[1],0],
table_count=[0,0],
dummy_met=caml_obj_block(0,0);
function fit_size(n){return 2 < n?fit_size((n + 1 | 0) / 2 | 0) * 2 | 0:n}
function new_table(pub_labels)
{table_count[1]++;
var
len=pub_labels.length - 1,
methods=caml_make_vect((len * 2 | 0) + 2 | 0,dummy_met);
caml_check_bound(methods,0)[1] = len;
var _ip_=((fit_size(len) * 32 | 0) / 8 | 0) - 1 | 0;
caml_check_bound(methods,1)[2] = _ip_;
var _ir_=len - 1 | 0,_iq_=0;
if(! (_ir_ < 0))
{var i=_iq_;
for(;;)
{var
_it_=(i * 2 | 0) + 3 | 0,
_is_=caml_check_bound(pub_labels,i)[1 + i];
caml_check_bound(methods,_it_)[1 + _it_] = _is_;
var _iu_=i + 1 | 0;
if(_ir_ !== i){var i=_iu_;continue}
break}}
return [0,initial_object_size,methods,Meths[1],Labs[1],0,0,Vars[1],0]}
function resize$1(array,new_size)
{var old_size=array[2].length - 1,_in_=old_size < new_size?1:0;
if(_in_)
{var new_buck=caml_make_vect(new_size,dummy_met);
blit$1(array[2],0,new_buck,0,old_size);
array[2] = new_buck;
var _io_=0}
else
var _io_=_in_;
return _io_}
var method_count=[0,0],inst_var_count=[0,0];
function new_method(table)
{var index=table[2].length - 1;
resize$1(table,index + 1 | 0);
return index}
function get_method_label(table,name)
{try
{var _il_=caml_call2(Meths[28],name,table[3]);return _il_}
catch(_im_)
{_im_ = caml_wrap_exception(_im_);
if(_im_ === Not_found)
{var label=new_method(table);
table[3] = caml_call3(Meths[4],name,label,table[3]);
table[4] = caml_call3(Labs[4],label,1,table[4]);
return label}
throw _im_}}
function get_method_labels(table,names)
{return map$7(function(_ik_){return get_method_label(table,_ik_)},names)}
function set_method(table,label,element)
{method_count[1]++;
return caml_call2(Labs[28],label,table[4])
?(resize$1(table,label + 1 | 0),
caml_check_bound(table[2],label)[1 + label]
=
element,
0)
:(table[6] = [0,[0,label,element],table[6]],0)}
function get_method(table,label)
{try
{var _ii_=assoc(label,table[6]);return _ii_}
catch(_ij_)
{_ij_ = caml_wrap_exception(_ij_);
if(_ij_ === Not_found)
return caml_check_bound(table[2],label)[1 + label];
throw _ij_}}
function to_list$3(arr){return 0 === arr?0:to_list$1(arr)}
function narrow(table,vars,virt_meths,concr_meths)
{var
vars$0=to_list$3(vars),
virt_meths$0=to_list$3(virt_meths),
concr_meths$0=to_list$3(concr_meths),
virt_meth_labs=
map$4
(function(_ih_){return get_method_label(table,_ih_)},virt_meths$0),
concr_meth_labs=
map$4
(function(_ig_){return get_method_label(table,_ig_)},concr_meths$0);
table[5]
=
[0,
[0,table[3],table[4],table[6],table[7],virt_meth_labs,vars$0],
table[5]];
var _h9_=Vars[1],_h__=table[7];
function _h$_(lab,info,tvars)
{return mem(lab,vars$0)?caml_call3(Vars[4],lab,info,tvars):tvars}
table[7] = caml_call3(Vars[13],_h$_,_h__,_h9_);
var by_name=[0,Meths[1]],by_label=[0,Labs[1]];
iter2$0
(function(met,label)
{by_name[1] = caml_call3(Meths[4],met,label,by_name[1]);
var _ic_=by_label[1];
try
{var _ie_=caml_call2(Labs[28],label,table[4]),_id_=_ie_}
catch(_if_)
{_if_ = caml_wrap_exception(_if_);
if(_if_ !== Not_found)throw _if_;
var _id_=1}
by_label[1] = caml_call3(Labs[4],label,_id_,_ic_);
return 0},
concr_meths$0,
concr_meth_labs);
iter2$0
(function(met,label)
{by_name[1] = caml_call3(Meths[4],met,label,by_name[1]);
by_label[1] = caml_call3(Labs[4],label,0,by_label[1]);
return 0},
virt_meths$0,
virt_meth_labs);
table[3] = by_name[1];
table[4] = by_label[1];
var _ia_=0,_ib_=table[6];
table[6]
=
fold_right
(function(met,hm)
{var lab=met[1];return mem(lab,virt_meth_labs)?hm:[0,met,hm]},
_ib_,
_ia_);
return 0}
function widen(table)
{var
match=hd(table[5]),
vars=match[6],
virt_meths=match[5],
saved_vars=match[4],
saved_hidden_meths=match[3],
by_label=match[2],
by_name=match[1];
table[5] = tl(table[5]);
table[7]
=
fold_left$0
(function(s,v)
{var _h8_=caml_call2(Vars[28],v,table[7]);
return caml_call3(Vars[4],v,_h8_,s)},
saved_vars,
vars);
table[3] = by_name;
table[4] = by_label;
var _h7_=table[6];
table[6]
=
fold_right
(function(met,hm)
{var lab=met[1];return mem(lab,virt_meths)?hm:[0,met,hm]},
_h7_,
saved_hidden_meths);
return 0}
function new_slot(table)
{var index=table[1];table[1] = index + 1 | 0;return index}
function new_variable(table,name)
{try
{var _h5_=caml_call2(Vars[28],name,table[7]);return _h5_}
catch(_h6_)
{_h6_ = caml_wrap_exception(_h6_);
if(_h6_ === Not_found)
{var index=new_slot(table);
if(caml_string_notequal(name,cst$93))
table[7] = caml_call3(Vars[4],name,index,table[7]);
return index}
throw _h6_}}
function to_array(arr){return caml_equal(arr,0)?[0]:arr}
function new_methods_variables(table,meths,vals)
{var
meths$0=to_array(meths),
nmeths=meths$0.length - 1,
nvals=vals.length - 1,
res=caml_make_vect(nmeths + nvals | 0,0),
_hX_=nmeths - 1 | 0,
_hW_=0;
if(! (_hX_ < 0))
{var i$0=_hW_;
for(;;)
{var
_h3_=
get_method_label(table,caml_check_bound(meths$0,i$0)[1 + i$0]);
caml_check_bound(res,i$0)[1 + i$0] = _h3_;
var _h4_=i$0 + 1 | 0;
if(_hX_ !== i$0){var i$0=_h4_;continue}
break}}
var _hZ_=nvals - 1 | 0,_hY_=0;
if(! (_hZ_ < 0))
{var i=_hY_;
for(;;)
{var
_h1_=i + nmeths | 0,
_h0_=new_variable(table,caml_check_bound(vals,i)[1 + i]);
caml_check_bound(res,_h1_)[1 + _h1_] = _h0_;
var _h2_=i + 1 | 0;
if(_hZ_ !== i){var i=_h2_;continue}
break}}
return res}
function get_variable(table,name)
{try
{var _hU_=caml_call2(Vars[28],name,table[7]);return _hU_}
catch(_hV_)
{_hV_ = caml_wrap_exception(_hV_);
if(_hV_ === Not_found)throw [0,Assert_failure,_cJ_];
throw _hV_}}
function get_variables(table,names)
{return map$7(function(_hT_){return get_variable(table,_hT_)},names)}
function add_initializer(table,f){table[8] = [0,f,table[8]];return 0}
function create_table(public_methods)
{if(0 === public_methods)return new_table([0]);
var
tags=map$7(public_method_label,public_methods),
table=new_table(tags);
iteri$3
(function(i,met)
{var lab=(i * 2 | 0) + 2 | 0;
table[3] = caml_call3(Meths[4],met,lab,table[3]);
table[4] = caml_call3(Labs[4],lab,1,table[4]);
return 0},
public_methods);
return table}
function init_class(table)
{inst_var_count[1] = (inst_var_count[1] + table[1] | 0) - 1 | 0;
table[8] = rev(table[8]);
return resize$1
(table,
3 + ((caml_check_bound(table[2],1)[2] * 16 | 0) / 32 | 0) | 0)}
function inherits(cla,vals,virt_meths,concr_meths,param,top)
{var env=param[4],super$0=param[2];
narrow(cla,vals,virt_meths,concr_meths);
var init=top?caml_call2(super$0,cla,env):caml_call1(super$0,cla);
widen(cla);
var
_hO_=0,
_hP_=to_array(concr_meths),
_hQ_=
[0,
map$7
(function(nm){return get_method(cla,get_method_label(cla,nm))},_hP_),
_hO_],
_hR_=to_array(vals);
return caml_array_concat
([0,
[0,init],
[0,
map$7(function(_hS_){return get_variable(cla,_hS_)},_hR_),
_hQ_]])}
function make_class(pub_meths,class_init)
{var table=create_table(pub_meths),env_init=caml_call1(class_init,table);
init_class(table);
return [0,caml_call1(env_init,0),class_init,env_init,0]}
function make_class_store(pub_meths,class_init,init_table)
{var table=create_table(pub_meths),env_init=caml_call1(class_init,table);
init_class(table);
init_table[2] = class_init;
init_table[1] = env_init;
return 0}
function dummy_class(loc)
{function undef(param){throw [0,Undefined_recursive_module,loc]}
return [0,undef,undef,undef,0]}
function create_object(table)
{var obj=caml_obj_block(248,table[1]);
obj[1] = table[2];
return caml_set_oo_id(obj)}
function create_object_opt(obj_0,table)
{if(obj_0)return obj_0;
var obj=caml_obj_block(248,table[1]);
obj[1] = table[2];
return caml_set_oo_id(obj)}
function iter_f(obj,param)
{var param$0=param;
for(;;)
{if(param$0)
{var l=param$0[2],f=param$0[1];
caml_call1(f,obj);
var param$0=l;
continue}
return 0}}
function run_initializers(obj,table)
{var inits=table[8],_hN_=0 !== inits?1:0;
return _hN_?iter_f(obj,inits):_hN_}
function run_initializers_opt(obj_0,obj,table)
{if(obj_0)return obj;
var inits=table[8];
if(0 !== inits)iter_f(obj,inits);
return obj}
function create_object_and_run_initiali(obj_0,table)
{if(obj_0)return obj_0;
var obj=create_object(table);
run_initializers(obj,table);
return obj}
function get_data$0(param)
{if(param)return param[2];throw [0,Assert_failure,_cN_]}
function build_path(n,keys,tables)
{var res=[0,0,0,0],r=[0,res],_hJ_=0;
if(! (n < 0))
{var i=_hJ_;
for(;;)
{var _hL_=r[1];
r[1] = [0,caml_check_bound(keys,i)[1 + i],_hL_,0];
var _hM_=i + 1 | 0;
if(n !== i){var i=_hM_;continue}
break}}
var _hK_=r[1];
if(tables){tables[2] = _hK_;return res}
throw [0,Assert_failure,_cK_]}
function lookup_tables(root,keys)
{var tables$2=get_data$0(root);
if(tables$2)
{var i$1=keys.length - 1 - 1 | 0,i=i$1,tables=tables$2;
a:
for(;;)
{if(0 <= i)
{var key=caml_check_bound(keys,i)[1 + i],tables$0=tables;
for(;;)
{if(tables$0)
{if(tables$0[1] === key)
{var tables$1=get_data$0(tables$0);
if(tables$1)
{var i$0=i - 1 | 0,i=i$0,tables=tables$1;continue a}
throw [0,Assert_failure,_cP_]}
if(tables$0)
{var _hI_=tables$0[3];
if(_hI_){var tables$0=_hI_;continue}
var v=[0,key,0,0];
if(tables$0)
{tables$0[3] = v;return build_path(i - 1 | 0,keys,v)}
throw [0,Assert_failure,_cL_]}
throw [0,Assert_failure,_cO_]}
throw [0,Assert_failure,_cM_]}}
return tables}}
return build_path(keys.length - 1 - 1 | 0,keys,root)}
function new_cache(table)
{var n=new_method(table),switch$0=0;
if
(0
!==
(n % 2 | 0)
&&
!
((2 + ((caml_check_bound(table[2],1)[2] * 16 | 0) / 32 | 0) | 0) < n))
{var n$0=new_method(table);switch$0 = 1}
if(! switch$0)var n$0=n;
caml_check_bound(table[2],n$0)[1 + n$0] = 0;
return n$0}
function set_methods(table,methods)
{var len=methods.length - 1,i=[0,0];
for(;;)
{if(i[1] < len)
{var
_hC_=i[1],
label=caml_check_bound(methods,_hC_)[1 + _hC_],
next=
function(param)
{i[1]++;
var _hH_=i[1];
return caml_check_bound(methods,_hH_)[1 + _hH_]},
clo=next(0);
if(typeof clo === "number")
switch(clo)
{case 0:
var
x=next(0),
clo$0=function(x){return function(obj){return x}}(x);
break;
case 1:
var
n=next(0),
clo$0=function(n){return function(obj){return obj[1 + n]}}(n);
break;
case 2:
var
e=next(0),
n$0=next(0),
clo$0=
function(e,n){return function(obj){return obj[1 + e][1 + n]}}
(e,n$0);
break;
case 3:
var
n$1=next(0),
clo$0=
function(n)
{return function(obj){return caml_call1(obj[1][1 + n],obj)}}
(n$1);
break;
case 4:
var
n$2=next(0),
clo$0=
function(n){return function(obj,x){obj[1 + n] = x;return 0}}
(n$2);
break;
case 5:
var
f=next(0),
x$0=next(0),
clo$0=
function(f,x){return function(obj){return caml_call1(f,x)}}
(f,x$0);
break;
case 6:
var
f$0=next(0),
n$3=next(0),
clo$0=
function(f,n)
{return function(obj){return caml_call1(f,obj[1 + n])}}
(f$0,n$3);
break;
case 7:
var
f$1=next(0),
e$0=next(0),
n$4=next(0),
clo$0=
function(f,e,n)
{return function(obj)
{return caml_call1(f,obj[1 + e][1 + n])}}
(f$1,e$0,n$4);
break;
case 8:
var
f$2=next(0),
n$5=next(0),
clo$0=
function(f,n)
{return function(obj)
{return caml_call1(f,caml_call1(obj[1][1 + n],obj))}}
(f$2,n$5);
break;
case 9:
var
f$3=next(0),
x$1=next(0),
y=next(0),
clo$0=
function(f,x,y)
{return function(obj){return caml_call2(f,x,y)}}
(f$3,x$1,y);
break;
case 10:
var
f$4=next(0),
x$2=next(0),
n$6=next(0),
clo$0=
function(f,x,n)
{return function(obj){return caml_call2(f,x,obj[1 + n])}}
(f$4,x$2,n$6);
break;
case 11:
var
f$5=next(0),
x$3=next(0),
e$1=next(0),
n$7=next(0),
clo$0=
function(f,x,e,n)
{return function(obj)
{return caml_call2(f,x,obj[1 + e][1 + n])}}
(f$5,x$3,e$1,n$7);
break;
case 12:
var
f$6=next(0),
x$4=next(0),
n$8=next(0),
clo$0=
function(f,x,n)
{return function(obj)
{return caml_call2(f,x,caml_call1(obj[1][1 + n],obj))}}
(f$6,x$4,n$8);
break;
case 13:
var
f$7=next(0),
n$9=next(0),
x$5=next(0),
clo$0=
function(f,n,x)
{return function(obj){return caml_call2(f,obj[1 + n],x)}}
(f$7,n$9,x$5);
break;
case 14:
var
f$8=next(0),
e$2=next(0),
n$10=next(0),
x$6=next(0),
clo$0=
function(f,e,n,x)
{return function(obj)
{return caml_call2(f,obj[1 + e][1 + n],x)}}
(f$8,e$2,n$10,x$6);
break;
case 15:
var
f$9=next(0),
n$11=next(0),
x$7=next(0),
clo$0=
function(f,n,x)
{return function(obj)
{return caml_call2(f,caml_call1(obj[1][1 + n],obj),x)}}
(f$9,n$11,x$7);
break;
case 16:
var
n$12=next(0),
x$8=next(0),
clo$0=
function(n,x)
{return function(obj)
{return caml_call2(obj[1][1 + n],obj,x)}}
(n$12,x$8);
break;
case 17:
var
n$13=next(0),
m=next(0),
clo$0=
function(n,m)
{return function(obj)
{return caml_call2(obj[1][1 + n],obj,obj[1 + m])}}
(n$13,m);
break;
case 18:
var
n$14=next(0),
e$3=next(0),
m$0=next(0),
clo$0=
function(n,e,m)
{return function(obj)
{return caml_call2(obj[1][1 + n],obj,obj[1 + e][1 + m])}}
(n$14,e$3,m$0);
break;
case 19:
var
n$15=next(0),
m$1=next(0),
clo$0=
function(n,m)
{return function(obj)
{var _hF_=caml_call1(obj[1][1 + m],obj);
return caml_call2(obj[1][1 + n],obj,_hF_)}}
(n$15,m$1);
break;
case 20:
var m$2=next(0),x$9=next(0);
new_cache(table);
var
clo$0=
function(m,x)
{return function(obj)
{return caml_call1(caml_get_public_method(x,m,0),x)}}
(m$2,x$9);
break;
case 21:
var m$3=next(0),n$16=next(0);
new_cache(table);
var
clo$0=
function(m,n)
{return function(obj)
{var _hE_=obj[1 + n];
return caml_call1(caml_get_public_method(_hE_,m,0),_hE_)}}
(m$3,n$16);
break;
case 22:
var m$4=next(0),e$4=next(0),n$17=next(0);
new_cache(table);
var
clo$0=
function(m,e,n)
{return function(obj)
{var _hD_=obj[1 + e][1 + n];
return caml_call1(caml_get_public_method(_hD_,m,0),_hD_)}}
(m$4,e$4,n$17);
break;
default:
var m$5=next(0),n$18=next(0);
new_cache(table);
var
clo$0=
function(m,n)
{return function(obj)
{var _hG_=caml_call1(obj[1][1 + n],obj);
return caml_call1(caml_get_public_method(_hG_,m,0),_hG_)}}
(m$5,n$18)}
else
var clo$0=clo;
set_method(table,label,clo$0);
i[1]++;
continue}
return 0}}
function stats$0(param)
{return [0,table_count[1],method_count[1],inst_var_count[1]]}
var
CamlinternalOO=
[0,
public_method_label,
new_method,
new_variable,
new_methods_variables,
get_variable,
get_variables,
get_method_label,
get_method_labels,
get_method,
set_method,
set_methods,
narrow,
widen,
add_initializer,
dummy_table,
create_table,
init_class,
inherits,
make_class,
make_class_store,
dummy_class,
copy$7,
create_object,
create_object_opt,
run_initializers,
run_initializers_opt,
create_object_and_run_initiali,
lookup_tables,
params$0,
stats$0];
caml_register_global(821,CamlinternalOO,"CamlinternalOO");
var Stdlib_Oo=[0,copy$7,public_method_label,public_method_label];
caml_register_global(822,Stdlib_Oo,"Stdlib__Oo");
function init_mod_block(loc,comps$0)
{var
length=comps$0.length - 1,
modu=caml_obj_block(0,length),
_hy_=length - 1 | 0,
_hx_=0;
if(! (_hy_ < 0))
{var i=_hx_;
for(;;)
{var shape=caml_check_bound(comps$0,i)[1 + i];
if(typeof shape === "number")
switch(shape)
{case 0:
var
fn$0=
function(i)
{function fn(x)
{var fn$0=modu[1 + i];
if(fn === fn$0)throw [0,Undefined_recursive_module,loc];
return caml_call1(fn$0,x)}
return fn},
fn=fn$0(i),
init=fn;
break;
case 1:
var l=[];
runtime.caml_update_dummy
(l,
[246,
function(l,i)
{return function(_hA_)
{var l$0=modu[1 + i];
if(l === l$0)throw [0,Undefined_recursive_module,loc];
var _hB_=caml_obj_tag(l$0);
return 250 === _hB_
?l$0[1]
:246 === _hB_?force_lazy_block(l$0):l$0}}
(l,i)]);
var init=l;
break;
default:var init=dummy_class(loc)}
else
if(0 === shape[0])
var comps=shape[1],init=init_mod_block(loc,comps);
else
var v=shape[1],init=v;
modu[1 + i] = init;
var _hz_=i + 1 | 0;
if(_hy_ !== i){var i=_hz_;continue}
break}}
return modu}
function init_mod(loc,shape)
{if(typeof shape !== "number" && 0 === shape[0])
{var comps=shape[1];return init_mod_block(loc,comps)}
return failwith(cst_CamlinternalMod_init_mod_n)}
function update_mod_block(comps$0,o,n)
{if(0 === caml_obj_tag(n) && comps$0.length - 1 <= n.length - 1)
{var _hv_=comps$0.length - 1 - 1 | 0,_hu_=0;
if(! (_hv_ < 0))
{var i=_hu_;
for(;;)
{var n$0=n[1 + i],shape=caml_check_bound(comps$0,i)[1 + i];
if(typeof shape === "number")
if(2 === shape)
{var switch$0=0;
if(0 === caml_obj_tag(n$0) && 4 === n$0.length - 1)
{var cl=o[1 + i],j=0;
for(;;)
{cl[1 + j] = n$0[1 + j];
var _ht_=j + 1 | 0;
if(3 !== j){var j=_ht_;continue}
break}}
else
switch$0 = 1;
if(switch$0)throw [0,Assert_failure,_cQ_]}
else
o[1 + i] = n$0;
else
if(0 === shape[0])
{var comps=shape[1];update_mod_block(comps,o[1 + i],n$0)}
var _hw_=i + 1 | 0;
if(_hv_ !== i){var i=_hw_;continue}
break}}
return 0}
throw [0,Assert_failure,_cR_]}
function update_mod(shape,o,n)
{if(typeof shape !== "number" && 0 === shape[0])
{var comps=shape[1];return update_mod_block(comps,o,n)}
return failwith(cst_CamlinternalMod_update_mod)}
var CamlinternalMod=[0,init_mod,update_mod];
caml_register_global(823,CamlinternalMod,"CamlinternalMod");
var
initial_buffer=caml_create_bytes(32),
buffer=[0,initial_buffer],
bufpos=[0,0];
function reset_buffer(param)
{buffer[1] = initial_buffer;bufpos[1] = 0;return 0}
function store(c)
{if(caml_ml_bytes_length(buffer[1]) <= bufpos[1])
{var newbuffer=caml_create_bytes(2 * bufpos[1] | 0);
blit(buffer[1],0,newbuffer,0,bufpos[1]);
buffer[1] = newbuffer}
caml_bytes_set(buffer[1],bufpos[1],c);
bufpos[1]++;
return 0}
function get_string(param)
{var s=sub_string(buffer[1],0,bufpos[1]);
buffer[1] = initial_buffer;
return s}
function make_lexer(keywords)
{var kwd_table=caml_call2(Stdlib_Hashtbl[1],0,17);
iter$2
(function(s){return caml_call3(Stdlib_Hashtbl[5],kwd_table,s,[0,s])},
keywords);
function ident_or_keyword(id)
{try
{var _hr_=caml_call2(Stdlib_Hashtbl[6],kwd_table,id);return _hr_}
catch(_hs_)
{_hs_ = caml_wrap_exception(_hs_);
if(_hs_ === Not_found)return [1,id];
throw _hs_}}
function keyword_or_error(c)
{var s=make$1(1,c);
try
{var _hp_=caml_call2(Stdlib_Hashtbl[6],kwd_table,s);return _hp_}
catch(_hq_)
{_hq_ = caml_wrap_exception(_hq_);
if(_hq_ === Not_found)throw [0,Error,cat(cst_Illegal_character,s)];
throw _hq_}}
function comment(strm)
{a:
for(;;)
{var match=peek$0(strm);
if(match)
{var switcher=match[1] - 40 | 0;
if(! (2 < switcher >>> 0))
switch(switcher)
{case 0:
junk(strm);
var match$0=peek$0(strm);
if(match$0)
{if(42 === match$0[1]){junk(strm);comment(strm);continue}
junk(strm);
continue}
throw Failure$0;
case 1:break;
default:
junk(strm);
for(;;)
{var match$1=peek$0(strm);
if(match$1)
{var _ho_=match$1[1];
if(41 === _ho_){junk(strm);return 0}
if(42 === _ho_){junk(strm);continue}
junk(strm);
continue a}
throw Failure$0}}
junk(strm);
continue}
throw Failure$0}}
function escape(strm)
{var match=peek$0(strm);
if(match)
{var _hl_=match[1];
if(58 <= _hl_)
{var switcher=_hl_ - 110 | 0;
if(! (6 < switcher >>> 0))
switch(switcher)
{case 0:junk(strm);return 10;
case 4:junk(strm);return 13;
case 6:junk(strm);return 9
}}
else
if(48 <= _hl_)
{junk(strm);
var match$0=peek$0(strm);
if(match$0)
{var _hm_=match$0[1];
if(! (9 < _hm_ - 48 >>> 0))
{junk(strm);
var match$1=peek$0(strm);
if(match$1)
{var _hn_=match$1[1];
if(! (9 < _hn_ - 48 >>> 0))
{junk(strm);
return chr
((((_hl_ - 48 | 0) * 100 | 0)
+
((_hm_ - 48 | 0) * 10 | 0)
|
0)
+
(_hn_ - 48 | 0)
|
0)}}
throw [0,Error,cst$99]}}
throw [0,Error,cst$98]}
junk(strm);
return _hl_}
throw Failure$0}
function end_exponent_part(strm)
{for(;;)
{var match=peek$0(strm);
if(match)
{var _hk_=match[1];
if(! (9 < _hk_ - 48 >>> 0)){junk(strm);store(_hk_);continue}}
return [0,[3,caml_float_of_string(get_string(0))]]}}
function exponent_part(strm)
{var match=peek$0(strm);
if(match)
{var _hj_=match[1],switch$0=0;
if(43 !== _hj_ && 45 !== _hj_)switch$0 = 1;
if(! switch$0)
{junk(strm);store(_hj_);return end_exponent_part(strm)}}
return end_exponent_part(strm)}
function number(s)
{for(;;)
{var match=peek$0(s);
if(match)
{var _hg_=match[1];
if(58 <= _hg_)
{var switch$0=0;
if(69 === _hg_ || 101 === _hg_)switch$0 = 1;
if(switch$0){junk(s);store(69);return exponent_part(s)}}
else
{if(46 === _hg_)
{junk(s);
store(46);
for(;;)
{var match$0=peek$0(s);
if(match$0)
{var _hh_=match$0[1],_hi_=_hh_ - 69 | 0;
if(32 < _hi_ >>> 0)
{if(! (9 < _hi_ + 21 >>> 0)){junk(s);store(_hh_);continue}}
else
if(30 < _hi_ - 1 >>> 0)
{junk(s);store(69);return exponent_part(s)}}
return [0,[3,caml_float_of_string(get_string(0))]]}}
if(48 <= _hg_){junk(s);store(_hg_);continue}}}
return [0,[2,caml_int_of_string(get_string(0))]]}}
function ident2(strm)
{for(;;)
{var match=peek$0(strm);
if(match)
{var _he_=match[1],switch$0=0;
if(94 <= _he_)
{var _hf_=_he_ - 95 | 0;
if(30 < _hf_ >>> 0)
{if(! (32 <= _hf_))switch$0 = 1}
else
if(29 === _hf_)switch$0 = 1}
else
if(65 <= _he_)
{if(92 === _he_)switch$0 = 1}
else
if(33 <= _he_)
switch(_he_ - 33 | 0)
{case 0:
case 2:
case 3:
case 4:
case 5:
case 9:
case 10:
case 12:
case 14:
case 25:
case 27:
case 28:
case 29:
case 30:
case 31:switch$0 = 1;break
}
if(switch$0){junk(strm);store(_he_);continue}}
return [0,ident_or_keyword(get_string(0))]}}
function neg_number(s)
{var match=peek$0(s);
if(match)
{var _hd_=match[1];
if(! (9 < _hd_ - 48 >>> 0))
{junk(s);reset_buffer(0);store(45);store(_hd_);return number(s)}}
reset_buffer(0);
store(45);
return ident2(s)}
function ident(strm)
{for(;;)
{var match=peek$0(strm);
if(match)
{var _hb_=match[1],switch$0=0;
if(91 <= _hb_)
{var _hc_=_hb_ - 95 | 0;
if(27 < _hc_ >>> 0)
{if(97 <= _hc_)switch$0 = 1}
else
if(1 !== _hc_)switch$0 = 1}
else
if(48 <= _hb_)
{if(6 < _hb_ - 58 >>> 0)switch$0 = 1}
else
if(39 === _hb_)switch$0 = 1;
if(switch$0){junk(strm);store(_hb_);continue}}
return [0,ident_or_keyword(get_string(0))]}}
function next_token$0(counter,strm)
{for(;;)
{var match=peek$0(strm);
if(match)
{var _g3_=match[1],switch$0=0;
if(124 <= _g3_)
{if(127 <= _g3_)
{if(192 <= _g3_)switch$0 = 1}
else
if(125 !== _g3_)switch$0 = 2}
else
{var _g4_=_g3_ - 65 | 0;
if(57 < _g4_ >>> 0)
{if(! (58 <= _g4_))
switch(_g4_ + 65 | 0)
{case 34:
junk(strm);
reset_buffer(0);
for(;;)
{var match$1=peek$0(strm);
if(match$1)
{var _g6_=match$1[1];
if(34 === _g6_){junk(strm);return [0,[4,get_string(0)]]}
if(92 === _g6_)
{junk(strm);
try
{var c$0=escape(strm)}
catch(_ha_)
{_ha_ = caml_wrap_exception(_ha_);
if(_ha_ === Failure$0)throw [0,Error,cst$96];
throw _ha_;
var _g9_=_ha_}
store(c$0);
continue}
junk(strm);
store(_g6_);
continue}
throw Failure$0}
case 39:
junk(strm);
try
{var match$2=peek$0(strm);
if(! match$2)throw Failure$0;
var _g7_=match$2[1];
if(92 === _g7_)
{junk(strm);
try
{var _g8_=escape(strm)}
catch(_g$_)
{_g$_ = caml_wrap_exception(_g$_);
if(_g$_ === Failure$0)throw [0,Error,cst$97];
throw _g$_}
var c=_g8_}
else
{junk(strm);var c=_g7_}}
catch(_g__)
{_g__ = caml_wrap_exception(_g__);
if(_g__ === Failure$0)throw [0,Error,cst$94];
throw _g__}
var match$0=peek$0(strm);
if(match$0 && 39 === match$0[1])
{junk(strm);return [0,[5,c]]}
throw [0,Error,cst$95];
case 40:
junk(strm);
if(counter < 50)
{var counter$0=counter + 1 | 0;
return maybe_comment(counter$0,strm)}
return caml_trampoline_return(maybe_comment,[0,strm]);
case 45:junk(strm);return neg_number(strm);
case 9:
case 10:
case 12:
case 13:
case 26:
case 32:junk(strm);continue;
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
junk(strm);reset_buffer(0);store(_g3_);return number(strm);
case 33:
case 35:
case 36:
case 37:
case 38:
case 42:
case 43:
case 47:
case 58:
case 60:
case 61:
case 62:
case 63:
case 64:switch$0 = 2;break
}}
else
{var _g5_=_g4_ - 26 | 0;
if(5 < _g5_ >>> 0)
switch$0 = 1;
else
switch(_g5_)
{case 4:switch$0 = 1;break;case 1:case 3:switch$0 = 2;break}}}
switch(switch$0)
{case 0:junk(strm);return [0,keyword_or_error(_g3_)];
case 1:
junk(strm);reset_buffer(0);store(_g3_);return ident(strm);
default:
junk(strm);reset_buffer(0);store(_g3_);return ident2(strm)}}
return 0}}
function maybe_comment(counter,strm)
{var match=peek$0(strm);
if(match && 42 === match[1])
{junk(strm);
comment(strm);
if(counter < 50)
{var counter$0=counter + 1 | 0;return next_token$0(counter$0,strm)}
return caml_trampoline_return(next_token$0,[0,strm])}
return [0,keyword_or_error(40)]}
function next_token(strm){return caml_trampoline(next_token$0(0,strm))}
return function(input)
{return from(function(count){return next_token(input)})}}
var Stdlib_Genlex=[0,make_lexer];
caml_register_global(824,Stdlib_Genlex,"Stdlib__Genlex");
function MakeSeeded$0(H)
{var prng=[246,function(_g2_){return caml_call1(_ci_[2],0)}];
function create(opt,initial_size)
{if(opt)
var sth=opt[1],random=sth;
else
var random=caml_call1(Stdlib_Hashtbl[17],0);
var x=16;
for(;;)
{if(! (initial_size <= x) && ! (max_array_length < (x * 2 | 0)))
{var x$0=x * 2 | 0,x=x$0;continue}
if(random)
var
_g0_=caml_obj_tag(prng),
_g1_=250 === _g0_?prng[1]:246 === _g0_?force_lazy_block(prng):prng,
seed=caml_call1(_ci_[4],_g1_);
else
var seed=0;
return [0,0,caml_make_vect(x,0),seed,x]}}
function clear(h)
{h[1] = 0;
var len=h[2].length - 1,_gY_=len - 1 | 0,_gX_=0;
if(! (_gY_ < 0))
{var i=_gX_;
for(;;)
{caml_check_bound(h[2],i)[1 + i] = 0;
var _gZ_=i + 1 | 0;
if(_gY_ !== i){var i=_gZ_;continue}
break}}
return 0}
function reset(h)
{var len=h[2].length - 1;
return len === h[4]
?clear(h)
:(h[1] = 0,h[2] = caml_make_vect(h[4],0),0)}
function copy(init)
{var _gU_=init[4],_gV_=init[3],_gW_=copy$1(init[2]);
return [0,init[1],_gW_,_gV_,_gU_]}
function key_index(h,hkey){return hkey & (h[2].length - 1 - 1 | 0)}
function clean(h)
{function do_bucket(param)
{var param$0=param;
for(;;)
{if(param$0)
{var hkey=param$0[1],rest=param$0[3],c=param$0[2];
if(caml_call1(H[7],c))
{var rest$0=param$0[3],c$0=param$0[2];
return [0,hkey,c$0,do_bucket(rest$0)]}
h[1] = h[1] - 1 | 0;
var param$0=rest;
continue}
return 0}}
var d=h[2],_gR_=d.length - 1 - 1 | 0,_gQ_=0;
if(! (_gR_ < 0))
{var i=_gQ_;
for(;;)
{var _gS_=do_bucket(caml_check_bound(d,i)[1 + i]);
caml_check_bound(d,i)[1 + i] = _gS_;
var _gT_=i + 1 | 0;
if(_gR_ !== i){var i=_gT_;continue}
break}}
return 0}
function resize(h)
{var odata=h[2],osize=odata.length - 1,nsize=osize * 2 | 0;
clean(h);
var
_gJ_=nsize < max_array_length?1:0,
_gK_=_gJ_?(osize >>> 1 | 0) <= h[1]?1:0:_gJ_;
if(_gK_)
{var ndata=caml_make_vect(nsize,0);
h[2] = ndata;
var
insert_bucket=
function(param)
{if(param)
{var rest=param[3],data=param[2],hkey=param[1];
insert_bucket(rest);
var
nidx=key_index(h,hkey),
_gP_=[0,hkey,data,caml_check_bound(ndata,nidx)[1 + nidx]];
caml_check_bound(ndata,nidx)[1 + nidx] = _gP_;
return 0}
return 0},
_gM_=osize - 1 | 0,
_gL_=0;
if(! (_gM_ < 0))
{var i=_gL_;
for(;;)
{insert_bucket(caml_check_bound(odata,i)[1 + i]);
var _gO_=i + 1 | 0;
if(_gM_ !== i){var i=_gO_;continue}
break}}
var _gN_=0}
else
var _gN_=_gK_;
return _gN_}
function add(h,key,info)
{var
hkey=caml_call2(H[2],h[3],key),
i=key_index(h,hkey),
container=caml_call2(H[1],key,info),
bucket=[0,hkey,container,caml_check_bound(h[2],i)[1 + i]];
caml_check_bound(h[2],i)[1 + i] = bucket;
h[1] = h[1] + 1 | 0;
var _gI_=h[2].length - 1 << 1 < h[1]?1:0;
return _gI_?resize(h):_gI_}
function remove(h,key)
{var hkey=caml_call2(H[2],h[3],key);
function remove_bucket(param)
{var param$0=param;
for(;;)
{if(param$0)
{var hk=param$0[1],next=param$0[3],c=param$0[2];
if(hkey === hk)
{var match=caml_call2(H[3],c,key);
switch(match)
{case 0:h[1] = h[1] - 1 | 0;return next;
case 1:return [0,hk,c,remove_bucket(next)];
default:h[1] = h[1] - 1 | 0;var param$0=next;continue}}
var next$0=param$0[3],c$0=param$0[2];
return [0,hk,c$0,remove_bucket(next$0)]}
return 0}}
var
i=key_index(h,hkey),
_gH_=remove_bucket(caml_check_bound(h[2],i)[1 + i]);
caml_check_bound(h[2],i)[1 + i] = _gH_;
return 0}
function find(h,key)
{var
hkey=caml_call2(H[2],h[3],key),
_gG_=key_index(h,hkey),
param$1=caml_check_bound(h[2],_gG_)[1 + _gG_],
param=param$1;
for(;;)
{if(param)
{var hk=param[1],rest=param[3],c=param[2];
if(hkey === hk)
{var match=caml_call2(H[3],c,key);
switch(match)
{case 0:
var match$0=caml_call1(H[4],c);
if(match$0){var d=match$0[1];return d}
var param=rest;
continue;
case 1:var param=rest;continue;
default:var param=rest;continue}}
var param$0=param[3],param=param$0;
continue}
throw Not_found}}
function find_opt(h,key)
{var
hkey=caml_call2(H[2],h[3],key),
_gF_=key_index(h,hkey),
param$1=caml_check_bound(h[2],_gF_)[1 + _gF_],
param=param$1;
for(;;)
{if(param)
{var hk=param[1],rest=param[3],c=param[2];
if(hkey === hk)
{var match=caml_call2(H[3],c,key);
switch(match)
{case 0:
var d=caml_call1(H[4],c);
if(d)return d;
var param=rest;
continue;
case 1:var param=rest;continue;
default:var param=rest;continue}}
var param$0=param[3],param=param$0;
continue}
return 0}}
function find_all(h,key)
{var hkey=caml_call2(H[2],h[3],key);
function find_in_bucket(param)
{var param$0=param;
for(;;)
{if(param$0)
{var hk=param$0[1],rest=param$0[3],c=param$0[2];
if(hkey === hk)
{var match=caml_call2(H[3],c,key);
switch(match)
{case 0:
var match$0=caml_call1(H[4],c);
if(match$0)
{var d=match$0[1];return [0,d,find_in_bucket(rest)]}
var param$0=rest;
continue;
case 1:var param$0=rest;continue;
default:var param$0=rest;continue}}
var param$1=param$0[3],param$0=param$1;
continue}
return 0}}
var _gE_=key_index(h,hkey);
return find_in_bucket(caml_check_bound(h[2],_gE_)[1 + _gE_])}
function replace(h,key,info)
{var hkey=caml_call2(H[2],h[3],key);
function replace_bucket(param)
{var param$0=param;
for(;;)
{if(param$0)
{var hk=param$0[1],next=param$0[3],c=param$0[2];
if(hkey === hk)
{var match=caml_call2(H[3],c,key);
if(match){var param$0=next;continue}
return caml_call3(H[6],c,key,info)}
var param$1=param$0[3],param$0=param$1;
continue}
throw Not_found}}
var i=key_index(h,hkey),l=caml_check_bound(h[2],i)[1 + i];
try
{var _gC_=replace_bucket(l);return _gC_}
catch(_gD_)
{_gD_ = caml_wrap_exception(_gD_);
if(_gD_ === Not_found)
{var container=caml_call2(H[1],key,info);
caml_check_bound(h[2],i)[1 + i] = [0,hkey,container,l];
h[1] = h[1] + 1 | 0;
var _gB_=h[2].length - 1 << 1 < h[1]?1:0;
return _gB_?resize(h):_gB_}
throw _gD_}}
function mem(h,key)
{var
hkey=caml_call2(H[2],h[3],key),
_gA_=key_index(h,hkey),
param$1=caml_check_bound(h[2],_gA_)[1 + _gA_],
param=param$1;
for(;;)
{if(param)
{var hk=param[1],rest=param[3],c=param[2];
if(hk === hkey)
{var match=caml_call2(H[3],c,key);
if(match){var param=rest;continue}
return 1}
var param$0=param[3],param=param$0;
continue}
return 0}}
function iter$0(f,h)
{var d$0=h[2],_gy_=d$0.length - 1 - 1 | 0,_gx_=0;
if(! (_gy_ < 0))
{var i=_gx_;
a:
for(;;)
{var param$0=caml_check_bound(d$0,i)[1 + i],param=param$0;
for(;;)
{if(param)
{var
rest=param[3],
c=param[2],
match=caml_call1(H[5],c),
match$0=caml_call1(H[4],c),
switch$0=0;
if(match && match$0)
{var d=match$0[1],k=match[1];caml_call2(f,k,d);switch$0 = 1}
var param=rest;
continue}
var _gz_=i + 1 | 0;
if(_gy_ !== i){var i=_gz_;continue a}
break}
break}}
return 0}
function fold(f,h,init)
{var d$0=h[2],accu$1=[0,init],_gu_=d$0.length - 1 - 1 | 0,_gt_=0;
if(! (_gu_ < 0))
{var i=_gt_;
a:
for(;;)
{var
_gv_=accu$1[1],
b$0=caml_check_bound(d$0,i)[1 + i],
b=b$0,
accu=_gv_;
for(;;)
{if(b)
{var
rest=b[3],
c=b[2],
match=caml_call1(H[5],c),
match$0=caml_call1(H[4],c),
switch$0=0;
if(match && match$0)
{var d=match$0[1],k=match[1],accu$0=caml_call3(f,k,d,accu);
switch$0 = 1}
if(! switch$0)var accu$0=accu;
var b=rest,accu=accu$0;
continue}
accu$1[1] = accu;
var _gw_=i + 1 | 0;
if(_gu_ !== i){var i=_gw_;continue a}
break}
break}}
return accu$1[1]}
function filter_map_inplace(f,h)
{function do_bucket(param)
{var param$0=param;
for(;;)
{if(param$0)
{var
rest=param$0[3],
c=param$0[2],
hk=param$0[1],
match=caml_call1(H[5],c),
match$0=caml_call1(H[4],c);
if(match && match$0)
{var d=match$0[1],k=match[1],match$1=caml_call2(f,k,d);
if(match$1)
{var new_d=match$1[1];
caml_call3(H[6],c,k,new_d);
return [0,hk,c,do_bucket(rest)]}
var param$0=rest;
continue}
var param$0=rest;
continue}
return 0}}
var d=h[2],_gq_=d.length - 1 - 1 | 0,_gp_=0;
if(! (_gq_ < 0))
{var i=_gp_;
for(;;)
{var _gr_=do_bucket(caml_check_bound(d,i)[1 + i]);
caml_check_bound(d,i)[1 + i] = _gr_;
var _gs_=i + 1 | 0;
if(_gq_ !== i){var i=_gs_;continue}
break}}
return 0}
function length(h){return h[1]}
function bucket_length(accu,param)
{var accu$0=accu,param$0=param;
for(;;)
{if(param$0)
{var
param$1=param$0[3],
accu$1=accu$0 + 1 | 0,
accu$0=accu$1,
param$0=param$1;
continue}
return accu$0}}
function stats(h)
{var
_gl_=h[2],
_gm_=0,
mbl=
fold_left$3
(function(m,b){return max$1(m,bucket_length(0,b))},_gm_,_gl_),
histo=caml_make_vect(mbl + 1 | 0,0),
_gn_=h[2];
iter$5
(function(b)
{var
l=bucket_length(0,b),
_go_=caml_check_bound(histo,l)[1 + l] + 1 | 0;
caml_check_bound(histo,l)[1 + l] = _go_;
return 0},
_gn_);
return [0,h[1],h[2].length - 1,mbl,histo]}
function bucket_length_alive(accu,param)
{var accu$0=accu,param$0=param;
for(;;)
{if(param$0)
{var rest=param$0[3],c=param$0[2];
if(caml_call1(H[7],c))
{var accu$1=accu$0 + 1 | 0,accu$0=accu$1,param$0=rest;continue}
var param$1=param$0[3],param$0=param$1;
continue}
return accu$0}}
function stats_alive(h)
{var
size=[0,0],
_gh_=h[2],
_gi_=0,
mbl=
fold_left$3
(function(m,b){return max$1(m,bucket_length_alive(0,b))},_gi_,_gh_),
histo=caml_make_vect(mbl + 1 | 0,0),
_gj_=h[2];
iter$5
(function(b)
{var l=bucket_length_alive(0,b);
size[1] = size[1] + l | 0;
var _gk_=caml_check_bound(histo,l)[1 + l] + 1 | 0;
caml_check_bound(histo,l)[1 + l] = _gk_;
return 0},
_gj_);
return [0,size[1],h[2].length - 1,mbl,histo]}
function to_seq(tbl)
{var tbl_data=tbl[2];
function aux(i,buck,param)
{var i$0=i,buck$0=buck;
for(;;)
{if(buck$0)
{var
next=buck$0[3],
c=buck$0[2],
match=caml_call1(H[5],c),
match$0=caml_call1(H[4],c);
if(match && match$0)
{var data=match$0[1],key=match[1];
return [0,
[0,key,data],
function(_gg_){return aux(i$0,next,_gg_)}]}
var buck$0=next;
continue}
if(i$0 === tbl_data.length - 1)return 0;
var
buck$1=caml_check_bound(tbl_data,i$0)[1 + i$0],
i$1=i$0 + 1 | 0,
i$0=i$1,
buck$0=buck$1;
continue}}
var _gd_=0,_ge_=0;
return function(_gf_){return aux(_ge_,_gd_,_gf_)}}
function to_seq_keys(m)
{var _f$_=to_seq(m);
function _ga_(_gc_){return _gc_[1]}
return function(_gb_){return map$1(_ga_,_f$_,_gb_)}}
function to_seq_values(m)
{var _f7_=to_seq(m);
function _f8_(_f__){return _f__[2]}
return function(_f9_){return map$1(_f8_,_f7_,_f9_)}}
function add_seq(tbl,i)
{return iter
(function(param)
{var v=param[2],k=param[1];return add(tbl,k,v)},
i)}
function replace_seq(tbl,i)
{return iter
(function(param)
{var v=param[2],k=param[1];return replace(tbl,k,v)},
i)}
function of_seq(i){var tbl=create(0,16);replace_seq(tbl,i);return tbl}
return [0,
create,
clear,
reset,
copy,
add,
remove,
find,
find_opt,
find_all,
replace,
mem,
iter$0,
filter_map_inplace,
fold,
length,
stats,
to_seq,
to_seq_keys,
to_seq_values,
add_seq,
replace_seq,
of_seq,
clean,
stats_alive]}
function create$5(param){return caml_call1(_q_[1],1)}
function get_key$0(t){return caml_call2(_q_[3],t,0)}
function get_key_copy$0(t){return caml_call2(_q_[4],t,0)}
function set_key$0(t,k){return caml_call3(_q_[5],t,0,k)}
function unset_key$0(t){return caml_call2(_q_[6],t,0)}
function check_key$0(t){return caml_call2(_q_[7],t,0)}
function blit_key$0(t1,t2){return caml_call5(_q_[8],t1,0,t2,0,1)}
function get_data$1(t){return caml_call1(_q_[9],t)}
function get_data_copy(t){return caml_call1(_q_[10],t)}
function set_data(t,d){return caml_call2(_q_[11],t,d)}
function unset_data(t){return caml_call1(_q_[12],t)}
function check_data(t){return caml_call1(_q_[13],t)}
function blit_data(t1,t2){return caml_call2(_q_[14],t1,t2)}
function make$4(key,data)
{var eph=create$5(0);set_data(eph,data);set_key$0(eph,key);return eph}
function query(eph,key)
{var match=get_key$0(eph);
if(match){var k=match[1];return k === key?get_data$1(eph):0}
return 0}
function MakeSeeded$1(H)
{function create(k,d)
{var c=create$5(0);set_data(c,d);set_key$0(c,k);return c}
var hash=H[2];
function equal(c,k)
{var match=get_key$0(c);
if(match){var k$0=match[1];return caml_call2(H[1],k,k$0)?0:1}
return 2}
function set_key_data(c,k,d)
{unset_data(c);set_key$0(c,k);return set_data(c,d)}
return MakeSeeded$0
([0,
create,
hash,
equal,
get_data$1,
get_key$0,
set_key_data,
check_key$0])}
function Make$2(H)
{var equal=H[1];
function hash(seed,x){return caml_call1(H[2],x)}
var
include=MakeSeeded$1([0,equal,hash]),
clear=include[2],
reset=include[3],
copy=include[4],
add=include[5],
remove=include[6],
find=include[7],
find_opt=include[8],
find_all=include[9],
replace=include[10],
mem=include[11],
iter=include[12],
filter_map_inplace=include[13],
fold=include[14],
length=include[15],
stats=include[16],
to_seq=include[17],
to_seq_keys=include[18],
to_seq_values=include[19],
add_seq=include[20],
replace_seq=include[21],
clean=include[23],
stats_alive=include[24],
_f6_=include[1];
function create(sz){return caml_call2(_f6_,_cS_,sz)}
function of_seq(i)
{var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl}
return [0,
create,
clear,
reset,
copy,
add,
remove,
find,
find_opt,
find_all,
replace,
mem,
iter,
filter_map_inplace,
fold,
length,
stats,
to_seq,
to_seq_keys,
to_seq_values,
add_seq,
replace_seq,
of_seq,
clean,
stats_alive]}
function make$5(param){return [0,0]}
function add$1(b,k,d){var _f5_=b[1];b[1] = [0,make$4(k,d),_f5_];return 0}
function test_key(k,e)
{var match=get_key$0(e);
if(match){var x=match[1];if(x === k)return 1}
return 0}
function remove$0(b,k)
{var l=b[1],acc=0;
for(;;)
{if(l)
{var h=l[1],t=l[2];
if(test_key(k,h)){b[1] = rev_append(acc,t);return 0}
var l$0=l[2],acc$0=[0,h,acc],l=l$0,acc=acc$0;
continue}
return 0}}
function find$2(b,k)
{var
_f3_=b[1],
match=find_opt(function(_f4_){return test_key(k,_f4_)},_f3_);
if(match){var e=match[1];return get_data$1(e)}
return 0}
function length$7(b){return length$1(b[1])}
function clear$3(b){b[1] = 0;return 0}
function create$6(param){return caml_call1(_q_[1],2)}
function get_key1(t){return caml_call2(_q_[3],t,0)}
function get_key1_copy(t){return caml_call2(_q_[4],t,0)}
function set_key1(t,k){return caml_call3(_q_[5],t,0,k)}
function unset_key1(t){return caml_call2(_q_[6],t,0)}
function check_key1(t){return caml_call2(_q_[7],t,0)}
function get_key2(t){return caml_call2(_q_[3],t,1)}
function get_key2_copy(t){return caml_call2(_q_[4],t,1)}
function set_key2(t,k){return caml_call3(_q_[5],t,1,k)}
function unset_key2(t){return caml_call2(_q_[6],t,1)}
function check_key2(t){return caml_call2(_q_[7],t,1)}
function blit_key1(t1,t2){return caml_call5(_q_[8],t1,0,t2,0,1)}
function blit_key2(t1,t2){return caml_call5(_q_[8],t1,1,t2,1,1)}
function blit_key12(t1,t2){return caml_call5(_q_[8],t1,0,t2,0,2)}
function get_data$2(t){return caml_call1(_q_[9],t)}
function get_data_copy$0(t){return caml_call1(_q_[10],t)}
function set_data$0(t,d){return caml_call2(_q_[11],t,d)}
function unset_data$0(t){return caml_call1(_q_[12],t)}
function check_data$0(t){return caml_call1(_q_[13],t)}
function blit_data$0(t1,t2){return caml_call2(_q_[14],t1,t2)}
function make$6(key1,key2,data)
{var eph=create$6(0);
set_data$0(eph,data);
set_key1(eph,key1);
set_key2(eph,key2);
return eph}
function query$0(eph,key1,key2)
{var match=get_key1(eph);
if(match)
{var k=match[1];
if(k === key1)
{var match$0=get_key2(eph);
if(match$0)
{var k$0=match$0[1];return k$0 === key2?get_data$2(eph):0}
return 0}
return 0}
return 0}
function MakeSeeded$2(H1,H2)
{function create(param,d)
{var k2=param[2],k1=param[1],c=create$6(0);
set_data$0(c,d);
set_key1(c,k1);
set_key2(c,k2);
return c}
function hash(seed,param)
{var
k2=param[2],
k1=param[1],
_f2_=caml_call2(H2[2],seed,k2) * 65599 | 0;
return caml_call2(H1[2],seed,k1) + _f2_ | 0}
function equal(c,param)
{var k2=param[2],k1=param[1],match=get_key1(c),match$0=get_key2(c);
if(match && match$0)
{var k2$0=match$0[1],k1$0=match[1];
if(caml_call2(H1[1],k1,k1$0) && caml_call2(H2[1],k2,k2$0))return 0;
return 1}
return 2}
function get_key(c)
{var match=get_key1(c),match$0=get_key2(c);
if(match && match$0)
{var k2=match$0[1],k1=match[1];return [0,[0,k1,k2]]}
return 0}
function set_key_data(c,param,d)
{var k2=param[2],k1=param[1];
unset_data$0(c);
set_key1(c,k1);
set_key2(c,k2);
return set_data$0(c,d)}
function check_key(c)
{var _f1_=check_key1(c);return _f1_?check_key2(c):_f1_}
return MakeSeeded$0
([0,create,hash,equal,get_data$2,get_key,set_key_data,check_key])}
function Make$3(H1,H2)
{var equal=H2[1];
function hash(seed,x){return caml_call1(H2[2],x)}
var equal$0=H1[1],_fZ_=[0,equal,hash];
function hash$0(seed,x){return caml_call1(H1[2],x)}
var
include=MakeSeeded$2([0,equal$0,hash$0],_fZ_),
clear=include[2],
reset=include[3],
copy=include[4],
add=include[5],
remove=include[6],
find=include[7],
find_opt=include[8],
find_all=include[9],
replace=include[10],
mem=include[11],
iter=include[12],
filter_map_inplace=include[13],
fold=include[14],
length=include[15],
stats=include[16],
to_seq=include[17],
to_seq_keys=include[18],
to_seq_values=include[19],
add_seq=include[20],
replace_seq=include[21],
clean=include[23],
stats_alive=include[24],
_f0_=include[1];
function create(sz){return caml_call2(_f0_,_cT_,sz)}
function of_seq(i)
{var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl}
return [0,
create,
clear,
reset,
copy,
add,
remove,
find,
find_opt,
find_all,
replace,
mem,
iter,
filter_map_inplace,
fold,
length,
stats,
to_seq,
to_seq_keys,
to_seq_values,
add_seq,
replace_seq,
of_seq,
clean,
stats_alive]}
function make$7(param){return [0,0]}
function add$2(b,k1,k2,d)
{var _fY_=b[1];b[1] = [0,make$6(k1,k2,d),_fY_];return 0}
function test_keys(k1,k2,e)
{var match=get_key1(e),match$0=get_key2(e);
if(match && match$0)
{var x2=match$0[1],x1=match[1];if(x1 === k1 && x2 === k2)return 1}
return 0}
function remove$1(b,k1,k2)
{var l=b[1],acc=0;
for(;;)
{if(l)
{var h=l[1],t=l[2];
if(test_keys(k1,k2,h)){b[1] = rev_append(acc,t);return 0}
var l$0=l[2],acc$0=[0,h,acc],l=l$0,acc=acc$0;
continue}
return 0}}
function find$3(b,k1,k2)
{var
_fW_=b[1],
match=find_opt(function(_fX_){return test_keys(k1,k2,_fX_)},_fW_);
if(match){var e=match[1];return get_data$2(e)}
return 0}
function length$8(b){return length$1(b[1])}
function clear$4(b){b[1] = 0;return 0}
function create$7(n){return caml_call1(_q_[1],n)}
function length$9(k){return caml_call1(_q_[2],k)}
function get_key$1(t,n){return caml_call2(_q_[3],t,n)}
function get_key_copy$1(t,n){return caml_call2(_q_[4],t,n)}
function set_key$1(t,n,k){return caml_call3(_q_[5],t,n,k)}
function unset_key$1(t,n){return caml_call2(_q_[6],t,n)}
function check_key$1(t,n){return caml_call2(_q_[7],t,n)}
function blit_key$1(t1,o1,t2,o2,l)
{return caml_call5(_q_[8],t1,o1,t2,o2,l)}
function get_data$3(t){return caml_call1(_q_[9],t)}
function get_data_copy$1(t){return caml_call1(_q_[10],t)}
function set_data$1(t,d){return caml_call2(_q_[11],t,d)}
function unset_data$1(t){return caml_call1(_q_[12],t)}
function check_data$1(t){return caml_call1(_q_[13],t)}
function blit_data$1(t1,t2){return caml_call2(_q_[14],t1,t2)}
function make$8(keys,data)
{var l=keys.length - 1,eph=create$7(l);
set_data$1(eph,data);
var _fU_=l - 1 | 0,_fT_=0;
if(! (_fU_ < 0))
{var i=_fT_;
for(;;)
{set_key$1(eph,i,caml_check_bound(keys,i)[1 + i]);
var _fV_=i + 1 | 0;
if(_fU_ !== i){var i=_fV_;continue}
break}}
return eph}
function query$1(eph,keys)
{var l=length$9(eph);
try
{if(l !== keys.length - 1)throw Exit;
var _fP_=l - 1 | 0,_fO_=0;
if(! (_fP_ < 0))
{var i=_fO_;
for(;;)
{var match=get_key$1(eph,i);
if(! match)throw Exit;
var k=match[1];
if(k !== caml_check_bound(keys,i)[1 + i])throw Exit;
var _fR_=i + 1 | 0;
if(_fP_ !== i){var i=_fR_;continue}
break}}
var _fQ_=get_data$3(eph);
return _fQ_}
catch(_fS_)
{_fS_ = caml_wrap_exception(_fS_);if(_fS_ === Exit)return 0;throw _fS_}}
function MakeSeeded$3(H)
{function create(k,d)
{var c=create$7(k.length - 1);
set_data$1(c,d);
var _fM_=k.length - 1 - 1 | 0,_fL_=0;
if(! (_fM_ < 0))
{var i=_fL_;
for(;;)
{set_key$1(c,i,caml_check_bound(k,i)[1 + i]);
var _fN_=i + 1 | 0;
if(_fM_ !== i){var i=_fN_;continue}
break}}
return c}
function hash(seed,k)
{var h=[0,0],_fH_=k.length - 1 - 1 | 0,_fG_=0;
if(! (_fH_ < 0))
{var i=_fG_;
for(;;)
{var _fI_=h[1],_fJ_=caml_check_bound(k,i)[1 + i];
h[1] = (caml_call2(H[2],seed,_fJ_) * 65599 | 0) + _fI_ | 0;
var _fK_=i + 1 | 0;
if(_fH_ !== i){var i=_fK_;continue}
break}}
return h[1]}
function equal(c,k)
{var len=k.length - 1,len$0=length$9(c);
if(len !== len$0)return 1;
var i$1=len - 1 | 0,i=i$1;
for(;;)
{if(0 <= i)
{var match=get_key$1(c,i);
if(match)
{var ki=match[1],_fF_=caml_check_bound(k,i)[1 + i];
if(caml_call2(H[1],_fF_,ki)){var i$0=i - 1 | 0,i=i$0;continue}
return 1}
return 2}
return 0}}
function get_key(c)
{var len=length$9(c);
if(0 === len)return [0,[0]];
var match=get_key$1(c,0);
if(match)
{var k0=match[1],a=caml_make_vect(len,k0),i$1=len - 1 | 0,i=i$1;
for(;;)
{if(1 <= i)
{var match$0=get_key$1(c,i);
if(match$0)
{var ki=match$0[1];
caml_check_bound(a,i)[1 + i] = ki;
var i$0=i - 1 | 0,i=i$0;
continue}
return 0}
return [0,a]}}
return 0}
function set_key_data(c,k,d)
{unset_data$1(c);
var _fD_=k.length - 1 - 1 | 0,_fC_=0;
if(! (_fD_ < 0))
{var i=_fC_;
for(;;)
{set_key$1(c,i,caml_check_bound(k,i)[1 + i]);
var _fE_=i + 1 | 0;
if(_fD_ !== i){var i=_fE_;continue}
break}}
return set_data$1(c,d)}
function check_key(c)
{var i$1=length$9(c) - 1 | 0,i=i$1;
for(;;)
{var _fz_=i < 0?1:0;
if(_fz_)
var _fA_=_fz_;
else
{var _fB_=check_key$1(c,i);
if(_fB_){var i$0=i - 1 | 0,i=i$0;continue}
var _fA_=_fB_}
return _fA_}}
return MakeSeeded$0
([0,create,hash,equal,get_data$3,get_key,set_key_data,check_key])}
function Make$4(H)
{var equal=H[1];
function hash(seed,x){return caml_call1(H[2],x)}
var
include=MakeSeeded$3([0,equal,hash]),
clear=include[2],
reset=include[3],
copy=include[4],
add=include[5],
remove=include[6],
find=include[7],
find_opt=include[8],
find_all=include[9],
replace=include[10],
mem=include[11],
iter=include[12],
filter_map_inplace=include[13],
fold=include[14],
length=include[15],
stats=include[16],
to_seq=include[17],
to_seq_keys=include[18],
to_seq_values=include[19],
add_seq=include[20],
replace_seq=include[21],
clean=include[23],
stats_alive=include[24],
_fy_=include[1];
function create(sz){return caml_call2(_fy_,_cU_,sz)}
function of_seq(i)
{var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl}
return [0,
create,
clear,
reset,
copy,
add,
remove,
find,
find_opt,
find_all,
replace,
mem,
iter,
filter_map_inplace,
fold,
length,
stats,
to_seq,
to_seq_keys,
to_seq_values,
add_seq,
replace_seq,
of_seq,
clean,
stats_alive]}
function make$9(param){return [0,0]}
function add$3(b,k,d){var _fx_=b[1];b[1] = [0,make$8(k,d),_fx_];return 0}
function test_keys$0(k,e)
{try
{if(length$9(e) !== k.length - 1)throw Exit;
var _ft_=k.length - 1 - 1 | 0,_fs_=0;
if(! (_ft_ < 0))
{var i=_fs_;
for(;;)
{var match=get_key$1(e,i),switch$0=0;
if(match)
{var x=match[1];
if(x === caml_check_bound(k,i)[1 + i])
{var _fv_=i + 1 | 0;
if(_ft_ !== i){var i=_fv_;continue}
switch$0 = 1}}
if(! switch$0)throw Exit;
break}}
var _fu_=1;
return _fu_}
catch(_fw_)
{_fw_ = caml_wrap_exception(_fw_);if(_fw_ === Exit)return 0;throw _fw_}}
function remove$2(b,k)
{var l=b[1],acc=0;
for(;;)
{if(l)
{var h=l[1],t=l[2];
if(test_keys$0(k,h)){b[1] = rev_append(acc,t);return 0}
var l$0=l[2],acc$0=[0,h,acc],l=l$0,acc=acc$0;
continue}
return 0}}
function find$4(b,k)
{var
_fq_=b[1],
match=find_opt(function(_fr_){return test_keys$0(k,_fr_)},_fq_);
if(match){var e=match[1];return get_data$3(e)}
return 0}
function length$10(b){return length$1(b[1])}
function clear$5(b){b[1] = 0;return 0}
var
Stdlib_Ephemeron=
[0,
[0,
create$5,
get_key$0,
get_key_copy$0,
set_key$0,
unset_key$0,
check_key$0,
blit_key$0,
get_data$1,
get_data_copy,
set_data,
unset_data,
check_data,
blit_data,
make$4,
query,
Make$2,
MakeSeeded$1,
[0,make$5,add$1,remove$0,find$2,length$7,clear$3]],
[0,
create$6,
get_key1,
get_key1_copy,
set_key1,
unset_key1,
check_key1,
get_key2,
get_key2_copy,
set_key2,
unset_key2,
check_key2,
blit_key1,
blit_key2,
blit_key12,
get_data$2,
get_data_copy$0,
set_data$0,
unset_data$0,
check_data$0,
blit_data$0,
make$6,
query$0,
Make$3,
MakeSeeded$2,
[0,make$7,add$2,remove$1,find$3,length$8,clear$4]],
[0,
create$7,
get_key$1,
get_key_copy$1,
set_key$1,
unset_key$1,
check_key$1,
blit_key$1,
get_data$3,
get_data_copy$1,
set_data$1,
unset_data$1,
check_data$1,
blit_data$1,
make$8,
query$1,
Make$4,
MakeSeeded$3,
[0,make$9,add$3,remove$2,find$4,length$10,clear$5]],
[0,
function(_fp_)
{return MakeSeeded$0
([0,_fp_[3],_fp_[1],_fp_[2],_fp_[5],_fp_[4],_fp_[6],_fp_[7]])}]];
caml_register_global(825,Stdlib_Ephemeron,"Stdlib__Ephemeron");
function generic_basename(is_dir_sep,current_dir_name,name)
{if(caml_string_equal(name,cst$100))return current_dir_name;
var n$3=caml_ml_string_length(name) - 1 | 0,n=n$3;
for(;;)
{if(0 <= n)
{if(caml_call2(is_dir_sep,name,n)){var n$0=n - 1 | 0,n=n$0;continue}
var p=n + 1 | 0,n$1=n;
for(;;)
{if(0 <= n$1)
{if(caml_call2(is_dir_sep,name,n$1))
return sub$0(name,n$1 + 1 | 0,(p - n$1 | 0) - 1 | 0);
var n$2=n$1 - 1 | 0,n$1=n$2;
continue}
return sub$0(name,0,p)}}
return sub$0(name,0,1)}}
function generic_dirname(is_dir_sep,current_dir_name,name)
{if(caml_string_equal(name,cst$101))return current_dir_name;
var n$5=caml_ml_string_length(name) - 1 | 0,n=n$5;
for(;;)
{if(0 <= n)
{if(caml_call2(is_dir_sep,name,n)){var n$0=n - 1 | 0,n=n$0;continue}
var n$1=n;
for(;;)
{if(0 <= n$1)
{if(caml_call2(is_dir_sep,name,n$1))
{var n$3=n$1;
for(;;)
{if(0 <= n$3)
{if(caml_call2(is_dir_sep,name,n$3))
{var n$4=n$3 - 1 | 0,n$3=n$4;continue}
return sub$0(name,0,n$3 + 1 | 0)}
return sub$0(name,0,1)}}
var n$2=n$1 - 1 | 0,n$1=n$2;
continue}
return current_dir_name}}
return sub$0(name,0,1)}}
function is_dir_sep(s,i){return 47 === caml_string_get(s,i)?1:0}
function is_relative(n)
{var
_fn_=caml_ml_string_length(n) < 1?1:0,
_fo_=_fn_ || (47 !== caml_string_get(n,0)?1:0);
return _fo_}
function is_implicit(n)
{var _fi_=is_relative(n);
if(_fi_)
{var
_fj_=caml_ml_string_length(n) < 2?1:0,
_fk_=_fj_ || caml_string_notequal(sub$0(n,0,2),cst$103);
if(_fk_)
var
_fl_=caml_ml_string_length(n) < 3?1:0,
_fm_=_fl_ || caml_string_notequal(sub$0(n,0,3),cst$102);
else
var _fm_=_fk_}
else
var _fm_=_fi_;
return _fm_}
function check_suffix(name,suff){return ends_with$0(suff,name)}
function chop_suffix_opt(suffix,filename)
{var
len_s=caml_ml_string_length(suffix),
len_f=caml_ml_string_length(filename);
if(len_s <= len_f)
{var r=sub$0(filename,len_f - len_s | 0,len_s);
return caml_string_equal(r,suffix)
?[0,sub$0(filename,0,len_f - len_s | 0)]
:0}
return 0}
try
{var _c3_=caml_sys_getenv(cst_TMPDIR),_cV_=_c3_}
catch(_fh_)
{_fh_ = caml_wrap_exception(_fh_);
if(_fh_ !== Not_found)throw _fh_;
var _cV_=cst_tmp}
function quote(s)
{var l=caml_ml_string_length(s),b=create$2(l + 20 | 0);
add_char(b,39);
var _ff_=l - 1 | 0,_fe_=0;
if(! (_ff_ < 0))
{var i=_fe_;
for(;;)
{if(39 === caml_string_get(s,i))
add_string(b,quotequote);
else
add_char(b,caml_string_get(s,i));
var _fg_=i + 1 | 0;
if(_ff_ !== i){var i=_fg_;continue}
break}}
add_char(b,39);
return contents(b)}
function quote_command(cmd,stdin,stdout,stderr,args)
{if(stderr)
var
f=stderr[1],
_e__=caml_equal(stderr,stdout)?cst_2_1:cat(cst_2,quote(f)),
_e$_=_e__;
else
var _e$_=cst$109;
if(stdout)
var f$0=stdout[1],_fa_=cat(cst$104,quote(f$0));
else
var _fa_=cst$108;
var _fb_=cat(_fa_,_e$_);
if(stdin)
var f$1=stdin[1],_fc_=cat(cst$105,quote(f$1));
else
var _fc_=cst$107;
var _fd_=cat(_fc_,_fb_);
return cat(concat$1(cst$106,map$4(quote,[0,cmd,args])),_fd_)}
function basename(_e9_)
{return generic_basename(is_dir_sep,current_dir_name,_e9_)}
function dirname(_e8_)
{return generic_dirname(is_dir_sep,current_dir_name,_e8_)}
var
Unix=
[0,
null$0,
current_dir_name,
parent_dir_name,
dir_sep,
is_dir_sep,
is_relative,
is_implicit,
check_suffix,
chop_suffix_opt,
_cV_,
quote,
quote_command,
basename,
dirname];
function is_dir_sep$0(s,i)
{var c=caml_string_get(s,i),_e5_=47 === c?1:0;
if(_e5_)
var _e6_=_e5_;
else
var _e7_=92 === c?1:0,_e6_=_e7_ || (58 === c?1:0);
return _e6_}
function is_relative$0(n)
{var
_eZ_=caml_ml_string_length(n) < 1?1:0,
_e0_=_eZ_ || (47 !== caml_string_get(n,0)?1:0);
if(_e0_)
{var
_e1_=caml_ml_string_length(n) < 1?1:0,
_e2_=_e1_ || (92 !== caml_string_get(n,0)?1:0);
if(_e2_)
var
_e3_=caml_ml_string_length(n) < 2?1:0,
_e4_=_e3_ || (58 !== caml_string_get(n,1)?1:0);
else
var _e4_=_e2_}
else
var _e4_=_e0_;
return _e4_}
function is_implicit$0(n)
{var _eQ_=is_relative$0(n);
if(_eQ_)
{var
_eR_=caml_ml_string_length(n) < 2?1:0,
_eS_=_eR_ || caml_string_notequal(sub$0(n,0,2),cst$113);
if(_eS_)
{var
_eT_=caml_ml_string_length(n) < 2?1:0,
_eU_=_eT_ || caml_string_notequal(sub$0(n,0,2),cst$112);
if(_eU_)
{var
_eV_=caml_ml_string_length(n) < 3?1:0,
_eW_=_eV_ || caml_string_notequal(sub$0(n,0,3),cst$111);
if(_eW_)
var
_eX_=caml_ml_string_length(n) < 3?1:0,
_eY_=_eX_ || caml_string_notequal(sub$0(n,0,3),cst$110);
else
var _eY_=_eW_}
else
var _eY_=_eU_}
else
var _eY_=_eS_}
else
var _eY_=_eQ_;
return _eY_}
function check_suffix$0(name,suff)
{var _eN_=caml_ml_string_length(suff) <= caml_ml_string_length(name)?1:0;
if(_eN_)
var
s=
sub$0
(name,
caml_ml_string_length(name) - caml_ml_string_length(suff) | 0,
caml_ml_string_length(suff)),
_eO_=lowercase_ascii$1(suff),
_eP_=caml_string_equal(lowercase_ascii$1(s),_eO_);
else
var _eP_=_eN_;
return _eP_}
function chop_suffix_opt$0(suffix,filename)
{var
len_s=caml_ml_string_length(suffix),
len_f=caml_ml_string_length(filename);
if(len_s <= len_f)
{var
r=sub$0(filename,len_f - len_s | 0,len_s),
_eM_=lowercase_ascii$1(suffix);
return caml_string_equal(lowercase_ascii$1(r),_eM_)
?[0,sub$0(filename,0,len_f - len_s | 0)]
:0}
return 0}
try
{var _c2_=caml_sys_getenv(cst_TEMP),temp_dir_name=_c2_}
catch(_eL_)
{_eL_ = caml_wrap_exception(_eL_);
if(_eL_ !== Not_found)throw _eL_;
var temp_dir_name=cst$114}
function quote$0(s)
{var l=caml_ml_string_length(s),b=create$2(l + 20 | 0);
add_char(b,34);
function add_bs(n)
{var _eJ_=1;
if(! (n < 1))
{var j=_eJ_;
for(;;)
{add_char(b,92);
var _eK_=j + 1 | 0;
if(n !== j){var j=_eK_;continue}
break}}
return 0}
function loop$0(counter,i)
{var i$0=i;
for(;;)
{if(i$0 === l)return add_char(b,34);
var c=caml_string_get(s,i$0);
if(34 === c)
{var _eH_=0;
if(counter < 50)
{var counter$1=counter + 1 | 0;
return loop_bs(counter$1,_eH_,i$0)}
return caml_trampoline_return(loop_bs,[0,_eH_,i$0])}
if(92 === c)
{var _eI_=0;
if(counter < 50)
{var counter$0=counter + 1 | 0;
return loop_bs(counter$0,_eI_,i$0)}
return caml_trampoline_return(loop_bs,[0,_eI_,i$0])}
add_char(b,c);
var i$1=i$0 + 1 | 0,i$0=i$1;
continue}}
function loop_bs(counter,n,i)
{var n$0=n,i$0=i;
for(;;)
{if(i$0 === l){add_char(b,34);return add_bs(n$0)}
var match=caml_string_get(s,i$0);
if(34 === match)
{add_bs((2 * n$0 | 0) + 1 | 0);
add_char(b,34);
var _eG_=i$0 + 1 | 0;
if(counter < 50)
{var counter$1=counter + 1 | 0;return loop$0(counter$1,_eG_)}
return caml_trampoline_return(loop$0,[0,_eG_])}
if(92 === match)
{var i$1=i$0 + 1 | 0,n$1=n$0 + 1 | 0,n$0=n$1,i$0=i$1;continue}
add_bs(n$0);
if(counter < 50)
{var counter$0=counter + 1 | 0;return loop$0(counter$0,i$0)}
return caml_trampoline_return(loop$0,[0,i$0])}}
function loop(i){return caml_trampoline(loop$0(0,i))}
loop(0);
return contents(b)}
function quote_cmd_filename(f)
{if(! contains$0(f,34) && ! contains$0(f,37))
return contains$0(f,32)?cat(cst$116,cat(f,cst$115)):f;
return failwith(cat(cst_Filename_quote_command_bad,f))}
function quote_command$0(cmd,stdin,stdout,stderr,args)
{if(stderr)
var
f=stderr[1],
_ex_=
caml_equal(stderr,stdout)
?cst_2_1$0
:cat(cst_2$0,quote_cmd_filename(f)),
_ey_=_ex_;
else
var _ey_=cst$125;
var _ez_=[0,_ey_,_cW_];
if(stdout)
var f$0=stdout[1],_eA_=cat(cst$117,quote_cmd_filename(f$0));
else
var _eA_=cst$124;
var _eB_=[0,_eA_,_ez_];
if(stdin)
var f$1=stdin[1],_eC_=cat(cst$118,quote_cmd_filename(f$1));
else
var _eC_=cst$123;
var
s=concat$1(cst$119,map$4(quote$0,args)),
b=create$2(caml_ml_string_length(s) + 20 | 0),
_eD_=[0,_eC_,_eB_];
iter$4
(function(c)
{var switch$0=0;
if(62 <= c)
{var _eF_=c - 63 | 0;
if(60 < _eF_ >>> 0)
{if(! (62 <= _eF_))switch$0 = 1}
else
if(31 === _eF_)switch$0 = 1}
else
if(42 <= c)
{if(60 === c)switch$0 = 1}
else
if(33 <= c)
switch(c - 33 | 0)
{case 2:case 3:case 6:break;default:switch$0 = 1}
return switch$0?(add_char(b,94),add_char(b,c)):add_char(b,c)},
s);
var _eE_=[0,cst$120,[0,contents(b),_eD_]];
return concat$1(cst$122,[0,cst$121,[0,quote_cmd_filename(cmd),_eE_]])}
function drive_and_path(s)
{var _et_=2 <= caml_ml_string_length(s)?1:0;
if(_et_)
{var param=caml_string_get(s,0),switch$0=0;
if(91 <= param)
{if(! (25 < param - 97 >>> 0))switch$0 = 1}
else
if(65 <= param)switch$0 = 1;
var _eu_=switch$0?1:0,_ev_=_eu_?58 === caml_string_get(s,1)?1:0:_eu_}
else
var _ev_=_et_;
if(_ev_)
{var _ew_=sub$0(s,2,caml_ml_string_length(s) - 2 | 0);
return [0,sub$0(s,0,2),_ew_]}
return [0,cst$126,s]}
function dirname$0(s)
{var
match=drive_and_path(s),
path=match[2],
drive=match[1],
dir=generic_dirname(is_dir_sep$0,current_dir_name$0,path);
return cat(drive,dir)}
function basename$0(s)
{var match=drive_and_path(s),path=match[2];
return generic_basename(is_dir_sep$0,current_dir_name$0,path)}
var
Win32=
[0,
null$1,
current_dir_name$0,
parent_dir_name$0,
dir_sep$0,
is_dir_sep$0,
is_relative$0,
is_implicit$0,
check_suffix$0,
chop_suffix_opt$0,
temp_dir_name,
quote$0,
quote_command$0,
basename$0,
dirname$0];
function basename$1(_es_)
{return generic_basename(is_dir_sep$0,current_dir_name$1,_es_)}
function dirname$1(_er_)
{return generic_dirname(is_dir_sep$0,current_dir_name$1,_er_)}
var
Cygwin=
[0,
null$2,
current_dir_name$1,
parent_dir_name$1,
dir_sep$1,
is_dir_sep$0,
is_relative$0,
is_implicit$0,
check_suffix$0,
chop_suffix_opt$0,
_cV_,
quote,
quote_command,
basename$1,
dirname$1],
Sysdeps=
caml_string_notequal(os_type,cst_Cygwin)
?caml_string_notequal(os_type,cst_Win32)?Unix:Win32
:Cygwin,
null$3=Sysdeps[1],
current_dir_name$2=Sysdeps[2],
parent_dir_name$2=Sysdeps[3],
dir_sep$2=Sysdeps[4],
is_dir_sep$1=Sysdeps[5],
is_relative$1=Sysdeps[6],
is_implicit$1=Sysdeps[7],
check_suffix$1=Sysdeps[8],
chop_suffix_opt$1=Sysdeps[9],
temp_dir_name$0=Sysdeps[10],
quote$1=Sysdeps[11],
quote_command$1=Sysdeps[12],
basename$2=Sysdeps[13],
dirname$2=Sysdeps[14];
function concat$4(dirname,filename)
{var l=caml_ml_string_length(dirname);
if(0 !== l && ! is_dir_sep$1(dirname,l - 1 | 0))
return cat(dirname,cat(dir_sep$2,filename));
return cat(dirname,filename)}
function chop_suffix(name,suff)
{return check_suffix$1(name,suff)
?sub$0
(name,
0,
caml_ml_string_length(name) - caml_ml_string_length(suff) | 0)
:invalid_arg(cst_Filename_chop_suffix)}
function extension_len(name)
{var i$4=caml_ml_string_length(name) - 1 | 0,i$1=i$4;
for(;;)
{if(0 <= i$1 && ! is_dir_sep$1(name,i$1))
{if(46 === caml_string_get(name,i$1))
{var i$2=i$1 - 1 | 0,i=i$2;
for(;;)
{if(0 <= i && ! is_dir_sep$1(name,i))
{if(46 === caml_string_get(name,i))
{var i$0=i - 1 | 0,i=i$0;continue}
return caml_ml_string_length(name) - i$1 | 0}
return 0}}
var i$3=i$1 - 1 | 0,i$1=i$3;
continue}
return 0}}
function extension(name)
{var l=extension_len(name);
return 0 === l?cst$127:sub$0(name,caml_ml_string_length(name) - l | 0,l)}
function chop_extension(name)
{var l=extension_len(name);
return 0 === l
?invalid_arg(cst_Filename_chop_extension)
:sub$0(name,0,caml_ml_string_length(name) - l | 0)}
function remove_extension(name)
{var l=extension_len(name);
return 0 === l?name:sub$0(name,0,caml_ml_string_length(name) - l | 0)}
var prng$0=[246,function(_eq_){return caml_call1(_ci_[2],0)}];
function temp_file_name(temp_dir,prefix,suffix)
{var
_eo_=caml_obj_tag(prng$0),
_ep_=
250 === _eo_?prng$0[1]:246 === _eo_?force_lazy_block(prng$0):prng$0,
rnd=caml_call1(_ci_[4],_ep_) & 16777215;
return concat$4(temp_dir,caml_call3(sprintf(_cX_),prefix,rnd,suffix))}
var current_temp_dir_name=[0,temp_dir_name$0];
function set_temp_dir_name(s){current_temp_dir_name[1] = s;return 0}
function get_temp_dir_name(param){return current_temp_dir_name[1]}
function temp_file(opt,prefix,suffix)
{if(opt)
var sth=opt[1],temp_dir=sth;
else
var temp_dir=current_temp_dir_name[1];
function try_name(counter)
{var counter$0=counter;
for(;;)
{var name=temp_file_name(temp_dir,prefix,suffix);
try
{runtime.caml_sys_close(caml_sys_open(name,_cY_,384));return name}
catch(e)
{e = caml_wrap_exception(e);
if(e[1] === Sys_error)
{if(1000 <= counter$0)throw e;
var counter$1=counter$0 + 1 | 0,counter$0=counter$1;
continue}
throw e}}}
return try_name(0)}
function open_temp_file(opt,_em_,_el_,prefix,suffix)
{if(opt)var sth=opt[1],mode=sth;else var mode=_cZ_;
if(_em_)var sth$0=_em_[1],perms=sth$0;else var perms=384;
if(_el_)
var sth$1=_el_[1],temp_dir=sth$1;
else
var temp_dir=current_temp_dir_name[1];
function try_name(counter)
{var counter$0=counter;
for(;;)
{var name=temp_file_name(temp_dir,prefix,suffix);
try
{var _en_=[0,name,open_gen([0,1,[0,3,[0,5,mode]]],perms,name)];
return _en_}
catch(e)
{e = caml_wrap_exception(e);
if(e[1] === Sys_error)
{if(1000 <= counter$0)throw e;
var counter$1=counter$0 + 1 | 0,counter$0=counter$1;
continue}
throw e}}}
return try_name(0)}
var
Stdlib_Filename=
[0,
current_dir_name$2,
parent_dir_name$2,
dir_sep$2,
concat$4,
is_relative$1,
is_implicit$1,
check_suffix$1,
chop_suffix,
chop_suffix_opt$1,
extension,
remove_extension,
chop_extension,
basename$2,
dirname$2,
null$3,
temp_file,
open_temp_file,
get_temp_dir_name,
set_temp_dir_name,
temp_dir_name$0,
quote$1,
quote_command$1];
caml_register_global(826,Stdlib_Filename,"Stdlib__Filename");
function add$4(x,y){return [254,x[1] + y[1],x[2] + y[2]]}
function sub$4(x,y){return [254,x[1] - y[1],x[2] - y[2]]}
function neg(x){return [254,- x[1],- x[2]]}
function conj(x){return [254,x[1],- x[2]]}
function mul(x,y)
{return [254,x[1] * y[1] - x[2] * y[2],x[1] * y[2] + x[2] * y[1]]}
function div(x,y)
{if(Math.abs(y[2]) <= Math.abs(y[1]))
{var r=y[2] / y[1],d=y[1] + r * y[2];
return [254,(x[1] + r * x[2]) / d,(x[2] - r * x[1]) / d]}
var r$0=y[1] / y[2],d$0=y[2] + r$0 * y[1];
return [254,(r$0 * x[1] + x[2]) / d$0,(r$0 * x[2] - x[1]) / d$0]}
function inv(x){return div(one$4,x)}
function norm2(x){return x[1] * x[1] + x[2] * x[2]}
function norm(x)
{var r=Math.abs(x[1]),i=Math.abs(x[2]);
if(r == 0.)return i;
if(i == 0.)return r;
if(i <= r){var q=i / r;return r * Math.sqrt(1. + q * q)}
var q$0=r / i;
return i * Math.sqrt(1. + q$0 * q$0)}
function arg(x){return Math.atan2(x[2],x[1])}
function polar(n,a){return [254,Math.cos(a) * n,Math.sin(a) * n]}
function sqrt(x)
{if(x[1] == 0. && x[2] == 0.)return _c0_;
var r=Math.abs(x[1]),i=Math.abs(x[2]);
if(i <= r)
var
q=i / r,
w=Math.sqrt(r) * Math.sqrt(0.5 * (1. + Math.sqrt(1. + q * q)));
else
var
q$0=r / i,
w=Math.sqrt(i) * Math.sqrt(0.5 * (q$0 + Math.sqrt(1. + q$0 * q$0)));
if(0. <= x[1])return [254,w,0.5 * x[2] / w];
var w$0=0. <= x[2]?w:- w;
return [254,0.5 * i / w,w$0]}
function exp(x)
{var e=Math.exp(x[1]);return [254,e * Math.cos(x[2]),e * Math.sin(x[2])]}
function log(x)
{var _ek_=Math.atan2(x[2],x[1]);return [254,Math.log(norm(x)),_ek_]}
function pow(x,y){return exp(mul(y,log(x)))}
var
Stdlib_Complex=
[0,
zero$4,
one$4,
i,
neg,
conj,
add$4,
sub$4,
mul,
inv,
div,
sqrt,
norm2,
norm,
arg,
polar,
exp,
log,
pow];
caml_register_global(827,Stdlib_Complex,"Stdlib__Complex");
var
Stdlib_ArrayLabels=
[0,
make_float,
init$3,
create_matrix,
create_matrix,
append$1,
concat$2,
sub$1,
copy$1,
fill$0,
blit$1,
to_list$1,
of_list,
iter$5,
iteri$3,
map$7,
mapi$3,
fold_left$3,
fold_left_map$0,
fold_right$2,
iter2$1,
map2$1,
for_all$3,
exists$3,
for_all2$1,
exists2$1,
mem$0,
memq$0,
find_opt$0,
find_map$1,
split$0,
combine$0,
sort,
fast_sort$0,
fast_sort$0,
to_seq$4,
to_seqi$1,
of_seq$2,
Floatarray];
caml_register_global(828,Stdlib_ArrayLabels,"Stdlib__ArrayLabels");
var
Stdlib_ListLabels=
[0,
length$1,
compare_lengths,
compare_length_with,
cons$0,
hd,
tl,
nth,
nth_opt,
rev,
init$0,
append,
rev_append,
flatten,
flatten,
equal$6,
compare$6,
iter$2,
iteri$0,
map$4,
mapi$0,
rev_map,
filter_map$0,
concat_map,
fold_left_map,
fold_left$0,
fold_right,
iter2$0,
map2$0,
rev_map2,
fold_left2$0,
fold_right2,
for_all$0,
exists$0,
for_all2$0,
exists2$0,
mem,
memq,
find$0,
find_opt,
find_map$0,
find_all,
find_all,
filteri,
partition$0,
partition_map$0,
assoc,
assoc_opt,
assq,
assq_opt,
mem_assoc,
mem_assq,
remove_assoc,
remove_assq,
split,
combine,
fast_sort,
fast_sort,
fast_sort,
sort_uniq,
merge,
to_seq$1,
of_seq];
caml_register_global(829,Stdlib_ListLabels,"Stdlib__ListLabels");
var
Stdlib_BytesLabels=
[0,
make$0,
init$1,
empty$0,
copy,
to_bytes,
of_bytes,
sub,
sub_string,
extend,
fill,
blit,
blit$0,
concat$0,
cat$0,
iter$3,
iteri$1,
map$5,
mapi$1,
fold_left$1,
fold_right$0,
for_all$1,
exists$1,
trim,
escaped$0,
index,
index_opt,
rindex,
rindex_opt,
index_from,
index_from_opt,
rindex_from,
rindex_from_opt,
contains,
contains_from,
rcontains_from,
uppercase$0,
lowercase$0,
capitalize,
uncapitalize,
uppercase_ascii$0,
lowercase_ascii$0,
capitalize_ascii,
uncapitalize_ascii,
compare$8,
equal$8,
starts_with,
ends_with,
unsafe_to_string,
unsafe_of_string,
split_on_char,
to_seq$2,
to_seqi,
of_seq$0,
get_utf_8_uchar,
set_utf_8_uchar,
is_valid_utf_8,
get_utf_16be_uchar,
set_utf_16be_uchar,
is_valid_utf_16be,
get_utf_16le_uchar,
set_utf_16le_uchar,
is_valid_utf_16le,
get_uint8,
get_int8,
get_uint16_ne,
get_uint16_be,
get_uint16_le,
get_int16_ne,
get_int16_be,
get_int16_le,
get_int32_ne,
get_int32_be,
get_int32_le,
get_int64_ne,
get_int64_be,
get_int64_le,
set_uint8,
set_int8,
set_uint16_ne,
set_int16_be,
set_int16_le,
set_int16_ne,
set_int16_be,
set_int16_le,
set_int32_ne,
set_int32_be,
set_int32_le,
set_int64_ne,
set_int64_be,
set_int64_le];
caml_register_global(830,Stdlib_BytesLabels,"Stdlib__BytesLabels");
var
Stdlib_StringLabels=
[0,
make$1,
init$2,
empty$1,
of_bytes,
to_bytes,
concat$1,
cat,
equal$9,
compare$9,
starts_with$0,
ends_with$0,
contains_from$0,
rcontains_from$0,
contains$0,
sub$0,
split_on_char$0,
map$6,
mapi$2,
fold_left$2,
fold_right$1,
for_all$2,
exists$2,
trim$0,
escaped$1,
uppercase_ascii$1,
lowercase_ascii$1,
capitalize_ascii$0,
uncapitalize_ascii$0,
iter$4,
iteri$2,
index_from$0,
index_from_opt$0,
rindex_from$0,
rindex_from_opt$0,
index$0,
index_opt$0,
rindex$0,
rindex_opt$0,
to_seq$3,
to_seqi$0,
of_seq$1,
get_utf_8_uchar$0,
is_valid_utf_8$0,
get_utf_16be_uchar$0,
is_valid_utf_16be$0,
get_utf_16le_uchar$0,
is_valid_utf_16le$0,
blit$0,
copy$0,
fill,
uppercase$1,
lowercase$1,
capitalize$0,
uncapitalize$0,
get_uint8$0,
get_int8$0,
get_uint16_ne$0,
get_uint16_be$0,
get_uint16_le$0,
get_int16_ne$0,
get_int16_be$0,
get_int16_le$0,
get_int32_ne$0,
get_int32_be$0,
get_int32_le$0,
get_int64_ne$0,
get_int64_be$0,
get_int64_le$0];
caml_register_global(831,Stdlib_StringLabels,"Stdlib__StringLabels");
var Stdlib_MoreLabels=[0,Stdlib_Hashtbl,Stdlib_Map,Stdlib_Set];
caml_register_global(832,Stdlib_MoreLabels,"Stdlib__MoreLabels");
var Stdlib_StdLabels=[0];
caml_register_global(833,Stdlib_StdLabels,"Stdlib__StdLabels");
var
float32=0,
float64=1,
int8_signed=2,
int8_unsigned=3,
int16_signed=4,
int16_unsigned=5,
int32$1=6,
int64$1=7,
int$2=8,
nativeint$1=9,
complex32=10,
complex64=11,
char$0=12;
function kind_size_in_bytes(param)
{switch(param)
{case 0:return 4;
case 1:return 8;
case 2:return 1;
case 3:return 1;
case 4:return 2;
case 5:return 2;
case 6:return 4;
case 7:return 8;
case 8:return 4;
case 9:return 4;
case 10:return 8;
case 11:return 16;
default:return 1}}
var c_layout=0,fortran_layout=1;
function cloop(arr,idx,f,col,max)
{if(col === idx.length - 1)
return caml_ba_set_generic(arr,idx,caml_call1(f,idx));
var _ei_=caml_check_bound(max,col)[1 + col] - 1 | 0,_eh_=0;
if(! (_ei_ < 0))
{var j=_eh_;
for(;;)
{caml_check_bound(idx,col)[1 + col] = j;
cloop(arr,idx,f,col + 1 | 0,max);
var _ej_=j + 1 | 0;
if(_ei_ !== j){var j=_ej_;continue}
break}}
return 0}
function floop(arr,idx,f,col,max)
{if(0 <= col)
{var _ef_=caml_check_bound(max,col)[1 + col],_ee_=1;
if(! (_ef_ < 1))
{var j=_ee_;
for(;;)
{caml_check_bound(idx,col)[1 + col] = j;
floop(arr,idx,f,col - 1 | 0,max);
var _eg_=j + 1 | 0;
if(_ef_ !== j){var j=_eg_;continue}
break}}
return 0}
return caml_ba_set_generic(arr,idx,caml_call1(f,idx))}
function init$6(kind,layout,dims,f)
{var arr=caml_ba_create(kind,layout,dims),dlen=dims.length - 1;
return 0 === dlen
?arr
:layout
?(floop(arr,caml_make_vect(dlen,1),f,dlen - 1 | 0,dims),arr)
:(cloop(arr,caml_make_vect(dlen,0),f,0,dims),arr)}
function dims(a)
{var n=caml_ba_num_dims(a),d=caml_make_vect(n,0),_eb_=n - 1 | 0,_ea_=0;
if(! (_eb_ < 0))
{var i=_ea_;
for(;;)
{var _ec_=runtime.caml_ba_dim(a,i);
caml_check_bound(d,i)[1 + i] = _ec_;
var _ed_=i + 1 | 0;
if(_eb_ !== i){var i=_ed_;continue}
break}}
return d}
function size_in_bytes(arr)
{var _d$_=fold_left$3(caml_mul,1,dims(arr));
return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_d$_)}
function create$8(kind,layout){return caml_ba_create(kind,layout,[0])}
function get$3(arr){return runtime.caml_ba_get_generic(arr,[0])}
function set$2(arr)
{var _d9_=[0];
return function(_d__){return caml_ba_set_generic(arr,_d9_,_d__)}}
function size_in_bytes$0(arr)
{return kind_size_in_bytes(caml_ba_kind(arr))}
function of_value(kind,layout,v)
{var a=create$8(kind,layout);caml_call1(set$2(a),v);return a}
function create$9(kind,layout,dim)
{return caml_ba_create(kind,layout,[0,dim])}
function size_in_bytes$1(arr)
{var _d8_=caml_ba_dim_1(arr);
return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_d8_)}
function slice(a,n)
{var match=runtime.caml_ba_layout(a);
return match?caml_ba_slice(a,[0,n]):caml_ba_slice(a,[0,n])}
function init$7(kind,layout,dim,f)
{var arr=create$9(kind,layout,dim);
if(layout)
{var _d6_=1;
if(! (dim < 1))
{var i$0=_d6_;
for(;;)
{caml_ba_set_1(arr,i$0,caml_call1(f,i$0));
var _d7_=i$0 + 1 | 0;
if(dim !== i$0){var i$0=_d7_;continue}
break}}
return arr}
var _d4_=dim - 1 | 0,_d3_=0;
if(! (_d4_ < 0))
{var i=_d3_;
for(;;)
{caml_ba_set_1(arr,i,caml_call1(f,i));
var _d5_=i + 1 | 0;
if(_d4_ !== i){var i=_d5_;continue}
break}}
return arr}
function of_array(kind,layout,data)
{var
ba=create$9(kind,layout,data.length - 1),
ofs=layout?1:0,
_d1_=data.length - 1 - 1 | 0,
_d0_=0;
if(! (_d1_ < 0))
{var i=_d0_;
for(;;)
{caml_ba_set_1(ba,i + ofs | 0,caml_check_bound(data,i)[1 + i]);
var _d2_=i + 1 | 0;
if(_d1_ !== i){var i=_d2_;continue}
break}}
return ba}
function create$10(kind,layout,dim1,dim2)
{return caml_ba_create(kind,layout,[0,dim1,dim2])}
function size_in_bytes$2(arr)
{var _dY_=caml_ba_dim_2(arr),_dZ_=caml_ba_dim_1(arr);
return caml_mul
(caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_dZ_),_dY_)}
function slice_left(a,n){return caml_ba_slice(a,[0,n])}
function slice_right(a,n){return caml_ba_slice(a,[0,n])}
function init$8(kind,layout,dim1,dim2,f)
{var arr=create$10(kind,layout,dim1,dim2);
if(layout)
{var _dU_=1;
if(! (dim2 < 1))
{var j$0=_dU_;
for(;;)
{var _dV_=1;
if(! (dim1 < 1))
{var i$0=_dV_;
for(;;)
{caml_ba_set_2(arr,i$0,j$0,caml_call2(f,i$0,j$0));
var _dX_=i$0 + 1 | 0;
if(dim1 !== i$0){var i$0=_dX_;continue}
break}}
var _dW_=j$0 + 1 | 0;
if(dim2 !== j$0){var j$0=_dW_;continue}
break}}
return arr}
var _dP_=dim1 - 1 | 0,_dO_=0;
if(! (_dP_ < 0))
{var i=_dO_;
for(;;)
{var _dR_=dim2 - 1 | 0,_dQ_=0;
if(! (_dR_ < 0))
{var j=_dQ_;
for(;;)
{caml_ba_set_2(arr,i,j,caml_call2(f,i,j));
var _dT_=j + 1 | 0;
if(_dR_ !== j){var j=_dT_;continue}
break}}
var _dS_=i + 1 | 0;
if(_dP_ !== i){var i=_dS_;continue}
break}}
return arr}
function of_array$0(kind,layout,data)
{var
dim1=data.length - 1,
dim2=0 === dim1?0:caml_check_bound(data,0)[1].length - 1,
ba=create$10(kind,layout,dim1,dim2),
ofs=layout?1:0,
_dJ_=dim1 - 1 | 0,
_dI_=0;
if(! (_dJ_ < 0))
{var i=_dI_;
for(;;)
{var row=caml_check_bound(data,i)[1 + i];
if(row.length - 1 !== dim2)
invalid_arg(cst_Bigarray_Array2_of_array_n);
var _dL_=dim2 - 1 | 0,_dK_=0;
if(! (_dL_ < 0))
{var j=_dK_;
for(;;)
{caml_ba_set_2
(ba,i + ofs | 0,j + ofs | 0,caml_check_bound(row,j)[1 + j]);
var _dN_=j + 1 | 0;
if(_dL_ !== j){var j=_dN_;continue}
break}}
var _dM_=i + 1 | 0;
if(_dJ_ !== i){var i=_dM_;continue}
break}}
return ba}
function create$11(kind,layout,dim1,dim2,dim3)
{return caml_ba_create(kind,layout,[0,dim1,dim2,dim3])}
function size_in_bytes$3(arr)
{var
_dF_=runtime.caml_ba_dim_3(arr),
_dG_=caml_ba_dim_2(arr),
_dH_=caml_ba_dim_1(arr);
return caml_mul
(caml_mul
(caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_dH_),_dG_),
_dF_)}
function slice_left_1(a,n,m){return caml_ba_slice(a,[0,n,m])}
function slice_right_1(a,n,m){return caml_ba_slice(a,[0,n,m])}
function slice_left_2(a,n){return caml_ba_slice(a,[0,n])}
function slice_right_2(a,n){return caml_ba_slice(a,[0,n])}
function init$9(kind,layout,dim1,dim2,dim3,f)
{var arr=create$11(kind,layout,dim1,dim2,dim3);
if(layout)
{var _dz_=1;
if(! (dim3 < 1))
{var k$0=_dz_;
for(;;)
{var _dA_=1;
if(! (dim2 < 1))
{var j$0=_dA_;
for(;;)
{var _dC_=1;
if(! (dim1 < 1))
{var i$0=_dC_;
for(;;)
{caml_ba_set_3(arr,i$0,j$0,k$0,caml_call3(f,i$0,j$0,k$0));
var _dE_=i$0 + 1 | 0;
if(dim1 !== i$0){var i$0=_dE_;continue}
break}}
var _dD_=j$0 + 1 | 0;
if(dim2 !== j$0){var j$0=_dD_;continue}
break}}
var _dB_=k$0 + 1 | 0;
if(dim3 !== k$0){var k$0=_dB_;continue}
break}}
return arr}
var _dr_=dim1 - 1 | 0,_dq_=0;
if(! (_dr_ < 0))
{var i=_dq_;
for(;;)
{var _dt_=dim2 - 1 | 0,_ds_=0;
if(! (_dt_ < 0))
{var j=_ds_;
for(;;)
{var _dw_=dim3 - 1 | 0,_dv_=0;
if(! (_dw_ < 0))
{var k=_dv_;
for(;;)
{caml_ba_set_3(arr,i,j,k,caml_call3(f,i,j,k));
var _dy_=k + 1 | 0;
if(_dw_ !== k){var k=_dy_;continue}
break}}
var _dx_=j + 1 | 0;
if(_dt_ !== j){var j=_dx_;continue}
break}}
var _du_=i + 1 | 0;
if(_dr_ !== i){var i=_du_;continue}
break}}
return arr}
function of_array$1(kind,layout,data)
{var
dim1=data.length - 1,
dim2=0 === dim1?0:caml_check_bound(data,0)[1].length - 1,
dim3=
0 === dim2
?0
:caml_check_bound(caml_check_bound(data,0)[1],0)[1].length - 1,
ba=create$11(kind,layout,dim1,dim2,dim3),
ofs=layout?1:0,
_di_=dim1 - 1 | 0,
_dh_=0;
if(! (_di_ < 0))
{var i=_dh_;
for(;;)
{var row=caml_check_bound(data,i)[1 + i];
if(row.length - 1 !== dim2)
invalid_arg(cst_Bigarray_Array3_of_array_n);
var _dk_=dim2 - 1 | 0,_dj_=0;
if(! (_dk_ < 0))
{var j=_dj_;
for(;;)
{var col=caml_check_bound(row,j)[1 + j];
if(col.length - 1 !== dim3)
invalid_arg(cst_Bigarray_Array3_of_array_n$0);
var _dn_=dim3 - 1 | 0,_dm_=0;
if(! (_dn_ < 0))
{var k=_dm_;
for(;;)
{caml_ba_set_3
(ba,
i + ofs | 0,
j + ofs | 0,
k + ofs | 0,
caml_check_bound(col,k)[1 + k]);
var _dp_=k + 1 | 0;
if(_dn_ !== k){var k=_dp_;continue}
break}}
var _do_=j + 1 | 0;
if(_dk_ !== j){var j=_do_;continue}
break}}
var _dl_=i + 1 | 0;
if(_di_ !== i){var i=_dl_;continue}
break}}
return ba}
function array0_of_genarray(a)
{return 0 === caml_ba_num_dims(a)
?a
:invalid_arg(cst_Bigarray_array0_of_genarra)}
function array1_of_genarray(a)
{return 1 === caml_ba_num_dims(a)
?a
:invalid_arg(cst_Bigarray_array1_of_genarra)}
function array2_of_genarray(a)
{return 2 === caml_ba_num_dims(a)
?a
:invalid_arg(cst_Bigarray_array2_of_genarra)}
function array3_of_genarray(a)
{return 3 === caml_ba_num_dims(a)
?a
:invalid_arg(cst_Bigarray_array3_of_genarra)}
function reshape_0(a){return caml_ba_reshape(a,[0])}
function reshape_1(a,dim1){return caml_ba_reshape(a,[0,dim1])}
function reshape_2(a,dim1,dim2){return caml_ba_reshape(a,[0,dim1,dim2])}
function reshape_3(a,dim1,dim2,dim3)
{return caml_ba_reshape(a,[0,dim1,dim2,dim3])}
var
Stdlib_Bigarray=
[0,
float32,
float64,
complex32,
complex64,
int8_signed,
int8_unsigned,
int16_signed,
int16_unsigned,
int$2,
int32$1,
int64$1,
nativeint$1,
char$0,
kind_size_in_bytes,
c_layout,
fortran_layout,
[0,init$6,dims,size_in_bytes],
[0,
create$8,
of_value,
caml_ba_change_layout,
size_in_bytes$0,
get$3,
set$2,
of_value],
[0,
create$9,
init$7,
caml_ba_change_layout,
size_in_bytes$1,
slice,
of_array],
[0,
create$10,
init$8,
caml_ba_change_layout,
size_in_bytes$2,
slice_left,
slice_right,
of_array$0],
[0,
create$11,
init$9,
caml_ba_change_layout,
size_in_bytes$3,
slice_left_1,
slice_right_1,
slice_left_2,
slice_right_2,
of_array$1],
array0_of_genarray,
array1_of_genarray,
array2_of_genarray,
array3_of_genarray,
caml_ba_reshape,
reshape_0,
reshape_1,
reshape_2,
reshape_3];
caml_register_global(834,Stdlib_Bigarray,"Stdlib__Bigarray");
function with_open(openfun,s,f)
{var ic=caml_call1(openfun,s);
function _dg_(param){return caml_call1(f,ic)}
return protect(function(param){return close_noerr$0(ic)},_dg_)}
function with_open_bin(s,f){return with_open(open_bin$0,s,f)}
function with_open_text(s,f){return with_open(open_text$0,s,f)}
function with_open_gen(flags,perm,s,f)
{return with_open(function(_df_){return open_gen$0(flags,perm,_df_)},s,f)}
var seek=_m_[4],pos=_m_[5],length$11=_m_[6];
function input_char$0(ic)
{try
{var c=caml_ml_input_char(ic)}
catch(_de_)
{_de_ = caml_wrap_exception(_de_);
if(_de_ === End_of_file)return 0;
throw _de_}
return [0,c]}
function input_byte$0(ic)
{try
{var n=caml_ml_input_char(ic)}
catch(_dd_)
{_dd_ = caml_wrap_exception(_dd_);
if(_dd_ === End_of_file)return 0;
throw _dd_}
return [0,n]}
function input_line$0(ic)
{try
{var s=input_line(ic)}
catch(_dc_)
{_dc_ = caml_wrap_exception(_dc_);
if(_dc_ === End_of_file)return 0;
throw _dc_}
return [0,s]}
function really_input$0(ic,buf,pos,len)
{try
{really_input(ic,buf,pos,len);return _c1_}
catch(_db_)
{_db_ = caml_wrap_exception(_db_);
if(_db_ === End_of_file)return 0;
throw _db_}}
function really_input_string$0(ic,len)
{try
{var s=really_input_string(ic,len)}
catch(_da_)
{_da_ = caml_wrap_exception(_da_);
if(_da_ === End_of_file)return 0;
throw _da_}
return [0,s]}
function read_upto(ic,buf,ofs,len)
{var ofs$0=ofs,len$0=len;
for(;;)
{if(0 !== len$0)
{var r=input(ic,buf,ofs$0,len$0);
if(0 !== r)
{var
len$1=len$0 - r | 0,
ofs$1=ofs$0 + r | 0,
ofs$0=ofs$1,
len$0=len$1;
continue}}
return ofs$0 - ofs | 0}}
function ensure(buf,ofs,n)
{var len=caml_ml_bytes_length(buf);
if((ofs + n | 0) <= len)return buf;
var new_len=[0,len];
for(;;)
{if(new_len[1] < (ofs + n | 0))
{new_len[1] = (2 * new_len[1] | 0) + 1 | 0;continue}
var
new_len$0=new_len[1],
new_len$1=
new_len$0 <= max_string_length
?new_len$0
:ofs < max_string_length
?max_string_length
:failwith(cst_In_channel_input_all_chann),
new_buf=caml_create_bytes(new_len$1);
blit(buf,0,new_buf,0,ofs);
return new_buf}}
function input_all(ic)
{var chunk_size=65536;
try
{var
_c8_=caml_ml_pos_in(ic),
_c9_=caml_ml_channel_size(ic) - _c8_ | 0,
initial_size=_c9_}
catch(_c$_)
{_c$_ = caml_wrap_exception(_c$_);
if(_c$_[1] !== Sys_error)throw _c$_;
var initial_size=-1}
var
initial_size$0=0 <= initial_size?initial_size:chunk_size,
initial_size$1=
initial_size$0 <= max_string_length?initial_size$0:max_string_length,
buf=caml_create_bytes(initial_size$1),
nread=read_upto(ic,buf,0,initial_size$1);
if(nread < initial_size$1)return sub_string(buf,0,nread);
try
{var c=caml_ml_input_char(ic)}
catch(_c__)
{_c__ = caml_wrap_exception(_c__);
if(_c__ === End_of_file)return caml_string_of_bytes(buf);
throw _c__}
function loop(buf,ofs)
{var buf$0=buf,ofs$0=ofs;
for(;;)
{var
buf$1=ensure(buf$0,ofs$0,chunk_size),
rem=caml_ml_bytes_length(buf$1) - ofs$0 | 0,
r=read_upto(ic,buf$1,ofs$0,rem);
if(r < rem)return sub_string(buf$1,0,ofs$0 + r | 0);
var ofs$1=ofs$0 + rem | 0,buf$0=buf$1,ofs$0=ofs$1;
continue}}
var buf$0=ensure(buf,nread,65537);
caml_bytes_set(buf$0,nread,c);
return loop(buf$0,nread + 1 | 0)}
var
Stdlib_In_channel=
[0,
stdin,
open_bin$0,
open_text$0,
open_gen$0,
with_open_bin,
with_open_text,
with_open_gen,
seek,
pos,
length$11,
close$0,
close_noerr$0,
input_char$0,
input_byte$0,
input_line$0,
input,
really_input$0,
really_input_string$0,
input_all,
set_binary_mode];
caml_register_global(835,Stdlib_In_channel,"Stdlib__In_channel");
function with_open$0(openfun,s,f)
{var oc=caml_call1(openfun,s);
function _c7_(param){return caml_call1(f,oc)}
return protect(function(param){return close_noerr(oc)},_c7_)}
function with_open_bin$0(s,f){return with_open$0(open_bin,s,f)}
function with_open_text$0(s,f){return with_open$0(open_text,s,f)}
function with_open_gen$0(flags,perm,s,f)
{return with_open$0(function(_c6_){return open_gen(flags,perm,_c6_)},s,f)}
var
seek$0=_m_[1],
pos$0=_m_[2],
length$12=_m_[3],
Stdlib_Out_channel=
[0,
stdout,
stderr,
open_bin,
open_text,
open_gen,
with_open_bin$0,
with_open_text$0,
with_open_gen$0,
seek$0,
pos$0,
length$12,
close,
close_noerr,
flush,
flush_all,
output_char,
output_byte,
output_string,
output_bytes,
output,
output_substring,
set_binary_mode$0,
runtime.caml_ml_set_buffered,
runtime.caml_ml_is_buffered];
caml_register_global(836,Stdlib_Out_channel,"Stdlib__Out_channel");
return}
(globalThis));
//# 1 "../inventaire_linge/.inventaire_linge.objs/inventaire_linge.cma.js"
(function(globalThis)
{"use strict";
var
runtime=globalThis.jsoo_runtime,
caml_list_of_js_array=runtime.caml_list_of_js_array,
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
cst_Chambre_1=caml_string_of_jsbytes("Chambre 1"),
cst_Chambre_2=caml_string_of_jsbytes("Chambre 2"),
cst_Chambre_3=caml_string_of_jsbytes("Chambre 3"),
cst_S_jour=caml_string_of_jsbytes("S\xc3\xa9jour"),
cst_Salle_de_bains_1=caml_string_of_jsbytes("Salle de bains 1"),
cst_Salle_de_bains_2=caml_string_of_jsbytes("Salle de bains 2"),
cst_ch1=caml_string_of_jsbytes("ch1"),
cst_ch2=caml_string_of_jsbytes("ch2"),
cst_ch3=caml_string_of_jsbytes("ch3"),
cst_sj=caml_string_of_jsbytes("sj"),
cst_sdb1=caml_string_of_jsbytes("sdb1"),
cst_sdb2=caml_string_of_jsbytes("sdb2"),
tarif=caml_string_of_jsbytes("2022-2023"),
destinataires=
caml_string_of_jsbytes("dubuval@gmail.com,grange.guy@outlook.fr"),
pieces=[0,0,[0,1,[0,2,[0,3,[0,4,[0,5,0]]]]]],
fournitures=
caml_list_of_js_array
([[0,
caml_string_of_jsbytes("dh80"),
caml_string_of_jsbytes("Drap housse 80 cm"),
4,
[0,[0,0,2],0]],
[0,
caml_string_of_jsbytes("dh90"),
caml_string_of_jsbytes("Drap housse 90 cm"),
4,
[0,[0,2,4],0]],
[0,
caml_string_of_jsbytes("dh140"),
caml_string_of_jsbytes("Drap housse 140 cm"),
7,
[0,[0,1,1],[0,[0,3,1],0]]],
[0,
caml_string_of_jsbytes("dhbb"),
caml_string_of_jsbytes("Drap housse b\xc3\xa9b\xc3\xa9"),
2,
[0,[0,0,1],0]],
[0,
caml_string_of_jsbytes("hc1p"),
caml_string_of_jsbytes("Housse de couette 1 place"),
7,
[0,[0,0,2],[0,[0,2,4],0]]],
[0,
caml_string_of_jsbytes("hc2p"),
caml_string_of_jsbytes("Housse de couette 2 places"),
10,
[0,[0,1,1],[0,[0,3,1],0]]],
[0,
caml_string_of_jsbytes("hcbb"),
caml_string_of_jsbytes("Housse de couette b\xc3\xa9b\xc3\xa9"),
3,
[0,[0,0,1],0]],
[0,
caml_string_of_jsbytes("litbb"),
caml_string_of_jsbytes("Lit b\xc3\xa9b\xc3\xa9"),
8,
[0,[0,0,1],0]],
[0,
caml_string_of_jsbytes("pm80"),
caml_string_of_jsbytes("Prot\xc3\xa8ge matelas 80 cm"),
0,
[0,[0,0,2],0]],
[0,
caml_string_of_jsbytes("pm90"),
caml_string_of_jsbytes("Prot\xc3\xa8ge matelas 90 cm"),
0,
[0,[0,2,4],0]],
[0,
caml_string_of_jsbytes("pm140"),
caml_string_of_jsbytes("Prot\xc3\xa8ge matelas 140 cm"),
0,
[0,[0,1,1],[0,[0,3,1],0]]],
[0,
caml_string_of_jsbytes("pmbb"),
caml_string_of_jsbytes("Prot\xc3\xa8ge matelas b\xc3\xa9b\xc3\xa9"),
0,
[0,[0,0,1],0]],
[0,
caml_string_of_jsbytes("taie"),
caml_string_of_jsbytes("Taie d\xe2\x80\x99oreiller"),
1,
[0,[0,0,4],[0,[0,1,4],[0,[0,2,8],[0,[0,3,4],0]]]]],
[0,
caml_string_of_jsbytes("douche"),
caml_string_of_jsbytes("Drap de douche"),
2,
[0,[0,4,3],[0,[0,5,3],0]]],
[0,
caml_string_of_jsbytes("gant"),
caml_string_of_jsbytes("Gant de toilette"),
1,
[0,[0,4,4],[0,[0,5,6],0]]],
[0,
caml_string_of_jsbytes("serv"),
caml_string_of_jsbytes("Serviette de toilette"),
1,
[0,[0,4,4],[0,[0,5,6],0]]],
[0,
caml_string_of_jsbytes("inv"),
caml_string_of_jsbytes("Serviette invit\xc3\xa9s"),
1,
[0,[0,4,1],[0,[0,5,1],0]]],
[0,
caml_string_of_jsbytes("tapis"),
caml_string_of_jsbytes("Tapis de douche"),
2,
[0,[0,4,2],[0,[0,5,2],0]]],
[0,
caml_string_of_jsbytes("mains"),
caml_string_of_jsbytes("Essuie-mains"),
1,
[0,[0,3,2],0]],
[0,
caml_string_of_jsbytes("table"),
caml_string_of_jsbytes("Serviettes de table"),
1,
[0,[0,3,10],0]],
[0,
caml_string_of_jsbytes("torchon"),
caml_string_of_jsbytes("Torchons \xc3\xa0 vaisselle"),
1,
[0,[0,3,2],0]],
[0,
caml_string_of_jsbytes("microfibre"),
caml_string_of_jsbytes("Torchons microfibre"),
0,
[0,[0,4,2],[0,[0,5,2],[0,[0,3,2],0]]]]]);
function short_string_of_piece(param)
{switch(param)
{case 0:return cst_ch1;
case 1:return cst_ch2;
case 2:return cst_ch3;
case 3:return cst_sj;
case 4:return cst_sdb1;
default:return cst_sdb2}}
function long_string_of_piece(param)
{switch(param)
{case 0:return cst_Chambre_1;
case 1:return cst_Chambre_2;
case 2:return cst_Chambre_3;
case 3:return cst_S_jour;
case 4:return cst_Salle_de_bains_1;
default:return cst_Salle_de_bains_2}}
var
Inventaire_linge=
[0,
tarif,
destinataires,
pieces,
short_string_of_piece,
long_string_of_piece,
fournitures];
runtime.caml_register_global(16,Inventaire_linge,"Inventaire_linge");
return}
(globalThis));
//# 1 "../.js/js_of_ocaml-compiler.runtime/jsoo_runtime.cma.js"
(function(globalThis)
{"use strict";
var
runtime=globalThis.jsoo_runtime,
caml_exn_with_js_backtrace=runtime.caml_exn_with_js_backtrace,
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes;
function caml_call2(f,a0,a1)
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
var
global_data=runtime.caml_get_global_data(),
cst_Jsoo_runtime_Error_Exn=
caml_string_of_jsbytes("Jsoo_runtime.Error.Exn"),
cst_jsError=caml_string_of_jsbytes("jsError"),
Stdlib_Callback=global_data.Stdlib__Callback,
Js=[0],
Sys=[0],
Exn=[248,cst_Jsoo_runtime_Error_Exn,runtime.caml_fresh_oo_id(0)];
caml_call2(Stdlib_Callback[2],cst_jsError,[0,Exn,[0]]);
function raise(exn){throw exn}
var
Error=
[0,
raise,
caml_exn_with_js_backtrace,
runtime.caml_js_error_option_of_exception,
Exn],
For_compatibility_only=[0],
Bigstring=[0],
Typed_array=[0,Bigstring],
Int64=[0],
Jsoo_runtime=[0,Js,Sys,Error,For_compatibility_only,Typed_array,Int64];
runtime.caml_register_global(4,Jsoo_runtime,"Jsoo_runtime");
return}
(globalThis));
//# 1 "../.js/js_of_ocaml/js_of_ocaml.cma.js"
(function(globalThis)
{"use strict";
var
jsoo_exports=typeof module === "object" && module.exports || globalThis,
runtime=globalThis.jsoo_runtime,
caml_float_of_string=runtime.caml_float_of_string,
caml_fresh_oo_id=runtime.caml_fresh_oo_id,
caml_int_of_string=runtime.caml_int_of_string,
caml_js_from_array=runtime.caml_js_from_array,
caml_js_get=runtime.caml_js_get,
caml_js_html_escape=runtime.caml_js_html_escape,
caml_js_set=runtime.caml_js_set,
caml_js_wrap_callback=runtime.caml_js_wrap_callback,
caml_js_wrap_meth_callback=runtime.caml_js_wrap_meth_callback,
caml_jsbytes_of_string=runtime.caml_jsbytes_of_string,
caml_jsstring_of_string=runtime.caml_jsstring_of_string,
caml_list_of_js_array=runtime.caml_list_of_js_array,
caml_ml_string_length=runtime.caml_ml_string_length,
caml_register_global=runtime.caml_register_global,
caml_string_compare=runtime.caml_string_compare,
caml_string_notequal=runtime.caml_string_notequal,
caml_string_of_array=runtime.caml_string_of_array,
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
caml_string_of_jsstring=runtime.caml_string_of_jsstring,
caml_wrap_exception=runtime.caml_wrap_exception;
function caml_call1(f,a0)
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
function caml_call2(f,a0,a1)
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
function caml_call3(f,a0,a1,a2)
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
function caml_call4(f,a0,a1,a2,a3)
{return f.length == 4
?f(a0,a1,a2,a3)
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
function caml_call5(f,a0,a1,a2,a3,a4)
{return f.length == 5
?f(a0,a1,a2,a3,a4)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
var
global_data=runtime.caml_get_global_data(),
cst_parseFloat=caml_string_of_jsbytes("parseFloat"),
cst_parseInt=caml_string_of_jsbytes("parseInt"),
cst_can_t_retrieve_file_name_n=
caml_string_of_jsbytes("can't retrieve file name: not implemented"),
cst_endings=caml_string_of_jsbytes("endings"),
cst_type=caml_string_of_jsbytes("type"),
cst_loadstart=caml_string_of_jsbytes("loadstart"),
cst_progress=caml_string_of_jsbytes("progress"),
cst_abort=caml_string_of_jsbytes("abort"),
cst_error=caml_string_of_jsbytes("error"),
cst_load=caml_string_of_jsbytes("load"),
cst_loadend=caml_string_of_jsbytes("loadend"),
cst_a$1=caml_string_of_jsbytes("a"),
cst_area$1=caml_string_of_jsbytes("area"),
cst_audio$1=caml_string_of_jsbytes("audio"),
cst_base$1=caml_string_of_jsbytes("base"),
cst_blockquote$1=caml_string_of_jsbytes("blockquote"),
cst_body$1=caml_string_of_jsbytes("body"),
cst_br$1=caml_string_of_jsbytes("br"),
cst_button$1=caml_string_of_jsbytes("button"),
cst_canvas$1=caml_string_of_jsbytes("canvas"),
cst_caption$1=caml_string_of_jsbytes("caption"),
cst_col$1=caml_string_of_jsbytes("col"),
cst_colgroup$1=caml_string_of_jsbytes("colgroup"),
cst_del$1=caml_string_of_jsbytes("del"),
cst_div$1=caml_string_of_jsbytes("div"),
cst_dl$1=caml_string_of_jsbytes("dl"),
cst_embed$1=caml_string_of_jsbytes("embed"),
cst_fieldset$1=caml_string_of_jsbytes("fieldset"),
cst_form$1=caml_string_of_jsbytes("form"),
cst_frame$1=caml_string_of_jsbytes("frame"),
cst_frameset$1=caml_string_of_jsbytes("frameset"),
cst_h1$1=caml_string_of_jsbytes("h1"),
cst_h2$1=caml_string_of_jsbytes("h2"),
cst_h3$1=caml_string_of_jsbytes("h3"),
cst_h4$1=caml_string_of_jsbytes("h4"),
cst_h5$1=caml_string_of_jsbytes("h5"),
cst_h6$1=caml_string_of_jsbytes("h6"),
cst_head$1=caml_string_of_jsbytes("head"),
cst_hr$1=caml_string_of_jsbytes("hr"),
cst_html$1=caml_string_of_jsbytes("html"),
cst_iframe$1=caml_string_of_jsbytes("iframe"),
cst_img$1=caml_string_of_jsbytes("img"),
cst_input$2=caml_string_of_jsbytes("input"),
cst_ins$1=caml_string_of_jsbytes("ins"),
cst_label$1=caml_string_of_jsbytes("label"),
cst_legend$1=caml_string_of_jsbytes("legend"),
cst_li$1=caml_string_of_jsbytes("li"),
cst_link$1=caml_string_of_jsbytes("link"),
cst_map$1=caml_string_of_jsbytes("map"),
cst_meta$1=caml_string_of_jsbytes("meta"),
cst_object$1=caml_string_of_jsbytes("object"),
cst_ol$1=caml_string_of_jsbytes("ol"),
cst_optgroup$1=caml_string_of_jsbytes("optgroup"),
cst_option$1=caml_string_of_jsbytes("option"),
cst_p$1=caml_string_of_jsbytes("p"),
cst_param$1=caml_string_of_jsbytes("param"),
cst_pre$1=caml_string_of_jsbytes("pre"),
cst_q$1=caml_string_of_jsbytes("q"),
cst_script$1=caml_string_of_jsbytes("script"),
cst_select$2=caml_string_of_jsbytes("select"),
cst_style$1=caml_string_of_jsbytes("style"),
cst_table$1=caml_string_of_jsbytes("table"),
cst_tbody$1=caml_string_of_jsbytes("tbody"),
cst_td$1=caml_string_of_jsbytes("td"),
cst_textarea$1=caml_string_of_jsbytes("textarea"),
cst_tfoot$1=caml_string_of_jsbytes("tfoot"),
cst_th$1=caml_string_of_jsbytes("th"),
cst_thead$1=caml_string_of_jsbytes("thead"),
cst_title$1=caml_string_of_jsbytes("title"),
cst_tr$1=caml_string_of_jsbytes("tr"),
cst_ul$1=caml_string_of_jsbytes("ul"),
cst_video$1=caml_string_of_jsbytes("video"),
cst_KeyH=caml_string_of_jsbytes("KeyH"),
cst_Digit6=caml_string_of_jsbytes("Digit6"),
cst_BrowserRefresh=caml_string_of_jsbytes("BrowserRefresh"),
cst_Backslash=caml_string_of_jsbytes("Backslash"),
cst_AltLeft=caml_string_of_jsbytes("AltLeft"),
cst_AltRight=caml_string_of_jsbytes("AltRight"),
cst_ArrowDown=caml_string_of_jsbytes("ArrowDown"),
cst_ArrowLeft=caml_string_of_jsbytes("ArrowLeft"),
cst_ArrowRight=caml_string_of_jsbytes("ArrowRight"),
cst_ArrowUp=caml_string_of_jsbytes("ArrowUp"),
cst_Backquote=caml_string_of_jsbytes("Backquote"),
cst_Backspace=caml_string_of_jsbytes("Backspace"),
cst_BracketLeft=caml_string_of_jsbytes("BracketLeft"),
cst_BracketRight=caml_string_of_jsbytes("BracketRight"),
cst_BrowserBack=caml_string_of_jsbytes("BrowserBack"),
cst_BrowserFavorites=caml_string_of_jsbytes("BrowserFavorites"),
cst_BrowserForward=caml_string_of_jsbytes("BrowserForward"),
cst_BrowserHome=caml_string_of_jsbytes("BrowserHome"),
cst_Delete=caml_string_of_jsbytes("Delete"),
cst_BrowserSearch=caml_string_of_jsbytes("BrowserSearch"),
cst_BrowserStop=caml_string_of_jsbytes("BrowserStop"),
cst_CapsLock=caml_string_of_jsbytes("CapsLock"),
cst_Comma=caml_string_of_jsbytes("Comma"),
cst_ContextMenu=caml_string_of_jsbytes("ContextMenu"),
cst_ControlLeft=caml_string_of_jsbytes("ControlLeft"),
cst_ControlRight=caml_string_of_jsbytes("ControlRight"),
cst_Digit0=caml_string_of_jsbytes("Digit0"),
cst_Digit1=caml_string_of_jsbytes("Digit1"),
cst_Digit2=caml_string_of_jsbytes("Digit2"),
cst_Digit3=caml_string_of_jsbytes("Digit3"),
cst_Digit4=caml_string_of_jsbytes("Digit4"),
cst_Digit5=caml_string_of_jsbytes("Digit5"),
cst_F6=caml_string_of_jsbytes("F6"),
cst_F1=caml_string_of_jsbytes("F1"),
cst_Digit7=caml_string_of_jsbytes("Digit7"),
cst_Digit8=caml_string_of_jsbytes("Digit8"),
cst_Digit9=caml_string_of_jsbytes("Digit9"),
cst_End=caml_string_of_jsbytes("End"),
cst_Enter=caml_string_of_jsbytes("Enter"),
cst_Equal=caml_string_of_jsbytes("Equal"),
cst_Escape=caml_string_of_jsbytes("Escape"),
cst_F10=caml_string_of_jsbytes("F10"),
cst_F11=caml_string_of_jsbytes("F11"),
cst_F12=caml_string_of_jsbytes("F12"),
cst_F2=caml_string_of_jsbytes("F2"),
cst_F3=caml_string_of_jsbytes("F3"),
cst_F4=caml_string_of_jsbytes("F4"),
cst_F5=caml_string_of_jsbytes("F5"),
cst_KeyA=caml_string_of_jsbytes("KeyA"),
cst_F7=caml_string_of_jsbytes("F7"),
cst_F8=caml_string_of_jsbytes("F8"),
cst_F9=caml_string_of_jsbytes("F9"),
cst_Home=caml_string_of_jsbytes("Home"),
cst_Insert=caml_string_of_jsbytes("Insert"),
cst_IntlBackslash=caml_string_of_jsbytes("IntlBackslash"),
cst_IntlYen=caml_string_of_jsbytes("IntlYen"),
cst_KeyB=caml_string_of_jsbytes("KeyB"),
cst_KeyC=caml_string_of_jsbytes("KeyC"),
cst_KeyD=caml_string_of_jsbytes("KeyD"),
cst_KeyE=caml_string_of_jsbytes("KeyE"),
cst_KeyF=caml_string_of_jsbytes("KeyF"),
cst_KeyG=caml_string_of_jsbytes("KeyG"),
cst_Numpad4=caml_string_of_jsbytes("Numpad4"),
cst_KeyX=caml_string_of_jsbytes("KeyX"),
cst_KeyP=caml_string_of_jsbytes("KeyP"),
cst_KeyI=caml_string_of_jsbytes("KeyI"),
cst_KeyJ=caml_string_of_jsbytes("KeyJ"),
cst_KeyK=caml_string_of_jsbytes("KeyK"),
cst_KeyL=caml_string_of_jsbytes("KeyL"),
cst_KeyM=caml_string_of_jsbytes("KeyM"),
cst_KeyN=caml_string_of_jsbytes("KeyN"),
cst_KeyO=caml_string_of_jsbytes("KeyO"),
cst_KeyQ=caml_string_of_jsbytes("KeyQ"),
cst_KeyR=caml_string_of_jsbytes("KeyR"),
cst_KeyS=caml_string_of_jsbytes("KeyS"),
cst_KeyT=caml_string_of_jsbytes("KeyT"),
cst_KeyU=caml_string_of_jsbytes("KeyU"),
cst_KeyV=caml_string_of_jsbytes("KeyV"),
cst_KeyW=caml_string_of_jsbytes("KeyW"),
cst_MetaRight=caml_string_of_jsbytes("MetaRight"),
cst_KeyY=caml_string_of_jsbytes("KeyY"),
cst_KeyZ=caml_string_of_jsbytes("KeyZ"),
cst_MediaPlayPause=caml_string_of_jsbytes("MediaPlayPause"),
cst_MediaStop=caml_string_of_jsbytes("MediaStop"),
cst_MediaTrackNext=caml_string_of_jsbytes("MediaTrackNext"),
cst_MediaTrackPrevious=caml_string_of_jsbytes("MediaTrackPrevious"),
cst_MetaLeft=caml_string_of_jsbytes("MetaLeft"),
cst_Minus=caml_string_of_jsbytes("Minus"),
cst_NumLock=caml_string_of_jsbytes("NumLock"),
cst_Numpad0=caml_string_of_jsbytes("Numpad0"),
cst_Numpad1=caml_string_of_jsbytes("Numpad1"),
cst_Numpad2=caml_string_of_jsbytes("Numpad2"),
cst_Numpad3=caml_string_of_jsbytes("Numpad3"),
cst_PageUp=caml_string_of_jsbytes("PageUp"),
cst_NumpadDivide=caml_string_of_jsbytes("NumpadDivide"),
cst_Numpad5=caml_string_of_jsbytes("Numpad5"),
cst_Numpad6=caml_string_of_jsbytes("Numpad6"),
cst_Numpad7=caml_string_of_jsbytes("Numpad7"),
cst_Numpad8=caml_string_of_jsbytes("Numpad8"),
cst_Numpad9=caml_string_of_jsbytes("Numpad9"),
cst_NumpadAdd=caml_string_of_jsbytes("NumpadAdd"),
cst_NumpadDecimal=caml_string_of_jsbytes("NumpadDecimal"),
cst_NumpadEnter=caml_string_of_jsbytes("NumpadEnter"),
cst_NumpadEqual=caml_string_of_jsbytes("NumpadEqual"),
cst_NumpadMultiply=caml_string_of_jsbytes("NumpadMultiply"),
cst_NumpadSubtract=caml_string_of_jsbytes("NumpadSubtract"),
cst_OSLeft=caml_string_of_jsbytes("OSLeft"),
cst_OSRight=caml_string_of_jsbytes("OSRight"),
cst_PageDown=caml_string_of_jsbytes("PageDown"),
cst_ShiftRight=caml_string_of_jsbytes("ShiftRight"),
cst_Pause=caml_string_of_jsbytes("Pause"),
cst_Period=caml_string_of_jsbytes("Period"),
cst_PrintScreen=caml_string_of_jsbytes("PrintScreen"),
cst_Quote=caml_string_of_jsbytes("Quote"),
cst_ScrollLock=caml_string_of_jsbytes("ScrollLock"),
cst_Semicolon=caml_string_of_jsbytes("Semicolon"),
cst_ShiftLeft=caml_string_of_jsbytes("ShiftLeft"),
cst_Slash=caml_string_of_jsbytes("Slash"),
cst_Space=caml_string_of_jsbytes("Space"),
cst_Tab=caml_string_of_jsbytes("Tab"),
cst_VolumeDown=caml_string_of_jsbytes("VolumeDown"),
cst_VolumeMute=caml_string_of_jsbytes("VolumeMute"),
cst_VolumeUp=caml_string_of_jsbytes("VolumeUp"),
cst_mouseout$0=caml_string_of_jsbytes("mouseout"),
cst_mouseover$0=caml_string_of_jsbytes("mouseover"),
cst_video$0=caml_string_of_jsbytes("video"),
cst_audio$0=caml_string_of_jsbytes("audio"),
cst_ul$0=caml_string_of_jsbytes("ul"),
cst_tr$0=caml_string_of_jsbytes("tr"),
cst_title$0=caml_string_of_jsbytes("title"),
cst_thead$0=caml_string_of_jsbytes("thead"),
cst_th$0=caml_string_of_jsbytes("th"),
cst_tfoot$0=caml_string_of_jsbytes("tfoot"),
cst_textarea$0=caml_string_of_jsbytes("textarea"),
cst_td$0=caml_string_of_jsbytes("td"),
cst_tbody$0=caml_string_of_jsbytes("tbody"),
cst_table$0=caml_string_of_jsbytes("table"),
cst_style$0=caml_string_of_jsbytes("style"),
cst_select$1=caml_string_of_jsbytes("select"),
cst_script$0=caml_string_of_jsbytes("script"),
cst_q$0=caml_string_of_jsbytes("q"),
cst_pre$0=caml_string_of_jsbytes("pre"),
cst_param$0=caml_string_of_jsbytes("param"),
cst_p$0=caml_string_of_jsbytes("p"),
cst_option$0=caml_string_of_jsbytes("option"),
cst_optgroup$0=caml_string_of_jsbytes("optgroup"),
cst_ol$0=caml_string_of_jsbytes("ol"),
cst_object$0=caml_string_of_jsbytes("object"),
cst_meta$0=caml_string_of_jsbytes("meta"),
cst_map$0=caml_string_of_jsbytes("map"),
cst_link$0=caml_string_of_jsbytes("link"),
cst_li$0=caml_string_of_jsbytes("li"),
cst_legend$0=caml_string_of_jsbytes("legend"),
cst_label$0=caml_string_of_jsbytes("label"),
cst_ins$0=caml_string_of_jsbytes("ins"),
cst_input$1=caml_string_of_jsbytes("input"),
cst_img$0=caml_string_of_jsbytes("img"),
cst_iframe$0=caml_string_of_jsbytes("iframe"),
cst_html$0=caml_string_of_jsbytes("html"),
cst_hr$0=caml_string_of_jsbytes("hr"),
cst_head$0=caml_string_of_jsbytes("head"),
cst_h6$0=caml_string_of_jsbytes("h6"),
cst_h5$0=caml_string_of_jsbytes("h5"),
cst_h4$0=caml_string_of_jsbytes("h4"),
cst_h3$0=caml_string_of_jsbytes("h3"),
cst_h2$0=caml_string_of_jsbytes("h2"),
cst_h1$0=caml_string_of_jsbytes("h1"),
cst_frame$0=caml_string_of_jsbytes("frame"),
cst_frameset$0=caml_string_of_jsbytes("frameset"),
cst_form$0=caml_string_of_jsbytes("form"),
cst_embed$0=caml_string_of_jsbytes("embed"),
cst_fieldset$0=caml_string_of_jsbytes("fieldset"),
cst_dl$0=caml_string_of_jsbytes("dl"),
cst_div$0=caml_string_of_jsbytes("div"),
cst_del$0=caml_string_of_jsbytes("del"),
cst_colgroup$0=caml_string_of_jsbytes("colgroup"),
cst_col$0=caml_string_of_jsbytes("col"),
cst_caption$0=caml_string_of_jsbytes("caption"),
cst_canvas$0=caml_string_of_jsbytes("canvas"),
cst_button$0=caml_string_of_jsbytes("button"),
cst_br$0=caml_string_of_jsbytes("br"),
cst_body$0=caml_string_of_jsbytes("body"),
cst_blockquote$0=caml_string_of_jsbytes("blockquote"),
cst_base$0=caml_string_of_jsbytes("base"),
cst_area$0=caml_string_of_jsbytes("area"),
cst_a$0=caml_string_of_jsbytes("a"),
cst_canvas=caml_string_of_jsbytes("canvas"),
cst_video=caml_string_of_jsbytes("video"),
cst_audio=caml_string_of_jsbytes("audio"),
cst_iframe=caml_string_of_jsbytes("iframe"),
cst_frame=caml_string_of_jsbytes("frame"),
cst_frameset=caml_string_of_jsbytes("frameset"),
cst_address=caml_string_of_jsbytes("address"),
cst_noscript=caml_string_of_jsbytes("noscript"),
cst_dt=caml_string_of_jsbytes("dt"),
cst_dd=caml_string_of_jsbytes("dd"),
cst_abbr=caml_string_of_jsbytes("abbr"),
cst_var=caml_string_of_jsbytes("var"),
cst_kbd=caml_string_of_jsbytes("kbd"),
cst_samp=caml_string_of_jsbytes("samp"),
cst_code=caml_string_of_jsbytes("code"),
cst_dfn=caml_string_of_jsbytes("dfn"),
cst_cite=caml_string_of_jsbytes("cite"),
cst_strong=caml_string_of_jsbytes("strong"),
cst_em=caml_string_of_jsbytes("em"),
cst_small=caml_string_of_jsbytes("small"),
cst_big=caml_string_of_jsbytes("big"),
cst_b=caml_string_of_jsbytes("b"),
cst_i=caml_string_of_jsbytes("i"),
cst_tt=caml_string_of_jsbytes("tt"),
cst_span=caml_string_of_jsbytes("span"),
cst_sup=caml_string_of_jsbytes("sup"),
cst_sub=caml_string_of_jsbytes("sub"),
cst_td=caml_string_of_jsbytes("td"),
cst_th=caml_string_of_jsbytes("th"),
cst_tr=caml_string_of_jsbytes("tr"),
cst_tbody=caml_string_of_jsbytes("tbody"),
cst_tfoot=caml_string_of_jsbytes("tfoot"),
cst_thead=caml_string_of_jsbytes("thead"),
cst_colgroup=caml_string_of_jsbytes("colgroup"),
cst_col=caml_string_of_jsbytes("col"),
cst_caption=caml_string_of_jsbytes("caption"),
cst_table=caml_string_of_jsbytes("table"),
cst_script=caml_string_of_jsbytes("script"),
cst_area=caml_string_of_jsbytes("area"),
cst_map=caml_string_of_jsbytes("map"),
cst_param=caml_string_of_jsbytes("param"),
cst_object=caml_string_of_jsbytes("object"),
cst_img=caml_string_of_jsbytes("img"),
cst_a=caml_string_of_jsbytes("a"),
cst_del=caml_string_of_jsbytes("del"),
cst_ins=caml_string_of_jsbytes("ins"),
cst_hr=caml_string_of_jsbytes("hr"),
cst_br=caml_string_of_jsbytes("br"),
cst_pre=caml_string_of_jsbytes("pre"),
cst_blockquote=caml_string_of_jsbytes("blockquote"),
cst_q=caml_string_of_jsbytes("q"),
cst_h6=caml_string_of_jsbytes("h6"),
cst_h5=caml_string_of_jsbytes("h5"),
cst_h4=caml_string_of_jsbytes("h4"),
cst_h3=caml_string_of_jsbytes("h3"),
cst_h2=caml_string_of_jsbytes("h2"),
cst_h1=caml_string_of_jsbytes("h1"),
cst_p=caml_string_of_jsbytes("p"),
cst_embed=caml_string_of_jsbytes("embed"),
cst_div=caml_string_of_jsbytes("div"),
cst_li=caml_string_of_jsbytes("li"),
cst_dl=caml_string_of_jsbytes("dl"),
cst_ol=caml_string_of_jsbytes("ol"),
cst_ul=caml_string_of_jsbytes("ul"),
cst_legend=caml_string_of_jsbytes("legend"),
cst_fieldset=caml_string_of_jsbytes("fieldset"),
cst_label=caml_string_of_jsbytes("label"),
cst_button=caml_string_of_jsbytes("button"),
cst_textarea=caml_string_of_jsbytes("textarea"),
cst_input$0=caml_string_of_jsbytes("input"),
cst_select$0=caml_string_of_jsbytes("select"),
cst_option=caml_string_of_jsbytes("option"),
cst_optgroup=caml_string_of_jsbytes("optgroup"),
cst_form=caml_string_of_jsbytes("form"),
cst_body=caml_string_of_jsbytes("body"),
cst_style=caml_string_of_jsbytes("style"),
cst_base=caml_string_of_jsbytes("base"),
cst_meta=caml_string_of_jsbytes("meta"),
cst_title=caml_string_of_jsbytes("title"),
cst_link=caml_string_of_jsbytes("link"),
cst_head=caml_string_of_jsbytes("head"),
cst_html=caml_string_of_jsbytes("html"),
cst_click=caml_string_of_jsbytes("click"),
cst_copy=caml_string_of_jsbytes("copy"),
cst_cut=caml_string_of_jsbytes("cut"),
cst_paste=caml_string_of_jsbytes("paste"),
cst_dblclick=caml_string_of_jsbytes("dblclick"),
cst_mousedown=caml_string_of_jsbytes("mousedown"),
cst_mouseup=caml_string_of_jsbytes("mouseup"),
cst_mouseover=caml_string_of_jsbytes("mouseover"),
cst_mousemove=caml_string_of_jsbytes("mousemove"),
cst_mouseout=caml_string_of_jsbytes("mouseout"),
cst_keypress=caml_string_of_jsbytes("keypress"),
cst_keydown=caml_string_of_jsbytes("keydown"),
cst_keyup=caml_string_of_jsbytes("keyup"),
cst_mousewheel=caml_string_of_jsbytes("mousewheel"),
cst_DOMMouseScroll=caml_string_of_jsbytes("DOMMouseScroll"),
cst_touchstart=caml_string_of_jsbytes("touchstart"),
cst_touchmove=caml_string_of_jsbytes("touchmove"),
cst_touchend=caml_string_of_jsbytes("touchend"),
cst_touchcancel=caml_string_of_jsbytes("touchcancel"),
cst_dragstart=caml_string_of_jsbytes("dragstart"),
cst_dragend=caml_string_of_jsbytes("dragend"),
cst_dragenter=caml_string_of_jsbytes("dragenter"),
cst_dragover=caml_string_of_jsbytes("dragover"),
cst_dragleave=caml_string_of_jsbytes("dragleave"),
cst_drag=caml_string_of_jsbytes("drag"),
cst_drop=caml_string_of_jsbytes("drop"),
cst_hashchange=caml_string_of_jsbytes("hashchange"),
cst_change=caml_string_of_jsbytes("change"),
cst_input=caml_string_of_jsbytes("input"),
cst_timeupdate=caml_string_of_jsbytes("timeupdate"),
cst_submit=caml_string_of_jsbytes("submit"),
cst_scroll=caml_string_of_jsbytes("scroll"),
cst_focus=caml_string_of_jsbytes("focus"),
cst_blur=caml_string_of_jsbytes("blur"),
cst_load$0=caml_string_of_jsbytes("load"),
cst_unload=caml_string_of_jsbytes("unload"),
cst_beforeunload=caml_string_of_jsbytes("beforeunload"),
cst_resize=caml_string_of_jsbytes("resize"),
cst_orientationchange=caml_string_of_jsbytes("orientationchange"),
cst_popstate=caml_string_of_jsbytes("popstate"),
cst_error$0=caml_string_of_jsbytes("error"),
cst_abort$0=caml_string_of_jsbytes("abort"),
cst_select=caml_string_of_jsbytes("select"),
cst_online=caml_string_of_jsbytes("online"),
cst_offline=caml_string_of_jsbytes("offline"),
cst_checking=caml_string_of_jsbytes("checking"),
cst_noupdate=caml_string_of_jsbytes("noupdate"),
cst_downloading=caml_string_of_jsbytes("downloading"),
cst_progress$0=caml_string_of_jsbytes("progress"),
cst_updateready=caml_string_of_jsbytes("updateready"),
cst_cached=caml_string_of_jsbytes("cached"),
cst_obsolete=caml_string_of_jsbytes("obsolete"),
cst_DOMContentLoaded=caml_string_of_jsbytes("DOMContentLoaded"),
cst_animationstart=caml_string_of_jsbytes("animationstart"),
cst_animationend=caml_string_of_jsbytes("animationend"),
cst_animationiteration=caml_string_of_jsbytes("animationiteration"),
cst_animationcancel=caml_string_of_jsbytes("animationcancel"),
cst_canplay=caml_string_of_jsbytes("canplay"),
cst_canplaythrough=caml_string_of_jsbytes("canplaythrough"),
cst_durationchange=caml_string_of_jsbytes("durationchange"),
cst_emptied=caml_string_of_jsbytes("emptied"),
cst_ended=caml_string_of_jsbytes("ended"),
cst_gotpointercapture=caml_string_of_jsbytes("gotpointercapture"),
cst_loadeddata=caml_string_of_jsbytes("loadeddata"),
cst_loadedmetadata=caml_string_of_jsbytes("loadedmetadata"),
cst_loadstart$0=caml_string_of_jsbytes("loadstart"),
cst_lostpointercapture=caml_string_of_jsbytes("lostpointercapture"),
cst_message=caml_string_of_jsbytes("message"),
cst_pause=caml_string_of_jsbytes("pause"),
cst_play=caml_string_of_jsbytes("play"),
cst_playing=caml_string_of_jsbytes("playing"),
cst_pointerenter=caml_string_of_jsbytes("pointerenter"),
cst_pointercancel=caml_string_of_jsbytes("pointercancel"),
cst_pointerdown=caml_string_of_jsbytes("pointerdown"),
cst_pointerleave=caml_string_of_jsbytes("pointerleave"),
cst_pointermove=caml_string_of_jsbytes("pointermove"),
cst_pointerout=caml_string_of_jsbytes("pointerout"),
cst_pointerover=caml_string_of_jsbytes("pointerover"),
cst_pointerup=caml_string_of_jsbytes("pointerup"),
cst_ratechange=caml_string_of_jsbytes("ratechange"),
cst_seeked=caml_string_of_jsbytes("seeked"),
cst_seeking=caml_string_of_jsbytes("seeking"),
cst_stalled=caml_string_of_jsbytes("stalled"),
cst_suspend=caml_string_of_jsbytes("suspend"),
cst_volumechange=caml_string_of_jsbytes("volumechange"),
cst_waiting=caml_string_of_jsbytes("waiting"),
cst_Js_of_ocaml_Dom_html_Canva=
caml_string_of_jsbytes("Js_of_ocaml__Dom_html.Canvas_not_available"),
cst_checkbox=caml_string_of_jsbytes("checkbox"),
cst_file=caml_string_of_jsbytes("file"),
cst_password=caml_string_of_jsbytes("password"),
cst_radio=caml_string_of_jsbytes("radio"),
cst_reset=caml_string_of_jsbytes("reset"),
cst_submit$0=caml_string_of_jsbytes("submit"),
cst_text=caml_string_of_jsbytes("text"),
cst_readystatechange=caml_string_of_jsbytes("readystatechange"),
cst_loadstart$1=caml_string_of_jsbytes("loadstart"),
cst_progress$1=caml_string_of_jsbytes("progress"),
cst_abort$1=caml_string_of_jsbytes("abort"),
cst_error$1=caml_string_of_jsbytes("error"),
cst_load$1=caml_string_of_jsbytes("load"),
cst_timeout=caml_string_of_jsbytes("timeout"),
cst_loadend$0=caml_string_of_jsbytes("loadend"),
cst_Worker_onmessage_is_undefi$0=
caml_string_of_jsbytes("Worker.onmessage is undefined"),
cst_Worker_onmessage_is_undefi=
caml_string_of_jsbytes("Worker.onmessage is undefined"),
cst_Worker_import_scripts_is_u=
caml_string_of_jsbytes("Worker.import_scripts is undefined"),
cst_webglcontextlost=caml_string_of_jsbytes("webglcontextlost"),
cst_webglcontextrestored=caml_string_of_jsbytes("webglcontextrestored"),
cst_webglcontextcreationerror=
caml_string_of_jsbytes("webglcontextcreationerror"),
cst_g=caml_string_of_jsbytes("g"),
cst=caml_string_of_jsbytes("[\\][()\\\\|+*.?{}^$]"),
cst$37=caml_string_of_jsbytes(""),
cst$13=caml_string_of_jsbytes(""),
cst$21=caml_string_of_jsbytes(""),
cst$14=caml_string_of_jsbytes("#"),
cst$15=caml_string_of_jsbytes("?"),
cst$20=caml_string_of_jsbytes(""),
cst$16=caml_string_of_jsbytes("/"),
cst$17=caml_string_of_jsbytes("/"),
cst$19=caml_string_of_jsbytes(":"),
cst$18=caml_string_of_jsbytes(""),
cst_http$1=caml_string_of_jsbytes("http://"),
cst$22=caml_string_of_jsbytes(""),
cst$30=caml_string_of_jsbytes(""),
cst$23=caml_string_of_jsbytes("#"),
cst$24=caml_string_of_jsbytes("?"),
cst$29=caml_string_of_jsbytes(""),
cst$25=caml_string_of_jsbytes("/"),
cst$26=caml_string_of_jsbytes("/"),
cst$28=caml_string_of_jsbytes(":"),
cst$27=caml_string_of_jsbytes(""),
cst_https$1=caml_string_of_jsbytes("https://"),
cst$31=caml_string_of_jsbytes(""),
cst$36=caml_string_of_jsbytes(""),
cst$32=caml_string_of_jsbytes("#"),
cst$33=caml_string_of_jsbytes("?"),
cst$35=caml_string_of_jsbytes(""),
cst$34=caml_string_of_jsbytes("/"),
cst_file$2=caml_string_of_jsbytes("file://"),
cst$12=caml_string_of_jsbytes(""),
cst$11=caml_string_of_jsbytes(""),
cst$10=caml_string_of_jsbytes(""),
cst$9=caml_string_of_jsbytes(""),
cst$8=caml_string_of_jsbytes(""),
cst$7=caml_string_of_jsbytes(""),
cst$6=caml_string_of_jsbytes(""),
cst$4=caml_string_of_jsbytes("="),
cst$5=caml_string_of_jsbytes("&"),
cst$2=caml_string_of_jsbytes(""),
cst$3=caml_string_of_jsbytes(""),
cst_file$0=caml_string_of_jsbytes("file"),
cst_file$1=caml_string_of_jsbytes("file:"),
cst_http=caml_string_of_jsbytes("http"),
cst_http$0=caml_string_of_jsbytes("http:"),
cst_https=caml_string_of_jsbytes("https"),
cst_https$0=caml_string_of_jsbytes("https:"),
cst$1=caml_string_of_jsbytes(" "),
cst_2B=caml_string_of_jsbytes("%2B"),
cst_Js_of_ocaml_Url_Local_exn=
caml_string_of_jsbytes("Js_of_ocaml__Url.Local_exn"),
cst$0=caml_string_of_jsbytes("+"),
cst_Js_of_ocaml_Url_Not_an_htt=
caml_string_of_jsbytes("Js_of_ocaml__Url.Not_an_http_protocol"),
cst_Hh_Tt_Tt_Pp_Ss_0_9a_zA_Z_0=
caml_string_of_jsbytes
("^([Hh][Tt][Tt][Pp][Ss]?)://([0-9a-zA-Z.-]+|\\[[0-9a-zA-Z.-]+\\]|\\[[0-9A-Fa-f:.]+\\])?(:([0-9]+))?(/([^\\?#]*)(\\?([^#]*))?(#(.*))?)?$"),
cst_Ff_Ii_Ll_Ee=
caml_string_of_jsbytes
("^([Ff][Ii][Ll][Ee])://([^\\?#]*)(\\?([^#]*))?(#(.*))?$"),
s=caml_string_of_jsbytes("4.0.0"),
git_version=caml_string_of_jsbytes(""),
cst$38=caml_string_of_jsbytes(""),
cst$41=caml_string_of_jsbytes("+"),
cst_Jstable_keys=caml_string_of_jsbytes("Jstable.keys"),
t5=runtime.caml_int64_create_lo_mi_hi(1,0,0),
cst_is_not_a_valid_length$0=
caml_string_of_jsbytes(" is not a valid length"),
cst_d_d_deg_grad_rad_turns=
caml_string_of_jsbytes("^(\\d*(?:\\.\\d*))(deg|grad|rad|turns)$"),
cst_length_conversion_error$0=
caml_string_of_jsbytes("length conversion error: "),
cst_deg$0=caml_string_of_jsbytes("deg"),
cst_grad$0=caml_string_of_jsbytes("grad"),
cst_rad$0=caml_string_of_jsbytes("rad"),
cst_turns$0=caml_string_of_jsbytes("turns"),
cst_deg=caml_string_of_jsbytes("deg"),
cst_grad=caml_string_of_jsbytes("grad"),
cst_rad=caml_string_of_jsbytes("rad"),
cst_turns=caml_string_of_jsbytes("turns"),
cst_is_not_a_valid_length=
caml_string_of_jsbytes(" is not a valid length"),
cst_0$0=caml_string_of_jsbytes("0"),
cst_d_d_s_S=caml_string_of_jsbytes("^(\\d*(?:\\.\\d*)?)\\s*(\\S*)$"),
cst_length_conversion_error=
caml_string_of_jsbytes("length conversion error: "),
cst_pc$0=caml_string_of_jsbytes("pc"),
cst_ch$0=caml_string_of_jsbytes("ch"),
cst_cm$0=caml_string_of_jsbytes("cm"),
cst_em$1=caml_string_of_jsbytes("em"),
cst_ex$0=caml_string_of_jsbytes("ex"),
cst_gd$0=caml_string_of_jsbytes("gd"),
cst_in$0=caml_string_of_jsbytes("in"),
cst_mm$0=caml_string_of_jsbytes("mm"),
cst_pt$0=caml_string_of_jsbytes("pt"),
cst_px$0=caml_string_of_jsbytes("px"),
cst_rem$0=caml_string_of_jsbytes("rem"),
cst_vh$0=caml_string_of_jsbytes("vh"),
cst_vm$0=caml_string_of_jsbytes("vm"),
cst_vw$0=caml_string_of_jsbytes("vw"),
cst_0=caml_string_of_jsbytes("0"),
cst_em$0=caml_string_of_jsbytes("em"),
cst_ex=caml_string_of_jsbytes("ex"),
cst_px=caml_string_of_jsbytes("px"),
cst_gd=caml_string_of_jsbytes("gd"),
cst_rem=caml_string_of_jsbytes("rem"),
cst_vw=caml_string_of_jsbytes("vw"),
cst_vh=caml_string_of_jsbytes("vh"),
cst_vm=caml_string_of_jsbytes("vm"),
cst_ch=caml_string_of_jsbytes("ch"),
cst_mm=caml_string_of_jsbytes("mm"),
cst_cm=caml_string_of_jsbytes("cm"),
cst_in=caml_string_of_jsbytes("in"),
cst_pt=caml_string_of_jsbytes("pt"),
cst_pc=caml_string_of_jsbytes("pc"),
cst$40=caml_string_of_jsbytes("): "),
cst_color_conversion_error$0=
caml_string_of_jsbytes("color conversion error ("),
cst$39=caml_string_of_jsbytes("): "),
cst_color_conversion_error=
caml_string_of_jsbytes("color conversion error ("),
cst_is_not_a_valid_color$0=
caml_string_of_jsbytes(" is not a valid color"),
cst_rgba_d_d_d_d_d=
caml_string_of_jsbytes
("(rgba?)\\((?:(\\d*),(\\d*),(\\d*)(?:,(\\d*(?:\\.\\d*)?))?)\\)"),
cst_rgba_d_d_d_d_d$0=
caml_string_of_jsbytes
("(rgba?)\\((?:(\\d*)%,(\\d*)%,(\\d*)%(?:,(\\d*(?:\\.\\d*)?))?)\\)"),
cst_hsla_d_d_d_d_d=
caml_string_of_jsbytes
("(hsla?)\\((?:(\\d*),(\\d*)%,(\\d*)%(?:,(\\d*(?:\\.\\d*)?))?)\\)"),
cst_rgb=caml_string_of_jsbytes("rgb"),
cst_rgba=caml_string_of_jsbytes("rgba"),
cst_rgb$0=caml_string_of_jsbytes("rgb"),
cst_rgba$0=caml_string_of_jsbytes("rgba"),
cst_hsl=caml_string_of_jsbytes("hsl"),
cst_hsla=caml_string_of_jsbytes("hsla"),
cst_rgb_s_d_s_d_s_d=
caml_string_of_jsbytes("^rgb\\(\\s*\\d*,\\s*\\d*,\\s*\\d*\\)$"),
cst_rgb_s_d_s_d_s_d$0=
caml_string_of_jsbytes("^rgb\\(\\s*\\d*%,\\s*\\d*%,\\s*\\d*%\\)$"),
cst_rgba_s_d_s_d_s_d_d_d=
caml_string_of_jsbytes
("^rgba\\(\\s*\\d*,\\s*\\d*,\\s*\\d*,\\d*\\.?\\d*\\)$"),
cst_rgba_s_d_s_d_s_d_d_d$0=
caml_string_of_jsbytes
("^rgba\\(\\s*\\d*%,\\s*\\d*%,\\s*\\d*%,\\d*\\.?\\d*\\)$"),
cst_hsl_s_d_s_d_s_d=
caml_string_of_jsbytes("^hsl\\(\\s*\\d*,\\s*\\d*%,\\s*\\d*%\\)$"),
cst_hsla_s_d_s_d_s_d_d_d=
caml_string_of_jsbytes
("^hsla\\(\\s*\\d*,\\s*\\d*%,\\s*\\d*%,\\d*\\.?\\d*\\)$"),
cst_is_not_a_valid_color=caml_string_of_jsbytes(" is not a valid color"),
cst_is_out_of_valid_range=
caml_string_of_jsbytes(" is out of valid range"),
partial=[8,[0,0,0],0,0,[12,41,0]],
partial$0=[12,41,0],
partial$1=[0,0,0],
cst_lightgrey$0=caml_string_of_jsbytes("lightgrey"),
cst_darkslategray$0=caml_string_of_jsbytes("darkslategray"),
cst_cornsilk$0=caml_string_of_jsbytes("cornsilk"),
cst_blue$0=caml_string_of_jsbytes("blue"),
cst_aliceblue$0=caml_string_of_jsbytes("aliceblue"),
cst_antiquewhite$0=caml_string_of_jsbytes("antiquewhite"),
cst_aqua$0=caml_string_of_jsbytes("aqua"),
cst_aquamarine$0=caml_string_of_jsbytes("aquamarine"),
cst_azure$0=caml_string_of_jsbytes("azure"),
cst_beige$0=caml_string_of_jsbytes("beige"),
cst_bisque$0=caml_string_of_jsbytes("bisque"),
cst_black$0=caml_string_of_jsbytes("black"),
cst_blanchedalmond$0=caml_string_of_jsbytes("blanchedalmond"),
cst_blueviolet$0=caml_string_of_jsbytes("blueviolet"),
cst_brown$0=caml_string_of_jsbytes("brown"),
cst_burlywood$0=caml_string_of_jsbytes("burlywood"),
cst_cadetblue$0=caml_string_of_jsbytes("cadetblue"),
cst_chartreuse$0=caml_string_of_jsbytes("chartreuse"),
cst_chocolate$0=caml_string_of_jsbytes("chocolate"),
cst_coral$0=caml_string_of_jsbytes("coral"),
cst_cornflowerblue$0=caml_string_of_jsbytes("cornflowerblue"),
cst_darkkhaki$0=caml_string_of_jsbytes("darkkhaki"),
cst_crimson$0=caml_string_of_jsbytes("crimson"),
cst_cyan$0=caml_string_of_jsbytes("cyan"),
cst_darkblue$0=caml_string_of_jsbytes("darkblue"),
cst_darkcyan$0=caml_string_of_jsbytes("darkcyan"),
cst_darkgoldenrod$0=caml_string_of_jsbytes("darkgoldenrod"),
cst_darkgray$0=caml_string_of_jsbytes("darkgray"),
cst_darkgreen$0=caml_string_of_jsbytes("darkgreen"),
cst_darkgrey$0=caml_string_of_jsbytes("darkgrey"),
cst_darkmagenta$0=caml_string_of_jsbytes("darkmagenta"),
cst_darkolivegreen$0=caml_string_of_jsbytes("darkolivegreen"),
cst_darkorange$0=caml_string_of_jsbytes("darkorange"),
cst_darkorchid$0=caml_string_of_jsbytes("darkorchid"),
cst_darkred$0=caml_string_of_jsbytes("darkred"),
cst_darksalmon$0=caml_string_of_jsbytes("darksalmon"),
cst_darkseagreen$0=caml_string_of_jsbytes("darkseagreen"),
cst_darkslateblue$0=caml_string_of_jsbytes("darkslateblue"),
cst_greenyellow$0=caml_string_of_jsbytes("greenyellow"),
cst_floralwhite$0=caml_string_of_jsbytes("floralwhite"),
cst_darkslategrey$0=caml_string_of_jsbytes("darkslategrey"),
cst_darkturquoise$0=caml_string_of_jsbytes("darkturquoise"),
cst_darkviolet$0=caml_string_of_jsbytes("darkviolet"),
cst_deeppink$0=caml_string_of_jsbytes("deeppink"),
cst_deepskyblue$0=caml_string_of_jsbytes("deepskyblue"),
cst_dimgray$0=caml_string_of_jsbytes("dimgray"),
cst_dimgrey$0=caml_string_of_jsbytes("dimgrey"),
cst_dodgerblue$0=caml_string_of_jsbytes("dodgerblue"),
cst_firebrick$0=caml_string_of_jsbytes("firebrick"),
cst_forestgreen$0=caml_string_of_jsbytes("forestgreen"),
cst_fuchsia$0=caml_string_of_jsbytes("fuchsia"),
cst_gainsboro$0=caml_string_of_jsbytes("gainsboro"),
cst_ghostwhite$0=caml_string_of_jsbytes("ghostwhite"),
cst_gold$0=caml_string_of_jsbytes("gold"),
cst_goldenrod$0=caml_string_of_jsbytes("goldenrod"),
cst_gray$0=caml_string_of_jsbytes("gray"),
cst_green$0=caml_string_of_jsbytes("green"),
cst_lavenderblush$0=caml_string_of_jsbytes("lavenderblush"),
cst_grey$0=caml_string_of_jsbytes("grey"),
cst_honeydew$0=caml_string_of_jsbytes("honeydew"),
cst_hotpink$0=caml_string_of_jsbytes("hotpink"),
cst_indianred$0=caml_string_of_jsbytes("indianred"),
cst_indigo$0=caml_string_of_jsbytes("indigo"),
cst_ivory$0=caml_string_of_jsbytes("ivory"),
cst_khaki$0=caml_string_of_jsbytes("khaki"),
cst_lavender$0=caml_string_of_jsbytes("lavender"),
cst_lawngreen$0=caml_string_of_jsbytes("lawngreen"),
cst_lemonchiffon$0=caml_string_of_jsbytes("lemonchiffon"),
cst_lightblue$0=caml_string_of_jsbytes("lightblue"),
cst_lightcoral$0=caml_string_of_jsbytes("lightcoral"),
cst_lightcyan$0=caml_string_of_jsbytes("lightcyan"),
cst_lightgoldenrodyellow$0=caml_string_of_jsbytes("lightgoldenrodyellow"),
cst_lightgray$0=caml_string_of_jsbytes("lightgray"),
cst_lightgreen$0=caml_string_of_jsbytes("lightgreen"),
cst_paleturquoise$0=caml_string_of_jsbytes("paleturquoise"),
cst_mediumslateblue$0=caml_string_of_jsbytes("mediumslateblue"),
cst_limegreen$0=caml_string_of_jsbytes("limegreen"),
cst_lightpink$0=caml_string_of_jsbytes("lightpink"),
cst_lightsalmon$0=caml_string_of_jsbytes("lightsalmon"),
cst_lightseagreen$0=caml_string_of_jsbytes("lightseagreen"),
cst_lightskyblue$0=caml_string_of_jsbytes("lightskyblue"),
cst_lightslategray$0=caml_string_of_jsbytes("lightslategray"),
cst_lightslategrey$0=caml_string_of_jsbytes("lightslategrey"),
cst_lightsteelblue$0=caml_string_of_jsbytes("lightsteelblue"),
cst_lightyellow$0=caml_string_of_jsbytes("lightyellow"),
cst_lime$0=caml_string_of_jsbytes("lime"),
cst_linen$0=caml_string_of_jsbytes("linen"),
cst_magenta$0=caml_string_of_jsbytes("magenta"),
cst_maroon$0=caml_string_of_jsbytes("maroon"),
cst_mediumaquamarine$0=caml_string_of_jsbytes("mediumaquamarine"),
cst_mediumblue$0=caml_string_of_jsbytes("mediumblue"),
cst_mediumorchid$0=caml_string_of_jsbytes("mediumorchid"),
cst_mediumpurple$0=caml_string_of_jsbytes("mediumpurple"),
cst_mediumseagreen$0=caml_string_of_jsbytes("mediumseagreen"),
cst_navy$0=caml_string_of_jsbytes("navy"),
cst_mediumspringgreen$0=caml_string_of_jsbytes("mediumspringgreen"),
cst_mediumturquoise$0=caml_string_of_jsbytes("mediumturquoise"),
cst_mediumvioletred$0=caml_string_of_jsbytes("mediumvioletred"),
cst_midnightblue$0=caml_string_of_jsbytes("midnightblue"),
cst_mintcream$0=caml_string_of_jsbytes("mintcream"),
cst_mistyrose$0=caml_string_of_jsbytes("mistyrose"),
cst_moccasin$0=caml_string_of_jsbytes("moccasin"),
cst_navajowhite$0=caml_string_of_jsbytes("navajowhite"),
cst_oldlace$0=caml_string_of_jsbytes("oldlace"),
cst_olive$0=caml_string_of_jsbytes("olive"),
cst_olivedrab$0=caml_string_of_jsbytes("olivedrab"),
cst_orange$0=caml_string_of_jsbytes("orange"),
cst_orangered$0=caml_string_of_jsbytes("orangered"),
cst_orchid$0=caml_string_of_jsbytes("orchid"),
cst_palegoldenrod$0=caml_string_of_jsbytes("palegoldenrod"),
cst_palegreen$0=caml_string_of_jsbytes("palegreen"),
cst_skyblue$0=caml_string_of_jsbytes("skyblue"),
cst_rosybrown$0=caml_string_of_jsbytes("rosybrown"),
cst_palevioletred$0=caml_string_of_jsbytes("palevioletred"),
cst_papayawhip$0=caml_string_of_jsbytes("papayawhip"),
cst_peachpuff$0=caml_string_of_jsbytes("peachpuff"),
cst_peru$0=caml_string_of_jsbytes("peru"),
cst_pink$0=caml_string_of_jsbytes("pink"),
cst_plum$0=caml_string_of_jsbytes("plum"),
cst_powderblue$0=caml_string_of_jsbytes("powderblue"),
cst_purple$0=caml_string_of_jsbytes("purple"),
cst_red$0=caml_string_of_jsbytes("red"),
cst_royalblue$0=caml_string_of_jsbytes("royalblue"),
cst_saddlebrown$0=caml_string_of_jsbytes("saddlebrown"),
cst_salmon$0=caml_string_of_jsbytes("salmon"),
cst_sandybrown$0=caml_string_of_jsbytes("sandybrown"),
cst_seagreen$0=caml_string_of_jsbytes("seagreen"),
cst_seashell$0=caml_string_of_jsbytes("seashell"),
cst_sienna$0=caml_string_of_jsbytes("sienna"),
cst_silver$0=caml_string_of_jsbytes("silver"),
cst_thistle$0=caml_string_of_jsbytes("thistle"),
cst_slateblue$0=caml_string_of_jsbytes("slateblue"),
cst_slategray$0=caml_string_of_jsbytes("slategray"),
cst_slategrey$0=caml_string_of_jsbytes("slategrey"),
cst_snow$0=caml_string_of_jsbytes("snow"),
cst_springgreen$0=caml_string_of_jsbytes("springgreen"),
cst_steelblue$0=caml_string_of_jsbytes("steelblue"),
cst_tan$0=caml_string_of_jsbytes("tan"),
cst_teal$0=caml_string_of_jsbytes("teal"),
cst_tomato$0=caml_string_of_jsbytes("tomato"),
cst_turquoise$0=caml_string_of_jsbytes("turquoise"),
cst_violet$0=caml_string_of_jsbytes("violet"),
cst_wheat$0=caml_string_of_jsbytes("wheat"),
cst_white$0=caml_string_of_jsbytes("white"),
cst_whitesmoke$0=caml_string_of_jsbytes("whitesmoke"),
cst_yellow$0=caml_string_of_jsbytes("yellow"),
cst_yellowgreen$0=caml_string_of_jsbytes("yellowgreen"),
cst_is_not_a_valid_color_name=
caml_string_of_jsbytes(" is not a valid color name"),
cst_aliceblue=caml_string_of_jsbytes("aliceblue"),
cst_antiquewhite=caml_string_of_jsbytes("antiquewhite"),
cst_aqua=caml_string_of_jsbytes("aqua"),
cst_aquamarine=caml_string_of_jsbytes("aquamarine"),
cst_azure=caml_string_of_jsbytes("azure"),
cst_beige=caml_string_of_jsbytes("beige"),
cst_bisque=caml_string_of_jsbytes("bisque"),
cst_black=caml_string_of_jsbytes("black"),
cst_blanchedalmond=caml_string_of_jsbytes("blanchedalmond"),
cst_blue=caml_string_of_jsbytes("blue"),
cst_blueviolet=caml_string_of_jsbytes("blueviolet"),
cst_brown=caml_string_of_jsbytes("brown"),
cst_burlywood=caml_string_of_jsbytes("burlywood"),
cst_cadetblue=caml_string_of_jsbytes("cadetblue"),
cst_chartreuse=caml_string_of_jsbytes("chartreuse"),
cst_chocolate=caml_string_of_jsbytes("chocolate"),
cst_coral=caml_string_of_jsbytes("coral"),
cst_cornflowerblue=caml_string_of_jsbytes("cornflowerblue"),
cst_cornsilk=caml_string_of_jsbytes("cornsilk"),
cst_crimson=caml_string_of_jsbytes("crimson"),
cst_cyan=caml_string_of_jsbytes("cyan"),
cst_darkblue=caml_string_of_jsbytes("darkblue"),
cst_darkcyan=caml_string_of_jsbytes("darkcyan"),
cst_darkgoldenrod=caml_string_of_jsbytes("darkgoldenrod"),
cst_darkgray=caml_string_of_jsbytes("darkgray"),
cst_darkgreen=caml_string_of_jsbytes("darkgreen"),
cst_darkgrey=caml_string_of_jsbytes("darkgrey"),
cst_darkkhaki=caml_string_of_jsbytes("darkkhaki"),
cst_darkmagenta=caml_string_of_jsbytes("darkmagenta"),
cst_darkolivegreen=caml_string_of_jsbytes("darkolivegreen"),
cst_darkorange=caml_string_of_jsbytes("darkorange"),
cst_darkorchid=caml_string_of_jsbytes("darkorchid"),
cst_darkred=caml_string_of_jsbytes("darkred"),
cst_darksalmon=caml_string_of_jsbytes("darksalmon"),
cst_darkseagreen=caml_string_of_jsbytes("darkseagreen"),
cst_darkslateblue=caml_string_of_jsbytes("darkslateblue"),
cst_darkslategray=caml_string_of_jsbytes("darkslategray"),
cst_darkslategrey=caml_string_of_jsbytes("darkslategrey"),
cst_darkturquoise=caml_string_of_jsbytes("darkturquoise"),
cst_darkviolet=caml_string_of_jsbytes("darkviolet"),
cst_deeppink=caml_string_of_jsbytes("deeppink"),
cst_deepskyblue=caml_string_of_jsbytes("deepskyblue"),
cst_dimgray=caml_string_of_jsbytes("dimgray"),
cst_dimgrey=caml_string_of_jsbytes("dimgrey"),
cst_dodgerblue=caml_string_of_jsbytes("dodgerblue"),
cst_firebrick=caml_string_of_jsbytes("firebrick"),
cst_floralwhite=caml_string_of_jsbytes("floralwhite"),
cst_forestgreen=caml_string_of_jsbytes("forestgreen"),
cst_fuchsia=caml_string_of_jsbytes("fuchsia"),
cst_gainsboro=caml_string_of_jsbytes("gainsboro"),
cst_ghostwhite=caml_string_of_jsbytes("ghostwhite"),
cst_gold=caml_string_of_jsbytes("gold"),
cst_goldenrod=caml_string_of_jsbytes("goldenrod"),
cst_gray=caml_string_of_jsbytes("gray"),
cst_grey=caml_string_of_jsbytes("grey"),
cst_green=caml_string_of_jsbytes("green"),
cst_greenyellow=caml_string_of_jsbytes("greenyellow"),
cst_honeydew=caml_string_of_jsbytes("honeydew"),
cst_hotpink=caml_string_of_jsbytes("hotpink"),
cst_indianred=caml_string_of_jsbytes("indianred"),
cst_indigo=caml_string_of_jsbytes("indigo"),
cst_ivory=caml_string_of_jsbytes("ivory"),
cst_khaki=caml_string_of_jsbytes("khaki"),
cst_lavender=caml_string_of_jsbytes("lavender"),
cst_lavenderblush=caml_string_of_jsbytes("lavenderblush"),
cst_lawngreen=caml_string_of_jsbytes("lawngreen"),
cst_lemonchiffon=caml_string_of_jsbytes("lemonchiffon"),
cst_lightblue=caml_string_of_jsbytes("lightblue"),
cst_lightcoral=caml_string_of_jsbytes("lightcoral"),
cst_lightcyan=caml_string_of_jsbytes("lightcyan"),
cst_lightgoldenrodyellow=caml_string_of_jsbytes("lightgoldenrodyellow"),
cst_lightgray=caml_string_of_jsbytes("lightgray"),
cst_lightgreen=caml_string_of_jsbytes("lightgreen"),
cst_lightgrey=caml_string_of_jsbytes("lightgrey"),
cst_lightpink=caml_string_of_jsbytes("lightpink"),
cst_lightsalmon=caml_string_of_jsbytes("lightsalmon"),
cst_lightseagreen=caml_string_of_jsbytes("lightseagreen"),
cst_lightskyblue=caml_string_of_jsbytes("lightskyblue"),
cst_lightslategray=caml_string_of_jsbytes("lightslategray"),
cst_lightslategrey=caml_string_of_jsbytes("lightslategrey"),
cst_lightsteelblue=caml_string_of_jsbytes("lightsteelblue"),
cst_lightyellow=caml_string_of_jsbytes("lightyellow"),
cst_lime=caml_string_of_jsbytes("lime"),
cst_limegreen=caml_string_of_jsbytes("limegreen"),
cst_linen=caml_string_of_jsbytes("linen"),
cst_magenta=caml_string_of_jsbytes("magenta"),
cst_maroon=caml_string_of_jsbytes("maroon"),
cst_mediumaquamarine=caml_string_of_jsbytes("mediumaquamarine"),
cst_mediumblue=caml_string_of_jsbytes("mediumblue"),
cst_mediumorchid=caml_string_of_jsbytes("mediumorchid"),
cst_mediumpurple=caml_string_of_jsbytes("mediumpurple"),
cst_mediumseagreen=caml_string_of_jsbytes("mediumseagreen"),
cst_mediumslateblue=caml_string_of_jsbytes("mediumslateblue"),
cst_mediumspringgreen=caml_string_of_jsbytes("mediumspringgreen"),
cst_mediumturquoise=caml_string_of_jsbytes("mediumturquoise"),
cst_mediumvioletred=caml_string_of_jsbytes("mediumvioletred"),
cst_midnightblue=caml_string_of_jsbytes("midnightblue"),
cst_mintcream=caml_string_of_jsbytes("mintcream"),
cst_mistyrose=caml_string_of_jsbytes("mistyrose"),
cst_moccasin=caml_string_of_jsbytes("moccasin"),
cst_navajowhite=caml_string_of_jsbytes("navajowhite"),
cst_navy=caml_string_of_jsbytes("navy"),
cst_oldlace=caml_string_of_jsbytes("oldlace"),
cst_olive=caml_string_of_jsbytes("olive"),
cst_olivedrab=caml_string_of_jsbytes("olivedrab"),
cst_orange=caml_string_of_jsbytes("orange"),
cst_orangered=caml_string_of_jsbytes("orangered"),
cst_orchid=caml_string_of_jsbytes("orchid"),
cst_palegoldenrod=caml_string_of_jsbytes("palegoldenrod"),
cst_palegreen=caml_string_of_jsbytes("palegreen"),
cst_paleturquoise=caml_string_of_jsbytes("paleturquoise"),
cst_palevioletred=caml_string_of_jsbytes("palevioletred"),
cst_papayawhip=caml_string_of_jsbytes("papayawhip"),
cst_peachpuff=caml_string_of_jsbytes("peachpuff"),
cst_peru=caml_string_of_jsbytes("peru"),
cst_pink=caml_string_of_jsbytes("pink"),
cst_plum=caml_string_of_jsbytes("plum"),
cst_powderblue=caml_string_of_jsbytes("powderblue"),
cst_purple=caml_string_of_jsbytes("purple"),
cst_red=caml_string_of_jsbytes("red"),
cst_rosybrown=caml_string_of_jsbytes("rosybrown"),
cst_royalblue=caml_string_of_jsbytes("royalblue"),
cst_saddlebrown=caml_string_of_jsbytes("saddlebrown"),
cst_salmon=caml_string_of_jsbytes("salmon"),
cst_sandybrown=caml_string_of_jsbytes("sandybrown"),
cst_seagreen=caml_string_of_jsbytes("seagreen"),
cst_seashell=caml_string_of_jsbytes("seashell"),
cst_sienna=caml_string_of_jsbytes("sienna"),
cst_silver=caml_string_of_jsbytes("silver"),
cst_skyblue=caml_string_of_jsbytes("skyblue"),
cst_slateblue=caml_string_of_jsbytes("slateblue"),
cst_slategray=caml_string_of_jsbytes("slategray"),
cst_slategrey=caml_string_of_jsbytes("slategrey"),
cst_snow=caml_string_of_jsbytes("snow"),
cst_springgreen=caml_string_of_jsbytes("springgreen"),
cst_steelblue=caml_string_of_jsbytes("steelblue"),
cst_tan=caml_string_of_jsbytes("tan"),
cst_teal=caml_string_of_jsbytes("teal"),
cst_thistle=caml_string_of_jsbytes("thistle"),
cst_tomato=caml_string_of_jsbytes("tomato"),
cst_turquoise=caml_string_of_jsbytes("turquoise"),
cst_violet=caml_string_of_jsbytes("violet"),
cst_wheat=caml_string_of_jsbytes("wheat"),
cst_white=caml_string_of_jsbytes("white"),
cst_whitesmoke=caml_string_of_jsbytes("whitesmoke"),
cst_yellow=caml_string_of_jsbytes("yellow"),
cst_yellowgreen=caml_string_of_jsbytes("yellowgreen"),
cst_vkern$0=caml_string_of_jsbytes("vkern"),
cst_view$0=caml_string_of_jsbytes("view"),
cst_use$0=caml_string_of_jsbytes("use"),
cst_tspan$0=caml_string_of_jsbytes("tspan"),
cst_tref$0=caml_string_of_jsbytes("tref"),
cst_title$3=caml_string_of_jsbytes("title"),
cst_textpath$0=caml_string_of_jsbytes("textpath"),
cst_text$1=caml_string_of_jsbytes("text"),
cst_symbol$0=caml_string_of_jsbytes("symbol"),
cst_switch$0=caml_string_of_jsbytes("switch"),
cst_svg$0=caml_string_of_jsbytes("svg"),
cst_style$3=caml_string_of_jsbytes("style"),
cst_stop$0=caml_string_of_jsbytes("stop"),
cst_set$0=caml_string_of_jsbytes("set"),
cst_script$3=caml_string_of_jsbytes("script"),
cst_rect$0=caml_string_of_jsbytes("rect"),
cst_radialgradient$0=caml_string_of_jsbytes("radialgradient"),
cst_polyline$0=caml_string_of_jsbytes("polyline"),
cst_polygon$0=caml_string_of_jsbytes("polygon"),
cst_pattern$0=caml_string_of_jsbytes("pattern"),
cst_path$0=caml_string_of_jsbytes("path"),
cst_mpath$0=caml_string_of_jsbytes("mpath"),
cst_missing_glyph$0=caml_string_of_jsbytes("missing-glyph"),
cst_metadata$0=caml_string_of_jsbytes("metadata"),
cst_mask$0=caml_string_of_jsbytes("mask"),
cst_lineargradient$0=caml_string_of_jsbytes("lineargradient"),
cst_line$0=caml_string_of_jsbytes("line"),
cst_image$0=caml_string_of_jsbytes("image"),
cst_hkern$0=caml_string_of_jsbytes("hkern"),
cst_glyphref$0=caml_string_of_jsbytes("glyphref"),
cst_glyph$0=caml_string_of_jsbytes("glyph"),
cst_g$1=caml_string_of_jsbytes("g"),
cst_foreignobject=caml_string_of_jsbytes("foreignobject"),
cst_font_face_uri$0=caml_string_of_jsbytes("font-face-uri"),
cst_font_face_src$0=caml_string_of_jsbytes("font-face-src"),
cst_font_face_name$0=caml_string_of_jsbytes("font-face-name"),
cst_font_face_format$0=caml_string_of_jsbytes("font-face-format"),
cst_font_face$0=caml_string_of_jsbytes("font-face"),
cst_font$0=caml_string_of_jsbytes("font"),
cst_filter$0=caml_string_of_jsbytes("filter"),
cst_ellipse$0=caml_string_of_jsbytes("ellipse"),
cst_desc$0=caml_string_of_jsbytes("desc"),
cst_defs$0=caml_string_of_jsbytes("defs"),
cst_cursor$0=caml_string_of_jsbytes("cursor"),
cst_clippath$0=caml_string_of_jsbytes("clippath"),
cst_circle$0=caml_string_of_jsbytes("circle"),
cst_animatetransform$0=caml_string_of_jsbytes("animatetransform"),
cst_animatemotion$0=caml_string_of_jsbytes("animatemotion"),
cst_animatecolor$0=caml_string_of_jsbytes("animatecolor"),
cst_animate$0=caml_string_of_jsbytes("animate"),
cst_altglyphitem$0=caml_string_of_jsbytes("altglyphitem"),
cst_altglyphdef$0=caml_string_of_jsbytes("altglyphdef"),
cst_altglyph$0=caml_string_of_jsbytes("altglyph"),
cst_a$3=caml_string_of_jsbytes("a"),
cst_vkern=caml_string_of_jsbytes("vkern"),
cst_view=caml_string_of_jsbytes("view"),
cst_use=caml_string_of_jsbytes("use"),
cst_tspan=caml_string_of_jsbytes("tspan"),
cst_tref=caml_string_of_jsbytes("tref"),
cst_title$2=caml_string_of_jsbytes("title"),
cst_textpath=caml_string_of_jsbytes("textpath"),
cst_text$0=caml_string_of_jsbytes("text"),
cst_symbol=caml_string_of_jsbytes("symbol"),
cst_switch=caml_string_of_jsbytes("switch"),
cst_svg=caml_string_of_jsbytes("svg"),
cst_style$2=caml_string_of_jsbytes("style"),
cst_stop=caml_string_of_jsbytes("stop"),
cst_set=caml_string_of_jsbytes("set"),
cst_script$2=caml_string_of_jsbytes("script"),
cst_rect=caml_string_of_jsbytes("rect"),
cst_radialgradient=caml_string_of_jsbytes("radialgradient"),
cst_polyline=caml_string_of_jsbytes("polyline"),
cst_polygon=caml_string_of_jsbytes("polygon"),
cst_pattern=caml_string_of_jsbytes("pattern"),
cst_path=caml_string_of_jsbytes("path"),
cst_mpath=caml_string_of_jsbytes("mpath"),
cst_missing_glyph=caml_string_of_jsbytes("missing-glyph"),
cst_metadata=caml_string_of_jsbytes("metadata"),
cst_mask=caml_string_of_jsbytes("mask"),
cst_lineargradient=caml_string_of_jsbytes("lineargradient"),
cst_line=caml_string_of_jsbytes("line"),
cst_image=caml_string_of_jsbytes("image"),
cst_hkern=caml_string_of_jsbytes("hkern"),
cst_glyphref=caml_string_of_jsbytes("glyphref"),
cst_glyph=caml_string_of_jsbytes("glyph"),
cst_g$0=caml_string_of_jsbytes("g"),
cst_foreignObject=caml_string_of_jsbytes("foreignObject"),
cst_font_face_uri=caml_string_of_jsbytes("font-face-uri"),
cst_font_face_src=caml_string_of_jsbytes("font-face-src"),
cst_font_face_name=caml_string_of_jsbytes("font-face-name"),
cst_font_face_format=caml_string_of_jsbytes("font-face-format"),
cst_font_face=caml_string_of_jsbytes("font-face"),
cst_font=caml_string_of_jsbytes("font"),
cst_filter=caml_string_of_jsbytes("filter"),
cst_ellipse=caml_string_of_jsbytes("ellipse"),
cst_desc=caml_string_of_jsbytes("desc"),
cst_defs=caml_string_of_jsbytes("defs"),
cst_cursor=caml_string_of_jsbytes("cursor"),
cst_clippath=caml_string_of_jsbytes("clippath"),
cst_circle=caml_string_of_jsbytes("circle"),
cst_animatetransform=caml_string_of_jsbytes("animatetransform"),
cst_animatemotion=caml_string_of_jsbytes("animatemotion"),
cst_animatecolor=caml_string_of_jsbytes("animatecolor"),
cst_animate=caml_string_of_jsbytes("animate"),
cst_altglyphitem=caml_string_of_jsbytes("altglyphitem"),
cst_altglyphdef=caml_string_of_jsbytes("altglyphdef"),
cst_altglyph=caml_string_of_jsbytes("altglyph"),
cst_a$2=caml_string_of_jsbytes("a"),
cst_Js_of_ocaml_Dom_svg_SVGErr=
caml_string_of_jsbytes("Js_of_ocaml__Dom_svg.SVGError"),
Stdlib_String=global_data.Stdlib__String,
Stdlib_Char=global_data.Stdlib__Char,
Stdlib=global_data.Stdlib,
Jsoo_runtime=global_data.Jsoo_runtime,
Stdlib_Printexc=global_data.Stdlib__Printexc,
Assert_failure=global_data.Assert_failure,
Stdlib_List=global_data.Stdlib__List,
Stdlib_Array=global_data.Stdlib__Array,
Stdlib_Uchar=global_data.Stdlib__Uchar,
Stdlib_Printf=global_data.Stdlib__Printf,
Stdlib_Obj=global_data.Stdlib__Obj,
Js_of_ocaml=[0];
caml_register_global(1635,Js_of_ocaml,"Js_of_ocaml__");
var
Poly=[0],
_g_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom.ml"),351,67],
_h_=[0,caml_string_of_jsbytes("transparent")],
_i_=[0,caml_string_of_jsbytes("native")],
_m_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom_html.ml"),2850,58],
_l_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom_html.ml"),2849,61],
_k_=
[0,
[11,
caml_string_of_jsbytes("getElementById_exn: "),
[3,0,[11,caml_string_of_jsbytes(" not found"),0]]],
caml_string_of_jsbytes("getElementById_exn: %S not found")],
_o_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/form.ml"),178,13],
_n_=[0,1],
_p_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/regexp.ml"),34,64],
_q_=[0,caml_string_of_jsbytes(""),0],
_ck_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_cl_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_cm_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_cn_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_b8_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_b9_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_b__=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_b$_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_ca_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_cb_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_cc_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_cd_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_ce_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_cf_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_cg_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_ch_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_ci_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_cj_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
_b7_=
caml_list_of_js_array
([caml_string_of_jsbytes("aliceblue"),
caml_string_of_jsbytes("antiquewhite"),
caml_string_of_jsbytes("aqua"),
caml_string_of_jsbytes("aquamarine"),
caml_string_of_jsbytes("azure"),
caml_string_of_jsbytes("beige"),
caml_string_of_jsbytes("bisque"),
caml_string_of_jsbytes("black"),
caml_string_of_jsbytes("blanchedalmond"),
caml_string_of_jsbytes("blue"),
caml_string_of_jsbytes("blueviolet"),
caml_string_of_jsbytes("brown"),
caml_string_of_jsbytes("burlywood"),
caml_string_of_jsbytes("cadetblue"),
caml_string_of_jsbytes("chartreuse"),
caml_string_of_jsbytes("chocolate"),
caml_string_of_jsbytes("coral"),
caml_string_of_jsbytes("cornflowerblue"),
caml_string_of_jsbytes("cornsilk"),
caml_string_of_jsbytes("crimson"),
caml_string_of_jsbytes("cyan"),
caml_string_of_jsbytes("darkblue"),
caml_string_of_jsbytes("darkcyan"),
caml_string_of_jsbytes("darkgoldenrod"),
caml_string_of_jsbytes("darkgray"),
caml_string_of_jsbytes("darkgreen"),
caml_string_of_jsbytes("darkgrey"),
caml_string_of_jsbytes("darkkhaki"),
caml_string_of_jsbytes("darkmagenta"),
caml_string_of_jsbytes("darkolivegreen"),
caml_string_of_jsbytes("darkorange"),
caml_string_of_jsbytes("darkorchid"),
caml_string_of_jsbytes("darkred"),
caml_string_of_jsbytes("darksalmon"),
caml_string_of_jsbytes("darkseagreen"),
caml_string_of_jsbytes("darkslateblue"),
caml_string_of_jsbytes("darkslategray"),
caml_string_of_jsbytes("darkslategrey"),
caml_string_of_jsbytes("darkturquoise"),
caml_string_of_jsbytes("darkviolet"),
caml_string_of_jsbytes("deeppink"),
caml_string_of_jsbytes("deepskyblue"),
caml_string_of_jsbytes("dimgray"),
caml_string_of_jsbytes("dimgrey"),
caml_string_of_jsbytes("dodgerblue"),
caml_string_of_jsbytes("firebrick"),
caml_string_of_jsbytes("floralwhite"),
caml_string_of_jsbytes("forestgreen"),
caml_string_of_jsbytes("fuchsia"),
caml_string_of_jsbytes("gainsboro"),
caml_string_of_jsbytes("ghostwhite"),
caml_string_of_jsbytes("gold"),
caml_string_of_jsbytes("goldenrod"),
caml_string_of_jsbytes("gray"),
caml_string_of_jsbytes("green"),
caml_string_of_jsbytes("greenyellow"),
caml_string_of_jsbytes("grey"),
caml_string_of_jsbytes("honeydew"),
caml_string_of_jsbytes("hotpink"),
caml_string_of_jsbytes("indianred"),
caml_string_of_jsbytes("indigo"),
caml_string_of_jsbytes("ivory"),
caml_string_of_jsbytes("khaki"),
caml_string_of_jsbytes("lavender"),
caml_string_of_jsbytes("lavenderblush"),
caml_string_of_jsbytes("lawngreen"),
caml_string_of_jsbytes("lemonchiffon"),
caml_string_of_jsbytes("lightblue"),
caml_string_of_jsbytes("lightcoral"),
caml_string_of_jsbytes("lightcyan"),
caml_string_of_jsbytes("lightgoldenrodyellow"),
caml_string_of_jsbytes("lightgray"),
caml_string_of_jsbytes("lightgreen"),
caml_string_of_jsbytes("lightgrey"),
caml_string_of_jsbytes("lightpink"),
caml_string_of_jsbytes("lightsalmon"),
caml_string_of_jsbytes("lightseagreen"),
caml_string_of_jsbytes("lightskyblue"),
caml_string_of_jsbytes("lightslategray"),
caml_string_of_jsbytes("lightslategrey"),
caml_string_of_jsbytes("lightsteelblue"),
caml_string_of_jsbytes("lightyellow"),
caml_string_of_jsbytes("lime"),
caml_string_of_jsbytes("limegreen"),
caml_string_of_jsbytes("linen"),
caml_string_of_jsbytes("magenta"),
caml_string_of_jsbytes("maroon"),
caml_string_of_jsbytes("mediumaquamarine"),
caml_string_of_jsbytes("mediumblue"),
caml_string_of_jsbytes("mediumorchid"),
caml_string_of_jsbytes("mediumpurple"),
caml_string_of_jsbytes("mediumseagreen"),
caml_string_of_jsbytes("mediumslateblue"),
caml_string_of_jsbytes("mediumspringgreen"),
caml_string_of_jsbytes("mediumturquoise"),
caml_string_of_jsbytes("mediumvioletred"),
caml_string_of_jsbytes("midnightblue"),
caml_string_of_jsbytes("mintcream"),
caml_string_of_jsbytes("mistyrose"),
caml_string_of_jsbytes("moccasin"),
caml_string_of_jsbytes("navajowhite"),
caml_string_of_jsbytes("navy"),
caml_string_of_jsbytes("oldlace"),
caml_string_of_jsbytes("olive"),
caml_string_of_jsbytes("olivedrab"),
caml_string_of_jsbytes("orange"),
caml_string_of_jsbytes("orangered"),
caml_string_of_jsbytes("orchid"),
caml_string_of_jsbytes("palegoldenrod"),
caml_string_of_jsbytes("palegreen"),
caml_string_of_jsbytes("paleturquoise"),
caml_string_of_jsbytes("palevioletred"),
caml_string_of_jsbytes("papayawhip"),
caml_string_of_jsbytes("peachpuff"),
caml_string_of_jsbytes("peru"),
caml_string_of_jsbytes("pink"),
caml_string_of_jsbytes("plum"),
caml_string_of_jsbytes("powderblue"),
caml_string_of_jsbytes("purple"),
caml_string_of_jsbytes("red"),
caml_string_of_jsbytes("rosybrown"),
caml_string_of_jsbytes("royalblue"),
caml_string_of_jsbytes("saddlebrown"),
caml_string_of_jsbytes("salmon"),
caml_string_of_jsbytes("sandybrown"),
caml_string_of_jsbytes("seagreen"),
caml_string_of_jsbytes("seashell"),
caml_string_of_jsbytes("sienna"),
caml_string_of_jsbytes("silver"),
caml_string_of_jsbytes("skyblue"),
caml_string_of_jsbytes("slateblue"),
caml_string_of_jsbytes("slategray"),
caml_string_of_jsbytes("slategrey"),
caml_string_of_jsbytes("snow"),
caml_string_of_jsbytes("springgreen"),
caml_string_of_jsbytes("steelblue"),
caml_string_of_jsbytes("tan"),
caml_string_of_jsbytes("teal"),
caml_string_of_jsbytes("thistle"),
caml_string_of_jsbytes("tomato"),
caml_string_of_jsbytes("turquoise"),
caml_string_of_jsbytes("violet"),
caml_string_of_jsbytes("wheat"),
caml_string_of_jsbytes("white"),
caml_string_of_jsbytes("whitesmoke"),
caml_string_of_jsbytes("yellow"),
caml_string_of_jsbytes("yellowgreen")]),
_b6_=
[0,
[12,35,[4,8,[0,2,2],0,[4,8,[0,2,2],0,[4,8,[0,2,2],0,0]]]],
caml_string_of_jsbytes("#%02X%02X%02X")],
_b0_=
[0,
[11,
caml_string_of_jsbytes("rgb("),
[4,0,0,0,[12,44,[4,0,0,0,[12,44,[4,0,0,0,[12,41,0]]]]]]],
caml_string_of_jsbytes("rgb(%d,%d,%d)")],
_b1_=
[0,
[11,
caml_string_of_jsbytes("rgb("),
[4,
0,
0,
0,
[12,37,[12,44,[4,0,0,0,[12,37,[12,44,[4,0,0,0,[12,37,[12,41,0]]]]]]]]]],
caml_string_of_jsbytes("rgb(%d%%,%d%%,%d%%)")],
_b2_=
[0,
[11,
caml_string_of_jsbytes("rgba("),
[4,
0,
0,
0,
[12,44,[4,0,0,0,[12,44,[4,0,0,0,[12,44,[8,[0,0,0],0,0,[12,41,0]]]]]]]]],
caml_string_of_jsbytes("rgba(%d,%d,%d,%f)")],
_b3_=
[0,
[11,
caml_string_of_jsbytes("rgba("),
[4,
0,
0,
0,
[12,
37,
[12,44,[4,0,0,0,[12,37,[12,44,[4,0,0,0,[12,37,[12,44,partial]]]]]]]]]],
caml_string_of_jsbytes("rgba(%d%%,%d%%,%d%%,%f)")],
_b4_=
[0,
[11,
caml_string_of_jsbytes("hsl("),
[4,
0,
0,
0,
[12,44,[4,0,0,0,[12,37,[12,44,[4,0,0,0,[12,37,[12,41,0]]]]]]]]],
caml_string_of_jsbytes("hsl(%d,%d%%,%d%%)")],
_b5_=
[0,
[11,
caml_string_of_jsbytes("hsla("),
[4,
0,
0,
0,
[12,
44,
[4,
0,
0,
0,
[12,
37,
[12,44,[4,0,0,0,[12,37,[12,44,[8,partial$1,0,0,partial$0]]]]]]]]]],
caml_string_of_jsbytes("hsla(%d,%d%%,%d%%,%f)")],
_x_=[0,240,248,255],
_y_=[0,250,235,215],
_z_=[0,0,255,255],
_A_=[0,127,255,212],
_B_=[0,240,255,255],
_C_=[0,245,245,220],
_D_=[0,255,228,196],
_E_=[0,0,0,0],
_F_=[0,255,235,205],
_G_=[0,0,0,255],
_H_=[0,138,43,226],
_I_=[0,165,42,42],
_J_=[0,222,184,135],
_K_=[0,95,158,160],
_L_=[0,127,255,0],
_M_=[0,210,105,30],
_N_=[0,255,127,80],
_O_=[0,100,149,237],
_P_=[0,255,248,220],
_Q_=[0,220,20,60],
_R_=[0,0,255,255],
_S_=[0,0,0,139],
_T_=[0,0,139,139],
_U_=[0,184,134,11],
_V_=[0,169,169,169],
_W_=[0,0,100,0],
_X_=[0,169,169,169],
_Y_=[0,189,183,107],
_Z_=[0,139,0,139],
___=[0,85,107,47],
_$_=[0,255,140,0],
_aa_=[0,153,50,204],
_ab_=[0,139,0,0],
_ac_=[0,233,150,122],
_ad_=[0,143,188,143],
_ae_=[0,72,61,139],
_af_=[0,47,79,79],
_ag_=[0,47,79,79],
_ah_=[0,0,206,209],
_ai_=[0,148,0,211],
_aj_=[0,255,20,147],
_ak_=[0,0,191,255],
_al_=[0,105,105,105],
_am_=[0,105,105,105],
_an_=[0,30,144,255],
_ao_=[0,178,34,34],
_ap_=[0,255,250,240],
_aq_=[0,34,139,34],
_ar_=[0,255,0,255],
_as_=[0,220,220,220],
_at_=[0,248,248,255],
_au_=[0,255,215,0],
_av_=[0,218,165,32],
_aw_=[0,128,128,128],
_ax_=[0,128,128,128],
_ay_=[0,0,128,0],
_az_=[0,173,255,47],
_aA_=[0,240,255,240],
_aB_=[0,255,105,180],
_aC_=[0,205,92,92],
_aD_=[0,75,0,130],
_aE_=[0,255,255,240],
_aF_=[0,240,230,140],
_aG_=[0,230,230,250],
_aH_=[0,255,240,245],
_aI_=[0,124,252,0],
_aJ_=[0,255,250,205],
_aK_=[0,173,216,230],
_aL_=[0,240,128,128],
_aM_=[0,224,255,255],
_aN_=[0,250,250,210],
_aO_=[0,211,211,211],
_aP_=[0,144,238,144],
_aQ_=[0,211,211,211],
_aR_=[0,255,182,193],
_aS_=[0,255,160,122],
_aT_=[0,32,178,170],
_aU_=[0,135,206,250],
_aV_=[0,119,136,153],
_aW_=[0,119,136,153],
_aX_=[0,176,196,222],
_aY_=[0,255,255,224],
_aZ_=[0,0,255,0],
_a0_=[0,50,205,50],
_a1_=[0,250,240,230],
_a2_=[0,255,0,255],
_a3_=[0,128,0,0],
_a4_=[0,102,205,170],
_a5_=[0,0,0,205],
_a6_=[0,186,85,211],
_a7_=[0,147,112,219],
_a8_=[0,60,179,113],
_a9_=[0,123,104,238],
_a__=[0,0,250,154],
_a$_=[0,72,209,204],
_ba_=[0,199,21,133],
_bb_=[0,25,25,112],
_bc_=[0,245,255,250],
_bd_=[0,255,228,225],
_be_=[0,255,228,181],
_bf_=[0,255,222,173],
_bg_=[0,0,0,128],
_bh_=[0,253,245,230],
_bi_=[0,128,128,0],
_bj_=[0,107,142,35],
_bk_=[0,255,165,0],
_bl_=[0,255,69,0],
_bm_=[0,218,112,214],
_bn_=[0,238,232,170],
_bo_=[0,152,251,152],
_bp_=[0,175,238,238],
_bq_=[0,219,112,147],
_br_=[0,255,239,213],
_bs_=[0,255,218,185],
_bt_=[0,205,133,63],
_bu_=[0,255,192,203],
_bv_=[0,221,160,221],
_bw_=[0,176,224,230],
_bx_=[0,128,0,128],
_by_=[0,255,0,0],
_bz_=[0,188,143,143],
_bA_=[0,65,105,225],
_bB_=[0,139,69,19],
_bC_=[0,250,128,114],
_bD_=[0,244,164,96],
_bE_=[0,46,139,87],
_bF_=[0,255,245,238],
_bG_=[0,160,82,45],
_bH_=[0,192,192,192],
_bI_=[0,135,206,235],
_bJ_=[0,106,90,205],
_bK_=[0,112,128,144],
_bL_=[0,112,128,144],
_bM_=[0,255,250,250],
_bN_=[0,0,255,127],
_bO_=[0,70,130,180],
_bP_=[0,210,180,140],
_bQ_=[0,0,128,128],
_bR_=[0,216,191,216],
_bS_=[0,255,99,71],
_bT_=[0,64,224,208],
_bU_=[0,238,130,238],
_bV_=[0,245,222,179],
_bW_=[0,255,255,255],
_bX_=[0,245,245,245],
_bY_=[0,255,255,0],
_bZ_=[0,154,205,50];
function symbol(x,y){return x < y?1:0}
function symbol$0(x,y){return x <= y?1:0}
function symbol$1(x,y){return x !== y?1:0}
function symbol$2(x,y){return x === y?1:0}
function symbol$3(x,y){return y < x?1:0}
function symbol$4(x,y){return y <= x?1:0}
var compare=runtime.caml_int_compare;
function equal(x,y){return x === y?1:0}
function max(x,y){return y <= x?x:y}
function min(x,y){return x <= y?x:y}
var
Int_replace_polymorphic_compar=
[0,
symbol,
symbol$0,
symbol$1,
symbol$2,
symbol$3,
symbol$4,
compare,
equal,
max,
min],
make=Stdlib_String[1],
init=Stdlib_String[2],
empty=Stdlib_String[3],
of_bytes=Stdlib_String[4],
to_bytes=Stdlib_String[5],
concat=Stdlib_String[6],
cat=Stdlib_String[7],
compare$0=Stdlib_String[9],
starts_with=Stdlib_String[10],
ends_with=Stdlib_String[11],
contains_from=Stdlib_String[12],
rcontains_from=Stdlib_String[13],
contains=Stdlib_String[14],
sub=Stdlib_String[15],
split_on_char=Stdlib_String[16],
map=Stdlib_String[17],
mapi=Stdlib_String[18],
fold_left=Stdlib_String[19],
fold_right=Stdlib_String[20],
for_all=Stdlib_String[21],
exists=Stdlib_String[22],
trim=Stdlib_String[23],
escaped=Stdlib_String[24],
uppercase_ascii=Stdlib_String[25],
lowercase_ascii=Stdlib_String[26],
capitalize_ascii=Stdlib_String[27],
uncapitalize_ascii=Stdlib_String[28],
iter=Stdlib_String[29],
iteri=Stdlib_String[30],
index_from=Stdlib_String[31],
index_from_opt=Stdlib_String[32],
rindex_from=Stdlib_String[33],
rindex_from_opt=Stdlib_String[34],
index=Stdlib_String[35],
index_opt=Stdlib_String[36],
rindex=Stdlib_String[37],
rindex_opt=Stdlib_String[38],
to_seq=Stdlib_String[39],
to_seqi=Stdlib_String[40],
of_seq=Stdlib_String[41],
get_utf_8_uchar=Stdlib_String[42],
is_valid_utf_8=Stdlib_String[43],
get_utf_16be_uchar=Stdlib_String[44],
is_valid_utf_16be=Stdlib_String[45],
get_utf_16le_uchar=Stdlib_String[46],
is_valid_utf_16le=Stdlib_String[47],
blit=Stdlib_String[48],
copy=Stdlib_String[49],
fill=Stdlib_String[50],
uppercase=Stdlib_String[51],
lowercase=Stdlib_String[52],
capitalize=Stdlib_String[53],
uncapitalize=Stdlib_String[54],
get_uint8=Stdlib_String[55],
get_int8=Stdlib_String[56],
get_uint16_ne=Stdlib_String[57],
get_uint16_be=Stdlib_String[58],
get_uint16_le=Stdlib_String[59],
get_int16_ne=Stdlib_String[60],
get_int16_be=Stdlib_String[61],
get_int16_le=Stdlib_String[62],
get_int32_ne=Stdlib_String[63],
get_int32_be=Stdlib_String[64],
get_int32_le=Stdlib_String[65],
get_int64_ne=Stdlib_String[66],
get_int64_be=Stdlib_String[67],
get_int64_le=Stdlib_String[68];
function equal$0(x,y){return runtime.caml_string_equal(x,y)}
var
String=
[0,
make,
init,
empty,
of_bytes,
to_bytes,
concat,
cat,
compare$0,
starts_with,
ends_with,
contains_from,
rcontains_from,
contains,
sub,
split_on_char,
map,
mapi,
fold_left,
fold_right,
for_all,
exists,
trim,
escaped,
uppercase_ascii,
lowercase_ascii,
capitalize_ascii,
uncapitalize_ascii,
iter,
iteri,
index_from,
index_from_opt,
rindex_from,
rindex_from_opt,
index,
index_opt,
rindex,
rindex_opt,
to_seq,
to_seqi,
of_seq,
get_utf_8_uchar,
is_valid_utf_8,
get_utf_16be_uchar,
is_valid_utf_16be,
get_utf_16le_uchar,
is_valid_utf_16le,
blit,
copy,
fill,
uppercase,
lowercase,
capitalize,
uncapitalize,
get_uint8,
get_int8,
get_uint16_ne,
get_uint16_be,
get_uint16_le,
get_int16_ne,
get_int16_be,
get_int16_le,
get_int32_ne,
get_int32_be,
get_int32_le,
get_int64_ne,
get_int64_be,
get_int64_le,
equal$0],
chr=Stdlib_Char[1],
escaped$0=Stdlib_Char[2],
lowercase$0=Stdlib_Char[3],
uppercase$0=Stdlib_Char[4],
lowercase_ascii$0=Stdlib_Char[5],
uppercase_ascii$0=Stdlib_Char[6],
compare$1=Stdlib_Char[7];
function equal$1(x,y){return x === y?1:0}
var
Char=
[0,
chr,
escaped$0,
lowercase$0,
uppercase$0,
lowercase_ascii$0,
uppercase_ascii$0,
compare$1,
equal$1],
symbol$5=Int_replace_polymorphic_compar[1],
symbol$6=Int_replace_polymorphic_compar[2],
symbol$7=Int_replace_polymorphic_compar[3],
symbol$8=Int_replace_polymorphic_compar[4],
symbol$9=Int_replace_polymorphic_compar[5],
symbol$10=Int_replace_polymorphic_compar[6],
compare$2=Int_replace_polymorphic_compar[7],
equal$2=Int_replace_polymorphic_compar[8],
max$0=Int_replace_polymorphic_compar[9],
min$0=Int_replace_polymorphic_compar[10],
Js_of_ocaml_Import=
[0,
Poly,
Int_replace_polymorphic_compar,
String,
Char,
symbol$5,
symbol$6,
symbol$7,
symbol$8,
symbol$9,
symbol$10,
compare$2,
equal$2,
max$0,
min$0];
caml_register_global(1638,Js_of_ocaml_Import,"Js_of_ocaml__Import");
var global=globalThis,Unsafe=[0,global],no_handler=null,t39=undefined;
function return$0(_gO_){return _gO_}
function map$0(x,f){return x == no_handler?no_handler:caml_call1(f,x)}
function bind(x,f){return x == no_handler?no_handler:caml_call1(f,x)}
function test(x){return 1 - (x == no_handler?1:0)}
function iter$0(x,f)
{var _gN_=1 - (x == no_handler?1:0);return _gN_?caml_call1(f,x):_gN_}
function case$0(x,f,g)
{return x == no_handler?caml_call1(f,0):caml_call1(g,x)}
function get(x,f){return x == no_handler?caml_call1(f,0):x}
function option(x){if(x){var x$0=x[1];return x$0}return no_handler}
function to_option(x)
{function _gM_(x){return [0,x]}
return case$0(x,function(param){return 0},_gM_)}
var
Opt=
[0,
no_handler,
return$0,
map$0,
bind,
test,
iter$0,
case$0,
get,
option,
to_option];
function return$1(_gL_){return _gL_}
function map$1(x,f){return x === t39?t39:caml_call1(f,x)}
function bind$0(x,f){return x === t39?t39:caml_call1(f,x)}
function test$0(x){return x !== t39?1:0}
function iter$1(x,f)
{var _gK_=x !== t39?1:0;return _gK_?caml_call1(f,x):_gK_}
function case$1(x,f,g){return x === t39?caml_call1(f,0):caml_call1(g,x)}
function get$0(x,f){return x === t39?caml_call1(f,0):x}
function option$0(x){if(x){var x$0=x[1];return x$0}return t39}
function to_option$0(x)
{function _gJ_(x){return [0,x]}
return case$1(x,function(param){return 0},_gJ_)}
var
Optdef=
[0,
t39,
return$1,
map$1,
bind$0,
test$0,
iter$1,
case$1,
get$0,
option$0,
to_option$0];
function coerce(x,f,g)
{function _gH_(param){return caml_call1(g,x)}
var _gI_=caml_call1(f,x);
return caml_call2(Opt[8],_gI_,_gH_)}
function coerce_opt(x,f,g)
{function _gF_(param){return caml_call1(g,x)}
var _gG_=caml_call2(Opt[4],x,f);
return caml_call2(Opt[8],_gG_,_gF_)}
var
t25=true,
t4=false,
string_constr=Unsafe[1].String,
t11=Unsafe[1].RegExp,
t4$0=Unsafe[1].Object;
function object_keys(t3){return t4$0.keys(t3)}
var
array_length=Unsafe[1].Array,
array_get=caml_js_get,
array_set=caml_js_set;
function array_map(f,a)
{return a.map
(caml_js_wrap_callback
(function(x,idx,param){return caml_call1(f,x)}))}
function array_mapi(f,a)
{return a.map
(caml_js_wrap_callback
(function(x,idx,param){return caml_call2(f,idx,x)}))}
function str_array(_gE_){return _gE_}
function match_result(_gD_){return _gD_}
var
t122=Unsafe[1].Date,
math=Unsafe[1].Math,
error_constr=Unsafe[1].Error,
include=Jsoo_runtime[3],
raise=include[1],
attach_js_backtrace=include[2],
of_exn=include[3],
Error=include[4];
function name(e){return caml_string_of_jsstring(e.name)}
function message(e){return caml_string_of_jsstring(e.message)}
function stack(e)
{var _gC_=caml_call2(Opt[3],e.stack,caml_string_of_jsstring);
return caml_call1(Opt[10],_gC_)}
function to_string(e){return caml_string_of_jsstring(e.toString())}
function raise_js_error(e){return caml_call1(raise,e)}
function string_of_error(e){return to_string(e)}
var JSON=Unsafe[1].JSON;
function decodeURI(s){return Unsafe[1].decodeURI(s)}
function decodeURIComponent(s){return Unsafe[1].decodeURIComponent(s)}
function encodeURI(s){return Unsafe[1].encodeURI(s)}
function encodeURIComponent(s){return Unsafe[1].encodeURIComponent(s)}
function escape(s){return Unsafe[1].escape(s)}
function unescape(s){return Unsafe[1].unescape(s)}
function isNaN(i){return Unsafe[1].isNaN(i) | 0}
function parseInt(s)
{var s$0=Unsafe[1].parseInt(s);
return isNaN(s$0)?caml_call1(Stdlib[2],cst_parseInt):s$0}
function parseFloat(s)
{var s$0=Unsafe[1].parseFloat(s);
return isNaN(s$0)?caml_call1(Stdlib[2],cst_parseFloat):s$0}
function _a_(param)
{if(param[1] === Error){var e=param[2];return [0,to_string(e)]}return 0}
caml_call1(Stdlib_Printexc[9],_a_);
function _b_(e)
{return e instanceof array_length
?0
:[0,caml_string_of_jsstring(e.toString())]}
caml_call1(Stdlib_Printexc[9],_b_);
function export_js(field,x){return jsoo_exports[field] = x}
function export$0(field,x)
{return export_js(caml_jsstring_of_string(field),x)}
function export_all(obj)
{var
t27=object_keys(obj),
t26=
caml_js_wrap_callback
(function(key,param,_gB_){return export_js(key,obj[key])});
return t27.forEach(t26)}
var _c_=runtime.caml_js_error_of_exception;
function _d_(_gA_){return _gA_}
var
_e_=
[0,
to_string,
name,
message,
stack,
raise,
attach_js_backtrace,
of_exn,
Error,
function(_gz_){return _gz_},
_d_];
function _f_(_gy_){return _gy_}
var
Js_of_ocaml_Js=
[0,
no_handler,
function(_gx_){return _gx_},
t39,
_f_,
Opt,
Optdef,
t25,
t4,
string_constr,
t11,
t11,
t11,
object_keys,
array_length,
array_length,
array_get,
array_set,
array_map,
array_mapi,
str_array,
match_result,
t122,
t122,
t122,
t122,
t122,
t122,
t122,
t122,
t122,
math,
error_constr,
_e_,
JSON,
decodeURI,
decodeURIComponent,
encodeURI,
encodeURIComponent,
escape,
unescape,
isNaN,
parseInt,
parseFloat,
coerce,
coerce_opt,
export$0,
export_all,
Unsafe,
string_of_error,
raise_js_error,
attach_js_backtrace,
_c_,
Error];
caml_register_global(1642,Js_of_ocaml_Js,"Js_of_ocaml__Js");
function list_of_nodeList(nodeList)
{var length=nodeList.length,acc=0,i=0;
for(;;)
{if(caml_call2(symbol$5,i,length))
{var _gw_=nodeList.item(i),match=caml_call1(Opt[10],_gw_);
if(match)
{var e=match[1],i$0=i + 1 | 0,acc$0=[0,e,acc],acc=acc$0,i=i$0;
continue}
var i$1=i + 1 | 0,i=i$1;
continue}
return caml_call1(Stdlib_List[9],acc)}}
var
disconnected=1,
preceding=2,
following=4,
contains$0=8,
contained_by=16,
implementation_specific=32;
function has(t,mask){return caml_call2(symbol$8,t & mask,mask)}
function add(x,y){return x | y}
var
DocumentPosition=
[0,
disconnected,
preceding,
following,
contains$0,
contained_by,
implementation_specific,
has,
add,
add];
function appendChild(p,n){p.appendChild(n);return 0}
function removeChild(p,n){p.removeChild(n);return 0}
function replaceChild(p,n,o){p.replaceChild(n,o);return 0}
function insertBefore(p,n,o){p.insertBefore(n,o);return 0}
function nodeType(e)
{var match=e.nodeType;
if(match)
switch(match - 1 | 0)
{case 0:return [0,e];case 1:return [1,e];case 2:case 3:return [2,e]}
return [3,e]}
function cast(e,t){return e.nodeType === t?e:no_handler}
function element(e){return cast(e,1)}
function text(e)
{if(3 !== e.nodeType && 4 !== e.nodeType)return no_handler;return e}
function attr(e){return cast(e,2)}
function handler(f)
{return function(e)
{if(caml_call1(Opt[5],e))
{var res=caml_call1(f,e);
if(1 - (res | 0))e.preventDefault();
return res}
var t18=event,t17=caml_call1(f,t18);
if(1 - (t17 | 0))t18.returnValue = t17;
return t17}}
function full_handler(f)
{return runtime.caml_js_wrap_meth_callback_unsafe
(function(this$0,e)
{if(caml_call1(Opt[5],e))
{var res=caml_call2(f,this$0,e);
if(1 - (res | 0))e.preventDefault();
return res}
var t21=event,t20=caml_call2(f,this$0,t21);
if(1 - (t20 | 0))t21.returnValue = t20;
return t20})}
function invoke_handler(f,this$0,event){return f.call(this$0,event)}
function eventTarget(e)
{function _gt_(param)
{function _gv_(param){throw Stdlib[8]}
return caml_call2(Opt[8],e.srcElement,_gv_)}
var t27=caml_call2(Opt[8],e.target,_gt_);
if(t27 instanceof Unsafe[1].Node)
{if(3 === t27.nodeType)
{var _gu_=function(param){throw [0,Assert_failure,_g_]};
return caml_call2(Opt[8],t27.parentNode,_gu_)}
return t27}
return t27}
function make$0(s){return caml_jsstring_of_string(s)}
var Event=[0,make$0];
function addEventListenerWithOptions(t50,t47,capture,once,passive,t48)
{if(t50.addEventListener === t39)
{var
t34="on".concat(t47),
t35=
function(e)
{var _gq_=[0,t48,e,[0]];
return function(_gr_,_gs_)
{return runtime.caml_js_call(_gq_,_gr_,_gs_)}};
t50.attachEvent(t34,t35);
return function(param){return t50.detachEvent(t34,t35)}}
var t49={};
function iter(t,f){if(t){var b=t[1];return caml_call1(f,b)}return 0}
iter(capture,function(t37){return t49.capture = t37});
iter(once,function(t39){return t49.once = t39});
iter(passive,function(t41){return t49.passive = t41});
t50.addEventListener(t47,t48,t49);
return function(param){return t50.removeEventListener(t47,t48,t49)}}
function addEventListener(e,typ,h,capt)
{return addEventListenerWithOptions(e,typ,[0,capt],0,0,h)}
function removeEventListener(id){return caml_call1(id,0)}
function preventDefault(t54)
{if(caml_call1(Optdef[5],t54.preventDefault))return t54.preventDefault();
var t53=! ! 0;
return t54.returnValue = t53}
function createCustomEvent(bubbles,cancelable,detail,t62)
{function opt_iter(f,param)
{if(param){var x=param[1];return caml_call1(f,x)}return 0}
var t63={};
opt_iter(function(x){var t55=! ! x;return t63.bubbles = t55},bubbles);
opt_iter
(function(x){var t57=! ! x;return t63.cancelable = t57},cancelable);
opt_iter(function(t59){return t63.detail = t59},detail);
var t64=Unsafe[1].CustomEvent;
return new t64(t62,t63)}
var
Js_of_ocaml_Dom=
[0,
DocumentPosition,
insertBefore,
replaceChild,
removeChild,
appendChild,
list_of_nodeList,
nodeType,
[0,element,text,attr],
no_handler,
handler,
full_handler,
invoke_handler,
eventTarget,
Event,
addEventListenerWithOptions,
addEventListener,
removeEventListener,
preventDefault,
createCustomEvent];
caml_register_global(1645,Js_of_ocaml_Dom,"Js_of_ocaml__Dom");
var
arrayBuffer=Unsafe[1].ArrayBuffer,
int8Array_inBuffer=Unsafe[1].Int8Array,
t11$0=Unsafe[1].Uint8Array,
int16Array_inBuffer=Unsafe[1].Int16Array,
uint16Array_inBuffer=Unsafe[1].Uint16Array,
int32Array_inBuffer=Unsafe[1].Int32Array,
uint32Array_inBuffer=Unsafe[1].Uint32Array,
float32Array_inBuffer=Unsafe[1].Float32Array,
float64Array_inBuffer=Unsafe[1].Float64Array,
set=caml_js_set;
function get$1(a,i){return a[i]}
function unsafe_get(a,i){return a[i]}
var dataView=Unsafe[1].DataView;
function of_arrayBuffer(ab)
{var uint8=new t11$0(ab);return caml_string_of_array(uint8)}
var
Js_of_ocaml_Typed_array=
[0,
arrayBuffer,
runtime.caml_ba_kind_of_typed_array,
runtime.caml_ba_to_typed_array,
runtime.caml_ba_from_typed_array,
int8Array_inBuffer,
int8Array_inBuffer,
int8Array_inBuffer,
int8Array_inBuffer,
int8Array_inBuffer,
t11$0,
t11$0,
t11$0,
t11$0,
t11$0,
int16Array_inBuffer,
int16Array_inBuffer,
int16Array_inBuffer,
int16Array_inBuffer,
int16Array_inBuffer,
uint16Array_inBuffer,
uint16Array_inBuffer,
uint16Array_inBuffer,
uint16Array_inBuffer,
uint16Array_inBuffer,
int32Array_inBuffer,
int32Array_inBuffer,
int32Array_inBuffer,
int32Array_inBuffer,
int32Array_inBuffer,
uint32Array_inBuffer,
uint32Array_inBuffer,
uint32Array_inBuffer,
uint32Array_inBuffer,
uint32Array_inBuffer,
float32Array_inBuffer,
float32Array_inBuffer,
float32Array_inBuffer,
float32Array_inBuffer,
float32Array_inBuffer,
float64Array_inBuffer,
float64Array_inBuffer,
float64Array_inBuffer,
float64Array_inBuffer,
float64Array_inBuffer,
set,
get$1,
unsafe_get,
dataView,
dataView,
[0,
runtime.bigstring_to_array_buffer,
runtime.bigstring_to_typed_array,
runtime.bigstring_of_array_buffer,
runtime.bigstring_of_typed_array],
[0,of_arrayBuffer,caml_string_of_array]];
caml_register_global
(1646,Js_of_ocaml_Typed_array,"Js_of_ocaml__Typed_array");
var t3=Unsafe[1].Blob;
function filter_map(f,param)
{var param$0=param;
for(;;)
{if(param$0)
{var q=param$0[2],v=param$0[1],match=caml_call1(f,v);
if(match){var v$0=match[1];return [0,v$0,filter_map(f,q)]}
var param$0=q;
continue}
return 0}}
function blob_raw(contentType,endings,a)
{var _gm_=0;
if(endings)
var _gn_=116179762 <= endings[1]?_h_:_i_,_go_=_gn_;
else
var _go_=0;
var
_gp_=[0,[0,cst_type,contentType],[0,[0,cst_endings,_go_],_gm_]],
options=
filter_map
(function(param)
{var v=param[2],name=param[1];
if(v)
{var v$0=v[1];return [0,[0,name,caml_jsstring_of_string(v$0)]]}
return 0},
_gp_),
options$0=
options
?runtime.caml_js_object(caml_call1(Stdlib_Array[12],options))
:t39,
t1=caml_js_from_array(a);
return new t3(t1,options$0)}
function blob_from_string(contentType,endings,s)
{return blob_raw(contentType,endings,[0,caml_jsstring_of_string(s)])}
function blob_from_any(contentType,endings,l)
{function _gk_(param)
{var _gl_=param[1];
if(155580615 === _gl_){var s=param[2];return s}
if(486041214 <= _gl_)
{if(1037850489 <= _gl_){var a=param[2];return a}
var a$0=param[2];
return a$0}
if(288368849 <= _gl_)
{var s$0=param[2];return caml_jsstring_of_string(s$0)}
var b=param[2];
return b}
var l$0=caml_call2(Stdlib_List[19],_gk_,l);
return blob_raw(contentType,endings,caml_call1(Stdlib_Array[12],l$0))}
function filename(file)
{var match=caml_call1(Optdef[10],file.name);
if(match){var name=match[1];return name}
var match$0=caml_call1(Optdef[10],file.fileName);
if(match$0){var name$0=match$0[1];return name$0}
return caml_call1(Stdlib[2],cst_can_t_retrieve_file_name_n)}
var doc_constr=Unsafe[1].Document;
function document(e){return e instanceof doc_constr?e:no_handler}
function blob(e){return e instanceof t3?e:no_handler}
function string(e){return typeof e === "string"?e:no_handler}
function arrayBuffer$0(e){return e instanceof arrayBuffer?e:no_handler}
var
loadstart=caml_call1(Event[1],cst_loadstart),
progress=caml_call1(Event[1],cst_progress),
abort=caml_call1(Event[1],cst_abort),
error=caml_call1(Event[1],cst_error),
load=caml_call1(Event[1],cst_load),
loadend=caml_call1(Event[1],cst_loadend),
ReaderEvent=[0,loadstart,progress,abort,error,load,loadend],
fileReader=Unsafe[1].FileReader,
Js_of_ocaml_File=
[0,
blob_from_string,
blob_from_any,
[0,document,blob,function(_gj_){return _gj_},string,arrayBuffer$0],
ReaderEvent,
filename,
fileReader,
addEventListener];
caml_register_global(1648,Js_of_ocaml_File,"Js_of_ocaml__File");
var
onIE=runtime.caml_js_on_ie(0) | 0,
click=caml_call1(Event[1],cst_click),
copy$0=caml_call1(Event[1],cst_copy),
cut=caml_call1(Event[1],cst_cut),
paste=caml_call1(Event[1],cst_paste),
dblclick=caml_call1(Event[1],cst_dblclick),
mousedown=caml_call1(Event[1],cst_mousedown),
mouseup=caml_call1(Event[1],cst_mouseup),
mouseover=caml_call1(Event[1],cst_mouseover),
mousemove=caml_call1(Event[1],cst_mousemove),
mouseout=caml_call1(Event[1],cst_mouseout),
keypress=caml_call1(Event[1],cst_keypress),
keydown=caml_call1(Event[1],cst_keydown),
keyup=caml_call1(Event[1],cst_keyup),
mousewheel=caml_call1(Event[1],cst_mousewheel),
DOMMouseScroll=caml_call1(Event[1],cst_DOMMouseScroll),
touchstart=caml_call1(Event[1],cst_touchstart),
touchmove=caml_call1(Event[1],cst_touchmove),
touchend=caml_call1(Event[1],cst_touchend),
touchcancel=caml_call1(Event[1],cst_touchcancel),
dragstart=caml_call1(Event[1],cst_dragstart),
dragend=caml_call1(Event[1],cst_dragend),
dragenter=caml_call1(Event[1],cst_dragenter),
dragover=caml_call1(Event[1],cst_dragover),
dragleave=caml_call1(Event[1],cst_dragleave),
drag=caml_call1(Event[1],cst_drag),
drop=caml_call1(Event[1],cst_drop),
hashchange=caml_call1(Event[1],cst_hashchange),
change=caml_call1(Event[1],cst_change),
input=caml_call1(Event[1],cst_input),
timeupdate=caml_call1(Event[1],cst_timeupdate),
submit=caml_call1(Event[1],cst_submit),
scroll=caml_call1(Event[1],cst_scroll),
focus=caml_call1(Event[1],cst_focus),
blur=caml_call1(Event[1],cst_blur),
load$0=caml_call1(Event[1],cst_load$0),
unload=caml_call1(Event[1],cst_unload),
beforeunload=caml_call1(Event[1],cst_beforeunload),
resize=caml_call1(Event[1],cst_resize),
orientationchange=caml_call1(Event[1],cst_orientationchange),
popstate=caml_call1(Event[1],cst_popstate),
error$0=caml_call1(Event[1],cst_error$0),
abort$0=caml_call1(Event[1],cst_abort$0),
select=caml_call1(Event[1],cst_select),
online=caml_call1(Event[1],cst_online),
offline=caml_call1(Event[1],cst_offline),
checking=caml_call1(Event[1],cst_checking),
noupdate=caml_call1(Event[1],cst_noupdate),
downloading=caml_call1(Event[1],cst_downloading),
progress$0=caml_call1(Event[1],cst_progress$0),
updateready=caml_call1(Event[1],cst_updateready),
cached=caml_call1(Event[1],cst_cached),
obsolete=caml_call1(Event[1],cst_obsolete),
domContentLoaded=caml_call1(Event[1],cst_DOMContentLoaded),
animationstart=caml_call1(Event[1],cst_animationstart),
animationend=caml_call1(Event[1],cst_animationend),
animationiteration=caml_call1(Event[1],cst_animationiteration),
animationcancel=caml_call1(Event[1],cst_animationcancel),
canplay=caml_call1(Event[1],cst_canplay),
canplaythrough=caml_call1(Event[1],cst_canplaythrough),
durationchange=caml_call1(Event[1],cst_durationchange),
emptied=caml_call1(Event[1],cst_emptied),
ended=caml_call1(Event[1],cst_ended),
gotpointercapture=caml_call1(Event[1],cst_gotpointercapture),
loadeddata=caml_call1(Event[1],cst_loadeddata),
loadedmetadata=caml_call1(Event[1],cst_loadedmetadata),
loadstart$0=caml_call1(Event[1],cst_loadstart$0),
lostpointercapture=caml_call1(Event[1],cst_lostpointercapture),
message$0=caml_call1(Event[1],cst_message),
pause=caml_call1(Event[1],cst_pause),
play=caml_call1(Event[1],cst_play),
playing=caml_call1(Event[1],cst_playing),
pointerenter=caml_call1(Event[1],cst_pointerenter),
pointercancel=caml_call1(Event[1],cst_pointercancel),
pointerdown=caml_call1(Event[1],cst_pointerdown),
pointerleave=caml_call1(Event[1],cst_pointerleave),
pointermove=caml_call1(Event[1],cst_pointermove),
pointerout=caml_call1(Event[1],cst_pointerout),
pointerover=caml_call1(Event[1],cst_pointerover),
pointerup=caml_call1(Event[1],cst_pointerup),
ratechange=caml_call1(Event[1],cst_ratechange),
seeked=caml_call1(Event[1],cst_seeked),
seeking=caml_call1(Event[1],cst_seeking),
stalled=caml_call1(Event[1],cst_stalled),
suspend=caml_call1(Event[1],cst_suspend),
volumechange=caml_call1(Event[1],cst_volumechange),
waiting=caml_call1(Event[1],cst_waiting),
make$1=Event[1],
Event$0=
[0,
click,
copy$0,
cut,
paste,
dblclick,
mousedown,
mouseup,
mouseover,
mousemove,
mouseout,
keypress,
keydown,
keyup,
mousewheel,
DOMMouseScroll,
touchstart,
touchmove,
touchend,
touchcancel,
dragstart,
dragend,
dragenter,
dragover,
dragleave,
drag,
drop,
hashchange,
change,
input,
timeupdate,
submit,
scroll,
focus,
blur,
load$0,
unload,
beforeunload,
resize,
orientationchange,
popstate,
error$0,
abort$0,
select,
online,
offline,
checking,
noupdate,
downloading,
progress$0,
updateready,
cached,
obsolete,
domContentLoaded,
animationstart,
animationend,
animationiteration,
animationcancel,
canplay,
canplaythrough,
durationchange,
emptied,
ended,
gotpointercapture,
loadeddata,
loadedmetadata,
loadstart$0,
lostpointercapture,
message$0,
pause,
play,
playing,
pointerenter,
pointercancel,
pointerdown,
pointerleave,
pointermove,
pointerout,
pointerover,
pointerup,
ratechange,
seeked,
seeking,
stalled,
suspend,
volumechange,
waiting,
make$1],
d="2d";
function location_origin(loc)
{function _gh_(o){return o}
function _gi_(param)
{var t8=loc.protocol,t7=loc.hostname,t9=loc.port;
if
(caml_call2(symbol$8,t8.length,0)
&&
caml_call2(symbol$8,t7.length,0))
return "";
var t13=t8.concat("//",t7);
if(caml_call2(symbol$9,t9.length,0))
{var t12=loc.port;return t13.concat(":",t12)}
return t13}
return caml_call3(Optdef[7],loc.origin,_gi_,_gh_)}
var _j_=Unsafe[1],t87=_j_.document;
function getElementById(id)
{function _ge_(pnode){return pnode}
function _gf_(param){throw Stdlib[8]}
var t15=caml_jsstring_of_string(id),_gg_=t87.getElementById(t15);
return caml_call3(Opt[7],_gg_,_gf_,_ge_)}
function getElementById_exn(id)
{function _ga_(pnode){return pnode}
function _gb_(param)
{var _gd_=caml_call2(Stdlib_Printf[4],_k_,id);
return caml_call1(Stdlib[2],_gd_)}
var t17=caml_jsstring_of_string(id),_gc_=t87.getElementById(t17);
return caml_call3(Opt[7],_gc_,_gb_,_ga_)}
function getElementById_opt(id)
{var t19=caml_jsstring_of_string(id),_f$_=t87.getElementById(t19);
return caml_call1(Opt[10],_f$_)}
function getElementById_coerce(id,coerce)
{function _f7_(e)
{var _f__=caml_call1(coerce,e);return caml_call1(Opt[10],_f__)}
function _f8_(param){return 0}
var t21=caml_jsstring_of_string(id),_f9_=t87.getElementById(t21);
return caml_call3(Opt[7],_f9_,_f8_,_f7_)}
function opt_iter(x,f){if(x){var v=x[1];return caml_call1(f,v)}return 0}
function createElement(t24,name)
{var t23=caml_jsstring_of_string(name);return t24.createElement(t23)}
function unsafeCreateElement(doc,name){return createElement(doc,name)}
var createElementSyntax=[0,785140586];
function unsafeCreateElementEx(type,name,doc,elt)
{for(;;)
{if(0 === type && 0 === name)return createElement(doc,elt);
var _f1_=createElementSyntax[1];
if(785140586 === _f1_)
{try
{var
el=t87.createElement('<input name="x">'),
_f4_=el.tagName.toLowerCase() === "input"?1:0,
_f5_=_f4_?el.name === "x"?1:0:_f4_,
_f2_=_f5_}
catch(_f6_){var _f2_=0}
var _f3_=_f2_?982028505:-1003883683;
createElementSyntax[1] = _f3_;
continue}
if(982028505 <= _f1_)
{var t40=new array_length();
t40.push("<",caml_jsstring_of_string(elt));
opt_iter
(type,
function(t)
{var t34=caml_js_html_escape(t);
t40.push(' type="',t34,'"');
return 0});
opt_iter
(name,
function(n)
{var t38=caml_js_html_escape(n);
t40.push(' name="',t38,'"');
return 0});
t40.push(">");
return doc.createElement(t40.join(""))}
var t28=createElement(doc,elt);
opt_iter(type,function(t25){return t28.type = t25});
opt_iter(name,function(t27){return t28.name = t27});
return t28}}
function createHtml(doc){return unsafeCreateElement(doc,cst_html)}
function createHead(doc){return unsafeCreateElement(doc,cst_head)}
function createLink(doc){return unsafeCreateElement(doc,cst_link)}
function createTitle(doc){return unsafeCreateElement(doc,cst_title)}
function createMeta(doc){return unsafeCreateElement(doc,cst_meta)}
function createBase(doc){return unsafeCreateElement(doc,cst_base)}
function createStyle(doc){return unsafeCreateElement(doc,cst_style)}
function createBody(doc){return unsafeCreateElement(doc,cst_body)}
function createForm(doc){return unsafeCreateElement(doc,cst_form)}
function createOptgroup(doc){return unsafeCreateElement(doc,cst_optgroup)}
function createOption(doc){return unsafeCreateElement(doc,cst_option)}
function createSelect(type,name,doc)
{return unsafeCreateElementEx(type,name,doc,cst_select$0)}
function createInput(type,name,doc)
{return unsafeCreateElementEx(type,name,doc,cst_input$0)}
function createTextarea(type,name,doc)
{return unsafeCreateElementEx(type,name,doc,cst_textarea)}
function createButton(type,name,doc)
{return unsafeCreateElementEx(type,name,doc,cst_button)}
function createLabel(doc){return unsafeCreateElement(doc,cst_label)}
function createFieldset(doc){return unsafeCreateElement(doc,cst_fieldset)}
function createLegend(doc){return unsafeCreateElement(doc,cst_legend)}
function createUl(doc){return unsafeCreateElement(doc,cst_ul)}
function createOl(doc){return unsafeCreateElement(doc,cst_ol)}
function createDl(doc){return unsafeCreateElement(doc,cst_dl)}
function createLi(doc){return unsafeCreateElement(doc,cst_li)}
function createDiv(doc){return unsafeCreateElement(doc,cst_div)}
function createEmbed(doc){return unsafeCreateElement(doc,cst_embed)}
function createP(doc){return unsafeCreateElement(doc,cst_p)}
function createH1(doc){return unsafeCreateElement(doc,cst_h1)}
function createH2(doc){return unsafeCreateElement(doc,cst_h2)}
function createH3(doc){return unsafeCreateElement(doc,cst_h3)}
function createH4(doc){return unsafeCreateElement(doc,cst_h4)}
function createH5(doc){return unsafeCreateElement(doc,cst_h5)}
function createH6(doc){return unsafeCreateElement(doc,cst_h6)}
function createQ(doc){return unsafeCreateElement(doc,cst_q)}
function createBlockquote(doc)
{return unsafeCreateElement(doc,cst_blockquote)}
function createPre(doc){return unsafeCreateElement(doc,cst_pre)}
function createBr(doc){return unsafeCreateElement(doc,cst_br)}
function createHr(doc){return unsafeCreateElement(doc,cst_hr)}
function createIns(doc){return unsafeCreateElement(doc,cst_ins)}
function createDel(doc){return unsafeCreateElement(doc,cst_del)}
function createA(doc){return unsafeCreateElement(doc,cst_a)}
function createImg(doc){return unsafeCreateElement(doc,cst_img)}
function createObject(doc){return unsafeCreateElement(doc,cst_object)}
function createParam(doc){return unsafeCreateElement(doc,cst_param)}
function createMap(doc){return unsafeCreateElement(doc,cst_map)}
function createArea(doc){return unsafeCreateElement(doc,cst_area)}
function createScript(doc){return unsafeCreateElement(doc,cst_script)}
function createTable(doc){return unsafeCreateElement(doc,cst_table)}
function createCaption(doc){return unsafeCreateElement(doc,cst_caption)}
function createCol(doc){return unsafeCreateElement(doc,cst_col)}
function createColgroup(doc){return unsafeCreateElement(doc,cst_colgroup)}
function createThead(doc){return unsafeCreateElement(doc,cst_thead)}
function createTfoot(doc){return unsafeCreateElement(doc,cst_tfoot)}
function createTbody(doc){return unsafeCreateElement(doc,cst_tbody)}
function createTr(doc){return unsafeCreateElement(doc,cst_tr)}
function createTh(doc){return unsafeCreateElement(doc,cst_th)}
function createTd(doc){return unsafeCreateElement(doc,cst_td)}
function createSub(doc){return createElement(doc,cst_sub)}
function createSup(doc){return createElement(doc,cst_sup)}
function createSpan(doc){return createElement(doc,cst_span)}
function createTt(doc){return createElement(doc,cst_tt)}
function createI(doc){return createElement(doc,cst_i)}
function createB(doc){return createElement(doc,cst_b)}
function createBig(doc){return createElement(doc,cst_big)}
function createSmall(doc){return createElement(doc,cst_small)}
function createEm(doc){return createElement(doc,cst_em)}
function createStrong(doc){return createElement(doc,cst_strong)}
function createCite(doc){return createElement(doc,cst_cite)}
function createDfn(doc){return createElement(doc,cst_dfn)}
function createCode(doc){return createElement(doc,cst_code)}
function createSamp(doc){return createElement(doc,cst_samp)}
function createKbd(doc){return createElement(doc,cst_kbd)}
function createVar(doc){return createElement(doc,cst_var)}
function createAbbr(doc){return createElement(doc,cst_abbr)}
function createDd(doc){return createElement(doc,cst_dd)}
function createDt(doc){return createElement(doc,cst_dt)}
function createNoscript(doc){return createElement(doc,cst_noscript)}
function createAddress(doc){return createElement(doc,cst_address)}
function createFrameset(doc){return unsafeCreateElement(doc,cst_frameset)}
function createFrame(doc){return unsafeCreateElement(doc,cst_frame)}
function createIframe(doc){return unsafeCreateElement(doc,cst_iframe)}
function createAudio(doc){return unsafeCreateElement(doc,cst_audio)}
function createVideo(doc){return unsafeCreateElement(doc,cst_video)}
var
Canvas_not_available=
[248,cst_Js_of_ocaml_Dom_html_Canva,caml_fresh_oo_id(0)];
function createCanvas(doc)
{var t52=unsafeCreateElement(doc,cst_canvas);
if(1 - caml_call1(Opt[5],t52.getContext))throw Canvas_not_available;
return t52}
var
html_element=Unsafe[1].HTMLElement,
element$0=
html_element === t39
?function(e){return e.innerHTML === t39?no_handler:e}
:function(e){return e instanceof html_element?e:no_handler};
function unsafeCoerce(tag,e)
{var t56=e.tagName,_f0_=caml_jsstring_of_string(tag);
return t56.toLowerCase() === _f0_?e:no_handler}
function a(e){return unsafeCoerce(cst_a$0,e)}
function area(e){return unsafeCoerce(cst_area$0,e)}
function base(e){return unsafeCoerce(cst_base$0,e)}
function blockquote(e){return unsafeCoerce(cst_blockquote$0,e)}
function body(e){return unsafeCoerce(cst_body$0,e)}
function br(e){return unsafeCoerce(cst_br$0,e)}
function button(e){return unsafeCoerce(cst_button$0,e)}
function canvas(e){return unsafeCoerce(cst_canvas$0,e)}
function caption(e){return unsafeCoerce(cst_caption$0,e)}
function col(e){return unsafeCoerce(cst_col$0,e)}
function colgroup(e){return unsafeCoerce(cst_colgroup$0,e)}
function del(e){return unsafeCoerce(cst_del$0,e)}
function div(e){return unsafeCoerce(cst_div$0,e)}
function dl(e){return unsafeCoerce(cst_dl$0,e)}
function fieldset(e){return unsafeCoerce(cst_fieldset$0,e)}
function embed(e){return unsafeCoerce(cst_embed$0,e)}
function form(e){return unsafeCoerce(cst_form$0,e)}
function frameset(e){return unsafeCoerce(cst_frameset$0,e)}
function frame(e){return unsafeCoerce(cst_frame$0,e)}
function h1(e){return unsafeCoerce(cst_h1$0,e)}
function h2(e){return unsafeCoerce(cst_h2$0,e)}
function h3(e){return unsafeCoerce(cst_h3$0,e)}
function h4(e){return unsafeCoerce(cst_h4$0,e)}
function h5(e){return unsafeCoerce(cst_h5$0,e)}
function h6(e){return unsafeCoerce(cst_h6$0,e)}
function head(e){return unsafeCoerce(cst_head$0,e)}
function hr(e){return unsafeCoerce(cst_hr$0,e)}
function html(e){return unsafeCoerce(cst_html$0,e)}
function iframe(e){return unsafeCoerce(cst_iframe$0,e)}
function img(e){return unsafeCoerce(cst_img$0,e)}
function input$0(e){return unsafeCoerce(cst_input$1,e)}
function ins(e){return unsafeCoerce(cst_ins$0,e)}
function label(e){return unsafeCoerce(cst_label$0,e)}
function legend(e){return unsafeCoerce(cst_legend$0,e)}
function li(e){return unsafeCoerce(cst_li$0,e)}
function link(e){return unsafeCoerce(cst_link$0,e)}
function map$2(e){return unsafeCoerce(cst_map$0,e)}
function meta(e){return unsafeCoerce(cst_meta$0,e)}
function object(e){return unsafeCoerce(cst_object$0,e)}
function ol(e){return unsafeCoerce(cst_ol$0,e)}
function optgroup(e){return unsafeCoerce(cst_optgroup$0,e)}
function option$1(e){return unsafeCoerce(cst_option$0,e)}
function p(e){return unsafeCoerce(cst_p$0,e)}
function param(e){return unsafeCoerce(cst_param$0,e)}
function pre(e){return unsafeCoerce(cst_pre$0,e)}
function q(e){return unsafeCoerce(cst_q$0,e)}
function script(e){return unsafeCoerce(cst_script$0,e)}
function select$0(e){return unsafeCoerce(cst_select$1,e)}
function style(e){return unsafeCoerce(cst_style$0,e)}
function table(e){return unsafeCoerce(cst_table$0,e)}
function tbody(e){return unsafeCoerce(cst_tbody$0,e)}
function td(e){return unsafeCoerce(cst_td$0,e)}
function textarea(e){return unsafeCoerce(cst_textarea$0,e)}
function tfoot(e){return unsafeCoerce(cst_tfoot$0,e)}
function th(e){return unsafeCoerce(cst_th$0,e)}
function thead(e){return unsafeCoerce(cst_thead$0,e)}
function title(e){return unsafeCoerce(cst_title$0,e)}
function tr(e){return unsafeCoerce(cst_tr$0,e)}
function ul(e){return unsafeCoerce(cst_ul$0,e)}
function audio(e){return unsafeCoerce(cst_audio$0,e)}
function video(e){return unsafeCoerce(cst_video$0,e)}
function unsafeCoerceEvent(constr,ev)
{if(constr !== t39 && ev instanceof constr)return ev;return no_handler}
function mouseEvent(ev){return unsafeCoerceEvent(Unsafe[1].MouseEvent,ev)}
function keyboardEvent(ev)
{return unsafeCoerceEvent(Unsafe[1].KeyboardEvent,ev)}
function wheelEvent(ev){return unsafeCoerceEvent(Unsafe[1].WheelEvent,ev)}
function mouseScrollEvent(ev)
{return unsafeCoerceEvent(Unsafe[1].MouseScrollEvent,ev)}
function popStateEvent(ev)
{return unsafeCoerceEvent(Unsafe[1].PopStateEvent,ev)}
function messageEvent(ev)
{return unsafeCoerceEvent(Unsafe[1].MessageEvent,ev)}
function eventRelatedTarget(e)
{function _fX_(param)
{var match=caml_string_of_jsstring(e.type);
if(caml_string_notequal(match,cst_mouseout$0))
{if(caml_string_notequal(match,cst_mouseover$0))return no_handler;
var _fY_=function(param){throw [0,Assert_failure,_l_]};
return caml_call2(Optdef[8],e.fromElement,_fY_)}
function _fZ_(param){throw [0,Assert_failure,_m_]}
return caml_call2(Optdef[8],e.toElement,_fZ_)}
return caml_call2(Optdef[8],e.relatedTarget,_fX_)}
function eventAbsolutePosition(e)
{var t70=t87.body,t71=t87.documentElement;
return [0,
(e.clientX + t70.scrollLeft | 0) + t71.scrollLeft | 0,
(e.clientY + t70.scrollTop | 0) + t71.scrollTop | 0]}
function eventAbsolutePosition$0(e)
{function _fT_(x)
{function _fV_(y){return [0,x,y]}
function _fW_(param){return eventAbsolutePosition(e)}
return caml_call3(Optdef[7],e.pageY,_fW_,_fV_)}
function _fU_(param){return eventAbsolutePosition(e)}
return caml_call3(Optdef[7],e.pageX,_fU_,_fT_)}
function elementClientPosition(e)
{var t80=e.getBoundingClientRect(),t81=t87.body,t82=t87.documentElement;
return [0,
((t80.left | 0) - t81.clientLeft | 0) - t82.clientLeft | 0,
((t80.top | 0) - t81.clientTop | 0) - t82.clientTop | 0]}
function getDocumentScroll(param)
{var t88=t87.body,t89=t87.documentElement;
return [0,
t88.scrollLeft + t89.scrollLeft | 0,
t88.scrollTop + t89.scrollTop | 0]}
function buttonPressed(ev)
{function _fR_(x){return x}
function _fS_(param)
{var match=ev.button,switcher=match - 1 | 0;
if(! (3 < switcher >>> 0))
switch(switcher)
{case 0:return 1;case 1:return 3;case 2:break;default:return 2}
return 0}
return caml_call3(Optdef[7],ev.which,_fS_,_fR_)}
function addMousewheelEventListenerWith(e,capture,once,passive,h)
{var t96=createDiv(t87);
t96.setAttribute("onmousewheel","return;");
if(typeof t96.onmousewheel === "function")
{var
_fN_=
handler
(function(e)
{function _fP_(param){return 0}
var
dx=
(- caml_call2(Optdef[8],e.wheelDeltaX,_fP_) | 0) / 40 | 0;
function _fQ_(param){return e.wheelDelta}
var
dy=
(- caml_call2(Optdef[8],e.wheelDeltaY,_fQ_) | 0) / 40 | 0;
return caml_call3(h,e,dx,dy)});
return addEventListenerWithOptions
(e,Event$0[14],capture,once,passive,_fN_)}
var
_fO_=
handler
(function(e)
{var d=e.detail;
return e.axis === e.HORIZONTAL
?caml_call3(h,e,d,0)
:caml_call3(h,e,0,d)});
return addEventListenerWithOptions
(e,Event$0[15],capture,once,passive,_fO_)}
function addMousewheelEventListener(e,h,capt)
{return addMousewheelEventListenerWith(e,[0,capt],0,0,h)}
function f(v)
{var
match=caml_string_of_jsstring(v),
switch$0=caml_string_compare(match,cst_KeyH);
if(0 <= switch$0)
{if(! (0 < switch$0))return 8;
var switch$1=caml_string_compare(match,cst_Numpad4);
if(0 <= switch$1)
{if(! (0 < switch$1))return 72;
var switch$2=caml_string_compare(match,cst_PageUp);
if(0 <= switch$2)
{if(! (0 < switch$2))return 98;
var switch$3=caml_string_compare(match,cst_ShiftRight);
if(0 <= switch$3)
{if(! (0 < switch$3))return 91;
if(! caml_string_notequal(match,cst_Slash))return 55;
if(! caml_string_notequal(match,cst_Space))return 41;
if(! caml_string_notequal(match,cst_Tab))return 39;
if(! caml_string_notequal(match,cst_VolumeDown))return 103;
if(! caml_string_notequal(match,cst_VolumeMute))return 102;
if(! caml_string_notequal(match,cst_VolumeUp))return 104}
else
{if(! caml_string_notequal(match,cst_Pause))return 123;
if(! caml_string_notequal(match,cst_Period))return 54;
if(! caml_string_notequal(match,cst_PrintScreen))return 120;
if(! caml_string_notequal(match,cst_Quote))return 50;
if(! caml_string_notequal(match,cst_ScrollLock))return 119;
if(! caml_string_notequal(match,cst_Semicolon))return 49;
if(! caml_string_notequal(match,cst_ShiftLeft))return 90}}
else
{var switch$4=caml_string_compare(match,cst_NumpadDivide);
if(0 <= switch$4)
{if(! (0 < switch$4))return 84;
if(! caml_string_notequal(match,cst_NumpadEnter))return 83;
if(! caml_string_notequal(match,cst_NumpadEqual))return 82;
if(! caml_string_notequal(match,cst_NumpadMultiply))return 78;
if(! caml_string_notequal(match,cst_NumpadSubtract))return 79;
if(! caml_string_notequal(match,cst_OSLeft))return 117;
if(! caml_string_notequal(match,cst_OSRight))return 118;
if(! caml_string_notequal(match,cst_PageDown))return 99}
else
{if(! caml_string_notequal(match,cst_Numpad5))return 73;
if(! caml_string_notequal(match,cst_Numpad6))return 74;
if(! caml_string_notequal(match,cst_Numpad7))return 75;
if(! caml_string_notequal(match,cst_Numpad8))return 76;
if(! caml_string_notequal(match,cst_Numpad9))return 77;
if(! caml_string_notequal(match,cst_NumpadAdd))return 80;
if(! caml_string_notequal(match,cst_NumpadDecimal))return 81}}}
else
{var switch$5=caml_string_compare(match,cst_KeyX);
if(0 <= switch$5)
{if(! (0 < switch$5))return 24;
var switch$6=caml_string_compare(match,cst_MetaRight);
if(0 <= switch$6)
{if(! (0 < switch$6))return 89;
if(! caml_string_notequal(match,cst_Minus))return 37;
if(! caml_string_notequal(match,cst_NumLock))return 85;
if(! caml_string_notequal(match,cst_Numpad0))return 68;
if(! caml_string_notequal(match,cst_Numpad1))return 69;
if(! caml_string_notequal(match,cst_Numpad2))return 70;
if(! caml_string_notequal(match,cst_Numpad3))return 71}
else
{if(! caml_string_notequal(match,cst_KeyY))return 25;
if(! caml_string_notequal(match,cst_KeyZ))return 26;
if(! caml_string_notequal(match,cst_MediaPlayPause))return 107;
if(! caml_string_notequal(match,cst_MediaStop))return 108;
if(! caml_string_notequal(match,cst_MediaTrackNext))return 106;
if(! caml_string_notequal(match,cst_MediaTrackPrevious))
return 105;
if(! caml_string_notequal(match,cst_MetaLeft))return 88}}
else
{var switch$7=caml_string_compare(match,cst_KeyP);
if(0 <= switch$7)
{if(! (0 < switch$7))return 16;
if(! caml_string_notequal(match,cst_KeyQ))return 17;
if(! caml_string_notequal(match,cst_KeyR))return 18;
if(! caml_string_notequal(match,cst_KeyS))return 19;
if(! caml_string_notequal(match,cst_KeyT))return 20;
if(! caml_string_notequal(match,cst_KeyU))return 21;
if(! caml_string_notequal(match,cst_KeyV))return 22;
if(! caml_string_notequal(match,cst_KeyW))return 23}
else
{if(! caml_string_notequal(match,cst_KeyI))return 9;
if(! caml_string_notequal(match,cst_KeyJ))return 10;
if(! caml_string_notequal(match,cst_KeyK))return 11;
if(! caml_string_notequal(match,cst_KeyL))return 12;
if(! caml_string_notequal(match,cst_KeyM))return 13;
if(! caml_string_notequal(match,cst_KeyN))return 14;
if(! caml_string_notequal(match,cst_KeyO))return 15}}}}
else
{var switch$8=caml_string_compare(match,cst_Digit6);
if(0 <= switch$8)
{if(! (0 < switch$8))return 33;
var switch$9=caml_string_compare(match,cst_F6);
if(0 <= switch$9)
{if(! (0 < switch$9))return 61;
var switch$10=caml_string_compare(match,cst_KeyA);
if(0 <= switch$10)
{if(! (0 < switch$10))return 1;
if(! caml_string_notequal(match,cst_KeyB))return 2;
if(! caml_string_notequal(match,cst_KeyC))return 3;
if(! caml_string_notequal(match,cst_KeyD))return 4;
if(! caml_string_notequal(match,cst_KeyE))return 5;
if(! caml_string_notequal(match,cst_KeyF))return 6;
if(! caml_string_notequal(match,cst_KeyG))return 7}
else
{if(! caml_string_notequal(match,cst_F7))return 62;
if(! caml_string_notequal(match,cst_F8))return 63;
if(! caml_string_notequal(match,cst_F9))return 64;
if(! caml_string_notequal(match,cst_Home))return 100;
if(! caml_string_notequal(match,cst_Insert))return 44;
if(! caml_string_notequal(match,cst_IntlBackslash))return 121;
if(! caml_string_notequal(match,cst_IntlYen))return 122}}
else
{var switch$11=caml_string_compare(match,cst_F1);
if(0 <= switch$11)
{if(! (0 < switch$11))return 56;
if(! caml_string_notequal(match,cst_F10))return 65;
if(! caml_string_notequal(match,cst_F11))return 66;
if(! caml_string_notequal(match,cst_F12))return 67;
if(! caml_string_notequal(match,cst_F2))return 57;
if(! caml_string_notequal(match,cst_F3))return 58;
if(! caml_string_notequal(match,cst_F4))return 59;
if(! caml_string_notequal(match,cst_F5))return 60}
else
{if(! caml_string_notequal(match,cst_Digit7))return 34;
if(! caml_string_notequal(match,cst_Digit8))return 35;
if(! caml_string_notequal(match,cst_Digit9))return 36;
if(! caml_string_notequal(match,cst_End))return 101;
if(! caml_string_notequal(match,cst_Enter))return 40;
if(! caml_string_notequal(match,cst_Equal))return 38;
if(! caml_string_notequal(match,cst_Escape))return 42}}}
else
{var switch$12=caml_string_compare(match,cst_BrowserRefresh);
if(0 <= switch$12)
{if(! (0 < switch$12))return 113;
var switch$13=caml_string_compare(match,cst_Delete);
if(0 <= switch$13)
{if(! (0 < switch$13))return 45;
if(! caml_string_notequal(match,cst_Digit0))return 27;
if(! caml_string_notequal(match,cst_Digit1))return 28;
if(! caml_string_notequal(match,cst_Digit2))return 29;
if(! caml_string_notequal(match,cst_Digit3))return 30;
if(! caml_string_notequal(match,cst_Digit4))return 31;
if(! caml_string_notequal(match,cst_Digit5))return 32}
else
{if(! caml_string_notequal(match,cst_BrowserSearch))return 110;
if(! caml_string_notequal(match,cst_BrowserStop))return 114;
if(! caml_string_notequal(match,cst_CapsLock))return 46;
if(! caml_string_notequal(match,cst_Comma))return 53;
if(! caml_string_notequal(match,cst_ContextMenu))return 109;
if(! caml_string_notequal(match,cst_ControlLeft))return 86;
if(! caml_string_notequal(match,cst_ControlRight))return 87}}
else
{var switch$14=caml_string_compare(match,cst_Backslash);
if(0 <= switch$14)
{if(! (0 < switch$14))return 52;
if(! caml_string_notequal(match,cst_Backspace))return 43;
if(! caml_string_notequal(match,cst_BracketLeft))return 47;
if(! caml_string_notequal(match,cst_BracketRight))return 48;
if(! caml_string_notequal(match,cst_BrowserBack))return 116;
if(! caml_string_notequal(match,cst_BrowserFavorites))
return 112;
if(! caml_string_notequal(match,cst_BrowserForward))return 115;
if(! caml_string_notequal(match,cst_BrowserHome))return 111}
else
{if(! caml_string_notequal(match,cst_AltLeft))return 92;
if(! caml_string_notequal(match,cst_AltRight))return 93;
if(! caml_string_notequal(match,cst_ArrowDown))return 97;
if(! caml_string_notequal(match,cst_ArrowLeft))return 94;
if(! caml_string_notequal(match,cst_ArrowRight))return 95;
if(! caml_string_notequal(match,cst_ArrowUp))return 96;
if(! caml_string_notequal(match,cst_Backquote))return 51}}}}
return 0}
function try_key_code_left(param)
{if(19 <= param)
{if(91 === param)return 88}
else
if(16 <= param)
switch(param - 16 | 0)
{case 0:return 90;case 1:return 86;default:return 92}
return 0}
function try_key_code_right(param)
{if(19 <= param)
{if(91 === param)return 89}
else
if(16 <= param)
switch(param - 16 | 0)
{case 0:return 91;case 1:return 87;default:return 93}
return 0}
function try_key_code_numpad(param)
{if(47 <= param)
{var switcher=param - 96 | 0;
if(! (15 < switcher >>> 0))
switch(switcher)
{case 0:return 68;
case 1:return 69;
case 2:return 70;
case 3:return 71;
case 4:return 72;
case 5:return 73;
case 6:return 74;
case 7:return 75;
case 8:return 76;
case 9:return 77;
case 10:return 78;
case 11:return 80;
case 12:break;
case 13:return 79;
case 14:return 81;
default:return 84}}
else
if(12 <= param)
switch(param - 12 | 0)
{case 0:return 73;
case 1:return 83;
case 21:return 77;
case 22:return 71;
case 23:return 69;
case 24:return 75;
case 25:return 72;
case 26:return 76;
case 27:return 74;
case 28:return 70;
case 33:return 68;
case 34:return 81
}
return 0}
function try_key_code_normal(param)
{var switcher=param - 8 | 0;
if(! (214 < switcher >>> 0))
{var _fM_=switcher;
if(67 <= _fM_)
switch(_fM_)
{case 67:return 11;
case 68:return 12;
case 69:return 13;
case 70:return 14;
case 71:return 15;
case 72:return 16;
case 73:return 17;
case 74:return 18;
case 75:return 19;
case 76:return 20;
case 77:return 21;
case 78:return 22;
case 79:return 23;
case 80:return 24;
case 81:return 25;
case 82:return 26;
case 85:return 109;
case 104:return 56;
case 105:return 57;
case 106:return 58;
case 107:return 59;
case 108:return 60;
case 109:return 61;
case 110:return 62;
case 111:return 63;
case 112:return 64;
case 113:return 65;
case 114:return 66;
case 115:return 67;
case 137:return 119;
case 178:return 49;
case 179:return 38;
case 180:return 53;
case 181:return 37;
case 182:return 54;
case 183:return 55;
case 184:return 51;
case 211:return 47;
case 212:return 52;
case 213:return 48;
case 214:return 50
}
else
switch(_fM_)
{case 0:return 43;
case 1:return 39;
case 5:return 40;
case 11:return 123;
case 12:return 46;
case 19:return 42;
case 24:return 41;
case 25:return 98;
case 26:return 99;
case 27:return 101;
case 28:return 100;
case 29:return 94;
case 30:return 96;
case 31:return 95;
case 32:return 97;
case 34:return 120;
case 37:return 44;
case 38:return 45;
case 40:return 27;
case 41:return 28;
case 42:return 29;
case 43:return 30;
case 44:return 31;
case 45:return 32;
case 46:return 33;
case 47:return 34;
case 48:return 35;
case 49:return 36;
case 57:return 1;
case 58:return 2;
case 59:return 3;
case 60:return 4;
case 61:return 5;
case 62:return 6;
case 63:return 7;
case 64:return 8;
case 65:return 9;
case 66:return 10
}}
return 0}
function make_unidentified(param){return 0}
function run_next(value,f,v){return v?v:caml_call1(f,value)}
function symbol$11(x,f){return caml_call1(f,x)}
function of_event(evt)
{var _fF_=evt.keyCode;
function _fG_(_fL_){return run_next(_fF_,try_key_code_normal,_fL_)}
var match=evt.location,switcher=match - 1 | 0;
if(2 < switcher >>> 0)
var _fH_=make_unidentified;
else
switch(switcher)
{case 0:
var
_fC_=evt.keyCode,
_fH_=function(_fJ_){return run_next(_fC_,try_key_code_left,_fJ_)};
break;
case 1:
var
_fD_=evt.keyCode,
_fH_=function(_fI_){return run_next(_fD_,try_key_code_right,_fI_)};
break;
default:
var
_fE_=evt.keyCode,
_fH_=function(_fK_){return run_next(_fE_,try_key_code_numpad,_fK_)}}
var value=evt.code;
return symbol$11
(symbol$11
(symbol$11
(0,
function(v)
{return v?v:caml_call3(Optdef[7],value,make_unidentified,f)}),
_fH_),
_fG_)}
function char_of_int(value)
{if(caml_call2(symbol$5,0,value))
try
{var _fA_=[0,caml_call1(Stdlib_Uchar[8],value)];return _fA_}
catch(_fB_){return 0}
return 0}
function empty_string(param){return ""}
function none(param){return 0}
function of_event$0(evt)
{var t110=caml_call2(Optdef[8],evt.key,empty_string),match=t110.length;
return 0 === match
?caml_call3(Optdef[7],evt.charCode,none,char_of_int)
:1 === match?char_of_int(t110.charCodeAt(0) | 0):0}
function element$1(_fz_){return _fz_}
function tagged(e)
{var t112=e.tagName,tag=caml_string_of_jsbytes(t112.toLowerCase());
if(caml_call2(symbol$8,caml_ml_string_length(tag),0))return [61,e];
var match=runtime.caml_string_unsafe_get(tag,0),switcher=match - 97 | 0;
if(! (21 < switcher >>> 0))
switch(switcher)
{case 0:
return caml_string_notequal(tag,cst_a$1)
?caml_string_notequal(tag,cst_area$1)
?caml_string_notequal(tag,cst_audio$1)?[61,e]:[2,e]
:[1,e]
:[0,e];
case 1:
return caml_string_notequal(tag,cst_base$1)
?caml_string_notequal(tag,cst_blockquote$1)
?caml_string_notequal(tag,cst_body$1)
?caml_string_notequal(tag,cst_br$1)
?caml_string_notequal(tag,cst_button$1)?[61,e]:[7,e]
:[6,e]
:[5,e]
:[4,e]
:[3,e];
case 2:
return caml_string_notequal(tag,cst_canvas$1)
?caml_string_notequal(tag,cst_caption$1)
?caml_string_notequal(tag,cst_col$1)
?caml_string_notequal(tag,cst_colgroup$1)?[61,e]:[11,e]
:[10,e]
:[9,e]
:[8,e];
case 3:
return caml_string_notequal(tag,cst_del$1)
?caml_string_notequal(tag,cst_div$1)
?caml_string_notequal(tag,cst_dl$1)?[61,e]:[14,e]
:[13,e]
:[12,e];
case 4:return caml_string_notequal(tag,cst_embed$1)?[61,e]:[15,e];
case 5:
return caml_string_notequal(tag,cst_fieldset$1)
?caml_string_notequal(tag,cst_form$1)
?caml_string_notequal(tag,cst_frame$1)
?caml_string_notequal(tag,cst_frameset$1)?[61,e]:[18,e]
:[19,e]
:[17,e]
:[16,e];
case 7:
return caml_string_notequal(tag,cst_h1$1)
?caml_string_notequal(tag,cst_h2$1)
?caml_string_notequal(tag,cst_h3$1)
?caml_string_notequal(tag,cst_h4$1)
?caml_string_notequal(tag,cst_h5$1)
?caml_string_notequal(tag,cst_h6$1)
?caml_string_notequal(tag,cst_head$1)
?caml_string_notequal(tag,cst_hr$1)
?caml_string_notequal(tag,cst_html$1)?[61,e]:[28,e]
:[27,e]
:[26,e]
:[25,e]
:[24,e]
:[23,e]
:[22,e]
:[21,e]
:[20,e];
case 8:
return caml_string_notequal(tag,cst_iframe$1)
?caml_string_notequal(tag,cst_img$1)
?caml_string_notequal(tag,cst_input$2)
?caml_string_notequal(tag,cst_ins$1)?[61,e]:[32,e]
:[31,e]
:[30,e]
:[29,e];
case 11:
return caml_string_notequal(tag,cst_label$1)
?caml_string_notequal(tag,cst_legend$1)
?caml_string_notequal(tag,cst_li$1)
?caml_string_notequal(tag,cst_link$1)?[61,e]:[36,e]
:[35,e]
:[34,e]
:[33,e];
case 12:
return caml_string_notequal(tag,cst_map$1)
?caml_string_notequal(tag,cst_meta$1)?[61,e]:[38,e]
:[37,e];
case 14:
return caml_string_notequal(tag,cst_object$1)
?caml_string_notequal(tag,cst_ol$1)
?caml_string_notequal(tag,cst_optgroup$1)
?caml_string_notequal(tag,cst_option$1)?[61,e]:[42,e]
:[41,e]
:[40,e]
:[39,e];
case 15:
return caml_string_notequal(tag,cst_p$1)
?caml_string_notequal(tag,cst_param$1)
?caml_string_notequal(tag,cst_pre$1)?[61,e]:[45,e]
:[44,e]
:[43,e];
case 16:return caml_string_notequal(tag,cst_q$1)?[61,e]:[46,e];
case 18:
return caml_string_notequal(tag,cst_script$1)
?caml_string_notequal(tag,cst_select$2)
?caml_string_notequal(tag,cst_style$1)?[61,e]:[49,e]
:[48,e]
:[47,e];
case 19:
return caml_string_notequal(tag,cst_table$1)
?caml_string_notequal(tag,cst_tbody$1)
?caml_string_notequal(tag,cst_td$1)
?caml_string_notequal(tag,cst_textarea$1)
?caml_string_notequal(tag,cst_tfoot$1)
?caml_string_notequal(tag,cst_th$1)
?caml_string_notequal(tag,cst_thead$1)
?caml_string_notequal(tag,cst_title$1)
?caml_string_notequal(tag,cst_tr$1)?[61,e]:[58,e]
:[57,e]
:[56,e]
:[55,e]
:[54,e]
:[53,e]
:[52,e]
:[51,e]
:[50,e];
case 20:return caml_string_notequal(tag,cst_ul$1)?[61,e]:[59,e];
case 21:return caml_string_notequal(tag,cst_video$1)?[61,e]:[60,e]
}
return [61,e]}
function opt_tagged(e)
{function _fx_(e){return [0,tagged(e)]}
function _fy_(param){return 0}
return caml_call3(Opt[7],e,_fy_,_fx_)}
function taggedEvent(ev)
{function _ff_(ev){return [0,ev]}
function _fg_(param)
{function _fi_(ev){return [1,ev]}
function _fj_(param)
{function _fl_(ev){return [3,ev]}
function _fm_(param)
{function _fo_(ev){return [4,ev]}
function _fp_(param)
{function _fr_(ev){return [5,ev]}
function _fs_(param)
{function _fu_(ev){return [2,ev]}
function _fv_(param){return [6,ev]}
var _fw_=messageEvent(ev);
return caml_call3(Opt[7],_fw_,_fv_,_fu_)}
var _ft_=popStateEvent(ev);
return caml_call3(Opt[7],_ft_,_fs_,_fr_)}
var _fq_=mouseScrollEvent(ev);
return caml_call3(Opt[7],_fq_,_fp_,_fo_)}
var _fn_=wheelEvent(ev);
return caml_call3(Opt[7],_fn_,_fm_,_fl_)}
var _fk_=keyboardEvent(ev);
return caml_call3(Opt[7],_fk_,_fj_,_fi_)}
var _fh_=mouseEvent(ev);
return caml_call3(Opt[7],_fh_,_fg_,_ff_)}
function opt_taggedEvent(ev)
{function _fd_(ev){return [0,taggedEvent(ev)]}
function _fe_(param){return 0}
return caml_call3(Opt[7],ev,_fe_,_fd_)}
function stopPropagation(ev)
{function _fb_(param){return ev.stopPropagation()}
function _fc_(param){return ev.cancelBubble = t25}
return caml_call3(Optdef[7],ev.stopPropagation,_fc_,_fb_)}
var
requestAnimationFrame=
runtime.caml_js_pure_expr
(function(param)
{var
l=
[0,
_j_.requestAnimationFrame,
[0,
_j_.mozRequestAnimationFrame,
[0,
_j_.webkitRequestAnimationFrame,
[0,
_j_.oRequestAnimationFrame,
[0,_j_.msRequestAnimationFrame,0]]]]];
try
{var
_e__=function(c){return caml_call1(Optdef[5],c)},
req=caml_call2(Stdlib_List[38],_e__,l),
_e$_=function(callback){return req(callback)};
return _e$_}
catch(_fa_)
{_fa_ = caml_wrap_exception(_fa_);
if(_fa_ === Stdlib[8])
{var
now=function(param){var t123=new t122();return t123.getTime()},
last=[0,now(0)];
return function(callback)
{var
t=now(0),
dt=last[1] + 16.6666666666666679 - t,
dt$0=dt < 0.?0.:dt;
last[1] = t;
_j_.setTimeout(callback,dt$0);
return 0}}
throw _fa_}});
function hasPushState(param)
{var t128=_j_.history;return caml_call1(Optdef[5],t128.pushState)}
function hasPlaceholder(param)
{var t129=createInput(0,0,t87);
return caml_call1(Optdef[5],t129.placeholder)}
function hasRequired(param)
{var t130=createInput(0,0,t87);
return caml_call1(Optdef[5],t130.required)}
var overflow_limit=2147483000.;
function setTimeout(callback,d)
{var id=[0,0];
function loop(step,param)
{if(2147483000. < step)
var remain=step - 2147483000.,step$0=overflow_limit;
else
var remain=0.,step$0=step;
var
cb=remain == 0.?callback:function(_e9_){return loop(remain,_e9_)},
t131=caml_js_wrap_callback(cb);
id[1] = [0,_j_.setTimeout(t131,step$0)];
return 0}
loop(d,0);
return id}
function clearTimeout(id)
{var _e8_=id[1];
if(_e8_){var x=_e8_[1];id[1] = 0;return _j_.clearTimeout(x)}
return 0}
function js_array_of_collection(c){return [].slice.call(c)}
var
Js_of_ocaml_Dom_html=
[0,
d,
t87,
getElementById_opt,
getElementById_exn,
getElementById_coerce,
getElementById,
location_origin,
_j_,
no_handler,
handler,
full_handler,
invoke_handler,
eventTarget,
eventRelatedTarget,
Event$0,
addEventListenerWithOptions,
addEventListener,
removeEventListener,
addMousewheelEventListenerWith,
addMousewheelEventListener,
createCustomEvent,
buttonPressed,
eventAbsolutePosition$0,
elementClientPosition,
getDocumentScroll,
[0,of_event,try_key_code_normal],
[0,of_event$0],
createHtml,
createHead,
createLink,
createTitle,
createMeta,
createBase,
createStyle,
createBody,
createForm,
createOptgroup,
createOption,
createSelect,
createInput,
createTextarea,
createButton,
createLabel,
createFieldset,
createLegend,
createUl,
createOl,
createDl,
createLi,
createDiv,
createEmbed,
createP,
createH1,
createH2,
createH3,
createH4,
createH5,
createH6,
createQ,
createBlockquote,
createPre,
createBr,
createHr,
createIns,
createDel,
createA,
createImg,
createObject,
createParam,
createMap,
createArea,
createScript,
createTable,
createCaption,
createCol,
createColgroup,
createThead,
createTfoot,
createTbody,
createTr,
createTh,
createTd,
createSub,
createSup,
createSpan,
createTt,
createI,
createB,
createBig,
createSmall,
createEm,
createStrong,
createCite,
createDfn,
createCode,
createSamp,
createKbd,
createVar,
createAbbr,
createDd,
createDt,
createNoscript,
createAddress,
createFrameset,
createFrame,
createIframe,
createAudio,
createVideo,
Canvas_not_available,
createCanvas,
element$1,
tagged,
opt_tagged,
taggedEvent,
opt_taggedEvent,
stopPropagation,
[0,
element$0,
a,
area,
audio,
base,
blockquote,
body,
br,
button,
canvas,
caption,
col,
colgroup,
del,
div,
embed,
dl,
fieldset,
form,
frameset,
frame,
h1,
h2,
h3,
h4,
h5,
h6,
head,
hr,
html,
iframe,
img,
input$0,
ins,
label,
legend,
li,
link,
map$2,
meta,
object,
ol,
optgroup,
option$1,
p,
param,
pre,
q,
script,
select$0,
style,
table,
tbody,
td,
textarea,
tfoot,
th,
thead,
title,
tr,
ul,
video,
mouseEvent,
keyboardEvent,
wheelEvent,
mouseScrollEvent,
popStateEvent,
messageEvent],
setTimeout,
clearTimeout,
js_array_of_collection,
requestAnimationFrame,
runtime.caml_js_html_entities,
onIE,
hasPushState,
hasPlaceholder,
hasRequired];
caml_register_global(1651,Js_of_ocaml_Dom_html,"Js_of_ocaml__Dom_html");
var formData=Unsafe[1].FormData,formData_form=Unsafe[1].FormData;
function filter_map$0(f,param)
{var param$0=param;
for(;;)
{if(param$0)
{var q=param$0[2],v=param$0[1],match=caml_call1(f,v);
if(match){var v$0=match[1];return [0,v$0,filter_map$0(f,q)]}
var param$0=q;
continue}
return 0}}
function have_content(elt)
{var
t3=elt.name,
_e6_=caml_call2(symbol$9,t3.length,0),
_e7_=_e6_?1 - (elt.disabled | 0):_e6_;
return _e7_}
function form_elements(get,form)
{var t34=form.elements,i$2=t34.length - 1 | 0,acc=0,i=i$2;
for(;;)
{if(caml_call2(symbol$5,i,0))
{var
_eX_=
function(v$2)
{var match$3=tagged(v$2);
switch(match$3[0])
{case 31:
var v=match$3[1];
if(get)var sth=get[1],get$0=sth;else var get$0=0;
if(have_content(v))
{var
name$1=caml_string_of_jsstring(v.name),
value=v.value,
t20=v.type,
match=caml_string_of_jsbytes(t20.toLowerCase());
if(caml_string_notequal(match,cst_checkbox))
{if(! caml_string_notequal(match,cst_file))
{if(get$0)return [0,[0,name$1,[0,-976970511,value]],0];
var match$0=caml_call1(Optdef[10],v.files);
if(match$0)
{var list=match$0[1];
if(caml_call2(symbol$8,list.length,0))
return [0,[0,name$1,[0,-976970511,""]],0];
var match$1=caml_call1(Optdef[10],v.multiple);
if(match$1 && match$1[1])
{var
_e1_=function(t28){return list.item(t28)},
_e2_=caml_call2(Stdlib_Array[2],list.length,_e1_),
_e3_=caml_call1(Stdlib_Array[11],_e2_);
return filter_map$0
(function(f)
{var match=caml_call1(Opt[10],f);
if(match)
{var file=match[1];return [0,[0,name$1,[0,781515420,file]]]}
return 0},
_e3_)}
var _e4_=list.item(0),match$2=caml_call1(Opt[10],_e4_);
if(match$2)
{var file=match$2[1];
return [0,[0,name$1,[0,781515420,file]],0]}
return 0}
return 0}
var switch$0=0;
if(caml_string_notequal(match,cst_password))
{if(caml_string_notequal(match,cst_radio))
{var switch$1=0;
if
(caml_string_notequal(match,cst_reset)
&&
caml_string_notequal(match,cst_submit$0))
{if(caml_string_notequal(match,cst_text))
return [0,[0,name$1,[0,-976970511,value]],0];
switch$0 = 1;
switch$1 = 1}
if(! switch$1)return 0}}
else
switch$0 = 1;
if(switch$0)return [0,[0,name$1,[0,-976970511,value]],0]}
return v.checked | 0?[0,[0,name$1,[0,-976970511,value]],0]:0}
return 0;
case 48:
var v$0=match$3[1];
if(have_content(v$0))
{var name$0=caml_string_of_jsstring(v$0.name);
if(v$0.multiple | 0)
{var
_eZ_=
function(i)
{var t13=v$0.options,_e5_=t13.item(i);
return caml_call1(Opt[10],_e5_)},
t10=v$0.options,
options=caml_call2(Stdlib_Array[2],t10.length,_eZ_),
_e0_=caml_call1(Stdlib_Array[11],options);
return filter_map$0
(function(param)
{if(param)
{var e=param[1];
return e.selected | 0
?[0,[0,name$0,[0,-976970511,e.value]]]
:0}
return 0},
_e0_)}
return [0,[0,name$0,[0,-976970511,v$0.value]],0]}
return 0;
case 53:
var v$1=match$3[1];
if(have_content(v$1))
{var name=caml_string_of_jsstring(v$1.name);
return [0,[0,name,[0,-976970511,v$1.value]],0]}
return 0;
default:return 0}},
_eY_=caml_call2(Stdlib_List[19],_eX_,acc);
return caml_call1(Stdlib_List[14],_eY_)}
var t32=form.elements,_eW_=t32.item(i),match=caml_call1(Opt[10],_eW_);
if(match)
{var x=match[1],i$0=i - 1 | 0,acc$0=[0,x,acc],acc=acc$0,i=i$0;
continue}
var i$1=i - i | 0,i=i$1;
continue}}
function append(form_contents,form_elt)
{if(891486873 <= form_contents[1])
{var list=form_contents[2];list[1] = [0,form_elt,list[1]];return 0}
var f=form_contents[2],_eU_=form_elt[2],_eV_=form_elt[1];
if(781515420 <= _eU_[1])
{var file=_eU_[2],t38=caml_jsstring_of_string(_eV_);
return f.append(t38,file)}
var s=_eU_[2],t35=caml_jsstring_of_string(_eV_);
return f.append(t35,s)}
function empty_form_contents(param)
{var match=caml_call1(Optdef[10],formData);
if(match){var constr=match[1];return [0,808620462,new constr()]}
return [0,891486873,[0,0]]}
function post_form_contents(form)
{var contents=empty_form_contents(0),_eR_=form_elements(0,form);
function _eS_(_eT_){return append(contents,_eT_)}
caml_call2(Stdlib_List[17],_eS_,_eR_);
return contents}
function get_form_contents(form)
{var _eO_=form_elements(_n_,form);
function _eP_(param)
{var _eQ_=param[2];
if(typeof _eQ_ !== "number" && -976970511 === _eQ_[1])
{var s=_eQ_[2],name=param[1];
return [0,name,caml_string_of_jsstring(s)]}
throw [0,Assert_failure,_o_]}
return caml_call2(Stdlib_List[19],_eP_,_eO_)}
var
Js_of_ocaml_Form=
[0,
formData,
formData_form,
append,
post_form_contents,
get_form_contents,
empty_form_contents,
form_elements];
caml_register_global(1652,Js_of_ocaml_Form,"Js_of_ocaml__Form");
var
readystatechange=caml_call1(Event[1],cst_readystatechange),
loadstart$1=caml_call1(Event[1],cst_loadstart$1),
progress$1=caml_call1(Event[1],cst_progress$1),
abort$1=caml_call1(Event[1],cst_abort$1),
error$1=caml_call1(Event[1],cst_error$1),
load$1=caml_call1(Event[1],cst_load$1),
timeout=caml_call1(Event[1],cst_timeout),
loadend$0=caml_call1(Event[1],cst_loadend$0),
Event$1=
[0,
readystatechange,
loadstart$1,
progress$1,
abort$1,
error$1,
load$1,
timeout,
loadend$0],
Js_of_ocaml_XmlHttpRequest=[0,runtime.caml_xmlhttprequest_create,Event$1];
caml_register_global
(1653,Js_of_ocaml_XmlHttpRequest,"Js_of_ocaml__XmlHttpRequest");
var t2=Unsafe[1].Worker;
function create(script)
{var t1=caml_jsstring_of_string(script);return new t2(t1)}
function import_scripts(scripts)
{if(Unsafe[1].importScripts === t39)
caml_call1(Stdlib[1],cst_Worker_import_scripts_is_u);
var _eL_=caml_call1(Stdlib_Array[12],scripts);
function _eM_(s){return caml_jsstring_of_string(s)}
var _eN_=caml_call2(Stdlib_Array[15],_eM_,_eL_);
return runtime.caml_js_fun_call(Unsafe[1].importScripts,_eN_)}
function set_onmessage(handler)
{if(Unsafe[1].onmessage === t39)
caml_call1(Stdlib[1],cst_Worker_onmessage_is_undefi);
function js_handler(ev){return caml_call1(handler,ev.data)}
var t7=caml_js_wrap_callback(js_handler);
return Unsafe[1].onmessage = t7}
function post_message(t10)
{if(Unsafe[1].postMessage === t39)
caml_call1(Stdlib[1],cst_Worker_onmessage_is_undefi$0);
return Unsafe[1].postMessage(t10)}
var
Js_of_ocaml_Worker=
[0,create,import_scripts,set_onmessage,post_message];
caml_register_global(1654,Js_of_ocaml_Worker,"Js_of_ocaml__Worker");
var webSocket=Unsafe[1].WebSocket;
function is_supported(param){return caml_call1(Optdef[5],webSocket)}
var Js_of_ocaml_WebSockets=[0,webSocket,webSocket,webSocket,is_supported];
caml_register_global
(1655,Js_of_ocaml_WebSockets,"Js_of_ocaml__WebSockets");
var
defaultContextAttributes=
{"alpha":t25,
"depth":t25,
"stencil":t4,
"antialias":t25,
"premultipliedAlpha":t4,
"preserveDrawingBuffer":t4,
"preferLowPowerToHighPerformance":t4,
"failIfMajorPerformanceCaveat":t4},
webglcontextlost=caml_call1(Event$0[87],cst_webglcontextlost),
webglcontextrestored=caml_call1(Event$0[87],cst_webglcontextrestored),
webglcontextcreationerror=
caml_call1(Event$0[87],cst_webglcontextcreationerror),
Event$2=
[0,webglcontextlost,webglcontextrestored,webglcontextcreationerror];
function getContext(t3)
{var ctx=t3.getContext("webgl");
return caml_call1(Opt[5],ctx)?ctx:t3.getContext("experimental-webgl")}
function getContextWithAttributes(t9,t8)
{var ctx=t9.getContext("webgl",t8);
return caml_call1(Opt[5],ctx)?ctx:t9.getContext("experimental-webgl",t8)}
var
Js_of_ocaml_WebGL=
[0,defaultContextAttributes,Event$2,getContext,getContextWithAttributes];
caml_register_global(1656,Js_of_ocaml_WebGL,"Js_of_ocaml__WebGL");
function regexp(s)
{var t0=caml_jsbytes_of_string(s);return new t11(t0,"g")}
function regexp_case_fold(s)
{var t3=caml_jsbytes_of_string(s);return new t11(t3,"gi")}
function regexp_with_flag(s,f)
{var
t7=caml_jsstring_of_string(caml_call2(Stdlib[28],cst_g,f)),
t6=caml_jsbytes_of_string(s);
return new t11(t6,t7)}
function blunt_str_array_get(a,i)
{function _eK_(param){throw [0,Assert_failure,_p_]}
return caml_string_of_jsbytes(caml_call2(Optdef[8],a[i],_eK_))}
function string_match(r,s,i)
{r.lastIndex = i;
var
t11=caml_jsbytes_of_string(s),
_eI_=r.exec(t11),
_eJ_=caml_call2(Opt[3],_eI_,match_result);
return caml_call1(Opt[10],_eJ_)}
function search_forward(r,s,i)
{r.lastIndex = i;
var t15=caml_jsbytes_of_string(s);
function _eF_(t17){return [0,t17.index,t17]}
var _eG_=r.exec(t15),_eH_=caml_call2(Opt[3],_eG_,_eF_);
return caml_call1(Opt[10],_eH_)}
function matched_string(r){return blunt_str_array_get(r,0)}
function matched_group(r,i)
{var _eE_=caml_call2(Optdef[3],r[i],caml_string_of_jsbytes);
return caml_call1(Optdef[10],_eE_)}
var t21=new t11("[$]","g");
function quote_repl(s)
{var t23=caml_jsbytes_of_string(s);return t23.replace(t21,"$$$$")}
function global_replace(r,s,s_by)
{r.lastIndex = 0;
var t27=quote_repl(s_by),t28=caml_jsbytes_of_string(s);
return caml_string_of_jsbytes(t28.replace(r,t27))}
function replace_first(r,s,s_by)
{var
match=r.ignoreCase | 0,
match$0=r.multiline | 0,
flags=match?match$0?"mi":"i":match$0?"m":"",
t32=r.source,
t35=new t11(t32,flags),
t36=quote_repl(s_by),
t37=caml_jsbytes_of_string(s);
return caml_string_of_jsbytes(t37.replace(t35,t36))}
function list_of_js_array(a)
{var idx$1=a.length - 1 | 0,accu=0,idx=idx$1;
for(;;)
{if(caml_call2(symbol$5,idx,0))return accu;
var
idx$0=idx - 1 | 0,
accu$0=[0,blunt_str_array_get(a,idx),accu],
accu=accu$0,
idx=idx$0;
continue}}
function split(r,s)
{r.lastIndex = 0;
var t42=caml_jsbytes_of_string(s);
return list_of_js_array(t42.split(r))}
function bounded_split(r,s,i)
{r.lastIndex = 0;
var t47=caml_jsbytes_of_string(s);
return list_of_js_array(t47.split(r,i))}
var t48=regexp(cst);
function quote(s)
{var t50=caml_jsbytes_of_string(s);
return caml_string_of_jsbytes(t50.replace(t48,"\\$&"))}
function regexp_string(s){return regexp(quote(s))}
function regexp_string_case_fold(s){return regexp_case_fold(quote(s))}
var
Js_of_ocaml_Regexp=
[0,
regexp,
regexp_case_fold,
regexp_with_flag,
quote,
regexp_string,
regexp_string_case_fold,
string_match,
search_forward,
search_forward,
matched_string,
matched_group,
global_replace,
replace_first,
split,
bounded_split];
caml_register_global(1657,Js_of_ocaml_Regexp,"Js_of_ocaml__Regexp");
var Local_exn=[248,cst_Js_of_ocaml_Url_Local_exn,caml_fresh_oo_id(0)];
function interrupt(param){throw Local_exn}
var plus_re=regexp_string(cst$0),t14=new t11("\\+","g");
function urldecode_js_string_string(s)
{t14.lastIndex = 0;
return caml_string_of_jsbytes(unescape(s.replace(t14," ")))}
function urldecode(s)
{return caml_string_of_jsbytes
(unescape
(caml_jsbytes_of_string(global_replace(plus_re,s,cst$1))))}
function urlencode(opt,s)
{if(opt)var sth=opt[1],with_plus=sth;else var with_plus=1;
if(with_plus)
{var s$0=caml_string_of_jsbytes(escape(caml_jsbytes_of_string(s)));
return global_replace(plus_re,s$0,cst_2B)}
return caml_string_of_jsbytes(escape(caml_jsbytes_of_string(s)))}
var
Not_an_http_protocol=
[248,cst_Js_of_ocaml_Url_Not_an_htt,caml_fresh_oo_id(0)],
default_http_port=80,
default_https_port=443;
function path_of_path_string(s)
{var l=caml_ml_string_length(s);
function aux(i)
{try
{var _eC_=caml_call3(String[30],s,i,47),j=_eC_}
catch(_eD_)
{_eD_ = caml_wrap_exception(_eD_);
if(_eD_ !== Stdlib[8])throw _eD_;
var j=l}
var word=caml_call3(String[14],s,i,j - i | 0);
return caml_call2(symbol$10,j,l)?[0,word,0]:[0,word,aux(j + 1 | 0)]}
var a=aux(0);
if(a && ! caml_string_notequal(a[1],cst$2))
{var _eB_=a[2];
if(! _eB_)return 0;
if(! caml_string_notequal(_eB_[1],cst$3) && ! _eB_[2])return _q_}
return a}
function encode_arguments(l)
{function _ew_(param)
{var
v=param[2],
n=param[1],
_ey_=urlencode(0,v),
_ez_=caml_call2(Stdlib[28],cst$4,_ey_),
_eA_=urlencode(0,n);
return caml_call2(Stdlib[28],_eA_,_ez_)}
var _ex_=caml_call2(Stdlib_List[19],_ew_,l);
return caml_call2(String[6],cst$5,_ex_)}
function decode_arguments_js_string(s)
{var
t0=caml_jsstring_of_string(caml_call2(String[1],1,38)),
t18=s.split(t0),
len=t18.length;
function aux(acc,idx)
{var idx$0=idx;
for(;;)
{if(caml_call2(symbol$5,idx$0,0))return acc;
try
{var
_eo_=idx$0 - 1 | 0,
_ep_=
function(s)
{function _eu_(param)
{var
y=param[2],
x=param[1],
_ev_=urldecode_js_string_string(y);
return [0,urldecode_js_string_string(x),_ev_]}
var
t2=caml_jsstring_of_string(caml_call2(String[1],1,61)),
t5=s.indexOf(t2);
if(caml_call2(symbol$5,t5,0))
var _et_=t39;
else
var
t7=t5 + 1 | 0,
_es_=s.slice(t7),
_et_=[0,s.slice(0,t5),_es_];
return caml_call3(Optdef[7],_et_,interrupt,_eu_)},
_eq_=
aux
([0,caml_call3(Optdef[7],t18[idx$0],interrupt,_ep_),acc],_eo_);
return _eq_}
catch(_er_)
{_er_ = caml_wrap_exception(_er_);
if(_er_ === Local_exn)
{var idx$1=idx$0 - 1 | 0,idx$0=idx$1;continue}
throw _er_}}}
return aux(0,len - 1 | 0)}
function decode_arguments(s)
{return decode_arguments_js_string(caml_jsbytes_of_string(s))}
var
t19=caml_jsbytes_of_string(cst_Hh_Tt_Tt_Pp_Ss_0_9a_zA_Z_0),
t24=new t11(t19),
t21$0=caml_jsbytes_of_string(cst_Ff_Ii_Ll_Ee),
t26=new t11(t21$0);
function url_of_js_string(s)
{function _d7_(res)
{var
prot_string=caml_call2(Optdef[8],res[1],interrupt),
match=caml_string_of_jsbytes(prot_string.toLowerCase());
if
(caml_string_notequal(match,cst_file$0)
&&
caml_string_notequal(match,cst_file$1))
{var switch$0=0;
if
(caml_string_notequal(match,cst_http)
&&
caml_string_notequal(match,cst_http$0))
{var switch$1=0;
if
(caml_string_notequal(match,cst_https)
&&
caml_string_notequal(match,cst_https$0))
switch$1 = 1;
if(! switch$1){var ssl=1;switch$0 = 2}}
else
switch$0 = 1;
var switch$2=0;
switch(switch$0)
{case 1:var ssl=0;switch$2 = 1;break;
case 0:break;
default:switch$2 = 1}
if(switch$2)
{var
_ef_=function(param){return caml_jsbytes_of_string(cst$7)},
path_str=
urldecode_js_string_string(caml_call2(Optdef[8],res[6],_ef_)),
_eg_=function(param){return caml_jsbytes_of_string(cst$8)},
_eh_=
urldecode_js_string_string(caml_call2(Optdef[8],res[10],_eg_)),
_ei_=function(param){return caml_jsbytes_of_string(cst$9)},
_ej_=
decode_arguments_js_string(caml_call2(Optdef[8],res[8],_ei_)),
_ek_=path_of_path_string(path_str),
_el_=function(param){return caml_jsbytes_of_string(cst$10)},
s=caml_string_of_jsbytes(caml_call2(Optdef[8],res[4],_el_)),
_em_=
caml_string_notequal(s,cst$6)?caml_int_of_string(s):ssl?443:80,
url=
[0,
urldecode_js_string_string
(caml_call2(Optdef[8],res[2],interrupt)),
_em_,
_ek_,
path_str,
_ej_,
_eh_],
_en_=ssl?[1,url]:[0,url];
return [0,_en_]}}
throw Not_an_http_protocol}
function _d8_(param)
{function _d__(res)
{var
path_str=
urldecode_js_string_string(caml_call2(Optdef[8],res[2],interrupt));
function _eb_(param){return caml_jsbytes_of_string(cst$11)}
var _ec_=caml_string_of_jsbytes(caml_call2(Optdef[8],res[6],_eb_));
function _ed_(param){return caml_jsbytes_of_string(cst$12)}
var
_ee_=
decode_arguments_js_string(caml_call2(Optdef[8],res[4],_ed_));
return [0,[2,[0,path_of_path_string(path_str),path_str,_ee_,_ec_]]]}
function _d$_(param){return 0}
var _ea_=t26.exec(s);
return caml_call3(Opt[7],_ea_,_d$_,_d__)}
var _d9_=t24.exec(s);
return caml_call3(Opt[7],_d9_,_d8_,_d7_)}
function url_of_string(s)
{return url_of_js_string(caml_jsbytes_of_string(s))}
function string_of_url(param)
{switch(param[0])
{case 0:
var
match=param[1],
frag=match[6],
args=match[5],
path=match[3],
port=match[2],
host=match[1];
if(caml_string_notequal(frag,cst$13))
var _du_=urlencode(0,frag),_dv_=caml_call2(Stdlib[28],cst$14,_du_);
else
var _dv_=cst$21;
if(args)
var
_dw_=encode_arguments(args),
_dx_=caml_call2(Stdlib[28],cst$15,_dw_);
else
var _dx_=cst$20;
var
_dy_=caml_call2(Stdlib[28],_dx_,_dv_),
_dz_=function(x){return urlencode(0,x)},
_dA_=caml_call2(Stdlib_List[19],_dz_,path),
_dB_=caml_call2(String[6],cst$16,_dA_),
_dC_=caml_call2(Stdlib[28],_dB_,_dy_),
_dD_=caml_call2(Stdlib[28],cst$17,_dC_);
if(80 === port)
var _dE_=cst$18;
else
var
_dI_=caml_call1(Stdlib[33],port),
_dE_=caml_call2(Stdlib[28],cst$19,_dI_);
var
_dF_=caml_call2(Stdlib[28],_dE_,_dD_),
_dG_=urlencode(0,host),
_dH_=caml_call2(Stdlib[28],_dG_,_dF_);
return caml_call2(Stdlib[28],cst_http$1,_dH_);
case 1:
var
match$0=param[1],
frag$0=match$0[6],
args$0=match$0[5],
path$0=match$0[3],
port$0=match$0[2],
host$0=match$0[1];
if(caml_string_notequal(frag$0,cst$22))
var
_dJ_=urlencode(0,frag$0),
_dK_=caml_call2(Stdlib[28],cst$23,_dJ_);
else
var _dK_=cst$30;
if(args$0)
var
_dL_=encode_arguments(args$0),
_dM_=caml_call2(Stdlib[28],cst$24,_dL_);
else
var _dM_=cst$29;
var
_dN_=caml_call2(Stdlib[28],_dM_,_dK_),
_dO_=function(x){return urlencode(0,x)},
_dP_=caml_call2(Stdlib_List[19],_dO_,path$0),
_dQ_=caml_call2(String[6],cst$25,_dP_),
_dR_=caml_call2(Stdlib[28],_dQ_,_dN_),
_dS_=caml_call2(Stdlib[28],cst$26,_dR_);
if(443 === port$0)
var _dT_=cst$27;
else
var
_dX_=caml_call1(Stdlib[33],port$0),
_dT_=caml_call2(Stdlib[28],cst$28,_dX_);
var
_dU_=caml_call2(Stdlib[28],_dT_,_dS_),
_dV_=urlencode(0,host$0),
_dW_=caml_call2(Stdlib[28],_dV_,_dU_);
return caml_call2(Stdlib[28],cst_https$1,_dW_);
default:
var
match$1=param[1],
frag$1=match$1[4],
args$1=match$1[3],
path$1=match$1[1];
if(caml_string_notequal(frag$1,cst$31))
var
_dY_=urlencode(0,frag$1),
_dZ_=caml_call2(Stdlib[28],cst$32,_dY_);
else
var _dZ_=cst$36;
if(args$1)
var
_d0_=encode_arguments(args$1),
_d1_=caml_call2(Stdlib[28],cst$33,_d0_);
else
var _d1_=cst$35;
var
_d2_=caml_call2(Stdlib[28],_d1_,_dZ_),
_d3_=function(x){return urlencode(0,x)},
_d4_=caml_call2(Stdlib_List[19],_d3_,path$1),
_d5_=caml_call2(String[6],cst$34,_d4_),
_d6_=caml_call2(Stdlib[28],_d5_,_d2_);
return caml_call2(Stdlib[28],cst_file$2,_d6_)}}
var _r_=caml_call1(Optdef[2],_j_.location);
if(caml_call1(Optdef[5],_r_))
var _s_=_j_.location;
else
var
t42=function(param,_dt_){return 0},
t41$0=function(param,_ds_){return 0},
t40=function(param){return 0},
_s_=
{"href":"",
"protocol":"",
"host":"",
"hostname":"",
"port":"",
"pathname":"",
"search":"",
"hash":"",
"origin":t39,
"reload":caml_js_wrap_meth_callback(t40),
"replace":caml_js_wrap_meth_callback(t41$0),
"assign":caml_js_wrap_meth_callback(t42)};
var
host=urldecode_js_string_string(_s_.hostname),
protocol=urldecode_js_string_string(_s_.protocol),
_t_=0,
port=
function(param)
{try
{var _dq_=[0,caml_int_of_string(caml_string_of_jsbytes(_s_.port))];
return _dq_}
catch(_dr_)
{_dr_ = caml_wrap_exception(_dr_);
if(_dr_[1] === Stdlib[7])return 0;
throw _dr_}}
(_t_),
path_string=urldecode_js_string_string(_s_.pathname),
path=path_of_path_string(path_string),
t49=_s_.search;
if(t49.charAt(0) === "?")
var t52=_s_.search,_u_=t52.slice(1);
else
var _u_=_s_.search;
var arguments$0=decode_arguments_js_string(_u_);
function get_fragment(param)
{function _dn_(res){return caml_string_of_jsstring(res[1])}
function _do_(param){return cst$37}
var t57=new t11("#(.*)"),t58=_s_.href,_dp_=t58.match(t57);
return caml_call3(Opt[7],_dp_,_do_,_dn_)}
function set_fragment(s)
{var t59=caml_jsbytes_of_string(urlencode(0,s));return _s_.hash = t59}
function get$2(param){return url_of_js_string(_s_.href)}
function set$0(u)
{var t62=caml_jsbytes_of_string(string_of_url(u));return _s_.href = t62}
var
as_string=urldecode_js_string_string(_s_.href),
Js_of_ocaml_Url=
[0,
urldecode,
urlencode,
default_http_port,
default_https_port,
path_of_path_string,
encode_arguments,
decode_arguments,
url_of_string,
string_of_url,
[0,
host,
port,
protocol,
path_string,
path,
arguments$0,
get_fragment,
set_fragment,
get$2,
set$0,
as_string]];
caml_register_global(1659,Js_of_ocaml_Url,"Js_of_ocaml__Url");
var Js_of_ocaml_Lib_version=[0,s,git_version];
caml_register_global
(1660,Js_of_ocaml_Lib_version,"Js_of_ocaml__Lib_version");
function update_file(name,content)
{var oc=caml_call1(Stdlib[60],name);
caml_call2(Stdlib[66],oc,content);
return caml_call1(Stdlib[76],oc)}
function set_channel_flusher(out_channel,f)
{var
f$0=
caml_js_wrap_callback
(function(s){return caml_call1(f,caml_string_of_jsbytes(s))});
return runtime.caml_ml_set_channel_output(out_channel,f$0)}
function set_channel_filler(in_channel,f)
{var f$0=caml_js_wrap_callback(f);
return runtime.caml_ml_set_channel_refill(in_channel,f$0)}
function mount(path,f)
{return runtime.caml_mount_autoload
(path,
caml_js_wrap_callback
(function(prefix,path){return caml_call2(f,prefix,path)}))}
function unmount(path){return runtime.caml_unmount(path)}
if(caml_call2(String[68],git_version,cst$38))
var js_of_ocaml_version=s;
else
var
_co_=caml_call2(Stdlib[28],cst$41,git_version),
js_of_ocaml_version=caml_call2(Stdlib[28],s,_co_);
var
_v_=runtime.caml_create_file,
_w_=runtime.caml_read_file_content,
Js_of_ocaml_Sys_js=
[0,
set_channel_flusher,
set_channel_filler,
function(_dm_){return runtime.caml_list_mount_point(_dm_)},
unmount,
mount,
_w_,
_v_,
update_file,
js_of_ocaml_version];
caml_register_global(1661,Js_of_ocaml_Sys_js,"Js_of_ocaml__Sys_js");
function empty_resize_observer_options(param){return {}}
var t2$0=Unsafe[1].ResizeObserver;
function is_supported$0(param){return caml_call1(Optdef[5],t2$0)}
function observe(node,f,box,param)
{var t1=caml_js_wrap_callback(f),t4=new t2$0(t1);
if(box)
{var box$0=box[1],t8={};t8.box = box$0;t4.observe(node,t8)}
else
t4.observe(node);
return t4}
var
Js_of_ocaml_ResizeObserver=
[0,empty_resize_observer_options,t2$0,is_supported$0,observe];
caml_register_global
(1662,Js_of_ocaml_ResizeObserver,"Js_of_ocaml__ResizeObserver");
var t4$1=Unsafe[1].PerformanceObserver;
function is_supported$1(param){return caml_call1(Optdef[5],t4$1)}
function observe$0(entry_types,f)
{var
_dl_=
caml_call1
(caml_call1(Stdlib_List[19],caml_jsstring_of_string),entry_types),
t1=caml_js_from_array(caml_call1(Stdlib_Array[12],_dl_)),
t5={};
t5.entryTypes = t1;
var t3=caml_js_wrap_callback(f),t6=new t4$1(t3);
t6.observe(t5);
return t6}
var Js_of_ocaml_PerformanceObserve=[0,t4$1,is_supported$1,observe$0];
caml_register_global
(1663,Js_of_ocaml_PerformanceObserve,"Js_of_ocaml__PerformanceObserver");
function empty_mutation_observer_init(param){return {}}
var t2$1=Unsafe[1].MutationObserver;
function is_supported$2(param){return caml_call1(Optdef[5],t2$1)}
function observe$1
(node,
f,
child_list,
attributes,
character_data,
subtree,
attribute_old_value,
character_data_old_value,
attribute_filter,
param)
{function opt_iter(x,f)
{if(x){var x$0=x[1];return caml_call1(f,x$0)}return 0}
var t1=caml_js_wrap_callback(f),t19=new t2$1(t1),t18={};
opt_iter(child_list,function(t3){return t18.childList = t3});
opt_iter(attributes,function(t5){return t18.attributes = t5});
opt_iter(character_data,function(t7){return t18.characterData = t7});
opt_iter(subtree,function(t9){return t18.subtree = t9});
opt_iter
(attribute_old_value,function(t11){return t18.attributeOldValue = t11});
opt_iter
(character_data_old_value,
function(t13){return t18.characterDataOldValue = t13});
opt_iter
(attribute_filter,
function(l)
{var t15=caml_js_from_array(caml_call1(Stdlib_Array[12],l));
return t18.attributeFilter = t15});
t19.observe(node,t18);
return t19}
var
Js_of_ocaml_MutationObserver=
[0,empty_mutation_observer_init,t2$1,is_supported$2,observe$1];
caml_register_global
(1664,Js_of_ocaml_MutationObserver,"Js_of_ocaml__MutationObserver");
var t1=Unsafe[1].Object;
function create$0(param){return new t1()}
function add$0(t,k,v){return t[k.concat("_")] = v}
function remove(t,k){return delete t[k.concat("_")]}
function find(t,k){return t[k.concat("_")]}
function keys(t)
{var
t10=Unsafe[1].Object,
t11=t10.keys(t),
res=[0,0],
_dh_=t11.length - 1 | 0,
_dg_=0;
if(! (_dh_ < 0))
{var i=_dg_;
for(;;)
{var
_di_=function(param){return caml_call1(Stdlib[2],cst_Jstable_keys)},
t15=caml_call2(Optdef[8],t11[i],_di_),
t14=t15.length - 1 | 0,
_dj_=res[1];
res[1] = [0,t15.substring(0,t14),_dj_];
var _dk_=i + 1 | 0;
if(_dh_ !== i){var i=_dk_;continue}
break}}
return caml_call1(Stdlib_List[9],res[1])}
var Js_of_ocaml_Jstable=[0,create$0,add$0,remove,find,keys];
caml_register_global(1665,Js_of_ocaml_Jstable,"Js_of_ocaml__Jstable");
var t11$1=Unsafe[1].JSON;
function reviver(this$0,key,value)
{if(typeof value === "string")return caml_string_of_jsbytes(value);
if
(value instanceof array_length
&&
4
===
value.length
&&
255
===
value[0])
return runtime.caml_int64_create_lo_mi_hi(value[1],value[2],value[3]);
return value}
var t3$0=caml_js_wrap_meth_callback(reviver);
function unsafe_input(t2){return t11$1.parse(t2,t3$0)}
var mlInt64_constr=t5.constructor;
function t10(key,value)
{var _df_=Stdlib_Obj[13];
return caml_call2(symbol$8,runtime.caml_obj_tag(value),_df_)
?caml_jsbytes_of_string(value)
:value instanceof mlInt64_constr
?caml_js_from_array([0,255,value.lo,value.mi,value.hi])
:value}
function output(t9){return t11$1.stringify(t9,t10)}
var Js_of_ocaml_Json=[0,output,unsafe_input];
caml_register_global(1667,Js_of_ocaml_Json,"Js_of_ocaml__Json");
function string_of_name(param)
{var _de_=param;
if(74 <= _de_)
{if(111 <= _de_)
switch(_de_)
{case 111:return cst_palevioletred;
case 112:return cst_papayawhip;
case 113:return cst_peachpuff;
case 114:return cst_peru;
case 115:return cst_pink;
case 116:return cst_plum;
case 117:return cst_powderblue;
case 118:return cst_purple;
case 119:return cst_red;
case 120:return cst_rosybrown;
case 121:return cst_royalblue;
case 122:return cst_saddlebrown;
case 123:return cst_salmon;
case 124:return cst_sandybrown;
case 125:return cst_seagreen;
case 126:return cst_seashell;
case 127:return cst_sienna;
case 128:return cst_silver;
case 129:return cst_skyblue;
case 130:return cst_slateblue;
case 131:return cst_slategray;
case 132:return cst_slategrey;
case 133:return cst_snow;
case 134:return cst_springgreen;
case 135:return cst_steelblue;
case 136:return cst_tan;
case 137:return cst_teal;
case 138:return cst_thistle;
case 139:return cst_tomato;
case 140:return cst_turquoise;
case 141:return cst_violet;
case 142:return cst_wheat;
case 143:return cst_white;
case 144:return cst_whitesmoke;
case 145:return cst_yellow;
default:return cst_yellowgreen}
switch(_de_)
{case 74:return cst_lightpink;
case 75:return cst_lightsalmon;
case 76:return cst_lightseagreen;
case 77:return cst_lightskyblue;
case 78:return cst_lightslategray;
case 79:return cst_lightslategrey;
case 80:return cst_lightsteelblue;
case 81:return cst_lightyellow;
case 82:return cst_lime;
case 83:return cst_limegreen;
case 84:return cst_linen;
case 85:return cst_magenta;
case 86:return cst_maroon;
case 87:return cst_mediumaquamarine;
case 88:return cst_mediumblue;
case 89:return cst_mediumorchid;
case 90:return cst_mediumpurple;
case 91:return cst_mediumseagreen;
case 92:return cst_mediumslateblue;
case 93:return cst_mediumspringgreen;
case 94:return cst_mediumturquoise;
case 95:return cst_mediumvioletred;
case 96:return cst_midnightblue;
case 97:return cst_mintcream;
case 98:return cst_mistyrose;
case 99:return cst_moccasin;
case 100:return cst_navajowhite;
case 101:return cst_navy;
case 102:return cst_oldlace;
case 103:return cst_olive;
case 104:return cst_olivedrab;
case 105:return cst_orange;
case 106:return cst_orangered;
case 107:return cst_orchid;
case 108:return cst_palegoldenrod;
case 109:return cst_palegreen;
default:return cst_paleturquoise}}
if(37 <= _de_)
switch(_de_)
{case 37:return cst_darkslategrey;
case 38:return cst_darkturquoise;
case 39:return cst_darkviolet;
case 40:return cst_deeppink;
case 41:return cst_deepskyblue;
case 42:return cst_dimgray;
case 43:return cst_dimgrey;
case 44:return cst_dodgerblue;
case 45:return cst_firebrick;
case 46:return cst_floralwhite;
case 47:return cst_forestgreen;
case 48:return cst_fuchsia;
case 49:return cst_gainsboro;
case 50:return cst_ghostwhite;
case 51:return cst_gold;
case 52:return cst_goldenrod;
case 53:return cst_gray;
case 54:return cst_grey;
case 55:return cst_green;
case 56:return cst_greenyellow;
case 57:return cst_honeydew;
case 58:return cst_hotpink;
case 59:return cst_indianred;
case 60:return cst_indigo;
case 61:return cst_ivory;
case 62:return cst_khaki;
case 63:return cst_lavender;
case 64:return cst_lavenderblush;
case 65:return cst_lawngreen;
case 66:return cst_lemonchiffon;
case 67:return cst_lightblue;
case 68:return cst_lightcoral;
case 69:return cst_lightcyan;
case 70:return cst_lightgoldenrodyellow;
case 71:return cst_lightgray;
case 72:return cst_lightgreen;
default:return cst_lightgrey}
switch(_de_)
{case 0:return cst_aliceblue;
case 1:return cst_antiquewhite;
case 2:return cst_aqua;
case 3:return cst_aquamarine;
case 4:return cst_azure;
case 5:return cst_beige;
case 6:return cst_bisque;
case 7:return cst_black;
case 8:return cst_blanchedalmond;
case 9:return cst_blue;
case 10:return cst_blueviolet;
case 11:return cst_brown;
case 12:return cst_burlywood;
case 13:return cst_cadetblue;
case 14:return cst_chartreuse;
case 15:return cst_chocolate;
case 16:return cst_coral;
case 17:return cst_cornflowerblue;
case 18:return cst_cornsilk;
case 19:return cst_crimson;
case 20:return cst_cyan;
case 21:return cst_darkblue;
case 22:return cst_darkcyan;
case 23:return cst_darkgoldenrod;
case 24:return cst_darkgray;
case 25:return cst_darkgreen;
case 26:return cst_darkgrey;
case 27:return cst_darkkhaki;
case 28:return cst_darkmagenta;
case 29:return cst_darkolivegreen;
case 30:return cst_darkorange;
case 31:return cst_darkorchid;
case 32:return cst_darkred;
case 33:return cst_darksalmon;
case 34:return cst_darkseagreen;
case 35:return cst_darkslateblue;
default:return cst_darkslategray}}
function name_of_string(s)
{var switch$0=caml_string_compare(s,cst_lightgrey$0);
if(0 <= switch$0)
{if(! (0 < switch$0))return 73;
var switch$1=caml_string_compare(s,cst_paleturquoise$0);
if(0 <= switch$1)
{if(! (0 < switch$1))return 110;
var switch$2=caml_string_compare(s,cst_skyblue$0);
if(0 <= switch$2)
{if(! (0 < switch$2))return 129;
var switch$3=caml_string_compare(s,cst_thistle$0);
if(0 <= switch$3)
{if(! (0 < switch$3))return 138;
if(! caml_string_notequal(s,cst_tomato$0))return 139;
if(! caml_string_notequal(s,cst_turquoise$0))return 140;
if(! caml_string_notequal(s,cst_violet$0))return 141;
if(! caml_string_notequal(s,cst_wheat$0))return 142;
if(! caml_string_notequal(s,cst_white$0))return 143;
if(! caml_string_notequal(s,cst_whitesmoke$0))return 144;
if(! caml_string_notequal(s,cst_yellow$0))return 145;
if(! caml_string_notequal(s,cst_yellowgreen$0))return 146}
else
{if(! caml_string_notequal(s,cst_slateblue$0))return 130;
if(! caml_string_notequal(s,cst_slategray$0))return 131;
if(! caml_string_notequal(s,cst_slategrey$0))return 132;
if(! caml_string_notequal(s,cst_snow$0))return 133;
if(! caml_string_notequal(s,cst_springgreen$0))return 134;
if(! caml_string_notequal(s,cst_steelblue$0))return 135;
if(! caml_string_notequal(s,cst_tan$0))return 136;
if(! caml_string_notequal(s,cst_teal$0))return 137}}
else
{var switch$4=caml_string_compare(s,cst_rosybrown$0);
if(0 <= switch$4)
{if(! (0 < switch$4))return 120;
if(! caml_string_notequal(s,cst_royalblue$0))return 121;
if(! caml_string_notequal(s,cst_saddlebrown$0))return 122;
if(! caml_string_notequal(s,cst_salmon$0))return 123;
if(! caml_string_notequal(s,cst_sandybrown$0))return 124;
if(! caml_string_notequal(s,cst_seagreen$0))return 125;
if(! caml_string_notequal(s,cst_seashell$0))return 126;
if(! caml_string_notequal(s,cst_sienna$0))return 127;
if(! caml_string_notequal(s,cst_silver$0))return 128}
else
{if(! caml_string_notequal(s,cst_palevioletred$0))return 111;
if(! caml_string_notequal(s,cst_papayawhip$0))return 112;
if(! caml_string_notequal(s,cst_peachpuff$0))return 113;
if(! caml_string_notequal(s,cst_peru$0))return 114;
if(! caml_string_notequal(s,cst_pink$0))return 115;
if(! caml_string_notequal(s,cst_plum$0))return 116;
if(! caml_string_notequal(s,cst_powderblue$0))return 117;
if(! caml_string_notequal(s,cst_purple$0))return 118;
if(! caml_string_notequal(s,cst_red$0))return 119}}}
else
{var switch$5=caml_string_compare(s,cst_mediumslateblue$0);
if(0 <= switch$5)
{if(! (0 < switch$5))return 92;
var switch$6=caml_string_compare(s,cst_navy$0);
if(0 <= switch$6)
{if(! (0 < switch$6))return 101;
if(! caml_string_notequal(s,cst_oldlace$0))return 102;
if(! caml_string_notequal(s,cst_olive$0))return 103;
if(! caml_string_notequal(s,cst_olivedrab$0))return 104;
if(! caml_string_notequal(s,cst_orange$0))return 105;
if(! caml_string_notequal(s,cst_orangered$0))return 106;
if(! caml_string_notequal(s,cst_orchid$0))return 107;
if(! caml_string_notequal(s,cst_palegoldenrod$0))return 108;
if(! caml_string_notequal(s,cst_palegreen$0))return 109}
else
{if(! caml_string_notequal(s,cst_mediumspringgreen$0))return 93;
if(! caml_string_notequal(s,cst_mediumturquoise$0))return 94;
if(! caml_string_notequal(s,cst_mediumvioletred$0))return 95;
if(! caml_string_notequal(s,cst_midnightblue$0))return 96;
if(! caml_string_notequal(s,cst_mintcream$0))return 97;
if(! caml_string_notequal(s,cst_mistyrose$0))return 98;
if(! caml_string_notequal(s,cst_moccasin$0))return 99;
if(! caml_string_notequal(s,cst_navajowhite$0))return 100}}
else
{var switch$7=caml_string_compare(s,cst_limegreen$0);
if(0 <= switch$7)
{if(! (0 < switch$7))return 83;
if(! caml_string_notequal(s,cst_linen$0))return 84;
if(! caml_string_notequal(s,cst_magenta$0))return 85;
if(! caml_string_notequal(s,cst_maroon$0))return 86;
if(! caml_string_notequal(s,cst_mediumaquamarine$0))return 87;
if(! caml_string_notequal(s,cst_mediumblue$0))return 88;
if(! caml_string_notequal(s,cst_mediumorchid$0))return 89;
if(! caml_string_notequal(s,cst_mediumpurple$0))return 90;
if(! caml_string_notequal(s,cst_mediumseagreen$0))return 91}
else
{if(! caml_string_notequal(s,cst_lightpink$0))return 74;
if(! caml_string_notequal(s,cst_lightsalmon$0))return 75;
if(! caml_string_notequal(s,cst_lightseagreen$0))return 76;
if(! caml_string_notequal(s,cst_lightskyblue$0))return 77;
if(! caml_string_notequal(s,cst_lightslategray$0))return 78;
if(! caml_string_notequal(s,cst_lightslategrey$0))return 79;
if(! caml_string_notequal(s,cst_lightsteelblue$0))return 80;
if(! caml_string_notequal(s,cst_lightyellow$0))return 81;
if(! caml_string_notequal(s,cst_lime$0))return 82}}}}
else
{var switch$8=caml_string_compare(s,cst_darkslategray$0);
if(0 <= switch$8)
{if(! (0 < switch$8))return 36;
var switch$9=caml_string_compare(s,cst_greenyellow$0);
if(0 <= switch$9)
{if(! (0 < switch$9))return 56;
var switch$10=caml_string_compare(s,cst_lavenderblush$0);
if(0 <= switch$10)
{if(! (0 < switch$10))return 64;
if(! caml_string_notequal(s,cst_lawngreen$0))return 65;
if(! caml_string_notequal(s,cst_lemonchiffon$0))return 66;
if(! caml_string_notequal(s,cst_lightblue$0))return 67;
if(! caml_string_notequal(s,cst_lightcoral$0))return 68;
if(! caml_string_notequal(s,cst_lightcyan$0))return 69;
if(! caml_string_notequal(s,cst_lightgoldenrodyellow$0))
return 70;
if(! caml_string_notequal(s,cst_lightgray$0))return 71;
if(! caml_string_notequal(s,cst_lightgreen$0))return 72}
else
{if(! caml_string_notequal(s,cst_grey$0))return 54;
if(! caml_string_notequal(s,cst_honeydew$0))return 57;
if(! caml_string_notequal(s,cst_hotpink$0))return 58;
if(! caml_string_notequal(s,cst_indianred$0))return 59;
if(! caml_string_notequal(s,cst_indigo$0))return 60;
if(! caml_string_notequal(s,cst_ivory$0))return 61;
if(! caml_string_notequal(s,cst_khaki$0))return 62;
if(! caml_string_notequal(s,cst_lavender$0))return 63}}
else
{var switch$11=caml_string_compare(s,cst_floralwhite$0);
if(0 <= switch$11)
{if(! (0 < switch$11))return 46;
if(! caml_string_notequal(s,cst_forestgreen$0))return 47;
if(! caml_string_notequal(s,cst_fuchsia$0))return 48;
if(! caml_string_notequal(s,cst_gainsboro$0))return 49;
if(! caml_string_notequal(s,cst_ghostwhite$0))return 50;
if(! caml_string_notequal(s,cst_gold$0))return 51;
if(! caml_string_notequal(s,cst_goldenrod$0))return 52;
if(! caml_string_notequal(s,cst_gray$0))return 53;
if(! caml_string_notequal(s,cst_green$0))return 55}
else
{if(! caml_string_notequal(s,cst_darkslategrey$0))return 37;
if(! caml_string_notequal(s,cst_darkturquoise$0))return 38;
if(! caml_string_notequal(s,cst_darkviolet$0))return 39;
if(! caml_string_notequal(s,cst_deeppink$0))return 40;
if(! caml_string_notequal(s,cst_deepskyblue$0))return 41;
if(! caml_string_notequal(s,cst_dimgray$0))return 42;
if(! caml_string_notequal(s,cst_dimgrey$0))return 43;
if(! caml_string_notequal(s,cst_dodgerblue$0))return 44;
if(! caml_string_notequal(s,cst_firebrick$0))return 45}}}
else
{var switch$12=caml_string_compare(s,cst_cornsilk$0);
if(0 <= switch$12)
{if(! (0 < switch$12))return 18;
var switch$13=caml_string_compare(s,cst_darkkhaki$0);
if(0 <= switch$13)
{if(! (0 < switch$13))return 27;
if(! caml_string_notequal(s,cst_darkmagenta$0))return 28;
if(! caml_string_notequal(s,cst_darkolivegreen$0))return 29;
if(! caml_string_notequal(s,cst_darkorange$0))return 30;
if(! caml_string_notequal(s,cst_darkorchid$0))return 31;
if(! caml_string_notequal(s,cst_darkred$0))return 32;
if(! caml_string_notequal(s,cst_darksalmon$0))return 33;
if(! caml_string_notequal(s,cst_darkseagreen$0))return 34;
if(! caml_string_notequal(s,cst_darkslateblue$0))return 35}
else
{if(! caml_string_notequal(s,cst_crimson$0))return 19;
if(! caml_string_notequal(s,cst_cyan$0))return 20;
if(! caml_string_notequal(s,cst_darkblue$0))return 21;
if(! caml_string_notequal(s,cst_darkcyan$0))return 22;
if(! caml_string_notequal(s,cst_darkgoldenrod$0))return 23;
if(! caml_string_notequal(s,cst_darkgray$0))return 24;
if(! caml_string_notequal(s,cst_darkgreen$0))return 25;
if(! caml_string_notequal(s,cst_darkgrey$0))return 26}}
else
{var switch$14=caml_string_compare(s,cst_blue$0);
if(0 <= switch$14)
{if(! (0 < switch$14))return 9;
if(! caml_string_notequal(s,cst_blueviolet$0))return 10;
if(! caml_string_notequal(s,cst_brown$0))return 11;
if(! caml_string_notequal(s,cst_burlywood$0))return 12;
if(! caml_string_notequal(s,cst_cadetblue$0))return 13;
if(! caml_string_notequal(s,cst_chartreuse$0))return 14;
if(! caml_string_notequal(s,cst_chocolate$0))return 15;
if(! caml_string_notequal(s,cst_coral$0))return 16;
if(! caml_string_notequal(s,cst_cornflowerblue$0))return 17}
else
{if(! caml_string_notequal(s,cst_aliceblue$0))return 0;
if(! caml_string_notequal(s,cst_antiquewhite$0))return 1;
if(! caml_string_notequal(s,cst_aqua$0))return 2;
if(! caml_string_notequal(s,cst_aquamarine$0))return 3;
if(! caml_string_notequal(s,cst_azure$0))return 4;
if(! caml_string_notequal(s,cst_beige$0))return 5;
if(! caml_string_notequal(s,cst_bisque$0))return 6;
if(! caml_string_notequal(s,cst_black$0))return 7;
if(! caml_string_notequal(s,cst_blanchedalmond$0))return 8}}}}
var _dd_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_color_name);
throw [0,Stdlib[6],_dd_]}
function rgb_of_name(param)
{var _dc_=param;
if(74 <= _dc_)
{if(111 <= _dc_)
switch(_dc_)
{case 111:return _bq_;
case 112:return _br_;
case 113:return _bs_;
case 114:return _bt_;
case 115:return _bu_;
case 116:return _bv_;
case 117:return _bw_;
case 118:return _bx_;
case 119:return _by_;
case 120:return _bz_;
case 121:return _bA_;
case 122:return _bB_;
case 123:return _bC_;
case 124:return _bD_;
case 125:return _bE_;
case 126:return _bF_;
case 127:return _bG_;
case 128:return _bH_;
case 129:return _bI_;
case 130:return _bJ_;
case 131:return _bK_;
case 132:return _bL_;
case 133:return _bM_;
case 134:return _bN_;
case 135:return _bO_;
case 136:return _bP_;
case 137:return _bQ_;
case 138:return _bR_;
case 139:return _bS_;
case 140:return _bT_;
case 141:return _bU_;
case 142:return _bV_;
case 143:return _bW_;
case 144:return _bX_;
case 145:return _bY_;
default:return _bZ_}
switch(_dc_)
{case 74:return _aR_;
case 75:return _aS_;
case 76:return _aT_;
case 77:return _aU_;
case 78:return _aV_;
case 79:return _aW_;
case 80:return _aX_;
case 81:return _aY_;
case 82:return _aZ_;
case 83:return _a0_;
case 84:return _a1_;
case 85:return _a2_;
case 86:return _a3_;
case 87:return _a4_;
case 88:return _a5_;
case 89:return _a6_;
case 90:return _a7_;
case 91:return _a8_;
case 92:return _a9_;
case 93:return _a__;
case 94:return _a$_;
case 95:return _ba_;
case 96:return _bb_;
case 97:return _bc_;
case 98:return _bd_;
case 99:return _be_;
case 100:return _bf_;
case 101:return _bg_;
case 102:return _bh_;
case 103:return _bi_;
case 104:return _bj_;
case 105:return _bk_;
case 106:return _bl_;
case 107:return _bm_;
case 108:return _bn_;
case 109:return _bo_;
default:return _bp_}}
if(37 <= _dc_)
switch(_dc_)
{case 37:return _ag_;
case 38:return _ah_;
case 39:return _ai_;
case 40:return _aj_;
case 41:return _ak_;
case 42:return _al_;
case 43:return _am_;
case 44:return _an_;
case 45:return _ao_;
case 46:return _ap_;
case 47:return _aq_;
case 48:return _ar_;
case 49:return _as_;
case 50:return _at_;
case 51:return _au_;
case 52:return _av_;
case 53:return _aw_;
case 54:return _ax_;
case 55:return _ay_;
case 56:return _az_;
case 57:return _aA_;
case 58:return _aB_;
case 59:return _aC_;
case 60:return _aD_;
case 61:return _aE_;
case 62:return _aF_;
case 63:return _aG_;
case 64:return _aH_;
case 65:return _aI_;
case 66:return _aJ_;
case 67:return _aK_;
case 68:return _aL_;
case 69:return _aM_;
case 70:return _aN_;
case 71:return _aO_;
case 72:return _aP_;
default:return _aQ_}
switch(_dc_)
{case 0:return _x_;
case 1:return _y_;
case 2:return _z_;
case 3:return _A_;
case 4:return _B_;
case 5:return _C_;
case 6:return _D_;
case 7:return _E_;
case 8:return _F_;
case 9:return _G_;
case 10:return _H_;
case 11:return _I_;
case 12:return _J_;
case 13:return _K_;
case 14:return _L_;
case 15:return _M_;
case 16:return _N_;
case 17:return _O_;
case 18:return _P_;
case 19:return _Q_;
case 20:return _R_;
case 21:return _S_;
case 22:return _T_;
case 23:return _U_;
case 24:return _V_;
case 25:return _W_;
case 26:return _X_;
case 27:return _Y_;
case 28:return _Z_;
case 29:return ___;
case 30:return _$_;
case 31:return _aa_;
case 32:return _ab_;
case 33:return _ac_;
case 34:return _ad_;
case 35:return _ae_;
default:return _af_}}
function rgb(a,r,g,b)
{if(a){var a$0=a[1];return [3,[0,r,g,b,a$0]]}return [1,[0,r,g,b]]}
function hsl(a,h,s,l)
{if(a){var a$0=a[1];return [6,[0,h,s,l,a$0]]}return [5,[0,h,s,l]]}
function string_of_t(param)
{switch(param[0])
{case 0:var n=param[1];return string_of_name(n);
case 1:
var match=param[1],b=match[3],g=match[2],r=match[1];
return caml_call4(Stdlib_Printf[4],_b0_,r,g,b);
case 2:
var match$0=param[1],b$0=match$0[3],g$0=match$0[2],r$0=match$0[1];
return caml_call4(Stdlib_Printf[4],_b1_,r$0,g$0,b$0);
case 3:
var
match$1=param[1],
a=match$1[4],
b$1=match$1[3],
g$1=match$1[2],
r$1=match$1[1];
return caml_call5(Stdlib_Printf[4],_b2_,r$1,g$1,b$1,a);
case 4:
var
match$2=param[1],
a$0=match$2[4],
b$2=match$2[3],
g$2=match$2[2],
r$2=match$2[1];
return caml_call5(Stdlib_Printf[4],_b3_,r$2,g$2,b$2,a$0);
case 5:
var match$3=param[1],l=match$3[3],s=match$3[2],h=match$3[1];
return caml_call4(Stdlib_Printf[4],_b4_,h,s,l);
default:
var
match$4=param[1],
a$1=match$4[4],
l$0=match$4[3],
s$0=match$4[2],
h$0=match$4[1];
return caml_call5(Stdlib_Printf[4],_b5_,h$0,s$0,l$0,a$1)}}
function hex_of_rgb(param)
{var blue=param[3],green=param[2],red=param[1];
function in_range(i)
{var
_c__=caml_call2(symbol$5,i,0),
_c$_=_c__ || caml_call2(symbol$9,i,255);
if(_c$_)
{var
_da_=caml_call1(Stdlib[33],i),
_db_=caml_call2(Stdlib[28],_da_,cst_is_out_of_valid_range);
throw [0,Stdlib[6],_db_]}
return _c$_}
in_range(red);
in_range(green);
in_range(blue);
return caml_call4(Stdlib_Printf[4],_b6_,red,green,blue)}
function js_t_of_js_string(s)
{var
t0=caml_jsbytes_of_string(cst_rgb_s_d_s_d_s_d),
t13=new t11(t0),
t2=caml_jsbytes_of_string(cst_rgb_s_d_s_d_s_d$0),
t17=new t11(t2),
t4=caml_jsbytes_of_string(cst_rgba_s_d_s_d_s_d_d_d),
t15=new t11(t4),
t6=caml_jsbytes_of_string(cst_rgba_s_d_s_d_s_d_d_d$0),
t19=new t11(t6),
t8=caml_jsbytes_of_string(cst_hsl_s_d_s_d_s_d),
t21=new t11(t8),
t10=caml_jsbytes_of_string(cst_hsla_s_d_s_d_s_d_d_d),
t23=new t11(t10);
if
(!
(t13.test(s) | 0)
&&
!
(t15.test(s) | 0)
&&
!
(t17.test(s) | 0)
&&
!
(t19.test(s) | 0)
&&
!
(t21.test(s) | 0)
&&
!
(t23.test(s) | 0))
{var _c7_=caml_string_of_jsstring(s);
if(caml_call2(Stdlib_List[36],_c7_,_b7_))return s;
var
_c8_=caml_string_of_jsstring(s),
_c9_=caml_call2(Stdlib[28],_c8_,cst_is_not_a_valid_color);
throw [0,Stdlib[6],_c9_]}
return s}
function js(c)
{if(0 === c[0])
{var n=c[1];return caml_jsstring_of_string(string_of_name(n))}
return caml_jsstring_of_string(string_of_t(c))}
function ml(c)
{var s=caml_string_of_jsstring(c);
try
{var _cU_=[0,name_of_string(s)];return _cU_}
catch(_cV_)
{_cV_ = caml_wrap_exception(_cV_);
if(_cV_[1] === Stdlib[6])
{var
fail=
function(param)
{var _c6_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_color$0);
throw [0,Stdlib[6],_c6_]},
re_rgb=regexp(cst_rgba_d_d_d_d_d),
re_rgb_pct=regexp(cst_rgba_d_d_d_d_d$0),
re_hsl=regexp(cst_hsla_d_d_d_d_d),
i_of_s_o=
function(param)
{if(param)
{var i=param[1];
try
{var _c4_=caml_int_of_string(i);return _c4_}
catch(_c5_)
{_c5_ = caml_wrap_exception(_c5_);
if(_c5_[1] === Stdlib[6])
var s=_c5_[2];
else
{if(_c5_[1] !== Stdlib[7])throw _c5_;var s=_c5_[2]}
var
_c1_=caml_call2(Stdlib[28],cst$39,s),
_c2_=caml_call2(Stdlib[28],i,_c1_),
_c3_=caml_call2(Stdlib[28],cst_color_conversion_error,_c2_);
throw [0,Stdlib[6],_c3_]}}
return fail(0)},
f_of_s=
function(f)
{try
{var _cZ_=caml_float_of_string(f);return _cZ_}
catch(_c0_)
{_c0_ = caml_wrap_exception(_c0_);
if(_c0_[1] === Stdlib[6])
var s=_c0_[2];
else
{if(_c0_[1] !== Stdlib[7])throw _c0_;var s=_c0_[2]}
var
_cW_=caml_call2(Stdlib[28],cst$40,s),
_cX_=caml_call2(Stdlib[28],f,_cW_),
_cY_=caml_call2(Stdlib[28],cst_color_conversion_error$0,_cX_);
throw [0,Stdlib[6],_cY_]}},
match=string_match(re_rgb,s,0);
if(match)
{var
r=match[1],
red=matched_group(r,2),
green=matched_group(r,3),
blue=matched_group(r,4),
alpha=matched_group(r,5),
match$0=matched_group(r,1);
if(match$0)
{var _cC_=match$0[1];
if(! caml_string_notequal(_cC_,cst_rgb))
{if(alpha)return fail(0);
var _cG_=i_of_s_o(blue),_cH_=i_of_s_o(green);
return [1,[0,i_of_s_o(red),_cH_,_cG_]]}
if(! caml_string_notequal(_cC_,cst_rgba))
{if(alpha)
{var
a=alpha[1],
_cD_=f_of_s(a),
_cE_=i_of_s_o(blue),
_cF_=i_of_s_o(green);
return [3,[0,i_of_s_o(red),_cF_,_cE_,_cD_]]}
return fail(0)}}
return fail(0)}
var match$1=string_match(re_rgb_pct,s,0);
if(match$1)
{var
r$0=match$1[1],
red$0=matched_group(r$0,2),
green$0=matched_group(r$0,3),
blue$0=matched_group(r$0,4),
alpha$0=matched_group(r$0,5),
match$2=matched_group(r$0,1);
if(match$2)
{var _cI_=match$2[1];
if(! caml_string_notequal(_cI_,cst_rgb$0))
{if(alpha$0)return fail(0);
var _cM_=i_of_s_o(blue$0),_cN_=i_of_s_o(green$0);
return [2,[0,i_of_s_o(red$0),_cN_,_cM_]]}
if(! caml_string_notequal(_cI_,cst_rgba$0))
{if(alpha$0)
{var
a$0=alpha$0[1],
_cJ_=f_of_s(a$0),
_cK_=i_of_s_o(blue$0),
_cL_=i_of_s_o(green$0);
return [4,[0,i_of_s_o(red$0),_cL_,_cK_,_cJ_]]}
return fail(0)}}
return fail(0)}
var match$3=string_match(re_hsl,s,0);
if(match$3)
{var
r$1=match$3[1],
red$1=matched_group(r$1,2),
green$1=matched_group(r$1,3),
blue$1=matched_group(r$1,4),
alpha$1=matched_group(r$1,5),
match$4=matched_group(r$1,1);
if(match$4)
{var _cO_=match$4[1];
if(! caml_string_notequal(_cO_,cst_hsl))
{if(alpha$1)return fail(0);
var _cS_=i_of_s_o(blue$1),_cT_=i_of_s_o(green$1);
return [5,[0,i_of_s_o(red$1),_cT_,_cS_]]}
if(! caml_string_notequal(_cO_,cst_hsla))
{if(alpha$1)
{var
a$1=alpha$1[1],
_cP_=f_of_s(a$1),
_cQ_=i_of_s_o(blue$1),
_cR_=i_of_s_o(green$1);
return [6,[0,i_of_s_o(red$1),_cR_,_cQ_,_cP_]]}
return fail(0)}}
return fail(0)}
return fail(0)}
throw _cV_}}
function string_of_t$0(param)
{if(typeof param === "number")
return cst_0;
else
switch(param[0])
{case 0:
var f=param[1];return caml_call3(Stdlib_Printf[4],_b8_,f,cst_em$0);
case 1:
var f$0=param[1];
return caml_call3(Stdlib_Printf[4],_b9_,f$0,cst_ex);
case 2:
var f$1=param[1];
return caml_call3(Stdlib_Printf[4],_b__,f$1,cst_px);
case 3:
var f$2=param[1];
return caml_call3(Stdlib_Printf[4],_b$_,f$2,cst_gd);
case 4:
var f$3=param[1];
return caml_call3(Stdlib_Printf[4],_ca_,f$3,cst_rem);
case 5:
var f$4=param[1];
return caml_call3(Stdlib_Printf[4],_cb_,f$4,cst_vw);
case 6:
var f$5=param[1];
return caml_call3(Stdlib_Printf[4],_cc_,f$5,cst_vh);
case 7:
var f$6=param[1];
return caml_call3(Stdlib_Printf[4],_cd_,f$6,cst_vm);
case 8:
var f$7=param[1];
return caml_call3(Stdlib_Printf[4],_ce_,f$7,cst_ch);
case 9:
var f$8=param[1];
return caml_call3(Stdlib_Printf[4],_cf_,f$8,cst_mm);
case 10:
var f$9=param[1];
return caml_call3(Stdlib_Printf[4],_cg_,f$9,cst_cm);
case 11:
var f$10=param[1];
return caml_call3(Stdlib_Printf[4],_ch_,f$10,cst_in);
case 12:
var f$11=param[1];
return caml_call3(Stdlib_Printf[4],_ci_,f$11,cst_pt);
default:
var f$12=param[1];
return caml_call3(Stdlib_Printf[4],_cj_,f$12,cst_pc)}}
function js$0(t){return caml_jsstring_of_string(string_of_t$0(t))}
function ml$0(t)
{var s=caml_string_of_jsstring(t);
if(caml_call2(String[68],s,cst_0$0))return 0;
function fail(param)
{var _cB_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_length);
throw [0,Stdlib[6],_cB_]}
var re=regexp(cst_d_d_s_S),match=string_match(re,s,0);
if(match)
{var r=match[1],match$0=matched_group(r,1);
if(match$0)
{var f=match$0[1];
try
{var _cz_=caml_float_of_string(f)}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] === Stdlib[6])
{var
s$0=exn[2],
_cy_=caml_call2(Stdlib[28],cst_length_conversion_error,s$0);
throw [0,Stdlib[6],_cy_]}
throw exn}
var f$0=_cz_}
else
var f$0=fail(0);
var match$1=matched_group(r,2);
if(match$1)
{var _cA_=match$1[1],switch$0=caml_string_compare(_cA_,cst_pc$0);
if(0 <= switch$0)
{if(! (0 < switch$0))return [13,f$0];
if(! caml_string_notequal(_cA_,cst_pt$0))return [12,f$0];
if(! caml_string_notequal(_cA_,cst_px$0))return [2,f$0];
if(! caml_string_notequal(_cA_,cst_rem$0))return [4,f$0];
if(! caml_string_notequal(_cA_,cst_vh$0))return [6,f$0];
if(! caml_string_notequal(_cA_,cst_vm$0))return [7,f$0];
if(! caml_string_notequal(_cA_,cst_vw$0))return [5,f$0]}
else
{if(! caml_string_notequal(_cA_,cst_ch$0))return [8,f$0];
if(! caml_string_notequal(_cA_,cst_cm$0))return [10,f$0];
if(! caml_string_notequal(_cA_,cst_em$1))return [0,f$0];
if(! caml_string_notequal(_cA_,cst_ex$0))return [1,f$0];
if(! caml_string_notequal(_cA_,cst_gd$0))return [3,f$0];
if(! caml_string_notequal(_cA_,cst_in$0))return [11,f$0];
if(! caml_string_notequal(_cA_,cst_mm$0))return [9,f$0]}
return fail(0)}
return fail(0)}
return fail(0)}
var Length=[0,string_of_t$0,js$0,ml$0];
function string_of_t$1(param)
{switch(param[0])
{case 0:
var f=param[1];return caml_call3(Stdlib_Printf[4],_ck_,f,cst_deg);
case 1:
var f$0=param[1];
return caml_call3(Stdlib_Printf[4],_cl_,f$0,cst_grad);
case 2:
var f$1=param[1];
return caml_call3(Stdlib_Printf[4],_cm_,f$1,cst_rad);
default:
var f$2=param[1];
return caml_call3(Stdlib_Printf[4],_cn_,f$2,cst_turns)}}
function js$1(t){return caml_jsstring_of_string(string_of_t$1(t))}
function ml$1(j)
{var s=caml_string_of_jsstring(j),re=regexp(cst_d_d_deg_grad_rad_turns);
function fail(param)
{var _cx_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_length$0);
throw [0,Stdlib[6],_cx_]}
var match=string_match(re,s,0);
if(match)
{var r=match[1],match$0=matched_group(r,1);
if(match$0)
{var f=match$0[1];
try
{var _cv_=caml_float_of_string(f)}
catch(exn)
{exn = caml_wrap_exception(exn);
if(exn[1] === Stdlib[6])
{var
s$0=exn[2],
_cu_=caml_call2(Stdlib[28],cst_length_conversion_error$0,s$0);
throw [0,Stdlib[6],_cu_]}
throw exn}
var f$0=_cv_}
else
var f$0=fail(0);
var match$1=matched_group(r,2);
if(match$1)
{var _cw_=match$1[1];
if(! caml_string_notequal(_cw_,cst_deg$0))return [0,f$0];
if(! caml_string_notequal(_cw_,cst_grad$0))return [1,f$0];
if(! caml_string_notequal(_cw_,cst_rad$0))return [2,f$0];
if(! caml_string_notequal(_cw_,cst_turns$0))return [3,f$0]}
return fail(0)}
return fail(0)}
var
Angle=[0,string_of_t$1,js$1,ml$1],
Js_of_ocaml_CSS=
[0,
[0,
string_of_name,
rgb_of_name,
hex_of_rgb,
rgb,
hsl,
string_of_t,
js,
ml,
js_t_of_js_string],
Length,
Angle];
caml_register_global(1668,Js_of_ocaml_CSS,"Js_of_ocaml__CSS");
function listen(opt,target,typ,cb)
{if(opt)var sth=opt[1],capture=sth;else var capture=0;
var _ct_=! ! capture;
return addEventListener
(target,
typ,
full_handler(function(n,e){return ! ! caml_call2(cb,n,e)}),
_ct_)}
var Js_of_ocaml_Dom_events=[0,Event$0,listen,removeEventListener];
caml_register_global
(1669,Js_of_ocaml_Dom_events,"Js_of_ocaml__Dom_events");
var
t0="http://www.w3.org/2000/svg",
SVGError=[248,cst_Js_of_ocaml_Dom_svg_SVGErr,caml_fresh_oo_id(0)];
function createElement$0(t2,name)
{var t1=caml_jsstring_of_string(name);
return t2.createElementNS("http://www.w3.org/2000/svg",t1)}
function unsafeCreateElement$0(doc,name){return createElement$0(doc,name)}
function createA$0(doc){return unsafeCreateElement$0(doc,cst_a$2)}
function createAltGlyph(doc)
{return unsafeCreateElement$0(doc,cst_altglyph)}
function createAltGlyphDef(doc)
{return unsafeCreateElement$0(doc,cst_altglyphdef)}
function createAltGlyphItem(doc)
{return unsafeCreateElement$0(doc,cst_altglyphitem)}
function createAnimate(doc){return unsafeCreateElement$0(doc,cst_animate)}
function createAnimateColor(doc)
{return unsafeCreateElement$0(doc,cst_animatecolor)}
function createAnimateMotion(doc)
{return unsafeCreateElement$0(doc,cst_animatemotion)}
function createAnimateTransform(doc)
{return unsafeCreateElement$0(doc,cst_animatetransform)}
function createCircle(doc){return unsafeCreateElement$0(doc,cst_circle)}
function createClipPath(doc)
{return unsafeCreateElement$0(doc,cst_clippath)}
function createCursor(doc){return unsafeCreateElement$0(doc,cst_cursor)}
function createDefs(doc){return unsafeCreateElement$0(doc,cst_defs)}
function createDesc(doc){return unsafeCreateElement$0(doc,cst_desc)}
function createEllipse(doc){return unsafeCreateElement$0(doc,cst_ellipse)}
function createFilter(doc){return unsafeCreateElement$0(doc,cst_filter)}
function createFont(doc){return unsafeCreateElement$0(doc,cst_font)}
function createFontFace(doc)
{return unsafeCreateElement$0(doc,cst_font_face)}
function createFontFaceFormat(doc)
{return unsafeCreateElement$0(doc,cst_font_face_format)}
function createFontFaceName(doc)
{return unsafeCreateElement$0(doc,cst_font_face_name)}
function createFontFaceSrc(doc)
{return unsafeCreateElement$0(doc,cst_font_face_src)}
function createFontFaceUri(doc)
{return unsafeCreateElement$0(doc,cst_font_face_uri)}
function createForeignObject(doc)
{return unsafeCreateElement$0(doc,cst_foreignObject)}
function createG(doc){return unsafeCreateElement$0(doc,cst_g$0)}
function createGlyph(doc){return unsafeCreateElement$0(doc,cst_glyph)}
function createGlyphRef(doc)
{return unsafeCreateElement$0(doc,cst_glyphref)}
function createhkern(doc){return unsafeCreateElement$0(doc,cst_hkern)}
function createImage(doc){return unsafeCreateElement$0(doc,cst_image)}
function createLineElement(doc)
{return unsafeCreateElement$0(doc,cst_line)}
function createLinearElement(doc)
{return unsafeCreateElement$0(doc,cst_lineargradient)}
function createMask(doc){return unsafeCreateElement$0(doc,cst_mask)}
function createMetaData(doc)
{return unsafeCreateElement$0(doc,cst_metadata)}
function createMissingGlyph(doc)
{return unsafeCreateElement$0(doc,cst_missing_glyph)}
function createMPath(doc){return unsafeCreateElement$0(doc,cst_mpath)}
function createPath(doc){return unsafeCreateElement$0(doc,cst_path)}
function createPattern(doc){return unsafeCreateElement$0(doc,cst_pattern)}
function createPolygon(doc){return unsafeCreateElement$0(doc,cst_polygon)}
function createPolyline(doc)
{return unsafeCreateElement$0(doc,cst_polyline)}
function createRadialgradient(doc)
{return unsafeCreateElement$0(doc,cst_radialgradient)}
function createRect(doc){return unsafeCreateElement$0(doc,cst_rect)}
function createScript$0(doc)
{return unsafeCreateElement$0(doc,cst_script$2)}
function createSet(doc){return unsafeCreateElement$0(doc,cst_set)}
function createStop(doc){return unsafeCreateElement$0(doc,cst_stop)}
function createStyle$0(doc){return unsafeCreateElement$0(doc,cst_style$2)}
function createSvg(doc){return unsafeCreateElement$0(doc,cst_svg)}
function createSwitch(doc){return unsafeCreateElement$0(doc,cst_switch)}
function createSymbol(doc){return unsafeCreateElement$0(doc,cst_symbol)}
function createTextElement(doc)
{return unsafeCreateElement$0(doc,cst_text$0)}
function createTextpath(doc)
{return unsafeCreateElement$0(doc,cst_textpath)}
function createTitle$0(doc){return unsafeCreateElement$0(doc,cst_title$2)}
function createTref(doc){return unsafeCreateElement$0(doc,cst_tref)}
function createTspan(doc){return unsafeCreateElement$0(doc,cst_tspan)}
function createUse(doc){return unsafeCreateElement$0(doc,cst_use)}
function createView(doc){return unsafeCreateElement$0(doc,cst_view)}
function createvkern(doc){return unsafeCreateElement$0(doc,cst_vkern)}
var svg_element=Unsafe[1].SVGElement,document$0=Unsafe[1].document;
function getElementById$0(id)
{function _cq_(e){if(e instanceof svg_element)return e;throw Stdlib[8]}
function _cr_(param){throw Stdlib[8]}
var
t6=caml_jsstring_of_string(id),
t7=Unsafe[1].document,
_cs_=t7.getElementById(t6);
return caml_call3(Opt[7],_cs_,_cr_,_cq_)}
function element$2(e){return e instanceof svg_element?e:no_handler}
function unsafeCoerce$0(e,tag)
{var t9=e.tagName,_cp_=caml_jsstring_of_string(tag);
return t9.toLowerCase() === _cp_?e:no_handler}
function a$0(e){return unsafeCoerce$0(e,cst_a$3)}
function altGlyph(e){return unsafeCoerce$0(e,cst_altglyph$0)}
function altGlyphDef(e){return unsafeCoerce$0(e,cst_altglyphdef$0)}
function altGlyphItem(e){return unsafeCoerce$0(e,cst_altglyphitem$0)}
function animate(e){return unsafeCoerce$0(e,cst_animate$0)}
function animateColor(e){return unsafeCoerce$0(e,cst_animatecolor$0)}
function animateMotion(e){return unsafeCoerce$0(e,cst_animatemotion$0)}
function animateTransform(e)
{return unsafeCoerce$0(e,cst_animatetransform$0)}
function circle(e){return unsafeCoerce$0(e,cst_circle$0)}
function clipPath(e){return unsafeCoerce$0(e,cst_clippath$0)}
function cursor(e){return unsafeCoerce$0(e,cst_cursor$0)}
function defs(e){return unsafeCoerce$0(e,cst_defs$0)}
function desc(e){return unsafeCoerce$0(e,cst_desc$0)}
function ellipse(e){return unsafeCoerce$0(e,cst_ellipse$0)}
function filter(e){return unsafeCoerce$0(e,cst_filter$0)}
function font(e){return unsafeCoerce$0(e,cst_font$0)}
function fontFace(e){return unsafeCoerce$0(e,cst_font_face$0)}
function fontFaceFormat(e)
{return unsafeCoerce$0(e,cst_font_face_format$0)}
function fontFaceName(e){return unsafeCoerce$0(e,cst_font_face_name$0)}
function fontFaceSrc(e){return unsafeCoerce$0(e,cst_font_face_src$0)}
function fontFaceUri(e){return unsafeCoerce$0(e,cst_font_face_uri$0)}
function foreignObject(e){return unsafeCoerce$0(e,cst_foreignobject)}
function g(e){return unsafeCoerce$0(e,cst_g$1)}
function glyph(e){return unsafeCoerce$0(e,cst_glyph$0)}
function glyphRef(e){return unsafeCoerce$0(e,cst_glyphref$0)}
function hkern(e){return unsafeCoerce$0(e,cst_hkern$0)}
function image(e){return unsafeCoerce$0(e,cst_image$0)}
function lineElement(e){return unsafeCoerce$0(e,cst_line$0)}
function linearElement(e){return unsafeCoerce$0(e,cst_lineargradient$0)}
function mask(e){return unsafeCoerce$0(e,cst_mask$0)}
function metaData(e){return unsafeCoerce$0(e,cst_metadata$0)}
function missingGlyph(e){return unsafeCoerce$0(e,cst_missing_glyph$0)}
function mPath(e){return unsafeCoerce$0(e,cst_mpath$0)}
function path$0(e){return unsafeCoerce$0(e,cst_path$0)}
function pattern(e){return unsafeCoerce$0(e,cst_pattern$0)}
function polygon(e){return unsafeCoerce$0(e,cst_polygon$0)}
function polyline(e){return unsafeCoerce$0(e,cst_polyline$0)}
function radialgradient(e){return unsafeCoerce$0(e,cst_radialgradient$0)}
function rect(e){return unsafeCoerce$0(e,cst_rect$0)}
function script$0(e){return unsafeCoerce$0(e,cst_script$3)}
function set$1(e){return unsafeCoerce$0(e,cst_set$0)}
function stop(e){return unsafeCoerce$0(e,cst_stop$0)}
function style$0(e){return unsafeCoerce$0(e,cst_style$3)}
function svg(e){return unsafeCoerce$0(e,cst_svg$0)}
function switch$0(e){return unsafeCoerce$0(e,cst_switch$0)}
function symbol$12(e){return unsafeCoerce$0(e,cst_symbol$0)}
function textElement(e){return unsafeCoerce$0(e,cst_text$1)}
function textpath(e){return unsafeCoerce$0(e,cst_textpath$0)}
function title$0(e){return unsafeCoerce$0(e,cst_title$3)}
function tref(e){return unsafeCoerce$0(e,cst_tref$0)}
function tspan(e){return unsafeCoerce$0(e,cst_tspan$0)}
function use(e){return unsafeCoerce$0(e,cst_use$0)}
function view(e){return unsafeCoerce$0(e,cst_view$0)}
function vkern(e){return unsafeCoerce$0(e,cst_vkern$0)}
var
Js_of_ocaml_Dom_svg=
[0,
t0,
SVGError,
createElement$0,
createA$0,
createAltGlyph,
createAltGlyphDef,
createAltGlyphItem,
createAnimate,
createAnimateColor,
createAnimateMotion,
createAnimateTransform,
createCircle,
createClipPath,
createCursor,
createDefs,
createDesc,
createEllipse,
createFilter,
createFont,
createFontFace,
createFontFaceFormat,
createFontFaceName,
createFontFaceSrc,
createFontFaceUri,
createForeignObject,
createG,
createGlyph,
createGlyphRef,
createhkern,
createImage,
createLineElement,
createLinearElement,
createMask,
createMetaData,
createMissingGlyph,
createMPath,
createPath,
createPattern,
createPolygon,
createPolyline,
createRadialgradient,
createRect,
createScript$0,
createSet,
createStop,
createStyle$0,
createSvg,
createSwitch,
createSymbol,
createTextElement,
createTextpath,
createTitle$0,
createTref,
createTspan,
createUse,
createView,
createvkern,
svg_element,
document$0,
getElementById$0,
[0,
element$2,
a$0,
altGlyph,
altGlyphDef,
altGlyphItem,
animate,
animateColor,
animateMotion,
animateTransform,
circle,
clipPath,
cursor,
defs,
desc,
ellipse,
filter,
font,
fontFace,
fontFaceFormat,
fontFaceName,
fontFaceSrc,
fontFaceUri,
foreignObject,
g,
glyph,
glyphRef,
hkern,
image,
lineElement,
linearElement,
mask,
metaData,
missingGlyph,
mPath,
path$0,
pattern,
polygon,
polyline,
radialgradient,
rect,
script$0,
set$1,
stop,
style$0,
svg,
switch$0,
symbol$12,
textElement,
textpath,
title$0,
tref,
tspan,
use,
view,
vkern]];
caml_register_global(1670,Js_of_ocaml_Dom_svg,"Js_of_ocaml__Dom_svg");
function withCredentials(b)
{var t1={},t0=! ! b;t1.withCredentials = t0;return t1}
var
eventSource=Unsafe[1].EventSource,
eventSource_options=Unsafe[1].EventSource,
Js_of_ocaml_EventSource=
[0,withCredentials,eventSource,eventSource_options,addEventListener];
caml_register_global
(1671,Js_of_ocaml_EventSource,"Js_of_ocaml__EventSource");
var
console=runtime.caml_js_get_console(0),
Js_of_ocaml_Firebug=[0,console];
caml_register_global(1672,Js_of_ocaml_Firebug,"Js_of_ocaml__Firebug");
function empty_position_options(param){return {}}
var
t1$0=Unsafe[1].navigator,
geolocation=caml_call1(Optdef[5],t1$0)?t1$0.geolocation:t1$0;
function is_supported$3(param){return caml_call1(Optdef[5],geolocation)}
var
Js_of_ocaml_Geolocation=
[0,empty_position_options,geolocation,is_supported$3];
caml_register_global
(1673,Js_of_ocaml_Geolocation,"Js_of_ocaml__Geolocation");
function empty_intersection_observer_op(param){return {}}
var intersectionObserver_unsafe=Unsafe[1].IntersectionObserver;
function is_supported$4(param)
{return caml_call1(Optdef[5],intersectionObserver_unsafe)}
var
Js_of_ocaml_IntersectionObserv=
[0,
empty_intersection_observer_op,
is_supported$4,
intersectionObserver_unsafe];
caml_register_global
(1674,Js_of_ocaml_IntersectionObserv,"Js_of_ocaml__IntersectionObserver");
function object_options(param){return {"localeMatcher":"best fit"}}
function options(param)
{return {"localeMatcher":"best fit",
"usage":"sort",
"sensitivity":"variant",
"ignorePunctuation":t4,
"numeric":t4,
"caseFirst":"false"}}
var Collator=[0,object_options,options];
function options$0(param)
{return {"localeMatcher":"best fit",
"timeZone":t39,
"hour12":t39,
"hourCycle":t39,
"formatMatcher":"best fit",
"weekday":t39,
"era":t39,
"year":t39,
"month":t39,
"day":t39,
"hour":t39,
"minute":t39,
"second":t39,
"timeZoneName":t39}}
var DateTimeFormat=[0,object_options,options$0];
function options$1(param)
{return {"localeMatcher":"best fit",
"style":"decimal",
"currency":t39,
"currencyDisplay":t39,
"useGrouping":t25,
"minimumIntegerDigits":t39,
"minimumFractionDigits":t39,
"maximumFractionDigits":t39,
"minimumSignificantDigits":t39,
"maximumSignificantDigits":t39}}
var NumberFormat=[0,object_options,options$1];
function options$2(param)
{return {"localeMatcher":"best fit","type":"cardinal"}}
var
PluralRules=[0,object_options,options$2],
intl=Unsafe[1].Intl,
t35=Unsafe[1].Intl,
collator_constr=t35.Collator,
t37=Unsafe[1].Intl,
dateTimeFormat_constr=t37.DateTimeFormat,
t39$0=Unsafe[1].Intl,
numberFormat_constr=t39$0.NumberFormat,
t41=Unsafe[1].Intl,
pluralRules_constr=t41.PluralRules;
function is_supported$5(param){return caml_call1(Optdef[5],intl)}
var
Js_of_ocaml_Intl=
[0,
Collator,
DateTimeFormat,
NumberFormat,
PluralRules,
intl,
collator_constr,
dateTimeFormat_constr,
numberFormat_constr,
pluralRules_constr,
is_supported$5];
caml_register_global(1675,Js_of_ocaml_Intl,"Js_of_ocaml__Intl");
var Js_of_ocaml$0=[0];
caml_register_global(1676,Js_of_ocaml$0,"Js_of_ocaml");
return}
(globalThis));
//# 1 "../.js/uutf/uutf.cma.js"
(function(globalThis)
{"use strict";
var
runtime=globalThis.jsoo_runtime,
caml_blit_bytes=runtime.caml_blit_bytes,
caml_bytes_unsafe_get=runtime.caml_bytes_unsafe_get,
caml_check_bound=runtime.caml_check_bound,
caml_create_bytes=runtime.caml_create_bytes,
caml_ml_bytes_length=runtime.caml_ml_bytes_length,
caml_ml_string_length=runtime.caml_ml_string_length,
caml_string_compare=runtime.caml_string_compare,
caml_string_get=runtime.caml_string_get,
caml_string_notequal=runtime.caml_string_notequal,
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes;
function caml_call1(f,a0)
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
function caml_call2(f,a0,a1)
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
function caml_call3(f,a0,a1,a2)
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
function caml_call4(f,a0,a1,a2,a3)
{return f.length == 4
?f(a0,a1,a2,a3)
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
var
global_data=runtime.caml_get_global_data(),
cst_UTF_8$0=caml_string_of_jsbytes("UTF-8"),
cst_US_ASCII$0=caml_string_of_jsbytes("US-ASCII"),
cst_ISO_8859_1$1=caml_string_of_jsbytes("ISO-8859-1"),
cst_UTF_16$0=caml_string_of_jsbytes("UTF-16"),
cst_UTF_16LE$0=caml_string_of_jsbytes("UTF-16LE"),
cst_UTF_16BE$0=caml_string_of_jsbytes("UTF-16BE"),
cst_ISO646_US=caml_string_of_jsbytes("ISO646-US"),
cst_CSISOLATIN1=caml_string_of_jsbytes("CSISOLATIN1"),
cst_ANSI_X3_4_1968=caml_string_of_jsbytes("ANSI_X3.4-1968"),
cst_ANSI_X3_4_1986=caml_string_of_jsbytes("ANSI_X3.4-1986"),
cst_ASCII=caml_string_of_jsbytes("ASCII"),
cst_CP367=caml_string_of_jsbytes("CP367"),
cst_CP819=caml_string_of_jsbytes("CP819"),
cst_CSASCII=caml_string_of_jsbytes("CSASCII"),
cst_IBM367=caml_string_of_jsbytes("IBM367"),
cst_IBM819=caml_string_of_jsbytes("IBM819"),
cst_ISO_8859_1$0=caml_string_of_jsbytes("ISO-8859-1"),
cst_ISO_IR_100=caml_string_of_jsbytes("ISO-IR-100"),
cst_ISO_IR_6=caml_string_of_jsbytes("ISO-IR-6"),
cst_US=caml_string_of_jsbytes("US"),
cst_ISO_646_IRV_1991=caml_string_of_jsbytes("ISO_646.IRV:1991"),
cst_ISO_8859_1=caml_string_of_jsbytes("ISO_8859-1"),
cst_ISO_8859_1_1987=caml_string_of_jsbytes("ISO_8859-1:1987"),
cst_L1=caml_string_of_jsbytes("L1"),
cst_LATIN1=caml_string_of_jsbytes("LATIN1"),
cst_US_ASCII=caml_string_of_jsbytes("US-ASCII"),
cst_UTF_16=caml_string_of_jsbytes("UTF-16"),
cst_UTF_16BE=caml_string_of_jsbytes("UTF-16BE"),
cst_UTF_16LE=caml_string_of_jsbytes("UTF-16LE"),
cst_UTF_8=caml_string_of_jsbytes("UTF-8"),
cst_expected_Await_encode=
caml_string_of_jsbytes("expected `Await encode"),
Stdlib_Uchar=global_data.Stdlib__Uchar,
Stdlib_Buffer=global_data.Stdlib__Buffer,
Stdlib_Bytes=global_data.Stdlib__Bytes,
Stdlib=global_data.Stdlib,
Assert_failure=global_data.Assert_failure,
Stdlib_String=global_data.Stdlib__String,
Stdlib_Printf=global_data.Stdlib__Printf,
Stdlib_Format=global_data.Stdlib__Format,
_a_=Stdlib_Format[129],
_B_=[0,caml_string_of_jsbytes("src/uutf.ml"),363,9],
_u_=
[0,
[11,caml_string_of_jsbytes("`Await"),0],
caml_string_of_jsbytes("`Await")],
_v_=
[0,[11,caml_string_of_jsbytes("`End"),0],caml_string_of_jsbytes("`End")],
_w_=
[0,
[18,
[1,[0,0,caml_string_of_jsbytes("")]],
[11,caml_string_of_jsbytes("`Uchar U+"),[4,8,[0,2,4],0,[17,0,0]]]],
caml_string_of_jsbytes("@[`Uchar U+%04X@]")],
_x_=
[0,
[18,
[1,[0,0,caml_string_of_jsbytes("")]],
[11,caml_string_of_jsbytes("`Malformed ("),0]],
caml_string_of_jsbytes("@[`Malformed (")],
_y_=[0,[4,8,[0,2,2],0,0],caml_string_of_jsbytes("%02X")],
_A_=[0,[12,32,[4,8,[0,2,2],0,0]],caml_string_of_jsbytes(" %02X")],
_z_=[0,[12,41,[17,0,0]],caml_string_of_jsbytes(")@]")],
_p_=[0,-211555818,3299808],
_k_=[0,-211558048,3299808],
_q_=[0,684370880,3299808],
_o_=[0,684370880,427938126],
_l_=[0,-211558048,427938126],
_m_=[0,caml_string_of_jsbytes("src/uutf.ml"),153,55],
_n_=[0,684370880,427938126],
_r_=[0,caml_string_of_jsbytes("src/uutf.ml"),152,55],
_s_=[0,caml_string_of_jsbytes("src/uutf.ml"),154,55],
_t_=[0,684370880,3455931],
_j_=[0,caml_string_of_jsbytes("src/uutf.ml"),120,9],
_c_=[0,684370880],
_d_=[0,-211555818],
_e_=[0,-211558048],
_f_=[0,143365725],
_g_=[0,423112016],
_h_=[0,338302576],
_b_=
[0,
[11,
caml_string_of_jsbytes("invalid bounds (index "),
[4,0,0,0,[11,caml_string_of_jsbytes(", length "),[4,0,0,0,[12,41,0]]]]],
caml_string_of_jsbytes("invalid bounds (index %d, length %d)")],
_i_=
[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];
function invalid_bounds(j,l)
{var _aF_=caml_call3(Stdlib_Printf[4],_b_,j,l);
return caml_call1(Stdlib[1],_aF_)}
function unsafe_set_byte(s,j,byte$0)
{runtime.caml_bytes_unsafe_set(s,j,byte$0);return 0}
var
u_bom=caml_call1(Stdlib_Uchar[9],65279),
u_rep=caml_call1(Stdlib_Uchar[9],65533);
function encoding_of_string(s)
{var
match=caml_call1(Stdlib_String[25],s),
_aD_=caml_string_compare(match,cst_ISO646_US),
switch$1=0;
if(0 <= _aD_)
{if(0 < _aD_)
{var switch$0=caml_string_compare(match,cst_US);
if(0 <= switch$0)
{if(0 < switch$0 && caml_string_notequal(match,cst_US_ASCII))
{if(! caml_string_notequal(match,cst_UTF_16))return _f_;
if(! caml_string_notequal(match,cst_UTF_16BE))return _e_;
if(! caml_string_notequal(match,cst_UTF_16LE))return _d_;
if(! caml_string_notequal(match,cst_UTF_8))return _c_;
switch$1 = 2}}
else
if(caml_string_notequal(match,cst_ISO_646_IRV_1991))
if
(caml_string_notequal(match,cst_ISO_8859_1)
&&
caml_string_notequal(match,cst_ISO_8859_1_1987)
&&
caml_string_notequal(match,cst_L1)
&&
caml_string_notequal(match,cst_LATIN1))
switch$1 = 2;
else
switch$1 = 1}}
else
{var _aE_=caml_string_compare(match,cst_CSISOLATIN1);
if(0 <= _aE_)
if(0 < _aE_)
{if(caml_string_notequal(match,cst_IBM367))
if
(caml_string_notequal(match,cst_IBM819)
&&
caml_string_notequal(match,cst_ISO_8859_1$0)
&&
caml_string_notequal(match,cst_ISO_IR_100))
{if(caml_string_notequal(match,cst_ISO_IR_6))switch$1 = 2}
else
switch$1 = 1}
else
switch$1 = 1;
else
if
(caml_string_notequal(match,cst_ANSI_X3_4_1968)
&&
caml_string_notequal(match,cst_ANSI_X3_4_1986)
&&
caml_string_notequal(match,cst_ASCII)
&&
caml_string_notequal(match,cst_CP367))
if(caml_string_notequal(match,cst_CP819))
{if(caml_string_notequal(match,cst_CSASCII))switch$1 = 2}
else
switch$1 = 1}
switch(switch$1){case 2:return 0;case 0:return _g_;default:return _h_}}
function encoding_to_string(param)
{return 143365725 <= param
?423112016 <= param
?684370880 <= param?cst_UTF_8$0:cst_US_ASCII$0
:338302576 <= param?cst_ISO_8859_1$1:cst_UTF_16$0
:-211555818 <= param?cst_UTF_16LE$0:cst_UTF_16BE$0}
function malformed(s,j,l)
{return [0,659980059,caml_call3(Stdlib_Bytes[8],s,j,l)]}
function malformed_pair(be,hi,s,j,l)
{var bs1=caml_call3(Stdlib_Bytes[7],s,j,l),bs0=caml_create_bytes(2);
if(be)var j1=1,j0=0;else var j1=0,j0=1;
unsafe_set_byte(bs0,j0,hi >>> 8 | 0);
unsafe_set_byte(bs0,j1,hi & 255);
var _aC_=caml_call2(Stdlib_Bytes[14],bs0,bs1);
return [0,659980059,caml_call1(Stdlib_Bytes[48],_aC_)]}
var utf_8_len=_i_.slice();
function r_utf_8(s,j,l)
{function uchar(c){return [0,852405675,caml_call1(Stdlib_Uchar[9],c)]}
var switcher=l - 1 | 0;
if(3 < switcher >>> 0)throw [0,Assert_failure,_j_];
switch(switcher)
{case 0:return uchar(caml_bytes_unsafe_get(s,j));
case 1:
var
b0=caml_bytes_unsafe_get(s,j),
b1=caml_bytes_unsafe_get(s,j + 1 | 0);
return 2 === (b1 >>> 6 | 0)
?uchar((b0 & 31) << 6 | b1 & 63)
:malformed(s,j,l);
case 2:
var
b0$0=caml_bytes_unsafe_get(s,j),
b1$0=caml_bytes_unsafe_get(s,j + 1 | 0),
b2=caml_bytes_unsafe_get(s,j + 2 | 0),
c=(b0$0 & 15) << 12 | (b1$0 & 63) << 6 | b2 & 63;
if(2 === (b2 >>> 6 | 0))
{if(224 === b0$0)
{if(160 <= b1$0 && ! (191 < b1$0))return uchar(c);
return malformed(s,j,l)}
if(237 === b0$0)
{if(128 <= b1$0 && ! (159 < b1$0))return uchar(c);
return malformed(s,j,l)}
return 2 === (b1$0 >>> 6 | 0)?uchar(c):malformed(s,j,l)}
return malformed(s,j,l);
default:
var
b0$1=caml_bytes_unsafe_get(s,j),
b1$1=caml_bytes_unsafe_get(s,j + 1 | 0),
b2$0=caml_bytes_unsafe_get(s,j + 2 | 0),
b3=caml_bytes_unsafe_get(s,j + 3 | 0),
c$0=
(b0$1 & 7)
<<
18
|
(b1$1 & 63)
<<
12
|
(b2$0 & 63)
<<
6
|
b3
&
63;
if(2 === (b3 >>> 6 | 0) && 2 === (b2$0 >>> 6 | 0))
{if(240 === b0$1)
{if(144 <= b1$1 && ! (191 < b1$1))return uchar(c$0);
return malformed(s,j,l)}
if(244 === b0$1)
{if(128 <= b1$1 && ! (143 < b1$1))return uchar(c$0);
return malformed(s,j,l)}
return 2 === (b1$1 >>> 6 | 0)?uchar(c$0):malformed(s,j,l)}
return malformed(s,j,l)}}
function r_utf_16(s,j0,j1)
{var
b0=caml_bytes_unsafe_get(s,j0),
b1=caml_bytes_unsafe_get(s,j1),
u=b0 << 8 | b1;
if(55296 <= u && ! (57343 < u))
return 56319 < u
?malformed(s,caml_call2(Stdlib[16],j0,j1),2)
:[0,16161,u];
return [0,852405675,caml_call1(Stdlib_Uchar[9],u)]}
function r_utf_16_lo(hi,s,j0,j1)
{var
b0=caml_bytes_unsafe_get(s,j0),
b1=caml_bytes_unsafe_get(s,j1),
lo=b0 << 8 | b1;
if(56320 <= lo && ! (57343 < lo))
return [0,
852405675,
caml_call1
(Stdlib_Uchar[9],((hi & 1023) << 10 | lo & 1023) + 65536 | 0)];
return malformed_pair(j0 < j1?1:0,hi,s,caml_call2(Stdlib[16],j0,j1),2)}
function r_encoding(s,j,l)
{function some(i){return i < l?[0,caml_bytes_unsafe_get(s,j + i | 0)]:0}
var match=some(0),match$0=some(1),match$1=some(2);
if(match)
{var _aB_=match[1],switch$0=0;
if(240 <= _aB_)
if(254 === _aB_)
{if(match$0){if(255 === match$0[1])return _k_;switch$0 = 1}}
else
if(255 === _aB_)
{if(match$0){if(254 === match$0[1])return _p_;switch$0 = 1}}
else
switch$0 = 1;
else
if(0 === _aB_)
{if(match$0)
{var p=match$0[1];
if(0 < p)return [0,-211558048,[0,605782321,p]];
switch$0 = 1}}
else
if(239 <= _aB_)
{if(match$0)
if(187 === match$0[1])
{if(match$1 && 191 === match$1[1])return _q_}
else
switch$0 = 1}
else
switch$0 = 1;
if(switch$0 && match$0 && 0 === match$0[1] && 0 < _aB_)
return [0,-211555818,[0,605782321,_aB_]];
if(0 === caml_check_bound(utf_8_len,_aB_)[1 + _aB_])
{if(match$0)return _l_;
if(match$1)throw [0,Assert_failure,_m_];
return _n_}
return _o_}
if(match$0)throw [0,Assert_failure,_r_];
if(match$1)throw [0,Assert_failure,_s_];
return _t_}
function pp_decode(ppf,param)
{if(typeof param === "number")
return 1006505782 <= param
?caml_call2(_a_,ppf,_u_)
:caml_call2(_a_,ppf,_v_);
if(852405675 <= param[1])
{var u=param[2];
return caml_call3(_a_,ppf,_w_,caml_call1(Stdlib_Uchar[10],u))}
var bs=param[2],l=caml_ml_string_length(bs);
caml_call2(_a_,ppf,_x_);
if(0 < l)caml_call3(_a_,ppf,_y_,caml_string_get(bs,0));
var _az_=l - 1 | 0,_ay_=1;
if(! (_az_ < 1))
{var i=_ay_;
for(;;)
{caml_call3(_a_,ppf,_A_,caml_string_get(bs,i));
var _aA_=i + 1 | 0;
if(_az_ !== i){var i=_aA_;continue}
break}}
return caml_call2(_a_,ppf,_z_)}
function i_rem(d){return (d[7] - d[6] | 0) + 1 | 0}
function eoi(d)
{d[5] = Stdlib_Bytes[3];d[6] = 0;d[7] = Stdlib[20];return 0}
function src(d,s,j,l)
{if(0 <= j && 0 <= l && ! (caml_ml_bytes_length(s) < (j + l | 0)))
return 0 === l?eoi(d):(d[5] = s,d[6] = j,d[7] = (j + l | 0) - 1 | 0,0);
return invalid_bounds(j,l)}
function refill(k,d)
{var _ax_=d[1];
if(typeof _ax_ === "number"){d[18] = k;return 1006505782}
if(438511779 <= _ax_[1])
{var
ic=_ax_[2],
rc=caml_call4(Stdlib[84],ic,d[5],0,caml_ml_bytes_length(d[5]));
src(d,d[5],0,rc);
return caml_call1(k,d)}
eoi(d);
return caml_call1(k,d)}
function t_need(d,need){d[9] = 0;d[10] = need;return 0}
function t_fill(k,d)
{function blit(d,l)
{caml_blit_bytes(d[5],d[6],d[8],d[9],l);
d[6] = d[6] + l | 0;
d[9] = d[9] + l | 0;
return 0}
var rem=i_rem(d);
if(0 <= rem)
{var need=d[10] - d[9] | 0;
return rem < need
?(blit(d,rem),refill(function(_aw_){return t_fill(k,_aw_)},d))
:(blit(d,need),caml_call1(k,d))}
return caml_call1(k,d)}
function ret(k,v,byte_count,d)
{d[18] = k;d[15] = d[15] + byte_count | 0;return caml_call2(d[17],d,v)}
function decode_us_ascii(d)
{var rem=i_rem(d);
if(0 < rem)
{var j=d[6];
d[6] = d[6] + 1 | 0;
var
_au_=d[5],
b0=caml_bytes_unsafe_get(_au_,j),
_at_=1,
_av_=
127 < b0
?malformed(_au_,j,1)
:[0,852405675,caml_call1(Stdlib_Uchar[9],b0)];
return ret(decode_us_ascii,_av_,_at_,d)}
return 0 <= rem?refill(decode_us_ascii,d):3455931}
function decode_iso_8859_1(d)
{var rem=i_rem(d);
if(0 < rem)
{var j=d[6];
d[6] = d[6] + 1 | 0;
return ret
(decode_iso_8859_1,
[0,
852405675,
caml_call1(Stdlib_Uchar[9],caml_bytes_unsafe_get(d[5],j))],
1,
d)}
return 0 <= rem?refill(decode_iso_8859_1,d):3455931}
function t_decode_utf_8(d)
{if(d[9] < d[10])
{var _ar_=d[9];return ret(decode_utf_8,malformed(d[8],0,d[9]),_ar_,d)}
var _as_=d[9];
return ret(decode_utf_8,r_utf_8(d[8],0,d[9]),_as_,d)}
function decode_utf_8(d)
{var rem=i_rem(d);
if(0 < rem)
{var need=utf_8_len[1 + caml_bytes_unsafe_get(d[5],d[6])];
if(rem < need){t_need(d,need);return t_fill(t_decode_utf_8,d)}
var j=d[6];
return 0 === need
?(d[6]
=
d[6]
+
1
|
0,
ret(decode_utf_8,malformed(d[5],j,1),1,d))
:(d[6]
=
d[6]
+
need
|
0,
ret(decode_utf_8,r_utf_8(d[5],j,need),need,d))}
return 0 <= rem?refill(decode_utf_8,d):3455931}
function t_decode_utf_16be_lo(hi,d)
{var bcount=d[9] + 2 | 0;
return d[9] < d[10]
?ret(decode_utf_16be,malformed_pair(1,hi,d[8],0,d[9]),bcount,d)
:ret(decode_utf_16be,r_utf_16_lo(hi,d[8],0,1),bcount,d)}
function decode_utf_16be_lo(v,d)
{if(659980059 <= v[1])return ret(decode_utf_16be,v,2,d);
var hi=v[2],rem=i_rem(d);
if(2 <= rem)
{var j=d[6];
d[6] = d[6] + 2 | 0;
return ret(decode_utf_16be,r_utf_16_lo(hi,d[5],j,j + 1 | 0),4,d)}
t_need(d,2);
return t_fill(function(_aq_){return t_decode_utf_16be_lo(hi,_aq_)},d)}
function t_decode_utf_16be(d)
{if(d[9] < d[10])
{var _ap_=d[9];
return ret(decode_utf_16be,malformed(d[8],0,d[9]),_ap_,d)}
return decode_utf_16be_lo(r_utf_16(d[8],0,1),d)}
function decode_utf_16be(d)
{var rem=i_rem(d);
if(0 < rem)
{if(2 <= rem)
{var j=d[6];
d[6] = d[6] + 2 | 0;
return decode_utf_16be_lo(r_utf_16(d[5],j,j + 1 | 0),d)}
t_need(d,2);
return t_fill(t_decode_utf_16be,d)}
return 0 <= rem?refill(decode_utf_16be,d):3455931}
function t_decode_utf_16_lo(hi,d)
{var bcount=d[9] + 2 | 0;
return d[9] < d[10]
?ret(decode_utf_16,malformed_pair(0,hi,d[8],0,d[9]),bcount,d)
:ret(decode_utf_16,r_utf_16_lo(hi,d[8],1,0),bcount,d)}
function decode_utf_16le_lo(v,d)
{if(659980059 <= v[1])return ret(decode_utf_16,v,2,d);
var hi=v[2],rem=i_rem(d);
if(2 <= rem)
{var j=d[6];
d[6] = d[6] + 2 | 0;
return ret(decode_utf_16,r_utf_16_lo(hi,d[5],j + 1 | 0,j),4,d)}
t_need(d,2);
return t_fill(function(_ao_){return t_decode_utf_16_lo(hi,_ao_)},d)}
function t_decode_utf_16(d)
{if(d[9] < d[10])
{var _an_=d[9];return ret(decode_utf_16,malformed(d[8],0,d[9]),_an_,d)}
return decode_utf_16le_lo(r_utf_16(d[8],1,0),d)}
function decode_utf_16(d)
{var rem=i_rem(d);
if(0 < rem)
{if(2 <= rem)
{var j=d[6];
d[6] = d[6] + 2 | 0;
return decode_utf_16le_lo(r_utf_16(d[5],j + 1 | 0,j),d)}
t_need(d,2);
return t_fill(t_decode_utf_16,d)}
return 0 <= rem?refill(decode_utf_16,d):3455931}
function guessed_utf_16(d,be,v)
{if(be)
var
j1=1,
j0=0,
t_decode_utf_16_lo$0=t_decode_utf_16be_lo,
t_decode_utf_16$0=t_decode_utf_16be,
decode_utf_16$0=decode_utf_16be;
else
var
j1=0,
j0=1,
t_decode_utf_16_lo$0=t_decode_utf_16_lo,
t_decode_utf_16$0=t_decode_utf_16,
decode_utf_16$0=decode_utf_16;
function b3(k,d)
{return 3 <= d[9]
?(d[10]
=
2,
d[9]
=
1,
unsafe_set_byte(d[8],0,caml_bytes_unsafe_get(d[8],2)),
t_fill(k,d))
:decode_utf_16$0(d)}
if(typeof v === "number")
{if(427938126 <= v)
{var v$0=r_utf_16(d[8],j0,j1);
if(659980059 <= v$0[1])
{var _ad_=2;
return ret
(function(_am_){return b3(t_decode_utf_16$0,_am_)},
v$0,
_ad_,
d)}
var hi=v$0[2];
if(3 <= d[9])
return b3(function(_al_){return t_decode_utf_16_lo$0(hi,_al_)},d);
var _ae_=d[9];
return ret
(decode_utf_16$0,
malformed_pair(be,hi,Stdlib_Bytes[3],0,0),
_ae_,
d)}
var _af_=2,_ag_=[0,852405675,u_bom];
return ret
(function(_ak_){return b3(t_decode_utf_16$0,_ak_)},
_ag_,
_af_,
d)}
var u=v[2],_ah_=2,_ai_=[0,852405675,caml_call1(Stdlib_Uchar[9],u)];
return ret
(function(_aj_){return b3(t_decode_utf_16$0,_aj_)},_ai_,_ah_,d)}
function k(d)
{function setup(d)
{var match=r_encoding(d[8],0,d[9]),_ac_=match[1];
if(-211555818 === _ac_)
{var r=match[2];
d[2] = -211555818;
d[18] = decode_utf_16;
return guessed_utf_16(d,0,r)}
if(684370880 <= _ac_)
{var r$0=match[2];
d[2] = 684370880;
d[18] = decode_utf_8;
if(3455931 === r$0)return 3455931;
if(427938126 <= r$0)
{var
b3=
function(d)
{var
b3=caml_bytes_unsafe_get(d[8],2),
n=caml_check_bound(utf_8_len,b3)[1 + b3];
return 0 === n
?ret(decode_utf_8,malformed(d[8],2,1),1,d)
:(d[10]
=
n,
d[9]
=
1,
unsafe_set_byte(d[8],0,b3),
t_fill(t_decode_utf_8,d))},
b2=
function(d)
{var
b2=caml_bytes_unsafe_get(d[8],1),
b3$0=2 < d[9]?b3:decode_utf_8,
n=caml_check_bound(utf_8_len,b2)[1 + b2];
if(0 === n)return ret(b3$0,malformed(d[8],1,1),1,d);
if(1 === n)return ret(b3$0,r_utf_8(d[8],1,1),1,d);
d[10] = n;
unsafe_set_byte(d[8],0,b2);
if(3 <= d[9])
{d[9] = 2;
unsafe_set_byte(d[8],1,caml_bytes_unsafe_get(d[8],2))}
else
d[9] = 1;
return t_fill(t_decode_utf_8,d)},
b1=caml_bytes_unsafe_get(d[8],0),
b2$0=1 < d[9]?b2:decode_utf_8,
n=caml_check_bound(utf_8_len,b1)[1 + b1];
if(4 < n >>> 0)throw [0,Assert_failure,_B_];
switch(n)
{case 0:return ret(b2$0,malformed(d[8],0,1),1,d);
case 1:return ret(b2$0,r_utf_8(d[8],0,1),1,d);
case 2:
return 2 <= d[9]
?3 <= d[9]
?ret(b3,r_utf_8(d[8],0,2),2,d)
:ret(decode_utf_8,r_utf_8(d[8],0,2),2,d)
:ret(decode_utf_8,malformed(d[8],0,1),1,d);
case 3:
if(3 <= d[9])return ret(decode_utf_8,r_utf_8(d[8],0,3),3,d);
var _aa_=d[9];
return ret(decode_utf_8,malformed(d[8],0,d[9]),_aa_,d);
default:
if(3 <= d[9]){d[10] = 4;return t_fill(t_decode_utf_8,d)}
var _ab_=d[9];
return ret(decode_utf_8,malformed(d[8],0,d[9]),_ab_,d)}}
return ret(decode_utf_8,[0,852405675,u_bom],3,d)}
var r$1=match[2];
d[2] = -211558048;
d[18] = decode_utf_16be;
return guessed_utf_16(d,1,r$1)}
t_need(d,3);
return t_fill(setup,d)}
function nline(d){d[14] = 0;d[13] = d[13] + 1 | 0;return 0}
function ncol(d){d[14] = d[14] + 1 | 0;return 0}
function ncount(d){d[16] = d[16] + 1 | 0;return 0}
function cr(d,b){d[12] = b;return 0}
function pp(d,v)
{if(852405675 <= v[1])
{var
u=v[2],
match=caml_call1(Stdlib_Uchar[10],u),
_$_=match - 133 | 0,
switch$0=0;
if(8100 < _$_ >>> 0)
{var switcher=_$_ + 123 | 0;
if(! (3 < switcher >>> 0))
switch(switcher)
{case 0:
var last_cr=d[12];
cr(d,0);
ncount(d);
return last_cr?v:(nline(d),v);
case 1:break;
case 2:switch$0 = 1;break;
default:cr(d,1);ncount(d);nline(d);return v}}
else
if(8097 < _$_ - 1 >>> 0)switch$0 = 1;
return switch$0
?(cr(d,0),ncount(d),nline(d),v)
:(cr(d,0),ncount(d),ncol(d),v)}
cr(d,0);
ncount(d);
ncol(d);
return v}
function pp_nln_readline(d,v)
{if(852405675 <= v[1])
{var
u=v[2],
match=caml_call1(Stdlib_Uchar[10],u),
___=match - 133 | 0,
switch$0=0;
if(8100 < ___ >>> 0)
{var switcher=___ + 123 | 0;
if(! (3 < switcher >>> 0))
switch(switcher)
{case 0:
var last_cr=d[12];
cr(d,0);
return last_cr
?caml_call1(d[18],d)
:(ncount(d),nline(d),[0,852405675,d[4]]);
case 1:break;
case 2:switch$0 = 1;break;
default:cr(d,1);ncount(d);nline(d);return [0,852405675,d[4]]}}
else
if(8097 < ___ - 1 >>> 0)switch$0 = 1;
return switch$0
?(cr(d,0),ncount(d),nline(d),[0,852405675,d[4]])
:(cr(d,0),ncount(d),ncol(d),v)}
cr(d,0);
ncount(d);
ncol(d);
return v}
function pp_nln_nlf(d,v)
{if(852405675 <= v[1])
{var u=v[2],match=caml_call1(Stdlib_Uchar[10],u),switch$0=0;
if(14 <= match)
{if(8232 <= match)
{if(! (8234 <= match))switch$0 = 1}
else
if(133 === match)
{cr(d,0);ncount(d);nline(d);return [0,852405675,d[4]]}}
else
if(10 <= match)
switch(match - 10 | 0)
{case 0:
var last_cr=d[12];
cr(d,0);
return last_cr
?caml_call1(d[18],d)
:(ncount(d),nline(d),[0,852405675,d[4]]);
case 1:break;
case 2:switch$0 = 1;break;
default:cr(d,1);ncount(d);nline(d);return [0,852405675,d[4]]}
return switch$0
?(cr(d,0),ncount(d),nline(d),v)
:(cr(d,0),ncount(d),ncol(d),v)}
cr(d,0);
ncount(d);
ncol(d);
return v}
function pp_nln_ascii(d,v)
{if(852405675 <= v[1])
{var
u=v[2],
match=caml_call1(Stdlib_Uchar[10],u),
_Z_=match - 133 | 0,
switch$0=0;
if(8100 < _Z_ >>> 0)
{var switcher=_Z_ + 123 | 0;
if(! (3 < switcher >>> 0))
switch(switcher)
{case 0:
var last_cr=d[12];
cr(d,0);
return last_cr
?caml_call1(d[18],d)
:(ncount(d),nline(d),[0,852405675,d[4]]);
case 1:break;
case 2:switch$0 = 1;break;
default:cr(d,1);ncount(d);nline(d);return [0,852405675,d[4]]}}
else
if(8097 < _Z_ - 1 >>> 0)switch$0 = 1;
return switch$0
?(cr(d,0),ncount(d),nline(d),v)
:(cr(d,0),ncount(d),ncol(d),v)}
cr(d,0);
ncount(d);
ncol(d);
return v}
function decode_fun(param)
{return 143365725 <= param
?423112016 <= param
?684370880 <= param?decode_utf_8:decode_us_ascii
:338302576 <= param?decode_iso_8859_1:decode_utf_16be
:-211555818 <= param?decode_utf_16:decode_utf_16be}
function decoder(nln,encoding,src)
{if(nln)
{var _X_=nln[1],_Y_=_X_[1];
if(3895880 === _Y_)
var nl=_X_[2],nl$0=nl,pp$0=pp_nln_nlf;
else
if(605782321 <= _Y_)
var nl$1=_X_[2],nl$0=nl$1,pp$0=pp_nln_ascii;
else
var nl$2=_X_[2],nl$0=nl$2,pp$0=pp_nln_readline}
else
var nl$3=caml_call1(Stdlib_Uchar[9],10),nl$0=nl$3,pp$0=pp;
if(encoding)
var e=encoding[1],k$0=decode_fun(e),encoding$0=e;
else
var k$0=k,encoding$0=684370880;
if(typeof src === "number")
var i_max=0,i_pos=1,i=Stdlib_Bytes[3];
else
if(438511779 <= src[1])
var i_max=0,i_pos=1,i=caml_create_bytes(65536);
else
var
s=src[2],
i_max$0=caml_ml_string_length(s) - 1 | 0,
i$0=caml_call1(Stdlib_Bytes[49],s),
i_max=i_max$0,
i_pos=0,
i=i$0;
var utf16=143365725 === encoding$0?1:0;
return [0,
src,
encoding$0,
nln,
nl$0,
i,
i_pos,
i_max,
caml_create_bytes(4),
0,
0,
0,
0,
1,
0,
0,
0,
function(d,v)
{if(852405675 <= v[1])
{var u=v[2],match=caml_call1(Stdlib_Uchar[10],u);
if(65279 === match)
{if(utf16){d[2] = -211558048;d[18] = decode_utf_16be}
d[11] = 1;
d[17] = pp$0;
return caml_call1(d[18],d)}
if(65534 === match && utf16)
{d[2] = -211555818;
d[18] = decode_utf_16;
d[11] = 1;
d[17] = pp$0;
return caml_call1(d[18],d)}
d[11] = 0;
d[17] = pp$0;
return caml_call2(d[17],d,v)}
d[11] = 0;
d[17] = pp$0;
return caml_call2(d[17],d,v)},
k$0]}
function decode(d){return caml_call1(d[18],d)}
function decoder_line(d){return d[13]}
function decoder_col(d){return d[14]}
function decoder_byte_count(d){return d[15]}
function decoder_count(d){return d[16]}
function decoder_removed_bom(d){return d[11]}
function decoder_src(d){return d[1]}
function decoder_nln(d){return d[3]}
function decoder_encoding(d){return d[2]}
function set_decoder_encoding(d,e)
{d[2] = e;d[18] = decode_fun(e);return 0}
function o_rem(e){return (e[5] - e[4] | 0) + 1 | 0}
function dst(e,s,j,l)
{var _U_=j < 0?1:0;
if(_U_)
var _V_=_U_;
else
var
_W_=l < 0?1:0,
_V_=_W_ || (caml_ml_bytes_length(s) < (j + l | 0)?1:0);
if(_V_)invalid_bounds(j,l);
e[3] = s;
e[4] = j;
e[5] = (j + l | 0) - 1 | 0;
return 0}
function flush(k,e)
{var _T_=e[1];
if(typeof _T_ === "number")
{e[9]
=
function(e,param)
{if(typeof param === "number" && 1006505782 <= param)
return caml_call1(k,e);
return caml_call1(Stdlib[1],cst_expected_Await_encode)};
return 939392865}
if(438511779 <= _T_[1])
{var oc=_T_[2];
caml_call4(Stdlib[68],oc,e[3],0,e[4]);
e[4] = 0;
return caml_call1(k,e)}
var b=_T_[2],o=caml_call1(Stdlib_Bytes[48],e[3]);
caml_call4(Stdlib_Buffer[18],b,o,0,e[4]);
e[4] = 0;
return caml_call1(k,e)}
function t_range(e,max){e[7] = 0;e[8] = max;return 0}
function t_flush(k,e)
{function blit(e,l)
{caml_blit_bytes(e[6],e[7],e[3],e[4],l);
e[4] = e[4] + l | 0;
e[7] = e[7] + l | 0;
return 0}
var rem=o_rem(e),len=(e[8] - e[7] | 0) + 1 | 0;
return rem < len
?(blit(e,rem),flush(function(_S_){return t_flush(k,_S_)},e))
:(blit(e,len),caml_call1(k,e))}
function encode_utf_8(e,v)
{function k(e){e[9] = encode_utf_8;return 17724}
if(typeof v === "number")return 1006505782 <= v?k(e):flush(k,e);
var u=v[2],u$0=caml_call1(Stdlib_Uchar[10],u),rem=o_rem(e);
if(127 < u$0)
{if(2047 < u$0)
{if(65535 < u$0)
{if(4 <= rem)
{var j=e[4];e[4] = e[4] + 4 | 0;var k$0=k,j$0=j,s=e[3]}
else
{t_range(e,3);
var
_M_=function(_R_){return t_flush(k,_R_)},
k$0=_M_,
j$0=0,
s=e[6]}
unsafe_set_byte(s,j$0,240 | u$0 >>> 18 | 0);
unsafe_set_byte(s,j$0 + 1 | 0,128 | (u$0 >>> 12 | 0) & 63);
unsafe_set_byte(s,j$0 + 2 | 0,128 | (u$0 >>> 6 | 0) & 63);
unsafe_set_byte(s,j$0 + 3 | 0,128 | u$0 & 63);
return k$0(e)}
if(3 <= rem)
{var j$1=e[4];e[4] = e[4] + 3 | 0;var k$1=k,j$2=j$1,s$0=e[3]}
else
{t_range(e,2);
var
_N_=function(_Q_){return t_flush(k,_Q_)},
k$1=_N_,
j$2=0,
s$0=e[6]}
unsafe_set_byte(s$0,j$2,224 | u$0 >>> 12 | 0);
unsafe_set_byte(s$0,j$2 + 1 | 0,128 | (u$0 >>> 6 | 0) & 63);
unsafe_set_byte(s$0,j$2 + 2 | 0,128 | u$0 & 63);
return k$1(e)}
if(2 <= rem)
{var j$3=e[4];e[4] = e[4] + 2 | 0;var k$2=k,j$4=j$3,s$1=e[3]}
else
{t_range(e,1);
var _O_=function(_P_){return t_flush(k,_P_)},k$2=_O_,j$4=0,s$1=e[6]}
unsafe_set_byte(s$1,j$4,192 | u$0 >>> 6 | 0);
unsafe_set_byte(s$1,j$4 + 1 | 0,128 | u$0 & 63);
return k$2(e)}
return 1 <= rem
?(unsafe_set_byte(e[3],e[4],u$0),e[4] = e[4] + 1 | 0,k(e))
:flush(function(e){return encode_utf_8(e,v)},e)}
function encode_utf_16be(e,v)
{function k(e){e[9] = encode_utf_16be;return 17724}
if(typeof v === "number")return 1006505782 <= v?k(e):flush(k,e);
var u=v[2],u$0=caml_call1(Stdlib_Uchar[10],u),rem=o_rem(e);
if(65536 <= u$0)
{if(4 <= rem)
{var j=e[4];e[4] = e[4] + 4 | 0;var k$0=k,j$0=j,s=e[3]}
else
{t_range(e,3);
var _I_=function(_L_){return t_flush(k,_L_)},k$0=_I_,j$0=0,s=e[6]}
var
u$1=u$0 - 65536 | 0,
hi=55296 | u$1 >>> 10 | 0,
lo=56320 | u$1 & 1023;
unsafe_set_byte(s,j$0,hi >>> 8 | 0);
unsafe_set_byte(s,j$0 + 1 | 0,hi & 255);
unsafe_set_byte(s,j$0 + 2 | 0,lo >>> 8 | 0);
unsafe_set_byte(s,j$0 + 3 | 0,lo & 255);
return k$0(e)}
if(2 <= rem)
{var j$1=e[4];e[4] = e[4] + 2 | 0;var k$1=k,j$2=j$1,s$0=e[3]}
else
{t_range(e,1);
var _J_=function(_K_){return t_flush(k,_K_)},k$1=_J_,j$2=0,s$0=e[6]}
unsafe_set_byte(s$0,j$2,u$0 >>> 8 | 0);
unsafe_set_byte(s$0,j$2 + 1 | 0,u$0 & 255);
return k$1(e)}
function encode_utf_16le(e,v)
{function k(e){e[9] = encode_utf_16le;return 17724}
if(typeof v === "number")return 1006505782 <= v?k(e):flush(k,e);
var u=v[2],u$0=caml_call1(Stdlib_Uchar[10],u),rem=o_rem(e);
if(65536 <= u$0)
{if(4 <= rem)
{var j=e[4];e[4] = e[4] + 4 | 0;var k$0=k,j$0=j,s=e[3]}
else
{t_range(e,3);
var _E_=function(_H_){return t_flush(k,_H_)},k$0=_E_,j$0=0,s=e[6]}
var
u$1=u$0 - 65536 | 0,
hi=55296 | u$1 >>> 10 | 0,
lo=56320 | u$1 & 1023;
unsafe_set_byte(s,j$0,hi & 255);
unsafe_set_byte(s,j$0 + 1 | 0,hi >>> 8 | 0);
unsafe_set_byte(s,j$0 + 2 | 0,lo & 255);
unsafe_set_byte(s,j$0 + 3 | 0,lo >>> 8 | 0);
return k$0(e)}
if(2 <= rem)
{var j$1=e[4];e[4] = e[4] + 2 | 0;var k$1=k,j$2=j$1,s$0=e[3]}
else
{t_range(e,1);
var _F_=function(_G_){return t_flush(k,_G_)},k$1=_F_,j$2=0,s$0=e[6]}
unsafe_set_byte(s$0,j$2,u$0 & 255);
unsafe_set_byte(s$0,j$2 + 1 | 0,u$0 >>> 8 | 0);
return k$1(e)}
function encoder(encoding,dst)
{if(typeof dst === "number")
var o_max=0,o_pos=1,o=Stdlib_Bytes[3];
else
var o$0=caml_create_bytes(65536),o_max=65535,o_pos=0,o=o$0;
var
_D_=
143365725 <= encoding
?684370880 <= encoding?encode_utf_8:encode_utf_16be
:-211555818 <= encoding?encode_utf_16le:encode_utf_16be;
return [0,dst,encoding,o,o_pos,o_max,caml_create_bytes(4),1,0,_D_]}
function encode(e,v){return caml_call2(e[9],e,v)}
function encoder_encoding(e){return e[2]}
function encoder_dst(e){return e[1]}
var Manual=[0,src,dst,o_rem];
function encoding_guess(s)
{var
s$0=caml_call1(Stdlib_Bytes[49],s),
match=
r_encoding(s$0,0,caml_call2(Stdlib[17],caml_ml_bytes_length(s$0),3)),
_C_=match[1];
if(-211555818 === _C_)
{var d=match[2];return [0,-211555818,3299808 === d?1:0]}
if(684370880 <= _C_)
{var d$0=match[2];return [0,684370880,3299808 === d$0?1:0]}
var d$1=match[2];
return [0,-211558048,3299808 === d$1?1:0]}
function fold_utf_8(opt,len,f,acc,s)
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
if(len)
var l=len[1],len$0=l;
else
var len$0=caml_ml_string_length(s) - pos | 0;
var
last=(pos + len$0 | 0) - 1 | 0,
s$0=caml_call1(Stdlib_Bytes[49],s),
acc$0=acc,
i=pos;
for(;;)
{if(last < i)return acc$0;
var need=utf_8_len[1 + caml_bytes_unsafe_get(s$0,i)];
if(0 === need)
{var
i$0=i + 1 | 0,
acc$1=caml_call3(f,acc$0,i,malformed(s$0,i,1)),
acc$0=acc$1,
i=i$0;
continue}
var rem=(last - i | 0) + 1 | 0;
if(rem < need)return caml_call3(f,acc$0,i,malformed(s$0,i,rem));
var
i$1=i + need | 0,
acc$2=caml_call3(f,acc$0,i,r_utf_8(s$0,i,need)),
acc$0=acc$2,
i=i$1;
continue}}
function fold_utf_16be(opt,len,f,acc,s)
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
if(len)
var l=len[1],len$0=l;
else
var len$0=caml_ml_string_length(s) - pos | 0;
var
last=(pos + len$0 | 0) - 1 | 0,
s$0=caml_call1(Stdlib_Bytes[49],s),
acc$0=acc,
i=pos;
for(;;)
{if(last < i)return acc$0;
var rem=(last - i | 0) + 1 | 0;
if(2 <= rem)
{var v=r_utf_16(s$0,i,i + 1 | 0);
if(659980059 <= v[1])
{var i$0=i + 2 | 0,acc$1=caml_call3(f,acc$0,i,v),acc$0=acc$1,i=i$0;
continue}
var hi=v[2];
if(4 <= rem)
{var
i$1=i + 4 | 0,
acc$2=
caml_call3(f,acc$0,i,r_utf_16_lo(hi,s$0,i + 2 | 0,i + 3 | 0)),
acc$0=acc$2,
i=i$1;
continue}
return caml_call3(f,acc$0,i,malformed(s$0,i,rem))}
return caml_call3(f,acc$0,i,malformed(s$0,i,1))}}
function fold_utf_16le(opt,len,f,acc,s)
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
if(len)
var l=len[1],len$0=l;
else
var len$0=caml_ml_string_length(s) - pos | 0;
var
last=(pos + len$0 | 0) - 1 | 0,
s$0=caml_call1(Stdlib_Bytes[49],s),
acc$0=acc,
i=pos;
for(;;)
{if(last < i)return acc$0;
var rem=(last - i | 0) + 1 | 0;
if(2 <= rem)
{var v=r_utf_16(s$0,i + 1 | 0,i);
if(659980059 <= v[1])
{var i$0=i + 2 | 0,acc$1=caml_call3(f,acc$0,i,v),acc$0=acc$1,i=i$0;
continue}
var hi=v[2];
if(4 <= rem)
{var
i$1=i + 4 | 0,
acc$2=
caml_call3(f,acc$0,i,r_utf_16_lo(hi,s$0,i + 3 | 0,i + 2 | 0)),
acc$0=acc$2,
i=i$1;
continue}
return caml_call3(f,acc$0,i,malformed(s$0,i,rem))}
return caml_call3(f,acc$0,i,malformed(s$0,i,1))}}
var String=[0,encoding_guess,fold_utf_8,fold_utf_16be,fold_utf_16le];
function add_utf_8(b,u)
{var u$0=caml_call1(Stdlib_Uchar[10],u);
function w(byte$0){return caml_call2(Stdlib_Buffer[12],b,byte$0)}
return 127 < u$0
?2047 < u$0
?65535 < u$0
?(w(240 | u$0 >>> 18 | 0),
w(128 | (u$0 >>> 12 | 0) & 63),
w(128 | (u$0 >>> 6 | 0) & 63),
w(128 | u$0 & 63))
:(w(224 | u$0 >>> 12 | 0),
w(128 | (u$0 >>> 6 | 0) & 63),
w(128 | u$0 & 63))
:(w(192 | u$0 >>> 6 | 0),w(128 | u$0 & 63))
:w(u$0)}
function add_utf_16be(b,u)
{var u$0=caml_call1(Stdlib_Uchar[10],u);
function w(byte$0){return caml_call2(Stdlib_Buffer[12],b,byte$0)}
if(65536 <= u$0)
{var
u$1=u$0 - 65536 | 0,
hi=55296 | u$1 >>> 10 | 0,
lo=56320 | u$1 & 1023;
w(hi >>> 8 | 0);
w(hi & 255);
w(lo >>> 8 | 0);
return w(lo & 255)}
w(u$0 >>> 8 | 0);
return w(u$0 & 255)}
function add_utf_16le(b,u)
{var u$0=caml_call1(Stdlib_Uchar[10],u);
function w(byte$0){return caml_call2(Stdlib_Buffer[12],b,byte$0)}
if(65536 <= u$0)
{var
u$1=u$0 - 65536 | 0,
hi=55296 | u$1 >>> 10 | 0,
lo=56320 | u$1 & 1023;
w(hi & 255);
w(hi >>> 8 | 0);
w(lo & 255);
return w(lo >>> 8 | 0)}
w(u$0 & 255);
return w(u$0 >>> 8 | 0)}
var
Buffer=[0,add_utf_8,add_utf_16be,add_utf_16le],
Uutf=
[0,
u_bom,
u_rep,
encoding_of_string,
encoding_to_string,
decoder,
decode,
decoder_encoding,
set_decoder_encoding,
decoder_line,
decoder_col,
decoder_byte_count,
decoder_count,
decoder_removed_bom,
decoder_src,
decoder_nln,
pp_decode,
encoder,
encode,
encoder_encoding,
encoder_dst,
Manual,
String,
Buffer];
runtime.caml_register_global(66,Uutf,"Uutf");
return}
(globalThis));
//# 1 "../.js/re/re.cma.js"
(function(globalThis)
{"use strict";
var
runtime=globalThis.jsoo_runtime,
caml_bytes_get=runtime.caml_bytes_get,
caml_bytes_set=runtime.caml_bytes_set,
caml_bytes_unsafe_set=runtime.caml_bytes_unsafe_set,
caml_check_bound=runtime.caml_check_bound,
caml_compare=runtime.caml_compare,
caml_create_bytes=runtime.caml_create_bytes,
caml_equal=runtime.caml_equal,
caml_fresh_oo_id=runtime.caml_fresh_oo_id,
caml_int_compare=runtime.caml_int_compare,
caml_lessthan=runtime.caml_lessthan,
caml_list_of_js_array=runtime.caml_list_of_js_array,
caml_make_vect=runtime.caml_make_vect,
caml_ml_string_length=runtime.caml_ml_string_length,
caml_obj_tag=runtime.caml_obj_tag,
caml_register_global=runtime.caml_register_global,
caml_string_get=runtime.caml_string_get,
caml_string_notequal=runtime.caml_string_notequal,
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
caml_trampoline=runtime.caml_trampoline,
caml_trampoline_return=runtime.caml_trampoline_return,
caml_wrap_exception=runtime.caml_wrap_exception;
function caml_call1(f,a0)
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
function caml_call2(f,a0,a1)
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
function caml_call3(f,a0,a1,a2)
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
function caml_call4(f,a0,a1,a2,a3)
{return f.length == 4
?f(a0,a1,a2,a3)
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
function caml_call5(f,a0,a1,a2,a3,a4)
{return f.length == 5
?f(a0,a1,a2,a3,a4)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
function caml_call7(f,a0,a1,a2,a3,a4,a5,a6)
{return f.length == 7
?f(a0,a1,a2,a3,a4,a5,a6)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6])}
var
global_data=runtime.caml_get_global_data(),
cst_Re_cset_pick=caml_string_of_jsbytes("Re_cset.pick"),
cany=[0,[0,0,255],0],
cst_eps=caml_string_of_jsbytes("eps"),
cst_cst=caml_string_of_jsbytes("cst"),
cst_alt=caml_string_of_jsbytes("alt"),
cst_seq=caml_string_of_jsbytes("seq"),
cst_rep=caml_string_of_jsbytes("rep"),
cst_mark=caml_string_of_jsbytes("mark"),
cst_erase=caml_string_of_jsbytes("erase"),
cst_before=caml_string_of_jsbytes("before"),
cst_after=caml_string_of_jsbytes("after"),
cst_pmark=caml_string_of_jsbytes("pmark"),
partial=[17,0,0],
partial$0=[12,41,[17,0,0]],
cst_Non_greedy=caml_string_of_jsbytes("Non_greedy"),
cst_Greedy=caml_string_of_jsbytes("Greedy"),
cst_first=caml_string_of_jsbytes("first"),
cst_short=caml_string_of_jsbytes("short"),
cst_long=caml_string_of_jsbytes("long"),
eps_expr=[0,0,0],
cst_Group=caml_string_of_jsbytes("Group"),
dummy_offset=[0,-1,-1],
dummy_string=caml_string_of_jsbytes(""),
cst_Beg_of_line=caml_string_of_jsbytes("Beg_of_line"),
cst_End_of_line=caml_string_of_jsbytes("End_of_line"),
cst_Beg_of_word=caml_string_of_jsbytes("Beg_of_word"),
cst_End_of_word=caml_string_of_jsbytes("End_of_word"),
cst_Not_bound=caml_string_of_jsbytes("Not_bound"),
cst_Beg_of_str=caml_string_of_jsbytes("Beg_of_str"),
cst_End_of_str=caml_string_of_jsbytes("End_of_str"),
cst_Last_end_of_line=caml_string_of_jsbytes("Last_end_of_line"),
cst_Start=caml_string_of_jsbytes("Start"),
cst_Stop=caml_string_of_jsbytes("Stop"),
cst_Set=caml_string_of_jsbytes("Set"),
cst_Sequence=caml_string_of_jsbytes("Sequence"),
cst_Alternative=caml_string_of_jsbytes("Alternative"),
cst_Repeat=caml_string_of_jsbytes("Repeat"),
cst_Sem=caml_string_of_jsbytes("Sem"),
cst_Sem_greedy=caml_string_of_jsbytes("Sem_greedy"),
cst_Group$0=caml_string_of_jsbytes("Group"),
cst_No_group=caml_string_of_jsbytes("No_group"),
cst_Nest=caml_string_of_jsbytes("Nest"),
cst_Case=caml_string_of_jsbytes("Case"),
cst_No_case=caml_string_of_jsbytes("No_case"),
cst_Intersection=caml_string_of_jsbytes("Intersection"),
cst_Complement=caml_string_of_jsbytes("Complement"),
cst_Difference=caml_string_of_jsbytes("Difference"),
cst_Pmark=caml_string_of_jsbytes("Pmark"),
cst$1=caml_string_of_jsbytes(""),
cst$2=caml_string_of_jsbytes(""),
cst_Re_replace=caml_string_of_jsbytes("Re.replace"),
cst_Re_replace$0=caml_string_of_jsbytes("Re.replace"),
cst_Re_split=caml_string_of_jsbytes("Re.split"),
cst_Re_split$0=caml_string_of_jsbytes("Re.split"),
cst_Re_all=caml_string_of_jsbytes("Re.all"),
cst_Re_all$0=caml_string_of_jsbytes("Re.all"),
cst_Re_exec_partial=caml_string_of_jsbytes("Re.exec_partial"),
cst_Re_execp=caml_string_of_jsbytes("Re.execp"),
cst_Re_exec_opt=caml_string_of_jsbytes("Re.exec_opt"),
cst_Re_exec=caml_string_of_jsbytes("Re.exec"),
cst_Re_diff=caml_string_of_jsbytes("Re.diff"),
cst_Re_compl=caml_string_of_jsbytes("Re.compl"),
cst_Re_inter=caml_string_of_jsbytes("Re.inter"),
cst_Re_repn=caml_string_of_jsbytes("Re.repn"),
cst_Re_repn$0=caml_string_of_jsbytes("Re.repn"),
cst$0=caml_string_of_jsbytes("\t "),
cst_Re_Emacs_Parse_error=caml_string_of_jsbytes("Re__Emacs.Parse_error"),
cst_Re_Emacs_Not_supported=
caml_string_of_jsbytes("Re__Emacs.Not_supported"),
cst_Str_replace_illegal_backsl=
caml_string_of_jsbytes("Str.replace: illegal backslash sequence"),
cst$5=caml_string_of_jsbytes(""),
cst$4=caml_string_of_jsbytes(""),
cst$3=caml_string_of_jsbytes(""),
cst_Str_group_end=caml_string_of_jsbytes("Str.group_end"),
cst_Str_group_beginning=caml_string_of_jsbytes("Str.group_beginning"),
beg=[0,caml_string_of_jsbytes(""),0],
cst$6=caml_string_of_jsbytes("/**"),
cst_Re_Glob_Parse_error=caml_string_of_jsbytes("Re__Glob.Parse_error"),
cst$7=caml_string_of_jsbytes(":]"),
cst_lower=caml_string_of_jsbytes("lower"),
cst_alnum=caml_string_of_jsbytes("alnum"),
cst_alpha=caml_string_of_jsbytes("alpha"),
cst_ascii=caml_string_of_jsbytes("ascii"),
cst_blank=caml_string_of_jsbytes("blank"),
cst_cntrl=caml_string_of_jsbytes("cntrl"),
cst_digit=caml_string_of_jsbytes("digit"),
cst_graph=caml_string_of_jsbytes("graph"),
cst_print=caml_string_of_jsbytes("print"),
cst_punct=caml_string_of_jsbytes("punct"),
cst_space=caml_string_of_jsbytes("space"),
cst_upper=caml_string_of_jsbytes("upper"),
cst_word=caml_string_of_jsbytes("word"),
cst_xdigit=caml_string_of_jsbytes("xdigit"),
cst_Invalid_pcre_class=caml_string_of_jsbytes("Invalid pcre class: "),
cst_Re_Perl_Parse_error=caml_string_of_jsbytes("Re__Perl.Parse_error"),
cst_Re_Perl_Not_supported=
caml_string_of_jsbytes("Re__Perl.Not_supported"),
posix_class_strings=
caml_list_of_js_array
([caml_string_of_jsbytes("alpha"),
caml_string_of_jsbytes("alnum"),
caml_string_of_jsbytes("ascii"),
caml_string_of_jsbytes("blank"),
caml_string_of_jsbytes("cntrl"),
caml_string_of_jsbytes("digit"),
caml_string_of_jsbytes("lower"),
caml_string_of_jsbytes("print"),
caml_string_of_jsbytes("space"),
caml_string_of_jsbytes("upper"),
caml_string_of_jsbytes("word"),
caml_string_of_jsbytes("punct"),
caml_string_of_jsbytes("graph"),
caml_string_of_jsbytes("xdigit")]),
cst_Re_Posix_Parse_error=caml_string_of_jsbytes("Re__Posix.Parse_error"),
cst_Re_Posix_Not_supported=
caml_string_of_jsbytes("Re__Posix.Not_supported"),
include=global_data.Stdlib__Format,
Stdlib_Buffer=global_data.Stdlib__Buffer,
Stdlib=global_data.Stdlib,
Assert_failure=global_data.Assert_failure,
Stdlib_List=global_data.Stdlib__List,
Stdlib_Map=global_data.Stdlib__Map,
Stdlib_Set=global_data.Stdlib__Set,
Stdlib_Array=global_data.Stdlib__Array,
Stdlib_Hashtbl=global_data.Stdlib__Hashtbl,
Stdlib_Char=global_data.Stdlib__Char,
Stdlib_Bytes=global_data.Stdlib__Bytes,
Stdlib_String=global_data.Stdlib__String,
Stdlib_Seq=global_data.Stdlib__Seq,
CamlinternalLazy=global_data.CamlinternalLazy,
Re=[0];
caml_register_global(138,Re,"Re__");
var
_bN_=
[0,
[12,59,[17,[0,caml_string_of_jsbytes("@ "),1,0],0]],
caml_string_of_jsbytes(";@ ")],
_bO_=
[0,
[18,
[1,
[0,
[11,caml_string_of_jsbytes("<3>"),0],
caml_string_of_jsbytes("<3>")]],
[12,
91,
[17,
[0,caml_string_of_jsbytes("@ "),1,0],
[15,[17,[0,caml_string_of_jsbytes("@ "),1,0],[12,93,[17,0,0]]]]]]],
caml_string_of_jsbytes("@[<3>[@ %a@ ]@]")],
_bM_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
_bL_=
[0,
[17,[0,caml_string_of_jsbytes("@ "),1,0],[4,0,0,0,0]],
caml_string_of_jsbytes("@ %d")],
_bK_=
[0,
[18,
[1,
[0,
[11,caml_string_of_jsbytes("<3>"),0],
caml_string_of_jsbytes("<3>")]],
[12,
40,
[2,0,[17,[0,caml_string_of_jsbytes("@ "),1,0],[15,[12,41,[17,0,0]]]]]]],
caml_string_of_jsbytes("@[<3>(%s@ %a)@]")],
_bR_=[0,caml_string_of_jsbytes("lib/cset.ml"),153,9],
_bP_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")],
_bQ_=[0,[4,0,0,0,[12,45,[4,0,0,0,0]]],caml_string_of_jsbytes("%d-%d")],
_b5_=[0,caml_string_of_jsbytes("lib/automata.ml"),360,21],
_bW_=
[0,
[18,
[1,
[0,
[11,caml_string_of_jsbytes("<2>"),0],
caml_string_of_jsbytes("<2>")]],
[11,
caml_string_of_jsbytes("(Seq"),
[17,[0,caml_string_of_jsbytes("@ "),1,0],0]]],
caml_string_of_jsbytes("@[<2>(Seq@ ")],
_bX_=
[0,
[17,[0,caml_string_of_jsbytes("@ "),1,0],[15,[12,41,[17,0,0]]]],
caml_string_of_jsbytes("@ %a)@]")],
_bY_=
[0,
[18,
[1,
[0,
[11,caml_string_of_jsbytes("<2>"),0],
caml_string_of_jsbytes("<2>")]],
[11,
caml_string_of_jsbytes("(Exp"),
[17,
[0,caml_string_of_jsbytes("@ "),1,0],
[4,
0,
0,
0,
[17,
[0,caml_string_of_jsbytes("@ "),1,0],
[12,
40,
[15,
[12,
41,
[17,
[0,caml_string_of_jsbytes("@ "),1,0],
[11,caml_string_of_jsbytes("(eps))"),partial]]]]]]]]]],
caml_string_of_jsbytes("@[<2>(Exp@ %d@ (%a)@ (eps))@]")],
_bZ_=
[0,
[18,
[1,
[0,
[11,caml_string_of_jsbytes("<2>"),0],
caml_string_of_jsbytes("<2>")]],
[11,
caml_string_of_jsbytes("(Exp"),
[17,
[0,caml_string_of_jsbytes("@ "),1,0],
[4,
0,
0,
0,
[17,
[0,caml_string_of_jsbytes("@ "),1,0],
[12,
40,
[15,
[12,41,[17,[0,caml_string_of_jsbytes("@ "),1,0],[15,partial$0]]]]]]]]]],
caml_string_of_jsbytes("@[<2>(Exp@ %d@ (%a)@ %a)@]")],
_b0_=
[0,
[18,
[1,
[0,
[11,caml_string_of_jsbytes("<2>"),0],
caml_string_of_jsbytes("<2>")]],
[11,
caml_string_of_jsbytes("(Match"),
[17,[0,caml_string_of_jsbytes("@ "),1,0],[15,[12,41,[17,0,0]]]]]],
caml_string_of_jsbytes("@[<2>(Match@ %a)@]")],
_b1_=
[0,
[17,
[0,caml_string_of_jsbytes("@ "),1,0],
[11,caml_string_of_jsbytes("| "),0]],
caml_string_of_jsbytes("@ | ")],
_b2_=[0,[11,caml_string_of_jsbytes("()"),0],caml_string_of_jsbytes("()")],
_b3_=[0,0,0],
_bV_=[1,0],
_bU_=
[0,
[12,32,[4,0,0,0,[12,45,[4,0,0,0,0]]]],
caml_string_of_jsbytes(" %d-%d")],
_bT_=[0,[4,0,0,0,[12,45,[4,0,0,0,0]]],caml_string_of_jsbytes("%d-%d")],
_b8_=
[0,
[18,
[1,[0,0,caml_string_of_jsbytes("")]],
[12,
40,
[2,
0,
[11,
caml_string_of_jsbytes(" ("),
[4,
0,
0,
0,
[12,32,[4,0,0,0,[11,caml_string_of_jsbytes("))"),[17,0,0]]]]]]]]],
caml_string_of_jsbytes("@[(%s (%d %d))@]")],
_b__=
[0,
[15,[17,[0,caml_string_of_jsbytes("@ "),1,0],[4,0,0,0,[15,0]]]],
caml_string_of_jsbytes("%a@ %d%a")],
_ce_=[0,caml_string_of_jsbytes("lib/core.ml"),690,4],
_cB_=[0,caml_string_of_jsbytes("lib/core.ml"),1149,24],
_cC_=[0,caml_string_of_jsbytes("lib/core.ml"),1160,27],
_cg_=[0,1],
_cf_=[0,caml_string_of_jsbytes("lib/core.ml"),723,13],
_cd_=[0,caml_string_of_jsbytes("lib/core.ml"),493,35],
_b9_=[0,0,0,0,0,0,0,0,0,0,0],
_cc_=[0,170,[0,181,[0,186,[0,223,[0,255,0]]]]],
_cJ_=[0,1],
_cI_=[0,1],
_cG_=[0,47,[0,92,0]],
_cH_=[0,47,0],
_cE_=[0,caml_string_of_jsbytes(""),0],
_cF_=[0,caml_string_of_jsbytes(""),0],
_cD_=[0,45],
_cK_=[0,748194550,8],
_cL_=[0,748194550,10],
_cM_=[0,748194550,13],
_cN_=[0,748194550,9],
_cO_=[0,-1,-1];
function equal(x,y){return x === y?1:0}
var compare=caml_int_compare;
function to_int(x){return x}
var pp=include[19];
function intersect(x,y){return 0 !== (x & y)?1:0}
function symbol(x,y){return x | y}
var
dummy=-1,
inexistant=1,
letter=2,
not_letter=4,
newline=8,
lastnewline=16,
search_boundary=32;
function from_char(param)
{var switch$0=0;
if(170 <= param)
if(187 <= param)
{var _jf_=param - 192 | 0;
if(54 < _jf_ >>> 0)
{if(56 <= _jf_)switch$0 = 1}
else
if(23 !== _jf_)switch$0 = 1}
else
{var _jg_=param - 171 | 0;
if(14 < _jg_ >>> 0 || 10 === _jg_)switch$0 = 1}
else
if(65 <= param)
{var _jh_=param - 91 | 0;
if(5 < _jh_ >>> 0)
{if(! (32 <= _jh_))switch$0 = 1}
else
if(4 === _jh_)switch$0 = 1}
else
if(48 <= param)
{if(! (58 <= param))switch$0 = 1}
else
if(10 === param)return 12;
return switch$0?letter:not_letter}
var
Re_Category=
[0,
symbol,
from_char,
dummy,
inexistant,
letter,
not_letter,
newline,
lastnewline,
search_boundary,
to_int,
equal,
compare,
intersect,
pp];
caml_register_global(140,Re_Category,"Re__Category");
var
_m_=include[13],
_s_=include[19],
_A_=include[27],
_be_=include[123],
_bk_=include[129],
_a_=include[1],
_b_=include[2],
_c_=include[3],
_d_=include[4],
_e_=include[5],
_f_=include[6],
_g_=include[7],
_h_=include[8],
_i_=include[9],
_j_=include[10],
_k_=include[11],
_l_=include[12],
_n_=include[14],
_o_=include[15],
_p_=include[16],
_q_=include[17],
_r_=include[18],
_t_=include[20],
_u_=include[21],
_v_=include[22],
_w_=include[23],
_x_=include[24],
_y_=include[25],
_z_=include[26],
_B_=include[28],
_C_=include[29],
_D_=include[30],
_E_=include[31],
_F_=include[32],
_G_=include[33],
_H_=include[34],
_I_=include[35],
_J_=include[36],
_K_=include[37],
_L_=include[38],
_M_=include[39],
_N_=include[40],
_O_=include[41],
_P_=include[42],
_Q_=include[43],
_R_=include[44],
_S_=include[45],
_T_=include[46],
_U_=include[47],
_V_=include[48],
_W_=include[49],
_X_=include[50],
_Y_=include[51],
_Z_=include[52],
___=include[53],
_$_=include[54],
_aa_=include[55],
_ab_=include[56],
_ac_=include[57],
_ad_=include[58],
_ae_=include[59],
_af_=include[60],
_ag_=include[61],
_ah_=include[62],
_ai_=include[63],
_aj_=include[64],
_ak_=include[65],
_al_=include[66],
_am_=include[67],
_an_=include[68],
_ao_=include[69],
_ap_=include[70],
_aq_=include[71],
_ar_=include[72],
_as_=include[73],
_at_=include[74],
_au_=include[75],
_av_=include[76],
_aw_=include[77],
_ax_=include[78],
_ay_=include[79],
_az_=include[80],
_aA_=include[81],
_aB_=include[82],
_aC_=include[83],
_aD_=include[84],
_aE_=include[85],
_aF_=include[86],
_aG_=include[87],
_aH_=include[88],
_aI_=include[89],
_aJ_=include[90],
_aK_=include[91],
_aL_=include[92],
_aM_=include[93],
_aN_=include[94],
_aO_=include[95],
_aP_=include[96],
_aQ_=include[97],
_aR_=include[98],
_aS_=include[99],
_aT_=include[100],
_aU_=include[101],
_aV_=include[102],
_aW_=include[103],
_aX_=include[104],
_aY_=include[105],
_aZ_=include[106],
_a0_=include[107],
_a1_=include[108],
_a2_=include[109],
_a3_=include[110],
_a4_=include[111],
_a5_=include[112],
_a6_=include[113],
_a7_=include[114],
_a8_=include[115],
_a9_=include[116],
_a__=include[117],
_a$_=include[118],
_ba_=include[119],
_bb_=include[120],
_bc_=include[121],
_bd_=include[122],
_bf_=include[124],
_bg_=include[125],
_bh_=include[126],
_bi_=include[127],
_bj_=include[128],
_bl_=include[130],
_bm_=include[131],
_bn_=include[132],
_bo_=include[133],
_bp_=include[134],
_bq_=include[135],
_br_=include[136],
_bs_=include[137],
_bt_=include[138],
_bu_=include[139],
_bv_=include[140],
_bw_=include[141],
_bx_=include[142],
_by_=include[143],
_bz_=include[144],
_bA_=include[145],
_bB_=include[146],
_bC_=include[147],
_bD_=include[148],
_bE_=include[149],
_bF_=include[150],
_bG_=include[151],
_bH_=include[152],
_bI_=include[153],
_bJ_=include[154];
function sexp(fmt,s,pp,x){return caml_call5(_bk_,fmt,_bK_,s,pp,x)}
function pair(pp1,pp2,fmt,param)
{var v2=param[2],v1=param[1];
caml_call2(pp1,fmt,v1);
caml_call2(_A_,fmt,0);
return caml_call2(pp2,fmt,v2)}
function triple(pp1,pp2,pp3,fmt,param)
{var v3=param[3],v2=param[2],v1=param[1];
caml_call2(pp1,fmt,v1);
caml_call2(_A_,fmt,0);
caml_call2(pp2,fmt,v2);
caml_call2(_A_,fmt,0);
return caml_call2(pp3,fmt,v3)}
function optint(fmt,param)
{if(param){var i=param[1];return caml_call3(_bk_,fmt,_bL_,i)}return 0}
function quote(fmt,s){return caml_call3(include[129],fmt,_bM_,s)}
function pp_olist(pp_elem,fmt)
{var
_je_=
caml_call2
(_be_,
[0,function(fmt,param){return caml_call2(_bk_,fmt,_bN_)}],
pp_elem);
return caml_call3(include[129],fmt,_bO_,_je_)}
function pp_str_list(_jd_){return pp_olist(quote,_jd_)}
function to_to_string(pp,x)
{var b=caml_call1(Stdlib_Buffer[1],16),fmt=caml_call1(include[111],b);
caml_call2(pp,fmt,x);
return caml_call1(Stdlib_Buffer[2],b)}
var
Re_Fmt=
[0,
_a_,
_b_,
_c_,
_d_,
_e_,
_f_,
_g_,
_h_,
_i_,
_j_,
_k_,
_l_,
_m_,
_n_,
_o_,
_p_,
_q_,
_r_,
_s_,
_t_,
_u_,
_v_,
_w_,
_x_,
_y_,
_z_,
_A_,
_B_,
_C_,
_D_,
_E_,
_F_,
_G_,
_H_,
_I_,
_J_,
_K_,
_L_,
_M_,
_N_,
_O_,
_P_,
_Q_,
_R_,
_S_,
_T_,
_U_,
_V_,
_W_,
_X_,
_Y_,
_Z_,
___,
_$_,
_aa_,
_ab_,
_ac_,
_ad_,
_ae_,
_af_,
_ag_,
_ah_,
_ai_,
_aj_,
_ak_,
_al_,
_am_,
_an_,
_ao_,
_ap_,
_aq_,
_ar_,
_as_,
_at_,
_au_,
_av_,
_aw_,
_ax_,
_ay_,
_az_,
_aA_,
_aB_,
_aC_,
_aD_,
_aE_,
_aF_,
_aG_,
_aH_,
_aI_,
_aJ_,
_aK_,
_aL_,
_aM_,
_aN_,
_aO_,
_aP_,
_aQ_,
_aR_,
_aS_,
_aT_,
_aU_,
_aV_,
_aW_,
_aX_,
_aY_,
_aZ_,
_a0_,
_a1_,
_a2_,
_a3_,
_a4_,
_a5_,
_a6_,
_a7_,
_a8_,
_a9_,
_a__,
_a$_,
_ba_,
_bb_,
_bc_,
_bd_,
_be_,
_bf_,
_bg_,
_bh_,
_bi_,
_bj_,
_bk_,
_bl_,
_bm_,
_bn_,
_bo_,
_bp_,
_bq_,
_br_,
_bs_,
_bt_,
_bu_,
_bv_,
_bw_,
_bx_,
_by_,
_bz_,
_bA_,
_bB_,
_bC_,
_bD_,
_bE_,
_bF_,
_bG_,
_bH_,
_bI_,
_bJ_,
_be_,
_m_,
sexp,
pair,
triple,
_s_,
optint,
quote,
pp_olist,
pp_str_list,
to_to_string];
caml_register_global(142,Re_Fmt,"Re__Fmt");
function union(l$0,l)
{var l$2=l$0,l$1=l;
for(;;)
{if(l$1)
{if(l$2)
{var
r=l$1[2],
_jc_=l$1[1],
c2=_jc_[2],
c1=_jc_[1],
r$0=l$2[2],
match=l$2[1],
c2$0=match[2],
c1$0=match[1];
if((c2$0 + 1 | 0) < c1)return [0,[0,c1$0,c2$0],union(r$0,l$1)];
if((c2 + 1 | 0) < c1$0)return [0,[0,c1,c2],union(l$2,r)];
if(c2$0 < c2)
{var
l$3=[0,[0,caml_call2(Stdlib[16],c1$0,c1),c2],r],
l$2=r$0,
l$1=l$3;
continue}
var
l$4=[0,[0,caml_call2(Stdlib[16],c1$0,c1),c2$0],r$0],
l$2=l$4,
l$1=r;
continue}
return l$1}
return l$2}}
function inter(l$0,l)
{var l$2=l$0,l$1=l;
for(;;)
{if(l$1)
{if(l$2)
{var
r=l$1[2],
_i$_=l$1[1],
c2=_i$_[2],
c1=_i$_[1],
r$0=l$2[2],
match=l$2[1],
c2$0=match[2],
c1$0=match[1];
if(caml_lessthan(c2$0,c1)){var l$2=r$0;continue}
if(caml_lessthan(c2,c1$0)){var l$1=r;continue}
if(caml_lessthan(c2$0,c2))
{var _ja_=inter(r$0,l$1);
return [0,[0,caml_call2(Stdlib[17],c1$0,c1),c2$0],_ja_]}
var _jb_=inter(l$2,r);
return [0,[0,caml_call2(Stdlib[17],c1$0,c1),c2],_jb_]}
return 0}
return 0}}
function diff(l$0,l)
{var l$2=l$0,l$1=l;
for(;;)
{if(l$1)
{if(l$2)
{var
r=l$1[2],
_i__=l$1[1],
c2=_i__[2],
c1=_i__[1],
r$0=l$2[2],
match=l$2[1],
c2$0=match[2],
c1$0=match[1];
if(c2$0 < c1)return [0,[0,c1$0,c2$0],diff(r$0,l$1)];
if(c2 < c1$0){var l$1=r;continue}
var r$1=c2 < c2$0?[0,[0,c2 + 1 | 0,c2$0],r$0]:r$0;
if(c1$0 < c1)return [0,[0,c1$0,c1 - 1 | 0],diff(r$1,r)];
var l$2=r$1,l$1=r;
continue}
return 0}
return l$2}}
function single(c){return [0,[0,c,c],0]}
function add(c,l){return union(single(c),l)}
function seq(c$0,c)
{return runtime.caml_lessequal(c$0,c)?[0,[0,c$0,c],0]:[0,[0,c,c$0],0]}
function offset(o,l)
{if(l)
{var r=l[2],match=l[1],c2=match[2],c1=match[1];
return [0,[0,c1 + o | 0,c2 + o | 0],offset(o,r)]}
return 0}
var empty=0;
function mem(c,s)
{var s$0=s;
for(;;)
{if(s$0)
{var rem=s$0[2],match=s$0[1],c2=match[2],c1=match[1];
if(c <= c2)return c1 <= c?1:0;
var s$0=rem;
continue}
return 0}}
function hash_rec(param)
{if(param)
{var r=param[2],match=param[1],j=match[2],i=match[1];
return (i + (13 * j | 0) | 0) + (257 * hash_rec(r) | 0) | 0}
return 0}
function hash(l){return hash_rec(l) & 1073741823}
function print_one(ch,param)
{var c2=param[2],c1=param[1];
return c1 === c2
?caml_call3(include[129],ch,_bP_,c1)
:caml_call4(include[129],ch,_bQ_,c1,c2)}
var pp$0=caml_call2(_be_,0,print_one);
function iter(t,f)
{var t$0=t;
for(;;)
{if(t$0)
{var xs=t$0[2],match=t$0[1],y=match[2],x=match[1];
caml_call2(f,x,y);
var t$0=xs;
continue}
return 0}}
function one_char(param)
{if(param && ! param[2])
{var match=param[1],j=match[2],i=match[1];
if(caml_equal(i,j))return [0,i]}
return 0}
function compare$0(param,_i9_)
{var v=_i9_[2],j=_i9_[1],u=param[2],i=param[1],c=caml_compare(i,j);
return 0 === c?caml_compare(u,v):c}
var CSetMap=caml_call1(Stdlib_Map[1],[0,compare$0]);
function fold_right(t,init,f){return caml_call3(Stdlib_List[26],f,t,init)}
function csingle(c){return single(c)}
function is_empty(param){return param?0:1}
function prepend(s,x,l)
{var s$0=s;
for(;;)
{if(s$0)
{if(l)
{var _i4_=l[1],_i5_=_i4_[1];
if(_i5_ && ! _i5_[2])
{var
x$0=_i4_[2],
_i6_=_i5_[1],
d=_i6_[2],
d$0=_i6_[1],
r=s$0[2],
match=s$0[1],
c=match[2],
c$0=match[1];
if(c < d$0){var s$0=r;continue}
var r$0=l[2];
if(c$0 <= d$0)
{if(c < d)
{var _i7_=prepend(r,x,[0,[0,[0,[0,c + 1 | 0,d],0],x$0],r$0]);
return [0,
[0,[0,[0,d$0,c],0],caml_call2(Stdlib[37],x,x$0)],
_i7_]}
var _i8_=prepend(s$0,x,r$0);
return [0,
[0,[0,[0,d$0,d],0],caml_call2(Stdlib[37],x,x$0)],
_i8_]}
return d < c$0
?[0,[0,[0,[0,d$0,d],0],x$0],prepend(s$0,x,r$0)]
:[0,
[0,[0,[0,d$0,c$0 - 1 | 0],0],x$0],
prepend(s$0,x,[0,[0,[0,[0,c$0,d],0],x$0],r$0])]}
throw [0,Assert_failure,_bR_]}
return 0}
return l}}
function pick(param)
{if(param){var match=param[1],x=match[1];return x}
return caml_call1(Stdlib[1],cst_Re_cset_pick)}
var
Re_Cset=
[0,
iter,
union,
inter,
diff,
offset,
empty,
single,
seq,
add,
mem,
hash,
pp$0,
one_char,
fold_right,
hash_rec,
CSetMap,
cany,
csingle,
is_empty,
prepend,
pick];
caml_register_global(147,Re_Cset,"Re__Cset");
function equal$0(x,y){return x === y?1:0}
var compare$1=caml_int_compare,r=[0,0];
function gen(param){r[1]++;return r[1]}
var
pp$1=include[19],
Set=caml_call1(Stdlib_Set[1],[0,compare$1]),
Re_Pmark=[0,equal$0,compare$1,gen,pp$1,Set];
caml_register_global(149,Re_Pmark,"Re__Pmark");
function hash_combine(h,accu){return (accu * 65599 | 0) + h | 0}
var empty$0=[0,0,Set[1]];
function merge_marks_offset(old,param)
{if(param)
{var
rem=param[2],
match=param[1],
v=match[2],
i=match[1],
nw=merge_marks_offset(caml_call2(Stdlib_List[53],i,old),rem);
return -2 === v?nw:[0,[0,i,v],nw]}
return old}
function merge(old,nw)
{var _i3_=caml_call2(Set[7],old[2],nw[2]);
return [0,merge_marks_offset(old[1],nw[1]),_i3_]}
function hash$0(m,accu$1)
{var
accu$2=hash_combine(caml_call1(Stdlib_Hashtbl[28],m[2]),accu$1),
l=m[1],
accu=accu$2;
for(;;)
{if(l)
{var
r=l[2],
match=l[1],
i=match[2],
a=match[1],
accu$0=hash_combine(a,hash_combine(i,accu)),
l=r,
accu=accu$0;
continue}
return accu}}
function _bS_(idx,marks)
{if(marks)
{var _i2_=marks[1];
if(-1 === _i2_[2])
{var rem=marks[2],a=_i2_[1];return [0,[0,a,idx],_bS_(idx,rem)]}}
return marks}
function marks_set_idx(marks,idx)
{var _i1_=marks[2];return [0,_bS_(idx,marks[1]),_i1_]}
function pp_marks(ch,t)
{var _iZ_=t[1];
if(_iZ_)
{var r=_iZ_[2],match=_iZ_[1],i=match[2],a=match[1];
caml_call4(include[129],ch,_bT_,a,i);
var
_i0_=
function(param)
{var i=param[2],a=param[1];
return caml_call4(include[129],ch,_bU_,a,i)};
return caml_call2(Stdlib_List[17],_i0_,r)}
return 0}
function pp_sem(ch,k)
{var _iY_=-730718166 === k?cst_long:332064784 <= k?cst_first:cst_short;
return caml_call2(include[13],ch,_iY_)}
function pp_rep_kind(fmt,param)
{return 620821490 <= param
?caml_call2(include[13],fmt,cst_Non_greedy)
:caml_call2(include[13],fmt,cst_Greedy)}
function pp$2(ch,e)
{var _iO_=e[2];
if(typeof _iO_ === "number")
return caml_call2(_m_,ch,cst_eps);
else
switch(_iO_[0])
{case 0:var l=_iO_[1];return sexp(ch,cst_cst,pp$0,l);
case 1:
var l$0=_iO_[1];return sexp(ch,cst_alt,caml_call2(_be_,0,pp$2),l$0);
case 2:
var e$0=_iO_[3],e$1=_iO_[2],k=_iO_[1],_iP_=[0,k,e$1,e$0];
return sexp
(ch,
cst_seq,
function(_iW_,_iX_)
{return triple(pp_sem,pp$2,pp$2,_iW_,_iX_)},
_iP_);
case 3:
var e$2=_iO_[3],k$0=_iO_[2],_iQ_=[0,k$0,e$2];
return sexp
(ch,
cst_rep,
function(_iU_,_iV_){return pair(pp_sem,pp$2,_iU_,_iV_)},
_iQ_);
case 4:var i=_iO_[1];return sexp(ch,cst_mark,_s_,i);
case 5:
var e$3=_iO_[2],b=_iO_[1],_iR_=[0,b,e$3];
return sexp
(ch,
cst_erase,
function(_iS_,_iT_){return pair(_s_,_s_,_iS_,_iT_)},
_iR_);
case 6:var c=_iO_[1];return sexp(ch,cst_before,pp,c);
case 7:var c$0=_iO_[1];return sexp(ch,cst_after,pp,c$0);
default:var i$0=_iO_[1];return sexp(ch,cst_pmark,_s_,i$0)}}
function first(f,param)
{var param$0=param;
for(;;)
{if(param$0)
{var r=param$0[2],x=param$0[1],res=caml_call1(f,x);
if(res)return res;
var param$0=r;
continue}
return 0}}
function create_ids(param){return [0,0]}
function mk_expr(ids,def){ids[1]++;return [0,ids[1],def]}
function empty$1(ids){return mk_expr(ids,_bV_)}
function cst(ids,s){return is_empty(s)?empty$1(ids):mk_expr(ids,[0,s])}
function alt(ids,l)
{if(l){if(l[2])return mk_expr(ids,[1,l]);var c=l[1];return c}
return empty$1(ids)}
function seq$0(ids,kind,x,y)
{var _iM_=x[2],_iN_=y[2];
if(typeof _iM_ !== "number" && 1 === _iM_[0] && ! _iM_[1])return x;
if(typeof _iN_ !== "number" && 1 === _iN_[0] && ! _iN_[1])return y;
if(typeof _iM_ === "number")return y;
if(typeof _iN_ === "number" && 332064784 === kind)return x;
return mk_expr(ids,[2,kind,x,y])}
function is_eps(expr){return typeof expr[2] === "number"?1:0}
function eps(ids){return mk_expr(ids,0)}
function rep(ids,kind,sem,x){return mk_expr(ids,[3,kind,sem,x])}
function mark(ids,m){return mk_expr(ids,[4,m])}
function pmark(ids,i){return mk_expr(ids,[8,i])}
function erase(ids,m$0,m){return mk_expr(ids,[5,m$0,m])}
function before(ids,c){return mk_expr(ids,[6,c])}
function after(ids,c){return mk_expr(ids,[7,c])}
function rename(ids,x)
{var _iI_=x[2];
if(typeof _iI_ !== "number")
switch(_iI_[0])
{case 1:
var l=_iI_[1],_iJ_=function(_iL_){return rename(ids,_iL_)};
return mk_expr(ids,[1,caml_call2(Stdlib_List[19],_iJ_,l)]);
case 2:
var z=_iI_[3],y=_iI_[2],k=_iI_[1],_iK_=rename(ids,z);
return mk_expr(ids,[2,k,rename(ids,y),_iK_]);
case 3:
var y$0=_iI_[3],k$0=_iI_[2],g=_iI_[1];
return mk_expr(ids,[3,g,k$0,rename(ids,y$0)])
}
return mk_expr(ids,x[2])}
function equal$1(l1,l2)
{var l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{var _ip_=l1$0[1];
switch(_ip_[0])
{case 0:
if(l2$0)
{var _iq_=l2$0[1],_ir_=l1$0[2],_is_=_ip_[2],_it_=_ip_[1];
if(0 === _iq_[0])
{var
r2=l2$0[2],
e2=_iq_[2],
l2$1=_iq_[1],
_iu_=_is_[1] === e2[1]?1:0;
if(_iu_)
{var _iv_=equal$1(_it_,l2$1);
if(_iv_){var l1$0=_ir_,l2$0=r2;continue}
var _iw_=_iv_}
else
var _iw_=_iu_;
return _iw_}}
break;
case 1:
if(l2$0)
{var _ix_=l2$0[1],_iy_=l1$0[2],_iz_=_ip_[2],_iA_=_ip_[1];
if(1 === _ix_[0])
{var
r2$0=l2$0[2],
e2$0=_ix_[2],
marks2=_ix_[1],
_iB_=_iz_[1] === e2$0[1]?1:0;
if(_iB_)
{var _iC_=caml_equal(_iA_,marks2);
if(_iC_){var l1$0=_iy_,l2$0=r2$0;continue}
var _iD_=_iC_}
else
var _iD_=_iB_;
return _iD_}}
break;
default:
if(l2$0)
{var _iE_=l2$0[1],_iF_=l1$0[2],_iG_=_ip_[1];
if(2 === _iE_[0])
{var
r2$1=l2$0[2],
marks2$0=_iE_[1],
_iH_=caml_equal(_iG_,marks2$0);
if(_iH_){var l1$0=_iF_,l2$0=r2$1;continue}
return _iH_}}}}
else
if(! l2$0)return 1;
return 0}}
function hash$1(l,accu)
{var l$0=l,accu$0=accu;
for(;;)
{if(l$0)
{var _im_=l$0[1];
switch(_im_[0])
{case 0:
var
r=l$0[2],
e=_im_[2],
l$1=_im_[1],
_in_=hash$1(l$1,accu$0),
accu$1=hash_combine(388635598,hash_combine(e[1],_in_)),
l$0=r,
accu$0=accu$1;
continue;
case 1:
var
r$0=l$0[2],
e$0=_im_[2],
marks=_im_[1],
_io_=hash$0(marks,accu$0),
accu$2=hash_combine(726404471,hash_combine(e$0[1],_io_)),
l$0=r$0,
accu$0=accu$2;
continue;
default:
var
r$1=l$0[2],
marks$0=_im_[1],
accu$3=hash_combine(471882453,hash$0(marks$0,accu$0)),
l$0=r$1,
accu$0=accu$3;
continue}}
return accu$0}}
function tseq(kind,x,y,rem)
{if(x)
{var _il_=x[1];
if(1 === _il_[0] && typeof _il_[2][2] === "number" && ! x[2])
{var marks=_il_[1];return [0,[1,marks,y],rem]}
return [0,[0,x,y,kind],rem]}
return rem}
function print_state_lst(ch,l,y)
{if(l)
{var rem=l[2],e=l[1];
print_state_rec(ch,e,y);
var
_ik_=
function(e)
{caml_call2(include[129],ch,_b1_);return print_state_rec(ch,e,y)};
return caml_call2(Stdlib_List[17],_ik_,rem)}
return caml_call2(include[129],ch,_b2_)}
function print_state_rec(ch,e,y)
{switch(e[0])
{case 0:
var x=e[2],l=e[1];
caml_call2(include[129],ch,_bW_);
print_state_lst(ch,l,x);
return caml_call4(include[129],ch,_bX_,pp$2,x);
case 1:
var _ij_=e[1];
if(typeof e[2][2] === "number")
return caml_call5(include[129],ch,_bY_,y[1],pp_marks,_ij_);
var x$0=e[2];
return caml_call7(include[129],ch,_bZ_,x$0[1],pp_marks,_ij_,pp$2,x$0);
default:
var marks=e[1];return caml_call4(include[129],ch,_b0_,pp_marks,marks)}}
function pp$3(ch,t){return print_state_lst(ch,[0,t,0],_b3_)}
var dummy$0=[0,-1,dummy,0,0,-1];
function mk(idx,cat,desc)
{return [0,
idx,
cat,
desc,
0,
hash$1(desc,hash_combine(idx,hash_combine(cat,0))) & 1073741823]}
function create(cat,e){return mk(0,cat,[0,[1,empty$0,e],0])}
function equal$2(x,y)
{var _if_=x[5] === y[5]?1:0;
if(_if_)
{var _ig_=x[1] === y[1]?1:0;
if(_ig_)
{var _ih_=x[2] === y[2]?1:0;
if(_ih_)return equal$1(x[3],y[3]);
var _ii_=_ih_}
else
var _ii_=_ig_}
else
var _ii_=_if_;
return _ii_}
function hash$2(t){return t[5]}
var Table=caml_call1(Stdlib_Hashtbl[26],[0,equal$2,hash$2]);
function create_working_area(param){return [0,[0,0]]}
function index_count(w){return w[1].length - 1}
function mark_used_indices(tbl)
{function _ia_(param)
{if(0 === param[0])
{var l=param[1];return caml_call1(mark_used_indices(tbl),l)}
var marks=param[1],_ib_=marks[1];
function _ic_(param)
{var
i=param[2],
_id_=0 <= i?1:0,
_ie_=_id_?(caml_check_bound(tbl,i)[1 + i] = 1,0):_id_;
return _ie_}
return caml_call2(Stdlib_List[17],_ic_,_ib_)}
return caml_call1(Stdlib_List[17],_ia_)}
function free_index(tbl_ref,l)
{var tbl=tbl_ref[1];
caml_call4(Stdlib_Array[9],tbl,0,tbl.length - 1,0);
caml_call1(mark_used_indices(tbl),l);
var len=tbl.length - 1,idx=0;
for(;;)
{if(idx !== len && caml_check_bound(tbl,idx)[1 + idx])
{var idx$0=idx + 1 | 0,idx=idx$0;continue}
if(idx === len)tbl_ref[1] = caml_make_vect(2 * len | 0,0);
return idx}}
function _b4_(param){return 2 === param[0]?0:1}
var remove_matches=caml_call1(Stdlib_List[41],_b4_);
function split_at_match(l$1)
{var l=0,param=l$1;
for(;;)
{if(param)
{var _h__=param[1];
if(2 === _h__[0])
{var r=param[2],_h$_=caml_call1(remove_matches,r);
return [0,caml_call1(Stdlib_List[9],l),_h$_]}
var param$0=param[2],l$0=[0,_h__,l],l=l$0,param=param$0;
continue}
throw [0,Assert_failure,_b5_]}}
function remove_duplicates(prev,l,y)
{var l$0=l;
for(;;)
{if(l$0)
{var _h9_=l$0[1];
switch(_h9_[0])
{case 0:
var
r=l$0[2],
kind=_h9_[3],
x=_h9_[2],
l$1=_h9_[1],
match=remove_duplicates(prev,l$1,x),
prev$0=match[2],
l$2=match[1],
match$0=remove_duplicates(prev$0,r,y),
prev$1=match$0[2],
r$0=match$0[1];
return [0,tseq(kind,l$2,x,r$0),prev$1];
case 1:
if(typeof _h9_[2][2] === "number")
{var r$1=l$0[2];
if(caml_call2(Stdlib_List[37],y[1],prev)){var l$0=r$1;continue}
var
match$1=remove_duplicates([0,y[1],prev],r$1,y),
prev$2=match$1[2],
r$2=match$1[1];
return [0,[0,_h9_,r$2],prev$2]}
var r$3=l$0[2],x$0=_h9_[2];
if(caml_call2(Stdlib_List[37],x$0[1],prev)){var l$0=r$3;continue}
var
match$2=remove_duplicates([0,x$0[1],prev],r$3,y),
prev$3=match$2[2],
r$4=match$2[1];
return [0,[0,_h9_,r$4],prev$3];
default:return [0,[0,_h9_,0],prev]}}
return [0,0,prev]}}
function set_idx(idx,param)
{if(param)
{var _h5_=param[1];
switch(_h5_[0])
{case 0:
var
r=param[2],
kind=_h5_[3],
x=_h5_[2],
l=_h5_[1],
_h6_=set_idx(idx,r);
return [0,[0,set_idx(idx,l),x,kind],_h6_];
case 1:
var r$0=param[2],x$0=_h5_[2],marks=_h5_[1],_h7_=set_idx(idx,r$0);
return [0,[1,marks_set_idx(marks,idx),x$0],_h7_];
default:
var r$1=param[2],marks$0=_h5_[1],_h8_=set_idx(idx,r$1);
return [0,[2,marks_set_idx(marks$0,idx)],_h8_]}}
return 0}
function filter_marks(b,e,marks)
{var _h0_=marks[2],_h1_=marks[1];
function _h2_(param)
{var i=param[1],_h3_=i < b?1:0,_h4_=_h3_ || (e < i?1:0);return _h4_}
return [0,caml_call2(Stdlib_List[41],_h2_,_h1_),_h0_]}
function delta_1$0(counter,init,c,next_cat,prev_cat,x,rem)
{var _hX_=x[2];
if(typeof _hX_ === "number")
return [0,[2,init],rem];
else
switch(_hX_[0])
{case 0:var s=_hX_[1];return mem(c,s)?[0,[1,init,eps_expr],rem]:rem;
case 1:
var l=_hX_[1];
if(counter < 50)
{var counter$1=counter + 1 | 0;
return delta_2$0(counter$1,init,c,next_cat,prev_cat,l,rem)}
return caml_trampoline_return
(delta_2$0,[0,init,c,next_cat,prev_cat,l,rem]);
case 2:
var
z=_hX_[3],
y=_hX_[2],
kind=_hX_[1],
y$0=delta_1(init,c,next_cat,prev_cat,y,0);
if(counter < 50)
{var counter$0=counter + 1 | 0;
return delta_seq$0(counter$0,c,next_cat,prev_cat,kind,y$0,z,rem)}
return caml_trampoline_return
(delta_seq$0,[0,c,next_cat,prev_cat,kind,y$0,z,rem]);
case 3:
var
y$1=_hX_[3],
kind$0=_hX_[2],
rep_kind=_hX_[1],
y$2=delta_1(init,c,next_cat,prev_cat,y$1,0),
match=
first
(function(param)
{if(2 === param[0]){var marks=param[1];return [0,marks]}
return 0},
y$2);
if(match)
var
marks=match[1],
marks$0=marks,
y$3=caml_call1(remove_matches,y$2);
else
var marks$0=init,y$3=y$2;
return 620821490 <= rep_kind
?[0,[2,init],tseq(kind$0,y$3,x,rem)]
:tseq(kind$0,y$3,x,[0,[2,marks$0],rem]);
case 4:
var
i=_hX_[1],
_hY_=init[2],
marks$1=[0,[0,[0,i,-1],caml_call2(Stdlib_List[53],i,init[1])],_hY_];
return [0,[2,marks$1],rem];
case 5:
var e=_hX_[2],b=_hX_[1];return [0,[2,filter_marks(b,e,init)],rem];
case 6:
var cat=_hX_[1];return intersect(next_cat,cat)?[0,[2,init],rem]:rem;
case 7:
var cat$0=_hX_[1];
return intersect(prev_cat,cat$0)?[0,[2,init],rem]:rem;
default:
var
i$0=_hX_[1],
_hZ_=caml_call2(Set[4],i$0,init[2]),
marks$2=[0,init[1],_hZ_];
return [0,[2,marks$2],rem]}}
function delta_2$0(counter,marks,c,next_cat,prev_cat,l,rem)
{if(l)
{var r=l[2],y=l[1],_hW_=delta_2(marks,c,next_cat,prev_cat,r,rem);
if(counter < 50)
{var counter$0=counter + 1 | 0;
return delta_1$0(counter$0,marks,c,next_cat,prev_cat,y,_hW_)}
return caml_trampoline_return
(delta_1$0,[0,marks,c,next_cat,prev_cat,y,_hW_])}
return rem}
function delta_seq$0(counter,c,next_cat,prev_cat,kind,y,z,rem)
{var
match=
first
(function(param)
{if(2 === param[0]){var marks=param[1];return [0,marks]}return 0},
y);
if(match)
{var marks=match[1];
if(-730718166 === kind)
{var _hU_=delta_1(marks,c,next_cat,prev_cat,z,rem);
return tseq(kind,caml_call1(remove_matches,y),z,_hU_)}
if(332064784 <= kind)
{var match$0=split_at_match(y),y$0=match$0[2],y$1=match$0[1];
return tseq
(kind,
y$1,
z,
delta_1(marks,c,next_cat,prev_cat,z,tseq(kind,y$0,z,rem)))}
var _hV_=tseq(kind,caml_call1(remove_matches,y),z,rem);
if(counter < 50)
{var counter$0=counter + 1 | 0;
return delta_1$0(counter$0,marks,c,next_cat,prev_cat,z,_hV_)}
return caml_trampoline_return
(delta_1$0,[0,marks,c,next_cat,prev_cat,z,_hV_])}
return tseq(kind,y,z,rem)}
function delta_1(init,c,next_cat,prev_cat,x,rem)
{return caml_trampoline(delta_1$0(0,init,c,next_cat,prev_cat,x,rem))}
function delta_2(marks,c,next_cat,prev_cat,l,rem)
{return caml_trampoline(delta_2$0(0,marks,c,next_cat,prev_cat,l,rem))}
function delta_seq(c,next_cat,prev_cat,kind,y,z,rem)
{return caml_trampoline(delta_seq$0(0,c,next_cat,prev_cat,kind,y,z,rem))}
function delta_4(c,next_cat,prev_cat,l,rem)
{if(l)
{var r=l[2],y$1=l[1],rem$0=delta_4(c,next_cat,prev_cat,r,rem);
switch(y$1[0])
{case 0:
var
kind=y$1[3],
z=y$1[2],
y=y$1[1],
y$0=delta_4(c,next_cat,prev_cat,y,0);
return delta_seq(c,next_cat,prev_cat,kind,y$0,z,rem$0);
case 1:
var e=y$1[2],marks=y$1[1];
return delta_1(marks,c,next_cat,prev_cat,e,rem$0);
default:return [0,y$1,rem$0]}}
return rem}
function delta(tbl_ref,next_cat,char$0,st)
{var
prev_cat=st[2],
match=
remove_duplicates
(0,delta_4(char$0,next_cat,prev_cat,st[3],0),eps_expr),
expr=match[1],
idx=free_index(tbl_ref,expr),
expr$0=set_idx(idx,expr);
return mk(idx,next_cat,expr$0)}
function red_tr(l)
{var l$0=l;
for(;;)
{if(l$0)
{var _hT_=l$0[2];
if(_hT_)
{var
rem=_hT_[2],
tr2=_hT_[1],
st2=tr2[2],
s2=tr2[1],
tr1=l$0[1],
st1=tr1[2],
s1=tr1[1];
if(equal$2(st1,st2))
{var l$1=[0,[0,union(s1,s2),st1],rem],l$0=l$1;continue}
return [0,tr1,red_tr([0,tr2,rem])]}}
return l$0}}
function _b6_(param,l){var x=param[2],s=param[1];return prepend(s,x,l)}
var prepend_deriv=caml_call1(Stdlib_List[26],_b6_);
function restrict(s,param)
{var param$0=param;
for(;;)
{if(param$0)
{var
rem=param$0[2],
match=param$0[1],
x=match[2],
s$0=match[1],
s$1=inter(s,s$0);
if(is_empty(s$1)){var param$0=rem;continue}
return [0,[0,s$1,x],restrict(s,rem)]}
return 0}}
function prepend_marks_expr_lst(m,l)
{function _hS_(param)
{switch(param[0])
{case 0:
var s=param[3],e=param[2],l=param[1];
return [0,prepend_marks_expr_lst(m,l),e,s];
case 1:var e$0=param[2],m$0=param[1];return [1,merge(m,m$0),e$0];
default:var m$1=param[1];return [2,merge(m,m$1)]}}
return caml_call2(Stdlib_List[19],_hS_,l)}
function deriv_seq(all_chars,categories,cat,kind,y,z,rem)
{function _hJ_(param)
{var xl=param[2];
function _hR_(param){return 2 === param[0]?1:0}
return caml_call2(Stdlib_List[33],_hR_,xl)}
if(caml_call2(Stdlib_List[33],_hJ_,y))
{var
z$0=deriv_1(all_chars,categories,empty$0,cat,z,[0,[0,all_chars,0],0]),
_hK_=
function(param,rem)
{var
y=param[2],
s=param[1],
match=
first
(function(param)
{if(2 === param[0]){var marks=param[1];return [0,marks]}
return 0},
y);
if(match)
{var
marks=match[1],
_hM_=
function(param)
{var x=param[2],s=param[1];
return [0,s,prepend_marks_expr_lst(marks,x)]},
z$1=caml_call1(caml_call1(Stdlib_List[19],_hM_),z$0);
if(-730718166 === kind)
{var _hN_=caml_call2(prepend_deriv,restrict(s,z$1),rem);
return prepend
(s,tseq(kind,caml_call1(remove_matches,y),z,0),_hN_)}
if(332064784 <= kind)
{var
match$0=split_at_match(y),
y$0=match$0[2],
y$1=match$0[1],
_hO_=prepend(s,tseq(kind,y$0,z,0),rem),
_hP_=caml_call2(prepend_deriv,restrict(s,z$1),_hO_);
return prepend(s,tseq(kind,y$1,z,0),_hP_)}
var
_hQ_=
prepend(s,tseq(kind,caml_call1(remove_matches,y),z,0),rem);
return caml_call2(prepend_deriv,restrict(s,z$1),_hQ_)}
return prepend(s,tseq(kind,y,z,0),rem)};
return caml_call3(Stdlib_List[26],_hK_,y,rem)}
function _hL_(param,rem)
{var xl=param[2],s=param[1];return prepend(s,tseq(kind,xl,z,0),rem)}
return caml_call3(Stdlib_List[26],_hL_,y,rem)}
function deriv_1$0(counter,all_chars,categories,marks,cat,x,rem$1)
{var _hD_=x[2];
if(typeof _hD_ === "number")
return prepend(all_chars,[0,[2,marks],0],rem$1);
else
switch(_hD_[0])
{case 0:
var s=_hD_[1];return prepend(s,[0,[1,marks,eps_expr],0],rem$1);
case 1:
var l=_hD_[1];
if(counter < 50)
{var counter$0=counter + 1 | 0;
return deriv_2$0(counter$0,all_chars,categories,marks,cat,l,rem$1)}
return caml_trampoline_return
(deriv_2$0,[0,all_chars,categories,marks,cat,l,rem$1]);
case 2:
var
z=_hD_[3],
y=_hD_[2],
kind=_hD_[1],
y$0=deriv_1(all_chars,categories,marks,cat,y,[0,[0,all_chars,0],0]);
return deriv_seq(all_chars,categories,cat,kind,y$0,z,rem$1);
case 3:
var
y$1=_hD_[3],
kind$0=_hD_[2],
rep_kind=_hD_[1],
y$2=
deriv_1(all_chars,categories,marks,cat,y$1,[0,[0,all_chars,0],0]),
_hE_=
function(param,rem)
{var
z=param[2],
s=param[1],
match=
first
(function(param)
{if(2 === param[0]){var marks=param[1];return [0,marks]}
return 0},
z);
if(match)
var
marks$0=match[1],
marks$1=marks$0,
z$0=caml_call1(remove_matches,z);
else
var marks$1=marks,z$0=z;
var
_hI_=
620821490 <= rep_kind
?[0,[2,marks],tseq(kind$0,z$0,x,0)]
:tseq(kind$0,z$0,x,[0,[2,marks$1],0]);
return prepend(s,_hI_,rem)};
return caml_call3(Stdlib_List[26],_hE_,y$2,rem$1);
case 4:
var i=_hD_[1],_hF_=marks[2];
return prepend
(all_chars,
[0,
[2,
[0,[0,[0,i,-1],caml_call2(Stdlib_List[53],i,marks[1])],_hF_]],
0],
rem$1);
case 5:
var
e$1=_hD_[2],
b=_hD_[1],
_hH_=marks[2],
e=e$1,
rem=filter_marks(b,e$1,marks)[1],
_hG_=0;
for(;;)
{if(e < b)
return prepend(all_chars,[0,[2,[0,rem,_hH_]],_hG_],rem$1);
var rem$0=[0,[0,e,-2],rem],e$0=e - 1 | 0,e=e$0,rem=rem$0;
continue}
case 6:
var cat$0=_hD_[1];
return prepend
(caml_call2(Stdlib_List[48],cat$0,categories),
[0,[2,marks],0],
rem$1);
case 7:
var cat$1=_hD_[1];
return intersect(cat,cat$1)
?prepend(all_chars,[0,[2,marks],0],rem$1)
:rem$1;
default:return prepend(all_chars,[0,[2,marks],0],rem$1)}}
function deriv_2$0(counter,all_chars,categories,marks,cat,l,rem)
{if(l)
{var r=l[2],y=l[1],_hC_=deriv_2(all_chars,categories,marks,cat,r,rem);
if(counter < 50)
{var counter$0=counter + 1 | 0;
return deriv_1$0(counter$0,all_chars,categories,marks,cat,y,_hC_)}
return caml_trampoline_return
(deriv_1$0,[0,all_chars,categories,marks,cat,y,_hC_])}
return rem}
function deriv_1(all_chars,categories,marks,cat,x,rem)
{return caml_trampoline
(deriv_1$0(0,all_chars,categories,marks,cat,x,rem))}
function deriv_2(all_chars,categories,marks,cat,l,rem)
{return caml_trampoline
(deriv_2$0(0,all_chars,categories,marks,cat,l,rem))}
function deriv_4(all_chars,categories,cat,l,rem)
{if(l)
{var r=l[2],y$1=l[1],rem$0=deriv_4(all_chars,categories,cat,r,rem);
switch(y$1[0])
{case 0:
var
kind=y$1[3],
z=y$1[2],
y=y$1[1],
y$0=deriv_4(all_chars,categories,cat,y,[0,[0,all_chars,0],0]);
return deriv_seq(all_chars,categories,cat,kind,y$0,z,rem$0);
case 1:
var e=y$1[2],marks=y$1[1];
return deriv_1(all_chars,categories,marks,cat,e,rem$0);
default:return prepend(all_chars,[0,y$1,0],rem$0)}}
return rem}
function deriv(tbl_ref,all_chars,categories,st)
{var
der=deriv_4(all_chars,categories,st[2],st[3],[0,[0,all_chars,0],0]),
_hx_=0;
function _hy_(param,rem)
{var
expr=param[2],
s=param[1],
match=remove_duplicates(0,expr,eps_expr),
expr$0=match[1],
idx=free_index(tbl_ref,expr$0),
expr$1=set_idx(idx,expr$0);
function _hB_(param,rem)
{var s$0=param[2],cat=param[1],s$1=inter(s,s$0);
return is_empty(s$1)?rem:[0,[0,s$1,mk(idx,cat,expr$1)],rem]}
return caml_call3(Stdlib_List[26],_hB_,categories,rem)}
var l=caml_call3(Stdlib_List[26],_hy_,der,_hx_);
function _hu_(param,_hA_)
{var st2=_hA_[2],st1=param[2],c=caml_int_compare(st1[5],st2[5]);
if(0 === c)
{var c$0=caml_int_compare(st1[2],st2[2]);
return 0 === c$0?caml_compare(st1[3],st2[3]):c$0}
return c}
var _hv_=red_tr(caml_call2(Stdlib_List[56],_hu_,l));
function _hw_(param,_hz_)
{var s2=_hz_[1],s1=param[1];return caml_compare(s1,s2)}
return caml_call2(Stdlib_List[56],_hw_,_hv_)}
function status(s)
{var _hp_=s[4];
if(_hp_){var st=_hp_[1];return st}
var _hq_=s[3];
if(_hq_)
{var _hr_=_hq_[1];
if(2 === _hr_[0])
{var
m=_hr_[1],
_ht_=m[1],
_hs_=m[2],
_hm_=-1,
_hn_=
function(ma,param)
{var i=param[1];return caml_call2(Stdlib[17],ma,i)},
ma=caml_call3(Stdlib_List[25],_hn_,_hm_,_ht_),
res=caml_make_vect(ma + 1 | 0,-1),
_ho_=
function(param)
{var v=param[2],i=param[1];
caml_check_bound(res,i)[1 + i] = v;
return 0};
caml_call2(Stdlib_List[17],_ho_,_ht_);
var st$0=[0,res,_hs_]}
else
var st$0=1}
else
var st$0=0;
s[4] = [0,st$0];
return st$0}
var
_b7_=[0,dummy$0,create,Table],
Re_Automata=
[0,
pp_sem,
pp_rep_kind,
is_eps,
pp$2,
create_ids,
cst,
empty$1,
alt,
seq$0,
eps,
rep,
mark,
pmark,
erase,
before,
after,
rename,
[0],
[0,pp$3],
_b7_,
create_working_area,
index_count,
delta,
deriv,
status];
caml_register_global(152,Re_Automata,"Re__Automata");
function make(param){return caml_call2(Stdlib_Bytes[1],257,0)}
function flatten(cm)
{var c=caml_create_bytes(256),color_repr=caml_create_bytes(256),v=[0,0];
caml_bytes_set(c,0,0);
caml_bytes_set(color_repr,0,0);
var i=1;
for(;;)
{if(0 !== caml_bytes_get(cm,i))v[1]++;
caml_bytes_set(c,i,caml_call1(Stdlib_Char[1],v[1]));
var _hk_=caml_call1(Stdlib_Char[1],i);
caml_bytes_set(color_repr,v[1],_hk_);
var _hl_=i + 1 | 0;
if(255 !== i){var i=_hl_;continue}
var _hj_=v[1] + 1 | 0;
return [0,
c,
caml_call3(Stdlib_Bytes[7],color_repr,0,v[1] + 1 | 0),
_hj_]}}
function split(s,cm)
{return iter
(s,
function(i,j)
{caml_bytes_set(cm,i,1);return caml_bytes_set(cm,j + 1 | 0,1)})}
var Re_Color_map=[0,make,flatten,split];
caml_register_global(155,Re_Color_map,"Re__Color_map");
function offset$0(t,i)
{if(t[2].length - 1 <= ((2 * i | 0) + 1 | 0))throw Stdlib[8];
var _hg_=2 * i | 0,m1=caml_check_bound(t[2],_hg_)[1 + _hg_];
if(-1 === m1)throw Stdlib[8];
var
p1=caml_check_bound(t[4],m1)[1 + m1] - 1 | 0,
_hh_=(2 * i | 0) + 1 | 0,
_hi_=caml_check_bound(t[2],_hh_)[1 + _hh_],
p2=caml_check_bound(t[4],_hi_)[1 + _hi_] - 1 | 0;
return [0,p1,p2]}
function get(t,i)
{var match=offset$0(t,i),p2=match[2],p1=match[1];
return caml_call3(Stdlib_String[15],t[1],p1,p2 - p1 | 0)}
function start(subs,i){return offset$0(subs,i)[1]}
function stop(subs,i){return offset$0(subs,i)[2]}
function test(t,i)
{if(t[2].length - 1 <= (2 * i | 0))return 0;
var _hf_=2 * i | 0,idx=caml_check_bound(t[2],_hf_)[1 + _hf_];
return -1 !== idx?1:0}
function get_opt(t,i){return test(t,i)?[0,get(t,i)]:0}
function all_offset(t)
{var
res=caml_make_vect(t[5],dummy_offset),
_ha_=((t[2].length - 1) / 2 | 0) - 1 | 0,
_g$_=0;
if(! (_ha_ < 0))
{var i=_g$_;
for(;;)
{var _hb_=2 * i | 0,m1=caml_check_bound(t[2],_hb_)[1 + _hb_];
if(-1 !== m1)
{var
p1=caml_check_bound(t[4],m1)[1 + m1],
_hc_=(2 * i | 0) + 1 | 0,
_hd_=caml_check_bound(t[2],_hc_)[1 + _hc_],
p2=caml_check_bound(t[4],_hd_)[1 + _hd_];
caml_check_bound(res,i)[1 + i] = [0,p1 - 1 | 0,p2 - 1 | 0]}
var _he_=i + 1 | 0;
if(_ha_ !== i){var i=_he_;continue}
break}}
return res}
function all(t)
{var
res=caml_make_vect(t[5],dummy_string),
_g5_=((t[2].length - 1) / 2 | 0) - 1 | 0,
_g4_=0;
if(! (_g5_ < 0))
{var i=_g4_;
for(;;)
{var _g6_=2 * i | 0,m1=caml_check_bound(t[2],_g6_)[1 + _g6_];
if(-1 !== m1)
{var
p1=caml_check_bound(t[4],m1)[1 + m1],
_g7_=(2 * i | 0) + 1 | 0,
_g8_=caml_check_bound(t[2],_g7_)[1 + _g7_],
p2=caml_check_bound(t[4],_g8_)[1 + _g8_],
_g9_=caml_call3(Stdlib_String[15],t[1],p1 - 1 | 0,p2 - p1 | 0);
caml_check_bound(res,i)[1 + i] = _g9_}
var _g__=i + 1 | 0;
if(_g5_ !== i){var i=_g__;continue}
break}}
return res}
function pp$4(fmt,t)
{var offsets=all_offset(t),strs=all(t);
function _g1_(i)
{var _g3_=caml_check_bound(offsets,i)[1 + i];
return [0,caml_check_bound(strs,i)[1 + i],_g3_]}
var
_g2_=caml_call2(Stdlib_Array[2],strs.length - 1,_g1_),
matches=caml_call1(Stdlib_Array[11],_g2_);
function pp_match(fmt,param)
{var match=param[2],stop=match[2],start=match[1],str=param[1];
return caml_call5(_bk_,fmt,_b8_,str,start,stop)}
return sexp(fmt,cst_Group,caml_call2(_be_,0,pp_match),matches)}
function nb_groups(t){return t[5]}
var
Group=
[0,get,get_opt,offset$0,start,stop,all,all_offset,test,nb_groups,pp$4];
caml_register_global(157,Group,"Re__Group");
function iter$0(n,f,v)
{var n$0=n,v$0=v;
for(;;)
{if(0 === n$0)return v$0;
var v$1=caml_call1(f,v$0),n$1=n$0 - 1 | 0,n$0=n$1,v$0=v$1;
continue}}
var unknown=-2,break$0=-3;
function print_re(ch,re){return pp$2(ch,re[1])}
function category(re,color)
{return -1 === color
?inexistant
:color === re[6]?28:from_char(caml_bytes_get(re[4],color))}
var dummy_next=[0],unknown_state=[0,unknown,0,dummy_next,0,_b7_[1]];
function mk_state(ncol,desc)
{var match=status(desc),switch$0=0;
if(typeof match === "number" && match){var break_state=0;switch$0 = 1}
if(! switch$0)var break_state=1;
var
_gX_=0,
_gY_=break_state?dummy_next:caml_make_vect(ncol,unknown_state),
_gZ_=desc[1],
_g0_=break_state?break$0:desc[1];
return [0,_g0_,_gZ_,_gY_,_gX_,desc]}
function find_state(re,desc)
{try
{var _gV_=caml_call2(_b7_[3][7],re[8],desc);return _gV_}
catch(_gW_)
{_gW_ = caml_wrap_exception(_gW_);
if(_gW_ === Stdlib[8])
{var st=mk_state(re[5],desc);
caml_call3(_b7_[3][5],re[8],desc,st);
return st}
throw _gW_}}
function delta$0(info,cat,color,st)
{var
desc=delta(info[1][7],cat,color,st[5]),
len=info[3].length - 1,
_gT_=desc[1] === len?1:0,
_gU_=_gT_?0 < len?1:0:_gT_;
if(_gU_)
{var pos=info[3];
info[3] = caml_make_vect(2 * len | 0,0);
caml_call5(Stdlib_Array[10],pos,0,info[3],0,len)}
return desc}
function validate(info,s,pos,st)
{var
_gS_=caml_string_get(s,pos),
color=caml_bytes_get(info[2],_gS_),
cat=category(info[1],color),
desc=delta$0(info,cat,color,st),
st$0=find_state(info[1],desc);
caml_check_bound(st[3],color)[1 + color] = st$0;
return 0}
function final$0(info,st,cat)
{try
{var _gQ_=caml_call2(Stdlib_List[48],cat,st[4]);return _gQ_}
catch(_gR_)
{_gR_ = caml_wrap_exception(_gR_);
if(_gR_ === Stdlib[8])
{var
st$0=delta$0(info,cat,-1,st),
_gP_=status(st$0),
res=[0,st$0[1],_gP_];
st[4] = [0,[0,cat,res],st[4]];
return res}
throw _gR_}}
function find_initial_state(re,cat)
{try
{var _gN_=caml_call2(Stdlib_List[48],cat,re[2]);return _gN_}
catch(_gO_)
{_gO_ = caml_wrap_exception(_gO_);
if(_gO_ === Stdlib[8])
{var st=find_state(re,caml_call2(_b7_[2],cat,re[1]));
re[2] = [0,[0,cat,st],re[2]];
return st}
throw _gO_}}
function get_color(re,s,pos)
{if(0 <= pos)
{var slen=caml_ml_string_length(s);
if(slen <= pos)return -1;
if
(pos
===
(slen - 1 | 0)
&&
-1
!==
re[6]
&&
10
===
caml_string_get(s,pos))
return re[6];
var _gM_=caml_string_get(s,pos);
return caml_bytes_get(re[3],_gM_)}
return -1}
function scan_str(info,s,st$8,groups)
{var pos$4=info[4],last=info[5];
if
(last
===
caml_ml_string_length(s)
&&
-1
!==
info[1][6]
&&
pos$4
<
last
&&
10
===
caml_string_get(s,last - 1 | 0))
{var
info$0=[0,info[1],info[2],info[3],info[4],last - 1 | 0],
st$9=scan_str(info$0,s,st$8,groups);
if(st$9[1] === -3)return st$9;
var pos$5=last - 1 | 0;
for(;;)
{var _gJ_=info$0[1][6],st$6=caml_check_bound(st$9[3],_gJ_)[1 + _gJ_];
if(0 <= st$6[1])
{if(groups)
{var _gK_=st$6[1];
caml_check_bound(info$0[3],_gK_)[1 + _gK_] = pos$5 + 1 | 0}
return st$6}
if(st$6[1] === -3)
{if(groups)
{var _gL_=st$6[2];
caml_check_bound(info$0[3],_gL_)[1 + _gL_] = pos$5 + 1 | 0}
return st$6}
var
color=info$0[1][6],
real_c=caml_bytes_get(info$0[2],10),
cat=category(info$0[1],color),
desc=delta$0(info$0,cat,real_c,st$9),
st$7=find_state(info$0[1],desc);
caml_check_bound(st$9[3],color)[1 + color] = st$7;
continue}}
if(groups)
{var pos=pos$4,st=st$8;
a:
for(;;)
{if(pos < info[5])
{var
_gA_=caml_string_get(s,pos),
_gB_=caml_bytes_get(info[2],_gA_),
st$0=caml_check_bound(st[3],_gB_)[1 + _gB_],
pos$0=pos,
st$2=st,
st$1=st$0;
for(;;)
{if(0 <= st$1[1])
{var pos$1=pos$0 + 1 | 0;
if(pos$1 < info[5])
{var
_gC_=caml_string_get(s,pos$1),
_gD_=caml_bytes_get(info[2],_gC_),
st$3=caml_check_bound(st$1[3],_gD_)[1 + _gD_],
_gE_=st$1[1];
caml_check_bound(info[3],_gE_)[1 + _gE_] = pos$1;
var pos$0=pos$1,st$2=st$1,st$1=st$3;
continue}
var _gF_=st$1[1];
caml_check_bound(info[3],_gF_)[1 + _gF_] = pos$1;
return st$1}
if(st$1[1] === -3)
{var _gG_=st$1[2];
caml_check_bound(info[3],_gG_)[1 + _gG_] = pos$0 + 1 | 0;
return st$1}
validate(info,s,pos$0,st$2);
var pos=pos$0,st=st$2;
continue a}}
return st}}
var pos$2=pos$4,st$4=st$8;
for(;;)
{if(pos$2 < last)
{var
_gH_=caml_string_get(s,pos$2),
_gI_=caml_bytes_get(info[2],_gH_),
st$5=caml_check_bound(st$4[3],_gI_)[1 + _gI_];
if(0 <= st$5[1])
{var pos$3=pos$2 + 1 | 0,pos$2=pos$3,st$4=st$5;continue}
if(st$5[1] === -3)return st$5;
validate(info,s,pos$2,st$4);
continue}
return st$4}}
function match_str(groups,partial,re,s,pos,len)
{var slen=caml_ml_string_length(s),last=-1 === len?slen:pos + len | 0;
if(groups)
var
n=index_count(re[7]) + 1 | 0,
_gy_=10 < n?caml_make_vect(n,0):_b9_.slice(),
_gz_=_gy_;
else
var _gz_=[0];
var
info=[0,re,re[3],_gz_,pos,last],
initial_cat=0 === pos?33:32 | category(re,get_color(re,s,pos - 1 | 0)),
initial_state=find_initial_state(re,initial_cat),
st=scan_str(info,s,initial_state,groups),
switch$0=0;
if(st[1] !== -3 && ! partial)
{var
final_cat=last === slen?33:32 | category(re,get_color(re,s,last)),
match=final$0(info,st,final_cat),
res$0=match[2],
idx=match[1];
if(groups)caml_check_bound(info[3],idx)[1 + idx] = last + 1 | 0;
var res=res$0;
switch$0 = 1}
if(! switch$0)var res=status(st[5]);
if(typeof res === "number")return res?1:0;
var pmarks=res[2],marks=res[1];
return [0,[0,s,marks,pmarks,info[3],re[9]]]}
function cseq(c$0,c){return seq(c$0,c)}
function cadd(c,s){return add(c,s)}
function trans_set(cache,cm,s)
{var match=one_char(s);
if(match){var i=match[1];return csingle(caml_bytes_get(cm,i))}
var v=[0,hash_rec(s),s];
try
{var _gv_=caml_call2(CSetMap[28],v,cache[1]);return _gv_}
catch(_gw_)
{_gw_ = caml_wrap_exception(_gw_);
if(_gw_ === Stdlib[8])
{var
l=
fold_right
(s,
empty,
function(param,l)
{var j=param[2],i=param[1],_gx_=caml_bytes_get(cm,j);
return union(cseq(caml_bytes_get(cm,i),_gx_),l)});
cache[1] = caml_call3(CSetMap[4],v,l,cache[1]);
return l}
throw _gw_}}
function view(t){return t}
var View=[0,view];
function pp$5(fmt,t)
{function var$0(s,re){return sexp(fmt,s,pp$5,re)}
function seq(s,rel){return sexp(fmt,s,caml_call2(_be_,0,pp$5),rel)}
if(typeof t === "number")
switch(t)
{case 0:return caml_call2(_m_,fmt,cst_Beg_of_line);
case 1:return caml_call2(_m_,fmt,cst_End_of_line);
case 2:return caml_call2(_m_,fmt,cst_Beg_of_word);
case 3:return caml_call2(_m_,fmt,cst_End_of_word);
case 4:return caml_call2(_m_,fmt,cst_Not_bound);
case 5:return caml_call2(_m_,fmt,cst_Beg_of_str);
case 6:return caml_call2(_m_,fmt,cst_End_of_str);
case 7:return caml_call2(_m_,fmt,cst_Last_end_of_line);
case 8:return caml_call2(_m_,fmt,cst_Start);
default:return caml_call2(_m_,fmt,cst_Stop)}
else
switch(t[0])
{case 0:var s=t[1];return sexp(fmt,cst_Set,pp$0,s);
case 1:var sq=t[1];return seq(cst_Sequence,sq);
case 2:var alt=t[1];return seq(cst_Alternative,alt);
case 3:
var
stop=t[3],
start=t[2],
re=t[1],
pp=
function(fmt,param)
{return caml_call7(_bk_,fmt,_b__,pp$5,re,start,optint,stop)};
return sexp(fmt,cst_Repeat,pp,0);
case 4:
var re$0=t[2],sem=t[1],_gj_=[0,sem,re$0];
return sexp
(fmt,
cst_Sem,
function(_gr_,_gs_){return pair(pp_sem,pp$5,_gr_,_gs_)},
_gj_);
case 5:
var re$1=t[2],k=t[1],_gk_=[0,k,re$1];
return sexp
(fmt,
cst_Sem_greedy,
function(_gp_,_gq_){return pair(pp_rep_kind,pp$5,_gp_,_gq_)},
_gk_);
case 6:var c=t[1];return var$0(cst_Group$0,c);
case 7:var c$0=t[1];return var$0(cst_No_group,c$0);
case 8:var c$1=t[1];return var$0(cst_Nest,c$1);
case 9:var c$2=t[1];return var$0(cst_Case,c$2);
case 10:var c$3=t[1];return var$0(cst_No_case,c$3);
case 11:var c$4=t[1];return seq(cst_Intersection,c$4);
case 12:var c$5=t[1];return seq(cst_Complement,c$5);
case 13:
var b=t[2],a=t[1],_gl_=[0,a,b];
return sexp
(fmt,
cst_Difference,
function(_gn_,_go_){return pair(pp$5,pp$5,_gn_,_go_)},
_gl_);
default:
var r=t[2],m=t[1],_gm_=[0,m,r];
return sexp
(fmt,
cst_Pmark,
function(_gt_,_gu_){return pair(pp$1,pp$5,_gt_,_gu_)},
_gm_)}}
function is_charset(param)
{var param$0=param;
for(;;)
{var switch$0=0;
if(typeof param$0 === "number")
switch$0 = 1;
else
switch(param$0[0])
{case 0:return 1;
case 13:
var r=param$0[2],r$0=param$0[1],_gi_=is_charset(r$0);
if(_gi_){var param$0=r;continue}
return _gi_;
case 4:
case 5:var param$1=param$0[2];break;
case 2:
case 11:
case 12:
var l=param$0[1];return caml_call2(Stdlib_List[32],is_charset,l);
case 7:
case 9:
case 10:var param$1=param$0[1];break;
default:switch$0 = 1}
if(switch$0)return 0;
var param$0=param$1;
continue}}
var
_b$_=cseq(216,222),
_ca_=union(cseq(192,214),_b$_),
cupper=union(cseq(65,90),_ca_),
clower=offset(32,cupper),
_cb_=union(clower,cupper),
calpha=caml_call3(Stdlib_List[26],cadd,_cc_,_cb_),
cdigit=cseq(48,57),
calnum=union(calpha,cdigit),
cword=cadd(95,calnum);
function equal$3(x1,x2)
{var x1$0=x1,x2$0=x2;
for(;;)
{var switch$0=0;
if(typeof x1$0 === "number")
switch(x1$0)
{case 0:if(typeof x2$0 === "number" && ! x2$0)switch$0 = 1;break;
case 1:
if(typeof x2$0 === "number" && 1 === x2$0)switch$0 = 1;break;
case 2:
if(typeof x2$0 === "number" && 2 === x2$0)switch$0 = 1;break;
case 3:
if(typeof x2$0 === "number" && 3 === x2$0)switch$0 = 1;break;
case 4:
if(typeof x2$0 === "number" && 4 === x2$0)switch$0 = 1;break;
case 5:
if(typeof x2$0 === "number" && 5 === x2$0)switch$0 = 1;break;
case 6:
if(typeof x2$0 === "number" && 6 === x2$0)switch$0 = 1;break;
case 7:
if(typeof x2$0 === "number" && 7 === x2$0)switch$0 = 1;break;
case 8:
if(typeof x2$0 === "number" && 8 === x2$0)switch$0 = 1;break;
default:if(typeof x2$0 === "number" && 9 <= x2$0)switch$0 = 1}
else
switch(x1$0[0])
{case 0:
if(typeof x2$0 !== "number" && 0 === x2$0[0])
{var s2=x2$0[1],s1=x1$0[1];return caml_equal(s1,s2)}
break;
case 1:
if(typeof x2$0 !== "number" && 1 === x2$0[0])
{var l2=x2$0[1],l1=x1$0[1];return eq_list(l1,l2)}
break;
case 2:
if(typeof x2$0 !== "number" && 2 === x2$0[0])
{var l2$0=x2$0[1],l1$0=x1$0[1];return eq_list(l1$0,l2$0)}
break;
case 3:
if(typeof x2$0 !== "number" && 3 === x2$0[0])
{var
j2=x2$0[3],
i2=x2$0[2],
x2$1=x2$0[1],
j1=x1$0[3],
i1=x1$0[2],
x1$1=x1$0[1],
_gb_=i1 === i2?1:0;
if(_gb_)
{var _gc_=caml_equal(j1,j2);
if(_gc_){var x1$0=x1$1,x2$0=x2$1;continue}
var _gd_=_gc_}
else
var _gd_=_gb_;
return _gd_}
break;
case 4:
if(typeof x2$0 !== "number" && 4 === x2$0[0])
{var
x2$2=x2$0[2],
sem2=x2$0[1],
x1$2=x1$0[2],
sem1=x1$0[1],
_ge_=sem1 === sem2?1:0;
if(_ge_){var x1$0=x1$2,x2$0=x2$2;continue}
return _ge_}
break;
case 5:
if(typeof x2$0 !== "number" && 5 === x2$0[0])
{var
x2$3=x2$0[2],
k2=x2$0[1],
x1$3=x1$0[2],
k1=x1$0[1],
_gf_=k1 === k2?1:0;
if(_gf_){var x1$0=x1$3,x2$0=x2$3;continue}
return _gf_}
break;
case 6:if(typeof x2$0 !== "number" && 6 === x2$0[0])return 0;break;
case 7:
if(typeof x2$0 !== "number" && 7 === x2$0[0])
{var x2$4=x2$0[1],x1$4=x1$0[1],x1$0=x1$4,x2$0=x2$4;continue}
break;
case 8:
if(typeof x2$0 !== "number" && 8 === x2$0[0])
{var x2$5=x2$0[1],x1$5=x1$0[1],x1$0=x1$5,x2$0=x2$5;continue}
break;
case 9:
if(typeof x2$0 !== "number" && 9 === x2$0[0])
{var x2$6=x2$0[1],x1$6=x1$0[1],x1$0=x1$6,x2$0=x2$6;continue}
break;
case 10:
if(typeof x2$0 !== "number" && 10 === x2$0[0])
{var x2$7=x2$0[1],x1$7=x1$0[1],x1$0=x1$7,x2$0=x2$7;continue}
break;
case 11:
if(typeof x2$0 !== "number" && 11 === x2$0[0])
{var l2$1=x2$0[1],l1$1=x1$0[1];return eq_list(l1$1,l2$1)}
break;
case 12:
if(typeof x2$0 !== "number" && 12 === x2$0[0])
{var l2$2=x2$0[1],l1$2=x1$0[1];return eq_list(l1$2,l2$2)}
break;
case 13:
if(typeof x2$0 !== "number" && 13 === x2$0[0])
{var
x2$8=x2$0[2],
x2$9=x2$0[1],
x1$8=x1$0[2],
x1$9=x1$0[1],
_gg_=equal$3(x1$9,x2$9);
if(_gg_){var x1$0=x1$8,x2$0=x2$8;continue}
return _gg_}
break;
default:
if(typeof x2$0 !== "number" && 14 === x2$0[0])
{var
r2=x2$0[2],
m2=x2$0[1],
r1=x1$0[2],
m1=x1$0[1],
_gh_=m1 === m2?1:0;
if(_gh_){var x1$0=r1,x2$0=r2;continue}
return _gh_}}
return switch$0?1:0}}
function eq_list(l1,l2)
{var l1$0=l1,l2$0=l2;
for(;;)
{if(l1$0)
{if(l2$0)
{var
r2=l2$0[2],
x2=l2$0[1],
r1=l1$0[2],
x1=l1$0[1],
_ga_=equal$3(x1,x2);
if(_ga_){var l1$0=r1,l2$0=r2;continue}
return _ga_}}
else
if(! l2$0)return 1;
return 0}}
function sequence(l){if(l && ! l[2]){var x=l[1];return x}return [1,l]}
function merge_sequences(param)
{var param$0=param;
for(;;)
{if(param$0)
{var _f7_=param$0[1];
if(typeof _f7_ !== "number")
switch(_f7_[0])
{case 1:
var _f8_=_f7_[1];
if(_f8_)
{var
r$0=param$0[2],
y=_f8_[2],
x=_f8_[1],
r$1=merge_sequences(r$0);
if(r$1)
{var _f9_=r$1[1],switch$0=0;
if(typeof _f9_ === "number" || ! (1 === _f9_[0]))
switch$0 = 1;
else
{var _f__=_f9_[1];
if(_f__)
{var r$2=r$1[2],y$0=_f__[2],x$0=_f__[1];
if(equal$3(x,x$0))
{var _f$_=[0,sequence(y$0),0];
return [0,[1,[0,x,[0,[2,[0,sequence(y),_f$_]],0]]],r$2]}}}}
return [0,[1,[0,x,y]],r$1]}
break;
case 2:
var
r$3=param$0[2],
l=_f7_[1],
param$1=caml_call2(Stdlib[37],l,r$3),
param$0=param$1;
continue
}
var r=param$0[2];
return [0,_f7_,merge_sequences(r)]}
return 0}}
function enforce_kind(ids,kind,k,cr)
{return 332064784 === kind?332064784 === k?cr:seq$0(ids,k,cr,eps(ids)):cr}
function trans_seq(ids,kind,ign_group,ign_case,greedy,pos,cache,c,param)
{if(param)
{var _f6_=param[1];
if(param[2])
{var
rem=param[2],
match=
translate(ids,kind,ign_group,ign_case,greedy,pos,cache,c,_f6_),
kind$0=match[2],
cr=match[1],
cr$0=trans_seq(ids,kind,ign_group,ign_case,greedy,pos,cache,c,rem);
return is_eps(cr$0)?cr:is_eps(cr)?cr$0:seq$0(ids,kind$0,cr,cr$0)}
var
match$0=
translate(ids,kind,ign_group,ign_case,greedy,pos,cache,c,_f6_),
kind$1=match$0[2],
cr$1=match$0[1];
return enforce_kind(ids,kind,kind$1,cr$1)}
return eps(ids)}
function translate(ids,kind,ign_group,ign_case,greedy,pos,cache,c,param)
{var ign_group$0=ign_group,greedy$0=greedy,param$0=param;
for(;;)
if(typeof param$0 === "number")
switch(param$0)
{case 0:return [0,after(ids,9),kind];
case 1:return [0,before(ids,9),kind];
case 2:
var _fX_=before(ids,letter);
return [0,seq$0(ids,332064784,after(ids,5),_fX_),kind];
case 3:
var _fY_=before(ids,5);
return [0,seq$0(ids,332064784,after(ids,letter),_fY_),kind];
case 4:
var
_fZ_=before(ids,5),
_f0_=[0,seq$0(ids,332064784,after(ids,5),_fZ_),0],
_f1_=before(ids,letter);
return [0,
alt
(ids,[0,seq$0(ids,332064784,after(ids,letter),_f1_),_f0_]),
kind];
case 5:return [0,after(ids,inexistant),kind];
case 6:return [0,before(ids,inexistant),kind];
case 7:return [0,before(ids,17),kind];
case 8:return [0,after(ids,search_boundary),kind];
default:return [0,before(ids,search_boundary),kind]}
else
switch(param$0[0])
{case 0:
var s=param$0[1];return [0,cst(ids,trans_set(cache,c,s)),kind];
case 1:
var l=param$0[1];
return [0,
trans_seq
(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,l),
kind];
case 2:
var l$0=param$0[1],merged_sequences=merge_sequences(l$0);
if(merged_sequences && ! merged_sequences[2])
{var
r=merged_sequences[1],
match=
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r),
kind$0=match[2],
cr=match[1];
return [0,enforce_kind(ids,kind,kind$0,cr),kind]}
var
_f2_=
function(r)
{var
match=
translate
(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r),
kind$0=match[2],
cr=match[1];
return enforce_kind(ids,kind,kind$0,cr)};
return [0,
alt(ids,caml_call2(Stdlib_List[19],_f2_,merged_sequences)),
kind];
case 3:
var
j=param$0[3],
i=param$0[2],
r$0=param$0[1],
match$0=
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$0),
kind$1=match$0[2],
cr$0=match$0[1];
if(j)
var
j$0=j[1],
f=
620821490 <= greedy$0
?function(rem)
{var _f4_=[0,seq$0(ids,kind$1,rename(ids,cr$0),rem),0];
return alt(ids,[0,eps(ids),_f4_])}
:function(rem)
{var _f5_=[0,eps(ids),0];
return alt
(ids,[0,seq$0(ids,kind$1,rename(ids,cr$0),rem),_f5_])},
rem=iter$0(j$0 - i | 0,f,eps(ids));
else
var rem=rep(ids,greedy$0,kind$1,cr$0);
return [0,
iter$0
(i,
function(rem){return seq$0(ids,kind$1,rename(ids,cr$0),rem)},
rem),
kind];
case 4:
var
r$1=param$0[2],
kind$2=param$0[1],
match$1=
translate
(ids,kind$2,ign_group$0,ign_case,greedy$0,pos,cache,c,r$1),
kind$3=match$1[2],
cr$1=match$1[1];
return [0,enforce_kind(ids,kind$2,kind$3,cr$1),kind$2];
case 5:
var
param$1=param$0[2],
greedy$1=param$0[1],
greedy$0=greedy$1,
param$0=param$1;
continue;
case 6:
var r$2=param$0[1];
if(ign_group$0){var param$0=r$2;continue}
var p=pos[1];
pos[1] = pos[1] + 2 | 0;
var
match$2=
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$2),
kind$4=match$2[2],
cr$2=match$2[1],
_f3_=seq$0(ids,332064784,cr$2,mark(ids,p + 1 | 0));
return [0,seq$0(ids,332064784,mark(ids,p),_f3_),kind$4];
case 7:
var param$2=param$0[1],ign_group$0=1,param$0=param$2;continue;
case 8:
var
r$3=param$0[1],
b=pos[1],
match$3=
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$3),
kind$5=match$3[2],
cr$3=match$3[1],
e=pos[1] - 1 | 0;
return e < b
?[0,cr$3,kind$5]
:[0,seq$0(ids,332064784,erase(ids,b,e),cr$3),kind$5];
case 14:
var
r$4=param$0[2],
i$0=param$0[1],
match$4=
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$4),
kind$6=match$4[2],
cr$4=match$4[1];
return [0,seq$0(ids,332064784,pmark(ids,i$0),cr$4),kind$6];
default:throw [0,Assert_failure,_ce_]}}
function as_set(param)
{if(typeof param !== "number" && 0 === param[0]){var s=param[1];return s}
throw [0,Assert_failure,_cf_]}
function handle_case(ign_case,r)
{var ign_case$0=ign_case,r$0=r;
for(;;)
if(typeof r$0 === "number")
return r$0;
else
switch(r$0[0])
{case 0:
var s=r$0[1];
if(ign_case$0)
var
_fL_=offset(-32,inter(s,clower)),
_fM_=union(s,union(offset(32,inter(s,cupper)),_fL_));
else
var _fM_=s;
return [0,_fM_];
case 1:
var
l=r$0[1],
_fN_=function(_fW_){return handle_case(ign_case$0,_fW_)};
return [1,caml_call2(Stdlib_List[19],_fN_,l)];
case 2:
var
l$0=r$0[1],
_fO_=function(_fV_){return handle_case(ign_case$0,_fV_)},
l$1=caml_call2(Stdlib_List[19],_fO_,l$0);
if(is_charset([2,l$1]))
{var _fP_=function(s,r){return union(s,as_set(r))};
return [0,caml_call3(Stdlib_List[25],_fP_,empty,l$1)]}
return [2,l$1];
case 3:
var j=r$0[3],i=r$0[2],r$1=r$0[1];
return [3,handle_case(ign_case$0,r$1),i,j];
case 4:
var r$2=r$0[2],k=r$0[1],r$3=handle_case(ign_case$0,r$2);
return is_charset(r$3)?r$3:[4,k,r$3];
case 5:
var r$4=r$0[2],k$0=r$0[1],r$5=handle_case(ign_case$0,r$4);
return is_charset(r$5)?r$5:[5,k$0,r$5];
case 6:var r$6=r$0[1];return [6,handle_case(ign_case$0,r$6)];
case 7:
var r$7=r$0[1],r$8=handle_case(ign_case$0,r$7);
return is_charset(r$8)?r$8:[7,r$8];
case 8:
var r$9=r$0[1],r$10=handle_case(ign_case$0,r$9);
return is_charset(r$10)?r$10:[8,r$10];
case 9:var r$11=r$0[1],ign_case$0=0,r$0=r$11;continue;
case 10:var r$12=r$0[1],ign_case$0=1,r$0=r$12;continue;
case 11:
var
l$2=r$0[1],
_fQ_=function(r){return handle_case(ign_case$0,r)},
l$3=caml_call2(Stdlib_List[19],_fQ_,l$2),
_fR_=function(s,r){return inter(s,as_set(r))};
return [0,caml_call3(Stdlib_List[25],_fR_,cany,l$3)];
case 12:
var
l$4=r$0[1],
_fS_=function(r){return handle_case(ign_case$0,r)},
l$5=caml_call2(Stdlib_List[19],_fS_,l$4),
_fT_=function(s,r){return union(s,as_set(r))};
return [0,diff(cany,caml_call3(Stdlib_List[25],_fT_,empty,l$5))];
case 13:
var
r$13=r$0[2],
r$14=r$0[1],
_fU_=diff(cany,as_set(handle_case(ign_case$0,r$13)));
return [0,inter(as_set(handle_case(ign_case$0,r$14)),_fU_)];
default:
var r$15=r$0[2],i$0=r$0[1];
return [14,i$0,handle_case(ign_case$0,r$15)]}}
function anchored(param)
{var param$0=param;
for(;;)
{var switch$0=0;
if(typeof param$0 === "number")
switch(param$0){case 5:case 8:return 1}
else
switch(param$0[0])
{case 1:
var l=param$0[1];return caml_call2(Stdlib_List[33],anchored,l);
case 2:
var l$0=param$0[1];
return caml_call2(Stdlib_List[32],anchored,l$0);
case 3:
var i=param$0[2],r=param$0[1],_fK_=0 < i?1:0;
if(_fK_){var param$0=r;continue}
return _fK_;
case 4:
case 5:
case 14:var param$1=param$0[2];switch$0 = 1;break;
case 0:
case 11:
case 12:
case 13:break;
default:var param$1=param$0[1];switch$0 = 1}
if(switch$0){var param$0=param$1;continue}
return 0}}
function str(s)
{var l=[0,0],_fH_=caml_ml_string_length(s) - 1 | 0;
if(! (_fH_ < 0))
{var i=_fH_;
for(;;)
{var _fI_=l[1];
l[1] = [0,[0,csingle(caml_string_get(s,i))],_fI_];
var _fJ_=i - 1 | 0;
if(0 !== i){var i=_fJ_;continue}
break}}
return [1,l[1]]}
function char$0(c){return [0,csingle(c)]}
function alt$0(l){if(l && ! l[2]){var r=l[1];return r}return [2,l]}
function seq$1(l){if(l && ! l[2]){var r=l[1];return r}return [1,l]}
var empty$2=alt$0(0),epsilon=seq$1(0);
function repn(r,i,j)
{if(i < 0)caml_call1(Stdlib[1],cst_Re_repn);
var switch$0=0;
if(j)
{var j$0=j[1];
if(j$0 < i){caml_call1(Stdlib[1],cst_Re_repn$0);switch$0 = 1}}
return [3,r,i,j]}
function rep$0(r){return repn(r,0,0)}
function rep1(r){return repn(r,1,0)}
function opt(r){return repn(r,0,_cg_)}
var bol=0,eol=1,bow=2,eow=3;
function word(r){return seq$1([0,bow,[0,r,[0,eow,0]]])}
var not_boundary=4,bos=5,eos=6;
function whole_string(r){return seq$1([0,bos,[0,r,[0,eos,0]]])}
var leol=7,start$0=8,stop$0=9;
function longest(r){return [4,-730718166,r]}
function shortest(r){return [4,-1034406550,r]}
function first$0(r){return [4,332064784,r]}
function greedy(r){return [5,-904640576,r]}
function non_greedy(r){return [5,620821490,r]}
function group(r){return [6,r]}
function no_group(r){return [7,r]}
function nest(r){return [8,r]}
function mark$0(r){var i=gen(0);return [0,i,[14,i,r]]}
function set(str)
{var s=[0,empty],_fE_=caml_ml_string_length(str) - 1 | 0,_fD_=0;
if(! (_fE_ < 0))
{var i=_fD_;
for(;;)
{var _fF_=s[1];
s[1] = union(csingle(caml_string_get(str,i)),_fF_);
var _fG_=i + 1 | 0;
if(_fE_ !== i){var i=_fG_;continue}
break}}
return [0,s[1]]}
function rg(c$0,c){return [0,cseq(c$0,c)]}
function inter$0(l)
{var r=[11,l];return is_charset(r)?r:caml_call1(Stdlib[1],cst_Re_inter)}
function compl(l)
{var r=[12,l];return is_charset(r)?r:caml_call1(Stdlib[1],cst_Re_compl)}
function diff$0(r$0,r)
{var r$1=[13,r$0,r];
return is_charset(r$1)?r$1:caml_call1(Stdlib[1],cst_Re_diff)}
var
any=[0,cany],
notnl=[0,diff(cany,csingle(10))],
_ch_=[0,rg(248,255),0],
_ci_=[0,rg(223,246),_ch_],
_cj_=[0,char$0(181),_ci_],
lower=alt$0([0,rg(97,122),_cj_]),
_ck_=[0,rg(216,222),0],
_cl_=[0,rg(192,214),_ck_],
upper=alt$0([0,rg(65,90),_cl_]),
_cm_=[0,char$0(186),0],
alpha=alt$0([0,lower,[0,upper,[0,char$0(170),_cm_]]]),
digit=rg(48,57),
alnum=alt$0([0,alpha,[0,digit,0]]),
wordc=alt$0([0,alnum,[0,char$0(95),0]]),
ascii=rg(0,127),
blank=set(cst$0),
_cn_=[0,rg(127,159),0],
cntrl=alt$0([0,rg(0,31),_cn_]),
_co_=[0,rg(160,255),0],
graph=alt$0([0,rg(33,126),_co_]),
_cp_=[0,rg(160,255),0],
print=alt$0([0,rg(32,126),_cp_]),
_cq_=[0,char$0(247),0],
_cr_=[0,char$0(215),_cq_],
_cs_=[0,rg(187,191),_cr_],
_ct_=[0,rg(182,185),_cs_],
_cu_=[0,rg(171,180),_ct_],
_cv_=[0,rg(160,169),_cu_],
_cw_=[0,rg(123,126),_cv_],
_cx_=[0,rg(91,96),_cw_],
_cy_=[0,rg(58,64),_cx_],
punct=alt$0([0,rg(33,47),_cy_]),
_cz_=[0,rg(9,13),0],
space=alt$0([0,char$0(32),_cz_]),
_cA_=[0,rg(65,70),0],
xdigit=alt$0([0,digit,[0,rg(97,102),_cA_]]);
function case$0(r){return [9,r]}
function no_case(r){return [10,r]}
function compile(r$0)
{var
_fC_=
anchored(r$0)?[6,r$0]:seq$1([0,shortest(rep$0(any)),[0,[6,r$0],0]]),
regexp=handle_case(0,_fC_),
c=make(0),
lnl=[0,0];
function colorize(regexp)
{var regexp$0=regexp;
for(;;)
{if(typeof regexp$0 === "number")
switch(regexp$0)
{case 7:lnl[1] = 1;return 0;
case 0:
case 1:return split(csingle(10),c);
case 2:
case 3:
case 4:return split(cword,c);
default:return 0}
else
switch(regexp$0[0])
{case 0:var s=regexp$0[1];return split(s,c);
case 1:
var l=regexp$0[1];return caml_call2(Stdlib_List[17],colorize,l);
case 2:
var l$0=regexp$0[1];
return caml_call2(Stdlib_List[17],colorize,l$0);
case 3:var regexp$1=regexp$0[1],regexp$0=regexp$1;continue;
case 4:
case 5:
case 14:var regexp$2=regexp$0[2];break;
case 6:
case 7:
case 8:var regexp$2=regexp$0[1];break;
default:throw [0,Assert_failure,_cd_]}
var regexp$0=regexp$2;
continue}}
colorize(regexp);
var
_fB_=lnl[1],
match=flatten(c),
ncolor=match[3],
color_repr=match[2],
colors=match[1],
lnl$0=_fB_?ncolor:-1,
ncolor$0=_fB_?ncolor + 1 | 0:ncolor,
ids=create_ids(0),
pos=[0,0],
match$0=
translate
(ids,332064784,0,0,-904640576,pos,[0,CSetMap[1]],colors,regexp),
kind=match$0[2],
r=match$0[1],
initial=enforce_kind(ids,332064784,kind,r),
group_count=pos[1] / 2 | 0,
_fA_=caml_call1(_b7_[3][1],97);
return [0,
initial,
0,
colors,
color_repr,
ncolor$0,
lnl$0,
create_working_area(0),
_fA_,
group_count]}
function exec_internal(name,opt,_fw_,partial,groups,re,s)
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
if(_fw_)var sth$0=_fw_[1],len=sth$0;else var len=-1;
var _fx_=pos < 0?1:0;
if(_fx_)
var _fy_=_fx_;
else
var
_fz_=len < -1?1:0,
_fy_=_fz_ || (caml_ml_string_length(s) < (pos + len | 0)?1:0);
if(_fy_)caml_call1(Stdlib[1],name);
return match_str(groups,partial,re,s,pos,len)}
function exec(pos,len,re,s)
{var match=exec_internal(cst_Re_exec,pos,len,0,1,re,s);
if(typeof match === "number")throw Stdlib[8];
var substr=match[1];
return substr}
function exec_opt(pos,len,re,s)
{var match=exec_internal(cst_Re_exec_opt,pos,len,0,1,re,s);
if(typeof match === "number")return 0;
var substr=match[1];
return [0,substr]}
function execp(pos,len,re,s)
{var match=exec_internal(cst_Re_execp,pos,len,0,0,re,s);
return typeof match === "number"?0:1}
function exec_partial(pos,len,re,s)
{var match=exec_internal(cst_Re_exec_partial,pos,len,1,0,re,s);
return typeof match === "number"?match?939392865:-1062743954:782112175}
function marked(g,p){return caml_call2(Set[3],p,g[3])}
function mark_set(g){return g[3]}
function all_seq(opt,len,re,s)
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
if(pos < 0)caml_call1(Stdlib[1],cst_Re_all);
if(len)
{var
l=len[1],
_fs_=l < 0?1:0,
_ft_=_fs_ || (caml_ml_string_length(s) < (pos + l | 0)?1:0);
if(_ft_)caml_call1(Stdlib[1],cst_Re_all$0);
var limit=pos + l | 0}
else
var limit=caml_ml_string_length(s);
function aux(pos,param)
{if(limit <= pos)return 0;
var match=match_str(1,0,re,s,pos,limit - pos | 0);
if(typeof match === "number")return 0;
var
substr=match[1],
match$0=caml_call2(Group[3],substr,0),
p2=match$0[2],
p1=match$0[1],
pos$0=p1 === p2?p2 + 1 | 0:p2;
return [0,substr,function(_fv_){return aux(pos$0,_fv_)}]}
return function(_fu_){return aux(pos,_fu_)}}
function matches_seq(pos,len,re,s)
{var _fq_=all_seq(pos,len,re,s);
function _fr_(sub){return caml_call2(Group[1],sub,0)}
return caml_call1(caml_call1(Stdlib_Seq[27],_fr_),_fq_)}
function split_full_seq(opt,len,re,s)
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
if(pos < 0)caml_call1(Stdlib[1],cst_Re_split);
if(len)
{var
l=len[1],
_ff_=l < 0?1:0,
_fg_=_ff_ || (caml_ml_string_length(s) < (pos + l | 0)?1:0);
if(_fg_)caml_call1(Stdlib[1],cst_Re_split$0);
var limit=pos + l | 0}
else
var limit=caml_ml_string_length(s);
function aux(state,i,pos$0,param)
{if(typeof state === "number")
{if(limit <= pos$0)
{if(i < limit)
{var
sub=caml_call3(Stdlib_String[15],s,i,limit - i | 0),
_fj_=i + 1 | 0;
return [0,
[0,936573133,sub],
function(_fp_){return aux(state,_fj_,pos$0,_fp_)}]}
return 0}
var match=match_str(1,0,re,s,pos$0,limit - pos$0 | 0);
if(typeof match === "number")
{if(match)return 0;
if(i < limit)
{var text=caml_call3(Stdlib_String[15],s,i,limit - i | 0);
return [0,
[0,936573133,text],
function(_fo_){return aux(state,limit,pos$0,_fo_)}]}
return 0}
var
substr=match[1],
match$0=caml_call2(Group[3],substr,0),
p2=match$0[2],
p1=match$0[1],
pos$1=p1 === p2?p2 + 1 | 0:p2;
if(pos < p1)
{var
text$0=caml_call3(Stdlib_String[15],s,i,p1 - i | 0),
state$0=[0,73271853,[0,-363573681,substr]];
return [0,
[0,936573133,text$0],
function(_fn_){return aux(state$0,p2,pos$1,_fn_)}]}
return [0,
[0,-363573681,substr],
function(_fm_){return aux(state,p2,pos$1,_fm_)}]}
var x=state[2],_fk_=814535476;
return [0,x,function(_fl_){return aux(_fk_,i,pos$0,_fl_)}]}
var _fh_=814535476;
return function(_fi_){return aux(_fh_,pos,pos,_fi_)}}
function split_seq(pos,len,re,s)
{var seq=split_full_seq(pos,len,re,s);
function filter(seq,param)
{var seq$0=seq;
for(;;)
{var match=caml_call1(seq$0,0);
if(match)
{var _fd_=match[1];
if(936573133 <= _fd_[1])
{var tl=match[2],s=_fd_[2];
return [0,s,function(_fe_){return filter(tl,_fe_)}]}
var seq$1=match[2],seq$0=seq$1;
continue}
return 0}}
return function(_fc_){return filter(seq,_fc_)}}
function list_of_seq(s)
{var _e$_=0;
function _fa_(l,x){return [0,x,l]}
var _fb_=caml_call3(Stdlib_Seq[5],_fa_,_e$_,s);
return caml_call1(Stdlib_List[9],_fb_)}
function all$0(pos,len,re,s){return list_of_seq(all_seq(pos,len,re,s))}
function matches(pos,len,re,s)
{return list_of_seq(matches_seq(pos,len,re,s))}
function split_full(pos,len,re,s)
{return list_of_seq(split_full_seq(pos,len,re,s))}
function split$0(pos,len,re,s)
{return list_of_seq(split_seq(pos,len,re,s))}
function gen_of_seq(s)
{var r=[0,s];
return function(param)
{var match=caml_call1(r[1],0);
if(match){var tl=match[2],x=match[1];r[1] = tl;return [0,x]}
return 0}}
function split_gen(pos,len,re,s)
{return gen_of_seq(split_seq(pos,len,re,s))}
function split_full_gen(pos,len,re,s)
{return gen_of_seq(split_full_seq(pos,len,re,s))}
function all_gen(pos,len,re,s){return gen_of_seq(all_seq(pos,len,re,s))}
function matches_gen(pos,len,re,s)
{return gen_of_seq(matches_seq(pos,len,re,s))}
function replace(opt,len,_e7_,re,f,s)
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
if(_e7_)var sth$0=_e7_[1],all=sth$0;else var all=1;
if(pos < 0)caml_call1(Stdlib[1],cst_Re_replace);
if(len)
{var
l=len[1],
_e8_=l < 0?1:0,
_e9_=_e8_ || (caml_ml_string_length(s) < (pos + l | 0)?1:0);
if(_e9_)caml_call1(Stdlib[1],cst_Re_replace$0);
var limit=pos + l | 0}
else
var limit=caml_ml_string_length(s);
var buf=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(s)),pos$0=pos;
for(;;)
{if(pos$0 < limit)
{var match=match_str(1,0,re,s,pos$0,limit - pos$0 | 0);
if(typeof match === "number")
{if(! match)
caml_call4(Stdlib_Buffer[18],buf,s,pos$0,limit - pos$0 | 0)}
else
{var
substr=match[1],
match$0=caml_call2(Group[3],substr,0),
p2=match$0[2],
p1=match$0[1];
caml_call4(Stdlib_Buffer[18],buf,s,pos$0,p1 - pos$0 | 0);
var replacing=caml_call1(f,substr);
caml_call2(Stdlib_Buffer[16],buf,replacing);
if(all)
{if(p1 === p2)
{if(p2 < limit)
{var _e__=caml_string_get(s,p2);
caml_call2(Stdlib_Buffer[12],buf,_e__)}
var pos$1=p2 + 1 | 0}
else
var pos$1=p2;
var pos$0=pos$1;
continue}
caml_call4(Stdlib_Buffer[18],buf,s,p2,limit - p2 | 0)}}
return caml_call1(Stdlib_Buffer[2],buf)}}
function replace_string(pos,len,all,re,by,s)
{return replace(pos,len,all,re,function(param){return by},s)}
function witness(t)
{function witness(param)
{var param$0=param;
for(;;)
{if(typeof param$0 === "number")
return cst$1;
else
switch(param$0[0])
{case 0:
var
c=param$0[1],
_e1_=pick(c),
_e2_=caml_call1(Stdlib_Char[1],_e1_);
return caml_call2(Stdlib_String[1],1,_e2_);
case 1:
var xs=param$0[1],_e3_=caml_call2(Stdlib_List[19],witness,xs);
return caml_call2(Stdlib_String[6],cst$2,_e3_);
case 2:
var _e4_=param$0[1];
if(_e4_){var param$1=_e4_[1],param$0=param$1;continue}
throw [0,Assert_failure,_cB_];
case 3:
var
from=param$0[2],
r=param$0[1],
w=witness(r),
b=
caml_call1
(Stdlib_Buffer[1],
runtime.caml_mul(caml_ml_string_length(w),from)),
_e5_=1;
if(! (from < 1))
{var i=_e5_;
for(;;)
{caml_call2(Stdlib_Buffer[16],b,w);
var _e6_=i + 1 | 0;
if(from !== i){var i=_e6_;continue}
break}}
return caml_call1(Stdlib_Buffer[2],b);
case 10:var param$3=param$0[1],param$0=param$3;continue;
case 4:
case 5:
case 14:var param$2=param$0[2];break;
case 11:
case 12:
case 13:throw [0,Assert_failure,_cC_];
default:var param$2=param$0[1]}
var param$0=param$2;
continue}}
return witness(handle_case(0,t))}
var
get$0=Group[1],
get_ofs=Group[3],
get_all=Group[6],
get_all_ofs=Group[7],
test$0=Group[8],
Seq=[0,all_seq,matches_seq,split_seq,split_full_seq],
Mark=[0,marked,Set,mark_set,equal$0,compare$1],
include$0=
[0,
Group,
compile,
exec,
exec_opt,
execp,
exec_partial,
Mark,
all$0,
all_gen,
all_seq,
matches,
matches_gen,
matches_seq,
split$0,
split_gen,
split_seq,
split_full,
split_full_gen,
split_full_seq,
Seq,
replace,
replace_string,
str,
char$0,
alt$0,
seq$1,
empty$2,
epsilon,
rep$0,
rep1,
repn,
opt,
bol,
eol,
bow,
eow,
bos,
eos,
leol,
start$0,
stop$0,
word,
not_boundary,
whole_string,
longest,
shortest,
first$0,
greedy,
non_greedy,
group,
no_group,
nest,
mark$0,
set,
rg,
inter$0,
diff$0,
compl,
any,
notnl,
alnum,
wordc,
alpha,
ascii,
blank,
cntrl,
digit,
graph,
lower,
print,
punct,
space,
upper,
xdigit,
case$0,
no_case,
pp$5,
print_re,
print_re,
View,
witness,
get$0,
get_ofs,
get_all,
get_all_ofs,
test$0,
marked,
mark_set];
caml_register_global(159,include$0,"Re__Core");
var
Parse_error=[248,cst_Re_Emacs_Parse_error,caml_fresh_oo_id(0)],
Not_supported=[248,cst_Re_Emacs_Not_supported,caml_fresh_oo_id(0)];
function re(opt$0,s)
{if(opt$0)var sth=opt$0[1],case$0=sth;else var case$0=1;
var i=[0,0],l=caml_ml_string_length(s);
function eos$0(param){return i[1] === l?1:0}
function test2(c$0,c)
{var _eY_=(i[1] + 1 | 0) < l?1:0;
if(_eY_)
var
_eZ_=caml_string_get(s,i[1]) === c$0?1:0,
_e0_=_eZ_?caml_string_get(s,i[1] + 1 | 0) === c?1:0:_eZ_;
else
var _e0_=_eY_;
return _e0_}
function accept(c)
{var
_eW_=1 - eos$0(0),
_eX_=_eW_?caml_string_get(s,i[1]) === c?1:0:_eW_;
if(_eX_)i[1]++;
return _eX_}
function accept2(c$0,c)
{var r=test2(c$0,c);if(r)i[1] = i[1] + 2 | 0;return r}
function get(param){var r=caml_string_get(s,i[1]);i[1]++;return r}
function char$1(param){if(eos$0(0))throw Parse_error;return get(0)}
function bracket(s)
{var s$0=s;
for(;;)
{if(0 !== s$0 && accept(93))return s$0;
var c=char$1(0);
if(accept(45))
{if(accept(93))
{var _eV_=[0,char$0(45),s$0];return [0,char$0(c),_eV_]}
var c$0=char$1(0),s$1=[0,rg(c,c$0),s$0],s$0=s$1;
continue}
var s$2=[0,char$0(c),s$0],s$0=s$2;
continue}}
function branch(param)
{var left=0;
for(;;)
{if(! eos$0(0) && ! test2(92,124) && ! test2(92,41))
{if(accept(46))
var r=notnl;
else
if(accept(94))
var r=bol;
else
if(accept(36))
var r=eol;
else
if(accept(91))
var r=accept(94)?compl(bracket(0)):alt$0(bracket(0));
else
if(accept(92))
if(accept(40))
{var r$0=regexp(0);
if(1 - accept2(92,41))throw Parse_error;
var r=[6,r$0]}
else
if(accept(96))
var r=bos;
else
if(accept(39))
var r=eos;
else
if(accept(61))
var r=start$0;
else
if(accept(98))
var r=alt$0([0,bow,[0,eow,0]]);
else
if(accept(66))
var r=not_boundary;
else
if(accept(60))
var r=bow;
else
if(accept(62))
var r=eow;
else
if(accept(119))
var r=alt$0([0,alnum,[0,char$0(95),0]]);
else
if(accept(87))
var r=compl([0,alnum,[0,char$0(95),0]]);
else
{if(eos$0(0))throw Parse_error;
var c=get(0),switch$0=0;
if(63 <= c)
{if(91 <= c)
{if(! (95 <= c))switch$0 = 1}
else
if(! (64 <= c))switch$0 = 1}
else
if(48 <= c)
{if(! (58 <= c))throw Not_supported}
else
if(36 <= c)
switch(c - 36 | 0)
{case 0:case 6:case 7:case 10:switch$0 = 1;break}
if(! switch$0)throw Parse_error;
var r=char$0(c)}
else
{if(eos$0(0))throw Parse_error;
var c$0=get(0),switch$1=0;
if(44 <= c$0)
{if(63 === c$0)switch$1 = 1}
else
if(42 <= c$0)switch$1 = 1;
if(switch$1)throw Parse_error;
var r=char$0(c$0)}
var
_eU_=accept(42)?rep$0(r):accept(43)?rep1(r):accept(63)?opt(r):r,
left$0=[0,_eU_,left],
left=left$0;
continue}
return seq$1(caml_call1(Stdlib_List[9],left))}}
function regexp(param)
{var left=branch(0),left$0=left;
for(;;)
{if(accept2(92,124))
{var left$1=alt$0([0,left$0,[0,branch(0),0]]),left$0=left$1;
continue}
return left$0}}
var r=regexp(0);
if(1 - eos$0(0))throw Parse_error;
return case$0?r:[10,r]}
function compile_pat(opt,s)
{if(opt)var sth=opt[1],case$0=sth;else var case$0=1;
return compile(re([0,case$0],s))}
var Re_Emacs=[0,Parse_error,Not_supported,re,compile,compile_pat];
caml_register_global(160,Re_Emacs,"Re__Emacs");
function compile_regexp(s,c)
{var
re$0=re([0,1 - c],s),
_eR_=[246,function(_eT_){return compile(re$0)}];
return [0,
re$0,
[246,
function(_eS_){return compile(seq$1([0,start$0,[0,re$0,0]]))}],
_eR_]}
var state=[0,0];
function string_match(re,s,p)
{try
{var
_eM_=re[2],
_eN_=caml_obj_tag(_eM_),
_eO_=
250 === _eN_
?_eM_[1]
:246 === _eN_?caml_call1(CamlinternalLazy[2],_eM_):_eM_;
state[1] = [0,exec([0,p],0,_eO_,s)];
var _eP_=1;
return _eP_}
catch(_eQ_)
{_eQ_ = caml_wrap_exception(_eQ_);
if(_eQ_ === Stdlib[8]){state[1] = 0;return 0}
throw _eQ_}}
function string_partial_match(re,s,p)
{var
_eJ_=re[2],
_eK_=caml_obj_tag(_eJ_),
_eL_=
250 === _eK_
?_eJ_[1]
:246 === _eK_?caml_call1(CamlinternalLazy[2],_eJ_):_eJ_,
match=exec_partial([0,p],0,_eL_,s);
return 782112175 === match?string_match(re,s,p):939392865 <= match?1:0}
function search_forward(re,s,p)
{try
{var
_eE_=re[3],
_eF_=caml_obj_tag(_eE_),
_eG_=
250 === _eF_
?_eE_[1]
:246 === _eF_?caml_call1(CamlinternalLazy[2],_eE_):_eE_,
res=exec([0,p],0,_eG_,s);
state[1] = [0,res];
var _eH_=caml_call2(Group[3],res,0)[1];
return _eH_}
catch(_eI_)
{_eI_ = caml_wrap_exception(_eI_);
if(_eI_ === Stdlib[8]){state[1] = 0;throw Stdlib[8]}
throw _eI_}}
function search_backward(re,s,p)
{var p$0=p;
for(;;)
try
{var
_eA_=re[2],
_eB_=caml_obj_tag(_eA_),
_eC_=
250 === _eB_
?_eA_[1]
:246 === _eB_?caml_call1(CamlinternalLazy[2],_eA_):_eA_,
res=exec([0,p$0],0,_eC_,s);
state[1] = [0,res];
return p$0}
catch(_eD_)
{_eD_ = caml_wrap_exception(_eD_);
if(_eD_ === Stdlib[8])
{state[1] = 0;
if(0 === p$0)throw Stdlib[8];
var p$1=p$0 - 1 | 0,p$0=p$1;
continue}
throw _eD_}}
function valid_group(n)
{var _ew_=0 <= n?1:0;
if(_ew_)
{var _ex_=n < 10?1:0;
if(_ex_)
{var _ey_=state[1];
if(_ey_){var m=_ey_[1];return n < caml_call1(Group[9],m)?1:0}
var _ez_=0}
else
var _ez_=_ex_}
else
var _ez_=_ew_;
return _ez_}
function offset_group(i)
{var _ev_=state[1];
if(_ev_){var m=_ev_[1];return caml_call2(Group[3],m,i)}
throw Stdlib[8]}
function group_len(i)
{try
{var match=offset_group(i),e=match[2],b=match[1],_et_=e - b | 0;
return _et_}
catch(_eu_)
{_eu_ = caml_wrap_exception(_eu_);
if(_eu_ === Stdlib[8])return 0;
throw _eu_}}
function replace$0(orig,repl,p,res,q,len)
{var p$0=p,q$0=q;
for(;;)
{var _eq_=p$0 < len?1:0;
if(_eq_)
{var c=caml_string_get(repl,p$0);
if(92 === c)
{var c$0=caml_string_get(repl,p$0 + 1 | 0);
if(58 <= c$0)
{if(92 === c$0)
{caml_bytes_set(res,q$0,92);
var q$1=q$0 + 1 | 0,p$1=p$0 + 2 | 0,p$0=p$1,q$0=q$1;
continue}}
else
if(48 <= c$0)
{try
{var
match=offset_group(c$0 - 48 | 0),
e=match[2],
b=match[1],
d$0=e - b | 0;
if(0 < d$0)caml_call5(Stdlib_String[48],orig,b,res,q$0,d$0);
var d=d$0}
catch(_es_)
{_es_ = caml_wrap_exception(_es_);
if(_es_ !== Stdlib[8])throw _es_;
var d=0,_er_=_es_}
var q$3=q$0 + d | 0,p$3=p$0 + 2 | 0,p$0=p$3,q$0=q$3;
continue}
caml_bytes_set(res,q$0,92);
caml_bytes_set(res,q$0 + 1 | 0,c$0);
var q$2=q$0 + 2 | 0,p$2=p$0 + 2 | 0,p$0=p$2,q$0=q$2;
continue}
caml_bytes_set(res,q$0,c);
var q$4=q$0 + 1 | 0,p$4=p$0 + 1 | 0,p$0=p$4,q$0=q$4;
continue}
return _eq_}}
function replacement_text(repl,orig)
{var len=caml_ml_string_length(repl),p=0,q=0;
for(;;)
{if(p < len)
{if(92 === caml_string_get(repl,p))
{var p$0=p + 1 | 0;
if(p$0 === len)
caml_call1(Stdlib[2],cst_Str_replace_illegal_backsl);
var c=caml_string_get(repl,p$0),switch$0=0;
if(58 <= c)
if(92 === c)var q$0=q + 1 | 0;else switch$0 = 1;
else
if(48 <= c)
var q$0=q + group_len(c - 48 | 0) | 0;
else
switch$0 = 1;
if(switch$0)var q$0=q + 2 | 0;
var p$1=p$0 + 1 | 0,p=p$1,q=q$0;
continue}
var q$1=q + 1 | 0,p$2=p + 1 | 0,p=p$2,q=q$1;
continue}
var res=caml_create_bytes(q);
replace$0(orig,repl,0,res,0,caml_ml_string_length(repl));
return caml_call1(Stdlib_Bytes[48],res)}}
function quote$0(s)
{var
len=caml_ml_string_length(s),
buf=caml_call1(Stdlib_Buffer[1],2 * len | 0),
_em_=len - 1 | 0,
_el_=0;
if(! (_em_ < 0))
{var i=_el_;
for(;;)
{var c=caml_string_get(s,i),_en_=c - 63 | 0,switch$0=0;
if(31 < _en_ >>> 0)
{var _eo_=_en_ + 27 | 0;
if(! (10 < _eo_ >>> 0))
switch(_eo_){case 0:case 6:case 7:case 10:switch$0 = 1;break}}
else
if(26 < _en_ - 1 >>> 0)switch$0 = 1;
if(switch$0)
{caml_call2(Stdlib_Buffer[12],buf,92);
caml_call2(Stdlib_Buffer[12],buf,c)}
else
caml_call2(Stdlib_Buffer[12],buf,c);
var _ep_=i + 1 | 0;
if(_em_ !== i){var i=_ep_;continue}
break}}
return caml_call1(Stdlib_Buffer[2],buf)}
function string_before(s,n){return caml_call3(Stdlib_String[15],s,0,n)}
function string_after(s,n)
{return caml_call3
(Stdlib_String[15],s,n,caml_ml_string_length(s) - n | 0)}
function first_chars(s,n){return caml_call3(Stdlib_String[15],s,0,n)}
function last_chars(s,n)
{return caml_call3
(Stdlib_String[15],s,caml_ml_string_length(s) - n | 0,n)}
function regexp(e){return compile_regexp(e,0)}
function regexp_case_fold(e){return compile_regexp(e,1)}
function regexp_string(s){return compile_regexp(quote$0(s),0)}
function regexp_string_case_fold(s){return compile_regexp(quote$0(s),1)}
function group_beginning(n)
{if(1 - valid_group(n))caml_call1(Stdlib[1],cst_Str_group_beginning);
var pos=offset_group(n)[1];
if(-1 === pos)throw Stdlib[8];
return pos}
function group_end(n)
{if(1 - valid_group(n))caml_call1(Stdlib[1],cst_Str_group_end);
var pos=offset_group(n)[2];
if(-1 === pos)throw Stdlib[8];
return pos}
function matched_group(n,txt)
{var match=offset_group(n),e=match[2],b=match[1];
return caml_call3(Stdlib_String[15],txt,b,e - b | 0)}
function replace_matched(repl,matched)
{return replacement_text(repl,matched)}
function match_beginning(param){return group_beginning(0)}
function match_end(param){return group_end(0)}
function matched_string(txt){return matched_group(0,txt)}
function substitute_first(expr,repl_fun,text)
{try
{var
pos=search_forward(expr,text,0),
_eg_=[0,string_after(text,match_end(0)),0],
_eh_=[0,caml_call1(repl_fun,text),_eg_],
_ei_=[0,string_before(text,pos),_eh_],
_ej_=caml_call2(Stdlib_String[6],cst$3,_ei_);
return _ej_}
catch(_ek_)
{_ek_ = caml_wrap_exception(_ek_);
if(_ek_ === Stdlib[8])return text;
throw _ek_}}
function global_substitute(expr,repl_fun,text)
{function replace(accu,start,last_was_empty)
{var accu$0=accu,start$0=start,last_was_empty$0=last_was_empty;
for(;;)
{var startpos=last_was_empty$0?start$0 + 1 | 0:start$0;
if(caml_ml_string_length(text) < startpos)
return [0,string_after(text,start$0),accu$0];
try
{var pos=search_forward(expr,text,startpos)}
catch(_ef_)
{_ef_ = caml_wrap_exception(_ef_);
if(_ef_ === Stdlib[8])
return [0,string_after(text,start$0),accu$0];
throw _ef_;
var _ee_=_ef_}
var
start$1=match_end(0),
repl_text=caml_call1(repl_fun,text),
last_was_empty$1=start$1 === pos?1:0,
accu$1=
[0,
repl_text,
[0,
caml_call3(Stdlib_String[15],text,start$0,pos - start$0 | 0),
accu$0]],
accu$0=accu$1,
start$0=start$1,
last_was_empty$0=last_was_empty$1;
continue}}
var _ec_=replace(0,0,0),_ed_=caml_call1(Stdlib_List[9],_ec_);
return caml_call2(Stdlib_String[6],cst$4,_ed_)}
function global_replace(expr,repl,text)
{return global_substitute
(expr,function(_eb_){return replacement_text(repl,_eb_)},text)}
function replace_first(expr,repl,text)
{return substitute_first
(expr,function(_ea_){return replacement_text(repl,_ea_)},text)}
function search_forward_progress(re,s,p)
{var pos=search_forward(re,s,p);
if(p < match_end(0))return pos;
if(p < caml_ml_string_length(s))return search_forward(re,s,p + 1 | 0);
throw Stdlib[8]}
function bounded_split(expr,text,num)
{var start=string_match(expr,text,0)?match_end(0):0;
function split(accu,start,n)
{if(caml_ml_string_length(text) <= start)return accu;
if(1 === n)return [0,string_after(text,start),accu];
try
{var
pos=search_forward_progress(expr,text,start),
_d9_=match_end(0),
_d__=
split
([0,
caml_call3(Stdlib_String[15],text,start,pos - start | 0),
accu],
_d9_,
n - 1 | 0);
return _d__}
catch(_d$_)
{_d$_ = caml_wrap_exception(_d$_);
if(_d$_ === Stdlib[8])return [0,string_after(text,start),accu];
throw _d$_}}
var _d8_=split(0,start,num);
return caml_call1(Stdlib_List[9],_d8_)}
function split$1(expr,text){return bounded_split(expr,text,0)}
function bounded_split_delim(expr,text,num)
{function split(accu,start,n)
{if(caml_ml_string_length(text) < start)return accu;
if(1 === n)return [0,string_after(text,start),accu];
try
{var
pos=search_forward_progress(expr,text,start),
_d5_=match_end(0),
_d6_=
split
([0,
caml_call3(Stdlib_String[15],text,start,pos - start | 0),
accu],
_d5_,
n - 1 | 0);
return _d6_}
catch(_d7_)
{_d7_ = caml_wrap_exception(_d7_);
if(_d7_ === Stdlib[8])return [0,string_after(text,start),accu];
throw _d7_}}
if(runtime.caml_string_equal(text,cst$5))return 0;
var _d4_=split(0,0,num);
return caml_call1(Stdlib_List[9],_d4_)}
function split_delim(expr,text){return bounded_split_delim(expr,text,0)}
function bounded_full_split(expr,text,num)
{function split(accu,start,n)
{if(caml_ml_string_length(text) <= start)return accu;
if(1 === n)return [0,[0,string_after(text,start)],accu];
try
{var
pos=search_forward_progress(expr,text,start),
s=matched_string(text);
if(start < pos)
var
_d1_=match_end(0),
_d2_=
split
([0,
[1,s],
[0,
[0,caml_call3(Stdlib_String[15],text,start,pos - start | 0)],
accu]],
_d1_,
n - 1 | 0);
else
var _d2_=split([0,[1,s],accu],match_end(0),n - 1 | 0);
return _d2_}
catch(_d3_)
{_d3_ = caml_wrap_exception(_d3_);
if(_d3_ === Stdlib[8])return [0,[0,string_after(text,start)],accu];
throw _d3_}}
var _d0_=split(0,0,num);
return caml_call1(Stdlib_List[9],_d0_)}
function full_split(expr,text){return bounded_full_split(expr,text,0)}
var
Re_Str=
[0,
regexp,
regexp_case_fold,
quote$0,
regexp_string,
regexp_string_case_fold,
string_match,
search_forward,
search_backward,
string_partial_match,
matched_string,
match_beginning,
match_end,
matched_group,
group_beginning,
group_end,
global_replace,
replace_first,
global_substitute,
substitute_first,
replace_matched,
split$1,
bounded_split,
split_delim,
bounded_split_delim,
full_split,
bounded_full_split,
string_before,
string_after,
first_chars,
last_chars];
caml_register_global(162,Re_Str,"Re__Str");
var Parse_error$0=[248,cst_Re_Glob_Parse_error,caml_fresh_oo_id(0)];
function mul(l$0,l)
{function _dX_(s)
{function _dZ_(s$0){return caml_call2(Stdlib[28],s,s$0)}
return caml_call2(Stdlib_List[19],_dZ_,l)}
var _dY_=caml_call2(Stdlib_List[19],_dX_,l$0);
return caml_call1(Stdlib_List[14],_dY_)}
function explicit_period(t)
{var _dT_=t[7];
if(_dT_)
{var _dU_=t[3];
if(_dU_)var _dV_=_dU_;else var _dW_=t[4],_dV_=_dW_?t[5]:_dW_}
else
var _dV_=_dT_;
return _dV_}
function slashes(t){return t[6]?_cG_:_cH_}
function append(opt,t,piece)
{if(opt)
var sth=opt[1],am_at_start_of_component=sth;
else
var am_at_start_of_component=0;
return [0,[0,piece,t[1]],t[2],0,am_at_start_of_component,t[5],t[6],t[7]]}
function next(t)
{var _dS_=t[2];
if(_dS_)
{var remaining=_dS_[2],piece=_dS_[1];
return [0,[0,piece,[0,t[1],remaining,t[3],t[4],t[5],t[6],t[7]]]]}
return 0}
function one(explicit_slash,slashes,explicit_period)
{var
_dO_=0,
_dP_=explicit_period?[0,char$0(46),0]:0,
_dQ_=[0,_dP_,_dO_],
_dR_=explicit_slash?caml_call2(Stdlib_List[19],char$0,slashes):0;
return compl(caml_call1(Stdlib_List[13],[0,_dR_,_dQ_]))}
function enclosed(enclosed)
{if(0 === enclosed[0]){var c=enclosed[1];return char$0(c)}
var high=enclosed[2],low=enclosed[1];
return rg(low,high)}
function enclosed_set(explicit_slash,slashes,explicit_period,kind,set)
{var
set$0=caml_call2(Stdlib_List[19],enclosed,set),
enclosure=596216810 <= kind?alt$0(set$0):compl(set$0);
return inter$0
([0,enclosure,[0,one(explicit_slash,slashes,explicit_period),0]])}
function exactly(state,c)
{var
slashes$0=slashes(state),
am_at_start_of_component=caml_call2(Stdlib_List[36],c,slashes$0),
chars=am_at_start_of_component?slashes$0:[0,c,0];
return append
([0,am_at_start_of_component],
state,
alt$0(caml_call2(Stdlib_List[19],char$0,chars)))}
function many_many(state)
{var
_dK_=state[7],
explicit_period$0=_dK_?state[5]:_dK_,
first_explicit_period=explicit_period(state),
slashes$0=slashes(state);
function match_component(explicit_period)
{var _dN_=[0,rep$0(one(1,slashes$0,0)),0];
return seq$1([0,one(1,slashes$0,explicit_period),_dN_])}
var
_dL_=[0,opt(match_component(explicit_period$0)),0],
_dM_=
[0,
rep$0
(seq$1([0,alt$0(caml_call2(Stdlib_List[19],char$0,slashes$0)),_dL_])),
0];
return append
(0,
state,
seq$1([0,opt(match_component(first_explicit_period)),_dM_]))}
function glob(opt$0,_dr_,_dq_,_dp_,_do_,_dn_,s)
{if(opt$0)var sth=opt$0[1],anchored=sth;else var anchored=0;
if(_dr_)var sth$0=_dr_[1],pathname=sth$0;else var pathname=1;
if(_dq_)
var sth$1=_dq_[1],match_backslashes=sth$1;
else
var match_backslashes=0;
if(_dp_)var sth$2=_dp_[1],period=sth$2;else var period=1;
if(_do_)var sth$3=_do_[1],expand_braces=sth$3;else var expand_braces=0;
if(_dn_)
var sth$4=_dn_[1],double_asterisk=sth$4;
else
var double_asterisk=1;
function to_re(s)
{var i=[0,0],l=caml_ml_string_length(s);
function eos(param){return i[1] === l?1:0}
function read(c)
{var _dJ_=1 - eos(0),r=_dJ_?caml_string_get(s,i[1]) === c?1:0:_dJ_;
if(r)i[1]++;
return r}
function read_ahead(pattern)
{var pattern_len=caml_ml_string_length(pattern);
if(l <= (i[1] + pattern_len | 0))return 0;
try
{var _dD_=pattern_len - 1 | 0,_dC_=0;
if(! (_dD_ < 0))
{var j=_dC_;
for(;;)
{var _dF_=1 - eos(0);
if(_dF_)
var
_dG_=caml_string_get(pattern,j),
found=caml_string_get(s,i[1] + j | 0) === _dG_?1:0;
else
var found=_dF_;
if(1 - found)throw Stdlib[3];
var _dH_=j + 1 | 0;
if(_dD_ !== j){var j=_dH_;continue}
break}}
i[1] = i[1] + pattern_len | 0;
var _dE_=1;
return _dE_}
catch(_dI_)
{_dI_ = caml_wrap_exception(_dI_);
if(_dI_ === Stdlib[3])return 0;
throw _dI_}}
function char$0(param)
{read(92);
if(eos(0))throw Parse_error$0;
var r=caml_string_get(s,i[1]);
i[1]++;
return r}
function enclosed(param)
{var s=0;
for(;;)
{if(0 !== s && read(93))return s;
var c=char$0(0);
if(read(45))
{if(read(93))return [0,[0,c],[0,_cD_,s]];
var c$0=char$0(0),s$0=[0,[1,c,c$0],s],s=s$0;
continue}
var s$1=[0,[0,c],s],s=s$1;
continue}}
var pieces=0;
for(;;)
{if(eos(0))
{var
glob=caml_call1(Stdlib_List[9],pieces),
state=[0,0,glob,1,1,pathname,match_backslashes,period],
state$8=state;
for(;;)
{var match$0=next(state$8);
if(match$0)
{var
match$1=match$0[1],
state$9=match$1[2],
p=match$1[1],
explicit_slash$0=state$9[5],
explicit_period$1=explicit_period(state$9),
slashes$1=slashes(state$9);
if(typeof p === "number")
switch(p)
{case 0:
var
state$10=
append
(0,
state$9,
one(explicit_slash$0,slashes$1,explicit_period$1));
break;
case 1:
var
explicit_slash=state$9[5],
explicit_period$0=explicit_period(state$9),
slashes$0=slashes(state$9);
if(explicit_period$0)
if(explicit_slash)
{var
_dv_=[0,rep$0(one(1,slashes$0,0)),0],
not_empty=seq$1([0,one(1,slashes$0,1),_dv_]),
maybe_empty=opt(not_empty),
enclosed_set$1=
function(slashes,not_empty)
{function enclosed_set$0(state,kind,set)
{var
_dB_=
[0,
seq$1
([0,not_empty,[0,enclosed_set(1,slashes,0,kind,set),0]]),
0];
return append
(0,state,alt$0([0,enclosed_set(1,slashes,1,kind,set),_dB_]))}
return enclosed_set$0},
enclosed_set$0=enclosed_set$1(slashes$0,not_empty),
state$0=state$9;
for(;;)
{var match=next(state$0);
if(match)
{var _dw_=match[1],_dx_=_dw_[1];
if(typeof _dx_ === "number")
switch(_dx_)
{case 0:
var state$1=_dw_[2],_dy_=append(0,state$1,not_empty);break;
case 1:var state$2=_dw_[2],state$0=state$2;continue;
default:var state$3=_dw_[2],_dy_=many_many(state$3)}
else
switch(_dx_[0])
{case 0:
var
state$4=_dw_[2],
c=_dx_[1],
not_empty$0=46 === c?not_empty:maybe_empty,
state$5=append(0,state$4,not_empty$0),
_dy_=exactly(state$5,c);
break;
case 1:
var
state$6=_dw_[2],
enclosed$0=_dx_[1],
_dy_=enclosed_set$0(state$6,596216810,enclosed$0);
break;
default:
var
state$7=_dw_[2],
enclosed$1=_dx_[1],
_dy_=enclosed_set$0(state$7,-188280562,enclosed$1)}}
else
var _dy_=append(0,state$0,maybe_empty);
var _dA_=_dy_;
break}}
else
var
_dz_=[0,rep$0(one(0,slashes$0,0)),0],
_dA_=
append
(0,
state$9,
opt(seq$1([0,one(0,slashes$0,explicit_period$0),_dz_])));
else
var
_dA_=
append
(0,
state$9,
rep$0(one(explicit_slash,slashes$0,explicit_period$0)));
var state$10=_dA_;
break;
default:var state$10=many_many(state$9)}
else
switch(p[0])
{case 0:var c$0=p[1],state$10=exactly(state$9,c$0);break;
case 1:
var
enclosed$2=p[1],
state$10=
append
(0,
state$9,
enclosed_set
(explicit_slash$0,
slashes$1,
explicit_period$1,
596216810,
enclosed$2));
break;
default:
var
enclosed$3=p[1],
state$10=
append
(0,
state$9,
enclosed_set
(explicit_slash$0,
slashes$1,
explicit_period$1,
-188280562,
enclosed$3))}
var state$8=state$10;
continue}
var re=seq$1(caml_call1(Stdlib_List[9],state$8[1]));
return anchored?whole_string(re):re}}
var switch$0=0;
if(double_asterisk && read_ahead(cst$6) && ! eos(0))
var _du_=2;
else
switch$0 = 1;
if(switch$0)
if(read(42))
{var switch$1=0;
if(double_asterisk && read(42))var _du_=2;else switch$1 = 1;
if(switch$1)var _du_=1}
else
if(read(63))
var _du_=0;
else
if(read(91))
{var switch$2=0;
if(read(94) || read(33))
switch$2 = 1;
else
var _du_=[1,enclosed(0)];
if(switch$2)var _du_=[2,enclosed(0)]}
else
var _du_=[0,char$0(0)];
var pieces$0=[0,_du_,pieces],pieces=pieces$0;
continue}}
if(expand_braces)
{var
l=caml_ml_string_length(s),
expl=
function(inner,s$0,i,acc,beg$0)
{var s$1=s$0,i$0=i,acc$0=acc,beg$1=beg$0;
for(;;)
{if(l <= i$0)
{if(inner)throw Parse_error$0;
return [0,
mul
(beg$1,
[0,caml_call3(Stdlib_String[15],s,s$1,i$0 - s$1 | 0),0]),
i$0]}
var match=caml_string_get(s,i$0);
if(44 === match)
{if(inner)
{var
_ds_=
mul
(beg$1,
[0,caml_call3(Stdlib_String[15],s,s$1,i$0 - s$1 | 0),0]),
acc$1=caml_call2(Stdlib[37],_ds_,acc$0),
i$1=i$0 + 1 | 0,
s$2=i$0 + 1 | 0,
s$1=s$2,
i$0=i$1,
acc$0=acc$1,
beg$1=beg;
continue}}
else
if(123 <= match)
{if(! (126 <= match))
switch(match - 123 | 0)
{case 0:
var
match$0=expl(1,i$0 + 1 | 0,i$0 + 1 | 0,0,_cE_),
i$3=match$0[2],
t=match$0[1],
beg$2=
mul
(beg$1,
mul
([0,caml_call3(Stdlib_String[15],s,s$1,i$0 - s$1 | 0),0],t)),
s$1=i$3,
i$0=i$3,
beg$1=beg$2;
continue;
case 1:break;
default:
if(inner)
{var
_dt_=
mul
(beg$1,
[0,caml_call3(Stdlib_String[15],s,s$1,i$0 - s$1 | 0),0]);
return [0,caml_call2(Stdlib[37],_dt_,acc$0),i$0 + 1 | 0]}}}
else
if(92 === match){var i$4=i$0 + 2 | 0,i$0=i$4;continue}
var i$2=i$0 + 1 | 0,i$0=i$2;
continue}},
_dl_=expl(0,0,0,0,_cF_)[1],
_dm_=caml_call1(Stdlib_List[9],_dl_);
return alt$0(caml_call2(Stdlib_List[19],to_re,_dm_))}
return to_re(s)}
function glob$0(anchored,period,s)
{return glob(anchored,0,0,[0,period],0,0,s)}
function globx(anchored,s){return glob(anchored,0,0,0,_cI_,0,s)}
function globx$0(anchored,period,s)
{return glob(anchored,0,0,[0,period],_cJ_,0,s)}
var Re_Glob=[0,Parse_error$0,glob,glob$0,globx,globx$0];
caml_register_global(163,Re_Glob,"Re__Glob");
var
Parse_error$1=[248,cst_Re_Perl_Parse_error,caml_fresh_oo_id(0)],
Not_supported$0=[248,cst_Re_Perl_Not_supported,caml_fresh_oo_id(0)];
function posix_class_of_string(class$0)
{var switch$0=runtime.caml_string_compare(class$0,cst_lower);
if(0 <= switch$0)
{if(! (0 < switch$0))return lower;
if(! caml_string_notequal(class$0,cst_print))return print;
if(! caml_string_notequal(class$0,cst_punct))return punct;
if(! caml_string_notequal(class$0,cst_space))return space;
if(! caml_string_notequal(class$0,cst_upper))return upper;
if(! caml_string_notequal(class$0,cst_word))return wordc;
if(! caml_string_notequal(class$0,cst_xdigit))return xdigit}
else
{if(! caml_string_notequal(class$0,cst_alnum))return alnum;
if(! caml_string_notequal(class$0,cst_alpha))return alpha;
if(! caml_string_notequal(class$0,cst_ascii))return ascii;
if(! caml_string_notequal(class$0,cst_blank))return blank;
if(! caml_string_notequal(class$0,cst_cntrl))return cntrl;
if(! caml_string_notequal(class$0,cst_digit))return digit;
if(! caml_string_notequal(class$0,cst_graph))return graph}
var _dk_=caml_call2(Stdlib[28],cst_Invalid_pcre_class,class$0);
return caml_call1(Stdlib[1],_dk_)}
function re$0(opt$0,s)
{if(opt$0)var sth=opt$0[1],opts=sth;else var opts=0;
var
ungreedy=caml_call2(Stdlib_List[37],-243745063,opts),
dotall=caml_call2(Stdlib_List[37],-424303016,opts),
dollar_endonly=caml_call2(Stdlib_List[37],-712595228,opts),
multiline=caml_call2(Stdlib_List[37],1071952589,opts),
i=[0,0],
l=caml_ml_string_length(s);
function eos$0(param){return i[1] === l?1:0}
function test(c)
{var
_di_=1 - eos$0(0),
_dj_=_di_?caml_string_get(s,i[1]) === c?1:0:_di_;
return _dj_}
function accept(c){var r=test(c);if(r)i[1]++;return r}
function accept_s(s$0)
{var len=caml_ml_string_length(s$0);
try
{var _dc_=len - 1 | 0,_db_=0;
if(! (_dc_ < 0))
{var j=_db_;
for(;;)
{try
{var _de_=caml_string_get(s,i[1] + j | 0);
if(caml_string_get(s$0,j) !== _de_)throw Stdlib[3]}
catch(_dh_){throw Stdlib[3]}
var _df_=j + 1 | 0;
if(_dc_ !== j){var j=_df_;continue}
break}}
i[1] = i[1] + len | 0;
var _dd_=1;
return _dd_}
catch(_dg_)
{_dg_ = caml_wrap_exception(_dg_);
if(_dg_ === Stdlib[3])return 0;
throw _dg_}}
function get(param){var r=caml_string_get(s,i[1]);i[1]++;return r}
function unget(param){i[1] += -1;return 0}
function greedy_mod(r)
{var gr=accept(63),gr$0=ungreedy?1 - gr:gr;
return gr$0?non_greedy(r):greedy(r)}
function integer(param)
{if(eos$0(0))return 0;
var d=get(0);
if(9 < d - 48 >>> 0){unget(0);return 0}
var i=d - 48 | 0,i$0=i;
for(;;)
{if(eos$0(0))return [0,i$0];
var d$0=get(0);
if(9 < d$0 - 48 >>> 0){unget(0);return [0,i$0]}
var i$1=(10 * i$0 | 0) + (d$0 - 48 | 0) | 0;
if(i$1 < i$0)throw Parse_error$1;
var i$0=i$1;
continue}}
function char$1(param)
{if(eos$0(0))throw Parse_error$1;
var c=get(0);
if(91 === c)
{if(accept(61))throw Not_supported$0;
if(accept(58))
{var compl$0=accept(94);
try
{var cls=caml_call2(Stdlib_List[38],accept_s,posix_class_strings)}
catch(_da_)
{_da_ = caml_wrap_exception(_da_);
if(_da_ === Stdlib[8])throw Parse_error$1;
throw _da_}
if(1 - accept_s(cst$7))throw Parse_error$1;
var
posix_class=posix_class_of_string(cls),
re=compl$0?compl([0,posix_class,0]):posix_class;
return [0,4150146,re]}
if(accept(46))
{if(eos$0(0))throw Parse_error$1;
var c$0=get(0);
if(1 - accept(46))throw Not_supported$0;
if(1 - accept(93))throw Parse_error$1;
return [0,748194550,c$0]}
return [0,748194550,c]}
if(92 === c)
{if(eos$0(0))throw Parse_error$1;
var c$1=get(0);
if(58 <= c$1)
{if(! (123 <= c$1))
switch(c$1 - 58 | 0)
{case 10:return [0,4150146,compl([0,digit,0])];
case 25:return [0,4150146,compl([0,space,0])];
case 29:return [0,4150146,compl([0,alnum,[0,char$0(95),0]])];
case 40:return _cK_;
case 42:return [0,4150146,digit];
case 52:return _cL_;
case 56:return _cM_;
case 57:return [0,4150146,space];
case 58:return _cN_;
case 61:return [0,4150146,alt$0([0,alnum,[0,char$0(95),0]])];
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 33:
case 34:
case 35:
case 36:
case 37:
case 38:break;
default:throw Parse_error$1}}
else
if(48 <= c$1)throw Not_supported$0;
return [0,748194550,c$1]}
return [0,748194550,c]}
function bracket(s)
{var s$0=s;
for(;;)
{if(0 !== s$0 && accept(93))return s$0;
var match=char$1(0);
if(748194550 <= match[1])
{var c=match[2];
if(accept(45))
{if(accept(93))
{var _c__=[0,char$0(45),s$0];return [0,char$0(c),_c__]}
var match$0=char$1(0);
if(748194550 <= match$0[1])
{var c$0=match$0[2],s$1=[0,rg(c,c$0),s$0],s$0=s$1;continue}
var
st=match$0[2],
_c$_=[0,char$0(45),[0,st,s$0]],
s$2=[0,char$0(c),_c$_],
s$0=s$2;
continue}
var s$3=[0,char$0(c),s$0],s$0=s$3;
continue}
var st$0=match[2],s$4=[0,st$0,s$0],s$0=s$4;
continue}}
function atom(param)
{if(accept(46))return dotall?any:notnl;
if(accept(40))
{if(accept(63))
{if(accept(58))
{var r=regexp(0);if(1 - accept(41))throw Parse_error$1;return r}
if(accept(35))
for(;;)
{if(eos$0(0))throw Parse_error$1;
if(accept(41))return epsilon;
i[1]++;
continue}
throw Parse_error$1}
var r$0=regexp(0);
if(1 - accept(41))throw Parse_error$1;
return [6,r$0]}
if(accept(94))return multiline?bol:bos;
if(accept(36))return multiline?eol:dollar_endonly?leol:eos;
if(accept(91))return accept(94)?compl(bracket(0)):alt$0(bracket(0));
if(accept(92))
{if(eos$0(0))throw Parse_error$1;
var c=get(0),switcher=c - 48 | 0;
if(! (74 < switcher >>> 0))
switch(switcher)
{case 17:return bos;
case 18:return not_boundary;
case 20:return compl([0,digit,0]);
case 23:return start$0;
case 35:return compl([0,space,0]);
case 39:return compl([0,alnum,[0,char$0(95),0]]);
case 42:return leol;
case 50:return alt$0([0,bow,[0,eow,0]]);
case 52:return digit;
case 67:return space;
case 71:return alt$0([0,alnum,[0,char$0(95),0]]);
case 74:return eos;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:throw Not_supported$0;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 43:
case 44:
case 45:
case 46:
case 47:
case 48:break;
default:throw Parse_error$1}
return char$0(c)}
if(eos$0(0))throw Parse_error$1;
var c$0=get(0),switch$0=0;
if(64 <= c$0)
{if(92 !== c$0 && 123 !== c$0)switch$0 = 1}
else
if(44 <= c$0)
{if(! (63 <= c$0))switch$0 = 1}
else
if(! (42 <= c$0))switch$0 = 1;
if(switch$0)return char$0(c$0);
throw Parse_error$1}
function branch(param)
{var left=0;
for(;;)
{if(! eos$0(0) && ! test(124) && ! test(41))
{var r=atom(0);
if(accept(42))
var _c9_=greedy_mod(rep$0(r));
else
if(accept(43))
var _c9_=greedy_mod(rep1(r));
else
if(accept(63))
var _c9_=greedy_mod(opt(r));
else
if(accept(123))
{var match=integer(0);
if(match)
{var i=match[1],j=accept(44)?integer(0):[0,i];
if(1 - accept(125))throw Parse_error$1;
if(j){var j$0=j[1];if(j$0 < i)throw Parse_error$1}
var _c9_=greedy_mod(repn(r,i,j))}
else
{unget(0);var _c9_=r}}
else
var _c9_=r;
var left$0=[0,_c9_,left],left=left$0;
continue}
return seq$1(caml_call1(Stdlib_List[9],left))}}
function regexp(param)
{var left=branch(0),left$0=left;
for(;;)
{if(accept(124))
{var left$1=alt$0([0,left$0,[0,branch(0),0]]),left$0=left$1;
continue}
return left$0}}
var r=regexp(0);
if(1 - eos$0(0))throw Parse_error$1;
var
r$0=
caml_call2(Stdlib_List[37],616470068,opts)
?seq$1([0,start$0,[0,r,0]])
:r,
r$1=caml_call2(Stdlib_List[37],604571177,opts)?[10,r$0]:r$0;
return r$1}
function compile_pat$0(opt,s)
{if(opt)var sth=opt[1],opts=sth;else var opts=0;
return compile(re$0([0,opts],s))}
var Re_Perl=[0,Parse_error$1,Not_supported$0,re$0,compile,compile_pat$0];
caml_register_global(164,Re_Perl,"Re__Perl");
function re$1(opt,pat)
{if(opt)var sth=opt[1],flags=sth;else var flags=0;
function _c8_(param)
{return 601676297 === param
?604571177
:613575188 <= param?616470068:1071952589}
var opts=caml_call2(Stdlib_List[19],_c8_,flags);
return re$0([0,opts],pat)}
function regexp$0(flags,pat){return compile(re$1(flags,pat))}
function extract(rex,s)
{var _c7_=exec(0,0,rex,s);return caml_call1(Group[6],_c7_)}
function exec$0(rex,pos,s){return exec(pos,0,rex,s)}
function get_substring(s,i){return caml_call2(Group[1],s,i)}
function get_substring_ofs(s,i){return caml_call2(Group[3],s,i)}
function pmatch(rex,s){return execp(0,0,rex,s)}
function substitute(rex,subst,str)
{var b=caml_call1(Stdlib_Buffer[1],1024),pos=0;
for(;;)
{if(caml_ml_string_length(str) <= pos)
return caml_call1(Stdlib_Buffer[2],b);
if(execp([0,pos],0,rex,str))
{var
ss=exec([0,pos],0,rex,str),
match=caml_call2(Group[3],ss,0),
fin=match[2],
start=match[1],
pat=caml_call2(Group[1],ss,0);
caml_call4(Stdlib_Buffer[18],b,str,pos,start - pos | 0);
var _c6_=caml_call1(subst,pat);
caml_call2(Stdlib_Buffer[16],b,_c6_);
var pos=fin;
continue}
caml_call4
(Stdlib_Buffer[18],b,str,pos,caml_ml_string_length(str) - pos | 0);
var pos$0=caml_ml_string_length(str),pos=pos$0;
continue}}
function split$2(rex,str)
{var accu=0,pos=0;
for(;;)
{if(caml_ml_string_length(str) <= pos)
return caml_call1(Stdlib_List[9],accu);
if(execp([0,pos],0,rex,str))
{var
ss=exec([0,pos],0,rex,str),
match=caml_call2(Group[3],ss,0),
fin=match[2],
start=match[1],
s=caml_call3(Stdlib_String[15],str,pos,start - pos | 0),
accu$0=[0,s,accu],
accu=accu$0,
pos=fin;
continue}
var
s$0=
caml_call3
(Stdlib_String[15],str,pos,caml_ml_string_length(str) - pos | 0),
pos$0=caml_ml_string_length(str),
accu$1=[0,s$0,accu],
accu=accu$1,
pos=pos$0;
continue}}
function quote$1(s)
{var
len=caml_ml_string_length(s),
s$0=caml_create_bytes(len << 1),
pos=[0,0],
_c2_=len - 1 | 0,
_c1_=0;
if(! (_c2_ < 0))
{var i=_c1_;
for(;;)
{var c=runtime.caml_string_unsafe_get(s,i),switch$0=0;
if(91 <= c)
{var _c4_=c - 93 | 0;
if(29 < _c4_ >>> 0)
{if(! (32 <= _c4_))switch$0 = 1}
else
if(1 === _c4_)switch$0 = 1}
else
if(47 <= c)
{if(63 === c)switch$0 = 1}
else
if(36 <= c)
switch(c - 36 | 0)
{case 1:case 2:case 3:case 8:case 9:break;default:switch$0 = 1}
if(switch$0)
{caml_bytes_unsafe_set(s$0,pos[1],92);
pos[1]++;
caml_bytes_unsafe_set(s$0,pos[1],c);
pos[1]++}
else
{caml_bytes_unsafe_set(s$0,pos[1],c);pos[1]++}
var _c5_=i + 1 | 0;
if(_c2_ !== i){var i=_c5_;continue}
break}}
var _c3_=pos[1],r=caml_create_bytes(_c3_);
runtime.caml_blit_bytes(s$0,0,r,0,_c3_);
return caml_call1(Stdlib_Bytes[48],r)}
function full_split$0(opt,rex,s)
{if(opt)var sth=opt[1],max=sth;else var max=0;
if(0 === caml_ml_string_length(s))return 0;
if(1 === max)return [0,[0,s],0];
var results=split_full(0,0,rex,s);
function _cV_(param)
{if(936573133 <= param[1]){var s=param[2];return [0,[0,s],0]}
var
d=param[2],
matches=caml_call1(Group[7],d),
delim=caml_call2(Group[1],d,0),
l=[0,0],
_cX_=matches.length - 1 - 1 | 0,
_cW_=1;
if(! (_cX_ < 1))
{var i=_cW_;
for(;;)
{var
_cY_=l[1],
_cZ_=
caml_equal(caml_check_bound(matches,i)[1 + i],_cO_)
?0
:[2,i,caml_call2(Group[1],d,i)];
l[1] = [0,_cZ_,_cY_];
var _c0_=i + 1 | 0;
if(_cX_ !== i){var i=_c0_;continue}
break}}
return [0,[1,delim],caml_call1(Stdlib_List[9],l[1])]}
var matches=caml_call2(Stdlib_List[19],_cV_,results);
return caml_call1(Stdlib_List[13],matches)}
var
Re_Pcre=
[0,
re$1,
regexp$0,
extract,
exec$0,
get_substring,
get_substring_ofs,
pmatch,
substitute,
full_split$0,
split$2,
quote$1];
caml_register_global(165,Re_Pcre,"Re__Pcre");
var
Parse_error$2=[248,cst_Re_Posix_Parse_error,caml_fresh_oo_id(0)],
Not_supported$1=[248,cst_Re_Posix_Not_supported,caml_fresh_oo_id(0)];
function re$2(opt$0,s)
{if(opt$0)var sth=opt$0[1],opts=sth;else var opts=0;
var
newline=caml_call2(Stdlib_List[37],-638074828,opts),
i=[0,0],
l=caml_ml_string_length(s);
function eos$0(param){return i[1] === l?1:0}
function test(c)
{var
_cT_=1 - eos$0(0),
_cU_=_cT_?caml_string_get(s,i[1]) === c?1:0:_cT_;
return _cU_}
function accept(c){var r=test(c);if(r)i[1]++;return r}
function get(param){var r=caml_string_get(s,i[1]);i[1]++;return r}
function unget(param){i[1] += -1;return 0}
function char$1(param)
{if(eos$0(0))throw Parse_error$2;
var c=get(0);
if(91 === c)
{if(accept(61))throw Not_supported$1;
if(accept(58))throw Not_supported$1;
if(accept(46))
{if(eos$0(0))throw Parse_error$2;
var c$0=get(0);
if(1 - accept(46))throw Not_supported$1;
if(1 - accept(93))throw Parse_error$2;
return c$0}
return c}
return c}
function bracket(s)
{var s$0=s;
for(;;)
{if(0 !== s$0 && accept(93))return s$0;
var c=char$1(0);
if(accept(45))
{if(accept(93))
{var _cS_=[0,char$0(45),s$0];return [0,char$0(c),_cS_]}
var c$0=char$1(0),s$1=[0,rg(c,c$0),s$0],s$0=s$1;
continue}
var s$2=[0,char$0(c),s$0],s$0=s$2;
continue}}
function integer(param)
{if(eos$0(0))return 0;
var d=get(0);
if(9 < d - 48 >>> 0){unget(0);return 0}
var i=d - 48 | 0,i$0=i;
for(;;)
{if(eos$0(0))return [0,i$0];
var d$0=get(0);
if(9 < d$0 - 48 >>> 0){unget(0);return [0,i$0]}
var i$1=(10 * i$0 | 0) + (d$0 - 48 | 0) | 0;
if(i$1 < i$0)throw Parse_error$2;
var i$0=i$1;
continue}}
function branch(param)
{var left=0;
for(;;)
{if(! eos$0(0) && ! test(124) && ! test(41))
{if(accept(46))
var r=newline?notnl:any;
else
if(accept(40))
{var r$0=regexp(0);
if(1 - accept(41))throw Parse_error$2;
var r=[6,r$0]}
else
if(accept(94))
var r=newline?bol:bos;
else
if(accept(36))
var r=newline?eol:eos;
else
if(accept(91))
if(accept(94))
var _cQ_=char$0(10),r=diff$0(compl(bracket(0)),_cQ_);
else
var r=alt$0(bracket(0));
else
if(accept(92))
{if(eos$0(0))throw Parse_error$2;
var c=get(0),switch$0=0;
if(91 <= c)
{var _cR_=c - 93 | 0;
if(29 < _cR_ >>> 0)
{if(! (32 <= _cR_))switch$0 = 1}
else
if(1 === _cR_)switch$0 = 1}
else
if(47 <= c)
{if(63 === c)switch$0 = 1}
else
if(36 <= c)
switch(c - 36 | 0)
{case 1:
case 2:
case 3:
case 8:
case 9:break;
default:switch$0 = 1}
if(! switch$0)throw Parse_error$2;
var r=char$0(c)}
else
{if(eos$0(0))throw Parse_error$2;
var c$0=get(0),switch$1=0;
if(64 <= c$0)
{if(92 !== c$0 && 123 !== c$0)switch$1 = 1}
else
if(44 <= c$0)
{if(! (63 <= c$0))switch$1 = 1}
else
if(! (42 <= c$0))switch$1 = 1;
if(! switch$1)throw Parse_error$2;
var r=char$0(c$0)}
if(accept(42))
var _cP_=rep$0([8,r]);
else
if(accept(43))
var _cP_=rep1([8,r]);
else
if(accept(63))
var _cP_=opt(r);
else
if(accept(123))
{var match=integer(0);
if(match)
{var i=match[1],j=accept(44)?integer(0):[0,i];
if(1 - accept(125))throw Parse_error$2;
if(j){var j$0=j[1];if(j$0 < i)throw Parse_error$2}
var _cP_=repn([8,r],i,j)}
else
{unget(0);var _cP_=r}}
else
var _cP_=r;
var left$0=[0,_cP_,left],left=left$0;
continue}
return seq$1(caml_call1(Stdlib_List[9],left))}}
function regexp(param)
{var left=branch(0),left$0=left;
for(;;)
{if(accept(124))
{var left$1=alt$0([0,left$0,[0,branch(0),0]]),left$0=left$1;
continue}
return left$0}}
var r=regexp(0);
if(1 - eos$0(0))throw Parse_error$2;
var
r$0=caml_call2(Stdlib_List[37],886285209,opts)?[10,r]:r,
r$1=caml_call2(Stdlib_List[37],853495711,opts)?[7,r$0]:r$0;
return r$1}
function compile$0(re){return compile(longest(re))}
function compile_pat$1(opt,s)
{if(opt)var sth=opt[1],opts=sth;else var opts=0;
return compile$0(re$2([0,opts],s))}
var
Re_Posix=
[0,Parse_error$2,Not_supported$1,re$2,compile$0,compile_pat$1];
caml_register_global(166,Re_Posix,"Re__Posix");
var
Re$0=
[0,
Group,
compile,
exec,
exec_opt,
execp,
exec_partial,
Mark,
all$0,
all_gen,
all_seq,
matches,
matches_gen,
matches_seq,
split$0,
split_gen,
split_seq,
split_full,
split_full_gen,
split_full_seq,
Seq,
replace,
replace_string,
str,
char$0,
alt$0,
seq$1,
empty$2,
epsilon,
rep$0,
rep1,
repn,
opt,
bol,
eol,
bow,
eow,
bos,
eos,
leol,
start$0,
stop$0,
word,
not_boundary,
whole_string,
longest,
shortest,
first$0,
greedy,
non_greedy,
group,
no_group,
nest,
mark$0,
set,
rg,
inter$0,
diff$0,
compl,
any,
notnl,
alnum,
wordc,
alpha,
ascii,
blank,
cntrl,
digit,
graph,
lower,
print,
punct,
space,
upper,
xdigit,
case$0,
no_case,
pp$5,
print_re,
print_re,
View,
witness,
get$0,
get_ofs,
get_all,
get_all_ofs,
test$0,
marked,
mark_set];
caml_register_global(167,Re$0,"Re");
return}
(globalThis));
//# 1 "../.js/tyxml.functor/tyxml_f.cma.js"
(function(globalThis)
{"use strict";
var
runtime=globalThis.jsoo_runtime,
caml_float_of_string=runtime.caml_float_of_string,
caml_list_of_js_array=runtime.caml_list_of_js_array,
caml_ml_string_length=runtime.caml_ml_string_length,
caml_register_global=runtime.caml_register_global,
caml_string_equal=runtime.caml_string_equal,
caml_string_notequal=runtime.caml_string_notequal,
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes;
function caml_call1(f,a0)
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
function caml_call2(f,a0,a1)
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
function caml_call3(f,a0,a1,a2)
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
function caml_call4(f,a0,a1,a2,a3)
{return f.length == 4
?f(a0,a1,a2,a3)
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
function caml_call5(f,a0,a1,a2,a3,a4)
{return f.length == 5
?f(a0,a1,a2,a3,a4)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
function caml_call6(f,a0,a1,a2,a3,a4,a5)
{return f.length == 6
?f(a0,a1,a2,a3,a4,a5)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5])}
function caml_call7(f,a0,a1,a2,a3,a4,a5,a6)
{return f.length == 7
?f(a0,a1,a2,a3,a4,a5,a6)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6])}
function caml_call11(f,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
{return f.length == 11
?f(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10])}
var
global_data=runtime.caml_get_global_data(),
cst_Xml_stream_Malformed_strea=
caml_string_of_jsbytes("Xml_stream.Malformed_stream"),
cst_xmlns$1=caml_string_of_jsbytes("xmlns"),
cst$30=caml_string_of_jsbytes(""),
cst_xmlns$2=caml_string_of_jsbytes("xmlns"),
cst$26=caml_string_of_jsbytes(""),
cst$27=caml_string_of_jsbytes(" -->\n"),
cst$28=caml_string_of_jsbytes("<!-- "),
cst$29=caml_string_of_jsbytes("\n"),
cst$12=caml_string_of_jsbytes(" "),
cst$13=caml_string_of_jsbytes(" />"),
cst$14=caml_string_of_jsbytes("<"),
cst$15=caml_string_of_jsbytes(">"),
cst$16=caml_string_of_jsbytes("><\/"),
cst$17=caml_string_of_jsbytes("<"),
cst$18=caml_string_of_jsbytes(">"),
cst$19=caml_string_of_jsbytes("<\/"),
cst$20=caml_string_of_jsbytes(">"),
cst$21=caml_string_of_jsbytes("<"),
cst$22=caml_string_of_jsbytes("-->"),
cst$23=caml_string_of_jsbytes("<!--"),
cst$24=caml_string_of_jsbytes(";"),
cst$25=caml_string_of_jsbytes("&"),
cst$10=caml_string_of_jsbytes(", "),
cst$11=caml_string_of_jsbytes(" "),
cst_xmlns=caml_string_of_jsbytes("xmlns"),
cst_xmlns$0=caml_string_of_jsbytes("xmlns"),
partial=[12,62,0],
cst$9=caml_string_of_jsbytes(" "),
cst_lt$0=caml_string_of_jsbytes("&lt;"),
cst_gt$4=caml_string_of_jsbytes("&gt;"),
cst_amp$0=caml_string_of_jsbytes("&amp;"),
cst_quot$0=caml_string_of_jsbytes("&quot;"),
cst_Infinity=caml_string_of_jsbytes("Infinity"),
cst_Infinity$0=caml_string_of_jsbytes("-Infinity"),
cst_NaN=caml_string_of_jsbytes("NaN"),
cst$5=caml_string_of_jsbytes("--!>"),
cst$6=caml_string_of_jsbytes("-->"),
cst$7=caml_string_of_jsbytes("->"),
cst$8=caml_string_of_jsbytes(">"),
cst_gt$0=caml_string_of_jsbytes("&gt;"),
cst_gt$1=caml_string_of_jsbytes("-&gt;"),
cst_gt$2=caml_string_of_jsbytes("--&gt;"),
cst_gt$3=caml_string_of_jsbytes("--!&gt;"),
cst_1_0=caml_string_of_jsbytes("1.0"),
cst_UTF_8=caml_string_of_jsbytes("UTF-8"),
cst_64=caml_string_of_jsbytes("&#64;"),
cst_lt=caml_string_of_jsbytes("&lt;"),
cst_gt=caml_string_of_jsbytes("&gt;"),
cst_amp=caml_string_of_jsbytes("&amp;"),
cst_quot=caml_string_of_jsbytes("&quot;"),
cst=caml_string_of_jsbytes("&#"),
cst$0=caml_string_of_jsbytes(";"),
cst$1=caml_string_of_jsbytes("--!>"),
cst$2=caml_string_of_jsbytes("-->"),
cst$3=caml_string_of_jsbytes("->"),
cst$4=caml_string_of_jsbytes(">"),
cst$38=caml_string_of_jsbytes(" "),
cst$37=caml_string_of_jsbytes(""),
partial$0=[12,32,[8,[0,0,3],0,0,[12,41,0]]],
partial$1=[0,0,3],
cst_none$1=caml_string_of_jsbytes("none"),
cst_auto$2=caml_string_of_jsbytes("auto"),
cst$36=caml_string_of_jsbytes("%"),
cst_strokePaint=caml_string_of_jsbytes("strokePaint"),
cst_sourceAlpha=caml_string_of_jsbytes("sourceAlpha"),
cst_fillPaint=caml_string_of_jsbytes("fillPaint"),
cst_sourceGraphic=caml_string_of_jsbytes("sourceGraphic"),
cst_backgroundImage=caml_string_of_jsbytes("backgroundImage"),
cst_backgroundAlpha=caml_string_of_jsbytes("backgroundAlpha"),
cst_nochange=caml_string_of_jsbytes("nochange"),
cst_alphabetic$1=caml_string_of_jsbytes("alphabetic"),
cst_auto$1=caml_string_of_jsbytes("auto"),
cst_hanging$1=caml_string_of_jsbytes("hanging"),
cst_mathematical$1=caml_string_of_jsbytes("mathematical"),
cst_inherit$1=caml_string_of_jsbytes("inherit"),
cst_middle$1=caml_string_of_jsbytes("middle"),
cst_central$0=caml_string_of_jsbytes("central"),
cst_usescript=caml_string_of_jsbytes("usescript"),
cst_ideographic$1=caml_string_of_jsbytes("ideographic"),
cst_textbeforeedge=caml_string_of_jsbytes("textbeforeedge"),
cst_resetsize=caml_string_of_jsbytes("resetsize"),
cst_textafteredge=caml_string_of_jsbytes("textafteredge"),
cst_stitch=caml_string_of_jsbytes("stitch"),
cst_onRequest=caml_string_of_jsbytes("onRequest"),
cst_repeat=caml_string_of_jsbytes("repeat"),
cst_wrap=caml_string_of_jsbytes("wrap"),
cst_remove=caml_string_of_jsbytes("remove"),
cst_reflect=caml_string_of_jsbytes("reflect"),
cst_noStitch=caml_string_of_jsbytes("noStitch"),
cst$35=caml_string_of_jsbytes(""),
cst_over=caml_string_of_jsbytes("over"),
cst_none$0=caml_string_of_jsbytes("none"),
cst_medial=caml_string_of_jsbytes("medial"),
cst_never=caml_string_of_jsbytes("never"),
cst_butt=caml_string_of_jsbytes("butt"),
cst_auto$0=caml_string_of_jsbytes("auto"),
cst_atop=caml_string_of_jsbytes("atop"),
cst_arithmetic=caml_string_of_jsbytes("arithmetic"),
cst_underline=caml_string_of_jsbytes("underline"),
cst_gamma=caml_string_of_jsbytes("gamma"),
cst_linear=caml_string_of_jsbytes("linear"),
cst_overline=caml_string_of_jsbytes("overline"),
cst_onLoad=caml_string_of_jsbytes("onLoad"),
cst_turbulence=caml_string_of_jsbytes("turbulence"),
cst_table=caml_string_of_jsbytes("table"),
cst_geometricPrecision=caml_string_of_jsbytes("geometricPrecision"),
cst_optimizeSpeed=caml_string_of_jsbytes("optimizeSpeed"),
cst_miter=caml_string_of_jsbytes("miter"),
cst_initial=caml_string_of_jsbytes("initial"),
cst_start=caml_string_of_jsbytes("start"),
cst_whenNotActive=caml_string_of_jsbytes("whenNotActive"),
cst_identity=caml_string_of_jsbytes("identity"),
cst_skewY=caml_string_of_jsbytes("skewY"),
cst_skewX=caml_string_of_jsbytes("skewX"),
cst_square=caml_string_of_jsbytes("square"),
cst_scale$0=caml_string_of_jsbytes("scale"),
cst_exact=caml_string_of_jsbytes("exact"),
cst_perceptual=caml_string_of_jsbytes("perceptual"),
cst_discrete=caml_string_of_jsbytes("discrete"),
cst_erode=caml_string_of_jsbytes("erode"),
cst_middle$0=caml_string_of_jsbytes("middle"),
cst_round=caml_string_of_jsbytes("round"),
cst_xor=caml_string_of_jsbytes("xor"),
cst_XML=caml_string_of_jsbytes("XML"),
cst_sum=caml_string_of_jsbytes("sum"),
cst_pad=caml_string_of_jsbytes("pad"),
cst_out=caml_string_of_jsbytes("out"),
cst_new=caml_string_of_jsbytes("new"),
cst_end=caml_string_of_jsbytes("end"),
cst_CSS=caml_string_of_jsbytes("CSS"),
cst_in$1=caml_string_of_jsbytes("in"),
cst_v=caml_string_of_jsbytes("v"),
cst_r$0=caml_string_of_jsbytes("r"),
cst_h=caml_string_of_jsbytes("h"),
cst_g$0=caml_string_of_jsbytes("g"),
cst_b=caml_string_of_jsbytes("b"),
cst_a$0=caml_string_of_jsbytes("a"),
cst_rotate$0=caml_string_of_jsbytes("rotate"),
cst_disable=caml_string_of_jsbytes("disable"),
cst_screen=caml_string_of_jsbytes("screen"),
cst_absolute_colorimetric=caml_string_of_jsbytes("absolute_colorimetric"),
cst_inherit$0=caml_string_of_jsbytes("inherit"),
cst_always=caml_string_of_jsbytes("always"),
cst_spacingAndGlyphs=caml_string_of_jsbytes("spacingAndGlyphs"),
cst_replace=caml_string_of_jsbytes("replace"),
cst_multiply=caml_string_of_jsbytes("multiply"),
cst_spline=caml_string_of_jsbytes("spline"),
cst_matrix=caml_string_of_jsbytes("matrix"),
cst_saturation=caml_string_of_jsbytes("saturation"),
cst_dilate=caml_string_of_jsbytes("dilate"),
cst_translate=caml_string_of_jsbytes("translate"),
cst_default=caml_string_of_jsbytes("default"),
cst_lighten=caml_string_of_jsbytes("lighten"),
cst_normal=caml_string_of_jsbytes("normal"),
cst_freeze=caml_string_of_jsbytes("freeze"),
cst_magnify=caml_string_of_jsbytes("magnify"),
cst_hueRotate=caml_string_of_jsbytes("hueRotate"),
cst_spacing$0=caml_string_of_jsbytes("spacing"),
cst_fractalNoise=caml_string_of_jsbytes("fractalNoise"),
cst_saturate=caml_string_of_jsbytes("saturate"),
cst_userSpaceOnUse=caml_string_of_jsbytes("userSpaceOnUse"),
cst_objectBoundingBox=caml_string_of_jsbytes("objectBoundingBox"),
cst_darken=caml_string_of_jsbytes("darken"),
cst_paced=caml_string_of_jsbytes("paced"),
cst_isolated=caml_string_of_jsbytes("isolated"),
cst_optimizeLegibility=caml_string_of_jsbytes("optimizeLegibility"),
cst_luminanceToAlpha=caml_string_of_jsbytes("luminanceToAlpha"),
cst_line_through=caml_string_of_jsbytes("line-through"),
cst_other=caml_string_of_jsbytes("other"),
cst_terminal=caml_string_of_jsbytes("terminal"),
cst_blink=caml_string_of_jsbytes("blink"),
cst_stroke_width$0=caml_string_of_jsbytes("stroke-width"),
cst_stretch=caml_string_of_jsbytes("stretch"),
cst_bevel=caml_string_of_jsbytes("bevel"),
cst_duplicate=caml_string_of_jsbytes("duplicate"),
cst_preserve=caml_string_of_jsbytes("preserve"),
cst_relative_colorimetric=caml_string_of_jsbytes("relative_colorimetric"),
cst_after_edge=caml_string_of_jsbytes("after-edge"),
cst_alphabetic$0=caml_string_of_jsbytes("alphabetic"),
cst_auto=caml_string_of_jsbytes("auto"),
cst_hanging$0=caml_string_of_jsbytes("hanging"),
cst_mathematical$0=caml_string_of_jsbytes("mathematical"),
cst_inherit=caml_string_of_jsbytes("inherit"),
cst_middle=caml_string_of_jsbytes("middle"),
cst_baseline=caml_string_of_jsbytes("baseline"),
cst_central=caml_string_of_jsbytes("central"),
cst_ideographic$0=caml_string_of_jsbytes("ideographic"),
cst_text_before_edge=caml_string_of_jsbytes("text-before-edge"),
cst_before_edge=caml_string_of_jsbytes("before-edge"),
cst_text_after_edge=caml_string_of_jsbytes("text-after-edge"),
cst_http_www_w3_org_1999_xlink=
caml_string_of_jsbytes("http://www.w3.org/1999/xlink"),
cst_xmlns_xlink=caml_string_of_jsbytes("xmlns:xlink"),
cst_http_www_w3_org_2000_svg=
caml_string_of_jsbytes("http://www.w3.org/2000/svg"),
cst_xmlns$3=caml_string_of_jsbytes("xmlns"),
cst_svg$0=caml_string_of_jsbytes("svg"),
cst_stroke_dasharray=caml_string_of_jsbytes("stroke-dasharray"),
cst_stroke_linejoin=caml_string_of_jsbytes("stroke-linejoin"),
cst_stroke_linecap=caml_string_of_jsbytes("stroke-linecap"),
cst_dominant_baseline=caml_string_of_jsbytes("dominant-baseline"),
cst_alignment_baseline=caml_string_of_jsbytes("alignment-baseline"),
cst_arabic_form=caml_string_of_jsbytes("arabic-form"),
cst_orientation=caml_string_of_jsbytes("orientation"),
cst_accumulate=caml_string_of_jsbytes("accumulate"),
cst_additive=caml_string_of_jsbytes("additive"),
cst_calcMode=caml_string_of_jsbytes("calcMode"),
cst_fill$0=caml_string_of_jsbytes("fill"),
cst_restart=caml_string_of_jsbytes("restart"),
cst_attributeType=caml_string_of_jsbytes("attributeType"),
cst_xlink_actuate=caml_string_of_jsbytes("xlink:actuate"),
cst_xlink_show=caml_string_of_jsbytes("xlink:show"),
cst_type$2=caml_string_of_jsbytes("type"),
cst_stitchTiles=caml_string_of_jsbytes("stitchTiles"),
cst_operator$0=caml_string_of_jsbytes("operator"),
cst_yChannelSelector=caml_string_of_jsbytes("yChannelSelector"),
cst_xChannelSelector=caml_string_of_jsbytes("xChannelSelector"),
cst_targetY$0=caml_string_of_jsbytes("targetY"),
cst_operator=caml_string_of_jsbytes("operator"),
cst_type$1=caml_string_of_jsbytes("type"),
cst_type$0=caml_string_of_jsbytes("type"),
cst_mode=caml_string_of_jsbytes("mode"),
cst_in2=caml_string_of_jsbytes("in2"),
cst_in$0=caml_string_of_jsbytes("in"),
cst_primitiveUnits=caml_string_of_jsbytes("primitiveUnits"),
cst_maskContentUnits=caml_string_of_jsbytes("maskContentUnits"),
cst_maskUnits=caml_string_of_jsbytes("maskUnits"),
cst_clipPathUnits=caml_string_of_jsbytes("clipPathUnits"),
cst_patternTransform=caml_string_of_jsbytes("patternTransform"),
cst_patternContentUnits=caml_string_of_jsbytes("patternContentUnits"),
cst_patternUnits=caml_string_of_jsbytes("patternUnits"),
cst_offset=caml_string_of_jsbytes("offset"),
cst_spreadMethod=caml_string_of_jsbytes("spreadMethod"),
cst_gradientUnits=caml_string_of_jsbytes("gradientUnits"),
cst_rendering_intent=caml_string_of_jsbytes("rendering-intent"),
cst_orient=caml_string_of_jsbytes("orient"),
cst_markerUnits=caml_string_of_jsbytes("markerUnits"),
cst_spacing=caml_string_of_jsbytes("spacing"),
cst_method=caml_string_of_jsbytes("method"),
cst_text_rendering=caml_string_of_jsbytes("text-rendering"),
cst_text_decoration=caml_string_of_jsbytes("text-decoration"),
cst_text_anchor=caml_string_of_jsbytes("text-anchor"),
cst_lengthAdjust=caml_string_of_jsbytes("lengthAdjust"),
cst_xml_space=caml_string_of_jsbytes("xml:space"),
cst_data=caml_string_of_jsbytes("data-"),
cst_zoomAndSpan=caml_string_of_jsbytes("zoomAndSpan"),
cst_foreignObject=caml_string_of_jsbytes("foreignObject"),
cst_metadata=caml_string_of_jsbytes("metadata"),
content_type=caml_string_of_jsbytes("image/svg+xml"),
version=caml_string_of_jsbytes("SVG 1.1"),
standard=caml_string_of_jsbytes("http://www.w3.org/TR/svg11/"),
namespace=caml_string_of_jsbytes("http://www.w3.org/2000/svg"),
cst_svg=caml_string_of_jsbytes("svg"),
cst_version=caml_string_of_jsbytes("version"),
cst_baseProfile=caml_string_of_jsbytes("baseProfile"),
cst_x=caml_string_of_jsbytes("x"),
cst_y=caml_string_of_jsbytes("y"),
cst_width=caml_string_of_jsbytes("width"),
cst_height=caml_string_of_jsbytes("height"),
cst_preserveAspectRatio=caml_string_of_jsbytes("preserveAspectRatio"),
cst_contentScriptType=caml_string_of_jsbytes("contentScriptType"),
cst_contentStyleType=caml_string_of_jsbytes("contentStyleType"),
cst_href=caml_string_of_jsbytes("href"),
cst_xlink_href=caml_string_of_jsbytes("xlink:href"),
cst_requiredFeatures=caml_string_of_jsbytes("requiredFeatures"),
cst_requiredExtension=caml_string_of_jsbytes("requiredExtension"),
cst_systemLanguage=caml_string_of_jsbytes("systemLanguage"),
cst_externalRessourcesRequired=
caml_string_of_jsbytes("externalRessourcesRequired"),
cst_id=caml_string_of_jsbytes("id"),
cst_xml_base=caml_string_of_jsbytes("xml:base"),
cst_xml_lang=caml_string_of_jsbytes("xml:lang"),
cst_type=caml_string_of_jsbytes("type"),
cst_media=caml_string_of_jsbytes("media"),
cst_xlink_title=caml_string_of_jsbytes("xlink:title"),
cst_class=caml_string_of_jsbytes("class"),
cst_style=caml_string_of_jsbytes("style"),
cst_transform=caml_string_of_jsbytes("transform"),
cst_viewBox=caml_string_of_jsbytes("viewBox"),
cst_d=caml_string_of_jsbytes("d"),
cst_pathLength=caml_string_of_jsbytes("pathLength"),
cst_rx=caml_string_of_jsbytes("rx"),
cst_ry=caml_string_of_jsbytes("ry"),
cst_cx=caml_string_of_jsbytes("cx"),
cst_cy=caml_string_of_jsbytes("cy"),
cst_r=caml_string_of_jsbytes("r"),
cst_x1=caml_string_of_jsbytes("x1"),
cst_y1=caml_string_of_jsbytes("y1"),
cst_x2=caml_string_of_jsbytes("x2"),
cst_y2=caml_string_of_jsbytes("y2"),
cst_points=caml_string_of_jsbytes("points"),
cst_x$0=caml_string_of_jsbytes("x"),
cst_y$0=caml_string_of_jsbytes("y"),
cst_dx=caml_string_of_jsbytes("dx"),
cst_dy=caml_string_of_jsbytes("dy"),
cst_dx$0=caml_string_of_jsbytes("dx"),
cst_dy$0=caml_string_of_jsbytes("dy"),
cst_textLength=caml_string_of_jsbytes("textLength"),
cst_rotate=caml_string_of_jsbytes("rotate"),
cst_startOffset=caml_string_of_jsbytes("startOffset"),
cst_glyphRef=caml_string_of_jsbytes("glyphRef"),
cst_format=caml_string_of_jsbytes("format"),
cst_refX=caml_string_of_jsbytes("refX"),
cst_refY=caml_string_of_jsbytes("refY"),
cst_markerWidth=caml_string_of_jsbytes("markerWidth"),
cst_markerHeight=caml_string_of_jsbytes("markerHeight"),
cst_local=caml_string_of_jsbytes("local"),
cst_gradientTransform=caml_string_of_jsbytes("gradientTransform"),
cst_fx=caml_string_of_jsbytes("fx"),
cst_fy=caml_string_of_jsbytes("fy"),
cst_filterResUnits=caml_string_of_jsbytes("filterResUnits"),
cst_result=caml_string_of_jsbytes("result"),
cst_azimuth=caml_string_of_jsbytes("azimuth"),
cst_elevation=caml_string_of_jsbytes("elevation"),
cst_pointsAtX=caml_string_of_jsbytes("pointsAtX"),
cst_pointsAtY=caml_string_of_jsbytes("pointsAtY"),
cst_pointsAtZ=caml_string_of_jsbytes("pointsAtZ"),
cst_specularExponent=caml_string_of_jsbytes("specularExponent"),
cst_specularConstant=caml_string_of_jsbytes("specularConstant"),
cst_limitingConeAngle=caml_string_of_jsbytes("limitingConeAngle"),
cst_values=caml_string_of_jsbytes("values"),
cst_tableValues=caml_string_of_jsbytes("tableValues"),
cst_intercept=caml_string_of_jsbytes("intercept"),
cst_amplitude=caml_string_of_jsbytes("amplitude"),
cst_exponent=caml_string_of_jsbytes("exponent"),
cst_offset$0=caml_string_of_jsbytes("offset"),
cst_k1=caml_string_of_jsbytes("k1"),
cst_k2=caml_string_of_jsbytes("k2"),
cst_k3=caml_string_of_jsbytes("k3"),
cst_k4=caml_string_of_jsbytes("k4"),
cst_order=caml_string_of_jsbytes("order"),
cst_kernelMatrix=caml_string_of_jsbytes("kernelMatrix"),
cst_divisor=caml_string_of_jsbytes("divisor"),
cst_bias=caml_string_of_jsbytes("bias"),
cst_kernelUnitLength=caml_string_of_jsbytes("kernelUnitLength"),
cst_targetX=caml_string_of_jsbytes("targetX"),
cst_targetY=caml_string_of_jsbytes("targetY"),
cst_preserveAlpha=caml_string_of_jsbytes("preserveAlpha"),
cst_surfaceScale=caml_string_of_jsbytes("surfaceScale"),
cst_diffuseConstant=caml_string_of_jsbytes("diffuseConstant"),
cst_scale=caml_string_of_jsbytes("scale"),
cst_stdDeviation=caml_string_of_jsbytes("stdDeviation"),
cst_radius=caml_string_of_jsbytes("radius"),
cst_baseFrequency=caml_string_of_jsbytes("baseFrequency"),
cst_numOctaves=caml_string_of_jsbytes("numOctaves"),
cst_seed=caml_string_of_jsbytes("seed"),
cst_xlink_target=caml_string_of_jsbytes("xlink:target"),
cst_viewTarget=caml_string_of_jsbytes("viewTarget"),
cst_attributeName=caml_string_of_jsbytes("attributeName"),
cst_begin=caml_string_of_jsbytes("begin"),
cst_dur=caml_string_of_jsbytes("dur"),
cst_min=caml_string_of_jsbytes("min"),
cst_max=caml_string_of_jsbytes("max"),
cst_repeatCount=caml_string_of_jsbytes("repeatCount"),
cst_repeatDur=caml_string_of_jsbytes("repeatDur"),
cst_fill=caml_string_of_jsbytes("fill"),
cst_values$0=caml_string_of_jsbytes("values"),
cst_keyTimes=caml_string_of_jsbytes("keyTimes"),
cst_keySplines=caml_string_of_jsbytes("keySplines"),
cst_from=caml_string_of_jsbytes("from"),
cst_to=caml_string_of_jsbytes("to"),
cst_by=caml_string_of_jsbytes("by"),
cst_keyPoints=caml_string_of_jsbytes("keyPoints"),
cst_path=caml_string_of_jsbytes("path"),
cst_type$3=caml_string_of_jsbytes("type"),
cst_horiz_origin_x=caml_string_of_jsbytes("horiz-origin-x"),
cst_horiz_origin_y=caml_string_of_jsbytes("horiz-origin-y"),
cst_horiz_adv_x=caml_string_of_jsbytes("horiz-adv-x"),
cst_vert_origin_x=caml_string_of_jsbytes("vert-origin-x"),
cst_vert_origin_y=caml_string_of_jsbytes("vert-origin-y"),
cst_vert_adv_y=caml_string_of_jsbytes("vert-adv-y"),
cst_unicode=caml_string_of_jsbytes("unicode"),
cst_glyphname=caml_string_of_jsbytes("glyphname"),
cst_lang=caml_string_of_jsbytes("lang"),
cst_u1=caml_string_of_jsbytes("u1"),
cst_u2=caml_string_of_jsbytes("u2"),
cst_g1=caml_string_of_jsbytes("g1"),
cst_g2=caml_string_of_jsbytes("g2"),
cst_k=caml_string_of_jsbytes("k"),
cst_font_family=caml_string_of_jsbytes("font-family"),
cst_font_style=caml_string_of_jsbytes("font-style"),
cst_font_variant=caml_string_of_jsbytes("font-variant"),
cst_font_weight=caml_string_of_jsbytes("font-weight"),
cst_font_stretch=caml_string_of_jsbytes("font-stretch"),
cst_font_size=caml_string_of_jsbytes("font-size"),
cst_unicode_range=caml_string_of_jsbytes("unicode-range"),
cst_units_per_em=caml_string_of_jsbytes("units-per-em"),
cst_stemv=caml_string_of_jsbytes("stemv"),
cst_stemh=caml_string_of_jsbytes("stemh"),
cst_slope=caml_string_of_jsbytes("slope"),
cst_cap_height=caml_string_of_jsbytes("cap-height"),
cst_x_height=caml_string_of_jsbytes("x-height"),
cst_accent_height=caml_string_of_jsbytes("accent-height"),
cst_ascent=caml_string_of_jsbytes("ascent"),
cst_widths=caml_string_of_jsbytes("widths"),
cst_bbox=caml_string_of_jsbytes("bbox"),
cst_ideographic=caml_string_of_jsbytes("ideographic"),
cst_alphabetic=caml_string_of_jsbytes("alphabetic"),
cst_mathematical=caml_string_of_jsbytes("mathematical"),
cst_hanging=caml_string_of_jsbytes("hanging"),
cst_v_ideographic=caml_string_of_jsbytes("v-ideographic"),
cst_v_alphabetic=caml_string_of_jsbytes("v-alphabetic"),
cst_v_mathematical=caml_string_of_jsbytes("v-mathematical"),
cst_v_hanging=caml_string_of_jsbytes("v-hanging"),
cst_underline_position=caml_string_of_jsbytes("underline-position"),
cst_underline_thickness=caml_string_of_jsbytes("underline-thickness"),
cst_strikethrough_position=
caml_string_of_jsbytes("strikethrough-position"),
cst_strikethrough_thickness=
caml_string_of_jsbytes("strikethrough-thickness"),
cst_overline_position=caml_string_of_jsbytes("overline-position"),
cst_overline_thickness=caml_string_of_jsbytes("overline-thickness"),
cst_string=caml_string_of_jsbytes("string"),
cst_name=caml_string_of_jsbytes("name"),
cst_onabort=caml_string_of_jsbytes("onabort"),
cst_onactivate=caml_string_of_jsbytes("onactivate"),
cst_onbegin=caml_string_of_jsbytes("onbegin"),
cst_onend=caml_string_of_jsbytes("onend"),
cst_onerror=caml_string_of_jsbytes("onerror"),
cst_onfocusin=caml_string_of_jsbytes("onfocusin"),
cst_onfocusout=caml_string_of_jsbytes("onfocusout"),
cst_onload=caml_string_of_jsbytes("onload"),
cst_onrepeat=caml_string_of_jsbytes("onrepeat"),
cst_onresize=caml_string_of_jsbytes("onresize"),
cst_onscroll=caml_string_of_jsbytes("onscroll"),
cst_onunload=caml_string_of_jsbytes("onunload"),
cst_onzoom=caml_string_of_jsbytes("onzoom"),
cst_onclick=caml_string_of_jsbytes("onclick"),
cst_onmousedown=caml_string_of_jsbytes("onmousedown"),
cst_onmouseup=caml_string_of_jsbytes("onmouseup"),
cst_onmouseover=caml_string_of_jsbytes("onmouseover"),
cst_onmouseout=caml_string_of_jsbytes("onmouseout"),
cst_onmousemove=caml_string_of_jsbytes("onmousemove"),
cst_ontouchstart=caml_string_of_jsbytes("ontouchstart"),
cst_ontouchend=caml_string_of_jsbytes("ontouchend"),
cst_ontouchmove=caml_string_of_jsbytes("ontouchmove"),
cst_ontouchcancel=caml_string_of_jsbytes("ontouchcancel"),
cst_stop_color=caml_string_of_jsbytes("stop-color"),
cst_stop_opacity=caml_string_of_jsbytes("stop-opacity"),
cst_stroke=caml_string_of_jsbytes("stroke"),
cst_stroke_width=caml_string_of_jsbytes("stroke-width"),
cst_stroke_miterlimit=caml_string_of_jsbytes("stroke-miterlimit"),
cst_stroke_dashoffset=caml_string_of_jsbytes("stroke-dashoffset"),
cst_stroke_opacity=caml_string_of_jsbytes("stroke-opacity"),
cst_g=caml_string_of_jsbytes("g"),
cst_defs=caml_string_of_jsbytes("defs"),
cst_desc=caml_string_of_jsbytes("desc"),
cst_title=caml_string_of_jsbytes("title"),
cst_symbol=caml_string_of_jsbytes("symbol"),
cst_use=caml_string_of_jsbytes("use"),
cst_image=caml_string_of_jsbytes("image"),
cst_switch=caml_string_of_jsbytes("switch"),
cst_style$0=caml_string_of_jsbytes("style"),
cst_path$0=caml_string_of_jsbytes("path"),
cst_rect=caml_string_of_jsbytes("rect"),
cst_circle=caml_string_of_jsbytes("circle"),
cst_ellipse=caml_string_of_jsbytes("ellipse"),
cst_line=caml_string_of_jsbytes("line"),
cst_polyline=caml_string_of_jsbytes("polyline"),
cst_polygon=caml_string_of_jsbytes("polygon"),
cst_text=caml_string_of_jsbytes("text"),
cst_tspan=caml_string_of_jsbytes("tspan"),
cst_tref=caml_string_of_jsbytes("tref"),
cst_textPath=caml_string_of_jsbytes("textPath"),
cst_altGlyph=caml_string_of_jsbytes("altGlyph"),
cst_altGlyphDef=caml_string_of_jsbytes("altGlyphDef"),
cst_altGlyphItem=caml_string_of_jsbytes("altGlyphItem"),
cst_glyphRef$0=caml_string_of_jsbytes("glyphRef"),
cst_marker=caml_string_of_jsbytes("marker"),
cst_color_profile=caml_string_of_jsbytes("color-profile"),
cst_linearGradient=caml_string_of_jsbytes("linearGradient"),
cst_radialGradient=caml_string_of_jsbytes("radialGradient"),
cst_stop=caml_string_of_jsbytes("stop"),
cst_pattern=caml_string_of_jsbytes("pattern"),
cst_clipPath=caml_string_of_jsbytes("clipPath"),
cst_filter=caml_string_of_jsbytes("filter"),
cst_feDistantLight=caml_string_of_jsbytes("feDistantLight"),
cst_fePointLight=caml_string_of_jsbytes("fePointLight"),
cst_feSpotLight=caml_string_of_jsbytes("feSpotLight"),
cst_feBlend=caml_string_of_jsbytes("feBlend"),
cst_feColorMatrix=caml_string_of_jsbytes("feColorMatrix"),
cst_feComponentTransfer=caml_string_of_jsbytes("feComponentTransfer"),
cst_feFuncA=caml_string_of_jsbytes("feFuncA"),
cst_feFuncG=caml_string_of_jsbytes("feFuncG"),
cst_feFuncB=caml_string_of_jsbytes("feFuncB"),
cst_feFuncR=caml_string_of_jsbytes("feFuncR"),
cst_feComposite=caml_string_of_jsbytes("feComposite"),
cst_feConvolveMatrix=caml_string_of_jsbytes("feConvolveMatrix"),
cst_feDiffuseLighting=caml_string_of_jsbytes("feDiffuseLighting"),
cst_feDisplacementMap=caml_string_of_jsbytes("feDisplacementMap"),
cst_feFlood=caml_string_of_jsbytes("feFlood"),
cst_feGaussianBlur=caml_string_of_jsbytes("feGaussianBlur"),
cst_feImage=caml_string_of_jsbytes("feImage"),
cst_feMerge=caml_string_of_jsbytes("feMerge"),
cst_feMorphology=caml_string_of_jsbytes("feMorphology"),
cst_feOffset=caml_string_of_jsbytes("feOffset"),
cst_feSpecularLighting=caml_string_of_jsbytes("feSpecularLighting"),
cst_feTile=caml_string_of_jsbytes("feTile"),
cst_feTurbulence=caml_string_of_jsbytes("feTurbulence"),
cst_cursor=caml_string_of_jsbytes("cursor"),
cst_a=caml_string_of_jsbytes("a"),
cst_view=caml_string_of_jsbytes("view"),
cst_script=caml_string_of_jsbytes("script"),
cst_animate=caml_string_of_jsbytes("animate"),
cst_set=caml_string_of_jsbytes("set"),
cst_animateMotion=caml_string_of_jsbytes("animateMotion"),
cst_mpath=caml_string_of_jsbytes("mpath"),
cst_animateColor=caml_string_of_jsbytes("animateColor"),
cst_animateTransform=caml_string_of_jsbytes("animateTransform"),
cst_font=caml_string_of_jsbytes("font"),
cst_glyph=caml_string_of_jsbytes("glyph"),
cst_missing_glyph=caml_string_of_jsbytes("missing-glyph"),
cst_hkern=caml_string_of_jsbytes("hkern"),
cst_vkern=caml_string_of_jsbytes("vkern"),
cst_font_face=caml_string_of_jsbytes("font-face"),
cst_font_face_src=caml_string_of_jsbytes("font-face-src"),
cst_font_face_uri=caml_string_of_jsbytes("font-face-uri"),
cst_font_face_uri$0=caml_string_of_jsbytes("font-face-uri"),
cst_font_face_name=caml_string_of_jsbytes("font-face-name"),
cst$34=caml_string_of_jsbytes(" "),
cst_none=caml_string_of_jsbytes("none"),
cst_currentColor=caml_string_of_jsbytes("currentColor"),
cst$33=caml_string_of_jsbytes(" "),
sep=caml_string_of_jsbytes(" "),
cst_px=caml_string_of_jsbytes("px"),
cst_pt=caml_string_of_jsbytes("pt"),
cst_pc=caml_string_of_jsbytes("pc"),
cst_in=caml_string_of_jsbytes("in"),
cst_mm=caml_string_of_jsbytes("mm"),
cst_ex=caml_string_of_jsbytes("ex"),
cst_em=caml_string_of_jsbytes("em"),
cst_cm=caml_string_of_jsbytes("cm"),
cst$32=caml_string_of_jsbytes("%"),
cst_grad=caml_string_of_jsbytes("grad"),
cst_deg=caml_string_of_jsbytes("deg"),
cst_rad=caml_string_of_jsbytes("rad"),
cst$31=caml_string_of_jsbytes(""),
cst$46=caml_string_of_jsbytes(", "),
cst$45=caml_string_of_jsbytes(" "),
cst$44=caml_string_of_jsbytes(", "),
cst$43=caml_string_of_jsbytes(","),
cst$42=caml_string_of_jsbytes(" "),
cst$41=caml_string_of_jsbytes(" "),
cst_any$1=caml_string_of_jsbytes("any"),
cst_any$0=caml_string_of_jsbytes("any"),
cst$40=caml_string_of_jsbytes(""),
cst_on=caml_string_of_jsbytes("on"),
cst_off=caml_string_of_jsbytes("off"),
cst_week=caml_string_of_jsbytes("week"),
cst_time$0=caml_string_of_jsbytes("time"),
cst_text$1=caml_string_of_jsbytes("text"),
cst_file=caml_string_of_jsbytes("file"),
cst_date=caml_string_of_jsbytes("date"),
cst_datetime_local=caml_string_of_jsbytes("datetime-local"),
cst_password=caml_string_of_jsbytes("password"),
cst_month=caml_string_of_jsbytes("month"),
cst_search$1=caml_string_of_jsbytes("search"),
cst_button$0=caml_string_of_jsbytes("button"),
cst_checkbox$0=caml_string_of_jsbytes("checkbox"),
cst_email$0=caml_string_of_jsbytes("email"),
cst_hidden$1=caml_string_of_jsbytes("hidden"),
cst_url$0=caml_string_of_jsbytes("url"),
cst_tel$0=caml_string_of_jsbytes("tel"),
cst_reset=caml_string_of_jsbytes("reset"),
cst_range=caml_string_of_jsbytes("range"),
cst_radio$0=caml_string_of_jsbytes("radio"),
cst_readonly$1=caml_string_of_jsbytes("readonly"),
cst_color=caml_string_of_jsbytes("color"),
cst_number=caml_string_of_jsbytes("number"),
cst_image$0=caml_string_of_jsbytes("image"),
cst_submit=caml_string_of_jsbytes("submit"),
cst_datetime$0=caml_string_of_jsbytes("datetime"),
cst_external$0=caml_string_of_jsbytes("external"),
cst_0=caml_string_of_jsbytes("0"),
cst_formnovalidate$0=caml_string_of_jsbytes("formnovalidate"),
cst_audio$0=caml_string_of_jsbytes("audio"),
cst_async$0=caml_string_of_jsbytes("async"),
cst_toolbar=caml_string_of_jsbytes("toolbar"),
cst_text$0=caml_string_of_jsbytes("text"),
cst_soft=caml_string_of_jsbytes("soft"),
cst_rows$0=caml_string_of_jsbytes("rows"),
cst_rect$0=caml_string_of_jsbytes("rect"),
cst_prev$0=caml_string_of_jsbytes("prev"),
cst_POST=caml_string_of_jsbytes("POST"),
cst_poly=caml_string_of_jsbytes("poly"),
cst_open$0=caml_string_of_jsbytes("open"),
cst_decimal=caml_string_of_jsbytes("decimal"),
cst_none$2=caml_string_of_jsbytes("none"),
cst_next$0=caml_string_of_jsbytes("next"),
cst_loop$0=caml_string_of_jsbytes("loop"),
cst_left=caml_string_of_jsbytes("left"),
cst_last$0=caml_string_of_jsbytes("last"),
cst_kana=caml_string_of_jsbytes("kana"),
cst_icon$1=caml_string_of_jsbytes("icon"),
cst_help$0=caml_string_of_jsbytes("help"),
cst_hard=caml_string_of_jsbytes("hard"),
cst_cols$0=caml_string_of_jsbytes("cols"),
cst_char$0=caml_string_of_jsbytes("char"),
cst_auto$3=caml_string_of_jsbytes("auto"),
cst_noreferrer$0=caml_string_of_jsbytes("noreferrer"),
cst_author$0=caml_string_of_jsbytes("author"),
cst_muted$0=caml_string_of_jsbytes("muted"),
cst_autoplay$0=caml_string_of_jsbytes("autoplay"),
cst_anonymous=caml_string_of_jsbytes("anonymous"),
cst_metadata$0=caml_string_of_jsbytes("metadata"),
cst_license$0=caml_string_of_jsbytes("license"),
cst_search$0=caml_string_of_jsbytes("search"),
cst_first$0=caml_string_of_jsbytes("first"),
cst_novalidate$0=caml_string_of_jsbytes("novalidate"),
cst_controls$0=caml_string_of_jsbytes("controls"),
cst_bookmark$0=caml_string_of_jsbytes("bookmark"),
cst_required$0=caml_string_of_jsbytes("required"),
cst_selected$0=caml_string_of_jsbytes("selected"),
cst_circle$0=caml_string_of_jsbytes("circle"),
cst_rowgroup=caml_string_of_jsbytes("rowgroup"),
cst_checkbox=caml_string_of_jsbytes("checkbox"),
cst_katakana=caml_string_of_jsbytes("katakana"),
cst_email=caml_string_of_jsbytes("email"),
cst_latin=caml_string_of_jsbytes("latin"),
cst_hidden$0=caml_string_of_jsbytes("hidden"),
cst_yes=caml_string_of_jsbytes("yes"),
cst_url=caml_string_of_jsbytes("url"),
cst_tel=caml_string_of_jsbytes("tel"),
cst_tag$0=caml_string_of_jsbytes("tag"),
cst_rtl=caml_string_of_jsbytes("rtl"),
cst_row=caml_string_of_jsbytes("row"),
cst_1=caml_string_of_jsbytes("1"),
cst_ltr=caml_string_of_jsbytes("ltr"),
cst_GET=caml_string_of_jsbytes("GET"),
cst_col$0=caml_string_of_jsbytes("col"),
cst_any=caml_string_of_jsbytes("any"),
cst_all$0=caml_string_of_jsbytes("all"),
cst_up$0=caml_string_of_jsbytes("up"),
cst_no=caml_string_of_jsbytes("no"),
cst_right=caml_string_of_jsbytes("right"),
cst_scoped$0=caml_string_of_jsbytes("scoped"),
cst_numeric=caml_string_of_jsbytes("numeric"),
cst_pingback$0=caml_string_of_jsbytes("pingback"),
cst_radio=caml_string_of_jsbytes("radio"),
cst_pubdate$0=caml_string_of_jsbytes("pubdate"),
cst_multiple$0=caml_string_of_jsbytes("multiple"),
cst_latin_name=caml_string_of_jsbytes("latin-name"),
cst_autofocus$0=caml_string_of_jsbytes("autofocus"),
cst_nofollow$0=caml_string_of_jsbytes("nofollow"),
cst_defer$0=caml_string_of_jsbytes("defer"),
cst_full_width_latin=caml_string_of_jsbytes("full-width-latin"),
cst_default$0=caml_string_of_jsbytes("default"),
cst_context=caml_string_of_jsbytes("context"),
cst_verbatim=caml_string_of_jsbytes("verbatim"),
cst_checked$0=caml_string_of_jsbytes("checked"),
cst_stylesheet$0=caml_string_of_jsbytes("stylesheet"),
cst_reserved$0=caml_string_of_jsbytes("reserved"),
cst_alternate$0=caml_string_of_jsbytes("alternate"),
cst_http_www_w3_org_1999_xhtml=
caml_string_of_jsbytes("http://www.w3.org/1999/xhtml"),
cst_disabled$0=caml_string_of_jsbytes("disabled"),
cst_ismap$0=caml_string_of_jsbytes("ismap"),
cst_use_credentials=caml_string_of_jsbytes("use-credentials"),
cst_index$0=caml_string_of_jsbytes("index"),
cst_justify=caml_string_of_jsbytes("justify"),
cst_groups=caml_string_of_jsbytes("groups"),
cst_command$0=caml_string_of_jsbytes("command"),
cst_sidebar$0=caml_string_of_jsbytes("sidebar"),
cst_latin_prose=caml_string_of_jsbytes("latin-prose"),
cst_readonly$0=caml_string_of_jsbytes("readonly"),
cst_colgroup$0=caml_string_of_jsbytes("colgroup"),
cst_archives$0=caml_string_of_jsbytes("archives"),
cst_seamless$0=caml_string_of_jsbytes("seamless"),
cst_prefetch$0=caml_string_of_jsbytes("prefetch"),
cst_preserve$0=caml_string_of_jsbytes("preserve"),
cst_same_origin=caml_string_of_jsbytes("same-origin"),
cst_origin_when_cross_origin=
caml_string_of_jsbytes("origin-when-cross-origin"),
cst_no_referrer_when_downgrade=
caml_string_of_jsbytes("no-referrer-when-downgrade"),
cst_no_referrer=caml_string_of_jsbytes("no-referrer"),
cst_unsafe_url=caml_string_of_jsbytes("unsafe-url"),
cst$39=caml_string_of_jsbytes(""),
cst_origin=caml_string_of_jsbytes("origin"),
cst_strict_origin=caml_string_of_jsbytes("strict-origin"),
cst_strict_origin_when_cross_o=
caml_string_of_jsbytes("strict-origin-when-cross-origin"),
cst_projection=caml_string_of_jsbytes("projection"),
cst_aural=caml_string_of_jsbytes("aural"),
cst_handheld=caml_string_of_jsbytes("handheld"),
cst_embossed=caml_string_of_jsbytes("embossed"),
cst_tty=caml_string_of_jsbytes("tty"),
cst_all=caml_string_of_jsbytes("all"),
cst_tv=caml_string_of_jsbytes("tv"),
cst_screen$0=caml_string_of_jsbytes("screen"),
cst_speech=caml_string_of_jsbytes("speech"),
cst_print=caml_string_of_jsbytes("print"),
cst_braille=caml_string_of_jsbytes("braille"),
cst_external=caml_string_of_jsbytes("external"),
cst_canonical=caml_string_of_jsbytes("canonical"),
cst_prev=caml_string_of_jsbytes("prev"),
cst_next=caml_string_of_jsbytes("next"),
cst_last=caml_string_of_jsbytes("last"),
cst_icon$0=caml_string_of_jsbytes("icon"),
cst_help=caml_string_of_jsbytes("help"),
cst_noreferrer=caml_string_of_jsbytes("noreferrer"),
cst_author=caml_string_of_jsbytes("author"),
cst_license=caml_string_of_jsbytes("license"),
cst_search=caml_string_of_jsbytes("search"),
cst_noopener=caml_string_of_jsbytes("noopener"),
cst_first=caml_string_of_jsbytes("first"),
cst_bookmark=caml_string_of_jsbytes("bookmark"),
cst_tag=caml_string_of_jsbytes("tag"),
cst_up=caml_string_of_jsbytes("up"),
cst_pingback=caml_string_of_jsbytes("pingback"),
cst_nofollow=caml_string_of_jsbytes("nofollow"),
cst_stylesheet=caml_string_of_jsbytes("stylesheet"),
cst_alternate=caml_string_of_jsbytes("alternate"),
cst_index=caml_string_of_jsbytes("index"),
cst_sidebar=caml_string_of_jsbytes("sidebar"),
cst_archives=caml_string_of_jsbytes("archives"),
cst_prefetch=caml_string_of_jsbytes("prefetch"),
cst_allow_same_origin=caml_string_of_jsbytes("allow-same-origin"),
cst_allow_popups=caml_string_of_jsbytes("allow-popups"),
cst_allow_forms=caml_string_of_jsbytes("allow-forms"),
cst_allow_pointer_lock=caml_string_of_jsbytes("allow-pointer-lock"),
cst_allow_script=caml_string_of_jsbytes("allow-script"),
cst_allow_top_navigation=caml_string_of_jsbytes("allow-top-navigation"),
cst_link=caml_string_of_jsbytes("link"),
cst_style$2=caml_string_of_jsbytes("style"),
cst_picture=caml_string_of_jsbytes("picture"),
cst_img=caml_string_of_jsbytes("img"),
cst_object=caml_string_of_jsbytes("object"),
cst_table$0=caml_string_of_jsbytes("table"),
cst_figure=caml_string_of_jsbytes("figure"),
cst_optgroup=caml_string_of_jsbytes("optgroup"),
cst_fieldset=caml_string_of_jsbytes("fieldset"),
cst_details=caml_string_of_jsbytes("details"),
cst_datalist=caml_string_of_jsbytes("datalist"),
cst_menu=caml_string_of_jsbytes("menu"),
cst_command=caml_string_of_jsbytes("command"),
cst_area=caml_string_of_jsbytes("area"),
cst_coords=caml_string_of_jsbytes("coords"),
cst_shape=caml_string_of_jsbytes("shape"),
cst_bdo=caml_string_of_jsbytes("bdo"),
cst_nbsp=caml_string_of_jsbytes("nbsp"),
cst_html$0=caml_string_of_jsbytes("html"),
cst_aria=caml_string_of_jsbytes("aria-"),
cst_scrolling=caml_string_of_jsbytes("scrolling"),
cst_frameborder=caml_string_of_jsbytes("frameborder"),
cst_char=caml_string_of_jsbytes("char"),
cst_rules=caml_string_of_jsbytes("rules"),
cst_scope=caml_string_of_jsbytes("scope"),
cst_align=caml_string_of_jsbytes("align"),
cst_type$8=caml_string_of_jsbytes("type"),
cst_type$7=caml_string_of_jsbytes("type"),
cst_type$6=caml_string_of_jsbytes("type"),
cst_type$5=caml_string_of_jsbytes("type"),
cst_wrap$0=caml_string_of_jsbytes("wrap"),
cst_translate$0=caml_string_of_jsbytes("translate"),
cst_step=caml_string_of_jsbytes("step"),
cst_sizes=caml_string_of_jsbytes("sizes"),
cst_spellcheck=caml_string_of_jsbytes("spellcheck"),
cst_sandbox=caml_string_of_jsbytes("sandbox"),
cst_preload=caml_string_of_jsbytes("preload"),
cst_inputmode=caml_string_of_jsbytes("inputmode"),
cst_draggable=caml_string_of_jsbytes("draggable"),
cst_dir=caml_string_of_jsbytes("dir"),
cst_contenteditable=caml_string_of_jsbytes("contenteditable"),
cst_crossorigin=caml_string_of_jsbytes("crossorigin"),
cst_autocomplete=caml_string_of_jsbytes("autocomplete"),
cst_referrerpolicy=caml_string_of_jsbytes("referrerpolicy"),
cst_method$0=caml_string_of_jsbytes("method"),
cst_width$0=caml_string_of_jsbytes("width"),
cst_height$0=caml_string_of_jsbytes("height"),
cst_download=caml_string_of_jsbytes("download"),
cst_accesskey=caml_string_of_jsbytes("accesskey"),
cst_xml_space$0=caml_string_of_jsbytes("xml:space"),
cst_xmlns$4=caml_string_of_jsbytes("xmlns"),
cst_data$0=caml_string_of_jsbytes("data-"),
content_type$0=caml_string_of_jsbytes("text/html"),
alternative_content_types=
[0,
caml_string_of_jsbytes("application/xhtml+xml"),
[0,
caml_string_of_jsbytes("application/xml"),
[0,caml_string_of_jsbytes("text/xml"),0]]],
version$0=caml_string_of_jsbytes("HTML5-draft"),
standard$0=caml_string_of_jsbytes("http://www.w3.org/TR/html5/"),
namespace$0=caml_string_of_jsbytes("http://www.w3.org/1999/xhtml"),
cst_html=caml_string_of_jsbytes("html"),
emptytags=
caml_list_of_js_array
([caml_string_of_jsbytes("area"),
caml_string_of_jsbytes("base"),
caml_string_of_jsbytes("br"),
caml_string_of_jsbytes("col"),
caml_string_of_jsbytes("command"),
caml_string_of_jsbytes("embed"),
caml_string_of_jsbytes("hr"),
caml_string_of_jsbytes("img"),
caml_string_of_jsbytes("input"),
caml_string_of_jsbytes("keygen"),
caml_string_of_jsbytes("link"),
caml_string_of_jsbytes("meta"),
caml_string_of_jsbytes("param"),
caml_string_of_jsbytes("source"),
caml_string_of_jsbytes("wbr")]),
cst_class$0=caml_string_of_jsbytes("class"),
cst_id$0=caml_string_of_jsbytes("id"),
cst_title$0=caml_string_of_jsbytes("title"),
cst_xml_lang$0=caml_string_of_jsbytes("xml:lang"),
cst_lang$0=caml_string_of_jsbytes("lang"),
cst_style$1=caml_string_of_jsbytes("style"),
cst_property=caml_string_of_jsbytes("property"),
cst_onabort$0=caml_string_of_jsbytes("onabort"),
cst_onafterprint=caml_string_of_jsbytes("onafterprint"),
cst_onbeforeprint=caml_string_of_jsbytes("onbeforeprint"),
cst_onbeforeunload=caml_string_of_jsbytes("onbeforeunload"),
cst_onblur=caml_string_of_jsbytes("onblur"),
cst_oncanplay=caml_string_of_jsbytes("oncanplay"),
cst_oncanplaythrough=caml_string_of_jsbytes("oncanplaythrough"),
cst_onchange=caml_string_of_jsbytes("onchange"),
cst_ondurationchange=caml_string_of_jsbytes("ondurationchange"),
cst_onemptied=caml_string_of_jsbytes("onemptied"),
cst_onended=caml_string_of_jsbytes("onended"),
cst_onerror$0=caml_string_of_jsbytes("onerror"),
cst_onfocus=caml_string_of_jsbytes("onfocus"),
cst_onformchange=caml_string_of_jsbytes("onformchange"),
cst_onforminput=caml_string_of_jsbytes("onforminput"),
cst_onhashchange=caml_string_of_jsbytes("onhashchange"),
cst_oninput=caml_string_of_jsbytes("oninput"),
cst_oninvalid=caml_string_of_jsbytes("oninvalid"),
cst_onoffline=caml_string_of_jsbytes("onoffline"),
cst_ononline=caml_string_of_jsbytes("ononline"),
cst_onpause=caml_string_of_jsbytes("onpause"),
cst_onplay=caml_string_of_jsbytes("onplay"),
cst_onplaying=caml_string_of_jsbytes("onplaying"),
cst_onpagehide=caml_string_of_jsbytes("onpagehide"),
cst_onpageshow=caml_string_of_jsbytes("onpageshow"),
cst_onpopstate=caml_string_of_jsbytes("onpopstate"),
cst_onprogress=caml_string_of_jsbytes("onprogress"),
cst_onratechange=caml_string_of_jsbytes("onratechange"),
cst_onreadystatechange=caml_string_of_jsbytes("onreadystatechange"),
cst_onredo=caml_string_of_jsbytes("onredo"),
cst_onresize$0=caml_string_of_jsbytes("onresize"),
cst_onscroll$0=caml_string_of_jsbytes("onscroll"),
cst_onseeked=caml_string_of_jsbytes("onseeked"),
cst_onseeking=caml_string_of_jsbytes("onseeking"),
cst_onselect=caml_string_of_jsbytes("onselect"),
cst_onshow=caml_string_of_jsbytes("onshow"),
cst_onstalled=caml_string_of_jsbytes("onstalled"),
cst_onstorage=caml_string_of_jsbytes("onstorage"),
cst_onsubmit=caml_string_of_jsbytes("onsubmit"),
cst_onsuspend=caml_string_of_jsbytes("onsuspend"),
cst_ontimeupdate=caml_string_of_jsbytes("ontimeupdate"),
cst_onundo=caml_string_of_jsbytes("onundo"),
cst_onunload$0=caml_string_of_jsbytes("onunload"),
cst_onvolumechange=caml_string_of_jsbytes("onvolumechange"),
cst_onwaiting=caml_string_of_jsbytes("onwaiting"),
cst_onload$0=caml_string_of_jsbytes("onload"),
cst_onloadeddata=caml_string_of_jsbytes("onloadeddata"),
cst_onloadedmetadata=caml_string_of_jsbytes("onloadedmetadata"),
cst_onloadstart=caml_string_of_jsbytes("onloadstart"),
cst_onmessage=caml_string_of_jsbytes("onmessage"),
cst_onmousewheel=caml_string_of_jsbytes("onmousewheel"),
cst_onclick$0=caml_string_of_jsbytes("onclick"),
cst_oncontextmenu=caml_string_of_jsbytes("oncontextmenu"),
cst_ondblclick=caml_string_of_jsbytes("ondblclick"),
cst_ondrag=caml_string_of_jsbytes("ondrag"),
cst_ondragend=caml_string_of_jsbytes("ondragend"),
cst_ondragenter=caml_string_of_jsbytes("ondragenter"),
cst_ondragleave=caml_string_of_jsbytes("ondragleave"),
cst_ondragover=caml_string_of_jsbytes("ondragover"),
cst_ondragstart=caml_string_of_jsbytes("ondragstart"),
cst_ondrop=caml_string_of_jsbytes("ondrop"),
cst_onmousedown$0=caml_string_of_jsbytes("onmousedown"),
cst_onmouseup$0=caml_string_of_jsbytes("onmouseup"),
cst_onmouseover$0=caml_string_of_jsbytes("onmouseover"),
cst_onmousemove$0=caml_string_of_jsbytes("onmousemove"),
cst_onmouseout$0=caml_string_of_jsbytes("onmouseout"),
cst_ontouchstart$0=caml_string_of_jsbytes("ontouchstart"),
cst_ontouchend$0=caml_string_of_jsbytes("ontouchend"),
cst_ontouchmove$0=caml_string_of_jsbytes("ontouchmove"),
cst_ontouchcancel$0=caml_string_of_jsbytes("ontouchcancel"),
cst_onkeypress=caml_string_of_jsbytes("onkeypress"),
cst_onkeydown=caml_string_of_jsbytes("onkeydown"),
cst_onkeyup=caml_string_of_jsbytes("onkeyup"),
cst_version$0=caml_string_of_jsbytes("version"),
cst_manifest=caml_string_of_jsbytes("manifest"),
cst_cite=caml_string_of_jsbytes("cite"),
cst_charset=caml_string_of_jsbytes("charset"),
cst_accept_charset=caml_string_of_jsbytes("accept-charset"),
cst_accept=caml_string_of_jsbytes("accept"),
cst_href$0=caml_string_of_jsbytes("href"),
cst_hreflang=caml_string_of_jsbytes("hreflang"),
cst_rel=caml_string_of_jsbytes("rel"),
cst_tabindex=caml_string_of_jsbytes("tabindex"),
cst_type$4=caml_string_of_jsbytes("type"),
cst_alt=caml_string_of_jsbytes("alt"),
cst_src=caml_string_of_jsbytes("src"),
cst_for=caml_string_of_jsbytes("for"),
cst_for$0=caml_string_of_jsbytes("for"),
cst_selected=caml_string_of_jsbytes("selected"),
cst_value=caml_string_of_jsbytes("value"),
cst_value$0=caml_string_of_jsbytes("value"),
cst_value$1=caml_string_of_jsbytes("value"),
cst_value$2=caml_string_of_jsbytes("value"),
cst_action=caml_string_of_jsbytes("action"),
cst_enctype=caml_string_of_jsbytes("enctype"),
cst_checked=caml_string_of_jsbytes("checked"),
cst_disabled=caml_string_of_jsbytes("disabled"),
cst_readonly=caml_string_of_jsbytes("readonly"),
cst_maxlength=caml_string_of_jsbytes("maxlength"),
cst_minlength=caml_string_of_jsbytes("minlength"),
cst_name$0=caml_string_of_jsbytes("name"),
cst_allowfullscreen=caml_string_of_jsbytes("allowfullscreen"),
cst_allowpaymentrequest=caml_string_of_jsbytes("allowpaymentrequest"),
cst_async=caml_string_of_jsbytes("async"),
cst_autofocus=caml_string_of_jsbytes("autofocus"),
cst_autoplay=caml_string_of_jsbytes("autoplay"),
cst_muted=caml_string_of_jsbytes("muted"),
cst_integrity=caml_string_of_jsbytes("integrity"),
cst_mediagroup=caml_string_of_jsbytes("mediagroup"),
cst_challenge=caml_string_of_jsbytes("challenge"),
cst_contextmenu=caml_string_of_jsbytes("contextmenu"),
cst_controls=caml_string_of_jsbytes("controls"),
cst_form=caml_string_of_jsbytes("form"),
cst_formaction=caml_string_of_jsbytes("formaction"),
cst_formenctype=caml_string_of_jsbytes("formenctype"),
cst_formnovalidate=caml_string_of_jsbytes("formnovalidate"),
cst_formtarget=caml_string_of_jsbytes("formtarget"),
cst_hidden=caml_string_of_jsbytes("hidden"),
cst_high=caml_string_of_jsbytes("high"),
cst_icon=caml_string_of_jsbytes("icon"),
cst_ismap=caml_string_of_jsbytes("ismap"),
cst_keytype=caml_string_of_jsbytes("keytype"),
cst_list=caml_string_of_jsbytes("list"),
cst_loop=caml_string_of_jsbytes("loop"),
cst_low=caml_string_of_jsbytes("low"),
cst_max$0=caml_string_of_jsbytes("max"),
cst_max$1=caml_string_of_jsbytes("max"),
cst_min$0=caml_string_of_jsbytes("min"),
cst_min$1=caml_string_of_jsbytes("min"),
cst_novalidate=caml_string_of_jsbytes("novalidate"),
cst_open=caml_string_of_jsbytes("open"),
cst_optimum=caml_string_of_jsbytes("optimum"),
cst_pattern$0=caml_string_of_jsbytes("pattern"),
cst_placeholder=caml_string_of_jsbytes("placeholder"),
cst_poster=caml_string_of_jsbytes("poster"),
cst_pubdate=caml_string_of_jsbytes("pubdate"),
cst_radiogroup=caml_string_of_jsbytes("radiogroup"),
cst_required=caml_string_of_jsbytes("required"),
cst_reserved=caml_string_of_jsbytes("reserved"),
cst_scoped=caml_string_of_jsbytes("scoped"),
cst_seamless=caml_string_of_jsbytes("seamless"),
cst_span=caml_string_of_jsbytes("span"),
cst_xml_lang$1=caml_string_of_jsbytes("xml:lang"),
cst_srcset=caml_string_of_jsbytes("srcset"),
cst_sizes$0=caml_string_of_jsbytes("sizes"),
cst_start$0=caml_string_of_jsbytes("start"),
cst_size=caml_string_of_jsbytes("size"),
cst_multiple=caml_string_of_jsbytes("multiple"),
cst_cols=caml_string_of_jsbytes("cols"),
cst_rows=caml_string_of_jsbytes("rows"),
cst_summary=caml_string_of_jsbytes("summary"),
cst_axis=caml_string_of_jsbytes("axis"),
cst_colspan=caml_string_of_jsbytes("colspan"),
cst_headers=caml_string_of_jsbytes("headers"),
cst_rowspan=caml_string_of_jsbytes("rowspan"),
cst_border=caml_string_of_jsbytes("border"),
cst_data$1=caml_string_of_jsbytes("data"),
cst_codetype=caml_string_of_jsbytes("codetype"),
cst_marginheight=caml_string_of_jsbytes("marginheight"),
cst_marginwidth=caml_string_of_jsbytes("marginwidth"),
cst_target=caml_string_of_jsbytes("target"),
cst_content=caml_string_of_jsbytes("content"),
cst_http_equiv=caml_string_of_jsbytes("http-equiv"),
cst_media$0=caml_string_of_jsbytes("media"),
cst_role=caml_string_of_jsbytes("role"),
cst_body=caml_string_of_jsbytes("body"),
cst_head=caml_string_of_jsbytes("head"),
cst_title$1=caml_string_of_jsbytes("title"),
cst_footer=caml_string_of_jsbytes("footer"),
cst_header=caml_string_of_jsbytes("header"),
cst_section=caml_string_of_jsbytes("section"),
cst_nav=caml_string_of_jsbytes("nav"),
cst_h1=caml_string_of_jsbytes("h1"),
cst_h2=caml_string_of_jsbytes("h2"),
cst_h3=caml_string_of_jsbytes("h3"),
cst_h4=caml_string_of_jsbytes("h4"),
cst_h5=caml_string_of_jsbytes("h5"),
cst_h6=caml_string_of_jsbytes("h6"),
cst_hgroup=caml_string_of_jsbytes("hgroup"),
cst_address=caml_string_of_jsbytes("address"),
cst_blockquote=caml_string_of_jsbytes("blockquote"),
cst_div=caml_string_of_jsbytes("div"),
cst_p=caml_string_of_jsbytes("p"),
cst_pre=caml_string_of_jsbytes("pre"),
cst_abbr=caml_string_of_jsbytes("abbr"),
cst_br=caml_string_of_jsbytes("br"),
cst_cite$0=caml_string_of_jsbytes("cite"),
cst_code=caml_string_of_jsbytes("code"),
cst_dfn=caml_string_of_jsbytes("dfn"),
cst_em$0=caml_string_of_jsbytes("em"),
cst_kbd=caml_string_of_jsbytes("kbd"),
cst_q=caml_string_of_jsbytes("q"),
cst_samp=caml_string_of_jsbytes("samp"),
cst_span$0=caml_string_of_jsbytes("span"),
cst_strong=caml_string_of_jsbytes("strong"),
cst_time=caml_string_of_jsbytes("time"),
cst_var=caml_string_of_jsbytes("var"),
cst_a$1=caml_string_of_jsbytes("a"),
cst_dl=caml_string_of_jsbytes("dl"),
cst_ol=caml_string_of_jsbytes("ol"),
cst_ul=caml_string_of_jsbytes("ul"),
cst_dd=caml_string_of_jsbytes("dd"),
cst_dt=caml_string_of_jsbytes("dt"),
cst_li=caml_string_of_jsbytes("li"),
cst_hr=caml_string_of_jsbytes("hr"),
cst_b$0=caml_string_of_jsbytes("b"),
cst_i=caml_string_of_jsbytes("i"),
cst_u=caml_string_of_jsbytes("u"),
cst_small=caml_string_of_jsbytes("small"),
cst_sub=caml_string_of_jsbytes("sub"),
cst_sup=caml_string_of_jsbytes("sup"),
cst_mark=caml_string_of_jsbytes("mark"),
cst_rp=caml_string_of_jsbytes("rp"),
cst_rt=caml_string_of_jsbytes("rt"),
cst_ruby=caml_string_of_jsbytes("ruby"),
cst_wbr=caml_string_of_jsbytes("wbr"),
cst_datetime=caml_string_of_jsbytes("datetime"),
cst_usemap=caml_string_of_jsbytes("usemap"),
cst_defer=caml_string_of_jsbytes("defer"),
cst_label=caml_string_of_jsbytes("label"),
cst_map=caml_string_of_jsbytes("map"),
cst_del=caml_string_of_jsbytes("del"),
cst_ins=caml_string_of_jsbytes("ins"),
cst_script$0=caml_string_of_jsbytes("script"),
cst_noscript=caml_string_of_jsbytes("noscript"),
cst_template=caml_string_of_jsbytes("template"),
cst_article=caml_string_of_jsbytes("article"),
cst_aside=caml_string_of_jsbytes("aside"),
cst_main=caml_string_of_jsbytes("main"),
cst_audio=caml_string_of_jsbytes("audio"),
cst_video=caml_string_of_jsbytes("video"),
cst_canvas=caml_string_of_jsbytes("canvas"),
cst_embed=caml_string_of_jsbytes("embed"),
cst_source=caml_string_of_jsbytes("source"),
cst_meter=caml_string_of_jsbytes("meter"),
cst_output=caml_string_of_jsbytes("output"),
cst_form$0=caml_string_of_jsbytes("form"),
cst_input=caml_string_of_jsbytes("input"),
cst_keygen=caml_string_of_jsbytes("keygen"),
cst_label$0=caml_string_of_jsbytes("label"),
cst_option=caml_string_of_jsbytes("option"),
cst_select=caml_string_of_jsbytes("select"),
cst_textarea=caml_string_of_jsbytes("textarea"),
cst_button=caml_string_of_jsbytes("button"),
cst_progress=caml_string_of_jsbytes("progress"),
cst_legend=caml_string_of_jsbytes("legend"),
cst_summary$0=caml_string_of_jsbytes("summary"),
cst_figcaption=caml_string_of_jsbytes("figcaption"),
cst_caption=caml_string_of_jsbytes("caption"),
cst_td=caml_string_of_jsbytes("td"),
cst_th=caml_string_of_jsbytes("th"),
cst_tr=caml_string_of_jsbytes("tr"),
cst_colgroup=caml_string_of_jsbytes("colgroup"),
cst_col=caml_string_of_jsbytes("col"),
cst_thead=caml_string_of_jsbytes("thead"),
cst_tbody=caml_string_of_jsbytes("tbody"),
cst_tfoot=caml_string_of_jsbytes("tfoot"),
cst_iframe=caml_string_of_jsbytes("iframe"),
cst_param=caml_string_of_jsbytes("param"),
cst_meta=caml_string_of_jsbytes("meta"),
cst_base=caml_string_of_jsbytes("base"),
Stdlib=global_data.Stdlib,
Stdlib_List=global_data.Stdlib__List,
Stdlib_Seq=global_data.Stdlib__Seq,
Stdlib_Printf=global_data.Stdlib__Printf,
Stdlib_String=global_data.Stdlib__String,
Stdlib_Format=global_data.Stdlib__Format,
Stdlib_Set=global_data.Stdlib__Set,
Stdlib_Uchar=global_data.Stdlib__Uchar,
Stdlib_Buffer=global_data.Stdlib__Buffer,
Uutf=global_data.Uutf,
Re=global_data.Re,
_L_=[0,[2,0,[12,61,[2,0,0]]],caml_string_of_jsbytes("%s=%s")],
_H_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
_I_=[0,[12,34,[4,0,0,0,[12,34,0]]],caml_string_of_jsbytes('"%d"')],
_J_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
_K_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
_F_=
[0,
[2,0,[17,[0,caml_string_of_jsbytes("@,"),0,0],0]],
caml_string_of_jsbytes("%s@,")],
_G_=
[0,
[11,
caml_string_of_jsbytes("<!-- "),
[2,
0,
[11,
caml_string_of_jsbytes(" -->"),
[17,[0,caml_string_of_jsbytes("@,"),0,0],0]]]],
caml_string_of_jsbytes("<!-- %s -->@,")],
_C_=
[0,
[12,
60,
[16,
[15,
[12,
62,
[16,
[15,[16,[16,[11,caml_string_of_jsbytes("<\/"),[2,0,partial]]]]]]]]]],
caml_string_of_jsbytes("<%t%a>%t%a%t%t<\/%s>")],
_D_=
[0,
[11,
caml_string_of_jsbytes("<!--"),
[2,0,[11,caml_string_of_jsbytes("-->"),0]]],
caml_string_of_jsbytes("<!--%s-->")],
_E_=[0,[12,38,[2,0,[12,59,0]]],caml_string_of_jsbytes("&%s;")],
_A_=
[0,
[12,60,[15,[11,caml_string_of_jsbytes("/>"),0]]],
caml_string_of_jsbytes("<%a/>")],
_B_=
[0,
[12,
60,
[15,[12,62,[16,[11,caml_string_of_jsbytes("<\/"),[2,0,[12,62,0]]]]]]],
caml_string_of_jsbytes("<%a>%t<\/%s>")],
_z_=[0,[2,0,[15,[16,0]]],caml_string_of_jsbytes("%s%a%t")],
_y_=[0,[16,[2,0,[12,61,[15,0]]]],caml_string_of_jsbytes("%t%s=%a")],
_u_=[0,[12,34,[15,[12,34,0]]],caml_string_of_jsbytes('"%a"')],
_v_=[0,[12,34,[4,0,0,0,[12,34,0]]],caml_string_of_jsbytes('"%d"')],
_w_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
_x_=[0,[12,34,[15,[12,34,0]]],caml_string_of_jsbytes('"%a"')],
_t_=[0,[12,44,[16,0]],caml_string_of_jsbytes(",%t")],
_s_=
[0,
[18,[1,[0,0,caml_string_of_jsbytes("")]],[15,[17,0,0]]],
caml_string_of_jsbytes("@[%a@]")],
_r_=[0,[15,0],caml_string_of_jsbytes("%a")],
_n_=[0,[4,0,0,0,[12,101,[4,0,0,0,0]]],caml_string_of_jsbytes("%de%d")],
_o_=[0,[8,[0,0,3],0,[0,12],0],caml_string_of_jsbytes("%.12g")],
_p_=[0,[8,[0,0,3],0,[0,15],0],caml_string_of_jsbytes("%.15g")],
_q_=[0,[8,[0,0,3],0,[0,18],0],caml_string_of_jsbytes("%.18g")],
_m_=[0,1],
_c_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
_d_=
[0,
[11,caml_string_of_jsbytes(" PUBLIC "),[15,0]],
caml_string_of_jsbytes(" PUBLIC %a")],
_e_=
[0,
[11,caml_string_of_jsbytes("<!DOCTYPE "),[2,0,[15,[12,62,0]]]],
caml_string_of_jsbytes("<!DOCTYPE %s%a>")],
_b_=
[0,
[11,
caml_string_of_jsbytes('<?xml version="'),
[2,
0,
[11,
caml_string_of_jsbytes('" encoding="'),
[2,0,[11,caml_string_of_jsbytes('"?>\\n'),0]]]]],
caml_string_of_jsbytes('<?xml version="%s" encoding="%s"?>\\n')],
_X_=
[0,
[11,caml_string_of_jsbytes("skewY("),[2,0,[12,41,0]]],
caml_string_of_jsbytes("skewY(%s)")],
_Y_=
[0,
[11,caml_string_of_jsbytes("skewX("),[2,0,[12,41,0]]],
caml_string_of_jsbytes("skewX(%s)")],
_Z_=
[0,
[11,caml_string_of_jsbytes("scale("),[2,0,[12,41,0]]],
caml_string_of_jsbytes("scale(%s)")],
___=
[0,
[8,[0,0,3],0,0,[12,32,[8,[0,0,3],0,0,0]]],
caml_string_of_jsbytes("%g %g")],
_$_=
[0,
[11,caml_string_of_jsbytes("rotate("),[2,0,[12,32,[2,0,[12,41,0]]]]],
caml_string_of_jsbytes("rotate(%s %s)")],
_aa_=
[0,
[11,
caml_string_of_jsbytes("matrix("),
[8,
[0,0,3],
0,
0,
[12,
32,
[8,
[0,0,3],
0,
0,
[12,
32,
[8,
[0,0,3],
0,
0,
[12,32,[8,[0,0,3],0,0,[12,32,[8,partial$1,0,0,partial$0]]]]]]]]]],
caml_string_of_jsbytes("matrix(%g %g %g %g %g %g)")],
_ab_=
[0,
[11,caml_string_of_jsbytes("translate("),[2,0,[12,41,0]]],
caml_string_of_jsbytes("translate(%s)")],
_U_=
[0,
[8,[0,0,3],0,0,[11,caml_string_of_jsbytes(", "),[8,[0,0,3],0,0,0]]],
caml_string_of_jsbytes("%g, %g")],
_V_=[0,[8,[0,0,3],0,0,0],caml_string_of_jsbytes("%g")],
_T_=
[0,
[2,0,[12,32,[2,0,[12,32,[2,0,[12,32,[2,0,0]]]]]]],
caml_string_of_jsbytes("%s %s %s %s")],
_S_=
[0,
[8,[0,0,3],0,0,[11,caml_string_of_jsbytes(", "),[8,[0,0,3],0,0,0]]],
caml_string_of_jsbytes("%g, %g")],
_W_=[0,caml_string_of_jsbytes("; ")],
_R_=
[0,
caml_string_of_jsbytes("-//W3C//DTD SVG 1.1//EN"),
[0,
caml_string_of_jsbytes
("http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"),
0]],
_Q_=[0,[8,[0,0,3],0,0,[2,0,0]],caml_string_of_jsbytes("%g%s")],
_P_=
[0,
[11,caml_string_of_jsbytes("url("),[2,0,[12,41,0]]],
caml_string_of_jsbytes("url(%s)")],
_ag_=[0,[2,0,[12,32,[2,0,[12,120,0]]]],caml_string_of_jsbytes("%s %sx")],
_af_=[0,[2,0,[12,32,[2,0,[12,119,0]]]],caml_string_of_jsbytes("%s %sw")],
_ae_=[0,[4,0,0,0,[12,120,[4,0,0,0,0]]],caml_string_of_jsbytes("%dx%d")];
function fmap(f){return f}
function nil(param){return 0}
function singleton(x){return [0,x,0]}
function cons(x,xs){return [0,x,xs]}
function append(x,y){return caml_call2(Stdlib[37],x,y)}
var
map=Stdlib_List[19],
Xml_wrap=
[0,[0,function(_nk_){return _nk_},fmap,nil,singleton,cons,append,map]];
caml_register_global(1088,Xml_wrap,"Xml_wrap");
var
Malformed_stream=
[248,cst_Xml_stream_Malformed_strea,runtime.caml_fresh_oo_id(0)];
function _a_(Xml)
{function of_list(l)
{var _nh_=caml_call1(Xml[1][3],0);
function _ni_(a,b)
{var _nj_=caml_call1(Xml[1][1],a);
return caml_call2(Xml[1][5],_nj_,b)}
return caml_call3(Stdlib_List[26],_ni_,l,_nh_)}
function mk(children,seq)
{var children$0=children,seq$0=seq;
for(;;)
{var match=caml_call1(seq$0,0);
if(match)
{var _m$_=match[1];
if(typeof _m$_ === "number")
{var rest=match[2];
return [0,of_list(caml_call1(Stdlib_List[9],children$0)),rest]}
var _na_=_m$_[1];
if(856096383 === _na_)
{var
q=match[2],
_nb_=_m$_[2],
attrs=_nb_[2],
match$0=_nb_[1],
name=match$0[2],
f=
function(param)
{var
v=param[2],
match=param[1],
name=match[2],
_ng_=caml_call1(Xml[1][1],v);
return caml_call2(Xml[6],name,_ng_)},
a=caml_call2(Stdlib_List[19],f,attrs),
match$1=mk(0,q),
rest$0=match$1[2],
sub_children=match$1[1],
children$1=
[0,caml_call3(Xml[21],[0,a],name,sub_children),children$0],
children$0=children$1,
seq$0=rest$0;
continue}
if(936573133 <= _na_)
{var
q$0=match[2],
s=_m$_[2],
_nc_=
function(x)
{var _nf_=caml_call1(Xml[1][1],x);
return caml_call1(Xml[17],_nf_)},
_nd_=caml_call2(Stdlib_List[19],_nc_,s),
children$2=caml_call2(Stdlib[37],_nd_,children$0),
children$0=children$2,
seq$0=q$0;
continue}
var
q$1=match[2],
s$0=_m$_[2],
children$3=[0,caml_call1(Xml[16],s$0),children$0],
children$0=children$3,
seq$0=q$1;
continue}
var _ne_=Stdlib_Seq[18];
return [0,of_list(caml_call1(Stdlib_List[9],children$0)),_ne_]}}
function of_seq(seq)
{var
match=mk(0,seq),
rest=match[2],
l=match[1],
match$0=caml_call1(rest,0);
if(match$0)throw Malformed_stream;
return l}
return [0,of_seq]}
var Xml_stream=[0,Malformed_stream,_a_];
caml_register_global(1090,Xml_stream,"Xml_stream");
function add_unsafe_char(b,c)
{if(34 === c)return caml_call2(Stdlib_Buffer[16],b,cst_quot);
if(60 <= c)
{if(! (63 <= c))
switch(c - 60 | 0)
{case 0:return caml_call2(Stdlib_Buffer[16],b,cst_lt);
case 1:break;
default:return caml_call2(Stdlib_Buffer[16],b,cst_gt)}}
else
if(38 === c)return caml_call2(Stdlib_Buffer[16],b,cst_amp);
var _m4_=c <= 8?1:0;
if(_m4_)
var _m5_=_m4_;
else
{var _m6_=11 === c?1:0;
if(_m6_)
var _m5_=_m6_;
else
{var _m7_=12 === c?1:0;
if(_m7_)
var _m5_=_m7_;
else
var
_m8_=14 <= c?1:0,
_m9_=_m8_?c <= 31?1:0:_m8_,
_m5_=_m9_ || (127 === c?1:0)}}
if(_m5_)
{caml_call2(Stdlib_Buffer[16],b,cst);
var _m__=caml_call1(Stdlib[33],c);
caml_call2(Stdlib_Buffer[16],b,_m__);
return caml_call2(Stdlib_Buffer[16],b,cst$0)}
return caml_call2(Stdlib_Buffer[12],b,c)}
function encode_unsafe_char(s)
{var b=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(s));
function _m2_(_m3_){return add_unsafe_char(b,_m3_)}
caml_call2(Stdlib_String[29],_m2_,s);
return caml_call1(Stdlib_Buffer[2],b)}
function encode_unsafe_char_and_at(s)
{var b=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(s));
function f(c)
{return 64 === c
?caml_call2(Stdlib_Buffer[16],b,cst_64)
:add_unsafe_char(b,c)}
caml_call2(Stdlib_String[29],f,s);
return caml_call1(Stdlib_Buffer[2],b)}
function compose_decl(opt,_m1_,param)
{if(opt)var sth=opt[1],version=sth;else var version=cst_1_0;
if(_m1_)var sth$0=_m1_[1],encoding=sth$0;else var encoding=cst_UTF_8;
return caml_call3(Stdlib_Format[132],_b_,version,encoding)}
function compose_doctype(dt,args)
{function pp_args(fmt,l)
{if(l)
{var
_mZ_=function(fmt){return caml_call2(Stdlib_Format[129],fmt,_c_)},
_m0_=caml_call2(Stdlib_Format[123],[0,Stdlib_Format[27]],_mZ_);
return caml_call4(Stdlib_Format[129],fmt,_d_,_m0_,l)}
return 0}
return caml_call4(Stdlib_Format[133],_e_,dt,pp_args,args)}
var
_f_=[0,caml_call1(Re[23],cst$1),0],
_g_=[0,caml_call1(Re[23],cst$2),_f_],
_h_=[0,caml_call1(Re[23],cst$3),0],
_i_=[0,caml_call1(Re[26],[0,Re[37],_h_]),_g_],
_j_=[0,caml_call1(Re[23],cst$4),0],
_k_=[0,caml_call1(Re[26],[0,Re[37],_j_]),_i_],
_l_=caml_call1(Re[25],_k_),
re_end_comment=caml_call1(Re[2],_l_);
function pp_number(fmt,v)
{if(v == Stdlib[22])
return caml_call2(Stdlib_Format[13],fmt,cst_Infinity);
if(v == Stdlib[23])
return caml_call2(Stdlib_Format[13],fmt,cst_Infinity$0);
if(v != v)return caml_call2(Stdlib_Format[13],fmt,cst_NaN);
var n=v | 0;
if(n == v)
{var n$0=n,i=0;
for(;;)
{if(0 !== n$0 && 0 === (n$0 % 10 | 0))
{var i$0=i + 1 | 0,n$1=n$0 / 10 | 0,n$0=n$1,i=i$0;continue}
return 2 < i
?caml_call4(Stdlib_Format[129],fmt,_n_,n$0,i)
:caml_call2(Stdlib_Format[19],fmt,n)}}
var s1=caml_call2(Stdlib_Printf[4],_o_,v);
if(v == caml_float_of_string(s1))
return caml_call2(Stdlib_Format[13],fmt,s1);
var s2=caml_call2(Stdlib_Printf[4],_p_,v);
return v == caml_float_of_string(s2)
?caml_call2(Stdlib_Format[13],fmt,s2)
:caml_call3(Stdlib_Format[129],fmt,_q_,v)}
function string_of_number(v)
{return caml_call3(Stdlib_Format[133],_r_,pp_number,v)}
function normalize(src)
{var
warn=[0,0],
buffer=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(src)),
_mV_=0;
function _mW_(param,_mY_,d)
{if(852405675 <= d[1])
{var code=d[2];return caml_call2(Uutf[23][1],buffer,code)}
caml_call2(Uutf[23][1],buffer,Uutf[2]);
warn[1] = 1;
return 0}
caml_call5(Uutf[22][2],0,0,_mW_,_mV_,src);
var _mX_=warn[1];
return [0,caml_call1(Stdlib_Buffer[2],buffer),_mX_]}
function normalize_html(src)
{var l=caml_ml_string_length(src),i=0;
for(;;)
{var _mP_=i < l?1:0;
if(_mP_)
{var match=runtime.caml_string_get(src,i),switch$0=0;
if(35 <= match)
{if(61 <= match)
{if(62 === match)switch$0 = 1;else if(127 <= match)switch$0 = 2}
else
if(38 === match || 60 <= match)switch$0 = 1}
else
if(11 <= match)
{if(32 <= match)
{if(34 <= match)switch$0 = 1}
else
if(13 !== match)switch$0 = 2}
else
if(! (9 <= match))switch$0 = 2;
switch(switch$0)
{case 2:var _mQ_=1;break;
case 1:var _mQ_=1;break;
default:var i$0=i + 1 | 0,i=i$0;continue}}
else
var _mQ_=_mP_;
if(_mQ_)
{var
warn=[0,0],
buffer=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(src)),
_mR_=0,
_mS_=
function(param,_mU_,d)
{if(852405675 <= d[1])
{var u=d[2],code=caml_call1(Stdlib_Uchar[10],u);
if(34 === code)
return caml_call2(Stdlib_Buffer[16],buffer,cst_quot$0);
if(60 <= code)
{if(! (63 <= code))
switch(code - 60 | 0)
{case 0:
return caml_call2(Stdlib_Buffer[16],buffer,cst_lt$0);
case 1:break;
default:return caml_call2(Stdlib_Buffer[16],buffer,cst_gt$4)}}
else
if(38 === code)
return caml_call2(Stdlib_Buffer[16],buffer,cst_amp$0);
var switch$0=0;
if(! (31 < code) && 9 !== code && 10 !== code && 13 !== code)
switch$0 = 1;
var switch$1=0;
if(! switch$0)
{var switch$2=0;
if(127 <= code && ! (159 < code))switch$2 = 1;
if
(!
switch$2
&&
65534
!==
(code & 65535)
&&
65535
!==
(code & 65535))
{var u$0=u;switch$1 = 1}}
if(! switch$1){warn[1] = 1;var u$0=Uutf[2]}
return caml_call2(Uutf[23][1],buffer,u$0)}
caml_call2(Uutf[23][1],buffer,Uutf[2]);
warn[1] = 1;
return 0};
caml_call5(Uutf[22][2],0,0,_mS_,_mR_,src);
var _mT_=warn[1];
return [0,caml_call1(Stdlib_Buffer[2],buffer),_mT_]}
return [0,src,0]}}
function pp_noop(fmt,param){return 0}
function Make_fmt(Xml,_lY_)
{function open_box(indent,fmt)
{return indent?caml_call2(Stdlib_Format[1],fmt,0):0}
function close_box(indent,fmt)
{return indent?caml_call2(Stdlib_Format[3],fmt,0):0}
function sp(indent,fmt)
{return indent
?caml_call2(Stdlib_Format[27],fmt,0)
:caml_call2(Stdlib_Format[13],fmt,cst$9)}
function cut(indent,fmt)
{return indent?caml_call2(Stdlib_Format[29],fmt,0):0}
var S=caml_call1(Stdlib_Set[1],[0,Stdlib_String[9]]),_lZ_=_lY_[1];
if(_lZ_)
var
_l0_=S[1],
_l1_=function(s,x){return caml_call2(S[4],x,s)},
set=caml_call3(Stdlib_List[25],_l1_,_l0_,_lZ_),
is_emptytag=function(x){return caml_call2(S[3],x,set)};
else
var is_emptytag=function(param){return 0};
function pp_encode(encode,indent,fmt,s)
{var s$0=caml_call1(encode,s);
return indent
?caml_call4(Stdlib_Format[129],fmt,_s_,Stdlib_Format[125],s$0)
:caml_call2(Stdlib_Format[13],fmt,s$0)}
function pp_sep(indent,param)
{return param
?function(fmt,param)
{function _mN_(_mO_){return sp(indent,_mO_)}
return caml_call3(Stdlib_Format[129],fmt,_t_,_mN_)}
:function(fmt,param){return sp(indent,fmt)}}
function pp_attrib_value(encode,indent,fmt,a)
{var match=caml_call1(Xml[26],a);
switch(match[0])
{case 0:
var f=match[1];
return caml_call4(Stdlib_Format[129],fmt,_u_,pp_number,f);
case 1:
var i=match[1];return caml_call3(Stdlib_Format[129],fmt,_v_,i);
case 2:
var s=match[1],_mH_=caml_call1(encode,s);
return caml_call3(Stdlib_Format[129],fmt,_w_,_mH_);
default:
var
slist=match[2],
sep=match[1],
_mI_=
function(_mL_,_mM_){return pp_encode(encode,indent,_mL_,_mM_)},
_mJ_=[0,pp_sep(indent,sep)],
_mK_=caml_call2(Stdlib_Format[123],_mJ_,_mI_);
return caml_call4(Stdlib_Format[129],fmt,_x_,_mK_,slist)}}
function pp_attrib(encode,indent,fmt,a)
{function _mB_(_mF_,_mG_)
{return pp_attrib_value(encode,indent,_mF_,_mG_)}
var _mC_=caml_call1(Xml[25],a);
function _mD_(_mE_){return sp(indent,_mE_)}
return caml_call6(Stdlib_Format[129],fmt,_y_,_mD_,_mC_,_mB_,a)}
function pp_attribs(encode,indent)
{function _my_(_mz_,_mA_){return pp_attrib(encode,indent,_mz_,_mA_)}
return caml_call2(Stdlib_Format[123],[0,pp_noop],_my_)}
function pp_tag_and_attribs(encode,indent,fmt,param)
{var attrs=param[2],tag=param[1];
open_box(indent,fmt);
function _mv_(_mx_){return cut(indent,_mx_)}
var _mw_=pp_attribs(encode,indent);
caml_call6(Stdlib_Format[129],fmt,_z_,tag,_mw_,attrs,_mv_);
return close_box(indent,fmt)}
function pp_closedtag(encode,indent,fmt,tag,attrs)
{if(is_emptytag(tag))
{var
_ml_=[0,tag,attrs],
_mm_=
function(_mt_,_mu_)
{return pp_tag_and_attribs(encode,indent,_mt_,_mu_)};
return caml_call4(Stdlib_Format[129],fmt,_A_,_mm_,_ml_)}
open_box(indent,fmt);
function _mn_(_ms_){return cut(indent,_ms_)}
var _mo_=[0,tag,attrs];
function _mp_(_mq_,_mr_)
{return pp_tag_and_attribs(encode,indent,_mq_,_mr_)}
caml_call6(Stdlib_Format[129],fmt,_B_,_mp_,_mo_,_mn_,tag);
return close_box(indent,fmt)}
function pp_elts(encode,indent)
{function _mh_(_mj_,_mk_){return pp_elt(encode,indent,_mj_,_mk_)}
var _mi_=[0,function(fmt,param){return cut(indent,fmt)}];
return caml_call2(Stdlib_Format[123],_mi_,_mh_)}
function pp_tag(encode,indent,fmt,tag,attrs,children)
{if(children)
{open_box(indent,fmt);
var
_l6_=function(_mg_){return cut(indent,_mg_)},
_l7_=function(_mf_){return close_box(indent,_mf_)},
_l8_=pp_elts(encode,indent),
_l9_=function(_me_){return cut(indent,_me_)},
_l__=[0,tag,attrs],
_l$_=
function(_mc_,_md_)
{return pp_tag_and_attribs(encode,indent,_mc_,_md_)},
_ma_=function(_mb_){return open_box(indent,_mb_)};
caml_call11
(Stdlib_Format[129],
fmt,
_C_,
_ma_,
_l$_,
_l__,
_l9_,
_l8_,
children,
_l7_,
_l6_,
tag);
return close_box(indent,fmt)}
return pp_closedtag(encode,indent,fmt,tag,attrs)}
function pp_elt(encode,indent,fmt,elt)
{var match=caml_call1(Xml[27],elt);
if(typeof match === "number")
return 0;
else
switch(match[0])
{case 0:
var
texte=match[1],
f=
function(g)
{var s=caml_call2(Re[1][1],g,0);
return caml_string_notequal(s,cst$5)
?caml_string_notequal(s,cst$6)
?caml_string_notequal(s,cst$7)
?caml_string_notequal(s,cst$8)?s:cst_gt$0
:cst_gt$1
:cst_gt$2
:cst_gt$3},
_l5_=caml_call6(Re[21],0,0,_m_,re_end_comment,f,texte);
return caml_call3(Stdlib_Format[129],fmt,_D_,_l5_);
case 1:
var texte$0=match[1];
return caml_call2(Stdlib_Format[13],fmt,texte$0);
case 2:
var texte$1=match[1];return pp_encode(encode,indent,fmt,texte$1);
case 3:
var e=match[1];return caml_call3(Stdlib_Format[129],fmt,_E_,e);
case 4:
var xh_attrs=match[2],name=match[1];
return pp_closedtag(encode,indent,fmt,name,xh_attrs);
default:
var xh_taglist=match[3],xh_attrs$0=match[2],name$0=match[1];
return pp_tag(encode,indent,fmt,name$0,xh_attrs$0,xh_taglist)}}
function pp(opt,_l2_,param)
{if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char;
if(_l2_)var sth$0=_l2_[1],indent=sth$0;else var indent=0;
return function(_l3_,_l4_){return pp_elt(encode,indent,_l3_,_l4_)}}
return [0,
open_box,
close_box,
sp,
cut,
S,
is_emptytag,
pp_encode,
pp_sep,
pp_attrib_value,
pp_attrib,
pp_attribs,
pp_tag_and_attribs,
pp_closedtag,
pp_tag,
pp_elt,
pp_elts,
pp]}
function Make(Xml,I,O)
{var symbol=O[2];
function separator_to_string(param){return param?cst$10:cst$11}
function attrib_value_to_string(encode,a)
{var match=caml_call1(Xml[26],a);
switch(match[0])
{case 0:
var f=match[1],_lU_=string_of_number(f);
return caml_call2(Stdlib_Printf[4],_H_,_lU_);
case 1:var i=match[1];return caml_call2(Stdlib_Printf[4],_I_,i);
case 2:
var s=match[1],_lV_=caml_call1(encode,s);
return caml_call2(Stdlib_Printf[4],_J_,_lV_);
default:
var
slist=match[2],
sep=match[1],
_lW_=separator_to_string(sep),
_lX_=caml_call1(encode,caml_call2(Stdlib_String[6],_lW_,slist));
return caml_call2(Stdlib_Printf[4],_K_,_lX_)}}
function attrib_to_string(encode,a)
{var _lS_=attrib_value_to_string(encode,a),_lT_=caml_call1(Xml[25],a);
return caml_call3(Stdlib_Printf[4],_L_,_lT_,_lS_)}
function xh_print_attrs(encode,attrs)
{if(attrs)
{var
queue=attrs[2],
attr=attrs[1],
_lP_=xh_print_attrs(encode,queue),
_lQ_=attrib_to_string(encode,attr),
_lR_=caml_call2(Stdlib[28],cst$12,_lQ_);
return caml_call2(symbol,caml_call1(O[3],_lR_),_lP_)}
return O[1]}
function xh_print_closedtag(encode,tag,attrs)
{if(0 !== I[1] && ! caml_call2(Stdlib_List[36],tag,I[1]))
{var
_lK_=caml_call2(Stdlib[28],tag,cst$15),
_lL_=caml_call2(Stdlib[28],cst$16,_lK_),
_lM_=caml_call1(O[3],_lL_),
_lN_=xh_print_attrs(encode,attrs),
_lO_=caml_call2(Stdlib[28],cst$17,tag);
return caml_call2
(symbol,caml_call2(symbol,caml_call1(O[3],_lO_),_lN_),_lM_)}
var
_lH_=caml_call1(O[3],cst$13),
_lI_=xh_print_attrs(encode,attrs),
_lJ_=caml_call2(Stdlib[28],cst$14,tag);
return caml_call2
(symbol,caml_call2(symbol,caml_call1(O[3],_lJ_),_lI_),_lH_)}
function xh_print_taglist(encode,taglist)
{var taglist$0=taglist;
for(;;)
{if(taglist$0)
{var
queue=taglist$0[2],
elt=taglist$0[1],
match=caml_call1(Xml[27],elt);
if(typeof match === "number")
{var taglist$0=queue;continue}
else
switch(match[0])
{case 0:
var
texte=match[1],
_lx_=xh_print_taglist(encode,queue),
_ly_=caml_call1(encode,texte),
_lz_=caml_call2(Stdlib[28],_ly_,cst$22),
_lA_=caml_call2(Stdlib[28],cst$23,_lz_);
return caml_call2(symbol,caml_call1(O[3],_lA_),_lx_);
case 1:
var texte$0=match[1],_lB_=xh_print_taglist(encode,queue);
return caml_call2(symbol,caml_call1(O[3],texte$0),_lB_);
case 2:
var
texte$1=match[1],
_lC_=xh_print_taglist(encode,queue),
_lD_=caml_call1(encode,texte$1);
return caml_call2(symbol,caml_call1(O[3],_lD_),_lC_);
case 3:
var
e=match[1],
_lE_=xh_print_taglist(encode,queue),
_lF_=caml_call2(Stdlib[28],e,cst$24),
_lG_=caml_call2(Stdlib[28],cst$25,_lF_);
return caml_call2(symbol,caml_call1(O[3],_lG_),_lE_);
case 4:
var xh_attrs=match[2],name=match[1];
return print_nodes(encode,name,xh_attrs,0,queue);
default:
var xh_taglist=match[3],xh_attrs$0=match[2],name$0=match[1];
return print_nodes(encode,name$0,xh_attrs$0,xh_taglist,queue)}}
return O[1]}}
function print_nodes(encode,name,xh_attrs,xh_taglist,queue)
{var _lw_=xh_print_taglist(encode,queue);
return caml_call2
(symbol,xh_print_tag(encode,name,xh_attrs,xh_taglist),_lw_)}
function xh_print_tag(encode,tag,attrs,taglist)
{if(0 === taglist)return xh_print_closedtag(encode,tag,attrs);
var
_lp_=caml_call2(Stdlib[28],tag,cst$18),
_lq_=caml_call2(Stdlib[28],cst$19,_lp_),
_lr_=caml_call1(O[3],_lq_),
_ls_=xh_print_taglist(encode,taglist),
_lt_=caml_call1(O[3],cst$20),
_lu_=xh_print_attrs(encode,attrs),
_lv_=caml_call2(Stdlib[28],cst$21,tag);
return caml_call2
(symbol,
caml_call2
(symbol,
caml_call2
(symbol,caml_call2(symbol,caml_call1(O[3],_lv_),_lu_),_lt_),
_ls_),
_lr_)}
function print_list(opt,foret)
{if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char;
var _lo_=xh_print_taglist(encode,foret);
return caml_call1(O[4],_lo_)}
return [0,
symbol,
separator_to_string,
attrib_value_to_string,
attrib_to_string,
xh_print_attrs,
xh_print_closedtag,
xh_print_tag,
print_nodes,
xh_print_taglist,
print_list]}
function Make_typed(Xml,Typed_xml,O)
{var P=Make(Xml,[0,Typed_xml[1][7]],O),symbol=O[2];
function print_list(opt,foret)
{if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char;
var
_lm_=caml_call2(Stdlib_List[19],Typed_xml[2],foret),
_ln_=caml_call2(P[9],encode,_lm_);
return caml_call1(O[4],_ln_)}
function print(opt,_lf_,doc)
{if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char;
if(_lf_)var sth$0=_lf_[1],advert=sth$0;else var advert=cst$30;
var
doc$0=caml_call1(Typed_xml[3],doc),
match=caml_call1(Xml[27],doc$0),
switch$0=0;
if(typeof match !== "number" && 5 === match[0])
{var
c=match[3],
a=match[2],
n=match[1],
_ll_=
function(a)
{return caml_string_equal(caml_call1(Xml[25],a),cst_xmlns$1)},
a$0=
caml_call2(Stdlib_List[33],_ll_,a)
?a
:[0,caml_call2(Xml[6],cst_xmlns$2,Typed_xml[1][5]),a],
doc$1=caml_call3(Xml[21],[0,a$0],n,c);
switch$0 = 1}
if(! switch$0)var doc$1=doc$0;
var _lg_=caml_call2(P[9],encode,[0,doc$1,0]);
if(caml_string_notequal(advert,cst$26))
var
_lh_=caml_call2(Stdlib[28],advert,cst$27),
_li_=caml_call2(Stdlib[28],cst$28,_lh_);
else
var _li_=cst$29;
var
_lj_=caml_call1(O[3],_li_),
_lk_=
caml_call2
(symbol,
caml_call2(symbol,caml_call1(O[3],Typed_xml[1][6]),_lj_),
_lg_);
return caml_call1(O[4],_lk_)}
return [0,P,symbol,print_list,print]}
function Simple_output(M)
{function empty(param){return 0}
function concat(f1,f2,param){caml_call1(f1,0);return caml_call1(f2,0)}
function put(s,param){return caml_call1(M[1],s)}
function make(f){return caml_call1(f,0)}
return [0,empty,concat,put,make]}
function Make_simple(Xml,I)
{function print_list(output)
{return Make(Xml,I,Simple_output([0,output]))[10]}
return [0,print_list]}
function Make_typed_simple(Xml,Typed_xml)
{function print_list(output)
{return Make_typed(Xml,Typed_xml,Simple_output([0,output]))[3]}
function print(output)
{return Make_typed(Xml,Typed_xml,Simple_output([0,output]))[4]}
return [0,print_list,print]}
function _M_(_ld_,_lc_,_lb_)
{var _le_=Make_typed(_ld_,_lc_,_lb_);return [0,_le_[3],_le_[4]]}
function _N_(_la_,_k$_,_k__){return [0,Make(_la_,_k$_,_k__)[10]]}
function _O_(_k9_,_k8_){return [0,Make_fmt(_k9_,_k8_)[17]]}
var
Xml_print=
[0,
encode_unsafe_char,
encode_unsafe_char_and_at,
[0,normalize,normalize_html],
compose_decl,
compose_doctype,
string_of_number,
pp_number,
function(Xml,Typed_xml)
{var P=Make_fmt(Xml,[0,Typed_xml[1][7]]);
function pp_elt(opt,_k6_,param,fmt,foret)
{if(opt)
var sth=opt[1],encode=sth;
else
var encode=encode_unsafe_char;
if(_k6_)var sth$0=_k6_[1],indent=sth$0;else var indent=0;
var _k7_=caml_call1(Typed_xml[2],foret);
return caml_call4(P[15],encode,indent,fmt,_k7_)}
function pp(opt,_k4_,advert,param,fmt,doc$0)
{if(opt)
var sth=opt[1],encode=sth;
else
var encode=encode_unsafe_char;
if(_k4_)var sth$0=_k4_[1],indent=sth$0;else var indent=0;
caml_call2(Stdlib_Format[7],fmt,0);
caml_call3(Stdlib_Format[129],fmt,_F_,Typed_xml[1][6]);
if(advert)
{var s=advert[1];caml_call3(Stdlib_Format[129],fmt,_G_,s)}
var
doc=caml_call1(Typed_xml[3],doc$0),
match=caml_call1(Xml[27],doc),
switch$0=0;
if(typeof match !== "number" && 5 === match[0])
{var
c=match[3],
a=match[2],
n=match[1],
_k3_=
function(a)
{return caml_string_equal(caml_call1(Xml[25],a),cst_xmlns)},
a$0=
caml_call2(Stdlib_List[33],_k3_,a)
?a
:[0,caml_call2(Xml[6],cst_xmlns$0,Typed_xml[1][5]),a],
_k5_=caml_call3(Xml[21],[0,a$0],n,c);
switch$0 = 1}
if(! switch$0)var _k5_=doc;
caml_call4(P[15],encode,indent,fmt,_k5_);
return caml_call2(Stdlib_Format[3],fmt,0)}
return [0,pp_elt,pp]},
_O_,
_N_,
_M_,
Make_simple,
Make_typed_simple];
caml_register_global(1099,Xml_print,"Xml_print");
var
Xml_iter=
[0,
function(Xml)
{function amap1(f,n)
{var match=caml_call1(Xml[27],n);
if(typeof match !== "number")
switch(match[0])
{case 4:
var
attribs=match[2],
name=match[1],
_k1_=[0,caml_call2(f,name,attribs)];
return caml_call2(Xml[20],_k1_,name);
case 5:
var
elts=match[3],
attribs$0=match[2],
name$0=match[1],
_k2_=[0,caml_call2(f,name$0,attribs$0)];
return caml_call3(Xml[21],_k2_,name$0,elts)
}
return n}
function amap(f,n)
{var match=caml_call1(Xml[27],n);
if(typeof match !== "number")
switch(match[0])
{case 4:
var
attribs=match[2],
name=match[1],
_kW_=[0,caml_call2(f,name,attribs)];
return caml_call2(Xml[20],_kW_,name);
case 5:
var
elts=match[3],
attribs$0=match[2],
name$0=match[1],
_kX_=function(_k0_){return amap(f,_k0_)},
_kY_=caml_call2(Stdlib_List[19],_kX_,elts),
_kZ_=[0,caml_call2(f,name$0,attribs$0)];
return caml_call3(Xml[21],_kZ_,name$0,_kY_)
}
return n}
function add_float_attrib(name,value,param)
{if(param)
{var head=param[1],tail=param[2];
if(caml_string_equal(caml_call1(Xml[25],head),name))
return [0,caml_call2(Xml[4],name,value),tail];
var tail$0=param[2];
return [0,head,add_float_attrib(name,value,tail$0)]}
return [0,caml_call2(Xml[4],name,value),0]}
function map_float_attrib(is_attrib,f,l)
{function aux(head)
{var match=caml_call1(Xml[26],head);
if(0 === match[0])
{var value=match[1];
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
{var _kU_=caml_call1(f,value),_kV_=caml_call1(Xml[25],head);
return caml_call2(Xml[4],_kV_,_kU_)}}
return head}
return caml_call2(Stdlib_List[19],aux,l)}
function add_int_attrib(name,value,param)
{if(param)
{var head=param[1],tail=param[2];
if(caml_string_equal(caml_call1(Xml[25],head),name))
return [0,caml_call2(Xml[5],name,value),tail];
var tail$0=param[2];
return [0,head,add_int_attrib(name,value,tail$0)]}
return [0,caml_call2(Xml[5],name,value),0]}
function rm_attrib(is_attrib,param)
{var param$0=param;
for(;;)
{if(param$0)
{var head=param$0[1],tail=param$0[2];
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
{var param$0=tail;continue}
var tail$0=param$0[2];
return [0,head,rm_attrib(is_attrib,tail$0)]}
return 0}}
function map_int_attrib(is_attrib,f,l)
{function aux(head)
{var match=caml_call1(Xml[26],head);
if(1 === match[0])
{var value=match[1];
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
{var _kS_=caml_call1(f,value),_kT_=caml_call1(Xml[25],head);
return caml_call2(Xml[5],_kT_,_kS_)}}
return head}
return caml_call2(Stdlib_List[19],aux,l)}
function add_string_attrib(name,value,param)
{if(param)
{var head=param[1],tail=param[2];
if(caml_string_equal(caml_call1(Xml[25],head),name))
return [0,caml_call2(Xml[6],name,value),tail];
var tail$0=param[2];
return [0,head,add_string_attrib(name,value,tail$0)]}
return [0,caml_call2(Xml[6],name,value),0]}
function map_string_attrib(is_attrib,f,l)
{function aux(head)
{var match=caml_call1(Xml[26],head);
if(2 === match[0])
{var value=match[1];
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
{var _kQ_=caml_call1(f,value),_kR_=caml_call1(Xml[25],head);
return caml_call2(Xml[6],_kR_,_kQ_)}}
return head}
return caml_call2(Stdlib_List[19],aux,l)}
function add_space_sep_attrib(name,value,param)
{if(param)
{var tail=param[2],head=param[1],match=caml_call1(Xml[26],head);
if(3 === match[0] && ! match[1])
{var values=match[2];
if(caml_string_equal(caml_call1(Xml[25],head),name))
return [0,caml_call2(Xml[7],name,[0,value,values]),tail]}
return caml_string_equal(caml_call1(Xml[25],head),name)
?[0,caml_call2(Xml[7],name,[0,value,0]),tail]
:[0,head,add_space_sep_attrib(name,value,tail)]}
return [0,caml_call2(Xml[7],name,[0,value,0]),0]}
function add_comma_sep_attrib(name,value,param)
{if(param)
{var tail=param[2],head=param[1],match=caml_call1(Xml[26],head);
if(3 === match[0] && match[1])
{var values=match[2];
if(caml_string_equal(caml_call1(Xml[25],head),name))
return [0,caml_call2(Xml[8],name,[0,value,values]),tail]}
return caml_string_equal(caml_call1(Xml[25],head),name)
?[0,caml_call2(Xml[8],name,[0,value,0]),tail]
:[0,head,add_comma_sep_attrib(name,value,tail)]}
return [0,caml_call2(Xml[8],name,[0,value,0]),0]}
function rm_attrib_from_list(is_attrib,is_value,param)
{if(param)
{var tail=param[2],head=param[1],match=caml_call1(Xml[26],head);
if(3 === match[0])
{var values=match[2],sep=match[1];
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
{var
_kN_=function(v){return 1 - caml_call1(is_value,v)},
values$0=caml_call2(Stdlib_List[41],_kN_,values);
if(values$0)
{if(sep)
{var _kO_=caml_call1(Xml[25],head);
return [0,caml_call2(Xml[8],_kO_,values$0),tail]}
var _kP_=caml_call1(Xml[25],head);
return [0,caml_call2(Xml[7],_kP_,values$0),tail]}
return tail}}
return [0,head,rm_attrib_from_list(is_attrib,is_value,tail)]}
return 0}
function map_string_attrib_in_list(is_attrib,f,l)
{function aux(head)
{var match=caml_call1(Xml[26],head);
if(3 === match[0])
{var values=match[2],sep=match[1];
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
{if(sep)
{var
_kJ_=caml_call2(Stdlib_List[19],f,values),
_kK_=caml_call1(Xml[25],head);
return caml_call2(Xml[8],_kK_,_kJ_)}
var
_kL_=caml_call2(Stdlib_List[19],f,values),
_kM_=caml_call1(Xml[25],head);
return caml_call2(Xml[7],_kM_,_kL_)}}
return head}
return caml_call2(Stdlib_List[19],aux,l)}
function fold
(of_empty,
of_comment,
of_txt,
of_encodedpcdata,
of_entity,
of_leaf,
of_node,
n)
{var match=caml_call1(Xml[27],n);
if(typeof match === "number")
return caml_call1(of_empty,0);
else
switch(match[0])
{case 0:var s=match[1];return caml_call1(of_comment,s);
case 1:var s$0=match[1];return caml_call1(of_encodedpcdata,s$0);
case 2:var s$1=match[1];return caml_call1(of_txt,s$1);
case 3:var s$2=match[1];return caml_call1(of_entity,s$2);
case 4:
var attribs=match[2],name=match[1];
return caml_call2(of_leaf,name,attribs);
default:
var
elts=match[3],
attribs$0=match[2],
name$0=match[1],
_kH_=
function(_kI_)
{return fold
(of_empty,
of_comment,
of_txt,
of_encodedpcdata,
of_entity,
of_leaf,
of_node,
_kI_)};
return caml_call3
(of_node,
name$0,
attribs$0,
caml_call2(Stdlib_List[19],_kH_,elts))}}
function all_entities(elt)
{function f(param){return 0}
function _kG_(ename,attribs,elts)
{return caml_call1(Stdlib_List[14],elts)}
return fold(f,f,f,f,f,function(ename,attribs){return 0},_kG_,elt)}
function flatmap(f,l)
{var _kF_=caml_call2(Stdlib_List[19],f,l);
return caml_call1(Stdlib_List[13],_kF_)}
function translate
(root_leaf,root_node,sub_leaf,sub_node,update_state,state,n)
{function translate(state,n)
{var match=caml_call1(Xml[27],n);
if(typeof match !== "number")
switch(match[0])
{case 4:
var attribs=match[2],name=match[1];
return caml_call3(sub_leaf,state,name,attribs);
case 5:
var
elts=match[3],
attribs$0=match[2],
name$0=match[1],
_kD_=caml_call3(update_state,name$0,attribs$0,state);
return caml_call4
(sub_node,
state,
name$0,
attribs$0,
flatmap(function(_kE_){return translate(_kD_,_kE_)},elts))
}
return [0,n,0]}
var match=caml_call1(Xml[27],n);
if(typeof match !== "number")
switch(match[0])
{case 4:
var attribs=match[2],name=match[1];
return caml_call2(root_leaf,name,attribs);
case 5:
var elts=match[3],attribs$0=match[2],name$0=match[1];
return caml_call3
(root_node,
name$0,
attribs$0,
flatmap(function(_kC_){return translate(state,_kC_)},elts))
}
return n}
return [0,
amap,
amap1,
rm_attrib,
rm_attrib_from_list,
map_int_attrib,
map_float_attrib,
map_string_attrib,
map_string_attrib_in_list,
add_int_attrib,
add_float_attrib,
add_string_attrib,
add_comma_sep_attrib,
add_space_sep_attrib,
fold,
all_entities,
translate]}];
caml_register_global(1100,Xml_iter,"Xml_iter");
function string_of_iri(x){return caml_call2(Stdlib_Printf[4],_P_,x)}
function to_string(f,param)
{var unit=param[2],n=param[1];
if(unit)
var unit$0=unit[1],_kB_=caml_call1(f,unit$0);
else
var _kB_=cst$31;
return caml_call3(Stdlib_Printf[4],_Q_,n,_kB_)}
function angle_names(param)
{return 4099509 === param?cst_rad:793050094 <= param?cst_grad:cst_deg}
function string_of_angle(a){return to_string(angle_names,a)}
function length_names(param)
{return 16389 <= param
?17280 === param
?cst_mm
:17956 <= param
?17960 <= param?cst_px:cst_pt
:17939 <= param?cst_pc:cst_in
:15496 <= param
?15507 <= param?cst_ex:cst_em
:15050 <= param?cst_cm:cst$32}
function string_of_length(a){return to_string(length_names,a)}
function list(opt,f,l)
{if(opt)var sth=opt[1],sep=sth;else var sep=cst$33;
var _kA_=caml_call2(Stdlib_List[19],f,l);
return caml_call2(Stdlib_String[6],sep,_kA_)}
function string_of_paint_whitout_icc(param)
{if(typeof param === "number")
return 870530776 <= param?cst_none:cst_currentColor;
var match=param[2],icc=match[2],c=match[1];
if(icc)
{var x=icc[1],_kz_=caml_call2(Stdlib[28],sep,x);
return caml_call2(Stdlib[28],c,_kz_)}
return c}
function string_of_paint(c)
{if(typeof c !== "number" && 3652393 <= c[1])
{var _kt_=c[2],_ku_=_kt_[2],_kv_=_kt_[1];
if(_ku_)
{var
b=_ku_[1],
_kw_=string_of_paint_whitout_icc(b),
_kx_=caml_call2(Stdlib[28],cst$34,_kw_),
_ky_=string_of_iri(_kv_);
return caml_call2(Stdlib[28],_ky_,_kx_)}
return string_of_iri(_kv_)}
return string_of_paint_whitout_icc(c)}
function Make_with_wrapped_functions(Xml,C)
{var
doctype=compose_doctype(cst_svg,_R_),
Info=[0,content_type,0,0,version,standard,namespace,doctype],
_fk_=Xml[2],
_fl_=Xml[3];
function tot(x){return x}
function totl(x){return x}
function toelt(x){return x}
function toeltl(x){return x}
function to_attrib(x){return x}
function nullary(tag,a,param)
{var _ks_=caml_call1(Xml[1][3],0);
return caml_call3(Xml[21],a,tag,_ks_)}
function unary(tag,a,elt)
{var _kr_=caml_call1(Xml[1][4],elt);
return caml_call3(Xml[21],a,tag,_kr_)}
function star(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)}
function to_xmlattribs(x){return x}
var _fm_=Xml[4],_fn_=Xml[6],_fo_=C[10],_fp_=C[10],_fq_=C[11];
function user_attrib(f,name,v)
{var _kq_=caml_call2(Xml[1][2],f,v);
return caml_call2(Xml[6],name,_kq_)}
var _fr_=Xml[6];
function metadata(a,children)
{return caml_call3(Xml[21],a,cst_metadata,children)}
function foreignObject(a,children)
{return caml_call3(Xml[21],a,cst_foreignObject,children)}
function pcdata(s){return caml_call1(Xml[17],s)}
var
a_version=caml_call1(_fn_,cst_version),
a_baseProfile=caml_call1(_fn_,cst_baseProfile);
function a_x(_kp_){return user_attrib(_fo_,cst_x,_kp_)}
function a_y(_ko_){return user_attrib(_fo_,cst_y,_ko_)}
function a_width(_kn_){return user_attrib(_fp_,cst_width,_kn_)}
function a_height(_km_){return user_attrib(_fp_,cst_height,_km_)}
var
a_preserveAspectRatio=caml_call1(_fn_,cst_preserveAspectRatio),
a_contentScriptType=caml_call1(_fn_,cst_contentScriptType),
a_contentStyleType=caml_call1(_fn_,cst_contentStyleType);
function a_zoomAndPan(x){return user_attrib(C[4],cst_zoomAndSpan,x)}
var
a_href=caml_call1(_fn_,cst_href),
a_xlink_href=caml_call1(_fn_,cst_xlink_href),
a_requiredFeatures=caml_call1(Xml[7],cst_requiredFeatures),
a_requiredExtensions=caml_call1(Xml[7],cst_requiredExtension),
a_systemLanguage=caml_call1(Xml[8],cst_systemLanguage),
_fs_=C[3];
function a_externalRessourcesRequired(_kl_)
{return user_attrib(_fs_,cst_externalRessourcesRequired,_kl_)}
var a_id=caml_call1(_fn_,cst_id);
function a_user_data(name)
{return caml_call1(_fn_,caml_call2(Stdlib[28],cst_data,name))}
var
a_xml_base=caml_call1(_fn_,cst_xml_base),
a_xml_lang=caml_call1(_fn_,cst_xml_lang);
function a_xml_space(x){return user_attrib(C[4],cst_xml_space,x)}
var
a_type=caml_call1(_fn_,cst_type),
a_media=caml_call1(Xml[8],cst_media),
a_xlink_title=caml_call1(_fn_,cst_xlink_title),
a_class=caml_call1(Xml[7],cst_class),
a_style=caml_call1(_fn_,cst_style),
_ft_=C[21];
function a_transform(_kk_){return user_attrib(_ft_,cst_transform,_kk_)}
var _fu_=C[7];
function a_viewBox(_kj_){return user_attrib(_fu_,cst_viewBox,_kj_)}
var
a_d=caml_call1(_fn_,cst_d),
a_pathLength=caml_call1(_fm_,cst_pathLength);
function a_rx(_ki_){return user_attrib(_fp_,cst_rx,_ki_)}
function a_ry(_kh_){return user_attrib(_fp_,cst_ry,_kh_)}
function a_cx(_kg_){return user_attrib(_fp_,cst_cx,_kg_)}
function a_cy(_kf_){return user_attrib(_fp_,cst_cy,_kf_)}
function a_r(_ke_){return user_attrib(_fp_,cst_r,_ke_)}
function a_x1(_kd_){return user_attrib(_fo_,cst_x1,_kd_)}
function a_y1(_kc_){return user_attrib(_fo_,cst_y1,_kc_)}
function a_x2(_kb_){return user_attrib(_fo_,cst_x2,_kb_)}
function a_y2(_ka_){return user_attrib(_fo_,cst_y2,_ka_)}
var _fv_=C[5];
function a_points(_j$_){return user_attrib(_fv_,cst_points,_j$_)}
function a_x_list(_j__){return user_attrib(_fq_,cst_x$0,_j__)}
function a_y_list(_j9_){return user_attrib(_fq_,cst_y$0,_j9_)}
var _fw_=C[12];
function a_dx(_j8_){return user_attrib(_fw_,cst_dx,_j8_)}
var _fx_=C[12];
function a_dy(_j7_){return user_attrib(_fx_,cst_dy,_j7_)}
function a_dx_list(_j6_){return user_attrib(_fq_,cst_dx$0,_j6_)}
function a_dy_list(_j5_){return user_attrib(_fq_,cst_dy$0,_j5_)}
function a_lengthAdjust(x){return user_attrib(C[4],cst_lengthAdjust,x)}
function a_textLength(_j4_)
{return user_attrib(_fp_,cst_textLength,_j4_)}
function a_text_anchor(x){return user_attrib(C[4],cst_text_anchor,x)}
function a_text_decoration(x)
{return user_attrib(C[4],cst_text_decoration,x)}
function a_text_rendering(x)
{return user_attrib(C[4],cst_text_rendering,x)}
var _fy_=C[14];
function a_rotate(_j3_){return user_attrib(_fy_,cst_rotate,_j3_)}
function a_startOffset(_j2_)
{return user_attrib(_fp_,cst_startOffset,_j2_)}
function a_method(x){return user_attrib(C[4],cst_method,x)}
function a_spacing(x){return user_attrib(C[4],cst_spacing,x)}
var
a_glyphRef=caml_call1(_fn_,cst_glyphRef),
a_format=caml_call1(_fn_,cst_format);
function a_markerUnits(x){return user_attrib(C[4],cst_markerUnits,x)}
function a_refX(_j1_){return user_attrib(_fo_,cst_refX,_j1_)}
function a_refY(_j0_){return user_attrib(_fo_,cst_refY,_j0_)}
function a_markerWidth(_jZ_)
{return user_attrib(_fp_,cst_markerWidth,_jZ_)}
function a_markerHeight(_jY_)
{return user_attrib(_fp_,cst_markerHeight,_jY_)}
function a_orient(x){return user_attrib(C[17],cst_orient,x)}
var a_local=caml_call1(_fn_,cst_local);
function a_rendering_intent(x)
{return user_attrib(C[4],cst_rendering_intent,x)}
function a_gradientUnits(x)
{return user_attrib(C[4],cst_gradientUnits,x)}
var _fz_=C[21];
function a_gradientTransform(_jX_)
{return user_attrib(_fz_,cst_gradientTransform,_jX_)}
function a_spreadMethod(x){return user_attrib(C[4],cst_spreadMethod,x)}
function a_fx(_jW_){return user_attrib(_fo_,cst_fx,_jW_)}
function a_fy(_jV_){return user_attrib(_fo_,cst_fy,_jV_)}
function a_offset(x){return user_attrib(C[16],cst_offset,x)}
function a_patternUnits(x){return user_attrib(C[4],cst_patternUnits,x)}
function a_patternContentUnits(x)
{return user_attrib(C[4],cst_patternContentUnits,x)}
function a_patternTransform(x)
{return user_attrib(C[21],cst_patternTransform,x)}
function a_clipPathUnits(x)
{return user_attrib(C[4],cst_clipPathUnits,x)}
function a_maskUnits(x){return user_attrib(C[4],cst_maskUnits,x)}
function a_maskContentUnits(x)
{return user_attrib(C[4],cst_maskContentUnits,x)}
function a_primitiveUnits(x)
{return user_attrib(C[4],cst_primitiveUnits,x)}
var _fA_=C[13];
function a_filterRes(_jU_)
{return user_attrib(_fA_,cst_filterResUnits,_jU_)}
var a_result=caml_call1(_fn_,cst_result);
function a_in(x){return user_attrib(C[8],cst_in$0,x)}
function a_in2(x){return user_attrib(C[8],cst_in2,x)}
var
a_azimuth=caml_call1(_fm_,cst_azimuth),
a_elevation=caml_call1(_fm_,cst_elevation),
a_pointsAtX=caml_call1(_fm_,cst_pointsAtX),
a_pointsAtY=caml_call1(_fm_,cst_pointsAtY),
a_pointsAtZ=caml_call1(_fm_,cst_pointsAtZ),
a_specularExponent=caml_call1(_fm_,cst_specularExponent),
a_specularConstant=caml_call1(_fm_,cst_specularConstant),
a_limitingConeAngle=caml_call1(_fm_,cst_limitingConeAngle);
function a_mode(x){return user_attrib(C[4],cst_mode,x)}
function a_feColorMatrix_type(x){return user_attrib(C[4],cst_type$0,x)}
var _fB_=C[14];
function a_values(_jT_){return user_attrib(_fB_,cst_values,_jT_)}
function a_transfer_type(x){return user_attrib(C[4],cst_type$1,x)}
var _fC_=C[14];
function a_tableValues(_jS_)
{return user_attrib(_fC_,cst_tableValues,_jS_)}
var _fD_=C[12];
function a_intercept(_jR_){return user_attrib(_fD_,cst_intercept,_jR_)}
var _fE_=C[12];
function a_amplitude(_jQ_){return user_attrib(_fE_,cst_amplitude,_jQ_)}
var _fF_=C[12];
function a_exponent(_jP_){return user_attrib(_fF_,cst_exponent,_jP_)}
var _fG_=C[12];
function a_transfer_offset(_jO_)
{return user_attrib(_fG_,cst_offset$0,_jO_)}
function a_feComposite_operator(x)
{return user_attrib(C[4],cst_operator,x)}
var _fH_=C[12];
function a_k1(_jN_){return user_attrib(_fH_,cst_k1,_jN_)}
var _fI_=C[12];
function a_k2(_jM_){return user_attrib(_fI_,cst_k2,_jM_)}
var _fJ_=C[12];
function a_k3(_jL_){return user_attrib(_fJ_,cst_k3,_jL_)}
var _fK_=C[12];
function a_k4(_jK_){return user_attrib(_fK_,cst_k4,_jK_)}
var _fL_=C[13];
function a_order(_jJ_){return user_attrib(_fL_,cst_order,_jJ_)}
var _fM_=C[14];
function a_kernelMatrix(_jI_)
{return user_attrib(_fM_,cst_kernelMatrix,_jI_)}
var _fN_=C[12];
function a_divisor(_jH_){return user_attrib(_fN_,cst_divisor,_jH_)}
var _fO_=C[12];
function a_bias(_jG_){return user_attrib(_fO_,cst_bias,_jG_)}
var _fP_=C[13];
function a_kernelUnitLength(_jF_)
{return user_attrib(_fP_,cst_kernelUnitLength,_jF_)}
var _fQ_=C[9];
function a_targetX(_jE_){return user_attrib(_fQ_,cst_targetX,_jE_)}
var _fR_=C[9];
function a_targetY(_jD_){return user_attrib(_fR_,cst_targetY,_jD_)}
function a_edgeMode(x){return user_attrib(C[4],cst_targetY$0,x)}
var _fS_=C[3];
function a_preserveAlpha(_jC_)
{return user_attrib(_fS_,cst_preserveAlpha,_jC_)}
var _fT_=C[12];
function a_surfaceScale(_jB_)
{return user_attrib(_fT_,cst_surfaceScale,_jB_)}
var _fU_=C[12];
function a_diffuseConstant(_jA_)
{return user_attrib(_fU_,cst_diffuseConstant,_jA_)}
var _fV_=C[12];
function a_scale(_jz_){return user_attrib(_fV_,cst_scale,_jz_)}
function a_xChannelSelector(x)
{return user_attrib(C[4],cst_xChannelSelector,x)}
function a_yChannelSelector(x)
{return user_attrib(C[4],cst_yChannelSelector,x)}
var _fW_=C[13];
function a_stdDeviation(_jy_)
{return user_attrib(_fW_,cst_stdDeviation,_jy_)}
function a_feMorphology_operator(x)
{return user_attrib(C[4],cst_operator$0,x)}
var _fX_=C[13];
function a_radius(_jx_){return user_attrib(_fX_,cst_radius,_jx_)}
var _fY_=C[13];
function a_baseFrenquency(_jw_)
{return user_attrib(_fY_,cst_baseFrequency,_jw_)}
var _fZ_=C[9];
function a_numOctaves(_jv_)
{return user_attrib(_fZ_,cst_numOctaves,_jv_)}
var _f0_=C[12];
function a_seed(_ju_){return user_attrib(_f0_,cst_seed,_ju_)}
function a_stitchTiles(x){return user_attrib(C[4],cst_stitchTiles,x)}
function a_feTurbulence_type(x){return user_attrib(C[4],cst_type$2,x)}
function a_xlink_show(x){return user_attrib(C[4],cst_xlink_show,x)}
function a_xlink_actuate(x)
{return user_attrib(C[4],cst_xlink_actuate,x)}
var
a_target=caml_call1(_fn_,cst_xlink_target),
a_viewTarget=caml_call1(_fn_,cst_viewTarget),
a_attributeName=caml_call1(_fn_,cst_attributeName);
function a_attributeType(x)
{return user_attrib(C[4],cst_attributeType,x)}
var
a_begin=caml_call1(_fn_,cst_begin),
a_dur=caml_call1(_fn_,cst_dur),
a_min=caml_call1(_fn_,cst_min),
a_max=caml_call1(_fn_,cst_max);
function a_restart(x){return user_attrib(C[4],cst_restart,x)}
var
a_repeatCount=caml_call1(_fn_,cst_repeatCount),
a_repeatDur=caml_call1(_fn_,cst_repeatDur),
_f1_=C[18];
function a_fill(_jt_){return user_attrib(_f1_,cst_fill,_jt_)}
function a_animation_fill(x){return user_attrib(C[4],cst_fill$0,x)}
function a_calcMode(x){return user_attrib(C[4],cst_calcMode,x)}
var
a_animation_values=caml_call1(Xml[8],cst_values$0),
a_keyTimes=caml_call1(Xml[8],cst_keyTimes),
a_keySplines=caml_call1(Xml[8],cst_keySplines),
a_from=caml_call1(_fn_,cst_from),
a_to=caml_call1(_fn_,cst_to),
a_by=caml_call1(_fn_,cst_by);
function a_additive(x){return user_attrib(C[4],cst_additive,x)}
function a_accumulate(x){return user_attrib(C[4],cst_accumulate,x)}
var _f2_=C[15];
function a_keyPoints(_js_){return user_attrib(_f2_,cst_keyPoints,_js_)}
var a_path=caml_call1(_fn_,cst_path),_f3_=C[4];
function a_animateTransform_type(_jr_)
{return user_attrib(_f3_,cst_type$3,_jr_)}
var _f4_=C[12];
function a_horiz_origin_x(_jq_)
{return user_attrib(_f4_,cst_horiz_origin_x,_jq_)}
var _f5_=C[12];
function a_horiz_origin_y(_jp_)
{return user_attrib(_f5_,cst_horiz_origin_y,_jp_)}
var _f6_=C[12];
function a_horiz_adv_x(_jo_)
{return user_attrib(_f6_,cst_horiz_adv_x,_jo_)}
var _f7_=C[12];
function a_vert_origin_x(_jn_)
{return user_attrib(_f7_,cst_vert_origin_x,_jn_)}
var _f8_=C[12];
function a_vert_origin_y(_jm_)
{return user_attrib(_f8_,cst_vert_origin_y,_jm_)}
var _f9_=C[12];
function a_vert_adv_y(_jl_)
{return user_attrib(_f9_,cst_vert_adv_y,_jl_)}
var
a_unicode=caml_call1(_fn_,cst_unicode),
a_glyph_name=caml_call1(_fn_,cst_glyphname);
function a_orientation(x){return user_attrib(C[4],cst_orientation,x)}
function a_arabic_form(x){return user_attrib(C[4],cst_arabic_form,x)}
var
a_lang=caml_call1(_fn_,cst_lang),
a_u1=caml_call1(_fn_,cst_u1),
a_u2=caml_call1(_fn_,cst_u2),
a_g1=caml_call1(_fn_,cst_g1),
a_g2=caml_call1(_fn_,cst_g2),
a_k=caml_call1(_fn_,cst_k),
a_font_family=caml_call1(_fn_,cst_font_family),
a_font_style=caml_call1(_fn_,cst_font_style),
a_font_variant=caml_call1(_fn_,cst_font_variant),
a_font_weight=caml_call1(_fn_,cst_font_weight),
a_font_stretch=caml_call1(_fn_,cst_font_stretch),
a_font_size=caml_call1(_fn_,cst_font_size),
a_unicode_range=caml_call1(_fn_,cst_unicode_range),
a_units_per_em=caml_call1(_fn_,cst_units_per_em),
_f__=C[12];
function a_stemv(_jk_){return user_attrib(_f__,cst_stemv,_jk_)}
var _f$_=C[12];
function a_stemh(_jj_){return user_attrib(_f$_,cst_stemh,_jj_)}
var _ga_=C[12];
function a_slope(_ji_){return user_attrib(_ga_,cst_slope,_ji_)}
var _gb_=C[12];
function a_cap_height(_jh_)
{return user_attrib(_gb_,cst_cap_height,_jh_)}
var _gc_=C[12];
function a_x_height(_jg_){return user_attrib(_gc_,cst_x_height,_jg_)}
var _gd_=C[12];
function a_accent_height(_jf_)
{return user_attrib(_gd_,cst_accent_height,_jf_)}
var _ge_=C[12];
function a_ascent(_je_){return user_attrib(_ge_,cst_ascent,_je_)}
var
a_widths=caml_call1(_fn_,cst_widths),
a_bbox=caml_call1(_fn_,cst_bbox),
_gf_=C[12];
function a_ideographic(_jd_)
{return user_attrib(_gf_,cst_ideographic,_jd_)}
var _gg_=C[12];
function a_alphabetic(_jc_)
{return user_attrib(_gg_,cst_alphabetic,_jc_)}
var _gh_=C[12];
function a_mathematical(_jb_)
{return user_attrib(_gh_,cst_mathematical,_jb_)}
var _gi_=C[12];
function a_hanging(_ja_){return user_attrib(_gi_,cst_hanging,_ja_)}
var _gj_=C[12];
function a_videographic(_i$_)
{return user_attrib(_gj_,cst_v_ideographic,_i$_)}
var _gk_=C[12];
function a_v_alphabetic(_i__)
{return user_attrib(_gk_,cst_v_alphabetic,_i__)}
var _gl_=C[12];
function a_v_mathematical(_i9_)
{return user_attrib(_gl_,cst_v_mathematical,_i9_)}
var _gm_=C[12];
function a_v_hanging(_i8_){return user_attrib(_gm_,cst_v_hanging,_i8_)}
var _gn_=C[12];
function a_underline_position(_i7_)
{return user_attrib(_gn_,cst_underline_position,_i7_)}
var _go_=C[12];
function a_underline_thickness(_i6_)
{return user_attrib(_go_,cst_underline_thickness,_i6_)}
var _gp_=C[12];
function a_strikethrough_position(_i5_)
{return user_attrib(_gp_,cst_strikethrough_position,_i5_)}
var _gq_=C[12];
function a_strikethrough_thickness(_i4_)
{return user_attrib(_gq_,cst_strikethrough_thickness,_i4_)}
var _gr_=C[12];
function a_overline_position(_i3_)
{return user_attrib(_gr_,cst_overline_position,_i3_)}
var _gs_=C[12];
function a_overline_thickness(_i2_)
{return user_attrib(_gs_,cst_overline_thickness,_i2_)}
var
a_string=caml_call1(_fn_,cst_string),
a_name=caml_call1(_fn_,cst_name);
function a_alignment_baseline(x)
{return user_attrib(C[2],cst_alignment_baseline,x)}
function a_dominant_baseline(x)
{return user_attrib(C[6],cst_dominant_baseline,x)}
var
a_onabort=caml_call1(Xml[9],cst_onabort),
a_onactivate=caml_call1(Xml[9],cst_onactivate),
a_onbegin=caml_call1(Xml[9],cst_onbegin),
a_onend=caml_call1(Xml[9],cst_onend),
a_onerror=caml_call1(Xml[9],cst_onerror),
a_onfocusin=caml_call1(Xml[9],cst_onfocusin),
a_onfocusout=caml_call1(Xml[9],cst_onfocusout),
a_onload=caml_call1(Xml[9],cst_onload),
a_onrepeat=caml_call1(Xml[9],cst_onrepeat),
a_onresize=caml_call1(Xml[9],cst_onresize),
a_onscroll=caml_call1(Xml[9],cst_onscroll),
a_onunload=caml_call1(Xml[9],cst_onunload),
a_onzoom=caml_call1(Xml[9],cst_onzoom),
a_onclick=caml_call1(Xml[10],cst_onclick),
a_onmousedown=caml_call1(Xml[10],cst_onmousedown),
a_onmouseup=caml_call1(Xml[10],cst_onmouseup),
a_onmouseover=caml_call1(Xml[10],cst_onmouseover),
a_onmouseout=caml_call1(Xml[10],cst_onmouseout),
a_onmousemove=caml_call1(Xml[10],cst_onmousemove),
a_ontouchstart=caml_call1(Xml[12],cst_ontouchstart),
a_ontouchend=caml_call1(Xml[12],cst_ontouchend),
a_ontouchmove=caml_call1(Xml[12],cst_ontouchmove),
a_ontouchcancel=caml_call1(Xml[12],cst_ontouchcancel),
a_stop_color=caml_call1(_fr_,cst_stop_color),
_gt_=C[12];
function a_stop_opacity(_i1_)
{return user_attrib(_gt_,cst_stop_opacity,_i1_)}
var _gu_=C[18];
function a_stroke(_i0_){return user_attrib(_gu_,cst_stroke,_i0_)}
var _gv_=C[10];
function a_stroke_width(_iZ_)
{return user_attrib(_gv_,cst_stroke_width,_iZ_)}
function a_stroke_linecap(x)
{return user_attrib(C[4],cst_stroke_linecap,x)}
function a_stroke_linejoin(x)
{return user_attrib(C[4],cst_stroke_linejoin,x)}
var _gw_=C[12];
function a_stroke_miterlimit(_iY_)
{return user_attrib(_gw_,cst_stroke_miterlimit,_iY_)}
function a_stroke_dasharray(x)
{return user_attrib(C[19],cst_stroke_dasharray,x)}
var _gx_=C[10];
function a_stroke_dashoffset(_iX_)
{return user_attrib(_gx_,cst_stroke_dashoffset,_iX_)}
var _gy_=C[12];
function a_stroke_opacity(_iW_)
{return user_attrib(_gy_,cst_stroke_opacity,_iW_)}
function svg(opt,children)
{if(opt)var sth=opt[1],a=sth;else var a=0;
var
_iV_=
[0,
caml_call2
(_fn_,
cst_xmlns_xlink,
caml_call1(Xml[1][1],cst_http_www_w3_org_1999_xlink)),
a],
attribs=
[0,
caml_call2
(_fn_,
cst_xmlns$3,
caml_call1(Xml[1][1],cst_http_www_w3_org_2000_svg)),
_iV_];
return star(cst_svg$0,[0,attribs],children)}
function g(_iT_,_iU_){return star(cst_g,_iT_,_iU_)}
function defs(_iR_,_iS_){return star(cst_defs,_iR_,_iS_)}
function desc(_iP_,_iQ_){return unary(cst_desc,_iP_,_iQ_)}
function title(_iN_,_iO_){return unary(cst_title,_iN_,_iO_)}
function symbol(_iL_,_iM_){return star(cst_symbol,_iL_,_iM_)}
function use(_iJ_,_iK_){return star(cst_use,_iJ_,_iK_)}
function image(_iH_,_iI_){return star(cst_image,_iH_,_iI_)}
function switch$0(_iF_,_iG_){return star(cst_switch,_iF_,_iG_)}
function style(_iD_,_iE_){return unary(cst_style$0,_iD_,_iE_)}
function path(_iB_,_iC_){return star(cst_path$0,_iB_,_iC_)}
function rect(_iz_,_iA_){return star(cst_rect,_iz_,_iA_)}
function circle(_ix_,_iy_){return star(cst_circle,_ix_,_iy_)}
function ellipse(_iv_,_iw_){return star(cst_ellipse,_iv_,_iw_)}
function line(_it_,_iu_){return star(cst_line,_it_,_iu_)}
function polyline(_ir_,_is_){return star(cst_polyline,_ir_,_is_)}
function polygon(_ip_,_iq_){return star(cst_polygon,_ip_,_iq_)}
function text(_in_,_io_){return star(cst_text,_in_,_io_)}
function tspan(_il_,_im_){return star(cst_tspan,_il_,_im_)}
function tref(_ij_,_ik_){return star(cst_tref,_ij_,_ik_)}
function textPath(_ih_,_ii_){return star(cst_textPath,_ih_,_ii_)}
function altGlyph(_if_,_ig_){return unary(cst_altGlyph,_if_,_ig_)}
function altGlyphDef(_id_,_ie_){return unary(cst_altGlyphDef,_id_,_ie_)}
function altGlyphItem(_ib_,_ic_)
{return star(cst_altGlyphItem,_ib_,_ic_)}
function glyphRef(_h$_,_ia_){return nullary(cst_glyphRef$0,_h$_,_ia_)}
function marker(_h9_,_h__){return star(cst_marker,_h9_,_h__)}
function color_profile(_h7_,_h8_)
{return star(cst_color_profile,_h7_,_h8_)}
function linearGradient(_h5_,_h6_)
{return star(cst_linearGradient,_h5_,_h6_)}
function radialGradient(_h3_,_h4_)
{return star(cst_radialGradient,_h3_,_h4_)}
function stop(_h1_,_h2_){return star(cst_stop,_h1_,_h2_)}
function pattern(_hZ_,_h0_){return star(cst_pattern,_hZ_,_h0_)}
function clipPath(_hX_,_hY_){return star(cst_clipPath,_hX_,_hY_)}
function filter(_hV_,_hW_){return star(cst_filter,_hV_,_hW_)}
function feDistantLight(_hT_,_hU_)
{return star(cst_feDistantLight,_hT_,_hU_)}
function fePointLight(_hR_,_hS_)
{return star(cst_fePointLight,_hR_,_hS_)}
function feSpotLight(_hP_,_hQ_){return star(cst_feSpotLight,_hP_,_hQ_)}
function feBlend(_hN_,_hO_){return star(cst_feBlend,_hN_,_hO_)}
function feColorMatrix(_hL_,_hM_)
{return star(cst_feColorMatrix,_hL_,_hM_)}
function feComponentTransfer(_hJ_,_hK_)
{return star(cst_feComponentTransfer,_hJ_,_hK_)}
function feFuncA(_hH_,_hI_){return star(cst_feFuncA,_hH_,_hI_)}
function feFuncG(_hF_,_hG_){return star(cst_feFuncG,_hF_,_hG_)}
function feFuncB(_hD_,_hE_){return star(cst_feFuncB,_hD_,_hE_)}
function feFuncR(_hB_,_hC_){return star(cst_feFuncR,_hB_,_hC_)}
function feComposite(_hz_,_hA_){return star(cst_feComposite,_hz_,_hA_)}
function feConvolveMatrix(_hx_,_hy_)
{return star(cst_feConvolveMatrix,_hx_,_hy_)}
function feDiffuseLighting(_hv_,_hw_)
{return star(cst_feDiffuseLighting,_hv_,_hw_)}
function feDisplacementMap(_ht_,_hu_)
{return star(cst_feDisplacementMap,_ht_,_hu_)}
function feFlood(_hr_,_hs_){return star(cst_feFlood,_hr_,_hs_)}
function feGaussianBlur(_hp_,_hq_)
{return star(cst_feGaussianBlur,_hp_,_hq_)}
function feImage(_hn_,_ho_){return star(cst_feImage,_hn_,_ho_)}
function feMerge(_hl_,_hm_){return star(cst_feMerge,_hl_,_hm_)}
function feMorphology(_hj_,_hk_)
{return star(cst_feMorphology,_hj_,_hk_)}
function feOffset(_hh_,_hi_){return star(cst_feOffset,_hh_,_hi_)}
function feSpecularLighting(_hf_,_hg_)
{return star(cst_feSpecularLighting,_hf_,_hg_)}
function feTile(_hd_,_he_){return star(cst_feTile,_hd_,_he_)}
function feTurbulence(_hb_,_hc_)
{return star(cst_feTurbulence,_hb_,_hc_)}
function cursor(_g$_,_ha_){return star(cst_cursor,_g$_,_ha_)}
function a(_g9_,_g__){return star(cst_a,_g9_,_g__)}
function view(_g7_,_g8_){return star(cst_view,_g7_,_g8_)}
function script(_g5_,_g6_){return unary(cst_script,_g5_,_g6_)}
function animation(_g3_,_g4_){return star(cst_animate,_g3_,_g4_)}
function set(_g1_,_g2_){return star(cst_set,_g1_,_g2_)}
function animateMotion(_gZ_,_g0_)
{return star(cst_animateMotion,_gZ_,_g0_)}
function mpath(_gX_,_gY_){return star(cst_mpath,_gX_,_gY_)}
function animateColor(_gV_,_gW_)
{return star(cst_animateColor,_gV_,_gW_)}
function animateTransform(_gT_,_gU_)
{return star(cst_animateTransform,_gT_,_gU_)}
function font(_gR_,_gS_){return star(cst_font,_gR_,_gS_)}
function glyph(_gP_,_gQ_){return star(cst_glyph,_gP_,_gQ_)}
function missing_glyph(_gN_,_gO_)
{return star(cst_missing_glyph,_gN_,_gO_)}
function hkern(_gL_,_gM_){return nullary(cst_hkern,_gL_,_gM_)}
function vkern(_gJ_,_gK_){return nullary(cst_vkern,_gJ_,_gK_)}
function font_face(_gH_,_gI_){return nullary(cst_font_face,_gH_,_gI_)}
function font_face_src(_gF_,_gG_)
{return star(cst_font_face_src,_gF_,_gG_)}
function font_face_uri(_gD_,_gE_)
{return star(cst_font_face_uri,_gD_,_gE_)}
function font_face_format(_gB_,_gC_)
{return nullary(cst_font_face_uri$0,_gB_,_gC_)}
function font_face_name(_gz_,_gA_)
{return nullary(cst_font_face_name,_gz_,_gA_)}
function doc_toelt(x){return x}
var I=_a_(Xml);
function of_seq(s){return caml_call1(I[1],s)}
function data(s){return caml_call1(Xml[18],s)}
function leaf(tag,a,param){return caml_call2(Xml[20],a,tag)}
function node(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)}
function coerce_elt(x){return x}
var float_attrib=Xml[4],int_attrib=Xml[5],string_attrib=Xml[6];
function uri_attrib(a,s){return caml_call2(Xml[13],a,s)}
var
space_sep_attrib=Xml[7],
comma_sep_attrib=Xml[8],
Unsafe=
[0,
data,
leaf,
node,
coerce_elt,
float_attrib,
int_attrib,
string_attrib,
uri_attrib,
space_sep_attrib,
comma_sep_attrib];
return [0,
Xml,
Info,
_fk_,
_fl_,
tot,
totl,
toelt,
toeltl,
to_attrib,
nullary,
unary,
star,
to_xmlattribs,
_fm_,
_fn_,
_fo_,
_fp_,
_fq_,
user_attrib,
_fm_,
_fr_,
metadata,
foreignObject,
pcdata,
pcdata,
a_version,
a_baseProfile,
a_x,
a_y,
a_width,
a_height,
a_preserveAspectRatio,
a_contentScriptType,
a_contentStyleType,
a_zoomAndPan,
a_href,
a_xlink_href,
a_requiredFeatures,
a_requiredExtensions,
a_systemLanguage,
a_externalRessourcesRequired,
a_id,
a_user_data,
a_xml_base,
a_xml_lang,
a_xml_space,
a_type,
a_media,
a_xlink_title,
a_class,
a_style,
a_transform,
a_viewBox,
a_d,
a_pathLength,
a_rx,
a_ry,
a_cx,
a_cy,
a_r,
a_x1,
a_y1,
a_x2,
a_y2,
a_points,
a_x_list,
a_y_list,
a_dx,
a_dy,
a_dx_list,
a_dy_list,
a_lengthAdjust,
a_textLength,
a_text_anchor,
a_text_decoration,
a_text_rendering,
a_rotate,
a_startOffset,
a_method,
a_spacing,
a_glyphRef,
a_format,
a_markerUnits,
a_refX,
a_refY,
a_markerWidth,
a_markerHeight,
a_orient,
a_local,
a_rendering_intent,
a_gradientUnits,
a_gradientTransform,
a_spreadMethod,
a_fx,
a_fy,
a_offset,
a_patternUnits,
a_patternContentUnits,
a_patternTransform,
a_clipPathUnits,
a_maskUnits,
a_maskContentUnits,
a_primitiveUnits,
a_filterRes,
a_result,
a_in,
a_in2,
a_azimuth,
a_elevation,
a_pointsAtX,
a_pointsAtY,
a_pointsAtZ,
a_specularExponent,
a_specularConstant,
a_limitingConeAngle,
a_mode,
a_feColorMatrix_type,
a_values,
a_transfer_type,
a_tableValues,
a_intercept,
a_amplitude,
a_exponent,
a_transfer_offset,
a_feComposite_operator,
a_k1,
a_k2,
a_k3,
a_k4,
a_order,
a_kernelMatrix,
a_divisor,
a_bias,
a_kernelUnitLength,
a_targetX,
a_targetY,
a_edgeMode,
a_preserveAlpha,
a_surfaceScale,
a_diffuseConstant,
a_scale,
a_xChannelSelector,
a_yChannelSelector,
a_stdDeviation,
a_feMorphology_operator,
a_radius,
a_baseFrenquency,
a_numOctaves,
a_seed,
a_stitchTiles,
a_feTurbulence_type,
a_xlink_show,
a_xlink_actuate,
a_target,
a_viewTarget,
a_attributeName,
a_attributeType,
a_begin,
a_dur,
a_min,
a_max,
a_restart,
a_repeatCount,
a_repeatDur,
a_fill,
a_animation_fill,
a_calcMode,
a_animation_values,
a_keyTimes,
a_keySplines,
a_from,
a_to,
a_by,
a_additive,
a_accumulate,
a_keyPoints,
a_path,
a_animateTransform_type,
a_horiz_origin_x,
a_horiz_origin_y,
a_horiz_adv_x,
a_vert_origin_x,
a_vert_origin_y,
a_vert_adv_y,
a_unicode,
a_glyph_name,
a_orientation,
a_arabic_form,
a_lang,
a_u1,
a_u2,
a_g1,
a_g2,
a_k,
a_font_family,
a_font_style,
a_font_variant,
a_font_weight,
a_font_stretch,
a_font_size,
a_unicode_range,
a_units_per_em,
a_stemv,
a_stemh,
a_slope,
a_cap_height,
a_x_height,
a_accent_height,
a_ascent,
a_widths,
a_bbox,
a_ideographic,
a_alphabetic,
a_mathematical,
a_hanging,
a_videographic,
a_v_alphabetic,
a_v_mathematical,
a_v_hanging,
a_underline_position,
a_underline_thickness,
a_strikethrough_position,
a_strikethrough_thickness,
a_overline_position,
a_overline_thickness,
a_string,
a_name,
a_alignment_baseline,
a_dominant_baseline,
a_onabort,
a_onactivate,
a_onbegin,
a_onend,
a_onerror,
a_onfocusin,
a_onfocusout,
a_onload,
a_onrepeat,
a_onresize,
a_onscroll,
a_onunload,
a_onzoom,
a_onclick,
a_onmousedown,
a_onmouseup,
a_onmouseover,
a_onmouseout,
a_onmousemove,
a_ontouchstart,
a_ontouchend,
a_ontouchmove,
a_ontouchcancel,
a_stop_color,
a_stop_opacity,
a_stroke,
a_stroke_width,
a_stroke_linecap,
a_stroke_linejoin,
a_stroke_miterlimit,
a_stroke_dasharray,
a_stroke_dashoffset,
a_stroke_opacity,
svg,
g,
defs,
desc,
title,
symbol,
use,
image,
switch$0,
style,
path,
rect,
circle,
ellipse,
line,
polyline,
polygon,
text,
tspan,
tref,
textPath,
altGlyph,
altGlyphDef,
altGlyphItem,
glyphRef,
marker,
color_profile,
linearGradient,
radialGradient,
stop,
pattern,
clipPath,
filter,
feDistantLight,
fePointLight,
feSpotLight,
feBlend,
feColorMatrix,
feComponentTransfer,
feFuncA,
feFuncG,
feFuncB,
feFuncR,
feComposite,
feConvolveMatrix,
feDiffuseLighting,
feDisplacementMap,
feFlood,
feGaussianBlur,
feImage,
feMerge,
feMorphology,
feOffset,
feSpecularLighting,
feTile,
feTurbulence,
cursor,
a,
view,
script,
animation,
set,
animateMotion,
mpath,
animateColor,
animateTransform,
font,
glyph,
missing_glyph,
hkern,
vkern,
font_face,
font_face_src,
font_face_uri,
font_face_format,
font_face_name,
doc_toelt,
I,
of_seq,
Unsafe]}
function Wrapped_functions(Xml)
{function string_of_alignment_baseline(param)
{return -72987685 <= param
?354434192 <= param
?881373037 <= param
?1018879136 <= param?cst_after_edge:cst_alphabetic$0
:726666127 <= param?cst_auto:cst_hanging$0
:15943541 === param
?cst_middle
:218255880 <= param?cst_mathematical$0:cst_inherit
:-840627829 <= param
?-415175851 <= param
?-354838363 <= param?cst_baseline:cst_central
:-693588957 <= param?cst_ideographic$0:cst_text_before_edge
:-863864035 <= param?cst_before_edge:cst_text_after_edge}
function string_of_big_variant(param)
{return 3350435 <= param
?476616093 <= param
?744337004 <= param
?914009117 <= param
?970483178 <= param
?1040349136 <= param
?1071251601 <= param?cst_stitch:cst_onRequest
:990972795 <= param?cst_repeat:cst_wrap
:958206052 <= param?cst_remove:cst_reflect
:870530776 <= param
?884917925 <= param
?889668530 <= param?cst_noStitch:cst$35
:881966452 <= param?cst_over:cst_none$0
:861714216 <= param?cst_medial:cst_never
:568588039 <= param
?716799946 <= param
?726666127 <= param
?737755699 <= param?cst_butt:cst_auto$0
:726615284 <= param?cst_atop:cst_arithmetic
:698610924 <= param?cst_underline:cst_gamma
:512807795 <= param
?518168424 <= param
?557106693 <= param?cst_linear:cst_overline
:517347077 <= param?cst_onLoad:cst_turbulence
:504440814 <= param?cst_table:cst_geometricPrecision
:163178525 <= param
?316735838 <= param
?389604418 <= param
?463106021 <= param
?466749770 <= param?cst_optimizeSpeed:cst_miter
:418396260 <= param?cst_initial:cst_start
:384893183 <= param?cst_whenNotActive:cst_identity
:201080426 <= param
?289998318 <= param
?289998319 <= param?cst_skewY:cst_skewX
:226915517 <= param?cst_square:cst_scale$0
:172069535 <= param?cst_exact:cst_perceptual
:4393399 <= param
?9660462 <= param
?106228547 <= param
?118574553 <= param?cst_discrete:cst_erode
:15943541 <= param?cst_middle$0:cst_round
:4401019 <= param?cst_xor:cst_XML
:3901504 <= param
?4000051 <= param
?4153707 <= param?cst_sum:cst_pad
:3954798 <= param?cst_out:cst_new
:3455931 <= param?cst_end:cst_CSS
:-453122489 <= param
?-72987685 <= param
?66 <= param
?72 <= param
?86 <= param
?16389 <= param?cst_in$1:cst_v
:82 <= param?cst_r$0:cst_h
:71 <= param?cst_g$0:cst_b
:-68046964 <= param
?-4932997 <= param
?65 <= param?cst_a$0:cst_rotate$0
:-22441528 <= param?cst_disable:cst_screen
:-72678338 <= param?cst_absolute_colorimetric:cst_inherit$0
:-262362527 <= param
?-197222844 <= param
?-115006565 <= param
?-76840209 <= param?cst_always:cst_spacingAndGlyphs
:-126259180 <= param?cst_replace:cst_multiply
:-197983439 <= param?cst_spline:cst_matrix
:-384499551 <= param
?-318472885 <= param
?-313337870 <= param?cst_saturation:cst_dilate
:-346900690 <= param?cst_translate:cst_default
:-415993185 <= param?cst_lighten:cst_normal
:-839430911 <= param
?-672592881 <= param
?-552838301 <= param
?-505547199 <= param
?-474415497 <= param?cst_freeze:cst_magnify
:-543144685 <= param?cst_hueRotate:cst_spacing$0
:-621842423 <= param?cst_fractalNoise:cst_saturate
:-797470191 <= param
?-699926424 <= param
?-689066995 <= param
?cst_userSpaceOnUse
:cst_objectBoundingBox
:-707876225 <= param?cst_darken:cst_paced
:-824137927 <= param?cst_isolated:cst_optimizeLegibility
:-951087346 <= param
?-912466532 <= param
?-851306022 <= param
?-851300629 <= param?cst_luminanceToAlpha:cst_line_through
:-912009552 <= param?cst_other:cst_terminal
:-937074372 <= param?cst_blink:cst_stroke_width$0
:-1044642615 === param
?cst_relative_colorimetric
:-1014056864 <= param
?-1012636187 <= param?cst_stretch:cst_bevel
:-1024851605 <= param?cst_duplicate:cst_preserve}
var _eX_=Stdlib[30];
function _eY_(param)
{var b=param[2],a=param[1];return caml_call3(Stdlib_Printf[4],_S_,a,b)}
var _eZ_=0;
function string_of_coords(_fj_){return list(_eZ_,_eY_,_fj_)}
function string_of_dominant_baseline(param)
{return -72987685 <= param
?354434192 <= param
?881373037 <= param
?945233102 <= param?cst_nochange:cst_alphabetic$1
:726666127 <= param?cst_auto$1:cst_hanging$1
:15943541 === param
?cst_middle$1
:218255880 <= param?cst_mathematical$1:cst_inherit$1
:-840627829 <= param
?-504734109 <= param
?-415175851 <= param?cst_central$0:cst_usescript
:-693588957 <= param?cst_ideographic$1:cst_textbeforeedge
:-880506735 <= param?cst_resetsize:cst_textafteredge}
function string_of_in_value(param)
{if(typeof param === "number")
return 198492909 <= param
?885982307 <= param
?976982182 <= param?cst_strokePaint:cst_sourceAlpha
:768130555 <= param?cst_fillPaint:cst_sourceGraphic
:-522189715 <= param?cst_backgroundImage:cst_backgroundAlpha;
var svg=param[2];
return svg}
var _e0_=Stdlib[33],_e1_=0;
function string_of_lengths(_fi_)
{return list(_e1_,string_of_length,_fi_)}
function string_of_percentage(x)
{var _fh_=string_of_number(x);
return caml_call2(Stdlib[28],_fh_,cst$36)}
function string_of_fourfloats(param)
{var
d=param[4],
c=param[3],
b=param[2],
a=param[1],
_fd_=string_of_number(d),
_fe_=string_of_number(c),
_ff_=string_of_number(b),
_fg_=string_of_number(a);
return caml_call5(Stdlib_Printf[4],_T_,_fg_,_ff_,_fe_,_fd_)}
function string_of_number_optional_numb(param)
{var _fb_=param[2],_fc_=param[1];
if(_fb_){var y=_fb_[1];return caml_call3(Stdlib_Printf[4],_U_,_fc_,y)}
return caml_call2(Stdlib_Printf[4],_V_,_fc_)}
var _e2_=0;
function string_of_numbers(_fa_)
{return list(_e2_,string_of_number,_fa_)}
function string_of_numbers_semicolon(_e$_)
{return list(_W_,string_of_number,_e$_)}
function string_of_offset(param)
{if(-488794310 <= param[1])
{var x=param[2];return string_of_percentage(x)}
var x$0=param[2];
return string_of_number(x$0)}
function string_of_orient(param)
{if(param){var svg=param[1];return string_of_angle(svg)}
return cst_auto$2}
function string_of_strokedasharray(l)
{return l?list(0,string_of_length,l):cst_none$1}
function string_of_transform(param)
{var _e4_=param[1];
if(-4932997 <= _e4_)
{if(289998318 <= _e4_)
{if(289998319 <= _e4_)
{var angle=param[2],_e5_=string_of_angle(angle);
return caml_call2(Stdlib_Printf[4],_X_,_e5_)}
var angle$0=param[2],_e6_=string_of_angle(angle$0);
return caml_call2(Stdlib_Printf[4],_Y_,_e6_)}
if(201080426 <= _e4_)
{var x=param[2],_e7_=string_of_number_optional_numb(x);
return caml_call2(Stdlib_Printf[4],_Z_,_e7_)}
var match=param[2],x$0=match[2],angle$1=match[1];
if(x$0)
var
match$0=x$0[1],
y=match$0[2],
x$1=match$0[1],
_e8_=caml_call3(Stdlib_Printf[4],___,x$1,y);
else
var _e8_=cst$37;
var _e9_=string_of_angle(angle$1);
return caml_call3(Stdlib_Printf[4],_$_,_e9_,_e8_)}
if(-262362527 <= _e4_)
{var
match$1=param[2],
f=match$1[6],
e=match$1[5],
d=match$1[4],
c=match$1[3],
b=match$1[2],
a=match$1[1];
return caml_call7(Stdlib_Printf[4],_aa_,a,b,c,d,e,f)}
var x$2=param[2],_e__=string_of_number_optional_numb(x$2);
return caml_call2(Stdlib_Printf[4],_ab_,_e__)}
function string_of_transforms(l)
{var _e3_=caml_call2(Stdlib_List[19],string_of_transform,l);
return caml_call2(Stdlib_String[6],cst$38,_e3_)}
return [0,
Xml,
string_of_alignment_baseline,
string_of_big_variant,
_eX_,
string_of_coords,
string_of_dominant_baseline,
string_of_in_value,
_e0_,
string_of_length,
string_of_lengths,
string_of_number,
string_of_percentage,
string_of_fourfloats,
string_of_number_optional_numb,
string_of_numbers,
string_of_numbers_semicolon,
string_of_offset,
string_of_orient,
string_of_paint,
string_of_strokedasharray,
string_of_transform,
string_of_transforms]}
function _ac_(_eT_,_eS_)
{var
_eU_=Make_with_wrapped_functions(_eT_,_eS_),
_eV_=_eU_[342],
_eW_=_eU_[2];
return [0,
_eU_[1],
[0,_eW_[1],_eW_[2],_eW_[4],_eW_[5],_eW_[6],_eW_[7],_eW_[3]],
_eU_[3],
_eU_[4],
_eU_[26],
_eU_[27],
_eU_[28],
_eU_[29],
_eU_[30],
_eU_[31],
_eU_[32],
_eU_[33],
_eU_[34],
_eU_[35],
_eU_[36],
_eU_[37],
_eU_[38],
_eU_[39],
_eU_[40],
_eU_[41],
_eU_[42],
_eU_[43],
_eU_[44],
_eU_[45],
_eU_[46],
_eU_[47],
_eU_[48],
_eU_[49],
_eU_[50],
_eU_[51],
_eU_[52],
_eU_[53],
_eU_[54],
_eU_[55],
_eU_[56],
_eU_[57],
_eU_[58],
_eU_[59],
_eU_[60],
_eU_[61],
_eU_[62],
_eU_[63],
_eU_[64],
_eU_[65],
_eU_[66],
_eU_[67],
_eU_[68],
_eU_[69],
_eU_[70],
_eU_[71],
_eU_[72],
_eU_[73],
_eU_[74],
_eU_[75],
_eU_[76],
_eU_[77],
_eU_[78],
_eU_[79],
_eU_[80],
_eU_[81],
_eU_[82],
_eU_[83],
_eU_[84],
_eU_[85],
_eU_[86],
_eU_[87],
_eU_[88],
_eU_[89],
_eU_[90],
_eU_[91],
_eU_[92],
_eU_[93],
_eU_[94],
_eU_[95],
_eU_[96],
_eU_[97],
_eU_[98],
_eU_[99],
_eU_[100],
_eU_[101],
_eU_[102],
_eU_[103],
_eU_[104],
_eU_[105],
_eU_[106],
_eU_[107],
_eU_[108],
_eU_[109],
_eU_[110],
_eU_[111],
_eU_[112],
_eU_[113],
_eU_[114],
_eU_[115],
_eU_[116],
_eU_[117],
_eU_[118],
_eU_[119],
_eU_[120],
_eU_[121],
_eU_[122],
_eU_[123],
_eU_[124],
_eU_[125],
_eU_[126],
_eU_[127],
_eU_[128],
_eU_[129],
_eU_[130],
_eU_[131],
_eU_[132],
_eU_[133],
_eU_[134],
_eU_[135],
_eU_[136],
_eU_[137],
_eU_[138],
_eU_[139],
_eU_[140],
_eU_[141],
_eU_[142],
_eU_[143],
_eU_[144],
_eU_[145],
_eU_[146],
_eU_[147],
_eU_[148],
_eU_[149],
_eU_[150],
_eU_[151],
_eU_[152],
_eU_[153],
_eU_[154],
_eU_[155],
_eU_[156],
_eU_[157],
_eU_[158],
_eU_[159],
_eU_[160],
_eU_[161],
_eU_[162],
_eU_[163],
_eU_[164],
_eU_[165],
_eU_[166],
_eU_[167],
_eU_[168],
_eU_[169],
_eU_[170],
_eU_[171],
_eU_[172],
_eU_[173],
_eU_[174],
_eU_[175],
_eU_[176],
_eU_[177],
_eU_[178],
_eU_[179],
_eU_[180],
_eU_[181],
_eU_[182],
_eU_[183],
_eU_[184],
_eU_[185],
_eU_[186],
_eU_[187],
_eU_[188],
_eU_[189],
_eU_[190],
_eU_[191],
_eU_[192],
_eU_[193],
_eU_[194],
_eU_[195],
_eU_[196],
_eU_[197],
_eU_[198],
_eU_[199],
_eU_[200],
_eU_[201],
_eU_[202],
_eU_[203],
_eU_[204],
_eU_[205],
_eU_[206],
_eU_[207],
_eU_[208],
_eU_[209],
_eU_[210],
_eU_[211],
_eU_[212],
_eU_[213],
_eU_[214],
_eU_[215],
_eU_[216],
_eU_[217],
_eU_[218],
_eU_[219],
_eU_[220],
_eU_[221],
_eU_[222],
_eU_[223],
_eU_[224],
_eU_[225],
_eU_[226],
_eU_[227],
_eU_[228],
_eU_[229],
_eU_[253],
_eU_[254],
_eU_[255],
_eU_[256],
_eU_[257],
_eU_[258],
_eU_[259],
_eU_[260],
_eU_[261],
_eU_[262],
_eU_[230],
_eU_[231],
_eU_[232],
_eU_[233],
_eU_[234],
_eU_[235],
_eU_[236],
_eU_[237],
_eU_[238],
_eU_[239],
_eU_[240],
_eU_[241],
_eU_[242],
_eU_[243],
_eU_[244],
_eU_[245],
_eU_[246],
_eU_[247],
_eU_[248],
_eU_[249],
_eU_[250],
_eU_[251],
_eU_[252],
_eU_[24],
_eU_[263],
_eU_[264],
_eU_[265],
_eU_[266],
_eU_[267],
_eU_[268],
_eU_[269],
_eU_[270],
_eU_[271],
_eU_[272],
_eU_[273],
_eU_[274],
_eU_[275],
_eU_[276],
_eU_[277],
_eU_[278],
_eU_[279],
_eU_[280],
_eU_[281],
_eU_[282],
_eU_[283],
_eU_[284],
_eU_[285],
_eU_[286],
_eU_[287],
_eU_[288],
_eU_[289],
_eU_[290],
_eU_[291],
_eU_[292],
_eU_[293],
_eU_[294],
_eU_[295],
_eU_[296],
_eU_[297],
_eU_[298],
_eU_[299],
_eU_[300],
_eU_[301],
_eU_[302],
_eU_[303],
_eU_[304],
_eU_[305],
_eU_[306],
_eU_[307],
_eU_[308],
_eU_[309],
_eU_[310],
_eU_[311],
_eU_[312],
_eU_[313],
_eU_[314],
_eU_[315],
_eU_[316],
_eU_[317],
_eU_[318],
_eU_[319],
_eU_[320],
_eU_[321],
_eU_[322],
_eU_[323],
_eU_[324],
_eU_[325],
_eU_[326],
_eU_[327],
_eU_[328],
_eU_[329],
_eU_[330],
_eU_[331],
_eU_[332],
_eU_[333],
_eU_[334],
_eU_[335],
_eU_[336],
_eU_[337],
_eU_[338],
_eU_[22],
_eU_[23],
_eU_[25],
_eU_[341],
_eU_[5],
_eU_[6],
_eU_[7],
_eU_[8],
_eU_[339],
_eU_[13],
_eU_[9],
[0,
_eV_[1],
_eV_[3],
_eV_[2],
_eV_[4],
_eV_[7],
_eV_[5],
_eV_[6],
_eV_[8],
_eV_[9],
_eV_[10]]]}
function _ad_(_eQ_)
{var _eR_=Wrapped_functions(_eQ_);
return [0,
_eR_[1],
_eR_[2],
_eR_[4],
_eR_[3],
_eR_[5],
_eR_[6],
_eR_[13],
_eR_[7],
_eR_[8],
_eR_[9],
_eR_[10],
_eR_[11],
_eR_[14],
_eR_[15],
_eR_[16],
_eR_[17],
_eR_[18],
_eR_[19],
_eR_[20],
_eR_[21],
_eR_[22]]}
var
Svg_f=
[0,
function(_eM_)
{var
_eL_=Wrapped_functions(_eM_),
_eP_=
Make_with_wrapped_functions
(_eM_,
[0,
_eL_[1],
_eL_[2],
_eL_[4],
_eL_[3],
_eL_[5],
_eL_[6],
_eL_[13],
_eL_[7],
_eL_[8],
_eL_[9],
_eL_[10],
_eL_[11],
_eL_[14],
_eL_[15],
_eL_[16],
_eL_[17],
_eL_[18],
_eL_[19],
_eL_[20],
_eL_[21],
_eL_[22]]),
_eN_=_eP_[342],
_eO_=_eP_[2];
return [0,
_eP_[1],
[0,_eO_[1],_eO_[2],_eO_[4],_eO_[5],_eO_[6],_eO_[7],_eO_[3]],
_eP_[3],
_eP_[4],
_eP_[26],
_eP_[27],
_eP_[28],
_eP_[29],
_eP_[30],
_eP_[31],
_eP_[32],
_eP_[33],
_eP_[34],
_eP_[35],
_eP_[36],
_eP_[37],
_eP_[38],
_eP_[39],
_eP_[40],
_eP_[41],
_eP_[42],
_eP_[43],
_eP_[44],
_eP_[45],
_eP_[46],
_eP_[47],
_eP_[48],
_eP_[49],
_eP_[50],
_eP_[51],
_eP_[52],
_eP_[53],
_eP_[54],
_eP_[55],
_eP_[56],
_eP_[57],
_eP_[58],
_eP_[59],
_eP_[60],
_eP_[61],
_eP_[62],
_eP_[63],
_eP_[64],
_eP_[65],
_eP_[66],
_eP_[67],
_eP_[68],
_eP_[69],
_eP_[70],
_eP_[71],
_eP_[72],
_eP_[73],
_eP_[74],
_eP_[75],
_eP_[76],
_eP_[77],
_eP_[78],
_eP_[79],
_eP_[80],
_eP_[81],
_eP_[82],
_eP_[83],
_eP_[84],
_eP_[85],
_eP_[86],
_eP_[87],
_eP_[88],
_eP_[89],
_eP_[90],
_eP_[91],
_eP_[92],
_eP_[93],
_eP_[94],
_eP_[95],
_eP_[96],
_eP_[97],
_eP_[98],
_eP_[99],
_eP_[100],
_eP_[101],
_eP_[102],
_eP_[103],
_eP_[104],
_eP_[105],
_eP_[106],
_eP_[107],
_eP_[108],
_eP_[109],
_eP_[110],
_eP_[111],
_eP_[112],
_eP_[113],
_eP_[114],
_eP_[115],
_eP_[116],
_eP_[117],
_eP_[118],
_eP_[119],
_eP_[120],
_eP_[121],
_eP_[122],
_eP_[123],
_eP_[124],
_eP_[125],
_eP_[126],
_eP_[127],
_eP_[128],
_eP_[129],
_eP_[130],
_eP_[131],
_eP_[132],
_eP_[133],
_eP_[134],
_eP_[135],
_eP_[136],
_eP_[137],
_eP_[138],
_eP_[139],
_eP_[140],
_eP_[141],
_eP_[142],
_eP_[143],
_eP_[144],
_eP_[145],
_eP_[146],
_eP_[147],
_eP_[148],
_eP_[149],
_eP_[150],
_eP_[151],
_eP_[152],
_eP_[153],
_eP_[154],
_eP_[155],
_eP_[156],
_eP_[157],
_eP_[158],
_eP_[159],
_eP_[160],
_eP_[161],
_eP_[162],
_eP_[163],
_eP_[164],
_eP_[165],
_eP_[166],
_eP_[167],
_eP_[168],
_eP_[169],
_eP_[170],
_eP_[171],
_eP_[172],
_eP_[173],
_eP_[174],
_eP_[175],
_eP_[176],
_eP_[177],
_eP_[178],
_eP_[179],
_eP_[180],
_eP_[181],
_eP_[182],
_eP_[183],
_eP_[184],
_eP_[185],
_eP_[186],
_eP_[187],
_eP_[188],
_eP_[189],
_eP_[190],
_eP_[191],
_eP_[192],
_eP_[193],
_eP_[194],
_eP_[195],
_eP_[196],
_eP_[197],
_eP_[198],
_eP_[199],
_eP_[200],
_eP_[201],
_eP_[202],
_eP_[203],
_eP_[204],
_eP_[205],
_eP_[206],
_eP_[207],
_eP_[208],
_eP_[209],
_eP_[210],
_eP_[211],
_eP_[212],
_eP_[213],
_eP_[214],
_eP_[215],
_eP_[216],
_eP_[217],
_eP_[218],
_eP_[219],
_eP_[220],
_eP_[221],
_eP_[222],
_eP_[223],
_eP_[224],
_eP_[225],
_eP_[226],
_eP_[227],
_eP_[228],
_eP_[229],
_eP_[253],
_eP_[254],
_eP_[255],
_eP_[256],
_eP_[257],
_eP_[258],
_eP_[259],
_eP_[260],
_eP_[261],
_eP_[262],
_eP_[230],
_eP_[231],
_eP_[232],
_eP_[233],
_eP_[234],
_eP_[235],
_eP_[236],
_eP_[237],
_eP_[238],
_eP_[239],
_eP_[240],
_eP_[241],
_eP_[242],
_eP_[243],
_eP_[244],
_eP_[245],
_eP_[246],
_eP_[247],
_eP_[248],
_eP_[249],
_eP_[250],
_eP_[251],
_eP_[252],
_eP_[24],
_eP_[263],
_eP_[264],
_eP_[265],
_eP_[266],
_eP_[267],
_eP_[268],
_eP_[269],
_eP_[270],
_eP_[271],
_eP_[272],
_eP_[273],
_eP_[274],
_eP_[275],
_eP_[276],
_eP_[277],
_eP_[278],
_eP_[279],
_eP_[280],
_eP_[281],
_eP_[282],
_eP_[283],
_eP_[284],
_eP_[285],
_eP_[286],
_eP_[287],
_eP_[288],
_eP_[289],
_eP_[290],
_eP_[291],
_eP_[292],
_eP_[293],
_eP_[294],
_eP_[295],
_eP_[296],
_eP_[297],
_eP_[298],
_eP_[299],
_eP_[300],
_eP_[301],
_eP_[302],
_eP_[303],
_eP_[304],
_eP_[305],
_eP_[306],
_eP_[307],
_eP_[308],
_eP_[309],
_eP_[310],
_eP_[311],
_eP_[312],
_eP_[313],
_eP_[314],
_eP_[315],
_eP_[316],
_eP_[317],
_eP_[318],
_eP_[319],
_eP_[320],
_eP_[321],
_eP_[322],
_eP_[323],
_eP_[324],
_eP_[325],
_eP_[326],
_eP_[327],
_eP_[328],
_eP_[329],
_eP_[330],
_eP_[331],
_eP_[332],
_eP_[333],
_eP_[334],
_eP_[335],
_eP_[336],
_eP_[337],
_eP_[338],
_eP_[22],
_eP_[23],
_eP_[25],
_eP_[341],
_eP_[5],
_eP_[6],
_eP_[7],
_eP_[8],
_eP_[339],
_eP_[13],
_eP_[9],
[0,
_eN_[1],
_eN_[3],
_eN_[2],
_eN_[4],
_eN_[7],
_eN_[5],
_eN_[6],
_eN_[8],
_eN_[9],
_eN_[10]]]},
_ad_,
_ac_];
caml_register_global(1101,Svg_f,"Svg_f");
function Make_with_wrapped_functions$0(Xml,C,Svg)
{var
doctype=compose_doctype(cst_html,0),
Info=
[0,
content_type$0,
alternative_content_types,
version$0,
standard$0,
namespace$0,
doctype,
emptytags],
_aH_=Xml[2],
_aI_=Xml[3];
function to_xmlattribs(x){return x}
function to_attrib(x){return x}
var _aJ_=Xml[4],_aK_=Xml[5],_aL_=Xml[6];
function uri_attrib(a,s){return caml_call2(Xml[13],a,s)}
var _aM_=Xml[7],_aN_=Xml[8];
function user_attrib(f,name,v)
{var _eK_=caml_call2(Xml[1][2],f,v);
return caml_call2(Xml[6],name,_eK_)}
var _aO_=C[3];
function bool_attrib(_eI_,_eJ_){return user_attrib(_aO_,_eI_,_eJ_)}
function constant_attrib(a,param)
{return caml_call2(_aL_,a,caml_call1(Xml[1][1],a))}
function linktypes_attrib(name,x){return user_attrib(C[8],name,x)}
function mediadesc_attrib(name,x){return user_attrib(C[9],name,x)}
function srcset_attrib(name,x){return user_attrib(C[14],name,x)}
var a_class=caml_call1(_aM_,cst_class$0),a_id=caml_call1(_aL_,cst_id$0);
function a_user_data(name)
{return caml_call1(_aL_,caml_call2(Stdlib[28],cst_data$0,name))}
var
a_title=caml_call1(_aL_,cst_title$0),
a_xml_lang=caml_call1(_aL_,cst_xml_lang$0),
a_lang=caml_call1(_aL_,cst_lang$0),
a_style=caml_call1(_aL_,cst_style$1),
a_property=caml_call1(_aL_,cst_property),
a_onabort=caml_call1(Xml[9],cst_onabort$0),
a_onafterprint=caml_call1(Xml[9],cst_onafterprint),
a_onbeforeprint=caml_call1(Xml[9],cst_onbeforeprint),
a_onbeforeunload=caml_call1(Xml[9],cst_onbeforeunload),
a_onblur=caml_call1(Xml[9],cst_onblur),
a_oncanplay=caml_call1(Xml[9],cst_oncanplay),
a_oncanplaythrough=caml_call1(Xml[9],cst_oncanplaythrough),
a_onchange=caml_call1(Xml[9],cst_onchange),
a_ondurationchange=caml_call1(Xml[9],cst_ondurationchange),
a_onemptied=caml_call1(Xml[9],cst_onemptied),
a_onended=caml_call1(Xml[9],cst_onended),
a_onerror=caml_call1(Xml[9],cst_onerror$0),
a_onfocus=caml_call1(Xml[9],cst_onfocus),
a_onformchange=caml_call1(Xml[9],cst_onformchange),
a_onforminput=caml_call1(Xml[9],cst_onforminput),
a_onhashchange=caml_call1(Xml[9],cst_onhashchange),
a_oninput=caml_call1(Xml[9],cst_oninput),
a_oninvalid=caml_call1(Xml[9],cst_oninvalid),
a_onoffline=caml_call1(Xml[9],cst_onoffline),
a_ononline=caml_call1(Xml[9],cst_ononline),
a_onpause=caml_call1(Xml[9],cst_onpause),
a_onplay=caml_call1(Xml[9],cst_onplay),
a_onplaying=caml_call1(Xml[9],cst_onplaying),
a_onpagehide=caml_call1(Xml[9],cst_onpagehide),
a_onpageshow=caml_call1(Xml[9],cst_onpageshow),
a_onpopstate=caml_call1(Xml[9],cst_onpopstate),
a_onprogress=caml_call1(Xml[9],cst_onprogress),
a_onratechange=caml_call1(Xml[9],cst_onratechange),
a_onreadystatechange=caml_call1(Xml[9],cst_onreadystatechange),
a_onredo=caml_call1(Xml[9],cst_onredo),
a_onresize=caml_call1(Xml[9],cst_onresize$0),
a_onscroll=caml_call1(Xml[9],cst_onscroll$0),
a_onseeked=caml_call1(Xml[9],cst_onseeked),
a_onseeking=caml_call1(Xml[9],cst_onseeking),
a_onselect=caml_call1(Xml[9],cst_onselect),
a_onshow=caml_call1(Xml[9],cst_onshow),
a_onstalled=caml_call1(Xml[9],cst_onstalled),
a_onstorage=caml_call1(Xml[9],cst_onstorage),
a_onsubmit=caml_call1(Xml[9],cst_onsubmit),
a_onsuspend=caml_call1(Xml[9],cst_onsuspend),
a_ontimeupdate=caml_call1(Xml[9],cst_ontimeupdate),
a_onundo=caml_call1(Xml[9],cst_onundo),
a_onunload=caml_call1(Xml[9],cst_onunload$0),
a_onvolumechange=caml_call1(Xml[9],cst_onvolumechange),
a_onwaiting=caml_call1(Xml[9],cst_onwaiting),
a_onload=caml_call1(Xml[9],cst_onload$0),
a_onloadeddata=caml_call1(Xml[9],cst_onloadeddata),
a_onloadedmetadata=caml_call1(Xml[9],cst_onloadedmetadata),
a_onloadstart=caml_call1(Xml[9],cst_onloadstart),
a_onmessage=caml_call1(Xml[9],cst_onmessage),
a_onmousewheel=caml_call1(Xml[9],cst_onmousewheel),
a_onclick=caml_call1(Xml[10],cst_onclick$0),
a_oncontextmenu=caml_call1(Xml[10],cst_oncontextmenu),
a_ondblclick=caml_call1(Xml[10],cst_ondblclick),
a_ondrag=caml_call1(Xml[10],cst_ondrag),
a_ondragend=caml_call1(Xml[10],cst_ondragend),
a_ondragenter=caml_call1(Xml[10],cst_ondragenter),
a_ondragleave=caml_call1(Xml[10],cst_ondragleave),
a_ondragover=caml_call1(Xml[10],cst_ondragover),
a_ondragstart=caml_call1(Xml[10],cst_ondragstart),
a_ondrop=caml_call1(Xml[10],cst_ondrop),
a_onmousedown=caml_call1(Xml[10],cst_onmousedown$0),
a_onmouseup=caml_call1(Xml[10],cst_onmouseup$0),
a_onmouseover=caml_call1(Xml[10],cst_onmouseover$0),
a_onmousemove=caml_call1(Xml[10],cst_onmousemove$0),
a_onmouseout=caml_call1(Xml[10],cst_onmouseout$0),
a_ontouchstart=caml_call1(Xml[12],cst_ontouchstart$0),
a_ontouchend=caml_call1(Xml[12],cst_ontouchend$0),
a_ontouchmove=caml_call1(Xml[12],cst_ontouchmove$0),
a_ontouchcancel=caml_call1(Xml[12],cst_ontouchcancel$0),
a_onkeypress=caml_call1(Xml[11],cst_onkeypress),
a_onkeydown=caml_call1(Xml[11],cst_onkeydown),
a_onkeyup=caml_call1(Xml[11],cst_onkeyup),
a_version=caml_call1(_aL_,cst_version$0);
function a_xmlns(x){return user_attrib(C[2],cst_xmlns$4,x)}
function a_manifest(_eH_){return uri_attrib(cst_manifest,_eH_)}
function a_cite(_eG_){return uri_attrib(cst_cite,_eG_)}
function a_xml_space(x){return user_attrib(C[2],cst_xml_space$0,x)}
function a_accesskey(c){return user_attrib(C[5],cst_accesskey,c)}
var
a_charset=caml_call1(_aL_,cst_charset),
a_accept_charset=caml_call1(_aM_,cst_accept_charset),
a_accept=caml_call1(_aN_,cst_accept);
function a_href(_eF_){return uri_attrib(cst_href$0,_eF_)}
var a_hreflang=caml_call1(_aL_,cst_hreflang);
function a_download(file){return user_attrib(C[16],cst_download,file)}
function a_rel(_eE_){return linktypes_attrib(cst_rel,_eE_)}
var
a_tabindex=caml_call1(_aK_,cst_tabindex),
a_mime_type=caml_call1(_aL_,cst_type$4),
a_alt=caml_call1(_aL_,cst_alt);
function a_height(p){return caml_call2(_aK_,cst_height$0,p)}
function a_src(_eD_){return uri_attrib(cst_src,_eD_)}
function a_width(p){return caml_call2(_aK_,cst_width$0,p)}
var
a_for=caml_call1(_aL_,cst_for),
a_for_list=caml_call1(_aM_,cst_for$0);
function a_selected(_eC_){return constant_attrib(cst_selected,_eC_)}
var
a_text_value=caml_call1(_aL_,cst_value),
a_int_value=caml_call1(_aK_,cst_value$0),
a_value=caml_call1(_aL_,cst_value$1),
a_float_value=caml_call1(_aJ_,cst_value$2);
function a_action(_eB_){return uri_attrib(cst_action,_eB_)}
function a_formmethod(x){return user_attrib(C[2],cst_method$0,x)}
var a_enctype=caml_call1(_aL_,cst_enctype);
function a_checked(_eA_){return constant_attrib(cst_checked,_eA_)}
function a_disabled(_ez_){return constant_attrib(cst_disabled,_ez_)}
function a_readonly(_ey_){return constant_attrib(cst_readonly,_ey_)}
var
a_maxlength=caml_call1(_aK_,cst_maxlength),
a_minlength=caml_call1(_aK_,cst_minlength),
a_name=caml_call1(_aL_,cst_name$0);
function a_allowfullscreen(_ex_)
{return constant_attrib(cst_allowfullscreen,_ex_)}
function a_allowpaymentrequest(_ew_)
{return constant_attrib(cst_allowpaymentrequest,_ew_)}
function a_referrerpolicy(x)
{return user_attrib(C[10],cst_referrerpolicy,x)}
function a_autocomplete(x){return user_attrib(C[4],cst_autocomplete,x)}
function a_async(_ev_){return constant_attrib(cst_async,_ev_)}
function a_autofocus(_eu_){return constant_attrib(cst_autofocus,_eu_)}
function a_autoplay(_et_){return constant_attrib(cst_autoplay,_et_)}
function a_muted(_es_){return constant_attrib(cst_muted,_es_)}
function a_crossorigin(x){return user_attrib(C[2],cst_crossorigin,x)}
var
a_integrity=caml_call1(_aL_,cst_integrity),
a_mediagroup=caml_call1(_aL_,cst_mediagroup),
a_challenge=caml_call1(_aL_,cst_challenge);
function a_contenteditable(ce)
{return bool_attrib(cst_contenteditable,ce)}
var a_contextmenu=caml_call1(_aL_,cst_contextmenu);
function a_controls(_er_){return constant_attrib(cst_controls,_er_)}
function a_dir(x){return user_attrib(C[2],cst_dir,x)}
function a_draggable(d){return bool_attrib(cst_draggable,d)}
var a_form=caml_call1(_aL_,cst_form);
function a_formaction(_eq_){return uri_attrib(cst_formaction,_eq_)}
var a_formenctype=caml_call1(_aL_,cst_formenctype);
function a_formnovalidate(_ep_)
{return constant_attrib(cst_formnovalidate,_ep_)}
var a_formtarget=caml_call1(_aL_,cst_formtarget);
function a_hidden(_eo_){return constant_attrib(cst_hidden,_eo_)}
var a_high=caml_call1(_aJ_,cst_high);
function a_icon(_en_){return uri_attrib(cst_icon,_en_)}
function a_ismap(_em_){return constant_attrib(cst_ismap,_em_)}
var
a_keytype=caml_call1(_aL_,cst_keytype),
a_list=caml_call1(_aL_,cst_list);
function a_loop(_el_){return constant_attrib(cst_loop,_el_)}
var
a_low=caml_call1(_aJ_,cst_low),
a_max=caml_call1(_aJ_,cst_max$0),
_aP_=C[7];
function a_input_max(_ek_){return user_attrib(_aP_,cst_max$1,_ek_)}
var a_min=caml_call1(_aJ_,cst_min$0),_aQ_=C[7];
function a_input_min(_ej_){return user_attrib(_aQ_,cst_min$1,_ej_)}
function a_inputmode(x){return user_attrib(C[2],cst_inputmode,x)}
function a_novalidate(_ei_){return constant_attrib(cst_novalidate,_ei_)}
function a_open(_eh_){return constant_attrib(cst_open,_eh_)}
var
a_optimum=caml_call1(_aJ_,cst_optimum),
a_pattern=caml_call1(_aL_,cst_pattern$0),
a_placeholder=caml_call1(_aL_,cst_placeholder);
function a_poster(_eg_){return uri_attrib(cst_poster,_eg_)}
function a_preload(x){return user_attrib(C[2],cst_preload,x)}
function a_pubdate(_ef_){return constant_attrib(cst_pubdate,_ef_)}
var a_radiogroup=caml_call1(_aL_,cst_radiogroup);
function a_required(_ee_){return constant_attrib(cst_required,_ee_)}
function a_reversed(_ed_){return constant_attrib(cst_reserved,_ed_)}
function a_sandbox(x){return user_attrib(C[12],cst_sandbox,x)}
function a_spellcheck(sc){return bool_attrib(cst_spellcheck,sc)}
function a_scoped(_ec_){return constant_attrib(cst_scoped,_ec_)}
function a_seamless(_eb_){return constant_attrib(cst_seamless,_eb_)}
function a_sizes(sizes){return user_attrib(C[13],cst_sizes,sizes)}
var
a_span=caml_call1(_aK_,cst_span),
a_srclang=caml_call1(_aL_,cst_xml_lang$1);
function a_srcset(_ea_){return srcset_attrib(cst_srcset,_ea_)}
var
a_img_sizes=caml_call1(_aN_,cst_sizes$0),
a_start=caml_call1(_aK_,cst_start$0);
function a_step(step){return user_attrib(C[15],cst_step,step)}
function a_translate(x){return user_attrib(C[2],cst_translate$0,x)}
function a_wrap(x){return user_attrib(C[2],cst_wrap$0,x)}
var a_size=caml_call1(_aK_,cst_size);
function a_input_type(it){return user_attrib(C[6],cst_type$5,it)}
function a_menu_type(x){return user_attrib(C[2],cst_type$6,x)}
function a_command_type(x){return user_attrib(C[2],cst_type$7,x)}
function a_button_type(bt){return user_attrib(C[6],cst_type$8,bt)}
function a_multiple(_d$_){return constant_attrib(cst_multiple,_d$_)}
var
a_cols=caml_call1(_aK_,cst_cols),
a_rows=caml_call1(_aK_,cst_rows),
a_summary=caml_call1(_aL_,cst_summary);
function a_align(x){return user_attrib(C[2],cst_align,x)}
var
a_axis=caml_call1(_aL_,cst_axis),
a_colspan=caml_call1(_aK_,cst_colspan),
a_headers=caml_call1(_aM_,cst_headers),
a_rowspan=caml_call1(_aK_,cst_rowspan);
function a_scope(x){return user_attrib(C[2],cst_scope,x)}
var a_border=caml_call1(_aK_,cst_border);
function a_rules(x){return user_attrib(C[2],cst_rules,x)}
function a_char(c){return user_attrib(C[5],cst_char,c)}
function a_data(_d__){return uri_attrib(cst_data$1,_d__)}
var a_codetype=caml_call1(_aL_,cst_codetype);
function a_frameborder(x){return user_attrib(C[2],cst_frameborder,x)}
var
a_marginheight=caml_call1(_aK_,cst_marginheight),
a_marginwidth=caml_call1(_aK_,cst_marginwidth);
function a_scrolling(x){return user_attrib(C[2],cst_scrolling,x)}
var
a_target=caml_call1(_aL_,cst_target),
a_content=caml_call1(_aL_,cst_content),
a_http_equiv=caml_call1(_aL_,cst_http_equiv);
function a_media(_d9_){return mediadesc_attrib(cst_media$0,_d9_)}
var a_role=caml_call1(_aM_,cst_role);
function a_aria(name)
{return caml_call1(_aM_,caml_call2(Stdlib[28],cst_aria,name))}
function terminal(tag,a,param){return caml_call2(Xml[20],a,tag)}
function unary(tag,a,elt)
{var _d8_=caml_call1(Xml[1][4],elt);
return caml_call3(Xml[21],a,tag,_d8_)}
function star(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)}
function plus(tag,a,elt,elts)
{var _d7_=caml_call2(Xml[1][5],elt,elts);
return caml_call3(Xml[21],a,tag,_d7_)}
function option_cons(opt,elts)
{if(opt){var x=opt[1];return caml_call2(Xml[1][5],x,elts)}return elts}
function body(_d5_,_d6_){return star(cst_body,_d5_,_d6_)}
function head(_d2_,_d3_,_d4_){return plus(cst_head,_d2_,_d3_,_d4_)}
function title(_d0_,_d1_){return unary(cst_title$1,_d0_,_d1_)}
function html(a,head,body)
{var
_dZ_=caml_call1(Xml[1][4],body),
content=caml_call2(Xml[1][5],head,_dZ_);
return caml_call3(Xml[21],a,cst_html$0,content)}
function footer(_dX_,_dY_){return star(cst_footer,_dX_,_dY_)}
function header(_dV_,_dW_){return star(cst_header,_dV_,_dW_)}
function section(_dT_,_dU_){return star(cst_section,_dT_,_dU_)}
function nav(_dR_,_dS_){return star(cst_nav,_dR_,_dS_)}
function pcdata(s){return caml_call1(Xml[17],s)}
var _aR_=Xml[19];
function space(param){return caml_call1(_aR_,cst_nbsp)}
var _aS_=Xml[22],_aT_=Xml[23],_aU_=Xml[24];
function h1(_dP_,_dQ_){return star(cst_h1,_dP_,_dQ_)}
function h2(_dN_,_dO_){return star(cst_h2,_dN_,_dO_)}
function h3(_dL_,_dM_){return star(cst_h3,_dL_,_dM_)}
function h4(_dJ_,_dK_){return star(cst_h4,_dJ_,_dK_)}
function h5(_dH_,_dI_){return star(cst_h5,_dH_,_dI_)}
function h6(_dF_,_dG_){return star(cst_h6,_dF_,_dG_)}
function hgroup(_dD_,_dE_){return star(cst_hgroup,_dD_,_dE_)}
function address(_dB_,_dC_){return star(cst_address,_dB_,_dC_)}
function blockquote(_dz_,_dA_){return star(cst_blockquote,_dz_,_dA_)}
function div(_dx_,_dy_){return star(cst_div,_dx_,_dy_)}
function p(_dv_,_dw_){return star(cst_p,_dv_,_dw_)}
function pre(_dt_,_du_){return star(cst_pre,_dt_,_du_)}
function abbr(_dr_,_ds_){return star(cst_abbr,_dr_,_ds_)}
function br(_dp_,_dq_){return terminal(cst_br,_dp_,_dq_)}
function cite(_dn_,_do_){return star(cst_cite$0,_dn_,_do_)}
function code(_dl_,_dm_){return star(cst_code,_dl_,_dm_)}
function dfn(_dj_,_dk_){return star(cst_dfn,_dj_,_dk_)}
function em(_dh_,_di_){return star(cst_em$0,_dh_,_di_)}
function kbd(_df_,_dg_){return star(cst_kbd,_df_,_dg_)}
function q(_dd_,_de_){return star(cst_q,_dd_,_de_)}
function samp(_db_,_dc_){return star(cst_samp,_db_,_dc_)}
function span(_c$_,_da_){return star(cst_span$0,_c$_,_da_)}
function strong(_c9_,_c__){return star(cst_strong,_c9_,_c__)}
function time(_c7_,_c8_){return star(cst_time,_c7_,_c8_)}
function var$0(_c5_,_c6_){return star(cst_var,_c5_,_c6_)}
function a(_c3_,_c4_){return star(cst_a$1,_c3_,_c4_)}
function dl(_c1_,_c2_){return star(cst_dl,_c1_,_c2_)}
function ol(_cZ_,_c0_){return star(cst_ol,_cZ_,_c0_)}
function ul(_cX_,_cY_){return star(cst_ul,_cX_,_cY_)}
function dd(_cV_,_cW_){return star(cst_dd,_cV_,_cW_)}
function dt(_cT_,_cU_){return star(cst_dt,_cT_,_cU_)}
function li(_cR_,_cS_){return star(cst_li,_cR_,_cS_)}
function hr(_cP_,_cQ_){return terminal(cst_hr,_cP_,_cQ_)}
function b(_cN_,_cO_){return star(cst_b$0,_cN_,_cO_)}
function i(_cL_,_cM_){return star(cst_i,_cL_,_cM_)}
function u(_cJ_,_cK_){return star(cst_u,_cJ_,_cK_)}
function small(_cH_,_cI_){return star(cst_small,_cH_,_cI_)}
function sub(_cF_,_cG_){return star(cst_sub,_cF_,_cG_)}
function sup(_cD_,_cE_){return star(cst_sup,_cD_,_cE_)}
function mark(_cB_,_cC_){return star(cst_mark,_cB_,_cC_)}
function rp(_cz_,_cA_){return star(cst_rp,_cz_,_cA_)}
function rt(_cx_,_cy_){return star(cst_rt,_cx_,_cy_)}
function ruby(_cv_,_cw_){return star(cst_ruby,_cv_,_cw_)}
function wbr(_ct_,_cu_){return terminal(cst_wbr,_ct_,_cu_)}
function bdo(dir,opt,elts)
{if(opt)var sth=opt[1],a=sth;else var a=0;
var _cs_=[0,[0,a_dir(dir),a]];
return caml_call3(Xml[21],_cs_,cst_bdo,elts)}
var a_datetime=caml_call1(_aL_,cst_datetime);
function a_shape(x){return user_attrib(C[2],cst_shape,x)}
function a_coords(coords){return user_attrib(C[11],cst_coords,coords)}
var a_usemap=caml_call1(_aL_,cst_usemap);
function a_defer(_cr_){return constant_attrib(cst_defer,_cr_)}
var a_label=caml_call1(_aL_,cst_label);
function area(alt,opt,param)
{if(opt)var sth=opt[1],a=sth;else var a=0;
var _cq_=[0,[0,caml_call1(a_alt,alt),a]];
return caml_call2(Xml[20],_cq_,cst_area)}
function map(_co_,_cp_){return star(cst_map,_co_,_cp_)}
function del(_cm_,_cn_){return star(cst_del,_cm_,_cn_)}
function ins(_ck_,_cl_){return star(cst_ins,_ck_,_cl_)}
function script(_ci_,_cj_){return unary(cst_script$0,_ci_,_cj_)}
function noscript(_cg_,_ch_){return star(cst_noscript,_cg_,_ch_)}
function template(_ce_,_cf_){return star(cst_template,_ce_,_cf_)}
function article(_cc_,_cd_){return star(cst_article,_cc_,_cd_)}
function aside(_ca_,_cb_){return star(cst_aside,_ca_,_cb_)}
function main(_b__,_b$_){return star(cst_main,_b__,_b$_)}
function video_audio(name,src,srcs,opt,elts)
{if(opt)var sth=opt[1],a=sth;else var a=0;
if(src)var uri=src[1],a$0=[0,a_src(uri),a];else var a$0=a;
if(srcs)
{var srcs$0=srcs[1],_b9_=caml_call2(Xml[1][6],srcs$0,elts);
return caml_call3(Xml[21],[0,a$0],name,_b9_)}
return caml_call3(Xml[21],[0,a$0],name,elts)}
function audio(_b5_,_b6_,_b7_,_b8_)
{return video_audio(cst_audio,_b5_,_b6_,_b7_,_b8_)}
function video(_b1_,_b2_,_b3_,_b4_)
{return video_audio(cst_video,_b1_,_b2_,_b3_,_b4_)}
function canvas(_bZ_,_b0_){return star(cst_canvas,_bZ_,_b0_)}
function command(label,opt,param)
{if(opt)var sth=opt[1],a=sth;else var a=0;
var _bY_=[0,[0,caml_call1(a_label,label),a]];
return caml_call2(Xml[20],_bY_,cst_command)}
function menu(children,a,param)
{if(children)
var match=children[1],l=match[2],children$0=l;
else
var children$0=caml_call1(Xml[1][3],0);
return caml_call3(Xml[21],a,cst_menu,children$0)}
function embed(_bW_,_bX_){return terminal(cst_embed,_bW_,_bX_)}
function source(_bU_,_bV_){return terminal(cst_source,_bU_,_bV_)}
function meter(_bS_,_bT_){return star(cst_meter,_bS_,_bT_)}
function output_elt(_bQ_,_bR_){return star(cst_output,_bQ_,_bR_)}
function form(_bO_,_bP_){return star(cst_form$0,_bO_,_bP_)}
function svg(opt,children)
{if(opt)var sth=opt[1],a=sth;else var a=0;
var _bN_=caml_call2(Svg[242],[0,a],children);
return caml_call1(Svg[324],_bN_)}
function input(_bL_,_bM_){return terminal(cst_input,_bL_,_bM_)}
function keygen(_bJ_,_bK_){return terminal(cst_keygen,_bJ_,_bK_)}
function label(_bH_,_bI_){return star(cst_label$0,_bH_,_bI_)}
function option(_bF_,_bG_){return unary(cst_option,_bF_,_bG_)}
function select(_bD_,_bE_){return star(cst_select,_bD_,_bE_)}
function textarea(_bB_,_bC_){return unary(cst_textarea,_bB_,_bC_)}
function button(_bz_,_bA_){return star(cst_button,_bz_,_bA_)}
function datalist(children,a,param)
{if(children)
var match=children[1],x=match[2],children$0=x;
else
var children$0=caml_call1(Xml[1][3],0);
return caml_call3(Xml[21],a,cst_datalist,children$0)}
function progress(_bx_,_by_){return star(cst_progress,_bx_,_by_)}
function legend(_bv_,_bw_){return star(cst_legend,_bv_,_bw_)}
function details(summary,a,children)
{return plus(cst_details,a,summary,children)}
function summary(_bt_,_bu_){return star(cst_summary$0,_bt_,_bu_)}
function fieldset(legend,a,elts)
{var _bs_=option_cons(legend,elts);
return caml_call3(Xml[21],a,cst_fieldset,_bs_)}
function optgroup(label,opt,elts)
{if(opt)var sth=opt[1],a=sth;else var a=0;
var _br_=[0,[0,caml_call1(a_label,label),a]];
return caml_call3(Xml[21],_br_,cst_optgroup,elts)}
function figcaption(_bp_,_bq_){return star(cst_figcaption,_bp_,_bq_)}
function figure(figcaption,a,elts)
{if(figcaption)
{var _bm_=figcaption[1];
if(437082891 <= _bm_[1])
var
c=_bm_[2],
_bn_=caml_call1(Xml[1][4],c),
_bo_=caml_call2(Xml[1][6],elts,_bn_);
else
var c$0=_bm_[2],_bo_=caml_call2(Xml[1][5],c$0,elts);
var content=_bo_}
else
var content=elts;
return caml_call3(Xml[21],a,cst_figure,content)}
function caption(_bk_,_bl_){return star(cst_caption,_bk_,_bl_)}
function table(caption,columns,thead,tfoot,a,elts)
{var content=option_cons(thead,option_cons(tfoot,elts));
if(columns)
var
columns$0=columns[1],
content$0=caml_call2(Xml[1][6],columns$0,content);
else
var content$0=content;
var content$1=option_cons(caption,content$0);
return caml_call3(Xml[21],a,cst_table$0,content$1)}
function td(_bi_,_bj_){return star(cst_td,_bi_,_bj_)}
function th(_bg_,_bh_){return star(cst_th,_bg_,_bh_)}
function tr(_be_,_bf_){return star(cst_tr,_be_,_bf_)}
function colgroup(_bc_,_bd_){return star(cst_colgroup,_bc_,_bd_)}
function col(_ba_,_bb_){return terminal(cst_col,_ba_,_bb_)}
function thead(_a__,_a$_){return star(cst_thead,_a__,_a$_)}
function tbody(_a8_,_a9_){return star(cst_tbody,_a8_,_a9_)}
function tfoot(_a6_,_a7_){return star(cst_tfoot,_a6_,_a7_)}
function iframe(_a4_,_a5_){return star(cst_iframe,_a4_,_a5_)}
function object(params,opt,elts)
{if(opt)var sth=opt[1],a=sth;else var a=0;
if(params)
var e=params[1],elts$0=caml_call2(Xml[1][6],e,elts);
else
var elts$0=elts;
return caml_call3(Xml[21],[0,a],cst_object,elts$0)}
function param(_a2_,_a3_){return terminal(cst_param,_a2_,_a3_)}
function img(src,alt,opt,param)
{if(opt)var sth=opt[1],a=sth;else var a=0;
var _a1_=[0,caml_call1(a_alt,alt),a],a$0=[0,a_src(src),_a1_];
return caml_call2(Xml[20],[0,a$0],cst_img)}
function picture(img,a,elts)
{var content=caml_call2(Xml[1][5],img,elts);
return caml_call3(Xml[21],a,cst_picture,content)}
function meta(_aZ_,_a0_){return terminal(cst_meta,_aZ_,_a0_)}
function style(opt,elts)
{if(opt)var sth=opt[1],a=sth;else var a=0;
return caml_call3(Xml[21],[0,a],cst_style$2,elts)}
function link(rel,href,opt,param)
{if(opt)var sth=opt[1],a=sth;else var a=0;
var _aX_=[0,a_href(href),a],_aY_=[0,[0,a_rel(rel),_aX_]];
return caml_call2(Xml[20],_aY_,cst_link)}
function base(_aV_,_aW_){return terminal(cst_base,_aV_,_aW_)}
function tot(x){return x}
function totl(x){return x}
function toelt(x){return x}
function toeltl(x){return x}
function doc_toelt(x){return x}
var I=_a_(Xml);
function of_seq(s){return caml_call1(I[1],s)}
function data(s){return caml_call1(Xml[18],s)}
function leaf(tag,a,param){return caml_call2(Xml[20],a,tag)}
function node(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)}
function coerce_elt(x){return x}
var float_attrib=Xml[4],int_attrib=Xml[5],string_attrib=Xml[6];
function uri_attrib$0(a,s){return caml_call2(Xml[13],a,s)}
var
space_sep_attrib=Xml[7],
comma_sep_attrib=Xml[8],
Unsafe=
[0,
data,
leaf,
node,
coerce_elt,
float_attrib,
int_attrib,
string_attrib,
uri_attrib$0,
space_sep_attrib,
comma_sep_attrib];
return [0,
Xml,
Info,
_aH_,
_aI_,
to_xmlattribs,
to_attrib,
_aJ_,
_aK_,
_aL_,
uri_attrib,
_aM_,
_aN_,
user_attrib,
bool_attrib,
constant_attrib,
linktypes_attrib,
mediadesc_attrib,
srcset_attrib,
a_class,
a_id,
a_user_data,
a_title,
a_xml_lang,
a_lang,
a_style,
a_property,
a_onabort,
a_onafterprint,
a_onbeforeprint,
a_onbeforeunload,
a_onblur,
a_oncanplay,
a_oncanplaythrough,
a_onchange,
a_ondurationchange,
a_onemptied,
a_onended,
a_onerror,
a_onfocus,
a_onformchange,
a_onforminput,
a_onhashchange,
a_oninput,
a_oninvalid,
a_onoffline,
a_ononline,
a_onpause,
a_onplay,
a_onplaying,
a_onpagehide,
a_onpageshow,
a_onpopstate,
a_onprogress,
a_onratechange,
a_onreadystatechange,
a_onredo,
a_onresize,
a_onscroll,
a_onseeked,
a_onseeking,
a_onselect,
a_onshow,
a_onstalled,
a_onstorage,
a_onsubmit,
a_onsuspend,
a_ontimeupdate,
a_onundo,
a_onunload,
a_onvolumechange,
a_onwaiting,
a_onload,
a_onloadeddata,
a_onloadedmetadata,
a_onloadstart,
a_onmessage,
a_onmousewheel,
a_onclick,
a_oncontextmenu,
a_ondblclick,
a_ondrag,
a_ondragend,
a_ondragenter,
a_ondragleave,
a_ondragover,
a_ondragstart,
a_ondrop,
a_onmousedown,
a_onmouseup,
a_onmouseover,
a_onmousemove,
a_onmouseout,
a_ontouchstart,
a_ontouchend,
a_ontouchmove,
a_ontouchcancel,
a_onkeypress,
a_onkeydown,
a_onkeyup,
a_version,
a_xmlns,
a_manifest,
a_cite,
a_xml_space,
a_accesskey,
a_charset,
a_accept_charset,
a_accept,
a_href,
a_hreflang,
a_download,
a_rel,
a_tabindex,
a_mime_type,
a_alt,
a_height,
a_src,
a_width,
a_for,
a_for,
a_for_list,
a_for_list,
a_selected,
a_text_value,
a_int_value,
a_value,
a_float_value,
a_action,
a_formmethod,
a_formmethod,
a_enctype,
a_checked,
a_disabled,
a_readonly,
a_maxlength,
a_minlength,
a_name,
a_allowfullscreen,
a_allowpaymentrequest,
a_referrerpolicy,
a_autocomplete,
a_async,
a_autofocus,
a_autoplay,
a_muted,
a_crossorigin,
a_integrity,
a_mediagroup,
a_challenge,
a_contenteditable,
a_contextmenu,
a_controls,
a_dir,
a_draggable,
a_form,
a_formaction,
a_formenctype,
a_formnovalidate,
a_formtarget,
a_hidden,
a_high,
a_icon,
a_ismap,
a_keytype,
a_list,
a_loop,
a_low,
a_max,
a_input_max,
a_min,
a_input_min,
a_inputmode,
a_novalidate,
a_open,
a_optimum,
a_pattern,
a_placeholder,
a_poster,
a_preload,
a_pubdate,
a_radiogroup,
a_required,
a_reversed,
a_sandbox,
a_spellcheck,
a_scoped,
a_seamless,
a_sizes,
a_span,
a_srclang,
a_srcset,
a_img_sizes,
a_start,
a_step,
a_translate,
a_wrap,
a_size,
a_input_type,
a_menu_type,
a_command_type,
a_button_type,
a_multiple,
a_cols,
a_rows,
a_summary,
a_align,
a_axis,
a_colspan,
a_headers,
a_rowspan,
a_scope,
a_border,
a_rules,
a_char,
a_data,
a_codetype,
a_frameborder,
a_marginheight,
a_marginwidth,
a_scrolling,
a_target,
a_content,
a_http_equiv,
a_media,
a_role,
a_aria,
terminal,
unary,
star,
plus,
option_cons,
body,
head,
title,
html,
footer,
header,
section,
nav,
pcdata,
pcdata,
_aR_,
space,
_aS_,
_aT_,
_aU_,
h1,
h2,
h3,
h4,
h5,
h6,
hgroup,
address,
blockquote,
div,
p,
pre,
abbr,
br,
cite,
code,
dfn,
em,
kbd,
q,
samp,
span,
strong,
time,
var$0,
a,
dl,
ol,
ul,
dd,
dt,
li,
hr,
b,
i,
u,
small,
sub,
sup,
mark,
rp,
rt,
ruby,
wbr,
bdo,
a_datetime,
a_shape,
a_coords,
a_usemap,
a_defer,
a_label,
area,
map,
del,
ins,
script,
noscript,
template,
article,
aside,
main,
video_audio,
audio,
video,
canvas,
command,
menu,
embed,
source,
meter,
output_elt,
form,
svg,
input,
keygen,
label,
option,
select,
textarea,
button,
datalist,
progress,
legend,
details,
summary,
fieldset,
optgroup,
figcaption,
figure,
caption,
table,
table,
td,
th,
tr,
colgroup,
col,
thead,
tbody,
tfoot,
iframe,
object,
param,
img,
picture,
meta,
style,
link,
base,
tot,
totl,
toelt,
toeltl,
doc_toelt,
I,
of_seq,
Unsafe]}
function Wrapped_functions$0(Xml)
{function string_of_sandbox_token(param)
{return -177579325 <= param
?642066717 <= param
?961985737 <= param?cst_allow_same_origin:cst_allow_popups
:-141440231 <= param?cst_allow_forms:cst_allow_pointer_lock
:-237921695 <= param?cst_allow_script:cst_allow_top_navigation}
function string_of_linktype(param)
{if(typeof param === "number")
return 381789656 <= param
?814486425 <= param
?870035731 <= param
?1021867988 <= param
?1026883179 <= param?cst_external:cst_canonical
:892857107 <= param?cst_prev:cst_next
:847656566 <= param?cst_last:cst_icon$0
:395967329 <= param
?693914176 <= param
?803495649 <= param?cst_help:cst_noreferrer
:672161451 <= param?cst_author:cst_license
:395056008 <= param?cst_search:cst_noopener
:-289155950 <= param
?19067 <= param
?212027606 <= param
?332064784 <= param?cst_first:cst_bookmark
:4198970 <= param?cst_tag:cst_up
:-123098695 <= param?cst_pingback:cst_nofollow
:-837966724 <= param
?-687429350 <= param
?-543567890 <= param?cst_stylesheet:cst_alternate
:-784200974 <= param?cst_index:cst_sidebar
:-954191215 <= param?cst_archives:cst_prefetch;
var s=param[2];
return s}
function string_of_mediadesc_token(param)
{if(typeof param === "number")
return 3256577 <= param
?67844052 <= param
?985170249 <= param
?993823919 <= param?cst_projection:cst_aural
:741408196 <= param?cst_handheld:cst_embossed
:4203225 <= param?cst_tty:cst_all
:-321929715 === param
?cst_braille
:-68046964 <= param
?18850 <= param?cst_tv:cst_screen$0
:-275811774 <= param?cst_speech:cst_print;
var s=param[2];
return s}
function string_of_referrerpolicy(param)
{return 128179133 <= param
?516162486 === param
?cst_unsafe_url
:880519217 <= param
?1065162943 <= param
?cst_same_origin
:cst_origin_when_cross_origin
:808133042 <= param
?cst_no_referrer_when_downgrade
:cst_no_referrer
:-6975994 <= param
?50834029 <= param?cst$39:cst_origin
:-512964804 <= param
?cst_strict_origin
:cst_strict_origin_when_cross_o}
function string_of_big_variant(param)
{if(typeof param === "number")
return 4448519 <= param
?748545107 <= param
?892709484 <= param
?936387931 <= param
?984475830 <= param
?1003109192 <= param
?1026883179 <= param?cst_external$0:cst_0
:995986491 <= param?cst_formnovalidate$0:cst_audio$0
:936573133 === param
?cst_text$0
:963342108 <= param?cst_async$0:cst_toolbar
:892857107 <= param
?914891065 <= param
?925976842 <= param?cst_soft:cst_rows$0
:914389316 <= param?cst_rect$0:cst_prev$0
:892711040 <= param?cst_POST:cst_poly
:847852583 <= param
?870035731 <= param
?874830961 <= param
?881668074 <= param?cst_open$0:cst_decimal
:870530776 <= param?cst_none$2:cst_next$0
:848351876 <= param?cst_loop$0:cst_left
:803495649 <= param
?836565865 <= param
?847656566 <= param?cst_last$0:cst_kana
:814486425 <= param?cst_icon$1:cst_help$0
:803298059 <= param?cst_hard:cst_cols$0
:306241015 <= param
?475573507 <= param
?672161451 <= param
?726666127 <= param
?748194550 <= param?cst_char$0:cst_auto$3
:693914176 <= param?cst_noreferrer$0:cst_author$0
:596180811 <= param?cst_muted$0:cst_autoplay$0
:395056008 <= param
?432776079 <= param
?434500685 <= param?cst_anonymous:cst_metadata$0
:395967329 <= param?cst_license$0:cst_search$0
:332064784 <= param?cst_first$0:cst_novalidate$0
:140750597 <= param
?186574459 <= param
?212027606 <= param
?292438678 <= param?cst_controls$0:cst_bookmark$0
:202657151 <= param?cst_required$0:cst_selected$0
:178382384 <= param?cst_circle$0:cst_rowgroup
:48900580 <= param
?95509868 <= param
?111644259 <= param?cst_checkbox:cst_katakana
:50085628 <= param?cst_email:cst_latin
:19559306 <= param?cst_hidden$0:cst_yes
:-363872942 <= param
?19067 <= param
?3953222 <= param
?4103754 <= param
?4199867 <= param
?4252495 <= param?cst_url:cst_tel
:4198970 <= param?cst_tag$0:cst_rtl
:4102650 <= param?cst_row:cst_1
:3257036 <= param
?3553398 <= param
?3805386 <= param?cst_ltr:cst_GET
:3356704 <= param?cst_col$0:cst_any
:3256577 <= param?cst_all$0:cst_up$0
:-146439973 <= param
?-116258131 <= param
?-57574468 <= param
?17505 <= param?cst_no:cst_right
:-100768656 <= param?cst_scoped$0:cst_numeric
:-123098695 <= param?cst_pingback$0:cst_radio
:-247853591 <= param
?-197222864 <= param
?-165772469 <= param?cst_pubdate$0:cst_multiple$0
:-200275514 <= param?cst_latin_name:cst_autofocus$0
:-289155950 <= param?cst_nofollow$0:cst_defer$0
:-773209244 <= param
?-543567890 <= param
?-514572330 <= param
?-384499551 <= param
?-369291781 <= param?cst_full_width_latin:cst_default$0
:-423051825 <= param?cst_context:cst_verbatim
:-529147129 <= param?cst_checked$0:cst_stylesheet$0
:-709493348 <= param
?-687429350 <= param
?-613973726 <= param?cst_reserved$0:cst_alternate$0
:-707104822 <= param
?cst_http_www_w3_org_1999_xhtml
:cst_disabled$0
:-728306478 <= param?cst_ismap$0:cst_use_credentials
:-872161756 <= param
?-826369749 <= param
?-788068560 <= param
?-784200974 <= param?cst_index$0:cst_justify
:-792946572 <= param?cst_groups:cst_command$0
:-837966724 <= param?cst_sidebar$0:cst_latin_prose
:-967956361 <= param
?-931002593 <= param
?-883155966 <= param?cst_readonly$0:cst_colgroup$0
:-954191215 <= param?cst_archives$0:cst_seamless$0
:-1000861353 <= param?cst_prefetch$0:cst_preserve$0;
var s=param[2];
return s}
function string_of_input_type(param)
{return 50085628 <= param
?612668487 <= param
?781515420 <= param
?936769581 <= param
?969837588 <= param?cst_week:cst_time$0
:936573133 <= param?cst_text$1:cst_file
:758940238 <= param?cst_date:cst_datetime_local
:242538002 <= param
?529348384 <= param
?578936635 <= param?cst_password:cst_month
:395056008 <= param?cst_search$1:cst_button$0
:111644259 <= param?cst_checkbox$0:cst_email$0
:-146439973 <= param
?-101336657 <= param
?4252495 <= param
?19559306 <= param?cst_hidden$1:cst_url$0
:4199867 <= param?cst_tel$0:cst_reset
:-145943139 <= param?cst_range:cst_radio$0
:-795439301 <= param
?-578166461 <= param
?-528289822 <= param?cst_readonly$1:cst_color
:-703661335 <= param?cst_number:cst_image$0
:-828715976 <= param?cst_submit:cst_datetime$0}
function string_of_number_or_datetime(param)
{if(-703661335 <= param[1])
{var n=param[2];return caml_call1(Stdlib[33],n)}
var t=param[2];
return t}
var
string_of_character=caml_call1(Stdlib_String[1],1),
string_of_number$0=Stdlib[33],
string_of_bool=Stdlib[30];
function onoff_of_bool(param){return param?cst_on:cst_off}
function unoption_string(param)
{if(param){var x=param[1];return x}return cst$40}
function string_of_step(param)
{if(param){var x=param[1];return string_of_number(x)}return cst_any$0}
function string_of_sizes(param)
{if(param)
{var
l=param[1],
_aF_=
function(param)
{var y=param[2],x=param[1];
return caml_call3(Stdlib_Printf[4],_ae_,x,y)},
_aG_=caml_call2(Stdlib_List[19],_aF_,l);
return caml_call2(Stdlib_String[6],cst$41,_aG_)}
return cst_any$1}
function string_of_sandbox(l)
{var _aE_=caml_call2(Stdlib_List[19],string_of_sandbox_token,l);
return caml_call2(Stdlib_String[6],cst$42,_aE_)}
function string_of_numbers(l)
{var _aD_=caml_call2(Stdlib_List[19],string_of_number$0,l);
return caml_call2(Stdlib_String[6],cst$43,_aD_)}
function string_of_mediadesc(l)
{var _aC_=caml_call2(Stdlib_List[19],string_of_mediadesc_token,l);
return caml_call2(Stdlib_String[6],cst$44,_aC_)}
function string_of_linktypes(l)
{var _aB_=caml_call2(Stdlib_List[19],string_of_linktype,l);
return caml_call2(Stdlib_String[6],cst$45,_aB_)}
function string_of_srcset(l)
{function f(param)
{var _aw_=param[1];
if(-738802218 === _aw_)
{var
match=param[2],
v=match[2],
url=match[1],
_ax_=caml_call1(string_of_number$0,v),
_ay_=caml_call1(Xml[2],url);
return caml_call3(Stdlib_Printf[4],_af_,_ay_,_ax_)}
if(4252495 <= _aw_)
{var url$0=param[2];return caml_call1(Xml[2],url$0)}
var
match$0=param[2],
v$0=match$0[2],
url$1=match$0[1],
_az_=string_of_number(v$0),
_aA_=caml_call1(Xml[2],url$1);
return caml_call3(Stdlib_Printf[4],_ag_,_aA_,_az_)}
var _av_=caml_call2(Stdlib_List[19],f,l);
return caml_call2(Stdlib_String[6],cst$46,_av_)}
return [0,
Xml,
string_of_sandbox_token,
string_of_linktype,
string_of_mediadesc_token,
string_of_referrerpolicy,
string_of_big_variant,
string_of_input_type,
string_of_number_or_datetime,
string_of_character,
string_of_number$0,
string_of_bool,
onoff_of_bool,
unoption_string,
string_of_step,
string_of_sizes,
string_of_sandbox,
string_of_numbers,
string_of_mediadesc,
string_of_linktypes,
string_of_srcset]}
function _ah_(_as_,_ar_,_aq_)
{var _at_=Make_with_wrapped_functions$0(_as_,_ar_,_aq_),_au_=_at_[363];
return [0,
_at_[1],
_at_[2],
_at_[3],
_at_[4],
_at_[19],
_at_[21],
_at_[20],
_at_[22],
_at_[23],
_at_[24],
_at_[27],
_at_[28],
_at_[29],
_at_[30],
_at_[31],
_at_[32],
_at_[33],
_at_[34],
_at_[35],
_at_[36],
_at_[37],
_at_[38],
_at_[39],
_at_[40],
_at_[41],
_at_[42],
_at_[43],
_at_[44],
_at_[77],
_at_[45],
_at_[46],
_at_[47],
_at_[48],
_at_[49],
_at_[50],
_at_[51],
_at_[52],
_at_[53],
_at_[54],
_at_[55],
_at_[56],
_at_[57],
_at_[58],
_at_[59],
_at_[60],
_at_[61],
_at_[62],
_at_[63],
_at_[64],
_at_[65],
_at_[66],
_at_[67],
_at_[68],
_at_[69],
_at_[70],
_at_[71],
_at_[72],
_at_[73],
_at_[74],
_at_[75],
_at_[76],
_at_[78],
_at_[79],
_at_[80],
_at_[81],
_at_[82],
_at_[83],
_at_[84],
_at_[85],
_at_[86],
_at_[87],
_at_[88],
_at_[89],
_at_[90],
_at_[91],
_at_[92],
_at_[93],
_at_[94],
_at_[95],
_at_[96],
_at_[97],
_at_[98],
_at_[99],
_at_[138],
_at_[139],
_at_[141],
_at_[142],
_at_[143],
_at_[144],
_at_[145],
_at_[146],
_at_[147],
_at_[148],
_at_[149],
_at_[150],
_at_[151],
_at_[152],
_at_[153],
_at_[154],
_at_[155],
_at_[156],
_at_[157],
_at_[158],
_at_[159],
_at_[160],
_at_[161],
_at_[162],
_at_[163],
_at_[164],
_at_[165],
_at_[166],
_at_[167],
_at_[168],
_at_[169],
_at_[170],
_at_[171],
_at_[172],
_at_[173],
_at_[174],
_at_[175],
_at_[176],
_at_[177],
_at_[178],
_at_[179],
_at_[180],
_at_[181],
_at_[140],
_at_[182],
_at_[183],
_at_[184],
_at_[185],
_at_[186],
_at_[187],
_at_[188],
_at_[189],
_at_[190],
_at_[191],
_at_[192],
_at_[193],
_at_[194],
_at_[195],
_at_[196],
_at_[100],
_at_[101],
_at_[102],
_at_[103],
_at_[104],
_at_[105],
_at_[106],
_at_[107],
_at_[108],
_at_[109],
_at_[110],
_at_[111],
_at_[112],
_at_[113],
_at_[114],
_at_[292],
_at_[128],
_at_[132],
_at_[203],
_at_[131],
_at_[119],
_at_[120],
_at_[121],
_at_[122],
_at_[135],
_at_[136],
_at_[129],
_at_[130],
_at_[202],
_at_[137],
_at_[204],
_at_[123],
_at_[197],
_at_[117],
_at_[198],
_at_[124],
_at_[125],
_at_[126],
_at_[127],
_at_[133],
_at_[134],
_at_[201],
_at_[200],
_at_[199],
_at_[297],
_at_[206],
_at_[207],
_at_[208],
_at_[209],
_at_[210],
_at_[211],
_at_[205],
_at_[212],
_at_[213],
_at_[214],
_at_[115],
_at_[116],
_at_[118],
_at_[293],
_at_[294],
_at_[295],
_at_[215],
_at_[216],
_at_[217],
_at_[218],
_at_[219],
_at_[220],
_at_[221],
_at_[222],
_at_[223],
_at_[296],
_at_[224],
_at_[25],
_at_[26],
_at_[225],
_at_[226],
_at_[240],
_at_[235],
_at_[233],
_at_[355],
_at_[234],
_at_[232],
_at_[319],
_at_[236],
_at_[237],
_at_[238],
_at_[239],
_at_[247],
_at_[248],
_at_[249],
_at_[250],
_at_[251],
_at_[252],
_at_[253],
_at_[254],
_at_[305],
_at_[306],
_at_[307],
_at_[257],
_at_[258],
_at_[255],
_at_[256],
_at_[273],
_at_[274],
_at_[275],
_at_[276],
_at_[277],
_at_[278],
_at_[334],
_at_[335],
_at_[279],
_at_[280],
_at_[281],
_at_[282],
_at_[283],
_at_[284],
_at_[285],
_at_[286],
_at_[290],
_at_[291],
_at_[259],
_at_[260],
_at_[261],
_at_[262],
_at_[263],
_at_[264],
_at_[265],
_at_[266],
_at_[267],
_at_[268],
_at_[269],
_at_[270],
_at_[271],
_at_[272],
_at_[300],
_at_[301],
_at_[350],
_at_[351],
_at_[347],
_at_[348],
_at_[349],
_at_[314],
_at_[309],
_at_[310],
_at_[311],
_at_[315],
_at_[298],
_at_[299],
_at_[336],
_at_[338],
_at_[337],
_at_[342],
_at_[343],
_at_[344],
_at_[345],
_at_[346],
_at_[339],
_at_[340],
_at_[341],
_at_[318],
_at_[332],
_at_[329],
_at_[322],
_at_[320],
_at_[326],
_at_[324],
_at_[327],
_at_[333],
_at_[323],
_at_[325],
_at_[321],
_at_[328],
_at_[316],
_at_[317],
_at_[242],
_at_[243],
_at_[244],
_at_[245],
_at_[246],
_at_[330],
_at_[331],
_at_[312],
_at_[313],
_at_[302],
_at_[303],
_at_[304],
_at_[352],
_at_[353],
_at_[354],
_at_[288],
_at_[287],
_at_[289],
_at_[241],
_at_[362],
_at_[356],
_at_[357],
_at_[358],
_at_[359],
_at_[360],
_at_[5],
_at_[6],
[0,
_au_[1],
_au_[3],
_au_[2],
_au_[4],
_au_[7],
_au_[5],
_au_[6],
_au_[8],
_au_[9],
_au_[10]]]}
function _ai_(_ao_)
{var _ap_=Wrapped_functions$0(_ao_);
return [0,
_ap_[1],
_ap_[6],
_ap_[11],
_ap_[12],
_ap_[9],
_ap_[7],
_ap_[8],
_ap_[19],
_ap_[18],
_ap_[5],
_ap_[17],
_ap_[16],
_ap_[15],
_ap_[20],
_ap_[14],
_ap_[13]]}
var
Html_f=
[0,
function(_al_,_ak_)
{var
_aj_=Wrapped_functions$0(_al_),
_an_=
Make_with_wrapped_functions$0
(_al_,
[0,
_aj_[1],
_aj_[6],
_aj_[11],
_aj_[12],
_aj_[9],
_aj_[7],
_aj_[8],
_aj_[19],
_aj_[18],
_aj_[5],
_aj_[17],
_aj_[16],
_aj_[15],
_aj_[20],
_aj_[14],
_aj_[13]],
_ak_),
_am_=_an_[363];
return [0,
_an_[1],
_an_[2],
_an_[3],
_an_[4],
_an_[19],
_an_[21],
_an_[20],
_an_[22],
_an_[23],
_an_[24],
_an_[27],
_an_[28],
_an_[29],
_an_[30],
_an_[31],
_an_[32],
_an_[33],
_an_[34],
_an_[35],
_an_[36],
_an_[37],
_an_[38],
_an_[39],
_an_[40],
_an_[41],
_an_[42],
_an_[43],
_an_[44],
_an_[77],
_an_[45],
_an_[46],
_an_[47],
_an_[48],
_an_[49],
_an_[50],
_an_[51],
_an_[52],
_an_[53],
_an_[54],
_an_[55],
_an_[56],
_an_[57],
_an_[58],
_an_[59],
_an_[60],
_an_[61],
_an_[62],
_an_[63],
_an_[64],
_an_[65],
_an_[66],
_an_[67],
_an_[68],
_an_[69],
_an_[70],
_an_[71],
_an_[72],
_an_[73],
_an_[74],
_an_[75],
_an_[76],
_an_[78],
_an_[79],
_an_[80],
_an_[81],
_an_[82],
_an_[83],
_an_[84],
_an_[85],
_an_[86],
_an_[87],
_an_[88],
_an_[89],
_an_[90],
_an_[91],
_an_[92],
_an_[93],
_an_[94],
_an_[95],
_an_[96],
_an_[97],
_an_[98],
_an_[99],
_an_[138],
_an_[139],
_an_[141],
_an_[142],
_an_[143],
_an_[144],
_an_[145],
_an_[146],
_an_[147],
_an_[148],
_an_[149],
_an_[150],
_an_[151],
_an_[152],
_an_[153],
_an_[154],
_an_[155],
_an_[156],
_an_[157],
_an_[158],
_an_[159],
_an_[160],
_an_[161],
_an_[162],
_an_[163],
_an_[164],
_an_[165],
_an_[166],
_an_[167],
_an_[168],
_an_[169],
_an_[170],
_an_[171],
_an_[172],
_an_[173],
_an_[174],
_an_[175],
_an_[176],
_an_[177],
_an_[178],
_an_[179],
_an_[180],
_an_[181],
_an_[140],
_an_[182],
_an_[183],
_an_[184],
_an_[185],
_an_[186],
_an_[187],
_an_[188],
_an_[189],
_an_[190],
_an_[191],
_an_[192],
_an_[193],
_an_[194],
_an_[195],
_an_[196],
_an_[100],
_an_[101],
_an_[102],
_an_[103],
_an_[104],
_an_[105],
_an_[106],
_an_[107],
_an_[108],
_an_[109],
_an_[110],
_an_[111],
_an_[112],
_an_[113],
_an_[114],
_an_[292],
_an_[128],
_an_[132],
_an_[203],
_an_[131],
_an_[119],
_an_[120],
_an_[121],
_an_[122],
_an_[135],
_an_[136],
_an_[129],
_an_[130],
_an_[202],
_an_[137],
_an_[204],
_an_[123],
_an_[197],
_an_[117],
_an_[198],
_an_[124],
_an_[125],
_an_[126],
_an_[127],
_an_[133],
_an_[134],
_an_[201],
_an_[200],
_an_[199],
_an_[297],
_an_[206],
_an_[207],
_an_[208],
_an_[209],
_an_[210],
_an_[211],
_an_[205],
_an_[212],
_an_[213],
_an_[214],
_an_[115],
_an_[116],
_an_[118],
_an_[293],
_an_[294],
_an_[295],
_an_[215],
_an_[216],
_an_[217],
_an_[218],
_an_[219],
_an_[220],
_an_[221],
_an_[222],
_an_[223],
_an_[296],
_an_[224],
_an_[25],
_an_[26],
_an_[225],
_an_[226],
_an_[240],
_an_[235],
_an_[233],
_an_[355],
_an_[234],
_an_[232],
_an_[319],
_an_[236],
_an_[237],
_an_[238],
_an_[239],
_an_[247],
_an_[248],
_an_[249],
_an_[250],
_an_[251],
_an_[252],
_an_[253],
_an_[254],
_an_[305],
_an_[306],
_an_[307],
_an_[257],
_an_[258],
_an_[255],
_an_[256],
_an_[273],
_an_[274],
_an_[275],
_an_[276],
_an_[277],
_an_[278],
_an_[334],
_an_[335],
_an_[279],
_an_[280],
_an_[281],
_an_[282],
_an_[283],
_an_[284],
_an_[285],
_an_[286],
_an_[290],
_an_[291],
_an_[259],
_an_[260],
_an_[261],
_an_[262],
_an_[263],
_an_[264],
_an_[265],
_an_[266],
_an_[267],
_an_[268],
_an_[269],
_an_[270],
_an_[271],
_an_[272],
_an_[300],
_an_[301],
_an_[350],
_an_[351],
_an_[347],
_an_[348],
_an_[349],
_an_[314],
_an_[309],
_an_[310],
_an_[311],
_an_[315],
_an_[298],
_an_[299],
_an_[336],
_an_[338],
_an_[337],
_an_[342],
_an_[343],
_an_[344],
_an_[345],
_an_[346],
_an_[339],
_an_[340],
_an_[341],
_an_[318],
_an_[332],
_an_[329],
_an_[322],
_an_[320],
_an_[326],
_an_[324],
_an_[327],
_an_[333],
_an_[323],
_an_[325],
_an_[321],
_an_[328],
_an_[316],
_an_[317],
_an_[242],
_an_[243],
_an_[244],
_an_[245],
_an_[246],
_an_[330],
_an_[331],
_an_[312],
_an_[313],
_an_[302],
_an_[303],
_an_[304],
_an_[352],
_an_[353],
_an_[354],
_an_[288],
_an_[287],
_an_[289],
_an_[241],
_an_[362],
_an_[356],
_an_[357],
_an_[358],
_an_[359],
_an_[360],
_an_[5],
_an_[6],
[0,
_am_[1],
_am_[3],
_am_[2],
_am_[4],
_am_[7],
_am_[5],
_am_[6],
_am_[8],
_am_[9],
_am_[10]]]},
_ai_,
_ah_];
caml_register_global(1102,Html_f,"Html_f");
return}
(globalThis));
//# 1 "../.js/tyxml/tyxml.cma.js"
(function(globalThis)
{"use strict";
var
runtime=globalThis.jsoo_runtime,
caml_register_global=runtime.caml_register_global,
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes;
function caml_call1(f,a0)
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
function caml_call3(f,a0,a1,a2)
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
function caml_call4(f,a0,a1,a2,a3)
{return f.length == 4
?f(a0,a1,a2,a3)
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
function caml_call6(f,a0,a1,a2,a3,a4,a5)
{return f.length == 6
?f(a0,a1,a2,a3,a4,a5)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5])}
var
global_data=runtime.caml_get_global_data(),
cst$0=caml_string_of_jsbytes(""),
cst=caml_string_of_jsbytes(""),
cst$1=caml_string_of_jsbytes(""),
cst_CDATA=caml_string_of_jsbytes("<![CDATA["),
cst$2=caml_string_of_jsbytes("//"),
cst_CDATA$0=caml_string_of_jsbytes("//<![CDATA["),
cst$3=caml_string_of_jsbytes("/* */"),
cst_CDATA$1=caml_string_of_jsbytes("/* <![CDATA[ */"),
Stdlib_Format=global_data.Stdlib__Format,
Re=global_data.Re,
Stdlib_Printf=global_data.Stdlib__Printf,
Xml_wrap=global_data.Xml_wrap,
Xml_print=global_data.Xml_print,
Xml_iter=global_data.Xml_iter,
Xml_stream=global_data.Xml_stream,
Svg_f=global_data.Svg_f,
Html_f=global_data.Html_f,
_b_=[0,1],
_c_=
[0,
[12,10,[2,0,[12,10,[2,0,[12,10,[2,0,[12,10,0]]]]]]],
caml_string_of_jsbytes("\n%s\n%s\n%s\n")];
function uri_of_string(s){return s}
function string_of_uri(s){return s}
function acontent(param){var a=param[2];return a}
function aname(param){var name=param[1];return name}
function float_attrib(name,value){return [0,name,[0,value]]}
function int_attrib(name,value){return [0,name,[1,value]]}
function string_attrib(name,value){return [0,name,[2,value]]}
function space_sep_attrib(name,values){return [0,name,[3,0,values]]}
function comma_sep_attrib(name,values){return [0,name,[3,1,values]]}
function event_handler_attrib(name,value){return [0,name,[2,value]]}
function mouse_event_handler_attrib(name,value){return [0,name,[2,value]]}
function keyboard_event_handler_attrib(name,value)
{return [0,name,[2,value]]}
function touch_event_handler_attrib(name,value){return [0,name,[2,value]]}
function uri_attrib(name,value){return [0,name,[2,value]]}
function uris_attrib(name,values){return [0,name,[3,0,values]]}
function content(elt){return elt}
function empty(param){return 0}
function comment(c){return [0,c]}
function pcdata(d){return [2,d]}
function encodedpcdata(d){return [1,d]}
function entity(e){return [3,e]}
var _a_=caml_call1(Re[23],cst),re_end_cdata=caml_call1(Re[2],_a_);
function encoded_cdata(s1,s2,s)
{var _j7_=caml_call6(Re[22],0,0,_b_,re_end_cdata,cst$0,s);
return [1,caml_call4(Stdlib_Printf[4],_c_,s1,_j7_,s2)]}
function cdata(_j6_){return encoded_cdata(cst_CDATA,cst$1,_j6_)}
function cdata_script(_j5_){return encoded_cdata(cst_CDATA$0,cst$2,_j5_)}
function cdata_style(_j4_){return encoded_cdata(cst_CDATA$1,cst$3,_j4_)}
function leaf(opt,name)
{if(opt)var sth=opt[1],a=sth;else var a=0;return [4,name,a]}
function node(opt,name,children)
{if(opt)var sth=opt[1],a=sth;else var a=0;return [5,name,a,children]}
var
print_list=
caml_call1
(caml_call1
(Xml_print[12],
[0,
Xml_wrap[1],
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style,
aname,
acontent,
content]),
[0,0])
[1],
include=
caml_call1
(Xml_iter[1],
[0,
Xml_wrap[1],
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style,
aname,
acontent,
content]),
amap=include[1],
amap1=include[2],
rm_attrib=include[3],
rm_attrib_from_list=include[4],
map_int_attrib=include[5],
map_string_attrib=include[7],
map_string_attrib_in_list=include[8],
add_int_attrib=include[9],
add_string_attrib=include[11],
add_comma_sep_attrib=include[12],
add_space_sep_attrib=include[13],
fold=include[14],
all_entities=include[15],
translate=include[16],
pp=
caml_call1
(caml_call1
(Xml_print[9],
[0,
Xml_wrap[1],
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style,
aname,
acontent,
content]),
[0,0])
[1],
include$0=
caml_call1
(Xml_stream[2],
[0,
Xml_wrap[1],
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style]),
of_seq=include$0[1];
function print(fmt,x)
{return caml_call3
(print_list,caml_call1(Stdlib_Format[13],fmt),0,[0,x,0])}
var
_d_=Xml_wrap[1],
Tyxml_xml=
[0,
_d_,
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style,
aname,
acontent,
content,
pp,
of_seq,
amap,
amap1,
rm_attrib,
rm_attrib_from_list,
map_int_attrib,
map_string_attrib,
map_string_attrib_in_list,
add_int_attrib,
add_string_attrib,
add_comma_sep_attrib,
add_space_sep_attrib,
fold,
all_entities,
translate,
print_list,
print];
caml_register_global(17,Tyxml_xml,"Tyxml_xml");
var
M=
caml_call1
(Svg_f[1],
[0,
_d_,
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style]),
_e_=[0,M[2],M[325],M[327]],
include$1=
caml_call1
(caml_call1
(Xml_print[8],
[0,
_d_,
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style,
aname,
acontent,
content]),
_e_),
_f_=[0,M[2],M[325],M[327]],
Make_printer=
caml_call1
(caml_call1
(Xml_print[11],
[0,
_d_,
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style,
aname,
acontent,
content]),
_f_),
_h_=M[2],
_i_=M[3],
_j_=M[4],
_k_=M[5],
_l_=M[6],
_m_=M[7],
_n_=M[8],
_o_=M[9],
_p_=M[10],
_q_=M[11],
_r_=M[12],
_s_=M[13],
_t_=M[14],
_u_=M[15],
_v_=M[16],
_w_=M[17],
_x_=M[18],
_y_=M[19],
_z_=M[20],
_A_=M[21],
_B_=M[22],
_C_=M[23],
_D_=M[24],
_E_=M[25],
_F_=M[26],
_G_=M[27],
_H_=M[28],
_I_=M[29],
_J_=M[30],
_K_=M[31],
_L_=M[32],
_M_=M[33],
_N_=M[34],
_O_=M[35],
_P_=M[36],
_Q_=M[37],
_R_=M[38],
_S_=M[39],
_T_=M[40],
_U_=M[41],
_V_=M[42],
_W_=M[43],
_X_=M[44],
_Y_=M[45],
_Z_=M[46],
___=M[47],
_$_=M[48],
_aa_=M[49],
_ab_=M[50],
_ac_=M[51],
_ad_=M[52],
_ae_=M[53],
_af_=M[54],
_ag_=M[55],
_ah_=M[56],
_ai_=M[57],
_aj_=M[58],
_ak_=M[59],
_al_=M[60],
_am_=M[61],
_an_=M[62],
_ao_=M[63],
_ap_=M[64],
_aq_=M[65],
_ar_=M[66],
_as_=M[67],
_at_=M[68],
_au_=M[69],
_av_=M[70],
_aw_=M[71],
_ax_=M[72],
_ay_=M[73],
_az_=M[74],
_aA_=M[75],
_aB_=M[76],
_aC_=M[77],
_aD_=M[78],
_aE_=M[79],
_aF_=M[80],
_aG_=M[81],
_aH_=M[82],
_aI_=M[83],
_aJ_=M[84],
_aK_=M[85],
_aL_=M[86],
_aM_=M[87],
_aN_=M[88],
_aO_=M[89],
_aP_=M[90],
_aQ_=M[91],
_aR_=M[92],
_aS_=M[93],
_aT_=M[94],
_aU_=M[95],
_aV_=M[96],
_aW_=M[97],
_aX_=M[98],
_aY_=M[99],
_aZ_=M[100],
_a0_=M[101],
_a1_=M[102],
_a2_=M[103],
_a3_=M[104],
_a4_=M[105],
_a5_=M[106],
_a6_=M[107],
_a7_=M[108],
_a8_=M[109],
_a9_=M[110],
_a__=M[111],
_a$_=M[112],
_ba_=M[113],
_bb_=M[114],
_bc_=M[115],
_bd_=M[116],
_be_=M[117],
_bf_=M[118],
_bg_=M[119],
_bh_=M[120],
_bi_=M[121],
_bj_=M[122],
_bk_=M[123],
_bl_=M[124],
_bm_=M[125],
_bn_=M[126],
_bo_=M[127],
_bp_=M[128],
_bq_=M[129],
_br_=M[130],
_bs_=M[131],
_bt_=M[132],
_bu_=M[133],
_bv_=M[134],
_bw_=M[135],
_bx_=M[136],
_by_=M[137],
_bz_=M[138],
_bA_=M[139],
_bB_=M[140],
_bC_=M[141],
_bD_=M[142],
_bE_=M[143],
_bF_=M[144],
_bG_=M[145],
_bH_=M[146],
_bI_=M[147],
_bJ_=M[148],
_bK_=M[149],
_bL_=M[150],
_bM_=M[151],
_bN_=M[152],
_bO_=M[153],
_bP_=M[154],
_bQ_=M[155],
_bR_=M[156],
_bS_=M[157],
_bT_=M[158],
_bU_=M[159],
_bV_=M[160],
_bW_=M[161],
_bX_=M[162],
_bY_=M[163],
_bZ_=M[164],
_b0_=M[165],
_b1_=M[166],
_b2_=M[167],
_b3_=M[168],
_b4_=M[169],
_b5_=M[170],
_b6_=M[171],
_b7_=M[172],
_b8_=M[173],
_b9_=M[174],
_b__=M[175],
_b$_=M[176],
_ca_=M[177],
_cb_=M[178],
_cc_=M[179],
_cd_=M[180],
_ce_=M[181],
_cf_=M[182],
_cg_=M[183],
_ch_=M[184],
_ci_=M[185],
_cj_=M[186],
_ck_=M[187],
_cl_=M[188],
_cm_=M[189],
_cn_=M[190],
_co_=M[191],
_cp_=M[192],
_cq_=M[193],
_cr_=M[194],
_cs_=M[195],
_ct_=M[196],
_cu_=M[197],
_cv_=M[198],
_cw_=M[199],
_cx_=M[200],
_cy_=M[201],
_cz_=M[202],
_cA_=M[203],
_cB_=M[204],
_cC_=M[205],
_cD_=M[206],
_cE_=M[207],
_cF_=M[208],
_cG_=M[209],
_cH_=M[210],
_cI_=M[211],
_cJ_=M[212],
_cK_=M[213],
_cL_=M[214],
_cM_=M[215],
_cN_=M[216],
_cO_=M[217],
_cP_=M[218],
_cQ_=M[219],
_cR_=M[220],
_cS_=M[221],
_cT_=M[222],
_cU_=M[223],
_cV_=M[224],
_cW_=M[225],
_cX_=M[226],
_cY_=M[227],
_cZ_=M[228],
_c0_=M[229],
_c1_=M[230],
_c2_=M[231],
_c3_=M[232],
_c4_=M[233],
_c5_=M[234],
_c6_=M[235],
_c7_=M[236],
_c8_=M[237],
_c9_=M[238],
_c__=M[239],
_c$_=M[240],
_da_=M[241],
_db_=M[242],
_dc_=M[243],
_dd_=M[244],
_de_=M[245],
_df_=M[246],
_dg_=M[247],
_dh_=M[248],
_di_=M[249],
_dj_=M[250],
_dk_=M[251],
_dl_=M[252],
_dm_=M[253],
_dn_=M[254],
_do_=M[255],
_dp_=M[256],
_dq_=M[257],
_dr_=M[258],
_ds_=M[259],
_dt_=M[260],
_du_=M[261],
_dv_=M[262],
_dw_=M[263],
_dx_=M[264],
_dy_=M[265],
_dz_=M[266],
_dA_=M[267],
_dB_=M[268],
_dC_=M[269],
_dD_=M[270],
_dE_=M[271],
_dF_=M[272],
_dG_=M[273],
_dH_=M[274],
_dI_=M[275],
_dJ_=M[276],
_dK_=M[277],
_dL_=M[278],
_dM_=M[279],
_dN_=M[280],
_dO_=M[281],
_dP_=M[282],
_dQ_=M[283],
_dR_=M[284],
_dS_=M[285],
_dT_=M[286],
_dU_=M[287],
_dV_=M[288],
_dW_=M[289],
_dX_=M[290],
_dY_=M[291],
_dZ_=M[292],
_d0_=M[293],
_d1_=M[294],
_d2_=M[295],
_d3_=M[296],
_d4_=M[297],
_d5_=M[298],
_d6_=M[299],
_d7_=M[300],
_d8_=M[301],
_d9_=M[302],
_d__=M[303],
_d$_=M[304],
_ea_=M[305],
_eb_=M[306],
_ec_=M[307],
_ed_=M[308],
_ee_=M[309],
_ef_=M[310],
_eg_=M[311],
_eh_=M[312],
_ei_=M[313],
_ej_=M[314],
_ek_=M[315],
_el_=M[316],
_em_=M[317],
_en_=M[318],
_eo_=M[319],
_ep_=M[320],
_eq_=M[321],
_er_=M[322],
_es_=M[323],
_et_=M[324],
_eu_=M[325],
_ev_=M[326],
_ew_=M[327],
_ex_=M[328],
_ey_=M[329],
_ez_=M[330],
_eA_=include$1[1],
_eB_=include$1[2],
_g_=M[1],
pp$0=caml_call4(_eB_,0,0,0,0),
pp_elt=caml_call3(_eA_,0,0,0),
Tyxml_svg=
[0,
_g_,
_h_,
_i_,
_j_,
_k_,
_l_,
_m_,
_n_,
_o_,
_p_,
_q_,
_r_,
_s_,
_t_,
_u_,
_v_,
_w_,
_x_,
_y_,
_z_,
_A_,
_B_,
_C_,
_D_,
_E_,
_F_,
_G_,
_H_,
_I_,
_J_,
_K_,
_L_,
_M_,
_N_,
_O_,
_P_,
_Q_,
_R_,
_S_,
_T_,
_U_,
_V_,
_W_,
_X_,
_Y_,
_Z_,
___,
_$_,
_aa_,
_ab_,
_ac_,
_ad_,
_ae_,
_af_,
_ag_,
_ah_,
_ai_,
_aj_,
_ak_,
_al_,
_am_,
_an_,
_ao_,
_ap_,
_aq_,
_ar_,
_as_,
_at_,
_au_,
_av_,
_aw_,
_ax_,
_ay_,
_az_,
_aA_,
_aB_,
_aC_,
_aD_,
_aE_,
_aF_,
_aG_,
_aH_,
_aI_,
_aJ_,
_aK_,
_aL_,
_aM_,
_aN_,
_aO_,
_aP_,
_aQ_,
_aR_,
_aS_,
_aT_,
_aU_,
_aV_,
_aW_,
_aX_,
_aY_,
_aZ_,
_a0_,
_a1_,
_a2_,
_a3_,
_a4_,
_a5_,
_a6_,
_a7_,
_a8_,
_a9_,
_a__,
_a$_,
_ba_,
_bb_,
_bc_,
_bd_,
_be_,
_bf_,
_bg_,
_bh_,
_bi_,
_bj_,
_bk_,
_bl_,
_bm_,
_bn_,
_bo_,
_bp_,
_bq_,
_br_,
_bs_,
_bt_,
_bu_,
_bv_,
_bw_,
_bx_,
_by_,
_bz_,
_bA_,
_bB_,
_bC_,
_bD_,
_bE_,
_bF_,
_bG_,
_bH_,
_bI_,
_bJ_,
_bK_,
_bL_,
_bM_,
_bN_,
_bO_,
_bP_,
_bQ_,
_bR_,
_bS_,
_bT_,
_bU_,
_bV_,
_bW_,
_bX_,
_bY_,
_bZ_,
_b0_,
_b1_,
_b2_,
_b3_,
_b4_,
_b5_,
_b6_,
_b7_,
_b8_,
_b9_,
_b__,
_b$_,
_ca_,
_cb_,
_cc_,
_cd_,
_ce_,
_cf_,
_cg_,
_ch_,
_ci_,
_cj_,
_ck_,
_cl_,
_cm_,
_cn_,
_co_,
_cp_,
_cq_,
_cr_,
_cs_,
_ct_,
_cu_,
_cv_,
_cw_,
_cx_,
_cy_,
_cz_,
_cA_,
_cB_,
_cC_,
_cD_,
_cE_,
_cF_,
_cG_,
_cH_,
_cI_,
_cJ_,
_cK_,
_cL_,
_cM_,
_cN_,
_cO_,
_cP_,
_cQ_,
_cR_,
_cS_,
_cT_,
_cU_,
_cV_,
_cW_,
_cX_,
_cY_,
_cZ_,
_c0_,
_c1_,
_c2_,
_c3_,
_c4_,
_c5_,
_c6_,
_c7_,
_c8_,
_c9_,
_c__,
_c$_,
_da_,
_db_,
_dc_,
_dd_,
_de_,
_df_,
_dg_,
_dh_,
_di_,
_dj_,
_dk_,
_dl_,
_dm_,
_dn_,
_do_,
_dp_,
_dq_,
_dr_,
_ds_,
_dt_,
_du_,
_dv_,
_dw_,
_dx_,
_dy_,
_dz_,
_dA_,
_dB_,
_dC_,
_dD_,
_dE_,
_dF_,
_dG_,
_dH_,
_dI_,
_dJ_,
_dK_,
_dL_,
_dM_,
_dN_,
_dO_,
_dP_,
_dQ_,
_dR_,
_dS_,
_dT_,
_dU_,
_dV_,
_dW_,
_dX_,
_dY_,
_dZ_,
_d0_,
_d1_,
_d2_,
_d3_,
_d4_,
_d5_,
_d6_,
_d7_,
_d8_,
_d9_,
_d__,
_d$_,
_ea_,
_eb_,
_ec_,
_ed_,
_ee_,
_ef_,
_eg_,
_eh_,
_ei_,
_ej_,
_ek_,
_el_,
_em_,
_en_,
_eo_,
_ep_,
_eq_,
_er_,
_es_,
_et_,
_eu_,
_ev_,
_ew_,
_ex_,
_ey_,
_ez_,
_eB_,
_eA_,
Make_printer,
pp$0,
pp_elt];
caml_register_global(19,Tyxml_svg,"Tyxml_svg");
var
M$0=
caml_call1
(caml_call1
(Html_f[1],
[0,
_d_,
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style]),
[0,
_h_,
_i_,
_j_,
_k_,
_l_,
_m_,
_n_,
_o_,
_p_,
_q_,
_r_,
_s_,
_t_,
_u_,
_v_,
_w_,
_x_,
_y_,
_z_,
_A_,
_B_,
_C_,
_D_,
_E_,
_F_,
_G_,
_H_,
_I_,
_J_,
_K_,
_L_,
_M_,
_N_,
_O_,
_P_,
_Q_,
_R_,
_S_,
_T_,
_U_,
_V_,
_W_,
_X_,
_Y_,
_Z_,
___,
_$_,
_aa_,
_ab_,
_ac_,
_ad_,
_ae_,
_af_,
_ag_,
_ah_,
_ai_,
_aj_,
_ak_,
_al_,
_am_,
_an_,
_ao_,
_ap_,
_aq_,
_ar_,
_as_,
_at_,
_au_,
_av_,
_aw_,
_ax_,
_ay_,
_az_,
_aA_,
_aB_,
_aC_,
_aD_,
_aE_,
_aF_,
_aG_,
_aH_,
_aI_,
_aJ_,
_aK_,
_aL_,
_aM_,
_aN_,
_aO_,
_aP_,
_aQ_,
_aR_,
_aS_,
_aT_,
_aU_,
_aV_,
_aW_,
_aX_,
_aY_,
_aZ_,
_a0_,
_a1_,
_a2_,
_a3_,
_a4_,
_a5_,
_a6_,
_a7_,
_a8_,
_a9_,
_a__,
_a$_,
_ba_,
_bb_,
_bc_,
_bd_,
_be_,
_bf_,
_bg_,
_bh_,
_bi_,
_bj_,
_bk_,
_bl_,
_bm_,
_bn_,
_bo_,
_bp_,
_bq_,
_br_,
_bs_,
_bt_,
_bu_,
_bv_,
_bw_,
_bx_,
_by_,
_bz_,
_bA_,
_bB_,
_bC_,
_bD_,
_bE_,
_bF_,
_bG_,
_bH_,
_bI_,
_bJ_,
_bK_,
_bL_,
_bM_,
_bN_,
_bO_,
_bP_,
_bQ_,
_bR_,
_bS_,
_bT_,
_bU_,
_bV_,
_bW_,
_bX_,
_bY_,
_bZ_,
_b0_,
_b1_,
_b2_,
_b3_,
_b4_,
_b5_,
_b6_,
_b7_,
_b8_,
_b9_,
_b__,
_b$_,
_ca_,
_cb_,
_cc_,
_cd_,
_ce_,
_cf_,
_cg_,
_ch_,
_ci_,
_cj_,
_ck_,
_cl_,
_cm_,
_cn_,
_co_,
_cp_,
_cq_,
_cr_,
_cs_,
_ct_,
_cu_,
_cv_,
_cw_,
_cx_,
_cy_,
_cz_,
_cA_,
_cB_,
_cC_,
_cD_,
_cE_,
_cF_,
_cG_,
_cH_,
_cI_,
_cJ_,
_cK_,
_cL_,
_cM_,
_cN_,
_cO_,
_cP_,
_cQ_,
_cR_,
_cS_,
_cT_,
_cU_,
_cV_,
_cW_,
_cX_,
_cY_,
_cZ_,
_c0_,
_c1_,
_c2_,
_c3_,
_c4_,
_c5_,
_c6_,
_c7_,
_c8_,
_c9_,
_c__,
_c$_,
_da_,
_db_,
_dc_,
_dd_,
_de_,
_df_,
_dg_,
_dh_,
_di_,
_dj_,
_dk_,
_dl_,
_dm_,
_dn_,
_do_,
_dp_,
_dq_,
_dr_,
_ds_,
_dt_,
_du_,
_dv_,
_dw_,
_dx_,
_dy_,
_dz_,
_dA_,
_dB_,
_dC_,
_dD_,
_dE_,
_dF_,
_dG_,
_dH_,
_dI_,
_dJ_,
_dK_,
_dL_,
_dM_,
_dN_,
_dO_,
_dP_,
_dQ_,
_dR_,
_dS_,
_dT_,
_dU_,
_dV_,
_dW_,
_dX_,
_dY_,
_dZ_,
_d0_,
_d1_,
_d2_,
_d3_,
_d4_,
_d5_,
_d6_,
_d7_,
_d8_,
_d9_,
_d__,
_d$_,
_ea_,
_eb_,
_ec_,
_ed_,
_ee_,
_ef_,
_eg_,
_eh_,
_ei_,
_ej_,
_ek_,
_el_,
_em_,
_en_,
_eo_,
_ep_,
_eq_,
_er_,
_es_,
_et_,
_eu_,
_ev_,
_ew_,
_ex_,
_ey_,
_ez_]),
_eC_=[0,M$0[2],M$0[339],M$0[341]],
include$2=
caml_call1
(caml_call1
(Xml_print[8],
[0,
_d_,
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style,
aname,
acontent,
content]),
_eC_),
_eD_=[0,M$0[2],M$0[339],M$0[341]],
Make_printer$0=
caml_call1
(caml_call1
(Xml_print[11],
[0,
_d_,
string_of_uri,
uri_of_string,
float_attrib,
int_attrib,
string_attrib,
space_sep_attrib,
comma_sep_attrib,
event_handler_attrib,
mouse_event_handler_attrib,
keyboard_event_handler_attrib,
touch_event_handler_attrib,
uri_attrib,
uris_attrib,
empty,
comment,
pcdata,
encodedpcdata,
entity,
leaf,
node,
cdata,
cdata_script,
cdata_style,
aname,
acontent,
content]),
_eD_),
_j2_=include$2[1],
_j3_=include$2[2],
_eE_=M$0[1],
_eF_=M$0[2],
_eG_=M$0[3],
_eH_=M$0[4],
_eI_=M$0[5],
_eJ_=M$0[6],
_eK_=M$0[7],
_eL_=M$0[8],
_eM_=M$0[9],
_eN_=M$0[10],
_eO_=M$0[11],
_eP_=M$0[12],
_eQ_=M$0[13],
_eR_=M$0[14],
_eS_=M$0[15],
_eT_=M$0[16],
_eU_=M$0[17],
_eV_=M$0[18],
_eW_=M$0[19],
_eX_=M$0[20],
_eY_=M$0[21],
_eZ_=M$0[22],
_e0_=M$0[23],
_e1_=M$0[24],
_e2_=M$0[25],
_e3_=M$0[26],
_e4_=M$0[27],
_e5_=M$0[28],
_e6_=M$0[29],
_e7_=M$0[30],
_e8_=M$0[31],
_e9_=M$0[32],
_e__=M$0[33],
_e$_=M$0[34],
_fa_=M$0[35],
_fb_=M$0[36],
_fc_=M$0[37],
_fd_=M$0[38],
_fe_=M$0[39],
_ff_=M$0[40],
_fg_=M$0[41],
_fh_=M$0[42],
_fi_=M$0[43],
_fj_=M$0[44],
_fk_=M$0[45],
_fl_=M$0[46],
_fm_=M$0[47],
_fn_=M$0[48],
_fo_=M$0[49],
_fp_=M$0[50],
_fq_=M$0[51],
_fr_=M$0[52],
_fs_=M$0[53],
_ft_=M$0[54],
_fu_=M$0[55],
_fv_=M$0[56],
_fw_=M$0[57],
_fx_=M$0[58],
_fy_=M$0[59],
_fz_=M$0[60],
_fA_=M$0[61],
_fB_=M$0[62],
_fC_=M$0[63],
_fD_=M$0[64],
_fE_=M$0[65],
_fF_=M$0[66],
_fG_=M$0[67],
_fH_=M$0[68],
_fI_=M$0[69],
_fJ_=M$0[70],
_fK_=M$0[71],
_fL_=M$0[72],
_fM_=M$0[73],
_fN_=M$0[74],
_fO_=M$0[75],
_fP_=M$0[76],
_fQ_=M$0[77],
_fR_=M$0[78],
_fS_=M$0[79],
_fT_=M$0[80],
_fU_=M$0[81],
_fV_=M$0[82],
_fW_=M$0[83],
_fX_=M$0[84],
_fY_=M$0[85],
_fZ_=M$0[86],
_f0_=M$0[87],
_f1_=M$0[88],
_f2_=M$0[89],
_f3_=M$0[90],
_f4_=M$0[91],
_f5_=M$0[92],
_f6_=M$0[93],
_f7_=M$0[94],
_f8_=M$0[95],
_f9_=M$0[96],
_f__=M$0[97],
_f$_=M$0[98],
_ga_=M$0[99],
_gb_=M$0[100],
_gc_=M$0[101],
_gd_=M$0[102],
_ge_=M$0[103],
_gf_=M$0[104],
_gg_=M$0[105],
_gh_=M$0[106],
_gi_=M$0[107],
_gj_=M$0[108],
_gk_=M$0[109],
_gl_=M$0[110],
_gm_=M$0[111],
_gn_=M$0[112],
_go_=M$0[113],
_gp_=M$0[114],
_gq_=M$0[115],
_gr_=M$0[116],
_gs_=M$0[117],
_gt_=M$0[118],
_gu_=M$0[119],
_gv_=M$0[120],
_gw_=M$0[121],
_gx_=M$0[122],
_gy_=M$0[123],
_gz_=M$0[124],
_gA_=M$0[125],
_gB_=M$0[126],
_gC_=M$0[127],
_gD_=M$0[128],
_gE_=M$0[129],
_gF_=M$0[130],
_gG_=M$0[131],
_gH_=M$0[132],
_gI_=M$0[133],
_gJ_=M$0[134],
_gK_=M$0[135],
_gL_=M$0[136],
_gM_=M$0[137],
_gN_=M$0[138],
_gO_=M$0[139],
_gP_=M$0[140],
_gQ_=M$0[141],
_gR_=M$0[142],
_gS_=M$0[143],
_gT_=M$0[144],
_gU_=M$0[145],
_gV_=M$0[146],
_gW_=M$0[147],
_gX_=M$0[148],
_gY_=M$0[149],
_gZ_=M$0[150],
_g0_=M$0[151],
_g1_=M$0[152],
_g2_=M$0[153],
_g3_=M$0[154],
_g4_=M$0[155],
_g5_=M$0[156],
_g6_=M$0[157],
_g7_=M$0[158],
_g8_=M$0[159],
_g9_=M$0[160],
_g__=M$0[161],
_g$_=M$0[162],
_ha_=M$0[163],
_hb_=M$0[164],
_hc_=M$0[165],
_hd_=M$0[166],
_he_=M$0[167],
_hf_=M$0[168],
_hg_=M$0[169],
_hh_=M$0[170],
_hi_=M$0[171],
_hj_=M$0[172],
_hk_=M$0[173],
_hl_=M$0[174],
_hm_=M$0[175],
_hn_=M$0[176],
_ho_=M$0[177],
_hp_=M$0[178],
_hq_=M$0[179],
_hr_=M$0[180],
_hs_=M$0[181],
_ht_=M$0[182],
_hu_=M$0[183],
_hv_=M$0[184],
_hw_=M$0[185],
_hx_=M$0[186],
_hy_=M$0[187],
_hz_=M$0[188],
_hA_=M$0[189],
_hB_=M$0[190],
_hC_=M$0[191],
_hD_=M$0[192],
_hE_=M$0[193],
_hF_=M$0[194],
_hG_=M$0[195],
_hH_=M$0[196],
_hI_=M$0[197],
_hJ_=M$0[198],
_hK_=M$0[199],
_hL_=M$0[200],
_hM_=M$0[201],
_hN_=M$0[202],
_hO_=M$0[203],
_hP_=M$0[204],
_hQ_=M$0[205],
_hR_=M$0[206],
_hS_=M$0[207],
_hT_=M$0[208],
_hU_=M$0[209],
_hV_=M$0[210],
_hW_=M$0[211],
_hX_=M$0[212],
_hY_=M$0[213],
_hZ_=M$0[214],
_h0_=M$0[215],
_h1_=M$0[216],
_h2_=M$0[217],
_h3_=M$0[218],
_h4_=M$0[219],
_h5_=M$0[220],
_h6_=M$0[221],
_h7_=M$0[222],
_h8_=M$0[223],
_h9_=M$0[224],
_h__=M$0[225],
_h$_=M$0[226],
_ia_=M$0[227],
_ib_=M$0[228],
_ic_=M$0[229],
_id_=M$0[230],
_ie_=M$0[231],
_if_=M$0[232],
_ig_=M$0[233],
_ih_=M$0[234],
_ii_=M$0[235],
_ij_=M$0[236],
_ik_=M$0[237],
_il_=M$0[238],
_im_=M$0[239],
_in_=M$0[240],
_io_=M$0[241],
_ip_=M$0[242],
_iq_=M$0[243],
_ir_=M$0[244],
_is_=M$0[245],
_it_=M$0[246],
_iu_=M$0[247],
_iv_=M$0[248],
_iw_=M$0[249],
_ix_=M$0[250],
_iy_=M$0[251],
_iz_=M$0[252],
_iA_=M$0[253],
_iB_=M$0[254],
_iC_=M$0[255],
_iD_=M$0[256],
_iE_=M$0[257],
_iF_=M$0[258],
_iG_=M$0[259],
_iH_=M$0[260],
_iI_=M$0[261],
_iJ_=M$0[262],
_iK_=M$0[263],
_iL_=M$0[264],
_iM_=M$0[265],
_iN_=M$0[266],
_iO_=M$0[267],
_iP_=M$0[268],
_iQ_=M$0[269],
_iR_=M$0[270],
_iS_=M$0[271],
_iT_=M$0[272],
_iU_=M$0[273],
_iV_=M$0[274],
_iW_=M$0[275],
_iX_=M$0[276],
_iY_=M$0[277],
_iZ_=M$0[278],
_i0_=M$0[279],
_i1_=M$0[280],
_i2_=M$0[281],
_i3_=M$0[282],
_i4_=M$0[283],
_i5_=M$0[284],
_i6_=M$0[285],
_i7_=M$0[286],
_i8_=M$0[287],
_i9_=M$0[288],
_i__=M$0[289],
_i$_=M$0[290],
_ja_=M$0[291],
_jb_=M$0[292],
_jc_=M$0[293],
_jd_=M$0[294],
_je_=M$0[295],
_jf_=M$0[296],
_jg_=M$0[297],
_jh_=M$0[298],
_ji_=M$0[299],
_jj_=M$0[300],
_jk_=M$0[301],
_jl_=M$0[302],
_jm_=M$0[303],
_jn_=M$0[304],
_jo_=M$0[305],
_jp_=M$0[306],
_jq_=M$0[307],
_jr_=M$0[308],
_js_=M$0[309],
_jt_=M$0[310],
_ju_=M$0[311],
_jv_=M$0[312],
_jw_=M$0[313],
_jx_=M$0[314],
_jy_=M$0[315],
_jz_=M$0[316],
_jA_=M$0[317],
_jB_=M$0[318],
_jC_=M$0[319],
_jD_=M$0[320],
_jE_=M$0[321],
_jF_=M$0[322],
_jG_=M$0[323],
_jH_=M$0[324],
_jI_=M$0[325],
_jJ_=M$0[326],
_jK_=M$0[327],
_jL_=M$0[328],
_jM_=M$0[329],
_jN_=M$0[330],
_jO_=M$0[331],
_jP_=M$0[332],
_jQ_=M$0[333],
_jR_=M$0[334],
_jS_=M$0[335],
_jT_=M$0[336],
_jU_=M$0[337],
_jV_=M$0[338],
_jW_=M$0[339],
_jX_=M$0[340],
_jY_=M$0[341],
_jZ_=M$0[342],
_j0_=M$0[343],
_j1_=M$0[344],
pp$1=caml_call4(_j3_,0,0,0,0),
pp_elt$0=caml_call3(_j2_,0,0,0),
Tyxml_html=
[0,
_eE_,
_eF_,
_eG_,
_eH_,
_eI_,
_eJ_,
_eK_,
_eL_,
_eM_,
_eN_,
_eO_,
_eP_,
_eQ_,
_eR_,
_eS_,
_eT_,
_eU_,
_eV_,
_eW_,
_eX_,
_eY_,
_eZ_,
_e0_,
_e1_,
_e2_,
_e3_,
_e4_,
_e5_,
_e6_,
_e7_,
_e8_,
_e9_,
_e__,
_e$_,
_fa_,
_fb_,
_fc_,
_fd_,
_fe_,
_ff_,
_fg_,
_fh_,
_fi_,
_fj_,
_fk_,
_fl_,
_fm_,
_fn_,
_fo_,
_fp_,
_fq_,
_fr_,
_fs_,
_ft_,
_fu_,
_fv_,
_fw_,
_fx_,
_fy_,
_fz_,
_fA_,
_fB_,
_fC_,
_fD_,
_fE_,
_fF_,
_fG_,
_fH_,
_fI_,
_fJ_,
_fK_,
_fL_,
_fM_,
_fN_,
_fO_,
_fP_,
_fQ_,
_fR_,
_fS_,
_fT_,
_fU_,
_fV_,
_fW_,
_fX_,
_fY_,
_fZ_,
_f0_,
_f1_,
_f2_,
_f3_,
_f4_,
_f5_,
_f6_,
_f7_,
_f8_,
_f9_,
_f__,
_f$_,
_ga_,
_gb_,
_gc_,
_gd_,
_ge_,
_gf_,
_gg_,
_gh_,
_gi_,
_gj_,
_gk_,
_gl_,
_gm_,
_gn_,
_go_,
_gp_,
_gq_,
_gr_,
_gs_,
_gt_,
_gu_,
_gv_,
_gw_,
_gx_,
_gy_,
_gz_,
_gA_,
_gB_,
_gC_,
_gD_,
_gE_,
_gF_,
_gG_,
_gH_,
_gI_,
_gJ_,
_gK_,
_gL_,
_gM_,
_gN_,
_gO_,
_gP_,
_gQ_,
_gR_,
_gS_,
_gT_,
_gU_,
_gV_,
_gW_,
_gX_,
_gY_,
_gZ_,
_g0_,
_g1_,
_g2_,
_g3_,
_g4_,
_g5_,
_g6_,
_g7_,
_g8_,
_g9_,
_g__,
_g$_,
_ha_,
_hb_,
_hc_,
_hd_,
_he_,
_hf_,
_hg_,
_hh_,
_hi_,
_hj_,
_hk_,
_hl_,
_hm_,
_hn_,
_ho_,
_hp_,
_hq_,
_hr_,
_hs_,
_ht_,
_hu_,
_hv_,
_hw_,
_hx_,
_hy_,
_hz_,
_hA_,
_hB_,
_hC_,
_hD_,
_hE_,
_hF_,
_hG_,
_hH_,
_hI_,
_hJ_,
_hK_,
_hL_,
_hM_,
_hN_,
_hO_,
_hP_,
_hQ_,
_hR_,
_hS_,
_hT_,
_hU_,
_hV_,
_hW_,
_hX_,
_hY_,
_hZ_,
_h0_,
_h1_,
_h2_,
_h3_,
_h4_,
_h5_,
_h6_,
_h7_,
_h8_,
_h9_,
_h__,
_h$_,
_ia_,
_ib_,
_ic_,
_id_,
_ie_,
_if_,
_ig_,
_ih_,
_ii_,
_ij_,
_ik_,
_il_,
_im_,
_in_,
_io_,
_ip_,
_iq_,
_ir_,
_is_,
_it_,
_iu_,
_iv_,
_iw_,
_ix_,
_iy_,
_iz_,
_iA_,
_iB_,
_iC_,
_iD_,
_iE_,
_iF_,
_iG_,
_iH_,
_iI_,
_iJ_,
_iK_,
_iL_,
_iM_,
_iN_,
_iO_,
_iP_,
_iQ_,
_iR_,
_iS_,
_iT_,
_iU_,
_iV_,
_iW_,
_iX_,
_iY_,
_iZ_,
_i0_,
_i1_,
_i2_,
_i3_,
_i4_,
_i5_,
_i6_,
_i7_,
_i8_,
_i9_,
_i__,
_i$_,
_ja_,
_jb_,
_jc_,
_jd_,
_je_,
_jf_,
_jg_,
_jh_,
_ji_,
_jj_,
_jk_,
_jl_,
_jm_,
_jn_,
_jo_,
_jp_,
_jq_,
_jr_,
_js_,
_jt_,
_ju_,
_jv_,
_jw_,
_jx_,
_jy_,
_jz_,
_jA_,
_jB_,
_jC_,
_jD_,
_jE_,
_jF_,
_jG_,
_jH_,
_jI_,
_jJ_,
_jK_,
_jL_,
_jM_,
_jN_,
_jO_,
_jP_,
_jQ_,
_jR_,
_jS_,
_jT_,
_jU_,
_jV_,
_jW_,
_jX_,
_jY_,
_jZ_,
_j0_,
_j1_,
_j3_,
_j2_,
Make_printer$0,
pp$1,
pp_elt$0];
caml_register_global(21,Tyxml_html,"Tyxml_html");
var Tyxml=[0];
caml_register_global(22,Tyxml,"Tyxml");
return}
(globalThis));
//# 1 ".mechanic.eobjs/byte/dune__exe__Mechanic.cmo.js"
(function(globalThis)
{"use strict";
var
runtime=globalThis.jsoo_runtime,
caml_jsstring_of_string=runtime.caml_jsstring_of_string,
caml_mul=runtime.caml_mul,
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
caml_string_of_jsstring=runtime.caml_string_of_jsstring;
function caml_call1(f,a0)
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
function caml_call2(f,a0,a1)
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
function caml_call3(f,a0,a1,a2)
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
function caml_call5(f,a0,a1,a2,a3,a4)
{return f.length == 5
?f(a0,a1,a2,a3,a4)
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
var
global_data=runtime.caml_get_global_data(),
cst_R_initialiser_compl_tement=
caml_string_of_jsbytes
("R\xc3\xa9initialiser compl\xc3\xa8tement le formulaire ?"),
cst$12=caml_string_of_jsbytes(""),
cst_nom_prenom$1=caml_string_of_jsbytes("nom_prenom"),
cst$13=caml_string_of_jsbytes(""),
cst_arrivee$1=caml_string_of_jsbytes("arrivee"),
cst$14=caml_string_of_jsbytes(""),
cst_depart$1=caml_string_of_jsbytes("depart"),
cst$10=caml_string_of_jsbytes("\xc2\xa0\xe2\x82\xac"),
cst_qte=caml_string_of_jsbytes("_qte"),
cst$11=caml_string_of_jsbytes("\xc2\xa0\xe2\x82\xac"),
cst_total=caml_string_of_jsbytes("total"),
cst_benvoi=caml_string_of_jsbytes("benvoi"),
cst_subject_R_servation_linge_=
caml_string_of_jsbytes
("?subject=R\xc3\xa9servation linge Dubuval&body="),
cst_mailto=caml_string_of_jsbytes("mailto:"),
cst_resume=caml_string_of_jsbytes("resume"),
cst$7=caml_string_of_jsbytes(", "),
cst$9=caml_string_of_jsbytes(""),
cst$8=caml_string_of_jsbytes(" "),
cst$6=caml_string_of_jsbytes(" : "),
cst$5=caml_string_of_jsbytes("\xc2\xa0\xe2\x82\xac"),
cst_Total=caml_string_of_jsbytes("Total : "),
cst_depart$0=caml_string_of_jsbytes("depart"),
cst_Date_de_d_part=caml_string_of_jsbytes("Date de d\xc3\xa9part : "),
cst_arrivee$0=caml_string_of_jsbytes("arrivee"),
cst_Date_d_arriv_e=
caml_string_of_jsbytes("Date d\xe2\x80\x99arriv\xc3\xa9e : "),
cst_nom_prenom$0=caml_string_of_jsbytes("nom_prenom"),
cst_Locataire=caml_string_of_jsbytes("Locataire : "),
cst$3=caml_string_of_jsbytes(", "),
cst$4=caml_string_of_jsbytes(""),
cst$2=caml_string_of_jsbytes(" : "),
cst_nom_prenom=caml_string_of_jsbytes("nom_prenom"),
cst_arrivee=caml_string_of_jsbytes("arrivee"),
cst_depart=caml_string_of_jsbytes("depart"),
cst$1=caml_string_of_jsbytes("_"),
cst$0=caml_string_of_jsbytes("_"),
cst=caml_string_of_jsbytes(""),
cst_compute=caml_string_of_jsbytes("compute"),
cst_reset_form=caml_string_of_jsbytes("reset_form"),
Js_of_ocaml_Dom_html=global_data.Js_of_ocaml__Dom_html,
Stdlib_List=global_data.Stdlib__List,
Stdlib=global_data.Stdlib,
Inventaire_linge=global_data.Inventaire_linge,
Stdlib_Fun=global_data.Stdlib__Fun,
Stdlib_String=global_data.Stdlib__String,
Stdlib_Printf=global_data.Stdlib__Printf,
Tyxml_html=global_data.Tyxml_html,
Stdlib_Format=global_data.Stdlib__Format,
Stdlib_Buffer=global_data.Stdlib__Buffer,
Js_of_ocaml_Js=global_data.Js_of_ocaml__Js,
_l_=
[0,
[11,caml_string_of_jsbytes(" ("),[2,0,[12,41,0]]],
caml_string_of_jsbytes(" (%s)")],
_k_=[0,0,0],
_m_=[0,[15,0],caml_string_of_jsbytes("%a")],
_h_=
[0,
[11,caml_string_of_jsbytes(" ("),[2,0,[12,41,0]]],
caml_string_of_jsbytes(" (%s)")],
_i_=
[0,
[11,
caml_string_of_jsbytes("\xe2\x80\x94 "),
[4,
0,
0,
0,
[12,32,[2,0,[2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]]]]],
caml_string_of_jsbytes("\xe2\x80\x94 %d %s%s%%0A")],
_g_=[0,0,0],
_c_=
[0,
[11,
caml_string_of_jsbytes
("----- R\xc3\xa9servation linge Dubuval, Les terrasses des Choseaux, Appartement B6 -----"),
[12,37,[11,caml_string_of_jsbytes("0A"),0]]],
caml_string_of_jsbytes
("----- R\xc3\xa9servation linge Dubuval, Les terrasses des Choseaux, Appartement B6 -----%%0A")],
_d_=
[0,
[11,
caml_string_of_jsbytes("Locataire : "),
[2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]],
caml_string_of_jsbytes("Locataire : %s%%0A")],
_e_=
[0,
[11,
caml_string_of_jsbytes("Date d\xe2\x80\x99arriv\xc3\xa9e : "),
[2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]],
caml_string_of_jsbytes("Date d\xe2\x80\x99arriv\xc3\xa9e : %s%%0A")],
_f_=
[0,
[11,
caml_string_of_jsbytes("Date de d\xc3\xa9part : "),
[2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]],
caml_string_of_jsbytes("Date de d\xc3\xa9part : %s%%0A")],
_j_=
[0,
[12,
37,
[11,
caml_string_of_jsbytes("0ATotal : "),
[4,
0,
0,
0,
[11,
caml_string_of_jsbytes(" \xe2\x82\xac"),
[12,37,[11,caml_string_of_jsbytes("0A"),0]]]]]],
caml_string_of_jsbytes("%%0ATotal : %d \xe2\x82\xac%%0A")];
function set_string_input_by_id(nm,v)
{var
match=
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][33]);
if(match)
{var inp=match[1],t0=caml_jsstring_of_string(v);return inp.value = t0}
return 0}
function read_string_input_by_id(nm)
{var
match=
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][33]);
if(match){var inp=match[1];return caml_string_of_jsstring(inp.value)}
return cst}
function zero_int_input_by_id(nm)
{var
match=
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][50]);
if(match)
{var inp=match[1],t3=caml_jsstring_of_string(caml_call1(Stdlib[33],0));
return inp.value = t3}
return 0}
function read_int_input_by_id(nm)
{var
match=
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][50]);
if(match)
{var inp=match[1];
return runtime.caml_int_of_string(caml_string_of_jsstring(inp.value))}
return 0}
function set_td_by_id(nm,v)
{var
match=
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][54]);
if(match)
{var td=match[1],t6=caml_jsstring_of_string(v);
return td.innerHTML = t6}
return 0}
function field_id_by_fourniture(f)
{var _ba_=f[4];
function _bb_(param)
{var
p=param[1],
_bc_=caml_call1(Inventaire_linge[4],p),
_bd_=caml_call2(Stdlib[28],cst$0,_bc_);
return caml_call2(Stdlib[28],f[1],_bd_)}
return caml_call1(caml_call1(Stdlib_List[19],_bb_),_ba_)}
function field_id_and_piece_by_fournitu(f)
{var _a7_=f[4];
function _a8_(param)
{var
p=param[1],
_a9_=caml_call1(Inventaire_linge[5],p),
_a__=caml_call1(Inventaire_linge[4],p),
_a$_=caml_call2(Stdlib[28],cst$1,_a__);
return [0,caml_call2(Stdlib[28],f[1],_a$_),_a9_]}
return caml_call1(caml_call1(Stdlib_List[19],_a8_),_a7_)}
var
_a_=Inventaire_linge[6],
_b_=caml_call1(caml_call1(Stdlib_List[19],field_id_by_fourniture),_a_),
all_names=caml_call1(Stdlib_List[13],_b_);
function compute(param)
{var _aj_=Inventaire_linge[6];
function _ak_(f)
{var _a1_=field_id_by_fourniture(f),_a2_=0;
function _a3_(s,field_id)
{return s + read_int_input_by_id(field_id) | 0}
var
qte=caml_call1(caml_call2(Stdlib_List[25],_a3_,_a2_),_a1_),
_a4_=caml_call1(Stdlib[33],caml_mul(qte,f[3])),
_a5_=caml_call2(Stdlib[28],_a4_,cst$10);
set_td_by_id(f[1],_a5_);
var _a6_=caml_call1(Stdlib[33],qte);
return set_td_by_id(caml_call2(Stdlib[28],f[1],cst_qte),_a6_)}
caml_call2(Stdlib_List[17],_ak_,_aj_);
var _al_=Inventaire_linge[6],_am_=0;
function _an_(total,f)
{var _aX_=field_id_by_fourniture(f),_aY_=0;
function _aZ_(s,field_id)
{return s + read_int_input_by_id(field_id) | 0}
var _a0_=caml_call1(caml_call2(Stdlib_List[25],_aZ_,_aY_),_aX_);
return total + caml_mul(f[3],_a0_) | 0}
var
_ao_=caml_call3(Stdlib_List[25],_an_,_am_,_al_),
_ap_=caml_call1(Stdlib[33],_ao_);
set_td_by_id
(cst_total,
caml_call1(caml_call2(Stdlib_Fun[2],Stdlib[28],cst$11),_ap_));
var
match=
caml_call2
(Js_of_ocaml_Dom_html[5],cst_benvoi,Js_of_ocaml_Dom_html[117][2]);
if(match)
{var a=match[1],b=caml_call1(Stdlib_Buffer[1],500);
caml_call2(Stdlib_Printf[5],b,_c_);
var _n_=read_string_input_by_id(cst_nom_prenom);
caml_call3(Stdlib_Printf[5],b,_d_,_n_);
var _o_=read_string_input_by_id(cst_arrivee);
caml_call3(Stdlib_Printf[5],b,_e_,_o_);
var _p_=read_string_input_by_id(cst_depart);
caml_call3(Stdlib_Printf[5],b,_f_,_p_);
var
_q_=Inventaire_linge[6],
_r_=
function(f)
{var _aQ_=field_id_and_piece_by_fournitu(f);
function _aR_(param,_aT_)
{var
short$0=_aT_[2],
field_id=_aT_[1],
detail=param[2],
s=param[1],
q=read_int_input_by_id(field_id);
if(0 < q)
var
_aU_=caml_call1(Stdlib[33],q),
_aV_=caml_call2(Stdlib[28],cst$2,_aU_),
_aW_=[0,caml_call2(Stdlib[28],short$0,_aV_),detail];
else
var _aW_=detail;
return [0,s + q | 0,_aW_]}
var
param=caml_call1(caml_call2(Stdlib_List[25],_aR_,_g_),_aQ_),
_aS_=param[1];
if(0 === _aS_)return 0;
var detail=param[2];
return [0,[0,f[2],_aS_,detail]]},
_s_=caml_call2(Stdlib_List[22],_r_,_q_),
_t_=
function(param)
{var detail=param[3],q=param[2],descr=param[1];
if(detail)
var
_aO_=caml_call2(Stdlib_String[6],cst$3,detail),
_aP_=caml_call2(Stdlib_Printf[4],_h_,_aO_);
else
var _aP_=cst$4;
return caml_call5(Stdlib_Printf[5],b,_i_,q,descr,_aP_)};
caml_call1(caml_call1(Stdlib_List[17],_t_),_s_);
var
_u_=Inventaire_linge[6],
_v_=0,
_w_=
function(total,f)
{var _aK_=field_id_by_fourniture(f),_aL_=0;
function _aM_(s,field_id)
{return s + read_int_input_by_id(field_id) | 0}
var _aN_=caml_call1(caml_call2(Stdlib_List[25],_aM_,_aL_),_aK_);
return total + caml_mul(f[3],_aN_) | 0},
_x_=caml_call3(Stdlib_List[25],_w_,_v_,_u_);
caml_call3(Stdlib_Printf[5],b,_j_,_x_);
var
_y_=caml_call1(Stdlib_Buffer[2],b),
_ah_=caml_call2(Stdlib[28],cst_subject_R_servation_linge_,_y_),
_ai_=caml_call2(Stdlib[28],Inventaire_linge[2],_ah_),
t8=caml_jsstring_of_string(caml_call2(Stdlib[28],cst_mailto,_ai_));
a.href = t8}
var
match$0=
caml_call2
(Js_of_ocaml_Dom_html[5],cst_resume,Js_of_ocaml_Dom_html[117][15]);
if(match$0)
{var
resume=match$0[1],
_A_=[0,caml_call1(Tyxml_html[219],cst$5),0],
_z_=0,
_B_=Inventaire_linge[6],
_C_=0,
_D_=
function(total,f)
{var _aG_=field_id_by_fourniture(f),_aH_=0;
function _aI_(s,field_id)
{return s + read_int_input_by_id(field_id) | 0}
var _aJ_=caml_call1(caml_call2(Stdlib_List[25],_aI_,_aH_),_aG_);
return total + caml_mul(f[3],_aJ_) | 0},
_E_=caml_call3(Stdlib_List[25],_D_,_C_,_B_),
_F_=caml_call1(Stdlib[33],_E_),
_G_=[0,caml_call1(Tyxml_html[219],_F_),_A_],
_H_=[0,caml_call1(Tyxml_html[219],cst_Total),0],
_I_=[0,caml_call2(Tyxml_html[254],0,_H_),_G_],
_J_=[0,caml_call2(Tyxml_html[241],0,_I_),_z_],
_K_=[0,caml_call2(Tyxml_html[264],0,0),_J_],
_L_=Inventaire_linge[6],
_M_=
function(f)
{var _ay_=field_id_and_piece_by_fournitu(f);
function _az_(param,_aC_)
{var
short$0=_aC_[2],
field_id=_aC_[1],
detail=param[2],
s=param[1],
q=read_int_input_by_id(field_id);
if(0 < q)
var
_aD_=caml_call1(Stdlib[33],q),
_aE_=caml_call2(Stdlib[28],cst$6,_aD_),
_aF_=[0,caml_call2(Stdlib[28],short$0,_aE_),detail];
else
var _aF_=detail;
return [0,s + q | 0,_aF_]}
var
param=caml_call1(caml_call2(Stdlib_List[25],_az_,_k_),_ay_),
_aA_=param[1];
if(0 === _aA_)return 0;
var detail=param[2],_aB_=caml_call1(Stdlib_List[9],detail);
return [0,[0,f[2],_aA_,_aB_]]},
_N_=caml_call2(Stdlib_List[22],_M_,_L_),
_O_=
function(param)
{var detail=param[3],q=param[2],descr=param[1],_aq_=0;
if(detail)
var
_ar_=caml_call2(Stdlib_String[6],cst$7,detail),
_as_=caml_call2(Stdlib_Printf[4],_l_,_ar_);
else
var _as_=cst$9;
var
_at_=[0,caml_call1(Tyxml_html[219],_as_),_aq_],
_au_=[0,caml_call1(Tyxml_html[219],descr),_at_],
_av_=[0,caml_call1(Tyxml_html[219],cst$8),_au_],
_aw_=caml_call1(Stdlib[33],q),
_ax_=[0,caml_call1(Tyxml_html[219],_aw_),_av_];
return caml_call2(Tyxml_html[250],0,_ax_)},
_P_=caml_call1(caml_call1(Stdlib_List[19],_O_),_N_),
_Q_=[0,caml_call2(Tyxml_html[247],0,_P_),_K_],
_R_=[0,caml_call2(Tyxml_html[264],0,0),_Q_],
_S_=read_string_input_by_id(cst_depart$0),
_T_=[0,caml_call1(Tyxml_html[219],_S_),0],
_U_=[0,caml_call1(Tyxml_html[219],cst_Date_de_d_part),_T_],
_V_=[0,caml_call2(Tyxml_html[254],0,_U_),0],
_W_=[0,caml_call2(Tyxml_html[241],0,_V_),_R_],
_X_=read_string_input_by_id(cst_arrivee$0),
_Y_=[0,caml_call1(Tyxml_html[219],_X_),0],
_Z_=[0,caml_call1(Tyxml_html[219],cst_Date_d_arriv_e),_Y_],
___=[0,caml_call2(Tyxml_html[254],0,_Z_),0],
_$_=[0,caml_call2(Tyxml_html[241],0,___),_W_],
_aa_=read_string_input_by_id(cst_nom_prenom$0),
_ab_=[0,caml_call1(Tyxml_html[219],_aa_),0],
_ac_=[0,caml_call1(Tyxml_html[219],cst_Locataire),_ab_],
_ad_=[0,caml_call2(Tyxml_html[254],0,_ac_),0],
_ae_=[0,caml_call2(Tyxml_html[241],0,_ad_),_$_],
_af_=caml_call2(Tyxml_html[244],0,_ae_),
_ag_=caml_call3(Tyxml_html[346],0,0,0),
t10=
caml_jsstring_of_string
(caml_call1(caml_call2(Stdlib_Format[133],_m_,_ag_),_af_));
return resume.innerHTML = t10}
return 0}
function reset_form(param)
{var
t12=caml_jsstring_of_string(cst_R_initialiser_compl_tement),
doit=Js_of_ocaml_Dom_html[8].confirm(t12) | 0;
return doit
?(set_string_input_by_id(cst_nom_prenom$1,cst$12),
set_string_input_by_id(cst_arrivee$1,cst$13),
set_string_input_by_id(cst_depart$1,cst$14),
caml_call1
(caml_call1(Stdlib_List[17],zero_int_input_by_id),all_names),
compute(0))
:doit}
caml_call2(Js_of_ocaml_Js[46],cst_compute,compute);
caml_call2(Js_of_ocaml_Js[46],cst_reset_form,reset_form);
var Dune_exe_Mechanic=[0];
runtime.caml_register_global(68,Dune_exe_Mechanic,"Dune__exe__Mechanic");
return}
(globalThis));
//# 1 "../.js/stdlib/std_exit.cmo.js"
(function(globalThis)
{"use strict";
var runtime=globalThis.jsoo_runtime;
function caml_call1(f,a0)
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
var global_data=runtime.caml_get_global_data(),Stdlib=global_data.Stdlib;
caml_call1(Stdlib[103],0);
var Std_exit=[0];
runtime.caml_register_global(1,Std_exit,"Std_exit");
return}
(globalThis));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtZWNoYW5pYy5iYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJuYW1lcyI6WyJPYmplY3QiLCJnbG9iYWxUaGlzIiwidGhpcyIsImdldCIsIl9UXyIsImdsb2JhbCIsInNlbGYiLCJjYW1sX2ludDY0X2lzX3plcm8iLCJ4IiwiY2FtbF9zdHJfcmVwZWF0IiwibiIsInMiLCJyIiwibCIsImNhbWxfaW50NjRfb2Zmc2V0IiwiTWF0aCIsImNhbWxfcmFpc2VfY29uc3RhbnQiLCJ0YWciLCJjYW1sX2dsb2JhbF9kYXRhIiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJ5IiwicSIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIiwiYSIsImkiLCJsZW4iLCJmIiwiU3RyaW5nIiwibnVsbCIsImNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMiLCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIiwiY2FtbF9yYWlzZV93aXRoX2FyZyIsImFyZyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJiIiwidCIsImMiLCJjMSIsImMyIiwidiIsImoiLCJNbEJ5dGVzIiwiY29udGVudHMiLCJsZW5ndGgiLCJjb250ZW50IiwiY2FtbF9ieXRlc19vZl9qc2J5dGVzIiwiY2FtbF9zdHJpbmdfb2ZfanNieXRlcyIsImNhbWxfcmFpc2Vfd2l0aF9zdHJpbmciLCJtc2ciLCJjYW1sX2ludmFsaWRfYXJndW1lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJidWZmZXIiLCJjYW1sX2ludDY0X2Zvcm1hdCIsIndiYXNlIiwiY3Z0YmwiLCJwIiwiY2FtbF9leHBtMV9mbG9hdCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJuYW1lIiwiY2FtbF9jdXJyZW50X2RpciIsImNhbWxfbWFrZV9wYXRoIiwiY29tcDAiLCJjb21wIiwibmNvbXAiLCJjYW1sX3V0Zjhfb2ZfdXRmMTYiLCJkIiwiY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyIsImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIiwidW5peF9lcnJvciIsIm1ha2VfdW5peF9lcnJfYXJncyIsImNvZGUiLCJzeXNjYWxsIiwiZXJybm8iLCJ2YXJpYW50IiwiYXJncyIsImNhbWxfbmFtZWRfdmFsdWVzIiwiY2FtbF9uYW1lZF92YWx1ZSIsIm5tIiwiY2FtbF9yYWlzZV93aXRoX2FyZ3MiLCJjYW1sX2lzX21sX2J5dGVzIiwiY2FtbF9pc19tbF9zdHJpbmciLCJjYW1sX2J5dGVzX29mX2FycmF5IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX3JhaXNlX3N5c19lcnJvciIsImNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlIiwiY2FtbF9ieXRlc19ib3VuZF9lcnJvciIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfYnl0ZXNfZ2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfY29udmVydF9ieXRlc190b19hcnJheSIsIkFycmF5IiwiY2FtbF9ibGl0X2J5dGVzIiwiczEiLCJpMSIsInMyIiwiaTIiLCJjYW1sX2JsaXRfc3RyaW5nIiwiZSIsIk1sRmlsZSIsIk1sRmFrZUZpbGUiLCJvbGQiLCJidWYiLCJwb3MiLCJjbGVuIiwibmV3X3N0ciIsIm9sZF9kYXRhIiwiTWxGYWtlRGV2aWNlIiwicmVzIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsIm0iLCJvayIsImZpbGUiLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX2FycmF5X29mX3N0cmluZyIsImNhbWxfYXJyYXlfb2ZfYnl0ZXMiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2J5dGVzX3NldCIsIk1sTm9kZUZpbGUiLCJmZCIsInJlcXVpcmUiLCJlcnIiLCJidWZfb2Zmc2V0IiwiTWxOb2RlRGV2aWNlIiwiY29uc3RzIiwia2V5IiwibyIsImpzX3N0YXRzIiwidG9fZGlyIiwidGFyZ2V0IiwibGluayIsImZpbGVfa2luZCIsImNhbWxfZ2V0X3Jvb3QiLCJjYW1sX2ZhaWx3aXRoIiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9zeXNfaXNfZGlyZWN0b3J5IiwiY2FtbF9yYWlzZV9ub3RfZm91bmQiLCJjYW1sX3N5c19nZXRlbnYiLCJnIiwidW5kZWZpbmVkIiwic2hpZnRfcmlnaHRfbmF0IiwibmF0MSIsIm9mczEiLCJsZW4xIiwibmF0MiIsIm9mczIiLCJuYml0cyIsIndyYXAiLCJjYW1sX2dyX3N0YXRlIiwiY2FtbF9ncl9zdGF0ZV9nZXQiLCJjYW1sX2dyX3BvaW50X2NvbG9yIiwiaW0iLCJNbE9iamVjdFRhYmxlIiwiTmFpdmVMb29rdXAiLCJvYmpzIiwiY2FtbF9zeXNfcmVuYW1lIiwib19yb290Iiwibl9yb290IiwiY2FtbF9sb2cxMF9mbG9hdCIsInVuaXhfdW5saW5rIiwiY2FtbF9ydW50aW1lX3dhcm5pbmdzIiwiY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5ncyIsImJvb2wiLCJjYW1sX2NsYXNzaWZ5X2Zsb2F0IiwiaXNGaW5pdGUiLCJpc05hTiIsInVuaXhfcm1kaXIiLCJjYW1sX21sX3JlZmlsbF9pbnB1dCIsImNoYW4iLCJzdHIiLCJzdHJfbGVuIiwiY2FtbF9tbF9jaGFubmVscyIsImNhbWxfbWxfbWF5X3JlZmlsbF9pbnB1dCIsImNoYW5pZCIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX21sX2lucHV0X3NjYW5fbGluZSIsImNhbWxfZ2NfbWlub3IiLCJjYW1sX2ludDY0X29mX2J5dGVzIiwiY2FtbF9iYV91aW50OF9nZXQ2NCIsImJhIiwiaTAiLCJvZnMiLCJiMSIsImIyIiwiYjMiLCJiNCIsImI1IiwiYjYiLCJiNyIsImI4IiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfaW50NjRfbWFyc2hhbCIsIndyaXRlciIsInNpemVzIiwiY2FtbF9iYV9udW1fZGltcyIsImNhbWxfcmV0dXJuX2V4bl9jb25zdGFudCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NyZWF0ZV9maWxlIiwianNvb19jcmVhdGVfZmlsZSIsImNhbWxfZnNfaW5pdCIsInRtcCIsImNhbWxfc2V0X3BhcnNlcl90cmFjZSIsImNhbWxfbGlzdF9vZl9qc19hcnJheSIsInVuaXhfZ2V0dGltZW9mZGF5IiwiRGF0ZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJudW1fZGlnaXRzX25hdCIsIm5hdCIsImNhbWxfaGFzaF9uYXQiLCJjYW1sX2NhbGxfZ2VuIiwiYXJnc0xlbiIsImV4dHJhX2FyZ3MiLCJhcmd1bWVudHMiLCJuYXJncyIsImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHMiLCJjYW1sX3N5c19jaGRpciIsImRpciIsImNhbWxfZ2NfY291bnRlcnMiLCJjYW1sX2dyX3N5bmNocm9uaXplIiwidW5peF9oYXNfc3ltbGluayIsInVuaXQiLCJsb2cyX29rIiwianNvb19mbG9vcl9sb2cyIiwiSW5maW5pdHkiLCJjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQiLCJmbG9hdDMyYSIsImludDMyYSIsImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIiwiY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IiwiZXhwIiwiayIsInIzIiwicjIiLCJyMSIsImNhbWxfYmFfc2VyaWFsaXplIiwic3oiLCJjb21wbGV4IiwiY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudCIsImtpbmQiLCJjYW1sX2JhX2NyZWF0ZV9idWZmZXIiLCJzaXplIiwidmlldyIsImRhdGEiLCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwicmUiLCJ0b3RhbCIsImsxIiwiazIiLCJNbF9CaWdhcnJheV9jXzFfMSIsImNhbWxfYmFfY3JlYXRlX3Vuc2FmZSIsInNpemVfcGVyX2VsZW1lbnQiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibnVtX2RpbXMiLCJzaXplX2RpbSIsInNpemVfZGltX2hpIiwic2l6ZV9kaW1fbG8iLCJzaXh0eSIsImludDY0IiwiY2FtbF9iYV9jb21wYXJlIiwiY2FtbF9oYXNoX21peF9pbnQ2NCIsImNhbWxfaGFzaF9taXhfZmxvYXQiLCJ2MCIsImNhbWxfYmFfaGFzaCIsIm51bV9lbHRzIiwidyIsImNhbWxfaW50MzJfdW5tYXJzaGFsIiwiY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsIiwiY2FtbF9pbnQ2NF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X2NvbXBhcmUiLCJjYW1sX2ludDY0X2hhc2giLCJjYW1sX2N1c3RvbV9vcHMiLCJjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20iLCJjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20iLCJudW0iLCJjdXN0b20iLCJzd2FwIiwiY2FtbF9jb21wYXJlX3ZhbF90YWciLCJOdW1iZXIiLCJjYW1sX2ludF9jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9zdHJpbmdfY29tcGFyZSIsImNhbWxfY29tcGFyZV92YWwiLCJzdGFjayIsInRhZ19hIiwidGFnX2IiLCJjYW1sX2dyZWF0ZXJ0aGFuIiwiZGl2X2hlbHBlciIsInoiLCJkaXZfZGlnaXRfbmF0IiwibmF0cSIsIm9mc3EiLCJuYXRyIiwib2ZzciIsInJlbSIsIm51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdCIsInNoaWZ0X2xlZnRfbmF0IiwiTWxOYXQiLCJjcmVhdGVfbmF0IiwiYXJyIiwic2V0X3RvX3plcm9fbmF0IiwiaW5jcl9uYXQiLCJjYXJyeV9pbiIsImNhcnJ5IiwiYWRkX25hdCIsImxlbjIiLCJuYXRfb2ZfYXJyYXkiLCJtdWx0X2RpZ2l0X25hdCIsIm5hdDMiLCJvZnMzIiwieDEiLCJ4MiIsIngzIiwiZGVjcl9uYXQiLCJib3Jyb3ciLCJzdWJfbmF0IiwiY29tcGFyZV9uYXQiLCJkaXZfbmF0IiwicXVvIiwiY2FtbF9iYV9ibGl0Iiwic3JjIiwiZHN0IiwiaXNfZGlnaXRfaW50IiwiY2FtbF9pbnQ2NF9kaXYiLCJjYW1sX2pzX2h0bWxfZW50aXRpZXMiLCJlbnRpdHkiLCJ0ZW1wIiwiZG9jdW1lbnQiLCJjYW1sX3N0cmluZ191bnNhZmVfc2V0IiwiY2FtbF9pbnQ2NF9vZl9mbG9hdCIsImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0IiwiY2FtbF9iYV9zZXRfMiIsImNhbWxfYXJndiIsIm1haW4iLCJhcmd2IiwiYXJnczIiLCJjYW1sX2V4ZWN1dGFibGVfbmFtZSIsImNhbWxfanNfZXZhbF9zdHJpbmciLCJldmFsIiwic2VyaWFsaXplX25hdCIsImNhbWxfbWVtcHJvZl9zZXQiLCJfY29udHJvbCIsImNhbWxfc3lzX2V4aXQiLCJjYW1sX2NoYW5uZWxfZGVzY3JpcHRvciIsImNhbWxfanNfZnJvbV9hcnJheSIsImNhbWxfYmFfcmVzaGFwZSIsInZpbmQiLCJuZXdfZGltIiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9zZXRfb29faWQiLCJjYW1sX2dyX2ZpbGxfcmVjdCIsImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhIiwic3RyMSIsInBvczEiLCJiYTIiLCJwb3MyIiwic2xpY2UiLCJjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUiLCJqc25hbWUiLCJjYW1sX2dldF9nbG9iYWxfZGF0YSIsImNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQiLCJjYW1sX2JhX3VpbnQ4X2dldDE2IiwiY2FtbF9jb21wYXJlIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfaW50NjRfdG9fZmxvYXQiLCJjYW1sX2JhX2dldF8xIiwiY2FtbF9iaWdzdHJpbmdfbWVtY21wIiwiY2FtbF9uZXdfc3RyaW5nIiwiY2FtbF9lcmZfZmxvYXQiLCJhMSIsImEyIiwiYTMiLCJhNCIsImE1IiwiY2FtbF9iYV91aW50OF9nZXQzMiIsImNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGgiLCJjYW1sX29ial9ibG9jayIsImNhbWxfZ3JfY2xlYXJfZ3JhcGgiLCJiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyIiwiYnMiLCJjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkIiwiX3VuaXQiLCJseG9yX2RpZ2l0X25hdCIsImNhbWxfb2JqX2FkZF9vZmZzZXQiLCJjYW1sX2ZpbmFsX3JlbGVhc2UiLCJjYW1sX2pzX3RvX2FycmF5IiwiY2FtbF9ncl9wbG90IiwiY29sb3IiLCJjYW1sX2J5dGVzX3NldDE2IiwiaTE2IiwiY2FtbF9zdHJpbmdfc2V0MTYiLCJjYW1sX2J5dGVzX3NldDY0IiwiaTY0IiwiY2FtbF9pbnQ2NF9ic3dhcCIsImNhbWxfZmlsbF9ieXRlcyIsImNhbWxfZmlsbF9zdHJpbmciLCJjYW1sX2djX21ham9yIiwiY2FtbF9sZXhfYXJyYXkiLCJjYW1sX2xleF9lbmdpbmUiLCJ0YmwiLCJzdGFydF9zdGF0ZSIsImxleGJ1ZiIsImxleF9idWZmZXIiLCJsZXhfYnVmZmVyX2xlbiIsImxleF9zdGFydF9wb3MiLCJsZXhfY3Vycl9wb3MiLCJsZXhfbGFzdF9wb3MiLCJsZXhfbGFzdF9hY3Rpb24iLCJsZXhfZW9mX3JlYWNoZWQiLCJsZXhfYmFzZSIsImxleF9iYWNrdHJrIiwibGV4X2RlZmF1bHQiLCJsZXhfdHJhbnMiLCJsZXhfY2hlY2siLCJzdGF0ZSIsImJhc2UiLCJiYWNrdHJrIiwidW5peF9nZXR1aWQiLCJjYW1sX3N5c19maWxlX2V4aXN0cyIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3QiLCJjYW1sX2FycmF5X3N1YiIsImNhbWxfYnl0ZXNfZXF1YWwiLCJjYW1sX2dyX3NpemVfeCIsImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMiLCJvc190eXBlIiwiY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiIsImNhbWxfY29zaF9mbG9hdCIsImNhbWxfZXBoZV9rZXlfb2Zmc2V0IiwiY2FtbF93ZWFrX2NoZWNrIiwiY2FtbF9lcGhlX2NoZWNrX2tleSIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2dyX3RleHRfc2l6ZSIsInR4dCIsImNhbWxfbGV4X3J1bl9tZW0iLCJtZW0iLCJjdXJyX3BvcyIsImNhbWxfbGV4X3J1bl90YWciLCJjYW1sX25ld19sZXhfZW5naW5lIiwibGV4X21lbSIsImxleF9iYXNlX2NvZGUiLCJsZXhfYmFja3Rya19jb2RlIiwibGV4X2RlZmF1bHRfY29kZSIsImxleF90cmFuc19jb2RlIiwibGV4X2NoZWNrX2NvZGUiLCJsZXhfY29kZSIsInBjX29mZiIsInBzdGF0ZSIsImJhc2VfY29kZSIsImNhbWxfYmFfdWludDhfc2V0NjQiLCJjYW1sX3N5c19leGVjdXRhYmxlX25hbWUiLCJjYW1sX2xlc3NlcXVhbCIsImNhbWxfYWNvc2hfZmxvYXQiLCJjYW1sX21sX2ZsdXNoIiwib3V0cHV0IiwiY2FtbF9tbF9zZWVrX291dF82NCIsImNvbXBhcmVfbmF0X3JlYWwiLCJjYW1sX2djX3NldCIsImNhbWxfanNfZ2V0IiwiY2FtbF9tbF9zZXRfYnVmZmVyZWQiLCJjYW1sX2djX2NvbXBhY3Rpb24iLCJjYW1sX3dlYWtfZ2V0IiwiY2FtbF9lcGhlX2dldF9rZXkiLCJjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhIiwid2luX2NsZWFudXAiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX3N5c19pc2F0dHkiLCJfY2hhbiIsImlzX2RpZ2l0X3plcm8iLCJ1bml4X2luZXRfYWRkcl9vZl9zdHJpbmciLCJjYW1sX2pzX3NldCIsImNhbWxfYXJyYXlfZ2V0IiwiYXJyYXkiLCJpbmRleCIsImNhbWxfbG9nMl9mbG9hdCIsImNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudCIsImNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlIiwiY2FtbF9pbnQ2NF9zdWIiLCJjYW1sX21sX3NlZWtfaW5fNjQiLCJjYW1sX2ludDY0X3NoaWZ0X2xlZnQiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9zeXNfY29uc3RfaW50X3NpemUiLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayIsImNhbWxfaXNfanMiLCJjYW1sX2JhX2RpbSIsImNhbWxfYmFfZGltXzEiLCJ1bml4X2xvY2FsdGltZSIsImRfbnVtIiwiamFudWFyeWZpcnN0IiwiZG95IiwiamFuIiwianVsIiwic3RkVGltZXpvbmVPZmZzZXQiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfd2Vha19jcmVhdGUiLCJjYW1sX2VwaGVfY3JlYXRlIiwiY2FtbF9qc190b19ieXRlX3N0cmluZyIsInVuaXhfbWt0aW1lIiwidG0iLCJ0bTIiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX2J5dGVzX2dldDY0IiwiY2FtbF93ZWFrX3NldCIsImNhbWxfc3lzX3JlbW92ZSIsImNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yIiwiY2FtbF9zdHJpbmdfZ2V0MzIiLCJjYW1sX2h5cG90X2Zsb2F0IiwiY2FtbF9qc19jYWxsIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfZXBoZV91bnNldF9rZXkiLCJjYW1sX2hhc2hfbWl4X2J5dGVzX2FyciIsImNhbWxfaGFzaF9taXhfanNieXRlcyIsImNhbWxfbWxfYnl0ZXNfY29udGVudCIsImNhbWxfaGFzaF9taXhfYnl0ZXMiLCJjYW1sX2J5dGVzX2xlc3N0aGFuIiwiY2FtbF9lcmZjX2Zsb2F0IiwiY2FtbF9ncl9maWxsX3BvbHkiLCJhciIsImNhbWxfZ2NfcXVpY2tfc3RhdCIsImNhbWxfcmFpc2VfZW5kX29mX2ZpbGUiLCJjYW1sX21sX2lucHV0X2ludCIsImNhbWxfZ3JfZGlzcGxheV9tb2RlIiwiY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzIiwibnRoX2RpZ2l0X25hdCIsImNhbWxfYXJyYXlfYmxpdCIsImNhbWxfZmxvYXRfb2Zfc3RyaW5nIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3N5c19nZXRjd2QiLCJjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIiwiY2FtbF9saXN0X3RvX2pzX2FycmF5IiwiY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGUiLCJjYW1sX291dHB1dF92YWwiLCJXcml0ZXIiLCJ2YWx1ZSIsImZsYWdzIiwibm9fc2hhcmluZyIsImNsb3N1cmVzIiwiaW50ZXJuX29ial90YWJsZSIsIm1lbW8iLCJleGlzdGluZ19vZmZzZXQiLCJleHRlcm5fcmVjIiwib3BzIiwic3pfMzJfNjQiLCJoZWFkZXJfcG9zIiwib2xkX3BvcyIsInR5cGVfb2ZfdiIsImNhbWxfc3RyaW5nX29mX2FycmF5IiwiY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIiwiY2FtbF9yYWlzZV9ub3RfYV9kaXIiLCJjYW1sX3N5c19zeXN0ZW1fY29tbWFuZCIsImNtZCIsInVuaXhfaXNhdHR5IiwiZmlsZURlc2NyaXB0b3IiLCJ0dHkiLCJjYW1sX2pzX2Vycm9yX29mX2V4Y2VwdGlvbiIsImRlc2VyaWFsaXplX25hdCIsImluaXRpYWxpemVfbmF0IiwiY2FtbF9ncl9vcGVuX3N1YndpbmRvdyIsInVuaXhfbHN0YXQiLCJ1bml4X2xzdGF0XzY0IiwianNfcHJpbnRfc3Rkb3V0IiwiY2FtbF9jb3B5c2lnbl9mbG9hdCIsImNhbWxfZ3Jfc2V0X3RleHRfc2l6ZSIsImNhbWxfbWQ1X2J5dGVzIiwiYWRkIiwieHgiLCJmZiIsImdnIiwiaGgiLCJpaSIsIm1kNSIsImNhbWxfYmFfc2V0X2dlbmVyaWMiLCJjYW1sX2VwaGVfc2V0X2tleSIsImNhbWxfYnl0ZXNfbGVzc2VxdWFsIiwiY2FtbF9zdHJpbmdfbGVzc2VxdWFsIiwiY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsIiwiY2FtbF9pbnQ2NF9hZGQiLCJjYW1sX25leHRhZnRlcl9mbG9hdCIsImJpdHMiLCJvbmUiLCJjYW1sX2dyX3NpemVfeSIsImNhbWxfbWxfcG9zX2luIiwiY2FtbF9pbnQ2NF9hbmQiLCJjYW1sX3N5c19jb25zdF93b3JkX3NpemUiLCJjYW1sX3N0ZF9vdXRwdXQiLCJzbGVuIiwianNfcHJpbnRfc3RkZXJyIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImlkeCIsImluZm8iLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiTWxTdHJpbmdSZWFkZXIiLCJjYW1sX2Zsb2F0X29mX2J5dGVzIiwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciIsIl9tYWdpYyIsIl9ibG9ja19sZW4iLCJudW1fb2JqZWN0cyIsIl9zaXplXzMyIiwiX3NpemVfNjQiLCJvYmpfY291bnRlciIsImludGVybl9yZWMiLCJoZWFkZXIiLCJleHBlY3RlZF9zaXplIiwiY2FtbF9zdHJpbmdfb2ZfYnl0ZXMiLCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMiLCJjYW1sX3N0cmluZ19nZXQiLCJyZV9tYXRjaCIsInJlX3dvcmRfbGV0dGVycyIsIm9wY29kZXMiLCJpc193b3JkX2xldHRlciIsImluX2JpdHNldCIsInJlX21hdGNoX2ltcGwiLCJwYXJ0aWFsIiwicHJvZyIsImNwb29sIiwibm9ybXRhYmxlIiwibnVtZ3JvdXBzIiwibnVtcmVnaXN0ZXJzIiwic3RhcnRjaGFycyIsInBjIiwicXVpdCIsImdyb3VwcyIsInJlX3JlZ2lzdGVyIiwiYmFja3RyYWNrIiwiaXRlbSIsInB1c2giLCJhY2NlcHQiLCJwcmVmaXhfbWF0Y2giLCJvcCIsInNhcmciLCJ1YXJnIiwiZ3JvdXAiLCJFcnJvciIsInJlX3NlYXJjaF9iYWNrd2FyZCIsImNhbWxfanNfZnJvbV9zdHJpbmciLCJjYW1sX2JhX3N1YiIsImNoYW5nZWRfZGltIiwibXVsIiwibmV3X2RpbXMiLCJuZXdfZGF0YSIsImNhbWxfZ2NfZnVsbF9tYWpvciIsImNhbWxfYnl0ZXNfc2V0MzIiLCJpMzIiLCJjYW1sX2dyX3NpZ2lvX3NpZ25hbCIsImNhbWxfYmFfdWludDhfc2V0MzIiLCJjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCIsImNhbWxfc2lnbmJpdF9mbG9hdCIsImNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgiLCJjYW1sX2dyX3NldF9mb250IiwiY2FtbF9ncl9zZXRfY29sb3IiLCJjb252ZXJ0IiwibnVtYmVyIiwiY19zdHIiLCJjYW1sX2dyX21vdmV0byIsImNhbWxfZ3JfcmVzaXplX3dpbmRvdyIsImNhbWxfZ3Jfc3RhdGVfaW5pdCIsImNhbWxfZ3JfY3VycmVudF94IiwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IiwidGEiLCJjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkiLCJjYW1sX21sX3NlZWtfb3V0IiwiY2FtbF9qc190eXBlb2YiLCJjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZSIsImJ0IiwiY2FtbF9ncl9saW5ldG8iLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUiLCJjYW1sX2JhX2RpbV8zIiwiY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbiIsImNhbWxfZm9ybWF0X2V4Y2VwdGlvbiIsImJ1Y2tldCIsInN0YXJ0IiwiY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24iLCJoYW5kbGVyIiwiYXRfZXhpdCIsImNhbWxfZXBoZV9kYXRhX29mZnNldCIsImNhbWxfZXBoZV9jaGVja19kYXRhIiwiY2FtbF9ieXRlc19nZXQxNiIsImNhbWxfb2JqX21ha2VfZm9yd2FyZCIsImNhbWxfanNfZnJvbV9ib29sIiwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lIiwiY2FtbF9leHAyX2Zsb2F0IiwiY2FtbF9ncl9jbG9zZV9ncmFwaCIsImNhbWxfY3JlYXRlX3N0cmluZyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfbWQ1X2NoYW4iLCJjaGFuX2xlbiIsImNhbWxfb2JqX2R1cCIsImNhbWxfd2Vha19nZXRfY29weSIsImNhbWxfYXRhbmhfZmxvYXQiLCJjYW1sX21sX291dHB1dF9ieXRlcyIsInN0cmluZyIsImpzc3RyaW5nIiwiaWQiLCJjYW1sX21sX291dHB1dCIsImNhbWxfZXBoZV9nZXRfZGF0YSIsImNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfbWxfaXNfYnVmZmVyZWQiLCJjYW1sX2FycmF5X2FwcGVuZCIsImwxIiwibDIiLCJjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbCIsImNhbWxfanNfZXhwciIsImNhbWxfaW50NjRfbXVsIiwiY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQiLCJjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyIsImNhbWxfZXZlbnRsb2dfcmVzdW1lIiwiY2FtbF9oYXNoX3VuaXZfcGFyYW0iLCJjb3VudCIsImxpbWl0Iiwib2JqIiwiaGFzaF9hY2N1IiwiaGFzaF9hdXgiLCJqc2J5dGVzIiwiY2FtbF9zdHJpbmdfZXF1YWwiLCJjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXIiLCJyZV9yZXBsYWNlbWVudF90ZXh0IiwicmVwbCIsIm9yaWciLCJjdXIiLCJlbmQiLCJjYW1sX3B1cmVfanNfZXhwciIsImJsaXRfbmF0IiwiY2FtbF9pbnQ2NF91bHQiLCJjYW1sX2ludDY0X3hvciIsImNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXMiLCJiYTEiLCJieXRlczIiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwianNvb19jcmVhdGVfZmlsZV9leHRlcm4iLCJjYW1sX3RvX2pzX3N0cmluZyIsImNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludDY0X29mX3N0cmluZyIsImJhc2U2NCIsInRocmVzaG9sZCIsInJlX3NlYXJjaF9mb3J3YXJkIiwiY2FtbF9ibGl0X3N0cmluZ190b19iaWdzdHJpbmciLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX21sX3NlZWtfaW4iLCJjYW1sX3N5c19yZWFkX2RpcmVjdG9yeSIsImNhbWxfbWxfb3V0cHV0X2NoYXIiLCJjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIiLCJjYW1sX29ial9pc19ibG9jayIsImNhbWxfbWxfaW5wdXRfY2hhciIsImNhbWxfb2JqX3NldF9yYXdfZmllbGQiLCJjYW1sX2pzX3ZhciIsImNhbWxfdHJ1bmNfZmxvYXQiLCJjYW1sX2VwaGVfYmxpdF9kYXRhIiwiY2FtbF9pc19wcmludGFibGUiLCJjYW1sX2VxdWFsIiwicmVfcGFydGlhbF9tYXRjaCIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwiYnVmZiIsIm5vdyIsImNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUiLCJjYW1sX2JhX2dldF8yIiwid2luX2hhbmRsZV9mZCIsImNhbWxfYmFfdWludDhfc2V0MTYiLCJ3aW5fZmlsZWRlc2NyX29mX2NoYW5uZWwiLCJjYW1sX2pzX2RlbGV0ZSIsImNhbWxfaW50X29mX3N0cmluZyIsImNhbWxfbGlzdF9tb3VudF9wb2ludCIsInByZXYiLCJjYW1sX21hcnNoYWxfY29uc3RhbnRzIiwiY2FtbF9vYmpfcmF3X2ZpZWxkIiwiY2FtbF9qc19lcXVhbHMiLCJiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkiLCJjYW1sX2dyX2FyY19hdXgiLCJjdHgiLCJjeCIsImN5IiwicnkiLCJyeCIsInJvdCIsInhQb3MiLCJ5UG9zIiwieFBvc19wcmV2IiwieVBvc19wcmV2Iiwic3BhY2UiLCJkZWx0YSIsImNhbWxfZ3JfZmlsbF9hcmMiLCJjYW1sX2JhX3NsaWNlIiwibnVtX2luZHMiLCJzdWJfZGltcyIsImNhbWxfbWFyc2hhbF9kYXRhX3NpemUiLCJnZXQzMiIsImNhbWxfaW5wdXRfdmFsdWUiLCJjYW1sX2JhX2tpbmQiLCJjYW1sX2pzX2Z1bl9jYWxsIiwiY2FtbF9nY19tYWpvcl9zbGljZSIsIndvcmsiLCJjYW1sX2pzX3B1cmVfZXhwciIsImNvbXBhcmVfZGlnaXRzX25hdCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX2dyX3dhaXRfZXZlbnQiLCJfZXZsIiwiY2FtbF9ncl9zaWdpb19oYW5kbGVyIiwiY2FtbF9oYXNoX21peF9iaWdzdHJpbmciLCJjYW1sX3JlY29yZF9iYWNrdHJhY2UiLCJ1bml4X2dtdGltZSIsImNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSIsImNhbWxfc3lzX2dldF9jb25maWciLCJ1bml4X3RpbWUiLCJjYW1sX21sX291dF9jaGFubmVsc19saXN0IiwiY2FtbF9hc2luaF9mbG9hdCIsImJpZ3N0cmluZ19vZl9hcnJheV9idWZmZXIiLCJhYiIsImNhbWxfbW9kIiwiY2FtbF9iYV9pbml0IiwicmVfc3RyaW5nX21hdGNoIiwiQmlnU3RyaW5nUmVhZGVyIiwiY2FtbF9ncl9kdW1wX2ltYWdlIiwiY2FtbF9iYV9nZXRfZ2VuZXJpYyIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJjYW1sX21vdW50X2F1dG9sb2FkIiwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYSIsImNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fYmlnc3RyaW5nIiwiY2FtbF9zdHJpbmdfbGVzc3RoYW4iLCJjYW1sX3N0cmluZ19ncmVhdGVydGhhbiIsImNhbWxfZGl2IiwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHkiLCJjYW1sX21lbXByb2Zfc3RhcnQiLCJyYXRlIiwic3RhY2tfc2l6ZSIsInRyYWNrZXIiLCJjYW1sX3N5c19nZXRfYXJndiIsImNhbWxfanNfdG9fYm9vbCIsImNhbWxfZ3JfY3JlYXRlX2ltYWdlIiwiY2FtbF9lcGhlX2dldF9rZXlfY29weSIsImNhbWxfbGVzc3RoYW4iLCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IiwiY2FtbF9yZWdpc3Rlcl9nbG9iYWwiLCJuYW1lX29wdCIsIm11bHRfbmF0IiwibGVuMyIsInNxdWFyZV9uYXQiLCJjYW1sX2pzX2Zyb21fZmxvYXQiLCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIiwiY2FtbF9nY19zdGF0IiwiY2FtbF9nZXRfbWFqb3JfY3JlZGl0IiwiY2FtbF9zeXNfbW9kaWZ5X2FyZ3YiLCJjYW1sX21ldGhvZF9jYWNoZSIsImNhbWxfZ2V0X3B1YmxpY19tZXRob2QiLCJjYWNoZWlkIiwibWV0aHMiLCJsaSIsImNhbWxfanNfZ2V0X2NvbnNvbGUiLCJjYW1sX3N5c191bnNhZmVfZ2V0ZW52IiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4iLCJyZWZpbGwiLCJmcyIsImNoYW5uZWwiLCJiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXkiLCJjYW1sX3JvdW5kX2Zsb2F0IiwidW5peF9zdGF0IiwidW5peF9zdGF0XzY0IiwiY2FtbF9vanNfbmV3X2FyciIsIkYiLCJjb21wbGVtZW50X25hdCIsImNhbWxfanNfcmVnZXhwcyIsImNhbWxfanNfaHRtbF9lc2NhcGUiLCJjYW1sX2JhX2RpbV8yIiwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzIiwiY2FtbF9zaW5oX2Zsb2F0IiwiY2FtbF9sZGV4cF9mbG9hdCIsImNhbWxfZ3Jfc3RhdGVfc2V0IiwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCIsImFyaXR5IiwiY2FtbF9nY19taW5vcl93b3JkcyIsImNhbWxfYmFfc2V0XzEiLCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayIsImxhbmRfZGlnaXRfbmF0IiwiY2FtbF9pbnQ2NF9tb2QiLCJ1bml4X3JlYWRsaW5rIiwiY2FtbF9vYmpfc2V0X3RhZyIsImNhbWxfaW50MzJfYnN3YXAiLCJ3aW5fc3RhcnR1cCIsImNhbWxfYmFfc2V0XzMiLCJjYW1sX2pzX2luc3RhbmNlb2YiLCJjYW1sX2dldF9tYWpvcl9idWNrZXQiLCJjYW1sX2JsaXRfYmlnc3RyaW5nX3RvX3N0cmluZyIsInNldF9kaWdpdF9uYXRfbmF0aXZlIiwiZGlnaXQiLCJudGhfZGlnaXRfbmF0X25hdGl2ZSIsImNhbWxfc3RyaW5nX3NldDY0IiwiY2FtbF9ncl9zdGF0ZV9jcmVhdGUiLCJjYW52YXMiLCJjb250ZXh0IiwiY2FtbF9qc193cmFwX2NhbGxiYWNrIiwiY2FtbF9ncl9kcmF3X2FyYyIsImNhbWxfYmFfbWFwX2ZpbGUiLCJ2ZmQiLCJzaGFyZWQiLCJjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlIiwiYXJnbiIsInVuaXhfc3ltbGluayIsInNyY19yb290IiwiZHN0X3Jvb3QiLCJjYW1sX2JhX2NyZWF0ZV9mcm9tIiwiZGF0YTEiLCJkYXRhMiIsImpzdHlwIiwiY2FtbF90YW5oX2Zsb2F0IiwiY2FtbF9ncl9kcmF3X3N0ciIsImR4IiwiY2FtbF9ncl9kcmF3X3N0cmluZyIsImNhbWxfZ3JfZHJhd19jaGFyIiwiY2FtbF91bm1vdW50IiwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyIsImNhbWxfbWxfcG9zX2luXzY0IiwiY2FtbF9ncl9kcmF3X2ltYWdlIiwiaW1hZ2UiLCJjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSIsIl9jaGFubmVsIiwiY2FtbF9zdHJpbmdfc2V0IiwiY2FtbF9zeXNfcm1kaXIiLCJjYW1sX21sX3Bvc19vdXQiLCJjYW1sX3NwYWNldGltZV9lbmFibGVkIiwiY2FtbF9ieXRlc19ub3RlcXVhbCIsImNhbWxfcnVudGltZV9wYXJhbWV0ZXJzIiwiY2FtbF9qc19vYmplY3QiLCJjYW1sX2JhX2NyZWF0ZSIsImRpbXNfbWwiLCJjYW1sX3dlYWtfYmxpdCIsImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSIsImNhbWxfZm1hX2Zsb2F0IiwiU1BMSVQiLCJNSU5fVkFMVUUiLCJFUFNJTE9OIiwiQyIsIkEiLCJCIiwibXVsdGlwbHkiLCJhdCIsImFoaSIsImFsbyIsImJoaSIsImJsbyIsImFkanVzdCIsInNjYWxlIiwieHMiLCJ5cyIsInpzIiwieHkiLCJ1IiwiY2FtbF9ic3dhcDE2IiwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUiLCJjYW1sX2ZpbmFsX3JlZ2lzdGVyIiwiY2FtbF9ncl9kcmF3X3JlY3QiLCJjYW1sX3N0cmluZ19nZXQxNiIsImNhbWxfZXBoZV91bnNldF9kYXRhIiwiY2FtbF9vdXRwdXRfdmFsdWUiLCJjYW1sX2JhX2dldF8zIiwiY2FtbF9lcGhlX2JsaXRfa2V5IiwiY2FtbF9pbml0aWFsX3RpbWUiLCJjYW1sX3N5c190aW1lIiwiY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuIiwiY2FtbF9jaGVja19ib3VuZCIsInVuaXhfZ2V0cHd1aWQiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaCIsInNlZWQiLCJxdWV1ZSIsInJkIiwid3IiLCJjYW1sX29ial90YWciLCJGdW5jdGlvbiIsImNhbWxfYmFfdG9fdHlwZWRfYXJyYXkiLCJjYW1sX2J5dGVzX2dldDMyIiwiY2FtbF9mcmV4cF9mbG9hdCIsIm5lZyIsImNhbWxfc3RyaW5nX2dldDY0IiwiY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uIiwiY2FtbF9tbF9wb3Nfb3V0XzY0IiwiY2FtbF9ncl9jbG9zZV9zdWJ3aW5kb3ciLCJjYW1sX2Zsb2F0YXJyYXlfYmxpdCIsImNhbWxfZ2V0X21pbm9yX2ZyZWUiLCJjYW1sX3NldF9zdGF0aWNfZW52IiwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0IiwiY2FtbF9qc19uZXciLCJ1bml4X21rZGlyIiwicGVybSIsImNhbWxfZ3JfY3VycmVudF95IiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vYmpfdHJ1bmNhdGUiLCJjYW1sX2pzX3RvX3N0cmluZyIsImlzX2RpZ2l0X29kZCIsImNhbWxfcnVudGltZV92YXJpYW50IiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IiwiY2FtbF9hcnJheV9jb25jYXQiLCJjYW1sX2dyX29wZW5fZ3JhcGgiLCJzcGVjcyIsInN0YXR1cyIsIndpbiIsImRvYyIsInRpdGxlIiwiYm9keSIsImNhbWxfZXBoZV9zZXRfZGF0YSIsImNhbWxfbWFrZV9mbG9hdF92ZWN0IiwiY2FtbF9jYnJ0X2Zsb2F0IiwiY2FtbF9tZW1wcm9mX3N0b3AiLCJjYW1sX2V2ZW50bG9nX3BhdXNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSIsImNhbWxfbG9nMXBfZmxvYXQiLCJjYW1sX2ludDY0X29yIiwiY2FtbF9sYXp5X21ha2VfZm9yd2FyZCIsImxvcl9kaWdpdF9uYXQiLCJjYW1sX2dyX2JsaXRfaW1hZ2UiLCJpbTIiLCJjYW1sX2dyX3dpbmRvd19pZCIsImNhbWxfanNfb25faWUiLCJ1YSIsImNhbWxfaW50NjRfc2hpZnRfcmlnaHQiLCJjYW1sX2JhX2xheW91dCIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9hcnJheV9zZXQiLCJuZXd2YWwiLCJjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbCIsInNldF9kaWdpdF9uYXQiLCJjYW1sX2dyX2RvY19vZl9zdGF0ZSIsImNhbWxfbWxfb3V0cHV0X2ludCIsImNhbWxfb2JqX3dpdGhfdGFnIiwiY2FtbF9tbF9jaGFubmVsX3NpemUiLCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdCIsImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0Iiwic3R5bGUiLCJleHBfc2lnbiIsInNpZ25fc3RyIiwiY3N0IiwieF9zdHIiLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QiLCJjYW1sX2JhY2t0cmFjZV9zdGF0dXMiLCJjYW1sX3N5c19hcmd2IiwiY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIiwiY2FtbF9iYV9maWxsIiwiY2FtbF9tb2RmX2Zsb2F0IiwiY2FtbF9nY19nZXQiLCJjYW1sX2Zsb2F0X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19zZXQzMiIsImNhbWxfcGFyc2VfZW5naW5lIiwidGFibGVzIiwiZW52IiwiRVJSQ09ERSIsImxvb3AiLCJ0ZXN0c2hpZnQiLCJzaGlmdCIsInNoaWZ0X3JlY292ZXIiLCJyZWR1Y2UiLCJSRUFEX1RPS0VOIiwiUkFJU0VfUEFSU0VfRVJST1IiLCJHUk9XX1NUQUNLU18xIiwiR1JPV19TVEFDS1NfMiIsIkNPTVBVVEVfU0VNQU5USUNfQUNUSU9OIiwiQ0FMTF9FUlJPUl9GVU5DVElPTiIsImVudl9zX3N0YWNrIiwiZW52X3Zfc3RhY2siLCJlbnZfc3ltYl9zdGFydF9zdGFjayIsImVudl9zeW1iX2VuZF9zdGFjayIsImVudl9zdGFja3NpemUiLCJlbnZfc3RhY2tiYXNlIiwiZW52X2N1cnJfY2hhciIsImVudl9sdmFsIiwiZW52X3N5bWJfc3RhcnQiLCJlbnZfc3ltYl9lbmQiLCJlbnZfYXNwIiwiZW52X3J1bGVfbGVuIiwiZW52X3J1bGVfbnVtYmVyIiwiZW52X3NwIiwiZW52X3N0YXRlIiwiZW52X2VycmZsYWciLCJ0YmxfdHJhbnNsX2NvbnN0IiwidGJsX3RyYW5zbF9ibG9jayIsInRibF9saHMiLCJ0YmxfbGVuIiwidGJsX2RlZnJlZCIsInRibF9kZ290byIsInRibF9zaW5kZXgiLCJ0YmxfcmluZGV4IiwidGJsX2dpbmRleCIsInRibF90YWJsZXNpemUiLCJ0YmxfdGFibGUiLCJ0YmxfY2hlY2siLCJuMSIsIm4yIiwic3RhdGUxIiwic3AiLCJlcnJmbGFnIiwiYXNwIiwiY2FtbF91cGRhdGVfZHVtbXkiLCJjYW1sX2FycmF5X2ZpbGwiLCJjYW1sX3N5c19ta2RpciIsImNhbWxfc3RyaW5nX25vdGVxdWFsIiwiY2FtbF9ieXRlc19ncmVhdGVydGhhbiIsImNhbWxfZ3JfbWFrZV9pbWFnZSIsImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0IiwiY2FtbF9yZWFkX2ZpbGVfY29udGVudCIsImNhbWxfanNfdG9fZmxvYXQiLCJjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwib3JpZ2luIiwiZXZlbnQiLCJlcnJfbm9fcHJlZCIsImVycl9ub19zdWNjIiwiemVybyQyIiwib25lJDIiLCJtaW51c19vbmUkMiIsIm1pbl9pbnQkMiIsIm1heF9pbnQkMiIsImR1bW15X3BvcyIsInplcm9fcG9zIiwic3ViX2Zvcm1hdCIsImZvcm1hdHRpbmdfbGl0IiwibG9jZm10IiwibnVsbCQwIiwiY3VycmVudF9kaXJfbmFtZSIsInBhcmVudF9kaXJfbmFtZSIsImRpcl9zZXAiLCJxdW90ZXF1b3RlIiwibnVsbCQxIiwiY3VycmVudF9kaXJfbmFtZSQwIiwicGFyZW50X2Rpcl9uYW1lJDAiLCJkaXJfc2VwJDAiLCJudWxsJDIiLCJjdXJyZW50X2Rpcl9uYW1lJDEiLCJwYXJlbnRfZGlyX25hbWUkMSIsImRpcl9zZXAkMSIsInplcm8kNCIsIm9uZSQ0IiwiaSIsImVyYXNlX3JlbCIsInJlc3QiLCJyZXN0JDAiLCJyZXN0JDEiLCJyZXN0JDIiLCJyZXN0JDMiLCJyZXN0JDQiLCJyZXN0JDUiLCJyZXN0JDYiLCJyZXN0JDciLCJ0eSIsInJlc3QkOCIsInR5MSIsInJlc3QkOSIsInJlc3QkMTAiLCJyZXN0JDExIiwicmVzdCQxMiIsInJlc3QkMTMiLCJjb25jYXRfZm10dHkiLCJmbXR0eTEiLCJmbXR0eTIiLCJ0eTIiLCJjb25jYXRfZm10IiwiZm10MSIsImZtdDIiLCJwYWQiLCJwYWQkMCIsInByZWMiLCJwYWQkMSIsImljb252IiwicHJlYyQwIiwicGFkJDIiLCJpY29udiQwIiwicHJlYyQxIiwicGFkJDMiLCJpY29udiQxIiwicHJlYyQyIiwicGFkJDQiLCJpY29udiQyIiwicHJlYyQzIiwicGFkJDUiLCJmY29udiIsInBhZCQ2Iiwic3RyIiwiY2hyIiwiZm10dHkiLCJwYWQkNyIsImZtdHR5JDAiLCJwYWQkOCIsInJlc3QkMTQiLCJyZXN0JDE1IiwicmVzdCQxNiIsImZtdGluZ19saXQiLCJyZXN0JDE3IiwiZm10aW5nX2dlbiIsInJlc3QkMTgiLCJyZXN0JDE5IiwiY2hhcl9zZXQiLCJ3aWR0aF9vcHQiLCJyZXN0JDIwIiwiY291bnRlciIsInJlc3QkMjEiLCJyZXN0JDIyIiwiaWduIiwicmVzdCQyMyIsImYiLCJhcml0eSIsInYiLCJyIiwiY3VyIiwic2VlbiIsIm4iLCJmYWlsd2l0aCIsInMiLCJpbnZhbGlkX2FyZyIsIm1pbiIsIngiLCJ5IiwibWF4IiwiYWJzIiwibG5vdCIsImluZmluaXR5IiwibmVnX2luZmluaXR5IiwibmFuIiwibWF4X2Zsb2F0IiwibWluX2Zsb2F0IiwiZXBzaWxvbiIsIm1heF9pbnQiLCJtaW5faW50IiwiczEiLCJzMiIsImwxIiwibDIiLCJjaGFyX29mX2ludCIsInN0cmluZ19vZl9ib29sIiwiYiIsImJvb2xfb2Zfc3RyaW5nIiwiYm9vbF9vZl9zdHJpbmdfb3B0Iiwic3RyaW5nX29mX2ludCIsImludF9vZl9zdHJpbmdfb3B0IiwidmFsaWRfZmxvYXRfbGV4ZW0iLCJsIiwiaSQwIiwidG9fc3RyaW5nIiwib2Zfc3RyaW5nX29wdCIsImFwcGVuZCIsInRsIiwiaGQiLCJzdGRpbiIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fZ2VuIiwibW9kZSIsInBlcm0iLCJuYW1lIiwiYyIsIm9wZW5fdGV4dCIsIm9wZW5fYmluIiwiZmx1c2hfYWxsIiwiaXRlciIsImEiLCJvdXRwdXRfYnl0ZXMiLCJvYyIsIm91dHB1dF9zdHJpbmciLCJvdXRwdXQiLCJvZnMiLCJsZW4iLCJvdXRwdXRfc3Vic3RyaW5nIiwib3V0cHV0X3ZhbHVlIiwiY2hhbiIsImNsb3NlIiwiY2xvc2Vfbm9lcnIiLCJvcGVuX2dlbiQwIiwib3Blbl90ZXh0JDAiLCJvcGVuX2JpbiQwIiwiaW5wdXQiLCJpYyIsInVuc2FmZV9yZWFsbHlfaW5wdXQiLCJvZnMkMCIsImxlbiQwIiwibGVuJDEiLCJvZnMkMSIsInJlYWxseV9pbnB1dCIsInJlYWxseV9pbnB1dF9zdHJpbmciLCJpbnB1dF9saW5lIiwiYnVpbGRfcmVzdWx0IiwiYnVmIiwiYWNjdSIsImJlZyIsImFjY3UkMCIsInJlcyIsImNsb3NlX25vZXJyJDAiLCJwcmludF9jaGFyIiwicHJpbnRfc3RyaW5nIiwicHJpbnRfYnl0ZXMiLCJwcmludF9pbnQiLCJwcmludF9mbG9hdCIsInByaW50X2VuZGxpbmUiLCJwcmludF9uZXdsaW5lIiwicHJlcnJfY2hhciIsInByZXJyX3N0cmluZyIsInByZXJyX2J5dGVzIiwicHJlcnJfaW50IiwicHJlcnJfZmxvYXQiLCJwcmVycl9lbmRsaW5lIiwicHJlcnJfbmV3bGluZSIsInJlYWRfbGluZSIsInJlYWRfaW50IiwicmVhZF9pbnRfb3B0IiwicmVhZF9mbG9hdCIsInJlYWRfZmxvYXRfb3B0Iiwic3RyaW5nX29mX2Zvcm1hdCIsInN5bWJvbCIsInN0cjIiLCJzdHIxIiwiZXhpdF9mdW5jdGlvbiIsImF0X2V4aXQiLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsIm5ld19leGl0JDAiLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19hdF9leGl0IiwiZXhpdCIsInJldGNvZGUiLCJzZXRfYmluYXJ5X21vZGUiLCJjbG9zZSQwIiwiaW5fY2hhbm5lbF9sZW5ndGgiLCJwb3NfaW4iLCJzZWVrX2luIiwiaW5wdXRfdmFsdWUiLCJpbnB1dF9iaW5hcnlfaW50IiwiaW5wdXRfYnl0ZSIsImlucHV0X2NoYXIiLCJzZXRfYmluYXJ5X21vZGUkMCIsIm91dF9jaGFubmVsX2xlbmd0aCIsInBvc19vdXQiLCJzZWVrX291dCIsIm91dHB1dF9iaW5hcnlfaW50Iiwib3V0cHV0X2J5dGUiLCJvdXRwdXRfY2hhciIsImZsdXNoIiwibGVmdCIsInJpZ2h0IiwiaXNfbGVmdCIsImlzX3JpZ2h0IiwiZmluZF9sZWZ0IiwiZmluZF9yaWdodCIsIm1hcF9sZWZ0IiwiZSIsIm1hcF9yaWdodCIsIm1hcCIsInYkMCIsImZvbGQiLCJlcXVhbCIsImUxIiwiZTIiLCJ2MiIsInYyJDAiLCJjb21wYXJlIiwibWF0Y2gkMSIsImlzX2Jsb2NrIiwiZG91YmxlX2ZpZWxkIiwic2V0X2RvdWJsZV9maWVsZCIsImZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3RvciIsImxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yXyIsImxhenlfdGFnIiwiY2xvc3VyZV90YWciLCJvYmplY3RfdGFnIiwiaW5maXhfdGFnIiwiZm9yd2FyZF90YWciLCJub19zY2FuX3RhZyIsImFic3RyYWN0X3RhZyIsInN0cmluZ190YWciLCJkb3VibGVfdGFnIiwiZG91YmxlX2FycmF5X3RhZyIsImN1c3RvbV90YWciLCJpbnRfdGFnIiwib3V0X29mX2hlYXBfdGFnIiwidW5hbGlnbmVkX3RhZyIsImluZm8iLCJvYmoiLCJzdGFydF9lbnYiLCJvZl92YWwiLCJzbG90IiwiaWQiLCJleHRlbnNpb25fY29uc3RydWN0b3IiLCJleHRlbnNpb25fbmFtZSIsImV4dGVuc2lvbl9pZCIsIm1heF9lcGhlX2xlbmd0aCIsImNyZWF0ZSIsImxlbmd0aCIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IiwibyIsIm1zZyIsImdldF9rZXkiLCJnZXRfa2V5X2NvcHkiLCJzZXRfa2V5IiwidW5zZXRfa2V5IiwiY2hlY2tfa2V5IiwiYmxpdF9rZXkiLCJvMSIsIm8yIiwicmFpc2VfdW5kZWZpbmVkIiwiZm9yY2VfbGF6eV9ibG9jayIsImJsayIsImNsb3N1cmUiLCJyZXN1bHQiLCJmb3JjZV92YWxfbGF6eV9ibG9jayIsImZvcmNlIiwibHp2IiwidCIsImZvcmNlX3ZhbCIsInRvX2xhenkiLCJmcm9tX3ZhbCIsImlzX3ZhbCIsIm1hcCQwIiwibWFwX3ZhbCIsImVtcHR5IiwicmV0dXJuJDAiLCJjb25zIiwibmV4dCIsImFwcGVuZCQwIiwic2VxMSIsInNlcTIiLCJtYXAkMSIsInNlcSIsImZpbHRlcl9tYXAiLCJzZXEkMCIsImZpbHRlciIsImNvbmNhdCIsImZsYXRfbWFwIiwiZm9sZF9sZWZ0IiwiYWNjIiwiYWNjJDAiLCJhY2MkMSIsInVuZm9sZCIsInUiLCJ1JDAiLCJpc19lbXB0eSIsInhzIiwidW5jb25zIiwieHMkMCIsImxlbmd0aCQwIiwieHMkMSIsIml0ZXJpIiwiZm9sZF9sZWZ0aSIsImFjY3UkMSIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZmluZCIsImZpbmRfbWFwIiwiaXRlcjIiLCJ5cyIsInlzJDAiLCJ5cyQxIiwiZm9sZF9sZWZ0MiIsImZvcl9hbGwyIiwiZXhpc3RzMiIsImVxdWFsJDAiLCJlcSIsImNvbXBhcmUkMCIsImNtcCIsImluaXRfYXV4IiwiaiIsImluaXQiLCJyZXBlYXQiLCJmb3JldmVyIiwiY3ljbGVfbm9uZW1wdHkiLCJjeWNsZSIsIml0ZXJhdGUxIiwiaXRlcmF0ZSIsIm1hcGlfYXV4IiwibWFwaSIsInRhaWxfc2NhbiIsInMkMCIsInNjYW4iLCJ0YWtlX2F1eCIsInRha2UiLCJkcm9wIiwibiQwIiwibiQxIiwidGFrZV93aGlsZSIsImRyb3Bfd2hpbGUiLCJub2RlIiwiZ3JvdXAiLCJmYWlsdXJlIiwibWVtb2l6ZSIsIm9uY2UiLCJhY3Rpb24iLCJ6aXAiLCJtYXAyIiwiaW50ZXJsZWF2ZSIsInNvcnRlZF9tZXJnZTEiLCJzb3J0ZWRfbWVyZ2UiLCJtYXBfZnN0IiwieHlzIiwieHlzJDAiLCJtYXBfc25kIiwidW56aXAiLCJmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAiLCJmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIiwieiIsInBhcnRpdGlvbl9tYXAiLCJwYXJ0aXRpb24iLCJwZWVsIiwieHNzIiwidHJhbnNwb3NlIiwidGFpbHMiLCJoZWFkcyIsInJlbWFpbmRlcnMiLCJ4c3MkMCIsInRhaWxzJDAiLCJoZWFkcyQwIiwibWFwX3Byb2R1Y3QiLCJwcm9kdWN0Iiwib2ZfZGlzcGVuc2VyIiwiaXQiLCJ0b19kaXNwZW5zZXIiLCJpbnRzIiwibm9uZSIsInNvbWUiLCJ2YWx1ZSIsImRlZmF1bHQkMCIsImdldCQwIiwiYmluZCIsImpvaW4iLCJtYXAkMiIsImZvbGQkMCIsIml0ZXIkMCIsImlzX25vbmUiLCJpc19zb21lIiwiZXF1YWwkMSIsIm8wIiwidjEiLCJ2MCIsImNvbXBhcmUkMSIsInRvX3Jlc3VsdCIsInRvX2xpc3QiLCJ0b19zZXEiLCJvayIsImVycm9yIiwidmFsdWUkMCIsImdldF9vayIsImdldF9lcnJvciIsImJpbmQkMCIsImpvaW4kMCIsIm1hcCQzIiwibWFwX2Vycm9yIiwiZm9sZCQxIiwiaXRlciQxIiwiaXRlcl9lcnJvciIsImlzX29rIiwiaXNfZXJyb3IiLCJlcXVhbCQyIiwicjAiLCJyMSIsImNvbXBhcmUkMiIsInRvX29wdGlvbiIsInRvX2xpc3QkMCIsInRvX3NlcSQwIiwiZXF1YWwkMyIsImNvbXBhcmUkMyIsInRvX2Zsb2F0IiwidG9fc3RyaW5nJDAiLCJlc2NhcGVkIiwibG93ZXJjYXNlIiwidXBwZXJjYXNlIiwibG93ZXJjYXNlX2FzY2lpIiwidXBwZXJjYXNlX2FzY2lpIiwiY29tcGFyZSQ0IiwiYzEiLCJjMiIsImVxdWFsJDQiLCJtaW4kMCIsIm1heCQwIiwibG9fYm91bmQiLCJoaV9ib3VuZCIsImJvbSIsInJlcCIsInN1Y2MiLCJwcmVkIiwiaXNfdmFsaWQiLCJvZl9pbnQiLCJpc19jaGFyIiwib2ZfY2hhciIsInRvX2NoYXIiLCJ1bnNhZmVfdG9fY2hhciIsImVxdWFsJDUiLCJjb21wYXJlJDUiLCJoYXNoIiwidXRmX2RlY29kZV9pc192YWxpZCIsImQiLCJ1dGZfZGVjb2RlX2xlbmd0aCIsInV0Zl9kZWNvZGVfdWNoYXIiLCJ1dGZfZGVjb2RlIiwiZGVjX2ludmFsaWQiLCJ1dGZfOF9ieXRlX2xlbmd0aCIsInV0Zl8xNl9ieXRlX2xlbmd0aCIsImxlbmd0aCQxIiwicGFyYW0kMCIsImNvbnMkMCIsIm50aCIsImwkMCIsImwkMSIsIm50aF9vcHQiLCJyZXZfYXBwZW5kIiwibDEkMCIsImwyJDAiLCJsMSQxIiwibDIkMSIsInJldiIsImluaXRfYXV4JDAiLCJwYXJhbSIsImEyIiwiYTEiLCJwYWlyIiwieCQwIiwicnkiLCJyeCIsInQyIiwiaDIiLCJ0MSIsImgxIiwicmV2X3NvcnQiLCJ4MiIsIngxIiwidGwkMSIsIngzIiwieDIkMCIsIngxJDAiLCJuMSIsIm4yIiwic29ydCIsInRsJDAiLCJjJDAiLCJjJDEiLCJjJDIiLCJjJDMiLCJjJDQiLCJjJDUiLCJjJDYiLCJhY2N1JDIiLCJhdXgiLCJ0YWlsIiwiZGlyZWN0IiwiZGVwdGgiLCJ6ZXJvIiwib25lIiwibWludXNfb25lIiwiYWJzJDAiLCJtYXhfaW50JDAiLCJtaW5faW50JDAiLCJsb2dub3QiLCJlcXVhbCQ3IiwiY29tcGFyZSQ3IiwibWluJDEiLCJtYXgkMSIsInRvX3N0cmluZyQxIiwic3ltYm9sJDAiLCJkc3RvZmYiLCJzcmNvZmYiLCJjcHlsZW4iLCJvZnMxIiwib2ZzMiIsInNlcCIsInNlcGxlbiIsImRzdCIsImlzX3NwYWNlIiwiYXBwbHkxIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJpbmRleF9yZWMiLCJsaW0iLCJpJDEiLCJpbmRleF9yZWNfb3B0IiwicmluZGV4X3JlYyIsInJpbmRleF9yZWNfb3B0IiwibmV3X2xlbiIsIm5ld19idWYiLCJnZXQkMSIsInNldCQwIiwiZGVjX3JldCIsIm5vdF9pbl94ODBfdG9feEJGIiwibm90X2luX3hBMF90b194QkYiLCJub3RfaW5feDgwX3RvX3g5RiIsIm5vdF9pbl94OTBfdG9feEJGIiwibm90X2luX3g4MF90b194OEYiLCJ1dGZfOF91Y2hhcl8zIiwiYjAiLCJiMSIsImIyIiwidXRmXzhfdWNoYXJfNCIsImIzIiwiaSQ0IiwiYjEkMSIsImkkNSIsImIyJDEiLCJpJDYiLCJpJDEwIiwiYjEkMyIsImkkMTEiLCJiMiQzIiwiaSQxMiIsImIzJDEiLCJpJDciLCJiMSQyIiwiaSQ4IiwiYjIkMiIsImkkOSIsImIzJDAiLCJpJDEzIiwiYjEkNCIsImkkMTQiLCJiMiQ0IiwiaSQyIiwiYjEkMCIsImkkMyIsImIyJDAiLCJpJDE1IiwiYjEkNSIsInNldCIsImxhc3QiLCJsYXN0JDAiLCJsYXN0JDEiLCJsYXN0JDMiLCJsYXN0JDIiLCJsYXN0JDQiLCJsYXN0JDUiLCJoaSIsImxvIiwiaXNfc3BhY2UkMCIsImluZGV4X3JlYyQwIiwiaW5kZXhfcmVjX29wdCQwIiwicmluZGV4X3JlYyQwIiwicmluZGV4X3JlY19vcHQkMCIsImciLCJlcXVhbCQxMCIsImNvbXBhcmUkMTAiLCJ0b19zdHJpbmckMiIsInRvX2J1ZmZlciIsImJ1ZmYiLCJmbGFncyIsImhlYWRlcl9zaXplIiwiZGF0YV9zaXplIiwidG90YWxfc2l6ZSIsImZyb21fYnl0ZXMiLCJmcm9tX3N0cmluZyIsInN4Iiwic3kiLCJsYSIsImxiIiwicmVzJDAiLCJsaXN0X2xlbmd0aCIsInBhcmFtJDEiLCJoZCQwIiwiaW5wdXRfYXJyYXkiLCJlbHQiLCJvdXRwdXRfYXJyYXkiLCJlbHQkMCIsImFjYyQyIiwiYTAiLCJiaSIsImFpIiwibmEiLCJuYiIsIm1heHNvbiIsImkzMSIsInRyaWNrbGVkb3duIiwidHJpY2tsZSIsImJ1YmJsZWRvd24iLCJidWJibGUiLCJlJDAiLCJmYXRoZXIiLCJtZXJnZSIsInNyYzFvZnMiLCJzcmMxbGVuIiwic3JjMiIsInNyYzJvZnMiLCJzcmMybGVuIiwiZHN0b2ZzIiwic3JjMXIiLCJzcmMyciIsInMyJDEiLCJzMSQxIiwiaTEiLCJpMiIsImkyJDAiLCJkJDAiLCJzMiQwIiwiaTEkMCIsImQkMSIsInMxJDAiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwiemVybyQwIiwib25lJDAiLCJtaW51c19vbmUkMCIsImlzX2Zpbml0ZSIsImlzX2luZmluaXRlIiwiaXNfbmFuIiwicGkiLCJpc19pbnRlZ2VyIiwic3VjYyQwIiwicHJlZCQwIiwiZXF1YWwkMTEiLCJtaW4kMiIsIm1heCQyIiwibWluX21heCIsIm1pbl9udW0iLCJtYXhfbnVtIiwibWluX21heF9udW0iLCJoYXNoJDAiLCJ1bnNhZmVfZmlsbCIsImNoZWNrIiwibWFrZSQyIiwiaW5pdCQ0IiwiYXBwZW5kJDIiLCJjb25jYXQkMyIsImhsZW4iLCJzdWIkMiIsImNvcHkkMiIsImZpbGwkMSIsImJsaXQkMiIsInNyYyIsInNvZnMiLCJkb2ZzIiwidG9fbGlzdCQyIiwib2ZfbGlzdCQwIiwiaCIsIml0ZXIkNiIsIml0ZXIyJDIiLCJtYXAkOCIsIm1hcDIkMiIsIml0ZXJpJDQiLCJtYXBpJDQiLCJmb2xkX2xlZnQkNCIsImZvbGRfcmlnaHQkMyIsImV4aXN0cyQ0IiwiZm9yX2FsbCQ0IiwibWVtJDEiLCJtZW1faWVlZSIsInNvcnQkMCIsInN0YWJsZV9zb3J0IiwidG9fc2VxJDUiLCJ0b19zZXFpJDIiLCJvZl9zZXEkMyIsIm1hcF90b19hcnJheSIsIm1hcF9mcm9tX2FycmF5IiwiemVybyQxIiwib25lJDEiLCJtaW51c19vbmUkMSIsInN1Y2MkMSIsInByZWQkMSIsImFicyQxIiwibWluX2ludCQxIiwibWF4X2ludCQxIiwibG9nbm90JDAiLCJ1bnNpZ25lZF90b19pbnQiLCJ0b19zdHJpbmckMyIsIm9mX3N0cmluZ19vcHQkMCIsImNvbXBhcmUkMTEiLCJlcXVhbCQxMiIsInVuc2lnbmVkX2NvbXBhcmUiLCJtIiwibWluJDMiLCJtYXgkMyIsInVuc2lnbmVkX2RpdiIsInEiLCJ1bnNpZ25lZF9yZW0iLCJzdWNjJDIiLCJwcmVkJDIiLCJhYnMkMiIsImxvZ25vdCQxIiwibWF4X2ludCQzIiwidW5zaWduZWRfdG9faW50JDAiLCJ0b19zdHJpbmckNCIsIm9mX3N0cmluZ19vcHQkMSIsImNvbXBhcmUkMTIiLCJlcXVhbCQxMyIsInVuc2lnbmVkX2NvbXBhcmUkMCIsIm1pbiQ0IiwibWF4JDQiLCJ1bnNpZ25lZF9kaXYkMCIsInVuc2lnbmVkX3JlbSQwIiwiemVybyQzIiwib25lJDMiLCJtaW51c19vbmUkMyIsInN1Y2MkMyIsInByZWQkMyIsImFicyQzIiwibWluX2ludCQzIiwibWF4X2ludCQ0IiwibG9nbm90JDIiLCJ1bnNpZ25lZF90b19pbnQkMSIsInRvX3N0cmluZyQ1Iiwib2Zfc3RyaW5nX29wdCQyIiwiY29tcGFyZSQxMyIsImVxdWFsJDE0IiwidW5zaWduZWRfY29tcGFyZSQxIiwibWluJDUiLCJtYXgkNSIsInVuc2lnbmVkX2RpdiQxIiwidW5zaWduZWRfcmVtJDEiLCJlbmdpbmUiLCJ0YmwiLCJzdGF0ZSIsIm5ld19lbmdpbmUiLCJmcm9tX2Z1bmN0aW9uIiwib3B0Iiwic3RoIiwid2l0aF9wb3NpdGlvbnMiLCJhdXhfYnVmZmVyIiwibGV4YnVmIiwicmVhZCIsIm5ld2xlbiIsIm5ld2J1ZiIsImZyb21fY2hhbm5lbCIsImZyb21fc3RyaW5nJDAiLCJzZXRfcG9zaXRpb24iLCJwb3NpdGlvbiIsInNldF9maWxlbmFtZSIsImZuYW1lIiwibGV4ZW1lIiwic3ViX2xleGVtZSIsInN1Yl9sZXhlbWVfb3B0Iiwic3ViX2xleGVtZV9jaGFyIiwic3ViX2xleGVtZV9jaGFyX29wdCIsImxleGVtZV9jaGFyIiwibGV4ZW1lX3N0YXJ0IiwibGV4ZW1lX2VuZCIsImxleGVtZV9zdGFydF9wIiwibGV4ZW1lX2VuZF9wIiwibmV3X2xpbmUiLCJsY3AiLCJmbHVzaF9pbnB1dCIsImVudiIsImdyb3dfc3RhY2tzIiwib2xkc2l6ZSIsIm5ld3NpemUiLCJuZXdfcyIsIm5ld192IiwibmV3X3N0YXJ0IiwibmV3X2VuZCIsImNsZWFyX3BhcnNlciIsImN1cnJlbnRfbG9va2FoZWFkX2Z1biIsInl5cGFyc2UiLCJ0YWJsZXMiLCJzdGFydCIsImxleGVyIiwiaW5pdF9hc3AiLCJpbml0X3NwIiwiaW5pdF9zdGFja2Jhc2UiLCJpbml0X3N0YXRlIiwiaW5pdF9jdXJyX2NoYXIiLCJpbml0X2x2YWwiLCJpbml0X2VycmZsYWciLCJjbWQiLCJhcmciLCJhcmckMCIsImFyZyQxIiwiY21kJDAiLCJleG4iLCJjdXJyX2NoYXIiLCJ0b2siLCJwZWVrX3ZhbCIsInN5bWJvbF9zdGFydF9wb3MiLCJzdCIsImVuIiwic3ltYm9sX2VuZF9wb3MiLCJyaHNfc3RhcnRfcG9zIiwicmhzX2VuZF9wb3MiLCJzeW1ib2xfc3RhcnQiLCJzeW1ib2xfZW5kIiwicmhzX3N0YXJ0IiwicmhzX2VuZCIsImlzX2N1cnJlbnRfbG9va2FoZWFkIiwicGFyc2VfZXJyb3IiLCJoZWlnaHQiLCJobCIsImgkMCIsImhyIiwiYmFsIiwibHIiLCJsdiIsImxsIiwibHJyIiwibHJ2IiwibHJsIiwicnIiLCJydiIsInJsIiwicmxyIiwicmx2IiwicmxsIiwiYWRkIiwic2luZ2xldG9uIiwiYWRkX21pbl9lbGVtZW50IiwiYWRkX21heF9lbGVtZW50IiwicmgiLCJsaCIsIm1pbl9lbHQiLCJtaW5fZWx0X29wdCIsIm1heF9lbHQiLCJtYXhfZWx0X29wdCIsInJlbW92ZV9taW5fZWx0IiwiciQwIiwic3BsaXQiLCJwcmVzIiwicHJlcyQwIiwibWVtIiwicmVtb3ZlIiwidW5pb24iLCJyMiIsInIyJDAiLCJyMSQwIiwiaW50ZXIiLCJzcGxpdF9iaXMiLCJkaXNqb2ludCIsImNvbnNfZW51bSIsInMkMSIsImUkMSIsImUyJDIiLCJlMSQyIiwiZTIkMCIsImUxJDAiLCJlMiQxIiwiZTEkMSIsInN1YnNldCIsInB2IiwibGYiLCJsdCIsInJmIiwicnQiLCJjYXJkaW5hbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9maXJzdCIsImZpbmRfZmlyc3Rfb3B0IiwiZmluZF9sYXN0IiwiZmluZF9sYXN0X29wdCIsImZpbmRfb3B0IiwidHJ5X2pvaW4iLCJ2JDEiLCJvZl9saXN0Iiwic3ViIiwibCQzIiwieDAiLCJsJDQiLCJ4MCQwIiwibCQ1IiwieDAkMSIsIm5sIiwibWlkIiwibCQyIiwieDQiLCJhZGRfc2VxIiwib2Zfc2VxIiwic2VxX29mX2VudW0iLCJzbm9jX2VudW0iLCJyZXZfc2VxX29mX2VudW0iLCJ0b19yZXZfc2VxIiwidG9fc2VxX2Zyb20iLCJsb3ciLCJsZCIsImxyZCIsInJkIiwicmxkIiwiZGF0YSIsIm1pbl9iaW5kaW5nIiwibWluX2JpbmRpbmdfb3B0IiwibWF4X2JpbmRpbmciLCJtYXhfYmluZGluZ19vcHQiLCJyZW1vdmVfbWluX2JpbmRpbmciLCJ1cGRhdGUiLCJkYXRhJDAiLCJtJDAiLCJhZGRfbWluX2JpbmRpbmciLCJrIiwiYWRkX21heF9iaW5kaW5nIiwiY29uY2F0X29yX2pvaW4iLCJkMSIsImQyIiwiZDIkMCIsImQxJDAiLCJkMiQxIiwiZDEkMSIsInB2ZCIsImZ2ZCIsIm0kMSIsIm0xIiwibTIiLCJiaW5kaW5nc19hdXgiLCJiaW5kaW5ncyIsImNyZWF0ZSQwIiwiY2xlYXIiLCJjb3B5JDMiLCJwdXNoIiwicG9wIiwicG9wX29wdCIsInRvcCIsInRvcF9vcHQiLCJpc19lbXB0eSQwIiwibGVuZ3RoJDIiLCJpdGVyJDciLCJmb2xkJDIiLCJ0b19zZXEkNiIsIm9mX3NlcSQ0IiwiY3JlYXRlJDEiLCJjbGVhciQwIiwiY2VsbCIsInBlZWsiLCJjb250ZW50IiwicGVla19vcHQiLCJ0YWtlJDAiLCJ0YWtlX29wdCIsImNvcHkkNCIsInFfcmVzIiwicHJldiIsImlzX2VtcHR5JDEiLCJsZW5ndGgkMyIsIml0ZXIkOCIsImZvbGQkMyIsInRyYW5zZmVyIiwicTEiLCJxMiIsInRvX3NlcSQ3IiwiYWRkX3NlcSQwIiwib2Zfc2VxJDUiLCJjb3VudCIsImZpbGxfYnVmZiIsImdldF9kYXRhIiwiZDExIiwiYSQwIiwiYSQxIiwicGVla19kYXRhIiwicGVlayQwIiwianVua19kYXRhIiwianVuayIsIm5nZXRfZGF0YSIsImFsIiwibnBlZWsiLCJlbXB0eSQyIiwiaXRlciQ5Iiwic3RybSIsImZyb20iLCJvZl9saXN0JDEiLCJvZl9zdHJpbmciLCJvZl9ieXRlcyQwIiwib2ZfY2hhbm5lbCIsImlhcHAiLCJpY29ucyIsImlzaW5nIiwibGFwcCIsImxjb25zIiwibHNpbmciLCJzZW1wdHkiLCJzbGF6eSIsImR1bXBfZGF0YSIsImR1bXAiLCJjcmVhdGUkMiIsImNvbnRlbnRzIiwidG9fYnl0ZXMkMCIsInN1YiQzIiwiYmxpdCQzIiwibnRoJDAiLCJsZW5ndGgkNCIsImNsZWFyJDEiLCJyZXNldCIsInJlc2l6ZSIsIm1vcmUiLCJvbGRfcG9zIiwib2xkX2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsInBvcyIsInVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCIsInVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXgiLCJhZGRfdXRmXzhfdWNoYXIiLCJhZGRfdXRmXzE2YmVfdWNoYXIiLCJhZGRfdXRmXzE2bGVfdWNoYXIiLCJhZGRfc3Vic3RyaW5nIiwib2Zmc2V0IiwibmV3X3Bvc2l0aW9uIiwiYWRkX3N1YmJ5dGVzIiwiYWRkX3N0cmluZyIsImFkZF9ieXRlcyIsImFkZF9idWZmZXIiLCJicyIsImFkZF9jaGFubmVsIiwiYWxyZWFkeV9yZWFkIiwidG9fcmVhZCIsImFscmVhZHlfcmVhZCQwIiwidG9fcmVhZCQwIiwib3V0cHV0X2J1ZmZlciIsImFkZF9zdWJzdGl0dXRlIiwibGltJDEiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJvcGVuaW5nIiwibGltJDAiLCJzdG9wIiwiayQyIiwiayQwIiwiayQxIiwibmV4dF9pIiwiaWRlbnQiLCJ0cnVuY2F0ZSIsInRvX3NlcSQ4IiwidG9fc2VxaSQzIiwiYWRkX3NlcSQxIiwib2Zfc2VxJDYiLCJhZGRfaW50OCIsImFkZF9pbnQxNl9uZSIsImFkZF9pbnQzMl9uZSIsImFkZF9pbnQ2NF9uZSIsImFkZF9pbnQxNl9sZSIsImFkZF9pbnQxNl9iZSIsImFkZF9pbnQzMl9sZSIsImFkZF9pbnQzMl9iZSIsImFkZF9pbnQ2NF9sZSIsImFkZF9pbnQ2NF9iZSIsImNyZWF0ZV9jaGFyX3NldCIsImFkZF9pbl9jaGFyX3NldCIsInN0cl9pbmQiLCJtYXNrIiwiZnJlZXplX2NoYXJfc2V0IiwicmV2X2NoYXJfc2V0IiwiY2hhcl9zZXQkMCIsImlzX2luX2NoYXJfc2V0IiwicGFkX29mX3BhZF9vcHQiLCJwYWRfb3B0Iiwid2lkdGgiLCJwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQiLCJmbXQiLCJwYWRfb3B0JDAiLCJwYWRfb3B0JDEiLCJwYWRfb3B0JDIiLCJwYWRfb3B0JDMiLCJwYWRfb3B0JDQiLCJwcmVjX29wdCIsInBhZF9vcHQkNSIsIm5kZWMiLCJwYWRfb3B0JDYiLCJwYWRfb3B0JDciLCJwYWRfb3B0JDgiLCJkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiIsImJ1ZmZlcl9jcmVhdGUiLCJpbml0X3NpemUiLCJidWZmZXJfY2hlY2tfc2l6ZSIsIm92ZXJoZWFkIiwibWluX2xlbiIsIm5ld19zdHIiLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInN0cl9sZW4iLCJidWZmZXJfY29udGVudHMiLCJjaGFyX29mX2ljb252IiwiY2hhcl9vZl9mY29udiIsImNGIiwiYnByaW50X3BhZHR5IiwicGFkdHkiLCJicHJpbnRfaWdub3JlZF9mbGFnIiwiaWduX2ZsYWciLCJicHJpbnRfcGFkX29wdCIsImJwcmludF9wYWRkaW5nIiwicGFkdHkkMCIsImJwcmludF9wcmVjaXNpb24iLCJicHJpbnRfaWNvbnZfZmxhZyIsImJwcmludF9hbHRpbnRfZm10IiwiYnByaW50X2Zjb252X2ZsYWciLCJzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQiLCJzdHIkMCIsImJwcmludF9jaGFyX2xpdGVyYWwiLCJicHJpbnRfc3RyaW5nX2xpdGVyYWwiLCJicHJpbnRfZm10dHkiLCJzdWJfZm10dHkiLCJzdWJfZm10dHkkMCIsImludF9vZl9jdXN0b21fYXJpdHkiLCJzdHJpbmdfb2ZfZm10IiwiZm10aXRlciIsImZtdCQwIiwiaWduX2ZsYWckMCIsImNociQwIiwic3RyJDEiLCJpc19hbG9uZSQwIiwiaXNfYWxvbmUiLCJhZnRlciIsImJlZm9yZSIsImokMCIsImokMSIsImZtdCQxIiwic3ltbSIsInRyYW5zIiwicmVzdDIiLCJyZXN0MiQwIiwicmVzdDIkMSIsInJlc3QyJDIiLCJyZXN0MiQzIiwicmVzdDIkNCIsInJlc3QyJDUiLCJyZXN0MiQ2IiwicmVzdDIkNyIsInR5MiQwIiwicmVzdDIkOCIsInR5MjIiLCJ0eTIxIiwiZm10dHlfcmVsX2RldCIsImY0IiwiZjIiLCJyZXN0MiQ5IiwicmVzdDIkMTAiLCJyZXN0MiQxMSIsInJlc3QyJDEyIiwicmVzdDIkMTMiLCJkZSIsImVkIiwiYWYiLCJmYSIsImRlJDAiLCJlZCQwIiwiYWYkMCIsImZhJDAiLCJkZSQxIiwiZWQkMSIsImFmJDEiLCJmYSQxIiwiZGUkMiIsImVkJDIiLCJhZiQyIiwiZmEkMiIsImRlJDMiLCJlZCQzIiwiYWYkMyIsImZhJDMiLCJkZSQ0IiwiZWQkNCIsImFmJDQiLCJmYSQ0IiwiZGUkNSIsImVkJDUiLCJhZiQ1IiwiZmEkNSIsImRlJDYiLCJlZCQ2IiwiYWYkNiIsImZhJDYiLCJkZSQ3IiwiZWQkNyIsImFmJDciLCJmYSQ3IiwiZGUkOCIsImVkJDgiLCJhZiQ4IiwiZmEkOCIsImpkIiwiZGoiLCJnYSIsImFnIiwiZGUkOSIsImVkJDkiLCJhZiQ5IiwiZmEkOSIsImRlJDEwIiwiZWQkMTAiLCJhZiQxMCIsImZhJDEwIiwiZGUkMTEiLCJlZCQxMSIsImFmJDExIiwiZmEkMTEiLCJkZSQxMiIsImVkJDEyIiwiYWYkMTIiLCJmYSQxMiIsImRlJDEzIiwiZWQkMTMiLCJhZiQxMyIsImZhJDEzIiwiZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IiwiZm10dHlfb2ZfcGFkZGluZ19mbXR0eSIsImZtdHR5X29mX2N1c3RvbSIsImFyaXR5JDAiLCJmbXR0eV9vZl9mbXQiLCJ0eV9yZXN0IiwicHJlY190eSIsInR5X3Jlc3QkMCIsInByZWNfdHkkMCIsInR5X3Jlc3QkMSIsInByZWNfdHkkMSIsInR5X3Jlc3QkMiIsInByZWNfdHkkMiIsInR5X3Jlc3QkMyIsInByZWNfdHkkMyIsImZtdHR5JDEiLCJmbXR0eSQyIiwiZm10dHkkMyIsInR5JDAiLCJmbXR0eSQ0IiwiZm10dHkkNSIsInR5cGVfcGFkZGluZyIsInciLCJ0eXBlX3BhZHByZWMiLCJ0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGkiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJmbXR0eV9yZXN0Iiwic3ViX2ZtdHR5X3Jlc3QiLCJzdWJfZm10dHlfcmVzdCQwIiwiZm10dHlfcmVzdCQwIiwic3ViX2ZtdHR5X3Jlc3QkMSIsInN1Yl9mbXR0eV9yZXN0JDIiLCJmbXR0eV9yZXN0JDEiLCJzdWJfZm10dHlfcmVzdCQzIiwiZm10JDIiLCJzdWJfZm10dHlfcmVzdCQ0IiwiZm10dHlfcmVzdCQyIiwic3ViX2ZtdHR5X3Jlc3QkNSIsImZtdCQzIiwic3ViX2ZtdHR5X3Jlc3QkNiIsImZtdHR5X3Jlc3QkMyIsInN1Yl9mbXR0eV9yZXN0JDciLCJmbXQkNCIsInN1Yl9mbXR0eV9yZXN0JDgiLCJmbXR0eV9yZXN0JDQiLCJzdWJfZm10dHlfcmVzdCQ5IiwiZm10JDUiLCJzdWJfZm10dHlfcmVzdCQxMCIsImZtdHR5X3Jlc3QkNSIsInN1Yl9mbXR0eV9yZXN0JDExIiwiZm10JDYiLCJzdWJfZm10dHlfcmVzdCQxMiIsImZtdHR5X3Jlc3QkNiIsInN1Yl9mbXR0eV9yZXN0JDEzIiwiZm10JDciLCJzdWJfZm10dHlfcmVzdCQxNCIsImZtdHR5X3Jlc3QkNyIsInN1YjJfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNSIsInN1YjJfZm10dHkkMCIsImZtdCQ4Iiwic3ViX2ZtdHR5X3Jlc3QkMTYiLCJmbXR0eV9yZXN0JDgiLCJzdWIyX2ZtdHR5JDEiLCJzdWIxX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTciLCJzdWIyX2ZtdHR5JDIiLCJzdWIxX2ZtdHR5JDAiLCJmbXQkOSIsInN1Yl9mbXR0eV9yZXN0JDE4IiwiZm10dHlfcmVzdCQ5Iiwic3ViX2ZtdHR5X3Jlc3QkMTkiLCJmbXQkMTAiLCJzdWJfZm10dHlfcmVzdCQyMCIsImZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHlfcmVzdCQyMSIsImZtdCQxMSIsInN1Yl9mbXR0eV9yZXN0JDIyIiwiZm10dHlfcmVzdCQxMSIsInN1Yl9mbXR0eV9yZXN0JDIzIiwiZm10JDEyIiwic3ViX2ZtdHR5X3Jlc3QkMjQiLCJmbXR0eV9yZXN0JDEyIiwic3ViX2ZtdHR5X3Jlc3QkMjUiLCJmbXQkMTMiLCJzdWJfZm10dHlfcmVzdCQyNiIsImZtdF9yZXN0IiwiZm10X3Jlc3QkMCIsImZtdF9yZXN0JDEiLCJmbXRfcmVzdCQyIiwiZm10X3Jlc3QkMyIsImZtdF9yZXN0JDQiLCJmbXRfcmVzdCQ1IiwicHJlYyQ0IiwiZm10dHkkNiIsImZtdF9yZXN0JDYiLCJwcmVjJDUiLCJwcmVjJDYiLCJmbXR0eSQ3IiwiZm10X3Jlc3QkNyIsInByZWMkNyIsInByZWMkOCIsImZtdHR5JDgiLCJmbXRfcmVzdCQ4IiwiZm10dHkkOSIsImZtdF9yZXN0JDkiLCJmbXR0eSQxMCIsImZtdF9yZXN0JDEwIiwiZm10dHkkMTEiLCJmbXRfcmVzdCQxMSIsImZtdHR5JDEyIiwiZm10X3Jlc3QkMTIiLCJmbXR0eSQxMyIsInN1Yl9mbXR0eTEiLCJmbXRfcmVzdCQxMyIsInN1Yl9mbXR0eSQxIiwiZm10dHkkMTQiLCJmbXQkMTQiLCJmbXRfcmVzdCQxNCIsImZtdHR5JDE1IiwiZm10JDE1IiwiZm10X3Jlc3QkMTUiLCJmbXR0eSQxNiIsImZtdCQxNiIsImZtdF9yZXN0JDE2IiwiZm10dHkkMTciLCJmbXQkMTciLCJmbXRfcmVzdCQxNyIsImZvcm1hdHRpbmdfZ2VuIiwiZm10dHkzIiwiZm10MyIsImZtdDEkMCIsImZtdHR5MiQwIiwiZm10MiQwIiwiZm10dHkzJDAiLCJmbXQzJDAiLCJmbXR0eV9yZXN0JDEzIiwiZm10X3Jlc3QkMTgiLCJmbXR0eSQxOCIsImZtdCQxOCIsImZtdHR5X3Jlc3QkMTQiLCJmbXRfcmVzdCQxOSIsImZtdHR5JDE5IiwiZm10JDE5IiwiZm10dHlfcmVzdCQxNSIsImZtdF9yZXN0JDIwIiwiZm10dHkkMjAiLCJmbXQkMjAiLCJ0eXBlX2lnbm9yZWRfcGFyYW1fb25lIiwiZm10dHlfcmVzdCQxNiIsImZtdHR5JDIxIiwiZm10JDIxIiwic3ViX2ZtdHR5JDIiLCJzdWJfZm10dHkkMyIsImZtdHR5JDIyIiwiZm10JDIyIiwic3ViX2ZtdHR5JDQiLCJ0eXBlX2Zvcm1hdCIsInJlY2FzdCIsImZpeF9wYWRkaW5nIiwid2lkdGgkMCIsImZpeF9pbnRfcHJlY2lzaW9uIiwicmVzJDEiLCJzdHJpbmdfdG9fY2FtbF9zdHJpbmciLCJmb3JtYXRfb2ZfZmNvbnYiLCJzeW1iIiwidHJhbnNmb3JtX2ludF9hbHQiLCJkaWdpdHMiLCJwdXQiLCJjb252ZXJ0X2ludCIsImNvbnZlcnRfaW50MzIiLCJjb252ZXJ0X25hdGl2ZWludCIsImNvbnZlcnRfaW50NjQiLCJjb252ZXJ0X2Zsb2F0IiwiaGV4Iiwic2lnbiIsImNhbWxfc3BlY2lhbF92YWwiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiQwIiwibmV3X2FjYyIsIm1ha2VfcHJpbnRmIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJwJDAiLCJwJDEiLCJhY2MkMyIsImFjYyQ0IiwiayQzIiwia2FjYyIsImskNCIsIm1ha2VfaWdub3JlZF9wYXJhbSQwIiwibWFrZV9jdXN0b20kMCIsIm1ha2VfaW52YWxpZF9hcmciLCJtYWtlX2Zyb21fZm10dHkkMCIsIm1ha2VfZnJvbV9mbXR0eSIsIm1ha2VfY3VzdG9tIiwibWFrZV9pZ25vcmVkX3BhcmFtIiwibWFrZV9pcHJpbnRmJDAiLCJtYWtlX2lwcmludGYiLCJmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiIsImtvYyIsInJlc3QkMjQiLCJyZXN0JDI1IiwiZm5fb2ZfY3VzdG9tX2FyaXR5JDAiLCJmbl9vZl9jdXN0b21fYXJpdHkiLCJvdXRwdXRfYWNjIiwicCQyIiwicCQzIiwicCQ0IiwiYnVmcHV0X2FjYyIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJwYXJzZV9sd29yZCIsInBhcnNlX2ludCIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleHBfZW5kIiwiYm94X3R5cGUiLCJtYWtlX3BhZGRpbmdfZm10X2ViYiIsIm1ha2VfcGFkcHJlY19mbXRfZWJiIiwiZm10X2ViYl9vZl9zdHJpbmciLCJsZWdhY3lfYmVoYXZpb3IiLCJmbGFnIiwibGVnYWN5X2JlaGF2aW9yJDAiLCJpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIiwidW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IiwiZW5kX2luZCIsImludmFsaWRfZm9ybWF0X3dpdGhvdXQiLCJleHBlY3RlZF9jaGFyYWN0ZXIiLCJleHBlY3RlZCIsImFkZF9saXRlcmFsIiwibGl0X3N0YXJ0Iiwic2l6ZSIsInBhcnNlX3Bvc2l0aXZlIiwic3RyX2luZCQwIiwic3RyX2luZCQxIiwicGFyc2VfaW50ZWdlciIsIm5leHRfaW5kIiwiaW5jb21wYXRpYmxlX2ZsYWciLCJwY3RfaW5kIiwib3B0aW9uIiwic3ViZm10IiwiY29tcHV0ZV9pbnRfY29udiIsInBsdXMiLCJzcGFjZSIsInBsdXMkMCIsInNwYWNlJDAiLCJzZWFyY2hfc3ViZm9ybWF0X2VuZCIsInN1Yl9lbmQiLCJzdHJfaW5kJDIiLCJzdWJfZW5kJDAiLCJzdHJfaW5kJDMiLCJzdWJfZW5kJDEiLCJzdHJfaW5kJDQiLCJzdHJfaW5kJDUiLCJzdWJfZW5kJDIiLCJzdHJfaW5kJDYiLCJzdHJfaW5kJDciLCJwYXJzZV9tYWdpY19zaXplIiwic3RyX2luZF8xIiwic3RyX2luZF8yIiwic3RyX2luZF8zIiwicGFyc2UiLCJwYXJzZV9nb29kX2JyZWFrIiwiZm9ybWF0dGluZ19saXQkMCIsInN0cl9pbmRfNCIsInN0cl9pbmRfNSIsInBhcnNlX3RhZyIsImlzX29wZW5fdGFnIiwiaW5kIiwic3ViX3N0ciIsInN1Yl9mbXQiLCJzdWJfZm9ybWF0JDAiLCJmb3JtYXR0aW5nJDAiLCJmb3JtYXR0aW5nIiwicGFyc2VfZmxhZ3MiLCJtaW51cyIsInNldF9mbGFnIiwibmV3X2luZCIsInBhcnNlX2FmdGVyX3BhZGRpbmciLCJwYXJzZV9saXRlcmFsIiwicGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIiwic3ltYiQwIiwibWludXMkMCIsInBhcnNlX2NvbnZlcnNpb24iLCJwYXJzZV9jb252IiwicGFkcHJlYyIsInBsdXNfdXNlZCIsImhhc2hfdXNlZCIsInNwYWNlX3VzZWQiLCJpZ25fdXNlZCIsInBhZF91c2VkIiwicHJlY191c2VkIiwiZ2V0X3BsdXMiLCJnZXRfaGFzaCIsImdldF9zcGFjZSIsImdldF9pZ24iLCJnZXRfcGFkIiwiZ2V0X3ByZWMiLCJnZXRfcGFkcHJlYyIsImdldF9pbnRfcGFkIiwiY2hlY2tfbm9fMCIsIm9wdF9vZl9wYWQiLCJ3aWR0aCQxIiwiZ2V0X3BhZF9vcHQiLCJnZXRfcGFkcHJlY19vcHQiLCJmbXRfcmVzdWx0IiwiaWdub3JlZCQyIiwiY291bnRlciQwIiwiaWdub3JlZCQ2IiwiaWdub3JlZCQ3IiwiYWRkX3JhbmdlIiwiZmFpbF9zaW5nbGVfcGVyY2VudCIsInBhcnNlX2NoYXJfc2V0X2NvbnRlbnQiLCJwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyJDAiLCJwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIiwicmV2ZXJzZSIsImNoYXJfc2V0JDEiLCJpZ25vcmVkJDkiLCJjaGFyX2Zvcm1hdCIsImZtdF9yZXN0JDIxIiwiZm10X3Jlc3QkMjIiLCJwYWQkOSIsImZtdF9yZXN0JDIzIiwiaWdub3JlZCQxMCIsImZtdF9yZXN0JDI0IiwicGFkJDEwIiwiZm10X3Jlc3QkMjUiLCJzdWJfZm10JDAiLCJmbXRfcmVzdCQyNiIsImlnbm9yZWQkMTEiLCJpZ25vcmVkJDMiLCJpZ25vcmVkJDUiLCJpZ25vcmVkJDgiLCJzcGFjZSQxIiwiaGFzaCQxIiwicGx1cyQyIiwia2luZCIsImlnbm9yZWQkNCIsImlnbm9yZWQiLCJpZ25vcmVkJDAiLCJpZ25vcmVkJDEiLCJwbHVzJDEiLCJpZ24kMCIsImZvcm1hdF9vZl9zdHJpbmdfZm10dHkiLCJmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCIsImtmcHJpbnRmIiwia2JwcmludGYiLCJpa2ZwcmludGYiLCJmcHJpbnRmIiwiYnByaW50ZiIsImlmcHJpbnRmIiwiaWJwcmludGYiLCJwcmludGYiLCJlcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwiYXNzb2MzIiwieTIiLCJ5MSIsInNwbGl0JDEiLCJtYWtlX3N5bWxpc3QiLCJoZWxwX2FjdGlvbiIsImFkZF9oZWxwIiwic3BlY2xpc3QiLCJhZGQyIiwidXNhZ2VfYiIsImVycm1zZyIsImRvYyIsInNwZWMiLCJrZXkiLCJ1c2FnZV9zdHJpbmciLCJ1c2FnZSIsImJvb2xfb2Zfc3RyaW5nX29wdCQwIiwiaW50X29mX3N0cmluZ19vcHQkMCIsImZsb2F0X29mX3N0cmluZ19vcHQiLCJwYXJzZV9hbmRfZXhwYW5kX2FyZ3ZfZHluYW1pY18iLCJhbGxvd19leHBhbmQiLCJhcmd2IiwiYW5vbmZ1biIsImluaXRwb3MiLCJjb252ZXJ0X2Vycm9yIiwicHJvZ25hbWUiLCJmb2xsb3ckMCIsImtleXdvcmQiLCJub19hcmckMCIsImZvbGxvdyIsIm5vX2FyZyIsImdldF9hcmckMCIsImdldF9hcmciLCJjb25zdW1lX2FyZyQwIiwiY29uc3VtZV9hcmciLCJ0cmVhdF9hY3Rpb24kMCIsInRyZWF0X2FjdGlvbiIsImYkMCIsImYkMSIsInIkMSIsImYkMiIsInIkMiIsImFyZyQyIiwiZiQzIiwiYXJnJDMiLCJ4JDEiLCJyJDMiLCJhcmckNCIsIngkMiIsInNwZWNzIiwiZiQ0IiwiYXJnJDUiLCJmJDUiLCJmJDYiLCJmJDciLCJhcmckNiIsIm5ld2FyZyIsInBhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljIiwicGFyc2VfYXJndl9keW5hbWljIiwiY3VycmVudCQwIiwicGFyc2VfYXJndiIsIm1zZyQwIiwibXNnJDEiLCJwYXJzZV9keW5hbWljIiwicGFyc2VfZXhwYW5kIiwic2Vjb25kX3dvcmQiLCJsb29wIiwibWF4X2FyZ19sZW4iLCJrd2QiLCJyZXBsYWNlX2xlYWRpbmdfdGFiIiwiYWxpZ24iLCJsaW1pdCIsImNvbXBsZXRlZCIsImtzZCIsImN1dGNvbCQwIiwic3BhY2VzJDAiLCJjdXRjb2wiLCJrd2RfbGVuIiwic3BhY2VzIiwicmVhZF9hdXgiLCJ0cmltIiwiZmlsZSIsIndvcmRzIiwic3Rhc2giLCJ3b3JkIiwicmVhZF9hcmciLCJyZWFkX2FyZzAiLCJ3cml0ZV9hdXgiLCJhcmdzIiwid3JpdGVfYXJnIiwid3JpdGVfYXJnMCIsInByaW50ZXJzIiwiZmllbGQiLCJvdGhlcl9maWVsZHMiLCJ1c2VfcHJpbnRlcnMiLCJjb252IiwidG9fc3RyaW5nX2RlZmF1bHQiLCJjaGFyJDAiLCJsaW5lIiwiY2hhciQxIiwibGluZSQwIiwiZmlsZSQwIiwiY2hhciQyIiwibGluZSQxIiwiZmlsZSQxIiwiY29uc3RydWN0b3IiLCJ0b19zdHJpbmckNiIsInByaW50IiwiZmN0IiwiY2F0Y2gkMCIsInJhd19iYWNrdHJhY2VfZW50cmllcyIsImJ0IiwiY29udmVydF9yYXdfYmFja3RyYWNlIiwiZm9ybWF0X2JhY2t0cmFjZV9zbG90IiwiaXNfcmFpc2UiLCJwcmludF9yYXdfYmFja3RyYWNlIiwib3V0Y2hhbiIsInJhd19iYWNrdHJhY2UiLCJiYWNrdHJhY2UiLCJwcmludF9iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlX3RvX3N0cmluZyIsImJhY2t0cmFjZV9zbG90X2lzX3JhaXNlIiwiYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lIiwiYmFja3RyYWNlX3Nsb3RfbG9jYXRpb24iLCJiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lIiwiYmFja3RyYWNlX3Nsb3RzIiwiYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSIsImVudHJ5IiwicmF3X2JhY2t0cmFjZV9sZW5ndGgiLCJnZXRfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwiZXhuX3Nsb3QiLCJleG5fc2xvdF9pZCIsImV4bl9zbG90X25hbWUiLCJlcnJvcnMiLCJkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW4iLCJzdGF0dXMiLCJ1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsInNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsImVtcHR5X2JhY2t0cmFjZSIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24iLCJkZWJ1Z2dlcl9pbl91c2UiLCJleG4kMCIsInJhd19iYWNrdHJhY2UkMCIsImNvbnN0JDAiLCJmbGlwIiwibmVnYXRlIiwicHJvdGVjdCIsImZpbmFsbHkkMCIsIndvcmsiLCJmaW5hbGx5X25vX2V4biIsIndvcmtfZXhuIiwid29ya19idCIsInByaW50X3N0YXQiLCJhbGxvY2F0ZWRfYnl0ZXMiLCJtYSIsInBybyIsIm1pIiwiY3JlYXRlX2FsYXJtIiwiZGVsZXRlX2FsYXJtIiwibnVsbF90cmFja2VyIiwic2FtcGxpbmdfcmF0ZSIsInRyYWNrZXIiLCJjYWxsc3RhY2tfc2l6ZSIsInN0cmluZyIsImJ5dGVzIiwic3Vic3RyaW5nIiwic3ViYnl0ZXMiLCJmaWxlbmFtZSIsIm91dHB1dCQwIiwiZGlnZXN0IiwiaW5wdXQkMCIsImNoYXJfaGV4IiwidG9faGV4IiwiZnJvbV9oZXgiLCJkaWdpdCIsIm5ld19zdGF0ZSIsImFzc2lnbiIsInN0MSIsInN0MiIsImZ1bGxfaW5pdCIsInNlZWQiLCJzZWVkJDAiLCJtYWtlJDMiLCJtYWtlX3NlbGZfaW5pdCIsImNvcHkkNSIsImJpdHMiLCJjdXJ2YWwiLCJuZXd2YWwiLCJuZXd2YWwzMCIsImludGF1eCIsImludCQwIiwiYm91bmQiLCJmdWxsX2ludCIsImJwb3MiLCJicG9zJDAiLCJpbnQzMiIsImludDY0IiwibmF0aXZlaW50IiwiZmxvYXQkMCIsImJvb2wiLCJiaXRzMzIiLCJiaXRzNjQiLCJuYXRpdmViaXRzIiwiYml0cyQwIiwiaW50JDEiLCJmdWxsX2ludCQwIiwiaW50MzIkMCIsIm5hdGl2ZWludCQwIiwiaW50NjQkMCIsImZsb2F0JDEiLCJzY2FsZSIsImJvb2wkMCIsImJpdHMzMiQwIiwiYml0czY0JDAiLCJuYXRpdmViaXRzJDAiLCJmdWxsX2luaXQkMCIsImluaXQkNSIsInNlbGZfaW5pdCIsImdldF9zdGF0ZSIsInNldF9zdGF0ZSIsIm9uZ29pbmdfdHJhdmVyc2FsIiwiZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCIsInBhcmFtcyIsInJhbmRvbWl6ZWRfZGVmYXVsdCIsInJhbmRvbWl6ZWQiLCJyYW5kb21pemUiLCJpc19yYW5kb21pemVkIiwicHJuZyIsInBvd2VyXzJfYWJvdmUiLCJjcmVhdGUkMyIsImluaXRpYWxfc2l6ZSIsInJhbmRvbSIsImNsZWFyJDIiLCJyZXNldCQwIiwiY29weV9idWNrZXRsaXN0Iiwia2V5JDAiLCJuZXh0JDAiLCJjb3B5JDYiLCJsZW5ndGgkNSIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJjZWxsJDAiLCJuaWR4IiwibWF0Y2giLCJtYXRjaCQwIiwicmVzaXplJDAiLCJvc2l6ZSIsIml0ZXIkMTAiLCJkb19idWNrZXQiLCJvbGRfdHJhdiIsImZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQiLCJmaWx0ZXJfbWFwX2lucGxhY2UiLCJmb2xkJDQiLCJiJDAiLCJidWNrZXRfbGVuZ3RoIiwic3RhdHMiLCJtYmwiLCJoaXN0byIsInRvX3NlcSQ5IiwidGJsX2RhdGEiLCJidWNrIiwiYnVjayQwIiwiYnVjayQxIiwidG9fc2VxX2tleXMiLCJ0b19zZXFfdmFsdWVzIiwia2V5X2luZGV4IiwiYnVja2V0IiwiazEiLCJuZXh0MSIsImsyIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX2FsbCIsImZpbmRfaW5fYnVja2V0IiwicmVwbGFjZSIsInJlcGxhY2Vfc2VxIiwiY29weSIsInN6IiwiaGFzaF9wYXJhbSIsInNlZWRlZF9oYXNoIiwiYWRkJDAiLCJmaW5kJDEiLCJmaW5kX29wdCQxIiwiZmluZF9hbGwkMCIsIm1lbSQyIiwiYWRkX3NlcSQyIiwib2Zfc2VxJDciLCJyZWJ1aWxkIiwid2Vha19jcmVhdGUiLCJsZW5ndGgkNiIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0JDAiLCJzZXQkMSIsImdldCQyIiwiZ2V0X2NvcHkiLCJjaGVjayQwIiwiYmxpdCQ0IiwiZmlsbCQyIiwiYXIiLCJlbXB0eWJ1Y2tldCIsImdldF9pbmRleCIsInN6JDAiLCJzeiQxIiwiY291bnRfYnVja2V0IiwiYWRkX2F1eCIsInNldHRlciIsImluZGV4IiwiYnVja2V0JDAiLCJoYXNoZXMiLCJuZXdzeiIsIm5ld2J1Y2tldCQwIiwibmV3aGFzaGVzIiwiaGJ1Y2tldCIsInByZXZfbGVuIiwibGl2ZSIsImokMiIsIm5ld2J1Y2tldCIsIm5ld3QiLCJvYiIsIm9oIiwic2V0dGVyJDAiLCJuaSIsImZpbmRfb3IiLCJpZm5vdGZvdW5kIiwiZmluZF9zaGFkb3ciLCJpZmZvdW5kIiwibGVucyIsInRvdGxlbiIsImlkJDAiLCJ1bmtub3duIiwicHBfZW5xdWV1ZSIsInRva2VuIiwicHBfaW5maW5pdHkiLCJwcF9vdXRwdXRfc3RyaW5nIiwicHBfb3V0cHV0X25ld2xpbmUiLCJmb3JtYXRfcHBfdGV4dCIsInRleHQiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJyZWFsX2luZGVudCIsImJyZWFrX2xpbmUiLCJicmVha19zYW1lX2xpbmUiLCJmb3JtYXRfcHBfdG9rZW4iLCJzaXplJDAiLCJ0YWJzIiwiYWRkX3RhYiIsImxzIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwiYm94X3R5cGUkMCIsIm9mZiQwIiwiaW5zZXJ0aW9uX3BvaW50IiwidGFicyQwIiwiZmlyc3QiLCJoZWFkIiwidGFiIiwib2ZmJDEiLCJpbnNlcnRpb25fcG9pbnQkMCIsIndpZHRoJDIiLCJib3hfdHlwZSQxIiwidGJveCIsInRhZ19uYW1lJDAiLCJtYXJrZXIkMCIsImFkdmFuY2VfbGVmdCIsInBlbmRpbmdfY291bnQiLCJlbnF1ZXVlX2FkdmFuY2UiLCJlbnF1ZXVlX3N0cmluZ19hcyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInN0YWNrIiwicXVldWVfZWxlbSIsInNldF9zaXplIiwibGVmdF90b3RhbCIsInNjYW5fcHVzaCIsImVsZW0iLCJwcF9vcGVuX2JveF9nZW4iLCJicl90eSIsInBwX2Nsb3NlX2JveCIsInBwX29wZW5fc3RhZyIsInBwX2Nsb3NlX3N0YWciLCJwcF9vcGVuX3RhZyIsInBwX2Nsb3NlX3RhZyIsInBwX3NldF9wcmludF90YWdzIiwicHBfc2V0X21hcmtfdGFncyIsInBwX2dldF9wcmludF90YWdzIiwicHBfZ2V0X21hcmtfdGFncyIsInBwX3NldF90YWdzIiwicHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9uIiwicHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9uIiwicGN0IiwicG90IiwibWN0IiwibW90IiwicHBfcmluaXQiLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYnl0ZXMiLCJwcF9wcmludF9pbnQiLCJwcF9wcmludF9mbG9hdCIsInBwX3ByaW50X2Jvb2wiLCJwcF9wcmludF9jaGFyIiwicHBfb3Blbl9oYm94IiwicHBfb3Blbl92Ym94IiwicHBfb3Blbl9odmJveCIsInBwX29wZW5faG92Ym94IiwicHBfb3Blbl9ib3giLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfaWZfbmV3bGluZSIsInBwX3ByaW50X2N1c3RvbV9icmVhayIsInBwX3ByaW50X2JyZWFrIiwicHBfcHJpbnRfc3BhY2UiLCJwcF9wcmludF9jdXQiLCJwcF9vcGVuX3Rib3giLCJwcF9jbG9zZV90Ym94IiwicHBfcHJpbnRfdGJyZWFrIiwicHBfcHJpbnRfdGFiIiwicHBfc2V0X3RhYiIsInBwX3NldF9tYXhfYm94ZXMiLCJwcF9nZXRfbWF4X2JveGVzIiwicHBfb3Zlcl9tYXhfYm94ZXMiLCJwcF9zZXRfZWxsaXBzaXNfdGV4dCIsInBwX2dldF9lbGxpcHNpc190ZXh0IiwicHBfbGltaXQiLCJwcF9zZXRfbWF4X2luZGVudCIsInBwX2dldF9tYXhfaW5kZW50IiwicHBfc2V0X21hcmdpbiIsIm5ld19tYXhfaW5kZW50IiwidmFsaWRhdGVfZ2VvbWV0cnkiLCJtYXJnaW4iLCJtYXhfaW5kZW50IiwiY2hlY2tfZ2VvbWV0cnkiLCJnZW9tZXRyeSIsInBwX2dldF9tYXJnaW4iLCJwcF9zZXRfZnVsbF9nZW9tZXRyeSIsInBwX3NldF9nZW9tZXRyeSIsInBwX3NhZmVfc2V0X2dlb21ldHJ5IiwicHBfZ2V0X2dlb21ldHJ5IiwicHBfdXBkYXRlX2dlb21ldHJ5IiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfaW5kZW50IiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCIsImRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyIsImRlZmF1bHRfcHBfbWFya19jbG9zZV90YWciLCJkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnIiwiZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWciLCJwcF9tYWtlX2Zvcm1hdHRlciIsInBwX3F1ZXVlIiwic3lzX3RvayIsInNjYW5fc3RhY2siLCJmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyIsIm91dF9mdW5zIiwibWFrZV9mb3JtYXR0ZXIiLCJwcGYiLCJmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwiLCJmb3JtYXR0ZXJfb2ZfYnVmZmVyIiwicHBfYnVmZmVyX3NpemUiLCJwcF9tYWtlX2J1ZmZlciIsInN0ZGJ1ZiIsInN0ZF9mb3JtYXR0ZXIiLCJlcnJfZm9ybWF0dGVyIiwic3RyX2Zvcm1hdHRlciIsImZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIiLCJmbHVzaF9zdHJfZm9ybWF0dGVyIiwibWFrZV9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciIsInNvYiIsImdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciIsIml0ZW1zIiwiYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIiwiaXRlbSIsImZvcm1hdHRlcl9vZl9zeW1ib2xpY19vdXRwdXRfYiIsIm9wZW5faGJveCIsIm9wZW5fdmJveCIsIm9wZW5faHZib3giLCJvcGVuX2hvdmJveCIsIm9wZW5fYm94IiwiY2xvc2VfYm94Iiwib3Blbl90YWciLCJjbG9zZV90YWciLCJvcGVuX3N0YWciLCJjbG9zZV9zdGFnIiwicHJpbnRfYXMiLCJwcmludF9zdHJpbmckMCIsInByaW50X2J5dGVzJDAiLCJwcmludF9pbnQkMCIsInByaW50X2Zsb2F0JDAiLCJwcmludF9jaGFyJDAiLCJwcmludF9ib29sIiwicHJpbnRfYnJlYWsiLCJwcmludF9jdXQiLCJwcmludF9zcGFjZSIsImZvcmNlX25ld2xpbmUiLCJwcmludF9mbHVzaCIsInByaW50X25ld2xpbmUkMCIsInByaW50X2lmX25ld2xpbmUiLCJvcGVuX3Rib3giLCJjbG9zZV90Ym94IiwicHJpbnRfdGJyZWFrIiwic2V0X3RhYiIsInByaW50X3RhYiIsInNldF9tYXJnaW4iLCJnZXRfbWFyZ2luIiwic2V0X21heF9pbmRlbnQiLCJnZXRfbWF4X2luZGVudCIsInNldF9nZW9tZXRyeSIsInNhZmVfc2V0X2dlb21ldHJ5IiwiZ2V0X2dlb21ldHJ5IiwidXBkYXRlX2dlb21ldHJ5Iiwic2V0X21heF9ib3hlcyIsImdldF9tYXhfYm94ZXMiLCJvdmVyX21heF9ib3hlcyIsInNldF9lbGxpcHNpc190ZXh0IiwiZ2V0X2VsbGlwc2lzX3RleHQiLCJzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIiwic2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwic2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIiwic2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyIsImdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMiLCJzZXRfcHJpbnRfdGFncyIsImdldF9wcmludF90YWdzIiwic2V0X21hcmtfdGFncyIsImdldF9tYXJrX3RhZ3MiLCJzZXRfdGFncyIsInBwX3ByaW50X2xpc3QiLCJwcF92Iiwib3B0JDAiLCJwcF9zZXAiLCJ2cyIsIm9wdCQxIiwicHBfcHJpbnRfc2VxIiwic2VxJDEiLCJzZXEkMiIsInBwX3ByaW50X3RleHQiLCJwcF9wcmludF9vcHRpb24iLCJwcF9wcmludF9yZXN1bHQiLCJwcF9wcmludF9laXRoZXIiLCJjb21wdXRlX3RhZyIsInRhZ19hY2MiLCJvdXRwdXRfZm9ybWF0dGluZ19saXQiLCJvdXRwdXRfYWNjJDAiLCJidHkiLCJwJDUiLCJwJDYiLCJzdHJwdXRfYWNjJDAiLCJzaXplJDEiLCJrZnByaW50ZiQwIiwiaWtmcHJpbnRmJDAiLCJpZnByaW50ZiQwIiwiZnByaW50ZiQwIiwicHJpbnRmJDAiLCJlcHJpbnRmJDAiLCJrZHByaW50ZiIsImRwcmludGYiLCJrcHJpbnRmIiwic3ByaW50ZiQwIiwia2FzcHJpbnRmIiwiYXNwcmludGYiLCJmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzIiwicHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1IiwicHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1Iiwic2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0IiwiZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0IiwiYnByaW50ZiQwIiwicHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwic3RyaW5naWZ5IiwicHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwiZnVucyIsIm1hcmtfb3Blbl90YWciLCJtYXJrX2Nsb3NlX3RhZyIsInByaW50X29wZW5fdGFnIiwicHJpbnRfY2xvc2VfdGFnIiwic2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwibnVsbF9jaGFyIiwibmV4dF9jaGFyIiwiaWIiLCJwZWVrX2NoYXIiLCJjaGVja2VkX3BlZWtfY2hhciIsImVuZF9vZl9pbnB1dCIsImJlZ2lubmluZ19vZl9pbnB1dCIsIm5hbWVfb2ZfaW5wdXQiLCJjaGFyX2NvdW50IiwicmVzZXRfdG9rZW4iLCJpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciIsInRva2VuX3N0cmluZyIsInRva2VuX2J1ZmZlciIsInNraXBfY2hhciIsImlnbm9yZV9jaGFyIiwic3RvcmVfY2hhciIsImRlZmF1bHRfdG9rZW5fYnVmZmVyX3NpemUiLCJjcmVhdGUkNCIsImluYW1lIiwiZnJvbV9zdHJpbmckMSIsImZyb21fZnVuY3Rpb24kMCIsInNjYW5fY2xvc2VfYXRfZW5kIiwic2Nhbl9yYWlzZV9hdF9lbmQiLCJmcm9tX2ljIiwic2Nhbl9jbG9zZV9pYyIsImVvZiIsInN0ZGliIiwib3Blbl9pbl9maWxlIiwib3Blbl9pbiIsImZyb21fZmlsZSIsImZyb21fZmlsZV9iaW4iLCJmcm9tX2NoYW5uZWwkMCIsImNsb3NlX2luIiwiaWMkMCIsIm1lbW8iLCJtZW1vX2Zyb21faWMiLCJtZW1vX2Zyb21fY2hhbm5lbCIsImJhZF9pbnB1dCIsImJhZF9pbnB1dF9lc2NhcGUiLCJiYWRfdG9rZW5fbGVuZ3RoIiwibWVzc2FnZSIsImJhZF9mbG9hdCIsImJhZF9oZXhfZmxvYXQiLCJjaGFyYWN0ZXJfbWlzbWF0Y2giLCJjaSIsImNoZWNrX3RoaXNfY2hhciIsImNoZWNrX2NoYXIiLCJ0b2tlbl9jaGFyIiwidG9rZW5fYm9vbCIsImludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyIiwidG9rZW5faW50X2xpdGVyYWwiLCJ0b2tlbl9mbG9hdCIsInNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIiwic2Nhbl91bnNpZ25lZF9kZWNpbWFsX2ludCIsInNjYW5fZGlnaXRfcGx1cyIsImJhc2lzIiwiZGlnaXRwIiwid2lkdGgkMyIsImlzX2JpbmFyeV9kaWdpdCIsInNjYW5fYmluYXJ5X2ludCIsImlzX29jdGFsX2RpZ2l0Iiwic2Nhbl9vY3RhbF9pbnQiLCJpc19oZXhhX2RpZ2l0Iiwic2Nhbl9oZXhhZGVjaW1hbF9pbnQiLCJzY2FuX3NpZ24iLCJzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWwiLCJzY2FuX2ludF9jb252ZXJzaW9uIiwic2Nhbl9mcmFjdGlvbmFsX3BhcnQiLCJzY2FuX2V4cG9uZW50X3BhcnQiLCJzY2FuX2Zsb2F0IiwicHJlY2lzaW9uIiwicHJlY2lzaW9uJDAiLCJjaGVja19jYXNlX2luc2Vuc2l0aXZlX3N0cmluZyIsInNjYW5faGV4X2Zsb2F0Iiwid2lkdGgkNCIsIndpZHRoJDUiLCJ3aWR0aCQ2Iiwid2lkdGgkMTAiLCJ3aWR0aCQ3Iiwid2lkdGgkOCIsIndpZHRoJDkiLCJzY2FuX2NhbWxfZmxvYXRfcmVzdCIsIndpZHRoX3ByZWNpc2lvbiIsImZyYWNfd2lkdGgiLCJzY2FuX2NhbWxfZmxvYXQiLCJzY2FuX3N0cmluZyIsInN0cCIsInNjYW5fY2hhciIsImhleGFkZWNpbWFsX3ZhbHVlX29mX2NoYXIiLCJjaGVja19uZXh0X2NoYXIiLCJjaGVja19uZXh0X2NoYXJfZm9yX2NoYXIiLCJjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyIsInNjYW5fYmFja3NsYXNoX2NoYXIiLCJjMCIsImdldF9kaWdpdCIsImdldF9kaWdpdCQwIiwiYzEkMCIsImMyJDAiLCJzY2FuX2NhbWxfY2hhciIsImZpbmRfc3RvcCIsInNjYW5fY2FtbF9zdHJpbmciLCJmaW5kX3N0b3AkMCIsInNraXBfc3BhY2VzIiwic2Nhbl9jaGFyc19pbl9jaGFyX3NldCIsInNjYW5faW5kaWMiLCJzY2FuX2NoYXJzIiwic2NhbmZfYmFkX2lucHV0IiwiZ2V0X2NvdW50ZXIiLCJ3aWR0aF9vZl9wYWRfb3B0Iiwic3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCIsImZtdGluZyIsInRha2VfZm9ybWF0X3JlYWRlcnMkMCIsInRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMkMCIsInJlYWRlciIsIm5ld19rIiwicmVhZGVyc19yZXN0IiwidGFrZV9mb3JtYXRfcmVhZGVycyIsImZtdCQyMyIsImZtdCQyNCIsImZtdCQyNSIsInRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMiLCJtYWtlX3NjYW5mIiwicmVhZGVycyIsInNjYW4kMCIsInN0cl9yZXN0IiwicGFkX3ByZWNfc2NhbmYiLCJzY2FuJDEiLCJzY2FuJDIiLCJzY2FuJDMiLCJzY2FuJDQiLCJjb252JDAiLCJzY2FuJDUiLCJjb252JDEiLCJzY2FuJDYiLCJjb252JDIiLCJzY2FuJDciLCJzY2FuJDgiLCJmbXRpbmdfbGl0JDAiLCJzdHAkMCIsInMkMiIsInN0cl9yZXN0JDAiLCJyZXN0JDI2IiwiYXJnX3Jlc3QiLCJrc2NhbmYiLCJlZiIsImFwcGx5IiwiYXJncyQwIiwiZXhjIiwiYnNjYW5mIiwia3NzY2FuZiIsInNzY2FuZiIsInNjYW5mIiwiYnNjYW5mX2Zvcm1hdCIsImZvcm1hdCIsInNzY2FuZl9mb3JtYXQiLCJmb3JtYXRfZnJvbV9zdHJpbmciLCJ1bmVzY2FwZWQiLCJrZnNjYW5mIiwiZnNjYW5mIiwicmVnaXN0ZXIiLCJyZWdpc3Rlcl9leGNlcHRpb24iLCJvJDAiLCJwYXJhbXMkMCIsImluaXRpYWxfb2JqZWN0X3NpemUiLCJkdW1teV9pdGVtIiwidGFnIiwiY29tcGFyZSQxNCIsImNvbXBhcmUkMTUiLCJjb21wYXJlJDE2IiwiZHVtbXlfdGFibGUiLCJ0YWJsZV9jb3VudCIsImR1bW15X21ldCIsImZpdF9zaXplIiwibmV3X3RhYmxlIiwicHViX2xhYmVscyIsIm1ldGhvZHMiLCJyZXNpemUkMSIsImFycmF5IiwibmV3X3NpemUiLCJvbGRfc2l6ZSIsIm5ld19idWNrIiwibWV0aG9kX2NvdW50IiwiaW5zdF92YXJfY291bnQiLCJuZXdfbWV0aG9kIiwidGFibGUiLCJnZXRfbWV0aG9kX2xhYmVsIiwibGFiZWwiLCJnZXRfbWV0aG9kX2xhYmVscyIsIm5hbWVzIiwic2V0X21ldGhvZCIsImVsZW1lbnQiLCJnZXRfbWV0aG9kIiwidG9fbGlzdCQzIiwiYXJyIiwibmFycm93IiwidmFycyIsInZpcnRfbWV0aHMiLCJjb25jcl9tZXRocyIsInZhcnMkMCIsInZpcnRfbWV0aHMkMCIsImNvbmNyX21ldGhzJDAiLCJ2aXJ0X21ldGhfbGFicyIsImNvbmNyX21ldGhfbGFicyIsImxhYiIsInR2YXJzIiwiYnlfbmFtZSIsImJ5X2xhYmVsIiwibWV0IiwiaG0iLCJ3aWRlbiIsInNhdmVkX3ZhcnMiLCJzYXZlZF9oaWRkZW5fbWV0aHMiLCJuZXdfc2xvdCIsIm5ld192YXJpYWJsZSIsInRvX2FycmF5IiwibmV3X21ldGhvZHNfdmFyaWFibGVzIiwibWV0aHMiLCJ2YWxzIiwibWV0aHMkMCIsIm5tZXRocyIsIm52YWxzIiwiZ2V0X3ZhcmlhYmxlIiwiZ2V0X3ZhcmlhYmxlcyIsImFkZF9pbml0aWFsaXplciIsImNyZWF0ZV90YWJsZSIsInB1YmxpY19tZXRob2RzIiwidGFncyIsImluaXRfY2xhc3MiLCJpbmhlcml0cyIsImNsYSIsInN1cGVyJDAiLCJubSIsIm1ha2VfY2xhc3MiLCJwdWJfbWV0aHMiLCJjbGFzc19pbml0IiwiZW52X2luaXQiLCJtYWtlX2NsYXNzX3N0b3JlIiwiaW5pdF90YWJsZSIsImR1bW15X2NsYXNzIiwibG9jIiwidW5kZWYiLCJjcmVhdGVfb2JqZWN0IiwiY3JlYXRlX29iamVjdF9vcHQiLCJvYmpfMCIsIml0ZXJfZiIsInJ1bl9pbml0aWFsaXplcnMiLCJpbml0cyIsInJ1bl9pbml0aWFsaXplcnNfb3B0IiwiY3JlYXRlX29iamVjdF9hbmRfcnVuX2luaXRpYWxpIiwiZ2V0X2RhdGEkMCIsImJ1aWxkX3BhdGgiLCJrZXlzIiwibG9va3VwX3RhYmxlcyIsInJvb3QiLCJ0YWJsZXMkMiIsInRhYmxlcyQwIiwidGFibGVzJDEiLCJuZXdfY2FjaGUiLCJzZXRfbWV0aG9kcyIsImNsbyIsImNsbyQwIiwibiQyIiwibiQzIiwibiQ0IiwibiQ1IiwibiQ2IiwieCQzIiwibiQ3IiwieCQ0IiwibiQ4IiwibiQ5IiwieCQ1IiwiZiQ4IiwiZSQyIiwibiQxMCIsIngkNiIsImYkOSIsIm4kMTEiLCJ4JDciLCJuJDEyIiwieCQ4IiwibiQxMyIsIm4kMTQiLCJlJDMiLCJuJDE1IiwibSQyIiwieCQ5IiwibSQzIiwibiQxNiIsIm0kNCIsImUkNCIsIm4kMTciLCJtJDUiLCJuJDE4Iiwic3RhdHMkMCIsImluaXRfbW9kX2Jsb2NrIiwiY29tcHMkMCIsIm1vZHUiLCJzaGFwZSIsImZuJDAiLCJjb21wcyIsImluaXRfbW9kIiwidXBkYXRlX21vZF9ibG9jayIsImNsIiwidXBkYXRlX21vZCIsImluaXRpYWxfYnVmZmVyIiwiYnVmZmVyIiwiYnVmcG9zIiwicmVzZXRfYnVmZmVyIiwic3RvcmUiLCJuZXdidWZmZXIiLCJnZXRfc3RyaW5nIiwibWFrZV9sZXhlciIsImtleXdvcmRzIiwia3dkX3RhYmxlIiwiaWRlbnRfb3Jfa2V5d29yZCIsImtleXdvcmRfb3JfZXJyb3IiLCJjb21tZW50IiwiZXNjYXBlIiwiZW5kX2V4cG9uZW50X3BhcnQiLCJleHBvbmVudF9wYXJ0IiwibnVtYmVyIiwiaWRlbnQyIiwibmVnX251bWJlciIsIm5leHRfdG9rZW4kMCIsIm1heWJlX2NvbW1lbnQiLCJuZXh0X3Rva2VuIiwiaGtleSIsImNsZWFuIiwiaW5zZXJ0X2J1Y2tldCIsImNvbnRhaW5lciIsInJlbW92ZV9idWNrZXQiLCJoayIsInJlcGxhY2VfYnVja2V0IiwibmV3X2QiLCJidWNrZXRfbGVuZ3RoX2FsaXZlIiwic3RhdHNfYWxpdmUiLCJjcmVhdGUkNSIsImdldF9rZXkkMCIsImdldF9rZXlfY29weSQwIiwic2V0X2tleSQwIiwidW5zZXRfa2V5JDAiLCJjaGVja19rZXkkMCIsImJsaXRfa2V5JDAiLCJnZXRfZGF0YSQxIiwiZ2V0X2RhdGFfY29weSIsInNldF9kYXRhIiwidW5zZXRfZGF0YSIsImNoZWNrX2RhdGEiLCJibGl0X2RhdGEiLCJtYWtlJDQiLCJlcGgiLCJxdWVyeSIsInNldF9rZXlfZGF0YSIsIm1ha2UkNSIsImFkZCQxIiwidGVzdF9rZXkiLCJyZW1vdmUkMCIsImZpbmQkMiIsImxlbmd0aCQ3IiwiY2xlYXIkMyIsImNyZWF0ZSQ2IiwiZ2V0X2tleTEiLCJnZXRfa2V5MV9jb3B5Iiwic2V0X2tleTEiLCJ1bnNldF9rZXkxIiwiY2hlY2tfa2V5MSIsImdldF9rZXkyIiwiZ2V0X2tleTJfY29weSIsInNldF9rZXkyIiwidW5zZXRfa2V5MiIsImNoZWNrX2tleTIiLCJibGl0X2tleTEiLCJibGl0X2tleTIiLCJibGl0X2tleTEyIiwiZ2V0X2RhdGEkMiIsImdldF9kYXRhX2NvcHkkMCIsInNldF9kYXRhJDAiLCJ1bnNldF9kYXRhJDAiLCJjaGVja19kYXRhJDAiLCJibGl0X2RhdGEkMCIsIm1ha2UkNiIsImtleTEiLCJrZXkyIiwicXVlcnkkMCIsImsyJDAiLCJrMSQwIiwibWFrZSQ3IiwiYWRkJDIiLCJ0ZXN0X2tleXMiLCJyZW1vdmUkMSIsImZpbmQkMyIsImxlbmd0aCQ4IiwiY2xlYXIkNCIsImNyZWF0ZSQ3IiwibGVuZ3RoJDkiLCJnZXRfa2V5JDEiLCJnZXRfa2V5X2NvcHkkMSIsInNldF9rZXkkMSIsInVuc2V0X2tleSQxIiwiY2hlY2tfa2V5JDEiLCJibGl0X2tleSQxIiwiZ2V0X2RhdGEkMyIsImdldF9kYXRhX2NvcHkkMSIsInNldF9kYXRhJDEiLCJ1bnNldF9kYXRhJDEiLCJjaGVja19kYXRhJDEiLCJibGl0X2RhdGEkMSIsIm1ha2UkOCIsInF1ZXJ5JDEiLCJraSIsImswIiwibWFrZSQ5IiwiYWRkJDMiLCJ0ZXN0X2tleXMkMCIsInJlbW92ZSQyIiwiZmluZCQ0IiwibGVuZ3RoJDEwIiwiY2xlYXIkNSIsImdlbmVyaWNfYmFzZW5hbWUiLCJpc19kaXJfc2VwIiwiZ2VuZXJpY19kaXJuYW1lIiwiaXNfcmVsYXRpdmUiLCJpc19pbXBsaWNpdCIsImNoZWNrX3N1ZmZpeCIsInN1ZmYiLCJjaG9wX3N1ZmZpeF9vcHQiLCJsZW5fZiIsInF1b3RlIiwicXVvdGVfY29tbWFuZCIsImJhc2VuYW1lIiwiZGlybmFtZSIsImlzX2Rpcl9zZXAkMCIsImlzX3JlbGF0aXZlJDAiLCJpc19pbXBsaWNpdCQwIiwiY2hlY2tfc3VmZml4JDAiLCJjaG9wX3N1ZmZpeF9vcHQkMCIsInRlbXBfZGlyX25hbWUiLCJxdW90ZSQwIiwiYWRkX2JzIiwibG9vcCQwIiwibG9vcF9icyIsInF1b3RlX2NtZF9maWxlbmFtZSIsInF1b3RlX2NvbW1hbmQkMCIsImRyaXZlX2FuZF9wYXRoIiwiZGlybmFtZSQwIiwicGF0aCIsImRyaXZlIiwiZGlyIiwiYmFzZW5hbWUkMCIsImJhc2VuYW1lJDEiLCJkaXJuYW1lJDEiLCJudWxsJDMiLCJjdXJyZW50X2Rpcl9uYW1lJDIiLCJwYXJlbnRfZGlyX25hbWUkMiIsImRpcl9zZXAkMiIsImlzX2Rpcl9zZXAkMSIsImlzX3JlbGF0aXZlJDEiLCJpc19pbXBsaWNpdCQxIiwiY2hlY2tfc3VmZml4JDEiLCJjaG9wX3N1ZmZpeF9vcHQkMSIsInRlbXBfZGlyX25hbWUkMCIsInF1b3RlJDEiLCJxdW90ZV9jb21tYW5kJDEiLCJiYXNlbmFtZSQyIiwiZGlybmFtZSQyIiwiY29uY2F0JDQiLCJjaG9wX3N1ZmZpeCIsImV4dGVuc2lvbl9sZW4iLCJleHRlbnNpb24iLCJjaG9wX2V4dGVuc2lvbiIsInJlbW92ZV9leHRlbnNpb24iLCJwcm5nJDAiLCJ0ZW1wX2ZpbGVfbmFtZSIsInRlbXBfZGlyIiwicm5kIiwiY3VycmVudF90ZW1wX2Rpcl9uYW1lIiwic2V0X3RlbXBfZGlyX25hbWUiLCJnZXRfdGVtcF9kaXJfbmFtZSIsInRlbXBfZmlsZSIsInRyeV9uYW1lIiwiY291bnRlciQxIiwib3Blbl90ZW1wX2ZpbGUiLCJzdGgkMCIsInBlcm1zIiwic3RoJDEiLCJhZGQkNCIsInN1YiQ0IiwibmVnIiwiY29uaiIsIm11bCIsImRpdiIsImludiIsIm5vcm0yIiwibm9ybSIsInEkMCIsInBvbGFyIiwic3FydCIsInckMCIsImV4cCIsImxvZyIsInBvdyIsImZsb2F0MzIiLCJmbG9hdDY0IiwiaW50OF9zaWduZWQiLCJpbnQ4X3Vuc2lnbmVkIiwiaW50MTZfc2lnbmVkIiwiaW50MTZfdW5zaWduZWQiLCJpbnQzMiQxIiwiaW50NjQkMSIsImludCQyIiwibmF0aXZlaW50JDEiLCJjb21wbGV4MzIiLCJjb21wbGV4NjQiLCJraW5kX3NpemVfaW5fYnl0ZXMiLCJjX2xheW91dCIsImZvcnRyYW5fbGF5b3V0IiwiY2xvb3AiLCJpZHgiLCJjb2wiLCJmbG9vcCIsImluaXQkNiIsImxheW91dCIsImRpbXMiLCJkbGVuIiwic2l6ZV9pbl9ieXRlcyIsImNyZWF0ZSQ4IiwiZ2V0JDMiLCJzZXQkMiIsInNpemVfaW5fYnl0ZXMkMCIsIm9mX3ZhbHVlIiwiY3JlYXRlJDkiLCJkaW0iLCJzaXplX2luX2J5dGVzJDEiLCJzbGljZSIsImluaXQkNyIsIm9mX2FycmF5IiwiYmEiLCJjcmVhdGUkMTAiLCJkaW0xIiwiZGltMiIsInNpemVfaW5fYnl0ZXMkMiIsInNsaWNlX2xlZnQiLCJzbGljZV9yaWdodCIsImluaXQkOCIsIm9mX2FycmF5JDAiLCJyb3ciLCJjcmVhdGUkMTEiLCJkaW0zIiwic2l6ZV9pbl9ieXRlcyQzIiwic2xpY2VfbGVmdF8xIiwic2xpY2VfcmlnaHRfMSIsInNsaWNlX2xlZnRfMiIsInNsaWNlX3JpZ2h0XzIiLCJpbml0JDkiLCJvZl9hcnJheSQxIiwiYXJyYXkwX29mX2dlbmFycmF5IiwiYXJyYXkxX29mX2dlbmFycmF5IiwiYXJyYXkyX29mX2dlbmFycmF5IiwiYXJyYXkzX29mX2dlbmFycmF5IiwicmVzaGFwZV8wIiwicmVzaGFwZV8xIiwicmVzaGFwZV8yIiwicmVzaGFwZV8zIiwid2l0aF9vcGVuIiwib3BlbmZ1biIsIndpdGhfb3Blbl9iaW4iLCJ3aXRoX29wZW5fdGV4dCIsIndpdGhfb3Blbl9nZW4iLCJzZWVrIiwibGVuZ3RoJDExIiwiaW5wdXRfY2hhciQwIiwiaW5wdXRfYnl0ZSQwIiwiaW5wdXRfbGluZSQwIiwicmVhbGx5X2lucHV0JDAiLCJyZWFsbHlfaW5wdXRfc3RyaW5nJDAiLCJyZWFkX3VwdG8iLCJlbnN1cmUiLCJuZXdfbGVuJDAiLCJuZXdfbGVuJDEiLCJpbnB1dF9hbGwiLCJjaHVua19zaXplIiwiaW5pdGlhbF9zaXplJDAiLCJpbml0aWFsX3NpemUkMSIsIm5yZWFkIiwiYnVmJDAiLCJidWYkMSIsInJlbSIsIndpdGhfb3BlbiQwIiwid2l0aF9vcGVuX2JpbiQwIiwid2l0aF9vcGVuX3RleHQkMCIsIndpdGhfb3Blbl9nZW4kMCIsInNlZWskMCIsInBvcyQwIiwibGVuZ3RoJDEyIiwidGFyaWYiLCJkZXN0aW5hdGFpcmVzIiwicGllY2VzIiwiZm91cm5pdHVyZXMiLCJzaG9ydF9zdHJpbmdfb2ZfcGllY2UiLCJsb25nX3N0cmluZ19vZl9waWVjZSIsImV4biIsIm1vZHVsZSIsImdsb2JhbFRoaXMiLCJudWxsIiwidW5kZWZpbmVkIiwianNvb19leHBvcnRzIiwiZXZlbnQiLCJzZXRfc3RyaW5nX2lucHV0X2J5X2lkIiwibm0iLCJ2IiwiaW5wIiwicmVhZF9zdHJpbmdfaW5wdXRfYnlfaWQiLCJ6ZXJvX2ludF9pbnB1dF9ieV9pZCIsInJlYWRfaW50X2lucHV0X2J5X2lkIiwic2V0X3RkX2J5X2lkIiwidGQiLCJmaWVsZF9pZF9ieV9mb3Vybml0dXJlIiwiZiIsInAiLCJmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHUiLCJhbGxfbmFtZXMiLCJjb21wdXRlIiwicyIsImZpZWxkX2lkIiwicXRlIiwidG90YWwiLCJhIiwiYiIsInNob3J0JDAiLCJkZXRhaWwiLCJxIiwiZGVzY3IiLCJyZXN1bWUiLCJyZXNldF9mb3JtIiwiZG9pdCJdLCJzb3VyY2VzIjpbIiIsIi9idWlsdGluLytpbnQ2NC5qcyIsIi9idWlsdGluLyttbEJ5dGVzLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytpZWVlXzc1NC5qcyIsIi9idWlsdGluLytmc19ub2RlLmpzIiwiL2J1aWx0aW4vK2ZzLmpzIiwiL2J1aWx0aW4vK3VuaXguanMiLCIvYnVpbHRpbi8rc3lzLmpzIiwiL2J1aWx0aW4vK2ZzX2Zha2UuanMiLCIvYnVpbHRpbi8rbmF0LmpzIiwiL2J1aWx0aW4vK2dyYXBoaWNzLmpzIiwiL2J1aWx0aW4vK21hcnNoYWwuanMiLCIvYnVpbHRpbi8raW8uanMiLCIvYnVpbHRpbi8rZ2MuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8ranNsaWIuanMiLCIvYnVpbHRpbi8rcGFyc2luZy5qcyIsIi9idWlsdGluLytpbnRzLmpzIiwiL2J1aWx0aW4vK2hhc2guanMiLCIvYnVpbHRpbi8rY29tcGFyZS5qcyIsIi9idWlsdGluLytqc2xpYl9qc19vZl9vY2FtbC5qcyIsIi9idWlsdGluLytvYmouanMiLCIvYnVpbHRpbi8rYmlnc3RyaW5nLmpzIiwiL2J1aWx0aW4vK2JhY2t0cmFjZS5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rYXJyYXkuanMiLCIvYnVpbHRpbi8rd2Vhay5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8rc3RyLmpzIiwiL2J1aWx0aW4vK2JpZ3N0cmluZy1jc3RydWN0LmpzIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC91Y2hhci5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvaW50NjQubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2xleGluZy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9wcmludGV4Yy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvZmlsZW5hbWUubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2NvbXBsZXgubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvY2FtbGludGVybmFsQXRvbWljLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9zdGRsaWIubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3BlcnZhc2l2ZXMubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2Zsb2F0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9yYW5kb20ubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2xpc3QubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2luX2NoYW5uZWwubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL291dF9jaGFubmVsLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9laXRoZXIubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL25hdGl2ZWludC5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvb2JqLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9jYW1saW50ZXJuYWxMYXp5Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9sYXp5Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9zZXEubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL29wdGlvbi5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvcmVzdWx0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9ib29sLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9jaGFyLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9ieXRlcy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvaW50Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9zdHJpbmcubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3VuaXQubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL21hcnNoYWwubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2FycmF5Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9pbnQzMi5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvcGFyc2luZy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvc2V0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9tYXAubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3N0YWNrLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9xdWV1ZS5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvc3RyZWFtLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9idWZmZXIubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3ByaW50Zi5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvYXJnLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9mdW4ubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2djLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9kaWdlc3QubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2hhc2h0YmwubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3dlYWsubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2Zvcm1hdC5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvc2NhbmYubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2NhbGxiYWNrLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9jYW1saW50ZXJuYWxPTy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvY2FtbGludGVybmFsTW9kLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9nZW5sZXgubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2VwaGVtZXJvbi5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvYmlnYXJyYXkubWwiLCIvd29ya3NwYWNlX3Jvb3QvaW52ZW50YWlyZV9saW5nZS9pbnZlbnRhaXJlX2xpbmdlLm1sIiwiIiwiIiwiL3dvcmtzcGFjZV9yb290L21lY2hhbmljL21lY2hhbmljLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9zdGRfZXhpdC5tbCJdLCJtYXBwaW5ncyI6Ijs7Q0FDQyxTQUFVQTtXQUNGQzs7OztLQUNMQztPQUNFO1FBQ0M7VUFBc0JGLDhDQUVoQkc7UUFDSEM7SUFFUixTQUFTRDtNQUNQLElBQUlFLE9BQVNILFFBQVFJO01BQ3JCRCxvQkFBb0JBO2FBQ2JMLG9CQUNULENBYkQ7R0FjQ0E7OztJQzJORixTQUFTTyxtQkFBbUJDLEdBQUssU0FBUSxVQUFZO0lDekxyRCxTQUFTQyxnQkFBZ0JDLEVBQUdDO01BQzFCLEdBQUdELE9BQVE7TUFDWCxHQUFJQyxTQUFVLE9BQVEsU0FBU0Q7TUFDL0IsSUFBTSxLQUFRO01BQ2Q7T0FBUSxDQUNOLEdBQUlBLE1BQU9FLEtBQUtEO1FBQ2hCRDtRQUNBLEdBQUlBLE9BQVEsT0FBT0U7UUFDbkJELEtBQUtBO1FBQ0xFO1FBQ0EsR0FBSUEsT0FBUSxhQU1oQjtJRDdDQSxJQUFJQyxrQkFBb0I7SUVBeEIsU0FBU0Usb0JBQXFCQyxLQUFPLE1BQU1BLEdBQUs7SUMyQ2hELElBQUlDO0lESEosU0FBU0M7TUFDUCxvQkFBb0JELGtDQUN0QjtJRnRDQSxTQUFTRSxRQUFTQyxHQUFHQyxHQUFHQztNQUN0QnJCLFVBQVVtQixjQUNWbkIsVUFBVW9CLGNBQ1ZwQixVQUFVcUIsV0FDWjtJQUNBSDtJQUNBQTs7ZUFDRSxXQUFXQSxRQUFRbEIsUUFBUUEsUUFBUUEsUUFEWjtJQUl6QmtCOzthQUF1Q1o7TUFDckMsR0FBSU4sVUFBVU0sS0FBTTtNQUNwQixHQUFJTixVQUFVTSxLQUFNO01BQ3BCLEdBQUlOLFVBQVVNLEtBQU07TUFDcEIsR0FBSU4sVUFBVU0sS0FBTTtNQUNwQixHQUFJTixVQUFVTSxLQUFNO01BQ3BCLEdBQUlOLFVBQVVNLEtBQU07TUFDcEIsUUFQMkI7SUFTN0JZOzthQUFzQ1o7TUFDcEMsSUFBTyxHQUFFTixjQUNELElBQUVNO01BQ1YsR0FBSWUsS0FBS0MsSUFBSztNQUNkLEdBQUlELEtBQUtDLElBQUs7TUFDZCxHQUFJdEIsVUFBVU0sS0FBTTtNQUNwQixHQUFJTixVQUFVTSxLQUFNO01BQ3BCLEdBQUlOLFVBQVVNLEtBQU07TUFDcEIsR0FBSU4sVUFBVU0sS0FBTTtNQUNwQixRQVQwQjtJQVc1Qlk7OztNQUNFLElBQU8sS0FBSWxCLFFBQ0osS0FBSUEsV0FBV21CLFVBQ2YsS0FBSW5CLFdBQVdvQjtNQUN0QixXQUFXRixRQUFRQyxHQUFJQyxHQUFJQyxHQUpMO0lBTXhCSDs7YUFBa0NaO01BQ2hDO09BQU8sR0FBRU4sVUFBVU07T0FDWixHQUFFTixVQUFVTSxRQUFRYTtPQUNwQixHQUFFbkIsVUFBVU0sUUFBUWM7TUFDM0IsV0FBV0YsUUFBUUMsR0FBSUMsR0FBSUMsR0FKTDtJQU14Qkg7O2FBQWtDWjtNQUNoQztPQUFPLEdBQUVOLFVBQVVNO09BQ1osR0FBRU4sVUFBVU0sUUFBUWE7T0FDcEIsR0FBRW5CLFVBQVVNLFFBQVFjO01BQzNCLFdBQVdGLFFBQVFDLEdBQUlDLEdBQUlDLEdBSkw7SUFNeEJIOzthQUFrQ1o7TUFDaEM7T0FBTyxHQUFFTixVQUFVTTtPQUNaLElBQUlhLEtBQUtQLHlCQUEwQlosVUFBVU0sT0FBT04sVUFBVU07T0FDOUQ7U0FBSWMsS0FBS1I7O1FBQTBCWjs7UUFBVU07O1FBQU9OOztRQUFVTTs7UUFBT047O1FBQVVNO01BQ3RGLFdBQVdZLFFBQVFDLEdBQUlDLEdBQUlDLEdBSkw7SUFNeEJIOztlQUNFLFFBQVFsQixVQUFRQSxVQUFRQSxhQURDO0lBRzNCa0IscUNBQ0UsT0FBUWxCLGlCQURnQjtJQUcxQmtCOzthQUFrQ1o7TUFDaEMsV0FBV1ksUUFBUWxCLFVBQVVNLEtBQU1OLFVBQVVNLEtBQU1OLFVBQVVNLEtBRHZDO0lBR3hCWTs7YUFBaUNaO01BQy9CLFdBQVdZLFFBQVFsQixVQUFRTSxLQUFNTixVQUFRTSxLQUFNTixVQUFRTSxLQURsQztJQUd2Qlk7O2FBQWtDWjtNQUNoQyxXQUFXWSxRQUFRbEIsVUFBUU0sS0FBTU4sVUFBUU0sS0FBTU4sVUFBUU0sS0FEakM7SUFHeEJZOzthQUF5Q1Q7TUFDdkNBLElBQUlBO01BQ0osR0FBSUEsT0FBUSxPQUFPVDtNQUNuQixHQUFJUztPQUFRO2VBQ0NTO2dCQUFTbEIsV0FBV1M7Z0JBQ1ZULFdBQVdTLElBQU1ULGdCQUFpQlM7Z0JBQ2xDVCxXQUFXUyxJQUFNVCxnQkFBaUJTO01BRXpELEdBQUlBO09BQ0Y7ZUFBV1M7a0JBQ1NsQixXQUFZUyxPQUNYVCxXQUFZUyxTQUFZVCxnQkFBaUJTO01BQ2hFLFdBQVdTLFlBQWNsQixXQUFZUyxPQVpSO0lBYy9CUzs7YUFBbURUO01BQ2pEQSxJQUFJQTtNQUNKLEdBQUlBLE9BQVEsT0FBT1Q7TUFDbkIsR0FBSVM7T0FDRjtlQUFXUztnQkFDUmxCLFdBQVdTLElBQU1ULGdCQUFpQlM7Z0JBQ2xDVCxXQUFXUyxJQUFNVCxnQkFBaUJTO2dCQUNsQ1QsV0FBV1M7TUFDaEIsR0FBSUE7T0FDRjtlQUFXUztnQkFDUmxCLFdBQVlTLFNBQVlULGdCQUFpQlMsRUFDekNULFdBQVlTO01BRWpCLFdBQVdTLFFBQVNsQixXQUFZUyxXQWJPO0lBZXpDUzs7YUFBMENUO01BQ3hDQSxJQUFJQTtNQUNKLEdBQUlBLE9BQVEsT0FBT1Q7TUFDbkIsSUFBSXVCLEVBQUt2QjtNQUNULEdBQUlTO09BQ0Y7ZUFBV1M7Z0JBQ1JsQixXQUFXUyxJQUFNVCxnQkFBaUJTO2dCQUNsQ1QsV0FBV1MsSUFBTWMsVUFBV2Q7Z0JBQzNCVCxpQkFBa0JTO01BTHhCLElBTUllLEtBQVF4QjtNQUNaLEdBQUlTO09BQ0Y7ZUFBV1M7Z0JBQ1JsQixXQUFZUyxTQUFZVCxnQkFBaUJTO2dCQUN6Q1QsaUJBQW1CUztnQkFDcEJlO01BQ0osV0FBV04sUUFBVWxCLGlCQUFtQlMsT0FBU2UsS0FBTUEsS0FmekI7SUFpQmhDTjs7O01BQ0VsQixVQUFXQSxlQUFpQkE7TUFDNUJBLFdBQVlBLGVBQWlCQTtNQUM3QkEsVUFBV0EsdUJBSFk7SUFLekJrQjs7O01BQ0VsQixXQUFZQSxnQkFBa0JBO01BQzlCQSxXQUFZQSxnQkFBa0JBO01BQzlCQSxVQUFVQSxhQUhhO0lBS3pCa0I7O2FBQXNDWjtNQUNwQztPQUFXO09BQ0MsUUFBRTtPQUNGLFFBQUU7T0FDRCxhQUFNWTtNQUNuQixNQUFPLGlCQUFpQlMsYUFBYyxDQUNwQ0YsU0FDQTtNQUVGLE1BQU9BO09BQWEsQ0FDbEJBO1FBQ0E7UUFDQSxHQUFJLGlCQUFpQkU7U0FBZSxDQUNsQ0MsY0FDQUYsVUFBVSxZQUFZQztRQUV4QjtNQUVGLGlCQUFvQkMsaUJBQW9CRixRQWxCZDtJQW9CNUJSOzthQUFrQ1c7TUFFaEMsSUFBSXZCLEVBQUlOO01BQ1IsR0FBSSxXQUFZO01BRGhCLElBRUl3QixLQUFPbEIsT0FBT3VCO01BQ2xCLEdBQUl2QixjQUFlQSxJQUFJO01BQ3ZCLEdBQUl1QixjQUFlQSxJQUFJO01BSnZCLElBS0lDLEVBQUksVUFBVUQ7TUFDbEIsR0FBSUwsY0FBZU0sSUFBSTtNQUN2QixPQUFPQSxDQVRlO0lBV3hCWjs7YUFBa0NXO01BRWhDLElBQUl2QixFQUFJTjtNQUNSLEdBQUksV0FBWTtNQURoQixJQUVJd0IsS0FBT2xCO01BQ1gsR0FBSUEsY0FBZUEsSUFBSTtNQUN2QixHQUFJdUIsY0FBZUEsSUFBSTtNQUp2QixJQUtJbkIsRUFBSSxVQUFVbUI7TUFDbEIsR0FBSUwsY0FBZWQsSUFBSTtNQUN2QixPQUFPQSxDQVRlO0lBV3hCUSxxQ0FDRSxPQUFPbEIsVUFBV0EsYUFETTtJQUcxQmtCOzs7TUFDRSxRQUFTbEI7O2FBQWlCOzthQUFrQkE7O2FBQVU7O2FBQW1CQSxPQUQvQztJQUc1QmtCOzs7TUFDRSxRQUFRbEI7Y0FDQUE7Y0FDQUE7Y0FDQ0E7Y0FDREE7Y0FDQUE7Y0FDQ0E7Y0FDREEsZUFSa0I7SUFVNUJrQjs7ZUFDRSxPQUFPbEIsV0FBWUEscUJBREk7SUFHekJrQjs7ZUFDRSxPQUFTbEIseUJBQTRCQSxhQURkO0lBdUR6QixTQUFTK0Isb0JBQXFCekI7TUFDNUIsV0FBV1ksUUFBUVosYUFBZUEsbUJBQXNCQSxpQkFDMUQ7SUFHQSxTQUFTMEIsb0JBQXFCMUIsR0FBSyxPQUFPLFNBQVU7SUFqQ3BELFNBQVMyQix1QkFBdUIzQixHQUFLLFNBQVEsU0FBVztJQWhCeEQsU0FBUzRCLGVBQWdCNUIsR0FBSyxPQUFPLE9BQVE7SUNySjdDLFNBQVM2Qix5QkFBMEJDLEVBQUdDLEVBQUdDO01BQ3ZDLElBQUlDLEVBQUlDO01BQ1IsR0FBSUgsVUFBVUMsZUFBZUEsT0FBT0YsU0FBVSxPQUFPLFFBQVNLLEtBQU1MO01BRHBFLElBRUkzQjtNQUNKLFNBQVc2QixJQUFLRCxVQUFVQztPQUN4QjdCLEtBQUssUUFBU2dDLEtBQU0sUUFBUUosRUFBRUEsSUFBSSxTQUFTQztNQUM3QyxPQUFPN0IsQ0FDVDtJQTJXQSxTQUFTaUMsNkJBQThCakM7TUFFckMsR0FBSUE7T0FDRkEsT0FBTyxnQkFBZ0JBLE1BQU1BOztPQUU3QkEsTUFBTSx5QkFBMEJBLE1BQVFBO01BQzFDQSxPQUNGO0lBc1dBLFNBQVNrQyx1QkFBdUJsQztNQUM3QkEsV0FBWSw2QkFBNkJBLEdBQzFDLE9BQU9BLEdBQUk7SUMvd0JiLFNBQVNtQyxvQkFBcUI3QixJQUFLOEIsS0FBTyxTQUFVOUIsSUFBSzhCLElBQU07SUQwSS9ELFNBQVNDLGNBQWVyQztNQUV0QixHQUFJQTtPQUFlLENBRWpCLElBQVcsSUFBRjRCLElBQU9BLElBQUk1QixTQUFVNEIsSUFBSyxHQUFJLGFBQWFBLFNBQVU7UUFDOUQ7O09BRUEsU0FBUSxvQkFBb0I1QixFQUNoQztJQXZEQSxTQUFTc0MsbUJBQW1CdEM7TUFDMUIsUUFBVyxLQUFRLEtBQU15QyxFQUFHQyxHQUFJQyxHQUFJQyxFQUFLLElBQU8sRUFBRTVDLFNBQVU0QixJQUFJMUIsRUFBRzBCO09BQUssQ0FDdEVjLEtBQUssYUFBYWQ7UUFDbEIsR0FBSWM7U0FBVyxDQUNiLElBQVcsSUFBRkcsRUFBSWpCLE1BQVFpQixJQUFJM0MsTUFBT3dDLEtBQUssYUFBYUcsV0FBWUEsSUFBSTtVQUNsRSxHQUFJQSxJQUFJakI7V0FBUyxDQUFFLGNBQWdCVyxLQUFLQyxFQUFHQSxPQUFRRCxLQUFLLFFBQVFYLEVBQUdpQjs7V0FDOURMLEtBQUssUUFBUVosRUFBR2lCO1VBQ3JCLEdBQUlBLEtBQUszQyxFQUFHO1VBQ1owQixJQUFJaUI7UUFFTkQ7UUFDQSxLQUFPaEIsSUFBSTFCLE9BQVN5QyxLQUFLLGFBQWFmO1NBQW9CLENBQ3hEYSxJQUFJRSxNQUFNRDtVQUNWLEdBQUlBO1dBQVcsQ0FDYkUsSUFBSUgsV0FDSixHQUFJRyxTQUFVQTs7V0FDVCxDQUNMQTtZQUNBLEtBQU9oQixJQUFJMUIsT0FBU3lDLEtBQUssYUFBYWY7YUFBb0IsQ0FDeERhLElBQUlFLE1BQU1GO2NBQ1YsR0FBSUM7ZUFBVyxDQUNiRSxJQUFJSDtnQkFDSixHQUFLRyxhQUFnQkEsZUFBaUJBLFdBQWNBOztlQUMvQyxDQUNMQTtnQkFDQTtvQkFBT2hCOztrQkFBSTFCOztvQkFBU3lDLEtBQUssYUFBYWY7Ozs7a0JBQ2pDYzs7O2lCQUFZLENBQ2ZFLElBQUlELGtCQUFrQkY7a0JBQ3RCLEdBQUlHLGVBQWVBLGFBQWNBO1FBTTNDLEdBQUlBO1NBQU8sQ0FDVGhCLEtBQUtnQixFQUNMSjs7U0FDSyxHQUFJSTtVQUNUSixLQUFLLDhCQUE4QkksbUJBQW9CQTs7VUFFdkRKLEtBQUssb0JBQW9CSTtRQUMzQixHQUFJSixnQkFBaUIsQ0FBQyxjQUFnQkQsS0FBS0MsRUFBR0E7TUFFaEQsT0FBT0QsSUFBRUMsQ0FDWDtJQTBQQSxTQUFTTSxRQUFTeEMsSUFBS3lDLFNBQVVDO01BQy9CekQsU0FBT2UsSUFBS2YsU0FBT3dELFNBQVV4RCxTQUFPeUQsTUFDdEM7SUFDQUY7OztNQUNFLE9BQVF2RDtlQUVOLE9BQU9BO2dCQUVQLDZCQUE2QkE7U0FFN0IsR0FBSSxjQUFjQSxRQUFTLENBQ3pCQSxXQUNBLE9BQU9BLE9BRVRBO2VBRUEsT0FBT0E7U0Fia0I7SUFnQjdCdUQ7OztNQUNFLElBQUk3QyxFQUFJO01BQ1IsR0FBR1YsWUFBYSxPQUFPVTtNQUN2QixPQUFPLG1CQUFtQkEsRUFIQTtJQUs1QjZDOzs7TUFDRSxJQUFJRyxRQUFVMUQsWUFBYyxlQUFpQkE7TUFDN0MsV0FBV3VELFFBQVF2RCxPQUFPMEQsUUFBUTFELE9BRlY7SUE4UzFCLFNBQVMyRCxzQkFBc0JsRCxHQUFLLFdBQVc4QyxVQUFVOUMsRUFBRUEsU0FBVztJQWlFdEUsU0FBU21ELHVCQUF1Qm5ELEdBQUssT0FBTyxzQkFBc0JBLEVBQUk7SUNqd0J0RSxTQUFTb0QsdUJBQXdCOUMsSUFBSytDO01BQ3BDLG9CQUFxQi9DLElBQUssdUJBQXVCK0MsS0FDbkQ7SUFhQSxTQUFTQyxzQkFBdUJEO01BQzlCLHVCQUF1QjlDLGtDQUFtQzhDLElBQzVEO0lFN0JBLFNBQVNFLGtCQUFtQkM7TUFDMUJBLE1BQU0sdUJBQXVCQTtNQUM3QixJQUFJM0IsSUFBTTJCO01BQ1YsR0FBSTNCLFNBQVU7TUFEZDtPQUVJQzs7Ozs7Ozs7Ozs7O01BSUosSUFBVyxJQUFGRixJQUFPQSxJQUFJQyxJQUFLRDtPQUFLLENBQzVCLElBQUlhLEVBQUksV0FBV2I7UUFDbkIsT0FBUWE7bUJBRU5YLGdCQUFpQjs7bUJBRWpCQSxjQUFjVyxFQUFHO21CQUVqQlgsZUFBZ0I7bUJBRWhCQSxtQkFBb0I7Ozs7Ozs7Ozs7V0FHcEJBO1dBQ0EsTUFBT1csSUFBRSxlQUFlYixRQUFTYSxVQUFVQTtZQUFRLENBQ2pEWCxVQUFVQSxlQUFlVyxFQUFHYjtXQUU5QkE7V0FDQTs7V0FFQUU7V0FDQUY7V0FDQSxNQUFPYSxJQUFFLGVBQWViLFFBQVNhLFVBQVVBO1lBQVEsQ0FDakRYLFNBQVNBLGNBQWNXLEVBQUdiO1dBRTVCQTs7bUJBRUFFO21CQUVBQSxZQUFhO21CQUViQSxZQUFhO21CQUViQSxZQUFhQSxtQkFBb0I7bUJBRWpDQSxXQUFZOzs7bUJBRVpBLG9CQUFxQkEsU0FBU1csRUFBRzs7OztXQUVqQ1g7V0FBcUJBO1dBQ3JCQSxTQUFTO1dBQWtCOztNQUcvQixPQUFPQSxDQUNUO0lBSUEsU0FBUzJCLHVCQUF1QjNCLEVBQUc0QjtNQUNqQyxHQUFJNUIsWUFBYTRCLFlBQVk7TUFDN0IsSUFBSTdCLElBQU02QjtNQUVWLEdBQUk1QixpQkFBaUJBLGNBQWNBLG9CQUFxQkQ7TUFDeEQsR0FBSUMsWUFBYSxDQUNmLEdBQUlBLFlBQWFELFNBQ2pCLEdBQUlDLGFBQWNEO01BTHBCLElBUUk4QjtNQUNKLEdBQUk3QixvQkFBb0JBO09BQ3RCLElBQVcsSUFBRkYsRUFBSUMsSUFBS0QsSUFBSUUsUUFBU0YsSUFBSytCO01BQ3RDLEdBQUk3QjtPQUFjLEdBQ1pBO1FBQVk2Qjs7UUFDWCxHQUFJN0IsbUJBQW9CNkIsVUFBVTdCO01BRXpDLEdBQUlBLGVBQWVBLFlBQWE2QjtNQUNoQyxHQUFJN0IsZUFBZUEsYUFBYzZCO01BQ2pDLEdBQUk3QixvQkFBb0JBO09BQ3RCLElBQVcsSUFBRkYsRUFBSUMsSUFBS0QsSUFBSUUsUUFBU0YsSUFBSytCO01BQ3RDQSxVQUFVRDtNQUNWLEdBQUk1QixpQkFDRixJQUFXLElBQUZGLEVBQUlDLElBQUtELElBQUlFLFFBQVNGLElBQUsrQjtNQUN0QyxPQUFPLHVCQUF1QkEsT0FDaEM7SUo0TEEsU0FBU0Msa0JBQW1CSixJQUFLM0Q7TUFDL0IsSUFBSWlDLEVBQUksa0JBQWtCMEI7TUFDMUIsR0FBSTFCLGdCQUFnQix1QkFBdUJqQztPQUFJLENBQzdDaUMsYUFBYWpDLElBQUksZUFBZUE7TUFGbEM7T0FJVztPQUNELE1BQUUsb0JBQW9CaUM7T0FDdEI7TUFDVjtPQUFHLENBQ0QsSUFBSWlDLEVBQUksVUFBVUY7UUFDbEJoRSxJQUFJa0U7UUFDSkosU0FBUyxhQUFhLG9CQUFvQkksY0FBY0o7O1VBQy9DLG1CQUFtQjlEO01BQzlCLEdBQUlpQztPQUFhLENBQ2ZBO1FBQ0EsSUFBSS9CLEVBQUkrQixTQUFTNkI7UUFDakIsR0FBSTVELE1BQU80RCxTQUFTLGdCQUFpQjVELFNBQVU0RDtNQUVqRCxPQUFPLHVCQUF1QjdCLEVBQUc2QixPQUNuQztJSzNDQSxTQUFTSyxpQkFBa0JuRSxHQUFLLE9BQU8sV0FBV0EsRUFBSTtJSm1pQnRELFNBQVNvRSx3QkFBd0JqRSxHQUMvQixPQUFPLFdBQ1Q7SUszeEJBLFNBQVNrRTtNQUNQLGNBQ1M1RTs7OztvQkFDS0E7Ozs7b0JBQ0FBOzt3QkFDaEI7SUMwQkEsU0FBUzZFO01BQ1AsU0FBU0MsTUFBTUM7UUFDYixHQUFJLHVCQUF3QixXQUFZLG1CQUN4QyxNQUNGO01BRUEsU0FBU0MsTUFBTUQ7UUFFYjtTQUFrQjs7U0FDUCxPQUFFLG1CQUFtQkE7U0FDckIsT0FBRUc7U0FDSCxNQUFFLFFBQVFDLFVBQVU7UUFHOUIsR0FBSSxRQUFRRCxhQUFhRTtTQUFRLENBQy9CLElBQVMsS0FBR0YsZ0JBQ0osSUFBR0E7VUFDWCxRQUFRSSxLQUFNLGVBQWVBLGNBQWNDO1FBRTdDLE1BQ0Y7TUFDQSxPQUFHOztjQUF3QnZGOztjQUFzQkE7ZUFDeENBLHdDQUEwQ2dGLE1BQVFGO2VBRS9DQSxLQUNkO0lBQ0EsSUFBSVUsaUJBQW1CO0lBdkR2QixTQUFTQyxvQkFBb0JDO01BQzNCLE9BQVEsd0JBQTJCQSxXQUFjQSxJQUNuRDtJQUlBLEdBQUcsdUJBQXdCMUYsc0JBQXNCQTtLQUMvQyxJQUFJMkYsaUJBQW1COztLQUV2QixJQUFJQTtJQUNOQSxtQkFBbUIsb0JBQW9CQTtJQWtEdkMsU0FBU0MsZUFBZ0JGO01BQ3ZCQSxPQUFLLHdCQUF3QkE7TUFDN0IsS0FBSyxpQkFBaUJBLE1BQ3BCQSxPQUFPQyxtQkFBbUJEO01BQzVCLElBQVUsTUFBRSxpQkFBaUJBLE1BQ3BCLEtBQUUsb0JBQ0Q7TUFDVixJQUFVLElBQUZwRCxJQUFPQSxJQUFFd0QsWUFBYXhEO09BQUksT0FDekJ3RCxLQUFLeEQ7bUJBQ0QsR0FBR3lELGlCQUFnQixZQUFhO2tCQUNqQztpQkFDRCxXQUFXRCxLQUFLeEQsSUFBSTtNQUcvQixjQUFjdUQ7TUFDZEUsYUFBYUw7TUFDYixPQUFPSyxLQUNUO0lOakJBLFNBQVNDLG1CQUFtQnRGO01BQzFCLFFBQVcsS0FBUSxFQUFFdUMsRUFBR0UsRUFBRzhDLEVBQUssSUFBTyxFQUFFdkYsU0FBVTRCLElBQUkxQixFQUFHMEI7T0FBSyxDQUM3RGEsSUFBSSxhQUFhYjtRQUNqQixHQUFJYTtTQUFVLENBQ1osSUFBVyxJQUFGSSxFQUFJakIsTUFBUWlCLElBQUkzQyxNQUFPdUMsSUFBSSxhQUFhSSxXQUFZQSxJQUFJO1VBQ2pFLEdBQUlBLElBQUlqQjtXQUFTLENBQUUsY0FBZ0JXLEtBQUtDLEVBQUdBLE9BQVFELEtBQUssUUFBUVgsRUFBR2lCOztXQUM5REwsS0FBSyxRQUFRWixFQUFHaUI7VUFDckIsR0FBSUEsS0FBSzNDLEVBQUc7VUFDWjBCLElBQUlpQjtRQUVOLEdBQUlKO1NBQVcsQ0FDYkQsS0FBSywyQkFBNEJDO1VBQ2pDRCxLQUFLLDJCQUE0QkM7O1NBQzVCLEdBQUlBLGNBQWNBO1VBQWE7O1VBQy9CO21CQUE0QkEsZUFDQ0EscUJBQ0RBOztVQUM1QjtZQUFJQTs7OztZQUFlYjs7OztZQUFTMUI7O2FBQ3ZCcUYsSUFBSSxhQUFhM0Q7Ozs7WUFBb0IyRDs7O1dBQVk7O1dBR3RELENBQ0wzRDtZQUNBYSxLQUFLQSxXQUFXOEM7WUFDaEIvQzs7WUFBSztxQkFBNEJDO3FCQUNDQTtxQkFDQUE7cUJBQ0RBO1FBRW5DLEdBQUlELGdCQUFpQixDQUFDLGNBQWdCRCxLQUFLQyxFQUFHQTtNQUVoRCxPQUFPRCxJQUFFQyxDQUNYO0lBK1JBLFNBQVNnRCw2QkFBOEJ4RjtNQUNyQyxJQUFJTTtNQUNKLEtBQUssY0FBY04sR0FDakJNLFFBQWlDTixJQUFJLG1CQUFtQkE7TUFDMUQsV0FBVzhDLFFBQVF4QyxJQUFLTixFQUFHQSxTQUM3QjtJQThaQSxTQUFTeUYsd0JBQXlCekY7TUFDaEMsT0FBTyw2QkFBNkJBLEVBQ3RDO0lPanZCQTtLQUFJMEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWlCSixTQUFTQyxtQkFBbUJDLEtBQU1DLFFBQVN4QixLQUFNeUI7TUFDL0MsSUFBSUMsUUFBVSxtQkFBbUJIO01BQ2pDLEdBQUlHLFlBQWEsQ0FFZixHQUFJRCxTQUFTOUQsS0FBTSxlQUluQitELGFBQW1CRDtNQVByQjtPQVNJRTtTQUNGRDtTQUNBLHdCQUF3QkY7U0FDeEIsd0JBQXdCeEI7TUFFMUIsT0FBTzJCLElBQ1Q7SUx2REEsSUFBSUM7SUFXSixTQUFTQyxpQkFBaUJDLElBQ3hCLE9BQU9GLGtCQUFrQkUsR0FDM0I7SUQvQkEsU0FBU0MscUJBQXNCOUYsSUFBSzBGLE1BQVEsTUFBTSxHQUFJMUYsWUFBWTBGLEtBQU87SUQ2eEJ6RSxTQUFTSyxpQkFBaUJyRyxHQUN4QixPQUFRQSxhQUFhOEMsT0FDdkI7SUF5QkEsU0FBU3dELGtCQUFrQnRHLEdBQ3pCLE9BQU8saUJBQWlCQSxFQUMxQjtJQXBWQSxTQUFTdUcsb0JBQXFCNUUsR0FDNUIsV0FBV21CLFVBQVVuQixFQUFFQSxTQUN6QjtJQXdSQSxTQUFTNkUscUJBQXFCeEcsR0FBSyxPQUFPQSxDQUFFO0lReHdCNUMsU0FBU3lHLHFCQUFzQnBEO01BQzdCLHVCQUF1QjlDLDJCQUE0QjhDLElBQ3JEO0lGdUtBLFNBQVNxRCx3QkFBd0IxQjtNQUMvQixxQkFBc0JBLHFDQUN4QjtJTm1CQSxTQUFTMkI7TUFDUCw0Q0FDRjtJQXRDQSxTQUFTQyxzQkFBdUI1RyxFQUFHNEI7TUFDakMsT0FBUTVCO2dCQUVOLEdBQUk0QixLQUFLNUIsV0FBWSxnQkFFckIsT0FBTyxlQUFlNEI7ZUFFdEIsT0FBTzVCLElBQUk0QjtTQUVmO0lBNEdBLFNBQVNpRixlQUFnQjdHLEVBQUc0QjtNQUMxQixHQUFJQSxXQUFXNUIsSUFBSztNQUNwQixPQUFPLHNCQUF1QkEsRUFBRzRCLEVBQ25DO0lBK01BLFNBQVNrRixrQkFBa0JqRjtNQUN6QixHQUFJQSxRQUFTO01BQ2IsV0FBV2lCLFFBQVFqQixXQUFXQSxJQUNoQztJQWdKQSxTQUFTa0YscUJBQXFCL0csR0FBSyxPQUFPQSxHQUFJO0lBck05QyxTQUFTZ0gsNEJBQTZCaEg7TUFFcEMsR0FBR1Y7T0FBdUIsSUFDcEJxQyxPQUFRckMsdUJBQXNCVTs7T0FDN0IsSUFDRDJCLE1BQVFzRixNQUFNakg7TUFFcEIsSUFBTSxFQUFFQSxJQUFPLEVBQUV1QyxTQUFZO01BQzdCLEtBQU9YLElBQUkxQixFQUFHMEIsSUFBS0QsRUFBRUMsS0FBSyxhQUFhQTtNQUN2QyxJQUFLMUIsSUFBSUYsSUFBSzRCLElBQUkxQixFQUFHMEIsSUFBS0QsRUFBRUM7TUFDNUI1QixNQUFNMkI7TUFDTjNCO01BQ0EsT0FBTzJCLENBQ1Q7SUFpSkEsU0FBU3VGLGdCQUFnQkMsR0FBSUMsR0FBSUMsR0FBSUMsR0FBSXpGO01BQ3ZDLEdBQUlBLFNBQVU7TUFDZCxHQUFLeUYsWUFDQXpGLE9BQU93RixRQUFTQSxhQUEyQnhGLE9BQU93RjtPQUFlLENBQ3BFQTs7UUFBUUY7VUFDTix5QkFBeUJBLEtBQU1DLEdBQUl2RjtVQUNsQ3VGLFdBQVdELGVBQWV0RixJQUFLc0YsS0FBSyxZQUFZQyxHQUFJdkY7UUFDdkR3RixPQUFRQSxlQUFlQTs7T0FDbEIsR0FBSUEsYUFBMkJDLE1BQU1EO1FBQWEsQ0FDdkRBOztTQUFTRjtXQUNQLHlCQUF5QkEsS0FBTUMsR0FBSXZGO1dBQ2xDdUYsV0FBV0QsZUFBZXRGLElBQUtzRixLQUFLLFlBQVlDLEdBQUl2RjtTQUN2RHdGLE9BQVFBLGVBQWVBOztRQUNsQixDQUNMLEdBQUlBLFVBQXVCLDRCQUE0QkE7U0FDdkQsSUFBTyxHQUFFRixLQUFTLEdBQUVFO1NBQ3BCLEdBQUlGO1VBQXVCLEdBQ3JCRyxNQUFNRjtXQUFJLElBQ0QsSUFBRnhGLElBQU9BLElBQUlDLElBQUtELElBQUtlLEdBQUkyRSxLQUFLMUYsS0FBS2MsR0FBSTBFLEtBQUt4Rjs7V0FDaEQsSUFDTSxJQUFGQSxFQUFJQyxRQUFTRCxPQUFRQSxJQUFLZSxHQUFJMkUsS0FBSzFGLEtBQUtjLEdBQUkwRSxLQUFLeEY7O1VBRXZELENBQ0wsSUFBSTFCLEVBQUksU0FBVTJCLElBQUthLFlBQVkwRTtXQUNuQyxJQUFXLElBQUZ4RixJQUFPQSxJQUFJMUIsRUFBRzBCLElBQUtlLEdBQUkyRSxLQUFLMUYsS0FBSyxjQUFjd0YsS0FBS3hGO1dBQzdELEtBQU9BLElBQUlDLElBQUtELElBQUtlLEdBQUkyRSxLQUFLMUY7TUFHbEMsUUFDRjtJQUlBLFNBQVMyRixpQkFBaUI1RixFQUFFWSxFQUFFRSxFQUFFOEMsRUFBRWlDO01BQ2hDLGdCQUFnQixxQkFBcUI3RixHQUFHWSxFQUFFRSxFQUFFOEMsRUFBRWlDLEdBQzlDLFFBQ0Y7SU12bEJBLFNBQVNDLFNBQVc7SUc0SnBCLFNBQVNDLFdBQVd6RSxTQUNsQjFELFlBQVkwRCxPQUNkO0lBQ0F5RSwyQkFBMkJEO0lBQzNCQzs7YUFBeUM3RjtNQUN2QyxJQUFJOEYsSUFBTXBJO01BQ1ZBLFlBQVksa0JBQWtCc0M7TUFDOUIsZ0JBQWdCOEYsTUFBUXBJLFlBQWNzQyxJQUhSO0lBS2hDNkY7O2VBQ0UsT0FBTyxxQkFBcUJuSSxVQURBO0lBRzlCbUk7O2FBQXNDMUcsT0FBTzRHLElBQUlDLElBQUloRztNQUNuRCxJQUFJaUcsS0FBTztNQUNYLEdBQUc5RyxTQUFTYSxPQUFPaUc7T0FBTSxDQUN2QixJQUFZLFFBQUUsa0JBQWtCOUcsU0FBU2EsS0FDNUIsU0FBRXRDO1FBQ2ZBLFlBQVl3STtRQUNaLGdCQUFnQkMsV0FBYXpJLFlBQWN1STtNQUU3QyxpQkFBaUJGLElBQUtDLElBQUt0SSxVQUFXeUIsT0FBUWE7TUFDOUMsUUFUMkI7SUFXN0I2Rjs7YUFBcUMxRyxPQUFPNEcsSUFBSUMsSUFBSWhHO01BQ2xELElBQUlpRyxLQUFPO01BQ1gsZ0JBQWdCdkksVUFBV3lCLE9BQVE0RyxJQUFLQyxJQUFLaEc7TUFDN0MsUUFIMEI7SUFLNUI2Rjs7YUFBeUMxRyxRQUN2QyxPQUFPLGVBQWV6QixVQUFXeUIsT0FESDtJQUdoQzBHLHdDQUE2QjtJQUc3QkEsbUNBQW1DQTtJQWxObkMsU0FBU08sYUFBY3JELEtBQU05QztNQUMzQnZDLGtCQUNBQSxZQUFZcUYsS0FDWnJGLGlCQUFpQnVDLENBQ25CO0lBQ0FtRyxxQ0FBcUNqRCxNQUNuQyxPQUFRekYsWUFBWXlGLElBRE07SUFHNUJpRDs7YUFBdURqRDtNQUNyRCxJQUFTLEtBQUUsZ0JBQ0g7TUFDUixJQUFVLElBQUZwRCxJQUFPQSxJQUFJd0QsZ0JBQWlCeEQ7T0FBSSxDQUN0Q3NHLE9BQU85QyxLQUFLeEQ7UUFDWixHQUFHckMsYUFBYTJJLEtBQU07UUFDdEIzSSxhQUFhMkksT0FBTyxvQkFOc0I7SUFTOUNEOzthQUF3Q2pELE1BQ3RDLE9BQU8sV0FBV0EsTUFBTUEsS0FBTUEsVUFERDtJQUcvQmlEOzthQUF5Q2pEO01BQ3ZDLEtBQUl6RixhQUFheUYsU0FBU3pGO09BQWdCLENBQ3hDO1NBQUkySTtVQUFNO1lBQWUsdUJBQXVCM0ksV0FBWSx1QkFBdUJ5RjtRQUNuRixHQUFHa0Q7U0FBVyxDQUNaLDBCQUEwQmxEO1VBQzFCekYsYUFBYXlGLFlBQVUwQyxXQUFXLHFCQUFxQlEsVUFMN0I7SUFTaENEOzthQUF5Q2pEO01BRXZDLEdBQUdBLFdBQVk7TUFFZixJQUFJb0QsV0FBYSxXQUFXcEQ7TUFDNUIsR0FBR3pGLGFBQWE2SSxZQUFhO01BRTdCLFlBQVlwRDtNQUNaLE9BQU96RixhQUFheUYsU0FSVTtJQVVoQ2lEOzthQUF3Q2pELEtBQUtxRCxLQUFNQztNQUNqRCxJQUFJNUMsV0FBYTRDLGNBQWM7TUFDL0IsR0FBRyxZQUFZdEQ7T0FBTyxHQUNoQlU7UUFBWTtVQUNPQSxXQUFZLG9DQUFzQyxRQUFRVjs7UUFFNUUscUJBQ2tCQTtNQU56QixJQVNJdUQsT0FBUyxvQkFBb0J2RDtNQUNqQ3VELFNBQVVBLFVBQVVBO01BQ3BCLEtBQUksWUFBWUE7T0FBUSxHQUNsQjdDO1FBQVk7VUFDT0EsV0FBWSxvQ0FBc0MsUUFBUTZDOztRQUU1RSxxQkFDa0JBO01BR3pCLEtBQUksWUFBWUE7T0FBUSxHQUNsQjdDO1FBQVk7VUFDT0EsV0FBWSxxQ0FBdUMsUUFBUTZDOztRQUU3RSxxQkFDa0JBO01BR3pCLDBCQUEwQixXQUFXdkQsTUE1QlI7SUE4Qi9CaUQ7O2FBQXdDakQsS0FBTXNEO01BQzVDO09BQWUsV0FBRUEsY0FBYztPQUNoQixXQUFHdEQsY0FBZ0IsV0FBV0E7T0FDdkMsTUFBTXdELGFBQWFKO01BQ3pCLEtBQUksWUFBWXBEO09BQU8sR0FDakJVO1FBQVk7VUFDT0EsV0FBWSxvQ0FBc0MsUUFBUVY7O1FBRTVFLHFCQUNrQkE7TUFHekIsS0FBSSxZQUFZQTtPQUFPLEdBQ2pCVTtRQUFZO1VBQ09BLFdBQVkscUNBQXVDLFFBQVFWOztRQUU3RSxxQkFDa0JBO01BR3pCLFFBQVFqRixLQUFLUjtPQUFjLEdBQ3RCLFFBQVFVO1FBQUksR0FDVHlGO1NBQVk7V0FDT0EsV0FBWSx1Q0FBeUMsUUFBUVY7O1NBQzdFLHFCQUNnQixRQUFRQTthQUk1QnpGLGFBQWE2SSxXQTdCUztJQStCL0JIOzthQUEwQ2pEO01BQ3hDLElBQUlvRCxXQUFjcEQsY0FBZ0IsV0FBV0E7TUFDN0MsS0FBSSxZQUFZQTtPQUFPLHFCQUNBQTtNQUV2QixLQUFJLFlBQVlBLE1BQU8scUJBQ0FBO01BTHZCLElBT00sTUFBTXdELGFBQWFKLHdCQUNoQixRQUNIO01BQ04sUUFBUXJJLEtBQUtSO09BQWMsQ0FDekIsSUFBSW1KLEVBQUksUUFBUXpJO1FBQ2hCLEdBQUd5SSxPQUFNRCxLQUFLQyxNQUFPLENBQUNELEtBQUtDLGFBQWMsT0FBT0E7TUFFbEQsT0FBTy9HLENBZndCO0lBaUJqQ3NHOzthQUF5Q2pEO01BQ3ZDLEdBQUdBLFdBQWE7TUFDaEIsSUFBSW9ELFdBQWEsV0FBV3BEO01BQzVCLE9BQU96RixhQUFhNkksZUFIVTtJQUtoQ0g7O2FBQXlDakQ7TUFDdkMsSUFBSTJELEdBQUtwSixhQUFheUY7YUFDZnpGLGFBQWF5RjtNQUNwQixPQUFPMkQsRUFIdUI7SUFLaENWOzthQUF1Q2pELEtBQU1sRDtNQUMzQyxHQUFHQSxZQUFZQTtPQUNiO1NBQXFCLFFBQVFrRDs7O01BQy9CLEdBQUdsRCxVQUFVQTtPQUNYO1NBQXFCLFFBQVFrRDs7O01BQy9CLFlBQVlBO01BQ1osR0FBSXpGLGFBQWF5RjtPQUFPLENBQ3RCLEdBQUksWUFBWUE7U0FBTyxxQkFBcUIsUUFBUUE7UUFDcEQsR0FBSWxELFlBQVlBO1NBQVEscUJBQXFCLFFBQVFrRDtRQUNyRCxJQUFJNEQsS0FBT3JKLGFBQWF5RjtRQUN4QixHQUFHbEQsV0FBWTtRQUNmLE9BQU84Rzs7T0FDRixHQUFJOUc7UUFBVSxDQUNuQiwwQkFBMEJrRDtTQUMxQnpGLGFBQWF5RixZQUFZMEMsV0FBVztTQUNwQyxPQUFPbkksYUFBYXlGOztRQUNmLHdCQUNvQixRQUFRQSxNQWpCUDtJQXFCOUJpRDs7YUFBMkNqRCxLQUFLL0I7TUFDOUMsSUFBSTJGO01BQ0osR0FBR3JKLGFBQWF5RjtPQUFPLHFCQUFxQixRQUFRQTtNQUNwRCxHQUFHLGlCQUFpQi9CLFNBQ2xCMkYsV0FBV2xCLFdBQVd6RTtNQUN4QixHQUFHLGtCQUFrQkE7T0FDbkIyRixXQUFXbEIsV0FBVyxxQkFBcUJ6RTs7T0FDeEMsR0FBR0EsbUJBQW1CZ0U7UUFDekIyQixXQUFXbEIsV0FBVyxvQkFBb0J6RTs7UUFDdkMsVUFBVUE7U0FDYjJGLFdBQVdsQixXQUFXLHNCQUFzQnpFOztTQUN6QyxHQUFHQTtVQUFrQixDQUN4QjtZQUFJNEY7YUFBUSxxQkFBcUIsd0JBQXdCO1dBQ3pERCxXQUFXbEIsV0FBV21CO01BRXhCLEdBQUdEO09BQUssQ0FDTiwwQkFBMEI1RCxNQUMxQnpGLGFBQWF5RixRQUFRNEQ7O09BRWxCO1NBQXFCLFFBQVE1RCx3REFuQkg7SUFzQmpDaUQscUNBQXFDQTtJVGtqQnJDLFNBQVNhLHNCQUFzQjlJLEdBQzdCLE9BQU8scUJBQXFCQSxFQUM5QjtJQWhCQSxTQUFTK0ksdUJBQXdCL0ksRUFBRzRCLEdBQ2xDLE9BQU8sc0JBQXNCNUIsRUFBRTRCLEVBQ2pDO0lBOVFBLFNBQVNvSCxxQkFBc0JoSjtNQUM3QixJQUFNLEVBQUUsc0JBQXNCQSxHQUN4QixNQUFNaUgsTUFBTS9HLEdBQ1o7TUFDTixLQUFPMEIsSUFBSTFCLEVBQUcwQixJQUFLRCxFQUFFQyxLQUFLLHVCQUF1QjVCLEVBQUU0QjtNQUNuRCxPQUFPRCxDQUNUO0lBZEEsU0FBU3NILG9CQUFxQmpKO01BQzVCLEdBQUlBLFNBQXNCLDRCQUE0QkEsR0FDdEQsT0FBT0EsR0FDVDtJQTVSQSxTQUFTa0osc0JBQXVCbEosRUFBRzRCLEVBQUdhO01BRXBDQTtNQUNBLEdBQUl6QztPQUFzQixDQUN4QixHQUFJNEIsS0FBSzVCO1NBQVksQ0FDbkJBLE9BQU8sb0JBQXFCeUMsR0FDNUIsR0FBSWIsU0FBUzVCLElBQUtBLFFBQ2xCO1FBRUYsNEJBQTZCQTtNQUUvQkEsSUFBSTRCLEtBQUthO01BQ1QsUUFDRjtJQWlNQSxTQUFTMEcsZUFBZ0JuSixFQUFHNEIsRUFBR2E7TUFDN0IsR0FBSWIsV0FBVzVCLElBQUs7TUFDcEIsT0FBTyxzQkFBdUJBLEVBQUc0QixFQUFHYSxFQUN0QztJS3JLQSxTQUFTMkcsV0FBV0MsSUFDbEI5SixVQUFVLGNBQ1ZBLFVBQVU4SixFQUNaO0lBQ0FELDJCQUEyQjNCO0lBRTNCMkI7O2FBQXlDdkg7TUFDdkM7UUFDRSxzQkFBc0J0QyxRQUFRc0M7WUFDdkIwSCxLQUNQLHFCQUFxQixnQkFKTztJQU9oQ0g7OztNQUNFO1FBQ0UsT0FBTyxrQkFBa0I3SjtZQUNsQmdLLEtBQ1AscUJBQXFCLGdCQUpLO0lBTzlCSDs7YUFBc0NwSSxPQUFPNEcsSUFBSTRCLFdBQVczSDtNQUMxRCxJQUFJRixFQUFJLHFCQUFxQmlHO01BQzdCLE1BQU1qRyxhQUFhckM7T0FDakJxQyxTQUFRckMsdUJBQXNCcUM7TUFGaEMsSUFHSWdDLE9BQVMsdUJBQXVCaEM7TUFDcEM7UUFDRSxrQkFBa0JwQyxRQUFTb0UsT0FBUTZGLFdBQVkzSCxJQUFLYjtZQUM3Q3VJLEtBQ1AscUJBQXFCO01BRXZCLFFBVjJCO0lBWTdCSDs7YUFBcUNwSSxPQUFPNEcsSUFBSTRCLFdBQVczSDtNQUN6RCxJQUFJRixFQUFJLG9CQUFvQmlHO01BQzVCLE1BQU1qRyxhQUFhckM7T0FDakJxQyxTQUFRckMsdUJBQXNCcUM7TUFGaEMsSUFHSWdDLE9BQVMsdUJBQXVCaEM7TUFDcEM7UUFDRSxpQkFBaUJwQyxRQUFTb0UsT0FBUTZGLFdBQVkzSCxJQUFLYjtZQUM1Q3VJLEtBQ1AscUJBQXFCO01BRXZCLElBQVUsSUFBRjNILElBQU9BLElBQUlDLElBQUtEO09BQUksZUFDWGdHLElBQUk0QixhQUFhNUgsRUFBRStCLE9BQU82RixhQUFXNUg7TUFFdEQsUUFiMEI7SUFlNUJ3SDs7YUFBeUNwSTtNQUN2QyxJQUFNLE9BQU0xQiwwQkFDRCxPQUFFLHVCQUF1QnFDO01BQ3BDO1FBQ0UsaUJBQWlCcEMsUUFBU29FLFdBQWMzQztZQUNqQ3VJLEtBQ1AscUJBQXFCO01BRXZCLE9BQU81RixTQVJ1QjtJQVVoQ3lGOzs7TUFDRTtRQUNFLGtCQUFrQjdKO1lBQ1hnSyxLQUNQLHFCQUFxQixnQkFKSTtJQVE3QkgsbUNBQW1DQTtJQXJRbkMsU0FBU0ssYUFBYTdFLE1BQ3BCckYsVUFBVSxjQUNWQSxZQUFZcUYsSUFDZDtJQUNBNkUscUNBQXFDekUsTUFDbkMsT0FBUXpGLFlBQVl5RixJQURNO0lBRzVCeUU7O2FBQXlDekU7TUFDdkMsS0FDRSxPQUFPLG1CQUFtQixRQUFRQSxpQkFDM0J1RSxLQUNQLFNBSjRCO0lBT2hDRTs7YUFBd0N6RSxLQUFNcUQsS0FBTUM7TUFDbEQ7UUFDRSxrQkFBa0IsUUFBUXRELFlBQVlxRCxPQUN0QztZQUNPa0IsS0FDUCx3QkFBd0JBLElBQUtqQixZQUxGO0lBUS9CbUI7O2FBQXdDekUsS0FBTXNEO01BQzVDO1FBQ0Usa0JBQWtCLFFBQVF0RCxPQUMxQjtZQUNPdUUsS0FDUCx3QkFBd0JBLElBQUtqQixZQUxGO0lBUS9CbUI7O2FBQTBDekUsS0FBTXNEO01BQzlDO1FBQ0UsT0FBTyxvQkFBb0IsUUFBUXREO1lBQzVCdUUsS0FDUCx3QkFBd0JBLElBQUtqQixZQUpBO0lBT2pDbUI7O2FBQXlDekU7TUFDdkM7UUFDRSxPQUFPLGlCQUFpQixRQUFRQTtZQUN6QnVFLEtBQ1AscUJBQXFCLGdCQUpPO0lBT2hDRTs7YUFBeUN6RSxLQUFNc0Q7TUFDN0M7UUFDRSxJQUFJL0YsRUFBSSxtQkFBbUIsUUFBUXlDO1FBQ25DLG1CQUFtQixRQUFRQTtRQUMzQixPQUFPekM7WUFDQWdILEtBQ1Asd0JBQXdCQSxJQUFLakIsWUFORDtJQVNoQ21COzthQUF1Q3pFLEtBQU1sRCxFQUFHd0c7TUFDOUMsSUFBVyxPQUFFLHFCQUNMO01BQ1IsUUFBUXFCLE9BQU83SDtPQUFFLE9BQ1I2SDt1QkFDVXpCLE9BQU93QixnQkFBaUI7dUJBQ3hCeEIsT0FBT3dCLGdCQUFpQjt1QkFFdkN4QixPQUFPd0Isa0JBQWtCQSxnQkFDekI7dUJBQ2dCeEIsT0FBT3dCLGVBQW1CO3lCQUMxQnhCLE9BQU93QixlQUFtQjtxQkFDMUJ4QixPQUFPd0IsY0FBbUI7dUJBQzFCeEIsT0FBT3dCLGdCQUFtQjtxQkFDMUJ4QixPQUFPd0IsY0FBbUI7eUJBQzFCeEIsT0FBT3dCLGtCQUFtQjs7TUFHOUM7UUFDRSxJQUFJTCxHQUFLLGlCQUFpQixRQUFRckUsTUFBT2tELEtBQ3pDLFdBQVdrQixXQUFXQztZQUNmRSxLQUNQLHdCQUF3QkEsSUFBS2pCLFlBdEJIO0lBMEI5Qm1COzthQUF5Q0csRUFBRzdKLEVBQUd1STtNQUM3QztRQUNFLG1CQUFtQixRQUFRc0IsR0FBSSxRQUFRN0o7WUFDaEN3SixLQUNQLHdCQUF3QkEsSUFBS2pCLFlBSkQ7SUFPaENtQjs7YUFBdUN6RSxLQUFNc0Q7TUFDM0M7UUFDRSxJQUFJdUIsU0FBVyxpQkFBaUIsUUFBUTdFO1FBQ3hDLE9BQU8sbUJBQW1CNkU7WUFDbkJOLEtBQ1Asd0JBQXdCQSxJQUFLakIsWUFMSDtJQVE5Qm1COzthQUF3Q3pFLEtBQU1zRDtNQUM1QztRQUNFLElBQUl1QixTQUFXLGtCQUFrQixRQUFRN0U7UUFDekMsT0FBTyxtQkFBbUI2RTtZQUNuQk4sS0FDUCx3QkFBd0JBLElBQUtqQixZQUxGO0lBUS9CbUI7O2FBQTBDSyxPQUFRQyxPQUFRMUYsS0FBTWlFO01BQzlEO1FBQ0Usb0JBQW9CLFFBQVF5QixRQUFTLFFBQVExRixNQUFPeUY7UUFDcEQ7WUFDT1AsS0FDUCx3QkFBd0JBLElBQUtqQixZQUxBO0lBUWpDbUI7O2FBQTJDekUsS0FBTXNEO01BQy9DO1FBQ0UsSUFBSTBCLEtBQU8scUJBQXFCLFFBQVFoRjtRQUN4QyxPQUFPLHdCQUF3QmdGO1lBQ3hCVCxLQUNQLHdCQUF3QkEsSUFBS2pCLFlBTEM7SUFRbENtQjs7YUFBcURGLElBQUtqQjtNQUN4RCxJQUFJNUMsV0FBYTtNQUNqQixHQUFJNEMsY0FBYzVDO09BQVksQ0FDNUIsSUFBSU0sS0FBTyxtQkFBbUJ1RCxTQUFVQSxZQUFhQSxTQUFVQTtRQUMvRCxxQkFBcUI3RCxXQUFZTTs7T0FDNUIscUJBQ2dCLGVBTm1CO0lBUzVDeUQ7O2FBQWdESTtNQVc5QyxJQUFJSTtNQUNKLEdBQUk7T0FBbUI7O09BRWhCLEdBQUk7UUFBd0I7O1FBRTVCLEdBQUk7U0FBOEI7O1NBRWxDLEdBQUk7VUFBMEI7O1VBRTlCLEdBQUk7V0FBMkI7O1dBRS9CLEdBQUk7WUFBbUI7O1lBRXZCLEdBQUksb0JBQXFCO01BbUJoQztjQUVFSjtjQUNBQTtjQUNBSTtjQUNBSjtjQUNBQTtjQUNBQTtjQUNBQTtjQUNBQTtjQUNBQTtjQUNBQTtjQUNBQTtjQUNBQSxpQkF4RG1DO0lBNER2Q0oscUNBQXFDQTtJQzNMckMsU0FBU1MsY0FBYzdGO01BQ3JCLElBQUl4RSxFQUFJLGlCQUFpQndFLE1BQ3pCLEtBQUt4RSxFQUFHLE9BQ1IsT0FBT0EsVUFBVTtJTEFuQixTQUFTc0ssY0FBZTlHO01BQ3RCLEtBQUk5QztPQUNGQSxnQ0FBOEI7TUFDaEMsdUJBQXVCQSx5QkFBMEI4QyxJQUNuRDtJS0FBO0tBQWM7TUFBRSxjQUFjNEI7O01BQXFCO0tBNEQ5QjtJQUNyQixHQUFJO0tBQXFCO2FBQ0ttRixxQkFBcUJYLGFBQWFXOztLQUN6RDthQUN1QkEscUJBQXFCbkMsYUFBYW1DO0lBRWhFO2tDQUFtRG5DO0lBZW5ELFNBQVNxQyxrQkFBa0J0RjtNQUN6QjtPQUFTLEtBQUUsZUFBZUE7T0FDakIsS0FBRTtPQUNJLFdBQUUsb0JBQW9CQTtPQUNqQ2tEO01BQ0osSUFBVSxJQUFGdEcsSUFBT0EsSUFBSXlJLHdCQUF5QnpJO09BQUssQ0FDL0MsSUFBSThHLEVBQUkyQixpQkFBaUJ6STtRQUN6QjtVQUFHLGtCQUFrQjhHOzs7O2FBQ2JSLE9BQU9BLGtCQUFrQlE7U0FDL0JSOztlQUFZUTtpQkFBY0E7ZUFBYyxlQUFlQSxjQUFjMUQ7TUFFekUsS0FBS2tELE9BQU87T0FBcUIsQ0FDL0IsSUFBSXRELEtBQU8sY0FBY0k7UUFDekIsR0FBSUosUUFBUTtTQUE0QixDQUN0QyxJQUFJOEQsUUFBVTlELGdCQUFnQjZFLGFBQWE3RTtVQUMzQyxzQkFBc0I4RDtVQUN0QlI7O2dCQUFZUTtrQkFBY0E7Z0JBQWMsZUFBZUEsY0FBYzFEO01BR3pFLEdBQUlrRCxJQUFNLE9BQU9BO01BQ2pCLDhDQUE4Q0UsV0FDaEQ7SUFzRkEsU0FBU21DLHNCQUFzQnZGO01BQzdCLElBQVMsS0FBRSxrQkFBa0JBLE1BQ3ZCLEVBQUUsbUJBQW1CSjtNQUMzQixPQUFPakQsS0FDVDtJTHpLQSxTQUFTNkk7TUFDUCxvQkFBb0JqSywyQkFBNkI7SU84Q25ELFNBQVNrSyxnQkFBaUJ6RjtNQUN4QixJQUFNLEVBQUUxRixXQUNGLEVBQUUsd0JBQXdCMEY7TUFFaEMsR0FBRzBGLGFBQ0dBLGlCQUNBQSxjQUFjM0ssTUFBTTRLO09BQ3hCLE9BQU8sd0JBQXdCRCxjQUFjM0s7TUFDL0MsR0FBR1QsOEJBQ0dBLDJCQUEyQlM7T0FDL0IsT0FBTyx3QkFBd0JULDJCQUEyQlM7TUFDNUQsc0JBQ0Y7SUU4TUEsU0FBUzZLLGdCQUFnQkMsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTUM7TUFDckQsR0FBR0EsV0FBWSxDQUNiRixVQUFVQyxVQUNWO01BRUYsSUFBSUU7TUFDSixJQUFVLElBQUZ2SixFQUFJbUosU0FBUW5KLE9BQVFBO09BQUssQ0FDL0IsSUFBSUQsRUFBSWtKLFVBQVVDLE9BQUtsSjtRQUN2QmlKLFVBQVVDLE9BQUtsSixLQUFNRCxNQUFNdUosUUFBU0M7UUFDcENBLE9BQU94SixVQUFXdUo7TUFFcEJGLFVBQVVDLFFBQVFFO01BQ2xCLFFBQ0Y7SUNyVUEsSUFBSUM7SUFLSixTQUFTQztNQUNQLEdBQUdELGNBQWUsT0FDVEE7TUFFVDthQUFTO2FBQThDLDBDQUN6RDtJQTRMQSxTQUFTRSxvQkFBb0J6TCxFQUFFdUI7TUFDN0I7T0FBTSxFQUFFO09BQ0YsR0FBQyx1QkFBdUJ2QixFQUFFRyxXQUFXb0I7T0FDckMsRUFBRW1LO01BQ1IsUUFBUWhHLGVBQWVBLGFBQWFBLElBQ3RDO0lDK0xBLElBQUlpRztJQUNKLFVBQVdsTTtLQUFvQzs7S0FDN0I7UUFFZCxTQUFTbU0sWUFBWUMsTUFBUW5NLFlBQVltTSxJQUFNO1FBQy9DRDs7aUJBQXFDN0k7VUFDbkMsSUFBVyxJQUFGaEIsSUFBT0EsSUFBSXJDLGlCQUFrQnFDLElBQUssR0FDckNyQyxVQUFVcUMsT0FBT2dCLEVBQUcsT0FBT2hCLENBRlA7UUFLNUI2Six1Q0FBNEI7UUFJNUI7VUFDRWxNLGVBQWdCQSxrQkFBa0JrTSxZQUFZbE0sVUFEekMsQ0FaTzs7O0tBaUJiOztnQkFFREEsZUFBZ0JBLG1CQUFrQkQscUJBRHBCO0lBS2xCa007O2FBQXlDNUksR0FDdkMsZ0JBQWdCQSxFQUFHckQsa0JBQ25CLGVBQWVxRCxFQUZlO0lBS2hDNEk7O2FBQTBDNUk7TUFDeEMsSUFBSWhCLEVBQUksZ0JBQWdCZ0I7TUFDeEIsT0FBUWhCLE1BQU0rSSxVQUNWQSxVQUFZcEwsbUJBQW1CcUMsQ0FISjtJTjVNakMsU0FBUytKLGdCQUFnQi9CLEVBQUU3SjtNQUN6QixJQUFXLE9BQUUsa0JBQWtCNkosR0FDcEIsT0FBRSxrQkFBa0I3SjtNQUMvQixHQUFHNkwsaUJBQWlCQztPQUNsQjs7TUFDRixLQUFJRDtPQUNGO01BQ0YscUJBQXFCQSxZQUFhQyxZQUNwQztJRjZCQSxTQUFTQyxpQkFBa0JqTSxHQUFLLE9BQU8sV0FBV0EsRUFBSTtJR25HdEQsU0FBU2tNLFlBQVkvRztNQUNuQixJQUFJSixLQUFPLGtCQUFrQkk7TUFDN0IsS0FBS0osbUJBQW9CO01BR3pCLE9BQU8sbUJBQW1CQSxlQUM1QjtJQ29IQSxJQUFJb0g7SUFJSixTQUFTQyxnQ0FBaUNDO01BQ3hDRix3QkFBd0JFLEtBQ3hCLFFBQ0Y7SUozSEEsU0FBU0Msb0JBQXFCdE07TUFDNUIsR0FBSSxTQUFVQTtPQUFJLENBQ2hCLEdBQUksU0FBU0EsOEJBQStCO1FBQzVDLEdBQUlBLE9BQVE7UUFDWjtNQUVGLE9BQU8sTUFBTUEsTUFDZjtJRzlDQSxTQUFTeU0sV0FBV3RIO01BQ2xCLElBQUlKLEtBQU8sa0JBQWtCSTtNQUM3QixLQUFLSixrQkFBbUI7TUFHeEIsT0FBTyxrQkFBa0JBLGVBQzNCO0lNc0VBLFNBQVMySCxxQkFBc0JDO01BQzdCLElBQVEsSUFBRSxjQUNFLFFBQUUsc0JBQXNCQztNQUNwQyxHQUFJQyxhQUFjRixjQUFjeEs7TUFDaEMsZ0JBQWdCLG1CQUFvQnlLLE1BQVFDO01BQzVDLE9BQU9BLE9BQ1Q7SUFqSUEsSUFBSUMscUJBQXVCMUY7SUFxSTNCLFNBQVMyRix5QkFBMEJDO01BQ2pDLElBQUlMLEtBQU9HLGlCQUFpQkU7TUFDNUIsR0FBSUwsZUFBZXhLLEtBQU07TUFDekIsR0FBSSxzQkFBc0J3SyxZQUFhO01BQ3ZDLHFCQUFzQkEsS0FDeEI7SVpuS0EsU0FBU007TUFDUCw0Q0FDRjtJWWdRQSxTQUFTQyx3QkFBd0JGO01BQy9CLElBQUlMLEtBQU9HLGlCQUFpQkU7TUFDNUIseUJBQXlCQTtNQUR6QixJQUVNLEVBQUVMLFlBQ0EsSUFBRTtNQUNWLEdBQUd6SSxLQUFLbEMsSUFBSztNQUNiO09BQVksQ0FDVixHQUFHa0MsS0FBS2xDLElBQUssVUFBVWtDLElBQUl5STtRQUMzQixHQUFHLG1CQUFtQnpJLFNBQVUsT0FBT0EsSUFBSXlJO1FBQzNDekksSUFFSjtJQ2xWQSxTQUFTaUosZ0JBQWlCLFFBQVE7SWY0V2xDLFNBQVNDLG9CQUFvQnRMO01BQzNCO2NBQVdsQjtlQUFRa0IsWUFBYUEsWUFBY0E7ZUFDM0JBLFlBQWFBLFlBQWNBO2VBQzNCQSxZQUFhQSxVQUNsQztJZ0J3Q0EsU0FBU3VMLG9CQUFvQkMsR0FBSUM7TUFDL0IsSUFBSUMsSUFBTSxVQUFVRDtNQUNwQixHQUFHQyxXQUFXRixlQUFnQjtNQUQ5QjtPQUVPLEdBQUUsT0FBT0U7T0FDVCxHQUFFLE9BQU9BO09BQ1QsR0FBRSxPQUFPQTtPQUNULEdBQUUsT0FBT0E7T0FDVCxHQUFFLE9BQU9BO09BQ1QsR0FBRSxPQUFPQTtPQUNULEdBQUUsT0FBT0E7T0FDVCxHQUFFLE9BQU9BO01BQ2hCLE9BQU8scUJBQXFCUSxHQUFHRCxHQUFHRCxHQUFHRCxHQUFHRCxHQUFHRCxHQUFHRCxHQUFHRCxJQUNuRDtJaEJsREEsU0FBU1Esb0JBQW9Cak8sR0FBSyxPQUFPLFdBQVk7SWF6TnJELFNBQVNrTyxtQkFBbUJDLE9BQVFwTCxFQUFHcUw7TUFDckMsSUFBSTFMLEVBQUksb0JBQXFCSztNQUM3QixJQUFXLElBQUZoQixJQUFPQSxNQUFPQSxJQUFLLGVBQWlCVyxFQUFFWDtNQUMvQ3FNO01BQWNBLFlBQ2hCO0lHMkxBLFNBQVNDLGlCQUFpQmYsSUFDeEIsT0FBT0EsY0FDVDtJZHRVQSxTQUFTZ0IseUJBQTBCN04sS0FBTyxPQUFPQSxHQUFLO0llc0V0RCxTQUFTOE4sb0JBQW9CNUc7TUFDM0IsR0FBR0EsYUFBYVAsTUFBTyxPQUFPTztNQUU5QjtRQUFHbEk7O1FBQ0drSSxhQUFhbEk7O1FBQ2JrSTs7UUFDQTtPQUNKLE9BQU8seUJBQXlCakg7TUFFbEM7UUFBR2pCOztRQUNHa0ksYUFBYWxJOztRQUNia0k7O1FBQ0E7T0FDSixPQUFPLHlCQUF5QmpIO01BRWxDLEdBQUdpSCxhQUFhbEksb0JBQW9CO09BQ2xDLFVBQVUsNEJBQTRCa0k7TUFFeEMsVUFBVWpILHlCQUF5Qix3QkFBeUIsT0FBT2lILElBQ3JFO0lWaU1BLFNBQVM2RyxpQkFBaUJySixLQUFLL0I7TUFDN0IsSUFBSTJCLEtBQU8sa0JBQWtCSTtNQUM3QixLQUFLSixxQkFBc0I7TUFDM0IscUJBQXFCQSxVQUFVM0I7TUFDL0IsUUFDRjtJQUtBLFNBQVNxTCxpQkFBaUJ0SixLQUFLL0I7TUFDN0I7T0FBUyxLQUFFLHVCQUF1QitCO09BQ3RCLFFBQUUsdUJBQXVCL0I7TUFDckMsT0FBTyxpQkFBaUIrQixLQUFNL0IsUUFDaEM7SUE1QkEsU0FBU3NMO01BQ1AsSUFBSUMsSUFBSWxQO01BQ1IsR0FBR2tQO09BQUksSUFDSyxJQUFGNU0sSUFBT0EsSUFBSTRNLFdBQVk1TTtRQUFJLGlCQUNoQjRNLElBQUk1TSxRQUFRNE0sSUFBSTVNO01BR3JDdEMsOEJBQThCZ1A7TUFDOUJoUDtNQUNBLFFBQ0Y7SVdsRUEsU0FBU21QLHdCQUEwQixRQUFVO0lEaEY3QyxTQUFTQyxzQkFBc0IvTTtNQUM3QixJQUFJekI7TUFDSixJQUFTLElBQUQwQixFQUFFRCxhQUFjQyxPQUFNQSxJQUFJLENBQ2hDLElBQUk0RixFQUFJN0YsRUFBRUMsR0FDVjFCLE9BQU9zSCxFQUFFdEg7TUFFWCxPQUFPQSxDQUNUO0lUaktBLFNBQVN5TyxvQkFDUCxPQUFPLElBQUtDLHVCQUNkO0lXMEZBLFNBQVNDLFNBQVNsTixFQUFFWSxHQUNsQixPQUFPLFVBQVVaLEVBQUVZLEVBQ3JCO0lDWEEsU0FBU3VNLGtCQUFrQmhPLEVBQUV5RTtNQUMzQkEsSUFBSSxTQUFTQTtNQUNiQSxJQUFNQSxVQUFZQTtNQUNsQkEsSUFBSSxTQUFTQTtNQUNiekUsS0FBS3lFO01BQ0x6RSxJQUFNQSxVQUFZQTtNQUNsQixRQUFVQSxLQUFLQSxtQ0FDakI7SVRIQSxTQUFTaU8sZUFBZUMsSUFBSzNCLElBQUt4TDtNQUNoQyxJQUFVLElBQUZELEVBQUlDLFFBQVNELE9BQVFBLElBQUssR0FDN0JvTixTQUFTM0IsTUFBSXpMLFFBQVMsT0FBT0E7TUFFbEMsUUFDRjtJQXRFQSxTQUFTcU4sY0FBY3BQO01BQ3JCLElBQVEsSUFBRSxlQUFlQSxJQUFNQSxlQUN6QjtNQUNOLElBQVcsSUFBRitCLElBQU9BLElBQUlDLElBQUtELElBQUssSUFDeEIsa0JBQWtCZCxFQUFHakIsT0FBTytCO01BRWxDLE9BQU9kLENBQ1Q7SVJUQSxTQUFTb08sY0FBY3BOLEVBQUdrRTtNQUN4QixHQUFHbEUsTUFDRCxPQUFPLGNBQWNBLE1BQU9rRTtNQUU5QixVQUFVbEUsaUJBQWtCLE9BQU9BO01BQ25DLElBQUkvQixFQUFJK0I7TUFDUixHQUFHL0IsUUFBUyxPQUFPLFFBQVFpQyxLQUFLZ0U7TUFEaEMsSUFFWSxRQUFFQSxnQkFDUixFQUFFakcsSUFBSW9QO01BQ1osR0FBSTVKO09BQ0YsT0FBTyxRQUFRdkQsS0FBTWdFOztPQUNsQixHQUFJVDtRQUFPLE9BQ1AsY0FBYyxRQUFRdkQsS0FBSyxhQUFhakMsSUFBSSxXQUFXQTs7UUFFM0Q7VUFFRDtXQUFlLFdBQUdzUCx3QkFBeUJBO1dBQ2pDLFVBQU1wSSxNQUFNakIsY0FBWW9KO1VBQ2xDLElBQVUsSUFBRnhOLElBQU9BLElBQUlvRSxZQUFhcEUsSUFBTTBOLE1BQU0xTixLQUFLb0UsS0FBS3BFO1VBQ3RELElBQVUsSUFBRkEsSUFBT0EsSUFBSXlOLGlCQUFrQnpOO1dBQU0wTixNQUFNdEosY0FBWXBFLEtBQUt5TixVQUFVek47VUFDNUUsT0FBTyxjQUFjRSxFQUFHd04sTUFMbkIsQ0FRWDtJY3dOQSxTQUFTQyxnQ0FBZ0N6TjtNQUN2QztRQUNFLElBQVEsSUFBRXVOLGlCQUNELFNBQU1wSSxNQUFNcEY7UUFDckIsSUFBVyxJQUFGRCxJQUFPQSxJQUFJQyxJQUFLRCxJQUFLb0UsS0FBS3BFLEtBQUt5TixVQUFVek47UUFDbEQsT0FBTyxjQUFjRSxHQUFJa0UsTUFKcEIsQ0FNVDtJVjNGQSxTQUFTd0osZUFBZUM7TUFDdEIsSUFBSTdLLEtBQU8sa0JBQWtCNks7TUFDN0IsR0FBRyxtQkFBbUI3SztPQUFZLENBQ2hDLEdBQUdBO1NBQVdLLG1CQUFtQixvQkFBb0JMLFlBQVlBOztTQUM1REssbUJBQW1CTDtRQUN4Qjs7T0FFRyx3QkFDcUIsdUJBQXVCNkssS0FFbkQ7SVEvS0EsU0FBU0MsbUJBQXFCLGtCQUFtQjtJSCtkakQsU0FBU0M7TUFDUCxvREFDRjtJSmxTQSxTQUFTQyxpQkFBaUJDLE1BQ3hCLE9BQU8sdUJBQ1Q7SUh4TEEsSUFBSUMsUUFBVTFQLGFBQWE7SUFDM0IsU0FBUzJQLGdCQUFnQmxRO01BQ3ZCLEdBQUdpUSxRQUFTLE9BQU8sV0FBVyxVQUFValE7TUFDeEMsSUFBSStCO01BQ0osR0FBSS9CLE9BQVEsU0FBUW1RO01BQ3BCLEdBQUduUSxPQUFNLE1BQVFBLE9BQU0sQ0FBQ0EsT0FBTStCLFNBQ3pCLE1BQVEvQixNQUFPLENBQUNBLE9BQU0rQjtNQUMzQixPQUFPQSxDQUNUO0lBd0NBLFNBQVNxTyx5QkFBMEJwUTtNQUNqQyxJQUFJcVEsY0FBZTVRO01BQ25CNFEsY0FBY3JRO01BRGQsSUFFSXNRLFlBQWE3USx1QkFBc0I0UTtNQUN2QyxPQUFPQyxhQUNUO0lMbVJBLFNBQVNDLDJCQUEyQjFQLEdBQUlDLEdBQUlDO01BQzFDLFdBQVdILFFBQVFDLEdBQUlDLEdBQUlDLEdBQzdCO0lLOVRBLFNBQVN5UCx5QkFBMEJ4UTtNQUNqQyxLQUFLLFNBQVNBO09BQUksQ0FDaEIsR0FBSSxNQUFNQSxHQUNSLE9BQU87UUFDVCxPQUFJQTtpQkFDSztpQkFFQTtNQUVYLElBQUlrQixLQUFRbEIsY0FBVUEsT0FBTW1RLGdCQUFrQm5RO01BQzlDLEdBQUlrQixLQUFNbEIsTUFBS0E7TUFEZixJQUlJeVEsSUFBTSxnQkFBZ0J6UTtNQUMxQixHQUFJeVE7T0FBVSxDQUNaQSxRQUNBelEsS0FBSzs7T0FDQSxDQUNMQSxLQUFLLFdBQVd5UTtRQUNoQixHQUFJelEsT0FBUSxDQUNWQSxPQUFReVE7UUFDVixHQUFJQSxTQUFVO01BWmhCLElBZU0sRUFBRSxlQUNELEdBQUV6UTtNQUNUQSxLQUFLQSxJQUFJMlEsTUFBTUQ7TUFqQmYsSUFrQklFLEdBQUs1UTtNQUNUQSxLQUFLQSxJQUFJNFEsTUFBTUY7TUFuQmYsSUFvQklHLEdBQUs3UTtNQUNUMlEsS0FBTUEsV0FBV3pQLE9BQU91UDtNQUN4QixPQUFPLDJCQUEyQkksR0FBSUQsR0FBSUQsR0FDNUM7SVc2aEJBLFNBQVNHLGtCQUFrQjNDLE9BQVFiLEdBQUl5RDtNQUNyQyxnQkFBaUJ6RDtNQUNqQixnQkFBa0JBLFVBQVdBO01BQzdCLEdBQUdBO09BQ0QsSUFBVSxJQUFGdkwsSUFBT0EsSUFBSXVMLGVBQWdCdkw7UUFBSyxHQUNuQ3VMLFFBQVF2TDtTQUNULGdCQUFpQnVMLFFBQVF2TDs7U0FDdEIsQ0FDSDtVQUNBO1VBQ0EsZ0JBQWlCdUwsUUFBUXZMOztPQUk3QixJQUFVLElBQUZBLElBQU9BLElBQUl1TCxlQUFnQnZMLElBQUssZ0JBQWdCdUwsUUFBUXZMO01BQ2xFLE9BQU91TDs7OztTQUlMLElBQVUsSUFBRnZMLElBQU9BLElBQUl1TCxlQUFnQnZMLElBQUksZUFDckJ1TCxRQUFRdkwsSUFFMUI7OztTQUdBLElBQVUsSUFBRkEsSUFBT0EsSUFBSXVMLGVBQWdCdkwsSUFBSSxnQkFDcEJ1TCxRQUFRdkwsSUFFM0I7O1NBRUEsSUFBVSxJQUFGQSxJQUFPQSxJQUFJdUwsZUFBZ0J2TCxJQUFJLGdCQUNwQnVMLFFBQVF2TCxJQUUzQjs7O1NBR0E7U0FDQSxJQUFVLElBQUZBLElBQU9BLElBQUl1TCxlQUFnQnZMLElBQUksZ0JBQ3BCdUwsUUFBUXZMO1NBRTNCOztTQUVBLElBQVUsSUFBRkEsSUFBT0EsSUFBSXVMLG1CQUFvQnZMO1VBQUksQ0FDekMsSUFBSVcsRUFBSSxvQkFBb0IsT0FBT1g7V0FDbkMsSUFBVyxJQUFGaUIsSUFBT0EsTUFBT0EsSUFBSyxlQUFpQk4sRUFBRU07U0FFakQ7O1NBRUEsSUFBVSxJQUFGakIsSUFBT0EsSUFBSXVMLGVBQWdCdkw7VUFBSSxDQUNyQyxJQUFJVyxFQUFJLG9CQUFvQix5QkFBeUIsT0FBT1g7V0FDNUQsSUFBVyxJQUFGaUIsSUFBT0EsTUFBT0EsSUFBSyxlQUFpQk4sRUFBRU07U0FFakQ7O1NBRUEsSUFBVSxJQUFGakIsSUFBT0EsSUFBSXVMLGVBQWdCdkw7VUFBSSxDQUNyQyxJQUFJVyxFQUFJLHlCQUF5QixPQUFPWCxJQUN4QyxnQkFBaUJXO1NBRW5COztTQUVBLElBQVUsSUFBRlgsSUFBT0EsSUFBSXVMLG1CQUFvQnZMO1VBQUksQ0FDekMsSUFBSWlCLEVBQUksT0FBT2pCO1dBQ2YsZ0JBQWlCLHlCQUF5QmlCO1dBQzFDLGdCQUFpQix5QkFBeUJBO1NBRTVDOztTQUVBLElBQVUsSUFBRmpCLElBQU9BLElBQUl1TCxtQkFBb0J2TDtVQUFJLENBQ3pDO1lBQVksUUFBRSxPQUFPQTtZQUNmLEVBQUUsb0JBQW9CLHlCQUF5QmlQO1dBQ3JELElBQVcsSUFBRmhPLElBQU9BLE1BQU9BLElBQUssZUFBaUJOLEVBQUVNO1dBRi9DLElBR0lOLEVBQUksb0JBQW9CLHlCQUF5QnNPO1dBQ3JELElBQVcsSUFBRmhPLElBQU9BLE1BQU9BLElBQUssZUFBaUJOLEVBQUVNO1NBRWpEOztNQUVGK04sYUFBYXpEO01BQ2J5RCxhQUFhekQsbUJBQ2Y7SUE5bkJBLFNBQVMyRCw2QkFBNkJDO01BQ3BDLE9BQU9BLDZCQUNtQixpQkFDakIsU0FFWDtJQUtBLFNBQVNDLHNCQUFzQkQsS0FBTUU7TUFDbkMsSUFBTSxFQUFFM1IsV0FDSjRSO01BQ0osT0FBT0g7ZUFDRUcsT0FBT3hHLGVBQWdCO2VBQ3ZCd0csT0FBT3hHLGVBQWdCO2VBQ3ZCd0csT0FBT3hHLFlBQWE7ZUFDcEJ3RyxPQUFPeEcsYUFBYztlQUNyQndHLE9BQU94RyxhQUFjO2VBQ3JCd0csT0FBT3hHLGNBQWU7ZUFDdEJ3RyxPQUFPeEcsYUFBYztlQUNyQndHLE9BQU94RyxhQUFjO2VBQ3JCd0csT0FBT3hHLGFBQWM7ZUFDckJ3RyxPQUFPeEcsYUFBYztnQkFDckJ3RyxPQUFPeEcsZUFBZ0I7Z0JBQ3ZCd0csT0FBT3hHLGVBQWdCO2dCQUN2QndHLE9BQU94RyxhQUFjOztNQUU5QixLQUFLd0csS0FBTTtNQWpCWCxJQWtCSUMsU0FBV0QsS0FBS0QsT0FBTyw2QkFBNkJGO01BQ3hELE9BQU9JLElBQ1Q7SVhtR0EsU0FBU0MseUJBQTBCdlI7TUFDakMsSUFBSXNRLFlBQWE3UTtNQUNqQjZRLFlBQVl0UTtNQURaLElBRUlxUSxjQUFlNVEseUJBQXdCNlE7TUFDM0MsT0FBT0QsV0FDVDtJQXJEQSxTQUFTbUIseUJBQTBCeFI7TUFDakMsSUFBTyxHQUFFQSxLQUNGLEdBQUVBLEtBQ0YsR0FBRUEsS0FDRCxLQUFHZTtNQUNYLEdBQUkwUDtPQUFhLFFBQ1Y1UCxLQUFHQyxLQUFJQyxlQUNGQSxjQUFlb1AsU0FBVUEsU0FFMUJzQjtNQVJYLElBVU0sRUFBRSxpQkFDQSxLQUFHNVEsS0FBRzZQLElBQUU1UCxNQUFJNFAsS0FBRzNQO01BQ3ZCLEdBQUkwUDtPQUFTLENBQ1hwSSxVQUNBQSxPQUFPLFdBQVdvSTs7T0FFbEJwSSxPQUFPO01BQ1QsR0FBSXRILFlBQWFzSCxRQUFRQTtNQUN6QixPQUFPQSxHQUNUO0lXbEhBLFNBQVNxSixpQkFBaUJDO01BQ3hCLElBQVcsT0FBRUEsWUFDSjtNQUNULElBQVcsSUFBRjVQLElBQU9BLElBQUk2UCxPQUFRN1A7T0FBSyxDQUMvQixHQUFJNFAsS0FBSzVQO1NBQ1A7UUFDRnFQLE9BQU9BLE9BQU9PLEtBQUs1UDtNQUVyQixPQUFPcVAsSUFDVDtJaEJ1VEEsU0FBU1Msd0JBQXdCaFIsR0FBSUU7TUFDbkM7Y0FBV0g7ZUFDVEM7ZUFDRUEsb0JBQXVCRTtlQUN4QkEsbUJBQ0w7SUFLQSxTQUFTK1EsZ0JBQWdCL08sR0FBSSxPQUFPLFFBQVM7SUFIN0MsU0FBU2dQLGdCQUFnQmhQLEdBQUksT0FBTyxRQUFTO0lnQnBSN0MsSUFBSWlQO0lBS0osU0FBU0MsWUFBYWYsS0FBTWdCLE9BQVFQLEtBQU03TjtNQUV4Q3BFLFlBQWN3UjtNQUNkeFIsY0FBY3dTO01BQ2R4UyxZQUFjaVM7TUFDZGpTLFlBQVlvRSxNQUNkO0lBRUFtTyxvQ0FBb0NEO0lBRXBDQzs7YUFBeUMxUDtNQUN2QyxJQUFJaUw7TUFDSixVQUFVakwsaUJBQWtCQSxPQUFPQTtNQUNuQyxNQUFPQSxlQUFlNkU7T0FBUTtNQUM5QixHQUFJMUgsb0JBQW9CNkM7T0FDdEI7TUFDRixHQUFHN0M7T0FBaUMsSUFDdkIsSUFBRnFDLElBQU9BLElBQUlyQyxpQkFBa0JxQztRQUFLLENBQ3pDLEdBQUlRLElBQUlSLFVBQVVRLElBQUlSLE1BQU1yQyxVQUFVcUMsR0FDcEM7U0FDRnlMLE1BQU9BLE1BQU05TixVQUFVcUMsS0FBTVEsSUFBSVI7O09BRTlCLElBQ00sSUFBRkEsRUFBSXJDLHFCQUFzQnFDLE9BQVFBO1FBQUssQ0FDOUMsR0FBSVEsSUFBSVIsVUFBVVEsSUFBSVIsS0FBS3JDLFVBQVVxQyxHQUFHO1NBR3hDeUwsTUFBT0EsTUFBTTlOLFVBQVVxQyxNQUFPUSxJQUFJUjtNQUd0QyxPQUFPeUwsR0FwQnNCO0lBdUIvQnlFOzthQUFzQ3pFO01BQ3BDLE9BQU85Tjs7U0FHTCxJQUFNLEVBQUVBLFVBQVU4TixhQUNaLEVBQUU5TixVQUFVOE47U0FDbEIsT0FBTyx3QkFBd0JuTixFQUFFWTs7O1NBR2pDLElBQU0sRUFBRXZCLFVBQVU4TixhQUNaLEVBQUU5TixVQUFVOE47U0FDbEIsWUFBYXBOLEVBQUcyQjtnQkFFaEIsT0FBT3JDLFVBQVU4TixLQWJPO0lBaUI1QnlFOzthQUFzQ3pFLElBQUl6SztNQUN4QyxPQUFPckQ7O1NBR0xBLFVBQVU4TixlQUFlLGdCQUFnQnpLO1NBQ3pDckQsVUFBVThOLGVBQWUsZ0JBQWdCeks7U0FDekM7OztTQUdBckQsVUFBVThOLGVBQWV6SyxLQUN6QnJELFVBQVU4TixlQUFlekssS0FDekI7Z0JBRUFyRCxVQUFVOE4sT0FBT3pLLEVBQ2pCO01BRUYsUUFoQjBCO0lBb0I1QmtQOzthQUF1Q2xQO01BQ3JDLE9BQU9yRDs7U0FHTCxJQUFNLEVBQUUsZ0JBQWdCcUQsR0FDbEIsRUFBRSxnQkFBZ0JBO1NBQ3hCLEdBQUdqQixLQUFLWTtVQUFFLGVBQ09aOztVQUVaLElBQ08sSUFBRkMsSUFBT0EsSUFBRXJDLGlCQUFrQnFDLElBQUksVUFDM0JBLEtBQU1BLFdBQVlELEVBQUlZO1NBR3BDOzs7U0FHQSxJQUFPLEdBQUVLLEtBQ0YsR0FBRUE7U0FDVCxHQUFHMkksTUFBTXlHO1VBQUcsZUFDS3pHOztVQUVaLElBQ08sSUFBRjNKLElBQU9BLElBQUVyQyxpQkFBa0JxQztXQUFJLFVBQzNCQSxLQUFNQSxXQUFZMkosR0FBS3lHO1NBR3JDO2dCQUVBLGVBQWVwUCxHQUNmLE1BOUJ5QjtJQW1DN0JrUDs7YUFBMEN2UCxFQUFHMFA7TUFDM0MsR0FBSTFTLGVBQWVnRCxZQUFZaEQsYUFBYWdEO09BQVEsQ0FDbEQsSUFBTyxHQUFFaEQsWUFBYUEsaUJBQ2YsR0FBS2dELFNBQVVBO1FBQ3RCLE9BQU80UCxLQUFLRDtNQUVkLEdBQUkzUyxvQkFBb0JnRDtPQUFlLE9BQzlCQSxnQkFBZ0JoRDtNQUV6QixJQUFXLElBQUZxQyxJQUFPQSxJQUFJckMsaUJBQWtCcUM7T0FDcEMsR0FBSXJDLFVBQVVxQyxNQUFNVyxPQUFPWCxHQUN6QixPQUFRckMsVUFBVXFDLEtBQUtXLE9BQU9YO01BQ2xDLE9BQVFyQzs7Ozs7U0FNTixJQUFJTSxFQUFHdUI7U0FDUCxJQUFXLElBQUZRLElBQU9BLElBQUlyQyxpQkFBa0JxQztVQUFLLENBQ3pDL0IsSUFBSU4sVUFBVXFDO1dBQ2RSLElBQUltQixPQUFPWDtXQUNYLEdBQUkvQixJQUFJdUIsRUFDTjtXQUNGLEdBQUl2QixJQUFJdUIsRUFDTjtXQUNGLEdBQUl2QixLQUFLdUI7WUFBRyxDQUNWLEtBQUs2USxNQUFPLE9BQU9YLElBQ25CLEdBQUl6UixLQUFLQSxFQUFHLFNBQ1osR0FBSXVCLEtBQUtBLEVBQUc7U0FHaEI7O1NBR0EsSUFBVyxJQUFGUSxJQUFPQSxJQUFJckMsaUJBQWtCcUM7VUFBTSxDQUUxQyxHQUFJckMsVUFBVXFDLFNBQU9XLE9BQU9YLE9BQzFCO1dBQ0YsR0FBSXJDLFVBQVVxQyxTQUFPVyxPQUFPWCxPQUMxQjtXQUNGLEdBQUtyQyxVQUFVcUMsV0FBYVcsT0FBT1gsU0FDakM7V0FDRixHQUFLckMsVUFBVXFDLFdBQWFXLE9BQU9YLFNBQ2pDO1NBRUo7Ozs7Ozs7OztTQVNBLElBQVcsSUFBRkEsSUFBT0EsSUFBSXJDLGlCQUFrQnFDO1VBQUssQ0FDekMsR0FBSXJDLFVBQVVxQyxLQUFLVyxPQUFPWCxHQUN4QjtXQUNGLEdBQUlyQyxVQUFVcUMsS0FBS1csT0FBT1gsR0FDeEI7U0FFSjs7TUFFRixRQS9EOEI7SUFvRWhDLFNBQVN3USxrQkFBa0JyQixLQUFNZ0IsT0FBUVAsS0FBTTdOO01BQzdDcEUsWUFBY3dSO01BQ2R4UixjQUFjd1M7TUFDZHhTLFlBQWNpUztNQUNkalMsWUFBY29FLE1BQ2hCO0lBRUF5TyxrQ0FBa0NOO0lBQ2xDTTs7YUFBK0NoUTtNQUM3QyxVQUFVQTtPQUFpQixHQUNyQkEsZUFBZTZFLFNBQVU3RTtRQUMzQkEsTUFBTUE7O1FBQ0g7TUFFUCxHQUFJQSxXQUFXQSxPQUFPN0MsYUFDcEI7TUFDRixPQUFPNkMsR0FSNEI7SUFXckNnUSwyQ0FBNEMvRSxLQUMxQyxPQUFPOU4sVUFBVThOLElBRGU7SUFJbEMrRTs7YUFBNEMvRSxJQUFJekssR0FDOUNyRCxVQUFVOE4sT0FBT3pLLEVBQ2pCLFFBRmdDO0lBS2xDd1A7O2FBQTZDeFAsR0FDM0MsZUFBZUEsR0FDZixRQUZpQztJQWFuQyxTQUFTeVAsc0JBQXNCdEIsS0FBTWdCLE9BQVFQLEtBQU1MO01BQ2pELElBQUltQixpQkFBbUIsNkJBQTZCdkI7TUFDcEQsR0FBRyxpQkFBaUJTLFFBQVFjLG9CQUFvQm5CO09BQWE7TUFHN0QsR0FBR1ksZUFDQVAsb0JBQ0FjO09BQ0QsV0FBV0Ysa0JBQWtCckIsS0FBTWdCLE9BQVFQLEtBQU1MO01BQ25ELFdBQVdXLFlBQVlmLEtBQU1nQixPQUFRUCxLQUFNTCxLQUU3QztJQXlYQSxTQUFTb0Isb0JBQW9CQyxPQUFRNUIsR0FBSTVMO01BQ3ZDLElBQUl5TixTQUFXO01BQ2YsR0FBSUEsZ0JBQWdCQTtPQUNsQjtNQUZGLElBR1EsSUFBRSxpQkFDRCxLQUFFblMsV0FDQSxPQUFHQSxhQUNMO01BQ1QsR0FBRzBFO09BQ0QsSUFBVyxJQUFGcEQsSUFBT0EsSUFBSTZRLFNBQVU3UTtRQUFLLENBQ2pDLElBQUk4USxTQUFXO1NBQ2YsR0FBR0E7VUFBbUIsQ0FDcEIsSUFBZ0IsWUFBRSxpQkFDRixZQUFFO1dBQ2xCLEdBQUdDO1lBQ0Q7V0FDRkQsV0FBV0U7U0FFYixVQUFVRjs7T0FHWixJQUFXLElBQUY5USxJQUFPQSxJQUFJNlEsU0FBVTdRLElBQUssVUFBVTtNQXBCL0M7T0FxQlMsS0FBRSxpQkFBaUI0UDtPQUNuQixLQUFFLHNCQUFzQlQsS0FBTUU7T0FDaEMsR0FBRSxzQkFBc0JGLEtBQU1nQixPQUFRUCxLQUFNTDtNQUNuRCxPQUFPSjtlQUVMLElBQVUsSUFBRm5QLElBQU9BLElBQUlxUCxLQUFNclAsSUFBSSxLQUN0QkEsS0FBSyxnQkFFWjs7Z0JBR0EsSUFBVSxJQUFGQSxJQUFPQSxJQUFJcVAsS0FBTXJQLElBQUksS0FDdEJBLEtBQUssZ0JBRVo7ZUFFQSxJQUFVLElBQUZBLElBQU9BLElBQUlxUCxLQUFNclAsSUFBSSxLQUN0QkEsS0FBSyxpQkFFWjtlQUVBLElBQVUsSUFBRkEsSUFBT0EsSUFBSXFQLEtBQU1yUCxJQUFJLEtBQ3RCQSxLQUFLLGlCQUVaO2VBRUEsSUFBVSxJQUFGQSxJQUFPQSxJQUFJcVAsS0FBTXJQLElBQUksS0FDdEJBLEtBQUssaUJBRVo7OztTQUdBLElBQUlpUixNQUFRO1NBQ1osR0FBR0E7VUFBTzs7U0FDVixJQUFVLElBQUZqUixJQUFPQSxJQUFJcVAsS0FBTXJQLElBQUksS0FDdEJBLEtBQUs7U0FFWjs7U0FFQSxJQUFJWSxNQUFReUU7U0FDWixJQUFVLElBQUZyRixJQUFPQSxJQUFJcVAsS0FBTXJQO1VBQUksQ0FDM0IsSUFBVyxJQUFGaUIsSUFBTUEsTUFBTUEsSUFBS0wsRUFBRUssS0FBSztXQUNqQyxJQUFJaVEsTUFBUSxvQkFBb0J0UTtXQUNoQyxPQUFPWixFQUFFa1I7U0FFWDs7U0FFQSxJQUFJdFEsTUFBUXlFO1NBQ1osSUFBVSxJQUFGckYsSUFBT0EsSUFBSXFQLEtBQU1yUDtVQUFJLENBQzNCLElBQVcsSUFBRmlCLElBQU1BLE1BQU1BLElBQUtMLEVBQUVLLEtBQUs7V0FDakMsSUFBSWYsRUFBSSx5QkFBeUIsb0JBQW9CVTtXQUNyRCxPQUFPWixFQUFFRTtTQUVYOztTQUVBLElBQVUsSUFBRkYsSUFBT0EsSUFBSXFQLEtBQU1yUDtVQUFJLENBQzNCLElBQUlFLEVBQUkseUJBQXlCLGtCQUNqQyxPQUFPRixFQUFFRTtTQUVYOztTQUVBLElBQVUsSUFBRkYsSUFBT0EsSUFBSXFQLEtBQU1yUDtVQUFJLENBQzNCO1lBQU8sR0FBRSx5QkFBeUI7WUFDM0IsR0FBRSx5QkFBeUI7V0FDbEMsT0FBT0EsT0FBT29RLEdBQUd6RztTQUVuQjs7U0FFQSxJQUFJL0ksTUFBUXlFO1NBQ1osSUFBVSxJQUFGckYsSUFBT0EsSUFBSXFQLEtBQU1yUDtVQUFJLENBQzNCLElBQVcsSUFBRmlCLElBQU1BLE1BQU1BLElBQUtMLEVBQUVLLEtBQUs7V0FDakMsSUFBSW1QLEdBQUsseUJBQXlCLG9CQUFvQnhQO1dBQ3RELElBQVcsSUFBRkssSUFBTUEsTUFBTUEsSUFBS0wsRUFBRUssS0FBSztXQURqQyxJQUVJMEksR0FBSyx5QkFBeUIsb0JBQW9CL0k7V0FDdEQsT0FBT1osT0FBT29RLEdBQUd6RztTQUVuQjs7TUFFRnFGLGFBQWE2QjtNQUNiLE9BQU8sc0JBQXNCMUIsS0FBTWdCLE9BQVFQLEtBQU1MLEtBQ25EO0lBamZBLFNBQVM0QixnQkFBZ0JwUixFQUFFWSxFQUFFMFAsT0FDM0IsT0FBTyxVQUFVMVAsRUFBRTBQLE1BQ3JCO0lJMUxBLFNBQVNlLG9CQUFxQmxTLEVBQUc4QjtNQUMvQjlCLElBQUksa0JBQWtCQSxFQUFHLGdCQUFnQjhCO01BQ3pDOUIsSUFBSSxrQkFBa0JBLEVBQUcsZ0JBQWdCOEI7TUFDekMsT0FBTzlCLENBQ1Q7SUFWQSxTQUFTbVMsb0JBQXFCblMsRUFBR29TO01BQy9CLE9BQU8sb0JBQW9CcFMsRUFBRyx5QkFBMEJvUyxJQUMxRDtJSjJyQkEsU0FBU0MsYUFBYWhHO01BQ3BCLElBQWEsU0FBRSxpQkFBaUJBLFNBQzFCO01BQ04sT0FBT0E7Ozs7U0FJTCxHQUFHaUcsZUFBZ0JBO1NBQ25CLElBQU0sSUFBTztTQUNiLElBQUl4UixNQUFPQSxTQUFTdUwsZUFBZ0J2TDtVQUFLLENBQ3ZDeVI7O1dBQUlsRyxRQUFRdkw7O1dBQVF1TCxRQUFRdkw7Ozs7V0FBY3VMLFFBQVF2TDs7OztXQUFldUwsUUFBUXZMOzs7V0FDekVkLElBQUksa0JBQWtCQSxFQUFFdVM7U0FFMUJBO1NBQ0EsT0FBUUQ7a0JBQ0FDLElBQUtsRyxRQUFRdkw7a0JBQ2J5UixLQUFLbEcsUUFBUXZMO2tCQUNieVIsS0FBS2xHLFFBQVF2TCxPQUNuQmQsSUFBSSxrQkFBa0JBLEVBQUd1Uzs7U0FFM0I7OztTQUdBLEdBQUdELGVBQWdCQTtTQUNuQixJQUFNLElBQU87U0FDYixJQUFJeFIsTUFBT0EsU0FBU3VMLGVBQWdCdkw7VUFBSyxDQUN2Q3lSLElBQUlsRyxRQUFRdkwsU0FBUXVMLFFBQVF2TDtXQUM1QmQsSUFBSSxrQkFBa0JBLEVBQUV1UztTQUUxQixJQUFLRCxtQkFDSHRTLElBQUksa0JBQWtCQSxFQUFHcU0sUUFBUXZMO1NBQ25DOztTQUVBLEdBQUl3UixjQUFlQTtTQUNuQixJQUFXLElBQUZ4UixJQUFPQSxJQUFJd1IsU0FBVXhSLElBQUtkLElBQUksa0JBQWtCQSxFQUFHcU0sUUFBUXZMO1NBQ3BFOzs7U0FHQSxHQUFJd1IsY0FBZUE7U0FDbkIsSUFBVyxJQUFGeFIsSUFBT0EsSUFBSXdSLFNBQVV4UixJQUFLZCxJQUFJLGtCQUFrQkEsRUFBR3FNLFFBQVF2TDtTQUNwRTs7U0FFQSxHQUFJd1IsY0FBZUE7U0FDbkJBO1NBQ0EsSUFBVyxJQUFGeFIsSUFBT0EsSUFBSXdSLFNBQVV4UixJQUFLLElBQzdCLGtCQUFrQmQsRUFBR3FNLFFBQVF2TDtTQUVuQztnQkFFQXdSOztTQUVBLEdBQUlBLGNBQWVBO1NBQ25CLElBQVcsSUFBRnhSLElBQU9BLElBQUl3UixTQUFVeFIsSUFBS2QsSUFBSSxvQkFBb0JBLEVBQUdxTSxRQUFRdkw7U0FDdEU7Z0JBRUF3Ujs7U0FFQSxHQUFJQSxjQUFlQTtTQUNuQixJQUFXLElBQUZ4UixJQUFPQSxJQUFJd1IsU0FBVXhSLElBQUtkLElBQUksb0JBQW9CQSxFQUFHcU0sUUFBUXZMO1NBQ3RFOztNQUVGLE9BQU9kLENBQ1Q7SUhsc0JBLFNBQVN3UyxxQkFBcUJkLE9BQVF2QjtNQUNwQ0EsWUFDQSxPQUFPLGdCQUNUO0lBSUEsU0FBU3NDLHlCQUF5QmYsT0FBUXZCO01BQ3hDLE9BQVE7ZUFFTkEsWUFDQSxPQUFPO2VBRVA7Z0JBQ08sd0RBRVg7SUFoQ0EsU0FBU3VDLHFCQUFxQmhCLE9BQVF2QjtNQUNwQyxJQUFJek8sTUFBUXlFO01BQ1osSUFBVyxJQUFGcEUsSUFBTUEsTUFBTUEsSUFBS0wsRUFBRUssS0FBSztNQUNqQ29PO01BQ0EsT0FBTyxvQkFBcUJ6TyxFQUM5QjtJYmtFQSxTQUFTaVIsbUJBQW1CNVQsRUFBRXVCLEVBQUc2USxPQUFTLE9BQU8sVUFBVTdRLEVBQUc7SUE4SjlELFNBQVNzUyxnQkFBZ0I5USxHQUN2QixPQUFRLFdBQWEsUUFDdkI7SWFqTUE7S0FBSStROztvQkFFZ0JIO2tCQUNEekY7O2dCQUVIMEY7YUFDSEM7eUJBR1FKO3lCQUlBQzs7O2lCQUlXZixPQUFRNUIsSUFBSyxPQUFPLG9CQUFxQjRCLE9BQU81QixlQUExRDtrQkFDSEQ7Z0JBQ0ZvQzthQUNKSTs7O2lCQUdtQlgsT0FBUTVCLElBQUssT0FBTyxvQkFBcUI0QixPQUFPNUIsZUFBMUQ7a0JBQ0hEO2dCQUNGb0M7YUFDSkk7SVF6S2IsU0FBU1MsNEJBQTRCalM7TUFDbkMsT0FBT2dTLGdCQUFnQmhTOzthQUFrQmdTLGdCQUFnQmhTLHNCQUMzRDtJQUlBLFNBQVNrUywrQkFBK0JDLElBQUtDLE9BQVFDLEtBQU0vQjtNQUN6RCxJQUFJN00sS0FBTyw0QkFBNEIyTztNQUN2QyxHQUFHM087T0FBTSxDQUNQLElBQUl2RixFQUFLbVUsU0FBVSxLQUFLRCxPQUFPRCxJQUFJN0IsT0FBTyxLQUFLNkIsSUFBSUMsT0FBTzlCO1FBQzFELEdBQUdBLFNBQVNwUyxLQUFLQSxFQUFHLE9BQU9tVTtRQUMzQixLQUFJblUsT0FBTUEsRUFBRyxTQUFRQTtRQUNyQixJQUFJQSxZQUFhLE9BQVFBO01BRTNCLE9BQU9tVSxJQUNUO0lBdENBLFNBQVNDLHFCQUFxQnRTO01BQzVCLFVBQVdBO09BQWdCOztPQUN0QixHQUFJLGlCQUFpQkE7UUFBSTs7UUFDekIsR0FBSSxrQkFBa0JBO1NBQUk7O1NBQzFCLEdBQUlBLGFBQWFzRixTQUFTdEYsU0FBVUEsY0FBYUE7VUFBYSxDQUVqRSxJQUFJckIsSUFBTXFCLFNBR1YsT0FBUXJCLGFBQWNBOztVQUVuQixHQUFJcUIsYUFBYUk7V0FBUTs7V0FDekIsVUFBV0o7WUFBZTs7WUFDMUIsR0FBSUEsYUFBYXVTO2FBQVE7O2FBQ3pCLEdBQUl2UyxLQUFLQTtjQUFlOztjQUN4QixHQUFJQSxLQUFLQTtlQUFXOztlQUNwQixVQUFXQTtnQkFBaUI7O2dCQUM1QixVQUFXQSxjQUFlO01BQy9CLFdBQ0Y7SUFxTUEsU0FBU3dTLGlCQUFrQnhTLEVBQUdZO01BQzVCLEdBQUlaLElBQUlZLEVBQUcsV0FBYSxHQUFJWixLQUFLWSxFQUFHLFNBQVUsUUFDaEQ7SXBCNFJBLFNBQVM2UixtQkFBbUJqTixHQUFJRTtNQUM3QkYsWUFBYSw2QkFBNkJBO01BQzFDRSxZQUFhLDZCQUE2QkE7TUFDM0MsT0FBUUYsT0FBT0UsU0FBVUYsT0FBT0UsUUFDbEM7SUFpUEEsU0FBU2dOLG9CQUFvQmxOLEdBQUlFLElBQy9CLE9BQU8sbUJBQW1CRixHQUFHRSxHQUMvQjtJb0Joc0JBLFNBQVNpTixpQkFBa0IzUyxFQUFHWSxFQUFHMFA7TUFDL0IsSUFBSXNDO01BQ0o7T0FBUSxDQUNOLE1BQU10QyxTQUFTdFEsTUFBTVk7U0FBSSxDQUN2QixJQUFJaVMsTUFBUSxxQkFBcUI3UztVQUVqQyxHQUFHNlMsYUFBYyxDQUFFN1MsSUFBSUEsS0FBTTtVQUY3QixJQUlJOFMsTUFBUSxxQkFBcUJsUztVQUVqQyxHQUFHa1MsYUFBYyxDQUFFbFMsSUFBSUEsS0FBTTtVQUc3QixHQUFHaVMsVUFBVUM7V0FBTyxDQUNsQixHQUFHRDthQUFlLENBQ2hCLEdBQUdDO2VBQWUsT0FDVCwrQkFBK0I5UyxFQUFHWSxNQUFPMFA7Y0FFbEQ7WUFFRixHQUFHd0M7YUFBZSxDQUNoQixHQUFHRDtlQUFlLE9BQ1QsK0JBQStCalMsRUFBR1osSUFBTXNRO2NBRWpEO1lBRUYsT0FBUXVDLFFBQVFDO1VBRWxCLE9BQU9EO3FCQUlMLG1EQUNBOzthQUVBLElBQUkzVSxFQUFJLGlCQUFpQjhCLEtBQU1ZLE1BQy9CLEdBQUkxQyxPQUFRLE9BQVFBLE1BQ3BCO3FCQUdBLG1EQUNBOzthQUdBOzthQUNBO3FCQUVBLCtDQUNBOzthQUVBLEdBQUk4QixNQUFNWSxFQUFHLENBQ1gsSUFBSTFDLEVBQUksbUJBQW1COEIsRUFBR1ksR0FDOUIsR0FBSTFDLE9BQVEsT0FBUUE7YUFFdEI7O2FBR0E7YUFDQTs7YUFHQTs7YUFDQTs7YUFFQTthQUNBOzthQUVBLG1EQUNBOzthQUVBLElBQUl1RixLQUFPLDRCQUE0QnpEO2FBQ3ZDLEdBQUd5RCxRQUFRLDRCQUE0QjdDO2NBQUcsT0FDaENaLGdCQUFjWTthQUV4QixLQUFJNkMsS0FDRjthQUxGLElBTUl2RixFQUFJLEtBQUs4QixFQUFFWSxFQUFFMFA7YUFDakIsR0FBR3BTLEtBQUtBLEVBQUUsT0FDRG9TLFVBQVNwUzthQUVsQixHQUFHQSxPQUFPQSxPQUFLO2FBR2YsR0FBSUEsT0FBUSxPQUFRQTthQUNwQjs7YUFFQSxJQUFJQSxFQUFJLFVBQVUwQyxFQUFFMFA7YUFDcEIsR0FBR3BTLEtBQUtBLEVBQUcsT0FDRm9TLFVBQVNwUzthQUVsQixHQUFHQSxPQUFPQSxPQUFLO2FBR2YsR0FBSUEsT0FBUSxPQUFRQTthQUNwQjs7YUFFQThCLE1BQUtBO2FBQ0xZLE1BQUtBO2FBQ0wsR0FBSVosSUFBSVksRUFBRzthQUNYLEdBQUlaLElBQUlZLEVBQUc7YUFDWCxHQUFJWixLQUFLWTtjQUFHLENBQ1YsS0FBSzBQLE1BQU8sT0FBT1gsSUFDbkIsR0FBSTNQLEtBQUtBLEVBQUcsU0FDWixHQUFJWSxLQUFLQSxFQUFHO2FBRWQ7O2FBZUEsR0FBSVosSUFBSVksRUFBRzthQUNYLEdBQUlaLElBQUlZLEVBQUc7YUFDWCxHQUFJWixLQUFLWTtjQUFHLENBQ1YsS0FBSzBQLE1BQU8sT0FBT1gsSUFDbkIsR0FBSTNQLEtBQUtBLEVBQUcsU0FDWixHQUFJWSxLQUFLQSxFQUFHO2FBRWQ7c0JBRUEsR0FBR1osTUFBTVksRUFBRyxDQUNWLEtBQUswUCxNQUFPLE9BQU9YLElBQ25CLFNBRUY7O2FBRUEsSUFBTSxFQUFFLHVCQUF1QjNQLEdBQ3pCLEVBQUUsdUJBQXVCWTthQUMvQixHQUFHWixNQUFNWSxFQUFHLENBQ1YsR0FBR1osSUFBSVksRUFBRyxXQUNWLEdBQUdaLElBQUlZLEVBQUc7YUFFWjs7YUFFQSxJQUFNLEVBQUUsYUFDRixFQUFFO2FBQ1IsR0FBR1osTUFBTVksRUFBRyxDQUNWLEdBQUdaLElBQUlZLEVBQUcsV0FDVixHQUFHWixJQUFJWSxFQUFHO2FBRVo7Ozs7YUFJQSxHQUFJWixZQUFZWSxTQUFVLE9BQVFaLFdBQVdZO2FBQzdDLEdBQUlaLGFBQWMsV0FBV0EsRUFBR1k7YUFDaEM7UUFHSixHQUFJZ1Msa0JBQW1CO1FBQ3ZCLElBQUkzUyxFQUFJO1FBQ1JXLElBQUk7UUFDSlosSUFBSTtRQUNKLEdBQUlDLFFBQVFELFNBQVUsV0FBV0EsRUFBR1ksRUFBR1g7UUFDdkNELElBQUlBLEVBQUVDO1FBQ05XLElBQUlBLEVBQUVYLEdBRVY7SUFtQkEsU0FBUzhTLGlCQUFrQjdVLEVBQUd1QixHQUFLLFVBQVMsaUJBQWlCdkIsRUFBRXVCLGFBQWU7SVZrQjlFLFNBQVN1VCxXQUFXaFQsRUFBR1ksRUFBR0U7TUFDeEI7T0FBTSxFQUFFZCxhQUFhWTtPQUNmLEVBQUUsV0FBVzFDLElBQUU0QztPQUNmLEVBQUc1QyxJQUFJNEM7T0FDUCxFQUFFbVMsS0FBS3JTO01BQ2IsUUFBUW5CLElBQUksV0FBV2lTLElBQUU1USxHQUFJNFEsSUFBSTVRLEVBQ25DO0lBS0EsU0FBU29TLGNBQWNDLEtBQU1DLEtBQU1DLEtBQU1DLEtBQU1wSyxLQUFNQyxLQUFNakosSUFBS21KLEtBQU1DO01BQ3BFLElBQUlpSyxJQUFPckssVUFBVUMsT0FBS2pKO01BRzFCLElBQVUsSUFBRkQsRUFBSUMsUUFBT0QsT0FBUUE7T0FBSyxDQUM5QixJQUFJL0IsRUFBSSxXQUFXcVYsSUFBTXJLLFVBQVVDLE9BQUtsSixTQUFZb0osVUFBVUM7UUFDOUQ2SixVQUFVQyxPQUFLblQsS0FBSy9CO1FBQ3BCcVYsTUFBTXJWO01BRVJtVixVQUFVQyxRQUFRQztNQUNsQixRQUNGO0lBak1BLFNBQVNDLCtCQUErQm5HLElBQUszQjtNQUMzQyxJQUFNLEVBQUUyQixTQUFTM0IsS0FDWDtNQUNOLEdBQUcxTCxlQUFnQixDQUFFWSxRQUFRWjtNQUM3QixHQUFHQSxXQUFnQixDQUFFWSxPQUFRWjtNQUM3QixHQUFHQSxTQUFnQixDQUFFWSxPQUFRWjtNQUM3QixHQUFHQSxPQUFnQixDQUFFWSxPQUFRWjtNQUM3QixHQUFHQSxNQUFnQixDQUFFWSxPQUFRWjtNQUM3QixHQUFHQSxNQUFnQjtNQUNuQixZQUFZWSxDQUNkO0lBZ0pBLFNBQVM2UyxlQUFldkssS0FBTUMsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTUM7TUFDcEQsR0FBR0EsV0FBWSxDQUNiRixVQUFVQyxVQUNWO01BRUYsSUFBSUU7TUFDSixJQUFVLElBQUZ2SixJQUFPQSxJQUFJbUosS0FBTW5KO09BQUssQ0FDNUIsSUFBSUQsRUFBS2tKLFVBQVVDLE9BQUtsSjtRQUN4QmlKLFVBQVVDLE9BQUtsSixLQUFNRCxLQUFLdUosUUFBU0M7UUFDbkNBLE9BQU94SixXQUFZdUo7TUFFckJGLFVBQVVDLFFBQVFFO01BQ2xCLFFBQ0Y7SUEzUEEsU0FBU2tLLE1BQU14VjtNQUNiTixpQkFBZ0JELHVCQUFzQk87TUFHdENOLGNBQWNBLG9CQUNoQjtJQUVBOFY7SUFzQkEsU0FBU0MsV0FBV3JFO01BQ2xCLElBQUlzRSxRQUFVRixNQUFNcEU7TUFDcEIsSUFBVSxJQUFGclAsSUFBT0EsSUFBSXFQLEtBQU1yUCxJQUFLLFNBQ25CQTtNQUVYLE9BQU8yVCxHQUNUO0lBR0EsU0FBU0MsZ0JBQWdCeEcsSUFBSzNCLElBQUt4TDtNQUNqQyxJQUFVLElBQUZELElBQU9BLElBQUlDLElBQUtELElBQUssU0FDbEJ5TCxNQUFJekwsT0FFZixRQUNGO0lBd0VBLFNBQVM2VCxTQUFTekcsSUFBSzNCLElBQUt4TCxJQUFLNlQ7TUFDL0IsSUFBSUMsTUFBUUQ7TUFDWixJQUFVLElBQUY5VCxJQUFPQSxJQUFJQyxJQUFLRDtPQUFLLENBQzNCLElBQUkvQixHQUFLbVAsU0FBUzNCLE1BQUl6TCxZQUFZK1Q7UUFDbEMzRyxTQUFTM0IsTUFBSXpMLEtBQU0vQjtRQUNuQixHQUFHQSxLQUFNQSxRQUFVLENBQ2pCOFYsVUFDQSxXQUNLO01BSVQsT0FBT0EsS0FDVDtJQUtBLFNBQVNDLFFBQVEvSyxLQUFNQyxLQUFNQyxLQUFNQyxLQUFNQyxLQUFNNEssS0FBTUg7TUFDbkQsSUFBSUMsTUFBUUQ7TUFDWixJQUFVLElBQUY5VCxJQUFPQSxJQUFJaVUsS0FBTWpVO09BQUssQ0FDNUI7U0FBSS9CO1dBQUtnTCxVQUFVQyxPQUFLbEosYUFBYW9KLFVBQVVDLE9BQUtySixZQUFZK1Q7UUFDaEU5SyxVQUFVQyxPQUFLbEosS0FBSy9CO1FBQ3BCLEdBQUdBLEtBQU1BLFFBQVUsZUFFWjtNQUlULE9BQU8sU0FBU2dMLEtBQU1DLE9BQUsrSyxLQUFNOUssT0FBSzhLLEtBQU1GLE1BQzlDO0lBMUhBLFNBQVNHLGFBQWE1VixHQUNwQixXQUFXbVYsTUFBTW5WLEVBQ25CO0lBd0tBLFNBQVM2VixlQUFlbEwsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTTRLLEtBQU1HLEtBQU1DO01BQ2hFLElBQVUsUUFDSixFQUFHRCxVQUFVQztNQUNuQixJQUFVLElBQUZyVSxJQUFPQSxJQUFJaVUsS0FBTWpVO09BQUssQ0FDNUI7U0FBTztXQUFHaUosVUFBVUMsT0FBS2xKOztXQUFhb0osVUFBVUMsT0FBS3JKOztXQUFhRDs7VUFBa0JnVTtTQUM3RSxJQUFHM0ssVUFBVUMsT0FBS3JKLGFBQWFEO1FBQ3RDZ1UsUUFBUSxXQUFXUTtRQUZuQixJQUdJQyxHQUFLRixLQUFNQztRQUNmdEwsVUFBVUMsT0FBS2xKLEtBQUt3VTtRQUNwQlQsU0FBUyxXQUFXUztNQUd0QixPQUFHUCxPQUFPOUssUUFBUTRLO2VBQ1Q7aUJBQVE5SyxLQUFNQyxPQUFLK0ssS0FBTTlLLE9BQUs4SyxLQUFNLGNBQWNGO2VBRWxEQSxLQUVYO0lBdERBLFNBQVNVLFNBQVNySCxJQUFLM0IsSUFBS3hMLElBQUs2VDtNQUMvQixJQUFJWSxPQUFVWjtNQUNkLElBQVUsSUFBRjlULElBQU9BLElBQUlDLElBQUtEO09BQUssQ0FDM0IsSUFBSS9CLEdBQUttUCxTQUFTM0IsTUFBSXpMLFlBQVcwVTtRQUNqQ3RILFNBQVMzQixNQUFJekwsS0FBSy9CO1FBQ2xCLEdBQUlBLE9BQVEsQ0FDVnlXLFdBQ0EsV0FDSztNQUlULE9BQVFBLGVBQ1Y7SUFNQSxTQUFTQyxRQUFRMUwsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTTRLLEtBQU1IO01BQ25ELElBQUlZLE9BQVVaO01BQ2QsSUFBVSxJQUFGOVQsSUFBT0EsSUFBSWlVLEtBQU1qVTtPQUFLLENBQzVCO1NBQUkvQjtXQUFLZ0wsVUFBVUMsT0FBS2xKLGFBQWFvSixVQUFVQyxPQUFLckosWUFBWTBVO1FBQ2hFekwsVUFBVUMsT0FBS2xKLEtBQUsvQjtRQUNwQixHQUFJQSxPQUFRLGdCQUVMO01BSVQsT0FBTyxTQUFTZ0wsS0FBTUMsT0FBSytLLEtBQU05SyxPQUFLOEssS0FBT1MsZ0JBQy9DO0lBNEpBLFNBQVNFLFlBQVkzTCxLQUFNQyxLQUFNQyxLQUFNQyxLQUFNQyxLQUFNNEs7TUFDakQsSUFBTSxFQUFFLGVBQWVoTCxLQUFNQyxLQUFNQyxNQUM3QixFQUFFLGVBQWVDLEtBQU1DLEtBQU00SztNQUNuQyxHQUFHbFUsSUFBSVksRUFBRztNQUNWLEdBQUdaLElBQUlZLEVBQUc7TUFDVixJQUFVLElBQUZYLEVBQUltSixTQUFVbkosT0FBUUE7T0FBSyxDQUNqQyxHQUFLaUosVUFBVUMsT0FBS2xKLFdBQWFvSixVQUFVQyxPQUFLckosU0FBVztRQUMzRCxHQUFLaUosVUFBVUMsT0FBS2xKLFdBQWFvSixVQUFVQyxPQUFLckosU0FBVztNQUU3RCxRQUNGO0lBckVBLFNBQVM2VSxRQUFRNUwsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTTRLO01BQzdDLEdBQUdBO09BQVcsQ0FDWixjQUFjaEwsS0FBTUMsU0FBUUQsS0FBTUMsS0FBTUQsS0FBTUMsS0FBTUMsS0FBTUMsS0FBTUM7UUFDaEU7TUFHRixJQUFJakwsRUFBSSwrQkFBK0JnTCxLQUFNQyxPQUFLNEs7TUFDbEQsZUFBZTdLLEtBQU1DLEtBQU00SyxLQUFNLG9CQUFzQjdWO01BQ3ZELGVBQWU2SyxLQUFNQyxLQUFNQyxLQUFNLG9CQUFzQi9LO01BRnZELElBSU0sR0FBR2dMLFVBQVVDLE9BQUs0SyxxQkFDbEIsRUFBRSxXQUFXQTtNQUNuQixJQUFXLElBQUZqVSxFQUFJbUosU0FBVW5KLEtBQUtpVSxLQUFNalU7T0FBSyxDQUVyQztTQUFJOFU7VUFBTW5SO1lBQW1Cc0YsVUFBVUMsT0FBS2xKO1lBQVk7ZUFBWWlKLFVBQVVDLE9BQUtsSixTQUFZaUosVUFBVUMsT0FBS2xKLGFBQVkyRDs7UUFDMUgsZ0JBQWdCNUQsSUFBTWtVO1FBQ3RCLGVBQWVsVSxJQUFNa1UsU0FBUTdLLEtBQU1DLEtBQU00SyxLQUFNLGNBQWNhO1FBQzdELFFBQVE3TCxLQUFNQyxPQUFLbEosSUFBRWlVLEtBQU1BLFNBQVFsVSxJQUFNa1U7UUFFekM7VUFBT2hMLFVBQVVDLE9BQUtsSjs7OztVQUFXLFlBQVlpSixLQUFNQyxPQUFLbEosSUFBRWlVLEtBQU1BLEtBQU03SyxLQUFNQyxLQUFNNEs7OztTQUFZLENBQzVGYSxNQUFNQTtVQUNOLFFBQVE3TCxLQUFNQyxPQUFLbEosSUFBRWlVLEtBQU1BLFNBQVE3SyxLQUFNQyxLQUFNNEs7UUFHakRoTCxVQUFVQyxPQUFLbEosS0FBSzhVO01BR3RCLGdCQUFnQjdMLEtBQU1DLEtBQU0rSyxLQUFNLG9CQUFzQjdWO01BQ3hELGdCQUFnQmdMLEtBQU1DLEtBQU00SyxLQUFNLG9CQUFzQjdWO01BQ3hELFFBQ0Y7SUttTEEsU0FBUzJXLGFBQWFDLElBQUtDO01BQ3pCLEdBQUlBLG1CQUFtQkQ7T0FDckI7TUFDRixJQUFXLElBQUZoVixJQUFPQSxJQUFJaVYsZ0JBQWlCalY7T0FDbkMsR0FBSWlWLFNBQVNqVixNQUFNZ1YsU0FBU2hWO1FBQzFCO01BQ0osYUFBYWdWO01BQ2IsUUFDRjtJTHBaQSxTQUFTRSxhQUFhOUgsSUFBSzNCLEtBQ3pCLEdBQUkyQixTQUFTM0IsVUFBVyxTQUN4QixRQUNGO0lYa0pBLFNBQVMwSixlQUFnQmxYLEVBQUd1QixHQUFLLE9BQU8sTUFBTUEsRUFBRztJc0IzTmpELFNBQVM0VixzQkFBc0JoWDtNQUM3QixJQUFJaVg7TUFDSixHQUFHLFFBQVFBO09BQ1gsQ0FDRSxJQUFJeEssSUFBVSxLQUFFO1FBQ2hCeUssaUJBQWdCbFg7UUFDaEJ5TSxNQUFLeUssb0JBQW9CQTtRQUN6QkEsT0FBS2xWO1FBQ0wsT0FBT3lLOztPQUVKLGtDQUMrQnpNLEVBRXRDO0lyQjRyQkEsU0FBU29YLHVCQUF3QnBYLEVBQUc0QixFQUFHYTtNQUNyQyxPQUFPLHNCQUFzQnpDLEVBQUU0QixFQUFFYSxFQUNuQztJRDdkQSxTQUFTNFUsb0JBQXFCeFg7TUFDNUIsR0FBSUEsTUFBT0EsSUFBSSxVQUFVQTtNQUN6QjtjQUFXWTtlQUNUWjtlQUNBLFdBQVdBLElBQUlNO2VBQ2YsV0FBV04sSUFBSU0sb0JBQW9CQSw0QkFDdkM7SWNyRkEsU0FBU21YLHdCQUF3QnpLO01BQy9CLElBQUlMLEtBQU9HLGlCQUFpQkU7TUFDNUIsT0FBTyxvQkFBb0IsbUJBQzdCO0lFNlJBLFNBQVMwSyxjQUFjcEssR0FBSUMsR0FBSWhHLEdBQUl4RSxHQUNqQyxPQUFPLFdBQVd3SyxHQUFHaEcsS0FBTXhFLEdBQzNCLFFBQ0Y7SVBsV0E7S0FBYztNQUFHO1NBQ2YsSUFBTSxFQUFFdEQsV0FDQyxhQUNBO1NBRVQsR0FBR29MLGFBQ0dBLGtCQUNBQTtVQUEyQixDQUMvQixJQUFJZ04sS0FBT2hOLGVBRVgrTSxPQUFPQyxRQUNQMVIsT0FBTztTQVZULElBYU0sRUFBRSx3QkFBd0J5UixNQUN0QixTQUFNMVQ7U0FDaEIsSUFBVSxJQUFGbkMsSUFBT0EsSUFBSW9FLFlBQWFwRTtVQUM5QixXQUFXLHdCQUF3Qm9FLEtBQUtwRTtTQUMxQyxPQUFPK1YsS0FsQlM7O0tBdUJPLHFCQUFFSDtJUXlLM0IsU0FBU0ssb0JBQXFCN1gsR0FBSSxPQUFPLEtBQUssd0JBQXdCQSxHQUFJO0lOa0UxRSxTQUFTK1gsY0FBYy9KLE9BQVFnQixJQUFLNEI7TUFDbEMsSUFBSS9PLElBQU1tTjtNQUNWLGdCQUFpQm5OO01BQ2pCLElBQVUsSUFBRkQsSUFBT0EsSUFBSUMsSUFBS0QsSUFBSSxnQkFDVG9OLFNBQVNwTjtNQUU1QmdQLFFBQVEvTztNQUNSK08sUUFBUS9PLE9BQ1Y7SUlqWEEsU0FBU21XLGlCQUFpQkMsVUFDeEIsUUFDRjtJTlBBLFNBQVNDLGNBQWV0UztNQUN0QixJQUFJOEUsRUFBSXBMO01BQ1IsR0FBR29MLE9BQVEsT0FBTzlFO01BRWxCLEdBQUc4RSxhQUFhQSxlQUNkLGVBQWU5RTtNQUNqQix3REFDRjtJSzBIQSxTQUFTdVMsd0JBQXdCdEw7TUFDL0IsSUFBSUwsS0FBT0csaUJBQWlCRSxRQUM1QixPQUFPTCxPQUNUO0lHakJBLFNBQVM0TCxtQkFBbUJ6VyxHQUMxQixPQUFPLFVBQ1Q7SURtYkEsU0FBUzBXLGdCQUFnQmxMLEdBQUltTDtNQUMzQkEsT0FBTyxtQkFBbUJBO01BQzFCLElBQVksV0FDQyxTQUFFQTtNQUVmLEdBQUk3RixnQkFBZ0JBO09BQWM7TUFIbEMsSUFNSVc7TUFDSixJQUFXLElBQUZ4UixJQUFPQSxJQUFJNlEsU0FBVTdRO09BQUssQ0FDakMyVyxRQUFRM1csS0FBSzBXLEtBQUsxVztRQUNsQixHQUFJMlcsUUFBUTNXO1NBQ1Y7UUFDRndSLFdBQVdBLFdBQVdtRixRQUFRM1c7TUFYaEMsSUFjSXFQLEtBQU8saUJBQWlCOUQ7TUFFNUIsR0FBSWlHLFlBQVluQztPQUNkO01BQ0YsT0FBTyxzQkFBc0I5RCxRQUFTQSxVQUFXb0wsUUFBU3BMLFFBQzVEO0lPcGVBLElBQUlxTDtJQUlKLFNBQVNDLGVBQWdCbFcsR0FDdkJBLE9BQUtpVyxrQkFDTCxPQUFPalcsQ0FDVDtJWDhMQSxTQUFTbVcsa0JBQWtCN1ksRUFBRXVCLEVBQUVpUyxFQUFFdlM7TUFDL0IsSUFBSWQsRUFBSTtNQUNSLG1CQUFtQkgsRUFBRUcsV0FBV29CLEVBQUVpUyxJQUFHdlM7TUFDckMsUUFDRjtJWXpQQSxTQUFTNlgsaUNBQWlDQyxLQUFNQyxLQUFNQyxJQUFLQyxLQUFNbFg7TUFDL0QsU0FBU2lYO09BQ1A7O01BQ0YsR0FBR2pYLFNBQVU7TUFDYixJQUFJb0osS0FBTyxXQUFXOE47TUFDdEIsR0FBR0YsT0FBT2hYLE1BQU0sc0JBQXNCK1csTUFBTztNQUc3QyxHQUFHM04sT0FBT3BKLE1BQU1pWCxnQkFBaUI7TUFKakMsSUFPSUUsTUFBUSxxQkFBcUJKLFlBQVlDLEtBQUtBLE9BQU9oWDtNQUN6RCxhQUFhbVgsTUFBTS9OO01BQ25CLFFBQ0Y7SVpzREEsU0FBU2dPLHlCQUF5QmpVO01BQ2hDLElBQUloRixFQUFJO01BQ1JBLFVBQVVnRjtNQURWLElBRUlrVSxPQUFTLHdCQUF3QmxVO01BQ3JDLEdBQUdoRixZQUFhLFlBQVlrWjtNQUM1QixRQUNGO0lUbEVBLFNBQVNDLHVCQUEwQixPQUFPNVksZ0JBQWtCO0lIZ0w1RCxTQUFTNlksZ0NBQWlDdlosRUFBR0c7TUFBSyxPQUFPLHVCQUF1QkEsRUFBRztJZ0JzSW5GLFNBQVNxWixvQkFBb0JsTSxHQUFJQztNQUMvQixJQUFJQyxJQUFNLFVBQVVEO01BQ3BCLEdBQUdDLFdBQVdGLGVBQWdCO01BRDlCLElBRU8sR0FBRSxPQUFPRSxLQUNULEdBQUUsT0FBT0E7TUFDaEIsT0FBUUMsS0FBTUMsT0FDaEI7SUsvSkEsU0FBUytMLGFBQWMzWCxFQUFHWSxHQUFLLE9BQU8saUJBQWtCWixFQUFHWSxPQUFVO0lFMUdyRSxTQUFTZ1gsbUJBQ1AsT0FBT2YsaUJBQ1Q7SXZCZ0pBLFNBQVNnQixvQkFBcUIzWixHQUFLLE9BQU8sV0FBYTtJZ0J5SnZELFNBQVM0WixjQUFjdE0sR0FBSUMsSUFDekIsT0FBTyxPQUFPLFVBQVVBLElBQzFCO0lRMVlBLFNBQVNzTSxzQkFBc0J2UyxHQUFJMFIsS0FBTXhSLEdBQUkwUixLQUFNbFg7TUFDakQsSUFBVyxJQUFGRCxJQUFPQSxJQUFJQyxJQUFLRDtPQUFLLENBQzVCLElBQU0sRUFBRSxjQUFjdUYsR0FBRzBSLE9BQU9qWCxHQUMxQixFQUFFLGNBQWN5RixHQUFHMFIsT0FBT25YO1FBQ2hDLEdBQUlELElBQUlZLEVBQUc7UUFDWCxHQUFJWixJQUFJWSxFQUFHO01BRWIsUUFDRjtJdkJ1ekJBLFNBQVNvWCxnQkFBaUIzWixHQUFLLE9BQU8sdUJBQXVCQSxFQUFHO0lJMWpCaEUsU0FBUzRaLGVBQWUvWjtNQUN0QjtPQUFPO09BQ0E7T0FDQTtPQUNBO09BQ0E7T0FDRDtPQUVHO01BQ1QsR0FBSUEsTUFBTztNQUdYQSxJQUFJLFNBQVNBO01BWGI7T0FZTSxlQUFla0UsSUFBSWxFO09BQ25COzs7WUFBWW9hLEtBQUt6WCxJQUFJd1gsTUFBTXhYLElBQUl1WCxNQUFNdlgsSUFBSXNYLE1BQU10WCxJQUFJcVg7O1FBQU1yWDs7UUFBSSxZQUFVM0MsSUFBSUE7TUFFakYsT0FBT2tCLE9BQU9LLENBQ2hCO0lXb0ZBLFNBQVM4WSxvQkFBb0IvTSxHQUFJQztNQUMvQixJQUFJQyxJQUFNLFVBQVVEO01BQ3BCLEdBQUdDLFdBQVdGLGVBQWdCO01BRDlCO09BRU8sR0FBRSxPQUFPRTtPQUNULEdBQUUsT0FBT0E7T0FDVCxHQUFFLE9BQU9BO09BQ1QsR0FBRSxPQUFPQTtNQUNoQixPQUFVQyxVQUNBQyxVQUNBQyxXQUNBQyxRQUNaO0lTelhBLFNBQVMwTSw0QkFBOEIsUUFBVTtJRmtCakQsU0FBU0MsZUFBZ0I5WixJQUFLMlE7TUFDNUIsSUFBSXJILE1BQVEzQyxNQUFNZ0s7TUFDbEJySCxPQUFLdEo7TUFDTCxJQUFXLElBQUZzQixJQUFPQSxLQUFLcVAsS0FBTXJQLElBQUtnSSxFQUFFaEk7TUFDbEMsT0FBT2dJLENBQ1Q7SVh3R0EsU0FBU3lRO01BQ1AsSUFBSXJhLEVBQUk7TUFDUkEsaUJBQWlCQTtNQUNqQkEsa0JBQWtCQTtNQUVsQixRQUNGO0lZMUpBLFNBQVNzYSwwQkFBMEJDLElBQ2pDLE9BQU9BLGNBQ1Q7SWZzVEEsU0FBU0Msc0NBQXNDQyxPQUM3QyxRQUNGO0lFK0RBLFNBQVNDLGVBQWU3UCxLQUFNQyxLQUFNRSxLQUFNQztNQUN4Q0osVUFBVUMsU0FBU0UsVUFBVUMsTUFDN0IsUUFDRjtJWXZQQSxTQUFTMFAsb0JBQW9CL1gsRUFBRTVCO01BQzdCLGdEQUNGO0lSdkdBLFNBQVM0WixxQkFBd0IsUUFBVTtJRXlHM0MsU0FBU0MsaUJBQWlCbFo7TUFDeEIsSUFBUSxJQUFFQSxTQUNKLE1BQU1zRixNQUFNcEY7TUFDbEJVO01BQ0EsSUFBUyxJQUFEWCxJQUFJQSxJQUFFQyxJQUFJRCxJQUFLVyxFQUFFWCxTQUFPRCxFQUFFQztNQUNsQyxPQUFPVyxDQUNUO0lMZ0RBLFNBQVN1WSxhQUFhamIsRUFBRXVCO01BQ3RCO09BQU0sRUFBRTtPQUNGLEdBQUM7T0FDRCxFQUFFbUs7T0FDRSxNQUFFdkw7TUFDWnVGLE9BQVF3VjtNQUNSeFYsT0FBUXdWLGtCQUNSeFYsT0FBUXdWO01BQ1J4VjtNQUNBdkYsTUFBSUg7TUFDSkcsTUFBSW9CO01BQ0osdUJBQXVCbUssR0FBRzFMLEVBQUVHLFdBQVdvQjtNQUN2QyxRQUNGO0lYcUdBLFNBQVM0WixpQkFBaUJoYixFQUFFNEIsRUFBRXFaO01BQzVCLEdBQUlyWixXQUFXNUIsUUFBUztNQUN4QixJQUFPLFVBQVNpYixTQUNULFVBQVNBO01BQ2hCLHNCQUF1QmpiLEVBQUc0QixNQUFPMEw7TUFDakMsc0JBQXVCdE4sRUFBRzRCLE1BQU8yTDtNQUNqQyxRQUNGO0lBWUEsU0FBUzJOLGtCQUFrQmxiLEVBQUU0QixFQUFFcVosS0FDN0IsT0FBTyxpQkFBaUJqYixFQUFFNEIsRUFBRXFaLElBQzlCO0lBa0NBLFNBQVNFLGlCQUFpQm5iLEVBQUU0QixFQUFFd1o7TUFDNUIsR0FBSXhaLFdBQVc1QixRQUFTO01BQ3hCLElBQUkyQixFQUFJLG9CQUFvQnlaO01BQzVCLElBQVUsSUFBRnZZLElBQU9BLE1BQU9BLElBQUssc0JBQ0Y3QyxFQUFHNEIsUUFBUWlCLEVBQUdsQixFQUFFa0I7TUFFekMsUUFDRjtJa0IzUEEsU0FBU3dZLGlCQUFpQnhiO01BQ3hCLElBQUl1QixFQUFJLG9CQUFvQnZCO01BQzVCLE9BQU8scUJBQXFCdUIsS0FBTUEsS0FBTUEsS0FBTUEsS0FBTUEsS0FBTUEsS0FBTUEsS0FBTUEsTUFDeEU7SWxCMGNBLFNBQVNrYSxnQkFBZ0J0YixFQUFHNEIsRUFBRzFCLEVBQUd1QztNQUNoQyxHQUFJdkM7T0FBTyxHQUNMMEIsV0FBVzFCLEtBQUtGLE9BQVFBLFlBQTBCRSxLQUFLRjtRQUFjLEdBQ25FeUM7U0FBUSxDQUNWekMsU0FDQUE7O1NBQ0ssQ0FDTEEsTUFBTSxnQkFBaUJFLEVBQUcsb0JBQW9CdUMsSUFDOUN6QyxNQUFPRSxLQUFLRjs7UUFFVCxDQUNMLEdBQUlBLFNBQXNCLDRCQUE0QkE7U0FDdEQsSUFBS0UsS0FBSzBCLEVBQUdBLElBQUkxQixFQUFHMEIsSUFBSzVCLElBQUk0QixLQUFLYTtNQUd0QyxRQUNGO0lBSUEsSUFBSThZLGlCQUFtQkQ7SWN6bEJ2QixTQUFTRSxnQkFBaUIsUUFBUTtJV2NsQyxTQUFTQyxlQUFlemI7TUFDdEJBLElBQUksdUJBQXVCQTtNQUMzQixJQUFNLEVBQUVBLGFBQ0YsTUFBTWlILE1BQU0vRztNQUNsQixJQUFXLElBQUYwQixJQUFPQSxJQUFJMUIsRUFBRzBCO09BQ3JCRCxFQUFFQzs7UUFBTSxpQkFBaUJBLEtBQU0saUJBQWlCQTs7Ozs7TUFDbEQsT0FBT0QsQ0FDVDtJQUlBLFNBQVMrWixnQkFBZ0JDLElBQUtDLFlBQWFDO01BQ3pDO09BQWU7T0FDSTtPQUNEO09BQ0Q7T0FDQTtPQUNHO09BQ0E7T0FDUDtPQUNHO09BQ0E7T0FDRjtPQUNBO01BRWQsS0FBS0Y7T0FBaUIsQ0FDcEJBLGVBQWtCLGVBQWdCQSxJQUFJVTtRQUN0Q1Ysa0JBQWtCLGVBQWdCQSxJQUFJVztRQUN0Q1gsZ0JBQWtCLGVBQWdCQSxJQUFJYztRQUN0Q2QsZ0JBQWtCLGVBQWdCQSxJQUFJYTtRQUN0Q2Isa0JBQWtCLGVBQWdCQSxJQUFJWTtNQWxCeEMsSUFxQkk5WixFQUFTLE1BQUVtWixZQUVKLE9BQUUsb0JBQW9CQyxPQUFPQztNQUV4QyxHQUFJWTtPQUFZLENBRWRiLE9BQU9LLGdCQUFnQkwsT0FBT0csaUJBQWlCSCxPQUFPSTtRQUN0REosT0FBT007O09BQ0YsVUFFSU87TUFFWDtPQUFRLENBRU4sSUFBSUMsS0FBT2hCLGFBQWFlO1FBQ3hCLEdBQUlDLFNBQVUsU0FBUUE7UUFEdEIsSUFHSUMsUUFBVWpCLGdCQUFnQmU7UUFDOUIsR0FBSUU7U0FBYyxDQUNoQmYsT0FBT0ssZ0JBQWdCTCxPQUFPSTtVQUM5QkosT0FBT00sbUJBQW1CUztRQUc1QixHQUFJZixPQUFPSSxpQkFBaUJKLE9BQU9FO1NBQWdCLEdBQzdDRixPQUFPTyxzQkFDVCxTQUFRTSxlQUVSamE7O1NBQ0MsQ0FFSEEsSUFBSWtCLE9BQU9rWSxPQUFPSSxlQUNsQkosT0FBT0k7UUFHVCxHQUFJTixjQUFjZ0IsT0FBT2xhLE1BQU1pYTtTQUM3QkEsUUFBUWYsY0FBY2dCLE9BQU9sYTs7U0FFN0JpYSxRQUFRZixnQkFBZ0JlO1FBRTFCLEdBQUlBO1NBQVcsQ0FDYmIsT0FBT0ksZ0JBQWdCSixPQUFPSztVQUM5QixHQUFJTCxPQUFPTTtXQUNUOztXQUVBLE9BQU9OLE9BQU9NOztTQUNiLEdBSUMxWixTQUFVb1osT0FBT08scUJBRzNCO0lsQm1GQSxTQUFTUyxZQUFZaE47TUFDbkIsR0FBR3ZRLHNCQUFzQkE7T0FBMEIsT0FDMUM7TUFFVCxzQkFDRjtJRFVBLFNBQVN3ZCxxQkFBc0I5WDtNQUM3QixJQUFJSixLQUFPLGtCQUFrQkksTUFDN0IsT0FBTyxtQkFBbUJKLFVBQzVCO0lrQmhLQSxTQUFTbVk7TUFDUCxnREFDRjtJRTNCQSxTQUFTQyxlQUFnQnJiLEVBQUdDLEVBQUdDO01BQzdCLElBQUlpWSxPQUFTN1MsTUFBTXBGO01BQ25CaVk7TUFDQSxRQUFXLEtBQU8sR0FBRWxZLE1BQUswRixNQUFNekYsSUFBS3lGLEtBQUtGLEtBQU0sR0FDMUNFLE1BQUkzRixFQUFFeUY7TUFFWCxPQUFPMFMsRUFDVDtJMUJ1ZkEsU0FBU21ELGlCQUFpQjlWLEdBQUlFO01BQzVCLEdBQUdGLE9BQU9FLEdBQUk7TUFDYkYsWUFBYSw2QkFBNkJBO01BQzFDRSxZQUFhLDZCQUE2QkE7TUFDM0MsT0FBUUYsUUFBUUUsUUFDbEI7SVdoWEEsU0FBUzZWLGlCQUNQLElBQUlsZCxFQUFJLG9CQUNSLE9BQU9BLE9BQ1Q7SWF4SkEsU0FBU21kLDRCQUErQixRQUFVO0loQnFQbEQ7S0FBSUM7TUFBVzlkOztPQUNBQTs7T0FDQUE7Ozs7O0lBWGYsU0FBUytkLCtCQUFrQyxPQUFPRCx1QkFBNkI7SUp3Qi9FLFNBQVNFLGdCQUFpQnpkLEdBQUssT0FBTyxVQUFVQSxFQUFJO0l1QmhRcEQsSUFBSTBkO0lBNENKLFNBQVNDLGdCQUFnQjNkLEVBQUcrQjtNQUMxQixPQUFHL0IsRUFBRTBkLHVCQUF1QjNiOztjQUFLK0k7O2NBQWE5SyxFQUFFMGQsdUJBQXVCM2I7Ozs7Z0JBSXpFO0lBK0JBLElBQUk2YixvQkFBc0JEO0lSUDFCLFNBQVNFLG9CQUFvQjVjO01BQzNCQSxLQUFLQTtNQUNMQSxJQUFJLFNBQVVBO01BQ2RBLEtBQUtBO01BQ0xBLElBQUksU0FBVUE7TUFDZEEsS0FBS0E7TUFDTCxPQUFPQSxDQUNUO0lSZ1NBLFNBQVM2YyxrQkFBa0JDO01BQ3pCO09BQU0sRUFBRTtPQUNGLEVBQUUsc0JBQXNCLHdCQUF3QkE7TUFDdEQsVUFBVXZLLEVBQUVyVCxZQUNkO0ljelJBLFNBQVM2ZCxpQkFBaUI3ZCxFQUFHNEIsRUFBR2tjLElBQUtDO01BQ25DO09BQVMsQ0FDUCxJQUFJbEgsSUFBTSxhQUFhalY7UUFBSUE7UUFDM0IsR0FBSWlWLFlBQWE7UUFEakIsSUFFSUQsSUFBTSxhQUFhaFY7UUFBSUE7UUFDM0IsR0FBSWdWO1NBQ0ZrSCxJQUFLakgsV0FBV2tIOztTQUVoQkQsSUFBS2pILFdBQVdpSCxJQUFLbEgsU0FFM0I7SUFFQSxTQUFTb0gsaUJBQWlCaGUsRUFBRzRCLEVBQUdrYztNQUM5QjtPQUFTLENBQ1AsSUFBSWpILElBQU0sYUFBYWpWO1FBQUlBO1FBQzNCLEdBQUlpVixZQUFhO1FBRGpCLElBRUlELElBQU0sYUFBYWhWO1FBQUlBO1FBQzNCLEdBQUlnVixZQUNGa0gsSUFBS2pILG9CQUVMaUgsSUFBS2pILFdBQVdpSCxJQUFLbEgsU0FFM0I7SUFFQSxTQUFTcUgsb0JBQW9CdEMsSUFBS0MsWUFBYUM7TUFDN0M7T0FBZTtPQUNJO09BQ0Q7T0FDRDtPQUNBO09BQ0c7T0FDQTtPQUNSO09BQ0M7T0FDRztPQUNBO09BQ0Y7T0FDQTtPQUNJO09BQ0c7T0FDQTtPQUNGO09BQ0E7T0FDTjtNQUViLEtBQUtGO09BQWlCLENBQ3BCQSxlQUFrQixlQUFnQkEsSUFBSVU7UUFDdENWLGtCQUFrQixlQUFnQkEsSUFBSVc7UUFDdENYLGdCQUFrQixlQUFnQkEsSUFBSWM7UUFDdENkLGdCQUFrQixlQUFnQkEsSUFBSWE7UUFDdENiLGtCQUFrQixlQUFnQkEsSUFBSVk7TUFFeEMsS0FBS1o7T0FBc0IsQ0FDekJBLG9CQUF1QixlQUFnQkEsSUFBSXdDO1FBQzNDeEMsdUJBQXVCLGVBQWdCQSxJQUFJeUM7UUFDM0N6QyxxQkFBdUIsZUFBZ0JBLElBQUk0QztRQUMzQzVDLHFCQUF1QixlQUFnQkEsSUFBSTJDO1FBQzNDM0MsdUJBQXVCLGVBQWdCQSxJQUFJMEM7TUFFN0MsR0FBSTFDLGdCQUFnQjNaO09BQU0yWixlQUFlLHVCQUF1QkEsSUFBSTZDO01BbENwRSxJQW9DSS9iLEVBQVMsTUFBRW1aLFlBRUosT0FBRSxvQkFBb0JDLE9BQU9DO01BRXhDLEdBQUlZO09BQVksQ0FFZGIsT0FBT0ssZ0JBQWdCTCxPQUFPRyxpQkFBaUJILE9BQU9JO1FBQ3RESixPQUFPTTs7T0FDRixVQUVJTztNQUVYO09BQVEsQ0FFTixJQUFJQyxLQUFPaEIsYUFBYWU7UUFDeEIsR0FBSUM7U0FBVSxDQUNaLElBQUk4QixPQUFTOUMsa0JBQWtCZTtVQUMvQixpQkFBaUJmLGFBQWM4QyxPQUFRNUMsT0FBT3FDO1VBQzlDLFNBQVF2QjtRQUpWLElBT0lDLFFBQVVqQixnQkFBZ0JlO1FBQzlCLEdBQUlFO1NBQWMsQ0FDaEIsSUFBSTZCLE9BQVM5QyxxQkFBcUJlO1VBQ2xDLGlCQUFpQmYsYUFBYzhDLE9BQVE1QyxPQUFPcUM7VUFDOUNyQyxPQUFPSyxnQkFBZ0JMLE9BQU9JO1VBQzlCSixPQUFPTSxtQkFBbUJTO1FBRzVCLEdBQUlmLE9BQU9JLGlCQUFpQkosT0FBT0U7U0FBZ0IsR0FDN0NGLE9BQU9PLHNCQUNULFNBQVFNLGVBRVJqYTs7U0FDQyxDQUVIQSxJQUFJa0IsT0FBT2tZLE9BQU9JLGVBQ2xCSixPQUFPSTtRQXZCVCxJQTBCSXlDLE9BQVNoQztRQUNiLEdBQUlmLGNBQWNnQixPQUFPbGEsTUFBTWlhO1NBQzdCQSxRQUFRZixjQUFjZ0IsT0FBT2xhOztTQUU3QmlhLFFBQVFmLGdCQUFnQmU7UUFFMUIsR0FBSUE7U0FBVyxDQUNiYixPQUFPSSxnQkFBZ0JKLE9BQU9LO1VBQzlCLEdBQUlMLE9BQU9NO1dBQ1Q7O1dBRUEsT0FBT04sT0FBT007O1NBQ2IsQ0FFSCxJQUFjLFVBQUVSLGtCQUFrQitDLFFBQVNEO1VBQzNDLEdBQUk5QyxtQkFBbUJnRCxZQUFZbGMsTUFBTWljO1dBQ3ZDRCxTQUFTOUMsbUJBQW1CZ0QsWUFBWWxjOztXQUV4Q2djLFNBQVM5QyxxQkFBcUIrQztVQUNoQyxHQUFJRDtXQUNGO2FBQ0Q5QyxhQUFjOEMsT0FBUTVDLE9BQU9xQyxTQUFVckMsT0FBT0k7VUFJL0MsR0FBSXhaLFNBQVVvWixPQUFPTyxzQkFHM0I7SVZxT0EsU0FBU3dDLG9CQUFvQnpSLEdBQUlDLEdBQUl4SztNQUNuQyxJQUFJeUssSUFBTSxVQUFVRDtNQUNwQixHQUFHQyxXQUFXRixlQUFnQjtNQUQ5QixJQUVJdkssRUFBSSxvQkFBb0JBO01BQzVCLElBQVUsSUFBRmhCLElBQU9BLE1BQU9BLElBQUssT0FBT3lMLE1BQUl6TCxFQUFHZ0IsTUFBSWhCO01BQzdDLFFBQ0Y7SVB4U0EsU0FBU2lkLHlCQUF5QmxkLEdBQ2hDLE9BQU9pVyxvQkFDVDtJWXFFQSxTQUFTa0gsZUFBZ0JqZixFQUFHdUIsR0FBSyxVQUFTLGlCQUFpQnZCLEVBQUV1QixjQUFnQjtJaEI0QjdFLFNBQVMyZCxpQkFBa0JsZixHQUFLLE9BQU8sV0FBV0EsRUFBSTtJU2lFdEQsU0FBU21mLGNBQWVuUztNQUN0QixJQUFJTCxLQUFPRyxpQkFBaUJFO01BQzVCLEtBQUtMLFlBQWE7TUFDbEIsS0FBSUEsZUFBZUEsa0JBQW1CO01BQ3RDO1FBQUdBOztRQUNHak0scUJBQXFCaU07O1FBQ3JCak0scUJBQXFCaU07T0FBaUIsQ0FDMUMsSUFBSXlTLE9BQVMxZSxxQkFBcUJpTTtRQUNsQyxPQUFPeVM7aUJBQ0MsT0FBT3BTLE9BQU9MLGFBQWEsY0FDMUIsT0FBT0E7TUFHbEJBO01BQ0EsUUFDRjtJQWlFQSxTQUFTMFMsb0JBQW9CclMsT0FBT2hGO01BQ2xDLGNBQWNnRjtNQUNkRixpQkFBaUJFLGlCQUFpQixvQkFBb0JoRjtNQUN0RCxRQUNGO0lINURBLFNBQVNzWCxpQkFBaUJ0VSxLQUFLRztNQUM3QixPQUFPLFlBQVlILE9BQU9BLGlCQUFpQkcsT0FBT0EsaUJBQ3BEO0lJN1ZBLFNBQVNvVSxZQUFZbkgsVUFDbkIsUUFDRjtJRUdBLFNBQVNvSCxZQUFZelYsRUFBRTlILEdBQUssT0FBTzhILEVBQUU5SCxFQUFJO0lIZ2J6QyxTQUFTd2QscUJBQXFCN2MsRUFBRUcsR0FBSyxRQUFTO0lDbGM5QyxTQUFTMmMscUJBQXNCLFFBQVE7SWFxQ3ZDLFNBQVNDLGNBQWMzZixFQUFHK0I7TUFDeEIsR0FBR0EsU0FBUzJiLHVCQUF1QjNiLEtBQUsvQjtPQUN0QztNQUNGLE9BQVFBLEVBQUUwZCx1QkFBdUIzYixPQUFNK0k7O2VBQWE5SyxFQUFFMGQsdUJBQXVCM2IsRUFDL0U7SUE0Q0EsSUFBSTZkLGtCQUFvQkQ7SUpQeEIsU0FBU0UsZ0NBQWdDOUcsS0FBTUMsS0FBTUMsSUFBS0MsS0FBTWxYO01BQzlELFNBQVNpWDtPQUNQOztNQUNGLEdBQUdqWCxTQUFVO01BQ2IsSUFBSW9KLEtBQU8sV0FBVzhOO01BQ3RCLEdBQUdGLE9BQU9oWCxNQUFNLHFCQUFxQitXLE1BQU87TUFHNUMsR0FBRzNOLE9BQU9wSixNQUFNaVgsZ0JBQWlCO01BSmpDLElBT0lFLE1BQVEsb0JBQW9CSixZQUFZQyxLQUFLQSxPQUFPaFg7TUFDeEQsYUFBYW1YLE1BQU0vTjtNQUNuQixRQUNGO0loQmxEQSxTQUFTMFUsY0FBZTtJTTVCeEIsU0FBU0MsZUFBZXZXLFdBQ2Y5SSxxQkFBcUI4SSxJQUM1QixRQUNGO0lBMEpBLFNBQVN3VyxzQkFBdUJoVDtNQUM5QixJQUFJTCxLQUFPRyxpQkFBaUJFO01BQzVCLGNBQWNBO01BQ2RMO01BQ0E7TUFDQSxlQUFlQTtNQUNmLFFBQ0Y7SUd0RUEsU0FBU3NULDJCQUEyQkMsSUFBS0M7TUFFdkMsS0FBSUQsZ0JBQWdCQyxTQUFTRDtPQUFlQTs7WUFBbUJ6Z0I7TUFDL0QsT0FBT3lnQixHQUNUO0lSMEpBLFNBQVNFLGdCQUFnQkMsT0FDdkIsUUFDRjtJRWxLQSxTQUFTQyxjQUFjblIsSUFBSzNCLEtBQzFCLEdBQUcyQixTQUFTM0IsVUFBVyxTQUN2QixRQUNGO0lGZ0xBLFNBQVMrUywyQkFBNkIsUUFBUztJUTdRL0MsU0FBU0MsWUFBWXpXLEVBQUU5SCxFQUFFYyxHQUFLZ0gsRUFBRTlILEtBQUdjLEVBQUUsUUFBUTtJVXlEN0MsU0FBUzBkLGVBQWdCQyxNQUFPQztNQUM5QixHQUFLQSxhQUFlQSxTQUFTRCxpQkFBbUI7TUFDaEQsT0FBT0EsTUFBTUMsVUFDZjtJdEIyTEEsU0FBU0MsZ0JBQWdCNWdCLEdBQUssT0FBTyxVQUFVQSxFQUFJO0lVcE5uRCxTQUFTNmdCLDRCQUE0QjdRLE1BQVEsUUFBVTtJTmdSdkQsU0FBUzhRO01BQ1AsK0RBQ0Y7SVQzR0EsU0FBU0MsZUFBZ0IvZ0IsRUFBR3VCLEdBQUssT0FBTyxNQUFNQSxFQUFHO0ljcUZqRCxTQUFTeWYsbUJBQW1CaFUsT0FBT2hGO01BQ2pDLElBQUkyRSxLQUFPRyxpQkFBaUJFO01BQzVCLEdBQUlMLGVBQWV4SyxLQUFNO01BQ3pCd0ssY0FBYyxvQkFBb0IzRTtNQUNsQyxRQUNGO0lkcEVBLFNBQVNpWixzQkFBdUJqaEIsRUFBR0csR0FBSyxPQUFPLGFBQWFBLEVBQUc7SXFCTi9ELFNBQVMrZ0IsY0FBZWxoQixFQUFHdUIsR0FBSyxVQUFTLGlCQUFpQnZCLEVBQUV1QixjQUFnQjtJWko1RSxTQUFTNGYsMEJBQTZCLFNBQVc7SVEyQ2pELFNBQVNDLDJCQUEyQm5mO01BQ2xDO1FBQ0UsSUFBUSxJQUFFdU4saUJBQ0QsU0FBTXBJLE1BQU1wRjtRQUNyQm1FLFVBQVV6RztRQUNWLElBQVcsSUFBRnFDLElBQU9BLElBQUlDLElBQUtELElBQUtvRSxLQUFLcEUsU0FBT3lOLFVBQVV6TjtRQUNwRCxPQUFPLGNBQWNFLEVBQUVrRSxLQUxsQixDQU9UO0lBNU1BLFNBQVNrYixhQUNQLFFBQ0Y7SUR5UUEsU0FBU0MsWUFBWWhVLEdBQUl2TDtNQUN2QixHQUFJQSxTQUFTQSxLQUFLdUwsZUFDaEI7TUFDRixPQUFPQSxRQUFRdkwsRUFDakI7SUFJQSxTQUFTd2YsY0FBY2pVLElBQ3JCLE9BQU8sWUFBWUEsS0FDckI7SVJuVkEsU0FBU2tVLGVBQWdCN2U7TUFDdkI7T0FBTSxNQUFNb00sS0FBTXBNO09BQ1IsTUFBRTtPQUNLLGFBQUUsSUFBS29NLEtBQUs7T0FDckIsSUFBRSxZQUFZMFMsUUFBUUM7T0FDdEIsUUFBTTNTLEtBQUs7T0FDWCxRQUFNQSxLQUFLO09BQ0c7UUFBRSxTQUFTLHdCQUF5QjtNQUMxRDtjQUFnQjtjQUFnQjtjQUFnQjtjQUNuQztjQUFhO2NBQWM7Y0FDM0I7Y0FBWTRTO2NBQ1gsd0JBQXdCRyxzQkFDeEM7SVMwS0EsU0FBU0Msa0JBQWtCaFksRUFBRzlILEVBQUdrRTtNQUMvQixPQUFPLEVBQUUsd0JBQXdCbEUsVUFBVThILEVBQUcsbUJBQW1CNUQsTUFDbkU7SVduTEEsU0FBUzZiLGlCQUFrQjloQjtNQUN6QixHQUFJQSxNQUFPO01BQ1gsSUFBSUY7TUFDSkEsV0FBVzBkLHVCQUF1QnhkO01BQ2xDLE9BQU9GLENBQ1Q7SUFvREEsSUFBSWlpQixpQkFBbUJEO0kzQnV3QnZCLFNBQVNFLHVCQUF1Qi9oQixHQUFLLE9BQU8sdUJBQXVCQSxFQUFHO0lPcnpCdEUsU0FBU2dpQixZQUFZQztNQUNuQjtPQUFNLEVBQUUsSUFBS3JULEtBQUtxVCxhQUFXQSxNQUFNQSxNQUFNQSxNQUFNQSxNQUFNQTtPQUMvQyxFQUFFLFdBQVcxYztPQUNYLElBQUUsZUFBZS9DO01BQ3pCLFVBQWVBLEVBQUUwZixJQUNuQjtJU1BBLFNBQVNDLGdCQUFnQmphO01BQ3ZCLElBQUl6RjtNQUNKLE1BQU15RixPQUFPQTtPQUFjLENBQ3pCQSxNQUFNLG9CQUFvQmxHLEtBQU1rRyxjQUNoQ3pGO01BRUYsT0FBT3lGLEdBQ1Q7SWhCNE9BLFNBQVNrYSxpQkFBaUJwaUIsRUFBRTRCO01BQzFCLEdBQUlBLFdBQVc1QixRQUFTO01BQ3hCLElBQUkyQixNQUFRc0Y7TUFDWixJQUFVLElBQUZwRSxJQUFPQSxNQUFPQSxJQUFJLE1BQ2xCQSxLQUFLLHNCQUF1QjdDLEVBQUc0QixJQUFJaUI7TUFFM0MsT0FBTyxvQkFBb0JsQixFQUM3QjtJMkIxUEEsU0FBUzBnQixjQUFjeGlCLEVBQUcrQixFQUFHZ0I7TUFDM0IsR0FBR2hCLFNBQVMyYix1QkFBdUIzYixLQUFLL0I7T0FDdEM7TUFDRkEsRUFBRTBkLHVCQUF1QjNiLEtBQUtnQjtNQUM5QixRQUNGO0lyQm1MQSxTQUFTMGYsZ0JBQWdCdGQ7TUFDdkIsSUFBUyxLQUFFLGtCQUFrQkEsTUFDdEIsR0FBRSxtQkFBbUJKO01BQzVCLEdBQUcrRCxRQUFTLHdCQUF3Qix1QkFBdUIzRDtNQUMzRCxRQUNGO0lOdEJBLFNBQVN1ZDtNQUNQLDRDQUNGO0lBc0NBLFNBQVNDLGtCQUFrQnhpQixFQUFFNEI7TUFDM0IsR0FBSUEsV0FBVyxzQkFBc0I1QixPQUFRO01BQzdDO09BQU8sR0FBRSx1QkFBd0JBLEVBQUc0QjtPQUM3QixHQUFFLHVCQUF3QjVCLEVBQUc0QjtPQUM3QixHQUFFLHVCQUF3QjVCLEVBQUc0QjtPQUM3QixHQUFFLHVCQUF3QjVCLEVBQUc0QjtNQUNwQyxPQUFRNkwsV0FBV0QsV0FBV0QsVUFBVUQsRUFDMUM7SUlzQkEsU0FBU21WLGlCQUFrQjVpQixFQUFHdUIsR0FBSyxPQUFPLFdBQVd2QixFQUFHdUIsRUFBSTtJWXZGNUQsU0FBU3NoQixhQUFhNWdCLEVBQUc4SCxFQUFHNUQ7TUFBUSxPQUFPLFFBQVE0RCxFQUFHLG1CQUFtQjVELE1BQVE7SVJ5RGpGLFNBQVMyYyw0QkFBK0IseUJBQTBCO0ltQnBJbEUsU0FBU0Msb0JBQW9CL2lCLEVBQUcrQixHQUM5QixPQUFPLGNBQWMvQixFQUFHK0IsSUFDMUI7SVI4QkEsU0FBU2loQix3QkFBd0IvaEIsRUFBR2Q7TUFDbEMsSUFBUSxJQUFFQSxTQUFVNEIsRUFBR3lSO01BQ3ZCLElBQUt6UixNQUFPQSxTQUFTQyxJQUFLRDtPQUFRLENBQ2hDeVIsSUFBSXJULEVBQUU0QixLQUNENUIsRUFBRTRCLGNBQ0Y1QixFQUFFNEIsZUFDRjVCLEVBQUU0QjtRQUNQZCxJQUFJLGtCQUFrQkEsRUFBR3VTO01BRTNCQTtNQUNBLE9BQVF4UjtlQUNBd1IsSUFBS3JULEVBQUU0QjtlQUNQeVIsS0FBS3JULEVBQUU0QjtlQUNQeVIsS0FBS3JULEVBQUU0QixHQUNiZCxJQUFJLGtCQUFrQkEsRUFBR3VTOztNQUczQnZTLEtBQUtlO01BQ0wsT0FBT2YsQ0FDVDtJQTNDQSxTQUFTZ2lCLHNCQUFzQmhpQixFQUFHZDtNQUNoQyxJQUFRLElBQUVBLFNBQVU0QixFQUFHeVI7TUFDdkIsSUFBS3pSLE1BQU9BLFNBQVNDLElBQUtEO09BQVEsQ0FDaEN5Ujs7UUFBSSxhQUFhelI7O1FBQ1osYUFBYUE7Ozs7UUFDYixhQUFhQTs7OztRQUNiLGFBQWFBOzs7UUFDbEJkLElBQUksa0JBQWtCQSxFQUFHdVM7TUFFM0JBO01BQ0EsT0FBUXhSO2VBQ0F3UixJQUFLLGFBQWF6UjtlQUNsQnlSLEtBQUssYUFBYXpSO2VBRXhCeVIsS0FBSyxhQUFhelIsR0FDbEJkLElBQUksa0JBQWtCQSxFQUFHdVM7O01BRzNCdlMsS0FBS2U7TUFDTCxPQUFPZixDQUNUO0luQm9yQkEsU0FBU2lpQixzQkFBc0IvaUI7TUFDN0IsT0FBUUE7Z0JBRU4sNkJBQTZCQSxVQUU3QixPQUFPQTtlQUVQLE9BQU9BO1NBRVg7SW1CaHFCQSxTQUFTZ2pCLG9CQUFvQmxpQixFQUFHOEI7TUFDOUIsSUFBSUssUUFBVSxzQkFBc0JMO01BQ3BDLGNBQVVLO2VBQ0Qsc0JBQXNCbkMsRUFBR21DO2VBRXpCLHdCQUF3Qm5DLEVBQUdtQyxRQUN0QztJbkI0WEEsU0FBU2dnQixvQkFBb0I5YixHQUFJRTtNQUM5QkYsWUFBYSw2QkFBNkJBO01BQzFDRSxZQUFhLDZCQUE2QkE7TUFDM0MsT0FBUUYsT0FBT0UsUUFDakI7SUluUEEsU0FBUzZiLGdCQUFnQnJqQixHQUN2QixXQUFXLGVBQWVBLEVBQzVCO0lPRUEsU0FBU3NqQixrQkFBa0JDO01BQ3pCLElBQUlwakIsRUFBSTtNQUNSO01BQ0EsaUJBQWlCb2pCLFNBQVNwakIsV0FBV29qQjtNQUNyQyxJQUFVLElBQUZ4aEIsSUFBT0EsSUFBSXdoQixVQUFXeGhCO09BQzVCLGlCQUFpQndoQixHQUFHeGhCLE1BQU01QixXQUFXb2pCLEdBQUd4aEI7TUFDMUMsaUJBQWlCd2hCLFNBQVNwakIsV0FBV29qQjtNQUNyQztNQUNBLFFBQ0Y7SUc1VEEsU0FBU0MscUJBQ1AsMENBQ0Y7SWJ1Q0EsU0FBU0M7TUFDUCxvQkFBb0IvaUIsNkJBQ3RCO0lZcU9BLFNBQVNnakIsa0JBQW1CMVc7TUFDMUIsSUFBUyxLQUFFRixpQkFBaUJFLFFBQ25CLEtBQUVMO01BQ1gsTUFBUUEsbUJBQW9CO09BQWUsQ0FDekMsSUFBSXRNLEVBQUkscUJBQXFCc00sTUFDN0IsR0FBSXRNLE9BQVE7TUFKZDtPQU1NLEVBQUVzTTtPQUNGO1FBQUUsY0FBYzVDOzs7O1FBQ2QsY0FBY0E7Ozs7UUFDZCxjQUFjQTs7OztRQUNkLGNBQWNBO01BQ3RCNEM7TUFDQSxPQUFPdk0sQ0FDVDtJRnlNQSxTQUFTdWpCO01BQ1AscURBQ0Y7SVc1V0EsU0FBU0MseUJBQXlCN1osR0FBSyxRQUFVO0labEVqRCxTQUFTOFosY0FBYzFVLElBQUszQixLQUMxQixPQUFPMkIsU0FBUzNCLElBQ2xCO0lnQnJCQSxTQUFTc1csZ0JBQWdCOUosR0FBSXpTLEdBQUkwUyxHQUFJeFMsR0FBSXpGO01BQ3ZDLEdBQUl5RixNQUFNRjtPQUFJLElBQ0QsSUFBRnZFLElBQU9BLEtBQUtoQixJQUFLZ0IsSUFBS2lYLEdBQUd4UyxLQUFLekUsS0FBS2dYLEdBQUd6UyxLQUFLdkU7O09BQy9DLElBQ00sSUFBRkEsRUFBSWhCLElBQUtnQixPQUFRQSxJQUFLaVgsR0FBR3hTLEtBQUt6RSxLQUFLZ1gsR0FBR3pTLEtBQUt2RTtNQUV0RCxRQUNGO0l0QmdiQSxTQUFTK2dCLHFCQUFxQjVqQjtNQUM1QixJQUFJa0k7TUFDSmxJLElBQUksdUJBQXVCQTtNQUMzQmtJLFFBQU9sSTtNQUNQLEdBQUtBLGdCQUFrQmtJLFFBQVFBLElBQU0sT0FBT0E7TUFDNUNsSSxJQUFJO01BQ0prSSxRQUFPbEk7TUFDUCxHQUFNQSxnQkFBa0JrSSxRQUFRQSxPQUFTLG1CQUFtQmxJLEdBQUksT0FBT2tJO01BTnZFLElBT0lRLEVBQUksK0RBQStEMUk7TUFFdkUsR0FBRzBJO09BQUUsQ0FDSDtTQUFPLEdBQUU7U0FDSSxTQUFFLFNBQVNBLE9BQU9BLE9BQU9tYjtTQUN6QixVQUFHbmIsZ0JBQVltYjtRQUM1QjNiLE1BQU00YixXQUFXLFdBQVlFO1FBQzdCLE9BQU85YjtNQUVULEdBQUcseUJBQXlCbEksR0FBSSxPQUFPZ1E7TUFDdkMsR0FBRyx1QkFBdUJoUSxHQUFJLFNBQVFnUTtNQUN0QyxnQ0FDRjtJRXRWQSxTQUFTaVU7TUFDUCxPQUFPLHVCQUF1QmhmLGlCQUNoQztJRTZEQSxTQUFTaWYsNEJBQStCLFFBQVU7SVFwRWxELFNBQVNDLHNCQUFzQmprQjtNQUM3QixJQUFJeUIsS0FDSixLQUFNekIsUUFBU0EsSUFBSUEsS0FBTSxPQUNoQkEsTUFFVCxPQUFPeUIsQ0FDVDtJSndSQTtLQUE0QjtLQWFSO01BQUU7U0FDcEIsU0FBUzJpQixTQUFZL2tCLGVBQWlCO1NBQ3RDK2tCOzs7Ozs7OzttQkFFa0JyVCxLQUFNc1Q7WUFDcEIsSUFBVyxJQUFGM2lCLEVBQUlxUCxTQUFTclAsT0FBT0E7YUFDM0JyQyxXQUFXQSxvQkFBcUJnbEIsU0FBUzNpQixRQUZ2Qzs7bUJBSWFpRyxJQUFLb0osS0FBTXNUO1lBQzVCLElBQUkxYyxJQUFNQTtZQUNWLElBQVcsSUFBRmpHLEVBQUlxUCxTQUFTclAsT0FBT0E7YUFDM0JyQyxXQUFXc0ksU0FBVTBjLFNBQVMzaUIsUUFIekI7O21CQUtZcVAsS0FBTXJMLEtBQU0yZTtZQUMvQmhsQixXQUFXQSxvQkFBb0JxRztZQUMvQixJQUFXLElBQUZoRSxFQUFJcVAsU0FBU3JQLE9BQU9BO2FBQzNCckMsV0FBV0Esb0JBQXFCZ2xCLFNBQVMzaUIsUUFIbEM7O21CQUtZWjtZQUNyQixHQUFJQTthQUFtQix1QkFBOENBOzthQUNoRSxHQUFJQTtjQUFvQix3QkFBZ0RBOztjQUN4RSx3QkFBZ0RBLE9BSDFDO3lCQUtLLE9BQU96QixjQUFyQjs7O1lBRUZBLGlCQUFpQkE7WUFDakJBO1lBQ0E7WUFDQSxjQUFnQkE7WUFDaEIsY0FBZ0JBO1lBQ2hCLGNBQWdCQTtZQUNoQixjQUFnQkE7WUFDaEIsT0FBT0EsVUFSQTtTQVdYLGdCQUFpQnFELEVBQUc0aEI7V0FDbEJBLFFBQVEsc0JBQXNCQTtXQUU5QjtZQUFlLFdBQUc7WUFDTCxTQUFJO1dBR2pCLEdBQUlFO1lBQ0Y7O1dBTEY7WUFPVyxXQUFNSjtZQUNQO1lBQ1csaUJBQUVHLFdBQWF6aUIsU0FBV3dKO1dBRS9DLFNBQVNvWixLQUFLaGlCO2FBQ1osR0FBSTZoQixXQUFZO2FBQ2hCLElBQUlJLGdCQUFrQix3QkFBd0JqaUI7YUFDOUMsR0FBSWlpQjtjQUFpQixDQUFFLG9CQUFvQkEsaUJBQWtCOztjQUN4RCxDQUFFLHVCQUF1QmppQixHQUFJLGFBQ3BDO1dBRUEsU0FBU2tpQixXQUFZbGlCO2FBQ25CLEdBQUlBO2NBQWUsQ0FDakIsR0FBSSxLQUFLQSxHQUFJO2VBQ2I7Z0JBQVMsS0FBRUE7Z0JBQ0gsSUFBRStRLGdCQUFnQjNPO2dCQUNiO2VBQ2IsS0FBSStmO2dCQUNGO2VBQ0YsR0FBR1g7Z0JBQXlCLENBQzFCO2lCQUNBLElBQVcsSUFBRnhpQixJQUFPQSxJQUFJb0QsWUFBYXBEO2tCQUMvQixlQUFpQixnQkFBZ0JBO2lCQUNuQztpQkFDQSxjQUFjb00sT0FBUXBMLEVBQUdvaUI7O2dCQUNwQixHQUFHRCxvQkFBb0JwYTtpQkFBVSxDQUN0QztrQkFDQSxJQUFXLElBQUYvSSxJQUFPQSxJQUFJb0QsWUFBYXBEO21CQUMvQixlQUFpQixnQkFBZ0JBO2tCQUNuQztrQkFDQSxJQUFJcWpCLFdBQWE7a0JBQ2pCLElBQVUsSUFBRnJqQixJQUFPQSxPQUFRQSxJQUFLO2tCQUc1QixjQUFjb00sT0FBUXBMLEVBQUdvaUI7a0JBQ3pCLGdCQUFnQkMsY0FBZ0JEO2tCQUNoQyxnQkFBZ0JDO2tCQUNoQixnQkFBZ0JBLGtCQUFvQkQ7O2lCQUMvQixDQUNMO2tCQUNBLElBQVcsSUFBRnBqQixJQUFPQSxJQUFJb0QsWUFBYXBEO21CQUMvQixlQUFpQixnQkFBZ0JBO2tCQUNuQztrQkFDQSxJQUFJc2pCLFFBQVU7a0JBQ2QsY0FBY2xYLE9BQVFwTCxFQUFHb2lCO2tCQUN6QixHQUFJRCxvQkFBb0IsZUFBZUc7bUJBQ3JDOzJFQUFvRWxnQjtlQUV4RWdKLHVCQUF3QmdYO2VBQ3hCaFgsdUJBQXdCZ1g7O2NBRXJCLEdBQUlwaUIsYUFBYXFFLFNBQVNyRSxVQUFVQTtlQUFTLENBQ2hELEdBQUlBO2lCQUFhO2dCQUdqQixHQUFJQSxnQkFBZ0IsS0FBS0EsR0FBSTtnQkFDN0IsR0FBSUEsYUFBYUE7aUJBQ2Ysc0JBQW1EQSxRQUFTQTs7aUJBRTVELDBCQUFtREEscUJBQXFCQTtnQkFDMUVvTCxrQkFBa0JwTDtnQkFDbEJvTCxrQkFBa0JwTDtnQkFDbEIsR0FBSUEsYUFBYyxXQUFZQTs7ZUFDekIsR0FBSSxpQkFBaUJBO2dCQUFJLENBQzlCLEtBQUssaUJBQWlCO2tCQUE4Qjs7aUJBR3BELEdBQUksS0FBS0EsR0FBSTtpQkFDYixJQUFJZixJQUFNLHFCQUFxQmU7aUJBQy9CLEdBQUlmO2tCQUNGLHNCQUFvREE7O2tCQUNqRCxHQUFJQTttQkFDUCx5QkFBZ0RBOzttQkFFaEQsMEJBQW1EQTtpQkFDckQsSUFBVyxJQUFGRCxJQUFNQSxJQUFJQyxJQUFJRDtrQkFDckIsZUFBaUIsc0JBQXNCZ0IsRUFBRWhCO2lCQUMzQ29NLHdCQUF5Qm5NO2lCQUN6Qm1NLHdCQUF5Qm5NOztnQkFDcEIsR0FBSSxrQkFBa0JlO2lCQUFJLENBQy9CLElBQUlmLElBQU0sc0JBQXNCZTtrQkFDaEMsR0FBSWY7bUJBQ0Ysc0JBQW9EQTs7bUJBQ2pELEdBQUlBO29CQUNQLHlCQUFnREE7O29CQUVoRCwwQkFBbURBO2tCQUNyRCxJQUFXLElBQUZELElBQU1BLElBQUlDLElBQUlEO21CQUNyQixlQUFpQix1QkFBdUJnQixFQUFFaEI7a0JBQzVDb00sd0JBQXlCbk07a0JBQ3pCbU0sd0JBQXlCbk07O2lCQUNwQixHQUNEZSxNQUFNQTtrQkFBSyxDQUNiLElBQUl1aUIsaUJBQW1CdmlCO21CQVN2Qjt3REFBK0N1aUI7O2tCQUs1QyxHQUFJdmlCLFVBQVVBO21CQUFVLHNCQUNzQkE7O21CQUM1QyxHQUNEQSxtQkFBa0JBO29CQUNwQix5QkFBNkNBOztvQkFDMUMsR0FBSUEsb0JBQW1CQTtxQkFDMUIsMEJBQStDQTs7cUJBRS9DLDBCQUErQ0EsRUFHdkQ7V0FDQSxXQUFZQTtXQUNaLE1BQU8yUjtZQUFrQixDQUN2QixJQUFNLEVBQUUsWUFDRixFQUFFO2FBQ1IsR0FBSTNTLFFBQVFnQixTQUFVLFdBQVlBLEVBQUdoQjthQUNyQyxXQUFZZ0IsRUFBRWhCO1dBRWhCLEdBQUkraUI7WUFBa0IzVyxxQkFBcUIyVztXQUMzQztXQUNBLE9BQU8zVyxZQTFJRixDQW5DYTs7SVo2Q3RCLFNBQVNvWCxxQkFBc0J6akI7TUFDN0IsT0FBTyx1QkFBdUIseUJBQXlCQSxJQUFJQSxVQUM3RDtJWW9JQSxTQUFTMGpCLDRCQUE2QnppQixFQUFHNGhCO01BQ3ZDLE9BQU8scUJBQXNCLGdCQUFpQjVoQixFQUFHNGhCLE9BQ25EO0lOamNBLFNBQVNjLHFCQUFxQnRnQjtNQUM1QixxQkFBc0JBLDJCQUN4QjtJRVhBLFNBQVN1Z0Isd0JBQXdCQztNQUMvQixJQUFJQSxJQUFNLHdCQUF3QkE7TUFDbEM7ZUFBV2xjOzs7O1FBQ0o7O1FBQ0E7T0FBbUM7U0FDbkMsa0NBQWtDa2MsdUJBQXlCO2FBQ3pEaGUsR0FBSTs7T0FFUixVQUNQO0lEMUlBLFNBQVNpZSxZQUFZQztNQUNuQixHQUFHO09BQXFCLENBQ3RCLElBQUlDLElBQU0sZUFDVixPQUFPLFdBQVdEOztPQUNiLFFBR1Q7SWNnQkEsU0FBU0UsMkJBQTJCN0Y7TUFDbEMsR0FBR0EsYUFBYyxPQUFTQSxhQUMxQixPQUFPL2QsSUFDVDtJWGlVQSxTQUFTNmpCLGdCQUFnQnJULE9BQVE1QjtNQUMvQixJQUFRLElBQUUsaUJBQ0YsUUFBTXlFLE1BQU14VDtNQUNwQixJQUFVLElBQUZELElBQU9BLElBQUlDLElBQUtELElBQUksU0FDakJBLEtBQUs7TUFFaEJnUCxRQUFRL087TUFDUixPQUFPbU4sR0FDVDtJQTFaQSxTQUFTOFc7TUFDUG5TOzttQkFDa0JrUywwQkFDRjlOLG1CQUNMOUksY0FFYjtJQ3VmQSxTQUFTOFcsdUJBQXVCcGtCLEVBQUVZLEVBQUVFLEVBQUU4QztNQUNwQyx1REFDRjtJSjFZQSxTQUFTeWdCLFdBQVdoaEI7TUFDbEIsSUFBSUosS0FBTyxrQkFBa0JJO01BQzdCLEtBQUtKLGtCQUFtQjtNQUd4QixPQUFPLGtCQUFrQkEsZUFDM0I7SUFJQSxJQUFJcWhCLGNBQWdCRDtJUzVFcEIsU0FBU0UsZ0JBQWdCbG1CO01BQ3ZCLElBQU0sRUFBRSxtQkFBbUJBLEdBQ3JCLEVBQUVWO01BQ1IsR0FBSW9MLGFBQWFBLG9CQUFvQkE7T0FBd0IsdUJBQ3BDMUs7O09BQ2xCLENBR0wsR0FBRyxhQUFhQSxvQkFDZEEsSUFBSSxXQUFXQTtRQUNqQixJQUFJNEMsRUFBSThIO1FBQ1I5SCxLQUFNQSxTQUFTLE1BQU01QyxHQUV6QjtJWjBMQSxTQUFTbW1CLG9CQUFxQnRtQixFQUFHdUI7TUFDL0IsR0FBSUEsT0FBUUEsUUFBUUEsRUFDcEJ2QixJQUFJLFNBQVNBLEdBQ2IsT0FBUXVCLFFBQVN2QixFQUFHQSxDQUN0QjtJTzJIQSxTQUFTdW1CLHNCQUFzQm5WO01BQzdCLElBQUlqUixFQUFJO01BQ1JBLGNBQWNpUjtNQUNkalIsaUJBQWlCQSxzQkFBc0Isd0JBQXdCQTtNQUMvRCxRQUNGO0lpQnhWQTtLQUFJcW1CO01BQWlCO1NBQ25CLFNBQVNDLElBQUt6bUIsRUFBR3VCLEdBQUssT0FBUXZCLElBQUl1QixLQUFRO1NBQzFDLFNBQVNtbEIsR0FBR2xsQixFQUFFTSxFQUFFWSxFQUFFMUMsRUFBRUcsRUFBRXdDO1dBQ3BCYixJQUFJLElBQUksSUFBSUEsRUFBR04sR0FBSSxJQUFJeEIsRUFBRzJDLElBQzFCLE9BQU8sSUFBS2IsS0FBSzNCLElBQU0yQixXQUFZM0IsRUFBS3VDLEVBQzFDO1NBQ0EsU0FBU2lrQixHQUFHN2tCLEVBQUVZLEVBQUVFLEVBQUU4QyxFQUFFMUYsRUFBRUcsRUFBRXdDLEdBQ3RCLE9BQU8sR0FBSUQsSUFBSUUsTUFBUUYsSUFBS2dELEVBQUk1RCxFQUFHWSxFQUFHMUMsRUFBR0csRUFBR3dDLEVBQzlDO1NBQ0EsU0FBU2lrQixHQUFHOWtCLEVBQUVZLEVBQUVFLEVBQUU4QyxFQUFFMUYsRUFBRUcsRUFBRXdDLEdBQ3RCLE9BQU8sR0FBSUQsSUFBSWdELElBQU05QyxNQUFNOEMsRUFBSzVELEVBQUdZLEVBQUcxQyxFQUFHRyxFQUFHd0MsRUFDOUM7U0FDQSxTQUFTa2tCLEdBQUcva0IsRUFBRVksRUFBRUUsRUFBRThDLEVBQUUxRixFQUFFRyxFQUFFd0MsR0FBSyxPQUFPLEdBQUdELElBQUlFLElBQUk4QyxFQUFHNUQsRUFBR1ksRUFBRzFDLEVBQUdHLEVBQUd3QyxFQUFJO1NBQ2xFLFNBQVNta0IsR0FBR2hsQixFQUFFWSxFQUFFRSxFQUFFOEMsRUFBRTFGLEVBQUVHLEVBQUV3QyxHQUFLLE9BQU8sR0FBR0MsS0FBS0YsTUFBTWdELEdBQUs1RCxFQUFHWSxFQUFHMUMsRUFBR0csRUFBR3dDLEVBQUk7U0FFdkUsU0FBU29rQixJQUFJampCLE9BQVFYO1dBQ25CLElBQUlwQixFQUFJb0I7V0FDUlcsT0FBTy9CLHdCQUF5QkE7V0FDaEMsSUFBS0EsS0FBS0EsZ0JBQWVBLGVBQWdCQTtZQUN2QytCLFFBQVEvQjtXQUNWK0IsUUFBUS9CLGVBQWNvQjtXQUN0QlcsT0FBTy9CLFVBQVdvQjtXQUxsQixJQU9JcVE7V0FFSixJQUFJelIsTUFBT0EsSUFBSStCLGNBQWUvQjtZQUFTLENBQ3JDLElBQU0sRUFBRXlSLEtBQVEsRUFBRUEsS0FBUSxFQUFFQSxLQUFRLEVBQUVBO2FBRXRDMVIsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUUxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUUxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUUxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUMxQkQsSUFBSSxHQUFHQSxFQUFHWSxFQUFHRSxFQUFHOEMsRUFBRzVCLE9BQU8vQjthQUMxQjJELElBQUksR0FBR0EsRUFBRzVELEVBQUdZLEVBQUdFLEVBQUdrQixPQUFPL0I7YUFDMUJhLElBQUksR0FBR0EsRUFBRzhDLEVBQUc1RCxFQUFHWSxFQUFHb0IsT0FBTy9CO2FBQzFCVyxJQUFJLEdBQUdBLEVBQUdFLEVBQUc4QyxFQUFHNUQsRUFBR2dDLE9BQU8vQjthQUUxQnlSLE9BQU8sSUFBSTFSLEVBQUcwUjthQUNkQSxPQUFPLElBQUk5USxFQUFHOFE7YUFDZEEsT0FBTyxJQUFJNVEsRUFBRzRRO2FBQ2RBLE9BQU8sSUFBSTlOLEVBQUc4TjtXQW5GaEIsSUFzRkk3USxNQUFReUU7V0FDWixJQUFXLElBQUZyRixJQUFPQSxNQUFPQTtZQUNyQixJQUFXLElBQUZpQixJQUFPQSxNQUFPQSxJQUNyQkwsRUFBRVosUUFBUWlCLEtBQU13USxFQUFFelIsVUFBV2lCO1dBQ2pDLE9BQU9MLENBQ1Q7U0FFQSxnQkFBaUJ4QyxFQUFHcU4sSUFBS3hMO1dBR3ZCLElBQVEsT0FDSSxRQUFFLHNCQUFzQjdCO1dBQ3BDLFVBQVVpRDtZQUFxQixDQUM3QixJQUFJVixFQUFJVTthQUNSLElBQVcsSUFBRnJCLElBQU9BLElBQUlDLElBQUtEO2NBQU0sQ0FDN0IsSUFBSWlCLEVBQUlqQixJQUFJeUw7ZUFDWnpGLElBQUloRzs7ZUFDRixhQUFhaUI7O2VBQU0sYUFBYUE7Ozs7ZUFDL0IsYUFBYUE7Ozs7ZUFBZSxhQUFhQTs7O2FBRTlDLEtBQU9qQixJQUFJQyxJQUFLRDtjQUFLZ0csSUFBSWhHLFdBQVMsYUFBYUEsSUFBSXlMLGFBQWN6TDs7WUFDNUQsQ0FDTCxJQUFJRCxFQUFJc0I7YUFDUixJQUFXLElBQUZyQixJQUFPQSxJQUFJQyxJQUFLRDtjQUFNLENBQzdCLElBQUlpQixFQUFJakIsSUFBSXlMO2VBQ1p6RixJQUFJaEc7O2VBQVFELEVBQUVrQjs7ZUFBTWxCLEVBQUVrQjs7OztlQUFjbEIsRUFBRWtCOzs7O2VBQWVsQixFQUFFa0I7OzthQUV6RCxLQUFPakIsSUFBSUMsSUFBS0QsSUFBS2dHLElBQUloRyxXQUFTRCxFQUFFQyxJQUFJeUwsYUFBY3pMO1dBRXhELE9BQU8scUJBQXFCLElBQUlnRyxJQUFLL0YsS0F0QmhDLENBN0dZOztJYmlackIsU0FBU2dsQixvQkFBb0IxWixHQUFJdkwsRUFBR2dCO01BQ2xDLE9BQU8sVUFBVSxtQkFBbUJoQixJQUFLZ0IsR0FDekMsUUFDRjtJWW5WQSxTQUFTa2tCLGtCQUFrQmpuQixFQUFHK0IsRUFBR2dCLEdBQy9CLE9BQU8sY0FBYy9DLEVBQUcrQixLQUFPZ0IsR0FDakM7STNCdWJBLFNBQVNta0IscUJBQXFCNWYsR0FBSUU7TUFDL0JGLFlBQWEsNkJBQTZCQTtNQUMxQ0UsWUFBYSw2QkFBNkJBO01BQzNDLE9BQVFGLFFBQVFFLFFBQ2xCO0lBcU9BLFNBQVMyZixzQkFBc0I3ZixHQUFJRSxJQUNqQyxPQUFPLHFCQUFxQkYsR0FBR0UsR0FDakM7SUEzTkEsU0FBUzRmLHlCQUF5QjlmLEdBQUlFO01BQ3BDLE9BQU8sc0JBQXNCQSxHQUFHRixHQUNsQztJRHJWQSxTQUFTK2YsZUFBZ0JybkIsRUFBR3VCLEdBQUssT0FBTyxNQUFNQSxFQUFHO0lLekVqRCxTQUFTK2xCLHFCQUFzQnRuQixFQUFFdUI7TUFDL0IsR0FBRyxNQUFNdkIsTUFBTSxNQUFNdUIsR0FBSSxPQUFPa1E7TUFDaEMsR0FBR3pSLEtBQUd1QixFQUFHLE9BQU9BO01BQ2hCLEdBQUd2QixPQUFLLE9BQ0h1QixRQUNPLG1CQUVEO01BRVgsSUFBUyxLQUFFLHlCQUF5QnZCLEdBQzVCLElBQUU7TUFDVixHQUFLQSxJQUFFdUIsS0FBT3ZCO09BQ1p1bkIsT0FBTyxlQUFlQSxLQUFNQzs7T0FFNUJELE9BQU8sZUFBZUEsS0FBTUM7TUFDOUIsT0FBTyx5QkFBeUJELEtBQ2xDO0lPTUEsU0FBU0UsaUJBQ1AsSUFBSXRuQixFQUFJLG9CQUNSLE9BQU9BLFFBQ1Q7SUVpSkEsU0FBU3VuQixlQUFlMWEsUUFBUyxPQUFPRixpQkFBaUJFLGNBQWM7SWRqRnZFLFNBQVMyYSxlQUFnQjNuQixFQUFHdUIsR0FBSyxPQUFPLE1BQU1BLEVBQUk7SVNKbEQsU0FBU3FtQiwyQkFBOEIsU0FBVztJSzlNbEQsU0FBU0MsZ0JBQWdCN2EsT0FBTzdNO01BQzlCO09BQVMsS0FBRTJNLGlCQUFpQkU7T0FDcEIsSUFBRSx1QkFBdUI3TTtPQUN4QixLQUFFLHNCQUFzQnlNO01BQ2pDLGdCQUFnQkQsWUFBYUMsTUFBUWtiO01BQ3JDbmIsZUFBZW1iO01BQ2YsUUFDRjtJR2lDQSxTQUFTQyxnQkFBZ0I1bkI7TUFDdkIsSUFBTSxFQUFFLG1CQUFtQkEsR0FDckIsRUFBRVY7TUFDUixHQUFJb0wsYUFBYUEsb0JBQW9CQTtPQUF3Qix1QkFDcEMxSzs7T0FDbEIsQ0FHTCxHQUFHLGFBQWFBLG9CQUNkQSxJQUFJLFdBQVdBO1FBQ2pCLElBQUk0QyxFQUFJOEg7UUFDUjlILEtBQUtBLFdBQVcsUUFBUTVDLEdBRTVCO0lIckNBLFNBQVM2bkIsdUJBQXVCQyxJQUFJN0ksT0FBT3JXLEtBQUs0YjtNQUM5QyxHQUFHamtCLHlCQUF5Qm9LO09BQVdwSywyQkFBMkIwRztNQUNsRXVkLFFBQU1BLE1BQU1BO01BQ1osSUFBSXVEO01BQ0pBLFlBQVluZjtNQUNabWYsY0FBY3ZELGFBQWE7TUFDM0J1RCxhQUFhdkQ7TUFDYnVELGNBQWM5STtNQUNkMWUscUJBQXFCdW5CLE9BQU9DO01BQzVCLEtBQUl4bkIsZ0NBQWdDdW5CLE1BQU12bkI7T0FDeENBLCtCQUErQnVuQjtNQUNqQyxPQUFPQSxHQUNUO0lBQ0EsU0FBU0UsY0FBZWhqQixLQUFNd2YsTUFBT3lEO01BQ25DLElBQUlubUI7TUFDSixNQUFNMGlCO09BQU0sQ0FDVixPQUFPQTtpQkFDQzFpQixhQUFhO2lCQUNiQSxhQUFhO2lCQUNiQSxhQUFhO2lCQUNiQSxhQUFhO2lCQUNiQSxlQUFlO2lCQUNmQSxXQUFZO2lCQUNaQSxhQUFhO2lCQUNiQSxXQUFXO2lCQUNYQSxlQUFlOztRQUV2QjBpQixRQUFNQTtNQUVSLEdBQUcxaUIsWUFBWUE7T0FDYjtTQUFxQix1QkFBdUJrRDs7O01BQzlDLEdBQUdsRCxVQUFVQTtPQUNYO1NBQXFCLHVCQUF1QmtEOzs7TUFsQjlDO09BbUJTLEtBQUUsa0JBQWtCQTtPQUNwQixLQUFFLGlCQUFpQkosVUFBVTlDO09BQzlCLElBQUV2Qiw2QkFBNkJBO01BQ3ZDLE9BQU8sdUJBQXdCdW5CLFFBQU1KLGdCQUFnQjllLEtBQUs5RyxFQUM1RDtJQUNBO1FBQXlCNGxCLG9CQUFxQmhnQixXQUFXO0lBQ3pEO1FBQXlCd2Usb0JBQXFCeGUsV0FBVztJQUN6RDtRQUF5QmtnQixvQkFBcUJsZ0IsV0FBVztJRG5DekQsU0FBU3dnQixlQUFnQmxvQixFQUFHNEI7TUFBS3JDLFNBQVMsdUJBQXVCUyxHQUFJVCxTQUFTcUMsQ0FBRztJQUNqRnNtQjs7dUJBQ3VCLE9BQU8sa0JBQWtCM29CLFNBQXZDO3VCQUNjLE9BQU8sa0JBQWtCQSxxQkFBdkM7OztPQUVMLElBQU0sRUFBRUEsT0FBVSxFQUFFQTtPQUNwQkEsU0FBU3FDO09BQ1QsT0FBUSxhQUFhQSxVQUFXLGFBQWFBLE1BSHZDOzs7T0FNTixJQUFNLEVBQUVyQyxPQUFVLEVBQUVBO09BQ3BCQSxTQUFTcUM7T0FDVCxPQUFRLGFBQWFBLGlCQUFrQixhQUFhQSxNQUg5Qzs7O09BTU4sSUFBTSxFQUFFckMsT0FBVSxFQUFFQTtPQUNwQkEsU0FBU3FDO09BQ1QsUUFBUyxhQUFhQTs7OztlQUFhLGFBQWFBOzs7O2VBQ3ZDLGFBQWFBOzs7O2VBQWEsYUFBYUE7O2VBSjFDOzs7T0FPTixJQUFNLEVBQUVyQyxPQUFVLEVBQUVBO09BQ3BCQSxTQUFTcUM7T0FDVCxPQUFRLGFBQWFBOzs7O2NBQWEsYUFBYUE7Ozs7Y0FDNUMsYUFBYUE7Ozs7Y0FBYSxhQUFhQSxNQUpwQzs7Y0FNVUM7T0FDaEIsSUFBSUQsRUFBSXJDO09BQ1JBLFNBQVNxQyxJQUFJQztPQUNiLE9BQU8sdUJBQXVCLGlCQUFpQkQsRUFBR0EsSUFBSUMsS0FIaEQ7SUFrRFYsU0FBU3NtQixvQkFBcUJ4bUI7TUFDNUIsT0FBTyx5QkFBMEIsb0JBQXFCQSxHQUN4RDtJQTBGQSxTQUFTeW1CLDZCQUE2QjVWLE9BQVFuRjtNQUM1QztPQUFXLE9BQUU7T0FDRSxXQUFFO09BQ0QsWUFBRTtPQUNMLFNBQUU7T0FDRixTQUFFO09BQ0w7T0FDVyxpQkFBR2tiLG1CQUFvQnZtQjtPQUM1QjtNQUNoQixTQUFTMm1CO1FBQ1AsSUFBSS9pQixLQUFPO1FBQ1gsR0FBSUE7U0FBdUMsR0FDckNBO1VBQXlDLENBQzNDLElBQVEsSUFBRUEsV0FDRCxLQUFHQSxnQkFDTixHQUFHdEY7V0FDVCxHQUFJMlEsVUFBVyxPQUFPck87V0FDdEIsR0FBSStoQixpQkFBa0JBLGlCQUFpQitELGlCQUFpQjlsQjtXQUN4RCxXQUFXQSxFQUFHcU87V0FDZCxPQUFPck87O1VBRVAsT0FBUWdEOztTQUNMLEdBQ0RBO1VBQTBDLENBQzVDLElBQVEsSUFBRUEsWUFDSixFQUFFLGVBQWdCL0Q7V0FDeEIsR0FBSThpQixpQkFBa0JBLGlCQUFpQitELGlCQUFpQjlsQjtXQUN4RCxPQUFPQTs7VUFDRixPQUNFZ0Q7c0JBRUwsT0FBTztzQkFFUCxPQUFPO3NCQUVQLE9BQU87c0JBRVAsZ0RBQ0E7O2FBRUEsSUFBSTVFLE9BQVM7YUFDYixPQUFPMmpCLGlCQUFpQitELGNBQWMxbkI7O2FBRXRDLElBQUlBLE9BQVM7YUFDYixPQUFPMmpCLGlCQUFpQitELGNBQWMxbkI7O2FBRXRDLElBQUlBLE9BQVM7YUFDYixPQUFPMmpCLGlCQUFpQitELGNBQWMxbkI7O2FBRXRDO2NBQVcsT0FBRTtjQUNMLElBQUU0bkI7Y0FDRCxLQUFFQTtjQUNMLEdBQUd0b0I7YUFDVCxHQUFJMlEsVUFBVyxPQUFPck87YUFDdEIsR0FBSStoQixpQkFBa0JBLGlCQUFpQitELGlCQUFpQjlsQjthQUN4RCxXQUFXQSxFQUFHcU87YUFDZCxPQUFPck87O2FBRVAsbURBQ0E7O2FBRUEsSUFBUSxJQUFFLGdCQUNKLEVBQUUsZUFBZ0JmO2FBQ3hCLEdBQUk4aUIsaUJBQWtCQSxpQkFBaUIrRCxpQkFBaUI5bEI7YUFDeEQsT0FBT0E7O2FBRVAsSUFBUSxJQUFFLGlCQUNKLEVBQUUsZUFBZ0JmO2FBQ3hCLEdBQUk4aUIsaUJBQWtCQSxpQkFBaUIrRCxpQkFBaUI5bEI7YUFDeEQsT0FBT0E7O2FBRVAsSUFBSUosTUFBUXlFO2FBQ1osSUFBVyxJQUFGckYsSUFBTUEsTUFBTUEsSUFBS1ksTUFBTVosS0FBSzthQURyQyxJQUVJZ0IsRUFBSSxvQkFBcUJKO2FBQzdCLEdBQUltaUIsaUJBQWtCQSxpQkFBaUIrRCxpQkFBaUI5bEI7YUFDeEQsT0FBT0E7O2FBRVAsSUFBSUosTUFBUXlFO2FBQ1osSUFBVyxJQUFGckYsSUFBTUEsTUFBTUEsSUFBS1ksRUFBRVosS0FBSzthQURqQyxJQUVJZ0IsRUFBSSxvQkFBcUJKO2FBQzdCLEdBQUltaUIsaUJBQWtCQSxpQkFBaUIrRCxpQkFBaUI5bEI7YUFDeEQsT0FBT0E7O2FBRVAsSUFBUSxJQUFFLGdCQUNKLE1BQU1xRSxNQUFNcEY7YUFDbEJlO2FBRkEsSUFHSUosTUFBUXlFO2FBQ1osR0FBSTBkLGlCQUFrQkEsaUJBQWlCK0QsaUJBQWlCOWxCO2FBQ3hELElBQVcsSUFBRmhCLElBQU1BLEtBQUtDLElBQUlEO2NBQUssQ0FDM0IsSUFBVyxJQUFGaUIsSUFBTUEsTUFBTUEsSUFBS0wsTUFBTUssS0FBSztlQUNyQ0QsRUFBRWhCLEtBQUssb0JBQXFCWTthQUU5QixPQUFPSTs7YUFFUCxJQUFRLElBQUUsZ0JBQ0osTUFBTXFFLE1BQU1wRjthQUNsQmU7YUFGQSxJQUdJSixNQUFReUU7YUFDWixHQUFJMGQsaUJBQWtCQSxpQkFBaUIrRCxpQkFBaUI5bEI7YUFDeEQsSUFBVyxJQUFGaEIsSUFBTUEsS0FBS0MsSUFBSUQ7Y0FBSyxDQUMzQixJQUFXLElBQUZpQixJQUFNQSxNQUFNQSxJQUFLTCxFQUFFSyxLQUFLO2VBQ2pDRCxFQUFHaEIsS0FBSyxvQkFBcUJZO2FBRS9CLE9BQU9JOzthQUVQLElBQVEsSUFBRSxpQkFDSixNQUFNcUUsTUFBTXBGO2FBQ2xCZTthQUNBLEdBQUkraEIsaUJBQWtCQSxpQkFBaUIrRCxpQkFBaUI5bEI7YUFIeEQsSUFJSUosTUFBUXlFO2FBQ1osSUFBVyxJQUFGckYsSUFBTUEsS0FBS0MsSUFBSUQ7Y0FBSyxDQUMzQixJQUFXLElBQUZpQixJQUFNQSxNQUFNQSxJQUFLTCxNQUFNSyxLQUFLO2VBQ3JDRCxFQUFFaEIsS0FBSyxvQkFBcUJZO2FBRTlCLE9BQU9JOzthQUVQLElBQVEsSUFBRSxpQkFDSixNQUFNcUUsTUFBTXBGO2FBQ2xCZTthQUZBLElBR0lKLE1BQVF5RTthQUNaLElBQVcsSUFBRnJGLElBQU1BLEtBQUtDLElBQUlEO2NBQUssQ0FDM0IsSUFBVyxJQUFGaUIsSUFBTUEsTUFBTUEsSUFBS0wsRUFBRUssS0FBSztlQUNqQ0QsRUFBR2hCLEtBQUssb0JBQXFCWTthQUUvQixPQUFPSTs7c0JBR1AsMkNBQ0E7Ozs7YUFJQSxJQUFJSCxFQUFLO2FBQ1QsT0FBUUEsSUFBSSxzQkFBd0J6QyxLQUFLLG9CQUFxQnlDO2FBRDlELElBRVEsSUFBRWtSLGdCQUFnQjNULEdBQ3RCNm9CO2FBQ0osS0FBSTlEO2NBQ0Y7YUFDRixPQUFPbmY7eUJBRUw7O2dCQUVBLEtBQUltZjtpQkFDRjs7Z0JBQ0Y4RCxnQkFBZ0I5RDtnQkFDaEI7O2dCQUVBOEQsZ0JBQWdCO2dCQUVoQjtnQkFBa0I7Z0JBQ2xCOzthQWxCRixJQW9CWSxRQUFFclcsU0FDTCxTQUNILEVBQUUsZ0JBQWdCQSxPQUFRdkI7YUFDaEMsR0FBRzRYLGlCQUFpQmxlO2NBQVUsR0FDekJrZSxpQkFBaUI1WDtlQUNsQjs7YUFFSixHQUFJMFQsaUJBQWtCQSxpQkFBaUIrRCxpQkFBaUI5bEI7YUFDeEQsT0FBT0E7b0JBRVAsaURBSVI7TUFDQSxJQUFJc0YsSUFBTTtNQUNWLE1BQU9xTTtPQUFrQixDQUN2QixJQUFTLEtBQUUsWUFDTCxFQUFFLFlBQ0YsRUFBRTNSO1FBQ1IsR0FBSTJDLElBQUkwTCxLQUFNLFdBQVdyTyxFQUFHcU87UUFDNUJyTyxFQUFFMkMsS0FBSztNQUVULFVBQVc4SCxnQkFBZUEsU0FBU21GO01BQ25DLE9BQU90SyxHQUNUO0laNllBLFNBQVM0Z0IscUJBQXFCOW9CLEdBQUssT0FBT0EsQ0FBRTtJWTdvQjVDLFNBQVMrb0IsNEJBQTRCL29CLEVBQUVxTjtNQUNyQztPQUFJbUY7O1NBQWEwVjtVQUFnQixxQkFBcUJsb0IsVUFBV3FOLGdCQUFjQSxJQUFJQTtNQUNuRixPQUFPLDZCQUE2Qm1GLE9BQVFuRixJQUM5QztJWjJFQSxTQUFTMmIsZ0JBQWlCaHBCLEVBQUc0QjtNQUMzQixHQUFJQSxXQUFXLHNCQUFzQjVCLEdBQUk7TUFDekMsT0FBTyx1QkFBd0JBLEVBQUc0QixFQUNwQztJNkJuTUE7S0FBSXFuQjtNQUFXO1NBQ2I7VUFBb0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztVQVdSOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQVVaLFNBQVNHLGVBQWUzbUI7V0FDdEIsT0FBUXltQixnQkFBbUJ6bUIsWUFBYUEsVUFDMUM7U0FFQSxTQUFTNG1CLFVBQVVycEIsRUFBRTRCO1dBQ25CLE9BQVEsZ0JBQWdCNUIsRUFBRzRCLFlBQWFBLFVBQzFDO1NBRUEsU0FBUzBuQixjQUFjdFgsR0FBSWhTLEVBQUc2SCxJQUFLMGhCO1dBRWpDO1lBQWtCLEtBQUUsbUJBQW1Cdlg7WUFDckIsTUFBRSxtQkFBbUJBO1lBQ3JCLFVBQUUsdUJBQXVCQTtZQUN6QixVQUFFQTtZQUNGLGFBQUVBO1lBQ0YsV0FBRUE7WUFFZCxFQUFFLHFCQUFxQmhTO1lBRXRCO1lBQ0U7WUFDQztZQUNDLFdBQU1pSCxNQUFNMGlCO1lBQ1AsZ0JBQU0xaUIsTUFBTTJpQjtXQUU1QixJQUFVLElBQUZob0IsSUFBT0EsSUFBSW9vQixjQUFlcG9CLElBQUksT0FDN0JBO1dBRVRvb0Isa0JBQWtCbmlCO1dBRUosU0FBVnFpQjthQUNGLE1BQU8zVjtjQUFjLENBQ25CLElBQUk0VixLQUFPO2VBQ1gsR0FBSUE7Z0JBQVcsY0FDQ0Esa0JBQWtCQTs7Z0JBRTdCLEdBQUdBLFNBQVUsQ0FDaEJMLEtBQUtLLFlBQ0x0aUIsTUFBTXNpQixhQUNOO2FBR0pKLFdBWmM7V0FlUCxTQUFMSyxLQUFnQkQsTUFBUSxXQUFXQSxLQUE1QjtXQUVBLFNBQVBFO2FBQ0ZMLGdCQUFnQm5pQjthQUNoQixJQUFJckQsV0FBYXlDLFVBQVUraUI7YUFDM0J4bEI7YUFDQSxJQUFVLElBQUY1QyxJQUFPQSxJQUFJb29CLGNBQWVwb0I7Y0FBSSxDQUNwQyxJQUFJOEksRUFBSXNmLE9BQU9wb0I7ZUFDZixHQUFHOEksZUFBZUEsVUFBVyxVQUNqQkE7ZUFFWmxHLFdBQVM1QyxTQUFVOEk7ZUFDbkJsRyxXQUFTNUMsYUFBYzhJO2FBRXpCLE9BQU9sRyxNQVpJO1dBZUksU0FBYjhsQjthQUNGLEdBQUdmLFFBQVMsT0FBTyxjQUNkLFdBRlk7V0FNbkIsUUFBUVE7WUFBTSxDQUNaO2NBQU8sR0FBRVAsS0FBS007Y0FDTCxLQUFFTixLQUFLTTtjQUNQLEtBQUVVO2NBQ0wsRUFBRXhxQixFQUFFNkg7Y0FDTjZpQjthQUVKWjthQUVBLE9BQVFTO29CQUNIcEI7Z0JBQ0gsR0FBR3RoQixRQUFRN0gsU0FBVSxDQUFDLGVBQWlCO2dCQUN2QyxHQUFJeUMsTUFBTWdvQixLQUFNNWlCLFdBQ1g7Z0JBQ0w7b0JBQ0dzaEI7Z0JBQ0gsR0FBR3RoQixRQUFRN0gsU0FBVSxDQUFDLGVBQWlCO2dCQUN2QyxHQUFJLHFCQUFxQnlDLE9BQU9nb0IsS0FBTTVpQixXQUNqQztnQkFDTDtvQkFDR3NoQjtnQkFDSDtzQkFBYSxJQUFFLHVCQUF1Qk0sTUFBTWdCLE9BQVU7a0JBQUs3b0I7O2tCQUFJUTtrQkFBWVI7aUJBQUssQ0FDOUUsR0FBR2lHLFFBQVE3SCxTQUFVLENBQUMsZUFBaUI7a0JBQ3ZDLEdBQUl5QyxNQUFNLGVBQWViO21CQUN2QmEsSUFBSXpDLElBQUk2SDs7bUJBQ0wsQ0FBRSxZQUFhO2dCQUV0QjtvQkFDR3NoQjtnQkFDSDtzQkFBYSxJQUFFLHVCQUF1Qk0sTUFBTWdCLE9BQVU7a0JBQUs3b0I7O2tCQUFJUTtrQkFBWVI7aUJBQUssQ0FDOUUsR0FBR2lHLFFBQVE3SCxTQUFVLENBQUMsZUFBaUI7a0JBQ3ZDLEdBQUkscUJBQXFCeUMsT0FBTyxlQUFlYjttQkFDN0NhLElBQUl6QyxJQUFJNkg7O21CQUNMLENBQUUsWUFBYTtnQkFFdEI7b0JBQ0dzaEI7Z0JBQ0gsR0FBR3RoQixRQUFRN0gsU0FBVSxDQUFDLGVBQWlCO2dCQUN2QyxHQUFJLFVBQVV5cEIsTUFBTWdCLE1BQU9ob0IsR0FBSW9GLFdBQzFCO2dCQUNMO29CQUNHc2hCO2dCQUNILEdBQUd0aEIsV0FBVzdILEVBQUU2SCxlQUF5QixZQUN6QztvQkFDR3NoQjtnQkFDSCxHQUFHdGhCLE1BQU03SCxZQUFZQSxFQUFFNkgsV0FBcUIsWUFDNUM7b0JBQ0dzaEI7Z0JBQ0gsR0FBR3RoQjtpQkFBVSxDQUNYLEdBQUdBLFFBQVE3SCxTQUFVLENBQUMsZUFBaUI7a0JBQ3ZDLEdBQUcsZUFBZUEsTUFBTztrQkFDekI7O2lCQUVHLEdBQUk2SCxRQUFRN0g7a0JBQVUsQ0FDekIsR0FBRyxlQUFlQSxFQUFFNkgsVUFBVyxNQUMvQjs7a0JBRUcsQ0FDSCxHQUFHLGVBQWU3SCxFQUFFNkgsYUFBYSxlQUFlN0gsRUFBRTZIO29CQUFPO21CQUN6RDtnQkFFRjtvQkFDR3NoQjtnQkFDSHVCLFFBQVFWLE9BQU9TO2dCQUNmLGdCQUFpQkMseUJBRUdBO2dCQUNwQkEsY0FBYzdpQjtnQkFDZDtvQkFDR3NoQjtnQkFDSHVCLFFBQVFWLE9BQU9TO2dCQUNmLGdCQUFrQkMsdUJBRUVBO2dCQUNwQkEsWUFBWTdpQjtnQkFDWjtvQkFDR3NoQjtnQkFDSHVCLFFBQVFWLE9BQU9TO2dCQUNmLEdBQUdDLG1CQUFtQkEsY0FBZSxDQUFDLFlBQWM7Z0JBQ3BELElBQVcsSUFBRjlvQixFQUFJOG9CLFlBQWE5b0IsSUFBSThvQixVQUFXOW9CO2lCQUFJLENBQzNDLEdBQUdpRyxRQUFRN0gsU0FBVSxDQUFDLGVBQWlCO2tCQUN2QyxHQUFHQSxFQUFFNEIsTUFBTTVCLEVBQUU2SCxLQUFNLENBQUMsWUFBYztrQkFDbENBO2dCQUVGO29CQUNHc2hCLGtCQUNILEdBQUksVUFBVU0sTUFBTWdCLE1BQU9ob0IsR0FBSW9GLE1BQy9CO29CQUNHc2hCO2dCQUNILE1BQU8sVUFBVU0sTUFBTWdCLE1BQU9ob0IsR0FDNUJBLElBQUl6QyxJQUFJNkgsS0FDVjtvQkFDR3NoQjtnQkFDSCxHQUFHdGhCLFFBQVE3SCxTQUFVLENBQUMsZUFBaUI7Z0JBQ3ZDLEdBQUksVUFBVXlwQixNQUFNZ0IsTUFBT2hvQjtpQkFBSSxHQUMxQixJQUNHekMsSUFBSTZILFdBQ0QsVUFBVTRoQixNQUFNZ0IsTUFBT2hvQjs7aUJBRTdCO2dCQUNMO29CQUNHMG1CLGVBQ0gsT0FBTztvQkFDSkEsYUFDSFcsS0FBS0EsS0FBS1UsS0FDVjtvQkFDR3JCLGlCQUNILGNBQWdCVyxLQUFLVSxTQUFXM2lCLE9BQ2hDO29CQUNHc2hCO2dCQUNIOzZCQUFpQmMsaUJBQ0VRLFdBQ0NSLFlBQVlRO2dCQUNoQ1IsWUFBWVEsUUFBUTVpQjtnQkFDcEI7b0JBQ0dzaEI7Z0JBQ0gsR0FBSWMsWUFBWVEsVUFBVTVpQixJQUFLLFlBQy9CO3VCQUNPLFVBQVU4aUI7V0FHckIsUUFDRjtTQUVBLE9BQU9yQixhQXROTTs7SUEwT2YsU0FBU3NCLG1CQUFtQjVZLEdBQUloUyxFQUFHNkg7TUFDakMsR0FBR0EsV0FBV0EsTUFBTSxzQkFBc0I3SDtPQUN4QztNQUNGLE1BQU82SCxTQUFVLENBQ2YsSUFBSUssSUFBTSxTQUFTOEosR0FBSWhTLEVBQUc2SCxPQUMxQixHQUFJSyxJQUFLLE9BQU9BLElBQ2hCTDtNQUdGLFVBQ0Y7STdCdWxCQSxTQUFTZ2pCLG9CQUFvQjdxQixHQUMzQixPQUFPLHdCQUF3QkEsRUFDakM7SWVqV0EsU0FBUzhxQixZQUFZM2QsR0FBSUUsSUFBS3hMO01BQzVCLElBQUlrcEIsWUFDSTtNQUNSLEdBQUk1ZDtPQUFnQixDQUNsQixJQUFXLElBQUZ2TCxJQUFPQSxJQUFJdUwsZUFBZ0J2TCxJQUNsQ29wQixNQUFNQSxNQUFNN2QsUUFBUXZMO1FBQ3RCbXBCOztPQUNLLENBQ0wsSUFBVyxJQUFGbnBCLElBQU9BLElBQUt1TCxtQkFBcUJ2TCxJQUN4Q29wQixNQUFNQSxNQUFNN2QsUUFBUXZMO1FBQ3RCbXBCLGNBQWM1ZDtRQUNkRSxNQUFNQTtNQUVSLEdBQUlBLFdBQVd4TCxXQUFZd0wsTUFBTXhMLE1BQU9zTCxRQUFRNGQ7T0FBYTtNQVo3RCxJQWVJRTtNQUNKLElBQVcsSUFBRnJwQixJQUFPQSxJQUFJdUwsZUFBZ0J2TCxJQUNsQ3FwQixTQUFTcnBCLEtBQUt1TCxRQUFRdkw7TUFDeEJxcEIsU0FBU0YsZUFBZWxwQjtNQUN4Qm1wQixPQUFPLDZCQUE2QjdkO01BbkJwQyxJQW9CSStkLFNBQVcsaUJBQWlCN2QsTUFBTTJkLEtBQU0zZCxNQUFNeEwsT0FBT21wQjtNQUN6RCxPQUFPLHNCQUFzQjdkLFFBQVNBLFVBQVc4ZCxTQUFVQyxTQUM3RDtJRHRoQkEsU0FBU0MscUJBQXNCLFFBQVE7SWQ0VXZDLFNBQVNDLGlCQUFpQnByQixFQUFFNEIsRUFBRXlwQjtNQUM1QixHQUFJenBCLFdBQVc1QixRQUFTO01BQ3hCO09BQU8sVUFBU3FyQjtPQUNULFVBQVNBO09BQ1QsVUFBU0E7T0FDVCxVQUFTQTtNQUNoQixzQkFBdUJyckIsRUFBRzRCLE1BQU8wTDtNQUNqQyxzQkFBdUJ0TixFQUFHNEIsTUFBTzJMO01BQ2pDLHNCQUF1QnZOLEVBQUc0QixNQUFPNEw7TUFDakMsc0JBQXVCeE4sRUFBRzRCLE1BQU82TDtNQUNqQyxRQUNGO0lXbUlBLFNBQVM2ZCx1QkFBdUIsUUFBUTtJSXRCeEMsU0FBU0Msb0JBQW9CcGUsR0FBSUMsR0FBSXhLO01BQ25DLElBQUl5SyxJQUFNLFVBQVVEO01BQ3BCLEdBQUdDLFdBQVdGLGVBQWdCO01BQzlCLE9BQU9FLFFBQVF6SztNQUNmLE9BQU95SyxRQUFReks7TUFDZixPQUFPeUssUUFBUXpLO01BQ2YsT0FBT3lLLFFBQVF6SztNQUNmLFFBQ0Y7SVAzTkEsU0FBUzRvQiw2QkFBZ0MsT0FBT3BPLHFCQUEyQjtJSlkzRSxTQUFTcU8sbUJBQW1CNXJCLEdBQzFCLEdBQUlBLE9BQVFBLFFBQVFBLEVBQ3BCLE9BQVFBLFNBQ1Y7SU95Q0EsU0FBUzZyQix1QkFBdUJyWTtNQUM5QixJQUFJclQsRUFBSTtNQUNSQSxlQUFlcVQ7TUFDZnJULHNCQUFzQnFUO01BQ3RCLFFBQ0Y7SUE2REEsU0FBU3NZLGlCQUFpQjdwQjtNQUN4QixJQUFJOUIsRUFBSTtNQUNSQSxTQUFTOEI7TUFDVDlCLGlCQUFpQkEsc0JBQXNCLHdCQUF3QkE7TUFDL0QsUUFDRjtJQWxNQSxTQUFTNHJCLGtCQUFrQjdRO01BQ3pCLElBQUkvYSxFQUFJO01BQ1IsU0FBUzZyQixRQUFRQztRQUNmLElBQUlyZixTQUFXO1FBQ2YsTUFBT0EsZUFBZ0JBLFlBQVlBO1FBQ25DLE9BQU9BLEdBQ1Q7TUFDQSxJQUNFLEVBQUdzTyxtQkFDSCxFQUFHQSxrQkFDSCxFQUFHQTtNQUNML2EsVUFBUSthO01BSlIsSUFLSWdSLFlBQWMsUUFBUTlyQixLQUFLLFFBQVF5SyxLQUFLLFFBQVFuSTtNQUNwRHZDLHNCQUF3QityQjtNQUN4Qi9yQix3QkFBd0IrckI7TUFDeEIsUUFDRjtJQTRCQSxTQUFTQyxlQUFlbnNCLEVBQUV1QjtNQUN4QixJQUFJcEIsRUFBSSxvQkFDUkEsTUFBSUgsRUFDSkcsTUFBSW9CLEVBQ0osUUFDRjtJQXBGQSxTQUFTNnFCLHNCQUFzQjVZLEVBQUV2UztNQUMvQixJQUFJZCxFQUFJO01BQ1JBLFVBQVVxVDtNQUNWclQsV0FBV2M7TUFDWGQsaUJBQWlCcVQ7TUFDakJyVCxrQkFBa0JjO01BQ2xCLFFBQ0Y7SUFsRUEsU0FBU29yQjtNQUNQLGVBQWU5Z0IsZ0JBQWdCQTtNQUMvQixzQkFBc0JBLG9CQUFvQkE7TUFDMUMsdUJBQXVCQTtNQUN2QixzQkFBc0JBO01BQ3RCLGlCQUFpQkE7TUFDakIsa0JBQWtCQTtNQUNsQix5QkFBeUJBO01BRXpCQSw2Q0FDRjtJQXlJQSxTQUFTK2dCLG9CQUNQLElBQUluc0IsRUFBSSxvQkFDUixPQUFPQSxHQUNUO0lJaW9CQSxTQUFTb3NCLDRCQUE0QkM7TUFDbkMsSUFBTSxFQUFFL3NCLFdBQ0p5UjtNQUNKLEdBQUlzYixjQUFjM2hCO09BQWdCcUc7O09BQzdCLEdBQUlzYixjQUFjM2hCO1FBQWdCcUc7O1FBQ2xDLEdBQUlzYixjQUFjM2hCO1NBQWFxRzs7U0FDL0IsR0FBSXNiLGNBQWMzaEI7VUFBY3FHOztVQUNoQyxHQUFJc2IsY0FBYzNoQjtXQUFjcUc7O1dBQ2hDLEdBQUlzYixjQUFjM2hCO1lBQWVxRzs7WUFDakMsR0FBSXNiLGNBQWMzaEI7YUFBY3FHOzthQUNoQyxHQUFJc2IsY0FBYzNoQjtjQUFlcUc7O2NBQ2pDOztNQUNMLE9BQU9BLElBQ1Q7SUFLQSxTQUFTdWIseUJBQXlCRDtNQUNoQyxJQUFJdGIsS0FBTyw0QkFBNEJzYjtNQUN2QyxPQUFPLHNCQUFzQnRiLFFBQVVzYixXQUFZQSxHQUNyRDtJRmxlQSxTQUFTRSxpQkFBaUIxZixPQUFPaEY7TUFDL0IsY0FBY2dGLFFBQ2RGLGlCQUFpQkUsaUJBQWlCaEYsSUFDbEMsUUFDRjtJR2xZQSxTQUFTMmtCLGVBQWU1aUIsR0FBSyxjQUFjQSxDQUFHO0lRSTlDLFNBQVM2aUIsMkJBQTJCMU0sSUFBSzJNLElBQU0sUUFBUztJYitNeEQsU0FBU0MsZUFBZTlzQixFQUFFdUI7TUFDeEIsSUFBSXBCLEVBQUk7TUFDUjtNQUNBLGlCQUFpQkEsSUFBSUEsV0FBV0E7TUFDaEMsaUJBQWlCSCxFQUFFRyxXQUFXb0I7TUFDOUI7TUFDQXBCLE1BQUlIO01BQ0pHLE1BQUlvQjtNQUNKLFFBQ0Y7SUsyREEsU0FBU3dyQixrQ0FBa0M5cUI7TUFDekM7UUFDRSxJQUFRLElBQUV1TixpQkFDRCxTQUFNcEksTUFBTXBGO1FBQ3JCbUUsVUFBVXpHO1FBQ1YsSUFBVyxJQUFGcUMsSUFBT0EsSUFBSUMsSUFBS0QsSUFBS29FLEtBQUtwRSxTQUFPeU4sVUFBVXpOO1FBQ3BELE9BQU8sUUFBUUksS0FBTWdFLEtBTGhCLENBTVQ7SURvREEsU0FBUzZtQixjQUFjMWYsSUFDckIsT0FBTyxZQUFZQSxLQUNyQjtJUGxWQSxTQUFTMmYsMEJBQTBCL007TUFDakMsT0FBT0EscUNBSUwsaUJBRUEsU0FFSjtJQUlBLFNBQVNnTixzQkFBc0JoTjtNQUM3QixJQUFJOWY7TUFDSixHQUFHOGY7T0FBYSxDQUNkOWYsS0FBSzhmO1FBQ0w7VUFBR0E7Ozs7VUFBbUJBOzs7O1VBQWtCLDBCQUEwQkE7U0FFaEUsSUFBVyxPQUFFQSxPQUNIOztTQUVWLElBQVUsUUFDQyxPQUFFQTtRQUVmOWY7UUFDQSxJQUFVLElBQUYyQixFQUFJcXJCLE1BQU9yckIsSUFBSW9yQixjQUFlcHJCO1NBQUssQ0FDekMsR0FBR0EsSUFBSXFyQixNQUFPaHRCO1VBQ2QsSUFBSTJDLEVBQUlvcUIsT0FBT3ByQjtVQUNmLFVBQVVnQjtXQUNSM0MsS0FBSTs7V0FDRCxHQUFHMkMsYUFBYUU7WUFBUSxXQUNqQjs7WUFFUCxVQUFVRjthQUFjLFdBQ2pCOzthQUVQM0M7UUFFUEE7O09BQ0ssR0FBSThmLGNBQWMsS0FDbEJBO01BRVAsT0FBTzlmLENBQ1Q7SUFJQSxTQUFTaXRCLDhCQUE4QjNqQjtNQUNyQyxHQUFHQSxlQUFldEMsVUFBVXNDLGVBQWVBO09BQWdCLENBQ3pELElBQUk0akIsUUFBVTtRQUNkLEdBQUdBO1NBQVMsUUFBUTVqQjs7U0FDZixDQUNIO1dBQVEsSUFBRSxzQkFBc0JBO1dBQ3BCLFFBQUU7VUFDZCxHQUFHNmpCLFFBQVM7VUFDWixxREFBcUQvcEI7O09BR3BELE1BQ0drRyxHQUVWO0ltQjFFQSxJQUFJOGpCO0lBcUlKLFNBQVNDLHFCQUFxQnp0QjtNQUM1QixPQUFHQSxFQUFFd3RCLDJCQUEyQjFpQixhQUlsQztJM0J3RUEsU0FBUzRpQixpQkFBaUJ2dEIsRUFBRTRCO01BQzFCLEdBQUlBLFdBQVc1QixRQUFTO01BQ3hCLElBQU8sR0FBRSxzQkFBdUJBLEVBQUc0QixHQUM1QixHQUFFLHNCQUF1QjVCLEVBQUc0QjtNQUNuQyxPQUFRMkwsVUFBVUQsRUFDcEI7SXNCOUpBLFNBQVNrZ0Isc0JBQXVCanJCLEVBQUVLLEdBQ2hDTCxXQUNBQSxPQUFLSyxFQUNMLFFBQ0Y7SU4rQ0EsU0FBUzZxQixrQkFBa0I1dEIsR0FBSyxXQUFTQSxDQUFHO0lIekM1QyxTQUFTNnRCLDJCQUNQLFFBQ0Y7SVQ4S0EsU0FBU0MsZ0JBQWdCOXRCLEdBQUssT0FBTyxXQUFZQSxFQUFJO0lPOUlyRCxTQUFTK3RCO01BQ1AsSUFBSTV0QixFQUFJO01BQ1JBO01BQ0FBO01BQ0EsUUFDRjtJWHFXQSxTQUFTNnRCLG1CQUFtQmhzQjtNQUMxQixHQUFHQSxRQUFTO01BQ1osV0FBV2lCLFFBQVFqQixXQUFXQSxJQUNoQztJNEJ4Y0EsU0FBU2lzQixnQkFBZ0I5dEIsRUFBR3FOLElBQUt4TDtNQUMvQixPQUFPLGVBQWUscUJBQXFCN0IsR0FBR3FOLElBQUl4TCxJQUNwRDtJQWRBLFNBQVNrc0IsY0FBY2xoQixPQUFPaEw7TUFDNUIsSUFBUyxLQUFFOEssaUJBQWlCRSxRQUNmLFNBQUU7TUFDZixHQUFHaEwsUUFBT0EsTUFBTW1zQixXQUFXeGhCO01BQzNCLEdBQUdBLGNBQWMzSyxNQUFNbXNCLFNBQVU7TUFIakMsSUFJSXBtQixJQUFNLGtCQUFrQi9GO01BQzVCLGVBQWUySyxZQUFZNUUsTUFBTS9GO01BQ2pDLE9BQU8sZ0JBQWdCLHFCQUFxQitGLE9BQU8vRixJQUNyRDtJTmtDQSxTQUFTb3NCLGFBQWNwdUI7TUFDckIsSUFBTSxFQUFFQSxTQUNGLE1BQU1vSCxNQUFNL0c7TUFDbEIsSUFBVSxJQUFGMEIsSUFBT0EsSUFBSTFCLEVBQUcwQixJQUFNRCxFQUFFQyxLQUFLL0IsRUFBRStCO01BQ3JDLE9BQU9ELENBQ1Q7SUtoQkEsU0FBU3VzQixtQkFBbUJydUIsRUFBRytCO01BQzdCLEdBQUdBLFNBQVMyYix1QkFBdUIzYixLQUFLL0I7T0FDdEM7TUFDRixJQUFJdUIsRUFBSSxjQUFjdkIsRUFBRytCO01BQ3pCLEdBQUlSLFFBQVMsT0FBT0E7TUFEcEIsSUFFSXdULEVBQUl4VDtNQUNSLEdBQUl3VCxhQUFhM04sTUFBTyxVQUFXLGFBQWEyTjtNQUNoRCxPQUFPeFQsQ0FDVDtJdkJrT0EsU0FBUytzQixpQkFBa0J0dUIsR0FBSyxPQUFPLFdBQVdBLEVBQUk7SVNnRnRELFNBQVN1dUIscUJBQXFCdmhCLE9BQU9sSixPQUFPM0MsT0FBT2E7TUFDakQsSUFBSTJLLEtBQU9HLGlCQUFpQkU7TUFDNUIsS0FBS0w7T0FBYTtNQURsQixJQUVJM0Q7TUFDSixHQUFHN0gsZUFBZSxxQkFBcUIyQyxXQUFXOUI7T0FDaERnSCxRQUFRbEY7O09BQ0wsQ0FDSGtGLFFBQVEsa0JBQWtCaEg7UUFDMUIsZ0JBQWdCOEIsT0FBTzNDLE9BQU82SCxRQUFRaEg7TUFQeEM7T0FTVyxPQUFFLHFCQUFxQmdIO09BQ3JCLFNBQUUsdUJBQXVCd2xCO09BQy9CLEdBQUU7TUFDVCxHQUFHRTtPQUNEL2hCLGVBQWE4aEI7O09BQ1YsQ0FDSDloQixlQUFhLGtCQUFrQitoQjtRQUMvQixjQUFlMWhCO1FBQ2ZMLGVBQWUsZ0JBQWdCK2hCO01BRWpDLFFBQ0Y7SUFJQSxTQUFTQyxlQUFlM2hCLE9BQU9sSixPQUFPM0MsT0FBT2E7TUFDM0MsT0FBTztlQUFxQmdMLE9BQU8scUJBQXFCbEosUUFBUTNDLE9BQU9hLElBQ3pFO0ljOVFBLFNBQVM0c0IsbUJBQW1CNXVCO01BQzFCLE9BQUdBLEVBQUV3dEIsMkJBQTJCMWlCOztrQkFHbkI5SyxFQUFFd3RCLHVCQUNqQjtJTi9EQSxTQUFTcUIsMkJBQTJCN2U7TUFDbEMsSUFBSW5GLEVBQUlwTDtNQUNSLFVBQVVvTDtPQUNSLEtBQU0sWUFBV0EsMEJBQTBCbEQ7TUFFN0MsVUFBVWtEO09BQWlDLENBQ3pDLEtBQU0sWUFBV0EseUNBQTBDbEQ7UUFDM0QsS0FBTSxZQUFXa0QseUNBQTBDbEQ7UUFDM0QsS0FBTSxZQUFXa0QsNENBQTZDbEQ7TUFFaEUsK0NBQ0Y7SUw5QkEsU0FBU21uQix1QkFBdUI3c0IsRUFBRWtFO01BQ2hDLGtCQUFrQmxFLFdBQVdrRSxLQUMvQjtJSHNaQSxTQUFTNG9CLG9CQUFvQm5zQixHQUFLLFFBQVM7SWExYTNDLFNBQVNvc0Isa0JBQWtCaFYsR0FBSUM7TUFDN0IsSUFBTyxHQUFFRCxVQUFjLEdBQUVDLFVBQ25CLEVBQUVnVixLQUFHQyxPQUNMLE1BQU05bkIsTUFBTS9HO01BQ2xCeUI7TUFIQSxJQUlNLElBQU07TUFDWixLQUFLQyxJQUFFa3RCLEdBQUdsdEIsSUFBS0QsRUFBRUMsS0FBR2lZLEdBQUdqWTtNQUN2QixLQUFLQSxJQUFFMUIsRUFBRTBCLElBQUlpQixJQUFLbEIsRUFBRUMsS0FBR2tZLEdBQUdqWDtNQUMxQixPQUFPbEIsQ0FDVDtJYjhLQSxTQUFTcXRCLDJCQUEyQm5pQixPQUFPL0s7TUFDekM2SyxpQkFBaUJFLGlCQUFpQi9LLEVBQ2xDLFFBQ0Y7SUdvSEEsU0FBU210QixhQUFhanZCO01BQ3BCO01BQ0EsT0FBTyxLQUFLLHdCQUF3QkEsR0FBSTtJakJ2RzFDLFNBQVNrdkIsZUFBZXJ2QixFQUFFdUIsR0FBSyxPQUFPLE1BQU1BLEVBQUc7SVMrRS9DLFNBQVMrdEIsaUNBQWtDMVU7TUFDekMsT0FBT3pPLHFCQUNUO0lJaVZBLFNBQVNvakIsMkJBQTRCeHNCLEVBQUc0aEI7TUFDdEMsT0FBTyxvQkFBcUIsZ0JBQWlCNWhCLEVBQUc0aEIsT0FDbEQ7SUVybEJBLFNBQVM2SyxxQkFBcUJ4ZixNQUFRLFFBQVU7SUs5QmhELFNBQVN5ZixxQkFBc0JDLE1BQU9DLE1BQU9DO01BQzNDLElBQUlDO01BQ0osU0FBU0MsU0FBVUY7UUFDakJEO1FBQ0EsR0FBSUQsYUFBYUMsVUFBVztRQUM1QixHQUFJQyxlQUFleG9CLFNBQVN3b0IsWUFBWUE7U0FBVyxPQUN6Q0E7b0JBR05GLFFBQ0FHLFlBQWFBLG9CQUFvQkQsV0FDakM7b0JBR0FELFFBQVMsU0FBU0MsS0FBTTs7WUFFeEJGO1lBQ0FHLFlBQWFBLGlCQUFpQkQ7WUFDOUIsSUFBVyxJQUFGN3RCLEVBQUk2dEIsZUFBZ0I3dEIsTUFBT0EsSUFBSyxTQUFVNnRCLElBQUk3dEI7O1NBRXBELEdBQUksaUJBQWlCNnRCO1VBQU0sQ0FDaENGO1dBQ0EsSUFBSXRzQixRQUFVLHNCQUFzQndzQjtXQUNwQyxVQUFVeHNCO1lBQXNCLFFBQzFCLEVBQUVBLFFBQVcsRUFBRVYsU0FBWSxJQUFLWCxJQUFJMUIsRUFBRzBCO2FBQ3pDOHRCLFlBQWFBLGlCQUFpQixhQUFhOXRCOztZQUN4QyxRQUNNLEVBQUVxQixRQUFXLEVBQUV0QixTQUFZLElBQUtDLElBQUkxQixFQUFHMEI7YUFDaEQ4dEIsWUFBYUEsaUJBQWlCL3RCLEVBQUVDOztVQUUvQixHQUFJLGtCQUFrQjZ0QjtXQUFNLENBQ2pDLElBQUlHLFFBQVUsdUJBQXVCSDtZQUNyQyxRQUFXLEVBQUVHLFFBQVcsRUFBRUEsZUFBa0IsSUFBS2h1QixJQUFJMUIsRUFBRzBCO2FBQ3REOHRCLFlBQWFBLGlCQUFpQixhQUFhOXRCOztXQUN4QyxVQUFXNnRCO1lBQWtCLFFBQ3ZCLEVBQUVBLElBQU8sRUFBRUEsV0FBYyxJQUFLN3RCLElBQUkxQixFQUFHMEI7YUFDOUM4dEIsWUFBYUEsaUJBQWlCLGFBQWE5dEI7O1lBQ3hDLEdBQUk2dEIsU0FBU0E7YUFBUSxDQUUxQkYsUUFDQUcsWUFBYUEsb0JBQW9CRDs7YUFDNUIsR0FBSUEsVUFBU0E7Y0FBSyxDQUV2QkY7ZUFDQSxJQUFJeHJCLEVBQUksb0JBQXFCLHlCQUEwQjByQjtlQUN2RCxJQUFXLElBQUY3dEIsSUFBT0EsT0FBUUEsSUFBSzh0QixZQUFhQSxpQkFBaUIzckIsRUFBRW5DOztjQUN4RCxHQUFHNnRCLE9BQU9BO2VBQWlCO2lCQUM3QjliLGdCQUFnQjhiOztpQkFBb0I5YixnQkFBZ0I4YjtnQkFBdUIsQ0FDNUUsSUFBSTN1QixFQUFJLGdCQUFnQjJ1QixzQkFBc0JBO2lCQUM5Q0MsWUFBYUEsb0JBQW9CNXVCLE1BR3ZDO01BQ0EsU0FBVTJ1QjtNQUNWLE9BQU9DLHNCQUNUO0luQnNyQkEsU0FBU0csa0JBQWtCMW9CLEdBQUlFLElBQzdCLE9BQU8saUJBQWlCRixHQUFHRSxHQUM3QjtJWXhIQSxTQUFTeW9CLDRCQUE2Qjl2QixFQUFHcU4sSUFBS3hMLElBQUtlLEVBQUc0aEI7TUFDcEQsSUFBSWhpQixFQUFJLGdCQUFpQkksRUFBRzRoQjtNQUM1QixHQUFJaGlCLFdBQVdYLElBQUs7TUFDcEIsZ0JBQWdCVyxJQUFNeEMsRUFBR3FOLElBQUs3SztNQUM5QixRQUNGO0lpQjFXQSxTQUFTdXRCLG9CQUFvQkMsS0FBS2hHLE9BQU9pRztNQUN2QztPQUFTLEtBQUUsdUJBQXVCRDtPQUMxQixJQUFFQTtPQUNELEtBQUUsdUJBQXVCQztPQUMxQjtPQUNGO09BQ0ZDO09BQ0FqRDtPQUFPa0Q7T0FBSzF0QjtNQUNoQixNQUFNMUMsSUFBSThCO09BQUksQ0FDWnF1QixNQUFNLFlBQVlud0I7UUFDbEIsR0FBR213QjtTQUFZLE9BQ05BOztTQUVKLENBQ0gsR0FBR253QixLQUFLOEI7V0FBSztVQUNicXVCLE1BQU0sWUFBWW53QjtVQUNsQixPQUFPbXdCO3NCQUVMaG9CLE9BQU9nb0IsSUFDUDs7Ozs7Ozs7Ozs7YUFHQXp0QixNQUFLeXRCO2FBQ0wsR0FBSXp0QixTQUFPdW5CO2NBQ1Q7YUFDRmlELFFBQVEsZUFBZWpELE9BQU92bkI7YUFDOUIwdEIsTUFBTSxlQUFlbkcsT0FBUXZuQjthQUM3QixHQUFJd3FCO2NBQ0Y7YUFDRi9rQixPQUFLLFdBQVcra0IsTUFBTWtEO2FBQ3RCO29CQUVBam9CLGNBQWdCZ29CO01BSXRCLE9BQU8sdUJBQXVCaG9CLElBQU07SWJLdEMsU0FBU2tvQixrQkFBbUJwd0I7TUFDMUI7TUFDQSxPQUFPLEtBQUssd0JBQXdCQSxHQUFJO0lOM1IxQyxTQUFTcXdCLFNBQVN4bEIsS0FBTUMsS0FBTUUsS0FBTUMsS0FBTXBKO01BQ3hDLElBQVUsSUFBRkQsSUFBT0EsSUFBSUMsSUFBS0QsSUFBSyxVQUNqQmtKLE9BQUtsSixLQUFLb0osVUFBVUMsT0FBS3JKO01BRXJDLFFBQ0Y7SVh3SkEsU0FBUzB1QixlQUFlendCLEVBQUV1QixHQUFLLE9BQU8sV0FBV0EsTUFBUTtJQStCekQsU0FBU212QixlQUFnQjF3QixFQUFHdUIsR0FBSyxPQUFPLE1BQU1BLEVBQUc7SXdCM0lqRCxTQUFTb3ZCLGdDQUFnQ0MsSUFBSzVYLEtBQU02WCxPQUFRM1gsS0FBTWxYO01BQ2hFLFNBQVM0dUI7T0FDUDs7TUFDRixHQUFHNXVCLFNBQVU7TUFDYixJQUFJaUosS0FBTyxXQUFXK047TUFDdEIsR0FBRy9OLE9BQU9qSixNQUFNNHVCLGdCQUFnQjtNQUdoQyxHQUFHMVgsT0FBT2xYLE1BQU0scUJBQXFCNnVCLFFBQVE7TUFKN0MsSUFPSTFYLE1BQVEsZUFBZWxPLEtBQU1BLE9BQUtqSjtNQUN0QyxnQkFBZ0Isb0JBQW9CbVgsU0FBVzBYLE9BQVEzWCxLQUFNbFg7TUFDN0QsUUFDRjtJckJ0RUEsU0FBUzh1QiwwQkFBMEJ4cUIsR0FBR3ZEO01BQ3BDcUQsa0JBQWtCLHVCQUF1QkUsT0FBT3ZELEVBQ2hELFFBQ0Y7SUlpT0EsU0FBU2d1Qix3QkFBd0I1ckIsS0FBSy9CO01BQ3BDLEdBQUczRDtPQUNELDRCQUE0QjBGLEtBQUsvQjs7T0FDOUIsQ0FDSCxLQUFJM0QsdUJBQXdCQTtRQUM1QixrQ0FBa0MwRixhQUFhL0I7TUFFakQsUUFDRjtJTjRrQkEsU0FBUzR0QixrQkFBa0I3d0IsR0FDekIsT0FBTyx3QkFBd0JBLEVBQ2pDO0lrQjEwQkEsU0FBUzh3Qix5QkFBMEI5d0I7TUFDakMsSUFBTSxJQUFTLElBQUUsc0JBQXNCQSxHQUFTLFFBQVc7TUFDM0QsR0FBSTZCO09BQVMsT0FDSCx1QkFBdUI3QixFQUFFNEI7aUJBQ3hCQSxJQUFLYixXQUFXLGNBQ2hCYSxJQUFLYixTQUFVO01BRzFCLEdBQUlhLFFBQVFDLE9BQU8sdUJBQXVCN0IsRUFBRzRCO09BQzNDLE9BQVEsdUJBQXVCNUIsRUFBRzRCOztpQkFDZithLFVBQVcvYSxPQUFROztpQkFDbkIrYSxTQUFXL2EsT0FBUTs7aUJBQ25CK2EsU0FBVy9hLE9BQVE7O2lCQUNuQkEsT0FBUTs7TUFFN0IsUUFBUUEsRUFBR2IsS0FBTTRiLEtBQ25CO0lBR0EsU0FBU29VLGlCQUFpQnR1QjtNQUN4QixHQUFJQSxXQUFXQSxRQUFVLE9BQU9BO01BQ2hDLEdBQUlBLFdBQVdBLFFBQVUsT0FBT0E7TUFDaEMsR0FBSUEsV0FBV0EsU0FBVSxPQUFPQTtNQUNoQyxVQUNGO0luQmlRQSxTQUFTdXVCLHFCQUFxQmh4QjtNQUM1QjtPQUFNLEVBQUUseUJBQTBCQTtPQUM1QixFQUFFQztPQUFXLEtBQUVBO09BQVcsS0FBRUE7T0FDdkIsT0FBRSxvQkFBb0IwYztPQUNuQjtRQUNWLElBQUlsYywyQ0FBNkN3d0I7T0FDL0MsRUFBRSx1QkFBdUJqeEIsRUFBRzRCO09BQzVCLEVBQUUsaUJBQWlCYTtNQUN6QixHQUFJOEMsU0FBU0EsS0FBS29YLEtBQU07TUFQeEIsSUFRSXpVLElBQU0sb0JBQW9CM0M7TUFDOUI7T0FBUyxDQUNQM0Q7UUFDQWEsSUFBSSx1QkFBdUJ6QyxFQUFHNEI7UUFDOUIsR0FBSWEsUUFBUztRQUNiOEMsSUFBSSxpQkFBaUI5QztRQUNyQixHQUFJOEMsU0FBU0EsS0FBS29YLEtBQU07UUFFeEIsR0FBSSxlQUFldVUsVUFBV2hwQixLQUFNO1FBQ3BDM0MsSUFBSSxvQkFBb0JBO1FBQ3hCMkMsTUFBTSxlQUFlLGVBQWUrb0IsT0FBUS9vQixLQUFNM0M7UUFFbEQsR0FBSSxlQUFlMkMsSUFBSzNDLEdBQUk7TUFFOUIsR0FBSTNELEtBQUssc0JBQXNCNUIsR0FBSTtNQUNuQyxHQUFJMmMsY0FBYyxtQkFBbUJsYyxvQkFBdUJ5SDtPQUMxRDtNQUNGLEdBQUluSCxTQUFVbUgsTUFBTSxlQUFlQTtNQUNuQyxPQUFPQSxHQUNUO0k4QmxHQSxTQUFTaXBCLGtCQUFrQm5mLEdBQUloUyxFQUFHNkg7TUFDaEMsR0FBR0EsV0FBV0EsTUFBTSxzQkFBc0I3SDtPQUN4QztNQUNGLE1BQU82SCxPQUFPLHNCQUFzQjdIO09BQUksQ0FDdEMsSUFBSWtJLElBQU0sU0FBUzhKLEdBQUloUyxFQUFHNkgsT0FDMUIsR0FBSUssSUFBSyxPQUFPQSxJQUNoQkw7TUFHRixVQUNGO0lDbFBBLElBQUl1cEIsOEJBQWdDelk7SUowRnBDLFNBQVMwWSxlQUFnQnh2QixJQUFLeXZCO01BQzVCLEdBQUl6dkIsUUFBUztNQUNiLElBQVEsSUFBRUEsWUFDSixNQUFNb0YsTUFBTXBGO01BQ2xCVTtNQUNBLElBQVcsSUFBRlgsSUFBT0EsSUFBSUMsSUFBS0QsSUFBS1csRUFBRVgsS0FBSzB2QjtNQUNyQyxPQUFPL3VCLENBQ1Q7SWJnTUEsU0FBU2d2QixnQkFBZ0Ixa0IsT0FBT2hGO01BQzlCLElBQUkyRSxLQUFPRyxpQkFBaUJFO01BQzVCLEdBQUlMLGVBQWV4SyxLQUFNO01BQ3pCd0ssY0FBYzNFO01BQ2QsUUFDRjtJUGxHQSxTQUFTMnBCLHdCQUF3QnhzQjtNQUMvQjtPQUFTLEtBQUUsa0JBQWtCQTtPQUN2QixFQUFFLG9CQUFvQko7T0FDdEIsTUFBTXFDLE1BQU10RjtNQUNsQnpCO01BQ0EsSUFBUyxJQUFEMEIsSUFBSUEsSUFBRUQsU0FBU0MsSUFDckIxQixFQUFFMEIsU0FBTyx1QkFBdUJELEVBQUVDO01BQ3BDLE9BQU8xQixDQUNUO0lPc0xBLFNBQVN1eEIsb0JBQXFCNWtCLE9BQU9wSztNQUNuQyxJQUFJekMsRUFBSSx1QkFBdUIsb0JBQW9CeUM7TUFDbkQsZUFBZW9LLE9BQU83TTtNQUN0QixRQUNGO0lMekpBLFNBQVMweEIsOEJBQWlDLE9BQU90VSxzQkFBNEI7SWNsTzdFLFNBQVN1VSxrQkFBbUI5eEIsR0FBSyxVQUFTQSxhQUFhb0gsTUFBUTtJVHVQL0QsU0FBUzJxQixtQkFBb0Iva0I7TUFDM0IsSUFBSUwsS0FBT0csaUJBQWlCRTtNQUM1Qix5QkFBeUJBO01BQ3pCLEdBQUlMLGVBQWUsbUJBQ2pCO01BSEYsSUFJSXRFLElBQU0sbUJBQW1Cc0U7TUFDN0JBO01BQ0EsT0FBT3RFLEdBQ1Q7SVNqSkEsU0FBUzJwQix1QkFBdUJqb0IsRUFBRWhJLEVBQUVnQixHQUFLLE9BQU9nSCxFQUFFaEksU0FBT2dCLENBQUU7SU55QzNELFNBQVNrdkIsWUFBWWp5QjtNQUNuQixJQUFJQSxFQUFJLHdCQUF3QkE7TUFFaEMsS0FBSTtPQUFtRTs7O1NBQ2pDQTs7O01BR3RDLE9BQU8sS0FBS0EsRUFDZDtJWmRBLFNBQVNreUIsaUJBQWlCbHlCLEdBQ3hCLE9BQU8sV0FBV0EsRUFDcEI7SXVCdERBLFNBQVNteUIsb0JBQW9CcGIsSUFBS0M7TUFDaENBLElBQUl3Vyx5QkFBeUJ6VyxJQUFJeVcsdUJBQ2pDLFFBQ0Y7SXpCMUNBLFNBQVM0RSxrQkFBa0J4dkIsR0FBSyxVQUFTQSxVQUFVQSxRQUFVO0lrQmlLN0QsU0FBU3l2QixXQUFZcnlCLEVBQUd1QixHQUFLLFVBQVMsaUJBQWlCdkIsRUFBRXVCLGNBQWdCO0lTNkN6RSxTQUFTK3dCLGlCQUFpQm5nQixHQUFHaFMsRUFBRTZIO01BQzdCLEdBQUdBLFdBQVdBLE1BQU0sc0JBQXNCN0g7T0FDeEM7TUFDRixJQUFJa0ksSUFBTSxTQUFTOEosR0FBSWhTLEVBQUc2SDtNQUMxQixPQUFJSyxJQUFZQSxPQUVsQjtJckI5RUEsU0FBU2txQjtNQUNQLEdBQUc5eUI7T0FBbUIsVUFDVkE7UUFBaUQsQ0FFekQsSUFBSXFDLE9BQVFyQztTQUNaLGtDQUFrQ3FDO1NBQ2xDLFVBQVVBOztRQUNMLEdBQUdyQztTQUE2QyxDQUVyRDtXQUFTLEtBQUU7V0FDTCxPQUFNQSx3QkFBdUIreUI7VUFDbkMsVUFBVTF3QjtNQUdkLElBQVEsSUFBRSxJQUFLaU4saUJBQ1QsRUFBRTBqQixtQkFBZTtNQUN2QixVQUFVenlCLEVBQ1o7SU0vTEEsU0FBUzB5QiwyQ0FBOEMsUUFBVTtJQ3dZakUsU0FBU0MsY0FBY3JsQixHQUFJQyxHQUFJaEcsSUFDN0IsT0FBTyxPQUFPLFdBQVdnRyxHQUFHaEcsS0FDOUI7SVIzWEEsU0FBU3FyQixjQUFjNXlCLEdBQUksT0FBT0EsQ0FBRTtJUTJZcEMsU0FBUzZ5QixvQkFBb0J2bEIsR0FBSUMsR0FBSXhLO01BQ25DLElBQUl5SyxJQUFNLFVBQVVEO01BQ3BCLEdBQUdDLFdBQVdGLGVBQWdCO01BQzlCLE9BQU9FLFFBQVF6SztNQUNmLE9BQU95SyxRQUFReks7TUFDZixRQUNGO0lGcFNBLElBQUkrdkIseUJBQTJCeGE7SUd0SS9CLFNBQVN5YSxlQUFlaHBCLEVBQUU5SCxVQUFZOEgsRUFBRTlILEdBQUksUUFBUTtJRW1DcEQsU0FBUyt3QixtQkFBb0I3eUI7TUFDM0I7T0FBTSxFQUFFLHlCQUEwQkE7T0FDNUIsRUFBRUM7T0FBVyxLQUFFQTtPQUFXLEtBQUVBO09BQzFCLElBQUUsc0JBQXNCRDtPQUNsQjtPQUNSLEVBQUc0QixJQUFJQyxJQUFLLHVCQUF1QjdCLEVBQUc0QjtPQUN0QyxFQUFFLGlCQUFpQmE7TUFDekIsR0FBSThDLFNBQVNBLEtBQUtvWCxLQUFNO01BTnhCLElBT0l6VSxJQUFNM0M7TUFDVixJQUFLM0QsSUFBSUEsSUFBRUMsSUFBSUQ7T0FBSyxDQUNsQmEsSUFBSSx1QkFBdUJ6QyxFQUFHNEI7UUFDOUIsR0FBSWEsUUFBUztRQUNiOEMsSUFBSSxpQkFBaUI5QztRQUNyQixHQUFJOEMsU0FBU0EsS0FBS29YLEtBQU07UUFDeEJ6VSxNQUFNeVUsT0FBT3pVLE1BQU0zQztRQUNuQixHQUFJMkMsTUFBTWdwQixVQUFXO01BRXZCLEdBQUl0dkIsS0FBS0MsSUFBSztNQUlkcUcsTUFBTW5ILE9BQU9tSDtNQUNiLEdBQUt5VSxlQUFpQnpVLFlBQVlBLElBRWhDO01BQ0YsT0FBT0EsT0FDVDtJWnVCQSxTQUFTNHFCO01BQ1AsSUFBSUM7TUFDSixJQUFVLElBQUZueEIsSUFBT0EsSUFBSXlJLHdCQUF5QnpJO09BQUksQ0FDOUMsSUFBSStGLElBQU1vckI7UUFDVkEsVUFBVyx1QkFBdUIxb0IsaUJBQWlCekksU0FBVStGO01BRS9ELE9BQU9vckIsSUFDVDtJTXBHQTtLQUFJQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SVVnSEosU0FBU0MsbUJBQW1CcnBCLEVBQUVoSSxHQUFLLE9BQU9nSSxFQUFFaEksTUFBSztJTitMakQsU0FBU3N4QixlQUFnQnJ6QixFQUFHdUIsR0FBSyxVQUFTdkIsS0FBS3VCLEVBQUk7SU9yVG5ELFNBQVMreEIseUJBQXlCNVksSUFDaEMsT0FBT0EsT0FDVDtJWnlQQSxTQUFTNlksZ0JBQWdCQyxJQUFJQyxHQUFHQyxHQUFHQyxHQUFHQyxHQUFHNVosR0FBR0M7TUFDMUMsTUFBTUQsS0FBR0MsR0FBSUE7TUFDYkQ7TUFDQUM7TUFDQTtPQUFRO09BQUk2WjtPQUFLQztPQUFLQztPQUFVQztPQUN0QjtPQUNGLEtBQUtoYSxLQUFLRCxNQUFNelosWUFBWXF6QixLQUFHRCxXQUFVTztPQUN2QyxPQUFHamEsS0FBS0QsTUFBTXpaLFVBQVUwVDtPQUM1QixFQUFFK0YsS0FBS3paO01BQ2IsSUFBVSxJQUFEeUMsSUFBSUEsS0FBR2lSLElBQUlqUjtPQUFJLENBQ3RCOHdCOztRQUFPTDs7UUFBTUc7O1FBQUssU0FBUzd4Qjs7UUFBTSxTQUFTOHhCLE1BQU10ekI7O1FBQVlvekI7O1FBQUssU0FBUzV4Qjs7UUFBTSxTQUFTOHhCLE1BQU10ekI7UUFDL0Z1ekIsT0FBTztRQUNQQzs7UUFBT0w7O1FBQU1DOztRQUFLLFNBQVM1eEI7O1FBQU0sU0FBUzh4QixNQUFNdHpCOztRQUFZcXpCOztRQUFLLFNBQVM3eEI7O1FBQU0sU0FBUzh4QixNQUFNdHpCO1FBQy9Gd3pCLE9BQU87UUFDUCxHQUFJL3dCO1NBQU0sV0FDRzh3QixLQUFNQzs7U0FDWixHQUFJQyxhQUFXRixRQUFRRyxhQUFXRixLQUFLLFdBQ2pDRCxLQUFNQztRQUVuQkMsWUFBVUY7UUFDVkcsWUFBVUY7UUFDVmh5QixLQUFJb3lCO01BRU4sUUFDRjtJQTRDQSxTQUFTQyxpQkFBaUJwMEIsRUFBRXVCLEVBQUVxeUIsR0FBR0QsR0FBRzNaLEdBQUdDO01BQ3JDLElBQUk5WixFQUFJO01BQ1I7TUFDQSxnQkFBZ0JBLFVBQVVILEVBQUVHLFdBQVdvQixFQUFFcXlCLEdBQUdELEdBQUczWixHQUFHQztNQUNsRDtNQUNBLFFBQ0Y7SUkrTUEsU0FBU29hLGNBQWMvbUIsR0FBSW1MO01BQ3pCQSxPQUFPLG1CQUFtQkE7TUFDMUIsSUFBYSxTQUFFQSxZQUNMLFNBQ0csWUFDVGpMO01BRUosR0FBSThtQixXQUFXaG5CO09BQ2I7TUFHRixHQUFJQTtPQUFnQixDQUNsQixJQUFXLElBQUZ2TCxJQUFPQSxJQUFJdXlCLFNBQVV2eUIsSUFDNUI0ZSxNQUFNNWUsS0FBSzBXLEtBQUsxVztRQUNsQixLQUFPQSxJQUFJdUwsZUFBZ0J2TCxJQUN6QjRlLE1BQU01ZTtRQUNSd3lCLFdBQVcsY0FBY0Q7O09BQ3BCLENBQ0wsSUFBVyxJQUFGdnlCLElBQU9BLElBQUl1eUIsU0FBVXZ5QjtTQUM1QjRlLE1BQU1yVCxpQkFBaUJnbkIsV0FBV3Z5QixLQUFLMFcsS0FBSzFXO1FBQzlDLElBQVcsSUFBRkEsSUFBT0EsSUFBSXVMLGlCQUFpQmduQixTQUFVdnlCLElBQzdDNGUsTUFBTTVlO1FBQ1J3eUIsV0FBVyxnQkFBaUJqbkIsaUJBQWlCZ25CO01BRS9DOW1CLE1BQU0sVUFBVW1UO01BdEJoQjtPQXVCUyxLQUFFLGlCQUFpQjRUO09BQ1AsaUJBQUUsNkJBQTZCam5CO09BQ3ZDO1FBQUU7VUFBaUJFLE1BQU1pRixrQkFBbUJqRixNQUFNNEQsUUFBUXFCO01BQ3ZFLE9BQU8sc0JBQXNCbkYsUUFBU0EsVUFBV2luQixTQUFVbEosU0FDN0Q7SUgvS0EsU0FBU21KLHVCQUF3QnIwQixFQUFHcU47TUFDbEMsU0FBU2luQixNQUFNdDBCLEVBQUU0QjtRQUNmLE9BQVEsc0JBQXNCNUIsRUFBRzRCOzs7O2VBQzlCLHNCQUFzQjVCLEVBQUc0Qjs7OztlQUN6QixzQkFBc0I1QixFQUFHNEI7Ozs7ZUFDMUIsc0JBQXNCNUIsRUFBRzRCLE1BQzdCO01BQ0EsR0FBSSxNQUFNNUIsRUFBR3FOO09BQ1g7TUFDRixPQUFRLE1BQU1yTixFQUFHcU4sUUFDbkI7SUMvSkEsU0FBU2tuQixpQkFBa0IxbkI7TUFDekIsSUFBUyxLQUFFRixpQkFBaUJFLFFBRXBCLElBQUU7TUFDVixlQUFlTCxZQUFZNUU7TUFIM0IsSUFNUSxJQUFFLHVCQUF3QkEsWUFFMUIsSUFBRSxrQkFBa0IvRjtNQUM1QixlQUFlMkssWUFBWTVFLE1BQU0vRjtNQVRqQyxJQVdXLFdBQ0gsSUFBRSw0QkFBNEIrRixJQUFLNUc7TUFDM0N3TCxjQUFjQSxjQUFjeEw7TUFDNUIsT0FBT2tILEdBQ1Q7SUVzRUEsU0FBU3NzQixhQUFhcm5CLElBQ3BCLE9BQU9BLE9BQ1Q7SUNySkEsU0FBU3NuQixpQkFBaUIzeUIsRUFBR0g7TUFDM0IsT0FBUUE7ZUFDQSxPQUFPO2VBQ1AsT0FBTyxFQUFHQTtlQUNWLE9BQU8sRUFBR0EsS0FBS0E7ZUFDZixPQUFPLEVBQUdBLEtBQUtBLEtBQUtBO2VBQ3BCLE9BQU8sRUFBR0EsS0FBS0EsS0FBS0EsS0FBS0E7ZUFDekIsT0FBTyxFQUFHQSxLQUFLQSxLQUFLQSxLQUFLQSxLQUFLQTtlQUM5QixPQUFPLEVBQUdBLEtBQUtBLEtBQUtBLEtBQUtBLEtBQUtBLEtBQUtBO2VBQ25DLE9BQU8sRUFBR0EsS0FBS0EsS0FBS0EsS0FBS0EsS0FBS0EsS0FBS0EsS0FBS0E7O01BRWhELE9BQU8sUUFBUUssS0FBTSxtQkFBbUJMLEdBQzFDO0lGM0lBLFNBQVMreUIsb0JBQW9CQyxNQUFRLFFBQVU7SUV6Qy9DLFNBQVNDLGtCQUFtQjl5QixHQUFLLE9BQU8sR0FBSztJTnFVN0MsU0FBUyt5QixtQkFBbUJocUIsS0FBTUMsS0FBTUUsS0FBTUM7TUFDNUMsR0FBR0osVUFBVUMsUUFBUUUsVUFBVUMsTUFBTztNQUN0QyxHQUFHSixVQUFVQyxRQUFRRSxVQUFVQyxNQUFPO01BQ3RDLFFBQ0Y7SUdoSEEsU0FBUzZwQixjQUFlam9CLE9BQVE3TSxFQUFHNEIsRUFBRzFCO01BQ3BDLElBQVMsS0FBRXlNLGlCQUFpQkUsUUFDckIsR0FBRSxxQkFBcUJMO01BQzlCLEdBQUl1aUIsV0FBV3ZpQixlQUFleEssS0FBTStzQixLQUFLLHFCQUFxQnZpQjtNQUM5RCxHQUFJdWlCLEtBQUs3dUIsRUFBR0EsSUFBSTZ1QjtNQUNoQixlQUFldmlCLFlBQWF4TSxFQUFHNEIsRUFBRzFCO01BQ2xDc00sZUFBZXRNO01BQ2YsT0FBT0EsQ0FDVDtJRjZPQSxTQUFTNjBCLG1CQUFtQkM7TUFDMUI7c0VBQ0Y7SUFQQSxTQUFTQyx3QkFBd0IsUUFBUTtJWTNkekMsU0FBU0Msd0JBQXdCcDBCLEVBQUd5WjtNQUNsQyxPQUFPLHdCQUF3QnpaLEVBQUV5WixRQUNuQztJQ29CQSxTQUFTNGEsd0JBQTJCLFFBQVU7SWpCZDlDLFNBQVNDLFlBQWE1eUI7TUFDcEI7T0FBTSxNQUFNb00sS0FBTXBNO09BQ1IsTUFBRTtPQUNLLGFBQUUsSUFBS29NLEtBQUssU0FBUztPQUM5QixJQUFFLFlBQVkwUyxRQUFRQztNQUM5QjtjQUFnQjtjQUFtQjtjQUFtQjtjQUN6QztjQUFnQjtjQUFpQjtjQUNqQztjQUFlQzt3QkFFOUI7SUM2T0EsU0FBUzZUO01BQ1AsVUFBVyxzQ0FDYjtJQVVBLFNBQVNDO01BQ1AsVUFBVyx1QkFBdUJsWSxjQUNwQztJRHpRQSxTQUFTbVksWUFDUCxPQUFPLFdBQVcsb0JBQ3BCO0lNNEZBLFNBQVNDO01BQ1AsSUFBSXQxQjtNQUNKLElBQVUsSUFBRnVDLElBQU9BLElBQUlrSyx3QkFBeUJsSztPQUFJO1NBQzNDa0ssaUJBQWlCbEs7O1NBQU1rSyxpQkFBaUJsSzs7U0FBYWtLLGlCQUFpQmxLO1FBQ3ZFdkMsT0FBS3lNLGlCQUFpQmxLLE1BQU12QztNQUVoQyxPQUFPQSxDQUNUO0lUZ0xBLFNBQVN1MUIsaUJBQWtCNTFCLEdBQUssT0FBTyxXQUFXQSxFQUFJO0ltQnhRdEQsU0FBUzYxQiwwQkFBMEJDO01BQ2pDLElBQUl0SixRQUFTL3NCLHVCQUFzQnEyQjtNQUNuQyxPQUFPLDRCQUE4QnRKLFdBQVlBLEdBQ25EO0lMbUZBLFNBQVN1SixTQUFTLzFCLEVBQUV1QixHQUNsQixHQUFJQSxPQUFRLHlCQUNaLE9BQU92QixJQUFFdUIsQ0FDWDtJSGxGQSxTQUFTeTBCLGVBQ1AsUUFDRjtJY3NQQSxTQUFTQyxnQkFBZ0I5akIsR0FBR2hTLEVBQUU2SDtNQUM1QixHQUFHQSxXQUFXQSxNQUFNLHNCQUFzQjdIO09BQ3hDO01BQ0YsSUFBSWtJLElBQU0sU0FBUzhKLEdBQUloUyxFQUFHNkg7TUFDMUIsT0FBSUssSUFBWUEsT0FFbEI7SWpCbk1BLFNBQVM2dEIsZ0JBQWlCeGIsR0FBSTNZLEdBQUtyQyxTQUFTZ2IsR0FBSWhiLFNBQVNxQyxDQUFHO0lBQzVEbTBCOzt1QkFDdUIsT0FBTyxjQUFjeDJCLE9BQU9BLFNBQTFDO3VCQUNjLE9BQU8sY0FBY0EsT0FBT0EscUJBQTFDOzs7T0FFTCxJQUFNLEVBQUVBLE9BQVUsRUFBRUE7T0FDcEJBLFNBQVNxQztPQUNULE9BQVEsY0FBYzVCLEVBQUU0QixVQUFXLGNBQWM1QixFQUFFNEIsTUFIN0M7OztPQU1OLElBQU0sRUFBRXJDLE9BQVUsRUFBRUE7T0FDcEJBLFNBQVNxQztPQUNULE9BQVEsY0FBYzVCLEVBQUU0QixpQkFBa0IsY0FBYzVCLEVBQUU0QixNQUhwRDs7O09BTU4sSUFBTSxFQUFFckMsT0FBVSxFQUFFQTtPQUNwQkEsU0FBU3FDO09BQ1QsUUFBUyxjQUFjNUIsRUFBRTRCOzs7O2VBQWUsY0FBYzVCLEVBQUU0Qjs7OztlQUMvQyxjQUFjNUIsRUFBRTRCOzs7O2VBQWMsY0FBYzVCLEVBQUU0Qjs7ZUFKakQ7OztPQU9OLElBQU0sRUFBRXJDLE9BQVUsRUFBRUE7T0FDcEJBLFNBQVNxQztPQUNULE9BQVEsY0FBYzVCLEVBQUU0Qjs7OztjQUFlLGNBQWM1QixFQUFFNEI7Ozs7Y0FDcEQsY0FBYzVCLEVBQUU0Qjs7OztjQUFjLGNBQWM1QixFQUFFNEIsTUFKM0M7O2NBTVVDO09BQ2hCLElBQU0sRUFBRXRDLE9BQ0EsUUFBTTBILE1BQU1wRjtPQUNwQixJQUFVLElBQUZnQixJQUFPQSxJQUFJaEIsSUFBS2dCLElBQUksSUFDdEJBLEtBQUssY0FBY3RELE9BQVFxQyxJQUFFaUI7T0FFbkN0RCxTQUFTcUMsSUFBSUM7T0FDYixPQUFPLHFCQUFxQjBULElBUHRCO0lEeVRWLFNBQVN5Z0IsbUJBQW1CenFCO01BQzFCLElBQUk0RjtNQUNKLElBQVMsSUFBRHZQLElBQUtBLElBQUUySixVQUFVM0o7T0FBSSxDQUMzQnVQLEtBQUt2UDtRQUNMLElBQVMsSUFBRGlCLElBQUtBLElBQUUwSSxTQUFTMUk7U0FBSSxDQUMxQjtXQUFNLEVBQUVqQixLQUFHMkosZ0JBQWUxSTtXQUNwQixFQUFFMEksUUFBUTNCO1dBQ1YsRUFBRTJCLFFBQVEzQjtXQUNWLEVBQUUyQixRQUFRM0I7VUFDaEJ1SCxLQUFLdlAsT0FBS2lCLFVBQVE1QyxZQUFZeUssVUFBVW5JO01BRzVDLE9BQU80TyxJQUNUO0lJM0RBLFNBQVM4a0Isb0JBQW9COW9CLEdBQUl2TDtNQUMvQixJQUFJeUwsSUFBTSxVQUFVLG1CQUFtQnpMLElBQ3ZDLE9BQU8sT0FBT3lMLElBQ2hCO0lTeFdBLFNBQVM2b0IsK0JBQWtDLFFBQVU7SXBCb1pyRCxTQUFTQyxrQkFBbUIzeUIsSUFBSzNEO01BQy9CLFNBQVN1MkIsUUFBUXYyQixFQUFFdzJCO1FBQ2pCLEdBQUksU0FBU3gyQjtTQUFVLE9BQ2QsVUFBVXcyQjs7U0FDWixDQUNMLElBQUk3dUIsRUFBSSxTQUFTO1VBQ2pCLEdBQUlBO1dBQVEsQ0FDVkE7WUFDQTNILEtBQUssWUFBWTJIO1lBQ2pCM0gsS0FBSyxJQUFLb0gsTUFBTU87WUFDaEIsR0FBRzZ1QixPQUFRLElBQ0x4MkIsVUFBVSxJQUFLb0gsTUFBTW92QjtZQUUzQixPQUFPeDJCOztXQUVKLE9BQU8sVUFBVXcyQixJQUUxQjtNQUNBLElBQUlyMkIsRUFBSyxFQUFFLGtCQUFrQndELEtBQ3BCLEtBQUcxQixhQUFjQTtNQUMxQixHQUFJakMsU0FBVUEsY0FBWUEsT0FBTW1RLFNBQVcsQ0FBRWxPLGFBQWFqQyxNQUFLQTtNQUMvRCxHQUFJLE1BQU1BO09BQUksQ0FBRUcsVUFBVzhCOztPQUN0QixLQUFLLFNBQVNqQztRQUFJLENBQUVHLFVBQVc4Qjs7UUFFbEMsT0FBUUE7O1dBRU4sSUFBTSxFQUFFLGdCQUFnQncwQixNQUVsQixFQUFFdDJCO1dBQ1IsR0FBSSxTQUFTNEI7WUFDWDVCLElBQUksVUFBWTRCLGVBQWUsUUFBU0E7V0FDMUM7bUJBRUE1QixJQUFJLFFBQVFILEVBQUd5MkIsTUFBTzs7V0FFdEJBLE9BQU9BLEtBQUtBO1dBQ1p0MkIsSUFBSSxnQkFBZ0JzMkI7V0FDcEIsSUFBTSxFQUFFLGVBQ0EsTUFBRyxRQUFRenpCO1dBQ25CLEdBQUl5TixhQUFZelEsYUFBYSxzQkFBc0J5MkI7WUFBTSxDQUV2RCxJQUFJMTBCLEVBQUlpQjthQUFPLE1BQU8sU0FBU2pCLFVBQVdBO2FBQzFDLEdBQUksU0FBU0EsVUFBV0E7YUFDeEI1QixJQUFJLFVBQVc0QixTQUFTLFFBQVFpQjthQUNoQ2pCLElBQUk1QjthQUNKLEdBQUksU0FBUzRCO2NBQ1g1QixJQUFJLFVBQVk0QixlQUFlLFFBQVNBO2FBQzFDOztZQUNLLENBQ0wsSUFBSW1DLEVBQUl1eUI7YUFDUixHQUFJaG1CO2NBQVMsQ0FBRXZNLEtBQUt1TSxRQUFTdFEsSUFBSSxVQUFVK0Q7O2NBQ3RDLE1BQU8vRCxJQUFJLFVBQVUrRCxHQUFJL0QsV0FBV3MyQixTQUFVdnlCO2FBQ25ELEdBQUlBO2NBQUcsQ0FFTCxJQUFJbkMsRUFBSTVCO2VBQWMsTUFBTyxTQUFTNEIsVUFBV0E7ZUFDakQsR0FBSSxTQUFTQSxVQUFXQTtlQUN4QjVCLElBQUksVUFBVzRCO1dBR25COztNQUVKLE9BQU8sdUJBQXVCRSxFQUFHOUIsRUFDbkM7SUVuVkEsU0FBU3UyQixvQkFBb0J2eEIsS0FBS2xEO01BQ2hDLElBQVMsS0FBRSxlQUFla0QsTUFDakIsS0FBRSxvQkFBb0I7TUFDL0IsNEJBQTRCQSxnQkFBZ0JpRCxhQUFhakQsS0FBS2xEO01BQzlELFFBQ0Y7SWlCNUdBLFNBQVMwMEIsNkJBQTZCL0YsSUFBSzVYLEtBQU1DLElBQUtDLEtBQU1sWDtNQUMxRCxTQUFTNHVCO09BQ1A7TUFDRixTQUFTM1g7T0FDUDtNQUNGLEdBQUdqWCxTQUFVO01BQ2IsSUFBUyxLQUFFLFdBQVdnWCxNQUNiLEtBQUUsV0FBV0U7TUFDdEIsR0FBR2pPLE9BQU9qSixNQUFNNHVCLGdCQUFnQjtNQUdoQyxHQUFHeGxCLE9BQU9wSixNQUFNaVgsZ0JBQWdCO01BTGhDLElBUUlFLE1BQVEsa0JBQWtCbE8sS0FBS0EsT0FBS2pKO01BQ3hDLGFBQWFtWCxNQUFNRDtNQUNuQixRQUNGO0lPekRBLElBQUkwZCxpQ0FBbUNEO0k5QjZ3QnZDLFNBQVNFLHFCQUFxQnZ2QixHQUFJRSxJQUNoQyxPQUFPLG9CQUFvQkYsR0FBR0UsR0FDaEM7SUF2TkEsU0FBU3N2Qix3QkFBd0J4dkIsR0FBSUU7TUFDbkMsT0FBTyxxQkFBcUJBLEdBQUlGLEdBQ2xDO0lrQjdkQSxTQUFTeXZCLFNBQVMvMkIsRUFBRXVCO01BQ2xCLEdBQUlBLE9BQVEseUJBQ1osT0FBUXZCLElBQUV1QixLQUNaO0lTaUNBLFNBQVN5MUIsd0JBQXdCaDNCO01BQy9CLE9BQUdBLEVBQUV3dEIsMkJBQTJCMWlCOztrQkFHbkIsYUFBYTlLLEVBQUV3dEIsd0JBQzlCO0liaEdBLFNBQVN5SixtQkFBbUJDLEtBQUtDLFdBQVdDLFNBQzFDLFFBQ0Y7SU5vSEEsU0FBU0Msa0JBQW1CdjFCLEdBQzFCLFVBQVc2VixhQUFjQSxVQUMzQjtJUTdCQSxTQUFTMmYsZ0JBQWdCdDNCLEdBQUssU0FBUUEsQ0FBRztJTHNVekMsU0FBU3UzQixxQkFBcUJ2M0IsRUFBRXVCO01BQzlCLElBQUlwQixFQUFJLG9CQUNSLE9BQU8sMEJBQTBCSCxFQUFFdUIsRUFDckM7SWdCOVdBLElBQUlpMkIsdUJBQXlCbko7SVA2SjdCLFNBQVNvSixjQUFlejNCLEVBQUd1QixHQUFLLFVBQVMsaUJBQWlCdkIsRUFBRXVCLGFBQWU7SUkvTjNFLFNBQVNtMkIsK0JBQWlDLFFBQVM7SXRCbUNuRCxTQUFTQyxxQkFBc0J6M0IsRUFBRzZDLEVBQUc2MEI7TUFDbkMsR0FBR0EsWUFBWW40QjtPQUNiUyxJQUFJLHlCQUF5QjAzQjtNQUMvQmwzQixpQkFBaUJSLFNBQVM2QztNQUMxQixHQUFHNjBCLFNBQVVsM0IsaUJBQWlCazNCLFlBQVk3MEIsQ0FDNUM7SVE0SkEsU0FBUzgwQixTQUFTN3NCLEtBQU1DLEtBQU1DLEtBQU1DLEtBQU1DLEtBQU00SyxLQUFNRyxLQUFNQyxLQUFNMGhCO01BQ2hFLElBQUloaUI7TUFDSixJQUFVLElBQUYvVCxJQUFPQSxJQUFJKzFCLEtBQU0vMUI7T0FBSzs7T0FDbkIsZUFBZWlKLEtBQU1DLE9BQUtsSixFQUFHbUosT0FBS25KLEVBQUdvSixLQUFNQyxLQUFNNEssS0FBTUcsS0FBTUMsT0FBS3JVO01BRTdFLE9BQU8rVCxLQUNUO0lBTUEsU0FBU2lpQixXQUFXL3NCLEtBQU1DLEtBQU1DLEtBQU1DLEtBQU1DLEtBQU00SztNQUNoRCxJQUFJRjtNQUNKQSxTQUFTLFFBQVE5SyxLQUFNQyxLQUFNQyxLQUFNRixLQUFNQyxLQUFNQztNQUMvQzRLLFNBQVMsU0FBUzlLLEtBQU1DLEtBQU1DLEtBQU1DLEtBQU1DLEtBQU00SyxLQUFNN0ssS0FBTUMsS0FBTTRLO01BQ2xFLE9BQU9GLEtBQ1Q7SU01R0EsU0FBU2tpQixtQkFBbUJoNEIsR0FBSyxPQUFPQSxDQUFHO0lVWjNDLFNBQVNpNEIsdUJBQXVCajJCO01BQzlCLEdBQUlBLFFBQVM7TUFDYixJQUFRLElBQUVBLFlBQ0osTUFBTW9GLE1BQU1wRjtNQUNsQlU7TUFDQSxJQUFXLElBQUZYLElBQU9BLElBQUlDLElBQUtELElBQUtXLEVBQUVYO01BQ2hDLE9BQU9XLENBQ1Q7SVpuSEEsU0FBU3cxQixlQUNQLDBDQUNGO0lBd0RBLFNBQVNDLHNCQUFzQmo0QixHQUFLLFFBQVU7SU5tRzlDLFNBQVNrNEIscUJBQXFCNzFCLEtBQzVCb1YsWUFBWXBWLElBQ1osUUFDRjtJY3BGQSxJQUFJODFCO0lBQ0osU0FBU0MsdUJBQXdCMUksSUFBS252QixJQUFLODNCO01BQ3pDLElBQVUsTUFBRTNJLE9BQ0osSUFBRXlJLGtCQUFrQkU7TUFDNUIsR0FBSS9xQixRQUFRMUM7T0FBVyxJQUVWLElBQUYvSSxFQUFJczJCLHlCQUEwQnQyQixJQUFJdzJCLFFBQVN4MkI7UUFDbERzMkIsa0JBQWtCdDJCOztPQUNmLEdBQUl5MkIsTUFBTWhyQixTQUFTL00sSUFBSyxPQUN0QiszQixNQUFNaHJCO01BUGYsSUFTTyxLQUFRLEdBQUVnckIsaUJBQWtCMTNCO01BQ25DLE1BQU8yM0IsS0FBSzEzQjtPQUFJLENBQ2RELEtBQU8yM0IsS0FBRzEzQixZQUNWLEdBQUlOLE1BQU0rM0IsTUFBTTEzQixRQUFPQyxLQUFLRCxZQUN2QjIzQixLQUFLMzNCO01BRVp1M0Isa0JBQWtCRSxXQUFXRTtNQUU3QixPQUFRaDRCLE9BQU8rM0IsTUFBTUMsUUFBUUQsTUFBTUMsS0FDckM7SUQxREEsU0FBU0M7TUFDUDtPQUFNLEVBQUVqNUIsbUJBQW1CQTtPQUNyQjs7Ozs7Ozs7Ozs7Ozs7O01BRU4sU0FBU3dDLElBQU07TUFDZixJQUFXLElBQUZGLElBQU9BLElBQUk4RyxTQUFVOUcsSUFBSyxLQUFLYSxFQUFFaUcsRUFBRTlHLElBQUthLEVBQUVpRyxFQUFFOUcsTUFBSUU7TUFDekQsT0FBT1csQ0FDVDtJYm1FQSxTQUFTKzFCLHVCQUF1Qnh6QixNQUM5QixPQUFPLGdCQUFpQkEsS0FDMUI7SUtDQSxTQUFTeXpCLDJCQUE0QnB2QjtNQUNuQyxJQUFJOEgsS0FBTzVRLHFCQUFxQjhJO01BQ2hDLEdBQUc4SCxrQkFBbUIsNkJBQTRCOUg7TUFEbEQsSUFFSXF2QixPQUFTMTJCO01BQ2IsR0FBR3FILFdBQVc7T0FBb0IsQ0FDaEMsSUFBSXN2QixHQUFLO1FBQ1REOzttQkFDRSxPQUFPLHdCQUF3QiwwQkFEeEI7TUFMWDtPQVFJRTtjQUNHem5CO2dCQUNFQTtZQUNKOUg7OztnQkFHSXF2QjtNQUVUL3JCLGlCQUFpQmlzQixjQUFZQTtNQUM3QixPQUFPQSxVQUNUO0lVNUhBLFNBQVNDLHlCQUF5QjFyQjtNQUNoQztPQUFJa2Y7O1VBQVMvc0I7VUFBc0I2TixVQUFXQSxjQUFlQSxZQUFZQTtNQUN6RSxPQUFPLDRCQUE4QmtmLFdBQVlBLEdBQ25EO0luQm9RQSxTQUFTeU0saUJBQWtCajVCLEdBQUssT0FBTyxXQUFXQSxFQUFJO0lHeEx0RCxTQUFTazVCLFVBQVUvekI7TUFDakIsSUFBSUosS0FBTyxrQkFBa0JJO01BQzdCLEtBQUtKLGlCQUFrQjtNQUd2QixPQUFPLGlCQUFpQkEsZUFDMUI7SUFJQSxJQUFJbzBCLGFBQWVEO0lTZ0huQixTQUFTRSxpQkFBaUJ4MkIsRUFBR2Q7TUFDM0IsT0FBUUE7ZUFDQSxXQUFXYztlQUNYLFdBQVdBLEVBQUdkO2VBQ2QsV0FBV2MsRUFBR2QsS0FBS0E7ZUFDbkIsV0FBV2MsRUFBR2QsS0FBS0EsS0FBS0E7ZUFDeEIsV0FBV2MsRUFBR2QsS0FBS0EsS0FBS0EsS0FBS0E7ZUFDN0IsV0FBV2MsRUFBR2QsS0FBS0EsS0FBS0EsS0FBS0EsS0FBS0E7ZUFDbEMsV0FBV2MsRUFBR2QsS0FBS0EsS0FBS0EsS0FBS0EsS0FBS0EsS0FBS0E7ZUFDdkMsV0FBV2MsRUFBR2QsS0FBS0EsS0FBS0EsS0FBS0EsS0FBS0EsS0FBS0EsS0FBS0E7O01BRXBELFNBQVN1M0IsSUFBTSxPQUFPLFFBQVEzNUIsS0FBTW9DLEVBQUk7TUFDeEN1M0IsY0FBY3oyQjtNQUNkLFdBQVd5MkIsR0FDYjtJTmxGQSxTQUFTQyxlQUFlbnFCLElBQUszQixJQUFLeEw7TUFDaEMsSUFBVSxJQUFGRCxJQUFPQSxJQUFJQyxJQUFLRDtPQUFLLFNBQ2xCeUwsTUFBSXpMLG9CQUFtQm9OLFNBQVMzQixNQUFJekwsU0FFakQ7SVd2SUEsSUFBSXczQjtJQUNKLFNBQVNDLG9CQUFxQnI1QjtNQUM1QixLQUFLLHlCQUF5QkEsR0FBSSxPQUFPQTtNQUN6QyxPQUFPLFVBQVVvNUI7Z0JBQ05BO2VBQ0FBLDhCQUNiO0lONFVBLFNBQVNFLGNBQWNuc0IsSUFDckIsT0FBTyxZQUFZQSxLQUNyQjtJQzVFQSxTQUFTb3NCLHFDQUFxQ3ozQjtNQUM1QztRQUNFLElBQVEsSUFBRXVOLGlCQUNELFNBQU1wSSxNQUFNcEY7UUFDckIsSUFBVyxJQUFGRCxJQUFPQSxJQUFJQyxJQUFLRCxJQUFLb0UsS0FBS3BFLEtBQUt5TixVQUFVek47UUFDbEQsT0FBTyxjQUFjRSxHQUFHdkMsS0FBS3lHLE1BSnhCLENBTVQ7SVpsQkEsU0FBU3d6QixnQkFBaUIzNUIsR0FBSyxPQUFPLFVBQVVBLEVBQUk7SUE3RXBELFNBQVM0NUIsaUJBQWtCNTVCLEVBQUV5UTtNQUMzQkE7TUFDQSxHQUFJQTtPQUFZLENBQ2RBO1FBQ0F6USxLQUFLO1FBQ0wsR0FBSXlRLFdBQVksQ0FDZEEsWUFDQXpRLEtBQUs7TUFHVCxHQUFJeVEsYUFBYSxDQUNmQSxZQUNBelEsS0FBSztNQUVQQSxLQUFLLFdBQVl5UTtNQUNqQixPQUFPelEsQ0FDVDtJTzdMQSxTQUFTNjVCLGtCQUFrQnJHO01BQ3pCam9CLGdCQUFjaW9CLElBQ2QscUJBQ0EsUUFDRjtJSzBPQSxTQUFTc0csNkJBQTZCQyxNQUFPOTNCO01BQzNDO1FBQ0UsSUFBSS9CLEVBQUlzUDtRQUNSLEdBQUd0UCxLQUFLNjVCLFNBQVM5M0IsWUFBWTgzQixNQUFPLE9BQU8sUUFBUTUzQixLQUFNcU47UUFEekQsSUFFUyxTQUFNcEksTUFBTTJ5QixPQUNiLElBQUUsU0FBU3ZxQixpQkFBa0J1cUI7UUFDckMsSUFBVyxJQUFGaDRCLElBQU9BLElBQUlDLElBQUtELElBQUtvRSxLQUFLcEUsS0FBS3lOLFVBQVV6TjtRQUNsRCxPQUFPLGNBQWNFLEVBQUdrRSxLQU5uQixDQVFUO0lGck5BLFNBQVM2ekIsb0JBQW9CaHFCLE1BQVEsUUFBVTtJQzhaL0MsU0FBU2lxQixjQUFjM3NCLEdBQUlDLEdBQUl4SyxHQUM3QixPQUFPLFVBQVV3SyxJQUFLeEssR0FDdEIsUUFDRjtJUzFiQSxTQUFTbTNCLDZCQUFnQyxVQUFZO0lkNlVyRCxTQUFTQyxlQUFlbnZCLEtBQU1DLEtBQU1FLEtBQU1DO01BQ3hDSixVQUFVQyxTQUFTRSxVQUFVQyxNQUM3QixRQUNGO0lYcEhBLFNBQVNndkIsZUFBZ0JwNkIsRUFBR3VCLEdBQUssT0FBTyxNQUFNQSxFQUFHO0lROUZqRCxTQUFTODRCLGNBQWNsMUI7TUFDckIsSUFBSUosS0FBTyxrQkFBa0JJO01BQzdCLEtBQUtKO09BQXNCO01BRzNCLE9BQU8scUJBQXFCQSxlQUM5QjtJZS9IQSxTQUFTdTFCLGlCQUFrQnQ2QixFQUFHUyxLQUFPVCxPQUFPUyxJQUFLLFFBQVU7SUp1RTNELFNBQVM4NUIsaUJBQWlCdjZCO01BQ3hCLFFBQVVBOzs7O2NBQ0FBOzs7O2NBQ0FBOzs7O2NBQ0FBOztlQUNaO0lYMUVBLFNBQVN3NkIsY0FBZTtJUTRieEIsU0FBU0MsY0FBY250QixHQUFJQyxHQUFJaEcsR0FBSUUsR0FBSTFFO01BQ3JDLE9BQU8sV0FBV3dLLEdBQUdoRyxHQUFHRSxLQUFNMUUsR0FDOUIsUUFDRjtJQy9jQSxTQUFTMjNCLG1CQUFtQjN3QixFQUFFbkgsR0FBSyxPQUFRbUgsYUFBYW5ILEtBQVk7SUZ3Q3BFLFNBQVMrM0Isc0JBQXNCejZCLEdBQUssUUFBVTtJZ0I5RDlDLElBQUkwNkIsOEJBQWdDaks7SXBCbUVwQyxTQUFTa0sscUJBQXFCMXJCLElBQUszQixJQUFLc3RCO01BQ3RDM3JCLFNBQVMzQixPQUFPc3RCLE1BQ2hCLFFBQ0Y7SUFHQSxTQUFTQyxxQkFBcUI1ckIsSUFBSzNCLEtBQ2pDLE9BQU8yQixTQUFTM0IsSUFDbEI7SVYrU0EsU0FBU3d0QixrQkFBa0I3NkIsRUFBRTRCLEVBQUV3WixLQUM3QixPQUFPLGlCQUFpQnBiLEVBQUU0QixFQUFFd1osSUFDOUI7SVdqU0EsU0FBUzBmLHFCQUFxQkMsT0FBTzFuQixFQUFFdlM7TUFDckMsSUFBSWs2QixRQUFVO01BQ2QsZ0JBQ1dBO3FCQUNBRDs7O29CQUdEMW5CO3FCQUNDdlM7O21CQUVGOzs7b0JBR0MsMkJBRVo7SUtpSUEsU0FBU202QixzQkFBc0JuNUI7TUFDN0I7UUFDRSxJQUFJRCxJQUFNd047UUFDVixHQUFHeE47U0FBUSxDQUNULElBQUltRSxTQUFXaUIsTUFBTXBGO1VBQ3JCLElBQVcsSUFBRkQsSUFBT0EsSUFBSUMsSUFBS0QsSUFBS29FLEtBQUtwRSxLQUFLeU4sVUFBVXpOO1VBQ2xELE9BQU8sY0FBY0UsRUFBR2tFOztTQUNuQixPQUNFLGNBQWNsRSxHQUFJNkksV0FQdEIsQ0FVVDtJTHNDQSxTQUFTdXdCLGlCQUFpQnI3QixFQUFFdUIsRUFBRXF5QixHQUFHRCxHQUFHM1osR0FBR0M7TUFDckMsSUFBSTlaLEVBQUk7TUFDUjtNQUNBLGdCQUFnQkEsVUFBVUgsRUFBRUcsV0FBV29CLEVBQUVxeUIsR0FBR0QsR0FBRzNaLEdBQUdDO01BQ2xEO01BQ0EsUUFDRjtJTGpDQSxTQUFTcWhCLGlCQUFpQkMsSUFBS3JxQixLQUFNZ0IsT0FBUXNwQixPQUFRN3BCLEtBQU0zSjtNQUV6RCxpREFDRjtJQUlBLFNBQVN5ekIsMEJBQTBCNWpCLEtBQUs2akI7TUFDdEMsT0FBTyxpQkFBaUI3akIsUUFBUUEsUUFBUUEsUUFBUUEsUUFBUUEsUUFBUUEsUUFDbEU7SUMxSEEsU0FBUzhqQixhQUFhMXhCLE9BQVE4TSxJQUFLQztNQUNqQyxJQUFhLFNBQUUsa0JBQWtCRCxLQUNwQixTQUFFLGtCQUFrQkM7TUFDakMsR0FBRzRrQixtQkFBbUJDO09BQ3BCO01BQ0YsS0FBS0Q7T0FBeUI7TUFHOUIsT0FBTyx3QkFBd0IzeEIsT0FBUTJ4QixjQUFlQyxtQkFDeEQ7SVEybkJBLFNBQVNDLG9CQUFvQkMsTUFBT0MsTUFBT0MsTUFBTy9xQixLQUFNZ0IsT0FBUVA7TUFDOUQsR0FBR3FxQixTQUFTLDZCQUE2QjlxQjtPQUFXOztNQUdwRCxPQUFPLHNCQUFzQkEsS0FBTWdCLE9BQVFQLEtBQU1vcUIsTUFDbkQ7SVhyZ0JBLFNBQVNHLGdCQUFpQmw4QixHQUFLLE9BQU8sVUFBVUEsRUFBSTtJT3lEcEQsU0FBU204QixpQkFBaUJ2dkI7TUFDeEIsSUFBTSxFQUFFLG9CQUNGLEVBQUUsc0JBQXNCQSxLQUN2QixHQUFFL0Q7TUFDVCxtQkFBbUIrRCxJQUFJek0sSUFBSUEsV0FBV0E7TUFDdENBLE9BQU9pOEI7TUFDUCxRQUNGO0lBWUEsU0FBU0Msb0JBQW9CenZCO01BQzNCLGlCQUFpQix3QkFBd0JBLE1BQ3pDLFFBQ0Y7SUFYQSxTQUFTMHZCLGtCQUFrQjE1QjtNQUN6QixpQkFBaUIsb0JBQW9CQSxJQUNyQyxRQUNGO0lMdk1BLFNBQVMyNUIsYUFBYXAzQjtNQUNwQjtPQUFTLEtBQUUsZUFBZUE7T0FDakIsS0FBRSxvQkFBb0I7T0FDdkI7TUFDUixJQUFVLElBQUZwRCxJQUFPQSxJQUFJeUksd0JBQXlCekk7T0FDMUMsR0FBR3lJLGlCQUFpQnpJLFdBQVdvRCxLQUFNOGlCLE1BQU1sbUI7TUFDN0MsR0FBR2ttQixVQUFVLHdCQUF3QkE7TUFDckMsUUFDRjtJTWpDQSxTQUFTdVUsNkJBQTZCcjhCLEVBQUVxTjtNQUN0QyxJQUFJbUYsV0FBYTBWLGVBQWdCbG9CLFNBQVVxTixnQkFBY0EsSUFBSUE7TUFDN0QsT0FBTyw2QkFBNkJtRixPQUFRbkYsSUFDOUM7SUM2TEEsU0FBU2l2QixrQkFBa0J6dkI7TUFBUyxPQUFPLG9CQUFvQkYsaUJBQWlCRSxlQUFlO0lGb0gvRixTQUFTMHZCLG1CQUFtQmh4QixHQUFHMUwsRUFBRXVCO01BQy9CLElBQUlwQixFQUFJO01BQ1IsS0FBSXVMO09BQVUsQ0FDWixJQUFJd3ZCLE9BQVM7UUFDYkEsZUFBZS82QjtRQUNmKzZCLGdCQUFnQi82QjtRQUNoQixxQ0FBcUN1TDtRQUhyQyxJQUlJaXhCLFdBQVlsOUI7UUFDaEJrOUI7OztVQUNFLG9CQUFvQkEsTUFBTTM4QixFQUFFRyxXQUFXdUwsWUFBWW5LO1VBQ25EbUssV0FBV2l4QixLQUZFO1FBSWZBLFlBQVk7O09BQ1Asb0JBQ2VqeEIsU0FBUzFMLEVBQUVHLFdBQVd1TCxZQUFZbks7TUFFeEQsUUFDRjtJSHBJQSxTQUFTcTdCLG9DQUFvQ0MsVUFDM0MsUUFDRjtJUnJCQSxTQUFTQyxnQkFBaUIzOEIsRUFBRzRCLEVBQUdhO01BQzlCLEdBQUliLFdBQVc1QixJQUFLO01BQ3BCLE9BQU8sdUJBQXdCQSxFQUFHNEIsRUFBR2EsRUFDdkM7SU1uREEsU0FBU202QixlQUFlNTNCO01BQ3RCLElBQUlKLEtBQU8sa0JBQWtCSSxNQUM3QixrQkFBa0JKLFdBQ2xCLFFBQ0Y7SU8wS0EsU0FBU2k0QixnQkFBZ0Jod0I7TUFDdkIsY0FBY0EsUUFDZCxPQUFPRixpQkFBaUJFLGNBQzFCO0lMeEhBLFNBQVNpd0IsdUJBQXVCcmlCLE9BQzlCLFFBQ0Y7SVJpT0EsU0FBU3NpQixvQkFBb0I1MUIsR0FBSUUsSUFBTSxXQUFTLGlCQUFpQkYsR0FBSUUsR0FBSztJUWpRMUUsU0FBUzIxQix3QkFBd0J2aUIsT0FDL0IsT0FBTywwQkFDVDtJUXlEQSxTQUFTd2lCLGVBQWdCdDdCO01BQ3ZCLElBQUlpSTtNQUNKLElBQVcsSUFBRmhJLElBQU9BLElBQUlELFNBQVVDO09BQUssQ0FDakMsSUFBSW1DLEVBQUlwQyxFQUFFQyxHQUNWZ0ksRUFBRSx3QkFBd0I3RixTQUFTQTtNQUVyQyxPQUFPNkYsQ0FDVDtJRC9CQSxTQUFTc3pCLGVBQWVuc0IsS0FBTWdCLE9BQVFvckI7TUFDcEM7T0FBUyxLQUFFLG1CQUFtQkE7T0FDckIsS0FBRSxzQkFBc0Jwc0IsS0FBTSxpQkFBaUJTO01BQ3hELE9BQU8sc0JBQXNCVCxLQUFNZ0IsT0FBUVAsS0FBTUwsS0FDbkQ7SVl6UEEsU0FBU2lzQixlQUFldmpCLEdBQUl6UyxHQUFJMFMsR0FBSXhTLEdBQUl6RjtNQUV0QztRQUFnQmdZLEdBQUkwRCx1QkFBdUJuVyxPQUMzQjBTLEdBQUl5RCx1QkFBdUJqVyxPQUMzQnpGO01BQ2hCLFFBQ0Y7SWhCNlpBLFNBQVN3N0I7TUFDUCxzREFDRjtJUC9LQSxTQUFTQyxlQUFlejlCLEVBQUd1QixFQUFHd1Q7TUFDNUI7T0FBVSxNQUFFO09BQ0UsVUFBRTtPQUNKLFFBQUU7T0FDUjtPQUNBLEVBQUUsYUFBYThvQjtPQUNmLEVBQUUsYUFBYUE7TUFFckIsU0FBU0csU0FBVWw4QixFQUFHWTtRQUNwQjtTQUFPLEdBQUVnN0IsUUFBUTU3QjtTQUNULElBQUVtOEIsTUFBTUEsS0FBS244QjtTQUNiLElBQUVBLElBQUlvOEI7U0FDUCxHQUFFUixRQUFRaDdCO1NBQ1QsSUFBRW1xQixNQUFNQSxLQUFLbnFCO1NBQ2IsSUFBRUEsSUFBSTA3QjtTQUNSLEVBQUV0OEIsSUFBSVk7U0FDTixFQUFJdzdCLE1BQU1FLE1BQU1sNkIsSUFBS2c2QixNQUFNRyxNQUFNRixNQUFNQyxNQUFPRCxNQUFNRTtRQUMxRCxVQUNLbjZCLElBQ0F5RCxFQUVQO01BRUEsU0FBUzhlLElBQUsza0IsRUFBR1k7UUFDZixJQUFNLEVBQUVaLElBQUlZLEVBQ04sRUFBRXZDLElBQUkyQixFQUNOLEVBQUdBLEtBQUszQixJQUFJNEMsTUFBT0wsSUFBSUssR0FDN0IsVUFDSzVDLElBQ0F3SCxFQUVQO01BRUEsU0FBUzIyQixPQUFRdCtCLEVBQUd1QjtRQUNsQixPQUFPdkIsV0FBV3VCLFdBQVdtOEIsUUFBUTE5QixLQUFLMDlCLFFBQVExOUIsSUFBSUEsT0FBT0E7aUJBQUlBLFVBQVVBLGtCQUFvQnVCLGlCQUFtQnE4QjtpQkFBVzU5QixDQUMvSDtNQUVBO1FBQUlBOzs7O1FBQVdBOztRQUFNQTs7UUFBS0E7Ozs7O1FBQWdCQTs7Ozs7UUFDdEN1Qjs7OztRQUFXQTs7UUFBTUE7O1FBQUtBOzs7OztRQUFnQkE7Ozs7T0FBYyxPQUMvQ3ZCLElBQUl1QixJQUFJd1Q7TUFFakIsR0FBSUEsUUFBUyxPQUNKL1UsSUFBSXVCO01BRWIsR0FBSXdULE1BQU1BLEtBQUtBLG1CQUFnQkEsZ0JBQWMsT0FDcENBO01BR1QsSUFBSXdwQjtNQUNKLE1BQU8sU0FBU3YrQixLQUFLODlCLEVBQUcsQ0FDdEJTLFNBQVNULEVBQ1Q5OUIsS0FBSys5QjtNQUVQLE1BQU8sU0FBU3g4QixLQUFLdThCLEVBQUcsQ0FDdEJTLFNBQVNULEVBQ1R2OEIsS0FBS3c4QjtNQUVQLEdBQUlRLGdCQUFpQixPQUNaditCLElBQUl1QixJQUFJZzlCO01BRWpCLE1BQU8sU0FBU3YrQixLQUFLKzlCLEVBQUcsQ0FDdEJRLFNBQVNSLEVBQ1QvOUIsS0FBSzg5QjtNQUVQLE1BQU8sU0FBU3Y4QixLQUFLdzhCLEVBQUcsQ0FDdEJRLFNBQVNSLEVBQ1R4OEIsS0FBS3U4QjtNQUVQLEdBQUlTLFlBQWEsT0FDUnhwQjtNQXJCVCxJQXdCTyxHQUFFL1UsRUFDRixHQUFFdUIsRUFDRixHQUFFd1QsSUFBSXdwQjtNQUViLEdBQUksU0FBU0csTUFBTSxTQUFTRixLQUFLQyxVQUFVYixRQUFTLE9BQzNDN29CO01BRVQsR0FBSSxTQUFTMnBCLE1BQU0sU0FBU0YsS0FBS0MsTUFBTWIsY0FBY0E7T0FBYSxNQUMxRDdvQixpQkFBbUI0b0I7TUFoQzNCO09BbUNPLEdBQUUsU0FBU2EsR0FBSUM7T0FDaEIsRUFBRSxJQUFJRSxLQUFNRDtPQUNaLEVBQUUsSUFBSUMsS0FBTXgrQjtPQUNaLEVBQUUsSUFBSUEsSUFBS3krQjtPQUVYLEVBQUU3OEIsTUFBTSxPQUFPQSxJQUFLNjhCO01BQzFCLEdBQUkzOEIsUUFBUyxPQUNKQTtNQTFDVCxJQTZDSTYyQixHQUFLNzJCLElBQUlzOEI7TUFDYixHQUFJLFNBQVN6RixNQUFNNkUsVUFBVyxPQUNyQjdFO01BSVQsT0FBT0EsS0FBSyxPQUFPNzJCLElBQUk2MkIsS0FBS3lGLE1BQU94OEIsT0FBT3c4QixLQUM1QztJY3RUQSxTQUFTTSxhQUFhNytCLEdBQ3BCLFFBQVdBLG9CQUNBQSxnQkFDYjtJTG9EQSxTQUFTOCtCLHdCQUF3Qjl4QixPQUFPeEU7TUFDdEMsSUFBUyxLQUFFc0UsaUJBQWlCRSxRQUNuQixLQUFFdE0scUJBQXFCaU07TUFDaEMyRSxvQkFBbUI5STtNQUNuQjhJLG9CQUFvQjlJO01BQ3BCLFFBQ0Y7SUN4SUEsU0FBU3UyQixzQkFBeUIsUUFBVTtJSDZONUMsU0FBU0Msa0JBQWtCaC9CLEVBQUV1QixFQUFFaVMsRUFBRXZTO01BQy9CLElBQUlkLEVBQUk7TUFDUixxQkFBcUJILEVBQUVHLFdBQVdvQixFQUFFaVMsSUFBR3ZTO01BQ3ZDLFFBQ0Y7SVhwQ0EsU0FBU2crQixrQkFBa0I5K0IsRUFBRTRCO01BQzNCLEdBQUlBLFdBQVcsc0JBQXNCNUIsT0FBUTtNQUM3QyxJQUFPLEdBQUUsdUJBQXdCQSxFQUFHNEIsR0FDN0IsR0FBRSx1QkFBd0I1QixFQUFHNEI7TUFDcEMsT0FBUTJMLFVBQVVELEVBQ3BCO0kyQmhGQSxTQUFTeXhCLHFCQUFxQmwvQixFQUFHc1I7TUFDL0J0UixFQUFFd3RCLHlCQUF5QjFpQixVQUMzQixRQUNGO0lkOFBBLFNBQVNxMEIsa0JBQW1CbnlCLE9BQU9qSyxFQUFFNGhCO01BQ25DLElBQUl4a0IsRUFBSSw0QkFBNEI0QyxFQUFHNGhCO01BQ3ZDLGVBQWUzWCxPQUFPN00sSUFBSSxzQkFBc0JBO01BQ2hELFFBQ0Y7SUV3QkEsU0FBU2kvQixjQUFjOXhCLEdBQUlDLEdBQUloRyxHQUFJRSxJQUNqQyxPQUFPLE9BQU8sV0FBVzhGLEdBQUdoRyxHQUFHRSxLQUNqQztJWTVWQTtLQUF1QixtQkFBRTgxQjtLbkI2R0gsa0JBQUUsSUFBS3h1QjtJQUM3QixTQUFTd3dCO01BQ1AsSUFBSTlNLElBQU0sSUFBSzFqQixpQkFDZixPQUFPMGpCLGNBQWM2TSxpQkFDdkI7SUFJQSxTQUFTRSwrQkFBK0I5OEIsR0FDdEMsT0FBTyxlQUNUO0lrQmhIQSxTQUFTKzhCLGlCQUFrQi9lLE1BQU9DO01BQ2hDLEdBQUlBLGVBQWVELGlCQUFrQjtNQUNyQyxPQUFPQSxLQUNUO0luQmdHQSxTQUFTZ2YsY0FBYzF2QixNQUNyQixzQkFDRjtJWW5CQSxTQUFTMnZCLHFCQUFxQjErQixFQUFHOEI7TUFDL0IsT0FBTyxzQkFBc0I5QixFQUFHLHVCQUF1QjhCLEdBQ3pEO0lBUUEsU0FBUzY4QixVQUFXbFEsTUFBT0MsTUFBT2tRLEtBQU1qUTtNQUN0QyxJQUFJa1EsTUFBT0MsR0FBSUMsR0FBSWp2QixHQUFJa0QsSUFBS2hULEVBQUc4QixFQUFHaEIsRUFBR0M7TUFDckMrTyxLQUFLNGU7TUFDTCxHQUFJNWUsVUFBVUEsU0FBVUE7TUFDeEJrRCxNQUFNeWI7TUFDTnp1QixJQUFJNCtCO01BQ0pDLFNBQVNsUTtNQUFNbVE7TUFBUUM7TUFDdkIsTUFBT0QsS0FBS0MsTUFBTS9yQjtPQUFTLENBQ3pCbFIsSUFBSSs4QixNQUFNQztRQUNWLEdBQUloOUIsS0FBS0E7VUFBYztZQUNsQitRLGdCQUFnQi9ROztZQUFrQitRLGdCQUFnQi9RO1dBQXFCLENBQ3hFLElBQUk4akIsR0FBSyxnQkFBZ0I5akIsb0JBQW9CQTtZQUM3QzlCLElBQUksa0JBQW1CQSxFQUFHNGxCO1lBQzFCNVM7O1NBR0MsR0FBSWxSLGFBQWFxRSxTQUFTckUsVUFBVUE7VUFBUyxPQUN4Q0E7cUJBR045QixJQUFJLGtCQUFrQkEsRUFBRzhCLE1BQ3pCa1IsTUFDQTtxQkFHQTZyQixRQUFRQyxNQUFNaDlCLEtBQ2Q7O2FBRUEsSUFBSXRDLElBQVFzQyxxQkFBdUJBO2FBQ25DOUIsSUFBSSxrQkFBa0JBLEVBQUdSO2FBQ3pCLElBQUtzQixNQUFPQyxNQUFNZSxTQUFVaEIsSUFBSUMsSUFBS0Q7Y0FBSyxDQUN4QyxHQUFJaStCLE1BQU1qdkIsR0FBSSxNQUNkK3VCLE1BQU1FLFFBQVFqOUIsRUFBRWhCO2FBRWxCOztVQUVHLEdBQUksaUJBQWlCZ0I7V0FBSSxDQUM5QjlCLElBQUksb0JBQW9CQSxFQUFFOEIsR0FDMUJrUjs7V0FDSyxHQUFJLGtCQUFrQmxSO1lBQUksQ0FDL0I5QixJQUFJLHFCQUFxQkEsRUFBRThCLEdBQzNCa1I7O1lBQ0ssVUFBV2xSO2FBQWdCLENBQ2hDOUIsSUFBSSxzQkFBc0JBLEVBQUU4QixHQUM1QmtSOzthQUNLLEdBQUlsUixPQUFPQTtjQUFNLENBRXRCOUIsSUFBSSxrQkFBa0JBLEVBQUc4QixJQUFFQSxPQUMzQmtSOztjQUNLLEdBQUlsUixRQUFPQSxFQUFHLENBRW5COUIsSUFBSSxvQkFBb0JBLEVBQUU4QixHQUMxQmtSO01BR0poVCxJQUFJLG9CQUFvQkE7TUFDeEIsT0FBT0EsY0FDVDtJR3hOQSxTQUFTZy9CLGFBQWNqZ0M7TUFDckIsR0FBS0EsYUFBYW9ILFNBQVVwSCxRQUFTQTtPQUNuQyxPQUFPQTs7T0FDSixHQUFJLGlCQUFpQkE7UUFDeEI7O1FBQ0csR0FBSSxrQkFBa0JBO1NBQ3pCOztTQUNHLEdBQUtBLGFBQWFrZ0MsbUJBQW9CbGdDO1VBQ3pDOztVQUNHLEdBQUlBLEtBQUtBLGNBQ1osZ0JBRUEsV0FDSjtJUDZ6QkEsU0FBU21nQyx1QkFBdUI3eUIsSUFDOUIsT0FBT0EsT0FDVDtJZjFtQkEsU0FBUzh5QixpQkFBaUJqZ0MsRUFBRTRCO01BQzFCLEdBQUlBLFdBQVc1QixRQUFTO01BQ3hCO09BQU8sR0FBRSxzQkFBdUJBLEVBQUc0QjtPQUM1QixHQUFFLHNCQUF1QjVCLEVBQUc0QjtPQUM1QixHQUFFLHNCQUF1QjVCLEVBQUc0QjtPQUM1QixHQUFFLHNCQUF1QjVCLEVBQUc0QjtNQUNuQyxPQUFRNkwsV0FBV0QsV0FBV0QsVUFBVUQsRUFDMUM7SUl2Q0EsU0FBUzR5QixpQkFBa0JyZ0M7TUFDekIsR0FBS0EsWUFBWSxTQUFTQSxHQUFJLFVBQVdBO01BQ3pDLElBQUlzZ0MsSUFBTXRnQztNQUNWLEdBQUlzZ0MsSUFBS3RnQyxNQUFNQTtNQURmLElBRUl5USxJQUFNLGdCQUFnQixnQkFBZ0J6UTtNQUMxQ0EsS0FBSyxhQUFZeVE7TUFDakIsTUFBT3pRLFFBQVMsQ0FDZEEsT0FDQXlRO01BRUYsTUFBT3pRLE9BQVEsQ0FDYkEsU0FDQXlRO01BRUYsR0FBSTZ2QixJQUFLdGdDLE1BQU1BO01BQ2YsVUFBV0EsRUFBR3lRLElBQ2hCO0lKNkJBLFNBQVM4dkIsa0JBQWtCcGdDLEVBQUU0QjtNQUMzQixHQUFJQSxXQUFXLHNCQUFzQjVCLE9BQVE7TUFDN0MsSUFBSTJCLE1BQVFzRjtNQUNaLElBQVUsSUFBRnBFLElBQU9BLE1BQU9BLElBQUksTUFDbEJBLEtBQUssdUJBQXdCN0MsRUFBRzRCLElBQUlpQjtNQUU1QyxPQUFPLG9CQUFvQmxCLEVBQzdCO0lnQnZKQSxTQUFTMCtCLGtDQUFrQ3RnQjtNQUN6QyxHQUFHQSxhQUFjLFVBQWFBLGNBQzlCLFFBQ0Y7SUh3VEEsU0FBU3VnQixtQkFBbUJ6ekI7TUFDMUIsY0FBY0E7TUFDZCxPQUFPLG9CQUFxQkYsaUJBQWlCRSxlQUMvQztJRjJFQSxTQUFTMHpCLHdCQUF3QjUrQjtNQUMvQix3REFDRjtJZXpjQSxTQUFTNitCLHFCQUFxQjNtQixHQUFJelMsR0FBSTBTLEdBQUl4UyxHQUFJekY7TUFDNUMsR0FBSXlGLE1BQU1GO09BQUksSUFDRCxJQUFGdkUsSUFBT0EsS0FBS2hCLElBQUtnQixJQUFLaVgsR0FBR3hTLEtBQUt6RSxLQUFLZ1gsR0FBR3pTLEtBQUt2RTs7T0FDL0MsSUFDTSxJQUFGQSxFQUFJaEIsSUFBS2dCLE9BQVFBLElBQUtpWCxHQUFHeFMsS0FBS3pFLEtBQUtnWCxHQUFHelMsS0FBS3ZFO01BRXRELFFBQ0Y7SVpEQSxTQUFTNDlCLG9CQUFvQjV3QixNQUFRLFFBQVU7SU5rQy9DLFNBQVM2d0Isb0JBQW9CbndCLEVBQUUzTjtNQUM3QixLQUFJdEQsMkJBQ0ZBO01BQ0ZBLDJCQUEyQmlSLEtBQUszTjtNQUNoQyxRQUNGO0lPNk5BLFNBQVMrOUIsc0JBQXNCeHpCLEdBQUk0RTtNQUNqQyxHQUFHNUUsYUFBYTRFLE9BQVEsT0FBTzVFO01BQy9CLElBQUk4ZDtNQUNKLElBQVUsSUFBRnJwQixJQUFPQSxJQUFJdUwsZUFBZ0J2TDtPQUFLcXBCLFNBQVNycEIsS0FBS3VMLFFBQVFBLGlCQUFpQnZMO01BQy9FLE9BQU8sc0JBQXNCdUwsUUFBUzRFLE9BQVFrWixTQUFVOWQsUUFDMUQ7SUMzSEEsU0FBU3l6QixZQUFZbitCLEVBQUdkO01BQ3RCLE9BQVFBO2VBQ0EsV0FBV2M7ZUFDWCxXQUFXQSxFQUFHZDtlQUNkLFdBQVdjLEVBQUdkLEtBQUtBO2VBQ25CLFdBQVdjLEVBQUdkLEtBQUtBLEtBQUtBO2VBQ3hCLFdBQVdjLEVBQUdkLEtBQUtBLEtBQUtBLEtBQUtBO2VBQzdCLFdBQVdjLEVBQUdkLEtBQUtBLEtBQUtBLEtBQUtBLEtBQUtBO2VBQ2xDLFdBQVdjLEVBQUdkLEtBQUtBLEtBQUtBLEtBQUtBLEtBQUtBLEtBQUtBO2VBQ3ZDLFdBQVdjLEVBQUdkLEtBQUtBLEtBQUtBLEtBQUtBLEtBQUtBLEtBQUtBLEtBQUtBOztNQUVwRCxTQUFTdTNCLElBQU0sT0FBTyxRQUFRMzVCLEtBQU0sbUJBQW1Cb0MsR0FBSztNQUM1RHUzQixjQUFjejJCO01BQ2QsV0FBV3kyQixHQUNiO0lUM0ZBLFNBQVMySCxXQUFXNzdCLEtBQU04N0I7TUFDeEIsSUFBSWw4QixLQUFPLGtCQUFrQkk7TUFDN0IsS0FBS0osa0JBQW1CO01BR3hCLE9BQU8sa0JBQWtCQSxVQUFXazhCLFVBQ3RDO0lJb0dBLFNBQVNDLG9CQUNQLElBQUkvZ0MsRUFBSSxvQkFDUixPQUFPQSxHQUNUO0lPL05BLFNBQVNnaEMsZ0JBQWdCeDlCLElBQUs1QjtNQUM1QixHQUFJLHVCQUF1QjRCO09BQWMsT0FBTyw0QkFBMEI1QjtNQUMxRSxJQUFJRSxFQUFJLGtCQUFrQjBCO01BQzFCLEdBQUk1QixNQUFPLEdBQU1FLGFBQWMsQ0FBRUEsYUFBYUYsTUFBS0EsT0FBVUE7TUFEN0QsSUFFSTVCLEVBQUksV0FBVzhCO01BQ25CLEdBQUlBO09BQWEsQ0FDZkE7UUFDQSxJQUFJL0IsRUFBSStCLFNBQVM5QjtRQUNqQixHQUFJRCxNQUFPQyxJQUFJLGdCQUFpQkQsU0FBVUM7TUFFNUMsT0FBTyx1QkFBdUI4QixFQUFHOUIsRUFDbkM7SUkyQ0EsU0FBU2loQyxrQkFBbUJwaEMsRUFBR0c7TUFDN0IsR0FBSUEsVUFBUUEsUUFBUUgsU0FDbEI7TUFDRixHQUFJQSxZQUFZRyxNQUFPSCxXQUFXRztNQUNsQyxRQUNGO0l0Qmt5QkEsU0FBU2toQyxrQkFBbUJsaEMsR0FDMUIsT0FBTyx3QkFBd0JBLEVBQ2pDO0lVMXZCQSxTQUFTbWhDLGFBQWFueUIsSUFBSzNCLEtBQ3pCLEdBQUcyQixTQUFTM0IsU0FBVSxTQUN0QixRQUNGO0lGNkpBLFNBQVMrekIscUJBQXFCM21CLE9BQzVCLE9BQU8sMEJBQ1Q7SUt6S0EsU0FBUzRtQiw0QkFBNkJoNEI7TUFDcEMsSUFBSThILEtBQU81USxxQkFBcUI4STtNQUNoQyxHQUFHOEgsa0JBQW1CLDZCQUE0QjlIO01BRGxEO09BRUl1dkI7Y0FDR3puQjtnQkFDRUE7WUFDSjlIOzs7O01BS0xzRCxpQkFBaUJpc0IsY0FBWUE7TUFDN0IsT0FBT0EsVUFDVDtJYXJGQSxTQUFTMEksa0JBQWtCcGhDO01BQ3pCLElBQUl5QjtNQUNKLE1BQU96QjtPQUFTLENBQ2QsSUFBSXFDLEVBQUlyQyxLQUNSLElBQVcsSUFBRjBCLElBQU9BLElBQUlXLFNBQVVYLElBQUssT0FBT1csRUFBRVgsSUFDNUMxQixJQUFJQTtNQUVOLE9BQU95QixDQUNUO0lmUEEsU0FBUzQvQixtQkFBbUJ4WjtNQUMxQixJQUFNLEVBQUV6b0IsV0FDQyxLQUFFLHdCQUF3QnlvQjtNQUNuQyxTQUFTdm9CLElBQUl3RjtRQUNYLElBQUlrRCxJQUFNLHVCQUFxQmxEO1FBQy9CLEdBQUdrRCxJQUFLLE9BQU9BLE1BQ2pCO01BQ0EsSUFBSXM1QjtNQUNKLE1BQUt6WixZQUFXLFdBQVdBO01BRDNCLElBRUloZSxPQUFTO01BQ2IsS0FBSUEsT0FBUUE7TUFIWixJQUlJMDNCLE9BQVM7TUFDYixLQUFJQSxPQUFRO01BTFosSUFPSXB1QixFQUFJO01BQ1JBLElBQUlBLEVBQUUsU0FBU0E7TUFDZixzQkFBb0JBO01BVHBCLElBV0l2UyxFQUFJO01BQ1JBLElBQUlBLEVBQUUsU0FBU0E7TUFDZix1QkFBcUJBO01BYnJCLElBZUk0Z0MsSUFBTSxxQkFBcUIzM0IsT0FBTztNQUN0QyxLQUFJMjNCLElBQUs7TUFoQlQsSUFpQlEsSUFBRUEsYUFDQyxPQUFFO01BQ2IzRyxlQUFlMW5CO01BQ2YwbkIsZ0JBQWdCajZCO01BcEJoQixJQXFCSXV5QixJQUFNLHFCQUFxQjBILE9BQU8xbkIsRUFBRXZTO01BQ3hDdXlCLHlCQUEwQnVPLE9BQ3hCRCxZQUFZQyxLQURFO01BR2hCLGtCQUFrQnZPO01BekJsQixJQTBCSXdPLEtBQU9GO01BQ1hFO01BQ0EsaUJBQWlCOUc7TUFDakIsUUFDRjtJZ0JnRUEsU0FBUytHLG1CQUFtQmppQyxFQUFHc1I7TUFDN0J0UixFQUFFd3RCLHlCQUF5QmxjLEtBQzNCLFFBQ0Y7SURoQ0EsU0FBUzR3QixxQkFBcUJsZ0M7TUFDNUIsR0FBSUEsUUFBUztNQUNiLElBQVEsSUFBRUEsWUFDSixNQUFNb0YsTUFBTXBGO01BQ2xCVTtNQUNBLElBQVcsSUFBRlgsSUFBT0EsSUFBSUMsSUFBS0QsSUFBS1csRUFBRVg7TUFDaEMsT0FBT1csQ0FDVDtJdEIwS0EsU0FBU3kvQixnQkFBaUJuaUMsR0FBSyxPQUFPLFVBQVVBLEVBQUk7SVVuUHBELFNBQVNvaUMsa0JBQWtCcHlCLE1BQ3pCLFFBQ0Y7SUFNQSxTQUFTcXlCLG9CQUFvQnJ5QixNQUFRLFFBQVU7SU02TC9DLFNBQVNzeUIsa0JBQW1CdGlDLEVBQUd1QjtNQUFLLFVBQVMsaUJBQWlCdkIsRUFBRXVCLGNBQWdCO0lJOU5oRixTQUFTZ2hDLG1DQUFzQyxVQUFZO0lwQnNQM0QsU0FBU0MsaUJBQWlCeGlDLEdBQUssT0FBTyxXQUFXQSxFQUFJO0lMM0JyRCxTQUFTeWlDLGNBQWV6aUMsRUFBR3VCLEdBQUssT0FBTyxLQUFLQSxFQUFJO0l1QjFKaEQsU0FBU21oQyx1QkFBd0IzL0IsR0FBSyxZQUFhQSxFQUFJO0labVN2RCxTQUFTNC9CLGNBQWMzM0IsS0FBTUMsS0FBTUUsS0FBTUM7TUFDdkNKLFVBQVVDLFNBQVNFLFVBQVVDLE1BQzdCLFFBQ0Y7SUNvRkEsU0FBU3czQixtQkFBbUJsM0IsR0FBRzFMLEVBQUV1QjtNQUMvQjtPQUFNLEVBQUU7T0FDQTtRQUFFLHVCQUF1QnZCLEVBQUVHLFdBQVd1TCxZQUFZbkssRUFBRW1LLFNBQVNBO01BQ3JFLElBQVcsSUFBRjNKLElBQU9BLElBQUk4Z0MsZ0JBQWlCOWdDO09BQUssQ0FDeEMySixRQUFRM0osS0FBSzhnQyxTQUFTOWdDO1FBQ3RCMkosUUFBUTNKLFNBQU84Z0MsU0FBUzlnQztRQUN4QjJKLFFBQVEzSixTQUFPOGdDLFNBQVM5Z0M7UUFDeEIySixRQUFRM0osU0FBTzhnQyxTQUFTOWdDO01BRTFCLFFBQ0Y7SUE2QkEsU0FBUytnQyxrQkFBa0JoaEM7TUFDekIsa0RBQ0Y7SVV0ZUEsU0FBU2loQztNQUNQLElBQUlDLEdBQ0F2akMscUJBQXFCQTtNQUN6QixPQUFPLDZCQUE0Qix3QkFDckM7SXRCcU9BLFNBQVN3akMsdUJBQXdCampDLEVBQUdHLEdBQUssT0FBTyxjQUFjQSxFQUFHO0lnQnVGakUsU0FBUytpQyxlQUFlNTFCLElBQ3RCLE9BQU9BLFNBQ1Q7SVM1VEEsU0FBUzYxQiw2QkFBZ0MsVUFBWTtJRStDckQsU0FBU0MsZUFBZ0IxaUIsTUFBT0MsTUFBTzBpQjtNQUNyQyxHQUFLMWlCLGFBQWVBLFNBQVNELGlCQUFtQjtNQUNoREEsTUFBTUMsYUFBUzBpQjtNQUFRLFFBQ3pCO0kxQjBlQSxTQUFTQyx3QkFBd0JoOEIsR0FBSUU7TUFDbkMsT0FBTyxxQkFBcUJBLEdBQUdGLEdBQ2pDO0lVeGZBLFNBQVNpOEIsY0FBY3AwQixJQUFLM0IsSUFBS3N0QixPQUMvQjNyQixTQUFTM0IsT0FBT3N0QixNQUNoQixRQUNGO0lDa0RBLFNBQVMwSSxxQkFBcUIzbUI7TUFDNUIsR0FBR0EsMkJBQ0QsT0FBT0EsMEJBQ1g7SUVzVUEsU0FBUzRtQixtQkFBb0J6MkIsT0FBT2pMO01BQ2xDO09BQVEsS0FBSUEsZUFBZUEsZUFBZUEsY0FBYUE7T0FDakQsRUFBRSxxQkFBcUIyVDtNQUM3QixlQUFlMUksT0FBTzdNO01BQ3RCLFFBQ0Y7SVM3WUEsU0FBU3VqQyxrQkFBa0JqakMsSUFBSVQ7TUFDN0IsSUFBTSxFQUFFQSxTQUNGLE1BQU1vSCxNQUFNL0c7TUFDbEJ5QixPQUFPckI7TUFDUCxJQUFVLElBQUZzQixJQUFPQSxJQUFJMUIsRUFBRzBCLElBQU1ELEVBQUVDLEtBQUsvQixFQUFFK0I7TUFDckMsT0FBT0QsQ0FDVDtJVGlJQSxTQUFTNmhDLHFCQUFxQjMyQjtNQUM1QixJQUFJTCxLQUFPRyxpQkFBaUJFLFFBQzVCLE9BQU8sa0JBQ1Q7SVcvSkEsU0FBUzQyQjtNQUNQOytEQUNGO0lwQjJDQSxTQUFTQyx3QkFBeUI3akMsRUFBR3kyQixLQUFNcU47TUFDekMsS0FBSyxTQUFTOWpDO09BQUksQ0FDaEIsR0FBSSxNQUFNQSxHQUFJLE9BQU87UUFDckIsT0FBTyx3QkFBMEJBO01BRW5DLElBQUlrQixLQUFRbEIsY0FBVUEsT0FBTW1RLFdBQWFuUTtNQUN6QyxHQUFHa0IsS0FBTWxCLE1BQUtBO01BRGQsSUFFSXlRO01BQ0osR0FBSXpRO09BQVE7O09BQ1AsR0FBSUE7UUFBTyxNQUNQQSxTQUFTeVEsYUFBYyxDQUFFelEsT0FBUXlROztRQUNuQyxNQUNFelEsT0FBUSxDQUFFQSxPQUFReVE7TUFQM0IsSUFTYSxTQUFFQSxlQUNGO01BQ2IsR0FBSXZQO09BQU04aUM7O09BQ0wsT0FDSUY7aUJBQ1lFLGVBQWdCO2lCQUNoQkEsZUFBZ0I7aUJBQzFCO01BR1gsR0FBSXZOLGFBQWFBO09BQVcsQ0FFMUIsSUFBSXdOLElBQU0sV0FBV3hOLFVBQ3JCejJCLElBQUksV0FBV0EsSUFBSWlrQyxPQUFPQTtNQXRCNUIsSUF3QklDLE1BQVE7TUFDWixHQUFHek47T0FBVSxDQUNYLElBQUl4TyxJQUFNO1FBQ1YsR0FBR0E7U0FBTyxlQUNPLGdCQUFnQndPOztTQUU1QixDQUNILElBQUlybEIsS0FBTzZXLFVBQU13TztVQUNqQixHQUFHeU4sZUFBZTl5QjtXQUNoQjh5QixTQUFTLGdCQUFnQjl5QixPQUFPOHlCOztXQUVoQ0EsUUFBUSxlQUFlOXlCO01BRzdCLE9BQU87ZUFBeUI0eUIsa0JBQWtCRSxjQUFjSCxXQUFXLGlCQUM3RTtJWW1MQSxTQUFTSSxrQ0FBa0NwSyxNQUFPOTNCO01BQ2hEO1FBQ0UsSUFBUyxTQUFNbUYsTUFBTTJ5QixXQUNiLElBQUUsU0FBU3ZxQixpQkFBa0J1cUI7UUFDckM1ekIsVUFBVXpHO1FBQ1YsSUFBVyxJQUFGcUMsSUFBT0EsSUFBSUMsSUFBS0QsSUFBS29FLEtBQUtwRSxTQUFPeU4sVUFBVXpOO1FBQ3BELE9BQU8sY0FBY0UsRUFBR2tFLEtBTG5CLENBT1Q7SVFuU0EsU0FBU2krQix3QkFBMkIsUUFBVTtJaEJvSjlDLFNBQVNDLGNBQWV2aUMsR0FDdEIsT0FBTzZWLFNBQ1Q7SUF5SEEsU0FBUzJzQiw4QkFBOEIsUUFBUTtJTytNL0MsU0FBU0MsYUFBYWozQixHQUFJdkssR0FDeEIsUUFBUUEsR0FDUixRQUNGO0lYclRBLFNBQVN5aEMsZ0JBQWlCeGtDO01BQ3hCLEdBQUksU0FBVUE7T0FBSSxDQUNoQixJQUFJc2dDLFFBQVN0Z0M7UUFDYkEsSUFBSSxTQUFTQTtRQURiLElBRU0sRUFBRSxXQUFZQSxHQUNkLEVBQUVBLElBQUkrQjtRQUNaLEdBQUl1K0IsSUFBSyxDQUFFditCLE1BQUtBLEVBQUdFLE1BQUtBO1FBQ3hCLFVBQVdBLEVBQUdGO01BRWhCLEdBQUksTUFBTy9CLEdBQUksVUFBV3lSLElBQUtBO01BQy9CLGNBQWF6UixFQUFHQSxFQUNsQjtJVWhMQSxTQUFTeWtDLGNBQ1AsMEJBQ0Y7SVZzTkEsU0FBU0MsbUJBQW9CMWtDLEVBQUd1QjtNQUM5QixHQUFJdkIsTUFBTXVCLEVBQUc7TUFDYixHQUFJdkIsSUFBSXVCLEVBQUc7TUFDWCxHQUFJdkIsSUFBSXVCLEVBQUc7TUFDWCxHQUFJdkIsTUFBTUEsRUFBRztNQUNiLEdBQUl1QixNQUFNQSxFQUFHO01BQ2IsUUFDRjtJSmdIQSxTQUFTb2pDLGtCQUFrQnhrQyxFQUFFNEIsRUFBRXlwQixLQUM3QixPQUFPLGlCQUFpQnJyQixFQUFFNEIsRUFBRXlwQixJQUM5QjtJaUJ2VkEsU0FBU29aLGtCQUFrQkMsT0FBUUMsSUFBS25mLElBQUtwakI7TUFFM0M7T0FBWTtPQVFIO09BQ0s7T0FDSjtPQUNRO09BQ1A7T0FFSTtPQUNPO09BQ0o7T0FDQTtPQUNVO09BQ0o7T0FFUjtPQUNBO09BQ1M7T0FDRjtPQUNMO09BQ0E7T0FDQTtPQUNMO09BQ007T0FDRjtPQUNMO09BQ0s7T0FDRztPQUNUO09BQ0c7T0FDRTtPQUdLO09BQ0E7T0FDVDtPQUNBO09BQ0c7T0FDRDtPQUNDO09BQ0E7T0FDQTtPQUNHO09BQ0o7T0FDQTtNQUtkLEtBQUtzaUM7T0FBYyxDQUNqQkEsZ0JBQWdCLGVBQWdCQSxPQUFPa0M7UUFDdkNsQyxnQkFBZ0IsZUFBZ0JBLE9BQU9vQztRQUN2Q3BDLGVBQWdCLGVBQWdCQSxPQUFPeUM7UUFDdkN6QyxnQkFBZ0IsZUFBZ0JBLE9BQU9xQztRQUN2Q3JDLGVBQWdCLGVBQWdCQSxPQUFPd0M7UUFDdkN4QyxhQUFnQixlQUFnQkEsT0FBT2lDO1FBQ3ZDakMsYUFBZ0IsZUFBZ0JBLE9BQU9nQztRQUN2Q2hDLGdCQUFnQixlQUFnQkEsT0FBT3NDO1FBQ3ZDdEMsZUFBZ0IsZUFBZ0JBLE9BQU9tQztNQWhFekM7T0FtRVE7T0FBSzltQztPQUFHcW5DO09BQUlDO09BQUlDO09BR2pCLEdBQUUzQyxJQUFJMEI7T0FDSCxNQUFFMUIsSUFBSTJCO09BQ0osUUFBRTNCLElBQUk0QjtNQUVsQjtNQUFLO09BQVMsT0FDTC9nQjtnQkFFTDlJLFVBQ0E4cUI7O1VBSUF6bkMsSUFBSTJrQyxjQUFjaG9CO1VBQ2xCLEdBQUkzYyxPQUFRLENBQUV5bEIsTUFBTXlmLE9BQVE7VUFDNUIsR0FBSU4sSUFBSW1CLG9CQUFxQixDQUFFdGdCLE1BQU1zZixVQUFXO1VBQ2hENThCLE1BQU1nOUI7VUFDTjs7VUFJQSxHQUFJOWlDLGVBQWU2RTtXQUFPLENBQ3hCMDlCLElBQUltQixpQkFBaUJwQixPQUFPK0Isa0JBQWtCcmtDO1lBQzlDdWlDLElBQUlvQixZQUFZM2pDOztXQUNYLENBQ0x1aUMsSUFBSW1CLGlCQUFpQnBCLE9BQU84QixrQkFBa0Jwa0M7WUFDOUN1aUMsSUFBSW9COztVQUtOcUIsS0FBSzFDLGNBQWNob0I7VUFDbkIycUIsS0FBS0QsS0FBS3pDLElBQUltQjtVQUNkO1lBQUlzQjs7OztZQUFXQzs7OztZQUFXQTs7WUFBTTNDLE9BQU91Qzs7WUFDbkN2QyxhQUFhMkM7O1lBQU8xQyxJQUFJbUI7V0FBZ0IsQ0FDMUN0Z0IsTUFBTXVmLE1BQU87VUFFZnFDLEtBQUsxQyxjQUFjaG9CO1VBQ25CMnFCLEtBQUtELEtBQUt6QyxJQUFJbUI7VUFDZDtZQUFJc0I7Ozs7WUFBV0M7Ozs7WUFBV0E7O1lBQU0zQyxPQUFPdUM7O1lBQ25DdkMsYUFBYTJDOztZQUFPMUMsSUFBSW1CO1dBQWdCLENBQzFDL2xDLElBQUkya0MsYUFBYTJDLElBQ2pCN2hCLE1BQU15ZixPQUFRO1VBRWhCLEdBQUl1QyxhQUFjLENBQ2hCdC9CLE1BQU1xOUIsb0JBQ047O1VBS0YsR0FBSWlDO1dBQWEsQ0FDZkE7WUFDQTthQUFTLENBQ1BGLFNBQVMzQyxJQUFJYSxhQUFhK0I7Y0FDMUJILEtBQUsxQyxjQUFjNEM7Y0FDbkJELEtBQUtELEtBQUt4QztjQUNWO2dCQUFJd0M7Ozs7Z0JBQVdDOzs7O2dCQUFXQTs7Z0JBQU0zQyxPQUFPdUM7O2dCQUNuQ3ZDLGFBQWEyQzs7Z0JBQU96QztlQUFTLENBQy9CcGYsTUFBTXdmLGNBQWU7O2VBQ2hCLENBQ0wsR0FBSXVDLE1BQU01QyxJQUFJa0IsZUFBZ0IsT0FBT1Ysa0JBRXJDb0M7O1dBR0MsQ0FDTCxHQUFJNUMsSUFBSW1CLG9CQUFxQixPQUFPWDtZQUVwQ1IsSUFBSW1CO1lBQ0p0Z0IsTUFBTXFmO1lBQU07Z0JBSWRGLElBQUltQixxQkFDSixHQUFJMEIsWUFBYUE7O1VBR2pCOXFCLFFBQVFnb0IsYUFBYTJDO1VBQ3JCRTtVQUNBLEdBQUlBLE1BQU01QyxJQUFJaUIsZUFBZ0IsQ0FDNUIxOUIsTUFBTWs5QixjQUNOOztVQUtGVCxJQUFJYSxhQUFhK0IsVUFBVTdxQjtVQUMzQmlvQixJQUFJYyxhQUFhOEIsVUFBVTVDLElBQUlvQjtVQUMvQnBCLElBQUllLHNCQUFzQjZCLFVBQVU1QyxJQUFJcUI7VUFDeENyQixJQUFJZ0Isb0JBQW9CNEIsVUFBVTVDLElBQUlzQjtVQUN0Q3pnQixNQUFNcWY7VUFDTjs7VUFHQSxJQUFJbjhCLEVBQUlnOEIsV0FBVzNrQztVQUNuQjRrQyxJQUFJdUIsV0FBV3FCO1VBQ2Y1QyxJQUFJeUIsbUJBQW1Ccm1DO1VBQ3ZCNGtDLElBQUl3QixnQkFBZ0J6OUI7VUFDcEI2K0IsS0FBS0EsS0FBSzcrQjtVQUNWQSxJQUFJZzhCLFdBQVcza0M7VUFDZnVuQyxTQUFTM0MsSUFBSWEsYUFBYStCO1VBQzFCSCxLQUFLMUMsY0FBY2g4QjtVQUNuQjIrQixLQUFLRCxLQUFLRTtVQUNWO1lBQUlGOzs7O1lBQVdDOzs7O1lBQVdBOztZQUFNM0MsT0FBT3VDOztZQUNuQ3ZDLGFBQWEyQzs7WUFBT0M7V0FDdEI1cUIsUUFBUWdvQixhQUFhMkM7O1dBRXJCM3FCLFFBQVFnb0IsYUFBYWg4QjtVQUN2QixHQUFJNitCLE1BQU01QyxJQUFJaUIsZUFBZ0IsQ0FDNUIxOUIsTUFBTW05QixjQUNOO2dCQUtGbjlCLE1BQU1vOUIsd0JBQ047O1VBR0FYLElBQUlhLGFBQWErQixVQUFVN3FCO1VBQzNCaW9CLElBQUljLGFBQWE4QixVQUFVbmxDO1VBQzNCLElBQUlxbEMsSUFBTTlDLElBQUl1QjtVQUNkdkIsSUFBSWdCLG9CQUFvQjRCLFVBQVU1QyxJQUFJZ0Isb0JBQW9COEI7VUFDMUQsR0FBSUYsS0FBS0U7V0FBSyxJQUVSL0Isc0JBQXNCNkI7O1dBQVU1QyxJQUFJZ0Isb0JBQW9COEI7VUFFOURqaUIsTUFBTXFmO1VBQU07aUJBR1osT0FBT007TUFJWFIsSUFBSTBCLFVBQVVrQjtNQUNkNUMsSUFBSTJCLGFBQWE1cEI7TUFDakJpb0IsSUFBSTRCLGVBQWVpQjtNQUNuQixPQUFPdC9CLEdBQ1Q7SUtyTkEsU0FBU3cvQixrQkFBbUI3bkMsRUFBR3VCO01BQzdCLFVBQVdBLGlCQUFpQixDQUFFdkIsUUFBUXVCLEVBQUc7TUFDekMsR0FBSUEsTUFBUSxDQUFFdkIsUUFBUXVCLE1BQU87TUFDN0IsSUFBSVEsRUFBSVI7TUFBVSxNQUFPUSxJQUFLL0IsRUFBRStCLEtBQUtSLEVBQUVRO01BQUksUUFDN0M7SUlrRUEsU0FBUytsQyxnQkFBZ0JwbkIsTUFBT2xULElBQUt4TCxJQUFLZTtNQUN4QyxJQUFVLElBQUZoQixJQUFPQSxJQUFJQyxJQUFLRCxJQUFJLE1BQ3BCeUwsTUFBSXpMLFNBQU9nQixFQUVuQixRQUNGO0lwQjhKQSxTQUFTZ2xDLGVBQWU1aUMsS0FBTTg3QjtNQUM1QixJQUFJbDhCLEtBQU8sa0JBQWtCSTtNQUM3QixrQkFBa0JKLFVBQVVrOEI7TUFDNUIsUUFDRjtJTjRSQSxTQUFTK0cscUJBQXFCMWdDLEdBQUlFLElBQU0sV0FBUyxrQkFBa0JGLEdBQUlFLEdBQUs7SUF5QzVFLFNBQVN5Z0MsdUJBQXVCM2dDLEdBQUlFLElBQ2xDLE9BQU8sb0JBQW9CQSxHQUFJRixHQUNqQztJV3ZMQSxTQUFTNGdDLG1CQUFtQnh5QjtNQUMxQjtPQUFNLEVBQUU7T0FDRixFQUFFQTtPQUNGLEVBQUVBO09BQ0QsR0FBRSwwQkFBMEJsQyxFQUFFdlM7TUFDckMsSUFBUyxJQUFEYyxJQUFJQSxJQUFFZCxFQUFFYztPQUFJLElBQ1QsSUFBRGlCLElBQUlBLElBQUV3USxFQUFFeFE7UUFBSSxDQUNsQixJQUFNLEVBQUUwUyxJQUFJM1QsT0FBS2lCLE9BQ1gsRUFBRWpCLEtBQUd5UixTQUFReFE7U0FDbkIsR0FBR0o7VUFBUyxDQUNWOEksUUFBUTNCO1dBQ1IyQixRQUFRM0I7V0FDUjJCLFFBQVEzQjtXQUNSMkIsUUFBUTNCOztVQUNILENBQ0wyQixRQUFRM0IsU0FBU25IO1dBQ2pCOEksUUFBUTNCLFNBQVNuSDtXQUNqQjhJLFFBQVEzQixTQUFTbkg7V0FDakI4SSxRQUFRM0I7TUFJZCxPQUFPMkIsRUFDVDtJRXpOQSxTQUFTeThCLDJCQUEyQm43QixPQUFPL0s7TUFDekMsSUFBSTBLLEtBQU9HLGlCQUFpQkU7TUFDNUJ0TSxxQkFBcUJpTSxrQkFBa0IxSztNQUN2QyxRQUNGO0lQb0hBLFNBQVNtbUMsdUJBQXdCampDO01BQy9CO09BQVMsWUFBVUEsaUJBQWtCLHVCQUF1QkEsTUFBTUE7T0FDekQsS0FBRSxrQkFBa0JBO01BQzdCLEdBQUcsbUJBQW1CSjtPQUFZLENBQ2hDO1NBQVMsS0FBRSxpQkFBaUJBO1NBQ25CLElBQUU7U0FDRixJQUFFLGtCQUFrQi9DO1FBQzdCLFlBQVkrRixNQUFNL0Y7UUFDbEIsT0FBTyxxQkFBcUIrRjtNQUU5Qix3QkFBd0IsdUJBQXVCNUMsTUFDakQ7SVVyTUEsU0FBU2tqQyxpQkFBaUJyb0MsR0FBSyxPQUFPQSxDQUFHO0lSdU16QyxTQUFTc29DO01BQ1AsSUFBSXo5QixFQUFJcEw7TUFDUixHQUFHb0wsYUFBYUE7T0FBYzs7a0JBQ2dCbkIsSUFBSzYrQjtXQUMvQyw4QkFBOEI3K0IsS0FDOUIsaUJBRmdDOztPQUsvQixHQUFHbUI7UUFBbUI7O21CQUNZMjlCO1lBQ25DLEdBQUdBLFlBQVksOEJBQ2lCQSxZQUZOLEVBTWhDO0lBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztVOzs7Ozs7O0lzQm5XRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDa0JLQztLQUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQ3dCQUM7S0FDQUM7S0FDQUM7S0FJQUM7S0FDQUM7Ozs7S0N6QkFDO0tBbUhBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDbzlFTUM7S0FRUUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDbGxGZEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0NzRUVDO0tBQ0FDO0tBQ0FDO0tBQ0FDOzs7S0EvRVlDO0tBbUhaQztLQUNBQztLQUNBQztLQUNBQzs7O0tBbUlBQztLQUNBQztLQUNBQztLQUNBQzs7O0tDeFBGQztLQUNBQztLQUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Q0FZNkI7SUEzSjFCLFNLeFFUQyxjTDRhZWY7TUFBSztRQUFLLCtCQUFWQSxJQUFnQzsyQkFBRztJQXBLekMsU0M3SlRnQixXRHVVV3JDLEdBQUksMkJNemNmTixPTnljV00sRUFBd0I7SUExSzFCLFNDNUpUc0MsYUR1VWFoRixHQUFJLHFCTTFjakJvQyxPTjBjYXBDLEVBQTBCO0lBM0s5QixTQzNKVGlGLFlEdVVZakYsR0FBSSxvQk0zY2hCb0MsT04yY1lwQyxFQUF5QjtJQTVLNUIsU0MxSlRrRixVRHVVVTVKO01BQXlCLHFCTTVjbkM4RyxPTjRjbUMsNEJBQXpCOUcsR0FBMEM7SUE3SzNDLFNDekpUNkosWUR1VVkzRixHQUF5QixxQk03Y3JDNEMsT042Y3FDLFVBQXpCNUMsR0FBNEM7SUE5Sy9DLFNDeEpUNEYsY0R1VWNwRjtNQUNoQixjTS9jRW9DLE9OOGNjcEM7TUFDUSxvQk0vY3RCb0M7TU4rYytDLHFCTS9jL0NBLE9OK2MyRDtJQWhMbEQsU0N2SlRpRDtNRHdVbUIsb0JNaGRuQmpELFdOZ2Q0QyxxQk1oZDVDQSxPTmdkd0Q7SUFqTC9DLFNDdEpUa0QsV0QyVVc1QyxHQUFJLDJCTW5kZkwsT05tZFdLLEVBQXdCO0lBckwxQixTQ3JKVDZDLGFEMlVhdkYsR0FBSSxxQk1wZGpCcUMsT05vZGFyQyxFQUEwQjtJQXRMOUIsU0NwSlR3RixZRDJVWXhGLEdBQUksb0JNcmRoQnFDLE9OcWRZckMsRUFBeUI7SUF2TDVCLFNDbkpUeUYsVUQyVVVuSztNQUF5QixxQk10ZG5DK0csT05zZG1DLDRCQUF6Qi9HLEdBQTBDO0lBeEwzQyxTQ2xKVG9LLFlEMlVZbEcsR0FBeUIscUJNdmRyQzZDLE9OdWRxQyxVQUF6QjdDLEdBQTRDO0lBekwvQyxTQ2pKVG1HLGNEMlVjM0Y7TUFDaEIsY016ZEVxQyxPTndkY3JDO01BQ1Esb0JNemR0QnFDO01OeWQrQyxxQk16ZC9DQSxPTnlkMkQ7SUEzTGxELFNDaEpUdUQ7TUQ0VW1CLG9CTTFkbkJ2RCxXTjBkNEMscUJNMWQ1Q0EsT04wZHdEO0lBNUwvQyxTQy9JVHdELGlCRCtVZSxjTS9kZnpELFFOK2RlLGtCSy9kZkQsTUwrZDZDO0lBaE1wQyxTQzlJVDJELGdCRCtVd0MsMEJBQWIsYUFBYTtJQWpNL0IsU0M3SVRDLG9CRCtVbUMsc0NBQWE7SUFsTXZDLFNDNUlUQyxrQkQrVTRDLDRCQUFiLGFBQWE7SUFuTW5DLFNDM0lUQyxzQkQrVXVDLGtDQUFhO0lBcE0zQyxTQ2hGVEMsd0JYNU9MLElVMGhCcUNoSTtJQTlOdkIsU0M1RVRpSTtNRGtUTTtPQUZzQ0M7T0FBTnJKO09BQWhCc0o7T0FBTnZKO09BRVYsU0FGZ0J1SixLQUVULFVBRitCRDtNQUN0QyxxQkFEVXRKLEtBQXNCQztJQVF0QixJQUFoQnVKLGlCTWpmQXpEO0lOaWZnQixTQ3RUaEIwRCxRRHdUWS9HO01BQ2Q7UUFFbUI7O1NBQ0osU0FOYjhHO1NBTWE7bUJBRFhFLGFBQ0FDO3FCQUNBRTtjQUNDLG1CQUhESCxrQkFHcUQsV0FOM0NoSDtjQU0rQyxrQkFGekRpSCxXQUdTO21CQUZURTtTQURXLG9CQURYSCxhQUNBQztTQUtVLHdCQVhaSCxjQU1FRyxTQUNBRTtTQUlVLFNBQVZDO1FBQVU7b0JBQ2U7SUFaWCxTQ3BUaEJDLGtCRGtVZ0Isa0JBZGhCUCxtQkFjeUQ7SUFkekMsU0N2VGhCUSxLRHVVS0M7TUFDUCxjQUNBLDZCQUZPQSxRQUVTO0lBRVY7c0RDeFVKRjtJRDZVb0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0M5aUJwRDVHO09BQ0FGOzs7Ozs7Ozs7Ozs7OztPQVNBRztPQUNBRztPQTZCQUM7T0V5Q1FRO09GdkNSQztPQUlBUjtPQ2xDQUM7T0FDQUM7T0FDQUM7T0FNQUM7T0FDQUM7T0FDQUM7O09EbUdBTztPQUVBQztPQUVBRztPQURBRDtPQUVBRTtPQUVBQztPQ3JHQUk7T0FEQUM7T0VRQUM7T0N4QkFHO09DQUFDO09BQ0FDO09MaUlBMEM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FFQUU7T0FEQUQ7T0FHQUc7T0FEQUQ7T0toSkFyRDtPQURBQztPQUVBTjtPQXFCQTBGO09BQ0FuRjtPQUNBa0Y7T0FFQTdFO09BQ0FGO09BQ0FHO09BQ0FHO09BSkF3RTtPTDhJQUQ7T0FDQXRFO09BQ0FxRTtPQUNBRDtPQUNBRDtPS3ZKQWpFO09BQ0FDO09BU0ErRDtPRC9CQTdEO09BREFDO09BRUFGO09Ka0xBNkQ7T0FDQWpEO09JOUlBVDtPSmdKQU87T0FDQUM7T0FDQWlEO09BQ0FEO09BQ0FEO09BQ0FEO09BQ0FEO09BQ0FEO09JektBRDtPQUNBbkM7T0F5SEFrQzs7T0orREFkO09BSUFDO09BQ0FXO09BQ0FQO09BQ0E1RTtPRHNMSXFDO09DckxKNkM7SUQ2VW9EOzs7OztPQzlpQnBENUc7T0FDQUY7O09BU0FHO09BQ0FHO09BNkJBQztPRXlDUVE7T0Z2Q1JDO09BSUFSO09DbENBQztPQUNBQztPQUNBQztPQU1BQztPQUNBQztPQUNBQzs7T0RtR0FPO09BRUFDO09BQ0FFO09BQ0FDO09BQ0FDO09BRUFDO09DckdBSTtPQURBQztPRVFBQztPQ3hCQUc7T0NBQUM7T0FDQUM7T0xpSUEwQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPS2pKQXREO09BREFDO09BRUFOO09BcUJBMEY7T0FDQW5GO09BQ0FrRjtPQUVBN0U7T0FDQUY7T0FDQUc7T0FDQUc7T0FKQXdFO09MOElBRDtPQUNBdEU7T0FDQXFFO09BQ0FEO09BQ0FEO09LdkpBakU7T0FDQUM7T0FTQStEO09EL0JBN0Q7T0FEQUM7T0FFQUY7T0prTEE2RDtPQUNBakQ7T0k5SUFUO09KZ0pBTztPQUNBQztPQUNBaUQ7T0FDQUQ7T0FDQUQ7T0FDQUQ7T0FDQUQ7T0FDQUQ7T0l6S0FEO09BQ0FuQztPQXlIQWtDO09KK0RBZDtPQUlBQztPQUNBVztPQUNBUDtPQUNBNUU7T0FDQWtGO0lENlVvRDthTy9pQnBEb0IsS0FBS3ZJLEdBQUksVUFBSkEsRUFBVTthQUNmd0ksTUFBTXhJLEdBQUksVUFBSkEsRUFBVzthQUVqQnlJLGVBQVUseUJBRUk7YUFFZEMsZ0JBQVcseUJBRUU7YUFFYkM7TUFBWSxtQkFDSixJQUFMM0ksV0FBSyxVQUFMQSxHQUNNLFFBQUk7YUFFYjRJO01BQWEsa0JBQ0wsU0FDQyxJQUFMNUksV0FBSyxVQUFMQSxFQUFXO2FBRWY2SSxTQUFTL0ksRUFFWGdKO01qQnZDSCxTaUJ1Q0dBLE1BRFUsSUFBTDlJLEVBQ0w4SSxLQURlLHFCQURKaEosRUFDTkUsSUFDVyxPQUFoQjhJO2FBRUVDLFVBQVVqSixFQUNaZ0o7TWpCMUNILFNpQjBDR0EsS0FBZSxPQUFmQSxFQUNXLElBQUw5SSxFQUROOEksS0FDaUIscUJBRkxoSixFQUVORTthQUVKZ0osSUFBS1QsS0FBTUM7TWpCN0NoQixtQmlCOENhLElBQUx4SSxXQUFVLHFCQURSdUksS0FDRnZJO01BQ00sSUFBTGlKO01BQVcscUJBRkpULE1BRVBTO2FBRUpDLEtBQU1YLEtBQU1DO01qQmpEakIsbUJpQmtEYSxJQUFMeEksV0FBSyxrQkFERnVJLEtBQ0h2STtNQUNNLElBQUxpSjtNQUFLLGtCQUZHVCxNQUVSUzthQU1KRSxNQUFPWixLQUFNQyxNQUFNWSxHQUFHQztNQUFLLFNBQVJEOztpQkFBR0MsT0FDSixJQUFOQyxHQURVRCxNQUNKLGtCQURYZCxVQUNLZTs7aUJBRE9GO2lCQUFHQyxPQUVGLElBQU5FLEtBRlFGLE1BRUYsa0JBRlBiLFdBRUNlO01BQ3FCLFFBQUs7YUFFeENDLFFBQVNqQixLQUFNQyxNQUFNWSxHQUFHQztNQUFLLFNBQVJEOztpQkFBR0MsT0FDTixJQUFOQyxHQURZRCxNQUNOLGtCQURUZCxVQUNHZTtRQUVLO2VBSElGO2VBQUdDLE1BSVA7TUFGRyxJQUFORSxLQUZVRjtNQUVKLGtCQUZMYixXQUVEZSxLQUVJOzs7O09BaERsQmhCO09BQ0FDO09BRUFDO09BSUFDO09BSUFDO09BSUFDO09BSUFDO09BSUFFO09BSUFDO09BSUFFOzs7T0FRQUM7T0FLQUs7O0lqQjlETDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T2tCK0NLQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJbEIvQ0w7YW1CMEJzQkMsU0FBU3JHLEdBQUksbUJBQUpBLG1CQUFrQjthQVUzQnNHLGFBQWFsSixFQUFFN0UsR0FBSSxzQkFBTjZFLEVBQUU3RSxFQUF5QzthQUN4RGdPLGlCQUFpQm5KLEVBQUU3RSxFQUFFb0UsR0FDeEMsc0JBRG9DUyxFQUFFN0UsRUFBRW9FLEVBQ0Q7O0tBV3JDNko7S0FDQUM7S0FFQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FFQUM7S0FFQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FJQUM7S0FDQUM7S0FDQUM7YUF3QkVDLEtBQU1DO01BQ0EsZ0JBREFBO1FBRUk7eUNBRkpBO1NBVEcsTUFQSUQ7U0FZa0MsVUFabENBO1FBWWtDLFVBVjdDOUssTUFPQWdMO2tDQVN5QjthQU0zQkMsT0FDRXZLO01uQnZHVDtTbUJ5R1UsU0FGREEsTUFFaUIsYUFGakJBO1lBQ0F3SyxLQURBeEs7TVh5YUEsa0JXeGFBd0ssS0FEQXhLOztNQU1vQixHQUFuQixTQUxEd0ssU0FLb0IsYUFMcEJBO1lBSUFsSSxLQUpBa0k7d0JBSUFsSSxLQUVHO01BRUYsb0JBSkRBO2VBSkFrSTtlQVNHLDBDQUF1QzthQUUzQmxJLEtBQU1rSSxNQUNwQixPQURvQkEsT0FDQzthQUVQQyxHQUFJRCxNQUNsQixPQURrQkEsT0FDRzs7OEJBakJ4QkQsT0FhaUJqSSxLQUdBbUk7S0FJbkJDO0tBQ0FDO0tBQ0FDO0tBU0VDO2FBR0FDLE9BQU9ySjtNQUNULGNBRFNBLE1BQ1QsVUFEU0EsS0FIUG9KO01BS0E7TUFDRixnQ0FIU3BKLEVBR0Q7YUFFTnNKLE9BQU8vSyxHQUFJLE9BQUpBLG9CQUFvQzthQUUzQ2dMLHdCQUF3QjNDLEVBQUU0QyxFQUFFQztNQUM5QixjQUQ0QkQsTUFDNUIsVUFENEJBLElBQ04sT0FESTVDLFlBRXhCOzhCQUY0QjZDLFNBRWI7YUFHZkMsUUFBUTlDLEVBQUU0QztNQUNaLHdCQURVNUMsRUFBRTRDO01BRVosaUNBRlU1QyxFQUFFNEMsRUFFRDthQUdURyxhQUFhL0MsRUFBRTRDO01BQ2pCLHdCQURlNUMsRUFBRTRDO01BRWpCLHNDQUZlNUMsRUFBRTRDLEVBRUQ7YUFHZEksUUFBUWhELEVBQUU0QyxFQUFFakw7TUFDZCx3QkFEVXFJLEVBQUU0QztNQUVaLHlCQUZVNUMsRUFBRTRDLEVBQUVqTCxFQUVEO2FBR1hzTCxVQUFVakQsRUFBRTRDO01BQ2Qsd0JBRFk1QyxFQUFFNEM7TUFFZCwyQkFGWTVDLEVBQUU0QyxFQUVEO2FBR1hNLFVBQVVsRCxFQUFFNEM7TUFDZCx3QkFEWTVDLEVBQUU0QztNQUVkLG1DQUZZNUMsRUFBRTRDLEVBRUQ7YUFLWE8sU0FBUzdDLEdBQUc4QyxHQUFHN0MsR0FBRzhDLEdBQUdqSztNQUVGOzs7UUFGRUE7Ozs7UUFBVGdLOzs7VUFDYSxPQURoQjlDLE1BQVlsSCxTQUFUZ0s7Ozs7UUFBTUM7OztVQUVDLE9BRko5QyxNQUFNbkgsU0FBSGlLO1FBSWY7b0JBSmtCaks7U0FJbEIsVUFBZSwyQkFKVGtILEdBQUc4QyxHQUFHN0MsR0FBRzhDLEdBQUdqSztRQUltQjtNQURyQyw4Q0FDcUM7Ozs7OztPQTNDeENxSjtPQUtBQztPQU9BSTtPQUtBQztPQUtBQztPQUtBQztPQUtBQztPQU9BQzs7OztzQm5CL0tQOzs7T21CcUlPWDs7O09BM0dlNUI7T0FVQUM7T0FDQUM7T0FZakJDO09BQ0FDO09BRUFDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BRUFDO09BRUFDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDOztPQUlBQztPQUNBQztPQUNBQztVQXdCRUM7O09BNEJGTTtPQUNBQztPQUNBQzs7OzthQ3RHQWUsdUJBQXNDLGVBQWU7YUFLckRDLGlCQUFrQkM7TUFDRyxJQUFuQkMsUUFEZ0JEO01BRXBCLFNBUEVGO01BT0Y7UUFFZSxJQUFUSSxPQUFTLFdBSFhEO1FBSUYsc0JBTGtCRCxJQUlkRTtRQUlKLE9BSklBO1lBR0QxRDttQ0FDSCx5QkFBb0QsTUFEakRBLENBQ3dELEVBQTNELE1BREdBLEVBRUk7YUFJUDJELHFCQUFzQkg7TUFDRCxJQUFuQkMsUUFEb0JEO01BRXhCLFNBcEJFRjtNQW1CcUIsSUFFbkJJLE9BQVMsV0FGVEQ7TUFHSixzQkFKd0JELElBR3BCRTtNQUNKLE9BRElBLE1BRUU7YUFPSkUsTUFRRUM7TUFFSixJQUFJQyxFQUFKLGFBRklEO01BRUosT0FBSUMsVUFGQUQsT0FFQUMsVUFGQUQsSUFLQyxpQkFMREEsSUFLcUI7YUNOdkJFLFVEU1dGO01BRWIsSUFBSUMsRUFBSixhQUZhRDtNQUViLE9BQUlDLFVBRlNELE9BRVRDLFVBRlNELElBS1IscUJBTFFBLElBS2dCOzs7bUJBOUMzQk4saUJBYUFJLHFCQVlBQyxNQ09BRzs7YUN5VkVDLFFEdlZRaE4sR0FDSixJQUFKVyxFQUFJLHNCQUNSLE9BRllYLEVBRVosT0FESVcsQ0FFZ0I7YUFFbEJzTSxTQUFVL007TUFDSixJQUFKNE0sRUFBSSxhQURJNU07U0FDUjRNLG9DQUlELE9BTFM1TTtNQUUwRCxzQ0FGMURBLEVBTVQ7YUFHRGdOLE9BQVE5SyxHQUFjLG9CQUFkQSxjQUFrRDthQVMxRCtLLE1BQUluTixFQUFFVztNQUNSOzs7bUNBRFFBO3FERHpETjRMLGlCQ3lETTVMO2dCQUNBLGtCQURGWCxTQUNZO2FBRWhCb04sUUFBUXBOLEVBQUVXO01BQ1QsVUFEU0E7UUFFUDsyQkFGT0E7U0FFUCxrQkFGT0Esa0JENURWNEwsaUJDNERVNUw7UUFFTywyQkFGVFg7TUFHTDs7O21DQUhPVztxREQ1RFY0TCxpQkM0RFU1TDtnQkFHQyxrQkFISFgsU0FHYTs7Ozs7T0FOckJtTjtPQVRBRDtPQVRBRDtPQXFCQUc7T0M2VEVKO09EelZGRDtPQ3lWRUM7T0RsVkZDO09BU0FDOzthQ25EQUcsYUFBVyxRQUFHO2FBRWRDLFNBQU8zTSxTQUFPLFVBQVBBLEVBRlAwTSxNQUU2QjthQUU3QkUsS0FBSzVNLEVBQUU2TSxZQUFVLFVBQVo3TSxFQUFFNk0sS0FBd0I7YUFFM0JDLFNBQU9DLEtBQUtDO01BQ1oscUJBRE9EO01BQ1A7WUFFS0YsY0FBSDdNO1FBQXFCLFVBQXJCQSxpQnRCakNYLE9zQjhCUzhNLFNBR0tELEtBSE9HO01BRVQsa0JBRlNBLE9BRzRCO2FBRXhDQyxNQUFJNU4sRUFBRTZOO01BQWUscUJBQWZBO01BQWU7UUFFSTtTQUFwQkw7U0FBSDdNO1NBQXVCLG9CdEJyQ2xDLE9zQm1DU2lOLE1BQUk1TixFQUVDd047UUFBZSxxQkFGaEJ4TixFQUVGVztNQURDLFFBQ2lDO2FBRXBDbU4sV0FBVzlOLEVBQUU2TjtNdEJ2Q3RCLElzQnVDc0JFO01BQVM7UUFBTSxxQkFBZkE7UUFBZTtVQUd4QixJQURDUCxjQUFIN00sV0FDRSxtQkFIT1gsRUFFVFc7VUFDRTtZQUVRLElBQUxDO1lBQWMsVUFBZEEsaUJ0QjVDaEIsT3NCdUNTa04sV0FBVzlOLEVBRU53TjtVQUNELElBSFNPLE1BRVJQOztRQURGLFNBSW9DO2FBRXZDUSxPQUFPaE8sRUFBRTZOO010QjlDbEIsSXNCOENrQkU7TUFBUztRQUFNLHFCQUFmQTtRQUFlO2NBRW5CUCxjQUFIN007VUFDRCxjQUhNWCxFQUVMVztXQUVVLFVBRlZBLGlCdEJoRFgsT3NCOENTcU4sT0FBT2hPLEVBRUZ3TjtjQUZJTyxNQUVKUDs7UUFERixTQUlnQjthQUVuQlMsT0FBT0o7TUFBZSxxQkFBZkE7TUFBZTtZQUVqQkwsY0FBSDdNO1FBQ0ksZ0JBREpBLGlCdEJ2RFgsT3NCcURTc04sT0FFS1Q7TUFERixRQUVtQjthQUV0QlUsU0FBU2xPLEVBQUU2TjtNQUFlLHFCQUFmQTtNQUFlO1FBR2pCO1NBREpMO1NBQUg3TTs7U0FDTyxvQnRCN0RsQixPc0IwRFN1TixTQUFTbE8sRUFFSndOO1FBQ0YsMkJBSE14TixFQUVQVztNQURDLFFBRTBCO2FBSTdCd04sVUFBVW5PLEVBQUVvTyxJQUFJUDtVQUFKUSxVQUFJTjtNQUN0QjtRQUFNLHFCQURnQkE7UUFDaEI7VUFHVTtXQURIUDtXQUFIN007V0FDTSxpQkFKQVgsRUFBRXFPLE1BR1IxTjtXQUhRME47V0FBSU4sTUFHVFA7O1FBREYsT0FGT2EsTUFLUTthQUVwQi9LLEtBQUt0RCxFQUFFNk47TXRCeEVoQixJc0J3RWdCRTtNQUNiO1FBQU0scUJBRE9BO1FBQ1A7Y0FFT1AsY0FBSDdNO1VBQ0osV0FKS1gsRUFHRFc7Y0FIR29OLE1BR0FQOztRQURGLFNBR007YUFFWGUsT0FBT3ZPLEVBQUV3TztNQUNULHFCQURPeE8sRUFBRXdPO01BQ1Q7NkJBRUtDLGVBQUg5TjtRQUFtQixVQUFuQkEsaUJ0QmxGWCxPc0IrRVM0TixPQUFPdk8sRUFHRnlPO01BREQsUUFDNkI7YUFFckNDLFNBQVNDLElBQ0wscUJBREtBLE1BQ0wsZ0JBSUc7YUFFUEMsT0FBT0Q7TUFDSCxxQkFER0E7TUFDSCxjQUNLRSxjQUFIbE8sMEJBQUdrTztNQUdQLFFBQUk7YUFXR0MsU0FBT0M7VUFQRDdKLE9BQUt5SixHQU9KSTtNQU5sQjtRQUFNLHFCQURnQko7UUFDaEI7VUFJRix5QkFMYXpKLHlCQUFLeUo7UUFHbEIsT0FIYXpKLEtBUUY7YUFVSjhKLE1BQU1oUCxFQUFFK087VUFSRGpULElBQUU2UyxHQVFESTtNQVBuQjtRQUFNLHFCQURjSjtRQUNkO2NBR0tFLGNBQUhsTztVQUNKLFdBR2FYLEVBUkNsRSxFQUlWNkU7VUFDSixRQUxjN0UsZ0JBQUU2UyxHQUlURTs7UUFEUCxTQU1ZO2FBVUxJLFdBQVdqUCxFQUFFa1AsT0FBS0g7VUFSTjdKLEtBUUNnSyxPQVJJcFQsSUFBRTZTLEdBUURJO01BUDdCO1FBQU0scUJBRHdCSjtRQUN4QjtVQUlTO1dBREpFO1dBQUhsTztXQUNPLGtCQUdPWCxFQVJDa0YsS0FBS3BKLEVBSXBCNkU7V0FDTyxJQUxhN0U7V0FBTG9KO1dBQUtwSjtXQUFFNlMsR0FJbkJFOztRQURQLE9BSG1CM0osS0FTRzthQUVwQmlLLFFBQVFDLEVBQUVUO010QnBJbkIsSXNCb0ltQkU7TUFDaEI7UUFBTSxxQkFEVUE7UUFDVjtVQUlGLElBRE9FLGNBQUhwTyxXQUNKLGdCQUxVeU8sRUFJTnpPO1VBQ0osYUFMWWtPLEtBSUxFO1VBRFA7aUJBRW1CO2FBRWpCTSxPQUFPRCxFQUFFVDtNdEIzSWxCLElzQjJJa0JFO01BQ2Y7UUFBTSxxQkFEU0E7UUFDVDtVQUlGLElBRE9FLGNBQUhwTyxXQUNKLGdCQUxTeU8sRUFJTHpPO1VBQ0osUUFGQTtVQUVBLElBTFdrTyxLQUlKRTs7UUFEUCxTQUVrQjthQUVoQk8sS0FBS0YsRUFBRVQ7TXRCbEpoQixJc0JrSmdCRTtNQUNiO1FBQU0scUJBRE9BO1FBQ1A7Y0FHS0UsY0FBSHBPO1VBQ0QsY0FMSXlPLEVBSUh6TyxHQUNRLFVBRFJBO2NBSktrTyxLQUlGRTs7UUFEUCxTQUVpQzthQUUvQlEsU0FBU3ZQLEVBQUUyTztNdEJ6SnBCLElzQnlKb0JFO01BQ2pCO1FBQU0scUJBRFdBO1FBQ1g7VUFJSSxJQURDRSxjQUFIcE8sV0FDRSxrQkFMS1gsRUFJUFc7VUFDRSxHQUdKK0wsT0FDRSxPQURGQTtVQUhJLElBTE9tQyxLQUlORTs7UUFEUCxTQU1VO2FBU1JTLE1BQU14UCxFQUFFMk8sR0FBR2M7VUFBSFosUUFBR2E7TUFDakI7UUFBTSxxQkFEUWI7UUFDUjtVQUlJLElBRENFLGNBQUhwTyxXQUNFLG1CQUxPK087VUFLUDtnQkFHS0MsZ0JBQUgvTztZQUNKLFdBVElaLEVBSUpXLEVBSUlDO2dCQVJFaU8sS0FJSEUsS0FKTVcsS0FRRkM7O1VBRFA7UUFKSixTQU9pQjthQUVmQyxXQUFXNVAsRUFBRWtGLEtBQUt5SixHQUFHYztVQUFSckssWUFBS3lKLFFBQUdhO01BQzNCO1FBQU0scUJBRGtCYjtRQUNsQjtVQUlJLElBRENFLGNBQUhwTyxXQUNFLG1CQUxpQitPO1VBS2pCO1lBSVM7YUFESkM7YUFBSC9PO2FBQ08sa0JBVEZaLEVBQUVvRixPQUlYekUsRUFJSUM7YUFST3dFO2FBQUt5SixLQUliRTthQUpnQlcsS0FRWkM7O1VBRFAsT0FQV3ZLO1FBR2YsT0FIZUEsT0FVWTthQUV6QnlLLFNBQVM3UCxFQUFFMk8sR0FBR2M7VUFBSFosUUFBR2E7TUFDcEI7UUFBTSxxQkFEV2I7UUFDWDtVQUlJLElBRENFLGNBQUhwTyxXQUNFLG1CQUxVK087VUFLVjtZQUlGLElBRE9DLGdCQUFIL08sYUFDSixnQkFUT1osRUFJUFcsRUFJSUM7WUFDSixhQVRTaU8sS0FJTkUsS0FKU1csS0FRTEM7WUFEUDs7UUFKSixTQU02QjthQUUzQkcsUUFBUTlQLEVBQUUyTyxHQUFHYztVQUFIWixRQUFHYTtNQUNuQjtRQUFNLHFCQURVYjtRQUNWO1VBSUksSUFEQ0UsY0FBSHBPLFdBQ0UsbUJBTFMrTztVQUtUO1lBSUYsSUFET0MsZ0JBQUgvTyxhQUNKLGdCQVRNWixFQUlOVyxFQUlJQztZQUNKLFFBRkE7WUFFQSxJQVRRaU8sS0FJTEUsS0FKUVcsS0FRSkM7O1VBRFA7UUFKSixTQU00QjthQUUxQkksUUFBTUMsR0FBR3JCLEdBQUdjO1VBQUhaLFFBQUdhO01BQ2xCO1FBQU0scUJBRFNiLFFBQ0gsbUJBRE1hO1FBQ047O1lBSVI7YUFEcUJDO2FBQUgvTzthQUFYbU87YUFBSHBPO2FBQ0osZ0JBTFFxUCxHQUlKclAsRUFBY0M7WUFDbEIsYUFMV2lPLEtBSUpFLEtBSk9XLEtBSU9DOzs7U0FEckI7UUFLQSxTQUFLO2FBRUhNLFVBQVFDLElBQUl2QixHQUFHYztVQUFIWixRQUFHYTtNQUNyQjtRQUFNLHFCQURZYixRQUNOLG1CQURTYTtRQUNUOzs7WUFJQSxJQURhQyxnQkFBSC9PLGFBQ1YsYUFMRXNQLFNBSVF0UDtZQUNWLFNBQUpzQyxPQUxVMkwsVUFBR2EsS0FJSUM7WUFFTixPQURYek07VUFLSjtRQUZBLG9CQUVFO2FBTUFpTixTQUFTblEsRUFBRWxFLEVBQUVzVTtNQUNuQixHQURpQnRVLElBQUVzVTtRQUNMO2NBREd0VTtTQUVKLG9CdEJyUGhCLE9zQm1QU3FVLFNBQVNuUSxPQUFJb1E7UUFFWCxxQkFGT3BRLEVBQUVsRTtNQUtmLFFBQUc7YUFFSHVVLEtBQUsvUCxFQUFFTjtNQUNULFFBRE9NO1FBSUwsaUN0QjlQTCxPc0JtUFM2UCxTQU9HblEsT0FBRk07TUFFTCxnQ0FFYzthQUVWZ1EsT0FBTzNQO01BQ0osVUFESUEsaUJ0QmhRaEIsT3NCZ1FTMlAsT0FBTzNQLFNBQ0s7YUFFWjRQLFFBQVF2UTtNQUNILG9CdEJwUWQsT3NCbVFTdVEsUUFBUXZRO01BQ1IscUJBRFFBLFVBQ087YUFNZndRLGVBQWU3QjtNQUNyQjtNQUFVLGdCQURXQSxrQnRCMVF4QixPc0IwUVM2QixlQUFlN0IsZUFDVzthQU85QjhCLE1BQU05QjtNQUNGLHFCQURFQTtNQUNGO1FBSWtCO1NBRGJFO1NBQUhsTztTQUNnQixvQnRCdlIzQixPc0IwUVM2UCxlQVFFN0I7UUFLSyxVQURMaE8saUJ0QnRSWCxPc0I4QlM4TSxTQXdQS29CO01BRFAsUUFFd0M7YUFNdEM2QixTQUFTMVEsRUFBRVc7TUFDVCxJQUFKQyxFQUFJLFdBRE9aLEVBQUVXO01BRVIsVUFETEMsaUJ0QjlSUCxPc0I2UlM4UCxTQUFTMVEsRUFDWFksU0FDa0I7YUFXcEIrUCxRQUFRM1EsRUFBRVc7TUFDTCxvQnRCM1NWLE9zQjZSUytQLFNBYUkxUSxFQUFFVztNQUNMLHNCdEIzU1YsVXNCMFNlQSxRQUNTO2FBSWZpUSxTQUFTNVEsRUFBRWxFLEVBQUU2UztNQUNiLHFCQURhQTtNQUNiO1FBSVc7U0FETkU7U0FBSGxPO2NBSlM3RTtTQUtBLG9CdEJwVHBCLE9zQitTUzhVLFNBQVM1USxPQUlKNk87UUFDRCxxQkFMSzdPLEVBQUVsRSxFQUlUNkU7TUFESixRQUVpQzthQUUxQmtRLEtBQUs3USxFQUFFMk87TUFDbEIsaUN0QnZUSCxPc0IrU1NpQyxTQU9VNVEsT0FBRTJPLFNBQ0g7YUFRVG1DLFVBQVU5USxFQUFFUSxFQUFFbU87TUFDZCxxQkFEY0E7TUFDZDtRQUlNLElBRERFLGNBQUhsTyxXQUNJLGVBTElYLEVBQUVRLEVBSVZHO1FBRUssVUFETG9RLG1CdEJwVVgsT3NCK1RTRCxVQUFVOVEsRUFLUitRLElBREdsQztNQURQLFFBRzBCO2FBRTVCbUMsS0FBS2hSLEVBQUVRLEVBQUVtTztNQUNKLG9CdEJ4VVYsT3NCK1RTbUMsVUFRQzlRLEVBQUVRLEVBQUVtTztNQUNKLHNCdEJ4VVYsVXNCdVVZbk8sUUFDZ0I7YUFLbkJ5USxTQUFTM1EsRUFBRXFPO01BQ2pCLGFBRGVyTztlQXJUYitNOztpQkEwVFEscUJBTE9zQjtpQkFLUDt1QkFHS0UsY0FBSGxPO21CQUNLLFVBRExBLEVBQ0ssU0FURkwsVUFRQXVPO2lCQURQLFFBRTJCO2FBRWpDcUMsS0FBSzVRLEVBQUVxTztNQUNULEdBRE9yTyxNQUNPLDBCQUFzQixnQkFEN0JBLEVBQUVxTyxHQUVJO2FBb0JYd0MsS0FBSzdRLEVBQUVxTztNQUNULFlBRE9yTzs7aUJBQUVxTzs7dUJBZFF5QyxJQWNWOVEsRUFkWXVPLEtBY1ZGO21CQWJUO3FCQUFNLHFCQURhRTtxQkFDYjt1QkFJRixzQkFMYXVDO3VCQUtiLFNBQUlDLElBRUYsa0JBSEt0Qzt1QkFDUCxJQUxhcUMsSUFLVEMsSUFMV3hDLEtBSVJFOztxQkFEUCxTQWlCZTtlQUxMLHlCQUtLO2FBRWJ1QyxXQUFXbEMsRUFBRVQ7TUFDYixxQkFEYUE7TUFDYjtZQUdLRSxjQUFIbE87UUFDRCxrQkFMVXlPLEVBSVR6TztxQ3RCMVhYLE9zQnNYUzJRLFdBQVdsQyxFQUlOUDs7TUFEUCxRQUU4QzthQUU1QzBDLFdBQVduQyxFQUFFVDtNdEI3WHRCLElzQjZYc0JFO01BQ25CO1FBQU0sSUFHSjJDLEtBSEksV0FEYTNDO1FBQ2IsR0FHSjJDO2NBQVN6QyxLQUFUeUMsUUFBTTdRLEVBQU42UTtVQUNLLGNBTFVwQyxFQUlUek8sUUFKV2tPLEtBSVJFO1VBQzZCLE9BRHRDeUM7UUFERSxTQUV3QzthQUV0Q0MsTUFBTXpCLEdBQUdyQjtNQUNULHFCQURTQTtNQUNUO1FBSXdEO1NBRG5ERTtTQUFIbE87U0FDc0QsZ0JBTGxEcVAsR0FJSnJQO1NBQzBDLG9CdEJ6WXJELE9zQjZYUzRRLGdCQVdLMUM7U0FDOEIsb0J0QnpZNUMsT3NCb1lTNEMsTUFBTXpCO1NBS2lCLGdCQUxqQkEsR0FJSnJQO1NBQ1Msb0J0QnpZcEIsT3NCc1hTMlEsZ0JBa0JLekM7UUFDRCx5QnRCelliLFVzQndZV2xPO01BREosUUFFcUU7O2FBeUJyRStRLGVBR0Esa0JBQWtCO2FBaUJoQkMsUUFBUWhEO01BQ2QsU0ExQmFvQztRQTJCTCxxQkFGTXBDO1FBRU4sY0FHS0UsY0FBSGxPLFdBQ0ssVUFETEEsRUFDSyxRQURGa087UUFEUCxRQUVvQjtNQTlCZCxJQU5Hck8sRUFNSCxRQURDdVE7TUFDRDtRQUxBLHNCQURHdlE7UUFDSCxvQkFER0Esa0JGN1hiK0wsaUJFNlhhL0wsS0FxQ2Q7YUFFS29SLEtBQUtqRDtNQUNYLFNBckJVM087UUFzQkYscUJBRkcyTztRQUVILGNBR0tFLGNBQUhsTyxXQUNLLFVBRExBLEVBQ0ssS0FERmtPO1FBRFAsUUFFaUI7TUF6QlIsSUFBVGdELFVBREk3UjtNQUNLO1FBS0gsSUFBSkEsRUFBSSxTQUxONlIsT0FWRkgsU0FlUSxrQkFBSjFSLElBQ0QsQ0FvQk47YUFHSzhSLElBQUluRCxHQUFHYztNQUNQLHFCQURJZDtNQUNKO1FBSUksSUFEQ0UsY0FBSGxPLFdBQ0UsbUJBTEc4TztRQUtIO2NBR0tDLGdCQUFIOU87VUFDVSxhQUxkRCxFQUlJQyxrQnRCamRmLE9zQnljU2tSLElBSUtqRCxLQUlJYTtRQURQO01BSkosUUFNNEI7YUFFMUJxQyxLQUFLL1IsRUFBRTJPLEdBQUdjO01BQ1YscUJBRE9kO01BQ1A7UUFJSSxJQURDRSxjQUFIbE8sV0FDRSxtQkFMTThPO1FBS047VUFJVztXQUROQztXQUFIOU87V0FDUyxvQnRCN2R4QixPc0JvZFNtUixLQUFLL1IsRUFJQTZPLEtBSUlhO1VBQ0QscUJBVEgxUCxFQUlIVyxFQUlJQztRQURKO01BSkosUUFNOEI7YUFFNUJvUixXQUFXckQsR0FBR2M7TUFDZCxxQkFEV2Q7TUFDWDtZQUdLRSxjQUFIbE87UUFDSyxVQURMQSxpQnRCbmVYLE9zQitkU3FSLFdBQWN2QyxHQUlUWjtNQURQLGtCQUhnQlksS0FLVTthQTRCNUJ3QyxjQUFjL0IsSUFBSXZQLEVBQUVnTyxHQUFHL04sRUFBRTZPO01BQ3hCLHNCQURhUyxJQUFJdlAsRUFBS0M7Ozs7a0JBYm5CLHFCQWFxQjZPO2tCQWJyQjt3QkFHS0MsY0FBSDlPOzJCQVVOcVIsY0FBYy9CLElBQUl2UCxFQUFFZ08sR0FWZC9OLEVBQUc4TztrQkFEUCxVQVdnQi9PLEVBQUVnTzs7Z0JBQUZoTzs7a0JBTmQscUJBTWdCZ087a0JBTmhCO3dCQUdLRSxjQUFIbE87MkJBR05zUixjQUFjL0IsSUFIUnZQLEVBQUdrTyxLQUdjak8sRUFBRTZPO2tCQUp2QixVQUlxQjdPLEVBQUU2TyxLQUlXO2FBRXBDeUMsYUFBYWhDLElBQUl2QixHQUFHYztNQUNoQixxQkFEYWQsTUFDUCxtQkFEVWM7TUFDVjs7Y0FNZUMsZ0JBQUg5TyxhQUFYaU8sY0FBSGxPO2lCQWJSc1IsY0FNYS9CLElBT0x2UCxFQUFHa08sS0FBV2pPLEVBQUc4TztZQUhsQnhNOztxQkFESCxhQUNHQTtNQUVILE9BRkdBLENBSXdCO2FBRzNCaVAsUUFBUUM7TUFDUixxQkFEUUE7TUFDUjtZQUdVQyxnQ0FBUDFSO1FBQ0ksVUFESkEsaUJ0QnJoQlosT3NCaWhCU3dSLFFBSVVFO01BRFosUUFFcUI7YUFFbkJDLFFBQVFGO01BQ1IscUJBRFFBO01BQ1I7WUFHVUMsZ0NBQUp6UjtRQUNDLFVBRERBLGlCdEI1aEJmLE9zQndoQlMwUixRQUlVRDtNQURaLFFBRXFCO2FBRXZCRSxNQUFNSDtNQUNLLG9CdEJoaUJoQixPc0J3aEJTRSxRQU9FRjtNQUNSLHlCdEJoaUJILE9zQmloQlNELFFBY0VDLGdCQUNnQjthQVFsQkkseUJBQXlCeFMsRUFBRTJPO010QnhpQnBDLElzQndpQm9DRTtNQUNqQztRQUFNLHFCQUQyQkE7UUFDM0I7VUFJSSxJQURDRSxjQUFIcE8sV0FDRSxtQkFMcUJYLEVBSXZCVztVQUNFO1lBRUYsSUFEVUM7WUFDRDtvQkFEQ0E7bUN0QjlpQnJCLE9zQndpQlM0Uix5QkFBeUJ4UyxFQUlwQitPO1VBQ0QsSUFMdUJGLEtBSXRCRTs7UUFEUCxTQU1vQzthQUVsQzBELDBCQUEwQnpTLEVBQUUyTztNdEJuakJyQyxJc0JtakJxQ0U7TUFDbEM7UUFBTSxxQkFENEJBO1FBQzVCO1VBSUksSUFEQ0UsY0FBSHBPLFdBQ0UsbUJBTHNCWCxFQUl4Qlc7VUFDRSx5QkFMd0JrTyxLQUl2QkU7VUFDRCxJQUdTMkQ7VUFDRjtrQkFERUE7O29CdEIzakJ0QixPc0JtakJTRCwwQkFBMEJ6UyxFQUlyQitPO1FBRFAsU0FNNEM7YUFFOUM0RCxjQUFjM1MsRUFBRTJPO01BRWxCLG9CdEJoa0JILE9zQm1qQlM4RCwwQkFXVXpTLEVBQUUyTztNQUNsQjs2QnRCL2pCSCxPc0J3aUJTNkQseUJBc0JVeFMsRUFBRTJPO21CQUVZO2FBRTVCaUUsVUFBVXhELEVBQUVUO01BQ2QsY0FBeUJoTyxHQUFTLHNCQUR0QnlPLEVBQ2F6TyxFQUFjO01BQTFCLG9CdEJua0JoQixPc0I4Q1NxTixZQW9oQlFXO01BQ2QseUJ0Qm5rQkgsT3NCOENTWCxPQW9oQk1vQixFQUFFVCxlQUM2QjthQVd6Q2tFLEtBQUtDO01BQ0QsNEJ0Qi9rQlQsT3NCdUNTaEYsV0FvREpjLE9BbWZLa0UsV0FDc0I7YUFFdkJDLFVBQVVEO01BQ0csZUFESEEsS0FDRztNQUNoQixZQURDRztRQUVLLFlBRkVELE9BR1Q7TUFHYSxVQU5YQyxxQnRCbGxCUCxPc0JpbEJTRixVQUNLQyxhQU1vQjtpQkFNZkUsV0FBV0o7TUFDckIscUJBRHFCQTtNQUNyQjtRQUVVLElBREpLLGVBQUp4RSxZQUNRLG1CQURSQTtRQUNRO1VBUVc7V0FQWkU7V0FBSGxPO1dBT2UsYUFYWHVTO1dBV1c7O1dBQ1csb0J0QjFtQnpDLFVzQmttQmtCckUsS0FPSW1FO1dBQ1Msb0J0QjFtQi9CLGdCc0JnbUJlRztVQVVFLHlCdEIxbUJqQixVc0JrbUJleFMsRUFPQXNTO1FBUkksSUFjVyxhQWpCWEMsWUFpQlc7UUFDTixVQURURyx1QnRCL21CZixXc0IrbUJzQkQsUUFmUEQ7TUFxQlIsaUJBdkJZRCxhQXVCVzthQWtCekJJLFlBQVl0VCxFQUFFMk8sR0FBR2M7TUFDbkIsY0FDVzlPO1FBQ1AsY0FBU0MsR0FDUCxrQkFKUVosRUFFSFcsRUFDRUMsRUFDRjtRQURQLHNCdEIxb0JQLE9zQm1DU2dOLFdBb21CYTZCLFNBS1g7TUFKVSxTQUpOcUQsVXRCcG9CZixPc0JtQ1NsRixXQW9tQlVlO01BRmhCLG9CdEJyb0JILFdzQndCS3RCLE1BNG1CVXlGOzRCdEJwb0JmLE9zQnFEUzdFLGtCQXlsQko7YUFFQXNGLFFBQVE1RSxHQUFHYztNQUNiLDRCQUFpQjlPLEVBQUVDLEdBQUssVUFBUEQsRUFBRUMsRUFBVyxFQURwQitOLEdBQUdjLEdBQ3dCO2FBRW5DK0QsYUFBYUM7TUFDZixTQUFRdlE7UUFDQSxxQkFGT3VRO1FBRVAsVUFJRixJQURHOVMsV0FDSCxVQURHQSxFQUpEdUM7UUFHRixRQUVXO01BTGpCLE9BQVFBLENBT1A7YUFFQ3dRLGFBQWEvRTtNQUNmLElBQUluTyxLQURXbU87TUFDZjtRQUVRLHFCQUZKbk87UUFFSSxjQUdLbU8sWUFBSGhPLFdBTE5ILE9BS1NtTyxhQUFIaE87UUFESixRQUdNO2FBSU5nVCxLQUFLN1g7TUFDWCxTQURXQSxVQUNGLFVBREVBLGlCdEJ6cUJkLE9zQnlxQlM2WCxpQkFDZ0I7Ozs7T0F0bEJwQmpGO09BT0FFO09BZ0JTRTtPQW5DTHhMO09BUEE2SztPQXFES2E7T0FXQUM7T0FHTEU7T0FPQUU7T0FPQUM7T0FPQUM7T0FrQkFDO09BWUFJO09BWUFDO09BV0FDO09BV0FDO09BVUFFO09BM01KNUM7T0FFQUM7T0FFQUM7T0E4TkE4QztPQTNLSTlCO09BaUxBK0I7T0FHQUM7T0FlSkU7T0F3QkFFO09BdlFJL0M7T0FtUktpRDtPQXhRTDdDO09BUEFGO09BZ1NKa0Q7T0FpQkFFO09Bc0JBQztPQVFJRztPQU9BQztPQU9BRTtPQWtEQUU7O09BU0FDO09Ba0pBbUI7T0FuakJBdEY7T0F1QkFRO09BS0FDOztPQStZQTREO09BV0FDO09BV0FDO09BdUNKRTtPQTBJQXFCO09BVEFEO09BeEdBZjs7T0ErQkFJO09BSUFDO09BaUZBWTtPQVVBRTtPQVlJQzs7UUN2cEJKQzthQUNBQyxLQUFLM1QsR0FBSSxVQUFKQSxFQUFVO2FBQ2Y0VCxNQUFNbEksRUFBR21JLFdBQVUsR0FBYm5JLEdBQW9DLElBQUwxTCxFQUEvQjBMLEtBQW9DLE9BQUwxTCxFQUFpQixPQUE3QzZULFNBQW9EO2FBQzdEQztNQUFNLFVBQW1CLElBQUw5VCxXQUFLLE9BQUxBO01BQWlCLHNDQUE0QjthQUNqRStULEtBQUtySSxFQUFFNUwsR0FBSSxHQUFONEwsR0FBNEMsSUFBTDFMLEVBQXZDMEwsS0FBNEMsa0JBQTFDNUwsRUFBcUNFLEdBQVosUUFBb0I7YUFDcERnVSxZQUFPLFVBQW1CLElBQUx0SSxXQUFLLE9BQUxBLEVBQWlCLFFBQUk7YUFDMUN1SSxNQUFJblUsRUFBRTRMLEdBQUksR0FBSkEsR0FBMEMsSUFBTDFMLEVBQXJDMEwsS0FBK0MscUJBQWpENUwsRUFBdUNFLElBQVosUUFBMkI7YUFDMURrVSxPQUFNUixLQUFNQztNdkJ6QmpCLFV1QnlCMkMsSUFBTDNULFdBQUssa0JBQTFCMlQsS0FBcUIzVCxHQUFzQixPQUFqRDBUO2FBQ05TLE9BQUtyVTtNdkIxQlYsVXVCMEJpQyxJQUFMRSxXQUFLLGtCQUF2QkYsRUFBa0JFLEdBQW1CO2FBQzFDb1UsZUFBVSxnQkFBdUM7YUFDakRDLGVBQVUsZ0JBQXVDO2FBRWpEQyxRQUFNeEUsR0FBR3lFLEdBQUdySTtNQUFLLEdBQVJxSTtXQUFHckksUUFDQXNJLEdBREF0SSxNQUNUdUksR0FETUYsd0JBQUh6RSxHQUNIMkUsR0FBU0Q7O09BQ0EsS0FGQXRJLEdBRUE7TUFDVCxRQUFLO2FBRVJ3SSxVQUFRMUUsSUFBSXVFLEdBQUdySTtNQUFLLEdBQVJxSTs7V0FBR3JJLElBQ0csSUFBTnNJLEdBREd0SSxNQUNHLGtCQURWOEQsU0FDSXdFO1FBR0U7TUFEQSxPQUhDdEksT0FJQTthQUVmeUksVUFBV2pCO012QnpDaEIsVXVCeUMrRCxJQUFMMVQsV0FBSyxVQUFMQSxHQUFsQixVQUF4QjBUO2FBQ1hrQixlQUFVLFVBQWdDLElBQUw1VSxXQUFLLFVBQUxBLEtBQVYsUUFBa0I7YUFDN0M2VTtNQUFTLFVBQXVDLElBQUw3VSxXQUFLLHNCdkIzQ3JELE9zQjBCS29OLFNDaUIyQ3BOO01BQWpCLE9EbkIxQm1OLEtDbUI0RDs7OztPQXpCNUR1RztPQUNBQztPQUNBQztPQUNBRTtPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUVBQztPQUtBSTtPQU1BQztPQUNBQztPQUNBQzs7YUN6QkFDLEdBQUc5VSxHQUFJLFVBQUpBLEVBQVE7YUFDWCtVLE1BQU1qTSxHQUFJLFVBQUpBLEVBQVc7YUFDakJrTSxRQUFNL1UsRUFBRzRUO01BQVUsU0FBYjVULE1BQWtDLElBQUxELEVBQTdCQyxLQUFrQyxPQUFMRCxFQUFvQixPQUE5QzZULFNBQXFEO2FBQzlEb0I7TUFBUyxtQkFBaUIsSUFBTGpWLFdBQUssT0FBTEE7TUFBb0IsdUNBQStCO2FBQ3hFa1Y7TUFBWSxrQkFBZ0M7TUFBWixJQUFMcE07TUFBSyxPQUFMQSxDQUE2QzthQUN4RXFNLE9BQUtsVixFQUFFSDtNQUFJLFNBQU5HLE1BQTJCLElBQUxELEVBQXRCQyxLQUEyQixrQkFBekJILEVBQW9CRSxHQUEyQixPQUFqREMsQ0FBa0Q7YUFDdkRtVixPQUE0QnRNLEdBQXJCLFNBQXFCQSxNQUFKLElBQUw3SSxFQUFTNkksS0FBSixPQUFMN0ksRUFBeUIsT0FBaEI2SSxDQUFpQjthQUM3Q3VNLE1BQUl2VixFQUFnQ2dKO014QnpCekMsU3dCeUJ5Q0EsTUFBWCxJQUFMOUksRUFBZ0I4SSxLQUFSLHFCQUF4QmhKLEVBQWdCRSxJQUFnQyxPQUFoQjhJO2FBQ3BDd00sVUFBVXhWLEVBQXNDRTtNeEIxQnJELFN3QjBCcURBLEtBQWEsT0FBYkEsRUFBZCxJQUFMOEksRUFBbUI5SSxLQUFSLHFCQUE5QkYsRUFBbUJnSjthQUM3QnlNLE9BQU1ULEdBQUlDO014QjNCZixtQndCMkJ3QyxJQUFML1UsV0FBSyxrQkFBN0I4VSxHQUF3QjlVO01BQXVCLElBQUw4STtNQUFLLGtCQUEzQ2lNLE1BQXNDak07YUFDaEQwTSxPQUFLMVY7TXhCNUJWLG1Cd0I0QitCLElBQUxFLFdBQUssa0JBQXJCRixFQUFnQkUsR0FBc0I7YUFDM0N5VixXQUFXM1Y7TXhCN0JoQixrQndCNkJzRCxTQUFkLElBQUxnSixXQUFLLGtCQUF4QmhKLEVBQW1CZ0o7YUFDOUI0TSxhQUFRLHlCQUF3QzthQUNoREMsZ0JBQVcseUJBQXdDO2FBRW5EQyxRQUFPZCxHQUFJQyxNQUFNYyxHQUFHQztNQUFLLFNBQVJEOztpQkFBR0MsT0FDTixJQUFOdEIsR0FEWXNCLE1BQ04sa0JBRFBoQixRQUNDTjs7aUJBRFNxQjtpQkFBR0MsT0FFQSxJQUFOMU0sR0FGTTBNLE1BRUEsa0JBRlRmLFdBRUczTDtNQUNSLFFBQUs7YUFFWDJNLFVBQVNqQixHQUFJQyxNQUFNYyxHQUFHQztNQUFLLFNBQVJEOztpQkFBR0MsT0FDUixJQUFOdEIsR0FEY3NCLE1BQ1Isa0JBRExoQixRQUNETjtRQUVPO2VBSElxQjtlQUFHQyxNQUlQO01BRkssSUFBTjFNLEdBRlEwTTtNQUVGLGtCQUZQZixXQUVDM0wsR0FFRTthQUVoQjRNO01BQVksbUJBQWlCLElBQUxoVyxXQUFLLFVBQUxBLEdBQXlCLFFBQUk7YUFDckRpVztNQUFVLG1CQUFpQixJQUFMalcsV0FBSyxVQUFMQSxLQUFzQixRQUFFO2FBQzlDa1c7TUFBUztRQUFpQixJQUFMbFcsV0FBSyxzQnhCOUMvQixPc0IwQktvTixTRW9CcUJwTjtNQUErQixPRnRCcERtTixLRXNCNkQ7Ozs7T0E1QjdEMkg7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FFQUM7T0FLQUc7T0FNQUM7T0FDQUM7T0FDQUM7O0lDekIrQixTQUEvQkMsbUJ6QnJCTDtJeUJxQm9DLElBQy9CQztJQUQrQixTQUcvQkMsZ0JBQVcsa0JBQWlDO0lBSGIsU0FZL0JDLG1CQUFZLG1DQUEwQztJQVp2QixtQkFZbkIsV0FBMEM7SUFadkI7OztzQnpCckJwQztPeUJxQktIO09BQ0FDOztPQUVBQztPQVNBQztJQVorQjthQ0EvQjdYLElBQUkyQjtNMUJyQlQsUTBCcUJTQSxpQkFDK0MsT0FEL0NBLEVBQ21CLGdDQUF3QzthQU8vRG1XLFFBT0F2VDtNMUJwQ0w7TTBCNkJlLFNBT1ZBO29CQUxRLDBCQUtSQTs7O29CQU5ROztvQkFNUkE7O2tCQURRO2tCQUZBO21CQURBO21CQUVBOztNbEI4ZUo7UWtCM2VNLElBQUo2TixJQUFJOzhCQUFKQSxNQURON047UUFDVSw0QkFBSjZOO01BS0osSUFBSXZRLEVBQUo7NEJBQUlBO01BQUosc0JBQUlBLFVBTk4wQztNQU1FLHNCQUFJMUMsV0FOTjBDO01BTUUsc0JBQUkxQyxVQU5OMEM7TUFNRSw0QkFBSTFDLEVBS2M7YUFFcEJrVyxVQUNBeFQ7TUFEWSxTQUNaQTtNQURZOzs7O01sQitkUixnQmtCOWRKQSxZQUlNO2FBRU55VCxVQUNBelQ7TUFEWSxTQUNaQTtNQURZOzs7O01sQndkUixnQmtCdmRKQSxZQUlNO2FBRU4wVCxnQkFDQTFULEdBRGtCLFlBQ2xCQSx5QkFDTTthQUVOMlQsZ0JBQ0EzVCxHQURrQixZQUNsQkEseUJBQ007YUFJTjRULFVBQVFDLEdBQUdDLElBQUssT0FBUkQsS0FBR0MsTUFBc0I7YUFDakNDLFFBQU9GLEdBQVFDLElBQVMsY0FBakJELEtBQVFDLFdBQTBCOzs7O09BckR6Q3JZO09BUUE4WDtPQW9CQUM7T0FPQUM7T0FPQUM7T0FJQUM7T0FNQUM7T0FDQUc7OztLekJqREFDO0tBQ0FDO0tBQ0FDO0tBQ0FDO0tBRUFDO0tBQ0FDO2FBRUFDLEtBQUtoSjtNQUNQLE9BRE9BO2VBTEw2STtlQUtLN0ksY0FFUyxZQWhCZHBVLGFBY0tvVSxTQUdGO2FBRUhpSixLQUFLako7TUFDUCxPQURPQSxZQVhMNEksU0FXSzVJLFFBRVMsWUF0QmRyVSxhQW9CS3FVLFNBR0Y7YUFFSGtKLFNBQVM1YjtNQUFJLGNBQUpBLE1BQUksVUFBSkE7Ozs7O01BSlgsV0FJeUU7YUFDdkU2YixPQUFPN2I7TUFBTyxnQkFBUEE7O2VVekJQMkU7aUJWQ2UsMEJBd0JSM0UsbUNBQXdEO2FBSS9EOGIsUUFBUXBKLEdBQUksT0FBSkEsV0FBVzthQUNuQnFKLFFBQVEzVSxHQUFJLE9BQUpBLENBQWU7YUFDdkI0VSxRQUFRdEo7TUFDVixhQURVQTtlVS9CUi9OO2lCVkUwQjs7OzZDQTZCbEIrTjtnQkFFTzthQUVmdUoscUJBSEYsV0FDaUI7YUFJZkMsbUJEeERMO1FDeURLQzthQUNBQyxXRDFETDthQ3lFY0Msb0JBQW9CQyxHQUFJLGNBQUpBLGlCQUF5QjthQUM3Q0Msa0JBQWtCRCxHQUFJLFFBQUpBLGlCQUFrQzthQUNwREUsaUJBQWlCRixHQUFJLE9BQUpBLFlBQW1DO2FBQ3BERyxXQUFXalksRUFBRWtPLEdBQUksWUFBTmxPLFdBQUVrTyxDQUE4QzthMEJvZHBFZ0ssWTFCbmQ0QmxZLEdBQUksT0FBSkEsZUFBK0I7YUFFM0RtWSxrQkFLRmpLO01BTHdCLFFBS3hCQTtRQUhPLFNBR1BBO1VBRk8sVUFFUEE7WUFETyxXQUNQQTtjQUFPLGFBQVBBLEVBQ0ssNkJBRG1CO1lBREY7VUFEQTtRQURBO01BRE4sNEJBS0M7YUFFZmtLLG1CQUdGbEs7TUFIeUIsUUFHekJBO1FBRE8sV0FDUEEsR0FBTyxhQUFQQSxFQUNLLDZCQURtQjtRQURGO01BRE4sNEJBR0M7dUJBSlEsV0FJUjs7OztPQWxFZjBJO09BQ0FDO09BSUFHO09BQ0FDO09BRUFDO09BS0FDO09BS0FDO09BQ0FDO3NCRDVDTDs7T0NnREtDO09BQ0FDO09BQ0FDO09BSUFDO09BRUFDO09BQ0FDO09BQ0FDO09BZVNDO09BRUFHO09BREFEO09BRUFFO08wQm9kVEM7TzFCamRBQztPQVFBQzs7YWE5REFDLFNBQU92Vzs7OztVQUZDLHVEQUFMd1c7O1FBREcsV0FHbUI7YUFFekJDLE9BQUt0VixFQUFFbkIsR0FBSSxVQUFObUIsRUFBRW5CLEVBQVE7YUFFZk07TUFBSyxVQUVHLElBQVJhLFdBQVEsT0FBUkEsRUFETSx1QkFDRzthQUVUZDtNQUFLLFVBRUcsSUFBTEwsV0FBSyxPQUFMQSxFQURHLHVCQUNHO2FBRVQwVyxJQUVjMVcsRUFBRTlCO01BRGxCLFFBQ2tCQTtZQUFGeVksTUFBRTNIO1FBQ2hCO2FBRGMySDtnQkFHVEMsSUFIU0QsT0FHWnhWLEVBSFl3VjtxQkFBRTNILElBR1EsT0FBdEI3TjtZQUE2QixRQUhmNk4sWUFBRjJILElBR1RDLElBSFc1SDs7VUFFUjtNQUhJLGdDQUtBO2FBRVo2SCxRQUVjN1csRUFBRTlCO01BRGxCLFFBQ2tCQTtZQUFGeVksTUFBRTNIO1FBQ2hCO2FBRGMySDtnQkFHVEMsSUFIU0QsT0FHWnhWLEVBSFl3VjtxQkFBRTNILElBR1EsVUFBdEI3TjtZQUFrQyxRQUhwQjZOLFlBQUYySCxJQUdUQyxJQUhXNUg7O1VBRVI7TUFISSxrQ0FLQTthQUlSOEgsV0FBV3hYLEdBQUdDO1VBQUh3WCxRQUFHQztNQUNwQjtXQURpQkQ7MkJBR2Y1VixFQUhlNFYsUUFBR0csUUFHbEIvVixFQUhrQjZWLE1BQUhELFVBQUdDOztRQUVaLE9BRllBLEtBR2M7YUFFaENHLElBQUluWCxHQUFJLGtCQUFKQSxJQUFtQjthQU1uQm9YLFdBQVMxZCxFQUFFd0UsRUFBRU47TUFDbkIsR0FEaUJNLEtBQUZ4RSxFQUNBO01BRUwsSUFBSnFFLEVBQUksV0FIU0gsRUFBSmxFO01BSVIsVUFERHFFLEVBQ0MsV0FKUXJFLFVBQUV3RSxFQUFFTixHQUlNO29CQVNsQjZELElBQUk3RDtNQUNYLFFBRE82RDtRQUVQLFFBRk9BO2NBakJnQnVLLE1BQUl0UztVQUMzQjtlQWdCTytILE9BakJvQi9ILFNBRnpCeWQsSUFFcUJuTDtZQUVsQixRQUZzQnRTLFVBRUosb0JBZVprRSxFQWpCZ0JsRSxHQUFKc1MsZUFBSXRTOztRQW9CdEIsb0JBSEUrSCxJQUFJN0Q7TUFDSyxpQ0FFSzs7TUFFTCxjQUVYRyxXQUFIaUMsV0FBWSxjQUFaQSxFQUFZLFFBQVRqQztNQURHLFFBQ2U7bUJBSWJIO01kMUZiO1FjNEZxQixJQUFib0MsV0FBSG1CLFdBQWdCLGFBRlJ2RCxFQUVSdUQsR0FBNEIsVUFBaEJwRCxFQUFnQixNQUZwQkgsRUFFTG9DO01BREc7aUJBR0d0RyxFQUFFa0U7TWQ5RmhCO1FjZ0dxQixJQUFib0MsV0FBSG1CLFdBQWdCLGFBRkx2RCxFQUFGbEUsRUFFVHlIO1FBQThCLFVBQWxCcEQsRUFBa0IsSUFGckJyRSxVQUFFa0UsRUFFUm9DO01BREc7b0JBR0RwQyxFQUFFb0MsR0FBSSxhQUFOcEMsRUFBRW9DLEVBQWM7cUJBRWJwQyxFQUFFeVo7Ozs7VUFHUTtXQUFiclg7V0FBSG1CO1dBQWdCLHFCQUhWdkQsRUFHTnVEOzttQkFBR25COztRQURHLFlBR0M7b0JBR0FwQztNZDVHZDs7O2NjOEdRb0MsYUFBSG1CO1VBQVEsV0FGQ3ZELEVBRVR1RDtzQkFBR25COztRQURHO3FCQU9BcEMsRUFBRStZOzs7O2NBRkwzVyxXQUFIbUI7VUFBUSxXQUVGdkQsSUFGTnVEO1VBQVEsOEJBQUxuQjs7UUFERyxTQUdpQjt5QkFFVHBDLEVBQUVrRixLQUFLOUM7VUFBTGdELFlBQUsyVDtNQUN2QjtXQUR1QkE7VUFHRDtXQUFqQkMsSUFIa0JEO1dBR3JCeFYsRUFIcUJ3VjtXQUdELGtCQUhOL1ksRUFBRW9GLE9BR2hCN0I7V0FIZ0I2QjtXQUFLMlQsSUFHbEJDOztRQURHLE9BRlU1VCxPQUdnQjt3QkFFakJwRixFQUFFb0MsRUFBRThDO01BQ3JCLEdBRG1COUMsT0FHZDJXLElBSGMzVyxLQUdqQm1CLEVBSGlCbkIsS0FHTCxrQkFIR3BDLEVBR2Z1RCxFQUFZLFdBSEd2RCxFQUdaK1ksSUFIZ0I3VDtNQUViLE9BRmFBLElBR2M7b0JBRXhCbEYsRUFBRTBCLEdBQUdDO01BQ2hCLEdBRGFEO1dBQUdDO1VBR2MsSUFBZnlYLEtBSEN6WCxNQUdMK1gsR0FISy9YLE1BR1R3WCxLQUhNelgsTUFHVmlZLEdBSFVqWSxNQUdpQixhQUhuQjFCLEVBR1IyWixHQUFRRDtVQUFtQyxVQUFwQnZaLEVBQW9CLE9BSG5DSCxFQUdKbVosS0FBUUM7O09BREQsS0FGRXpYLEdBRUY7TUFFRixpQ0FBdUI7c0JBRXhCM0IsRUFDVTBCLEdBQUdDO1VBQVJ1RCxPQUFLaVUsUUFBR0M7TUFDdEI7V0FEbUJEO2FBQUdDO1lBR1M7YUFBaEJFLEtBSE9GO2FBR1hNLEdBSFdOO2FBR2ZDLEtBSFlGO2FBR2hCUSxHQUhnQlI7YUFHWSxxQkFKdEJuWixFQUlOMlosR0FBUUQsSUFIR3hVOzthQUFLaVUsS0FHWkU7YUFIZUQsS0FHUEU7OztTQURELEtBRlFGLEtBRVIsT0FGQWxVO1FBSUYsc0NBRUU7cUJBR0psRixFQUFFMEIsR0FBR0M7VUFBSHdYLFFBQUdDO01BQ2pCO1dBRGNEO2FBQUdDO2dCQUdGRSxLQUhFRixRQUdOTSxHQUhNTixRQUdWQyxLQUhPRixRQUdYUSxHQUhXUjtZQUdRLFdBSFZuWixFQUdUMlosR0FBUUQ7Z0JBSEdQLEtBR1BFLEtBSFVELEtBR0ZFOzs7U0FERCxLQUZHRixLQUVIO1FBRUYsbUNBQXdCOzBCQUVuQnBaLEVBQUVrRixLQUFLeEQsR0FBR0M7VUFBUnlELFlBQUsrVCxRQUFHQztNQUMzQjtXQUR3QkQ7YUFBR0M7WUFHUTthQUFwQkUsS0FIWUY7YUFHaEJNLEdBSGdCTjthQUdwQkMsS0FIaUJGO2FBR3JCUSxHQUhxQlI7YUFHVyxrQkFIbEJuWixFQUFFb0YsT0FHaEJ1VSxHQUFRRDthQUhRdFU7YUFBSytULEtBR2pCRTthQUhvQkQsS0FHWkU7OztTQURELEtBRmFGLEtBRWIsT0FGS2hVO1FBSVAsd0NBQTZCO3lCQUV2QnBGLEVBQUUwQixHQUFHQyxHQUFHdUQ7TUFDMUIsR0FEb0J4RDtXQUFHQztjQUdSeVgsS0FIUXpYLE1BR1orWCxHQUhZL1gsTUFHaEJ3WCxLQUhhelgsTUFHakJpWSxHQUhpQmpZO1VBR1Usa0JBSFoxQixFQUdmMlosR0FBUUQsR0FBbUIsWUFIWjFaLEVBR1htWixLQUFRQyxLQUhXbFU7O09BRVosS0FGU3ZELEdBRVQsT0FGWXVEO01BSWQsd0NBQThCO3VCQUU1QmtLO01kbEtqQjs7O1Vjb0thLElBQUxoTixhQUFIbUIsYUFBUSxnQkFGSTZMLEVBRVo3TDtVQUFRLHFCQUFMbkI7VUFERzs7c0JBR0tnTjtNZHRLaEI7OztVY3dLYSxJQUFMaE4sYUFBSG1CLGFBQVEsZ0JBRkc2TCxFQUVYN0w7VUFBUSxRQURGO1VBQ0UsWUFBTG5COztRQURHO3dCQUdPZ04sRUFBRTFOLEdBQUdDO1VBQUh3WCxRQUFHQztNQUNwQjtXQURpQkQ7YUFBR0M7WUFHRTthQUFQRSxLQUhLRjthQUdUTSxHQUhTTjthQUdiQyxLQUhVRjthQUdkUSxHQUhjUjthQUdLLGdCQUhQL0osRUFHWnVLLEdBQVFEO1lBQVcsYUFITFAsS0FHVkUsS0FIYUQsS0FHTEU7OztTQURELEtBRk1GLEtBRU47UUFFRixzQ0FBMkI7dUJBRXpCaEssRUFBRTFOLEdBQUdDO1VBQUh3WCxRQUFHQztNQUNuQjtXQURnQkQ7YUFBR0M7WUFHRzthQUFQRSxLQUhJRjthQUdSTSxHQUhRTjthQUdaQyxLQUhTRjthQUdiUSxHQUhhUjthQUdNLGdCQUhSL0osRUFHWHVLLEdBQVFEO1lBQVc7Z0JBSE5QLEtBR1RFLEtBSFlELEtBR0pFOzs7U0FERCxLQUZLRixLQUVMO1FBRUYscUNBQTBCO2lCQUU1QnpZO01kdExiOzs7VWN3TGEsSUFBTHlCLGFBQUhtQixhQUFRLHdCQUFSQSxFQUZRNUM7VUFFQSxRQURGO1VBQ0UsWUFBTHlCOztRQURHO2tCQUdHekI7TWQxTGQ7OztjYzRMUXlCLGFBQUhtQix3QkFGUzVDO2tCQUNIO3NCQUNIeUI7O1FBREc7bUJBR0l6QjtNZDlMZjs7O2NjZ01ZeUIsOEJBQUpOLFdBQUZ5QjtVQUFjLHNCQUFkQSxFQUZTNUMsR0FFMEIsT0FBakNtQjtzQkFBSU07O1FBREQ7dUJBR1F6QjtNZGxNbkI7OztjY29NWXlCLDhCQUFKTixXQUFGeUI7VUFBYyxzQkFBZEEsRUFGYTVDLEdBRXNCLFVBQWpDbUI7c0JBQUlNOztRQUREO2tCQUdHekI7TWR0TWQ7OztjY3dNWXlCLDhCQUFKTixXQUFGeUI7bUJBRlE1QyxFQUVrQixPQUF4Qm1CO3NCQUFJTTs7UUFERDtzQkFHT3pCO01kMU1sQjs7O2NjNE1ZeUIsOEJBQUpOLFdBQUZ5QjttQkFGWTVDLEVBRWMsVUFBeEJtQjtzQkFBSU07O1FBREQ7dUJBR1F6QjtNZDlNbkI7OztVY2dOb0I7V0FBTHlCOztXQUFUbUI7V0FBYyx3QkFBZEEsRUFGYTVDO1VBRUMsUUFEVDtVQUNTLFlBQUx5Qjs7UUFESjtzQkFHT3pCO01kbE5sQjs7O2Njb05leUIsOEJBQVRtQixzQkFGWTVDO2tCQUNQO3NCQUNJeUI7O1FBREo7MEJBR1d6QjtNZHROdEI7WWN3TnVCeUIsV0FBbEJ3WCxjQUFDclcsRUFBRHFXO1FBQ0ssMEJBREpyVyxFQUZnQjVDLEdBRUN5QixLQUFsQndYLEtBQ3lDLGFBSHhCalosRUFFQ3lCO01BRFo7eUJBSVV6QjtNZDNOckI7WWM2TnVCeUIsV0FBbEJ3WCxjQUFDclcsRUFBRHFXO2VBQUNyVyxNQUZlNUMsRUFFRXlCLEtBQWxCd1gsS0FBcUQsWUFGckNqWixFQUVFeUI7TUFEWjtvQkFHR2dOO01kL05kOzs7Y2NpT1VoTixhQUFMekI7VUFBYSxjQUZKeU8sRUFFVHpPLEdBQXNCLE9BQXRCQTtzQkFBS3lCOztRQURDO3NCQUdPZ047TWRuT2xCOzs7Y2NxT1VoTixhQUFMekI7VUFBYSxjQUZBeU8sRUFFYnpPLEdBQXNCLFVBQXRCQTtzQkFBS3lCOztRQURDO3dCQUdPcEM7TWR2T2xCOzs7VWMwT2tCLElBRFJvQyxhQUFMekIsYUFDYSxrQkFIQVgsRUFFYlc7VUFDYSxHQUNSK0wsT0FBb0IsT0FBcEJBO1VBRFEsWUFEUnRLOztRQURDO3NCQU9HZ047TUFDWDs7Ozs7Z0JBRU9oTixXQUFMekI7WUFBYSxjQUhKeU8sRUFHVHpPO2NBQXNCLGNBQXRCQSw4QkFBS3lCOzs7VUFEQyxvQkFFRDtxQkFJR2dOLEVBQUVxSzs7OztVQUdjO1dBQXJCclg7V0FBSHpCO1dBQXdCLGlCQUhoQnlPLElBR1J6Tzs7OzttQkFBR3lCOztRQURHLGdCQUdFOzBCQUVHcEM7TUFDYjs7Ozs7WUFHWSxJQURIb0MsV0FBTHpCLFdBQ1EsaUJBSkNYLEVBR1RXO1lBQ1E7Y0FFTSx5QkFBTFQsOEJBSEprQzs7WUFDRyxVQURIQTs7VUFEQyxvQkFNSjt3QkFHTXBDLEVBREd5Wjs7OztVQUlEO1dBRExyWDtXQUFMekI7V0FDVSxjQUhGWCxFQUVSVztXQUVPLGlCQURGZ087O21CQURBdk07O1FBREMsZ0JBSUc7MkJBRUdwQyxFQUFFa0YsS0FBS3VVO2lCQUFMdlUsc0JBQUt1VTs7O1VBSUg7V0FEWHJYO1dBQUx6QjtXQUNnQixpQkFKSlgsU0FHWlc7V0FDZ0I7O3VCQUFKa1o7a0JBQU4zSzs7bUJBREQ5TTs7UUFETyw4QkFJSDt5QkFFRGdOLEVBQUVxSzs7OztjQUdQclgsYUFBTHpCO1VBQWEsY0FISHlPLEVBR1Z6TztZQUFzQixhQUF0QkEseUJBQUt5QjtVQUEyQyxZQUFoRHpCLHNCQUFLeUI7O1FBRFc7UUFBVCx5QkFFRzs2QkFFSWdOLEVBQUVxSzs7OztVQUlILElBRFJyWCxhQUFMekIsYUFDYSxpQkFKQ3lPLEVBR2R6TztVQUNhO1lBQ1MseUJBQUxULDRCQUZaa0M7VUFDUSxJQUVVLHdCQUFMK0csaUNBSGIvRzs7UUFEWTtRQUFWLDBCQU9HOztNQUVFO1FBR0s7U0FEVkE7O1NBQUp4QjtTQUFGRDtTQUNnQixjQURWeUI7U0FDVTs7cUJBRGhCekIsRUFDTW9aLE9BREpuWixFQUNRa1o7TUFGTCxVQUVvQztxQkFFOUJwWSxHQUFHQztNQUNqQixHQURjRDtXQUFHQztjQUdGeVgsS0FIRXpYLE1BR04rWCxHQUhNL1gsTUFHVndYLEtBSE96WCxNQUdYaVksR0FIV2pZO1VBR29CLGFBQS9CaVksR0FBUUQsSUFBdUIsUUFBM0JQLEtBQVFDOztPQURELEtBRkd6WCxHQUVIO01BRUYsb0NBQTBCO21CQUkxQnVPLElBR1Z4TyxHQURJQztNQUROLEdBRUVEO1dBRElDO2NBRVlxWSxHQUZaclksTUFFTXNZLEdBRk50WSxNQUVFdVksR0FETnhZLE1BQ0F5WSxHQURBelk7VUFFSyxzQkFMS3dPLElBSVZpSyxHQUFVRjt5QkFHRyxNQVBIL0osSUFHVnhPLEdBQ2dCc1k7c0JBQWhCRyxHQUVhLE1BTkhqSyxJQUlKZ0ssR0FGRnZZO1FBQ00sT0FBVkQ7TUFEVSxPQUFOQyxFQUt3Qjt1QkFHaEJ1TyxJQUFJOU47TUFDbEIsU0F3Q0lnWSxTQUFTOVosRUFBRThCO1FBQ2IsU0FEVzlCO2FBQUU4Qjs7O2NBR0U7ZUFERUs7ZUFBTjRYO2VBQU5DLEdBRlFsWTtlQUdFLGlCQTVDSDhOLElBMkNQb0ssR0FBTUQsT0FBTkMsTUFBTUQsZ0JBQU5DO2NBQzJDLFVBQXhDOVosRUFEU2lDOztrQkFGTm5DLEtBQUU4Qjs7Ozs7ZUFPSjtnQkFGY21ZO2dCQUFOQztnQkFBTkM7Z0JBQU5DLEtBTFF0WTtnQkFPSjtnQ0FoREc4TixJQThDUHdLLEtBQU1EO3VCQUdBLFdBakRDdkssSUE4Q0R1SyxLQUFNRDt3QkFBWkUsUUFBTUQsUUFBTUQ7eUJBSUQsV0FsREp0SyxJQThDUHdLLEtBQVlGOzBCQUFaRSxRQUFZRixNQUFOQzswQkFBTUQsTUFBWkUsUUFBTUQ7dUJBTUcsV0FwREZ2SyxJQThDUHdLLEtBQVlGO3dCQUFOQyxRQUFOQyxRQUFZRjt5QkFPSCxXQXJERnRLLElBOENEdUssS0FBTUQ7MEJBQU5DLFFBQU1ELE1BQVpFOzBCQUFZRixNQUFOQyxRQUFOQztlQVFNLFVBUEgzSixJQURld0o7UUFZbkI7WUFqQk9qYTtTQWlCUCxHQWpCT0EsSUFpQkhxYTtTQUVTLFdBRlRBLEdBakJLdlk7U0FtQkk7O1NBQ0EsYUFGVHdZLEdBQ0l4QjtTQUNLOztTQTVERDFYLEdBMkRSRjtTQTNEV0csR0E0RFhGO1NBNURjeUQ7UUFDdEI7YUFEZ0J4RDtlQUFHQztrQkFJTHFZLEdBSktyWSxNQUlUc1ksR0FKU3RZLE1BSWJ1WSxHQUpVeFksTUFJZHlZLEdBSmN6WTtjQUtULGtCQU5Ld08sSUFLVmlLLEdBQVFGO2dCQUdELGNBSENBLEdBSlkvVSxNQUFIdkQsR0FJTHFZLEdBSlE5VTtjQU1iLGNBRlBpVixHQUpvQmpWLE1BQU54RCxHQUlWd1ksR0FKZ0JoVjs7cUJBR1YsV0FISXhELEdBQU13RDs7b0JBRVYsV0FGT3ZELEdBQUd1RDt5QkE0RFY0VixNQUNnQjtNQTdEOUIsU0FrQlFELEtBQUt2YSxFQUFFOEI7UUFDYixTQURXOUI7YUFBRThCOzs7Y0FHRTtlQURFSztlQUFONFg7ZUFBTkMsR0FGUWxZO2VBR0UsaUJBdEJIOE4sSUFxQlBvSyxHQUFNRCxhQUFOQyxnQkFBTUQ7Y0FDc0MsVUFBekM3WixFQURTaUM7O2tCQUZObkMsS0FBRThCOzs7OztlQU9KO2dCQUZjbVk7Z0JBQU5DO2dCQUFOQztnQkFBTkMsS0FMUXRZO2dCQU9KO2dDQTFCRzhOLElBd0JQd0ssS0FBTUQ7dUJBTUcsV0E5QkZ2SyxJQXdCUHdLLEtBQVlGO3lCQU9ILFdBL0JGdEssSUF3QkR1SyxLQUFNRDtnQ0FBTkMsUUFBTkM7MEJBQU1ELFFBQU1ELE1BQVpFO3dCQUFNRCxRQUFOQyxRQUFZRjt1QkFHTixXQTNCQ3RLLElBd0JEdUssS0FBTUQ7eUJBSUQsV0E1Qkp0SyxJQXdCUHdLLEtBQVlGO2dDQUFaRSxRQUFNRDswQkFBTkMsUUFBWUYsTUFBTkM7d0JBQU5DLFFBQU1ELFFBQU1EO2VBUU4sVUFQSHpKLElBRGV3SjtRQVluQjtZQWpCT2phO1NBaUJQLEdBakJPQSxJQWlCSHFhO1NBRVMsZUFGVEEsR0FqQkt2WTtTQW1CSTs7U0FDQSxpQkFGVHdZLEdBQ0l4QjtTQUNLOztTQTdCRzFYLEdBNEJaRjtTQTVCZUcsR0E2QmZGO1NBN0JrQnlEO1FBQzFCO2FBRG9CeEQ7ZUFBR0M7a0JBSVRxWSxHQUpTclksTUFJYnNZLEdBSmF0WSxNQUlqQnVZLEdBSmN4WSxNQUlsQnlZLEdBSmtCelk7Y0FLYixrQkFmS3dPLElBY1ZpSyxHQUFRRjtnQkFFRCxjQUZQRSxHQUp3QmpWLE1BQU54RCxHQUlkd1ksR0FKb0JoVjtjQU9qQixjQUhDK1UsR0FKZ0IvVSxNQUFIdkQsR0FJVHFZLEdBSlk5VTs7cUJBR2QsV0FIUXhELEdBQU13RDs7b0JBRWQsV0FGV3ZELEdBQUd1RDt5QkE2QmQ0VixNQUNvQjtNQXdCeEIsSUFBTmpYLElBQU0sU0FoRVF6QjtNQWdFUixZQUFOeUIsSUFDdUIsS0FEdkJBLElBaEVjekIsT0FpRXFCO3VCQXlDM0I4TixJQUFJOU47TUFDaEIsU0E4RElnWSxTQUFTOVosRUFBRThCO1FBQ2IsU0FEVzlCO2FBQUU4Qjs7O2NBSUM7ZUFGR0s7ZUFBTjRYO2VBQU5DLEdBRlFsWTtlQUlDLGVBbkVKOE4sSUFpRUxvSyxHQUFNRDtlQUVHLFFBQUpVLE9BRkxULFVBRUtTLE9BRkxULE1BQU1ELGdCQUFOQztjQUdxRCxVQUZsRDlaLEVBRFNpQzs7a0JBRk5uQyxLQUFFOEI7Ozs7O2VBVUM7Z0JBRlNtWTtnQkFBTkM7Z0JBQU5DO2dCQUFOQyxLQVJRdFk7Z0JBVUMsZUF6RUo4TixJQXVFTHdLLEtBQU1EO2VBRUcsU0FBSk87Z0JBRU07Z0NBM0VOOUssSUF1RUN1SyxLQUFNRDtpQkFJRDt3QkFBSlM7dUJBSkRSO3dCQUlDUSxPQUpEUixRQUFNRCxnQkFBTkM7aUJBQ0gxSjs7Z0JBS0csT0FKRGlLO2tCQUtNLElBQUpFLElBQUksV0E5RU5oTCxJQXVFQ3VLLEtBQU1EO2tCQU9ELFNBQUpVOytCQVBQUixRQUFNRDs7bUJBU0UsT0FGRFM7Z0NBUFBSLFFBQU1ELFFBQU1EOztvQkFXQztvQ0FsRlJ0SyxJQXVFTHdLLEtBQVlGO3FCQVdDOzRCQUFKVzsyQkFYVFQsUUFBTUQ7NEJBV0dVOzZCQVhUVCxRQUFZRixNQUFOQzs2QkFBTUQsTUFBWkUsUUFBTUQ7O2tCQU9LLElBTlIxSjs7a0JBZVEsSUFBSnFLLElBQUksV0F2Rk5sTCxJQXVFTHdLLEtBQVlGO2tCQWdCRCxTQUFKWTsrQkFoQkRYLFFBQU5DOzttQkFrQlEsT0FGRFU7Z0NBaEJEWCxRQUFOQyxRQUFZRjs7b0JBb0JDO29DQTNGUnRLLElBdUVDdUssS0FBTUQ7cUJBb0JDOzRCQUFKYTsyQkFwQkhaLFFBQU5DOzRCQW9CU1c7NkJBcEJIWixRQUFNRCxNQUFaRTs2QkFBWUYsTUFBTkMsUUFBTkM7O2tCQWdCVyxJQWZSM0o7ZUF3QkosVUF4QklBLElBRGV3SjtRQTJCbkI7WUFuQ09qYTtTQW1DUCxHQW5DT0EsSUFtQ0hxYTtTQUVTLFdBRlRBLEdBbkNLdlk7U0FxQ0k7O1NBQ0EsYUFGVHdZLEdBQ0l4QjtTQUNLOztTQXBHRDFYLEdBbUdSRjtTQW5HV0csR0FvR1hGO1NBcEdjeUQ7UUFDdEI7YUFEZ0J4RDtlQUFHQztjQUtQLElBREVxWSxHQUpLclksTUFJVHNZLEdBSlN0WSxNQUlidVksR0FKVXhZLE1BSWR5WSxHQUpjelksTUFLSixhQU5Gd08sSUFLUmlLLEdBQVFGO2NBQ0UsU0FBSi9XO2dCQUNVLGNBRmhCaVgsR0FKb0JqVixNQUFOeEQsR0FJVndZLEdBSmF2WSxHQUlMcVksR0FKUTlVO2NBT2IsUUFGRGhDLEdBSUMsY0FMQytXLEdBSlkvVSxNQUFIdkQsR0FJTHFZLEdBSlE5VTtjQUtWLElBR0gsVUFKUGlWLEdBSm9CalYsTUFBTnhELEdBSVZ3WSxHQUpnQmhWOztxQkFHVixXQUhJeEQsR0FBTXdEOztvQkFFVixXQUZPdkQsR0FBR3VEO3lCQW9HVjRWLE1BQ2dCO01Bckc5QixTQXNCUUQsS0FBS3ZhLEVBQUU4QjtRQUNiLFNBRFc5QjthQUFFOEI7OztjQUlDO2VBRkdLO2VBQU40WDtlQUFOQyxHQUZRbFk7ZUFJQyxlQTNCSjhOLElBeUJMb0ssR0FBTUQ7ZUFFRyxRQUFKVSxPQUZMVCxXQUVLUyxPQUZDVixNQUFOQyxnQkFBTUQ7Y0FHK0MsVUFGbEQ3WixFQURTaUM7O2tCQUZObkMsS0FBRThCOzs7OztlQVVDO2dCQUZTbVk7Z0JBQU5DO2dCQUFOQztnQkFBTkMsS0FSUXRZO2dCQVVDLGVBakNKOE4sSUErQkx3SyxLQUFNRDtlQUVHLFNBQUpPO2dCQUVNO2dDQW5DTjlLLElBK0JDdUssS0FBTUQ7aUJBSUQ7d0JBQUpTO3VCQUpEUjt5QkFJQ1EsT0FKS1QsTUFBTkMsb0JBQU1EO2lCQUNUeko7O2dCQUtHLFFBSkRpSztrQkFjTSxJQUFKRSxJQUFJLFdBL0NOaEwsSUErQkx3SyxLQUFZRjtrQkFnQkQsU0FBSlU7K0JBaEJEVCxRQUFOQzs7bUJBa0JRLFFBRkRRO29CQUlNO29DQW5EUmhMLElBK0JDdUssS0FBTUQ7cUJBb0JDOzRCQUFKVzsyQkFwQkhWLFFBQU5DOzZCQW9CU1M7NkJBcEJHWCxNQUFOQyxRQUFOQzs2QkFBTUQsUUFBTUQsTUFBWkU7OztnQ0FBTUQsUUFBTkMsUUFBWUY7a0JBZ0JELElBZlJ6Sjs7a0JBTVEsSUFBSnFLLElBQUksV0F0Q05sTCxJQStCQ3VLLEtBQU1EO2tCQU9ELFNBQUpZOytCQVBQVixRQUFNRDs7bUJBU0UsUUFGRFc7b0JBSU07b0NBMUNSbEwsSUErQkx3SyxLQUFZRjtxQkFXQzs0QkFBSmE7MkJBWFRYLFFBQU1EOzZCQVdHWTs2QkFYR2IsTUFBWkUsUUFBTUQ7NkJBQU5DLFFBQVlGLE1BQU5DOzs7Z0NBQU5DLFFBQU1ELFFBQU1EO2tCQU9ELElBTlJ6SjtlQXdCSixVQXhCSUEsSUFEZXdKO1FBMkJuQjtZQW5DT2phO1NBbUNQLEdBbkNPQSxJQW1DSHFhO1NBRVMsZUFGVEEsR0FuQ0t2WTtTQXFDSTs7U0FDQSxpQkFGVHdZLEdBQ0l4QjtTQUNLOztTQWpERzFYLEdBZ0RaRjtTQWhEZUcsR0FpRGZGO1NBakRrQnlEO1FBQzFCO2FBRG9CeEQ7ZUFBR0M7Y0FLWCxJQURFcVksR0FKU3JZLE1BSWJzWSxHQUphdFksTUFJakJ1WSxHQUpjeFksTUFJbEJ5WSxHQUprQnpZLE1BS1IsYUFqQkZ3TyxJQWdCUmlLLEdBQVFGO2NBQ0UsU0FBSi9XO2dCQUNVLGNBRmhCaVgsR0FKd0JqVixNQUFOeEQsR0FJZHdZLEdBSmlCdlksR0FJVHFZLEdBSlk5VTtjQU9qQixPQUZEaEMsR0FHQyxjQUpQaVgsR0FKd0JqVixNQUFOeEQsR0FJZHdZLEdBSm9CaFY7Y0FLZCxJQUlILFVBTEMrVSxHQUpnQi9VLE1BQUh2RCxHQUlUcVksR0FKWTlVOztxQkFHZCxXQUhReEQsR0FBTXdEOztvQkFFZCxXQUZXdkQsR0FBR3VEO3lCQWlEZDRWLE1BQ29CO01BMEN4QixJQUFOalgsSUFBTSxTQXhHTXpCO01Bd0dOLFlBQU55QixJQUN1QixLQUR2QkEsSUF4R1l6QixPQXlHdUI7NkJBR2pCVixHQUFHQztVQUFId1gsUUFBR0M7TUFDekI7V0FEc0JEO2FBQUdDLHVCQUFIQyx1QkFBR0Q7VUFJZDtRQURBLE9BSGNBLFVBS2tCO2lDQUdqQmhYLEVBQUU5QjtVQUFGeVksTUFBRTNIO01BQzVCO1dBRDBCMkg7VUFNeEIsSUFES0MsSUFMbUJEO1VBTXhCLE9BTjBCM0gsS0FPeEIsUUFQd0JBLFlBQUYySCxJQUtuQkMsSUFMcUI1SDtVQU1YO1FBSGYsYUFIMEJBLG1CQU9HO3FCQVVuQnBCLEdBQUd0TyxHQUFHQztVQUFId1gsUUFBR0M7TUFDbEI7V0FEZUQ7YUFBR0M7WUFJRTthQUFORSxLQUpJRjthQUlSTSxHQUpRTjthQUlaQyxLQUpTRjthQUliUSxHQUphUjthQUlLLGdCQUpSbkosR0FJVjJKLEdBQVFEO1lBQVUsYUFKTFAsS0FJVEUsS0FKWUQsS0FJSkU7OztTQUZGLEtBRk1GLEtBRU47UUFDYSxTQUNxQjt1QkFFaENsSixJQUFJeE8sR0FBR0M7VUFBSHdYLFFBQUdDO01BQ3JCO1dBRGtCRDs7YUFBR0M7WUFNWCxJQURJRSxLQUxPRixRQUtYTSxHQUxXTixRQU1YLGFBTklsSixTQUtKd0o7WUFDQSxTQUFKeFcsT0FOWWlXLFVBQUdDLEtBS1BFO1lBRUcsT0FEWHBXO1VBRlE7UUFEQSxPQUhPa1csVUFRRztzQkFJZmhYO01BQ1QsU0FBUW1aLElBQUluWjtRQUFPLEdBQVBBO2NBRUhvWixLQUZHcFosS0FFUnpCLEVBRlF5QjtVQUVrQixVQUExQnpCLGlCZHBrQlAsT2Nra0JXNGEsSUFFQ0M7UUFEQyxRQUM2QjtNQUZ2QyxzQmRsa0JILE9ja2tCV0QsSUFEQ25aLFFBS0o7b0JBRUl5TDtNQUNULFNBQVE0TixPQUFPQyxNQUFNN047UUFDbkIsU0FEYTZOO1VBR1g7d0NBQW1CdE4sSUFBSXpOLEdBQUssVUFBTEEsRUFBSnlOLElBQWUsT0FIakJQO1FBS1IscUJBTFFBO1FBS1I7Y0FFTUwsY0FBSDdNO1VBQWlCLFVBQWpCQSxFQUFpQixPQVBsQithLGNBT0lsTztRQURGLFFBQ3FDO01BUHRELGtCQURTSyxJQVVLOzs7O09BempCWjhLOzs7T0FFQUU7T0FFQW5XO09BSUFEO09BSUFxVztPQVFBRztPQWVBTTs7T0FQQS9XO09BRUkwVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRY3JDSnlDLE9BQ0FDLE1BQ0FDO2FBU0FDLE1BQUluYixHQUFJLFlBQUpBLFdBQTRCO1FBQ2hDb2IscUJBQ0FDO2FBSUFDLE9BQU90YixHQUFJLE9BQUpBLE1BQWlCO2FBSXhCdWIsbUI1QnZDTDtRNEJ3Q0tDO2FBQ0FDLE1BQUl6YixFQUFFQyxHQUFRLE9BQVZELEtBQUVDLEVBQUZELEVBQUVDLENBQStCO2FBQ3JDeWIsTUFBSTFiLEVBQUVDLEdBQVEsT0FBUkEsS0FBRkQsSUFBRUMsQ0FBK0I7YUFVckMwYixZQUFVM2IsR0FBSSxtQ0FBSkEsRUFBcUI7Ozs7T0FsQy9CZ2I7T0FDQUM7T0FDQUM7T0FTQUM7T0FDQUM7T0FDQUM7T0FJQUM7T0FJQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FVQUM7O29CRFhLaGMsRUFBRTRDO01BQ0QsSUFBSjFDLEVBQUksa0JBRERGLEdBRVAsZ0JBRElFLElBREdGLEVBQUU0QyxHQUVULE9BREkxQyxDQUVIO29CQUVNRixFQUFFTjtNQUNELHdCQURETSxHQUNDLEtBRERBLFVBQ0M7O1lBQ1J4RTtRQUNFO1VBQWUsc0JBRmIwRSxFQUNKMUUsRUFDaUIsV0FIUmtFLEVBRVRsRTtVQUNpQixTQURqQkE7OztNQUdBLE9BSkkwRSxDQUlIO0lBRVM7a0JBRUhBO01BQ1AsNkJBRE9BLEdBRVAsb0JBRElxRDtNQUVKLGdCQUhPckQsSUFFSEwsSUFEQTBEO01BRUosT0FESTFELENBRUg7SUFOUyxrQkFRRTJCLEdBQXFCLGlDQUFyQkEsR0FBNkI7SUFSL0Isa0JBU0V0QixHQUFJLGlDQUFKQSxHQUE2QjtJQVQvQixhQVdKQSxFQUFFb0QsSUFBSUM7TTNCaEVmO2EyQmdFV0QsWUFBSUMsZ0NBQU5yRCxLQUFNcUQsV0FBSkQ7UUFJRSxJQUFKekQsRUFBSSxrQkFKRTBELEtBS1YsZ0JBTElyRCxFQUFFb0QsSUFJRnpELElBSk0wRCxLQUtWLE9BREkxRDtNQUZELDRDQUtGO0lBbEJPLG9CQW9CRzJCLEVBQUU4QixJQUFJQztNQUF1QixnQ0FBN0IvQixFQUFFOEIsSUFBSUMsS0FBc0M7SUFwQi9DLFNBdUJSMFksU0FBS2haLEVBQUV6QjtNQUNULE1BRE95QixJQUFFekIsTUFDVCxLQURTQSxVQUNULE1BQUlvQjtNQUFKLEdBRE9LOzs7T0FLQTtNbkIrYkQsZ0JtQmhjbUIsOEJBSHJCTCxDQUlJO0lBNUJFLGdCQThCRDFDLEVBQUVpSSxLQUFLQztNQUNOOzZCQUFWLHFCQURTbEksR0FBRWlJLE1BQUtDO09BRWhCLG9CQURJN0U7TUFDSixRQUZXNEU7V0FHRStULE9BSEYvVCxLQUdOZ1U7O1dBQVFELFNBQVJDLFNBSE1oVTtNQUNELElBR05pVSxPQUFTLE1BQWIscUJBSlNsYyxLQUdKaWMsV0FGRDVZLE1BRVMyWTtNQUNBLE9BQVRFLE9BQ2UsZ0JBTFZsYyxFQUdKaWMsT0FERHRjLEVBQ1NxYyxPQUNURTtNQUNtRCxPQUhuRHZjLENBSUg7SUFwQ1MsY0FzQ0hLLEVBQUVvRCxJQUFJQyxJQUFJWDtNM0IzRnBCO2EyQjJGWVUsWUFBSUMsZ0NBQU5yRCxLQUFNcUQsV0FBSkQ7T0FHSix1QkFIRXBELEVBQUVvRCxJQUFJQyxJQUFJWDtNQUVaLDhDQUN1QjtJQXpDbEIsY0EyQ0gxQixHQUFHbWIsS0FBS2xiLEdBQUdtYixLQUFLL1k7TTNCaEcxQjs7O1EyQmdHMEJBOzs7O1FBQWI4WTs7OytCQUFIbmIsTUFBZ0JxQyxXQUFiOFk7Ozs7UUFBUUM7OzsrQkFBSG5iLE1BQVFvQyxXQUFMK1k7T0FJYix1QkFKRXBiLEdBQUdtYixLQUFLbGIsR0FBR21iLEtBQUsvWTtNQUdsQixrQ0FDK0I7SUEvQzFCLGdCQWlESXJDLEdBQUdtYixLQUFLbGIsR0FBR21iLEtBQUsvWTtNM0J0R2pDOzs7UTJCc0dpQ0E7Ozs7UUFBYjhZOzs7Z0NBQUhuYixNQUFnQnFDLFdBQWI4WTs7OztRQUFRQzs7OytCQUFIbmIsTUFBUW9DLFdBQUwrWTtPQUlwQix3QkFKU3BiLEdBQUdtYixLQUFLbGIsR0FBR21iLEtBQUsvWTtNQUd6QixrREFDc0M7SUFyRGpDLGdCQXdESDdELEVBQUV1RDtNQUNULDhCQURTQSxXQUNUOzs7UUFBNkI7cUJBRHRCdkQsRUFDc0Isc0JBRHBCdUQsRUFDVHpIO1VBQTZCLFNBQTdCQTs7O2NBQW1EO0lBekR6QyxpQkE0REZrRSxFQUFFdUQ7TUFDViw4QkFEVUEsV0FDVjs7O1FBQTZCO3FCQURyQnZELEVBQ1JsRSxFQUE2QixzQkFEbkJ5SCxFQUNWekg7VUFBNkIsU0FBN0JBOzs7Y0FBc0Q7SUE3RDVDLGtCQStFRCtnQixJQUVQemE7TTNCdElMLEcyQnNJS0E7UUFBSyxnQ0FGRXlhLGlCQUVQemEsRUFBSzs7Ozs7Y0FsQmlCO2VBS2hCSztlQUxLOUIsZ0NBT2tCbWM7ZUFQUCxhQUFYbmMsSUFBaUM7O3FCQUt0QzhCOztxQkFETTs7O1VBZ0I0QixrREFGeENMOzs7OztvQkFQTTBZO2dCQUNOLHVCQUxpQmlDO2dCQU1qQjtrQkFHT0YsTUFUVUUsVUFLakIsK0JBTDZCRDtnQkFNN0I7Z0VBTjZCQTs7eUJBSXZCaEM7O2NBRE4sdUJBSGlCaUMsUUFHakI7cUJBSGlCQTtZQUNYLE9BRFdBO01BVVg7SUFoRkUsZUFzRkp2YixHQUFHQztNQUNUOytCQURNRDtPQUNOLHdCQURTQztPQUdELG9CQUZKQyxLQUNBQztNQUVKLGdCQUpNSCxLQUdGckIsSUFGQXVCO01BSUosZ0JBTFNELEtBR0x0QixFQUZBdUIsR0FDQUM7TUFHSixPQUZJeEIsQ0FHSDtJQTVGUyxTQWtHUjZjO01BQVc7Ozs7O01uQnlYUCxtQm1CdlhNO0lBcEdGLGNBc0dIeGM7TUFDUCw2QkFET0EsR0FDUDs7UUFFa0IsR0FEZDFFLE9BREErSCxPQUVjLCtCQUhYckQsRUFFSDFFO1VBRUY7UUFFRixJQUFJc1UsS0FMQXZNOztVQU1jLEdBTGQvSCxRQUlBc1UsUUFDYywrQkFQWDVQLEVBTUg0UDtZQUVGO1VBRUYsT0FSSXRVLFFBSUFzVSxLQUtGLElBWEs1UCxFQUVIMUUsTUFJQXNVLE9BSkF0VSw0QkFXRztJQW5IRyxtQkFxSEEwRTtNQUNWLHNDQURVQSxXQUNWOztZQUNBNkI7UUFDRTswQ0FIUTdCLEVBRVY2QjtVQUNFOzs7Ozs7Ozs7Ozs7VW5CbVdJO1VtQnJXRi9CO1VBRUYsU0FERitCOzs7TUFPQSxHQVJJL0IsU0FRSixxQkFUVUUsR0FTWSxZQVRaQTtNQUNWLElBU011USxJQUFLLGtCQVRQelE7TUFTTztNQVRYLElBU1csMEJBVkRFLFdBVUM7O1lBRVQxRTtRQUNFO3NDQWJNMEUsRUFZUjFFO1VBQ0UsU0FXRW9IOzs7Ozs7Ozs7Ozs7OztnQkFERSxzQkFiRjZOLElBVEZ6UTtnQkFzQkk7c0NBYkZ5USxJQVRGelE7OztnQkFrQkksc0JBVEZ5USxJQVRGelE7Z0JBa0JJO3NDQVRGeVEsSUFURnpROzs7Z0JBZ0JJLHNCQVBGeVEsSUFURnpRO2dCQWdCSTtzQ0FQRnlRLElBVEZ6UTs7O2dCQW9CSSxzQkFYRnlRLElBVEZ6UTtnQkFvQkk7c0NBWEZ5USxJQVRGelE7Ozs7O2FBeUJJLHNCQWhCRnlRLElBVEZ6UTthQXlCSTttQ0FoQkZ5USxJQVRGelEsV0F1QkU0QzthQUVFO21DQWhCRjZOLElBVEZ6USxZQXVCRTRDO2FBRUU7bUNBaEJGNk4sSUFURnpRLFdBdUJFNEM7OzthQVRFLHNCQUxGNk4sSUFURnpRO2FBY0k7bUNBTEZ5USxJQVRGelEsS0F1QkU0Qzs7bUJBQXFCLHNCQWRyQjZOLElBVEZ6USxLQXVCRTRDOztVQVdGO1VBdEJBLFNBREZwSDs7O01BeUJBLE9BM0JJaVYsR0E0Qkg7SUEzSk8sZUE2SkovUSxFQUFFUTtNQUNSLElBQUk0QixFQUFKLHFCQURRNUI7TUFDUixTQUFJNEIsRUFDVSxPQUZONUI7TUFDUixJQUVVLG9CQUZONEIsR0FFTSxLQUZOQSxVQUVNOztZQUNSdEc7UUFBc0I7VUFBZSxzQkFEakNxRSxFQUNKckUsRUFBcUMsV0FKakNrRSxFQUlrQixzQkFKaEJRLEVBSU4xRTtVQUFxQyxTQUFyQ0E7OztNQUNBLE9BRklxRSxDQUdIO0lBbktPLGdCQXFLSEgsRUFBRVE7TUFDVCxJQUFJNEIsRUFBSixxQkFEUzVCO01BQ1QsU0FBSTRCLEVBQ1UsT0FGTDVCO01BQ1QsSUFFVSxvQkFGTjRCLEdBRU0sS0FGTkEsVUFFTTs7WUFDUnRHO1FBQXNCO1VBQWU7WUFEakNxRSxFQUNKckUsRUFBcUMsV0FKaENrRSxFQUlMbEUsRUFBc0Isc0JBSmYwRSxFQUlQMUU7VUFBcUMsU0FBckNBOzs7TUFDQSxPQUZJcUUsQ0FHSDtJQTNLTyxxQkE2S0VILEVBQUVXLEVBQUU0QztNQUNoQixTQURjNUMsR0FDZCwwQkFEZ0I0QyxXQUNoQjs7WUFDQXpIO1FBQ0U7VUFBSyxrQkFIS2tFLEVBQ1JHLEtBRUYsc0JBSGNvRCxFQUVoQnpIO1VBQ08sU0FEUEE7OztNQUdBLE9BSklxRSxJQUlGO0lBbExRLHNCQW9MR0gsRUFBRXVELEVBQUU1QztNQUNqQixTQURpQkEsR0FDakIsMEJBRGU0QztNQUNmO1lBQ0F6SDtRQUNFO1VBQUssa0JBSE1rRSxFQUdYLHNCQUhhdUQsRUFFZnpILEdBRElxRTtVQUVHLFNBRFByRTs7O01BR0EsT0FKSXFFLElBSUY7SUF6TFEsa0JBMkxEaVAsRUFBRTVPO01BQ1gsMkJBRFdBLEdBRUUxRTtNQUNYO1dBRFdBLE1BRFR3RSxFQUVZO1FBQ04sY0FKRDhPLEVBSUYsc0JBSkk1TyxFQUVFMUUsSUFFcUI7UUFDM0IsUUFITUE7aUJBSVA7SUFqTUksbUJBbU1Bc1QsRUFBRTVPO01BQ1osMkJBRFlBLEdBRUMxRTtNQUNYO1dBRFdBLE1BRFR3RSxFQUVZO1FBQ04sY0FKQThPLEVBSUgsc0JBSks1TyxFQUVDMUU7VUFFcUIsUUFGckJBO1FBR04sU0FDRDtJQXpNSSwyQkEyTVEwRSxHQUFJLGFEN0xwQnFXLGdCQzZMZ0JyVyxFQUE4QjtJQTNNdEMsMkJBNE1RQSxHQUFJLGFEbE1wQm9XLGdCQ2tNZ0JwVyxFQUE4QjtJQTVNdEMsU0E4TVJ5YyxPQUFPamQsRUFBRVE7TUFDWCw4QkFEV0EsR0FDVSxPQURWQTtNQUVELElBQUpMLEVBQUksS0FGQ0s7TUFHTSxzQkFEWEwsSUFDVyxXQUhSSCxFQUVDLHNCQUZDUTtNQUdNLE9BRFhMLENBR0g7SUFuTk8sMEJBcU5TSyxHQUFJLGNEdk1yQnFXLGdCQ3VNaUJyVyxFQUFpQztJQXJOMUMsNEJBc05XQSxHQUFJLGNENU12Qm9XLGdCQzRNbUJwVyxFQUFpQztJQXRONUMscUJBeU5LMGMsT0FBTzFjO01BQ3RCO2tDQURzQkE7T0FDdEIsNkJBRGUwYztPQUNmLEtBQ0lFLFdBREFEO01BQUo7WUFFWXJoQjtRQUNWO2FBRFVBLE1BRFJzaEIsUUFFa0I7VUFDZix5QkFMZTVjLEVBR1YxRSxPQUVMLHNCQUxRb2hCLE9BR0hwaEI7V0FFeUM7VUFDOUMsUUFIS0E7O01BTmEsV0FVRztJQWhPbEIsbUJBbU9HdWhCLE9BQU83YztNQUNwQjtrQ0FEb0JBO09BQ3BCLDZCQURhNmM7T0FDYixLQUFJRixRQUNBRztPQURKLFVBRUlDO01BRko7WUFHWXpoQjtRQUNWO2FBRFVBLE1BRlJ3aEIsUUFHa0I7VUFDZjtrQ0FOYTljLEVBR2hCK2MsT0FDUXpoQjs7WUFFTCxzQkFOTXVoQixPQUlEdmhCO1dBRWtEO1VBQ3ZELFFBSEtBOztNQVZWLFdBY21CO0lBM09YLFNBOE9KMGhCLFVBQVVoZCxFQUFFaWQsSUFBSTNoQixFQUFFb0g7TTNCblMzQixJMkJtU3lCYjtNQUN0QjtXQURrQm9iLE9BQUlwYixJQUNMO1FBQ2pCLHlCQUZnQjdCLEVBQU02QixTQUFFYSxFQUVHLE9BRkxiO1FBRVksUUFGWkE7aUJBRXFDO0lBaFBqRCxlQW1QRjdCLEVBQUUwQyxHQUFJLGlCQUFOMUMsRUFBTSxxQkFBTkEsS0FBRTBDLEVBQThCO0lBblA5QixTQXNQSnlhLGNBQWNuZCxFQUFFaWQsSUFBSTNoQixFQUFFb0g7TTNCM1MvQixJMkIyUzZCYjtNQUMxQjtXQURzQm9iLE9BQUlwYixJQUNUO1FBQ2pCLHlCQUZvQjdCLEVBQU02QixTQUFFYSxFQUVELFVBRkRiO1FBRWEsUUFGYkE7aUJBRTBDO0lBeFAxRCxtQkEyUEU3QixFQUFFMEM7TUFBSSxxQkFBTjFDLEVBQU0scUJBQU5BLEtBQUUwQyxFQUFrQztJQTNQdEMsb0JBOFBHMUMsRUFBRTFFLEVBQUVvSDtNQUNqQixJQUFJZCxFQUFKLHFCQURhNUI7Y0FBRTFFLFFBQ1hzRyxJQURXdEcsR0FHZixpQkFIYTBFLEVBQ1Q0QixFQURXdEcsRUFBRW9IO01BRU0sa0RBQ047SUFqUVAsd0JBb1FPMUMsRUFBRTFFLEVBQUVvSDtNQUNyQixJQUFJZCxFQUFKLHFCQURpQjVCO2NBQUUxRSxRQUNmc0csSUFEZXRHLEdBS2pCLHFCQUxlMEUsRUFDYjRCLEVBRGV0RyxFQUFFb0g7TUFHbkIsa0RBRXFCO0lBelFiLFNBNFFKMGEsV0FBV3BkLEVBQUUxRSxFQUFFb0g7TTNCalV4QixJMkJpVXNCYjtNQUNuQjtnQkFEbUJBO1VBRW5CLHlCQUZpQjdCLEVBQUU2QixTQUFFYSxFQUVNLE9BRlJiO1VBRWUsUUFGZkE7O1FBQ0wsZ0JBQzBDO0lBOVE5QyxnQkFpUkQ3QixFQUFFMEM7TUFBSSxrQkFBTjFDLEVBQU0scUJBQU5BLFdBQUUwQyxFQUFpQztJQWpSbEMscUJBb1JJMUMsRUFBRTFFLEVBQUVvSDtNM0J6VXJCLFMyQnlVbUJwSCw2QkFBRjBFLE1BQUUxRSxHQUlkLGtCQUpZMEUsRUFBRTFFLEVBQUVvSDtNQUVoQixrREFFZ0I7SUF4UlIsU0EyUkoyYSxlQUFlcmQsRUFBRTFFLEVBQUVvSDtNM0JoVjVCLEkyQmdWMEJiO01BQ3ZCO2dCQUR1QkE7VUFFdkIseUJBRnFCN0IsRUFBRTZCLFNBQUVhLEVBRUUsVUFGSmI7VUFFZ0IsUUFGaEJBOztRQUNULFNBQ21EO0lBN1J2RCxvQkFnU0c3QixFQUFFMEM7TUFBSSxzQkFBTjFDLEVBQU0scUJBQU5BLFdBQUUwQyxFQUFxQztJQWhTMUMseUJBbVNRMUMsRUFBRTFFLEVBQUVvSDtNM0J4VnpCLFMyQndWdUJwSCw2QkFBRjBFLE1BQUUxRTtPQUlsQixzQkFKZ0IwRSxFQUFFMUUsRUFBRW9IO01BRXBCLGtEQUVvQjtJQXZTWix1QkEyU00xQyxFQUFFMUUsRUFBRW9IO01BQ3BCLElBQUlkLEVBQUoscUJBRGdCNUI7Y0FBRTFFLFFBQ2RzRyxJQURjdEc7T0FLaEI7U0FBVyxVQUxHMEUsRUFDWjRCLEVBRGN0RyxFQUFFb0gsR0FLUDs7OytCQUE0Qzs7TUFGdkQsa0RBRTREO0lBaFRwRCxrQkFvVEMxQyxFQUFFMEMsR0FBSSxxQkFBTjFDLElBQUUwQyxFQUF1QjtJQXBUMUIsd0JBdVRPMUMsRUFBRTFFLEVBQUVvSDtNM0I1V3hCLFEyQjRXc0JwSCw2QkFBRjBFLE1BQUUxRTtPQUlqQjtTQUFXLFdBSkkwRSxFQUFFMUUsRUFBRW9ILEdBSVI7OzsrQkFBMkM7O01BRnRELGtEQUUyRDtJQTNUbkQsbUJBZ1VDdkMsRUFBT0MsR0FBUSxrQ0FBZkQsRUFBT0MsRUFBMEI7SUFoVWxDLHVCQW9VTWljLElBQUlyYztNQUNwQjs7aUNBRG9CQTtPQUNwQiwwQkFEb0JBO01BQ3BCO1lBRUExRTtRQUNFO21DQUprQjBFLEVBR3BCMUUsT0FIZ0IrZ0I7WUFJZSxTQUgzQjFjO1lBSUssY0FMV0ssRUFHcEIxRSxXQURJc1UsT0FDSnRVO1lBRVMsT0FGVEE7Ozs7TUFGQSxTQUFJcUU7TUFRSixjQVRvQkssSUFFaEI0UCxXQU9ZO0lBN1VOLHFCQWlWRTVQLEdBQUksYUQ5VWRtVyxVQzhVVW5XLEVBQXdCO0lBalYxQixxQkFrVkVBLEdBQUksYUR0VmRrVyxVQ3NWVWxXLEVBQXdCO0lBbFYxQixvQkFvVkdBLEdBQUksY0RqVmZtVyxVQ2lWV25XLEVBQTJCO0lBcFY5QixzQkFxVktBLEdBQUksY0R6VmpCa1csVUN5VmFsVyxFQUEyQjtJQXJWaEMsa0JBeVZEQTtNQUNULFNBQVErYSxJQUFJemY7UUFDVixHQURVQSxNQUNWLHFCQUZPMEUsR0FFYztRQUVYLHFCQUpIQSxFQUNHMUUsR0FHQSxLQUhBQTtRQUlLLFVBRFQ2RSxpQjNCbFpYLE8yQitZVzRhLGdCQUltQjtNQUozQjs0QjNCL1lILE8yQitZV0EsZUFNSDtJQWhXSyxpQkFrV0EvYTtNQUNWLFNBQVErYSxJQUFJemY7UUFDVixHQURVQSxNQUNWLHFCQUZRMEUsR0FFYTtRQUVYLHFCQUpGQSxFQUNFMUUsR0FHQSxLQUhBQTtRQUlTLGFBSlRBLEVBR0o2RSxrQjNCM1pYLE8yQndaVzRhLGdCQUl1QjtNQUovQjs0QjNCeFpILE8yQndaV0EsZUFNSDtJQXpXSyxrQkEyV0R6ZjtNQUNULFlBQ2M7TUFTZDtpQkFDT29IO1VBQ0YsR0FaRDVDLFNBWUMscUJBWEQyRTtZQUdZO2FBQVY2WTtjQUFVLFVBQWQscUJBSEU3WTtZQUdZLHdCQUhaQSxZQUdFNlk7YUFDMEI7WUFEaEIsSUFFVkMsUUFBVSxPQUZWRDtZQUdKLEtBTkU3WSxTQUtFOFksVUFORnpkO1lBT0YsU0FESXlkO1VBT0QsZUFaRDlZLE9BREEzRSxLQVdHNEM7VUFFRjtrQkFDTTtRQWZGcEg7TUFXVCxXQVRJbUosU0FEQTNFLEtBZ0JTO0lBNVhILFNBNHNCSjBkLE1BblRpQmxjLEVBQUVoRyxHQUdiLHFDQUhXZ0csRUFBRWhHLEdBR2E7SUE1WjVCLGtCQThaQ2dHLEVBQUVoRyxHQUNaLHNCQURVZ0csRUFBRWhHLGNBQ2tEO0lBL1pyRCx1QkFpYU1nRyxFQUFFaEcsR0FFYix3QkFGV2dHLEVBQUVoRyxFQUVJO0lBbmFaLHVCQXFhTWdHLEVBQUVoRyxHQUNnQixxQ0FEbEJnRyxFQUFFaEcsR0FFSTtJQXZhWixzQkF5YUtnRyxFQUFFaEcsR0FDaEIsd0JBRGNnRyxFQUFFaEcsY0FDb0Q7SUExYTNELHNCQTRhS2dHLEVBQUVoRyxHQUNoQix3QkFEY2dHLEVBQUVoRyxjQUNvRDtJQTdhM0Qsc0JBK2FLZ0csRUFBRWhHLEdBQ2hCLHFCQURjZ0csRUFBRWhHLGNBQ29EO0lBaGIzRCxzQkFrYktnRyxFQUFFaEcsR0FFWix3QkFGVWdHLEVBQUVoRyxFQUVJO0lBcGJYLHNCQXNiS2dHLEVBQUVoRyxHQUNtQyx3QkFBbEIsaUJBRG5CZ0csRUFBRWhHLEdBRUk7SUF4Ylgsc0JBMGJLZ0csRUFBRWhHLEdBRVosd0JBRlVnRyxFQUFFaEcsRUFFSTtJQTViWCxzQkE4YktnRyxFQUFFaEcsR0FDbUMsd0JBQWxCLGlCQURuQmdHLEVBQUVoRyxHQUVJO0lBaGNYLFNBeXJCTm1pQixNQWxQbUJuYyxFQUFFaEcsRUFBRTZFLEdBRzNCLHdCQUh1Qm1CLEVBQUVoRyxFQUd6QixhQUgyQjZFLEdBR1E7SUExY3pCLHNCQTRjS21CLEVBQUVoRyxFQUFFNkUsR0FFZCx3QkFGVW1CLEVBQUVoRyxFQUFFNkUsRUFFSTtJQTljYixzQkFnZEttQixFQUFFaEcsRUFBRTZFLEdBQ1Esd0JBRFptQixFQUFFaEcsRUFDVSxhQURSNkUsR0FFSTtJQWxkYixzQkFvZEttQixFQUFFaEcsRUFBRTZFLEdBRWQsd0JBRlVtQixFQUFFaEcsRUFBRTZFLEVBRUk7SUF0ZGIsc0JBd2RLbUIsRUFBRWhHLEVBQUU2RTtNQUNRLHdCQURabUIsRUFBRWhHLEVBQzJCLGlCQUR6QjZFLEdBRUk7SUExZGIsc0JBNGRLbUIsRUFBRWhHLEVBQUU2RSxHQUVkLHdCQUZVbUIsRUFBRWhHLEVBQUU2RSxFQUVJO0lBOWRiLHNCQWdlS21CLEVBQUVoRyxFQUFFNkU7TUFDUSx3QkFEWm1CLEVBQUVoRyxFQUMyQixpQkFEekI2RSxHQUVJO0lBbGViO2FBNGVDdWQsUUFBUTVkLEVBQUVrTyxHM0JqaUJ4QixPQzRFYytKLFcwQnFkUWpZLEVBQUVrTyxFQUE4QztJQTVlekQsU0E4ZkMyUCxrQkFBa0JyYyxHQUFJLGNBQUpBLGdCQUFtQjtJQTlmdEMsU0ErZkNzYyxrQkFBa0J0YyxHQUFJLGNBQUpBLGdCQUFvQjtJQS9mdkMsU0FnZ0JDdWMsa0JBQWtCdmMsR0FBSSxjQUFKQSxnQkFBb0I7SUFoZ0J2QyxTQWlnQkN3YyxrQkFBa0J4YztNQUFJLFNBQUpBLFlBQUksb0JBQUpBLE9BREksV0FDb0I7SUFqZ0IzQyxTQWtnQkN5YyxrQkFBa0J6YyxHQUFJLGNBQUpBLGdCQUFrQjtJQWxnQnJDLFNBd2dCQzBjLGNBQWNDLEdBQUdDLEdBQUdDO01BQy9CLFFBRHlCRixrQkFBR0MsZ0JBQUdDLE9BR2Y7SUEzZ0JOLFNBNmdCQ0MsY0FBY0gsR0FBR0MsR0FBR0MsR0FBR0U7TUFDbEMsUUFEeUJKLGlCQUFHQyxrQkFBR0MsZ0JBQUdFLE9BSWxCO0lBamhCTix5QkFtaEJRL2MsRUFBRWhHO01BQ1gsc0JBRFNnRyxFQUFFaEcsR0FDWCx5QkFEU2dHO01BQ1QsVUFoQmdCMmM7Ozs7OztjQXNDckIsSUFBSXBjLElBdkJZdkc7Y0F1QmhCLEdBcEJBK0UsTUFvQkl3QixJQUE2QjtjQUFqQyxJQUNJcWMsR0FBSyxzQkF4Qks1YyxFQXVCVk87Y0FDbUIscUJBQW5CcWMsSUFBNkM7Y0FEakQsSUFFSWhCLElBRkFyYjtjQUVKLEdBdEJBeEIsTUFzQkk2YyxJQUE2QjtjQUZqQyxJQUdJaUIsR0FBSyxzQkExQks3YyxFQXlCVjRiO2NBQ21CLHlCQUFuQmlCO3VCQUE2Qzt1QkFDdkMsd0JBMUNXRixHQXVDakJDLEdBRUFDOztjQUdKLElBQUlHLElBN0JZaGpCO2NBNkJoQixHQTFCQStFLE1BMEJJaWUsSUFBNkI7Y0FBakMsSUFDSUMsS0FBSyxzQkE5QktqZCxFQTZCVmdkO2NBQ21CLHFCQUFuQkMsTUFBNkM7Y0FEakQsSUFFSUMsSUFGQUY7Y0FFSixHQTVCQWplLE1BNEJJbWUsSUFBNkI7Y0FGakMsSUFHSUMsS0FBSyxzQkFoQ0tuZCxFQStCVmtkO2NBQ21CLHFCQUFuQkMsTUFBNkM7Y0FIakQsSUFJSUMsSUFGQUY7Y0FFSixHQTlCQW5lLE1BOEJJcWUsSUFBNkI7Y0FKakMsSUFLSUwsR0FBSyxzQkFsQ0svYyxFQWlDVm9kO2NBQ21CLHlCQUFuQkw7dUJBQTZDO3VCQUN2Qyx3QkFsRFdKLEdBNkNqQk0sS0FFQUUsS0FFQUo7O2NBV0osSUFBSU0sS0E3Q1lyakI7Y0E2Q2hCLEdBMUNBK0UsTUEwQ0lzZSxLQUE2QjtjQUFqQyxJQUNJQyxLQUFLLHNCQTlDS3RkLEVBNkNWcWQ7Y0FDbUIscUJBQW5CQyxNQUE2QztjQURqRCxJQUVJQyxLQUZBRjtjQUVKLEdBNUNBdGUsTUE0Q0l3ZSxLQUE2QjtjQUZqQyxJQUdJQyxLQUFLLHNCQWhES3hkLEVBK0NWdWQ7Y0FDbUIscUJBQW5CQyxNQUE2QztjQUhqRCxJQUlJQyxLQUZBRjtjQUVKLEdBOUNBeGUsTUE4Q0kwZSxLQUE2QjtjQUpqQyxJQUtJQyxLQUFLLHNCQWxESzFkLEVBaURWeWQ7Y0FDbUIseUJBQW5CQzt1QkFBNkM7dUJBQ3ZDLHdCQWxFV2YsR0E2RGpCVyxLQUVBRSxLQUVBRTs7OztjQWJKLElBQUlDLElBckNZM2pCO2NBcUNoQixHQWxDQStFLE1Ba0NJNGUsSUFBNkI7Y0FBakMsSUFDSUMsS0FBSyxzQkF0Q0s1ZCxFQXFDVjJkO2NBQ21CLHFCQUFuQkMsTUFBNkM7Y0FEakQsSUFFSUMsSUFGQUY7Y0FFSixHQXBDQTVlLE1Bb0NJOGUsSUFBNkI7Y0FGakMsSUFHSUMsS0FBSyxzQkF4Q0s5ZCxFQXVDVjZkO2NBQ21CLHFCQUFuQkMsTUFBNkM7Y0FIakQsSUFJSUMsSUFGQUY7Y0FFSixHQXRDQTllLE1Bc0NJZ2YsSUFBNkI7Y0FKakMsSUFLSUMsS0FBSyxzQkExQ0toZSxFQXlDVitkO2NBQ21CLHlCQUFuQkM7dUJBQTZDO3VCQUN2Qyx3QkExRFdyQixHQXFEakJpQixLQUVBRSxLQUVBRTs7dUJBekRpQnJCO1lBMEJyQixJQUFJc0IsS0FYWWprQjtZQVdoQixHQVJBK0UsTUFRSWtmLEtBQTZCO1lBQWpDLElBQ0lDLEtBQUssc0JBWktsZSxFQVdWaWU7WUFDbUIscUJBQW5CQyxNQUE2QztZQURqRCxJQUVJQyxLQUZBRjtZQUVKLEdBVkFsZixNQVVJb2YsS0FBNkI7WUFGakMsSUFHSUMsS0FBSyxzQkFkS3BlLEVBYVZtZTtZQUNtQix5QkFBbkJDO3FCQUE2QztxQkFDdkMsd0JBOUJXekIsR0EyQmpCdUIsS0FFQUU7O1FuQnRFRjtVbUJ5RUYsSUFBSUMsSUFqQllya0I7VUFpQmhCLEdBZEErRSxNQWNJc2YsSUFBNkI7VUFBakMsSUFDSUMsS0FBSyxzQkFsQkt0ZSxFQWlCVnFlO1VBQ21CLHFCQUFuQkMsTUFBNkM7VUFEakQsSUFFSUMsSUFGQUY7VUFFSixHQWhCQXRmLE1BZ0JJd2YsSUFBNkI7VUFGakMsSUFHSUMsS0FBSyxzQkFwQkt4ZSxFQW1CVnVlO1VBQ21CLHlCQUFuQkM7bUJBQTZDO21CQUN2Qyx3QkFwQ1c3QixHQWlDakIyQixLQUVBRTs7cUJBbkNpQjdCLElBb0JILGlCQXBCR0E7O1VBc0JyQixJQUFJOEIsS0FQWXprQjtVQU9oQixHQUpBK0UsTUFJSTBmLEtBQTZCO1VBQWpDLElBdEJ3QkMsS0F1QmYsc0JBUksxZSxFQU9WeWU7VUFDbUIseUJBdkJDQzttQkF1QnlCO21CQS9DMUN0QyxXQXdCY08sZ0JBQUcrQjtNQW1FckIscUJBQWE7SUF2a0JWLHlCQXlrQlExZSxFQUFFaEcsRUFJbEIwUztNQUhGLFNBQUlpUztRM0IvbkJQO00yQituQkcsSUFDSTVmLElBREoscUJBRGtCaUI7Y0FJaEIwTTtRQUNPLFNBRFBBO1VBSU8sVUFKUEE7WUFVTyxXQVZQQTtjQWlCTyxhQWpCUEEsRUF5Qks7Y0FQSCxJQUFJa1MsS0F0Qlk1a0I7Y0FzQmhCLE9BcEJBK0UsTUFvQkk2Zjs7d0JBRUgsZUF4QmE1ZSxFQUFFaEcsUUFJbEIwUzt3QkFxQkcsSUF6QmExTSxFQUFFaEcsaUJBSWxCMFM7d0JBc0JHLElBMUJhMU0sRUFBRWhHLGlCQUlsQjBTO3dCQXVCRyxJQTNCYTFNLEVBc0JWNGUsV0FsQk5sUzs7WUFXRSxJQUFJbVMsT0FmWTdrQjtZQWVoQixPQWJBK0UsTUFhSThmOztzQkFFSCxlQWpCYTdlLEVBQUVoRyxRQUlsQjBTO3NCQWNHLElBbEJhMU0sRUFBRWhHLGlCQUlsQjBTO3NCQWVHLElBbkJhMU0sRUFlVjZlLGFBWE5uUzs7VUFLRSxJQUFJb1MsT0FUWTlrQjtVQVNoQixPQVBBK0UsTUFPSStmOztvQkFFSCxlQVhhOWUsRUFBRWhHLFFBSWxCMFM7b0JBUUcsSUFaYTFNLEVBU1Y4ZSxhQUxOcFM7O1FBRUUsZUFOYzFNLEVBQUVoRyxFQUlsQjBTO1FBRUU7TUFGYyw0QkF5QkM7SUF0bUJULHdCQXltQk8xTTtNQUFqQiw2QkFBaUJBLFdBQUVoRztNQUNqQjtXQURXK0UsTUFBTS9FLEVBQ0Q7UUFFTSxnQ0FIUGdHLEVBQUVoRztRQUdLOzs7Ozs7Z0JBdUJsQixJQUFJNGtCLEtBMUJTNWtCO2dCQTZCVjs7bUJBN0JJK0UsTUEwQkg2Zjs7O2tCQUVELGtCQUFrQixzQkE1QlY1ZSxFQUFFaEc7OztrQkE2QlYsa0JBQWtCLHNCQTdCVmdHLEVBMEJQNGU7a0JBS0MsUUFMREEsYUExQlM1a0I7Z0JBOEJSOztnQkFHTCxJQUFJOGtCLE9BakNTOWtCO2dCQXFDVjs7bUJBckNJK0UsTUFpQ0grZjs7O2tCQUVELGtCQUFrQixzQkFuQ1Y5ZSxFQUFFaEc7OztrQkFvQ1Ysa0JBQWtCLHNCQXBDVmdHLEVBQUVoRzs7O2tCQXFDVixrQkFBa0Isc0JBckNWZ0csRUFpQ1A4ZTtrQkFNQyxRQU5EQSxlQWpDUzlrQjtnQkFzQ1I7O2dCQVdMLElBQUkra0IsT0FqRFMva0I7Z0JBcURWOzttQkFyREkrRSxNQWlESGdnQjs7O2tCQUVELGtCQUFrQixzQkFuRFYvZSxFQUFFaEc7OztrQkFvRFYsa0JBQWtCLHNCQXBEVmdHLEVBQUVoRzs7O2tCQXFEVixrQkFBa0Isc0JBckRWZ0csRUFpRFArZTtrQkFNQyxRQU5EQSxlQWpEUy9rQjtnQkFzRFI7Ozs7Z0JBYkwsSUFBSWdsQixPQXpDU2hsQjtnQkE2Q1Y7O21CQTdDSStFLE1BeUNIaWdCOzs7a0JBRUQsa0JBQWtCLHNCQTNDVmhmLEVBQUVoRzs7O2tCQTRDVixrQkFBa0Isc0JBNUNWZ0csRUFBRWhHOzs7a0JBNkNWLGtCQUFrQixzQkE3Q1ZnRyxFQXlDUGdmO2tCQU1DLFFBTkRBLGVBekNTaGxCO2dCQThDUjs7O2NBbENMLElBQUlpbEIsT0FaU2psQjtjQWVWOztpQkFmSStFLE1BWUhrZ0I7OztnQkFFRCxrQkFBa0Isc0JBZFZqZixFQUFFaEc7OztnQkFlVixrQkFBa0Isc0JBZlZnRyxFQVlQaWY7Z0JBS0MsUUFMREEsZUFaU2psQjtjQWdCUjs7VW5COUpMO1ltQmlLQSxJQUFJNmtCLE9BbkJTN2tCO1lBc0JWOztlQXRCSStFLE1BbUJIOGY7OztjQUVELGtCQUFrQixzQkFyQlY3ZSxFQUFFaEc7OztjQXNCVixrQkFBa0Isc0JBdEJWZ0csRUFtQlA2ZTtjQUtDLFFBTERBLGVBbkJTN2tCO1lBdUJSOzsrQkFuQmEsUUFKTEE7O1lBTWIsSUFBSWtsQixPQU5TbGxCO1lBUVY7O2VBUkkrRSxNQU1IbWdCOzs7Y0FFRCxrQkFBa0Isc0JBUlZsZixFQU1Qa2Y7Y0FJQyxRQUpEQSxlQU5TbGxCO1lBU1I7UUErQ0YsU0FFYztJQW5xQmIsNEJBdXFCV2dHLEVBQUVoRztNQUN2QixJQUNJK0UsSUFESixxQkFEcUJpQjtjQUFFaEcsUUFFbkIrRSxNQUZtQi9FO1FBSXZCLEdBSnVCQSxNQUVuQitFLElBRVk7UUFDVixJQUdKb2dCLEdBSEksTUFMZW5mLEVBQUVoRztvQkFRckJtbEI7VUFETyxXQUNQQSxHQURxQjtVQUVuQixJQUFJUCxLQVRlNWtCO1VBU25CLEdBUEErRSxNQU9JNmYsS0FDZSxvQkFSbkI3ZixNQUZtQi9FO1VBU25CLElBR0UwUyxFQURJLE1BWFcxTSxFQUFFaEc7c0JBWWpCMFM7WUFFRSxJQUFJQyxNQU5Wd1MsbUJBSUl6UztZQUVFLGlCQUFJQztVQUY2QjtRQU5KLGlCQUVuQ3dTO01BTHVCLDJDQVlOO0lBdHJCVCw0QkF3ckJXbmYsRUFBRWhHLEVBS3JCMFM7TUFKRixJQUNJM04sSUFESixxQkFEcUJpQjtjQUFFaEcsUUFFbkIrRSxNQUZtQi9FO2dCQUtyQjBTO1VBQ08sV0FEUEE7WUFJTyxhQUpQQSxFQVdLO1lBTkgsSUFBSWtTLEtBVmU1a0I7WUFVbkIsR0FSQStFLE1BUUk2ZixLQUNlO1lBRG5CO2FBRUEsSUFQRmxTO2FBT0UsV0FBSUM7YUFBSixXQUFJQTtZQUdKLE1BZmlCM00sRUFBRWhHLEVBYWZtbEI7WUFFUSxNQWZLbmYsRUFBRWhHLFVBY2ZvbEI7WUFDUTtVQVJaLElBQUlQLE9BUGU3a0I7VUFPbkIsT0FMQStFLE1BS0k4ZixVQUN1QixNQVJWN2UsRUFBRWhHLEVBS3JCMFM7UUFBZ0I7TUFGTyw2Q0FhTjtJQXhzQlQsMkJBMnNCTzFNO01BQWpCLDZCQUFpQkEsV0FBRWhHO01BQ2pCO1dBRFcrRSxNQUFNL0UsRUFFRDtRQUNoQixHQUhpQkEsTUFBTitFLElBR0s7UUFDVixJQUVKMk4sRUFGSSxNQUpTMU0sRUFBRWhHO29CQU1mMFM7VUFBTyxXQUFQQSxFQUFxQjtVQUVuQixJQUFJa1MsS0FSUzVrQjtVQVFiLEdBUk8rRSxNQVFINmYsS0FDZTtVQURuQixJQUdFalMsSUFESSxNQVZLM00sRUFBRWhHO3NCQVdYMlM7WUFDTyxRQVpJM1M7VUFXd0I7UUFQbkMsSUFDK0IsSUFMcEJBO2lCQWNJO0lBenRCYiw0QkE2dEJXZ0csRUFBRWhHO01BQ3ZCLElBQ0krRSxJQURKLHFCQURxQmlCO2NBQUVoRyxRQUVuQitFLE1BRm1CL0U7UUFJdkIsR0FKdUJBLE1BRW5CK0UsSUFFWTtRQUNWLElBR0pvZ0IsR0FISSxpQkFMZW5mLEVBQUVoRztvQkFRckJtbEI7VUFETyxXQUNQQSxHQURxQjtVQUVuQixJQUFJUCxLQVRlNWtCO1VBU25CLEdBUEErRSxNQU9JNmYsS0FDZSxvQkFSbkI3ZixNQUZtQi9FO1VBU25CLElBR0UwUyxFQURJLGlCQVhXMU0sRUFBRWhHO3NCQVlqQjBTO1lBRUUsSUFBSUMsTUFOVndTLG1CQUlJelM7WUFFRSxpQkFBSUM7VUFGNkI7UUFOSixpQkFFbkN3UztNQUx1Qiw2Q0FZTjtJQTV1QlQsNEJBOHVCV25mLEVBQUVoRyxFQUtyQjBTO01BSkYsSUFDSTNOLElBREoscUJBRHFCaUI7Y0FBRWhHLFFBRW5CK0UsTUFGbUIvRTtnQkFLckIwUztVQUNPLFdBRFBBO1lBSU8sYUFKUEEsRUFXSztZQU5ILElBQUlrUyxLQVZlNWtCO1lBVW5CLEdBUkErRSxNQVFJNmYsS0FDZTtZQURuQjthQUVBLElBUEZsUzthQU9FLFdBQUlDO2FBQUosV0FBSUE7WUFHSixpQkFmaUIzTSxFQUFFaEcsRUFhZm1sQjtZQUVRLGlCQWZLbmYsRUFBRWhHLFVBY2ZvbEI7WUFDUTtVQVJaLElBQUlQLE9BUGU3a0I7VUFPbkIsT0FMQStFLE1BS0k4ZixVQUN1QixpQkFSVjdlLEVBQUVoRyxFQUtyQjBTO1FBQWdCO01BRk8sNkNBYU47SUE5dkJULDJCQWl3Qk8xTTtNQUFqQiw2QkFBaUJBLFdBQUVoRztNQUNqQjtXQURXK0UsTUFBTS9FLEVBRUQ7UUFDaEIsR0FIaUJBLE1BQU4rRSxJQUdLO1FBQ1YsSUFFSjJOLEVBRkksaUJBSlMxTSxFQUFFaEc7b0JBTWYwUztVQUFPLFdBQVBBLEVBQXFCO1VBRW5CLElBQUlrUyxLQVJTNWtCO1VBUWIsR0FSTytFLE1BUUg2ZixLQUNlO1VBRG5CLElBR0VqUyxJQURJLGlCQVZLM00sRUFBRWhHO3NCQVdYMlM7WUFDTyxRQVpJM1M7VUFXd0I7UUFQbkMsSUFDK0IsSUFMcEJBO2lCQWNJO0lBL3dCYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CRWJId0UsRUFBRTRDLEdBQ1QsbUNBRE81QyxFQUFFNEMsR0FDUTtvQkFDVjVDLEVBQUVOLEdBQ1QsbUNBRE9NLEVBQUVOLEdBQ1E7b0JBRVZRO01BQ1AsaUNBQU8scUJBREFBLElBQ2M7bUJBR2ZBLEVBQUVvRCxJQUFJQztNQUNaLGdDQUFNLHFCQURBckQsR0FBRW9ELElBQUlDLEtBQ2dCO3NCQXNCbkJnWixJQUVQemE7TTdCMUVMLEc2QjBFS0E7UUFBSyxpQ0FGRXlhLGlCQUVQemEsRUFBSzs7Ozs7Y0FsQmlCO2VBS2hCSztlQUxLOUIsaUNBT2tCbWM7ZUFQUCxhQUFYbmMsSUFBaUM7O3FCQUt0QzhCOztxQkFETTs7O1VBZ0I4QixrREFGMUNMOzs7OztvQkFQTTBZO2dCQUNOLHdCQUxpQmlDO2dCQU1qQjtrQkFHT0YsTUFUVUUsVUFLakIsZ0NBTDZCRDtnQkFNN0I7aUVBTjZCQTs7eUJBSXZCaEM7O2NBRE4sd0JBSGlCaUMsUUFHakI7d0NBSGlCQTtNQVVYO29CQVNEL2MsRUFBRVE7TUFDVCwrQkFEU0EsV0FDVDs7O1FBQTZCO3FCQUR0QlIsRUFDc0IsdUJBRHBCUSxFQUNUMUU7VUFBNkIsU0FBN0JBOzs7Y0FBb0Q7cUJBRzVDa0UsRUFBRVE7TUFDViwrQkFEVUEsV0FDVjs7O1FBQTZCO3FCQURyQlIsRUFDUmxFLEVBQTZCLHVCQURuQjBFLEVBQ1YxRTtVQUE2QixTQUE3QkE7OztjQUFzRDttQkFFaERrRSxFQUFFUTtNQUNSLGtDQURNUixFQUNFLHFCQURBUSxJQUNjO29CQUNmUixFQUFFUTtNQUNULG1DQURPUixFQUNFLHFCQURBUSxJQUNjOzBCQUNWUixFQUFFVyxFQUFFNEM7TUFDRixvQkFERnZELEVBQ0UscUJBREFXLEdBQUU0QyxFQUNPO3lCQUNadkQsRUFBRXVELEVBQUU1QztNQUNBLG1CQURKWCxFQUFFdUQsRUFDRSxxQkFEQTVDLEdBQ087c0JBQ2RYLEVBQUVRLEdBQ0EsZ0JBREZSLEVBQ0UscUJBREFRLEdBQ087dUJBQ1JSLEVBQUVRLEdBQ0EsaUJBREZSLEVBQ0UscUJBREFRLEdBQ087YUFNakIyZ0I7TUFBVzs7Ozs7TXJCc2FQLG1CcUJwYU07b0JBRUwzZ0I7TUFDSixxQkFESUEsU0FDUSxPQURSQTtNQUU4Qjs7UUFBN0IsV0FBSCx1QkFGRUE7OztRQUU4QixrQ0FGOUJBO09BSUYsT0FKRUE7TUFHSSxpQ0FBUSxxQkFIWkEsSUFJRDt1QkFHbUJBO01BQXpCLDRCQUF5QkEsR0FBSTFFO01BQzNCO1dBRHlCd0UsS0FBRXhFLEVBQ1osT0FEUTBFO1FBRXJCLGlDQUZxQkEsRUFBSTFFLEdBRXpCOzs7OztRckJ5WkU7U3FCdlpNLHNDQUFXLHFCQUpFMEU7UUFFckIsSUFHTyxJQUxrQjFFO2lCQU9FO2FBR3pCc2xCLFlBQVU1Z0IsRUFBRWlkLElBQUkzaEIsRUFBRW9IO003Qi9IM0IsSTZCK0h5QmI7TUFDdEI7V0FEa0JvYixPQUFJcGIsSUFDTDtRQUNqQiwwQkFGZ0I3QixFQUFNNkIsU0FBRWEsRUFFRyxPQUZMYjtRQUVZLFFBRlpBO2lCQUVxQztxQkFHbkQ3QixFQUFFMEMsR0FBSSxtQkFBTjFDLEVBQU0sc0JBQU5BLEtBQUUwQyxFQUE4QjthQUdsQ21lLGdCQUFjN2dCLEVBQUVpZCxJQUFJM2hCLEVBQUVvSDtNN0J2SS9CLEk2QnVJNkJiO01BQzFCO1dBRHNCb2IsT0FBSXBiLElBQ1Q7UUFDakIsMEJBRm9CN0IsRUFBTTZCLFNBQUVhLEVBRUQsVUFGRGI7UUFFYSxRQUZiQTtpQkFFMEM7eUJBR3hEN0IsRUFBRTBDO01BQUksdUJBQU4xQyxFQUFNLHNCQUFOQSxLQUFFMEMsRUFBa0M7MEJBR25DMUMsRUFBRTFFLEVBQUVvSDtNQUNqQixJQUFJZCxFQUFKLHNCQURhNUI7Y0FBRTFFLFFBQ1hzRyxJQURXdEcsR0FHYixtQkFIVzBFLEVBQ1Q0QixFQURXdEcsRUFBRW9IO01BRU0sb0RBQ0o7OEJBR0YxQyxFQUFFMUUsRUFBRW9IO01BQ3JCLElBQUlkLEVBQUosc0JBRGlCNUI7Y0FBRTFFLFFBQ2ZzRyxJQURldEcsR0FLakIsdUJBTGUwRSxFQUNiNEIsRUFEZXRHLEVBQUVvSDtNQUduQixvREFFcUI7YUFHakJvZSxhQUFXOWdCLEVBQUUxRSxFQUFFb0g7TTdCN0p4QixJNkI2SnNCYjtNQUNuQjtnQkFEbUJBO1VBRW5CLDBCQUZpQjdCLEVBQUU2QixTQUFFYSxFQUVNLE9BRlJiO1VBRWUsUUFGZkE7O1FBQ0wsZ0JBQzBDO3NCQUcvQzdCLEVBQUUwQztNQUFJLG9CQUFOMUMsRUFBTSxzQkFBTkEsV0FBRTBDLEVBQWlDOzJCQUc5QjFDLEVBQUUxRSxFQUFFb0g7TTdCcktyQixTNkJxS21CcEgsOEJBQUYwRSxNQUFFMUU7T0FJZCxvQkFKWTBFLEVBQUUxRSxFQUFFb0g7TUFFaEIsb0RBRWdCO2FBR1pxZSxpQkFBZS9nQixFQUFFMUUsRUFBRW9IO003QjVLNUIsSTZCNEswQmI7TUFDdkI7Z0JBRHVCQTtVQUV2QiwwQkFGcUI3QixFQUFFNkIsU0FBRWEsRUFFRSxVQUZKYjtVQUVnQixRQUZoQkE7O1FBQ1QsU0FDbUQ7MEJBR3BEN0IsRUFBRTBDO01BQUksd0JBQU4xQyxFQUFNLHNCQUFOQSxXQUFFMEMsRUFBcUM7K0JBR2xDMUMsRUFBRTFFLEVBQUVvSDtNN0JwTHpCLFM2Qm9MdUJwSCw4QkFBRjBFLE1BQUUxRTtPQUlsQix3QkFKZ0IwRSxFQUFFMUUsRUFBRW9IO01BRXBCLG9EQUVvQjs2QkFHTjFDLEVBQUUxRSxFQUFFb0g7TUFDcEIsSUFBSWQsRUFBSixzQkFEZ0I1QjtjQUFFMUUsUUFDZHNHLElBRGN0RztPQUtoQjtTQUFXLFlBTEcwRSxFQUNaNEIsRUFEY3RHLEVBQUVvSCxHQUtQOzs7K0JBQTRDOztNQUZ2RCxvREFFNEQ7d0JBR25EMUMsRUFBRTBDLEdBQUksdUJBQU4xQyxJQUFFMEMsRUFBdUI7OEJBR25CMUMsRUFBRTFFLEVBQUVvSDtNN0J0TXhCLFE2QnNNc0JwSCw4QkFBRjBFLE1BQUUxRTtPQUlqQjtTQUFXLGFBSkkwRSxFQUFFMUUsRUFBRW9ILEdBSVI7OzsrQkFBMkM7O01BRnRELG9EQUUyRDsrQkFFM0MxQztNQUNsQiw4Q0FBa0IscUJBREFBLElBQ2M7K0JBQ2RBO01BQ2xCLDhDQUFrQixxQkFEQUEsSUFDYztnQ0FDYkE7TUFDbkIsNkNBQW1CLHFCQURBQSxJQUNjO2tDQUNaQTtNQUNyQiwrQ0FBcUIscUJBREFBLElBQ2M7MkJBR3BCMGMsT0FBTzFjO01BQ3RCO21DQURzQkE7T0FDdEIsOEJBRGUwYztPQUNmLEtBQ0lFLFdBREFEO01BQUo7WUFFWXJoQjtRQUNWO2FBRFVBLE1BRFJzaEIsUUFFa0I7VUFDZiwwQkFMZTVjLEVBR1YxRSxPQUVMLHVCQUxRb2hCLE9BR0hwaEI7V0FFeUM7VUFDOUMsUUFIS0E7O01BTlosV0FVNEI7eUJBR2Z1aEIsT0FBTzdjO01BQ3BCO21DQURvQkE7T0FDcEIsOEJBRGE2YztPQUNiLEtBQUlGLFFBQ0FHO09BREosVUFFSUM7TUFGSjtZQUdZemhCO1FBQ1Y7YUFEVUEsTUFGUndoQixRQUdrQjtVQUNmO21DQU5hOWMsRUFHaEIrYyxPQUNRemhCOztZQUVMLHVCQU5NdWhCLE9BSUR2aEI7V0FFa0Q7VUFDdkQsUUFIS0E7O01BVlYsV0FjbUI7NkJBR0wrZ0IsSUFBSXJjO01BQ3BCOztrQ0FEb0JBO09BQ3BCLDJCQURvQkE7TUFDcEI7WUFFQTFFO1FBQ0U7b0NBSmtCMEUsRUFHcEIxRSxPQUhnQitnQjtZQUllLFNBSDNCMWM7WUFJSyxnQkFMV0ssRUFHcEIxRSxXQURJc1UsT0FDSnRVO1lBRVMsT0FGVEE7Ozs7TUFGQSxTQUFJcUU7TUFRSixnQkFUb0JLLElBRWhCNFAsV0FPWTt5QkFJSjVQO01BQ1osd0NBQVkscUJBREFBLElBQ2M7eUJBQ2RBO01BQ1osd0NBQVkscUJBREFBLElBQ2M7MEJBQ2JBO01BQ2IsdUNBQWEscUJBREFBLElBQ2M7NEJBQ1pBO01BQ2YseUNBQWUscUJBREFBLElBQ2M7dUJBSWxCRyxFQUFPQyxHQUFRLDJCQUFmRCxFQUFPQyxFQUEwQjtzQkFLbkNKLEdBQUkscUNBQUpBLEdBQXFCO3VCQUVwQkEsR0FBSSxvQ0FBSkEsR0FBc0I7c0JBRXZCZ2hCLEdBQUkscUNBQUpBLEdBQXFCOytCQUlaaGhCLEVBQUUxRTtNQUFzQiw0Q0FBeEIwRSxHQUFFMUUsRUFBK0I7OEJBQ2xDMEU7TUFBcUIsMkNBQXJCQSxHQUE0QjtrQ0FFeEJBLEVBQUUxRTtNQUF5QiwrQ0FBM0IwRSxHQUFFMUUsRUFBa0M7aUNBQ3JDMEU7TUFBd0IsOENBQXhCQSxHQUErQjtrQ0FFOUJBLEVBQUUxRTtNQUF5QiwrQ0FBM0IwRSxHQUFFMUUsRUFBa0M7aUNBQ3JDMEU7TUFBd0IsOENBQXhCQSxHQUErQjt3QkFTeENBLEVBQUUxRSxHQUFlLHFDQUFqQjBFLEdBQUUxRSxFQUF3Qjs2QkFDckIwRSxFQUFFMUU7TUFBb0IsNkNBQXRCMEUsR0FBRTFFLEVBQTZCOzZCQUMvQjBFLEVBQUUxRTtNQUFvQiwwQ0FBdEIwRSxHQUFFMUUsRUFBNkI7NEJBQ2hDMEUsRUFBRTFFO01BQW1CLHlDQUFyQjBFLEdBQUUxRSxFQUE0Qjs0QkFDOUIwRSxFQUFFMUU7TUFBbUIseUNBQXJCMEUsR0FBRTFFLEVBQTRCOzRCQUM5QjBFLEVBQUUxRTtNQUFtQix5Q0FBckIwRSxHQUFFMUUsRUFBNEI7NEJBQzlCMEUsRUFBRTFFO01BQW1CLDZDQUFyQjBFLEdBQUUxRSxFQUE0Qjs0QkFDOUIwRSxFQUFFMUU7TUFBbUIseUNBQXJCMEUsR0FBRTFFLEVBQTRCOzRCQUM5QjBFLEVBQUUxRTtNQUFtQiw2Q0FBckIwRSxHQUFFMUUsRUFBNEI7NEJBQzlCMEUsRUFBRTFFO01BQW1CLHlDQUFyQjBFLEdBQUUxRSxFQUE0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2FDdlIzQzJsQixxQkFBYyxRQUFJO2FBQ2xCQyx1QkFBZ0IsUUFBQzthQUNqQkMsbUJBQWUsWUFBSTt1QkFGbkJGLFNBQ0FDLFdBQ0FDOzthQ1lBQyxVQUFVQyxLQUFLamUsSUFBSUMsSUFBSTNELEVBQUU0aEI7TS9CaEM5Qjs7O1ErQmdDb0JsZTs7OztRQUFJQzs7OytCQUFUZ2UsUUFBU2hlLFdBQUpEO09BR1osMkNBSE9pZSxLQUFLamUsSUFBSUMsSUFBSTNELEVBQUU0aEI7TUFFdEIsa0RBQ3FDO1FBWXhDQzthQUNBQyxVQUFVSCxLQUFLamU7TS9CaERwQixRK0JnRG9CQSxnQ0FBTGllLGtCQUFLamU7T0FHWiw4QkFIT2llLEtBQUtqZTtNQUVaLHlDQUN5QjthQUM1QnFlLFdBQVdKLEtBQUtqZSxLQUFvQixzQkFBekJpZSxLQUFLamUsUUFBc0M7YUFFdERzZSxXQUFXTCxLQUFLamU7TS9CdERyQixRK0JzRHFCQSxnQ0FBTGllLGtCQUFLamU7UUFJTixJQUFOQyxJQUFNLHVCQUpDZ2UsS0FBS2plO1FBSU4sNkJBSkNpZSxjQUlQaGUsZ0JBSllEO2lCQU1YO2lCQUNBLG9DQVBNaWUsS0FBS2plO01BRWIsMENBTUY7YUFFRHVlLFlBQVlOLEtBQUtqZTtNQUdSLHVDQUhHaWUsTUFBS2plLElBR3lCOzs7OztPQW5DMUNnZTs7T0FzQkFNO09BVUFDO09BakJBSjtPQUNBQztPQUlBQzs7SUNoQmE7b0JBWVI3ZixFQUFFcEM7TUFDVCxTQURPb0MsRUFDTztNQUNkLFFBRk9BO1FBTUksdUJBTkpBLEVBTWEsV0FOWHBDLE1BTUUsS0FOSm9DLFVBTUk7O2NBQ1Z0RztVQUNFO29CQURGQSxLQUNtQixXQVJYa0UsRUFPUmxFO1lBQ0UsU0FERkE7OztRQUdBLE9BSkl1SjtNQUpTLGtDQVFWO0lBdEJXLHVCQXdCRCtjLEdBQUdDLEdBQUdoUztNQUNWLHVCQURJK1IsUUFDSixLQURJQSxXQUNKOztZQUNWemhCO1FBQ0U7VUFBaUIsUUFEbkJBLEtBQ21CLGVBSEYwaEIsR0FBR2hTO1VBR0QsU0FEbkIxUDs7O01BR0EsT0FKSTBFLEdBSUQ7SUE3QlksZ0JBaUNSOUI7TUFDUCxJQUFJbkIsRUFER21CLGFBQ1AsYUFBSW5CLE1BQXdDLGVBRHJDbUIsSUFDSG5CLEVBQXdEO0lBbEM3QyxrQkFvQ051WCxHQUFHRDtNQUNaLElBQUloWSxHQURLaVk7TUFDVCxhQUFJalk7ZUFDVyxPQUZIZ1k7O2lCQUdlLGVBSGxCQyxLQUNMalk7aUJBR0MsMEJBSklpWSxHQUFHRCxHQUlVO0lBeENQLGVBMENUblcsRUFBRUssSUFBSUM7TWhDOUVmLFFnQzhFV0QsWUFBSUMsV0FBTk4sZUFBTU0sV0FBSkQ7T0FHSCxzQkFIQ0wsRUFBRUssSUFBSUM7TUFFUCxpQ0FDb0I7SUE3Q1YsZ0JBK0NSTixFQUFFSyxJQUFJQyxJQUFJM0Q7TWhDbkZwQixRZ0NtRlkwRCxZQUFJQyxXQUFOTixlQUFNTSxXQUFKRDtPQUdKLCtCQUhFTCxFQUFFSyxJQUFJQyxJQUFJM0Q7TUFFWixrQ0FDdUI7SUFsRGIsZ0JBb0RSeVosR0FBR2dELEtBQUtqRCxHQUFHa0QsS0FBSy9ZO01oQ3hGMUI7OztRZ0N3RjBCQTs7OztRQUFiOFk7OztVQUFIaEQsZ0JBQWdCOVYsV0FBYjhZOzs7O1FBQVFDOzs7VUFBSGxELGdCQUFRN1YsV0FBTCtZO09BSWIsK0JBSkVqRCxHQUFHZ0QsS0FBS2pELEdBQUdrRCxLQUFLL1k7TUFHbEIsa0NBQytCO0lBeERyQixnQkEwRFI3RCxFQUFFdUQ7TUFDVCxTQURTQSxxQkFDVDs7O1FBQTZCO3FCQUR0QnZELEVBQUV1RCxNQUNUekg7VUFBNkIsU0FBN0JBOzs7Y0FBbUQ7SUEzRHBDLGlCQTZEUGtFLEVBQUV1RCxFQUFFekI7TUFDWixHQURVeUIsaUJBQUV6QjtPQUVWO01BRUEsU0FKUXlCLHFCQUlSOzs7UUFBNkI7cUJBSnZCdkQsRUFBRXVELE1BSVJ6SCxHQUpVZ0csTUFJVmhHO1VBQTZCLFNBQTdCQTs7O2NBQXFFO0lBakV4RCxlQW1FVGtFLEVBQUV1RDtNQUNSLElBQUluQixFQURJbUI7TUFDUixTQUFJbkIsRUFDVTtNQURkLElBRVUsaUJBRk5BLEVBRWUsV0FIYnBDLEVBQUV1RCxPQUdFLEtBRk5uQixVQUVNOztZQUNSdEc7UUFDRTtnQkFERkEsS0FDaUIsV0FMYmtFLEVBQUV1RCxNQUlOekg7VUFDRSxTQURGQTs7O01BR0EsT0FKSXFFLENBS0g7SUEzRVksZ0JBNkVSSCxFQUFFdUQsRUFBRXpCO01BQ1gsT0FEU3lCLGFBQ1QsR0FEV3pCO01BQ1gsR0FBSXdnQixPQUNBQyxHQUVGO01BQ0csU0FKREQsR0FLYTtNQUxqQixJQU1ZLGlCQU5SQSxHQU1rQixXQVBmdGlCLEVBQUV1RCxLQUFFekIsT0FPQyxLQU5Sd2dCLFdBTVE7O1lBQ1J4bUI7UUFDRTtnQkFERkEsS0FDaUIsV0FUZGtFLEVBQUV1RCxNQVFMekgsR0FST2dHLE1BUVBoRztVQUNFLFNBREZBOzs7TUFHQSxPQUpJcUUsQ0FNTDtJQTFGWSxpQkE0RlBILEVBQUV1RDtNQUNWLFNBRFVBLHFCQUNWOzs7UUFBNkI7cUJBRHJCdkQsRUFDUmxFLEVBRFV5SCxNQUNWekg7VUFBNkIsU0FBN0JBOzs7Y0FBc0Q7SUE3RnZDLGdCQStGUmtFLEVBQUV1RDtNQUNULElBQUluQixFQURLbUI7TUFDVCxTQUFJbkIsRUFDVTtNQURkLElBRVUsaUJBRk5BLEVBRWUsV0FIWnBDLElBQUV1RCxPQUdDLEtBRk5uQixVQUVNOztZQUNSdEc7UUFDRTtnQkFERkEsS0FDaUIsV0FMWmtFLEVBSUxsRSxFQUpPeUgsTUFJUHpIO1VBQ0UsU0FERkE7OztNQUdBLE9BSklxRSxDQUtIO0lBdkdZLG1CQXlHTG9EO01BQ1YsUUFEVUEscUJBQ0t6SCxNQUFFdUo7TUFDZjtnQkFEYXZKO1VBQzBCLGFBRi9CeUgsTUFDS3pILEdBQUV1SixLQUN3QixJQUQxQnZKLGdCQUFFdUo7UUFDRCxPQURDQSxJQUVPO0lBNUdULFNBK0dUb2Q7Ozs7VUFFSTs7OzttQkFBTEM7O1FBREc7SUFoSE8saUJBcUhidGdCO01BRlUsR0FFVkE7UUFDa0M7U0FEOUJLLEdBQUpMOztTQUNrQyxpQkFBakIsY0FEakJBOztlQUFJSzs7O2dCQUlNcVksY0FBSjZIO1lBQVUsV0FBVkE7WUFBVSw4QkFBTjdIOztVQURFLE9BRk52WDtNQUZBLFVBTUs7SUExSEUscUJBNEhIdkQsRUFBRVcsRUFBRTRDO01BQ2hCLFNBRGM1QyxHQUNkLEtBRGdCNEMscUJBQ2hCOztZQUNBekg7UUFDRTtVQUFLLGtCQUhLa0UsRUFDUkcsS0FEWW9ELE1BRWhCekg7VUFDTyxTQURQQTs7O01BR0EsT0FKSXFFLElBSUY7SUFqSWEseUJBbUlDSCxFQUFFb08sSUFBSXdVO01BQ3RCLElBQUkvZSxJQURrQitlO01BQ3RCLFNBQUkvZSxJQUNZLFVBRkV1SztNQUNsQjtPQUVpQixpQkFIRHBPLEVBQUVvTyxJQUFJd1U7T0FHTDs7T0FDSSw0QkFIakIvZSxJQUVPZ2Y7T0FDVSxTQURmeFU7T0FDZSxLQUhqQnhLO09BR2lCOztZQUVuQi9IO1FBQ0U7VUFBZ0I7OEJBUEprRSxFQUtWc08sU0FMZ0JzVSxnQkFNcEI5bUI7V0FDa0I7O3FCQUFaa25CO1VBRUosaUJBSEZsbkIsS0FDWWluQjtVQUFNLFNBRGxCam5COzs7TUFLQSxVQU5Jd1MsU0FEQXdVLGFBUUg7SUEvSVksc0JBaUpGOWlCLEVBQUV1RCxFQUFFNUM7TUFDakIsU0FEaUJBLEdBQ2pCLEtBRGU0QztNQUNmO1lBQ0F6SDtRQUNFO1VBQUssa0JBSE1rRSxFQUFFdUQsTUFFZnpILEdBRElxRTtVQUVHLFNBRFByRTs7O01BR0EsT0FKSXFFLElBSUY7SUF0SmEsa0JBd0pOaVAsRUFBRTdMO01BQ1gsTUFEV0EsYUFFRXpIO01BQ1g7V0FEV0EsTUFEVHdFLEVBRVk7UUFDTixjQUpEOE8sRUFBRTdMLE1BRUV6SCxJQUVxQjtRQUMzQixRQUhNQTtpQkFJUDtJQTlKUyxtQkFnS0xzVCxFQUFFN0w7TUFDWixNQURZQSxhQUVDekg7TUFDWDtXQURXQSxNQURUd0UsRUFFWTtRQUNOLGNBSkE4TyxFQUFFN0wsTUFFQ3pILEtBRXFCLFFBRnJCQTtRQUdOLFNBQ0Q7SUF0S1Msb0JBd0tKc1QsRUFBRTFOLEdBQUdDO01BQ2hCLE9BRGFELGNBQ2IsR0FEZ0JDO01BQ2hCLEdBQUlnWixPQUNBQyxHQUNhO01BRmpCLElBR2tCOWU7TUFDaEI7V0FEZ0JBLE1BSGQ2ZSxHQUlhO1FBQ1AsY0FOQ3ZMLEVBQUUxTixPQUlLNUYsR0FKRjZGLE9BSUU3RjtVQUVtQyxRQUZuQ0E7UUFHWCxTQUNEO0lBaExTLG1CQWtMTHNULEVBQUUxTixHQUFHQztNQUNmLE9BRFlELGNBQ1osR0FEZUM7TUFDZixHQUFJZ1osT0FDQUMsR0FDYTtNQUZqQixJQUdrQjllO01BQ2hCO1dBRGdCQSxNQUhkNmUsR0FJYTtRQUNQLGNBTkF2TCxFQUFFMU4sT0FJTTVGLEdBSkg2RixPQUlHN0YsSUFFbUM7UUFDOUMsUUFIV0E7aUJBSVo7SUExTFMsZUE0TFQ2RSxFQUFFNEM7TUFDUixNQURRQSxhQUVLekg7TUFDWDtXQURXQSxNQURUd0UsRUFFWTtRQUNrQixzQkFKMUJpRCxNQUVLekgsR0FGUDZFLEdBSXdDO1FBQ3ZDLFFBSE03RTtpQkFJUDtJQWxNUyxnQkFvTVI2RSxFQUFFNEM7TUFDVCxNQURTQSxhQUVJekg7TUFDWDtXQURXQSxNQURUd0UsRUFFWTtRQUNELEdBSlJLLE1BQUU0QyxNQUVJekgsR0FFd0I7UUFDOUIsUUFITUE7aUJBSVA7SUExTVMsb0JBNE1Kc1QsRUFBRTdMO01BQ2IsTUFEYUEsYUFFQXpIO01BQ1g7V0FEV0EsTUFEVHdFLEVBRVk7UUFFSixJQUFKSyxFQUxLNEMsTUFFQXpIO1FBSU4sY0FOSXNULEVBS0h6TyxHQUNRLFVBRFJBO1FBQUksSUFFSCxJQUxJN0U7aUJBT1A7SUFyTlMsb0JBdU5Ka0UsRUFBRXVEO01BQ2IsTUFEYUEsYUFFQXpIO01BQ1g7V0FEV0EsTUFEVHdFLEVBRVk7UUFFTixJQUVKSCxFQUZJLFdBTENILEVBQUV1RCxNQUVBekg7UUFHSCxHQUVKcUUsRUFBZSxPQUFmQTtRQUZJLElBQ0ksSUFKRHJFO2lCQU9QO0lBaE9TLGlCQWtPUDZFO01BQ0wsY0FES0EsT0FDUztNQUNaO2FBRkdBO09BRUg7O1NBRkdBO09BS0UsaUJBREpMLEVBREEyaUI7T0FHSSxpQkFGSjNpQixFQURJbWU7T0FHQSxLQUZKbmU7T0FFSTs7WUFDUnhFO1FBQ0U7c0JBUkk2RSxNQU9ON0UsR0FDRTtVQUNBLE1BRkZBLEtBQ01xbkI7VUFFSixNQUhGcm5CLEtBQ1VvbkI7VUFBUixTQURGcG5COzs7TUFLQSxVQVBJeUgsRUFDQXpCLEVBT0g7SUEvT1ksbUJBaVBMeUIsRUFBRXpCO01BQ1osT0FEVXlCLGFBQ1YsR0FEWXpCO01BQ1osR0FBSXNoQixPQUNBQyxHQUNhO01BQTJCLFNBRnhDRCxHQUdXO01BSGYsSUFLVSxpQkFMTkEsTUFETTdmLEtBQUV6QixPQU1GLEtBTE5zaEIsV0FLTTs7WUFDUnRuQjtRQUNFO1VBQWdCLE1BRGxCQSxRQVBReUgsTUFPUnpILEdBUFVnRyxNQU9WaEc7VUFDa0IsU0FEbEJBOzs7TUFHQSxPQUpJNkUsQ0FLSDtJQTVQWTtrQkErUFJ1UCxJQUFJM007TUFDWCxTQUFJK2YsT0FBT2xoQixFQUFFdEc7UUFDWCxVQURXQSw0QkFDWCxLQUFJeW5CO1FBQUosSUFBSUEsZUFES25oQjtVQUdTLFNBRmRtaEIsWUFHaUIsc0JBTFpoZ0I7VUFLSixjQUxBMk0sSUFLSSxpQkFMQTNNLEVBRUxnZ0I7V0FHMEMsT0FIMUNBO1VBRWM7V0FFaEIsS0FKRUE7V0FJZ0Isc0JBTlhoZ0I7V0FNVyxLQUhoQjVDO1VBR0MsY0FOQXVQLElBTUksaUJBTkEzTTtXQU1vQyxPQUp6Q2dnQjtVQUtGLE9BSkU1aUI7UUFNRixJQVBFNGlCLGVBREtuaEI7VUFReUIsU0FQOUJtaEIsWUFPOEIsc0JBVHpCaGdCO1VBU1Msc0JBVGIyTSxJQVNpQixpQkFUYjNNLEVBRUxnZ0I7V0FRRyxPQVJIQTtRQVNHLEdBVEhBLE1BREtuaEIsRUFVYyxPQVRuQm1oQjtRQVM0QixnQkFWckJ6bkIsRUFVcUM7TUFWbEQsU0FZUTBuQixZQUFZcGhCLEVBQUV0RyxFQUFFa047UWhDaFQzQixJZ0NnVHlCM0c7UUFDcEI7VUFBUSxJQUFKK04sRUFBSSxPQURVaE8sRUFBRUM7VUFFakIsa0JBZkU2TixJQWVFLGlCQWZFM00sRUFjTDZNLFVBRGtCcEg7WUFHWiwwQkFoQkR6RixFQWNMNk07WUFFRixpQkFoQk83TSxFQWFXbEI7WUFHVixJQUhVQSxJQUNoQitOOztVQUlLLGlCQWxCQTdNLEVBYVdsQixnQkFBRTJHO1VBS2IsU0FFTDtNQW5CTixTQXFCSXlhLFFBQVFyaEIsRUFBRXRHLEVBQUVrTjtRQUFJO1VBQUkscUJBQVo1RyxFQUFFdEcsRUFBRWtOOzs7O1lBQTJDLElBQUwzRyxXQUFLLGlCQXRCaERrQixFQXNCMkNsQixnQkFBdEMyRyxFQUEyQztvQkFBUztNQXJCcEUsU0FzQlEwYSxXQUFXdGhCLEVBQUV0RztRaEMxVHhCLElnQzBUd0J1RztRQUNuQjtVQUFRLGVBRFNELEVBQUVDLEtBRVgsc0JBekJDa0IsRUF1QlVtYTtVQUVuQixpQkF6QlNuYSxFQXVCVWxCO1VBQ1gsSUFEV0E7bUJBR0w7TUF6QmhCLFNBMkJJc2hCLE9BQU92aEIsRUFBRXRHO1FBQUk7VUFBSSxvQkFBVnNHLEVBQUV0Rzs7O2dDQUF3QyxJQUFMdUcsV0FBSyxPQUFMQTtvQkFBTTtNQTNCdEQsTUFEV2tCLGFBQ1gsT0FzQ0luQjtNQXRDSjtZQXVDQStkO1FBQW9DO2tCQURoQy9kLEVBQ0orZCxJQUFnRCxpQkF4Q3JDNWMsRUF3Q1g0YztVQUFvQyxTQUFwQ0E7OztNQXZDQSxTQXNDSS9kO01BRUo7OztRQUNFO1VBQVE7Z0NBMUNDbUIsRUF5Q1hsQjtXQUVVLHNCQTNDQ2tCO1VBMkNULGlCQTNDU0EsRUF5Q1hsQjtVQUNVLElBRUUsV0FIWkEsT0Faa0J2RztVQUNoQjtnQkFBSStuQixRQURZL25CO1lBQ2hCLEdBRGdCQSxNQUNaK25CO1lBRUQ7OEJBaENFM1QsSUFnQ0UsaUJBaENFM00sRUE4QkxzZ0Isb0JBRGNEO2FBTVQsaUJBbkNBcmdCLEVBNkJPekgsWUFBRThuQjs7Y0FJUiwwQkFqQ0RyZ0IsRUE4QkxzZ0I7Y0FHRixpQkFqQ090Z0IsRUE2Qk96SDtjQUlkLE9BSEUrbkIsWUFEWS9uQixFQUNaK25CO2NBSXlDLGlCQWxDcEN0Z0IsVUE2QlNxZ0I7WUFDbEIsU0FXRnZoQjs7OztNQXhDQSxhQXNDSUQ7TUFPSjtRQUF1Qix1QkE5Q1ptQixRQThDaUMsc0JBOUNqQ0E7UUE4Q3lCLGlCQTlDekJBO1FBOEM0QyxpQkE5QzVDQSxVQThDUXlGO1FBQUk7OztpQkFBMEM7SUE3U2xELHFCQWlURGtILElBQUkzTTtNQUNsQixTQUFJdWdCLE1BQU1DLFFBQVFDLFFBQVFDLEtBQUtDLFFBQVFDLFFBQVFwSCxJQUFJcUg7UUFDakQ7ZUFEUUwsVUFBUUM7U0FDaEIsTUFENkJFLFVBQVFDO1NBa0JHLHNCQWxCaEJGLEtBQUtDO1NBa0JiLHNCQW5CQTNnQixFQUNSd2dCO1NBRUtVLEdBRkxWO1NBRVF2aUI7U0FBR2tqQixHQUZVUjtTQUVQemlCO1NBQUcyVyxFQUZ3QmdNO1FBRy9DO1VBQUcsa0JBSk9sVSxJQUdJMU8sR0FBTUM7WUFTbEIsaUJBWHlDc2IsSUFFcEIzRSxZQUFIM1c7WUFTbEIsSUFDSWtqQixLQVZXRDtZQVNmLEdBQ0lDLE9BWDBCTDtjQWE1QjttQkFabUJsTTtlQVlMLHNCQWRJNkwsS0FZaEJVO2VBVldELEdBVVhDO2VBVmNsakI7ZUFBRzJXOztZQWNuQixjQWpCVTdVLEVBR0hraEIsR0FGZ0MxSCxJQUVwQjNFLFVBRHJCaU0sUUFDU0k7VUFFVCxpQkFKeUMxSCxJQUVwQjNFLFlBQVQ1VztVQUVaLElBQ0lzakIsS0FIS0w7VUFFVCxHQUNJSyxPQUpKVDtZQU1FO2lCQUxtQmpNO2FBS1gsc0JBUkU3VSxFQU1SdWhCO2FBSEtMLEdBR0xLO2FBSFF0akI7YUFBUzRXOztVQU9uQixjQVRrQjZMLEtBRUxTLEdBRjBCM0gsSUFFcEIzRSxVQURTa00sUUFDZkksUUFnQitDO01BbEJwRSxTQW9CSU8sUUFBUUMsT0FBT25JLElBQUlxSCxPQUFPdmdCO1FBQzVCLFNBRDRCQSxZQUM1Qjs7OztVQUNFOztrQkFGUXFoQixTQUNWcHBCO2FBQ1UsbUJBdkJNeUg7YUF1Qk4sTUFGVzZnQixTQUNyQnRvQjs7aUJBRHFCc29CLFVBR2ZoVTs7Z0JBQ21CLGtCQXpCYkYsSUF5QmlCLGlCQUpaNk0sb0JBRVgvVDtrQkFHRjt3QkFGRW9IO21CQUVlLHNCQUxKMk07bUJBS0ksS0FGZjNNO2tCQUVGLGlCQUxhMk07a0JBS2I7O2NBR0YsU0FMSTNNO2NBS0osaUJBUmUyTSxzQkFFWC9UO2NBTUosU0FQRmxOOzs7O2dCQVFJO01BN0JOLFNBK0JRcXBCLE9BQU9ELE9BQU9uSSxJQUFJcUgsT0FBT3ZnQjtRQUMvQixHQUQrQkEsU0FDVCxlQURUcWhCLE9BQU9uSSxJQUFJcUgsT0FBT3ZnQjtRQUMwQixPQUQxQkEsWUFDMEIsR0FEMUJBLE1BRXpCbkM7UUFFSixPQUpXd2pCLFNBRVB4akIsT0FGY3FiLElBQUlxSCxTQUVsQjFpQixPQUNBQztRQUVKLE9BTFd1akIsT0FoQ0czaEIsRUFnQ0gyaEIsU0FHUHZqQixPQURBRDtRQUdKLGFBTFd3akIsU0FHUHZqQixPQURBRCxHQUZjcWIsSUFBSXFILFNBRWxCMWlCLE9BQ0FDLEdBSGNvYixJQUFJcUgsT0FPckI7TUF0Q0wsSUF3Q0loaUIsRUF6Q2NtQjtNQUNsQixHQXdDSW5CLE9BQ2dCLGlCQTFDRm1CLElBeUNkbkI7TUF4Q0o7T0F5Q3lDLEdBRHJDQTtPQUNxQyxHQURyQ0EsSUFFRVY7T0FFSSxpQkFESkMsR0FDWSxpQkE3Q0E0QjtNQThDaEIsT0FISTdCLEdBRUFvTCxJQURBbkw7TUFHSixTQS9DZ0I0QixFQTRDWjVCLEdBREFEO01BSUosYUFISUMsR0FEQUQsR0FFQW9MLElBREFuTCxHQTVDWTRCLElBaURmO0lBbFdZLGtCQXlXTkE7TUFDVCxTQUFRZ1ksSUFBSXpmO1FBQ1YsR0FEVUEsSUFESHlIO1VBSUcsTUFKSEEsTUFDR3pILEdBR0EsS0FIQUE7VUFJSyxVQURUNkUsaUJoQ2paWCxPZ0M4WVc0YTtRQUtELFFBQU87TUFMZDs0QmhDOVlILE9nQzhZV0EsZUFPSDtJQWpYVSxtQkFtWExoWTtNQUNWLFNBQVFnWSxJQUFJemY7UUFDVixHQURVQSxJQURGeUg7VUFJRSxNQUpGQSxNQUNFekgsR0FHQSxLQUhBQTtVQUlTLGFBSlRBLEVBR0o2RSxrQmhDM1pYLE9nQ3daVzRhO1FBS0QsUUFBTztNQUxkOzRCaEN4WkgsT2dDd1pXQSxlQU9IO0lBM1hVLGtCQXdZTjRFO01BQ1QsV0FBUSxxQkFBbUIvUixJQUFJek4sR0FBSyxVQUFMQSxFQUFKeU4sSUFBZSxPQURqQytSO01BWE8sR0FFZC9kO1FBQ1k7U0FEUkssR0FBSkw7O1NBQ1ksa0JBRFpBO1NBRVUsaUJBREp5QixJQURObkI7U0FFVSxJQURKbUI7O2VBREZwQjs7O2dCQUtNcVksY0FBSjZIO1lBQVUsV0FBVkE7WUFBVSw4QkFBTjdIOztVQURFLE9BRk52WDtNQUhBLFVBWUs7SUExWUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UXBCUmI2aEIsVUFDQUMsU0FDQUM7YUFJQUMsVUFBVzVrQixHQUFZLE9BQVpBLGVBQXVCO2FBQ2xDNmtCLFlBQWE3a0IsR0FBWSxZQUFaQSxXQUF3QjthQUNyQzhrQixPQUFROWtCLEdBQVksT0FBWkEsVUFBa0I7UUFFMUIra0I7YUF5RUFDLFdBQVdobEI7TUFBUSxTQUFSQSxLQUFRLHlCQUFSQTtNQUFRLFlBN0VuQjRrQixVQTZFVzVrQixPQUE4QjthQUt6Q2lsQixPQUFLamxCLEdBQUksNEJBQUpBLEVBckZMSyxTQXFGOEI7YUFDOUI2a0IsT0FBS2xsQixHQUFJLDRCQUFKQSxFQXJGTE0sYUFxRmtDO2FBY2xDNmtCLFNBQU1ubEIsRUFBRUMsR0FBSSxnQ0FBTkQsRUFBRUMsTUFBbUI7YUFFbEJtbEIsTUFBS3BsQixFQUFXQztNQUMzQixNQURnQkQsSUFBV0M7O1FBQ0ssR0FBaEIsbUJBRFdBLFFBQ0ssbUJBRGhCRDtRSjJZVixZSXhZRSxPQUhRQSxTQUFXQztNQUV0QixPQUZzQkEsU0FBWEQsQ0FHYzthQUVuQnFsQixNQUFLcmxCLEVBQVdDO01BQzNCLE1BRGdCRCxJQUFXQzs7UUFDSyxHQUFoQixtQkFEV0EsUUFDSyxtQkFEaEJEO1FKc1lWLFlJbllFLE9BSG1CQyxTQUFYRDtNQUVYLE9BRldBLFNBQVdDLENBR0c7YUFFbkJxbEIsUUFBU3RsQixFQUFXQztNQUNoQixHQURLRCxVQUFXQztRQUUxQixNQUZlRCxJQUFXQzs7VUFFTSxHQUFoQixtQkFGVUEsUUFFTSxtQkFGakJEO1VKaVlkLFlJL1g0RCxVQUZuQ0MsRUFBWEQ7UUFFa0MsVUFGbENBLEVBQVdDO01BQ0YsVUEvRzNCTSxRQWdIc0U7YUFFN0RnbEIsUUFBU3ZsQixFQUFXQztNQUMvQixNQURvQkQsSUFBV0M7O1FBQ0MsR0FBaEIsbUJBRGVBLFFBQ0MsbUJBRFpEO1FKNlhkLFlJMVhFLE9BSHVCQyxPQUFYRCxFQUFXQztNQUUxQixPQUZlRCxPQUFXQyxFQUFYRCxDQUdVO2FBRW5Cd2xCLFFBQVN4bEIsRUFBV0M7TUFDL0IsTUFEb0JELElBQVdDOztRQUNDLEdBQWhCLG1CQURlQSxRQUNDLG1CQURaRDtRSndYZCxZSXJYRSxPQUhZQSxPQUFXQyxFQUFYRDtNQUVmLE9BRjBCQyxPQUFYRCxFQUFXQyxDQUdEO2FBRW5Cd2xCLFlBQWF6bEIsRUFBV0M7TUFDaEMsR0FEcUJELE9BQ1AsVUFEa0JDO01BRTNCLEdBRjJCQSxPQUViLFVBRkVEO01BR25CLE1BSG1CQSxJQUFXQzs7UUFHRSxHQUFoQixtQkFIY0EsUUFHRSxtQkFIYkQ7UUptWGxCLFlJaFgyRCxVQUg5QkMsRUFBWEQ7TUFHOEIsVUFIOUJBLEVBQVdDLEVBR21DO2FBSXBFeWxCLE9BQUsxbEIsR0FBSSwwQkFBSkEsRUFBZ0M7YUFhbkMybEIsWUFBWS9pQixFQUFFSyxJQUFJQyxJQUFJM0Q7TUFDeEIsVUFEZ0IwRCxNQUFJQztNQUNwQixhQURnQkQ7WUFDaEI5SCxFQURnQjhIO1FBQ2dCO2dCQUFoQzlILEtBRHdCb0U7VUFDUSxTQUFoQ3BFOzs7TUFkUyxRQWM0QzthQUtuRHlxQixNQUFNaGpCLEVBQUVLLElBQUlDLElBQUlnSTtNQUNsQixTQURVakk7TUFDVjs7O2lCQURjQzs7Ozs7Z0JBQUpELE1BQUlDO3dCQUFOTixnQkFBRUssTUFBSUM7TUFFWix3QkFGZ0JnSSxTQUVEO2FBRWYyYSxPQUFLbG1CLEVBQUVKO01BQ0ksSUFBVHdNLE9BQVMsdUJBRE5wTTtNQUVQLFlBRElvTSxTQURHcE0sRUFBRUo7TUFFVCxPQURJd00sTUFFRTthQUVKK1osT0FBS3JrQixFQUFFcEM7TUFDVCxRQURPb0M7UUFHSywrQkFITEEsR0FHSyxLQUhMQSxVQUdLOztjQUNWdEc7VUFDRTtvQkFERkEsS0FDbUIsV0FMWmtFLEVBSVBsRTtZQUNFLFNBREZBOzs7UUFHQSxPQUpJdUo7TUFGUSx3Q0FNVDthQUVIcWhCLFNBQU8vTSxHQUFHRDtNQUNaO1VBRFNDO09BQ1QsR0FEWUQ7T0FHQyw4QkFGVGhZLEtBQ0FDO01BRUoscUJBSlNnWSxLQUdMak4sU0FGQWhMO01BSUoscUJBTFlnWSxLQUdSaE4sT0FGQWhMLEdBQ0FDO01BR0osT0FGSStLLE1BR0U7YUFVSmlhLFNBQU92a0I7Ozs7VUFOVDtXQUlRSztXQUFOQztXQUxXL0IsRUFLWCtCO1dBSkYsYUFEYS9CLElBQ1M7O2lCQUlkOEI7O1FBSVIsdUNBQ2FzVyxJQUhKM1csRUFHTXRHO1FBQ2I7YUFEV2lkO2dCQUdIK0IsS0FIRy9CLE9BR1Q0SixLQUhTNUosT0FJTDZOLEtBREpqRTtZQUVBLHFCQUZBQSxPQUpBalcsT0FDVzVRLEVBSVA4cUI7WUFDSixRQUxXOXFCLElBSVA4cUIsU0FKSzdOLElBR0grQixLQUhLaGY7O1VBRUwsR0FGS0EsaUJBRFg0UTt3Q0FVRTthQUVKbWEsTUFBSXRqQixFQUFFSyxJQUFJQztNQUNaLE1BRE1OLEVBQUVLLElBQUlDO01BRUMsSUFBVDZJLE9BQVMsdUJBRkQ3STtNQUdaLHFCQUhNTixFQUFFSyxJQUVKOEksU0FGUTdJO01BR1osT0FESTZJLE1BRUU7YUFFSm9hLE9BQUt2akI7TUFDUCxNQURPQSxhQUVQLDhCQURJbkI7TUFFSixxQkFIT21CLElBRUhtSixTQURBdEs7TUFFSixPQURJc0ssTUFFRTthQUVKcWEsT0FBS3hqQixFQUFFSyxJQUFJQyxJQUFJM0Q7TUFDakIsTUFET3FELEVBQUVLLElBQUlDLDBCQUNiLG1CQURPTixFQUFFSyxJQUFJQyxJQUFJM0QsRUFFTTthQUVyQjhtQixPQUFLQyxJQUFJQyxLQUFLbkssSUFBSW9LLEtBQUt0akI7TUFDekIsTUFET29qQixJQUFJQyxLQUFjcmpCO01BRXpCLE1BRmdCa1osSUFBSW9LLEtBQUt0akI7TUFHekIsNEJBSE9vakIsSUFBSUMsS0FBS25LLElBQUlvSyxLQUFLdGpCLElBR1E7YUFFL0J1akIsVUFBUTdqQjtNQUNZLGNBRFpBLDRCWjVQZixPWTRQZUEsYUFDeUI7YUFFakM4akIsVUFFYWpsQjtNQURvQixrQ0FBZixTQUNMQSxJQUFGdEcsSUFBRWlkO01BQ2I7V0FEYUE7Y0FHTmpNLEVBSE1pTSxPQUdYdU8sRUFIV3ZPO1VBR0QsV0FIRGpkLEtBR1R3ckI7VUFBVSxRQUhEeHJCLGdCQUFFaWQsSUFHTmpNOztRQURDLE9BSE5KLE9BTUk7YUFHTjZhLE9BQUt2bkIsRUFBRXVEO01BQ1QsU0FEU0EscUJBQ1Q7OztRQUE2QjtxQkFEdEJ2RCxFQUFFdUQsTUFDVHpIO1VBQTZCLFNBQTdCQTs7O2NBQW9EO2FBR2xEMHJCLFFBQU14bkIsRUFBRXVELEVBQUV6QjtNQUNaLEdBRFV5QixpQkFBRXpCO09BRVY7TUFFQSxTQUpReUIscUJBSVI7OztRQUE2QjtxQkFKdkJ2RCxFQUFFdUQsTUFJUnpILEdBSlVnRyxNQUlWaEc7VUFBNkIsU0FBN0JBOzs7Y0FBcUU7YUFFckUyckIsTUFBSXpuQixFQUFFdUQ7TUFDUixNQURRQSxhQUVSLHlCQURJbkIsR0FDSixLQURJQSxVQUNKOztZQUNBdEc7UUFDRTtnQkFERkEsS0FDaUIsV0FKWGtFLEVBQUV1RCxNQUdSekg7VUFDRSxTQURGQTs7O01BR0EsT0FKSXFFLENBSUg7YUFFQ3VuQixPQUFLMW5CLEVBQUV1RCxFQUFFekI7TUFDWCxPQURTeUIsYUFDVCxHQURXekI7TUFDWCxHQUFJd2dCLE9BQ0FDLEdBRUY7TUFIRixJQUtVLHlCQUxORCxJQUtNLEtBTE5BLFdBS007O1lBQ1J4bUI7UUFDRTtnQkFERkEsS0FDaUIsV0FSWmtFLEVBQUV1RCxNQU9QekgsR0FQU2dHLE1BT1RoRztVQUNFLFNBREZBOzs7TUFHQSxPQUpJcUUsQ0FLSDthQUdEd25CLFFBQU0zbkIsRUFBRXVEO01BQ1YsU0FEVUEscUJBQ1Y7OztRQUE2QjtxQkFEckJ2RCxFQUNSbEUsRUFEVXlILE1BQ1Z6SDtVQUE2QixTQUE3QkE7OztjQUFzRDthQUVwRDhyQixPQUFLNW5CLEVBQUV1RDtNQUNULE1BRFNBLGFBRVQseUJBREluQixHQUNKLEtBRElBLFVBQ0o7O1lBQ0F0RztRQUNFO2dCQURGQSxLQUNpQixXQUpWa0UsRUFHUGxFLEVBSFN5SCxNQUdUekg7VUFDRSxTQURGQTs7O01BR0EsT0FKSXFFLENBSUg7YUFHQzBuQixZQUFVN25CLEVBQUVXLEVBQUU0QztNQUNoQixTQURjNUMsR0FDZCxLQURnQjRDLHFCQUNoQjs7WUFDQXpIO1FBQ0U7VUFBSyxrQkFIS2tFLEVBQ1JHLEtBRFlvRCxNQUVoQnpIO1VBQ08sU0FEUEE7OztNQUdBLE9BSklxRSxJQUlGO2FBR0EybkIsYUFBVzluQixFQUFFdUQsRUFBRTVDO01BQ2pCLFNBRGlCQSxHQUNqQixLQURlNEM7TUFDZjtZQUNBekg7UUFDRTtVQUFLLGtCQUhNa0UsRUFBRXVELE1BRWZ6SCxHQURJcUU7VUFFRyxTQURQckU7OztNQUdBLE9BSklxRSxJQUlGO2FBR0E0bkIsU0FBTzNZLEVBQUU3TDtNQUNYLE1BRFdBLGFBRUV6SDtNQUNYO1dBRFdBLE1BRFR3RSxFQUVZO1FBQ04sY0FKRDhPLEVBQUU3TCxNQUVFekgsSUFFcUI7UUFDM0IsUUFITUE7aUJBSVA7YUFHSmtzQixVQUFRNVksRUFBRTdMO01BQ1osTUFEWUEsYUFFQ3pIO01BQ1g7V0FEV0EsTUFEVHdFLEVBRVk7UUFDTixjQUpBOE8sRUFBRTdMLE1BRUN6SCxLQUVxQixRQUZyQkE7UUFHTixTQUNEO2FBR0ptc0IsTUFBSXRuQixFQUFFNEM7TUFDUixNQURRQSxhQUVLekg7TUFDWDtXQURXQSxNQURUd0UsRUFFWTtRQUNFLDRCQUpWaUQsTUFFS3pILEdBRlA2RSxHQUl3QztRQUN2QyxRQUhNN0U7aUJBS1A7YUFHSm9zQixTQUFTdm5CLEVBQUU0QztNQUNiLE1BRGFBLGFBRUF6SDtNQUNYO1dBRFdBLE1BRFR3RSxFQUVZO1FBQ0YsR0FKSEssS0FBRTRDLE1BRUF6SCxHQUV1QjtRQUM3QixRQUhNQTtpQkFLUDs7YUFJSnFzQixPQUFLalksSUFBSTNNO01BQ1gsU0FBSStmLE9BQU9saEIsRUFBRXRHO1FBQ1gsVUFEV0EsNEJBQ1gsS0FBSXluQjtRQUFKLElBQUlBLGVBREtuaEI7VUFJSjs7Y0FMQThOLElBS0ksZUFMQTNNLEVBRUxnZ0IsS0FHaUIsZUFMWmhnQixFQUVMZ2dCOzs7V0FHMEMsT0FIMUNBO1VBSUM7O2NBTkFyVCxJQU1JLGVBTkEzTSxFQUdMNUMsTUFHZ0IsZUFOWDRDLEVBRUxnZ0I7OztXQUl5QyxPQUp6Q0E7VUFLRixPQUpFNWlCO1FBTWM7V0FQZDRpQjs7VUFES25oQjs7Ozs7V0FRUyxXQVRiOE4sSUFTaUIsZUFUYjNNLEVBRUxnZ0IsS0FPOEIsZUFUekJoZ0IsRUFFTGdnQjtTQVFHLE9BUkhBO1FBU0csR0FUSEEsTUFES25oQixFQVVjLE9BVG5CbWhCO1FBUzRCLGtCQVZyQnpuQixFQVVxQztNQVZsRCxTQVlRMG5CLFlBQVlwaEIsRUFBRXRHLEVBQUVrTjtRWnpYN0IsSVl5WDJCM0c7UUFDcEI7VUFBUSxJQUFKK04sRUFBSSxPQURVaE8sRUFBRUM7VUFFakIsa0JBZkU2TixJQWVFLGVBZkUzTSxFQWNMNk0sR0FEa0JwSDtZQUdwQixlQWhCT3pGLEVBYVdsQixJQUdWLGVBaEJEa0IsRUFjTDZNLFFBRGdCL04sSUFDaEIrTjtVQUlLLHNCQWxCQTdNLEVBYVdsQixJQUFFMkcsR0FPbEI7TUFuQk4sU0FxQkl5YSxRQUFRcmhCLEVBQUV0RyxFQUFFa047UUFBSTtVQUFJLHFCQUFaNUcsRUFBRXRHLEVBQUVrTjs7OztZQUEyQyxJQUFMM0csV0FBSyxzQkF0QmhEa0IsRUFzQjJDbEIsSUFBdEMyRztvQkFBb0Q7TUFyQnBFLFNBc0JRMGEsV0FBV3RoQixFQUFFdEc7UVpuWTFCLElZbVkwQnVHO1FBQ25CO1VBQVEsSUFEV3FiLElBQ1gsT0FEU3RiLEVBQUVDO1VBRW5CLGVBekJTa0IsRUF1QlVsQixJQUVYLGVBekJDa0IsRUF1QlVtYTtVQUNYLElBRFdyYjttQkFHTDtNQXpCaEIsU0EyQklzaEIsT0FBT3ZoQixFQUFFdEc7UUFBSTtVQUFJLG9CQUFWc0csRUFBRXRHOzs7a0NBQXdDLElBQUx1RyxXQUFLLE9BQUxBO29CQUFNO01BM0J0RCxNQURXa0IsYUFDWCxPQXNDSW5CO01BdENKO1lBdUNBK2Q7UUFBb0M7a0JBRGhDL2QsRUFDSitkLElBQWdELGVBeENyQzVjLEVBd0NYNGM7VUFBb0MsU0FBcENBOzs7TUF2Q0EsU0FzQ0kvZDtNQUVKOzs7UUFDRTtVQUFRLElBYlV3aEIsSUFhVixlQTFDQ3JnQixFQXlDWGxCO1VBRUUsZUEzQ1NrQixFQXlDWGxCLElBRVUsZUEzQ0NrQjtVQTBDRCxJQUVFLFdBSFpsQixPQVprQnZHO1VBQ2hCO2dCQUFJK25CLFFBRFkvbkI7WUFDaEIsR0FEZ0JBLE1BQ1orbkI7WUFFRCxtQkFoQ0UzVCxJQWdDRSxlQWhDRTNNLEVBOEJMc2dCLFFBRGNEO2FBTVQsZUFuQ0FyZ0IsRUE2Qk96SCxFQUFFOG5COztjQUloQixlQWpDT3JnQixFQTZCT3pILEVBSU4sZUFqQ0R5SCxFQThCTHNnQjtjQUdGLE9BSEVBLFlBRFkvbkIsRUFDWituQjtjQUl5QyxlQWxDcEN0Z0IsSUE2QlNxZ0I7WUFDbEIsU0FXRnZoQjs7OztNQXhDQSxhQXNDSUQ7TUFPSjtRQUF1QixJQUFKNEcsRUFBSSxlQTlDWnpGO1FBOEN5QixlQTlDekJBLElBOENpQyxlQTlDakNBO1FBOENZLFNBQWdDLGVBOUM1Q0EsSUE4Q1F5Rjs7O01BdERqQixXQXNEK0Q7YUFJL0RvZixZQUFZbFksSUFBSTNNO01BQ2xCLFNBQUl1Z0IsTUFBTUMsUUFBUUMsUUFBUUMsS0FBS0MsUUFBUUMsUUFBUXBILElBQUlxSDtRQUNqRDtlQURRTCxVQUFRQztTQUNoQixNQUQ2QkUsVUFBUUM7U0FrQkcsb0JBbEJoQkYsS0FBS0M7U0FrQmIsb0JBbkJBM2dCLEVBQ1J3Z0I7U0FFS1UsR0FGTFY7U0FFUXZpQjtTQUFHa2pCLEdBRlVSO1NBRVB6aUI7U0FBRzJXLEVBRndCZ007UUFHL0M7VUFBRyxrQkFKT2xVLElBR0kxTyxHQUFNQztZQVNsQixlQVh5Q3NiLElBRXBCM0UsRUFBSDNXO1lBU2xCLElBQ0lrakIsS0FWV0Q7WUFTZixHQUNJQyxPQVgwQkw7Y0FhNUI7bUJBWm1CbE07ZUFZTCxvQkFkSTZMLEtBWWhCVTtlQVZXRCxHQVVYQztlQVZjbGpCO2VBQUcyVzs7WUFjbkIsY0FqQlU3VSxFQUdIa2hCLEdBRmdDMUgsSUFFcEIzRSxVQURyQmlNLFFBQ1NJO1VBRVQsZUFKeUMxSCxJQUVwQjNFLEVBQVQ1VztVQUVaLElBQ0lzakIsS0FIS0w7VUFFVCxHQUNJSyxPQUpKVDtZQU1FO2lCQUxtQmpNO2FBS1gsb0JBUkU3VSxFQU1SdWhCO2FBSEtMLEdBR0xLO2FBSFF0akI7YUFBUzRXOztVQU9uQixjQVRrQjZMLEtBRUxTLEdBRjBCM0gsSUFFcEIzRSxVQURTa00sUUFDZkksUUFnQitDO01BbEJwRSxTQW9CSU8sUUFBUUMsT0FBT25JLElBQUlxSCxPQUFPdmdCO1FBQzVCLFNBRDRCQSxZQUM1Qjs7OztVQUNFO1lBQVE7OEJBdkJNTixFQXFCTjJoQixTQUNWcHBCO2FBQ1UsTUFGV3NvQixTQUNyQnRvQjs7Y0FHeUI7Z0JBSkpzb0I7O2dCQUdmaFU7Ozs7Z0JBQ21CLFdBekJiRixJQXlCaUIsZUFKWjZNLElBR1gzTSxNQURBcEg7Z0JBR0YsZUFMYStULElBR1gzTSxhQUVlLGVBTEoyTSxJQUdYM007Z0JBRUY7O2NBR0YsZUFSZTJNLElBR1gzTSxhQURBcEg7Y0FNSixTQVBGbE47Ozs7Z0JBUUk7TUE3Qk4sU0ErQlFxcEIsT0FBT0QsT0FBT25JLElBQUlxSCxPQUFPdmdCO1FBQy9CLEdBRCtCQSxTQUNULGVBRFRxaEIsT0FBT25JLElBQUlxSCxPQUFPdmdCO1FBQzBCLE9BRDFCQSxZQUMwQixHQUQxQkEsTUFFekJuQztRQUVKLE9BSld3akIsU0FFUHhqQixPQUZjcWIsSUFBSXFILFNBRWxCMWlCLE9BQ0FDO1FBRUosT0FMV3VqQixPQWhDRzNoQixFQWdDSDJoQixTQUdQdmpCLE9BREFEO1FBR0osYUFMV3dqQixTQUdQdmpCLE9BREFELEdBRmNxYixJQUFJcUgsU0FFbEIxaUIsT0FDQUMsR0FIY29iLElBQUlxSCxPQU9yQjtNQXRDTCxJQXdDSWhpQixFQXpDY21CO01BQ2xCLEdBd0NJbkIsT0FDZ0IsaUJBMUNGbUIsSUF5Q2RuQjtNQXhDSixJQXlDeUMsR0FEckNBLFVBQ3FDLEdBRHJDQSxJQUVFVixPQUVKLHlCQURJQztNQUVKLE9BSElELEdBRUFvTCxJQURBbkw7TUFHSixTQS9DZ0I0QixFQTRDWjVCLEdBREFEO01BSUosYUFISUMsR0FEQUQsR0FFQW9MLElBREFuTCxHQTVDWTRCLElBaURmO2FBS0Q4a0IsU0FBTzlrQjtNQUNULFNBQVFnWSxJQUFJemY7UUFDVixHQURVQSxJQURIeUg7VUFJRyxNQUpIQSxNQUNHekgsR0FHQSxLQUhBQTtVQUlLLFVBRFQ2RSxpQlp4ZGIsT1lxZGE0YTtRQUtELFFBQU87TUFMZDs0QlpyZEwsT1lxZGFBLGVBT0g7YUFHSCtNLFVBQVEva0I7TUFDVixTQUFRZ1ksSUFBSXpmO1FBQ1YsR0FEVUEsSUFERnlIO1VBSUUsTUFKRkEsTUFDRXpILEdBR0EsS0FIQUE7VUFJUyxhQUpUQSxFQUdKNkUsa0JabmViLE9ZZ2VhNGE7UUFLRCxRQUFPO01BTGQ7NEJaaGVMLE9ZZ2VhQSxlQU9IO2FBYUhnTixTQUFPcEk7TUFDVDs7T0FBUSwyQkFBbUIvUixJQUFJek4sR0FBSyxVQUFMQSxFQUFKeU4sSUFBZSxPQURqQytSO09BVEMsYUFESXZIO09BRWQseUJBREkvVTtPQUNKLElBRElBOzthQURVK1U7OztjQUtOblcsWUFBSkM7VUFBVSxXQUFWQTtVQUFVLDhCQUFORDs7UUFERSxPQUZOYyxFQVVTO2FBR1hpbEIsYUFBYXhvQixFQUFFdUQ7TUFDakIsSUFBSW5CLEVBRGFtQjtNQUNqQixTQUFJbkIsRUFDVTtNQURkLElBRVUsaUJBRk5BLEVBRW1CLFdBSFJwQyxFQUFFdUQsT0FHUCxLQUZObkIsVUFFTTs7WUFDUnRHO1FBQ0U7Z0JBREZBLEtBQ3VCLFdBTFZrRSxFQUFFdUQsTUFJZnpIO1VBQ0UsU0FERkE7OztNQUdBLE9BSklxRSxDQUtIO2FBRURzb0IsZUFBZXpvQixFQUFFdUQ7TUFDbkIsTUFEbUJBLGFBRW5CLHlCQURJbkIsR0FDSixLQURJQSxVQUNKOztZQUNBdEc7UUFDRTtnQkFERkEsS0FDaUIsV0FKQWtFLEVBQUV1RCxNQUduQnpIO1VBQ0UsU0FERkE7OztNQUdBLE9BSklxRSxDQUlIOzs7Ozs7O3NCWnpnQk47OztPWTJMT3FtQjs7T0FLQUM7T0FTQUM7T0FnQkFDO09BY0FFO09BTUFDO09BTUFDO09BSUFDO09BS0FJO09BR0FDO09BVUFFO09BZ0NBSTtPQXRCQUY7T0F5QkFHO09BU0FDO09BUUFDO09BaERBTjtPQWNBRTtPQW1EQU07T0FUQUQ7T0FrQkFFO09BVUFDO09BV0FDO09Ba0RBQzs7T0FzREFDO09BV0FDO09BcUJBQztPQUtBQztPQVVBQzs7Ozs7O09BdmVGckQ7T0FDQUM7T0FDQUM7T0FzRkFNO09BQ0FDO09BdEZBN2tCO09BQ0FDO09BQ0FDO09BS0F3a0I7T0FDQXZrQjtPQUNBQztPQUNBQztPQVBBa2tCO09BQ0FDO09BQ0FDO09BMkVBRTtPQWxFQXBqQjtPQUNBRDs7T0FxRkF3akI7T0FFU0M7T0FLQUM7T0FLQUM7T0FJQUM7T0FLQUM7T0FLQUM7T0FPVEM7O3VCWnBLTDs7O1FZMkxPRzs7UUFLQUM7UUFTQUM7UUFnQkFDO1FBY0FFO1FBTUFDO1FBTUFDO1FBSUFDO1FBS0FJO1FBR0FDO1FBVUFFO1FBZ0NBSTtRQXRCQUY7UUF5QkFHO1FBU0FDO1FBUUFDO1FBaERBTjtRQWNBRTtRQW1EQU07UUFUQUQ7UUFrQkFFO1FBVUFDO1FBV0FDO1FBa0RBQzs7UUFzREFDO1FBV0FDO1FBcUJBQztRQUtBQztRQVVBQzs7O1FxQnRkRkMsU0FDQUMsUUFDQUM7YUFDQUMsT0FBS3ZvQixHQUFJLE9BQUpBLFNBQVk7YUFDakJ3b0IsT0FBS3hvQixHQUFJLE9BQUpBLFNBQVk7YUFDakJ5b0IsTUFBSXpvQixHQUFPLHlCQUFQQSxjQUFnQztRQUNwQzBvQixzQkFDQUM7YUFDQUMsU0FBTzVvQixHQUFJLE9BQUpBLE1BQWtCO0lBS1QsU0FIaEI2b0IsZ0JBSU03b0I7TUFDd0I7O2FBQXZCLG1CQUREQTs7O2FBQ3dCLGlCQUR4QkE7T0FFQSxVQUZBQTtNQUlBLFFBQUk7YUFTVjhvQixZQUFVOW9CLEdBQUksNkJBQUpBLEVBQWlCO2FBSTNCK29CLGdCQUFjN29CO01BRWhCO1FBQVMsK0JBRk9BOzs7K0JBR0U7UUFQRixXQU9NO2FBSXBCOG9CLFdBQVMzb0IsRUFBT0MsR0FBUSx3QkFBZkQsRUFBT0MsRUFBMEI7YUFDMUMyb0IsU0FBTzVvQixFQUFPQyxHQUFRLDhCQUFmRCxFQUFPQyxNQUF1QjthQUVyQzRvQixpQkFBaUJscEIsRUFBRW1wQjtNQUNiLHdCQURXbnBCLG1CQUFFbXBCLG1CQUNrQjthQUVyQ0MsTUFBSS9vQixFQUFFQyxHQUFXLHNCQUFiRCxFQUFFQyxHQUFGRCxFQUFFQyxDQUErQjthQUNyQytvQixNQUFJaHBCLEVBQUVDLEdBQVcseUJBQWJELEVBQUVDLEdBQUZELEVBQUVDLENBQStCO2FBS3JDZ3BCLGFBQWF0cEIsRUFBRThYO01BQ2QsaUJBRGNBLEtBRVosNkJBRlU5WCxFQUFFOFgsR0FqRGZ1USxNQURBRDtNQXNEb0QsTUFBSCxTQUpwQ3BvQixZQUFFOFgsUUFLUCxFQUxLOVgsSUFLQyxTQURWdXBCLEVBSld6UjtNQU1aLDZCQURDalksRUFMV2lZLEdBSVh5UixXQUUyQzthQUUvQ0MsYUFBYXhwQixFQUFFOFgsR0FDakIsT0FEZTlYLElBQ2MsU0FBbEIsYUFESUEsRUFBRThYLFNBQ2U7Ozs7T0EzRDlCc1E7T0FDQUM7T0FDQUM7T0FnREFnQjtPQVFBRTtPQXZEQWpCO09BQ0FDO09BQ0FDO09BRUFFO09BREFEO09BRUFFO09BRUFDO09BcUJBRTtPQUpBRDtPQVdBRTtPQUdBRTtPQUZBRDtPQUtBRztPQUNBQzs7YS9CNUNBSSxPQUFLenBCLEdBQUksc0JBQUpBLE1BQVk7YUFDakIwcEIsT0FBSzFwQixHQUFJLHNCQUFKQSxNQUFZO2FBQ2pCMnBCLE1BQUkzcEI7TUFBTyx5QkFBUEEsU0FBMkIsdUJBQTNCQSxFQUFnQzthQUdwQzRwQixTQUFPNXBCLEdBQUksOEJBQUpBLE1BQWtCO0lBR2IsSUFBVjZwQixVQUFVO2FBRFpDLGtCQUVFOXBCO01BQ3dCOzthQUF2QixtQkFiSGpHLE9BWUVpRzs7O2FBQ3dCLG1CQUR4QkEsRUFEQTZwQjtPQUdBLHNDQUZBN3BCO01BSUEsUUFBSTtJQUxNLFNBUVorcEIsWUFBVS9wQixHQUFJLGlDQUFKQSxFQUFpQjtJQVJmLFNBWVpncUIsZ0JBQWM5cEI7TUFFaEI7UUFBUyxpQ0FGT0E7OzsrQkFHRTtRQVBGLFdBT007SUFmUixTQTRCWitwQixXQUFTNXBCLEVBQU9DLEdBQVEsMEJBQWZELEVBQU9DLEVBQTBCO0lBNUI5QixTQTZCWjRwQixTQUFPN3BCLEVBQU9DLEdBQVEsZ0NBQWZELEVBQU9DLE1BQXVCO0lBN0J6QixTQStCWjZwQixtQkFBaUJucUIsRUFBRW1wQjtNQUNiOzhCQURXbnBCLEVBcENqQjlGLFdBcUNzQixlQURIaXZCLEVBcENuQmp2QixXQXFDcUM7SUFoQ3pCLFNBa0Naa3dCLE1BQUkvcEIsRUFBRUMsR0FBVyxzQkFBYkQsRUFBRUMsR0FBRkQsRUFBRUMsQ0FBK0I7SUFsQ3pCLFNBbUNaK3BCLE1BQUlocUIsRUFBRUMsR0FBVyx5QkFBYkQsRUFBRUMsR0FBRkQsRUFBRUMsQ0FBK0I7SUFuQ3pCLFNBd0NaZ3FCLGVBQWF0cUIsRUFBRThYO01BQ2QsaUJBRGNBLEVBbkRmL2Q7T0FxREcsK0JBRlVpRyxFQUFFOFgsR0FsRGY5ZCxNQURBRDtNQXVEb0Q7OztVQUFILHVCQUF6QiwrQkFKWGlHLEtBQUU4WDtPQUtQLGlCQUxLOVgsRUFLQyxlQURWdXBCLEVBSld6UjtNQU1aLCtCQURDalksRUFMV2lZLEdBTW1CLE9BRjlCeVIsSUFFMkM7SUE5Q25DLFNBZ0RaZ0IsZUFBYXZxQixFQUFFOFg7TUFDakIsc0JBRGU5WCxFQUNjLGVBQWxCLGVBRElBLEVBQUU4WCxNQUNlO0lBakRsQjs7O09BWFovZDtPQUNBQztPQUNBQztPQWlEQXF3QjtPQVFBQztPQXhEQWQ7T0FDQUM7T0FDQUM7T0FFQXh2QjtPQURBRDtPQUVBMHZCO09BRUFFO09BYUFFO09BSkFEO09Bb0JBRTtPQUdBRTtPQUZBRDtPQUtBRTtPQUNBQztJQW5DWTtRZ0JiWkcsU0FDQUMsUUFDQUM7YUFDQUMsT0FBSzNxQixHQUFJLE9BQUpBLFNBQVk7YUFDakI0cUIsT0FBSzVxQixHQUFJLE9BQUpBLFNBQVk7YUFDakI2cUIsTUFBSTdxQixHQUFPLHlCQUFQQSxjQUFnQztJQUUxQiwwQkFDQTthQUNWZ3JCLFNBQU9ockIsR0FBSSxPQUFKQSxNQUFrQjtJQUdiLFNBRFppckIsa0JBRUVqckI7TUFDd0I7O2FBQXZCLG1CQUREQTs7O2FBQ3dCLGlCQUR4QkE7T0FFQSxVQUZBQTtNQUlBLFFBQUk7SUFMTSxTQVFaa3JCLFlBQVVsckIsR0FBSSwrQkFBSkEsRUFBaUI7SUFSZixTQVlabXJCLGdCQUFjanJCO01BRWhCO1FBQVMsK0JBRk9BOzs7K0JBR0U7UUFQRixXQU9NO0lBZlIsU0FtQlprckIsV0FBUy9xQixFQUFPQyxHQUFRLHdCQUFmRCxFQUFPQyxFQUEwQjtJQW5COUIsU0FvQlorcUIsU0FBT2hyQixFQUFPQyxHQUFRLDhCQUFmRCxFQUFPQyxNQUF1QjtJQXBCekIsU0FzQlpnckIsbUJBQWlCdHJCLEVBQUVtcEI7TUFDYix3QkFEV25wQixtQkFBRW1wQixtQkFDa0I7SUF2QnpCLFNBeUJab0MsTUFBSWxyQixFQUFFQyxHQUFXLHNCQUFiRCxFQUFFQyxHQUFGRCxFQUFFQyxDQUErQjtJQXpCekIsU0EwQlprckIsTUFBSW5yQixFQUFFQyxHQUFXLHlCQUFiRCxFQUFFQyxHQUFGRCxFQUFFQyxDQUErQjtJQTFCekIsU0ErQlptckIsZUFBYXpyQixFQUFFOFg7TUFDZCxpQkFEY0EsS0FFWiwrQkFGVTlYLEVBQUU4WCxHQTFDZjJTLE1BREFEO01BK0NvRCxNQUFILFNBSnBDeHFCLFlBQUU4WCxRQUtQLEVBTEs5WCxJQUtDLFNBRFZ1cEIsRUFKV3pSO01BTVosK0JBRENqWSxFQUxXaVksR0FJWHlSLFdBRTJDO0lBckNuQyxTQXVDWm1DLGVBQWExckIsRUFBRThYO01BQ2pCLE9BRGU5WCxJQUNjLFNBQWxCLGVBRElBLEVBQUU4WCxTQUNlO0lBeENsQjs7O09BWlowUztPQUNBQztPQUNBQztPQXlDQWU7T0FRQUM7T0FoREFmO09BQ0FDO09BQ0FDO09BQ0F4aEI7T0FFQTBoQjtPQURBRDtPQUVBRTtPQUVBQztPQWFBRTtPQUpBRDtPQVdBRTtPQUdBRTtPQUZBRDtPQUtBRTtPQUNBQztJQTFCWTthZldaRyxPQUFPQyxJQUFJQyxNQUFNbG5CO01BQ047c0NBREppbkIsSUFBSUMsTUFBTWxuQjtPQUNOLFVBQVR5SDtPQUFTLFVBRE16SCxZQXZDakJ2SztNQXlDaUQ7a0JBRmhDdUs7UUFFZ0MsU0FGaENBO1FBRWdDLHFDQUZoQ0E7TUFPbkIsT0FOSXlILE1BTUU7YUFHSjBmLFdBQVdGLElBQUlDLE1BQU1sbkI7TUFDVjswQ0FEQWluQixJQUFJQyxNQUFNbG5CO09BQ1YsVUFBVHlIO09BQVMsVUFEVXpILFlBakRyQnZLO01BbURpRDtrQkFGNUJ1SztRQUU0QixTQUY1QkE7UUFFNEIscUNBRjVCQTtNQU92QixPQU5JeUgsTUFNRTthQWtFSjJmLGNBQWdCQyxJQUF1QnRzQjtNQUN6QyxHQURrQnNzQixJQUFpQixRQUFqQkEsc0JBQWlCQyxhQUFqQkM7TUFDbEI7WUFEa0JBLGVBUGhCN3hCLFNBbkhBRDtPQXFJcUMsS0FYckI4eEIsZUFQaEI3eEIsU0FuSEFEO09BMkgyQjtPQVFqQjs7Ozs7Ozs7T0FQRztNQURDO3VCQWpFaUJneUI7Z0JBRS9COzs2QkE4RHVDMXNCLEVBaEVuQnlzQixXQUN0QixxQkFEc0JBO2lCQUVwQixNQURFRSxXQUQ2QkQ7Z0JBYWpDLHdCQWJpQ0EsMEJBRzdCcHNCO2tCQVUrRDtzQkFibENvc0IsNkJBRzdCcHNCOztvQkFVK0QscUJBYmxDb3NCO21CQWlCMUI7cUJBakIwQkE7O29CQTRCM0I7cUJBREVFO3NCQUNGOzRCQUxLLHFCQXZCc0JGO29CQTRCM0IsR0FERUUsV0EzQnlCRiw2QkFHN0Jwc0I7cUJBMkJLO29CQUZILElBR0V1c0IsT0FBUyxrQkFKVEQ7b0JBTUosS0FqQzZCRixvQkErQnpCRyxTQS9CeUJIO29CQWlDN0IsWUFGSUc7a0JBU04sSUFBSXJzQixFQXhDMkJrc0I7a0JBd0MvQixZQXhDK0JBLFlBd0MzQmxzQjtrQkFBSixZQXhDK0Jrc0IsWUF3QzNCbHNCO2tCQUFKOzhCQXhDK0Jrc0IsWUF3QzNCbHNCO2tCQUFKLFlBeEMrQmtzQixZQXdDM0Jsc0I7a0JBQUosTUF4QytCa3NCLFdBd0MvQixLQU1JNWYscUJBTko7O3dCQU9BaFI7b0JBQ0U7c0JBQVEsSUFBSm9FLEVBQUksaUJBRk40TSxFQUNKaFI7c0JBQ1UsUUFBSm9FLEVBRUYsaUJBSkE0TSxFQUNKaFIsWUFDTW9FLElBUkZNO3NCQVFNLFNBRFYxRTs7O2dCQU9GLEtBdERzQjJ3QixhQUFXQyxvQkFHN0Jwc0I7Z0JBbURKLFlBdERpQ29zQixZQUc3QnBzQjtnQkFtREo7Ozs7Ozs7Ozs7O21CQXVCQzthQUVDd3NCLGFBQWNOLGVBQWVqb0I7TUFDL0I7ZUFEZ0Jpb0Isd0JBQ21Cdm5CLElBQUkzRSxHQUFLLGFBRGJpRSxHQUNJVSxNQUFJM0UsRUFBcUIsRUFBQzthQUUzRHlzQixjQUFjVCxJQUF1QjlyQjtNQUN2QyxHQURnQjhyQixJQUFpQixRQUFqQkEsc0JBQWlCQyxhQUFqQkM7TUFDaEI7WUFEZ0JBLGVBekJkN3hCLFNBbkhBRDtPQXdKcUMsS0FadkI4eEIsZUF6QmQ3eEIsU0FuSEFEO09Bc0pVOzs7Ozs7O2tDQVYyQjhGO09BRXhCLGNBRndCQTtNQUV4Qjt1QkFETWtzQixRQUFVLHNCQUE4Qjs7Ozs7Ozs7Ozs7bUJBYTVEO2FBRUNNLGFBQWFOLE9BQU9PO01BQ3RCLGdCQURlUCxjQUFPTztNQUN0QixZQURzQkE7TUFDdEIsUUFDdUM7YUFFckNDLGFBQWFSLE9BQU9TO01BQ3RCLFNBRGVUO01BQ2YsZ0JBRHNCUztNQUN0QixRQUErRDthQUU3RFgsZUFBZUUsUUFBUyxPQUFUQSxlQW5LZmh5QixhQW1Lc0Q7YUFFdEQweUIsT0FBT1Y7TUFDVCxJQUFJN29CLElBREs2b0I7TUFDVCxrQkFEU0Esb0JBQ0w3b0IsSUFDdUQ7YUFFekR3cEIsV0FBV1gsT0FBT2pJLEdBQUdDO01BQ3ZCLElBQUk3Z0IsSUFEbUI2Z0IsS0FBSEQsT0FDcEIsa0JBRGFpSSxVQUFPakksR0FDaEI1Z0IsSUFDcUM7YUFFdkN5cEIsZUFBZVosT0FBT2pJLEdBQUdDO01BQzNCLFFBRHdCRCxJQUNSLElBQ1Y1Z0IsSUFGcUI2Z0IsS0FBSEQsT0FHakIscUJBSFVpSSxVQUFPakksR0FFbEI1Z0I7TUFFRyxRQUVOO2FBRUQwcEIsZ0JBQWdCYixPQUFPNXdCLEdBQUksc0JBQVg0d0IsVUFBTzV3QixFQUFpQzthQUV4RDB4QixvQkFBb0JkLE9BQU81d0I7TUFDN0IsWUFENkJBLEtBRXRCLGVBRmU0d0IsVUFBTzV3QixLQUl2QjthQUdKMnhCLFlBQVlmLE9BQU81d0I7TUFDckIsc0JBRGM0d0Isc0JBQU81d0IsTUFDaUM7YUFFcEQ0eEIsYUFBYWhCLFFBQVMsT0FBVEEsYUFBb0M7YUFDakRpQixXQUFXakIsUUFBUyxPQUFUQSxhQUFtQzthQUU5Q2tCLGVBQWVsQixRQUFTLE9BQVRBLFVBQTJCO2FBQzFDbUIsYUFBYW5CLFFBQVMsT0FBVEEsVUFBMEI7YUFFdkNvQixTQUFTcEI7TUFDWDtXQURXQTtPQUNYLEtBQUlxQixRQXhNRnJ6QjtPQXdNRixXQURXZ3lCLGdCQUNQcUI7TUFIb0IsV0FTbkI7YUFNSEMsWUFBWXpMO01BQ2Q7O1VBRUl3TCxJQUhVeEw7TUFDZCxHQUVJd0wsUUF2TkZyekI7T0F5TkEsWUFGRXF6QixPQXBHRnB6QjtNQXVHRjtjQUF1Qjs7OztPQTFOckJEO09BeUlBb3lCO09BR0FDO09BbEJBVjtPQWtDQVc7T0FJQUU7T0FHQVY7T0FFQVk7T0F5QkFLO09BR0FDO09BQ0FDO09BRUFDO09BQ0FDO09BRUFDO09BYUFFO09BM0NBWDtPQUlBQztPQVFBQztPQUVBQztPQWhKQXZCO09BVUFHOztJK0JnQlU7Ozs7OztPQUNBO09BQ1MsbUIvQm5FbkIxeEI7TytCb0VpQixtQi9CcEVqQkE7Ozs7Ozs7Ozs7Ozs7SStCaUVVLFNBaUJWd3pCO01BQ0Y7ZUFuQkVEO09BbUJGLFFBQUlFO09BRVEscUJBRFJDO09BRVEscUJBRlJBO09BR1kseUJBSFpBLFEvQnBGRjF6QjtPK0J3RlksdUJBSlYwekIsUS9CcEZGMXpCO00rQnlGQSxPQXpCQXV6QixTQXFCRUksUUFGQUY7TUFNRixTQUpFRTtNQU1GLE9BM0JBSixTQXNCRUssUUFIQUg7TUFRRixTQUxFRztNQU9GLE9BN0JBTCxTQXVCRU0sWUFKQUo7TUFVRixTQU5FSTtNQVFGLE9BL0JBTixTQXdCRU8sVUFMQUw7TUFZRixTQVBFSztNQU9GLFNBWEVKO01BV0YsUUFFd0I7SUFoQ2QsU0FrQ1ZLO01BQ0YsT0FwQ0VSLG1CQW9DRixtQkFDdUI7SUFwQ1gsSUFzQ1ZTLHlDQUFnRCxRQUFLO0lBdEMzQyxTQXdDVkMsUUFBUUMsT0FBT0MsTUFBTUMsTUFBTXBDO01BQzdCO2dCQTFDRXVCO09BMENGLFFBMUNFQTtPQTBDRixlQTFDRUE7T0EwQ0YsV0ExQ0VBO09BMENGLGVBMUNFQTtPQTBDRixVQTFDRUE7T0EwQ0YsYUExQ0VBO01BMENGLFNBMUNFQTtNQTBDRixTQURpQlk7TUFDakIsVUFENkJuQztNQUM3QjtZQUFhNEMsTUFBSUM7UUFDZjtVQUFNLG9DQUZFWCxPQXpDUlgsSUEwQ1dxQixJQUFJQztVQUNUOzthQUVjLElBSExDLE1BR0ssV0FKQ1YsTUFBTXBDO2FBSVAsU0FKT0E7YUFJUCxVQUpPQTthQUlQLElBSFQ0QyxNQUFJQzs7bUJBUVg7bUJBU0EsbUJBakJPRCxNQUFJQzttQkFtQlgsbUJBbkJPRCxNQUFJQzs7YUFVWDtlQUUrRDtxQkF0RG5FdEI7Z0JBc0RtRTs0QkFBaEMsaUJBYjNCVywwQkF6Q1JYO2dCQXNEbUU7Z0JBWnBEd0I7Z0JBQUpDOzs7dUNBZVA7bUJBZldELFFBQUpDOzJCQUFJSDs7O2FBcUJYLFdBdEJJWCxpQ0FDR1UsTUFBSUM7WUFtQ1pJOztRQUNILElBQUlDLFVBOUVKM0I7UUE4RUEsVUFiRWM7UUFhRixVQVpFQztRQVlGLFNBWEVDO1FBV0YsVUFWRUM7UUFVRixTQVRFQztRQVNGLFNBUkVDO1FBUUYsVUFQRUM7UUFPRixHQURHTSxtQkFXQyxJQURLenZCLEVBVk55dkIsT0FXQyxPQURLenZCO1FBR0w7O2lCQUNPMnZCO1VBQ0EsWUFEQUE7WUFFdUIsc0JBRnZCQTtZQUVFLHdCQXBETGpCLDhCQXFDSmdCOzs7VUFnQlMsd0JBckRMaEIsVUFrREdpQixrQkFiUEQsYUFnQndEO1FBSnhELE1BYkRELElBa0JVO0lBOUZILFNBZ0dWRyxTQUFTN0IsSUFBSTN0QjtNQUNmLFNBRFcydEIsVUFBSTN0QixNQUNMLHdCQURDMnRCLHNCQUN3QjtJQWpHdkIsU0FtR1Y4QjtNbEM3TEwsSWtDOExnQmowQixFQXJHWG15QjtNQXNHQTtlQURXbnlCO1VBRU47aUJBdkdMbXlCLFVBcUdXbnlCO1dBR0Esb0JBeEdYbXlCO1dBd0dXLE1BeEdYQSxVQXFHV255QjtXQUlBLG9CQXpHWG15QjtVQTBHSyxpQkFGQytCLEdBQ0FDLElBQ2EsT0FGYkQ7VUFERCxJQUdzQixJQUxoQmwwQjs7UUFDSSxTQXRHZm15QjtRQXNHZSx3QkF0R2ZBLHVCQTZHZTtJQTVHTCxTQThHVmlDO01BQW9CLFNBL0dwQmpDLFFBK0dvQix3QkEvR3BCQSxzQkErR2dEO0lBOUd0QyxTQStHVmtDLGNBQWM3dkI7TUFBSSxTQWhIbEIydEIscUJBZ0hjM3RCO01BQUksd0JBaEhsQjJ0QixzQkFnSHFFO0lBL0czRCxTQWdIVm1DLFlBQVk5dkI7TUFBSSxTQWpIaEIydEIscUJBaUhZM3RCO01BQUksd0JBakhoQjJ0QixzQkFpSGlFO0lBaEh2RCxTQWtIVm9DLG9CQUFrQiw2QkFBOEI7SUFsSHRDLFNBbUhWQyxrQkFBZ0IsMkJBQTRCO0lBbkhsQyxTQW9IVkMsVUFBVWp3QixHQUFJLHFCQUFKQSxLQUE4QjtJQXBIOUIsU0FxSFZrd0IsUUFBUWx3QixHQUFJLG1CQUFKQSxLQUE0QjtJQXJIMUIsU0F1SFZtd0IscUJBQXFCWjtNQUN2QixrQkFsRkVuQix5QkFpRnFCbUIsSUFDZTtJQXhIMUIsU0EwSFZhLG1CQUEyQixRQUFFO0lBMUhuQjs7O09Ba0hWTDtPQUNBQztPQUNBQztPQUNBQztPQWxCQVQ7T0FXQUc7T0FDQUM7T0FDQUM7T0E5RUEzQjs7c0JsQzVITDs7T2tDa0lLRTtPQXdEQW1CO09BdUJBVztPQUdBQztJQTFIVTs7Ozs7a0JDVk5DLGNBQVMsVUFFRyxJQUFOckosV0FBTSxPQUFOQSxFQURHLFFBQ0k7a0JBT2I3YixPQUFPckosRUFBRWxDLEVBQUVDO1dBQ2IsR0FEU2lDLEVBQ3NDLE1BRHRDQSxLQUNMd3VCLEdBQXFDdEosV0FBckNzSjtXQUNKLEdBRmF6d0IsRUFFa0MsUUFGbENBLEtBRVQyd0IsR0FBcUNELGFBQXJDQztXQUNKLFNBRElBLE1BREFGLGNBQ0FFO3FCQUZLMXVCLEVBQUVsQyxFQUFFQyxPQUd5QztrQkFPcEQ0d0IsSUFBSTN1QixFQUFFbEMsRUFBRUM7V0FDVixHQURNaUMsRUFDeUMsTUFEekNBLEtBQ0Z3dUIsR0FBcUN0SixXQUFyQ3NKO1dBQ0osR0FGVXp3QixFQUVxQyxRQUZyQ0EsS0FFTjJ3QixHQUFxQ0QsYUFBckNDO1dBQ0osSUFESUEsY0FEQUY7YUFFZ0IsR0FIZHh1QjtlQU9nQixJQURDNHVCLEdBTmpCNXVCLEtBTVc2dUIsR0FOWDd1QixLQU1LOHVCLEdBTkw5dUIsS0FPZ0IsWUFEQzR1QjtlQUNkLGtCQURFRSxJQUVVLGNBRlZBLEdBQU1ELEdBRUksT0FGRUQsR0FOZjl3QixFQUFFQztlQVNDLEdBSFk2d0I7aUJBT21CLElBRFhHLElBTlJILE1BTUNJLElBTkRKLE1BTU5LLElBTk1MLE1BT21CLFlBRFhHLElBWnZCanhCLEVBQUVDO2lCQWFTLHFCQVBSK3dCLEdBQU1ELEdBTUFJLEtBQU9EO2VBREw7YUFOTjtXQVVKLElBZExSLGNBQ0FFO2FBYXlCLEdBZm5CM3dCO2VBbUJZLElBRENteEIsR0FsQmJueEIsS0FrQk9veEIsR0FsQlBweEIsS0FrQkNxeEIsR0FsQkRyeEIsS0FtQlksWUFEWHF4QjtlQUNGLGtCQURjRixJQUVSLHFCQXBCVGx2QixFQUFFbEMsRUFrQkdzeEIsSUFBTUQsR0FBTUQ7ZUFHWixHQUhBRTtpQkFPNkIsSUFEVEMsSUFOcEJELE1BTWFFLElBTmJGLE1BTU1HLElBTk5ILE1BTzZCLFlBRFRDLElBTmRGLEdBQU1EO2lCQU9KLHFCQXpCYmx2QixFQUFFbEMsRUF3QlN5eEIsS0FBT0Q7ZUFETDthQU5OO1dBV1gsU0ExQkVaLE1BREFGLGNBQ0FFO3FCQUZFMXVCLEVBQUVsQyxFQUFFQyxPQTRCOEM7a0JBSWxEeXhCLElBQUlqeEIsRUFFUm1NO1duQ3JJVCxHbUNxSVNBO2FBQ1UsSUFEQzNNLEVBQVgyTSxLQUFRNU0sRUFBUjRNLEtBQUsxSyxFQUFMMEssS0FDVSxvQkFIRm5NLEVBRUFUO2FBQ0UsU0FBSmdELEVBQ1UsT0FGaEI0SjthQUdFLFFBRkk1SixHQU1PLElBQUxvdUIsR0FBSyxJQVRMM3dCLEVBRUdSLEdBT0UsT0FQRkEsTUFPSG14QixHQVBSeGtCLEVBUTJCLElBUnRCMUssRUFBR2xDLEVBT0FveEI7YUFORSxJQUdGSixHQUFLLElBTkx2d0IsRUFFSHlCO2FBSVEsT0FKUkEsTUFJRzh1QixHQUpScGtCLEVBSzJCLElBRG5Cb2tCLEdBSkFoeEIsRUFBR0M7V0FERixZQUREUTtrQkFZUmt4QixVQUFVbHhCLEdBQUksWUFBSkEsTUFBb0M7a0JBUzFDbXhCLGdCQUFnQm54QjtXbkN4SjdCO2lCbUMwSnFCUixXQUFIRCxXQUFIa0M7YUFDRiwyQkFIZ0J6QixFQUVkeUIsR0FBR2xDLEVBQUdDO1dBREgsaUJBRFdRO2tCQUtoQm94QixnQkFBZ0JweEI7V25DN0o3QjtpQm1DK0pxQlIsV0FBSEQsV0FBSGtDO2FBQ0UsV0FERkEsRUFBR2xDLEVBQ0QsZ0JBSFlTLEVBRVJSO1dBREgsaUJBRFdRO2tCQVFoQnVULEtBQUs5UixFQUFFbEMsRUFBRUM7V0FDZixHQURXaUM7Z0JBQUlqQzs7Z0JBSTJDNnhCLEdBSjNDN3hCO2dCQUlxQ214QixHQUpyQ254QjtnQkFJK0JveEIsR0FKL0JweEI7Z0JBSXlCcXhCLEdBSnpCcnhCO2dCQUlhOHhCLEdBSmpCN3ZCO2dCQUlXNHVCLEdBSlg1dUI7Z0JBSUs2dUIsR0FKTDd1QjtnQkFJRDh1QixHQUpDOXVCO3VCQUkrQzR2QixjQUE5QkM7d0JBQ00sSUFEeEJmLEdBQU1ELEdBQ2tCLEtBRFpELEdBSlQ5d0IsRUFBRUM7eUJBSWE4eEIsY0FBOEJELEdBRTlCLFNBTmpCNXZCLEVBQUVsQyxFQUkyQnN4QixJQUFNRCxHQUFNRCxJQUdoRCxPQVBPbHZCLEVBQUVsQyxFQUFFQzthQUdDLHVCQUhIRCxFQUFGa0M7V0FFSyx1QkFGSGxDLEVBQUVDLEVBT0M7a0JBSVYreEI7V25DaExiO1dtQ2dMdUI7Ozs7ZUFFTSxJQUFOaHlCO2VBQU0sT0FBTkE7YUFETCxnQkFFVztrQkFFaEJpeUI7V25DckxiO1dtQ3FMMkI7Ozs7ZUFFRSxJQUFOanlCO2VBQU0sVUFBTkE7YUFETCxTQUVlO2tCQUVwQmt5QjtXbkMxTGI7V21DMEx1Qjs7OEJBR0gsK0JBQU4xUDtlQURlLElBQWZ4aUI7ZUFBZSxPQUFmQTthQURJLGdCQUVXO2tCQUVoQm15QjtXbkMvTGI7V21DK0wyQjs7OEJBR1AsK0JBQU4zUDtlQURlLElBQWZ4aUI7ZUFBZSxVQUFmQTthQURJLFNBRWU7a0JBSXBCb3lCO1dBQWlCOzs7bUJBR1ZueUIsV0FBSEQsV0FBYSxnQ0FBYkEsRUFBR0M7YUFEUyxJQUFOb3lCO2FBQU0sT0FBTkE7V0FETCwwQ0FFa0M7a0JBZ0IzQ3RrQixPQUFPaU0sR0FBR0Y7V0FDWixHQURTRTthQUlHLEdBSkFGO2VBSXFCLHdCQUpyQkEsSUFJUSxZQUpYRSxHQUlXLFFBSlJGO2FBR0ksT0FIUEU7V0FFTyxPQUZKRixFQUl3QztrQkFROUN3WSxNQUFNN3hCO1duQ3JPbkI7YW1DeU9tQixJQURDUixXQUFIRCxXQUFIa0MsV0FDSyxvQkFKQXpCLEVBR0ZUO2FBQ0UsU0FBSmdELEVBQ1UsVUFGWGQsSUFBTWpDO2FBR0osUUFGRCtDO2VBS21CLGdCQVRmdkMsRUFHQ1IsR0FNYztlQUFjLGVBTmxDaUMsRUFBR2xDLEVBTUM4d0IsSUFBSXlCLEtBQU1uQjthQUxUO2NBR2UsY0FQZjN3QixFQUdMeUI7Y0FJb0I7OzthQUF3QixVQUF4Qzh1QixHQUFJd0IsT0FBb0MsS0FBOUJsQixHQUpYdHhCLEVBQUdDO1dBRFQ7YUFXRmtOO2tCQUVBcUIsZ0JBQVcsZ0JBQW1DO2tCQUUxQ2lrQixJQUFJaHlCO1duQ3RQakI7OztlbUN5UG1CO2dCQURDUjtnQkFBSEQ7Z0JBQUhrQztnQkFDSyxvQkFIRnpCLEVBRUFUO2dCQUNFLFdBQUpnRDtlQUFJLFFBRkQ7ZUFFQyxJQURDd2YsYUFDTHhmLEVBREsvQyxFQUFOaUMsVUFBTXNnQjs7YUFERjtrQkFLTGtRLE9BQU9qeUIsRUFFWG1NO1duQzlQVCxHbUM4UFNBO2FBQ1UsSUFERTNNLEVBQVoyTSxLQUFTNU0sRUFBVDRNLEtBQU0xSyxFQUFOMEssS0FDVSxvQkFIQ25NLEVBRUZUO2FBQ0MsU0FBSmdEO2VBL0NSLEdBOENRZDtpQkEzQ0ksR0EyQ0VqQzttQkEzQ2tCLHdCQTJDbEJBLEdBM0NLLFdBMkNYaUMsRUEzQ1csUUEyQ0xqQztpQkE1Q0UsT0E0Q1JpQztlQTdDUSxPQTZDRmpDO2FBSVIsUUFIRStDLEdBUVMsSUFBTG91QixHQUFLLE9BWEozd0IsRUFFQ1IsR0FTRyxPQVRIQSxNQVNGbXhCLEdBVFZ4a0IsRUFXVyxJQVhMMUssRUFBR2xDLEVBU0NveEI7YUFSQSxJQUlBSixHQUFLLE9BUEp2d0IsRUFFTHlCO2FBS1MsT0FMVEEsTUFLSTh1QixHQUxWcGtCLEVBT1csSUFGRG9rQixHQUxEaHhCLEVBQUdDO1dBREg7a0JBY0wweUIsTUFBTXJ4QixHQUFHQztXQUNmLEdBRFlEO2dCQUFHQzs7Z0JBSTJDd1ksR0FKM0N4WTtnQkFJcUNxeEIsR0FKckNyeEI7Z0JBSStCK0gsR0FKL0IvSDtnQkFJeUJFLEdBSnpCRjtnQkFJYTBZLEdBSmhCM1k7Z0JBSVV3VSxHQUpWeFU7Z0JBSUlrVCxHQUpKbFQ7Z0JBSUZFLEdBSkVGO2tCQUk4Q3lZLE1BQTlCRTtpQkFFdEIsU0FGb0RGLEdBRXJDLFdBRnlCelEsR0FKbENoSTtpQkFPYzs4QkFIVmtULEdBSkRqVDtrQkFPVzs7a0JBQ0ksV0FKUnVVLEdBR0YrYztpQkFDUCxrQkFKSHJ4QixHQUdHMFgsTUFIRzFFO2VBT1YsU0FQc0J5RixHQU9QLFdBUEx6RixHQUpEalQ7ZUFZVzs4QkFSb0IrSCxHQUpsQ2hJO2dCQVljOztnQkFDSSxXQURWd3hCLEtBUmdDRjtlQVN2QyxrQkFEQTNaLEtBUjJCeFgsSUFBTTZIO2FBRDdCLE9BSExoSTtXQUVLLE9BRkZDLEVBY047a0JBRUh3eEIsTUFBTXp4QixHQUFHQztXQUNmLEdBRFlEO2dCQUFHQztlQUtMLElBRFl1VSxHQUpWeFUsTUFJSWtULEdBSkpsVCxNQUlGRSxHQUpFRixNQUtGLFdBRE1rVCxHQUpEalQsSUFLTDs7aUJBSW9CLElBRGJxeEIsV0FDYSxXQUxSOWMsR0FJTDhjO2lCQUNKLGtCQUxIcHhCLFNBQU1nVDtlQUNOLElBRUYsYUFBcUIsV0FIUHNCLEdBRUorYztlQUNILG9CQUhMcnhCO2FBRE07V0FEQSxRQU8yQjtrQkFVckN3eEIsVUFBVXZ5QjtXbkM5U3ZCO2FtQ2tUbUIsSUFEQ1IsV0FBSEQsV0FBSGtDLFdBQ0ssb0JBSkl6QixFQUdOVDthQUNFLFNBQUpnRCxFQUNVO2FBQ1QsUUFGREE7ZUFPSSxvQkFYSXZDLEVBR0hSO2VBUUQ7cUJBRVVteEIsWUFBSk4sWUFBcUIsZUFWaEM1dUIsRUFBR2xDLEVBVVE4d0IsSUFBSU07ZUFETDthQVJMLFlBR0EsVUFQSTN3QixFQUdUeUI7YUFJSzttQkFFVW92QixjQUFKTjs7O3VDQUF5Qyx1QkFBckNNLE1BTlp0eEIsRUFBR0MsRUFNeUQ7YUFEckQ7V0FOYiw0QkFBNEIsUUFBSztrQkFhL0JnekIsU0FBUzN4QixHQUFHQztlQUFIdWpCLFFBQUdIO1dBQ2xCO2dCQURlRyxRQUFHSDttQkFHSTdPLEdBSFBnUCxRQUdDdFEsR0FIRHNRLFFBR0x0akIsR0FIS3NqQjsyQkFBR0gsS0FJRztlQUNOLG9CQUZDblEsR0FIRW1RO2VBS0g7aUJBQ2EsSUFBUGlPLFlBQUpueEIsWUFBVyxjQUhsQkQsR0FHT0M7aUJBQVc7bUJBQThCLG9CQUFyQ214QixNQU5OOU4sS0FHT2hQLEdBSEo2TztpQkFPRDs7YUFMWSxTQUtQO2tCQUVoQnRILEtBQUsvYixHQUFHQztXQUNkLEdBRFdEO2dCQUFHQztlQUtKLElBRFl1VSxHQUpYeFUsTUFJS2tULEdBSkxsVCxNQUlERSxHQUpDRixNQUtELFdBRE1rVCxHQUpGalQsSUFLSjs7aUJBSWtCLElBRFhxeEIsV0FDVyxVQUxOOWMsR0FJTDhjO2lCQUNGLG1CQUxMcHhCO2VBQ0EsSUFFRixhQUFxQixVQUhQc1UsR0FFSitjO2VBQ0wsaUJBSEhyeEIsU0FBTWdUO2FBREMsT0FITmxUO1dBRUssUUFPd0I7a0JBSWxDNHhCLFVBQVU1eUIsRUFBRXdJO2VBQUYrSCxNQUFFNlM7V0FDbEI7Z0JBRGdCN1M7O2dCQUdINVEsRUFIRzRRO2dCQUdON1EsRUFITTZROztnQkFBRXVpQixPQUdScHpCLEVBQUdDLEVBSEt5akI7Z0JBQUY3UztnQkFBRTZTOzthQUVQLE9BRk9BLElBRzRCO2tCQWE1Q2xhLFFBQVFsSSxHQUFHQztXQUNrQixtQkFEbEJBLE1BQ0QsZUFERkQsTUFYUThILFFBQUdDO1dBQ25CO2dCQURnQkQ7a0JBQUdDO2lCQU1UO2tCQURzQmtxQixLQUxibHFCO2tCQUtTdXBCLEdBTFR2cEI7a0JBS0tDLEdBTExEO2tCQUtMbXFCLEtBTEVwcUI7a0JBS04wTSxHQUxNMU07a0JBS1ZvTCxHQUxVcEw7a0JBTU4sb0JBREpvTCxHQUFrQmxMO2lCQUNkLFNBQUp0RzttQkFHK0I7bUNBSlQ0dkIsR0FBSVc7b0JBSWIsZUFKVHpkLEdBQUkwZDtvQkFMRXBxQjtvQkFBR0M7O2lCQVFaLE9BRkRyRztlQUZNO2FBREMsT0FITXFHLFFBWTRCO2tCQUUvQ0YsTUFBTTdILEdBQUdDLElBQ1gscUJBRFFELEdBQUdDLE9BQ007a0JBRVhveUIsT0FBT3J5QixHQUFHQztlQUFIdWpCLFFBQUdIO1dBQ2hCO2dCQURhRztrQkFBR0g7aUJBT0o7a0JBRG9DaU8sR0FOaENqTztrQkFNMEJyYixHQU4xQnFiO2tCQU1vQmxqQixHQU5wQmtqQjtrQkFNTTdPLEdBTlRnUDtrQkFNR3RRLEdBTkhzUTtrQkFNSHRqQixHQU5Hc2pCO2tCQU9ELG9CQURJdFEsR0FBMEJsTDtpQkFDOUIsU0FBSnRHO21CQUVGLGdCQUhJeEIsR0FBMEJDO21CQUc5QixhQVRPcWpCLEtBTVNoUCxHQU5ONk8sS0FNZ0NpTzttQkFJdkM7eUJBSEQ1dkI7bUJBTUYscUJBUFV3UixHQUFNc0IsTUFBMEI4YzttQkFPMUMsYUFiTzlOLEtBTUh0akI7bUJBRE47aUJBRVEsU0FJTixVQUxJQSxHQUFNZ1QsUUFBb0IvUztpQkFLOUIsYUFYT3FqQixLQU1TaFA7aUJBT2hCO2VBUkY7YUFGQSxTQVU2RDtrQkFFM0QxUyxLQUFLdEQ7V25DeFhsQjs7O21CbUMwWG9CRyxhQUFIRCxhQUFIa0M7ZUFBWSxLQUZScEMsRUFFSm9DO2VBQXNCLFdBRmxCcEMsRUFFREU7MkJBQUdDOzthQURGO2tCQUdMaUosS0FBS3BKLEVBQUVRLEVBQUUwRTtlQUFGNkwsTUFBRTNMO1dBQ2Y7Z0JBRGEyTDtlQUdlO2dCQUFmNVEsRUFIQTRRO2dCQUdIN1EsRUFIRzZRO2dCQUdOM08sRUFITTJPO2dCQUdlLGtCQUhqQi9RLEVBR0RFLEVBQXVCLEtBSHRCRixFQUdKb0MsRUFIUWdEO2dCQUFGMkwsSUFHQTVRO2dCQUhFaUY7O2FBRUosT0FGSUEsT0FHa0M7a0JBRTNDK0osUUFBUUM7V25DallyQjs7O2VtQ21ZMEI7Z0JBQU5qUDtnQkFBSEQ7Z0JBQUhrQztnQkFBWSxnQkFGTGdOLEVBRUpsUDtlQUFTO2lCQUFPLGlCQUZaa1AsRUFFUGhOO2lCQUFtQixxQkFBYmpDO2lCQUFhOzs7ZUFEZjs7a0JBR0xrUCxPQUFPRDtXbkNyWXBCOzs7ZW1DdVkwQjtnQkFBTmpQO2dCQUFIRDtnQkFBSGtDO2dCQUFZLGdCQUZOZ04sRUFFSGxQO2VBQVM7OztpQkFBTyxnQkFGYmtQLEVBRU5oTjtpQkFBbUIsdUJBQWJqQztpQkFBYTtlQURmOztrQkFHTDZOLE9BQU9vQixFQUVYdEM7V25DM1lULEdtQzJZU0E7YUFFVztjQUZDM00sRUFBWjJNO2NBQVM1TSxFQUFUNE07Y0FBTTFLLEVBQU4wSztjQUVXLFdBSkFzQyxFQUVMaE47Y0FHSyxjQUxBZ04sRUFFRmxQO2NBSUUsV0FOQWtQLEVBRUNqUDthQUlELEdBREwyekIsT0FIQTF4QixNQUVBMlcsT0FGTTVZLE1BSU5veUIsSUFFcUIsT0FOM0J6bEIsRUFNa0MsWUFKNUJpTSxJQUZHN1ksRUFJSHF5QjthQUdDLGNBTER4WixJQUVBd1o7V0FMRztrQkFVTDNmLFVBQVV4RDtXbkNwWnZCO2FtQ3daMEI7Y0FGTmpQO2NBQUhEO2NBQUhrQztjQUVZLGdCQUpIZ04sRUFFVGhOO2NBRVk7O2NBQ04sY0FMR2dOLEVBRU5sUDtjQUlTLGtCQU5Ia1AsRUFFSGpQO2NBSU07O2dCQURYMnpCLElBR2dCLGdCQUpYQyxHQUVBRSxJQUVILGVBSkRELEdBRkM5ekIsRUFJRGcwQjthQUZVLFNBS0ssS0FMWEgsR0FGSDd6QixFQUlHK3pCO2FBR0gsaUJBTERELEdBRUFFO1dBTEU7a0JBVUxDO1dBQVc7YUFFZ0IsSUFBdkJoMEIsV0FBSGlDLFdBQTBCLGNBQXZCakM7YUFBTSxpQkFBVGlDO1dBREksUUFDZ0M7a0JBRXJDZ3lCOzs7O2VBRWdDO2dCQUF6QmowQjtnQkFBSEQ7Z0JBQUhrQztnQkFBK0IsVUFBNUJsQyxFQUE0QixvQkFBekJDOzt3QkFBTmlDOzthQURJO2tCQUdUaXlCLFNBQVM3ekIsR0FDWCxzQkFEV0EsRUFDTTtrQkFNWDhPLEtBQUszTztXbkM5YWxCOzs7ZW1DaWJtQjtnQkFEQ1I7Z0JBQUhEO2dCQUFIa0M7Z0JBQ0ssb0JBSER6QixFQUVEVDtlQUNFLFNBQUpnRCxFQUNVLE9BRlJoRDtlQUNFLElBRUgsYUFGRGdELEVBREsvQyxFQUFOaUMsVUFBTXNnQjs7YUFERjtrQkFlTDRSLFdBVGtCdDBCO1duQ3JiL0I7OzttQm1DaWNvQnV5QixlQUFIcHBCLGVBQUg0UDtlQUNBLGNBYmlCL1ksRUFZZG1KO2tDQUFINFA7Ozt5QkFUTTVZLFdBQUhELFdBQUhrQztxQkFDQSxjQUppQnBDLEVBR2RFLG1CQUFIa0M7K0JBQU1qQzs7bUJBRFQ7MkJBVVNveUI7O2FBRFQ7a0JBZ0JFZ0MsZUFUc0J2MEI7V25DdmNuQzs7O21CbUNtZG9CdXlCLGVBQUhwcEIsZUFBSDRQO2VBQ0EsY0FicUIvWSxFQVlsQm1KO2tDQUFINFA7Ozt5QkFUTTVZLFdBQUhELFdBQUhrQztxQkFDQSxjQUpxQnBDLEVBR2xCRSxtQkFBSGtDOytCQUFNakM7O21CQURUOzJCQVVTb3lCOzthQURUO2tCQWdCRWlDLFVBVGlCeDBCO1duQ3pkOUI7OzttQm1DcWVvQnV5QixlQUFIcHBCLGVBQUg0UDtlQUNBLGNBYmdCL1ksRUFZYm1KO2tDQUFHb3BCOzs7eUJBVEFweUIsV0FBSEQsV0FBSGtDO3FCQUNBLGNBSmdCcEMsRUFHYkUsbUJBQUdDOytCQUFOaUM7O21CQURIOzJCQVVHMlc7O2FBREg7a0JBZ0JFMGIsY0FUcUJ6MEI7V25DM2VsQzs7O21CbUN1Zm9CdXlCLGVBQUhwcEIsZUFBSDRQO2VBQ0EsY0Fib0IvWSxFQVlqQm1KO2tDQUFHb3BCOzs7eUJBVEFweUIsV0FBSEQsV0FBSGtDO3FCQUNBLGNBSm9CcEMsRUFHakJFLG1CQUFHQzsrQkFBTmlDOzttQkFESDsyQkFVRzJXOzthQURIO2tCQU9FMmIsU0FBUy96QjtXbkM3ZnRCOzs7ZW1DZ2dCbUI7Z0JBRENSO2dCQUFIRDtnQkFBSGtDO2dCQUNLLG9CQUhHekIsRUFFTFQ7ZUFDRSxTQUFKZ0QsRUFDVSxVQUZSaEQ7ZUFDRSxJQUVILGFBRkRnRCxFQURLL0MsRUFBTmlDLFVBQU1zZ0I7O2FBREY7a0JBTVRpUyxTQUFTdnlCLEVBQUVsQyxFQUFFQztXbkNwZ0J0QjtXbUN3Z0JPLFNBSldpQzthQUlrQixpQkFKbEJBO2FBSU0sK0JBSkpsQztXM0JZWDs7c0IyQlphQztlQUtnQixpQkFMaEJBO2VBS0UsMEJBTEpEOzJCQU1SLFlBTk1rQyxFQUFFbEMsRUFBRUM7V0FPRixhQVBGaUMsRUFPRSxJQVBBbEMsRUFBRUMsR0FPTztrQkFFaEIrSSxJQUFJbEosRUFFUjhNO1duQy9nQlQsR21DK2dCU0E7YUFFVTtjQUZDM00sRUFBWDJNO2NBQVE1TSxFQUFSNE07Y0FBSzFLLEVBQUwwSztjQUVVLFFBSkY5TSxFQUVIb0M7Y0FHSyxlQUxGcEMsRUFFQUU7Y0FJRSxRQU5GRixFQUVHRztnQkFBTmlDLE1BRUEyVyxPQUZHN1ksTUFHSGlKLE9BSE1oSixNQUlOb3lCLElBQ2tDLE9BTHZDemxCO2FBTU0sZ0JBSkRpTSxJQUNBNVAsSUFDQW9wQjtXQUxJO2tCQWVMemtCLFdBQVc5TixFQUVmOE07V25DL2hCVCxHbUMraEJTQTthQUVVO2NBRkMzTSxFQUFYMk07Y0FBUTVNLEVBQVI0TTtjQUFLMUssRUFBTDBLO2NBRVUsY0FKSzlNLEVBRVZvQztjQUdLLGVBTEtwQyxFQUVQRTtjQUlFLGNBTktGLEVBRUpHO2FBSUQsR0FETGdKO2VBSUMsSUFESXlyQixJQUhMenJCO2tCQUhBL0csTUFSTThYLE1BUUhoYSxNQU1FMDBCLE9BTkN6MEIsTUFSRzZaLEdBZThCLE9BUDVDbE47ZUFRVyxnQkFoQkFvTixHQWNEMGEsSUFkSTVhO2FBQ2hCLEdBRGFFO2VBSUQsR0FKSUY7aUJBSXFCLHdCQUpyQkE7aUJBSVEsZ0JBSlhFLEdBSVcsUUFKUkY7ZUFHQSxPQUhIRTthQUVHLE9BRkFGO1dBT0w7a0JBbUNUNmEsUUFBUXp5QjtXQUNWLEdBRFVBOzs7Ozs7Ozs7O3VCQVFZOzZDQVJaQTt3QkFwQlY7a0NBQVk5QixFQUFFOEI7MkJBQ1osVUFEVTlCOztxQ0FFQSxZQUZFOEI7O3lDQUdEMnlCLElBSEMzeUIsS0FHUDR5QixHQUhPNXlCLG9CQUdQNHlCLFFBQU1EOzs7a0NBSEMzeUI7Ozt1Q0FJSzZ5QixZQUFOM2EsV0FBTjRhLEtBSk85eUI7cURBSVA4eUIsVUFBTTVhLFFBQU0yYTs7O2tDQUpMN3lCOzs7Ozt5Q0FNVyt5QixZQUFOOWEsV0FBTkssYUFBTjBhLEtBTk9oekI7dURBTVBnekIsVUFBTTFhLFVBQU1MLFdBQU04YTsyQkFJckIsT0FWUTcwQixVQVdNLFVBRFYrMEIsR0FWTWp6QixHQVdJOzhCQUFKMlc7NkJBSU87OEJBRFJDLElBSENEOzhCQUdSdWMsSUFIUXZjOzhCQUlPLGFBZlR6WSxJQVVKKzBCLGdCQUlLcmM7OEJBQ1E7OzZCQUNmLGlCQUxFdlEsS0FHRjZzQixJQUNJNXNCLE9BQU82c0I7MkJBRkwsNEJBR2tCO3VCQUUxQixXQUFLLFNBbkJReGM7eUJBNEJFeWM7cUJBQWMsV0FBZEEsR0FBYyxTQUFRLFNBQVEsU0FBUTttQkFENUIseUJBQVEsU0FBUTtpQkFEcEIseUJBQVE7ZUFEWjthQURYO1dBREYsT0FqVk5ub0IsS0F1VmtEO2tCQUVsRG9vQixRQUFRMzVCLEVBQUUydEI7V0FDWiwwQkFBbUJqcEIsRUFBRUcsR0FBSyxXQUFMQSxFQUFGSCxFQUFjLEVBRHJCaXBCLEVBQUYzdEIsRUFDNEI7a0JBRXBDNDVCLE9BQU81NUIsR0FBSSxlQUFKQSxFQTVWUHVSLE1BNFYwQjtrQkFFdEJzb0IsWUFBYXp5QjtXQUFPLEdBQVBBO2FBRThCLElBQW5DbEgsS0FGS2tILEtBRVI0SixFQUZRNUosS0FFWHZDLEVBRld1QyxLQUU4QixlQUF0QzRKLEVBQUc5UTthQUFzQixVQUE1QjJFLGlCbkNsbEJmLE9tQ2dsQmFnMUI7V0FDRyxRQUMyRDtrQkFFbEU1Z0IsT0FBTzdSO1dBQWlCLG1CQUFqQkE7V0FBaUIsc0JuQ3BsQmpDLE9tQ2dsQmF5eUIsdUJBSXFDO2tCQUVyQ0MsVUFBVXAxQixFQUFFd0k7ZUFBRitILE1BQUU2UztXQUNsQjtnQkFEZ0I3Uzs7O2dCQUdON1EsRUFITTZRO2dCQUdUM08sRUFIUzJPO2dCQUFFdWlCLE9BR1JwekIsRUFBSGtDLEVBSFd3aEI7Z0JBQUY3UztnQkFBRTZTOzthQUVQLE9BRk9BLElBRzRCO2tCQUV4Q2lTLGdCQUFpQjN5QjtXQUFPLEdBQVBBO2FBRThCLElBQXZDbEgsS0FGU2tILEtBRVo0SixFQUZZNUosS0FFZnZDLEVBRmV1QyxLQUU4QixlQUExQzRKLEVBQUc5UTthQUFzQixVQUE1QjJFLGlCbkM3bEJmLE9tQzJsQmFrMUI7V0FDRyxRQUMrRDtrQkFFdEVDLFdBQVc1eUI7V0FBcUIsbUJBQXJCQTtXQUFxQixzQm5DL2xCekMsT21DMmxCYTJ5QiwyQkFJNkM7a0JBRWpERSxZQUFZQyxJQUFJeDFCO2VBQ0Z1USxJQURFdlEsRUFDQTBDO1dBQUk7Z0JBQU42TjtlQUdFLElBREw1USxFQUZHNFEsT0FFQTdRLEVBRkE2USxPQUVOM08sRUFGTTJPLE9BR0Usb0JBREY3USxFQUhGODFCO2VBSUksU0FFUjExQjtpQkFBTyxRQUFQQSxHQUNLLFdBSkNKLEVBQUhDLEVBRksrQyxHQUFGNk4sSUFFTjNPLEVBRlFjO3FCQUFGNk4sSUFFSDVROztlQUNLLFlBREZELEVBQUhDLEVBRksrQzs7O21DbkNsbUJ6QixPbUNnbEJheXlCLHdCQTJCc0I7O2lCQXpYMUJ0b0I7aUJBRUFxQjtpQkFFSWlrQjtpQkFuSEFmO2lCQVlKQztpQkE2R0llO2lCQWVBQztpQkFnQkFJO2lCQWtDQUU7aUJBU0E1VjtpQkE2Qko3VDtpQkFHQUw7aUJBR0l3cUI7aUJBZUF2d0I7aUJBcUpBNEY7aUJBakpBRTtpQkFLQStGO2lCQUlBRTtpQkFJQXJCO2lCQW9KQUY7aUJBeklBOEU7aUJBV0F1aEI7aUJBUUpFO2lCQXZQSW5DO2lCQUtBQztpQkFLQUM7aUJBS0FDO2lCQWZBSDtpQkFLQUM7aUJBZ0RBSztpQkF5TUFsakI7aUJBK0VBb2xCO2lCQS9EQUo7aUJBa0JBQztpQkFrQkFDO2lCQWtCQUM7aUJBNkVKSTtpQkFnQ0FrQjtpQkFiQWhoQjtpQkFXQStnQjtpQkFwQkFMO2lCQUdBQztJQXRnQkc7SURrQkc7Ozs7a0JFYk4vRSxjQUFTLGNBRUhySixvQkFERyxRQUNJO2tCQUViN2IsT0FBT3JKLEVBQUV6QixFQUFFeVgsRUFBRWpZO1dBQ04sY0FEQWlDLEdBQ2tCLFVBRFpqQyxHQUNZLEtBQUwyd0IsTUFBbEJGLGNBQWtCRTtxQkFEYjF1QixFQUFFekIsRUFBRXlYLEVBQUVqWSxPQUU0QztrQkFFekQweEIsVUFBVWx4QixFQUFFeVgsR0FBSSxZQUFOelgsRUFBRXlYLE1BQXVDO2tCQUVuRDJZLElBQUkzdUIsRUFBRXpCLEVBQUV5WCxFQUFFalk7V0FDWixHQURNaUMsTUFDbUNrbEIsRUFEbkNsbEIsS0FDRnd1QixHQUFxQ3RKLFdBQXJDc0o7V0FDSixHQUZZendCLE1BRTZCMHdCLElBRjdCMXdCLEtBRVIyd0IsR0FBcUNELGFBQXJDQztXQUNKLElBRElBLGNBREFGO2FBRWdCLEdBSGR4dUI7ZUFPZ0IsSUFETzR1QixHQU52QjV1QixLQU1pQjZ6QixHQU5qQjd6QixLQU1XNnVCLEdBTlg3dUIsS0FNSzh1QixHQU5MOXVCLEtBT2dCLFlBRE80dUI7ZUFDcEIsa0JBREVFLElBRWEsY0FGYkEsR0FBTUQsR0FBTWdGLEdBRUMsT0FGS2pGLEdBTnJCcndCLEVBQUV5WCxFQUFFalk7ZUFTRCxHQUhrQjZ3QjtpQkFPb0I7a0JBRFhHLElBTlRIO2tCQU1Fa0YsSUFORmxGO2tCQU1MSSxJQU5LSjtrQkFNWkssSUFOWUw7a0JBT29CLFlBRFhHLElBWjlCeHdCLEVBQUV5WCxFQUFFalk7aUJBYU8scUJBUFIrd0IsR0FBTUQsR0FBTWdGLEdBTU41RSxLQUFPRCxJQUFPOEU7ZUFEWjthQU5OO1dBVUosSUFkTHRGLGNBQ0FFO2FBYXlCLEdBZmpCM3dCO2VBbUJVLElBRE9teEIsR0FsQmpCbnhCLEtBa0JXZzJCLEdBbEJYaDJCLEtBa0JLb3hCLEdBbEJMcHhCLEtBa0JEcXhCLEdBbEJDcnhCLEtBbUJVLFlBRFhxeEI7ZUFDRixrQkFEb0JGLElBRWQscUJBcEJUbHZCLEVBQUV6QixFQUFFeVgsRUFrQkNvWixJQUFNRCxHQUFNNEUsR0FBTTdFO2VBR2xCLEdBSEFFO2lCQU9tQztrQkFEUkMsSUFOM0JEO2tCQU1vQjRFLElBTnBCNUU7a0JBTWFFLElBTmJGO2tCQU1NRyxJQU5OSDtrQkFPbUMsWUFEUkMsSUFOckJGLEdBQU00RSxHQUFNN0U7aUJBT1YscUJBekJibHZCLEVBQUV6QixFQUFFeVgsRUF3Qk91WixLQUFPRCxJQUFPMEU7ZUFEWjthQU5OO1dBV1gsU0ExQkV0RixNQURBRixjQUNBRTtxQkFGRTF1QixFQUFFekIsRUFBRXlYLEVBQUVqWSxPQTRCaUQ7YUFFM0RrTjtrQkFFQXFCLGdCQUFXLGdCQUFtQztrQkFFMUNrakIsSUFBSWp4QixFQUFFMDFCLEtBR1Y1TTtXcEM1SFQsR29DNEhTQTthQUNVLElBRFFuQyxFQUFsQm1DLEtBQWV0cEIsRUFBZnNwQixLQUFZclIsRUFBWnFSLEtBQVN2cEIsRUFBVHVwQixLQUFNcm5CLEVBQU5xbkIsS0FDVSxvQkFKRjlvQixFQUdDVDthQUNDLFNBQUpnRCxFQUVGLE9BSFFrVixNQUhGaWUsS0FHVjVNLEtBQU1ybkIsRUFIRXpCLEVBQUUwMUIsS0FHS2wyQixFQUFHbW5CO2FBSVgsUUFIRHBrQixHQU9PLElBQUxvdUIsR0FBSyxJQVhMM3dCLEVBQUUwMUIsS0FHS2wyQixHQVFGLE9BUkVBLE1BUVBteEIsR0FSUjdILEVBUzJCLElBVHJCcm5CLEVBQUdsQyxFQUFHa1ksRUFRSmtaO2FBUEUsSUFJRkosR0FBSyxJQVJMdndCLEVBQUUwMUIsS0FHSmowQjthQUtPLE9BTFBBLE1BS0U4dUIsR0FMUnpILEVBTTJCLElBRG5CeUgsR0FMQ2h4QixFQUFHa1ksRUFBR2pZO1dBRGIsWUFGTVEsRUFBRTAxQjtrQkFjTi9tQixLQUFLM087V3BDdklsQjs7O2VvQzJJbUI7Z0JBREtSO2dCQUFIaVk7Z0JBQUhsWTtnQkFBSGtDO2dCQUNJLG9CQUpEekIsRUFHQVQ7ZUFDQyxTQUFKZ0QsRUFDVSxPQUZKa1Y7ZUFDRixJQUVILGFBRkRsVixFQURTL0MsRUFBVGlDLFVBQVNzZ0I7O2FBRGI7a0JBZUU0UixXQVRxQnQwQjtXcEMvSWxDOzs7O2dCb0MySndCdXlCO2dCQUFIM047Z0JBQUh6YjtnQkFBSDRQO2VBQ0QsY0Fib0IvWSxFQVloQm1KOytCQUFHeWIsVUFBTjdMOzs7eUJBVFM1WSxXQUFIaVksV0FBSGxZLFdBQUhrQztxQkFDRCxjQUpvQnBDLEVBR2hCRSxnQkFBR2tZLFFBQU5oVzsrQkFBU2pDOzttQkFEYjsyQkFVYW95Qjs7YUFEYjtrQkFnQkVnQyxlQVR5QnYwQjtXcENqS3RDOzs7O2dCb0M2S3dCdXlCO2dCQUFIM047Z0JBQUh6YjtnQkFBSDRQO2VBQ0QsY0Fid0IvWSxFQVlwQm1KOytCQUFHeWIsVUFBTjdMOzs7eUJBVFM1WSxXQUFIaVksV0FBSGxZLFdBQUhrQztxQkFDRCxjQUp3QnBDLEVBR3BCRSxnQkFBR2tZLFFBQU5oVzsrQkFBU2pDOzttQkFEYjsyQkFVYW95Qjs7YUFEYjtrQkFnQkVpQyxVQVRvQngwQjtXcENuTGpDOzs7O2dCb0MrTHdCdXlCO2dCQUFIM047Z0JBQUh6YjtnQkFBSDRQO2VBQ0QsY0FibUIvWSxFQVlmbUo7K0JBQUd5YixVQUFHMk47Ozt5QkFUQXB5QixXQUFIaVksV0FBSGxZLFdBQUhrQztxQkFDRCxjQUptQnBDLEVBR2ZFLGdCQUFHa1ksUUFBR2pZOytCQUFUaUM7O21CQURKOzJCQVVJMlc7O2FBREo7a0JBZ0JFMGIsY0FUd0J6MEI7V3BDck1yQzs7OztnQm9DaU53QnV5QjtnQkFBSDNOO2dCQUFIemI7Z0JBQUg0UDtlQUNELGNBYnVCL1ksRUFZbkJtSjsrQkFBR3liLFVBQUcyTjs7O3lCQVRBcHlCLFdBQUhpWSxXQUFIbFksV0FBSGtDO3FCQUNELGNBSnVCcEMsRUFHbkJFLGdCQUFHa1ksUUFBR2pZOytCQUFUaUM7O21CQURKOzJCQVVJMlc7O2FBREo7a0JBT0UyYixTQUFTL3pCO1dwQ3ZOdEI7Oztlb0MyTm1CO2dCQURLUjtnQkFBSGlZO2dCQUFIbFk7Z0JBQUhrQztnQkFDSSxvQkFKR3pCLEVBR0pUO2VBQ0MsU0FBSmdELEVBQ1UsVUFGSmtWO2VBQ0YsSUFFSCxhQUZEbFYsRUFEUy9DLEVBQVRpQyxVQUFTc2dCOzthQURiO2tCQU1FaVEsSUFBSWh5QjtXcEMvTmpCOzs7ZW9DbU9tQjtnQkFERVI7Z0JBQUhEO2dCQUFIa0M7Z0JBQ0ksb0JBSkZ6QixFQUdDVDtnQkFDQyxXQUFKZ0Q7ZUFBSSxRQUZSO2VBRVEsSUFERXdmLGFBQ054ZixFQURNL0MsRUFBTmlDLFVBQU1zZ0I7O2FBRFY7a0JBS0U0VDtXcEN0T2I7V29Dc08yQjs7OzttQkFFQWxlLGFBQUhsWTsyQkFBR2tZO2FBRFQsZ0JBRWdCO2tCQUVyQm1lO1dwQzNPYjtXb0MyTytCOzs7O21CQUVKbmUsYUFBSGxZOzhCQUFHa1k7YUFEVCxTQUVtQjtrQkFFeEJvZTtXcENoUGI7V29DZ1AyQjs7OEJBR04sK0JBQU45VDttQkFER3RLLGFBQUhsWTsyQkFBR2tZO2FBREEsZ0JBRWdCO2tCQUVyQnFlO1dwQ3JQYjtXb0NxUCtCOzs4QkFHViwrQkFBTi9UO21CQURHdEssYUFBSGxZOzhCQUFHa1k7YUFEQSxTQUVvQjtrQkFFekJzZTtXQUFxQjs7O21CQUdWdjJCLFdBQUhpWSxXQUFIbFk7ZUFBZ0Isb0NBQWhCQSxFQUFHa1ksRUFBR2pZO2FBRE0sSUFBTm95QjthQUFNLE9BQU5BO1dBRE4sMENBRTRDO3VCQUUvQ3JZLEdBQUdGO1dBQ1gsR0FEUUU7YUFLSixHQUxPRjtlQUtNLHNCQUxOQSxJQUtNO2VBQ0YsV0FOUEUsR0FLQ3ZaLEVBQUd5WCxFQUNHLG1CQU5KNEI7YUFHSyxPQUhSRTtXQUVRLE9BRkxGLEVBTTJCO2tCQUVoQzRZLE9BQU9qeUIsRUFHWDhvQjtXcEMxUVQsR29DMFFTQTthQUNVLElBRE10cEIsRUFBaEJzcEIsS0FBYXJSLEVBQWJxUixLQUFVdnBCLEVBQVZ1cEIsS0FBT3JuQixFQUFQcW5CLEtBQ1Usb0JBSkM5b0IsRUFHRFQ7YUFDQSxTQUFKZ0QsRUFDVSxZQUZUZCxFQUFTakM7YUFHVCxRQUZEK0MsR0FLTyxJQUFMb3VCLEdBQUssT0FURjN3QixFQUdLUixHQU1ILE9BTkdBLE1BTVJteEIsR0FOUjdILEVBTWtELElBTjNDcm5CLEVBQUdsQyxFQUFHa1ksRUFNTGtaO2FBTEUsSUFHRkosR0FBSyxPQVBGdndCLEVBR0p5QjthQUlNLE9BSk5BLE1BSUM4dUIsR0FKUnpILEVBSWtELElBQTFDeUgsR0FKRWh4QixFQUFHa1ksRUFBR2pZO1dBRGQ7a0JBU0V3MkIsT0FBT2gyQixFQUFFWCxFQU1ieXBCO1dwQ3hSVCxHb0N3UlNBO2FBQ1UsSUFEUW5DLEVBQWxCbUMsS0FBZXRwQixFQUFmc3BCLEtBQVlyUixFQUFacVIsS0FBU3ZwQixFQUFUdXBCLEtBQU1ybkIsRUFBTnFuQixLQUNVLG9CQVBDOW9CLEVBTUZUO2FBQ0MsU0FBSmdEO2VBRUkscUJBVEdsRCxLQU1Eb1k7ZUFHRjtpQkFHRixJQURHaWUsY0FDSCxPQU5JamUsTUFLRGllLEtBTFg1TSxLQUFNcm5CLEVBTkt6QixFQVdBMDFCLEtBTElsMkIsRUFBR21uQjtlQUlKLFlBSlJsbEIsRUFBU2pDO2FBT0osUUFOTCtDLEdBVU8sSUFBTG91QixHQUFLLE9BakJGM3dCLEVBQUVYLEVBTUVHLEdBV0YsT0FYRUEsTUFXUG14QixHQVhSN0gsRUFZMkIsSUFackJybkIsRUFBR2xDLEVBQUdrWSxFQVdKa1o7YUFWRSxJQU9GSixHQUFLLE9BZEZ2d0IsRUFBRVgsRUFNUG9DO2FBUU8sT0FSUEEsTUFRRTh1QixHQVJSekgsRUFTMkIsSUFEbkJ5SCxHQVJDaHhCLEVBQUdrWSxFQUFHalk7V0FKRCx1QkFGREg7V0FFQyxZQUVHLElBQVI0MkIsa0JBQVEsWUFKTmoyQixFQUlGaTJCO1dBREc7a0JBaUJSdHpCLEtBQUt0RDtXcEN0U2xCOzs7bUJvQ3dTd0JHLGFBQUhpWSxhQUFIbFksYUFBSGtDO2VBQ0osS0FIT3BDLEVBRUhvQztlQUNNLFdBSEhwQyxFQUVBRSxFQUFHa1k7MkJBQUdqWTs7YUFETjtrQkFJTCtJLElBQUlsSjtXcEMzU2pCO2FvQytTb0I7Y0FET3NuQjtjQUFIbm5CO2NBQUhpWTtjQUFIbFk7Y0FBSGtDO2NBQ0ssUUFKSHBDLEVBR0ZvQztjQUVLLGVBTEhwQyxFQUdJb1k7Y0FHRCxRQU5IcFksRUFHT0c7YUFHSixVQUZMNFksSUFERzdZLEVBRUgwa0IsSUFDQTJOLElBSFlqTDtXQURoQjtrQkFPRXpXLEtBQUs3UTtXcENwVGxCO2FvQ3dUb0I7Y0FET3NuQjtjQUFIbm5CO2NBQUhpWTtjQUFIbFk7Y0FBSGtDO2NBQ0ssU0FKRnBDLEVBR0hvQztjQUVLLGVBTEZwQyxFQUdBRSxFQUFHa1k7Y0FHRCxTQU5GcFksRUFHTUc7YUFHSixVQUZMNFksSUFERzdZLEVBRUgwa0IsSUFDQTJOLElBSFlqTDtXQURoQjtrQkFPRWxlLEtBQUtwSixFQUFFeXBCLEVBQUV2a0I7ZUFBRjJ4QixNQUFFenhCO1dBQ2Y7Z0JBRGF5eEI7ZUFJQTtnQkFESTEyQixFQUhKMDJCO2dCQUdDemUsRUFIRHllO2dCQUdGMzJCLEVBSEUyMkI7Z0JBR0x6MEIsRUFIS3kwQjtnQkFJQSxrQkFKRjcyQixFQUdBRSxFQUFHa1ksRUFDTSxLQUpUcFksRUFHSG9DLEVBSE9nRDtnQkFBRnl4QixJQUdJMTJCO2dCQUhGaUY7O2FBRUosT0FGSUEsT0FJcUI7a0JBRTlCK0osUUFBUUM7V3BDblVyQjs7O2VvQ3FVOEI7Z0JBQU5qUDtnQkFBSGlZO2dCQUFIbFk7Z0JBQUhrQztnQkFBZSxnQkFGVGdOLEVBRUhsUCxFQUFHa1k7ZUFBUztpQkFBUyxpQkFGbEJoSixFQUVOaE47aUJBQXdCLHFCQUFmakM7aUJBQWU7OztlQURyQjs7a0JBR0xrUCxPQUFPRDtXcEN2VXBCOzs7ZW9DeVU4QjtnQkFBTmpQO2dCQUFIaVk7Z0JBQUhsWTtnQkFBSGtDO2dCQUFlLGdCQUZWZ04sRUFFRmxQLEVBQUdrWTtlQUFTOzs7aUJBQVMsZ0JBRm5CaEosRUFFTGhOO2lCQUF3Qix1QkFBZmpDO2lCQUFlO2VBRHJCOztrQkFXTDIyQixnQkFBZ0JDLEVBQUVwMkI7V3BDblYvQjtpQm9DcVZ3QlIsV0FBSGlZLFdBQUhsWSxXQUFIa0M7YUFDRiwyQkFIZ0IyMEIsRUFBRXAyQixFQUVoQnlCLEdBQUdsQyxFQUFHa1ksRUFBR2pZO1dBRE4saUJBRFc0MkIsRUFBRXAyQjtrQkFLbEJxMkIsZ0JBQWdCRCxFQUFFcDJCO1dwQ3hWL0I7aUJvQzBWd0JSLFdBQUhpWSxXQUFIbFksV0FBSGtDO2FBQ0ksV0FESkEsRUFBR2xDLEVBQUdrWSxFQUNGLGdCQUhVMmUsRUFBRXAyQixFQUVQUjtXQUROLGlCQURXNDJCLEVBQUVwMkI7a0JBUWxCdVQsS0FBSzlSLEVBQUVsQyxFQUFFa1ksRUFBRWpZO1dBQ2pCLEdBRFdpQztnQkFBTWpDOztnQkFLaUI2eEIsR0FMakI3eEI7Z0JBS1dteEIsR0FMWG54QjtnQkFLS2cyQixHQUxMaDJCO2dCQUtEb3hCLEdBTENweEI7Z0JBS1BxeEIsR0FMT3J4QjtnQkFJaUI4eEIsR0FKdkI3dkI7Z0JBSWlCNHVCLEdBSmpCNXVCO2dCQUlXNnpCLEdBSlg3ekI7Z0JBSUs2dUIsR0FKTDd1QjtnQkFJRDh1QixHQUpDOXVCO3VCQUt1QjR2QixjQURBQzt3QkFFRyxJQUYzQmYsR0FBTUQsR0FBTWdGLEdBRWUsS0FGVGpGLEdBSmY5d0IsRUFBRWtZLEVBQUVqWTt5QkFJaUI4eEIsY0FDQUQ7MEJBRU4sU0FQakI1dkIsRUFBRWxDLEVBQUVrWSxFQUtMb1osSUFBTUQsR0FBTTRFLEdBQU03RTswQkFHeEIsT0FST2x2QixFQUFFbEMsRUFBRWtZLEVBQUVqWTthQUdELHVCQUhIRCxFQUFFa1ksRUFBSmhXO1dBRUssdUJBRkhsQyxFQUFFa1ksRUFBRWpZLEVBUUM7a0JBTWhCOE4sT0FBT2lNLEdBQUdGO1dBQ1osR0FEU0U7YUFLTCxHQUxRRjtlQUtLLHNCQUxMQSxJQUtLO2VBQ0QsWUFOUEUsR0FLQXZaLEVBQUd5WCxFQUNJLG1CQU5KNEI7YUFHSSxPQUhQRTtXQUVPLE9BRkpGLEVBTTJCO2tCQUVyQ2lkLGVBQWUvYyxHQUFHaGEsRUFBRWtZLEVBQUU0QjtXQUN4QixHQURzQjVCLEdBRVYsSUFBTHdNLElBRmV4TSxLQUVWLFlBRks4QixHQUFHaGEsRUFFYjBrQixJQUZpQjVLLElBR2QsY0FIT0UsR0FBT0YsR0FHRjtrQkFFaEJ3WSxNQUFNN3hCO1dwQzNYbkI7YW9DK1htQjtjQURLUjtjQUFIaVk7Y0FBSGxZO2NBQUhrQztjQUNJLG9CQUpBekIsRUFHRFQ7YUFDQyxTQUFKZ0QsRUFDVSxVQUZWZCxLQUFNZ1csR0FBR2pZO2FBR1IsUUFGRCtDO2VBS21CLGdCQVRmdkMsRUFHS1IsR0FNVTtlQUFjLGVBTmpDaUMsRUFBR2xDLEVBQUdrWSxFQU1INFksSUFBSXlCLEtBQU1uQjthQUxUO2NBR2UsY0FQZjN3QixFQUdKeUI7Y0FJbUI7OzthQUF3QixVQUF4Qzh1QixHQUFJd0IsT0FBb0MsS0FBOUJsQixHQUpWdHhCLEVBQUdrWSxFQUFHalk7V0FEYjtrQkFTRTJqQixNQUFNOWpCLEVBQUV3QixHQUFHQztXQUNqQixHQURjRDtpQkFHcUIyWSxHQUhyQjNZLE1BR2V3VSxHQUhmeFUsTUFHUzAxQixHQUhUMTFCLE1BR0drVCxHQUhIbFQsTUFHSEUsR0FIR0Y7YUFHd0MsVUFIckNDLE9BR2tCMFk7ZUFDWjs0QkFETnpGLEdBSEFqVDtnQkFJTTs7O2dCQUNtQyxXQUw5Q3pCLEVBR2lCZ1csR0FDWjhjO2dCQUNxQixnQkFMMUI5eUIsRUFHSzBVLE1BQU13aUIsSUFDVkM7ZUFDTSw0QkFMUG4zQixFQUdEMEIsR0FDRkMsSUFEUStTOztZQURHLEtBRkhqVCxHQUVHO2NBRkhBO2FBT007Y0FEU3N4QixLQU5mdHhCO2NBTVMyMUIsS0FOVDMxQjtjQU1HK0gsR0FOSC9IO2NBTUgyWCxLQU5HM1g7Y0FPTSxjQURIK0gsR0FOTmhJO2NBT1M7OztjQUNtQyxXQVI5Q3hCLEVBT0tnekIsS0FEZUQ7Y0FFTSxnQkFSMUIveUIsRUFNUXdKLEdBQ1A2dEIsUUFEYUQ7YUFFUCw0QkFSUHAzQixFQU9IbVosS0FES0MsTUFBTTVQO1dBSWhCLDRCQUFZO2tCQUVWcXBCLE1BQU03eUIsRUFBRXdCLEdBQUdDO1dBQ2pCLEdBRGNEO2dCQUFHQzs7Z0JBSWtCd1ksR0FKbEJ4WTtnQkFJWXF4QixHQUpacnhCO2dCQUlNMDFCLEdBSk4xMUI7Z0JBSUErSCxHQUpBL0g7Z0JBSU5FLEdBSk1GO2dCQUdrQjBZLEdBSHJCM1k7Z0JBR2V3VSxHQUhmeFU7Z0JBR1MwMUIsR0FIVDExQjtnQkFHR2tULEdBSEhsVDtnQkFHSEUsR0FIR0Y7a0JBSXFCeVksTUFEQUU7aUJBR1Y7OEJBSFJ6RixHQUhBalQ7a0JBTVE7OztrQkFDWCxRQVBGekIsRUFHRDBCLEdBR0EwWDtrQkFDeUIsUUFQeEJwWixFQUdpQmdXLEdBR1YrYztpQkFDaUIsR0FEckJxRTttQkFJSSxJQUFORSxLQUpFRjttQkFJd0Isc0JBSDdCaDFCLEVBSk9zUyxHQU9zQixXQVYzQjFVLEVBR0swVSxHQUFNd2lCLEdBT1ZJLE1BSG1CbjNCO2lCQUVoQixZQUZOaUMsRUFKT3NTLEdBQU13aUIsR0FJUy8yQjtlQUtQOzhCQVJScUosR0FKSGhJO2dCQVlXOzs7Z0JBQ1gsVUFiRnhCLEVBWURtWixLQVJBeFg7Z0JBU3lCLFVBYnhCM0IsRUFZT2d6QixLQVJVRjtlQVNPLEdBRHJCdUU7aUJBSUksSUFBTkUsS0FKRUY7aUJBSXdCLHNCQUg3QnRlLElBVE92UCxHQVlzQixXQWhCM0J4SixFQUlLd0osR0FZSit0QixLQVpVSixJQVNTNUU7ZUFFaEIsWUFGTnhaLElBVE92UCxHQUFNMnRCLEdBU1M1RTtpQkFYdEIveEIsRUFGSWdCOztnQkFFSmhCLEVBRk9pQjtXQUVZLE9BQW5CakIsQ0FjMkM7a0JBRS9Dd04sT0FBT29CLEVBRVhxYTtXcEN0YVQsR29Dc2FTQTthQUVXO2NBRkl0cEIsRUFBZnNwQjtjQUFZclIsRUFBWnFSO2NBQVN2cEIsRUFBVHVwQjtjQUFNcm5CLEVBQU5xbkI7Y0FFVyxXQUpBcmEsRUFFTGhOO2NBR00sZUFMRGdOLEVBRUZsUCxFQUFHa1k7Y0FJRCxXQU5BaEosRUFFSWpQO2FBSUosR0FETHEzQjtrQkFIQXAxQixNQUVBMlcsT0FGUzVZLE1BSVRveUIsSUFDK0IsT0FMckM5SSxFQUs0QyxZQUh0QzFRLElBRkc3WSxFQUFHa1ksRUFJTm1hO2FBRUMsY0FKRHhaLElBRUF3WjtXQUxHO2tCQVNMemtCLFdBQVc5TjtXcEM5YXhCO2FvQ2tib0I7Y0FGSUc7Y0FBSGlZO2NBQUhsWTtjQUFIa0M7Y0FFSyxlQUpJcEMsRUFFVG9DO2NBR00sZUFMR3BDLEVBRU5FLEVBQUdrWTtjQUlELGVBTklwWSxFQUVBRzthQUlKLEdBRExzM0IsS0FHVyxJQUFON1MsSUFITDZTLE9BR1csWUFKWDFlLElBRkc3WSxFQU1FMGtCLElBRkwyTjthQUdRLGNBTFJ4WixJQUVBd1o7V0FMRztrQkFXTDNmLFVBQVV4RDtXcEMxYnZCO2FvQzhiMEI7Y0FGRmpQO2NBQUhpWTtjQUFIbFk7Y0FBSGtDO2NBRVcsZ0JBSkhnTixFQUVSaE47Y0FFVzs7Y0FDTCxlQUxFZ04sRUFFTGxQLEVBQUdrWTtjQUlLLGtCQU5IaEosRUFFQ2pQO2NBSUU7O2dCQURYcTNCLEtBR2tCLGdCQUpiekQsR0FFQUUsSUFFSCxlQUpERCxHQUZFOXpCLEVBQUdrWSxFQUlMOGI7YUFGVSxTQUtLLEtBTFhILEdBRkY3ekIsRUFBR2tZLEVBSUQ2YjthQUdILGlCQUxERCxHQUVBRTtXQUxFO2tCQVlMZCxVQUFVM0osRUFBRXpnQjtlQUFGNnRCLE1BQUVqVDtXQUNsQjtnQkFEZ0JpVDs7Z0JBR0MxMkIsRUFIRDAyQjtnQkFHRnplLEVBSEV5ZTtnQkFHTDMyQixFQUhLMjJCOztnQkFBRXZELE9BR1BwekIsRUFBR2tZLEVBQUdqWSxFQUhDeWpCO2dCQUFGaVQ7Z0JBQUVqVDs7YUFFUCxPQUZPQSxJQUdtQztrQkFFbkRsYSxRQUFRd0csSUFBSXluQixHQUFHQztXQVlpQixtQkFaakJBLE1BWUYsZUFaREQsTUFDTXJ1QixRQUFHQztXQUNuQjtnQkFEZ0JEO2tCQUFHQztpQkFNVDtrQkFEOEJrcUIsS0FMckJscUI7a0JBS2lCdXBCLEdBTGpCdnBCO2tCQUthNHRCLEdBTGI1dEI7a0JBS1NDLEdBTFREO2tCQUtEbXFCLEtBTEZwcUI7a0JBS0YwTSxHQUxFMU07a0JBS040dEIsR0FMTTV0QjtrQkFLVm9MLEdBTFVwTDtrQkFNTixvQkFESm9MLEdBQXNCbEw7aUJBQ2xCLFNBQUp0RzttQkFFSSxJQUFKNlgsSUFBSSxXQVRKN0ssSUFNSWduQixHQUFzQkM7bUJBR3RCLFNBQUpwYztxQkFFMEI7cUNBTEkrWCxHQUFJVztzQkFLMUIsZUFMQXpkLEdBQUkwZDtzQkFMRnBxQjtzQkFBR0M7O21CQVNGLE9BRFh3UjtpQkFEVyxPQURYN1g7ZUFGTTthQURDLE9BSE1xRyxRQVc2QjtrQkFFbERGLE1BQU02RyxJQUFJeW5CLEdBQUdDO1dBU2lCLG1CQVRqQkEsTUFTRixlQVRERCxNQUNNcnVCLFFBQUdDO1dBQ2pCO2dCQURjRDtrQkFBR0M7aUJBTWY7a0JBRHNDa3FCLEtBTHZCbHFCO2tCQUttQnVwQixHQUxuQnZwQjtrQkFLZTR0QixHQUxmNXRCO2tCQUtXQyxHQUxYRDtrQkFLQ21xQixLQUxKcHFCO2tCQUtBME0sR0FMQTFNO2tCQUtKNHRCLEdBTEk1dEI7a0JBS1JvTCxHQUxRcEw7a0JBTVosNkJBRElvTCxHQUFzQmxMO2lCQUMxQjttQkFBeUIsb0JBUHZCMEcsSUFNTWduQixHQUFzQkM7bUJBQ0w7cUJBQ0c7cUNBRk1yRSxHQUFJVztzQkFFNUIsZUFGRXpkLEdBQUkwZDtzQkFMSnBxQjtzQkFBR0M7O21CQU1VOzs7aUJBRmY7O2FBREMsT0FISUEsT0FRNkI7a0JBRTVDNHFCO1dBQVc7YUFFaUIsSUFBdkJoMEIsV0FBSGlDLFdBQTBCLGNBQXZCakM7YUFBTSxpQkFBVGlDO1dBREcsUUFDaUM7a0JBRXRDeTFCOzs7O2VBRXlDO2dCQUE5QjEzQjtnQkFBSGlZO2dCQUFIbFk7Z0JBQUhrQztnQkFBdUMsYUFBcENsQyxFQUFHa1ksR0FBaUMsb0JBQTlCalk7O3dCQUFUaUM7O2FBREc7a0JBR1QwMUIsU0FBU3QzQixHQUNYLHNCQURXQSxFQUNNO2tCQU1maTFCLFFBQVEzNUIsRUFBRTJ0QjtXQUNaOzZCQUFtQkE7c0JBQUwscUNBQVFzTixFQUFFNzJCLEVBQUx1cEIsRUFBcUI7b0JBRDVCQTtvQkFBRjN0QixFQUNrQztrQkFFMUM0NUIsT0FBTzU1QixHQUFJLGVBQUpBLEVBbFlQdVIsTUFrWTBCO2tCQUV0QnNvQixZQUFhenlCO1dBQU8sR0FBUEE7YUFFa0MsSUFBdkNsSCxLQUZLa0gsS0FFUDRKLEVBRk81SixLQUVUaEQsRUFGU2dELEtBRVg2ekIsRUFGVzd6QixLQUVrQyxlQUF6QzRKLEVBQUU5UTthQUEwQixhQUFoQys2QixFQUFFNzJCLGtCcEMzZmpCLE9vQ3lmYXkxQjtXQUNHLFFBQytEO2tCQUV0RTVnQixPQUFPMFU7V0FDSSxtQkFESkE7V0FDSSxzQnBDOWZwQixPb0N5ZmFrTSx1QkFLd0I7a0JBRXhCQyxVQUFVcDFCLEVBQUV3STtlQUFGK0gsTUFBRTZTO1dBQ2xCO2dCQURnQjdTOzs7Z0JBR0hxSCxFQUhHckg7Z0JBR043USxFQUhNNlE7Z0JBR1QzTyxFQUhTMk87Z0JBQUV1aUIsT0FHUnB6QixFQUFHa1ksRUFBTmhXLEVBSFd3aEI7Z0JBQUY3UztnQkFBRTZTOzthQUVQLE9BRk9BLElBR2tDO2tCQUU5Q2lTLGdCQUFpQjN5QjtXQUFPLEdBQVBBO2FBR2UsSUFEeEJsSCxLQUZTa0gsS0FFWDRKLEVBRlc1SixLQUViaEQsRUFGYWdELEtBRWY2ekIsRUFGZTd6QixLQUdlLGVBRDFCNEosRUFBRTlRO2FBQ087d0JBRGIrNkIsRUFBRTcyQjtvQ3BDdmdCakIsT29DcWdCYTIxQjtXQUNHLFFBRWdEO2tCQUV2REMsV0FBVzV5QjtXQUNJLG1CQURKQTtXQUNJLHNCcEMzZ0J4QixPb0NxZ0JhMnlCLDJCQU00QjtrQkFFaENFLFlBQVlDLElBQUl2TTtlQUNGb04sSUFERXBOLEVBQ0F2bUI7V0FBSTtnQkFBTjJ6QjtlQUdFO2dCQURDMTJCLEVBRkgwMkI7Z0JBRUF6ZSxFQUZBeWU7Z0JBRUgzMkIsRUFGRzIyQjtnQkFFTnowQixFQUZNeTBCO2dCQUdFLG9CQURMMzJCLEVBSEM4MUI7ZUFJSSxTQUVSMTFCO2lCQUFPLFFBQVBBLEdBQ0ssV0FKRkosRUFBR2tZLEVBQUdqWSxFQUZEK0MsR0FBRjJ6QixJQUVOejBCLEVBRlFjO3FCQUFGMnpCLElBRUcxMkI7O2VBQ0QsWUFETEQsRUFBR2tZLEVBQUdqWSxFQUZEK0M7OzttQ3BDOWdCekIsT29DeWZheXlCLHdCQThCc0I7O2lCQWxhMUJ0b0I7aUJBRUFxQjtpQkF3R0lpa0I7aUJBdEdBZjtpQkF5SkErRTtpQkE3TEo5RTtpQkFrTEllO2lCQStIQTlPO2lCQVlBK087aUJBMERKbnBCO2lCQWNBTDtpQkFwTEkvRjtpQkF1QkE4RjtpQkFNQStGO2lCQUlBRTtpQkE2RkFyQjtpQkFVQUY7aUJBWUE4RTtpQkEyQ0F1aEI7aUJBUUoyRDtpQkF2UUl4QjtpQkFLQUM7aUJBS0FDO2lCQUtBQztpQkFmQUg7aUJBS0FDO2lCQWdKQS9EO2lCQXBQQWxqQjtpQkFnRkFvbEI7aUJBL0RBSjtpQkFrQkFDO2lCQWtCQUM7aUJBa0JBQztpQkE2RkF2ckI7aUJBU0EySDtpQkF5TUprRTtpQkFhQStnQjtpQkFHQUM7aUJBekJBTjtpQkFHQUM7SUFsYkc7SUZxQkc7YUd0RVZxQyxnQkFBWSxjQUFvQjthQUVoQ0MsTUFBTXgzQixHQUFJLDBCQUFxQjthQUUvQnkzQixPQUFLejNCLEdBQUksVUFBSkEsVUFBNkI7YUFFbEMwM0IsS0FBS3YzQixFQUFFSCxHQUFJLFVBQU5HLEVBQUVILE1BQUksT0FBSkEsYUFBSSxRQUFtQzthQUU5QzIzQixJQUFJMzNCO01BQ04sU0FETUE7TUFDTjtZQUNNaUMsV0FBSkMsV0FGSWxDLE9BRUFpQyxHQUZBakMsMkJBRUprQztNQUNVLFdBQVc7YUFFckIwMUIsUUFBUTUzQjtNQUNWLFNBRFVBO01BQ1Y7WUFDTWlDLFdBQUpDLFdBRlFsQyxPQUVKaUMsR0FGSWpDLDhCQUVSa0M7TUFDVSxRQUFJO2FBRWQyMUIsSUFBSTczQjtNQUNOLFNBRE1BLEtBQ04sU0FDVyxJQUFUa0MsV0FBUyxPQUFUQSxHQUNTLFdBQVc7YUFFcEI0MUIsUUFBUTkzQjtNQUNWLFNBRFVBLEtBQ1YsU0FDVyxJQUFUa0MsV0FBUyxVQUFUQSxJQUNTLFFBQUk7YUFFYjYxQixXQUFTLzNCLEdBQUksYUFBSkEsUUFBYzthQUV2Qmc0QixTQUFPaDRCLEdBQUksT0FBSkEsSUFBUzthQUVoQmk0QixPQUFLejRCLEVBQUVRLEdBQUksY0FBTlIsRUFBRVEsS0FBbUI7YUFFMUJrNEIsT0FBSzE0QixFQUFFb08sSUFBSTVOLEdBQUksbUJBQVZSLEVBQUVvTyxJQUFJNU4sS0FBNEI7YUFJdkNtNEIsU0FBT240QixHQUFJLGdCQUFKQSxLQUFtQjthQUUxQmkxQixRQUFRNUwsRUFBRS90QixHQUFJLHFCQUFjNkUsR0FBSyxZQUFMQSxFQUFwQmtwQixFQUFpQyxFQUEvQi90QixFQUFrQzthQUU1Qzg4QixTQUFPcFgsR0FDRCxJQUFKaGhCLEVBQUksWUFDUixRQURJQSxFQURLZ2hCLEdBRVQsT0FESWhoQixDQUVIOzs7OztPQTdDQ3UzQjtPQU1BRztPQUVBQztPQUtBQztPQUtBQztPQUtBQztPQXJCQU47T0FFQUM7T0F3QkFNO09BRUFDO09BRUFDO09BRUFDO09BSUFDO09BRUFsRDtPQUVBbUQ7OzthQ2pDQUMsZ0JBQVksZ0JBSWY7YUFFR0MsUUFBTWpQLEdBQ1IsbUNBRWE7YUFFWCtILElBQUlqeEIsRUFBRWtwQjtNQUNSLFlBRE1scEIsS0FDTixLQURRa3BCO01BQ1I7Z0JBRFFBLDhCQUNKa1AsS0FESWxQLE9BQ0prUDtnQkFESWxQLGdCQUNKa1AsS0FESWxQLE9BQ0prUCxPQVlZO2FBS2RDLEtBQUtuUDtNQUNQLFNBRE9BLEtBQ1AsU0FFc0IsSUFBYm9QLGdCQUFhLE9BQWJBLFFBREEsYUFDb0I7YUFFM0JDLFNBQVNyUDtNQUNYLFNBRFdBLEtBQ1gsU0FFc0IsSUFBYm9QLGdCQUFhLFVBQWJBLFNBREEsUUFDeUI7YUFLaENFLE9BQUt0UDtNQUNQLFNBRE9BO01BQ1A7OztjQUtrQnJjLGFBTlhxYywyQkFNV3JjO1FBRmhCLFFBSktxYztRQUlMO01BRk8sYUFPQTthQUVQdVAsU0FBU3ZQO01BQ1gsU0FEV0E7TUFDWDs7O2NBS2tCcmMsYUFOUHFjLDJCQU1PcmM7UUFGaEIsUUFKU3FjO1FBSVQ7TUFGTyxRQU9LO2FBS1p3UCxPQVlFeFA7TUFBSyxhQUFMQSxVQVhlMFAsT0FBS1IsS0FXcEJsUDtNQVZGO1dBRHNCa1A7Y0FHYkUsUUFIYUYsUUFHSnZyQixLQUhJdXJCLFFBSWhCMXpCLE9BREc0ekI7YUFIUU0sS0FPSCxVQUhSbDBCLFNBRUssV0FGTEE7Y0FKV2swQixLQUlYbDBCLElBSmdCMHpCLEtBR0p2ckI7O1FBRFQsV0FGUStyQjtRQUVSLE9BRkVELE1BVzJEO2FBRXRFRSxXQUFTM1AsR0FDWCxhQURXQSxRQUNDO2FBRVY0UCxTQUFPNVAsR0FDVCxPQURTQSxJQUNEO2FBRU42UCxPQVFFMTVCLEVBQUU2cEI7TXRDNUhULElzQ3FIa0JrUCxLQU9UbFA7TUFOSjtXQURha1A7Y0FHSkUsUUFISUYsUUFHS3ZyQixLQUhMdXJCO1VBSVgsV0FHQS80QixFQUpPaTVCO2NBSElGLEtBR0t2ckI7O1FBRFQsU0FLYzthQUV2Qm1zQixPQVFFMzVCLEVBQUVrUCxPQUFLMmE7VUFQSTNrQixLQU9UZ0ssT0FQYzZwQixLQU9UbFA7TUFOVDtXQURrQmtQO1VBSUw7V0FESkUsUUFIU0Y7V0FHQXZyQixLQUhBdXJCO1dBSUwsa0JBR1gvNEIsRUFQV2tGLEtBR0orekI7V0FISS96QjtXQUFLNnpCLEtBR0F2ckI7O1FBRFQsT0FGSXRJLEtBT29CO2FBRWpDMDBCLFNBQVNDLEdBQUdDO01BQ2QsYUFEV0Q7TUFDWDtRQUNFLFNBRllDO1FBRVo7a0JBRllBOzs7O2tCQUFIRDs7Ozs7O2tCQUFHQzs7a0JBQUhEO2tCQVNQLFFBVE9BO2tCQUFHQyxRQUFIRCxNQUFHQyxRQUFIRCxNQUFHQyxRQUFIRCxNQUlQLFFBSk9BO2lCQVlDO2FBSVZFLFNBQU9sUTtNQUNULFNBQVF0TyxJQUFJclk7UUFBTyxHQUFQQTtjQUVPdkMsRUFGUHVDLEtBRVVzSyxLQUZWdEs7VUFFa0MsVUFBM0J2QyxpQnRDM0p0QixPc0N5Slc0YSxJQUVjL047UUFEWCxRQUM0QztNQUZ2RCxTQURTcWM7TUFDVCxzQnRDekpILE9zQ3lKV3RPLGVBSUc7YUFFVHllLFVBQVFuUSxFQUFFL3RCLEdBQUkscUJBQWM2RSxHQUFLLFdBQUxBLEVBQXBCa3BCLEVBQWlDLEVBQS9CL3RCLEVBQWtDO2FBRTVDbStCLFNBQU96WSxHQUNELElBQUpxSSxFQUFJLFlBQ1IsVUFESUEsRUFES3JJLEdBRVQsT0FESXFJLENBRUg7Ozs7O09BdklDZ1A7T0FXQWpIOztPQStCQXVIO09BV0FDO09BWEFEO09BYkFIO09BS0FFO09BTEFGO09BdkJBRjtPQTZEQU87T0FjQUc7T0FHQUM7T0FHQUM7T0FVQUM7T0FVQUM7T0FnQkFHO09BT0FDO09BRUFDOzs7OzthQ2pJQUM7TUFBUSw2QkFFREEsNEJBREMsUUFDZTthQUN2QjdEO01BQU8sNkJBRUFBLDBCQURDLFFBQ2E7YUFFckI4RCxVQUFVcjRCO01BQ0gsYUFER0EsWUFDWixxQkFEWUEsT0FDSCxpQkFBcUQ7YUFHeERzNEIsU0FBaURGLE1BQU05aEI7TXZDM0NoRSxJdUMyQ2dFd007TUFBSztrQkFBTEE7U0FBSyxPQUFMQTs7WUFPOUMsSUFESnVTLEdBTmtEdlMsT0FNdERzUyxHQU5zRHRTLE9BTzlDLGVBUHdDc1YsTUFNaERoRDtZQUNRO2tCQVA4Q3RTLElBTWxEdVM7O2NBQ0k7b0JBQ0FrRCxhQUFIOTJCLDBCQUFHODJCLElBRkpsRDtjQUlEOztZQWlCRTtlQTNCaUR2UzthQTJCakQsa0JBQUw1a0I7YUFBSyxpQkFBTEEsa0JuQjNDTHVNLGlCbUIyQ0t2TTthQTNCc0Q0a0I7Ozs7Ozt1QkFjMUQsSUFEc0IwVixZQUN0QixzQkFEc0JBLElBYm9DMVY7Y0FZakM7WUFJYiwrQkFoQndDc1Y7WUFnQnhDLFlBRUEsSUFBTEssZUFBSyxVQUFMQSxJQWxCbUQzVjtZQWlCaEQ7OztZQUtWLElBRE05aUIsRUFyQm9EOGlCO1lBc0IxRCxHQURNOWlCLGFBQ2lCLFVBRGpCQTtZQUM0QixTQUQ1QkEsS0FFYTtZQURuQixJQUVNM0IsRUFBSixzQkFISTJCO1lBR0osT0FISUE7WUFHSixVQUFJM0IsRUF4Qm9EeWtCOztRQUtuQyxPQUxtQ0EsSUEyQnBCO2FBR25DNFYsVUFBNkNoNkI7TUFFcEQ7aUJBRm9EQTtRQUVwRDtTQUNZOztTQURaO2tCQUVrQixJQUFUK0MsVUFBUyxVQUFUQTs7WUFFTyxJQUNWNlUsRUFEVSxTQU5vQzVYO1lBTXBDLFVBQ1Y0WDthQUNVOztjQUZBLFNBQ1ZBLE1BQW9CLElBQWRraUIsSUFBTmxpQixLQUFvQixPQUFwQkEsRUFBb0IsVUFBZGtpQjtjQUVEOztZQUVFOzsrQkFBTHQ2QjthQUFLLGtCQUFMQSxrQm5CekRMdU0saUJtQnlES3ZNO1lBQWU7Ozs7cUJBQ0csSUFBTnU2QixZQUFNLE9BQU5BO1lBQ0EsSUFBSjU1QixFQUFJLG1CQWJnQ0g7WUFhaEMsYUFBSkc7WUFBSSxPQUFKQTs7WUFFWixJQURNbUI7WUFDTixHQURNQSxhQUNpQixVQURqQkE7WUFDNEIsYUFENUJBO3NCQWQwQ3RCO3dCQWlCM0Msc0JBSENzQixhQUdtQzthQUcxQzI0QjtNQUFPLFVBRUcsSUFBTGo2QixXQUFLLGlCQUFMQSxHQURHLFFBQ2E7YUFHakJrNkIsVUFBeUNsNkI7TUFDL0M7aUJBRCtDQTtRQUMvQzs7a0JBQ2tCLElBQU40WCxVQUFNLE9BRjZCNVgsYUFFN0IsT0FBTjRYLEVBQU07Ozt3QkFDZSxPQUhjNVgsYUFHZDs7O1lBRTdCLElBRE1zQjtZQUNOLEdBRE1BLGFBQ2lCLFVBRGpCQTtZQUM0QixhQUQ1QkE7c0JBSnFDdEI7MENBSXJDc0I7O1FBSFYsVUFRVSxVQVRxQ3RCO1FBU3JDO1FBQ0ksU0FDYTthQUd6Qm02QjtNQUFPLFVBRU0sSUFBUnRFLGNBQVEsaUJBQVJBLE1BREcsUUFDbUI7YUFFdkJ1RSxVQUFVdDZCLEVBQUVFO01BQ2xCLE9BRGdCRjtRQUdSLG9CQUhVRTtRQUdWO1VBRUYsSUFERytDO1VBQ0gsVUFMWS9DO1VBS1o7V0FDaUIsa0JBTlBGLFVBQUVFO1dBTUs7Ozt1QkFGZCtDLEVBRUVzM0IsT0FGRnQzQixFQUVNNlUsR0FBRzJlO1FBQ04sWUFQTXYyQjtNQUNILFlBREdBLE9BT087YUFVdkJzNkIsTUFBTXg2QjtNdkNySVg7UXVDdUllOztTQVJPLGdCQU1YQSxFQUVEc2tCO1NBUlk7OztpQkFRWkEsU0FSSy9nQjtRQUFPLFNBQVZ1VTtRQUFVLE9BQWR5aUI7TUFPSzthQUdScnRCLEtBQUtoTjtNQUNELGlCQURDQTtNQUNELFVBQ00sSUFBTCtDLFdBQUssS0FGTC9DLEdBRUssT0FBTCtDO01BQ0csZUFBYTthQUdyQnczQixRQUFNdjZCLEdBQ0YsaUJBREVBLEdBQ0YsU0FDTSxnQkFDRixRQUFFO2FBR1Z3NkIsT0FBS2g3QixFQUFFaTdCO01BRVA7UUFBTSxpQkFGQ0E7UUFFRCxjQUNDMTNCLFdBQUssS0FITDAzQixNQUdzQixXQUh4Qmo3QixFQUdFdUQ7UUFDRyxTQUVIO2FBS1AyM0IsS0FBS2w3QixHQUFJLHVCQUFKQSxLQUF5RDthQUU5RG03QixVQUFRLzRCO01BQ1Y7TUFBd0IsbUNBQXFCekIsRUFBRXlCLEdBQUssVUFBUHpCLEVBQUV5QixFQUFpQixFQUR0REEsU0FDaUU7YUFHekVnNUIsVUFBVTU2QjtNQUNaLElBQUkwNUI7TUFBSjs7aUJBUUUsSUFBSWgzQixFQVJGZzNCO2lCQVFGLE9BQUloM0IsSUFBSixzQkFUVTFDOzJCQUNSMDVCLGNBVXFCLGdCQVhiMTVCLEVBU04wQzsyQkFHSyxFQUFDO2FBR1ZtNEIsV0FBUzc2QjtNQUNYLElBQUkwNUI7TUFBSjs7aUJBRUUsSUFBSWgzQixFQUZGZzNCO2lCQUVGLE9BQUloM0IsSUFBSixxQkFIUzFDOzJCQUNQMDVCLGNBSXFCLGVBTGQxNUIsRUFHTDBDOzJCQUdLLEVBQUM7YUFHVm80QixXQUFXLzJCO01BRXlCLHFCQUZ6QkEsR0FFeUIsK0JBQXFDO2FBS3pFZzNCLEtBQUt6L0IsRUFBRTBFLEdBQTBDLGNBQTFDQSxHQUFrQyx1QkFBcEMxRSxVQUFvRDthQUN6RDAvQixNQUFNMS9CLEVBQUUwRSxHQUFzQyxrQkFBeEMxRSxFQUF3QyxLQUF0QzBFLEtBQThDO2FBQ3REaTdCLE1BQU0zL0IsR0FBSSxrQkFBSkEsTUFBOEM7YUFFcEQ0L0IsS0FBSzE3QixFQUFFUTtNQUNUOzs7Ozs7bUJBQXVELGNBRDlDQSxHQUNpQyxlQUFLLFdBRHhDUixXQUNzRCxLQUFJO2FBRS9EMjdCLE1BQU0zN0IsRUFBRVE7TUFBSTs7Ozs7O21CQUFpRCxjQUFyREEsR0FBK0MscUJBQWpEUixVQUE2RCxLQUFJO2FBQ3ZFNDdCLE1BQU01N0I7TUFBSSxzQ0FBMkMscUJBQS9DQSxZQUErRDtRQUVyRTY3QjthQUNBQyxNQUFNOTdCO01BQUksc0NBQXlDLHVCQUE3Q0EsS0FBbUQsS0FBRzthQVc1RCs3QixVQUF3RC83QjtNQUF4RDtPQUVVOztPQUZWOztjQUdVb1ksV0FBSDdVO1VBQ0w7VUFDQSxXQUxzRHZELEVBR2pEdUQ7VUFHTDtVQUNBLFVBUHNEdkQsRUFHOUNvWTtVQUlSOztjQUVRK2UsWUFBSkQ7VUFDSjtVQUNBLFVBWHNEbDNCLEVBU2xEazNCO1VBR0o7VUFDQSxVQWJzRGwzQixFQVM5Q20zQjtVQUlSO2dCQUVTO2dCQUNEO2lCQUNHLGlDQUFzQjthQXhCL0I2RSxLQUFnRGg4QixFQUFFUTtNQUN4RDtNQUNBLFVBQVUsTUFGOENBO01BR3hEO01BQ0EsVUFKc0RSLEVBSTFDLEtBSjRDUTtNQUt4RDs2QkFDZ0I7Ozs7OztPQTFEZDA2QjtPQUVBQztPQUlBQztPQWVBQztPQVNBQztPQXpDQU47T0FaQXh0QjtPQU1BdXRCO09BbERBTjtPQW1CQUU7T0FoRkFUO09BcUdBWTtPQWdFQVM7T0FDQUM7T0FDQUM7T0FFQUM7T0FHQUM7T0FDQUM7T0FFQUM7T0FDQUM7T0FJSUU7O2FDckxKQyxTQUFPMzdCO01BQ1Y7Z0JBRFVBO09BRVYsd0JBREk4UTtPQUVKLG9CQURJQztNQUNKLFVBQUk3USxJQURBNlEsSUFDQTdRLEVBQ3NEO2FBRXZEMDdCLFNBQVNwNkIsR0FBSSxrQkFBSkEsWUFBMEM7YUFDbkRxNkIsV0FBU3I2QixHQUFJLFdBQUpBLFlBQW1DO2FBRTVDczZCLE1BQUl0NkIsRUFBRThCLElBQUlDO014Q3hDZixRd0N3Q1dELFlBQUlDLFdBQU4vQixPQUFNK0IsV0FBSkQ7T0FHSCxrQkFIQzlCLEtBQUU4QixJQUFJQztNQUVQLGtDQUNpQzthQUdwQ3c0QixPQUFLcFYsSUFBSXhLLE9BQU9NLElBQUlQLE9BQU8zWTtNeEM5Q2hDOzs7UXdDOENnQ0E7Ozs7UUFBbEI0WTs7O1VBQUp3SyxTQUFzQnBqQixXQUFsQjRZOzs7O1FBQVdEOzs7K0JBQUpPLE9BQVdsWixXQUFQMlk7T0FLcEIsdUJBTEt5SyxPQUFJeEssT0FBT00sSUFBSVAsT0FBTzNZO01BR3hCLG1DQUUrQzthQUdsRHk0QixNQUFJeDZCLEVBQUU4QjtNeEN0RFgsUXdDc0RXQSxVQUFGOUIsUUFBRThCLEtBR0gsNkJBSEM5QixLQUFFOEI7TUFFUCxrQ0FDaUM7YUFHaEMyNEIsU0FBT3o2QixHQUFJLE9BQUpBLElBQWM7YUFFckIwNkIsUUFBTTE2QixHQUFJLGlCQUFlO2FBRXpCMjZCLE1BQU0zNkI7TUFDUixnQkFEUUEsS0FDUiw0QkFEUUEsTUFDUixRQUVpQzthQVUvQjQ2QixPQUFPNTZCLEVBQUU2NkI7TUFDWCxZQURTNzZCLEtBQ1QsUUFEU0EsS0FDVCxXQUNJKzZCOztXQUNBL2UsY0FGQThlLFVBRE9EO1VBSXdCLGlCQUQvQjdlO1FBRUosdUJBRklBO1NBRXFDLElBSnJDOGUsVUFET0Q7VUFPSjs7VUFDQTtRQUVVLElBQWJHLFdBQWEsa0JBUGJoZjtRQVVKLEtBYlNoYyxPQVVMZzdCLGFBVktoN0I7UUFhVCxPQUhJZzdCO1FBR0osT0FWSWhmO1FBVUosSUFiU2hjLE9BQUU2NkIsYUFBRjc2QjtVQWlCVCxJQWhCSTg2QixVQURPRCxhQUFGNzZCLEtBa0JUOztzQ0FBRTthQW9DQWk3QixTQUFTajdCLEVBQUVvQjtNQUNiLElBQUk4NUIsSUFET2w3QjtNQUNYLEdBRFdBLFFBQ1BrN0IsSUFDb0IsT0FGYmw3QjtNQUV1QixzQkFGdkJBLEtBQ1BrN0IsSUFEUzk1QjtNQUVxQixPQUQ5Qjg1QjtNQUM4QixRQUViO1FBRW5CQyw4QkFDQUM7YUFFSUMsZ0JBQWdCcjdCLEVBQUUwTTtNQUN4QjtZQUFJd3VCLElBRGtCbDdCO1FBQ3RCLEdBRHNCQSxRQUNsQms3QixJQUNvQixPQUZGbDdCLEVBSHBCbTdCO1FBSUYsSUFFSTM4QixFQUFJLGdCQUhjd0IsS0FDbEJrN0IsSUFEb0J4dUI7UUFHaEIsU0FBSmxPLEdBRUUsT0FMZ0J3QixFQUhwQm03QjtRQVNHLE9BTERELE1BRUExOEI7UUFHQyxTQUF1QjthQUV0Qjg4QixtQkFBbUJ0N0IsRUFBRTBNO01BQzNCO1lBQUl3dUIsSUFEcUJsN0I7UUFDekIsR0FEeUJBLFFBQ3JCazdCLElBQ29CLE9BRkNsN0IsRUFWdkJvN0I7UUFXRixJQUVJNThCLEVBQUksbUJBSGlCd0IsS0FDckJrN0IsSUFEdUJ4dUI7UUFHbkIsU0FBSmxPLEdBRUUsT0FMbUJ3QixFQVZ2Qm83QjtRQWdCRyxPQUxERixNQUVBMThCO1FBR0MsU0FBdUI7YUFFdEIrOEIsbUJBQW1CdjdCLEVBQUUwTTtNQUMzQjtZQUFJd3VCLElBRHFCbDdCO1FBQ3pCLEdBRHlCQSxRQUNyQms3QixJQUNvQixPQUZDbDdCLEVBbEJ2Qm83QjtRQW1CRixJQUVJNThCLEVBQUksbUJBSGlCd0IsS0FDckJrN0IsSUFEdUJ4dUI7UUFHbkIsU0FBSmxPLEdBRUUsT0FMbUJ3QixFQWxCdkJvN0I7UUF3QkcsT0FMREYsTUFFQTE4QjtRQUdDLFNBQXVCO2FBRTFCZzlCLGNBQWN4N0IsRUFBRXRCLEVBQUUrOEIsT0FBTzE1QjtNQUMzQixTQURvQjA1QjtNQUNwQjs7OzthQUQyQjE1Qjs2Q0FBVHJELEtBQVNxRCxXQUFQMDVCO01BRWY7TUFETCxJQUVJQyxhQUhZMTdCLE9BQVcrQjtNQUV5QixHQUZwQy9CLE9BR1owN0IsYUFDNEIsT0FKaEIxN0IsRUFBVytCO01BSzNCLGlCQUxrQnJELEVBQUUrOEIsT0FBSno3QixVQUFXK0I7TUFLM0IsT0FGSTI1QjtNQUVKLFFBQzBCO2FBRXhCQyxhQUFhMzdCLEVBQUV0QixFQUFFKzhCLE9BQU8xNUI7TUFDVixxQkFERC9CLEVBQ0MscUJBREN0QixHQUFFKzhCLE9BQU8xNUIsSUFDMkI7YUFFbkQ2NUIsV0FBVzU3QixFQUFFdEI7TUFDZiw4QkFEZUEsR0FDZixhQURhc0IsT0FDVCtCO01BQUosR0FEYS9CLE9BRVQwN0IsYUFDNEIsT0FIbkIxN0IsRUFDVCtCO01BR0osaUJBSmVyRCxJQUFGc0IsVUFDVCtCO01BR0osT0FGSTI1QjtNQUVKLFFBQzBCO2FBRXhCRyxVQUFVNzdCLEVBQUV0QixHQUFpQixrQkFBbkJzQixFQUFtQixxQkFBakJ0QixHQUEyQzthQUV2RG85QixXQUFXOTdCLEVBQUUrN0IsSUFDZixvQkFEYS83QixFQUFFKzdCLGNBQ3VCO2FBK0JwQ0MsWUFBWWg4QixFQUFFeUMsR0FBR1Y7TUFDbkIsU0FEbUJBLFlBQ25CLGtDQURtQkE7TUFFakI7TUFiRixHQVdjL0IsZUFBSytCLFNBWGlCLE9BV3RCL0IsRUFBSytCO01BQ25CLElBNUJxQms2QixlQUFjbjZCLElBMkJyQjlCLEtBM0IwQms4QixRQTJCckJuNkIsSUFYNkIsS0FXbEMvQjtNQTFCWjtpQkFEc0NrOEI7VUFHNUIsSUFBSjc5QixFQUFJLE1Bd0JJb0UsUUEzQm1CWCxJQUFLbzZCO1VBRzVCLFNBQUo3OUI7WUFFQzs0QkFMWTQ5QixlQUdiNTlCO2FBRUMsTUFMMEJ5RCxNQUczQnpEO2FBRUMsVUFMK0I2OUIsVUFHaEM3OUI7YUFIYTQ5QjthQUFjbjZCO2FBQUtvNkI7O1lBMkIxQmw4QixPQTNCT2k4QixxQkEyQlBqOEI7VUFIZCxPQUdjQSxPQTNCT2k4Qjs0QkEyQkZsNkIsSUFNSDtVQUNoQjtzQ0FBRTthQUVBczZCLGNBQWMxNkIsR0FBRzNCLEdBQ25CLGNBRGdCMkIsR0FBRzNCLFlBQ1k7YUE0QzdCczhCLGVBQWV0OEIsRUFBRTlCLEVBQUVRO01BQ3JCLGdDQURxQkEsR0FFUDg5QixZQUFTN2U7TUFDckI7V0FEcUJBLE1BakJGNGU7VUFtQlgsSUFlSkUsUUFmSSxnQkFKVy85QixFQUVFaWY7VUFFYixVQWVKOGU7WUFkb0IsVUFIWkQ7Y0FJUCxTQU5VeDhCLEVBbUJYeThCO2NBYkMsUUFKZ0I5ZSxZQUFUNmUsWUFBUzdlOztZQU9oQixJQXhCUW9QLE1BaUJRcFA7WUFoQnZCLEdBRHFCNGUsU0FBTnhQLE1BQ007WUF1QmQsSUF0QkQsd0JBYWVydUIsRUFmTnF1QjtzQkFsQk0yUDtjQTRCbEIsUUFWWTNQLGNBUmYsNEJBdUJxQnJ1QixHQXZCTDZmO2NBQ2Q7bUJBRGdCb2UsU0FBRnBlO3FCQWtCVHFlLEtBbEJXRDs7a0JBRVYsMEJBcUJhaitCLEVBdkJMNmY7a0JBRVI7Ozs7Ozs7Ozs7K0JBQzBDLFFBSGxDQTtrQkFFUixJQWdCRHFlLEtBbEJTcmU7K0JBbUJiLE1BSWtCN2YsRUFmTnF1QixNQVVSNlAsT0FWUTdQLFdBVVI2UDs7O1loQ3VRRDtjZ0M1UUgsUUFMWTdQLGNBS1o7Y0FoQ1MsVUFTUzJQOzs7bUNBTmQ7Y0E2QkosSUF0QkgsMEJBZ0NxQmgrQixHQWhDTHUyQixNQUFFajdCO2NBQ2hCO21CQURrQjJoQixPQUFGM2hCLEVBQ0M7Z0JBQ2QsbUJBOEJnQjBFLEVBaENIMUUsT0FERzBpQztrQkFHSyxRQUZSMWlDLFVBRVEsSUFGVmk3QixnQkFBRWo3QjtnQkFHYixtQkE2QmdCMEUsRUFoQ0gxRTtrQkFLWCxRQUxXQTtnQkFJZCxTQUpZaTdCO2tCQUlTLFFBSlBqN0IsVUFJTyxJQUpUaTdCLGdCQUFFajdCOzs7cUJBd0JmLE1BUWtCMEUsRUFoQ0h3ZSxTQWlCSDZQLG9CQWpCRy95Qjs7WUF5Q1gsSUFDV2dqQyxrQkFBUEM7WUFDSixXQVhVajlCLEVBV0csV0FYRDlCLEVBVVIrK0I7WUFESixJQVBPVCxZQUFTN2UsSUFRTHFmOztVQUdDLFVBWExSO1lBWVAsU0FkVXg4QjtZQWVWLFNBZlVBLEVBbUJYeThCO1lBSkMsUUFiZ0I5ZSxZQUFUNmUsWUFBUzdlOztvQkFpQmpCOGU7WUFEQyxTQWhCZ0I5ZSxZQUFUNmUsU0FpQlJDLFFBakJpQjllO1VBa0JoQixTQXBCVTNkLEVBbUJYeThCO1VBZkksSUFnQkgsS0FsQmdCOWUsWUFBVDZlLFNBaUJSQyxRQWpCaUI5ZTs7UUFxQnJCLGdCQXJCWTZlO1FBcUJaLFlBQXdCLFNBdkJUeDhCLEVBRUh3OEIsZUFzQkg7YUFFVFUsU0FBU2w5QixFQUFFK0I7TUFDUyxRQURUQSxVQUFGL0IsT0FBRStCLE1BSVQsT0FKU0EsSUFJVDtNQUZBLHVDQUVpQjthQUluQm83QixTQUFPbjlCO01BQ1QsU0FBUXlaLElBQUl6ZjtRQUVWLEdBSE9nRyxRQUNHaEcsRUFFYztRQUV0Qiw0QkFMS2dHLEtBQ0doRyxHQUlSLEtBSlFBO1FBS0ssVUFEVDZFLGlCeENyVFgsT3dDaVRXNGEsZ0JBS21CO01BTDNCOzRCeENqVEgsT3dDaVRXQSxlQU9IO2FBRUgyakIsVUFBUXA5QjtNQUNWLFNBQVF5WixJQUFJemY7UUFFVixHQUhRZ0csUUFDRWhHLEVBRWM7UUFFdEIsNEJBTE1nRyxLQUNFaEcsR0FJUixLQUpRQTtRQUtTLGFBTFRBLEVBSUo2RSxrQnhDL1RYLE93QzJUVzRhLGdCQUt1QjtNQUwvQjs0QnhDM1RILE93QzJUV0EsZUFPSDthQUVINGpCLFVBQVFyOUIsRUFBRStMO01BQWUsMkJ4Q3BVOUIsT3dDbUlLa3ZCLFNBaU1RajdCLFNBQUUrTCxJQUErQjthQUV6Q3V4QixTQUFPdGpDLEdBQ0QsSUFBSmdHLEVBQUksYUFDUixVQURJQSxFQURLaEcsR0FFVCxPQURJZ0csQ0FFSDthQWFDdTlCLFNBQVN2OUIsRUFBRW5CO01BQ2IsSUFBSTY4QixhQURPMTdCO01BQ1gsR0FEV0EsT0FDUDA3QixhQUM0QixPQUZyQjE3QjtNQUUrQixzQkFGL0JBLFVBQUVuQjtNQUU2QixPQUR0QzY4QjtNQUNzQyxRQUVoQjthQUV4QjhCLGFBQWF4OUIsRUFBRW5CO01BQ2pCLElBQUk2OEIsYUFEVzE3QjtNQUNmLEdBRGVBLE9BQ1gwN0IsYUFDNEIsT0FGakIxN0I7TUFHZixpQkFIZUEsVUFBRW5CO01BR2pCLE9BRkk2OEI7TUFFSixRQUMwQjthQUV4QitCLGFBQWF6OUIsRUFBRW5CO01BQ2pCLElBQUk2OEIsYUFEVzE3QjtNQUNmLEdBRGVBLE9BQ1gwN0IsYUFDNEIsT0FGakIxN0I7TUFHZixpQkFIZUEsVUFBRW5CO01BR2pCLE9BRkk2OEI7TUFFSixRQUMwQjthQUV4QmdDLGFBQWExOUIsRUFBRW5CO01BQ2pCLElBQUk2OEIsYUFEVzE3QjtNQUNmLEdBRGVBLE9BQ1gwN0IsYUFDNEIsT0FGakIxN0I7TUFHZixpQkFIZUEsVUFBRW5CO01BR2pCLE9BRkk2OEI7TUFFSixRQUMwQjthQUV4QmlDLGFBQWEzOUIsRUFBRW5CLEd4QzlXcEIsT3dDNFZLMitCLGFBa0JheDlCLEVBQUVuQixFQUNzQzthQUVyRCsrQixhQUFhNTlCLEVBQUVuQjtNQUM2QixJQUQ3QmtaLElBQzZCLGFBRDdCbFosVUFyQmYyK0IsYUFxQmF4OUIsRUFBRStYLElBQ3NDO2FBRXJEOGxCLGFBQWE3OUIsRUFBRW5CLEd4Q3BYcEIsT3dDa1dLNCtCLGFBa0JhejlCLEVBQUVuQixFQUNzQzthQUVyRGkvQixhQUFhOTlCLEVBQUVuQjtNQUM2QixJQUQ3QmtaLElBQzZCLGlCQUQ3QmxaLEdBQ3FDLG9CQUR2Q21CLEVBQUUrWCxJQUNzQzthQUVyRGdtQixhQUFhLzlCLEVBQUVuQixHeEMxWHBCLE93Q3dXSzYrQixhQWtCYTE5QixFQUFFbkIsRUFDc0M7YUFFckRtL0IsYUFBYWgrQixFQUFFbkI7TUFDNkIsSUFEN0JrWixJQUM2QixpQkFEN0JsWixHQUNxQyxvQkFEdkNtQixFQUFFK1gsSUFDc0M7Ozs7T0EvVnJEb2lCO09BTUFDO09BQ0FDO09BRUFDO09BTUFDO09BUUFDO09BTUFDO09BRUFDO09BRUFDO09BaUtBMEI7T0F1RUFhO09BcktBakM7T0FTSUk7T0FnQkFFO09BUkFEO09BMkJKTTtPQU9BQztPQWxCQUw7T0FRQUc7T0FrR0FXO09BdEZBUjtPQWdDQUU7T0F3RkFtQjtPQVVBQztPQVVBQztPQUVBQztPQWdCQUM7O09BTUFDO09BcUJBSTtPQUhBRDtPQWxCQUg7T0FxQkFJO09BSEFEO09BWkFGO09BcUJBSztPQUhBRDtPQVpBSDtPQXFCQU07T0FIQUQ7O2FwQ2xXQUUsdUJBQXFCLG1CQUFvQjthQUd6Q0MsZ0JBQWdCeGdDLFNBQVMwRDtNQUMzQixZQUQyQkEsWUFDM0IsV0FEMkJBO01BRzNCO2VBSGtCMUQ7ZUFFZHlnQztlQUVGLFlBQTBCLGVBSlZ6Z0MsU0FFZHlnQyxXQUF3QkMsTUFFdUM7YUFFakVDLGdCQUFnQjNnQyxVQUNsQixnQkFEa0JBLFNBQ007YUFHdEI0Z0MsYUFBYTVnQztNQUNDLGtDQUNoQjFEO01BQ0U7O1VBRkV1a0MsV0FDSnZrQyxFQUVJLFlBQTBCLGdCQUpmMEQsU0FFZjFEO1FBQ0UsU0FERkE7O1FBSUEsNEJBTEl1a0MsWUFLNEI7YUFHOUJDLGVBQWU5Z0MsU0FBUzBEO01BQzFCLFlBRDBCQSxZQUMxQixXQUQwQkE7TUFHYiw4QkFISTFELFNBRWJ5Z0MsV0FBd0JDLFNBQzhCO2FBYXhESyxlQUFlQztNQUFVLEdBQVZBLFNBRUQsSUFBVEMsTUFGVUQsV0FFRCxZQUFUQyxPQURHLFFBQ2dDO2FBU3hDQywrQkFHQTVnQyxJQUFJNmdDO01BQU8sVUFBWDdnQztPQUFXLE9BQVhBO2dCQUVBLGFBRkk2Z0M7Z0JBSUosYUFKSUE7Z0JBZ0NKLGNBaENJQTtpQkFzQ0osY0F0Q0lBOztPQUFPLE9BQVg3Z0M7Z0JBTUEsSUFEZTBnQyxRQUxmMWdDLE9BTTBCLDRCQURYMGdDLFNBTFhHOztVQVFKLElBRG9CQyxVQVBwQjlnQyxPQVErQiw0QkFEWDhnQyxXQVBoQkQ7O2NBU2dCRSxVQVRwQi9nQyxPQVNhbEMsTUFUYmtDO1VBVThCLGFBRGpCbEMsTUFDaUIsZUFEVmlqQyxhQVRoQkY7O2NBV2tCRyxVQVh0QmhoQyxPQVdlL0IsUUFYZitCO1VBYWlCLGFBRkYvQixRQUVFLGVBRksraUMsYUFYbEJIOztjQWNzQkksVUFkMUJqaEMsT0FjbUI1QixRQWRuQjRCO1VBZ0JxQixhQUZGNUIsUUFFRSxlQUZLNmlDLGFBZHRCSjs7Y0FpQmtCSyxVQWpCdEJsaEMsT0FpQmV6QixRQWpCZnlCO1VBbUJpQixhQUZGekIsUUFFRSxlQUZLMmlDLGFBakJsQkw7O2NBb0JvQk0sU0FwQnhCbmhDLE9Bb0Jlb2hDLFVBcEJmcGhDO1VBVDRCLEdBNkJKbWhDLFNBM0JYLFNBMkJXQSxvQkEzQm5CRTtVQThCSyxpQ0FIS0QsZ0JBcEJYUDs7VUF5QkosSUFEYVMsVUF4QmJ0aEMsT0F5QndCLDRCQURYc2hDLFdBeEJUVDs7Y0EwQnlCL2hDLE1BMUI3QmtCLE9BMEJvQnVoQyxVQTFCcEJ2aEM7d0JBMEJvQnVoQyxVQUFTemlDLE1BMUJ6QitoQzs7Y0E0QjJCN2hDLFFBNUIvQmdCLE9BNEJzQndoQyxVQTVCdEJ4aEM7d0JBNEJzQndoQyxVQUFTeGlDLFFBNUIzQjZoQzs7Y0FpQzhCbmhDLFNBakNsQ00sT0FpQ3VCTCxVQWpDdkJLO3dCQWlDdUJMLFVBQVdELFNBakM5Qm1oQztpQkFvQ0osSUFEeUJoaEMsUUFuQ3pCRyxPQW9DQSxjQUR5QkgsUUFuQ3JCZ2hDLE1Bc0NpQzthQTBHckNZLHdCQUF3Qi9pQyxPQUMxQixhQUQwQkEsY0FPWDthQTZCYmdqQyxjQUFjQztNQUErQiw4QkFBL0JBLFdBQXVEO2FBR3JFQyxrQkFBa0J6OEIsSUFBSTA4QjtNQUN4QjtnQ0FEb0IxOEI7T0FDcEIsUUFEb0JBLFNBQUkwOEI7T0FDeEIsS0FBSTk5QixNQUNBKzlCO01BREo7UUFHZ0I7dUJBSFovOUIsWUFDQSs5QjtTQUdGLDBCQURJOWpCO1FBRUosS0FOa0I3WSxTQUtkNDhCLFVBSkZoK0I7UUFLRixTQURJZytCO1FBRFU7OztNQVBZLFdBVzNCO2FBR0NDLGdCQUFnQjc4QixJQUFJL0I7TUFDdEIsa0JBRGtCK0I7TUFFbEIsZUFGa0JBLGNBQUkvQjtNQUV0QixTQUZrQitCO01BRWxCLFFBQ3NCO2FBR3BCODhCLGtCQUFrQjk4QixJQUFJekU7TUFDeEIsSUFBSXdoQyxRQUFKLHNCQUR3QnhoQztNQUV4QixrQkFGb0J5RSxJQUNoQis4QjtNQUVKLE9BSHdCeGhDLElBQUp5RSxjQUNoQis4QjtNQUVKLFNBSG9CLzhCLFNBQ2hCKzhCO01BRUosUUFDNEI7YUFHMUJDLGdCQUFnQmg5QixLQUNsQixrQkFEa0JBLGdCQUNrQjthQUtsQ2k5QixjQUFjdGtDO01BQVEsT0FBUkE7O2VBRW9COztlQUF3Qjs7Z0JBQ2hEOztnQkFBd0I7Ozs7Z0JBRkU7Z0JBQzFCLFdBQzJCO2FBSXJDdWtDLGNBQWdCN1YsSUFBUTl0QjtNQUFRLEdBQWhCOHRCLElBQUcsUUFBSEEsVUFBR0MsYUFBSDZWO01BQWdCLE9BQVI1akM7ZUFDYjtlQUFpQjtlQUNqQjtlQUFpQjtlQUNqQjtlQUFpQixPQUhaNGpDO2VBSUw7ZUFBaUI7Z0JBQ2hCLFVBQUc7YUF5RWZDLGFBQWFwOUIsSUFBSXE5QjtNQUFRLE9BQVJBO2VBQ1IsdUJBRElyOUI7ZUFFSjtnQkFDQSx1QkFISUEsUUFHbUI7YUFHaENzOUIsb0JBQW9CdDlCLElBQUl1OUI7TUFDMUIsT0FEMEJBLFNBQ1QsZ0JBREt2OUIsUUFBSXU5QixRQUNjO2FBSXRDQyxlQUFleDlCLElBQUl1N0I7TUFBVSxHQUFWQTtRQUVMLElBQVRDLE1BRmNEO1FBRWlCLHlCQUZyQnY3QixJQUVxQiw0QkFBL0J3N0I7TUFERyxRQUNpRDthQUt6RGlDLGVBQ0F6OUIsSUFBSXpIO01BQU8sVUFBUEE7T0FDVTs7UUFESCxTQUFQQTtjQUVnQjhDLEVBRmhCOUMsT0FFUzhrQyxNQUZUOWtDO1VBR0osYUFIQXlILElBRWFxOUI7VUFFUyx5QkFKdEJyOUIsSUFJc0IsNEJBRkYzRTtRQUlwQixJQURZcWlDLFFBTFJubEM7UUFNSixhQU5BeUgsSUFLWTA5QjtRQUNaLHVCQU5BMTlCLFFBT3VCO2FBR3ZCMjlCLGlCQUNFMzlCLElBQUl2SDtNQUFRLFVBQVJBLGtCQU1OLE9BTk1BLEtBTU4sa0JBTkV1SDtVQUVZM0UsRUFGUjVDO01BR04sZ0JBSEV1SDtNQUlvQix5QkFKcEJBLElBSW9CLDRCQUZSM0UsR0FJWTthQUsxQnVpQyxrQkFBa0I1OUIsSUFBSXJIO01BQVEsT0FBUkE7O2VBQ0gsdUJBRERxSDs7ZUFFQyx1QkFGREE7Ozs7OztnQkFJaEIsdUJBSmdCQTtnQkFLK0IsU0FBRTthQVluRDY5QixrQkFBa0I3OUIsSUFBSXU5QixTQUFTNWtDLE1BQU1KLElBQUlFLEtBQUt3RjtNQUNoRCxnQkFEb0IrQjtNQUVwQixvQkFGb0JBLElBQUl1OUI7TUFHeEIsa0JBSG9CdjlCLElBQWFySDtNQUlqQyxlQUpvQnFILElBQW1Cekg7TUFLdkMsaUJBTG9CeUgsSUFBdUJ2SDtNQU0zQyxnQkFOb0J1SCxJQUE0Qi9CO01BTzVCLHVCQVBBK0IsSUFPQSxjQVBhckgsT0FPUTthQUt2Q21sQyxrQkFBa0I5OUIsSUFBSXpHO01BQ3hCLE9BRHdCQTs7ZUFFTixnQkFGRXlHO2dCQUdGLGdCQUhFQTtNQUtwQixZQUx3QnpHLFNBTVYsZ0JBTk15RyxTQVFlO2FBYWpDKzlCLHlCQUF5Qm5vQztNQUFpQixVQUFqQkE7T0FBaUIsT0FBakJBO2dCQUNEO2dCQUNBO2dCQUVBO2dCQUNBO2dCQUNBO2dCQUVBO2lCQUNBOztPQVRrQixPQUFqQkE7Z0JBR0QsSUFBakI2RCxJQUhrQjdELGtCQUdELE9BQWpCNkQ7Z0JBSWlCLElBQVp1a0MsTUFQYXBvQyxrQkFPRCxPQUFab29DO2lCQUdJLElBQUwvL0IsRUFWY3JJLGtCQVVILDJCQUFYcUksSUFBNEI7YUFLdkNnZ0Msb0JBQW9CaitCLElBQUl0RztNQUFNLGNBQU5BLElBQ2pCLGtCQURhc0csWUFFZixnQkFGZUEsSUFBSXRHLElBRUk7YUFHNUJ3a0Msc0JBQXNCbCtCLElBQUl2RztNQUM1QiwrQkFENEJBLGFBQzVCOzs7UUFDRTs4QkFGc0J1RyxJQUVFLGdCQUZFdkcsSUFDNUI1QztVQUNFLFNBREZBOzs7Y0FFSTthQU1Fc25DLGFBRUpuK0IsSUFBSXJHO01KaGZULElJZ2ZTRTtNQUFTO2lCQUFUQTtRQXlCWTs7UUF6QkgsT0FBVEE7O2VBQ0k5QyxLQURKOEM7V0FDaUIsa0JBRHJCbUc7ZUFBSW5HLFFBQ0k5Qzs7O2VBQ0VDLE9BRk42QztXQUVpQixrQkFGckJtRztlQUFJbkcsUUFFTTdDOzs7ZUFDSEMsT0FISDRDO1dBR2lCLGtCQUhyQm1HO2VBQUluRyxRQUdHNUM7OztlQUNFQyxPQUpMMkM7V0FJaUIsa0JBSnJCbUc7ZUFBSW5HLFFBSUszQzs7O2VBQ0lDLE9BTFQwQztXQUtpQixrQkFMckJtRztlQUFJbkcsUUFLUzFDOzs7ZUFDSkMsT0FOTHlDO1dBTWlCLGtCQU5yQm1HO2VBQUluRyxRQU1LekM7OztlQUNBQyxPQVBMd0M7V0FPaUIsa0JBUHJCbUc7ZUFBSW5HLFFBT0t4Qzs7O2VBQ0RDLE9BUkp1QztXQVFpQixrQkFSckJtRztlQUFJbkcsUUFRSXZDOzs7ZUFVa0JDLE9BbEJ0QnNDLFdBa0JXdWtDLFVBbEJYdmtDO1dBbUJKLGtCQW5CQW1HO1dBbUI0QixhQW5CNUJBLElBa0JlbytCO1dBRWYsa0JBcEJBcCtCO2VBQUluRyxRQWtCc0J0Qzs7O2VBR0tFLE9BckIzQm9DLFdBcUJhd2tDLFlBckJieGtDO1dBc0JKLGtCQXRCQW1HO1dBc0I0QixhQXRCNUJBLElBcUJpQnErQjtXQUVqQixrQkF2QkFyK0I7ZUFBSW5HLFFBcUIyQnBDOzs7ZUFadEJFLE9BVExrQztXQVNpQixrQkFUckJtRztlQUFJbkcsUUFTS2xDOzs7ZUFDQUMsUUFWTGlDO1dBVWlCLGtCQVZyQm1HO2VBQUluRyxRQVVLakM7OztlQUNGQyxRQVhIZ0M7V0FXaUIsa0JBWHJCbUc7ZUFBSW5HLFFBV0doQzs7O2VBQ0dDLFFBWk4rQjtXQVlpQixrQkFackJtRztlQUFJbkcsUUFZTS9COzs7ZUFFUUMsUUFkZDhCO1dBZUosa0JBZkFtRztlQUFJbkcsUUFjYzlCO29CQVdBO2FBSWR1bUM7Z0JBSWEsSUFBTDVpQyxXQUFTLCtCQUFUQSxPQURHLFFBQzJCO2FBa0gxQzZpQyxjQUFjN0M7TUFDTixJQWhIRzE3QixJQWdISDtNQS9HVixTQUFRdytCLFFBRUo5QyxJQUFJNkI7WUFBSmtCLFVBQUlDOztRQUFZO21CQUFoQkQ7VUFxR2lCOztVQXJHRCxPQUFoQkE7O2lCQTBCSzFuQyxLQTFCTDBuQzthQTJCQSxnQkE5QlN6K0I7YUE4QmdCLG9CQTlCaEJBLElBR0wwK0I7YUE0QkosZ0JBL0JTMStCO2lCQUdUeStCLE1BMEJLMW5DLEtBMUJEMm5DOzs7aUJBNkJNMW5DLE9BN0JWeW5DO2FBOEJBLGdCQWpDU3orQjthQWlDZ0Isb0JBakNoQkEsSUFHTDArQjthQStCSixnQkFsQ1MxK0I7aUJBR1R5K0IsTUE2QlV6bkMsT0E3Qk4wbkM7OztpQkFDU3puQyxPQURid25DLFNBQ1FsbUMsSUFEUmttQzthQUVBLGdCQUxTeitCO2FBS2dCLG9CQUxoQkEsSUFHTDArQjthQUdKLGVBTlMxK0IsSUFJRHpIO2FBRWdCLGdCQU5meUg7aUJBR1R5K0IsTUFDYXhuQyxPQURUeW5DOzs7aUJBS2N4bkMsT0FMbEJ1bkMsU0FLYWptQyxNQUxiaW1DO2FBTUEsZ0JBVFN6K0I7YUFTZ0Isb0JBVGhCQSxJQUdMMCtCO2FBT0osZUFWUzErQixJQVFJeEg7YUFFVyxnQkFWZndIO2lCQUdUeStCLE1BS2tCdm5DLE9BTGR3bkM7OztpQkFVbUJ2bkMsT0FWdkJzbkMsU0FVaUJobUMsS0FWakJnbUMsU0FVWS9sQyxNQVZaK2xDLFNBVUs5bEMsTUFWTDhsQzthQS9HSixnQkE0R2F6K0I7YUEzR2Isb0JBMkdhQSxJQUdMMCtCO2FBN0dSLGtCQTBHYTErQixJQWFKckg7YUF0SFQsZUF5R2FxSCxJQWFHdEg7YUFySGhCLGlCQXdHYXNILElBYVF2SDthQXBIRCxnQkF1R1B1SCxJQXZHTyxjQW9IWHJIO2lCQVZMOGxDLE1BVXVCdG5DLE9BVm5CdW5DOzs7O2NBYXFCdG5DLE9BYnpCcW5DO2NBYW1CN2xDLE9BYm5CNmxDO2NBYWM1bEMsTUFiZDRsQztjQWFPM2xDLFFBYlAybEM7YUFjQSxrQkFqQlN6K0IsSUFHTDArQixXQWFHNWxDLFFBQU9ELE1BQUtEO2lCQWJuQjZsQyxNQWF5QnJuQyxPQWJyQnNuQzs7OztjQWdCeUJybkMsT0FoQjdCb25DO2NBZ0J1QjFsQyxPQWhCdkIwbEM7Y0FnQmtCemxDLE1BaEJsQnlsQztjQWdCV3hsQyxRQWhCWHdsQzthQWlCQSxrQkFwQlN6K0IsSUFHTDArQixXQWdCT3psQyxRQUFPRCxNQUFLRDtpQkFoQnZCMGxDLE1BZ0I2QnBuQyxPQWhCekJxbkM7Ozs7Y0FtQnFCcG5DLE9BbkJ6Qm1uQztjQW1CbUJ2bEMsT0FuQm5CdWxDO2NBbUJjdGxDLE1BbkJkc2xDO2NBbUJPcmxDLFFBbkJQcWxDO2FBb0JBLGtCQXZCU3orQixJQUdMMCtCLFdBbUJHdGxDLFFBQU9ELE1BQUtEO2lCQW5CbkJ1bEMsTUFtQnlCbm5DLE9BbkJyQm9uQzs7OztjQXNCcUJubkMsT0F0QnpCa25DO2NBc0JtQnBsQyxPQXRCbkJvbEM7Y0FzQmNubEMsTUF0QmRtbEM7Y0FzQk9sbEMsTUF0QlBrbEM7YUEvRUosZ0JBNEVheitCO2FBM0ViLG9CQTJFYUEsSUFHTDArQjthQTdFUixrQkEwRWExK0IsSUF5QkZ6RzthQWxHWCxlQXlFYXlHLElBeUJLMUc7YUFqR2xCLGlCQXdFYTBHLElBeUJVM0c7YUFoR0gsZ0JBdUVQMkcsSUF2RU8sZ0JBZ0dUekc7aUJBdEJQa2xDLE1Bc0J5QmxuQyxPQXRCckJtbkM7OztpQkFnQ09qbkMsT0FoQ1hnbkMsU0FnQ01qbEMsTUFoQ05pbEM7YUFpQ0EsZ0JBcENTeitCO2FBb0NnQixvQkFwQ2hCQSxJQUdMMCtCO2FBa0NKLGVBckNTMStCLElBbUNIeEc7YUFFa0IsZ0JBckNmd0c7aUJBR1R5K0IsTUFnQ1dobkMsT0FoQ1BpbkM7OztpQkFtREUvbUMsT0FuRE44bUM7YUFvREEsa0JBdkRTeitCO2lCQUdUeStCLE1BbURNOW1DOzs7aUJBSWVDLFFBdkRyQjZtQyxTQXVEZ0JobEMsSUF2RGhCZ2xDO2FBd0RBLHNCQTNEU3orQixJQTBET3ZHO2lCQXZEaEJnbEMsTUF1RHFCN21DOzs7aUJBR0ZDLFFBMURuQjRtQyxTQTBEY0UsTUExRGRGO2FBMkRBLG9CQTlEU3orQixJQTZESzIrQjtpQkExRGRGLE1BMERtQjVtQzs7O2lCQUlTQyxRQTlENUIybUMsU0E4RHFCOWtDLE1BOURyQjhrQyxTQThEWWxELFFBOURaa0Q7YUErREEsZ0JBbEVTeitCO2FBa0VnQixvQkFsRWhCQSxJQUdMMCtCO2FBZ0VKLGVBbkVTMStCLElBaUVHdTdCO2FBRWdCLGdCQW5FbkJ2N0I7YUFvRVQsYUFwRVNBLElBaUVZckc7YUFHRyxnQkFwRWZxRzthQW9Fd0MsZ0JBcEV4Q0E7aUJBR1R5K0IsTUE4RDRCM21DLFFBOUR4QjRtQzs7O2lCQW1FMEIzbUMsUUFuRTlCMG1DLFNBbUV1QjVrQyxRQW5FdkI0a0MsU0FtRWM5QyxVQW5FZDhDO2FBb0VBLGdCQXZFU3orQjthQXVFZ0Isb0JBdkVoQkEsSUFHTDArQjthQXFFSixlQXhFUzErQixJQXNFSzI3QjthQUVjLGdCQXhFbkIzN0I7YUF5RVQsYUF6RVNBLElBc0Vjbkc7YUFHQyxnQkF6RWZtRzthQXlFd0MsZ0JBekV4Q0E7aUJBR1R5K0IsTUFtRThCMW1DLFFBbkUxQjJtQzs7O2lCQW9DRTNrQyxRQXBDTjBrQzthQXFDQSxnQkF4Q1N6K0I7YUF3Q2dCLG9CQXhDaEJBLElBR0wwK0I7YUFzQ0osZ0JBekNTMStCO2lCQUdUeStCLE1Bb0NNMWtDLFFBcENGMmtDOzs7aUJBdUNFMWtDLFFBdkNOeWtDO2FBd0NBLGdCQTNDU3orQjthQTJDZ0Isb0JBM0NoQkEsSUFHTDArQjthQXlDSixnQkE1Q1MxK0I7aUJBR1R5K0IsTUF1Q016a0MsUUF2Q0Ywa0M7OztpQkF5RndCemtDLFFBekY1QndrQyxTQXlGZ0J2a0MsV0F6RmhCdWtDO2FBMEZBLHNCQTdGU3orQixJQTZGaUIseUJBRFY5RjtpQkF6RmhCdWtDLE1BeUY0QnhrQzs7O2lCQUdBRSxRQTVGNUJza0MsU0E0RmdCcmtDLFdBNUZoQnFrQztzQkE0RmdCcmtDO3lDQUVPNGpDO2VBQ3JCLGtCQWxHT2grQjtlQWtHcUIsa0JBbEdyQkEsSUFpR2NnK0I7OzJCQUZQNWpDLGNBSU93a0M7ZUFDckIsa0JBcEdPNStCO2VBb0dxQixrQkFwR3JCQSxJQW1HYzQrQjtpQkFoR3ZCSCxNQTRGNEJ0a0M7OztpQkE1Q3JCRSxRQWhEUG9rQzthQWlEQSxnQkFwRFN6K0I7YUFvRGdCLG9CQXBEaEJBLElBR0wwK0I7YUFrREosZ0JBckRTMStCO2lCQUdUeStCLE1BZ0RPcGtDLFFBaERIcWtDOzs7aUJBeUVnQ3BrQyxRQXpFcENta0MsU0F5RTBCbGtDLFNBekUxQmtrQyxTQXlFZWprQyxVQXpFZmlrQzthQTBFQSxnQkE3RVN6K0I7YUE2RWdCLG9CQTdFaEJBLElBR0wwK0I7YUEyRUosZUE5RVMxK0IsSUE0RU14RjthQXRTbkI7Y0E0Q0k4Rjt3QkFBV04sSUFBSW5KO2lCQUFVLElBR3pCb0gsRUFIeUIsWUFBVnBIO2lCQUFVLGNBR3pCb0g7MkJBRk8sZ0JBREkrQixRQUNKLGdCQURJQTtpQ0FHWC9COzZCQURPLGdCQUZJK0IsUUFFSixnQkFGSUE7NEJBR0osZ0JBSElBLElBR1gvQixFQUE2QjthQUVqQyxnQkF5S2ErQjthQTFOYjtjQW1ESzs4QkFtUHlCekY7a0JBbFByQixnQkFzS0l5RixRQXRLcUIsYUFrUEp6Rjs7Y0FyUzVCOzswQkFBSXVrQyxTQUFTN2dDO21CQUNpQzs4QkFEakNBO29CQUNlLFdBRGZBO29CQUVYLHlCQUZXQTttQkFFWDtvQkFDUTs4Q0FGSitnQztxQkFFSSxVQUE2QixvQkFGekJEOzs7O21CQURkLFdBR2dFO3dCQUg1REQ7Y0FBSjthQUlHLGdCQUFrQixnQkFxTlY5K0I7YUExTmIsSUFRa0JuSjs7YUFDaEI7a0JBRGdCQTtpQkFFWCx5QkFBbUIsWUFGUkE7bUJBR1QsUUFIU0E7aUJBS1Ysc0JBTFVBLEdBS1Y7O3FDQUNNLFdBNE1EbUo7OztxQkEzTUksUUFQQ25KOztpQkk4TVo7bUJKdE1HLElBQ1k0aEIsSUFUSDVoQjttQkFVYix5QkFBbUIsWUFESDRoQjtxQkFnQmpCLFdBeUxTelksSUF6TVF5WTtxQkFnQmpCLFFBaEJpQkEsWUFUSDVoQjs7bUJBUVQ7b0JBR0Msb0JBRlc0aEI7b0JBRVg7Ozs7c0JBRUosV0FxTU96WSxTQXJNUCxXQXFNT0E7Ozs7O3NCQW5NWSx5QkFBb0IsWUFOeEJ5WTt3QkFPZixXQWtNT3pZLElBek1ReVk7d0JBT2YsUUFQZUEsWUFUSDVoQjs7Ozs7O3FCQWtCRCx5QkFBb0IsWUFUaEI0aEI7dUJBVWYsV0ErTE96WSxJQXpNUXlZO3VCQVdmLFdBOExPelksSUF6TVF5WTt1QkFXZixRQVhlQSxZQVRINWhCOztxQkF1QlosTUFkZTRoQixZQWNmLElBZGVBLFlBbUJGd21CO3FCQUNqQjt1QkFBa0IsV0FEREEsT0FDQyxvQkFBb0IsWUFEckJBO3lCQU9mLFFBUGVBO3VCQUVmLFdBb0xTai9CLElBdExJb2I7dUJBR2IsV0FtTFNwYjt1QkFsTFQsV0FrTFNBLElBdExNaS9CO3VCQUlmLEdBSmVBLFdBS0MsUUFMREEsWUE1QkRwb0M7O2VBRGIsZ0JBQWtCLGdCQW1OVm1KO2VBdFFYNjhCLGdCQXNRVzc4QjttQkFHVHkrQixNQXlFb0Nua0MsUUF6RWhDb2tDOzs7aUJBNkV1QmprQyxRQTdFM0Jna0MsU0E2RWtCL2pDLFFBN0VsQitqQzthQThFQSxnQkFqRlN6K0I7YUFpRmdCLG9CQWpGaEJBLElBR0wwK0I7YUF0T29CLE9BbVROaGtDOzs7O2FBRWxCLGdCQWxGU3NGO2lCQUdUeStCLE1BNkUyQmhrQyxRQTdFdkJpa0M7OztpQkFpRlcvakMsUUFqRmY4akM7YUFrRkEsZ0JBckZTeitCO2FBcUZnQixvQkFyRmhCQSxJQUdMMCtCO2FBbUZKLHNCQXRGUzErQjtpQkFHVHkrQixNQWlGZTlqQyxRQWpGWCtqQzs7O2FBc0Z3QjtjQURSOWpDLFFBckZwQjZqQztjQXFGZTVqQyxJQXJGZjRqQztjQXNGNEIsdUNBRGI1akMsSUFBS0Q7Y0FDUTtjQXRGNUI2akM7Y0FBSUM7OzthQTJDVTtjQURJNWpDLFFBMUNsQjJqQztjQTBDUXpqQyxNQTFDUnlqQztjQTJDYyx5QkFETnpqQzs7YUFDTTttQkFBZDBmO2VBQ0U7aUNBL0NPMWE7aUJBK0NrQixvQkEvQ2xCQSxJQUdMMCtCO2lCQTZDRixnQkFoRE8xK0I7aUJBZ0RQLFNBRkYwYTs7O2FBQWMsSUEzQ2QrakIsTUEwQ2tCM2pDLFFBMUNkNGpDO3NCQXFHZTtNQXZHdkIsUUE4R2dCaEQ7YUF4V2RzQixnQkF5UFdoOUIsSUFrSE07YUFXYm8vQjs7T0F1Qlk7O09BdkJaO2dCQU1ZLElBQVJyb0MsY0FBZ0IsZUFBaEJBO2dCQU9VLElBQVJDLGdCQUFrQixlQUFsQkE7Z0JBTkssSUFBUkMsZ0JBQWUsZUFBZkE7Z0JBQ1UsSUFBUkMsZ0JBQWlCLGVBQWpCQTtnQkFFWSxJQUFSQyxnQkFBcUIsZUFBckJBO2dCQURJLElBQVJDLGdCQUFpQixlQUFqQkE7Z0JBRVEsSUFBUkMsZ0JBQWlCLGVBQWpCQTtnQkFDTyxJQUFSQyxnQkFBZ0IsZUFBaEJBO29CQU9XQyxnQkFBSkMsWUFDSSxVQURKQSxHQUNJLEtBREFEOztjQUVRRSxnQkFBTFUsYUFBTFQ7VUFDVSxVQURMUyxJQUFMVCxJQUNVLEtBREFEO2lCQU5WLElBQVJFLGdCQUFpQixnQkFBakJBO2lCQURRLElBQVJDLGlCQUFpQixnQkFBakJBO2lCQUVNLElBQVJDLGlCQUFlLGdCQUFmQTtpQkFDVyxJQUFSQyxpQkFBa0IsZ0JBQWxCQTtpQkFDZ0IsSUFBUkMsaUJBQTBCLGdCQUExQkEsVUFLVTthQWdINUJzbkMsTUFXRTNuQyxJQUFJUztNSm55Qlg7TUlteUJrQixVQUFYVDtpQkFBSVM7UUE4Q3dCOztlQTlDeEJBOzs7Ozs7OztrQkErQ2E7O09BL0NOLE9BQVhUOzs7b0JBQUlTOztvQkFDMEIsSUFBVG1uQyxNQURqQm5uQyxPQUNrQyxxQkFBakJtbkM7Ozs7Ozs7Ozs7Ozs4QkFEckI1bkM7b0JBQUlTOztvQkFFOEIsSUFBVG9uQyxRQUZyQnBuQyxPQUV3QyxxQkFBbkJvbkM7Ozs7Ozs7Ozs7Ozs4QkFGekI3bkM7b0JBQUlTOzs7O29CQUl3QixJQUFUcW5DLFFBSmZybkMsT0FJK0IscUJBQWhCcW5DOzs7Ozs7Ozs7Ozs7OEJBSm5COW5DO29CQUFJUzs7OztvQkFLNEIsSUFBVHNuQyxRQUxuQnRuQyxPQUtxQyxxQkFBbEJzbkM7Ozs7Ozs7Ozs7Ozs4QkFMdkIvbkM7b0JBQUlTOzs7O29CQU9vQyxJQUFUdW5DLFFBUDNCdm5DLE9BT2lELHFCQUF0QnVuQzs7Ozs7Ozs7Ozs7OzhCQVAvQmhvQztvQkFBSVM7Ozs7b0JBTTRCLElBQVR3bkMsUUFObkJ4bkMsT0FNcUMscUJBQWxCd25DOzs7Ozs7Ozs7Ozs7OEJBTnZCam9DO29CQUFJUzs7OztvQkFRNEIsSUFBVHluQyxRQVJuQnpuQyxPQVFxQyxxQkFBbEJ5bkM7Ozs7Ozs7Ozs7Ozs4QkFSdkJsb0M7b0JBQUlTOzs7O29CQUcwQixJQUFUMG5DLFFBSGpCMW5DLE9BR2tDLHFCQUFqQjBuQzs7Ozs7Ozs7Ozs7OzhCQUhyQm5vQztvQkFBSVM7Ozs7O2NBZ0N3QixJQURrQjJuQyxRQS9CMUMzbkMsT0ErQnFDNG5DLE1BL0JyQzVuQyxPQWdDd0IsZ0JBRGtCMm5DO2NBQ2pDLHFCQUQ0QkM7Ozs7Ozs7c0JBRXJCOzs7K0JBakNwQnJvQztvQkFBSVM7Ozs7OztjQXNDRztlQURvQjZuQyxRQXJDdkI3bkM7ZUFxQ2lCOG5DLEtBckNqQjluQztlQXFDVytuQyxLQXJDWC9uQztlQXNDRyxTQUFNLFdBREUrbkM7ZUFFRSxvQkFEZjFvQztlQUNlOztjQUNSLFdBREo2b0M7Y0FFSSxXQUZHRDtjQUdlLGVBTE5ILEtBS00sV0FMQUQ7Ozs7Ozs7dUJBTUw7OzttQkEzQ3RCdG9DO29CQUFJUztZQVU0QixJQUFUbW9DLFFBVm5Cbm9DLE9BVXFDLHNCQUFsQm1vQztVQUNSOzsrQkFYZjVvQztvQkFBSVM7Ozs7O3FCQWM0QixJQUFUb29DLFNBZG5CcG9DLE9BY3FDLHNCQUFsQm9vQzs7dUJBQ1I7OzsrQkFmZjdvQztvQkFBSVM7Ozs7OztxQkFrQndCLElBQVRxb0MsU0FsQmZyb0MsT0FrQitCLHNCQUFoQnFvQzs7dUJBQ047OzsrQkFuQmI5b0M7b0JBQUlTOzs7Ozs7O3FCQXNCOEIsSUFBVHNvQyxTQXRCckJ0b0MsT0FzQndDLHNCQUFuQnNvQzs7dUJBQ1Q7OzsrQkF2QmhCL29DO29CQUFJUzs7Ozs7Ozs7cUJBMkJOLElBRDJDdW9DLFNBMUJyQ3ZvQyxPQTJCWSxzQkFEeUJ1b0M7O3VCQUVqQjtNSS9TdEI7ZUorUmE7ZUFJQTtlQUlGO2VBSUc7ZUFLUTtlQUtKO2VBVUU7Z0JBSUwsOEJBQVk7YUF6SzNCUDs7UUFTSjs4QkFHYSxRQUFJO1NBSGpCLHFCQUVhLFFBQUk7U0FGakIscUJBQ2EsUUFBSTtRQURqQiwwQkFBYSxRQUFJOztPQVRiOztVQWNKOztXQUFxQixvQkFEYnBwQztXQUNhOzs7O2dDQUVHLFdBRmhCOHBDLE1BRWdCLFFBQWU7VUFGbEIsMEJBQ0csV0FEcEJDLE1BQ29CLFFBQWUsT0FEM0JGLEdBQUlEOztVQUtoQjs7V0FBcUIsc0JBRFgzcEM7V0FDVzs7OztnQ0FFRyxXQUZoQmlxQyxRQUVnQixRQUFlO1VBRmxCO2tDQUNHLFdBRHBCQyxRQUNvQixRQUFlOztrQkFEM0JGO2tCQUFJRDs7VUFLaEI7O1dBQXFCLHNCQURkOXBDO1dBQ2M7Ozs7Z0NBRUcsV0FGaEJvcUMsUUFFZ0IsUUFBZTtVQUZsQjtrQ0FDRyxXQURwQkMsUUFDb0IsUUFBZTs7a0JBRDNCRjtrQkFBSUQ7O1VBS2hCOztXQUFxQixzQkFEWmpxQztXQUNZOzs7O2dDQUVHLFdBRmhCdXFDLFFBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFFBQ29CLFFBQWU7O2tCQUQzQkY7a0JBQUlEOztVQVVoQjs7V0FBcUIsc0JBRFJwcUM7V0FDUTs7OztnQ0FFRyxXQUZoQjBxQyxRQUVnQixRQUFlO1VBRmxCO2tDQUNHLFdBRHBCQyxRQUNvQixRQUFlOztrQkFEM0JGO2tCQUFJRDs7VUFMaEI7O1dBQXFCLHNCQURadnFDO1dBQ1k7Ozs7Z0NBRUcsV0FGaEI2cUMsUUFFZ0IsUUFBZTtVQUZsQjtrQ0FDRyxXQURwQkMsUUFDb0IsUUFBZTs7a0JBRDNCRjtrQkFBSUQ7O1VBVWhCOztXQUFxQixzQkFEWjFxQztXQUNZOzs7O2dDQUVHLFdBRmhCZ3JDLFFBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFFBQ29CLFFBQWU7O2tCQUQzQkY7a0JBQUlEOztVQUtoQjs7V0FBcUIsc0JBRGI3cUM7V0FDYTs7OztnQ0FFRyxXQUZoQm1yQyxRQUVnQixRQUFlO1VBRmxCO2tDQUNHLFdBRHBCQyxRQUNvQixRQUFlOztrQkFEM0JGO2tCQUFJRDs7VUFpQ2hCOztXQUFxQixzQkFERGhyQztXQUNDOzs7O2dDQUVHLFdBRmhCc3JDLFFBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFFBQ29CLFFBQWU7O2tCQUQzQkY7a0JBQUlEOztVQUtLO1dBRE1sckM7V0FBTFU7V0FBTFQ7V0FDSSxzQkFETUQ7V0FDTjs7OztXQUNaLFNBQU0sS0FGRUMsS0FBS1M7V0FHRCxzQkFEakJYO1dBQ2lCOzs7O2dDQUlHLFdBSlIyckMsTUFJOEIsV0FOOUJKLFFBTThCLFFBQWU7V0FKeEMscUJBR0csV0FMWkMsUUFLa0MsV0FIbENJLE1BR2tDLFFBQWU7V0FIeEMscUJBRUcsV0FGaEJDLE1BRXNDLFdBSnRDSixRQUlzQyxRQUFlO1VBRnhDOztvQkFDRyxXQUhwQkMsUUFHMEMsV0FEMUNJLE1BQzBDLFFBQWU7Ozs7O1VBOUI3RDs7V0FBcUIsdUJBRFozckM7V0FDWTs7OztnQ0FFRyxXQUZoQjhyQyxRQUVnQixRQUFlO1VBRmxCO2tDQUNHLFdBRHBCQyxRQUNvQixRQUFlOztrQkFEM0JGO2tCQUFJRDs7VUFMaEI7O1dBQXFCLHVCQURaM3JDO1dBQ1k7Ozs7Z0NBRUcsV0FGaEJpc0MsU0FFZ0IsUUFBZTtVQUZsQjtrQ0FDRyxXQURwQkMsU0FDb0IsUUFBZTs7a0JBRDNCRjtrQkFBSUQ7O1VBVWhCOztXQUFxQix1QkFEZDlyQztXQUNjOzs7O2dDQUVHLFdBRmhCb3NDLFNBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFNBQ29CLFFBQWU7O2tCQUQzQkY7a0JBQUlEOztVQUtoQjs7V0FBcUIsdUJBRFhqc0M7V0FDVzs7OztnQ0FJRyxXQUpScXNDLFNBSVEsUUFBZTtXQUpsQixxQkFHRyxXQUhaQyxTQUdZLFFBQWU7V0FIbEIscUJBRUcsV0FGaEJDLFNBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFNBQ29CLFFBQWU7Ozs7O1VBS3ZDOztXQUFxQix1QkFESHZzQztXQUNHOzs7O2dDQUlHLFdBSlJ3c0MsU0FJUSxRQUFlO1dBSmxCLHFCQUdHLFdBSFpDLFNBR1ksUUFBZTtXQUhsQixxQkFFRyxXQUZoQkMsU0FFZ0IsUUFBZTtVQUZsQjtrQ0FDRyxXQURwQkMsU0FDb0IsUUFBZTs7O3dCQWdCdUI7YUF1TDlEQyx5QkFFRWxzQyxLQUFLa0I7TUFBUyxjQUFkbEIsMEJBQUtrQixrQkFHMEI7YUFiakNpckMsdUJBRUVyc0MsSUFBSW9CO01BQVMsY0FBYnBCLGlCQUFJb0IsWUFBSnBCLE9BQUlvQixlQUd5QjthQXJDL0JrckMsZ0JBR0E3cEMsTUFBTXJCO01BQVMsR0FBZnFCO1FBRXFCLElBQVQ4cEMsUUFGWjlwQyxTQUU0QiwyQkFBaEI4cEMsUUFGTm5yQztNQUNTLE9BRFRBLEtBRW1EO2FBOUR6RG9yQyxhQUVBcHJDO01KLzFCTCxJSSsxQktFO01BQVM7aUJBQVRBO1FBcUQ4Qjs7UUFyRHJCLE9BQVRBO2lCQTJCOEIsSUFBekI5QyxLQTNCTDhDLFdBMkJzQyx1QkFBakM5QztpQkFDeUIsSUFBcEJDLE9BNUJWNkMsV0E0QnNDLHVCQUE1QjdDOztlQTNCR0MsT0FEYjRDLFdBQ1F0QixJQURSc0I7V0FFc0MsOEJBRDlCdEIsT0FDOEIsYUFEekJ0Qjs7ZUFFS0MsT0FIbEIyQyxXQUdhckIsTUFIYnFCO1dBSXNDLDhCQUR6QnJCLFNBQ3lCLGFBRHBCdEI7O1dBSUo7WUFES0MsT0FObkIwQztZQU1hcEIsS0FOYm9CO1lBTVFuQixNQU5SbUI7WUFPYyxxQkFESzFDO1lBRUwsaUNBRkRzQixRQUNUdXNDO1dBQ1UsOEJBRk50c0MsTUFFSnVzQzs7V0FHVTtZQURPN3RDLE9BVnJCeUM7WUFVZWpCLE9BVmZpQjtZQVVVaEIsTUFWVmdCO1lBV2MsdUJBRE96QztZQUVQLG1DQUZDd0IsVUFDWHNzQztXQUNVLDhCQUZKcnNDLE1BRU5zc0M7O1dBR1U7WUFEVzl0QyxPQWR6QndDO1lBY21CZCxPQWRuQmM7WUFjY2IsTUFkZGE7WUFlYyx1QkFEV3hDO1lBRVgsbUNBRkswQixVQUNmcXNDO1dBQ1UsOEJBRkFwc0MsTUFFVnFzQzs7V0FHVTtZQURPL3RDLE9BbEJyQnVDO1lBa0JlWCxPQWxCZlc7WUFrQlVWLE1BbEJWVTtZQW1CYyx1QkFET3ZDO1lBRVAsbUNBRkM0QixVQUNYb3NDO1dBQ1UsOEJBRkpuc0MsTUFFTm9zQzs7V0FHVTtZQURPaHVDLE9BdEJyQnNDO1lBc0JlUixPQXRCZlE7WUFzQlVQLE1BdEJWTztZQXVCYyx1QkFET3RDO1lBRVAsbUNBRkM4QixVQUNYbXNDO1dBQ1UsOEJBRkpsc0MsTUFFTm1zQzs7ZUFLT2h1QyxPQTdCWG9DLFdBNkJNTCxNQTdCTks7V0E4QnNDLDhCQURoQ0wsU0FDZ0MsYUFEM0IvQjtrQkFZbUIsWUF6QzlCb0M7a0JBMEM4QixZQTFDOUJBO2tCQTJDOEIsWUEzQzlCQTs7ZUFvQ21CbEMsT0FwQ25Ca0MsV0FvQ2VyQyxHQXBDZnFDO1dBcUNtQixVQURKckMsR0FDSSxhQURBRzs7ZUFFRUMsUUF0Q3JCaUMsV0FzQ2lCZ3NDLEtBdENqQmhzQztXQXVDeUIsVUFEUmdzQyxVQUNRLGFBREpqdUM7a0JBUFMsSUFBeEJDLFFBL0JOZ0MsV0ErQnVDLHdCQUFqQ2hDO2tCQUN3QixJQUF4QkMsUUFoQ04rQixXQWdDdUMsd0JBQWpDL0I7a0JBaUJ3QixZQWpEOUIrQjs7V0FtRGtEO1lBRHRCOUIsUUFsRDVCOEI7WUFrRGdCTyxXQWxEaEJQO1lBbURrRCxrQkFEdEI5QjtXQXpEVixTQXlERnFDO29DQXhERXNoQyxrQkFJbEJxSixhQUprQnJKOzs7cUJBd0RGdGhDO2FBdkRFcWtDO2tCQUdsQnNHLGFBSGtCdEc7a0JJdlJkem1DO2tCSjhUMEIsSUFBdkIrQixRQWxDUEYsV0FrQ3dDLHdCQUFqQ0U7a0JBV3VCLElBQVRDLFFBN0NyQkgsV0E2Q3dDLHVCQUFuQkc7a0JBQ1MsSUFBVEMsUUE5Q3JCSixXQThDcUMsdUJBQWhCSTtrQkFDUyxJQUFmRSxRQS9DZk4sV0ErQ3NDLHVCQUF2Qk07O2VBQ0tFLFFBaERwQlIsV0FnRGVnQixJQWhEZmhCO1dBb0VXLFVBcEJJZ0I7WUFvQkosT0FwQklBO3lCQWhEZmhCLFFBZ0RvQlE7eUJBaERwQlIsUUFnRG9CUTtxQkFpQ2lDLHdCQWpDakNBOzBCQWhEcEJSLFFBZ0RvQlE7O1lBb0JULE9BcEJJUTt5QkFoRGZoQixRQWdEb0JRO3lCQWhEcEJSLFFBZ0RvQlE7eUJBaERwQlIsUUFnRG9CUTt5QkFoRHBCUixRQWdEb0JRO3lCQWhEcEJSLFFBZ0RvQlE7eUJBaERwQlIsUUFnRG9CUTt5QkFoRHBCUixRQWdEb0JRO3lCQWhEcEJSLFFBZ0RvQlE7eUJBaERwQlIsUUFnRG9CUTs7ZUFnQ2UsSUFBVjByQyxRQWhDVmxyQztlQWdDdUMsb0JBQTdCa3JDLFFBQTZCLGFBaENsQzFyQzswQkFoRHBCUixRQWdEb0JROzBCQWhEcEJSLFFBZ0RvQlE7O2VBZkZDLFFBakNsQlQsV0FpQ1FtQixNQWpDUm5CO1dBaUNvRCx1QkFBNUNtQixNQUE0QyxhQUFsQ1YsVUFvQndCOzs7O2FBMEQxQzByQyxhQUdBenRDLElBQUlvQjtNQUFTLFVBQWJwQjtPQUNpQixZQURib0I7O1FBQVMsU0FBYnBCO2NBRW9CMHRDLEVBRnBCMXRDLE9BRWE4a0MsTUFGYjlrQyxvQkFFYThrQyxNQUFPNEksR0FGaEJ0c0M7O2NBR3NCNUMsS0FIdEI0QyxTQUdRK2pDLFFBSFpubEMsb0JBR1ltbEMsU0FBYzNtQztRQUNyQixvQkFBbUI7YUFLeEJtdkMsYUFHQTN0QyxJQUFJRSxLQUFLa0I7TUFBcUIsdUJBQTlCcEIsSUFBU29CO01BQXFCLFVBQTFCbEI7Ozs7Z0JBSzBDMUIsYUFBWnlCLGlDQUFZekI7VUFFZjtZQU5PQyxnQkFBTDBCOzBCQUFLMUI7TUFEUixJQUdXQyxnQkFBTDRCLGVBQXRCc1IsRUFIVjFSO2dCQUdnQ0ksU0FBdEJzUixHQUEyQmxULE9BSVM7YUEwTWxEa3ZDLCtCQUlBL0gsVUFBVTFDLElBQUkvaEM7TUFBUyxVQUF2QnlrQztPQTBFNkIsNEJBMUVuQjFDLElBQUkvaEM7O09BQVMsT0FBdkJ5a0M7O29CQUFjemtDO1lBR1o7YUFGOEIwc0MsV0FEbEIxc0M7YUFDTjJzQyxlQURSbEk7YUFHRTs2Q0FGTWtJLGVBREU1SyxJQUNzQjJLO2FBRTlCOzt5QkFEaUJFLGtCQUFpQjlIOzs7b0JBRnRCOWtDO1lBT1o7YUFGa0M2c0MsYUFMdEI3c0M7YUFLSjhzQyxpQkFMVnJJO2FBT0U7O2dCQUZRcUksaUJBTEEvSyxJQUswQjhLO2FBRWxDOzt5QkFEaUJFLGtCQUFpQnZIOzs7b0JBTnRCeGxDO1lBV1o7YUFGNEJndEMsYUFUaEJodEM7YUFTUGl0QyxpQkFUUHhJO2FBV0U7O2dCQUZLd0ksaUJBVEdsTCxJQVNvQmlMO2FBRTVCOzt5QkFEaUJHLGtCQUFpQkQ7OztvQkFWdEJsdEM7WUFlWjthQUZnQ290QyxhQWJwQnB0QzthQWFMcXRDLGlCQWJUNUk7YUFlRTs7Z0JBRk80SSxpQkFiQ3RMLElBYXdCcUw7YUFFaEM7O3lCQURpQkcsa0JBQWlCRDs7O29CQWR0QnR0QztZQW1CWjthQUZ3Q3d0QyxhQWpCNUJ4dEM7YUFpQkR5dEMsaUJBakJiaEo7YUFtQkU7O2dCQUZXZ0osaUJBakJIMUwsSUFpQmdDeUw7YUFFeEM7O3lCQURpQkcsa0JBQWlCRDs7O29CQWxCdEIxdEM7WUF1Qlo7YUFGZ0M0dEMsYUFyQnBCNXRDO2FBcUJMNnRDLGlCQXJCVHBKO2FBdUJFOztnQkFGT29KLGlCQXJCQzlMLElBcUJ3QjZMO2FBRWhDOzt5QkFEaUJHLG1CQUFpQkQ7OztvQkF0QnRCOXRDO1lBMkJaO2FBRmdDZ3VDLGFBekJwQmh1QzthQXlCTGl1QyxrQkF6QlR4SjthQTJCRTs7Z0JBRk93SixrQkF6QkNsTSxJQXlCd0JpTTthQUVoQzs7eUJBRGlCRyxtQkFBaUJEOzs7b0JBMUJ0Qmx1QztZQStCWjthQUY4Qm91QyxhQTdCbEJwdUM7YUE2Qk5xdUMsa0JBN0JSNUo7YUErQkU7O2dCQUZNNEosa0JBN0JFdE0sSUE2QnNCcU07YUFFOUI7O3lCQURpQkcsbUJBQWlCRDs7O29CQTlCdEJ0dUM7O2FBbURjd3VDLGFBbkRkeHVDO2FBbURDeXVDLFdBbkREenVDO2FBa0RhMHVDLGtCQWxEM0JqSzthQWtEZWtLLGFBbERmbEs7WUFvREcsb0JBRllrSyxpQkFDQUY7YUFDdUM7WUFFcEQ7OztnQkFKeUJDLGtCQWxEakIzTSxJQW1Ea0J5TTthQUcxQjs7eUJBSGFDLFdBRUlJLG1CQUFpQkQ7OztvQkFyRHRCNXVDO1lBMkRtQzthQUZOOHVDLGFBekQ3Qjl1QzthQXlEZ0IrdUMsYUF6RGhCL3VDO2FBeURHZ3ZDLFdBekRIaHZDO2FBd0Q2Qml2QyxrQkF4RDNDeEs7YUF3RDhCeUssYUF4RDlCeks7YUF3RGlCMEssYUF4RGpCMUs7YUEyRGlELGtCQUZoQ3VLO1lBRWQsb0JBQVUsVUFISUc7YUFJWjtZQUQ0QyxZQUVBLFVBSm5CSjtZQUkzQixvQkFBVSxVQUxpQkc7YUFNekI7WUFINEM7YUFJaEMsa0JBQU0sS0FOTkYsWUFBYUQ7YUFPWCxzQkFEZnJLO2FBQ2U7O1lBQ1IsV0FESmdDO1lBRUksV0FGR0Q7WUFMbUM7YUFTL0M7O2dCQUFpQyxVQVpRd0ksbUJBeERqQ2xOLElBeURpQytNO2FBV3pDOztZQUc4Qjt1QkFkZkUsV0FBYUQsYUFjRSxLQUpiTTtvQkFBaUJEOzs7b0JBbkV0QnB2QztZQW1DWjthQUZnQ3N2QyxhQWpDcEJ0dkM7YUFpQ0x1dkMsa0JBakNUOUs7YUFtQ0U7O2dCQUZPOEssa0JBakNDeE4sSUFpQ3dCdU47YUFFaEM7OzBCQURpQkcsbUJBQWlCRDs7O29CQWxDdEJ4dkM7WUF1Q1o7YUFGZ0MwdkMsY0FyQ3BCMXZDO2FBcUNMMnZDLGtCQXJDVGxMO2FBdUNFOztnQkFGT2tMLGtCQXJDQzVOLElBcUN3QjJOO2FBRWhDOzswQkFEaUJHLG1CQUFpQkQ7OztvQkF0Q3RCNXZDO1lBMkNaO2FBRmtDOHZDLGNBekN0Qjl2QzthQXlDSit2QyxrQkF6Q1Z0TDthQTJDRTs7Z0JBRlFzTCxrQkF6Q0FoTyxJQXlDMEIrTjthQUVsQzs7MEJBRGlCRyxtQkFBaUJEOzs7b0JBMUN0Qmh3QztZQStDWjthQUZrRGt3QyxjQTdDdENsd0M7YUE2Q0ltd0Msa0JBN0NsQjFMO2FBK0NFOztnQkFGZ0IwTCxrQkE3Q1JwTyxJQTZDMENtTzthQUVsRDs7MEJBRGlCRyxtQkFBaUJEOzs7TUE2Qi9CLG1CQUFtQjthQXpReEIzRCxnQkFNRTFLLElBNElNL2hDO01BNUlPLFVBQWIraEM7T0FtSDJCLFlBeUJyQi9oQzs7T0E1SU8sT0FBYitoQzs7b0JBNElNL2hDO1lBMUkyQjthQURaMHNDLFdBMklmMXNDO2FBM0lIc3dDLFNBREh2TzthQUVpQyxzQkFEOUJ1TyxTQUFrQjVEO2FBQ1k7O3lCQUFoQjVILE9BQU01a0M7OztvQkEwSWpCRjtZQXZJMkI7YUFEUDZzQyxhQXdJcEI3c0M7YUF4SUV1d0MsV0FKUnhPO2FBS2lDLHdCQUR6QndPLFdBQWtCMUQ7YUFDTzs7eUJBQWhCckgsT0FBTXVHOzs7VUFHbkI7V0FET3lFLFdBUFh6TztXQU9NbmpDLElBUE5takM7V0FRSSxxQkFERW5qQyxJQXFJQW9CO1dBcElGOzs7WUFFSjs7YUFBbUMsd0JBSHhCd3dDLFdBRXVCeEQ7YUFDQzs7OEJBQWhCRSxPQUFNbEI7VUFFRzs7VUFHeEI7V0FEWXlFLFdBZGhCMU87V0FjV2xqQyxNQWRYa2pDO1dBZUkscUJBRE9sakMsTUE4SExtQjtXQTdIRjs7O1lBRUo7O2FBQW1DLHdCQUhuQnl3QyxXQUVrQnJEO2FBQ0M7OzhCQUFoQkUsT0FBTXJCO1VBRUc7O1VBR3hCO1dBRGlCeUUsV0FyQnJCM087V0FxQmVqakMsS0FyQmZpakM7V0FxQlVoakMsTUFyQlZnakM7V0FxQkcvaUMsTUFyQkgraUM7V0FzQkkscUJBRE1oakMsTUFBS0QsS0F1SFRrQjtXQXRIRjs7O1lBRStCO2FBREV3dEM7YUFBYnZ1QzthQUNXLHdCQUhkeXhDLFdBRWdCbEQ7YUFDRjs7eUJBSGhDeHVDLFdBRXFCQyxPQUNMeXVDLE9BQU12QjtVQUVNOztVQUczQjtXQURtQndFLFdBNUJ2QjVPO1dBNEJpQjNpQyxPQTVCakIyaUM7V0E0Qlk3aUMsTUE1Qlo2aUM7V0E0Qks1aUMsUUE1Qkw0aUM7V0E2QkkscUJBRFE3aUMsTUFBS0UsT0FnSFhZO1dBL0dGOzs7WUFFK0I7YUFESTR0QzthQUFmcnVDO2FBQ1csd0JBSFpveEMsV0FFZ0IvQzthQUNKOzt5QkFIOUJ6dUMsYUFFbUJJLE9BQ0x1dUMsT0FBTTFCO1VBRU07O1VBRzNCO1dBRHVCd0UsV0FuQzNCN087V0FtQ3FCcmlDLE9BbkNyQnFpQztXQW1DZ0IxaUMsTUFuQ2hCMGlDO1dBbUNTemlDLFFBbkNUeWlDO1dBb0NJLHFCQURZMWlDLE1BQUtLLE9BeUdmTTtXQXhHRjs7O1lBRStCO2FBRFFndUM7YUFBbkI2QzthQUNXLHlCQUhSRCxXQUVnQjVDO2FBQ1I7O3lCQUgxQjF1QyxhQUVldXhDLE9BQ0wzQyxPQUFNNEM7VUFFTTs7VUFHM0I7V0FEbUJDLFdBMUN2QmhQO1dBMENpQmlQLE9BMUNqQmpQO1dBMENZdmlDLE1BMUNadWlDO1dBMENLdGlDLFFBMUNMc2lDO1dBMkNJLHNCQURRdmlDLE1BQUt3eEMsT0FrR1hoeEM7V0FqR0Y7OztZQUUrQjthQURJb3VDO2FBQWY2QzthQUNXLHlCQUhaRixXQUVnQjNDO2FBQ0o7O3lCQUg5QjN1QyxhQUVtQnd4QyxPQUNMM0MsT0FBTTRDO1VBRU07O1VBRzNCO1dBRG1CQyxXQWpEdkJwUDtXQWlEaUJxUCxPQWpEakJyUDtXQWlEWXBpQyxNQWpEWm9pQztXQWlES25pQyxNQWpETG1pQztXQWtESSxzQkFEUXBpQyxNQUFLeXhDLE9BMkZYcHhDO1dBMUZGOzs7WUFFK0I7YUFESXd1QzthQUFmNkM7YUFDVyx5QkFIWkYsV0FFZ0IzQzthQUNKOzt5QkFIOUI1dUMsV0FFbUJ5eEMsT0FDTHpDLE9BQU0wQztVQUVNOztVQUczQjtXQURLQyxXQXhEVHhQO1dBd0RJbGlDLE1BeERKa2lDO1dBeURJLHNCQURBbGlDLE1Bb0ZFRztXQW5GRjs7O1lBRUo7O2FBQW1DLHlCQUgxQnV4QyxXQUV1QnpDO2FBQ0c7OzhCQUFoQk0sT0FBTW9DO1VBRUc7O1VBR0s7V0FEN0JDLFdBL0RKMVA7V0FnRWlDLHlCQUQ3QjBQLFdBNkVFenhDO1dBNUUyQjs7d0JBQWhCd3ZDLFFBQU1rQzs7VUFJVTtXQURkQyxZQW5FbkI1UDtXQW1FY2ppQyxJQW5FZGlpQztXQW9FaUMseUJBRGQ0UCxZQXlFYjN4QztXQXhFMkI7O3dCQURuQkYsSUFDRzh2QyxRQUFNZ0M7O1VBR1U7V0FEaEJDLFlBdEVqQjlQO1dBc0VZaGlDLElBdEVaZ2lDO1dBdUVpQyx5QkFEaEI4UCxZQXNFWDd4QztXQXJFMkI7O3dCQURyQkQsSUFDS2l3QyxRQUFNOEI7O29CQXFFakI5eEM7O2FBakVtQnN2QyxhQWlFbkJ0dkM7YUFqRU95a0MsVUFpRVB6a0M7YUFsRXdCK3hDLFlBMUU5QmhRO2FBMEVtQjJDLFlBMUVuQjNDO2FBMEVVSCxRQTFFVkc7WUE0RUMsb0JBRmtCMkMsZ0JBQ05EO2FBQ3FDO1lBQ2pCO3NDQUhIc04sWUFDTHpDO2FBRVE7OzBCQUh2QjFOLFFBQ0c2QyxVQUVJMkwsUUFBTTRCOzs7b0JBK0RqQmh5QztZQTNEd0M7YUFETjB2QyxjQTREbEMxdkM7YUE1RFNpeUMsV0E0RFRqeUM7YUE3RDBCa3lDLFlBL0VoQ25RO2FBK0VxQm9RLFlBL0VyQnBRO2FBK0VZQyxVQS9FWkQ7YUFpRjhDLGtCQUQvQmtRO1lBQ2Qsb0JBQVUsVUFGVUU7YUFHckI7WUFEOEM7YUFHOUMseUJBTGdDRCxZQUtQLFVBSmV4QzthQUl4Qzs7MEJBTFkxTixVQUNHaVEsV0FHRUksUUFBTUQ7OztvQkF5RGpCcHlDO1lBbkQyQjthQURWOHZDLGNBb0RqQjl2QzthQXBERnN5QyxZQXhGSnZRO2FBeUZpQyx5QkFEN0J1USxZQUFtQnhDO2FBQ1U7OzBCQUFoQjBDLFFBQU1EOzs7b0JBbURqQnZ5QztZQWhEMkI7YUFEVmt3QyxjQWlEakJsd0M7YUFqREZ5eUMsWUEzRkoxUTthQTRGaUMseUJBRDdCMFEsWUFBbUJ2QzthQUNVOzswQkFBaEJ5QyxRQUFNRDs7O1VBS1U7V0FESEUsWUFoRzlCN1E7V0FnR2M5bEMsZUFoR2Q4bEM7V0FpR2lDLHlCQURINlEsWUE0Q3hCNXlDO1dBM0MyQjs7d0JBRG5CL0QsZUFDRzYyQyxRQUFNRDs7Y0FFT0UsWUFuRzlCaFIsT0FtR2NpUixlQW5HZGpSO1VBNEg0QixTQXpCZGlSO1lBMkJtQjtzQkEzQm5CQTthQTBCUTNPO2FBQU4zbEM7YUFDaUIseUJBRGpCQSxLQWVWc0I7YUFkMkI7O2FBQ0EseUJBNUJIK3lDLFlBMkJQeDBDO2FBQ1U7O2dDQURoQkksS0FESzBsQyxRQUVMNk8sTUFBTUQ7VUFHVTtvQkEvQm5CRDtXQThCUS9OO1dBQU5rTztXQUNpQix5QkFEakJBLE9BV1ZuekM7V0FWMkI7O1dBQ0EseUJBaENIK3lDLFlBK0JQSztXQUNVOzs4QkFEaEJDLE9BREtwTyxRQUVMc08sUUFBTUQ7O29CQVNqQnR6QztZQXBDMkI7YUFEUnd6QyxjQXFDbkJ4ekM7YUFyQ0R5ekMsWUF2R0wxUjthQXdHaUMseUJBRDVCMFIsWUFBb0JEO2FBQ1E7OzBCQUFoQkcsUUFBTUQ7OztvQkFvQ2pCMXpDO1lBakMyQjthQURzQjR6QyxjQWtDakQ1ekM7YUFsQzRCNnpDLFlBMUdsQzlSO2FBMEd3Qm5oQyxTQTFHeEJtaEM7YUEwR2FsaEMsVUExR2JraEM7YUEyR2lDLHlCQURDOFIsWUFBcUJEO2FBQ3RCOzswQkFEcEIveUMsVUFBV0QsU0FDUG16QyxRQUFNRDs7O29CQWlDakI5ekM7WUE5QjJCO2FBRFVnMEMsY0ErQnJDaDBDO2FBL0JtQmkwQyxZQTdHekJsUzthQTZHZ0JoaEMsUUE3R2hCZ2hDO2FBOEdpQyx5QkFEUmtTLFlBQWtCRDthQUNWOzswQkFEakJqekMsUUFDQ296QyxRQUFNRDs7O2NBRUw5MkMsS0FoSGxCMmtDLE9BZ0hhN2dDLElBaEhiNmdDO1VBNEllLFVBNUJGN2dDO1dBNEJFLE9BNUJGQTtvQkE2QnVCLDhCQTdCdkJBLElBQUs5RCxLQTRCWjRDO29CQUU4Qiw4QkE5QnZCa0IsSUFBSzlELEtBNEJaNEM7O2NBc0JVLFVBdEJWQTtnQkF5Qk47K0JBekJNQTtpQkF5QjZCLHlCQXJEakI1QyxLQW9EQWkzQztpQkFDaUI7O2dDQUFoQkUsUUFBTUQ7Y0FFcEI7cUJBZCtCLDhCQXpDdkJwekMsSUFBSzlELEtBNEJaNEM7O1dBQVMsT0E1QkZrQjtvQkErQnVCLDhCQS9CdkJBLElBQUs5RCxLQTRCWjRDO29CQUk4Qiw4QkFoQ3ZCa0IsSUFBSzlELEtBNEJaNEM7b0JBSzhCLDhCQWpDdkJrQixJQUFLOUQsS0E0Qlo0QztvQkFNOEIsOEJBbEN2QmtCLElBQUs5RCxLQTRCWjRDO29CQU84Qiw4QkFuQ3ZCa0IsSUFBSzlELEtBNEJaNEM7b0JBUThCLDhCQXBDdkJrQixJQUFLOUQsS0E0Qlo0QztvQkFTOEIsOEJBckN2QmtCLElBQUs5RCxLQTRCWjRDO29CQVU4Qiw4QkF0Q3ZCa0IsSUFBSzlELEtBNEJaNEM7O2tCQWNxQncwQyxZQTFDZHR6QyxPQTBDSytnQyxVQTFDTC9nQztxQkEwRGZrekM7MEJBaEJvQm5TLFVBQVN1UyxhQTFDVHAzQyxLQTRCWjRDOztjQWtCTjtlQUY2QnkwQyxZQTVDaEJ2ekM7ZUE0Q09naEMsVUE1Q1BoaEM7ZUE4Q2Isb0NBRjZCdXpDLFlBNUNYcjNDLEtBNEJaNEM7ZUFrQk47Ozs7K0JBRm9Ca2lDLFVBQ0gwUyxhQUEyQkQsUUFBTUQ7cUJBTmQsOEJBdkN2Qnh6QyxJQUFLOUQsS0E0Qlo0QztxQkFZOEIsOEJBeEN2QmtCLElBQUs5RCxLQTRCWjRDOztNQXZCSCxtQkFBbUI7YUFxRHhCbzBDLHVCQUtFbHpDLElBQUk2Z0MsSUFBSS9oQztNQUN1QiwwQkFEM0IraEMsSUFBSS9oQyxPQUN1QjtvQkFEL0JrQixJQUNlNGpDLE9BQU01a0MsUUFDd0I7YUFqTTNDMjBDLFlBTUY5UyxJQUFJL2hDO01BQWUseUJBQW5CK2hDLElBQUkvaEM7TUFBZSxnQ0FDaUIsSUFBdkI4a0MsY0FBdUIsT0FBdkJBO01BQ1YsbUJBQW1CO2FBcVN4QmdRLE9BUUUvUyxJQUFJL2hDLE9BQ1EsbUJBRForaEMsSUFDWSxVQUFXLEtBRG5CL2hDLFFBQ2dDO2FBTXRDKzBDLFlBQVlyUixNQUFNN0IsTUFBTS9oQztNQUMxQjtpQ0FEMEJBO09BQzFCLGFBRG9CK2hDLE1BQU42QjtPQUdaLFlBSGtCN0I7TUFHbEIsR0FERW1ULFdBREEvdkMsSUFhaUIsT0FkS25GO01BQzFCLElBY0UsV0FmWWlrQyxjQWVGLFdBYlJpUjtNQWFRLE9BZkVqUjtlQWlCRCxPQWpCYWprQyxNQWVwQjJHLE1BZEZ4QjtlQWlCUyxPQWxCYW5GLE1BZXBCMkcsSUFiRnV1QyxVQURBL3ZDOzs7U0FrQlcsT0FsQlhBOztXQWtCeUQ7OzthQUFsQyxnQkFuQkRuRjs7OzthQW1Ca0IsZ0JBbkJsQkE7Ozs7YUFtQm1DLGdCQW5CbkNBOzs7YUFvQnRCLGVBTEUyRyxNQUtjLGdCQXBCTTNHO2FBcUJ0QixPQXJCc0JBLE1BZXBCMkcsS0FiRnV1QyxVQURBL3ZDOzs7U0l2eEJFOztXSjR5Qm9CLE9BckJ0QkEsY0FxQnNCLGdCQXRCQW5GOzthQXNCbUM7OztlQUFqQixnQkF0QmxCQTs7OztlQXNCbUMsZ0JBdEJuQ0E7OztlQXVCdEIsZUFSRTJHLE1BUWMsZ0JBdkJNM0c7ZUF3QnRCLE9BeEJzQkEsTUFlcEIyRyxLQWJGdXVDLFVBREEvdkM7Ozt1QkF5QkEsT0ExQnNCbkYsTUFlcEIyRyxJQWJGdXVDLFVBREEvdkM7TUEyQkYsNEJBYkl3QixJQWFzQjthQUcxQnd1QyxrQkFBa0JuMkMsS0FBS2dCO01BQ2Q7a0JBRFNoQjtPQUNULDBCQURjZ0I7T0FHbkIsa0JBSG1CQTs7TUFHbkIsU0FDSndFOzs7Ozs7Ozs7OztnQkFGRVcsT0FEQWhHLHVCQUNBZ0c7O2VBT3NEOzs7aUJBQWpCLGdCQVRoQm5GOzs7O2lCQVNpQyxnQkFUakNBOzs7aUJBVWIsSUFBTm8xQyxNQUFNLE9BVFJqMkM7aUJBVUYsZUFESWkyQyxRQUNZLGdCQVhPcDFDO2lCQVl2QixPQVp1QkEsTUFVbkJvMUMsT0FURmoyQyxTQUNBZ0c7aUJBVUYsNEJBRklpd0M7Ozs7Ozs7Ozs7OztRQU53QixpQkFGMUJqd0MsT0FEQWhHO1VBSVEsSUFBTjJrQixNQUFNLE9BSlIza0I7VUFLRixlQURJMmtCLFFBREp0ZjtVQUdBLE9BUHVCeEUsTUFLbkI4akIsT0FKRjNrQixTQUNBZ0c7VUFLRiw0QkFGSTJlO01BU3NDLGVBWnhDM2UsTUFEQWhHO1FBY1EsSUFBTndILElBQU0sT0FkUnhIO1FBZUYsT0FoQnVCYSxNQWVuQjJHLElBZEZ4SCxTQUNBZ0c7UUFjRiw0QkFESXdCO01BSUosT0FuQnVCM0csR0FtQnBCO2FBR0hxMUMsc0JBQXNCcjFDO01BQ2Q7dUJBRGNBO09BQ2Qsd0JBQU51a0M7T0FFTSxXQURON2dDO01BRUosaUJBSEk2Z0MsUUFFQTU5QixNQURBakQ7TUFFSiw0QkFESWlELElBRXNCO2FBcUN4QjJ1QyxnQkFBZ0J4MUMsTUFBTWQ7TUFDWDtrQkFEV0E7T0FFWCx3QkFGS2M7T0FHTjtNQUNWLGdCQURJeUc7TUFFSixrQkFGSUEsSUFIWXpHO01BTWhCLGdCQUhJeUc7TUFJSixrQkFKSUEsSUFJa0IsNEJBTmxCcEg7TUFPSixnQkFMSW9ILElBREFndkM7TUFNSix1QkFMSWh2QyxJQU1lO2FBRW5CaXZDLGtCQUFrQnQyQyxNQUFNNEM7TUFDMUIsU0FEb0I1QztRQUdsQix1Q0FId0I0QyxXQUd4Qjs7Y0FFRTZCO1VBQ0U7NkNBTm9CN0IsRUFLdEI2QjtZQUNFLDRCQUNjO1lBRGQsU0FERkE7OztRQUZGO1NBT0UsT0FOSS9CO1NBUUk7O1lBRlIsc0JBVnNCRSxPQUdwQjJ6QztTQVNNO3NCQUVGanhDLEdBQUksZUFGUitCLElBQ0ErM0IsT0FDSTk1QixHQUFJLGlCQUE4QjtTQUZoQyxVQVROaXhDO1NBU00sMkJBWmMzekM7U0FZZDs7Y0FJVjFFO1VBQ0U7Z0JBQ0VvSCxFQURGLHVCQWpCc0IxQyxFQWdCeEIxRTtZQUNFLE9BQ0VvSDthQUVLLElBRkxBOztjQUNFLFNBSkZ1RixTQUlxQixvQkFBcUIsY0FBVyxJQURyRHZGO1lBREYsU0FERnBIOzs7UUFNQSw0QkFWSW1KO01BV0MsT0F2Qm1CekUsQ0F1QmxCO2FBR042ekMsWUFBWXoyQyxNQUFNMEM7TUF0RUEsT0FzRU4xQzs7Ozs7Ozs7Ozs7Ozs7OztNQUM2Qyx5QkFEN0NBLE1BQzZDLHFCQUR2QzBDLEdBQzBDO2FBQzVEZzBDLGNBQWMxMkMsTUFBTTBDO01BeERELE9Bd0RMMUM7Ozs7Ozs7Ozs7Ozs7Ozs7TUFDOEMseUJBRDlDQSxNQUM4QyxxQkFEeEMwQyxHQUMyQzthQUMvRGkwQyxrQkFBa0IzMkMsTUFBTTBDO01BbERMLE9Ba0REMUM7Ozs7Ozs7Ozs7Ozs7Ozs7TUFDOEMseUJBRDlDQSxNQUM4QyxxQkFEeEMwQyxHQUMyQzthQUNuRWswQyxjQUFjNTJDLE1BQU0wQztNQXBFRCxPQW9FTDFDOzs7Ozs7Ozs7Ozs7Ozs7O01BQzhDLHlCQUQ5Q0EsTUFDOEMsdUJBRHhDMEMsR0FDMkM7YUFJL0RtMEMsY0FBY2oyQyxNQUFNZCxLQUFLaUQ7TUFDM0IsU0FBSSt6QztRQUNGLE9BRmNsMkM7cUJBRVZtMkM7OztRQUtKLHVDQVB5QmgwQyxFQUFMakQsS0FFaEJpM0MsS0FLMEI7TUFOaEMsU0FlSUMsaUJBQWlCbDJDO1FBQVksc0NBaEJOaUM7UUFnQk07aUJBaEJOQTtvQ0FnQk5qQyxHQUdGO01BbEJuQixPQURnQkY7O1NBeUJxQztnQ0FBNUIsZ0JBekJUQSxNQUFNZCxNQUFLaUQ7VUFTekIsMEJBRG9CakM7VUFFSDVDO1NBQ2Y7Y0FEZUEsTUFEYitIOzs7YUFHTSwwQkFKVW5GLElBRUg1QyxHQUVQOzs7OzthSWo3Qk4sZUptN0JPLFFBSk1BO2FBRVA7eUJBSlU0QyxJQU9RLElBUFJBO2tCQVFsQmsyQztlQUtTO2VBQ3VCO2VBQ0w7Z0JBS1kseUJBQTVCLGdCQTVCQ3AyQyxNQUFNZCxNQUFLaUQsR0E0QmtCO2FBVzNDazBDLGdCQUFnQmoyQztNQUNSLElBQU5xRyxJQUFNO01BQ1YsYUFESUEsSUFEY3JHO01BRWxCLHVCQURJcUcsSUFFZTthQVliNnZDLHNCQUdKL2QsRUFBRTNvQixJQUFJdXlCO1VBQU4vQixNQUFFdndCLFVBQUlxMUI7TUFBTztpQkFBUEE7UUF1Rk4sa0JBdkZBOUUsSUFBRXZ3Qjs7UUFBVyxPQUFQcTFCOztXQUVOLElBREsxbkMsS0FEQzBuQztXQUVOLGdCQUFJeGdDO2FBQ0YsSUFBSTZ4QyxXQUhKMW1DLE1BRUVuTCxHQUNGLG1CQUhGMDdCLElBR01tVyxRQUZELzRDLEtBR3VCOztXQUU1QixJQURVQyxPQUxKeW5DO1dBTU4sZ0JBQUl4Z0M7YUEvQkk7MEJBK0JKQTtjQS9CSSx3QkFBTnhFO2NBRU0sV0FETjBEO2FBRUosaUJBSEkxRCxNQUVBMkcsTUFEQWpEO2FBRE0sSUFnQ0YyeUMsV0FQSjFtQyxNQXRCSixxQkFESWhKO29CQW9CRTJ2QyxZQUdKcFcsSUFPTW1XLFFBRkk5NEMsT0FHa0I7O2VBQ2ZDLE9BVFB3bkMsU0FTRWxtQyxJQVRGa21DO2tCQW9KTnVSLGFBcEpBclcsSUFBRXZ3QixNQVNXblMsT0FBTHNCLGFBQ3lCa0IsS0FBTyxPQUFQQSxHQUFVOztlQUN6QnZDLE9BWFp1bkMsU0FXT2ptQyxNQVhQaW1DO2tCQW9KTnVSLGFBcEpBclcsSUFBRXZ3QixNQVdnQmxTLE9BQUxzQixNQTlKYnMyQzs7ZUFnS3VCMzNDLE9BYmpCc25DLFNBYVdobUMsS0FiWGdtQyxTQWFNL2xDLE1BYk4rbEMsU0FhRDlsQyxNQWJDOGxDO2tCQXdLTndSO29CQXhLQXRXLElBQUV2d0IsTUFhcUJqUyxPQUFYdUIsTUFBS0QsS0FqRmpCMjJDLFlBaUZLejJDOzs7WUFFb0J2QixPQWZuQnFuQztZQWVhN2xDLE9BZmI2bEM7WUFlUTVsQyxNQWZSNGxDO1lBZUMzbEMsUUFmRDJsQztrQkF3S053UjtvQkF4S0F0VyxJQUFFdndCLE1BZXVCaFMsT0FBWHlCLE1BQUtELE9BakZuQnkyQyxjQWlGT3YyQzs7O1lBRXNCekIsT0FqQnZCb25DO1lBaUJpQjFsQyxPQWpCakIwbEM7WUFpQll6bEMsTUFqQlp5bEM7WUFpQkt4bEMsUUFqQkx3bEM7a0JBd0tOd1I7b0JBeEtBdFcsSUFBRXZ3QixNQWlCMkIvUixPQUFYMkIsTUFBS0QsT0FqRnZCdTJDLGtCQWlGV3IyQzs7O1lBRWMzQixPQW5CbkJtbkM7WUFtQmF2bEMsT0FuQmJ1bEM7WUFtQlF0bEMsTUFuQlJzbEM7WUFtQkNybEMsUUFuQkRxbEM7a0JBd0tOd1I7b0JBeEtBdFcsSUFBRXZ3QixNQW1CdUI5UixPQUFYNkIsTUFBS0QsT0FqRm5CcTJDLGNBaUZPbjJDOztlQUVrQjdCLE9BckJuQmtuQyxTQXFCYXBsQyxPQXJCYm9sQyxTQXFCUW5sQyxNQXJCUm1sQyxTQXFCQ2xsQyxNQXJCRGtsQztXQXlOd0IsVUFwTWhCbmxDO3VCQUFLRDtjQThNbkIsT0E5TW1CQTtnQ0E4TWY4USxFQUFFek87eUJBQ00sSUFBTmpDLElBQU0sY0EvTUxGLE1BOE1INFEsRUFBRXpPO3lCQUNNLG1CQXBPWmkrQixPQUFFdndCLE1Bb09JM1AsS0EvTW1CbEMsT0FnTnVCO2dDQVY1Q21FO3lCQUNROzBCQUFOakM7MkJBQU0sY0F2TUxGLE1BdU15Qix3QkF2TXpCQSxPQXNNSG1DO3lCQUNRLG1CQTVOWmkrQixPQUFFdndCLE1BNE5JM1AsS0F2TW1CbEMsT0F3TXVCO2FBRWhELElBRDBCNFMsRUF6TVA5UTthQTBNbkIsZ0JBQUlxQztlQUNRLElBQU5qQyxJQUFNLGNBM01MRixNQXlNbUI0USxFQUN0QnpPO2VBQ1EsbUJBaE9aaStCLE9BQUV2d0IsTUFnT0kzUCxLQTNNbUJsQyxPQTRNdUI7O2FBUmxCLFNBcE1oQitCOzt5QkFBS0Q7O2tDQTJOZjhRLEVBQUV6TzsyQkFDTSxJQUFOakMsSUFBTSxzQkFBb0IsY0E1TnpCRixNQTJOSDRRLEVBQUV6TzsyQkFDTSxtQkFqUFppK0IsT0FBRXZ3QixNQWlQSTNQLEtBNU5tQmxDLE9BNk51QjtrQ0FYNUNtRTsyQkFDUTs4Q0FuTkxuQyxNQW1OeUIsd0JBbk56QkEsT0FrTkhtQzs0QkFFUyw0QkFEUGpDOzJCQUNPLG1CQXpPYmtnQyxPQUFFdndCLE1BeU9JNDBCLE9BcE5tQnptQyxPQXFOd0I7bUJBQ1gyNEMsSUF0Tm5CNzJDOytCQXVOZnFDO2lCQUNRLElBQU5qQyxJQUFNLHNCQUFvQixjQXhOekJGLE1Bc04rQjIyQyxJQUNsQ3gwQztpQkFDUSxtQkE3T1ppK0IsT0FBRXZ3QixNQTZPSTNQLEtBeE5tQmxDLE9BeU51QjtzQkF6TmxDK0I7dUJBQUtEOztnQ0F3T2Y0c0MsRUFBRTk3QixFQUFFek87eUJBQ0ksSUFBTmpDLElBQU0saUJBRFJ3c0MsRUFDNEIsY0F6T3pCMXNDLE1Bd09ENFEsRUFBRXpPO3lCQUNJLG1CQTlQWmkrQixPQUFFdndCLE1BOFBJM1AsS0F6T21CbEMsT0EwT3VCO2dDQVg1QzB1QyxFQUFFdnFDO3lCQUNNOzRDQWhPTG5DLE1BZ095Qix3QkFoT3pCQSxPQStORG1DOzBCQUVPLHVCQUZUdXFDLEVBQ0V4c0M7eUJBQ08sbUJBdFBia2dDLE9BQUV2d0IsTUFzUEk0MEIsT0FqT21Cem1DLE9Ba093QjtpQkFDaEI0NEMsSUFuT2Q5MkM7NkJBb09mNHNDLEVBQUV2cUM7ZUFDTSxJQUFOakMsSUFBTSxpQkFEUndzQyxFQUM0QixjQXJPekIxc0MsTUFtTzBCNDJDLElBQzNCejBDO2VBQ00sbUJBMVBaaStCLE9BQUV2d0IsTUEwUEkzUCxLQXJPbUJsQyxPQXNPdUI7O2VBcE9yQ0UsT0F2QkxnbkMsU0F1QkFqbEMsTUF2QkFpbEM7a0JBb0pOdVIsYUFwSkFyVyxJQUFFdndCLE1BdUJTM1IsT0FBTCtCLE1PdjNDTm9EOztXUDA0Q0EsVUExQ002aEMsU0EwQ04sU0ExQ0VyMUIsbUJBQUlxMUI7Ozs7O1lBNENVaGxDLElBNUNWZ2xDO1lBQUoxZ0IsZUE0Q2N0a0I7WUE1Q2QyUDtZQUFJcTFCOzs7OztZQThDUS9rQyxJQTlDUitrQztZQUFKMlIsZUE4Q1kxMkM7WUE5Q1owUDtZQUFJcTFCOzs7V0FrREc7WUFEaUI5bUMsT0FqRHBCOG1DO1lBaURTTCxVQWpEVEs7WUFrREcsbUJBRE1MO1dBQ04sZ0JBQ0oza0MsS0FDSCxtQkFwREZrZ0MsT0FBRXZ3QixNQWtERTVSLElBRHNCRyxPQUlzQjs7ZUFDeEJDLFFBdERsQjZtQyxTQXNEVzlrQyxNQXREWDhrQzs7YUF1RE4sSUFBYS9DO2FBQ1g7c0JBeERGL0IsSUFBRXZ3QixNQXdEQSxXQUFZLE9BRERzeUIsSUFESS9oQyxPQUFPL0IsU0FFYzs7V0E5QnRDLElBRE1DLFFBekJBNG1DO1dBMEJOLGdCQUFJMWpDLEVBQUVXO2FBQUs7c0JBMUJYaStCO3lCQUFFdndCLGVBMEI0Q3pDLEdBQUssa0JBQS9DNUwsRUFBMEM0TCxFQUF4Q2pMLEVBQWtEO3NCQURsRDdELFFBQ3lEOztXQUUvRCxJQURNQyxRQTNCQTJtQztXQTRCTixnQkFBSTFqQyxHQUFLLG1CQTVCVDQrQixPQUFFdndCLE1BNEJFck8sR0FERWpELFFBQzBDOzs7WUE1QjFDdXZDO1lBMkVVbnRDLFdBM0VWdWtDO1lBQUo0UixlQTJFY24yQztZQTNFZGtQO1lBQUlxMUI7Ozs7OztjQTZFdUMxbUMsUUE3RXZDMG1DOzs7Y0FBTjZSO3dCQUFFbm5DLElBQUYyb0IsRUE2RTZDLzZCOzBCQTdFN0M0aUMsSUE4RU80VzttQkFDTCxtQkEvRUZ6ZSxLQUFFM29CLE9BOEVLb25DLE9BRHNDeDVDLEtBRXFCO3dCQS9FbEU0aUM7c0JBQUV2d0IsTUFBRnV3QixJQTZFNkM1aEM7Y0E3RTdDNGhDO2NBQUV2d0I7Y0FBSXExQjs7O1lBaUZ1QzFrQyxRQWpGdkMwa0M7OztZQUFOK1I7c0JBQUVybkMsSUFBRjJvQixFQWlGNkMvNkI7d0JBakY3QzRpQyxJQWtGTzRXLE1BQ0wsbUJBbkZGemUsS0FBRTNvQixPQWtGS29uQyxPQURzQ3g1QyxLQUVxQjtzQkFuRmxFNGlDO29CQUFFdndCLE1BQUZ1d0IsSUFpRjZDNS9CO1lBakY3QzQvQjtZQUFFdndCO1lBQUlxMUI7O2tCQXdDTjs7ZUFrQnFCemtDLFFBMURmeWtDLFNBMkRGcVIsV0EzREYxbUM7a0NBNERPLG1CQTVEVHV3QixJQTJESW1XLFFBRGlCOTFDLFFBRWM7O1dBS25DLElBSnFCQyxRQTdEZndrQztXQWlFTixnQkFBSXBqQzthQUNrQyxJQUFoQ3kwQyxXQWxFSjFtQyxNQWtFb0Msd0JBRGxDL047YUFDa0MsbUJBbEV0Q3MrQixJQWtFTW1XLFFBTGU3MUMsUUFNTzs7V0FFNUIsSUFEZUUsUUFwRVRza0M7V0FxRU4sZ0JBQUl4Z0M7YUFDRixJQUFJNnhDLFdBdEVKMW1DLE1BcUVFbkwsR0FDRixtQkF0RUYwN0IsSUFzRU1tVyxRQUZTMzFDLFFBR2E7O2VBQ1JFLFFBeEVkb2tDLFNBd0VTNWpDLElBeEVUNGpDOzs7b0JBMkZOZ1MsK0JBM0ZBOVcsSUFBRXZ3QixNQXdFYXZPLElBQUtSOztvQkFtQnBCbzJDLHdCQTNGQTlXLElBQUV2d0IsTUF3RWF2TyxJQUFLUjs7V0ExQ1M7WUFEWEMsUUE3Qlpta0M7WUE2QlMxakMsRUE3QlQwakM7WUE2QkV6akMsTUE3QkZ5akM7WUE4QnVCLGdCQURkMWpDO1dBQ2M7O29CQWtPN0IyMUMsd0JBaFFBL1csSUFBRXZ3QixNQTZCZ0I5TyxRQUFWVTs7b0JBbU9SMDFDLGlCQWhRQS9XLElBQUV2d0IsTUE2QmdCOU8sUUFBVlUsYUEwREg7YUFJTHkxQyw2QkFJQTNlLEVBQUUzb0IsSUFBSXRPLElBQUk2Z0M7TUFBTyxVQUFYN2dDO09BQVcsT0FBWEE7O1VBQzZCOzttQkE2Q25DODFDLDJCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7O1VBRXlCOzttQkE0Q25DaVYsMkJBOUNBN2UsRUFBRTNvQixJQUFRdXlCO3dDQThDVmlWLG9CQTlDQTdlLEVBQUUzb0IsSUFBUXV5QjtnQkFheUI7O1VBR0E7O21CQThCbkNpViwyQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztPQUFPLE9BQVg3Z0M7O1VBRzZCOzttQkEyQ25DODFDLDJCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7O1VBSXlCOzttQkEwQ25DaVYsMkJBOUNBN2UsRUFBRTNvQixJQUFRdXlCO3dDQThDVmlWLG9CQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjs7VUFLeUI7O21CQXlDbkNpViwyQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztVQU15Qjs7bUJBd0NuQ2lWLDJCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7O1VBT3lCOzttQkF1Q25DaVYsMkJBOUNBN2UsRUFBRTNvQixJQUFRdXlCO3dDQThDVmlWLG9CQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjs7VUFReUI7O21CQXNDbkNpViwyQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztVQVN5Qjs7bUJBcUNuQ2lWLDJCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7O1VBVXlCOzttQkFvQ25DaVYsNEJBOUNBN2UsRUFBRTNvQixJQUFRdXlCO3dDQThDVmlWLG9CQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjs7VUFXeUI7O21CQW1DbkNpViw0QkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztVQVl5QixJQUFWL2hDLE1BWm5Ca0I7VUFZNkI7O21CQVFuQysxQyw2QkFwQkE5ZSxFQUFFM29CLElBWXVCeFAsTUFaZitoQzt3Q0FvQlZrVixxQkFwQkE5ZSxFQUFFM29CLElBWXVCeFAsTUFaZitoQzs7VUFjeUI7O21CQWdDbkNpViw0QkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztVQWV5Qjs7bUJBK0JuQ2lWLDRCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUIsTUFnQm1EO2FBSTdEa1YsMEJBSUE5ZSxFQUFFM29CLElBQUl4UCxNQUFNK2hDO01BQU8sVUFBYi9oQztRQWVxQjs7aUJBTzNCZzNDLDJCQXRCQTdlLEVBQUUzb0IsSUFBVXV5QjtzQ0FzQlppVixvQkF0QkE3ZSxFQUFFM29CLElBQVV1eUI7O09BQU8sT0FBYi9oQzs7VUFDcUIsSUFBbkI1QyxLQURGNEM7VUFDcUIsdUJBQVMsdUJBRHBDbTRCLEVBQUUzb0IsSUFDTXBTLEtBREkya0MsSUFDc0Q7O1VBQ3ZDLElBQWpCMWtDLE9BRkoyQztVQUVxQix1QkFBUyx1QkFGcENtNEIsRUFBRTNvQixJQUVRblMsT0FGRTBrQyxJQUVzRDs7VUFDdkMsSUFBcEJ6a0MsT0FIRDBDO1VBR3FCLHVCQUFTLHVCQUhwQ200QixFQUFFM29CLElBR0tsUyxPQUhLeWtDLElBR3NEOztVQUN2QyxJQUFsQnhrQyxPQUpIeUM7VUFJcUIsdUJBQVMsdUJBSnBDbTRCLEVBQUUzb0IsSUFJT2pTLE9BSkd3a0MsSUFJc0Q7O1VBQ3ZDLElBQWR2a0MsT0FMUHdDO1VBS3FCLHVCQUFTLHVCQUxwQ200QixFQUFFM29CLElBS1doUyxPQUxEdWtDLElBS3NEOztVQUN2QyxJQUFsQnRrQyxPQU5IdUM7VUFNcUIsdUJBQVMsdUJBTnBDbTRCLEVBQUUzb0IsSUFNTy9SLE9BTkdza0MsSUFNc0Q7O1VBQ3ZDLElBQWxCcmtDLE9BUEhzQztVQU9xQix1QkFBUyx1QkFQcENtNEIsRUFBRTNvQixJQU9POVIsT0FQR3FrQyxJQU9zRDs7VUFDdkMsSUFBbkJwa0MsT0FSRnFDO1VBUXFCLHVCQUFTLHVCQVJwQ200QixFQUFFM29CLElBUU03UixPQVJJb2tDLElBUXNEOztVQU12QyxJQUFUbmtDLE9BZFpvQztVQWNxQix1QkFBUyx1QkFkcENtNEIsRUFBRTNvQixJQWNnQjVSLE9BZE5ta0MsSUFjc0Q7O1VBR3pEO1dBRGtCamtDLE9BaEJyQmtDO1dBZ0JnQnhCLElBaEJoQndCO1dBZ0JXakMsSUFoQlhpQztXQWlCRyxTQUFNLEtBREVqQyxLQUFLUztVQUNiO1lBQ3NCLHVCQWxCL0IyNUIsRUFBRTNvQixJQWtCNkIsYUFEM0IzUixHQUR1QkMsUUFoQmZpa0MsSUFrQjZDOztVQVQ5QixJQUFsQi9qQyxPQVRIZ0M7VUFTcUI7WUFBVyx1QkFUdENtNEIsRUFBRTNvQixJQVNPeFIsT0FURytqQyxJQVN3RDs7VUFDekMsSUFBbEI5akMsUUFWSCtCO1VBVXFCLHVCQUFTLHVCQVZwQ200QixFQUFFM29CLElBVU92UixRQVZHOGpDLElBVXNEOztVQUN2QyxJQUFwQjdqQyxRQVhEOEI7VUFXcUIsdUJBQVMsdUJBWHBDbTRCLEVBQUUzb0IsSUFXS3RSLFFBWEs2akMsSUFXc0Q7aUJBQ3ZDO2lCQUNBLDhCQUs4QjthQUl6RGlWLHlCQUdBN2UsRUFBRTNvQixJQUFJdXlCO01BQ1IsWUFESXZ5QjtNQUNKOztlQXBKTTBtQyx3QkFtSkovZCxPQUFNNEo7b0NBbkpGbVUsaUJBbUpKL2QsT0FBTTRKLEtBQzhEO2FBK0dwRWdWLHNCQUlFNWUsRUFBRTNvQixJQUFJcFMsS0FBS2lFLE1BQU1EO01BQUssR0FBWEM7UUFHYixJQURZOHBDLFFBRkM5cEM7UUFHYixnQkFBSVU7VUFDMkIsbUJBSjdCbzJCLEVBQUUzb0IsSUFBSXBTLEtBRUkrdEMsUUFFbUIsV0FKWi9wQyxFQUdmVyxHQUNnQztNQUhyQixZQURYeU4sSUFBZXBPO01BQ0o7O2VBeFFYODBDLHdCQXVRRi9kLE9BQU0vNkI7b0NBdlFKODRDLGlCQXVRRi9kLE9BQU0vNkIsTUFJNEI7YUEzUWhDZzVDLFlBR0pqZSxFQUFFM29CLElBQUl1eUI7TUo5K0NYLHVCSTIrQ1NtVSxnQkFHSi9kLEVBQUUzb0IsSUFBSXV5QjthQTJGTnFWLG1CQUlBamYsRUFBRTNvQixJQUFJdE8sSUFBSTZnQztNSjdrRGYsdUJJeWtESytVLHVCQUlBM2UsRUFBRTNvQixJQUFJdE8sSUFBSTZnQzthQW9CVm1WLGdCQUlBL2UsRUFBRTNvQixJQUFJeFAsTUFBTStoQztNSnJtRGpCLHVCSWltREtrVixvQkFJQTllLEVBQUUzb0IsSUFBSXhQLE1BQU0raEM7YUF5SVpvVixZQUlFaGYsRUFBRTNvQixJQUFJcFMsS0FBS2lFLE1BQU1EO01KbHZEeEIsdUJJOHVESzIxQyxnQkFJRTVlLEVBQUUzb0IsSUFBSXBTLEtBQUtpRSxNQUFNRDthQWhIbkJpMUMsYUFJRWxlLEVBQUUzb0IsSUFBSXV5QixJQUFJbmpDLElBQUk4bUM7TUFBUyxVQUFiOW1DO09BRVosZ0JBQUltRDtTQUNrQyxJQUFoQ28wQyxXQUhGM21DLElBR2tDLFdBSHRCazJCLE1BRVozakM7U0FDa0MsbUJBSHBDbzJCLEVBR0lnZSxRQUhFcFUsSUFJbUI7O1FBSkYsU0FBYm5qQztjQUtRaWpDLE1BTFJqakMsT0FLQzhrQyxNQUxEOWtDOzBCQU1SbUQ7WUFDa0MsSUFBaENvMEMsV0FQRjNtQyxJQU9rQyxZQUZ6QmswQixNQUFPN0IsTUFFMEMsV0FQOUM2RCxNQU1aM2pDO1lBQ2tDLG1CQVBwQ28yQixFQU9JZ2UsUUFQRXBVLElBUW1CO1FBRTNCLElBRFlnQyxRQVRBbmxDO1FBVVosZ0JBQUkwdEMsRUFBRXZxQztVQUNnQyxJQUFoQ28wQyxXQVhGM21DLElBV2tDLFlBRjFCdTBCLFFBQ1J1SSxFQUNzRCxXQVgxQzVHLE1BVVYzakM7VUFDZ0MsbUJBWHBDbzJCLEVBV0lnZSxRQVhFcFUsSUFZbUI7YUFJM0J1VSwyQkFLRW5lLEVBQUUzb0IsSUFBSXV5QixJQUFJbmpDLElBQUlFLEtBQUs0bUMsTUFBTTFtQztNQUFTLFVBQXhCSjtrQkFBSUU7U0FVaEIsT0FWZ0JBOzJCQVVaMFIsRUFBRXpPO29CQUNNLElBQU5qQyxJQUFNLGtCQURSMFEsRUFDNEIsV0FYWGsxQixNQUFNMW1DLE1BVXJCK0M7b0JBQ00sbUJBWFZvMkIsS0FBRTNvQixJQVdFMVAsS0FYRWlpQyxJQVl3QzsyQkFWNUNoZ0M7b0JBQ1EsSUFBTmpDLElBQU0sV0FIUzRsQyxNQUFNMW1DLE1BRXZCK0M7b0JBQ1EsbUJBSFZvMkIsS0FBRTNvQixJQUdFMVAsS0FIRWlpQyxJQUl3QztRQUVoRCxJQUQwQnZ4QixFQUxWMVI7UUFNaEIsZ0JBQUlpRDtVQUNRLElBQU5qQyxJQUFNLGtCQUZjMFEsRUFFTSxXQVBYazFCLE1BQU0xbUMsTUFNdkIrQztVQUNRLG1CQVBWbzJCLEtBQUUzb0IsSUFPRTFQLEtBUEVpaUMsSUFRd0M7O1FBUlosU0FBeEJuakM7O29CQUFJRTs7NkJBc0JaMFIsRUFBRXpPO3NCQUNNO3VCQUFOakM7d0JBQU07b0NBQW9CLGtCQUQ1QjBRLEVBQ2lELFdBdkJoQ2sxQixNQUFNMW1DLE1Bc0JyQitDO3NCQUNNLG1CQXZCVm8yQixLQUFFM29CLElBdUJFMVAsS0F2QkVpaUMsSUF3QndDOzZCQVY1Q2hnQztzQkFDUSxJQUFOakMsSUFBTSxzQkFBb0IsV0FmWDRsQyxNQUFNMW1DLE1BY3ZCK0M7c0JBQ1EsbUJBZlZvMkIsS0FBRTNvQixJQWVFMVAsS0FmRWlpQyxJQWdCd0M7Y0FDVndVLElBakJ0QnozQzswQkFrQlppRDtZQUNRO2FBQU5qQztjQUFNOzBCQUFvQixrQkFGTXkyQyxJQUVlLFdBbkJoQzdRLE1BQU0xbUMsTUFrQnZCK0M7WUFDUSxtQkFuQlZvMkIsS0FBRTNvQixJQW1CRTFQLEtBbkJFaWlDLElBb0J3QztpQkFwQnBDbmpDO2tCQUFJRTs7MkJBa0Nad3RDLEVBQUU5N0IsRUFBRXpPO29CQUNJO3FCQUFOakM7c0JBQU07NkJBRFJ3c0MsRUFDNEIsa0JBRDFCOTdCLEVBQytDLFdBbkNoQ2sxQixNQUFNMW1DLE1Ba0NuQitDO29CQUNJLG1CQW5DVm8yQixLQUFFM29CLElBbUNFMVAsS0FuQ0VpaUMsSUFvQ3dDOzJCQVY1Q3VLLEVBQUV2cUM7b0JBQ00sSUFBTmpDLElBQU0saUJBRFJ3c0MsRUFDNEIsV0EzQlg1RyxNQUFNMW1DLE1BMEJyQitDO29CQUNNLG1CQTNCVm8yQixLQUFFM29CLElBMkJFMVAsS0EzQkVpaUMsSUE0QndDO1lBQ2Z5VSxJQTdCakIxM0M7d0JBOEJad3RDLEVBQUV2cUM7VUFDTTtXQUFOakM7WUFBTTttQkFEUndzQyxFQUM0QixrQkFGQ2tLLElBRW9CLFdBL0JoQzlRLE1BQU0xbUMsTUE4QnJCK0M7VUFDTSxtQkEvQlZvMkIsS0FBRTNvQixJQStCRTFQLEtBL0JFaWlDLElBZ0N3QyxFQUlBO2FBMkQ1Q3NWLHVCQUVGbGYsRUFBRW5yQixFQUFFKzBCO1VBQUovQixNQUFJOEU7TUFBTztpQkFBUEE7UUFzRUYsa0JBdEVGOUUsSUFBRWh6Qjs7UUFBUyxPQUFQODNCOztXQUVGLFNBRkVBLFNBRUksa0JBRlI5RSxJQUFFaHpCLEVBQ0c1UDtXQUNHLHNCSjl2RGY7O1dJZ3dEUyxXQUpFMG5DLFNBSUksa0JBSlI5RSxJQUFFaHpCLEVBR1EzUDtXQUNGLHNCSmh3RGY7O29CSTR2RFd5bkM7O2FBTUYsV0FORUEsU0FNSSxrQkFOUjlFLElBQUVoekIsRUFLa0IxUDthQUNaLHNCSmx3RGY7OztlSW93RFMsV0FSRXduQyxTQVFJLGtCQVJSOUUsSUFBRWh6QixFQU9xQnpQO2VBQ2Ysc0JKcHdEZjthSXN3RFM7cUJBVkV1bkM7Y0FVVyxrQkFWZjlFLElBQUVoekIsRUFTcUJ4UDtjQUNmLG9CSnR3RGY7YUlzd0RlLHNCSnR3RGY7O29CSTR2RFdzbkM7O2FBWUYsV0FaRUEsU0FZSSxrQkFaUjlFLElBQUVoekIsRUFXdUJ2UDthQUNqQixzQkp4d0RmOzs7ZUkwd0RTLFdBZEVxbkMsU0FjSSxrQkFkUjlFLElBQUVoekIsRUFhMEJ0UDtlQUNwQixzQkoxd0RmO2FJNHdEUztxQkFoQkVvbkM7Y0FnQlcsa0JBaEJmOUUsSUFBRWh6QixFQWUwQnJQO2NBQ3BCLG9CSjV3RGY7YUk0d0RlLHNCSjV3RGY7O2VJNndEMEJDLE9BakJma25DLFNBaUJTaG1DLEtBakJUZ21DLFNBaUJJbG1DLElBakJKa21DO2tCQXVFTnlTLHdCQXZFRXZYLElBQUVoekIsRUFpQmlCcFAsT0FBWGdCLElBQUtFOztlQUVRaEIsT0FuQmpCZ25DLFNBbUJXN2xDLE9BbkJYNmxDLFNBbUJNam1DLE1BbkJOaW1DO2tCQXVFTnlTLHdCQXZFRXZYLElBQUVoekIsRUFtQm1CbFAsT0FBWGUsTUFBS0k7O2VBRVVqQixPQXJCckI4bUMsU0FxQmUxbEMsT0FyQmYwbEMsU0FxQlUvbEMsTUFyQlYrbEM7a0JBdUVOeVMsd0JBdkVFdlgsSUFBRWh6QixFQXFCdUJoUCxPQUFYZSxNQUFLSzs7ZUFFRW5CLFFBdkJqQjZtQyxTQXVCV3ZsQyxPQXZCWHVsQyxTQXVCTTVsQyxNQXZCTjRsQztrQkF1RU55Uyx3QkF2RUV2WCxJQUFFaHpCLEVBdUJtQi9PLFFBQVhpQixNQUFLSzs7ZUFFTXJCLFFBekJqQjRtQyxTQXlCV3BsQyxPQXpCWG9sQyxTQXlCTXpsQyxNQXpCTnlsQztrQkF1RU55Uyx3QkF2RUV2WCxJQUFFaHpCLEVBeUJtQjlPLFFBQVhtQixNQUFLSzs7b0JBekJYb2xDOzthQTRCRixZQTVCRUEsU0E0Qkksa0JBNUJSOUUsSUFBRWh6QixFQTJCZ0I3TzthQUNWLHNCSnh4RGY7OztlSTB4RFMsWUE5QkUybUMsU0E4Qkksa0JBOUJSOUUsSUFBRWh6QixFQTZCbUI1TztlQUNiLHNCSjF4RGY7YUk0eERTO3NCQWhDRTBtQztjQWdDVyxrQkFoQ2Y5RSxJQUFFaHpCLEVBK0JtQjVNO2NBQ2Isb0JKNXhEZjthSTR4RGUsc0JKNXhEZjtrQkl3eURTLFVBNUNFMGtDO2tCQThDRixVQTlDRUE7a0JBZ0RGLFVBaERFQTs7V0FrREYsWUFsREVBLFNBa0RJLGtCQWxEUjlFLElBQUVoekIsRUFpRGdCM007V0FDVixzQko5eURmOztlSSt5RCtCQyxRQW5EcEJ3a0MsU0FtRGE5a0MsTUFuRGI4a0M7O2FBb0RGLElBQWEvQzthQUVULG9CQXRETi9CLElBQUVoekIsRUFzREksV0FBWSxPQUZIKzBCLElBREUvaEMsT0FBT00sU0FHa0I7O1dBcEJ4QztvQkFsQ0V3a0M7WUFrQ1csa0JBbENmOUUsSUFBRWh6QixFQWlDSXhNO1lBQ0Usb0JKOXhEZjtXSTh4RGUsc0JKOXhEZjs7V0lneURTLFlBcENFc2tDLFNBb0NJLGtCQXBDUjlFLElBQUVoekIsRUFtQ0l0TTtXQUNFLHNCSmh5RGY7a0JJNHpEUyxVQWhFRW9rQzs7Ozs7Y0FpRXlDbmtDLFFBakV6Q21rQzs7O2NBQUo2UjswQkFpRTZDdjVDOzBCQWpFN0M0aUMsSUFrRW9Cd1gsS0FBTyxvQkFsRTNCcmYsRUFrRW9CcWYsSUFEeUJwNkMsS0FDSyxRQWxFbEQ0aUM7MEJBaUU2Q3IvQjtjQWpFN0NxL0I7Y0FBSThFOzs7WUFtRXlDaGtDLFFBbkV6Q2drQzs7O1lBQUorUjt3QkFtRTZDejVDO3dCQW5FN0M0aUMsSUFvRW9Cd1gsS0FBTyxvQkFwRTNCcmYsRUFvRW9CcWYsSUFEeUJwNkMsS0FDSyxRQXBFbEQ0aUM7d0JBbUU2Q2wvQjtZQW5FN0NrL0I7WUFBSThFOztrQkEwQ0Y7O1dBY0EsWUF4REVBLFNBd0RJLGtCQXhEUjlFLElBQUVoekIsRUF1RG1CaE07V0FDYixzQkpwekRmOztXSXN6RFMsWUExREU4akMsU0EwREksa0JBMURSOUUsSUFBRWh6QixFQXlEbUIvTDtXQUNiLHNCSnR6RGY7O1dJd3pEUyxZQTVERTZqQyxTQTRESSxrQkE1RFI5RSxJQUFFaHpCLEVBMkRhN0w7V0FDUCxzQkp4ekRmOztlSXl6RDJCczJDLFFBN0RoQjNTLFNBNkRXNWpDLElBN0RYNGpDO2tCQW5MTnNTO29DQWlQaUMsa0JBOUQvQnBYLElBQUVoekIsRUE4RGdDLE9BRG5COUwsSUFBS3UyQzs7ZUF4QkZDLFFBckNkNVMsU0FxQ0l6akMsTUFyQ0p5akM7OztvQkE4Rk42UywrQkE5RkUzWCxJQUFFaHpCLEVBcUNnQjBxQyxRQUFWcjJDOztvQkF5RFZzMkMsd0JBOUZFM1gsSUFBRWh6QixFQXFDZ0IwcUMsUUFBVnIyQyxRQWlDSDthQXdCUHMyQyw2QkFHRXhmLEVBQUVuckIsRUFBRSswQjtNQUhOO1FBT0ksbUJBQU0sd0JBSlI1SixFQUFFbnJCLEVBQUUrMEIsSUFHUTFnQztRQUNKLHNCSmoyRGY7TUkrMURTOztlQXJHQWcyQyx5QkFtR0ZsZixFQUFFbnJCLEVBQUUrMEI7b0NBbkdGc1Ysa0JBbUdGbGYsRUFBRW5yQixFQUFFKzBCLEtBSXNDO2FBdkd4Q3VWLGFBRUZuZixFQUFFbnJCLEVBQUUrMEI7TUo1dkRYLHVCSTB2RFNzVixpQkFFRmxmLEVBQUVuckIsRUFBRSswQjthQThGTjZWLG1CQUdFemYsRUFBRW5yQixFQUFFKzBCO01KNzFEWCx1QkkwMURLNFYsdUJBR0V4ZixFQUFFbnJCLEVBQUUrMEI7YUExQk53Vix3QkFJRXBmLEVBQUVuckIsRUFBRSswQixJQUFJbmpDLElBQUlFO01BQVEsVUFBWkY7a0JBQUlFO1VBTVYsR0FOVUE7WUFNRyxzQkFOZnE1QixFQUFFbnJCLEVBQUUrMEIsS0FNSSxvQko3MERmO1lJNjBEZSxzQko3MERmO1VJeTBEZSxzQkFGUjVKLEVBQUVuckIsRUFBRSswQjtVQUVJLHNCSnowRGY7UUkyMERlLHNCQUpSNUosRUFBRW5yQixFQUFFKzBCO1FBSUksc0JKMzBEZjs7UUl1MEQyQixTQUFabmpDO29CQUFJRTtZQVlWLEdBWlVBO2NBWUcsc0JBWmZxNUIsRUFBRW5yQixFQUFFKzBCLEtBWUksb0JKbjFEZjtjSW0xRGUsc0JKbjFEZjtZSSswRGUsc0JBUlI1SixFQUFFbnJCLEVBQUUrMEI7WUFRSSxzQkovMERmO1VJaTFEZSxzQkFWUjVKLEVBQUVuckIsRUFBRSswQjtVQVVJLHNCSmoxRGY7a0JJdTBEbUJqakM7VUFrQlYsR0FsQlVBO1lBa0JVOytCQWxCdEJxNUIsRUFBRW5yQixFQUFFKzBCO2FBa0JXLG9CSnoxRHRCO2FJeTFEZSxvQkp6MURmO1lJeTFEZSxzQkp6MURmO1VJcTFEc0Isc0JBZGY1SixFQUFFbnJCLEVBQUUrMEIsS0FjSSxvQkpyMURmO1VJcTFEZSxzQkpyMURmO1FJdTFEc0Isc0JBaEJmNUosRUFBRW5yQixFQUFFKzBCLEtBZ0JJLG9CSnYxRGY7UUl1MURlLHNCSnYxRGYsYUl5MURxRDthQWdCNUM4VixXQUFXN3FDLEVBQUV3QztNSnoyRHRCLElJeTJEc0JDO01BQU07aUJBQU5BO1FBZVc7O1FBZkwsT0FBTkE7O1dBRVQ7WUFEZWxQLFdBRE5rUDtZQUNHZSxFQURIZjtZQUVULDJCQURlbFA7V0FFdkIsV0FIZXlNLEVBQ0t3RDtXQUVwQixxQkFIZXhELEVBRVhwTDs7b0JBRmE2Tjs7YUFLakIsSUFEb0NDO2FBQ3BDLFdBTGUxQzthQUtDLGNBTERBO2FBS2YsSUFMaUJ5QyxNQUltQkM7O2VBRUEwVTtXQUNwQyxXQVBlcFg7V0FPQyxjQVBEQTtlQUFFeUMsTUFNbUIyVTs7O2VBTXRCaGpCLEVBWkdxTyxTQVlOcW9DLElBWk1yb0M7V0FZVyxXQVpiekMsRUFZSjhxQztXQUFpQixrQkFBZDEyQyxFQVpDNEw7aUJBYWEsSUFBbEIrcUMsSUFiT3RvQyxTQWFXLFdBYmJ6QyxFQWFMK3FDLEtBQWtCLHFCQWJiL3FDOztlQWNLQyxJQWRId0MsU0FjQXVvQyxJQWRBdm9DO1dBY1csV0FkYnpDLEVBY0VnckM7V0FBVyxtQkFBUi9xQzs7O2VBTkdrRixJQVJOMUMsU0FRRzhtQyxJQVJIOW1DO1dBU1csV0FUYnpDLEVBUUt1cEM7V0FDUSxxQkFUYnZwQyxFQVFRbUY7O2VBRUY3TixFQVZKbUwsU0FVQyttQyxJQVZEL21DO1dBV1csV0FYYnpDLEVBVUd3cEM7V0FDVSwyQkFYYnhwQyxFQVVNMUksR0FLUzthQUsxQjJ6QyxXQUFXLzBDLEVBQUVzTTtNSjczRHRCLElJNjNEc0JDO01BQU07aUJBQU5BO1FBZVc7O1FBZkwsT0FBTkE7O1dBRVQ7WUFEZWxQLFdBRE5rUDtZQUNHZSxFQURIZjtZQUVULDJCQURlbFA7V0FFdkIsV0FIZTJDLEVBQ0tzTjtXQUVwQixrQkFIZXROLEVBRVh0Qjs7b0JBRmE2Tjs7YUFLakIsSUFEb0NDO2FBQ3BDLFdBTGV4TTthQUtDLFdBTERBO2FBS2YsSUFMaUJ1TSxNQUltQkM7O2VBRUEwVTtXQUNwQyxXQVBlbGhCO1dBT0MsV0FQREE7ZUFBRXVNLE1BTW1CMlU7OztlQU10QmhqQixFQVpHcU8sU0FZTnFvQyxJQVpNcm9DO1dBWVcsV0FaYnZNLEVBWUo0MEM7V0FBaUIsa0JBQWQxMkMsRUFaQzhCO2lCQWFhLFVBYlh1TTs7ZUFjR3hDLElBZEh3QyxTQWNBc29DLElBZEF0b0M7V0FjVyxXQWRidk0sRUFjRTYwQztXQUFXLG1CQUFSOXFDOzs7ZUFOR2tGLElBUk4xQyxTQVFHOG1DLElBUkg5bUM7V0FTVyxXQVRidk0sRUFRS3F6QztXQUNRLGtCQVRicnpDLEVBUVFpUDs7ZUFFRjdOLEVBVkptTCxTQVVDK21DLElBVkQvbUMsU0FXVyxXQVhidk0sRUFVR3N6QyxLQUNVLGdCQVhidHpDLEVBVU1vQixHQUtTO2FBTTFCNHpDLFdBQVdoMUMsRUFBRXNNO01KbDVEdEIsSUlrNURzQkM7TUFBTTtpQkFBTkE7UUFlVzs7UUFmTCxPQUFOQTs7V0FFVDtZQURlbFAsV0FETmtQO1lBQ0dlLEVBREhmO1lBRVQsMkJBRGVsUDtXQUV2QixXQUhlMkMsRUFDS3NOO1dBRXBCLGtCQUhldE4sRUFFWHRCOztvQkFGYTZOOzthQUtqQixJQURvQ0M7YUFDcEMsV0FMZXhNO2FBS0MsV0FMREE7YUFLZixJQUxpQnVNLE1BSW1CQzs7ZUFFQTBVO1dBQ3BDLFdBUGVsaEI7V0FPQyxXQVBEQTtlQUFFdU0sTUFNbUIyVTs7O2VBTXRCaGpCLEVBWkdxTyxTQVlOcW9DLElBWk1yb0M7V0FZVyxXQVpidk0sRUFZSjQwQztXQUFxRCxrQkFaakQ1MEMsRUFZaUQsV0FBbEQ5QjtpQkFDYyxVQWJYcU87O2VBY0d4QyxJQWRId0MsU0FjQXNvQyxJQWRBdG9DO1dBY1csV0FkYnZNLEVBY0U2MEM7V0FBVyxtQkFBUjlxQzs7O2VBTkdrRixJQVJOMUMsU0FRRzhtQyxJQVJIOW1DO1dBU1csV0FUYnZNLEVBUUtxekM7V0FDUSxrQkFUYnJ6QyxFQVFRaVA7O2VBRUY3TixFQVZKbUwsU0FVQyttQyxJQVZEL21DLFNBV1csV0FYYnZNLEVBVUdzekMsS0FDVSxnQkFYYnR6QyxFQVVNb0IsR0FLUzthQU05QjZ6QztNQUNRLElBRGtCcFcsYUFDbEI7ZUFDTjVKLEVBQUUzb0IsS0FBTSxXQURSbkosSUFDRW1KLEtBQW1DLHlCQURyQ25KLEtBQzBEO01BRHBELG1CQUNOOHhCLElBRndCNEo7YUFTMUJxVyxtQkFBbUJ0NEM7TUFDbEIscUJBRGtCQSxZQUNKO01BQ2YsSUFBSW1GLElBQUosc0JBRm1CbkY7TUFFbkIsU0FDSXU0QztRQUFpQix5Q0FIRnY0QyxJQUdtRDtNQUR0RSxTQUVRdzRDLGFBQWFwN0M7UUpwN0QxQixJSW83RDBCdUc7UUFDbkI7YUFEbUJBLFFBRmpCd0IsSUFHYyxPQURHeEI7VUFFWCwwQkFOUzNELElBSUUyRDt5Q0FJVixPQUpVQTtVQUVYLElBQ1UsSUFIQ0E7bUJBSVQ7TUFOWixTQU9JODBDLFlBQVlyN0MsRUFBRXNVO1FKejdEdkIsSUl5N0R1Qjh6QjtRQUNoQjthQURnQkEsUUFQZHJnQyxJQVFjLE9BREFxZ0M7VUFFUiwwQkFYU3hsQyxJQVNEd2xDO1VBRVIseUJBRUMsT0FKT0E7VUFFUixJQUNVLElBSEZBO21CQUlOO01BWFosU0FZSWtULFVBQVV0N0MsRUFBRXNVO1FKOTdEckIsSUk4N0RxQjh6QjtRQUNkO2FBRGNBLFFBWlpyZ0MsSUFhYyxPQURGcWdDO1VBRU4sMEJBaEJTeGxDLElBY0h3bEM7VUFFTjs7OztVSWg3Q04sYUppN0NzQixRQUhWQTtVQUlMLE9BSktBLElBSUo7TUFDQzs7T0FDRixpQkFEUG1UO09BRVcsZUFyQkkzNEMsSUFtQmYyNEMsT0FDQUMsT0FEQUQ7T0FHUyxvQkFGVEM7T0FHTyxlQURQRTtNQUNPLEdBRFBBLFdBQ0FDO1dBQ0FDOztPQUVBO1NBQXlEO2tDQUF2QyxNQTFCSGg1QyxJQXNCZjg0QyxPQUNBQyxPQURBRDtVQUVBRTs7OztvQkFHa0I7TUFSVCxJQVNUQyxRQUFVLGFBTFZGO01BS1UsR0FBVkUsWUExQkE5ekMsSUEyQm1CO01BVlY7O1FBVXdCLHFCQVJqQzB6Qzs7OztRQVNBSzs4QkFUQUw7OztvREFlWTs7Ozs7O01JcDhDWixnQko4N0NBSztNQU9KLFVBYklGLE9BTUFFLFNBT2M7YUFPbEJDLHFCQUdBcjZDLElBQUltakM7TUFBTyxVQUFYbmpDO09BQ3NCLFlBRGxCbWpDOztRQUFPLFNBQVhuakMsWUFFZ0IwdEMsRUFGaEIxdEMsT0FFYWdELEVBRmJoRCxvQkFFYWdELEVBQUcwcUMsR0FGWnZLO1FBR2tCLElBQVY1dkIsSUFIWnZUO1FBR3NCLGFBQVZ1VCxLQUhSNHZCLEtBR3NEO2FBZTFEbVgscUJBSUF0NkMsSUFBSUUsS0FDdUJpakM7TUFiZixVQVlSampDO09BVGUsVUFTZkEsVUFDdUJpakM7O09BWFIsTUFVZmpqQyxvQkFWVTBSLEdBV2F1eEI7VUFBTjlpQztnQkFEckJMO09BR3NCLFlBRkRLLE9BQU04aUM7O2lCQUQzQm5qQyxZQUlnQjB0QyxFQUpoQjF0QyxPQUlhZ0QsRUFKYmhELG9CQUlhZ0QsRUFBRzBxQyxHQUhLcnRDLE9BQU04aUM7UUFJTCxJQUFWNXZCLElBTFp2VDtRQUtzQixhQUFWdVQsS0FKU2xULE9BQU04aUMsS0FJc0M7YUFPakVvWCxrQkFBbUJDLGdCQUFnQnQ1QztNQWlCckMsR0FqQnFCczVDO09Ba0JKLFNBbEJJQSxtQkFpQmpCRSxrQkFDS0Q7O1dBRExDO01BaUJKLFNBQUlDLHVCQUF1QmxZLFFBQVFwMEI7UUFDakMseUNBbkNtQ25OLElBa0NWdWhDLFFBQVFwMEIsSUFHaEI7TUFIbkIsU0FRSXVzQyx5QkFBeUJDO1FBQzNCLDhCQUQyQkEscUNBRUM7TUFWOUIsU0FvQklDLHVCQUF1QnJZLFFBQVEvOEIsRUFBRTFDO1FBQ25DLHlDQXZEbUM5QixJQXNEVnVoQyxRQUFRLzhCLEVBQUUxQyxFQUdsQjtNQXZCbkIsU0E0QkkrM0MsbUJBQW1CdFksUUFBUXVZLFNBQVM3ckI7UUFDdEMseUNBL0RtQ2p1QixJQThEZHVoQyxRQUFRdVksU0FBUzdyQixLQUdYO01BL0I3QixTQXF2Qkk4ckIsWUFHQUMsVUFBVXpZLFFBQVFVO1FBQU8sSUFHekJnWSxLQUhVMVksVUFBVnlZO1FBQXlCLGFBR3pCQztvQkFIa0JoWTt1QkFHbEJnWTswQkFEK0IsZ0JBNXhCRWo2QyxJQTB4QmpDZzZDLFdBQWtCL1g7MEJBR2UsTUE3eEJBamlDLElBMHhCakNnNkMsVUFHQUMsTUFIa0JoWSxLQUdtRDtNQTN2QnpFLFNBc3RCSWlZLGVBQWUzWSxRQUFRb1ksUUFBUWpxQztZQUFoQnlxQyxrQkFBZ0J4cUM7UUFDakM7YUFEaUJ3cUMsY0FBUVIsUUFDQyx5QkFEREE7VUFFbkIsSUFDSm4xQyxFQURJLGdCQTF2QjZCeEUsSUF3dkJsQm02QztVQUVYLE9BQ0ozMUMsYUFRSyxVQVhVMjFDLFVBQWdCeHFDO1VBRTNCLElBRjJCQywwQkFHL0JwTDtVQUNBLHVCQUorQm9MO1dBTTdCOzJDQTl2QitCNVAsSUF3dkJGNFA7VUFFM0IsSUFRRixVQVZhdXFDLHNDQUFnQnhxQzttQkFXZDtNQWp1QnJCLFNBcXVCSTBxQyxjQUFjOVksUUFBUW9ZO1FBQ3hCLEdBRGdCcFksWUFBUW9ZLFFBQ0UseUJBREZBO1FBRWxCLDBCQXp3QjZCMzVDLElBdXdCbkJ1aEM7UUFFVjs2QkFDVSxzQkFIQUEsUUFBUW9ZOzs7V0FJZixJQUpPcFkscUJBQVFvWSxRQUtRLHlCQUxSQTtXQU1oQixJQUlKbjFDLEVBSkksZ0JBN3dCMkJ4RSxJQXV3Qm5CdWhDO1dBTVIsT0FJSi84QjtZQUNBLDBCQVhZKzhCLDBCQVVaLzhCO1dBSkk7WUFFYyx1QkFSTis4QixnQkFBUW9ZO1lBUUY7O3FCQUFkVyxXQUFVMTRDO1FBS1gsNkJBQVk7TUFsdkJyQixTQWd0Qkk0MkMsYUFBYWpYLFFBQVFvWTtRSm52RjVCLElJbXZGb0JRO1FBQ2Y7YUFEZUEsY0FBUVIsUUFDRyx5QkFESEE7VUFFcEIsMEJBcHZCZ0MzNUMsSUFrdkJwQm02QztZQUVhLGNBRmJBO1VBRXFELE9BRnJEQSxVQUU0RDtNQWx0QjdFLFNBODJCSUksa0JBQ0VDLFFBQVFqWixRQUFRZ1UsS0FBS2tGO1FBQ1YsSUFBVEMsT0FBUyxNQWw1Qm9CMTZDLElBaTVCL0J3NkMsUUFBUWpaLFVBQVJpWjtRQUNXO3dDQWw1Qm9CeDZDLElBaTVCL0J3NkMsUUFBcUJDLE9BQUxsRixLQUNkbUYsT0FJNEI7TUFwM0JwQyxTQW16QklDLGlCQUFpQkgsUUFBUWpaLFFBQVFxWixLQUFLcGhDLEtBQUtxaEMsTUFBTXRGO1lBQWhCdUYsWUFBS256QixZQUFLb3pCO1FBQzdDOzthQURtQ0Q7ZUFBS256Qjs7O2tCQUFLb3pCLG9CQUFNeEYsS0FJckIsb0JBSnFCQSxLQUlnQjs7Y0FKM0I1dEI7ZUFBS296Qjs7OzZCQUFNeEY7Ozs7O3dCQU1nQjt5QkFJckM7eUJBQ0E7eUJBSEE7eUJBSUE7eUJBTkE7OztlQU5ld0Y7eUJBQU14RixLQUdyQixvQkFIcUJBLEtBR2dCOzs2QkFIaEJBOzs7d0JBS2dCO3lCQUhyQzt5QkFBcUM7eUJBS3JDO3lCQUVBO3lCQUpBOztVSTMwRTFCO3lCSnMwRStDQTs7O3NCQWM1QixHQWwxQnJCaUUsa0JBazFCd0M7dUJBQ25CLEdBbjFCckJBLGtCQW0xQndDO3VCQUZuQixHQWoxQnJCQSxrQkFpMUJ3Qzs7OztnQkFJeEMsR0FyMUJBQSx1QkFvMEJzQzd4QjtnQkFtQmpDLHlCQW5CWTZ5QixRQUFRalosUUFBd0JnVTs7YUFBaEJ1RjtZQXFCakMsR0FyQjJDQztjQXFCM0MsR0F6MUJBdkIsdUJBbzBCMkN1QjtjQXdCdEMseUJBeEJZUCxRQUFRalo7WUE4QnpCLEdBbDJCQWlZLHVCQW8wQmlDc0I7WUFnQzVCLHlCQWhDWU4sUUFBUWpaLFFBQXdCZ1U7VUEwQmpELEdBMUIyQ3dGO1lBMEIzQyxHQTkxQkF2Qix1QkFvMEIyQ3VCO1lBNEJ0Qyx5QkE1QllQLFFBQVFqWixRQUF3QmdVO1VBaUMzQiw4QkFBWTtNQXAxQnRDLFNBK3ZCSXlGLHFCQUFxQnpaLFFBQVFvWSxRQUFRbjFDO1FKbHlGNUMsSUlreUY0QjIxQztRQUN2QjthQUR1QkEsY0FBUVI7V0FFN0Isa0NBbnlCaUMzNUMsSUFpeUJJd0UsRUFBUm0xQztVQUt6QiwwQkF0eUI2QjM1QyxJQWl5QlptNkM7VUFLakI7WUFFSixJQVBxQkEsdUJBQVFSO2FBT0MseUJBUERBO1lBUTFCLG1CQXp5QjhCMzVDLElBaXlCWm02Qyx1QkFBZ0IzMUMsRUFRbUIsT0FSbkMyMUM7WUFTUCw0QkExeUJtQm42QyxJQWl5QlptNkM7WUFTUDs7Ozs7b0JBZUk7a0RBeEJHQSxrQkFBUVI7cUJBd0JYLFVBQVZzQjtxQkF4QmFkOzs7O29CQWdDakI7NkJBaENpQkE7OztpQkFZakIsSUFaaUJBLHVCQUFRUjtrQkFZSyx5QkFaTEE7aUJBYWIsNEJBOXlCaUIzNUMsSUFpeUJabTZDO2lCQWFMO21CQUtJO21EQWxCQ0Esa0JBQVFSO29CQWtCVCxVQUFWd0I7b0JBbEJXaEI7OzttQkFlRDs7MENBZkNBLGtCQUFRUjtvQkFlVCxVQUFWMEI7b0JBZldsQjs7aUJBYUwsSUFPTCxVQXBCVUE7Ozs7Z0JBNEJIO2dEQTVCR0Esa0JBQVFSO2lCQTRCWCxVQUFWNkI7aUJBNUJhckI7OztlQW1DakIsMEJBbkNpQkE7WUFTUCxJQTRCVixVQXJDaUJBOztVQUtqQixJQWtDQyxVQXZDZ0JBO21CQXVDNEI7TUF0eUJyRCxTQWltQkl3QixpQkFDQXBhLFFBQVFvWTtRQUNWO1VBRW9CO2tDQUhsQnBZLFFBQVFvWTtXQUlBLHdCQXhvQnlCMzVDLElBdW9CM0I0N0M7O1VBQ0U7Ozs7VUl6bkVOO1lKMm5Fd0I7bUNBSHBCQSxVQUhFakM7YUFNa0I7O2FBQ04sdUJBRFprQyxVQU5BbEM7WUFRRCwwQkE1b0IwQjM1QyxJQTJvQnpCODdDLFdBQzJCO1lBRlQ7YUFHZCxRQTdvQnFCOTdDLElBb29CakN1aEMsaUJBT1F1YSxZQVBSdmE7d0JBT1F1YSxxQkFFQWg2QyxFQUhXbTRDOzs7VUFIRDs7Ozs7O1VBYUs7O1dBRFA5OUM7V0FBVm0rQztXQUNpQixjQURqQkEsU0FmRVg7V0FnQmU7d0JBRFB4OUMsZUFDSnEwQztRQUdXLGtCQW5CdkJqUCxRQUFRb1ksU0FtQmU7MkJBQVhsSixZQUN1QztNQXRuQnZELFNBbWtCSXVMLGlCQUNBemEsUUFBUW9ZO1FBQ1Y7O2dCQURFcFksWUFBUW9ZO2dDQUdrQixnQkF6bUJPMzVDLElBc21CakN1aEM7VUFHb0Q7VUFDbEM7a0NBSmxCQSxnQkFBUW9ZO1dBS0Esd0JBM21CeUIzNUMsSUEwbUIzQjQ3Qzs7VUFDRTs7OztVSTVsRU4sY0o0bUVPO1VBakJTO1dBR1Msc0JBSHJCQSxVQUpFakM7V0FPbUI7O1dBQ0wsdUJBRGRrQyxVQVBBbEM7V0FTSSx3QkEvbUJxQjM1QyxJQThtQnZCODdDO1dBQ0U7Ozs7WUFFTTtxQkFqbkJlOTdDLElBc21CakN1aEMsaUJBUVV1YSxZQVJWdmE7YUFXa0IsUUFBSnovQixFQUpLaWdDO2FBSUQsS0FIUitaO2FBUEVHO2FBQVYzQjs7Ozs7YUFhZ0M7b0NBTnhCd0IsVUFSRm5DO2NBYzBCOztjQUNSLHVCQURadUMsVUFkTnZDO2FBZ0JLLDBCQXRuQm9CMzVDLElBcW5CbkJtOEMsV0FDMkI7YUFGUDtjQUdoQixVQXZuQmVuOEMsSUFzbUJqQ3VoQyxpQkFlYzRhLFlBZmQ1YTtjQWlCa0IsUUFBSmx2QixJQVZLMHZCLE1BT01sRDtjQUdQLEtBRkpzZDtjQWRGRjtjQUFWM0I7OztzQkFrQmE7Ozt1REFJYjtjQXRCVTJCLGdDQUFWM0IsU0FERi9ZO1FBeUJxQixnQkF4Qm5CK1ksU0FETVgsU0F5QmE7c0JBeEJUc0MsaUJBd0JGekwsVUFDdUM7TUE5bEJyRCxTQTBpQkk0TCxVQUNBQyxZQUFZOWEsUUFBUW9ZO1FBQ3RCO2FBRGNwWSxZQUFRb1ksUUFFTTtVQUNwQiw0QkFobEIyQjM1QyxJQTZrQnJCdWhDO1VBR047WUFFTSxJQUFOK2EsSUFBTSxhQWxsQnFCdDhDLElBNmtCckJ1aEM7WUFLQSxHQUxRb1ksV0FLZDJDLElBQ21CO1lBRGI7YUFFSSxjQXBsQmlCdDhDLElBNmtCckJ1aEMsU0FLTithLE1BTE0vYTthQVFhLGNBSG5CK2EsWUFMYzNDO2FBUUs7YUFDRCxjQVRacFksUUFLTithO2FBSWtCOzZCQUFWRSxRQUZSRDthQUVrQixhQVR4QkYsZUFVTUk7YUFFMkMsWUFEM0NDLGFBSFFqTTs7VUFPWjs7OztZQUVxQjt5QkFqQlhsUCxRQUFRb1k7YUFpQkc7d0JBakJ2QjBDLGVBa0JJbmdEO1lBRTJDLGNBRDNDeWdELFdBRlFuTTtxQkFJbUM7TUFoa0JuRCxTQStESW9NLFlBaUNBcEMsUUFuQmlCalosUUFtQkRvWSxRQUFtQ3Y0QztRQTlCckQ7aUJBR0kwN0MsU0FBU3ZiLFFBQVFnWTtVQUVuQixTQUZtQkEsUUFFbkIsY0F4RkFDO1VBeUZFO1lBRWMseUJBNUdpQng1QyxJQXVHdEJ1aEM7WUFHVCxrQ0ExRytCdmhDLElBdUd0QnVoQztVQUtrQjtrQkFDaEI7WUFFSTRZO1FBQ2pCO2FBRGlCQSxjQW1CRFIsUUFsQlUseUJBa0JWQTtVQWpCSiwwQkFqSHFCMzVDLElBK0doQm02QyxXQUVMOzs7O2NBS0gsU0FQUUEsVUFWTVU7Y0FpQmQsY0FQUVY7OztjQU1SLFNBTlFBLFVBVGYzZ0M7Y0FlTyxjQU5RMmdDOzs7Y0FLUixTQUxRQSxVQVZmUztjQWVPLGNBTFFUOzs7Y0FJUixTQUpRQSxVQVhNMEM7Y0FlZCxjQUpRMUM7OztjQUdSLFNBSFFBLFVBWGZsOUI7Y0FjTyxjQUhRazlCOzs7VUFFTDtXQU9WLEtBbkJxQlU7V0FtQnJCLEtBbEJBcmhDO1dBa0JBLEtBbkJBb2hDO1dBbUJBLEtBcEJxQmlDO1dBb0JyQixLQXBCQTUvQjtVQStCSixHQXBCbUJrOUIsY0FtQkRSLFFBQ1EseUJBRFJBO1VBakJKO1dBa0I0Qzs7O2dCQWxIeERIOztrQkF5SE8sa0JBUlBnQixRQW5CaUJMOzs7V0E0QmIsd0JBM0k2Qm42QyxJQStHaEJtNkM7VUE0QmI7O2NBRWlCO3NDQTlCSkEsVUFtQkRSO2VBV0s7Ozt1QkFYckJhO3VCQVdJdUM7dUJBWFlwRDs7Ozs7dUJBQW1DdjRDOzBCQUVqRHdpQyxNQVNXN0I7OztZQUliO3FCQWZBeVk7cUJBbkJpQkw7cUJBbUJEUjs7Ozs7cUJBQW1DdjRDO3dCQUVqRHdpQztVQWdCRixPQWhCRUE7O2FBa0JBLE9BcklGNFY7Y0FzSUksdUJBeENhVzthQXdDcUM7c0JBckJ0REssUUFuQmlCTCxVQW1CRFIsNEJBQW1DdjRDOzthQStCakQ7c0JBL0JGbzVDLFFBbkJpQkwsVUFtQkRSLDRCQUFtQ3Y0Qzs7YUE0QmpEO3NCQTVCRm81QyxRQW5CaUJMLFVBbUJEUiw0QkFBbUN2NEMsV0FObkM7TUExRnBCLFNBb0lJNDdDO1FBaUJBeEMsUUFkUWpaLFFBY1FvWSxRQUFRa0QsTUFBTWpDLEtBQUtwaEMsS0FBS3FoQyxNQUFNejVDLElBQUl0QztRQWJwRCxHQURVeWlDLFlBY1FvWSxRQWJRLHlCQWFSQTtRQVpaLElBSUpwRSxLQUpJLGdCQTNLNkJ2MUMsSUF5S3pCdWhDO1FBRUosVUFJSmdVO1VBRkEsSUFVUTRFLFVBZEE1WTtVQWVWLEdBRFU0WSxjQUFRUixRQUNRLHlCQURSQTtVQVZoQjtXQVd3RDtxQkFDeENrRCxNQUFNdGI7Y0FDRjtvQ0FERUEsUUFGTm9ZO2VBR0k7Ozt1QkFIcEJhO3VCQUdJdUM7dUJBSFlwRDt1QkFFQWtEO3VCQUZjakM7dUJBQUtwaEM7dUJBQUtxaEM7dUJBQU16NUM7dUJBQUl0QzswQkFHckNFLE1BRWE7V0FDdEIsdUJBN0w2QmdCLElBdUx6Qm02QztVQU1KLFNBRUpnRDtnQ0FEYyxxQkFQVU4sTUFBaEIxQzs7b0JBUVJnRDs7O2VBV0E7d0JBbkJBM0M7d0JBQVFMO3dCQUFRUjt3QkFBUWtEO3dCQUFNakM7d0JBQUtwaEM7d0JBQUtxaEM7d0JBQU16NUM7d0JBQUl0Qzs7OztlQVF6QixHQTlLekIwNkM7aUJBdUxBO3VCQWpCUVc7a0JBaUJSLFFBakJ3QjBDLGlCQVF4Qk07aUJBY0EscUJBdEJ3QkM7OztVQXNCeEIsT0E1TEE1RDttQkFnTUU7cUJBMUJGZ0I7cUJBQVFMO3FCQUFRUjtxQkFBUWtEO3FCQUFNakM7cUJBQUtwaEM7cUJBQUtxaEM7cUJBQU16NUM7cUJBQUl0Qzs7bUJBNkJoRCx1QkE3Qk1xN0M7UUFQUjtpQkFPQUs7aUJBZFFqWjtpQkFjUW9ZO2lCQUFjaUI7aUJBQUtwaEM7aUJBQUtxaEM7aUJBQU16NUM7aUJBQUl0Qzs7O2lCQVJsRHkyQyxLQUV1QjtNQS9JM0IsU0FxTEkySDtRQUdBMUMsUUFBUWpaLFFBQVFvWSxRQUFRa0QsTUFBTWpDLEtBQUtwaEMsS0FBS3FoQyxNQUFNejVDLElBb0I5Q3RDLElBcEJzREU7UUFDeEQsR0FEVXVpQyxZQUFRb1ksUUFDUSx5QkFEUkE7UUFDd0MsU0FDdEQyRCxXQUE4QkM7VUFFakI7bUJBSmYvQzttQkFBUWpaO21CQUFRb1k7bUJBQWNpQjttQkFBS3BoQzttQkFBS3FoQzttQkFBTXo1QzttQkFvQjlDdEM7bUJBcEJzREU7bUJBRXRCdStDO21CQUVqQixnQkE5TmtCdjlDLElBME56QnVoQyxTQUlvQjtRQUg0QixVQW1CeER6aUM7b0JBcEJzREUsNEJBYy9CO2FBZEM2OUM7c0JBQThCNzlDLGtCQWtCM0I7Z0JBRkg0QyxFQWhCOEI1QzttQkFFcERzK0MsZ0JBY3NCMTdDO29CQWhCOEI1QyxrQkFpQjFCO2NBRkgwVCxJQWY2QjFUO2lCQUVwRHMrQyxnQkFhdUI1cUM7UUFLbEIsa0JBQVA1VCxJQUFxQjtNQTVNekIsU0ErTUl1K0M7UUF3b0JtQjdDLFFBQVFqWixRQTlOSm9ZLFFBdmFDaUIsS0FBS3BoQyxLQUFLcWhDLE1BQU16NUMsSUFBSXRDLElBQUlFLEtBQUt1K0MsUUFxb0JGaEk7UUFub0JyRDs7Ozs7OztpQkFLSXVJLGdCQUFpQix3QkFQS2xELElBT21CO1FBTDdDLFNBTUltRCxnQkFBZ0Isd0JBUld2a0MsSUFRWTtRQU4zQyxTQU9Jd2tDLGlCQUFpQix5QkFUZW5ELEtBU1U7UUFQOUMsU0FRSW9ELGVBQWlCLHVCQVZxQjc4QyxHQVVFO1FBUjVDLFNBU0k4OEMsZUFBaUIsdUJBWHlCcC9DLEdBV0Y7UUFUNUMsU0FVSXEvQyxnQkFBaUIsd0JBWjZCbi9DLElBWUw7UUFWN0MsU0FXSW8vQyxtQkFBaUIsdUJBYmtDYixPQWFQO1FBWGhELFNBYUljO1VBWUssbUJBQVk7a0RBQ08sT0FBckJ2L0M7O1dBQ3FCOztxQkFEckJBOztnQkFHQSxJQURvQjhDLEVBRnBCOUM7Z0JBR0EsT0FsUUwwNkM7OEJBaVF5QjUzQzt5QkFFZixrQkFxbUJTNDRDLFFBQVFqWjtjQWptQkssT0FSM0J6aUM7O3FCQS9QTDA2Qzs7dUJBc1FVLGtCQWttQlNnQixRQUFRalo7cUJBem1CdEJ6aUMsSUFTOEI7UUFuQ3JDLFNBc0NJdy9DLFdBQVcvSSxLQUFpQnoyQztVQUM5QixVQUQ4QkE7V0FFZCxPQUZjQTs7WUFDOUIsU0FEOEJBOztnQkFNNUIsSUFEb0JpakMsTUFMUWpqQztnQkFNNUIsT0FqUkYwNkM7OEJBZ1JzQnpYO3lCQUVmLGtCQXNsQll5WSxRQUFRalosUUE3bEJkZ1U7Y0FHd0IsT0FIUHoyQzs7cUJBM1E5QjA2Qzs7dUJBcVJPLGtCQW1sQllnQixRQUFRalosUUE3bEJkZ1U7cUJBQWlCejJDLElBVW1CO1FBaERuRCxTQXNESXkvQyxXQUFXLzVDLEVBQXFCMUY7VUFBd0IsVUFBeEJBO1dBQ2xCOztZQUQwQyxTQUF4QkE7OztnQkFPaEMsSUFEbUJpakMsTUFOYWpqQztnQkFPaEMsT0FsU0YwNkM7NEJBaVNxQnpYO3lCQUVkLGtCQXFrQll5WSxRQUFRalosUUE3a0JkLzhCO3NCQUVtQixJQUFWMHdDLFFBRllwMkMsT0FFRixVQUFWbzJDOztnQkFFcEIsSUFEb0JzSixRQUhZMS9DO2dCQUloQyxPQS9SRjA2Qzs0QkE4UnNCZ0Y7eUJBRWYsa0JBd2tCWWhFLFFBQVFqWixRQTdrQmQvOEI7WUFTTSx5QkFva0JBZzJDLFFBQVFqWixRQTdrQmQvOEIsVUFTK0M7UUEvRDlELFNBaUVJaTZDLFlBQVlqNkMsR0FBaUIsa0JBQWpCQSxFQUFpQixXQUFZO1FBakU3QyxTQWtFSWs2QyxnQkFBZ0JsNkMsR0FBaUIsa0JBQWpCQSxFQUFpQixlQUFnQjs7UUFsRXJELFVBbW9CcUQrd0M7Ozs7O1lBdmE1QjsyQkF1YUloVSxRQTlOSm9ZO2FBek1BO2FBL0lyQmdGLGtCQStJVTdOOzs7WUFnQkU7MENBdVphdlAsUUE5TkpvWTthQXhMQSxjQURuQnNCLGdCQXlMbUJ0QjthQXhMQTthQUNELGNBcVpLcFksUUF2WnZCMFo7YUFFa0I7YUFDTix1QkFESnVCO1lBRVQ7YUFDbUM7MkNBRmxDN1g7MEJBRUVpYSxVQUpNdk47OzZCQU9hLGdCQUxyQjFNLFVBRlEwTTtZQURFLElBL0pac047O2tDQUVGLE1Bb2pCMkJwZCxRQTlOSm9ZOztZQWhVQTs0QkE4aEJJcFksUUE5TkpvWTthQWhVQTthQUNwQix5QkFEUzlIO2FBeEJWOE07OztZQTJEcUI7NEJBMmZJcGQsUUE5TkpvWTthQTdSQTs7WUFFcEI7YUFDRCxrQkFGRWtGLHVCQUVFQyxVQUhNdE07OzZCQUNScU0sVUFEUXJNO1lBQVcsSUEzRHJCbU07OztZQXNDUTs4QkFnaEJ5Q3BKLEtBaGhCekI7YUFDSCxlQStnQkloVSxRQTlOSm9ZO2FBalRBO1lBQ3BCO2FBQ2lDOzswQkFBOUJvRixVQUZNcE07O2FBTVI7NENBUEE1eUMsTUFDUTR5QztjQU1SOzt5QkFEbUJ4eUMsTUFBTTJ5QztZQU5uQixJQXRDUjZMOzs7WUF5VkosR0E2TjZCcGQsWUE5TkpvWSxRQUNDLHlCQUREQTtZQUdWOzsrQkFDRm4xQyxHQUNYLHVCQUZFMUQsU0FDUzBELEVBQ2U7YUFGYjt1QkFJRDZYLElBQUU3WDtnQkFDZCxNQURjQSxJQUFGNlg7c0JBQ1pqZixFQURZaWY7a0JBRVY7b0NBTkF2YixTQU15QixZQUQzQjFEO29CQUNFLFNBREZBO3VCQURjb0gsTUFDZHBIOztnQkFIQSxRQUtJO2FBUFM7dUJBVVNta0M7Z0JBQ3RCLHlDQXpxQmlDdmhDLElBd3FCWHVoQyxRQUcwQjthQWJuQzsrQkF1QllBLFFBQVFvWTtnQkp0ckZ4QyxJSXNyRmdDUTtnQkFDekI7cUJBRHlCQSxjQUFRUixRQUNQLHlCQURPQTtrQkFFM0IsSUFNSm4xQyxFQU5JLGdCQXZyQjJCeEUsSUFxckJSbTZDO2tCQUVuQixVQU1KMzFDO29CQUZBO2tDQU51QjIxQzs7NEJBUXZCMzFDLEVBSkEsT0FKdUIyMUM7a0JBRW5CLFNBRm1CQTtrQkFTdkI7OzJCQUdBZ0YsMkNBWitCeEYsUUFRL0JuMUM7OzJCQUlBMjZDLG9DQVorQnhGLFFBUS9CbjFDLElBQ2lEO2FBaEN0QzsrQkFtQ2UrOEIsUUFvQlNvWSxRQXBCT24xQztvQkFBaEIyMUMsa0JBQWdCOTlCO2dCQUM1QztxQkFENEI4OUIsY0FvQlNSLFFBbkJYLHlCQW1CV0E7a0JBbEIvQix3QkFuc0IyQjM1QyxJQWlzQkxtNkM7a0JBRXRCLFNBRnNDNzlCOzs7O29DQUkxQyxTQUowQ0QsS0FJMUMsT0FKMEI4OUI7OzZCQUFnQjc5Qjs7OztzQkFPMUMsSUFhMkI0K0IsVUFwQkRmO3NCQXFCNUIsR0FENkJlLGNBQVF2QixRQUNYLHlCQURXQTtzQkFibkMsSUE0QkFwOUIsSUFiSSxnQkF2dEIyQnZjLElBcXRCSms3QztzQkFFdkIsVUFhSjMrQjt3QkFQQSxJQVIyQjIrQix1QkFBUXZCO3lCQVFMLHlCQVJLQTt3QkFTdkIsSUFDUm45QixJQURRLGdCQTl0Qm1CeGMsSUFxdEJKazdDO2tDQVV2QjErQjt5QkFHSywyQkFia0IwK0I7d0JBV3ZCLFVBL0JzQzcrQixJQThCdENHO3dCQURRLFNBVGUwK0I7d0JBV3ZCOztpQ0EzQ0pnRSxzQ0FnQ21DdkY7O2lDQWhDbkN1RiwrQkFnQ21DdkY7Z0NBZW5DcDlCO3dCQVhBLFNBeEIwQ0YsS0F5QjFDLG9CQUwyQjYrQjtzQkFnQjNCLFVBcEMwQzcrQixJQW1DMUNFO3NCQTVCQSxTQWEyQjIrQjtzQkFnQjNCOzsrQkFoREFnRSxzQ0FnQ21DdkY7OytCQWhDbkN1RiwrQkFnQ21DdkY7a0JBWlosc0JBUm1CdDlCO29CQVMxQyxTQVQwQ0M7b0JBUzFDLFNBVDBCNjlCO29CQVMxQjs7NkJBckJBK0Usc0NBZ0NtQ3ZGOzs2QkFoQ25DdUYsK0JBZ0NtQ3ZGO2tCQVJuQyxVQVowQ3Q5QixJQVkxQixvQkFaVTg5QjtrQkFnQjFCLFNBaEIwQzk5QjtrQkFFdEMsSUFjSixVQWhCMEI4OUIsc0NBQWdCOTlCOzJCQWlCUTthQXBEdkM7dUJBbUNla2xCLFFBb0JTb1ksUUFwQk9uMUM7Z0JKbHNGbkQ7eUJJa3NGUzI2Qyw4QkFBMEI1ZCxRQW9CU29ZLFFBcEJPbjFDO1lBbkMvQixHQTJOYys4QixZQTlOSm9ZLFFBOEVHLHlCQTlFSEE7WUFHVixhQTRFUCxnQkExdUIyQjM1QyxJQXkzQk51aEM7WUEvSXJCO2FBQ0ssY0E4SWdCQSxnQkFqSmhCOGQsVUFBVGpGOztpQkFBU2lGLFVBQVRqRixVQWlKeUI3WTtZQXpNM0IsR0F3REU2WSxjQTdFcUJULFFBcUJHLHlCQXJCSEE7WUFHVjthQW1CTCxrQkFqckJ5QjM1QyxJQXd1Qi9CbzZDO2FBdkRNLG1DQXVETkEsa0JBN0VxQlQsUUFzQm5CbjFDO2FBNkRTLDJCQWhGWDFEO2FBZ0ZXLFdBTkZ1K0MsUUFPYyxhQUR2QjFkO2FBalFxQixlQWdRckIyWSxTQWxGcUJYO2FBOUtBO1lBQ3BCO2FBQ29DOzRDQUh6QjJGOzBCQUdSQyxVQUZNeEw7OzZCQUtjLGdCQU5adUwsV0FDRnZMO1lBaUxDLElBM1ZYNEs7OztZQXFJcUI7NEJBaWJJcGQsUUE5TkpvWTthQW5OQTthQXJJckJnRixrQkFxSVV4Szs7O1lBaklaOzt1QkFBZ0IzRDtnQkFDWCwyQkFEV0EsMkJBR2M7YUFPUCxlQXdpQklqUCxRQTlOSm9ZO2FBMVVBO2FBQ1g7OztlQUxQO3lDQUlPOEY7OztlQUtQOztpQkFyVUxqRzttQkF1VXlDLFlBUDdCaUc7bUJBaFNkO3FCQXcwQjZCbGU7OztzQkF0aUJmLFlBRkFrZTtZQVZaLElBSkVkOzs7WUEySXFCOzRCQTJhSXBkLFFBOU5Kb1k7YUE3TUE7YUFDcEIseUJBRFMrRjthQTNJVmY7OztZQTRCUTs4QkEwaEJ5Q3BKLEtBMWhCekI7YUFDSCxlQXloQkloVSxRQTlOSm9ZO2FBM1RBO1lBQ3BCO2FBQzRCOzswQkFBekJrRyxXQUZNRDs7YUFNUjs0Q0FQQUQsTUFDUUM7Y0FNUjs7eUJBRG1CRyxPQUFNRDtZQU5uQixJQTVCUm5COzs7WUF3SXFCOzRCQThhSXBkLFFBOU5Kb1k7YUFoTkE7YUF4SXJCZ0Ysa0JBd0lVcUI7OztZQWFFOzRDQWlhYXplLFFBOU5Kb1k7YUFsTUQsZUFnYUtwWSxRQWphdkI0WjthQUNrQjthQUNDLGVBRm5CQSxrQkFtTW1CeEI7YUFqTUE7YUFDUCx5QkFGSnNHO1lBR1Q7YUFDaUM7NENBRmhDcmI7MEJBRUV1YixXQUhNRDs7NkJBTVcsaUJBTG5CdGIsWUFEUXNiO1lBRkUsSUFySlp2Qjs7OztZQTJIUTs4QkEyYnlDcEosS0EzYnpCO2FBQ0gsZUEwYkloVSxRQTlOSm9ZO2FBNU5BO1lBQ3BCO2FBQzBCOzswQkFBdkJ5RyxVQUZNM087O2FBTVI7NENBUEFseUMsTUFDUWt5QztjQU1SOzt5QkFEbUIveEMsTUFBTWl5QztZQU5uQixJQTNIUmdOOzs7O1lBa0pxQjsyQkFvYUlwZCxRQTlOSm9ZO2FBdE1BO2FBbEpyQmdGLGtCQXNqQmlEcEosS0FwYXZDdEU7Ozs7OztZQWhGUyxHQW9mTTFQLFlBOU5Kb1k7Y0F0UmtDO3NDQXJZeEIzNUMsSUF5M0JOdWhDO2VBOUNSLEtBQVA0Yjs7Y0FBTzs7Ozs7Ozs7Ozs7O2NBcmNJOzhCQW1mSTViLFFBOU5Kb1k7ZUFyUkE7O2NBMGNBLFVBeUM0QnBFOzs7OEJBbGYvQ3QwQzs7Ozt5QkFrZitDczBDLFVBbGYvQ3QwQzs0QkEyY3dCO2NBMWN6QjtlQUNELGtCQUZFQSxxQkFFRW8vQyxVQUhNak87OytCQUNSbnhDLFFBRFFteEM7Y0FBVyxJQW5FckJ1TTs7Ozs7Ozs7O2NBaUxGLGtDQXBmaUMzK0MsSUF5M0JkdzZDLFFBQWdDakY7Ozs7Ozs7O1lBcmdCakQ7O2FBRHlEO2FBQS9DOytCQXNnQk9pRixRQUFRalosUUF0Z0JrQixzQkFzZ0JNZ1U7YUFwZ0I1QixlQW9nQkloVSxRQTlOSm9ZO2FBdFNBO1lBQ3BCO2FBQ2lDOzJCQUpoQ2g2QyxRQUlnQzswQkFBOUIyZ0QsVUFGTXJOOzthQU04Qjs7Y0FBdEMsOEJBQXFCLG9CQU5iQTtjQU1SOzs7eUJBUkF0ekMsUUFPbUJVLE1BQU0wd0MsT0FBTzRDO1lBTmxDLElBakRBZ0w7Ozs7Ozs7Ozs7WUFpSDhCOzthQUFkO2FBQWQ7YUFzY047Y0FEcUM4QjtnQkFBVUY7a0JBeDJCN0MvRzs7b0JBZzNCSyxrQkFSY2dCLFFBQVFqWjs7Z0JBQWtCZ2Y7O1lBUy9DLFNBVHFEaEw7Ozs7Ozs7Ozs7b0JBU2pEbUw7O3NCQVRpRG5MOzs7Ozs7O2lDQVNqRG1MOzs7OztpQkFUc0NGO3lCQUFXakwsU0FTakRtTDs7eUJBVGlEbkwsU0FTakRtTDswQkFVRztZQXhkMkI7YUF5ZGxDLFNBbkJJbkgsS0FRQW1IO2FBN2NxQixlQW9jSW5mLFFBOU5Kb1k7YUF0T0E7WUFDcEI7Y0F6SHVCOztlQUdGLGlDQXlqQkxhLFFBQVFqWjs7ZUExakJILDBCQUFSa0I7Y0FGVTtlQTBISzsyQkFBekJrZSxVQUZNNU87O2FBTTBCOztjQUFsQyw4QkFBcUIsZ0JBTmJBO2NBTVI7Ozt5QkFUQWp5QyxNQVFtQkQsTUFBTUQsT0FBT3F5QztZQU5KLElBakg5QjBNOzs7UUlwekRBOztvQkowMkVpRHBKOzs7Ozs7O2dCQXplaEM7c0NBaFpjdjFDLElBeTNCTnVoQztpQkF6ZXZCO2lCQURtRDtpQkFBckQ7O29CQTBlaUJpWixRQUFRalosZ0JBMWVjO2lCQUVsQixjQXdlSUEsZ0JBOU5Kb1k7aUJBMVFBO2dCQUNwQjtpQkFDbUM7NkJBTGxDejZDLE1BS2tDOzhCQUFoQzBoRCxRQUZNcFE7O2lCQU04Qjs7a0JBQXRDLDZCQUFxQixvQkFOYkE7a0JBTVI7Ozs2QkFUQXR4QyxNQVFtQkgsTUFBTUksT0FBT3N4QztnQkFOakI7Ozs7Z0JBWWM7c0NBNVpBendDLElBeTNCTnVoQztpQkE3ZFQ7aUJBQWQ7aUJBREY7O29CQThkaUJpWixRQUFRalosZ0JBOWRjO2lCQUVsQixjQTRkSUEsZ0JBOU5Kb1k7aUJBOVBBO2dCQUNwQjtpQkFDdUM7K0JBTHRDdDZDLFFBS3NDOzhCQUFwQ3doRCxVQUZNblE7O2lCQU04Qjs7a0JBQXRDLDZCQUFxQixvQkFOYkE7a0JBTVI7Ozs2QkFUQXJ4QyxRQVFtQkosTUFBTUssT0FBT3F4QztnQkFOSDsrQkF6Ri9CZ087O3FCQXNqQmlEcEo7YUFqZGhDO21DQXhhY3YxQyxJQXkzQk51aEM7Y0FqZHZCO2NBRG1EO2NBQXJEOztpQkFrZGlCaVosUUFBUWpaLGdCQWxkYztjQUVsQixjQWdkSUEsZ0JBOU5Kb1k7Y0FsUEE7YUFDcEI7Y0FDbUM7NEJBTGxDbjZDLFFBS2tDOzJCQUFoQ3NoRCxVQUZNbFE7O2NBTThCOztlQUF0Qyw2QkFBcUIsb0JBTmJBO2VBTVI7OzswQkFUQXB4QyxRQVFtQkosTUFBTUssT0FBT294QzthQU5qQixJQXJHakI4Tjs7Ozs7O2FBc0xGLGtDQXpmaUMzK0MsSUF5M0JOdWhDLGdCQUF3QmdVO1FBOVhHLE9BMWV0RGlFO1VBZ2YwQixhQTNReEJnRSxhQTJRd0IsWUE3UUY1QztVQStReEIsR0EvUXdCRSxPQStReEIsa0JBc1htQk4sUUFBUWpaLFFBQXdCZ1U7VUF4WHpCLElBRWtCLFNBN1Fma0ksYUE2UWUsWUEvUWZqa0M7VUFpUjdCLEdBalI2Qm1PLE9BaVI3QixrQkFvWG1CNnlCLFFBQVFqWixRQUF3QmdVO1VBeFh6QixJQUlrQixTQTlRMUNtSSxjQThRMEMsYUFqUlY3QztVQW1SbEMsR0FuUmtDRSxRQW1SbEMsa0JBa1htQlAsUUFBUWpaLFFBQXdCZ1U7VUF4WHpCLElBTWtCLFNBL1ExQ3FJLFlBK1EwQyxVQUN6QixpQkFwUnlCOStDO1VBb1JnQixRQUM1RCxrQkFnWG1CMDdDLFFBQVFqWixRQUF3QmdVO1VBeFh6QjtXQVF3QixTQWpSckJzSTtXQWlScUIsVUFDL0IsaUJBdFI2QjcrQztVQXNSbUI7WUFDbkUsU0F2UndDb0MsT0Fxb0JXbTBDO1lBOVduRCxrQkE4V21CaUYsUUFBUWpaO1VBeFhELElBN1FGd2YsT0FBZ0IzL0MsSUFBaEJ3NUMsS0FBZ0J4NUM7VUF5UnRCLEdBelJNMi9DLE9BeVJOLGtCQTRXQ3ZHLFFBQVFqWjtRQTVXa0MsYUF0UmhDb2MsWUFzUmdDLFdBelJyQnY4QztRQStSeEMsR0EvUndDNC9DOztVQStSeEMsU0FzV21Eekw7Ozs7O1VBcFdsQixpQkFwZ0JqQ2lFO3VCQXNnQkksa0JBa1dlZ0IsUUFBUWpaLFFBQXdCZ1U7UUFsV0gsT0FwTjlDb0osVUFzTk07TUF2ZlosU0FtQ1E1QyxNQUtKL0IsVUFtZFFMO1FKOWhGZixJSTJrRWlCcFksUUFBVnlZO1FBQ0Y7YUFEWXpZLFlBbWRGb1ksUUFsZGdCLG1CQUR4QkssVUFBVXpZO1VBRUosMEJBNUUyQnZoQyxJQTBFdkJ1aEM7VUFFSjtZQVlhLElBR1gyWixVQWpCRTNaO1lBa0JaLEdBRFUyWixjQWtjQXZCLFFBamNnQix5QkFpY2hCQTtZQXJjVzthQUtmLHdCQTdGNkIzNUMsSUEyRnpCazdDO2FBRUo7O2dCQUNLLFlBcEJDM1osUUFpQkYyWixrQkFrY0F2QjtnQkE5YkQsWUFyQkdwWSxRQWlCRjJaLFVBa2NBdkI7YUEvY01uSjttQkF5c0JkdUosWUE3c0JBQyxVQUFVelksUUFJSWlQOztZQUdaLElBNGNGMkosVUFuZFU1WTtZQW9kWixHQURFNFksY0FBUVI7OztjQUdGLHNCQWhpQjJCMzVDLElBNmhCakNtNkM7Y0FHTSxTQXVDSjMxQzs7Ozs7Ozs7aUNBaENBLFlBVkYyMUMsa0JBQVFSOzs7cUJBWWlCO29DQVp6QlEsa0JBQVFSO3NCQVlpQjt1Q0FBWGhKOzt5QkE4Qlpuc0M7OztnQ0FyQ0EsWUFMRjIxQyxrQkFBUVI7OztvQkFPaUI7bUNBUHpCUSxrQkFBUVI7cUJBT2lCO3NDQUFYL0k7Ozs7eUJBbUNacHNDO2dCQWhCdUI7K0JBMUJ6QjIxQyxrQkFBUVI7aUJBMEJpQjtrQ0FBWDlJOzt5QkFnQlpyc0M7OztvQkF4QnVCO21DQWxCekIyMUMsa0JBQVFSO3FCQWtCaUI7eUNBQVg3STs7OztvQkFrQnNCO3VCQXBDcENxSjs7c0JBQVFSOzs7O3NCQW9DNEIsZ0JBamtCSDM1QyxJQTZoQmpDbTZDO3NCQXFDeUI7cUNBckN6QkEsa0JBQVFSO3VCQXFDaUI7d0NBQVgxSTs7O3FCQUdXO29DQXhDekJrSixVQUFRUjtzQkF3Q2lCO3dDQUFYdEk7OztvQkF6Qlc7bUNBZnpCOEksa0JBQVFSO3FCQWVpQjt5Q0FBWGxJOzs7b0JBY1c7b0NBN0J6QjBJLGtCQUFRUjtxQkE2QmlCO3NDQUFYaEk7OztnQ0FSWixpQkFyQkZ3SSxrQkFBUVI7OztnQ0FnQ04saUJBaENGUSxrQkFBUVI7OztvQkF1QmlCO29DQXZCekJRLGtCQUFRUjtxQkF1QmlCO3NDQUFYOUg7OztvQkFXVztvQ0FsQ3pCc0ksa0JBQVFSO3FCQWtDaUI7c0NBQVg1SDs7Ozs7Y0loakVaO2VKeWpFdUI7OEJBM0N6Qm9JLGtCQUFRUjtnQkEyQ2lCO2tDQUR2Qm4xQyxHQUNZa3NDO1lBdmZaLElBQVlEO21CQXNzQmRzSixZQTdzQkFDLFVBQVV6WSxRQU9Ja1A7VUFMUixJQVFKLFVBVlFsUDttQkFKOEM7TUFwQzVELHFDQWxDcUN2aEMsS0F3NUJQO2FBTzVCaWhELHVCQUF1QmpoRCxJQUFJRTtNQUNYLDhCQURPRixLQUNQOztRQUNOLHdCQURBaWlDLElBRGlCL2hDLE9BQUpGOzs7O1VBTWpCLHlCQU5xQkU7VUFNckIseUNBTmlCRjttQkFNTTthQUk3QmtoRCx3QkFBd0JsaEQ7TUFDUjtPQUQyQnVrQztPQUFOdEM7T0FDckIsMEJBRFFqaUM7T0FDUjs7UUFDTix3QkFEQWdsQyxNQUNnQixhQUZXL0MsTUFBYmppQzs7OztTQUl4Qix5Q0FKd0JBLElBQW1CdWtDOzs7OztPQTUzRjNDM0M7T0FUQUY7T0FiQUw7T0FHQUM7T0FNQUc7T0F3Q0FPO09BazZDSXNVO09BK1FBa0I7T0ErR0FPO09Bb0JBSTtPQXFCQUM7T0F4NkJBckQ7T0F1aENKc0U7T0ErNUJBNEg7T0FVQUM7T0F6b0ZBMWQ7T0FnTEFjO09BMmdDQTZSO09BejFCQXJSO09BNnlDQXdUO09BL3hDSTNTO09BdUlKQztPQStmQW9QOzthcUNwd0NBbU0sU0FBUzlvQixFQUFFbnJCO1VBQVcrMEI7YXJDdzlDbEJxVTt3QnFDdjlDVzVtQyxLQUFPLFdBRFh4QyxFQUNJd0MsS0FBTyxrQkFEYjJvQixFQUFFbnJCLEVBQ2dDOztlQURyQiswQjthQUV0Qm1mLFNBQVMvb0IsRUFBRWoxQjtVQUFXNitCO2FyQ3M5Q2xCcVU7d0JxQ3I5Q1c1bUMsS0FBTyxXQURYdE0sRUFDSXNNLEtBQU8sa0JBRGIyb0IsRUFBRWoxQixFQUNnQzs7ZUFEckI2K0I7YUFFdEJvZixVQUFVaHBCLEVBQUV0ekI7TXpDdkJqQixJeUN1QjZCazlCLG9CckNtdURwQnVWLGFxQ251RE1uZixFQUFFdHpCLEdBQVlrOUI7YUFJeEJxZixRQUFRdjhDLEdBQUdrOUIsS0FBTSwrQnpDM0J0QixVeUMyQmFsOUIsR0FBR2s5QixJQUE0QjthQUN2Q3NmLFFBQVFuK0MsRUFBRTYrQixLQUFNLCtCekM1QnJCLFV5QzRCYTcrQixFQUFFNitCLElBQTJCO2FBQ3JDdWYsU0FBU3o4QyxHQUFHazlCO01BQU0sZ0N6QzdCdkIsVXlDNkJjbDlCLEdBQUdrOUIsSUFBNkI7YUFDekN3ZixTQUFTcitDLEVBQUU2K0IsS0FBTSxnQ3pDOUJ0QixVeUM4QmM3K0IsRUFBRTYrQixJQUE0QjthQUN2Q3lmLE9BQU96ZixLQUFNLGV6QkZiLzlCLE95QkVPKzlCLElBQXdCO2FBQy9CMGYsUUFBUTFmLEtBQU0sZXpCRmQ5OUIsT3lCRVE4OUIsSUFBd0I7YUFFaEMyZixTQUFTdnBCO016Q2xDZCxJeUNrQ3lCNEo7ZUFDbEIvQixJQUFHeHdCO1FBQ0ssSUFBTm5KLElBQU07UUFDVixXQURJQSxJQURDbUo7UUFHSCxrQkFKTzJvQixFQUlQLFNBRkU5eEIsS0FFbUI7YXJDcThDbkIrdkMsWXFDeDhDRnBXLE1BRGtCK0I7YUFPcEI0ZixRQUFRNWYsS0FBTSx5QkFBY25nQyxHQUFLLE9BQUxBLENBQU0sRUFBMUJtZ0MsSUFBK0I7Ozs7T0FkdkNxZjtPQUlBSTtPQUNBQztPQVNBRTtPQWJBTjtPQUNBQztPQUNBQztPQVhBTjtPQUlBRTtPQVdBTztPQWJBUjtPQUVBQztPQVdBTzs7Ozs7O2FDNkJJRSxPQUFPNy9DLEVBQUV5QjtNMUMvRGxCLEkwQytEa0IyVztNQUNmO1dBRGVBOzJCQUdSMG5DLFlBQUpDO1VBQXFCLGNBQXJCQSxHQUhVLy9DLEdBR3FCLE9BQTNCOC9DO1VBQ0ssUUFKRzFuQzs7UUFFUCxnQkFFYzthQUdwQjRuQyxRQUFNbmdEO01BQ0E7aUJBREFBO09BQ0EsMEJBREFBO09BR1UsV0FIVkEsRUFDSjFFLFVBQ0ErSCxPQURBL0g7TUFFSixnQkFIUTBFLElBQ0oxRSxRQUU0QzthQUc5QzhrRCxhQUFhMWpDLE9BQU9MLElBQUlRLE9BQU9qYjtNQUNqQyxHQURpQ0E7UUFHa0IsSUFBOUMwSyxFQUg0QjFLLEtBRy9Ca2xCLEVBSCtCbGxCLEtBR2tCLFNBSHBDOGEsT0FHYm9LO1FBQVE7c0NBQXFCM21CLEVBQUVDLEdBQVMsV0FBWEQsRUFBVyxJQUhwQmtjLElBR1dqYyxHQUFnQixPQUE1Q2tNO2lCQUhxQnVRO01BRWxCLGVBQ21FO2FBWXpFd2pDLG1CQUFpQixtQkFBOEI7YUFFL0NDLFNBQVNDO01BQ1g7UUFDYSxrQkFGRkEsVUFFRTs7Ozs7OzRCQUpYRjs7UUFRVyxrQkFORkUsVUFNRSxXQURUQzs7Ozs7Ozs0QkFQRkg7O01BWVMsY0FWQUUsU0FVQSxZQUxQQyxNQUtvQjthQUd0QkMsUUFBUWg4QyxJQUFJODdDLFNBQVNHO01BQ3ZCLG1CQURVajhDLFVBQWFpOEM7TUFFSSxrQkFGYkg7TUFFSjs7O2tCQTFCbUJJO2tCQUFOQztrQkFBTEM7aURBQVdGOzttQkFFM0IsVUFGcUJDO3FCQUlqQixNQUppQkEsUUFJYSx1Q0FEeEJoL0M7cUJBQ3dCLDBCQW9CMUI2QyxVQXhCUW84QyxTQUFXRjttQkFNdkIsMEJBa0JJbDhDLFVBeEJRbzhDLElBQVdGOztvQkEwQmlCO2FBRzVDRyxhQUFhUCxTQUFTRztNQUNoQixJQUFKcC9DLEVBQUksY0FDUixRQURJQSxFQURXaS9DLFNBQVNHLFFBRXhCLGdCQURJcC9DLEVBRWE7YUFHZnkvQyxNQUFNUixTQUFTRztNQUNKLHNCQURMSCxTQUFTRztNQUNKLHFDQUE4QjtRQUd6QzNpQjthQUVBaWpCLHFCQUFtQjdnRDtNQUNyQjtRQUFTLDJCQURZQTs7O3dDQUVNO21CQUFJO2FBRTdCOGdELG9CQUFrQjlnRDtNQUNwQjtRQUFTLCtCQURXQTs7OytCQUVGO1FBTGxCLFdBS3NCO2FBRXBCK2dELG9CQUFvQi9nRDtNQUN0QjtRQUFTLGlDQURhQTs7OytCQUVKO1FBTGxCLFdBS3NCO2FBRXBCZ2hEO01BQWtDQyxhQUFhcmpCLFFBQVFzakIsS0FBS2QsU0FBU2UsUUFDbkNaO01BQ3BDLElBQUlhLFFBRjZDeGpCO01BRWpELFNBQ0l5akIsY0FBYy9zQztRQUtSOzs7VUFOTjhzQyxVQUZxREY7WUFVZCxpQkFWY0EsUUFFckRFOztRQVNGLE9BUmdCOXNDOzs7Ozs7O1lBWVYsbUJBUEZuVCxRQUNBbWdEOzs7ZUFTaUJ6SixTQWZMdmpDLFNBZUFzYSxJQWZBdGEsU0FlTHFYLElBZktyWDtXQWdCVixtQkFYRm5ULFFBQ0FtZ0QsU0FTWTF5QixJQUFMakQsSUFBVWtzQjs7aUJBRGYsSUFETWg0QyxFQWJJeVUsU0FjVixtQkFURm5ULFFBQ0FtZ0QsU0FPUXpoRDtrQkFNTixJQURNdVEsSUFsQklrRSxTQW1CVixtQkFkRm5ULFFBQ0FtZ0QsU0FZUWx4QztRQUdaLFFBaEJJalAsRUFSd0RpL0MsWUFDMUJHO1FBd0JKLEtBQTNCLFdBdEJhanNDLGlCQXNCYyxXQXRCZEE7U0F3QlAsdUJBbkJMblQ7UUFrQk0sd0JBbEJOQSxHQW1Cd0I7TUF6QjlCOztXQUZpRHk4QixhQUFRc2pCO1VBK0J2RDtZQUNVO2tCQWhDcUN0akI7YUFnQ3JDLG1CQWhDNkNzakI7O1lBaUMxQixRQURuQixzQkFBSnJoRCxhQUN1QixnQkFEdkJBO2NBQ3dDO2dCQUVwQzs7NkJBSEpBLEVBaENzRHVnRDtpQkFrQzVDbUI7aUJBQVJyd0M7Ozs7Z0JBR0Y7a0JBQ3FCO2lDQU5yQnJSO21CQU1xQjs7NkJBQU4rdUI7bUJBQ2IsWUFESTR5QixRQXRDZ0RwQjs7O3dDQXdDcEMsaUJBUmxCdmdEOzs7b0JBRVUwaEQsZ0JBQVJyd0M7Y0FRSjs7eUJBVkVyUixFQUVVNmhEOzJCQVFSQztvQkFDRixHQVRVRDswQkFXSDl5QixJQVhHOHlCLDJCQUZWN2hELEVBYU8rdUI7b0JBREcsUUFDZ0Q7eUJBSHhEK3lCO2VBQUosZ0JBVkU5aEQsRUFFVTBoRDtlQVFaO3lCQVZFMWhELEVBRVU2aEQ7MkJBWVJHO29CQUNGLEdBYlVILFlBaUJIOXlCLElBakJHOHlCLGlCQWlCSDl5QjtvQkFGSCxJQWpEcUNnUCxzQkFBUXNqQjtzQkFpREQsU0FqRFB0akI7c0JBaURPLHdCQWpEQ3NqQjtvQkFrRHhDLGlCQWxCVHJoRCxHQW1CaUI7eUJBTGZnaUQ7ZUFKSixrQkFWRWhpRCxFQUVVMGhEO2VBUVo7eUJBUllHOzJCQW1CUks7b0JBQ0YsT0FwQlVMLFVBbEMrQjlqQixlQXdEM0I7eUJBSFpta0I7ZUFYSiwwQkFSWVI7ZUFRWjt5QkFWRTFoRCxFQVVFOGhELE9BSUFFLFFBT0FFOzJCQUtJRTtvQkFBZTs2QkFDWCxJQUFMNWlELFdBQUssNEJBQUxBOzt1QkFFSDs7d0JBQVU7d0JBQ0UsMkJBRFJ1dkI7dUJBQ1E7eUJBRUEsSUFBTHhlLGFBQUssV0FKVDh4QyxJQUlJOXhDLEtBRVA7dUJBSFUsaUJBL0JadlEsRUE2Qk0rdUI7NkJBTUcsSUFBTHB2QixXQUFLOzZCQUNFLElBQUxveUIsYUFBSzs7dUJBRVQsaUJBQVU7dUJBQ1YsV0FGS3V3QixJQUNEdHpCO3VCQUNKOzt1QkFZQSxJQURTdXpCLGFBQ0o7O3VCQUdMOzt3QkFBVTt3QkFDRSw0QkFEUnR6Qjt1QkFDUTt5QkFFQSxJQUFMOXVCLGFBQUssV0FKVnFpRCxJQUlLcmlELEdBRVA7dUJBSFUsaUJBeERaSCxFQXNETWl2Qjs7dUJBT0o7O3dCQUFVO3dCQUNFLDRCQURSeXpCO3VCQUNRO3lCQUVBLElBQUxycEMsZUFBSyxTQUFMQSxJQUVQO3VCQUhVLGlCQS9EWnJaLEVBNkRNMGlEOzt1QkFPSjs7d0JBQVU7d0JBQ0UsNEJBRFJFO3VCQUNRO3lCQUVBLElBQUxDO3lCQUFLLFdBSlJGLElBSUdFO3lCQUVQO3VCQUhVLGlCQXRFWjdpRCxFQW9FTTRpRDs7dUJBT0o7O3dCQUFVO3dCQUNFLDRCQURSRzt1QkFDUTt5QkFFQSxJQUFMQyxlQUFLLFNBQUxBLElBRVA7dUJBSFUsaUJBN0VaaGpELEVBMkVNK2lEOzt1QkFPSixJQURJRTt1QkFDSjtxQ0F4REliLGFBdURBYTs7dUJBdkNNLElBREVDLGFBQU56UCxjQUNJO3VCQUNQLE9BREMwUCxNQURFMVA7eUJBR0osV0FIVXlQLElBQ1JDLE9BRUY7dUJBRzRCOzs7K0JBL0NoQ25qRDsrQkEwQ01takQ7K0JBSzBCLGVBQ0Usa0NBUDFCMVA7O3VCQTRDTixJQURHMlA7dUJBQ0g7dUJBR2dCOzRCQXhIdUJybEIsY0FBUXNqQjsyQkF1SDdDLFNBdkhxQ3RqQjsyQkF1SHJDLFdBSENxbEIsSUFHQyxpQkF2SDJDL0I7MkJBd0g3Qzs7Ozt1QkFHRixJQURPZ0M7dUJBQ1A7MkJBQ0l6MUM7dUJBR1k7NEJBL0h1Qm13QixjQUFRc2pCOzJCQThIN0MsU0E5SHFDdGpCLG1CQThIckMsS0FGRW53QjsyQkFFSyw2QkE5SHNDeXpDOzJCQStIN0M7O3lCQUVBLGtCQVBLZ0MsSUFPTCxJQUxFejFDOzsyQkFNQzAxQzs4QkFsSXFCbEM7d0JBb0l4Qjt1QkFFUSxxQkFDRyxrQkFMUmtDLElBSURDO3VCQUVKO3VCQUZVO3dCQUdHLGFBeklrQ2xDLFVBQVJ0akI7d0JBMklyQzs7MkJBM0k2Q3NqQjsyQkFBUnRqQjs0QkFBUXNqQixxQkFBUnRqQjt1QkE2SWhDOzs0Q0FKSDBGLFVBRkErZixVQUdBaGdCO3VCQUdHLFNBQW1DO3lCQW5GdEM0ZTtlQWhCUiw0QkFWRXBpRCxFQVVFOGhELE9BSUFFLFFBT0FFO2NBMEZKLGFBN0dJN3dDOztZbEN1V0osY2tDelBHLFdBaEo4RGl3QyxRQWdDL0R0aEQ7OztpQ0FpSFUsSUFBTGlwQixXQUFXLHVCQUFYQTtrQ0FDTSxJQUFMemdCLFdBQVcsb0JBQVhBOzs7VUFFWjs7UUF2SkYsU0F3Skk7YUFFRmk3QztNQUE4QjFsQixRQUFRc2pCLEtBQUtkLFNBQVNlLFFBQVFaO01BQzlEO2lCQURnQzNpQixRQUFRc2pCLEtBQUtkLFNBQVNlLFFBQVFaLE9BQ2E7YUFFekVnRCxtQkFBcUI1M0IsSUFBaUJ1MUIsS0FBS2QsU0FBU2UsUUFBUVo7TUFDOUQsR0FEdUI1MEIsSUFBUSxRQUFSQSxpQkFBUUMsYUFBUjQzQixVQXhLckI1bEI7TUF5S0Y7aUJBRHVCNGxCLGFBQWlCdEMsTUFBS2QsU0FBU2UsUUFBUVosT0FFdEQ7YUFHTmtELFdBQWE5M0IsSUFBaUJ1MUIsS0FBS2QsU0FBU2UsUUFBUVo7TUFDdEQsR0FEZTUwQixJQUFRLFFBQVJBLGlCQUFRQyxhQUFSNDNCLFVBN0tiNWxCO01BOEtGO2tCQURlNGxCLFdBQWlCdEMsUUFBS2QsVUFBU2UsUUFBUVosT0FDZ0I7YUFHcEV6RyxNQUFNcjRDLEVBQUVwQyxFQUFFNkw7TUFDWjtRQUNFLHVDQUZNekosRUFBRXBDLEVBQUU2TDs7OztVQUlDLElBQVB3NEMsYUFBTyx5QkFBUEEsT0FBTzs7VUFDQyxJQUFQQyxhQUFPLHdCQUFQQSxPQUFPO2tCQUF1QjthQUduQ0MsY0FBY25pRCxFQUFFcEMsRUFBRTZMO01BQ3BCO1FBQ0UsK0NBRmN6SixFQUFFcEMsRUFBRTZMOzs7O1VBSVAsSUFBUHc0QyxhQUFPLHlCQUFQQSxPQUFPOztVQUNDLElBQVBDLGFBQU8sd0JBQVBBLE9BQU87a0JBQXVCO2FBRW5DRSxhQUFhcGlELEVBQUVwQyxFQUFFNkw7TUFDbkI7UUFJRTtTQUhJZzJDO1NBQ0FULFFBSFNoL0M7U0FJVCtoRCxhQXBNSjVsQjtTQXFNQSxtQ0FESTRsQixVQUZBdEMsS0FDQVQsS0FIV3BoRCxFQUFFNkw7Ozs7O1VBT04sSUFBUHc0QyxhQUFPLHlCQUFQQSxPQUFPOztVQUNDLElBQVBDLGFBQU8sd0JBQVBBLE9BQU87a0JBQXVCO2FBR25DRyxZQUFZamtEO01BQ2QsSUFBSXFELElBQUosc0JBRGNyRDtNQUNkLFNBQ1Fra0QsS0FBS3BrRDtRMUN0VWhCLEkwQ3NVZ0I4UTtRQUNYO2FBRkV2TixPQUNTdU4sSUFDTSxPQUZmdk47VUFHTSwwQkFKSXJELEVBRUQ0UTtZQUVjLFFBRmRBO1VBR04sT0FITUEsSUFHTDtNQUpSO1FBTU0sSUFDSkEsSUFESSxRQVBRNVE7Ozs7VUFVVjtZQUFZLElBQ1ZGLEVBRFUsUUFWRkU7OztrQ0FZZSxPQVh6QnFEO1lBVU87c0JBQUx2RDtRQUhDO2tCQUFMOFEsWUFLSzthQUdMdXpDLFlBQVl2a0Q7VUFBZ0IrZ0QsYUFBTkMsY0FBTHdEO29CQUFLeEQ7ZUFFVixNQUZBaGhELElBRUEsc0JBRkt3a0Q7ZUFHcUIsTUFIMUJ4a0QsSUFHMEIsc0JBSHJCd2tELE9BR3FCLFlBSFZ6RDthQU01QjBELG9CQUFvQnJrRDtNQUN0QixJQUFJSDtNQUFKO3dCQUNnRTZDO2lCQUFqQyxTQUFpQ0EsT0FENUQ3QyxTQUN3QyxzQkFBeUIsT0FBTDZDLENBQU87ZUFGakQxQyxFQUVtRDthQXlCdkVza0QsTUFBUXg0QixJQUFleTBCO01BQ3pCLEdBRFV6MEIsSUFBTSxRQUFOQSxhQUFNQyxhQUFOdzRCLE03QmpSQXpqRDtNNkJrUk07MEJBRFN5L0M7T0FFZixnQkFuQ1I0RCxjQWtDRUs7T0FFTSxZQURObmhELElBRk1raEQ7TUFJRDt3QkEzQlNFO2lCQUNsQixTQURrQkEsT0FDbEIsS0FEa0JBO2lCQUNsQix3QkFEa0JBOztxQkFPZDs0QkFQY0E7c0JBT0QscUJBRFdaO3NCQUVYLGdCQUFhLFFBUmhCMy9DLFFBT053Z0Q7cUJBRVE7Ozt3Q0FBTyxJQURmQyxTQUN3QixvQkFISmQ7bUJBS1g7b0JBREh4NEMsSUFWSW81QztvQkFVVjdELEtBVlU2RDtvQkFXRCxtQkFESHA1QztvQkFDRzswQkFYSG5ILFFBWU4yZ0QsZUFEQUQ7bUJBQVMsT0FFVDduQztxQkFJVztvQ0FKWEE7c0JBS1csYUFBVyxvQkFSaEIxUixPQUNOdTVDO3NCQVFXOzZCQVRMdjVDLElBQ051NUMsT0FPVyxzQkFSTHY1QyxPQUNOdTVDO3FCQVNVLGVBVlZoRSxLQVVVLElBRlJsa0MsT0FFaUIsSUFIakJvb0MsT0FFQWpvQzttQkFKUSxlQUxWK2pDLEtBS1Usb0JBTEp2MUM7aUJBTFYsT0FMY281QztlQXdCZEQsVUFHZ0M7YUFTbENPLFNBQVNDLEtBQUszb0MsSUFBSTRvQztNQUNYLGtCQURXQSxNQUVWO2VBRU5FO1FBQ1MsSUFaSG5sRCxFQVlHLFNBSFR5RTtRQUdTLEdBTEZ1Z0Q7VUFOWCw4QkFEVWhsRDtVQUVJLE9BRFZxRCxjQUNVLGdCQUZKckQsRUFDTnFEO3FCQUVGLE1BSFFyRCxJQUNOcUQ7VWxDb0pFLHVCa0NySklyRDtVQUNWLElBWU1vbEQ7O2tCQWJJcGxEO1FBY1IsY0FESW9sRCxLQUhGRjtRQUlGLGVBTEV6Z0QsSUFNYztNQU5SOztVQVVJLElBQUovQixFQUFJLG1CQVhWcUI7VUFXVSxHQUFKckIsTUFaTTJaLElBYU0sY0FBYyxTQVhoQzVYLElBVU0vQjs7Ozs7VUFLUCxPQWZDK0IsT0FlMEI7VUFDOUIsc0JBakJJVjtVQWtCVSxtQkFoQlZtaEQ7bUJBZ0IyQjs7SUFFbEIsU0FBWEcsZTFDdlpMLE8wQ2tZS047SUFxQlc7SUFFQyxTQUFaTyxnQjFDelpMLE8wQ2tZS1A7SUF1QlksU0FFWlEsVUFBVWxwQyxJQUFJNG9DLEtBQUtPO01BQ1osSUFBTHZpRCxHQUFLLFNBRE9naUQ7TUFFaEIsZ0JBQWdCamxELEdBQUssMEJBRGpCaUQsU0FDWWpELEVBRkpxYyxJQUVnQyxFQUZ2Qm1wQztNQUVyQixhQURJdmlELEdBRVE7SUFMRTtJQU9BLFNBQVp3aUQscUIxQ2hhTCxPMEMyWktGO0lBS1k7SUFFQyxTQUFiRyxzQjFDbGFMLE8wQzJaS0g7SUFPYTs7O09BeEhidEw7T0FRQThKO09BWkFIO09BTEFGO09BSEFEO09BMkJBTzs7O09BcE1BakQ7T0FOQUQ7T0FzUUF3RDtPQTVQQXZtQjtPQThSQXNuQjtPQUVBQztPQU9BRztPQUVBQztJQUFhOzs7OztRckM5WWJDO0lBQVcsU0FJWEMsTUFBTXpsRCxFQUFFN0U7TUFDRixJQUFKa0UsRUFESVcsTUFBRTdFO01BRUgsZ0JBREhrRTtlQUdJLGFBSEpBO2lCQUlGLHlCQUpFQTtpQkFLSSxhQUxKQSxXQU1GLFVBTkVBO2VBRUYseUJBRkVBLEVBUUM7SUFiUSxTQWVQcW1ELGFBQWExbEQsRUFBRTdFO01BQ3JCLEdBRG1CNkUsZ0JBQUU3RSxFQUNHO01BQ1Usc0JBRmY2RSxFQUFFN0UsV0FFQyxXQUZINkUsRUFBRTdFO01BRUMsMENBQWtDO0lBakIzQyxTQTBCWHdxRCxhQUFhM2xEO01BQ2YsU0FBUTRsRDtRTC9DWDtRSytDa0I7O2dCQUNMOWpELGNBQU5DOztjQUNTLDhCQURUQSxHQUZXL0I7O2dDQUtJLElBQUxILFNBQUssVUFBTEE7d0JBSEppQzs7VUFJQSxTQUFJO01BQ1QsWUFqQ0gwakQsWUFpQ3dCO0lBakNiLFNBbUNYSyxrQkFVTTdsRDtNQVZjLEdBVWRBLG9CQVRXO1NBU1hBLHFCQVJZO1NBUVpBO3lCQVBvQjhsRCxrQkFBTkMsZ0JBQU5qQjs7aUJvQ2pCZGxGLFFwQ25CQXpsRDtpQkFvQ2MycUQ7aUJBQU1pQjtpQkFBTUQ7OztTQU9wQjlsRDs7O1NBTHFCZ21EO1NBQU5DO1NBQU5DOztpQm9DbkJmdEcsUXBDbkJBemxEO2lCQXNDZStyRDtpQkFBTUQ7aUJBQU1EOzs7U0FLckJobUQ7OztTQUhpQ21tRDtTQUFOQztTQUFOQzs7aUJvQ3JCM0J6RyxRcENuQkF6bEQ7aUJBd0MyQmtzRDtpQkFBTUQ7aUJBQU1EOzs7TUFJckMsc0JBRElubUQ7UUFLcUMsZ0JBTHJDQSxRQXpCUixNQXlCUUE7UUF6QlI7U0FJb0M7NEJBcUI1QkE7VUFyQmdCLFdBcUJoQkE7ZUFyQmdCOzs7OzttQkFERixlQXNCZEEsVUF0QmM7bUJBMEJac21EO01BRk8sT0FGVHRtRCxJQU1zQjtJQW5EakIsU0FxRFh1bUQsWUFBVWwrQztNQUNOLHVCQURNQTtNQUNOLFVBQ00sSUFBTHhJLFdBQUssT0FBTEE7TUFDRyx5QkFIRXdJLEVBR2lCO0lBeERoQixTQTBEWG0rQyxNQUFNQyxJQUFJNzNCO01BQ1o7UUFDRSxvQkFGTTYzQixJQUFJNzNCLEtBSVY7WUFERzV1Qjs7UUFDZ0MscUJBRGhDQTtRQUNIO1FBQ0EsY1dyREFrQztRWHFEQSxNQUZHbEMsRUFHSTtJQWhFSSxTQWtFWDBtRCxRQUFNRCxJQUFJNzNCO01BQ1o7UUFDRSxvQkFGTTYzQixJQUFJNzNCO1lBR1A1dUI7O1FBQ0gsY1c3REFpQztRWDhEbUMscUJBRmhDakM7UUFFSDt1QkFDTTtJQXhFSyxTQThFWDJtRCxzQkFBc0JDLElBQUssT0FBTEEsRUFBTztJQTlFbEIsU0FnSFhDLHNCQUFzQkQ7TUxwSTNCLFVLcUlZLG1DQURlQSxJQUVGO0lBbEhULFNBb0hYRSxzQkFBc0J6cUIsSUFBSTd4QjtNQUM1QixTQUFJSixLQUFLMjhDO1FBQ1AsT0FET0E7dUJBRGUxcUI7eUVBS2lEO01BSnpFLFNBRDRCN3hCO1FBY3hCO2NBZHdCQTtTQWN4QixLQWR3QkE7U0FjeEIsS0Fkd0JBO1NBY3hCLEtBZHdCQTs7O1NBZWhCLFVBZmdCQTtRQWNuQjs7TUFMTCxHQVR3QkEsUUFVb0I7TUFFTjtNQUEvQix5Q0FLdUM7SUFySXJDLFNBbUpYdzhDLG9CQUFvQkMsUUFBUUM7TUFDSSxJQWJFQyxVQWFGLHNCQURKRDtNQVg5QixHQURvQ0M7UUFNaEMsTUFOZ0NBLGFBTWhDLEtBREd2a0QscUJBQ0g7OztVQUNFO1lBQU0sZ0NBRFJ6SCxFQUNnQyxpQkFGN0J5SCxFQUNIekg7WUFDUSxVQUVVLElBQVA0QyxhQUFPLG1CQUdBa3BELGNBSFBscEQ7WUFGSCxTQURSNUM7OztRQUhBO3FCQVNrQjhyRCxhQUNpRDtJQXBKMUQsU0F1SlhHLGdCQUFnQkg7TUFDVSwyQkFEVkEsUUFDVSxrQ0FBc0I7SUF4SnJDLFNBdUtYSSx3QkFBd0JIO01BQ04sSUFkRUMsVUFjRixzQkFETUQ7TUFaMUIsR0FEc0JDO1FBS1YsSUFETHZrRCxFQUpldWtELGFBS1Ysc0JBREx2a0QscUJBQ0s7O2NBQ1J6SDtVQUNFO1lBQU0sZ0NBRFJBLEVBQ2dDLGlCQUg3QnlILEVBRUh6SDtZQUNRLFVBRVUsSUFBUDRDLGFBQU8sbUJBSmRvRCxRQUlPcEQ7WUFGSCxTQURSNUM7OztRQUtBLGdCQU5JZ0c7TUFGTCxxQ0FXc0Q7SUF4SzVDLFNBMEtYbW1ELHdCQUVpQnh1QztNQUZTLGFBRVRBLDBCQUFlO0lBNUtyQixTQThLWHl1Qyx5QkFDZXp1QyxPQURZLGFBQ1pBLG1CQUNZO0lBaExoQixTQXlMWDB1Qyx3QkFFZTF1QztNQUZXLGFBRVhBLHNEQU1kO0lBak1VLFNBbU1YMnVDLHVCQUdlM3VDO01MMU5wQixTSzBOb0JBO09BQUssVUFBTEE7TUFEb0IsUUFDRDtJQXRNdkIsU0F3TVg0dUMsZ0JBQWdCUjtNQU9aLGdDQVBZQTtNQU9aO1FBR0YsMkJBREtDO1FBSW1COzs7O1lBRUg7b0NBTmhCQTthQUNhOztZQUtHO3lCQU5oQkE7TUFERyxRQVVDO0lBMU5BLFNBNE5YUSw2QkFBNkJDO01BQy9CLDBCQUQrQkEsT0FDSjtJQTdOZCxTQXdPWEMscUJBQXFCakIsSUFBSyxPQUFMQSxhQUFvQjtJQXhPOUIsU0FtUFhrQjtNQUEyQyxpRUFBc0I7SUFuUHRELFNBd1BQQyxpQkFBaUJDO01BQ3ZCO1FBQW1CO3NCQXpQakJ4QztTQXlQaUIsZ0JBREl3QyxHQUNuQkM7U0FFVSx3QkEzUFp6QyxTQXlQRXlDLGFBQ0FDO1NBQ1UsU0FBVnpoRDtRQUFVO29CQUN5QjtJQTVQMUIsU0FnUVgwaEQsU0FDRW5vRCxHQUNKLDBCQURJQSxTQUNzQztJQWxRN0IsU0FvUVhvb0QsWUFBWXBvRCxHQUNILElBQVB3SyxLQUFPLFNBREd4SyxHQUVMLE9BREx3SyxPQUM4QjtJQXRRckIsU0F3UVg2OUMsY0FBY3JvRCxHQUNMLElBQVB3SyxLQUFPLFNBREt4SyxHQUVQLE9BREx3SyxPQUNpQztJQTFReEIsSUErUVg4OUMsT0EvUVc7YUErUlhDLCtCQUFtQ3Y1QixJQUFJazRCO01BQ0gscUJBRERsNEI7TUFDckM7TUFDQSxvQld2UkU5c0IsT1hxUnVDZ2xEO01BQ0gsSUFFbENzQixPQUFTO1NBQVRBO1FBRW9CLGFBRnBCQTtRQUVGLGNBQWMsaUJBckJkRjtNQXFCaUMscUJXMVJqQ3BtRCxPWDJSVTtJQXJTQyxJQXVTWHVtRCw4QkFSQUY7SUEvUlcsU0F5U1hHLCtCQUErQlY7TUFBSyxnQ0FBTEEsR0FBSyxRQUFnQztJQXpTekQsSUEyU1hXO0lBM1NXLFNBK1VYQywwQkFBMEI1NUIsSUFBSTY1QjtNQUNoQztRQTVCQTtVQUtNO1dBRkEzQjtZQXdCMEIyQixnQkFwQzlCRixnQkFnQkk7VUFBd0IsS0FFdkI7VUFDTDtZQUNFOzZCQXhCRkYsOEJBd0MwQno1QixJQXhCdEJrNEI7O2dCQVNDNEI7O1lBQ2tCOzthQUNpQixpQkFhZDk1QjtZQWJ4QjtZQUNBLG9CV3pURjlzQixPWDZTSWdsRDtZQVVtQixTQUluQixZQUxDNEI7WUFJSDtZQUVBLG9CVzVURjVtRCxPWHVUTTZtRDtZQUFpQixTQU1yQixjVzdURjdtRDtVWCtTSTs7O29DQVhOO21CQTRCTTtRQVVKOzJCQUFFO0lBTUo7O01BWEUwbUQ7SUFXRixvQkw5V0g7SUs4V0csb0JMOVdIO0lLOFdHO01MOVdIO0lLOFdHOzs7T0FoTEV0QjtPQUlBQztPQVdBQztPQVVBQztPQS9FQVg7SUFzT0Ysb0JMOVdIO0lLOFdHLG9CTDlXSDtJSzhXRzs7O09BclNFUDtPQWxCQVY7T0F1QkFXO09BUUFFO09BcUZBVTtPQTRGQVU7c0JMdlFMOztPSzRRU0M7T0E5TkpwQztPQW9EQWdCOztPQXFFQUs7T0FvQkFLO09Bd0hBa0I7T0FVQUc7T0FqR0FoQjtPQW9CQUM7O09BWUFFOzs7O09BNEJBTztPQUlBQztJQWtGRjthc0M3VkVXLFFBQU16bUQsU0FBTSxPQUFOQSxDQUFPO2FBQ2IwbUQsS0FBSzVwRCxFQUFFVyxFQUFFQyxHQUFJLGtCQUFSWixFQUFJWSxFQUFGRCxFQUFXO2FBQ2xCa3BELE9BQU96NkMsRUFBRWxQLEdBQVEsc0JBQVZrUCxFQUFFbFAsRUFBYTs7OztJQUlqQjs7UUFBNkI7VUFDZCxJQUFQeXZCO1VBQVkscUNBQTBCLFlBQXRDQTtRQUNWLFFBQUk7SUFGRixTQUlMbTZCLFFBQVVDLFVBQXdCQztNQUNwQyxTQUFJQztRQUNGO1VBQUksb0JBRk1GLGFBR1I7Y0FEa0IvZ0Q7O1VBQ1QsK0RBRFNBO1VBQ1QsK0JBQUx1K0M7VUFBSyxVQUMwQztNQUh2RDtRQUtNLElBQ0o3NkMsT0FESSxXQU44QnM5QztZQVF4QkU7O1FBQ00sSUFBVkMsUUFBVTtRQUNkO21DQUZRRCxTQUNKQztRQUNKLE1BRlFEO01BREE7YUFBVng5QyxNQUlnRDtJQWYzQyxrQkFOTGk5QyxRQUNBQyxLQUNBQyxPQVFBQztJQUpLO2FDaURMTSxXQUFXbG5EO01BQ0osb0NBQUw4c0I7TUFDSixtQkFGYTlzQjtNQUNKLFNBQUw4c0I7TUFFSixtQkFIYTlzQjtNQUNKLFNBQUw4c0I7TUFHSixtQkFKYTlzQjtNQUNKLFNBQUw4c0I7TUFJSixtQkFMYTlzQjtNQU1iLFFBTmFBO01BQ0o7T0FLVCxLQUxJOHNCO09BTW1CO1lBTm5CQTtNQU9KLG1CQVJhOXNCLFFBT1R4QjtNQU5LLFNBQUxzdUI7TUFRSixtQkFUYTlzQixRQU9UeEI7TUFOSyxTQUFMc3VCO01BU0osbUJBVmE5c0IsUUFPVHhCO01BSUosUUFYYXdCO01BQ0o7T0FVVCxLQVZJOHNCO09BV21CO1lBWG5CQTtNQVlKLG1CQWJhOXNCLFFBWVR2QjtNQVhLLFNBQUxxdUI7TUFhSixtQkFkYTlzQixRQVlUdkI7TUFYSyxTQUFMcXVCO01BY0osbUJBZmE5c0IsUUFZVHZCO01BWEssU0FBTHF1QjtNQWVKLG1CQWhCYTlzQixRQVlUdkI7TUFYSyxTQUFMcXVCO01BZ0JKLG1CQWpCYTlzQixRQVlUdkI7TUFYSyxTQUFMcXVCO01BaUJKLG1CQWxCYTlzQixRQVlUdkI7TUFPSixRQW5CYXVCO01BQ0osU0FBTDhzQjtNQW1CSixtQkFwQmE5c0I7TUFDSixTQUFMOHNCO01Bb0JKLG1CQXJCYTlzQjtNQUNKLFNBQUw4c0I7TUFvQkosMEJBckJhOXNCLGFBc0IrQjthQUcxQ21uRDtNQUNrQjs7Ozs7TUFDSCxRQURaRyxLQUFTRixLQUFMQyxRQUM0QzthQW1CbkRFLGFBQWF6cUQsR0FFZixZQUNXO2FBR1QwcUQsYUFBYW5uRCxHQUFJLGlCQUFVO3lCQXdCQyxRQUFFO3lCQURGLFFBQUU7eUJBRFIsUUFBSTt5QkFEQSxRQUFJO1FBRjFCb25ELGdDQUNzQixRQUFJO2FBVzFCOTdCLE1BQ0QrN0IsY0FDQ3QrQixJQUNGdStCO01BQ0EsR0FGRXYrQjtPQUFpQixRQUFqQkEsc0JBQWlCQzs7V0FBakJ1K0IsZS9CekRJeHBEO00rQjJETixrQ0FIQ3NwRCxjQUNDRSxlQUNGRCxRQUM0QztnQkFoQjFDRixhQVlBOTdCO3dCNUMzSlQ7Ozs7OztPNEN3RUt1N0I7T0F5QkFDOzJCNUNqR0w7OztPNENzSEtJO09BTUFDOzs7YUNsR0FLLE9BQU9yc0Q7TUFDVCx1QkFEU0EsTUFDVCxzQkFEU0EsS0FDOEI7YUFFckNzc0QsTUFBTWxwRCxHQUFXLG1DQUFYQSxHQUFxQzthQUUzQ21wRCxVQUFVdnNELElBQUlrRixJQUFJQztNN0MvQnZCOzs7UTZDK0JtQkQ7Ozs7UUFBSUM7OztnQ0FBUm5GLE9BQVFtRixXQUFKRDtPQUdYLHVCQUhPbEYsSUFBSWtGLElBQUlDO01BRWYsd0NBQ3lCO2FBRTVCcW5ELFNBQVNwcEQsRUFBRThCLElBQUlDO01BQWdCLHNDQUF0Qi9CLEdBQUU4QixJQUFJQyxJQUFrRDthQUVqRTRoRCxLQUFLMEY7TUFDRSxJQUFMNW1ELEdBQUssV0FERjRtRDtNQUNFO1FBQ0gsSUFDRi95QyxFQURFLHNCQURGN1Q7WUFHVXlFLDhCQUFLLHNCQUhmekUsSUFHZSxNQUFMeUU7TUFETCxzQkFGTHpFO01BRUssT0FBTDZULENBQ21DO2FBRXJDZ3pDLFNBQU9wbkQsS0FBS3FuRCxRQUNkLHFCQURTcm5ELEtBQUtxbkQsT0FDVzthQUV2QkMsUUFBTXRuRCxNQUFPLDJCQUFQQSxRQUFrQzthQUV4Q3VuRCxTQUFTanJELEdBQ1gsZUFEV0EsMkJBQ2lFO2FBRTFFa3JELE9BQU9wekM7TUFDVCxnQ0FEU0EsR0FDcUI7TUFDakIsaUNBQ2J0YztNQUNFO1FBQWtCLElBQWQ2RSxFQUFjLGdCQUpYeVgsRUFHVHRjO1FBRWdDLHNCQUg1QjRRLE9BQ0o1USxVQUVnQyxTQUQxQjZFO1FBRTRCLHNCQUo5QitMLFFBQ0o1USxtQkFHa0MsU0FGNUI2RTtRQUFjLFNBRHBCN0U7O1FBS0EsNEJBTkk0USxRQU15QjthQUUzQisrQyxTQUFTanJEO01BQ1gsZ0NBRFdBLEdBQ21CO01BQTZCLFNBQ3ZEa3JELE1BQU14b0Q7UUFDUixTQURRQTs7NEJBSU0sUUFKTkE7OzBCQUdNLFFBSE5BOztpQ0FFTSxPQUZOQTtRQUtELGdEQUEwQztNQUduRCxpQ0FDQXBIO01BQ0U7b0JBREZBLE1BRmlDLFdBQU0sZ0JBVDVCMEUsRUFTRjZCO1FBR1A7VUFGRXFLLE9BQ0o1USxFQUNxQixLQUhSLE1BQU0sZ0JBVFIwRSxFQVNGNkI7UUFHUCxTQURGdkc7O1FBR0EsNEJBSkk0USxRQUl5Qjs7Ozs7O09BbEQzQnErQztPQUdBQztPQUVBQztPQUtBQztPQUVBekY7T0FNQTJGO09BR0FFO09BS0FFO09BVUFDOzthaEM1QkVFLGlCQUFzQixpQ0FBMEI7YUFDaERDLE9BQU9DLElBQUlDO01BQ2IsT0FEYUEsU0FBSkQsYUFDVCxTQURhQyxPQUNiLFFBQ2tCO2FBR2hCQyxVQUFVdnJELEVBQUV3ckQ7TUFDZCxpQkFEY0EsMkJBT2QsRUFESUMsa0JBRUo1cEQ7TUFDRTt5QkFUVTdCLEtBUVo2QjtRQUNFLFNBREZBOztRQUNFLElBRUYsaUJBQ2tCLG1CQUxkRCxPQUlKO1FBQ2tCO2NBQWxCdEc7VUFDRTs7ZUFERkE7YUFDRSxXQURGQSxFQUxJc0c7YUFRb0IsbUJBVHBCNnBELE9BUUVsMUI7WUFIRjd4QixVQVYrQixXQVUvQkEsUUFWdUMsNEJBQTFCdkU7WUFZZjtrQkFGRXVFO2FBUFc7YUFEMEM7YUFBMUI7YUFBbkI7YUFhRyx1QkFoQkgxRSxLQWFONFA7WUFHSixpQkFoQlU1UCxLQWFONFA7WUFBSixTQURGdFU7OztRQU1BO2lCQUFVO2FBR1Jvd0QsT0FBS0Y7TUFDTSxJQUFUdC9DLE9BQVMsYUFDYixVQURJQSxPQURHcy9DLE1BRVAsT0FESXQvQyxNQUVFO2FBR0p5L0Msc0JBQXlCLHNDQUFnQjthQUV6Q0MsT0FBSzVyRCxHQUNNLElBQVRrTSxPQUFTLGFBQ2IsT0FESUEsT0FER2xNLEdBRVAsT0FESWtNLE1BRUU7YUFJSjIvQyxLQUFLN3JEO01BQ1AsUUFET0E7TUFDUDtZQURPQTtPQUVNLHdCQUZOQTtPQUVNLE1BRk5BO09BR007eUJBSE5BOztTQUVIOHJEOzs7T0FDUyxTQUFUQztPQUFTLEtBSE4vckQ7TUFNUCxpQkFOT0EsdUJBS0hnc0Q7TUFDSixPQURJQSxRQUVJO2FBR0ZDLE9BQU9qc0QsRUFBRUY7TUFDZjtRQUFRLFdBREtFLEdBQ0wsV0FBSkwsRUFEV0c7UUFDUCxrQkFET0EsbUJBQ1hILElBQ0FEO1FBQytDLE9BRC9DQSxFQUNnRDthQUVsRHdzRCxNQUFJbHNELEVBQUVtc0Q7TWIzRmIsbUJhMkZhQSxvQkFHSCxjQUhDbnNELEVBQUVtc0Q7TUFFSCxrQ0FDYzthQTJCakJDLFNBQVNwc0QsRUFBRW1zRDtNQUNiLE9BRGFBO1FBR1IsZ0JBSFFBO1NBeEJiO1dBQ1MsWUF1QkVuc0QsR0F0QkYsUUFzQkVBO1dBdEJGLEdBc0JJbXNEO1lBakJULFVBTEFodUMsd0JBREFELGNBRUN2ZSxFQUlHMHNEOztZQUtLO3FCQVlGcnNEO2FBWkU7Z0JBQUxxZSx5QkFWSkY7Ozs7Y0FEQUQ7Ozs7O2FBRUN2ZSxFQVlHMnNEO1dBZEMsSUFvQkw1c0QsRUFBSixTQWxCS0MsRUFxQlF3c0Q7V0FIYixrQkFHYUEsdUJBckJSeHNELElBa0JERDtXQUM4QyxPQUQ5Q0E7UUFTRixjQU5TTSxFQUFFbXNEO01BRVgsdUNBSWM7YUFZZEksTUFBTXZzRCxFQUFFbXNEO01BQ1Asa0JBRE9BLFNBRUw7TUFWTDtRQUFzQixZQVFkbnNELEdBUGdELElBQWYsS0FPakNBLGNBTkEsRUFGSmtlLEtBQ0FDLEdBRUksV0FESnhlLEVBTU13c0Q7UUFKTSxvQkFGWnhzRCxJQUNBRCxvQkFLTXlzRDs7UUFGTCxPQUhEenNELEVBUWlCO2FBYW5COHNELE1BQU14c0QsRUFBRW1zRDtNQUNQLGtCQURPQSxZQUVMO01BWEw7UUFBOEI7Z0NBQVIsS0FTZG5zRDtTQVJ5Qyx5QkFBRCxvQkFBUixLQVFoQ0E7U0FQZ0QseUJBQTlCLG9CQUFlLEtBT2pDQTtTQU5BLGdCQUhKa2UsR0FHbUIsY0FGbkJDLEdBQ0FFO1NBRUkseUJBREoxZSxFQU1Nd3NEO1FBSk07O1lBQWIsZUFGQ3hzRCxFQUNBRDtZQUNvRCxlQUEzQixlWHJHN0J6RixVV3lHVWt5RDs7UUFGTCxPQUhEenNELEVBUWlCO0lBS2hCLFNBRkgrc0QsVUFFT3pzRCxFQUFFbXNELE9BQWdFLE9BQXBDLE1BQTlCbnNELEVBQUVtc0QsTUFBZ0U7SUFDdEUsU0FXSE8sUUFBTTFzRCxFQUFFbXNEO01BTFksWUFLZG5zRCxHQUpjLFFBSWRBO01BQW9CLFFBTHhCd1YsbUJBQ0E4YyxvQkFJTTY1QixLQUEyQjtJQVhoQyxTQWFIUSxLQUFLM3NELEdBQUssbUJBQUxBLFdBQXVCO0lBYnpCLFNBZUg0c0QsT0FBTzVzRDtNQUM0QyxPQUFULEtBRG5DQSxjQUU0QyxHQUFULEtBRm5DQSxjQUdGLE9BRkhrZSxLQUNBQyxRQUMrQjtJQWxCOUIsU0FvQkgwdUMsT0FBTzdzRDtNQUM0Qzt5Q0FBRCxvQkFBUixLQURuQ0E7T0FFNEMsa0NBQUQsb0JBQVIsS0FGbkNBO09BRzRDLGtDQUFELG9CQUFSLEtBSG5DQTtNQUlGO2VBSEhrZTtlQUdxQztpQkFBbEIsc0JBRm5CQyxPQUVzQyxzQkFEdENFLFFBQzBEO0lBSXpELFNBRkh5dUMsV0FFTzlzRCxHQUFrQyxPQUFWLE9BQXhCQSxFQUFrQztJQUN0QyxJQU1MdVQsYUFOSzthQXNCTHc1QyxjQUFVLFlBaEJWeDVDLFVBZ0I0QjtJQXRCdkIsU0F1Qkx5NUMsTUFBSWIsT0FBUSxhQWpCWjU0QyxVQWlCSTQ0QyxNQUErQjtJQXZCOUIsU0F3QkxjLFdBQVNkLE9BQVEsZ0JBbEJqQjU0QyxVQWtCUzQ0QyxNQUFvQztJQXhCeEMsU0F5QkxlLFFBQU1mLE9BQVEsYUFuQmQ1NEMsVUFtQk00NEMsTUFBaUM7SUF6QmxDLFNBMEJMZ0IsWUFBVWhCLE9BQVEsaUJBcEJsQjU0QyxVQW9CVTQ0QyxNQUFxQztJQTFCMUMsU0EyQkxpQixRQUFNakIsT0FBUSxhQXJCZDU0QyxVQXFCTTQ0QyxNQUFpQztJQTNCbEMsU0E0QkxrQixRQUFNQyxPQUFRLGVBdEJkLzVDLFVBc0JNKzVDLE1BQWlDO0lBNUJsQyxTQTZCTEMsY0FBVSxZQXZCVmg2QyxVQXVCNEI7SUE3QnZCLFNBOEJMaTZDLGdCQUFZLGNBeEJaajZDLFVBd0JnQztJQTlCM0IsU0ErQkxrNkMsZ0JBQVksY0F6QlpsNkMsVUF5QmdDO0lBL0IzQixTQWdDTG02QyxvQkFBZ0Isa0JBMUJoQm42QyxVQTBCd0M7SUFoQ25DLFNBa0NMbzZDLFlBQVVuQyxNQUFPLGlCQTVCakJqNEMsVUE0QlVpNEMsS0FBbUM7SUFsQ3hDLFNBbUNMb0MsT0FBS3BDLE1BQU8saUJBN0JaajRDLGFBNkJLaTRDLE1BQXlDO0lBbkN6QyxTQW9DTHFDLGlCQUF5QiwyQ0FBZTtJQXBDbkMsU0F3Q0xDLGlCQUFlLGNBbENmdjZDLFVBa0NpQztJQXhDNUIsU0F5Q0x3NkMsVUFBVS90RCxHQUFJLGNBbkNkdVQsVUFtQ1V2VCxFQUEwQjtJQXpDL0I7OztPQXBJSDByRDtPQU1BQztPQUVBQztPQU9BQztPQWVBSztPQThCQUU7T0FrQkFHO09Bc0JBRTtPQU5BRDtPQW9CQUU7T0FFQUM7T0FFQUM7T0FLQUM7T0FNQUM7S0FHRzs7T0FtQ0xjO09BREFEO09BRUFFO09BZEFkO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FFO09BQ0FDO09BQ0FDO09BQ0FDOztPQVFBSTtPQUNBQztJQXpDSzthaUN6SkxDLGtCQUFrQmxuQztNQUNwQixTQURvQkEscUJBQ3BCLGNBRG9CQSx5QkFFQzthQUVuQm1uQyx1QkFBdUJubkMsR0FDekIsU0FEeUJBLFNBQ3pCLFFBQWtDOztNQU01Qiw0Q0FERm9uQzs7OztNQUVGO1FBQUk7Ozs7O1VBRkZBO0lBR0o7bUNBSElBO0tBR0osY0FKRUM7SUFJRixTQUlFRSxpQkFBZSwwQkFBa0I7SUFKbkMsU0FLRUMscUJBQW1CLE9BSG5CRixhQUc4QjtJQUxoQyxJQU9FRyx5QjlDNURMO0k4Q3FERyxTQWVNQyxjQUFjcnVELEVBQUVMO005Q3BFekIsSThDb0V1QnVaO01BQ3BCO1dBRHNCdlosS0FBRnVaLElBQ0wsT0FES0E7UUFFZix1QkFGZUEsYUFFc0IsT0FGdEJBO1FBR2YsUUFIZUE7aUJBR1E7SUFsQjVCLFNBd1NNbzFDLFNBcFJLM2lDLElBQXNCNGlDO01BQ2pDLEdBRFc1aUMsSUFBUyxRQUFUQSxjQUFTQyxhQUFUNGlDLE9BbEJUUDtNQW1CTSxJQUFKcHVELEVBQUksaUJBRHlCMHVEO01BQ3pCLEdBREdDO09BRWU7MEJBZnhCSjtRQWV3QixrQkFmeEJBLHFCMUJqQ0F4aUQsaUIwQmlDQXdpRDtRQWVFL0MsS0FBc0I7O1dBQXRCQTtNQUM4QywyQkFGOUN4ckQsS0FDQXdyRCxLQURBeHJELEVBRWtFO0lBdkJ0RSxTQXlCRTR1RCxRQUFNOW5DO01BQ1IsYUFEUUE7TUFDUixhQURRQSxTQUNXLE9BRFhBLCtCQUlMO0lBN0JILFNBK0JFK25DLFFBQU0vbkM7TUFDUixJQUFJempCLElBREl5akI7TUFHRyxRQUhIQSxnQkFDSnpqQixRQUVPLElBSEh5akI7UUFLSCxTQUVzQyxzQkFBcEIsSUFQZkEsU0FPbUM7TUFIekMsZUFKTUEsRUFRTDtJQXZDSCxTQXlDRWdvQztNQUFrQjs7U0FFWmpPO1NBQUtockI7U0FBTTdvQjtTQVdYM1AsVUFYQXdqRCxJQUFLaHJCLEtBQU03b0I7Y0FXWDNQO2lCQVhXMlA7Ozs7YUFHTCtoRDthQUFLMzRCO2FBQU00NEI7YUFDWHJ2RCxLQURBb3ZELE1BQUszNEIsT0FBTTQ0QjtZQUlDLFVBSFpydkQ7K0JBRFdxdkQ7O2lCQVFqQjN4RDtNQVpHLFFBY047SUF4REwsU0EwREU0eEQsT0FBS3AvQztNQUFJLFNBQUpBLFFBQUksS0FBSkEsUUFBb0IsV0FqQnpCaS9DLGdCQWlCS2ovQztNQUFvQixVQUFwQkEsdUJBQXNEO0lBMUQ3RCxTQTRERXEvQyxTQUFPcG9DLEdBQUksT0FBSkEsSUFBVTtJQTVEbkIsU0E4REVxb0MsbUJBQW1CQyxTQUFTQyxRQUFRQyxNQUFNQztNQUM1QzthQUQ0Q0E7T0FFM0IsMEJBRGJDO09BQ2EsS0FGcUJGO09BRXJCOztZQWdCakJ6dEQ7O1FBQ0U7VUFBYyw0QkFuQnNCeXRELE1Ba0J0Q3p0RDtVQWZ3Qjs7Y0FPUDtlQUxQZy9DO2VBQUtockI7ZUFBTTdvQjtlQUNYMGlELE9BTm9CTCxnQkFLcEJ4TyxJQUFLaHJCO2VBS0UsZ0JBVkl1NUIsU0FLWHZPO2VBTVEsdUJBVGQ0TyxXQVFNRTtjQUNRLEdBRUxDO2VBQVEsV0FQWEY7O2VBTU8saUJBWjJCSCxNQVVsQ0ksa0JBSkFEO2NBU0osaUJBYkZELFdBUU1FLGtCQUpBRDtjQUlPLFNBTEkxaUQ7O3FCQWFyQm5MOzs7O01BR0EsR0FyQjhCd3REO1FBc0I1QixTQXJCRUcsY0FxQkY7OztVQUNFO1lBQU0sSUFFQ0ssUUFGRCxpQkFyQk5KLFdBb0JGbjBEO1lBQ1EsR0FFQ3UwRCxRQUFRO1lBRlQsU0FEUnYwRDs7Ozs7Z0JBdEI0Qit6RDtNQUZqQixXQTRCUDtJQXhGTixTQTBGRVMsU0FBT1YsU0FBU3RvQztNQUNsQjthQURrQkE7T0FDbEIsTUFBSXdvQztPQUFKLE1BQ0lTO09BREosS0FFSVA7TUFGSjtRQUljLHlCQUZWQSxTQUdnQiw4QkFORjFvQztRQU1FLE9BRGR5b0M7UUFHZSxxQ0FSWkgsU0FBU3RvQyxHQU1adW9DLFFBTEZDLE1BSUVDO01BOUJrQixXQWtDckI7SUFuR0gsU0FxR0VTLFFBQUt4d0QsRUFBRXNuQjtNQUNULFNBQVFtcEM7UTlDM0pYO1E4QzJKdUI7O2dCQUdYcFAsZUFBS2hyQixnQkFBTTdvQjtZQUNkLFdBTEN4TixFQUlFcWhELElBQUtockI7d0JBQU03b0I7O1VBRGQsU0FFMEI7TUFDakIsSUFBWGtqRCxTQUFXLGtCQU5OcHBDO01BTU0sT0FBWG9wQyxTQUNpQix1QkFQWnBwQztNQU9vQztRQUczQyxNQVZPQSxLQVVQLEtBRElsUCxxQkFDSjs7O1VBQ0U7c0JBQVUsaUJBRlJBLEVBQ0p0YztZQUNFLFNBREZBOzs7WUFHQSxTQVBFNDBELFNBT0YsVUFBcUIsdUJBYmRwcEM7UUFjSztZQUFUcUk7O1FBQVMsR0FSVitnQyxlQVFDL2dDO1FBQ0gsdUJBZk9ySTtRQWVQLE1BREdxSSxJQUVNO0lBckhYLFNBdUhNZ2hDLDBCQUEwQjN3RCxFQUFFc25CLEVBQUV4ckI7Ozs7VUFPcEI7V0FETnVsRDtXQUFLaHJCO1dBQU03b0I7V0FDTCxpQkFQZ0J4TixFQU10QnFoRCxJQUFLaHJCO1VBQ0M7Z0JBSUxPOzs7O2FBRVEsaUJBYmV0UCxLQUFFeHJCO1lBYUMsWUFGMUI4NkI7cUNBTFVwcEI7O1VBR2IsT0FUMEI4WjtVQU9sQixXQURLOVo7O1FBSmpCOztrQkFDVyxpQkFIbUI4WixLQUFFeHJCO0lBdkhwQyxTQTJJRTgwRCxtQkFBbUI1d0QsRUFBRXNuQjtNQUN2QixNQUR1QkEsS0FFUiwyQkFGUUE7TUFFUixPQUFYb3BDLFNBQ2lCLHVCQUhFcHBDO01BR3NCO2lCQUZ6Q2xQOztjQUlGdGM7VUFDRTtzQ0FOaUJrRSxFQUFFc25CLEVBS3JCeHJCLElBQ3dDLGlCQU5uQndyQixLQUtyQnhyQjtZQUNFLFNBREZBOzs7UUFHQSxhQU5FNDBELFNBTUYsVUFBcUIsdUJBUkFwcEM7UUFTVDtZQUFUcUk7O1FBQVMsR0FQVitnQyxTQXZDZ0IsTUE4Q2YvZ0M7UUFDSCx1QkFWcUJySTtRQVVyQixNQURHcUksSUFFTTtJQXRKWCxTQXdKRWtoQyxPQUFLN3dELEVBQUVzbkIsRUFBRWpYO01BQ1gsU0FBUW9nRCxVQUFVM3VELEVBQUVvRDtZQUFGNHJELE1BQUUxckQ7UUFDbEI7YUFEZ0IwckQ7WUFLRzthQURaelAsSUFKU3lQO2FBSUp6NkIsS0FKSXk2QjthQUlFdGpELEtBSkZzakQ7YUFLRyxrQkFOZDl3RCxFQUtFcWhELElBQUtockIsS0FKTWp4QjthQUFGMHJELElBSUV0akQ7YUFKQXBJOztVQUdkLE9BSGNBLE9BS2tCO01BQ3ZCLElBQVhzckQsU0FBVyxrQkFQTnBwQztNQU9NLE9BQVhvcEMsU0FDaUIsdUJBUlpwcEM7TUFRb0M7WUFFdkNsUCxFQVZHa1AsS0FXSHBpQixRQVhLbUwsV0FVTCtIOztjQUVKdGM7VUFDRTtxQkFGRW9KO1lBRU0sb0JBQVUsaUJBSGhCa1QsRUFFSnRjO1lBQ0UsU0FERkE7OztRQUdBLE9BUkU0MEQsU0FRbUIsdUJBZmRwcEM7UUFlc0MsU0FKekNwaUI7UUFNUTtZQUFUeXFCOztRQUFTLEdBVlYrZ0MsZUFVQy9nQztRQUNILHVCQWxCT3JJO1FBa0JQLE1BREdxSSxJQUVNO0lBM0tYLFNBb0xNb2hDOzs7O1VBRVU7Ozs7bUJBQVRydUM7O1FBREk7SUFyTFgsU0F3TEVzdUMsTUFBTTFwQztNQUNSO1lBRFFBO09BQ1I7T0FDRTs7bUJBQXFCbUMsRUFBRTNuQixHQUFlLGFBQWpCMm5CLEVBQWlCLGdCQUFmM25CLEdBQWtDO09BQy9DLHFCQUZSbXZEO09BRVEsS0FISjNwQztNQUlSO2lCQUNPeGxCO1VBQ0s7NkJBRExBO1dBRVUsc0JBSmJvdkQsTUFHSTl1RDtVQUNKLGlCQUpBOHVELE1BR0k5dUQ7VUFDSixRQUEwQjs7TUFIOUIsVUFKUWtsQixxQkFDSjJwQyxJQUVBQyxNQVN3QjtJQXBNNUIsU0F3TUVDLFNBQU9qbEM7TUFHVCxJQUFJa2xDLFNBSEtsbEM7TUFHVCxTQUVRM1EsSUFBSXpmLEVBQUV1MUQ7WUFBRmh2RCxNQUFFaXZEO1FBQVU7YUFBVkE7Z0JBS0pqUSxJQUxJaVEsVUFLQ2o3QixLQUxEaTdCLFVBS085akQsS0FMUDhqRDtZQU1lLGFBRG5CalEsSUFBS2hyQixxQjlDdlFsQixPOENrUVc5YSxJQUFJbFosSUFLU21MO1VBSGYsR0FGTW5MLFFBRlIrdUQsb0JBS087VUFDUzttQ0FOaEJBLFNBRVEvdUQ7V0FJUSxJQUpSQTs7V0FBRWl2RDttQkFNMEI7TUFSeEM7NEI5Q2hRSCxPOENrUVcvMUMsb0JBUUc7SUFyTlgsU0F1TkVpMkMsWUFBWS9uQztNQUFnQixrQkFBaEJBO01BQWdCLG9COUM1UWpDO004QzRRaUMsc0I5QzVRakMsT3NCbUNTN2Isc0J3QnlPa0M7SUF2TnhDLFNBeU5FNmpELGNBQWNob0M7TUFBZ0Isa0JBQWhCQTtNQUFnQixvQjlDOVFuQztNOEM4UW1DLHNCOUM5UW5DLE9zQm1DUzdiLHNCd0IyT29DO0lBek4xQztlQTZTTThqRCxVQUFVcHFDLEVBQUUrNUI7UUFDZCxTQURZLzVCO1FBQ1osdUJBRFlBLEtBQUUrNUIsV0FDb0M7ZUFFaER6dkIsSUFBSXRLLEVBQUUrNUIsSUFBSWhyQjtRQUNKO3FCQURGL08sRUFBRSs1QjtTQUUwQixVQUYxQkEsSUFBSWhyQixLQUVzQixpQkFGNUIvTyxLQUNGeHJCO1FBRUosaUJBSE13ckIsS0FDRnhyQixZQUNBNjFEO1FBQ0osT0FITXJxQztRQUNFLFNBREZBO1FBR04sWUFFMkMsU0FSekNvcUMsVUFHSXBxQyxPQUt1RDtlQWUzRHNMLE9BQU90TCxFQUFFKzVCO1FBQ0g7cUJBREMvNUIsRUFBRSs1QjtTQUVpQixxQkFGbkIvNUIsS0FiYXhyQjs7Ozs7Z0JBR1RpN0IsT0FBR3ZwQjtZQUNULG1CQURNdXBCLEVBVUZzcUI7Y0FSRixPQVFBLzVCO2NBUkE7a0NBRk85Wjt3QkFLQyxpQkFLUjhaLEtBYmF4ckIsWUFHTjBSOzs7VUFEWixTQWFrQztlQVFwQzhCLEtBQUtnWSxFQUFFKzVCO1FBQ0ssbUJBRFAvNUIsRUFBRSs1QixLQUNILHVCQURDLzVCO1FBQ0Q7Y0FFS3NxQyxZQUFTMTZCLFlBQVMyNkI7VUFDdEIsbUJBSkV4USxJQUdFdVEsSUFDZ0IsT0FEUDE2QjtVQUVoQixHQUZ5QjI2QjtnQkFJZEMsR0FKY0QsU0FJTDE2QixHQUpLMDZCLFNBSUlFLE1BSkpGO1lBS2xCLG1CQVJGeFEsSUFPTXlRLElBQ2dCLE9BRFAzNkI7WUFFaEIsR0FGeUI0NkI7a0JBSWRDLEdBSmNELFNBSUxFLEdBSktGLFNBSUlHLE1BSkpIO2NBS2xCLG1CQVpOMVEsSUFXVTJRLElBQ2dCLE9BRFBDO3dCQUFTQzs7O3NCQWQxQm43QixXQUFHVixjQUFNN29CO2tCQUNiLG1CQUVFNnpDLElBSEV0cUIsR0FDZSxPQURaVjs0QkFBTTdvQjs7Z0JBRGhCO1lBY2U7VUFKSjtRQUpKLGVBVWtEO2VBUTNEa25CLFNBQVNwTixFQUFFKzVCO1FBQ0MsbUJBREgvNUIsRUFBRSs1QixLQUNQLHVCQURLLzVCO1FBQ0w7Y0FFS3NxQyxZQUFTMTZCLFlBQVMyNkI7VUFDdEIsbUJBSk14USxJQUdGdVEsSUFDZ0IsVUFEUDE2QjtVQUVoQixHQUZ5QjI2QjtnQkFJZEMsR0FKY0QsU0FJTDE2QixHQUpLMDZCLFNBSUlFLE1BSkpGO1lBS2xCLG1CQVJFeFEsSUFPRXlRLElBQ2dCLFVBRFAzNkI7WUFFaEIsR0FGeUI0NkI7a0JBSWRDLEdBSmNELFNBSUxFLEdBSktGLFNBSUlHLE1BSkpIO2NBS2xCLG1CQVpGMVEsSUFXTTJRLElBQ2dCLFVBRFBDO3dCQUFTQzs7O3NCQWQxQm43QixXQUFHVixjQUFNN29CO2tCQUNiLG1CQUVNNnpDLElBSEZ0cUIsR0FDZSxVQURaVjs0QkFBTTdvQjs7Z0JBRGhCO1lBY2U7VUFKSjtRQUpKLFFBVTJEO2VBRXBFMmtELFNBQVM3cUMsRUFBRSs1QjtRQUNiLFNBQVErUTtVOUN0YWY7VThDc2FnQzs7a0JBR2RyN0IsYUFBUTNlLGFBQUc1SztjQUNmLG1CQURJdXBCLEVBSkVzcUIsS0FNQyxVQUZLanBDLEVBRUwsZUFGUTVLOzs7WUFEbEIsU0FJd0I7UUFDTCxtQkFSWjhaLEVBQUUrNUI7UUFRRSx1Q0FSSi81QixxQkFRNEI7ZUFVckMrcUMsUUFBUS9xQyxFQUFFKzVCLElBQUlockI7UUFDUjtxQkFERS9PLEVBQUUrNUI7U0FFSix5QkFGRS81QixLQUNOeHJCO2VBQ0E4Yzs7O2dCQVBTbWUsV0FBR3ZwQjtZQUNULHFCQURNdXBCLEVBS0RzcUIsZ0JBTEk3ekM7WUFFUCxXQUdHNnpDO1lBSEgsV0FHT2hyQjs7Ozs7WUFJZCxpQkFKUS9PLEtBQ054ckIsZUFEUXVsRCxJQUFJaHJCLEtBRVp6ZDtZQUVGLE9BSlEwTztZQUlSLFNBSlFBO1lBSVIsUUFFMkMsZ0JBM0YzQ29xQyxVQXFGUXBxQztZQUlSOzs7VUFyQnVCLFlBd0J0QjtlQUVEcUwsSUFBSXJMLEVBQUUrNUI7UUFNYzt3QkFOaEIvNUIsRUFBRSs1QjtTQU1NLHlCQU5SLzVCOztRQUNrQjs7WUFJcEIsSUFET3lQLFdBQUd2cEIsY0FDVixxQkFET3VwQixFQUpIc3FCO1lBS0osUUFGQTtZQUVBLFVBRFU3ekM7O1VBRFYsU0FHa0M7ZUFFcENpb0IsUUFBUXZKLElBQUlwd0I7UUFDZDs7bUJBQVMscUNBRENvd0IsSUFDSzZLLEVBQUU3MkIsRUFBa0I7aUJBRHJCcEUsRUFDdUI7ZUFFbkN3MkQsWUFBWXBtQyxJQUFJcHdCO1FBQ2xCOzttQkFBUyx5Q0FES293QixJQUNDNkssRUFBRTcyQixFQUFzQjtpQkFEckJwRSxFQUN1QjtlQUV2QzQ1QixPQUFPNTVCLEdBQ0MsSUFBTm93QixJQUFNLGVBQ1YsWUFESUEsSUFES3B3QixHQUVULE9BRElvd0IsR0FFRDs7Y0FwSEQraUM7Y0EvUUpHO2NBTUFDO2NBMkJBSTtjQXNQSTc5QjtjQW9CQWdCO2NBVUF0akI7Y0FvQkFvbEI7Y0FjQXk5QjtjQWtCQUU7Y0FTQTEvQjtjQXRTSjY5QjtjQXNDQUk7Y0FhQUM7Y0E1RkFuQjtjQTRIQXNCO2NBZ0JBRztjQWVBSztjQUVBQztjQTBMSWg4QjtjQUdBNjhCO2NBR0E1OEI7SUF6Wk47TTlDckRILEk4Q2llYXJzQjtlQUNBNk8sS0FBTTh6QyxLQUFZcnJELEdBQUksdUJBQUpBLEVBQVk7OzZCQUQ5QjBJLE1BQ0E2TztPQWpLUjhmO09BQ0F5RTtPQUNBODFCO09BQ0EzZ0M7T0FDQWdCO09BQ0F0akI7T0FDQW9sQjtPQUNBeTlCO09BQ0FFO09BQ0ExL0I7T0FDQXJ2QjtPQUNBc3REO09BQ0F4bkQ7T0FDQXNDO09BQ0FzbEQ7T0FDQWo4QztPQUNBeThDO09BQ0FDO09BQ0FoOEI7T0FDQTY4Qjs7ZUFnSkk3bUQsT0FBTyttRCxJQUFLLDRCQUFMQSxHQUE0QjtlQUNuQzk4QixPQUFPNTVCO1FBQ0MsSUFBTm93QixJQUFNLFdBQ1YsV0FuSkZvbUMsWUFrSk1wbUMsSUFES3B3QixHQUVULE9BRElvd0IsR0FFRDs7Y0FKRHpnQjtjQW5LSnVzQjtjQUNBeUU7Y0FDQTgxQjtjQUNBM2dDO2NBQ0FnQjtjQUNBdGpCO2NBQ0FvbEI7Y0FDQXk5QjtjQUNBRTtjQUNBMS9CO2NBQ0FydkI7Y0FDQXN0RDtjQUNBeG5EO2NBQ0FzQztjQUNBc2xEO2NBQ0FqOEM7Y0FDQXk4QztjQUNBQztjQUNBaDhCO2NBQ0E2OEI7Y0FpSkk1OEI7SUFoYk4sU0E2YkV3cEIsT0FBS3YrQyxHQUFJLDBCQUFKQSxFQUFnQztJQTdidkMsU0E4YkU4eEQsV0FBVzkzQyxHQUFHQyxHQUFHamEsR0FBSSxpQkFBVmdhLEdBQUdDLEtBQUdqYSxFQUErQjtJQTlibEQsU0ErYkUreEQsWUFBWTFHLEtBQUtyckQsR0FBSSx3QkFBVHFyRCxLQUFLcnJELEVBQW1DO0lBL2J0RCxTQWljRSt3RCxVQUFVcHFDLEVBQUUrNUI7TUFDZCxZQURZLzVCO2VBRVAsaUJBRk9BLEtBQUUrNUIsUUFBRi81QjtlQUdQLDJDQUFvRDtJQXBjekQsU0FzY0VxckMsTUFBSXJyQyxFQUFFKzVCLElBQUlockI7TUFDSjttQkFERi9PLEVBQUUrNUI7T0FFMEIsVUFGMUJBLElBQUlockIsS0FFc0IsaUJBRjVCL08sS0FDRnhyQjtNQUVKLGlCQUhNd3JCLEtBQ0Z4ckIsWUFDQTYxRDtNQUNKLE9BSE1ycUM7TUFDRSxTQURGQTtNQUdOLFlBRTJDLFNBVnpDb3FDLFVBS0lwcUMsT0FLdUQ7SUEzYzdELFNBMGRFc0wsT0FBT3RMLEVBQUUrNUI7TUFDSCxnQkFEQy81QixFQUFFKzVCLEtBRWlCLHFCQUZuQi81QixLQWJheHJCOzs7Y0FHVGk3QixPQUFHdnBCO1VBQ1Qsc0JBRE11cEIsRUFVRnNxQjtZQVJGLE9BUUEvNUI7WUFSQTtnQ0FGTzlaO3NCQUtDLGlCQUtSOFosS0FiYXhyQixZQUdOMFI7OztRQURaLFNBYWtDO0lBNWR0QyxTQW9lRW9sRCxPQUFLdHJDLEVBQUUrNUI7TUFDSyxtQkFEUC81QixFQUFFKzVCLEtBQ0gsdUJBREMvNUI7TUFDRDtZQUVLc3FDLFlBQVMxNkIsWUFBUzI2QjtRQUN0QixzQkFKRXhRLElBR0V1USxJQUNvQixPQURYMTZCO1FBRWhCLEdBRnlCMjZCO2NBSWRDLEdBSmNELFNBSUwxNkIsR0FKSzA2QixTQUlJRSxNQUpKRjtVQUtsQixzQkFSRnhRLElBT015USxJQUNvQixPQURYMzZCO1VBRWhCLEdBRnlCNDZCO2dCQUlkQyxHQUpjRCxTQUlMRSxHQUpLRixTQUlJRyxNQUpKSDtZQUtsQixzQkFaTjFRLElBV1UyUSxJQUNvQixPQURYQztzQkFBU0M7OztvQkFkMUJuN0IsV0FBR1YsY0FBTTdvQjtnQkFDYixzQkFFRTZ6QyxJQUhFdHFCLEdBQ21CLE9BRGhCVjswQkFBTTdvQjs7Y0FEaEI7VUFjZTtRQUpKO01BSkosZUFVc0Q7SUFoZmpFLFNBd2ZFcWxELFdBQVN2ckMsRUFBRSs1QjtNQUNDLG1CQURILzVCLEVBQUUrNUIsS0FDUCx1QkFESy81QjtNQUNMO1lBRUtzcUMsWUFBUzE2QixZQUFTMjZCO1FBQ3RCLHNCQUpNeFEsSUFHRnVRLElBQ29CLFVBRFgxNkI7UUFFaEIsR0FGeUIyNkI7Y0FJZEMsR0FKY0QsU0FJTDE2QixHQUpLMDZCLFNBSUlFLE1BSkpGO1VBS2xCLHNCQVJFeFEsSUFPRXlRLElBQ29CLFVBRFgzNkI7VUFFaEIsR0FGeUI0NkI7Z0JBSWRDLEdBSmNELFNBSUxFLEdBSktGLFNBSUlHLE1BSkpIO1lBS2xCLHNCQVpGMVEsSUFXTTJRLElBQ29CLFVBRFhDO3NCQUFTQzs7O29CQWQxQm43QixXQUFHVixjQUFNN29CO2dCQUNiLHNCQUVNNnpDLElBSEZ0cUIsR0FDbUIsVUFEaEJWOzBCQUFNN29COztjQURoQjtVQWNlO1FBSko7TUFKSixRQVUrRDtJQXBnQjFFLFNBc2dCRXNsRCxXQUFTeHJDLEVBQUUrNUI7TUFDYixTQUFRK1E7UTlDNWpCWDtROEM0akI0Qjs7Z0JBR2RyN0IsYUFBR1YsZ0JBQU03b0I7WUFDYixzQkFESXVwQixFQUpFc3FCLEtBTUksVUFGSGhyQixLQUVHLGVBRkc3b0I7OztVQURoQixTQUl3QjtNQUNMLG1CQVJaOFosRUFBRSs1QjtNQVFFLHVDQVJKLzVCLHFCQVE0QjtJQTlnQnZDLFNBd2hCRStxQyxRQUFRL3FDLEVBQUUrNUIsSUFBSWhyQjtNQUNSO21CQURFL08sRUFBRSs1QjtPQUVKLHlCQUZFLzVCLEtBQ054ckI7YUFDQThjOzs7Y0FQU21lLFdBQUd2cEI7VUFDVCxzQkFETXVwQixFQUtEc3FCLGdCQUxJN3pDO1VBRVAsV0FHRzZ6QztVQUhILFdBR09ockI7Ozs7O1VBSWQsaUJBSlEvTyxLQUNOeHJCLGVBRFF1bEQsSUFBSWhyQixLQUVaemQ7VUFFRixPQUpRME87VUFJUixTQUpRQTtVQUlSLFFBRTJDLGdCQTdGM0NvcUMsVUF1RlFwcUM7VUFJUjs7O1FBckJ1QixZQXdCdEI7SUEvaEJILFNBaWlCRXlyQyxNQUFJenJDLEVBQUUrNUI7TUFNYztzQkFOaEIvNUIsRUFBRSs1QjtPQU1NLHlCQU5SLzVCOztNQUNrQjs7VUFJcEIsSUFET3lQLFdBQUd2cEIsY0FDVix3QkFET3VwQixFQUpIc3FCO1VBS0osUUFGQTtVQUVBLFVBRFU3ekM7O1FBRFYsU0FHa0M7SUF2aUJ0QyxTQXlpQkV3bEQsVUFBUTltQyxJQUFJcHdCO01BQ2Q7O2lCQUFTLHVDQURDb3dCLElBQ0s2SyxFQUFFNzJCLEVBQWtCO2VBRHJCcEUsRUFDdUI7SUExaUJyQyxTQTRpQkV3MkQsWUFBWXBtQyxJQUFJcHdCO01BQ2xCOztpQkFBUyx5Q0FES293QixJQUNDNkssRUFBRTcyQixFQUFzQjtlQURyQnBFLEVBQ3VCO0lBN2lCekMsU0EraUJFbTNELFNBQU9uM0QsR0FDQyxJQUFOb3dCLElBQU0sZUFDVixZQURJQSxJQURLcHdCLEdBRVQsT0FESW93QixHQUVEO0lBbGpCSCxTQW9qQkVnbkMsUUFBVTVtQyxJQUFzQmhGO01BQ2xDLEdBRFlnRixJQUFTLFFBQVRBLGNBQVNDLGFBQVQ0aUMsT0FsakJWUDtNQW1qQk0sSUFBSnB1RCxFQUFJLGlCQUQwQjhtQjtNQUMxQixHQURJNm5DO09BR0s7MEJBaGpCZko7UUFnakJlLGtCQWhqQmZBLHFCMUJqQ0F4aUQsaUIwQmlDQXdpRDtRQStpQkUvQyxLQUNhOztPQUNWLElBRkhBLFVBRjhCMWtDO01BQzFCO09BS1IsVUFOa0NBLGtCQUM5QjltQjtPQU9LLE9BUnlCOG1CLEtBUXpCLGVBUEw5bUIsS0FDQXdyRDtPQU1LLEtBRkxuN0I7T0FFSyxLQVJ5QnZKO09BUXpCO01BSVQ7dUI5Q3JuQkgsTzhDc2ZLb3FDLFVBeUhFN2dDO01BTUosT0FOSUEsR0FPRjtJQWprQkY7OztPQXdTTW8rQjtPQS9RSkc7T0FNQUM7T0EyQkFJO09BNFlBa0Q7T0E4QkFDO09Bb0JBQztPQWNBQztPQTJCQUM7T0F2RUFuZ0M7T0E4REF5L0I7T0FuYkE3QjtPQXNDQUk7T0FhQUM7T0E1RkFuQjtPQXhEQWI7T0FDQUM7T0EraUJBb0U7T0E1WEFsQztPQWdCQUc7T0FlQUs7T0FFQUM7T0FnVkF1QjtPQUdBVjtPQUdBVzs7O09BbEhBL1Q7T0FFQXdUO09BREFEOztJQTliRjthQ2dESVUsWUEvRUsvd0Q7TUFDVCxjQURTQSxNQUNULFVBRFNBO01BRVA7TUFDRixnQ0FIU0EsRUFHRDthQUtOZ3hELFNBQU96eUQsR0FBSSxPQUFKQSxvQkFBNEM7YUFFbkQweUQsMEJBQXdCcnFELEVBQUU0QyxFQUFFQztNQUM5QixjQUQ0QkQsTUFDNUIsVUFENEJBLElBQ04sU0FESTVDLFlBRXhCOzhCQUY0QjZDLFNBRVo7YUFJaEJ5bkQsTUFBSXRxRCxFQUFFNEMsRUFBRWpMO01BQ1YsMEJBRE1xSSxFQUFFNEM7TUFDUixHQURVakwsR0FJRSxJQUFMa1osSUFKR2xaLEtBSUUseUJBSk5xSSxFQUFFNEMsRUFJRGlPO01BREcsMkJBSEo3USxFQUFFNEMsRUFJYzthQUdwQjJuRCxNQUFJdnFELEVBQUU0QztNQUNSLDBCQURNNUMsRUFBRTRDO01BRVIsNkJBRk01QyxFQUFFNEMsRUFFRDthQUdMNG5ELFNBQVN4cUQsRUFBRTRDO01BQ2IsMEJBRFc1QyxFQUFFNEM7TUFFYixrQ0FGVzVDLEVBQUU0QyxFQUVEO2FBR1Y2bkQsUUFBTXpxRCxFQUFFNEM7TUFDViwwQkFEUTVDLEVBQUU0QztNQUVWLCtCQUZRNUMsRUFBRTRDLEVBRUQ7YUFLUDhuRCxPQUFLcHFELEdBQUc4QyxHQUFHN0MsR0FBRzhDLEdBQUdqSztNQUVFOzs7UUFGRkE7Ozs7UUFBVGdLOzs7VUFDaUIsU0FEcEI5QyxNQUFZbEgsU0FBVGdLOzs7O1FBQU1DOzs7VUFFSyxTQUZSOUMsTUFBTW5ILFNBQUhpSztRQUlYO29CQUpjaks7U0FJZCxVQUFlLHVCQUpia0gsR0FBRzhDLEdBQUc3QyxHQUFHOEMsR0FBR2pLO1FBSW1CO01BRGpDLGlDQUNpQzthQUVwQ3V4RCxPQUFLQyxHQUFHaHdELElBQUlDLElBQUlsRDtNQUNhLFFBRHJCaUQsWUFBSUMsV0FDaUIsU0FEeEIrdkQsTUFBTy92RCxXQUFKRDtRQUdMLFVBSEtBLE1BQUlDO1FBR1QsYUFIS0Q7Y0FHTDlILEVBSEs4SDtVQUtOO2tCQUxHZ3dELEdBR0Y5M0QsRUFIYTZFO1lBS2QsU0FGQzdFOzs7O01BREEsd0NBS0Y7O01BMkJlLElBQWQrM0QsWUFBYztlQVlkQyxVQUFVaG5ELEVBQUV3YSxHQUFJLGdCQUFKQSxlQUFGeGEsZ0JBQWlEO01BWjdDLElBY2RpNEM7TUFkYyxTQWlCZHQ1QyxPQUFPK21EO1FBQ1Q7bUJBRFNBO1NBRVQsd0JBREl1QjtRQUdNOytCQUZOQyxLQW5CRkg7Z0JBc0JTLGVBSFBHO2dCQUxGalA7O2tCQVlEO01BMUJlLFNBNEJkL3NCLE1BQU1sckI7UUFDUixTQURRQSx3QkFDUjs7O1VBQ0U7NkJBRk1BLEtBQ1JoUixZQTdCRSszRDtZQStCQSxpQkFITS9tRCxLQUNSaFI7WUFFRSxTQUZGQTs7O1FBSUEsT0FuQkVpcEQ7UUFtQkY7Z0JBQ2U7TUFsQ0MsU0FxQ2QzN0MsS0FBS3BKLEVBQUU4TSxFQUFFdUQ7UUFDWCxTQURTdkQsS0FDVDtRQU1pQjswQkFOS2hMLEVBQUVvTjt1QkFBSjdNLE1BQUk2QzttQkFDdEI7cUJBQVEsWUFEWXBELE1BQUZPLElBQ0ksT0FEQTZDO3FCQUVoQixnQkFGY3BELEVBQUZPO3FCQUVaO3VCQUNNOzt3QkFBb0Isa0JBSjNCckMsRUFJRUUsRUFIZWdGO3dCQUdVLElBSGQ3Qzs7d0JBQUk2Qzs7cUJBRWhCLElBRUksSUFKUTdDOzs7aUJBRFRnTyxLQU9rQztNQTVDN0IsU0ErQ2QvTSxLQUFLdEQsRUFBRThNO1FBQ1QsU0FEU0EsS0FDVDtRQU1XOzBCQU5XaEw7bUIvQ3RKM0IsSStDc0p5Qk87bUJBQ2xCO3FCQUFRLFlBRFlQLE1BQUZPLElBQ0k7cUJBQ2hCLGdCQUZjUCxFQUFGTztxQkFFWjt1QkFDTSxJQUFMbkM7dUJBQUssV0FKUEYsRUFJRUU7dUJBQUssUUFITW1DOztxQkFFWixJQUVJLElBSlFBOztzQkFNYztNQXREbEIsU0FtRVY0eEQsYUFBYW40RCxFQUFFZ0csRUFBRW9EO1lBQUo3QyxNQUFJK0M7UUFDdkI7VUFBUSxZQURhdEQsTUFBRk8sSUFDRyxPQURDK0M7VUFFVTt3QkFGWnRELEVBQUZPO1dBQUk2TTtXQUFKd087O1dBQUl0WTttQkFFbUM7TUFyRTFDLFNBd0VkODBCLE1BQU1wdEI7UUFDUixnQkFEUUEsS0FDUjtRQUFpQjtxQy9DL0t0QixPK0N5S1dtbkQ7O3NCQU1xQztNQXpFM0IsU0FvSWRDLFFBQVFwbkQsRUFBRXFuRCxPQUFPLzdDLEVBQUVrUCxFQUFFOHNDO1FBQ1Y7bUNBREh0bkQsS0FBYXNuRDtTQUVWLHdCQUZIdG5ELEtBQWFzbkQ7U0FHZCxZQUZMQztTQUdTaDBDO1FBQ1g7YUFGRW15QyxNQUNTbnlDO1lBR1A7YUFERWswQztjQUNGLFlBSkYvQjtZQUlFLEdBREUrQixTQUhKL0IsR0FNb0I7WUFGbEI7YUFHYyx3QkFKWitCO2FBS1kseUJBTFpBO1lBTUosT0FYQUYsV0FTSUcsY0FQSmhDO1lBVUEsT0FYQThCLFNBU0lHLFlBUkpqQztZQVdBLFdBZFEyQixPQVVKSyxZQVBKaEMsR0FIZXA2QztZQWVmLGlCQUpJcThDLFVBUkpqQyxjQUhpQmxyQztZQWdCakIsaUJBaEJNeGEsS0FBYXNuRCxvQkFVZkk7WUFPSixpQkFqQk0xbkQsS0FBYXNuRCxvQkFXZks7WUFKRixJQVVGLEtBZEFqQyxNQUhNMWxELFNBaUJOLFVBakJNQSxPQU1GeW5EO1lBWXFDO3FCQWxCbkN6bkQ7a0JBb0JKZ1M7Y0FBNEI7Z0JBeEVsQztzQkFvRFVoUztpQkFwREcsd0JBb0RIQTtpQkFwREcsS0FvREhBO2lCQW5ESSx5QkFtREpBO2lCQWxEQSxXQUZONmtEO2lCQUhVLFlBQUpyeEQ7aUJBT0Msb0JBSlBxeEQ7Z0JBSU8sR0FBUGlELFFBREFEO2tCQWFNLGlCQWhCTmhELGdCQU1XdHZELE1BQUUrTjtrQkFDYjt1QkFKQXVrRCxZQUdhdmtEO3NCQUVSLFdBUkx1aEQsT0FNV3R2RDt3QkFFYyxRQUZkQTtzQkFHRCxXQVRWc3ZELE9BTWF2aEQ7d0JBSVQsT0FWSnVoRCxPQU1hdmhELEVBTmJ1aEQsT0FNV3R2RDt3QkFLUSwwQkFWbkJxeUQsUUFLYXRrRDt3QkFLVCxpQkFWSnNrRCxRQUtXcnlEO3dCQUtRLElBQWYsSUFMUytOLFVBS1QsSUFMTy9OLG9CQUFFK047O3NCQU9GLFFBUEVBOzs2QkFIYnVrRDtzQkFjbUIsU0FtQ2I3bkQ7c0JBbENOLGlCQWtDTUEsdUJBcElSK21EO3NCQWlHcUIsU0FtQ2IvbUQ7c0JBakNOLGlCQWlDTUE7O3NCQS9CVSxJQUFaZ29ELFVBQVksWUFsQmhCSDtzQkFtQkEsT0F0QkFoRCxTQXFCSW1ELFlBbEJKSDtzQkFrQmdCLFNBK0JWN25EO3NCQTdCTixpQkE2Qk1BLHVCQS9CRmdvRDtzQkFBWSxJQUdNLFdBdkJ0QkosVUFFQUMsVUFxQnNCLEtBNEJoQjduRDtzQkE1Qk4saUJBNEJNQTtvQkExQlIsU0EwQlFBLE9BdkRBeE0sTUE2QlIsVUF2QkVxMEQsWUFpRE03bkQ7b0JBMUJxQyxlQTBCckNBOztnQkF4QlYsZ0JBd0JVQTtnQkFwRFYsU0F3RU1nUzs7O1lBYkEsV0FQSWhTO1lBc0JOO2NBMUNKO21CQW9CVUE7ZUF4REksbUJBQUpzRTt1QkFxQ053YjtnQkFFUyxnQkFGVEEsUUF2REosS0EwRVU5ZixLQTFFVjtnQkFNWTsyQkFOVXNELEVBMERQNGtEO29CL0MxTnBCLEkrQ2dLeUIzeUQ7b0JBQ2xCO3NCQUFRLFlBeURLMnlELE9BMURLM3lELElBQ0k7c0JBQ2hCLGtCQXdETzJ5RCxHQTFESzN5RDtzQkFFWjt3QkFDUTs2Q0F1RU55SyxLQTFFWXNEO3lCQTJEbEI7bUNBM0RnQnRVO3FDQTJEWnE0RCxPQUFPOXdDLEdBQUc4eEMsVUFBTyxjQURWSCxHQTFES2w1RCxFQTJETHVuQixHQUFHOHhDLEtBQXlCO21DQUFuQ2hCO3lCQUFKLGdCQTNEZ0I5eEQ7eUJBNERSLG1CQUZNNHlELEdBMURFNXlEO3dCQTZEVyxRQUp6QjB5RCxLQUVFWixTQUNBN3NDLEVBQ3VCLFVBSnpCeXRDLEtBR0V6dEM7d0JBekRRLElBSEk1Sjs7c0JBRVosSUFFSyxJQUpPcmI7OztnQkEwRVZ5SyxPQWpCSmlvRDtnQkFpQklqb0QsT0FqQkppb0Q7Z0JBaUJJam9ELE9BakJKaW9EO2dCQWlCSWpvRCxPQWpCSmlvRDtnQkFpQklqb0QscUJBakJKaW9EOztjQVlHLE9sQ2pJRHp6RDtja0NpSUM7O1lBNEJFO1VBQUcsV0F0QlYreUQsU0FHU2gwQyxNQW1CcUIsUUFuQnJCQTtVQXNCVCxXQTFCUTh6QyxPQUNSRSxTQUdTaDBDLElBSk1qSTtVQTJCZixpQkF6QkFrOEMsT0FFU2owQyxnQkFKUWlIO1VBMkJqQixTQUdFO01BbEtVLFNBcUtkc0ssSUFBSTlrQixFQUFFc0w7UUFDQSxJQUFKa1AsRUFBSSxnQkFEQWxQO1FBRWlCLGVBRm5CdEwsRUFyT053bUQsU0FxT1FsN0MsR0FDSmtQLEVBQ3FCLFVBRm5CeGEsRUFDRndhLEdBQ29DO01Bdkt4QixTQTBLZDh0QyxRQUFRdG9ELEVBQUVzTCxFQUFFaTlDO1FBQ047MkJBRElqOUM7U0FFQSxnQkFGRnRMLEVBQ053YTtTQUVTLHdCQUhIeGEsS0FFTnNuRDtTQUVTLHdCQUpIdG5ELEtBRU5zbkQ7U0FHSyxZQUZMekM7U0FHUzcxRDtRQUNYO2FBRkUwMkQsTUFDUzEyRCxFQUNLLGtCQVBKdTVELFdBQ1YvdEMsRUFDQThzQztVQU1VLEdBUFY5c0MsTUFPVSxpQkFKVmd0QyxPQUVTeDREO1lBR0gsbUJBTk42MUQsT0FHUzcxRDtZQUdIO2tCQUNDb0U7Y0FBTyxtQkFBUEEsRUFWQ2tZO2dCQVdVLGtCQVJsQnU1QyxPQUdTNzFEO2dCQUtTLFlBQ0EsSUFBTHFOLGVBQUssT0FBTEE7Z0JBREssSUFFRixJQVBQck47O1lBR0gsSUFNQyxJQVRFQTs7VUFVRixRQVZFQTttQkFZUDtNQTVMVSxTQStMZGdvQixNQUFNaFgsRUFBRXNMO1FBQ1Y7aUJBRFF0TDtpQkFBRXNMOzBCQUNPa1AsRUFBRThzQyxPQUFTLFFBRHBCdG5ELEVBL1BSd21ELFNBK1BVbDdDLEdBQ09rUCxFQUFFOHNDLE9BQVMsT0FEbEJoOEMsQ0FDbUQsRUFBQztNQWhNOUMsU0FtTWQ5SSxLQUFLeEMsRUFBRXNMO1FBQUksZUFBTnRMLEVBQUVzTCxXQUFxQmtQLEVBQUc4c0MsT0FBVSxlQUFlLEVBQUM7TUFuTTNDLFNBcU1kMS9CLFNBQVM1bkIsRUFBRXNMO1FBQ0w7MkJBREtBO1NBRUQsZ0JBRkR0TCxFQUNQd2E7U0FFUyx3QkFIRnhhLEtBRVBzbkQ7U0FFUyx3QkFKRnRuRCxLQUVQc25EO1NBR0ssWUFGTHpDO1NBR1M3MUQ7UUFDWDthQUZFMDJELE1BQ1MxMkQsRUFDSztVQUNKLEdBUFZ3ckIsTUFPVSxpQkFKVmd0QyxPQUVTeDREO1lBR0gsbUJBTk42MUQsT0FHUzcxRDtZQUdIO2tCQUNDb0U7Y0FBTyxtQkFBUEEsRUFWRWtZO2dCQVdTLElBQ1ZqUCxJQURVLE1BUmxCd29ELE9BR1M3MUQ7Z0JBS1MsR0FDVnFOLElBQWUsT0FBZkE7Z0JBRFUsSUFFRixJQVBQck47O1lBR0gsSUFNQyxJQVRFQTs7VUFVRixRQVZFQTttQkFZUDtNQXZOVSxTQTBOZHc1RCxZQUFZeG9ELEVBQUVzTCxFQUFFbTlDLFFBQVFGO1FBQ2xCOzJCQURRajlDO1NBRUosZ0JBRkV0TCxFQUNWd2E7U0FFUyx3QkFIQ3hhLEtBRVZzbkQ7U0FFUyx3QkFKQ3RuRCxLQUVWc25EO1NBR0ssWUFGTHpDO1NBR1M3MUQ7UUFDWDthQUZFMDJELE1BQ1MxMkQsRUFDSyxPQVBRdTVEO1VBUVosR0FQVi90QyxNQU9VLGlCQUpWZ3RDLE9BRVN4NEQ7WUFHSCxtQkFOTjYxRCxPQUdTNzFEO1lBR0g7a0JBQ0NvRTtjQUFPLG1CQUFQQSxFQVZLa1ksR0FVaUIsa0JBVmZtOUMsUUFHZDVELE9BR1M3MUQ7WUFHSCxJQUVDLElBTEVBOztVQU1GLFFBTkVBO21CQVFQO01BeE9VLFNBMk9kODJCLE9BQU85bEIsRUFBRXNMO1FBQUk7MkJBQU50TCxFQUFFc0wsV0FBeUI4eUIsRUFBRXB2QyxHQUFLLGFBQVBvdkMsRUFBRXB2QyxJQUFpQixPQUFJO01BM08zQyxTQThPZDYyQixJQUFJN2xCLEVBQUVzTDtRQUFJLDhCQUFOdEwsRUFBRXNMLFdBQXlCOHlCLEVBQUdwdkMsR0FBTSxRQUFJLE9BQU87TUE5T3JDLFNBaVBkcTJELFNBQVNybEQsRUFBRXNMO1FBQ0w7MkJBREtBO1NBRUQsZ0JBRkR0TCxFQUNQd2E7U0FFUyx3QkFIRnhhLEtBRVBzbkQ7U0FFUyx3QkFKRnRuRCxLQUVQc25EO1NBR0ssWUFGTHpDO1NBR1M3MUQ7U0FBRW9KO1FBQ2I7YUFGRXN0RCxNQUNTMTJELEVBQ0ssT0FESG9KO1VBRUQsR0FQVm9pQixNQU9VLGlCQUpWZ3RDLE9BRVN4NEQ7WUFHSCxtQkFOTjYxRCxPQUdTNzFEO1lBR0g7a0JBQ0NvRTtjQUFPLG1CQUFQQSxFQVZFa1k7Z0JBV1Msa0JBUmxCdTVDLE9BR1M3MUQ7Z0JBS1M7a0JBQ0E7OzZCQUFMcU4sSUFORmpFO21CQU1PLElBTlRwSjs7bUJBQUVvSjs7Z0JBS08sSUFFRixJQVBQcEo7O1lBR0gsSUFNQyxJQVRFQTs7VUFVRixRQVZFQTttQkFZSjtNQW5RTyxTQXNRZGsxRCxNQUFNbGtEO1FBQ1IsUUFEUUEsZ0JBRUcsV0FoVlhzbUQsU0E4VVF0bUQ7UUFHUixzQkFESTBvRDtRQURKO1NBRUE7U0FDYTswQy9DaFhsQiw2QitDOFdTQTtTQUVTLEtBSFQzeEQ7U0FJMkMsS0FKM0NBO1NBSTJDLHNCQUgzQzJ4RDtTQUc2QixzQkFIN0JBO1NBR21CLHNCQUhuQkE7UUFHRSxVQUpGM3hELElBSUUsTUFMRWlKLEdBSUoyb0Qsc0JBQ3dEO01BM1E1QztjQWlCZGhxRDtjQVdBdXNCO2NBbUtBbFU7Y0ExQkE4TjtjQXNFQWdCO2NBeENBdGpCO2NBRUFvbEI7Y0E0Q0F5OUI7Y0FIQXgvQjtjQS9MQXJ2QjtjQVZBOEY7Y0FtQ0E4d0I7Y0E4TEE4MkI7Ozs7T0F2UUFtQztPQXZFRkM7T0FRQUU7T0FPQUM7T0FLQUM7T0FLQUM7T0FhQUU7T0FOQUQ7OzthQ3ZDQWdDLEtBQUcvMEQsR0FBSSxPQUFKQSxDQUFLOzs7S0E4ckJKZzRDO0tBNXFCRmdkO2FBaUxGQyxXQUFXenBDLE1BQU0wcEM7TUFDbkIsWUFEYTFwQyxZQUFNMHBDLGFBQ25CLFdBRG1CQSxNQUFOMXBDLFVBRWlCO1FBNEI1QjJwQzthQUdBQyxpQkFBaUI1cEMsTUFBTTNyQjtNQUFJLGtCQUFWMnJCLFVBQU0zckIsSUFBSSxzQkFBSkEsR0FBNkM7YUFDcEV3MUQsa0JBQWtCN3BDLE9BQVEsa0JBQVJBLFlBQStCO2FBS2pEOHBDLGVBQWU5cEMsTUFBTXdzQixLQUFLdWQ7TUFDNUIsV0FEaUIvcEMsV0FBTXdzQjtNQUV2QixpQkFGaUJ4c0IsTUFBVytwQztNQUU1QjtjQUM2QjthQUczQkMsY0FBY2hxQyxNQUFNM3JCO01BQ25CLDhCQURtQkE7TUFDbkIsWUFBYSxlQURBMnJCLE1BQ0Esc0JBRE0zckIsVUFDa0M7YUFHdEQ0MUQsZUFBZWpxQyxZQUE4QnNVO1VBQVB1RCxlQUFSekcsZ0JBQVIwRztNQUN4QixjQURpQjlYLE1BQU84WDtNQUV4QixrQkFGaUI5WDtNQUVqQjs7ZUFGaUJBLFdBQThCc1UsYUFBZmxEO09BTWQsa0JBTkRwUixTQUlidXJCO01BRWMsWUFBZDJlO01BQWMsV0FORGxxQztNQWJZLFdBYVpBO2FBSmZncUMsY0FJZWhxQyxNQUF1QjZYO2FBY3RDc3lCLFdBQVducUMsTUFBTXNVLE9BQVEsc0JBQWR0VSxXQUFNc1UsTUFBOEM7YUFHL0Q4MUIsZ0JBQWdCcHFDO1VBQXNCNlgsZUFBUHZELGVBQVJ3RDtNQUN6QixjQURrQjlYLE1BQU84WDtNQUN6QixXQURrQjlYLFdBQWVzVTtNQS9CSixXQStCWHRVLFVBQWVzVTthQXJCL0IwMUIsY0FxQmdCaHFDLE1BQXNCNlg7YUFvQ3RDd3lCLGdCQUFnQnJxQyxNQUFNc3FDO01oRGhVM0I7OztVZ0Q0VmlCLG9CQTVCSXRxQztVQTRCSjs7O2FBRUl1cUM7YUFDTkM7dUJBQVFyMkQsRUFFWnMyRDtnQmhEaldYLEdnRGlXV0E7c0JBQUt4MEQsRUFBTHcwRDtrQkFBbUIscUJBRlB0MkQsRUFFWkssTUFGWUwsRUFFWnMyRCxTQUFnRCxRQUZwQ3QyRCxFQUVQOEI7Z0JBREMsVUFETTlCO1lBR1Isa0JBbENNNnJCLHdCQThCQXVxQztZQUlOO1VBTEE7Z0JBVlYsUUFuQmdCdnFDLFVBbUJoQjtnQkFNQSxRQXpCZ0JBLFVBeUJoQjs7VUFpQ1ksb0JBMURJQTtVQTBESjttQ0FFSHluQjttQkFuR1QwaUIsV0F1Q2dCbnFDLE1BNERQeW5CO1VBREMseUJBM0RNem5COztVQWdFaEIsU0FoRWdCQTtVQWdFaEI7WUE5RUkscUJBY1lBO1lBZFo7cUNBRUd3c0IsZ0JBQU1qdEM7Y0FZR3lnQix3QkFaSHpnQjtjQVlHeWdCLHNCQVpUd3NCOztZQURDO1VBZ0hQOztVQUFZLG9CQW5HR3hzQjtVQW1HSDtZQUdWLHdCQUFhLGtCQXRHQUEsVUFxR1IwcUM7WUFDUSx3QkF0R0ExcUMsTUFzR1QycUM7VUFGSTs7O2dCQWpHWCxJQURRdDJELFdBQ1Isc0JBSGdCMnJCLE1BQU1zcUMsT0FFZGoyRDs7VUFtRUk7V0FGS3UyRDtXQUFOQztXQUNDQyxJQURLRjtXQUNiOXlCLE9BRGE4eUI7V0FFTCxnQkFyRUk1cUM7VUFxRUo7bUNBRU8rd0IsbUJBQVZnYTs7cUJBa0JNLHVCQXpGQy9xQyxNQW1FTDZxQztxQkFxQkksc0JBeEZDN3FDLE1BbUVDNHFDLE9BSUU3WjtxQkFlSCxzQkF0RkEvd0IsTUFtRUM0cUMsT0FJRTdaOztlQUdmLE9BMUVZL3dCLFlBQU1zcUMsU0EwRWxCLHNCQU5BeHlCO3dCQU9LLGVBM0VPOVgsTUFtRUM0cUMsT0FJRTdaO3dCQUtWLGdCQTVFTy93QixNQW1FTDZxQzs7ZUFZUCxPQS9FWTdxQzt3QkErRWlCLGdCQS9FakJBLE1BbUVMNnFDO3dCQW5FSzdxQyxZQUFNc3FDLFNBZ0ZsQixzQkFaQXh5QjswQkFhTyxlQWpGSzlYLE1BbUVDNHFDLE9BSUU3Wjs0QkF2RUgvd0IsV0F1RUcrd0IsZUFIUCtaLFdBcEVJOXFDOzRCQW9GUCxlQXBGT0EsTUFtRUM0cUMsT0FJRTdaOzRCQWNWLGdCQXJGTy93QixNQW1FTDZxQztzQkFvQkksdUJBdkZDN3FDLE1BbUVMNnFDO1VBR0Q7O1VBL0JFO1dBRkVHO1dBQUg3MkQ7V0FDUDgyRCxnQkF0Q1lqckM7V0F1Q0osaUJBdkNJQTtVQXVDSjtxQ0FFSWtyQzs7Y0FLViwwQkFMVUE7Y0FLSzs7c0JBQ0g3N0MsZ0JBQVIrN0M7d0JBVE5ILG1CQVNNRyxtQkFBUS83QzsyQkFBUis3Qzs7MEJBRkpEO29CQUhBRTs7O3FCQUpGSjtZQWFGLElBQUk3NUIsT0FUQWk2QixNQUpGSjtZQWFGLFlBQUk3NUI7cUJBRUMsZ0JBckRTcFIsZ0JBbURWb1IsU0FkS2o5QjtxQkFpQko7dUJBdERTNnJCLGdCQTBDVnFyQyxNQUxRTCxrQkFyQ0VockM7VUF3Q047OztXQW5DSzF2QjtXQUFMZzdEO1dBQ05DLGtCQU5ZdnJDO3dCQU1adXJDO1lBL0JBLGtCQXlCWXZyQztZQXpCWjttQ0FFYXNVLGlCQUFWbVg7Y0FFTCxHQXFCY3pyQixXQXZCQ3NVLGdCQUFWbVg7ZUFJd0MsV0FtQi9CenJCLE1BdkJDc1U7O2FBRFQsa0JBd0JRdFU7VUFTcUI7bUJBVHJCQSxXQUtOc3JDO1dBSTJCLGlCQUp0Qmg3RCxLQUxDMHZCLFdBQU1zcUMsT0FLUGg2RDtVQVdmLGVBTEltN0QsV0FEQUQsU0FWWXhyQztnQkFzQmhCLElBRFUwckMsY0FDVixZQURVQSxLQXJCTTFyQzs7VUE4RmYsd0JBQWEsb0JBOUZFQSxVQTZGSDJyQztVQUVaLGlCQS9GZTNyQyxNQThGWDRyQztVQUNKLFlBRllELFdBN0ZHM3JDO2FBOEdaNnJDLGFBQWE3ckM7TUFDbkI7UUFBTSxtQkFEYUE7UUFDYjtVQUlEOztXQUZJd3NCO1dBQWFqdEM7V0FBUG1xRDtXQUNUb0MsY0FKYTlyQztXQUtkLFVBRkl3c0I7V0FFSixjQUxjeHNCLFlBSWI4ckM7VUFDK0Q7WUFDakUsT0FOZTlyQztZQU9ELElBQVZzcUMsWUFKQzlkLFVBekxQbWQ7WUE4TEUsZ0JBUmUzcEMsTUFPWHNxQyxPQUpPWjtZQUtYLFlBTGtCbnFELFNBSEh5Z0I7O1VBRVQ7aUJBU0w7YUFJSCtyQyxnQkFBZ0IvckMsTUFBTTBEO01BQU0sV0FBWjFELE1BQU0wRCxLQUFNLG9CQUFaMUQsTUFBb0Q7YUFJcEVnc0Msa0JBQWtCaHNDLE1BQU13c0IsS0FBS240QztNaERqY2xDLE9nRDZiSzAzRCxnQkFJa0IvckMsU0FBTXdzQixRQUFLbjRDLEdBQUxtNEMsTUFDa0Q7YUFXMUV5ZixzQkFBc0JDO01BQ3hCLE1BRHdCQTtNQUN4QixJQUNJQyxjQXRhQTNDO01BcWFKLGtCQUNJMkMsWUFGb0JELE1BR3dCO2FBVzlDRSxTQUFTcHNDLE1BQU0xdkI7TUFDWCxrQkFESzB2QjtNQUNMOzs7U0FFZW1zQztTQUFaRTtjQUFZRjtXQUFaRSxhQUhFcnNDLFVBT1AsNkJBUE9BO1FBU1AsU0FOaUJtc0M7UUFNakI7OztZQU9FO3NCQWhCVzc3RDthQWdCWDs7aUJBYmU2N0QsZ0JBSFZuc0MscUJBa0JILFFBbEJHQTs7WUFXTDs7Ozs7Y0FYVzF2QixJQUdJNjdELGdCQUhWbnNDLHFCQWFILFFBYkdBLGFBQU0xdkI7WUFzQlg7OztNQXBCSSxRQW9CRjthQUtOZzhELFVBQVV0c0MsTUFBTXJxQixFQUFFK3pEO01BQ3BCLFdBRFkxcEMsTUFBUTBwQztNQUNwQixHQURrQi96RCxFQUVSLFNBRkVxcUI7TUFFaUIsSUFDekJ1c0MsUUFIUXZzQyxVQUFRMHBDO01BRVMsWUFDekI2QyxLQUhRdnNDLFNBSXVCO2FBTWpDd3NDLGdCQUFnQnhzQyxNQUFNdXJCLE9BQU9raEI7TUFDL0IsWUFEa0J6c0M7TUFDbEIsR0FEa0JBO1FBR2hCLFdBSGdCQSxjQUladXNDLFFBREEvZixRQUhrQmpCLE9BQU9raEI7ZUFWN0JILFVBVWdCdHNDLFFBSVp1c0M7TUFFTixTQU5rQnZzQztNQU1sQjtRQUNLLFNBUGFBO2VBL0RoQmdzQyxrQkErRGdCaHNDLE1BMURsQjtpQkFpRTJDO2FBT3pDMHNDLGFBQWExc0M7TUFDZixhQURlQTtNQUNmO1FBQ0EsR0FGZUE7VUFLWCxXQUxXQSxTQXVNVHdzQixXQWpNRixTQU5XeHNCLFNBTVUsU0FOVkE7UUFNOEIsWUFOOUJBOzs7O01BSFcsV0FZdkI7YUFJRDJzQyxhQUFhM3NDLE1BQU0wcUM7TUFDckIsR0FEZTFxQyxXQUdiLEtBSG1CMHFDLFNBQU4xcUMsVUFJYixXQUphQSxVQUFNMHFDO01BSWEsU0FKbkIxcUM7TUFJbUI7UUFHaEMsSUFBSTBwQyxTQVBlZ0IsVUFPbkIsa0JBUGExcUMsU0EwTFR3c0IsS0FuTEFrZDtpQkFDb0Q7YUFJeERrRCxjQUFjNXNDO01BQ2hCLEdBRGdCQSxVQUVkLFdBRmNBLFNBOEtWd3NCO01BNUttRSxTQUZ6RHhzQjtNQUV5RDtRQUVqRSxrQkFKUUE7UUFJUixVQUdKLElBREswcUMsa0JBQ0wsa0JBUFkxcUMsVUFNUDBxQztRQUZEOzs7aUJBRzZCO2FBRW5DbUMsWUFBWTdzQyxNQUFNM3JCLEdBQUksb0JBQVYyckIsb0JBQU0zckIsR0FBcUM7YUFDdkR5NEQsYUFBYTlzQyxhQUFXLHFCQUFYQSxRQUFpQzthQUU5QytzQyxrQkFBa0Ivc0MsTUFBTXJxQixHQUFJLFlBQUpBLEVBQUksUUFBd0I7YUFDcERxM0QsaUJBQWlCaHRDLE1BQU1ycUIsR0FBSSxZQUFKQSxFQUFJLFFBQXVCO2FBQ2xEczNELGtCQUFrQmp0QyxhQUFXLE9BQVhBLFNBQThCO2FBQ2hEa3RDLGlCQUFpQmx0QyxhQUFXLE9BQVhBLFNBQTZCO2FBQzlDbXRDLFlBQVludEMsTUFBTXJxQjtNQUNwQixrQkFEY3FxQixNQUFNcnFCLEdBQ3BCLHdCQURjcXFCLE1BQU1ycUIsRUFDK0I7YUFJakR5M0QsK0JBQWdDcHRDO01BQVcsVUFBWEEsd0NBS25DO2FBR0dxdEMsK0JBQWdDcnRDO1VBSVpzdEMsYUFEREMsYUFEQUMsYUFEREM7TUFEY3p0QyxZQUNkeXRDO01BRGN6dEMsWUFFYnd0QztNQUZheHRDLFlBR2J1dEM7TUFIYXZ0QyxZQUlac3RDOzthQVNwQkksU0FBUzF0QztNQWpYWDs7Y0FpWFdBO01BRVgsc0JBRldBO01BR1gsTUFIV0E7TUFJWCxNQUpXQTtNQUtYLE1BTFdBO01BTVgsTUFOV0E7TUFNWDs7aUJBTldBO01BdEVlLHVCQXNFZkEsVUFVVTthQU9uQjJ0QyxlQUFlM3RDLE1BQU1ycUI7TUFKdkIsU0FJaUJxcUI7TUFKakIsdUJBQXFCLG9CQUlKQSxRQUp5QjtNQU9uQjtlQUhOQSxXQUdmLGFBSGVBO1FBS2pCLFlBL1dFMnBDO1FBZ1hGLGFBTmlCM3BDO1FBTWpCLEdBTnVCcnFCLEVBT2Isa0JBUE9xcUI7UUFPZ0IsZ0JBUGhCQSxPQVFIO2FBU1o0dEMsaUJBQWlCNXRDLE1BQU13c0IsS0FBS240QztNQUM5QixTQURtQjJyQjtNQUNuQixZQUNLLGtCQUZjQSxNQUFNd3NCLEtBQUtuNEMsT0FFSzthQUdqQ3c1RCxZQUFZN3RDLE1BQU04dEMsTUFBTXo1RDtNaER4bkI3QixPZ0RtbkJLdTVELGlCQUtZNXRDLE1BQU04dEMsTUFBTXo1RCxFQUNrQjthQUcxQzA1RCxnQkFBZ0IvdEMsTUFBTTNyQjtNQUN4QixtQkFEa0IyckIsTUFDbEIsc0JBRHdCM3JCLEtBQ2E7YUFFbkMyNUQsZUFBZWh1QyxNQUFNM3JCO01BQ1ksbUJBRGxCMnJCLE1BQ2tCLHFCQURaM3JCLEdBQ1ksU0FEWkEsR0FDK0I7YUFHcEQ0NUQsYUFBYWp1QyxNQUFNcndCO01BQTBCLHVCQUFoQ3F3QixNQUFnQyw0QkFBMUJyd0IsR0FBMkM7YUFHOUR1K0QsZUFBZWx1QyxNQUFNbnNCO01BQTBCLHVCQUFoQ21zQixNQUFnQyxVQUExQm5zQixHQUE2QzthQUdsRXM2RCxjQUFjbnVDLE1BQU1ycUI7TUFBMEIsdUJBQWhDcXFCLE1BQWdDLGVBQTFCcnFCLEdBQTRDO2FBR2hFeTRELGNBQWNwdUMsTUFBTWpwQixHQUNGLG1CQURKaXBCLFFBQ0ksU0FERWpwQixHQUNlO2FBSW5DczNELGFBQWFydUMsYUFBVyx1QkFBWEEsVUFBMEM7YUFDdkRzdUMsYUFBYXR1QyxNQUFNdXJCO01BQVMsdUJBQWZ2ckIsTUFBTXVyQixTQUE2QzthQUVoRWdqQixjQUFjdnVDLE1BQU11ckI7TUFBUyx1QkFBZnZyQixNQUFNdXJCLFNBQThDO2FBQ2xFaWpCLGVBQWV4dUMsTUFBTXVyQjtNQUFTLHVCQUFmdnJCLE1BQU11ckIsU0FBK0M7YUFDcEVrakIsWUFBWXp1QyxNQUFNdXJCLFFBQVMsdUJBQWZ2ckIsTUFBTXVyQixTQUE0QzthQVc5RG1qQixpQkFBaUIxdUM7TUFDbkIsZUFEbUJBLFNBQ25CLGtCQURtQkEsWUFDNkI7YUFDOUMydUMsZUFBZTN1QztNQUNqQixlQURpQkEsU0FDakIsa0JBRGlCQSxZQUNnQzthQUkvQzR1QyxpQkFBaUI1dUM7TUFDbkIsU0FEbUJBO01BQ25CLFlBQ0UsZ0JBRmlCQSxTQTZDYndzQixlQTNDc0U7YUFJMUVxaUIsb0JBQW9CN3VDO01BQ3RCLFNBRHNCQTtNQUN0QixZQUNFLGdCQUZvQkEsU0F1Q2hCd3NCLGVBcENxRDthQUt6RHNpQixzQkFBc0I5dUMsTUFBTzZxQyxLQUFNRDtNQUNyQzthQUQrQkM7T0FDL0IsTUFEK0JBO09BQy9CLE9BRCtCQTtPQUMvQixLQUR3QjdxQztNQUN4QjtRQUVFO2dCQUhzQkE7U0FJbEIwcEMsU0FKeUJtQixLQUFNRDtTQUsvQnJyRDtpQ0FKRnU0QixVQUFReEQ7O2dDQUFPdUQ7OztTQUtiMDBCLFFBSEEvZixLQUNBa2QsTUFDQW5xRDtlQXJNSitzRCxVQWdNc0J0c0MsUUFNbEJ1c0M7aUJBQ3FCO2FBTXpCd0MsZUFBZS91QyxNQUFNc1UsTUFBTWxEO01BQzdCO2VBRGlCcFIsZ0JBQU1zVSx3QkFBTWxELGVBRW1CO2FBUTlDNDlCLGVBQWVodkMsYUFBVyxzQkFBWEEsVUFBbUM7YUFDbERpdkMsYUFBYWp2QyxhQUFXLHNCQUFYQSxVQUFtQzthQUloRGt2QyxhQUFhbHZDO01BQ2YsWUFEZUE7TUFDZixTQURlQTtNQUNmO1FBRUUsSUFDSXVzQyxRQURBL2Ysc0JBQUosdUJBSGF4c0IsTUFJVHVzQztpQkFDc0I7YUFJMUI0QyxjQUFjbnZDO01BQ2hCLGFBRGdCQTtNQUNoQjtRQUNBLFNBRmdCQTtRQUVoQjtVQUVHLElBQUl1c0MsUUFWRC9mO1VBV0gsZ0JBTGF4c0IsTUFJVHVzQztVQUNKLFlBTGF2c0M7VUFJYjs7Ozs7aUJBR0E7YUFJRG92QyxnQkFBZ0JwdkMsTUFBTXNVLE1BQU1sRDtNQUM5QixTQURrQnBSO01BQ2xCO1FBQ0UsV0FGZ0JBLGNBR1p1c0MsUUFEQS9mLFFBRmtCbFksTUFBTWxELFFBQU5rRDtlQWhQdEJnNEIsVUFnUGdCdHNDLFFBR1p1c0M7aUJBQ3FCO2FBR3pCOEMsYUFBYXJ2QyxhQUFXLHVCQUFYQSxVQUFvQzthQUVqRHN2QyxXQUFXdHZDO01BQ2IsU0FEYUE7TUFDYixTQUNFLElBQUl1c0MsUUE1QkEvZixVQTRCSix1QkFGV3hzQixNQUVQdXNDO2lCQUNzQjthQVUxQmdELGlCQUFpQnZ2QyxNQUFNN3JCO01BQUksYUFBSkEsTUFBSSxXQUFWNnJCLFlBQU03ckIscUJBQXlDO2FBR2hFcTdELGlCQUFpQnh2QyxhQUFXLE9BQVhBLFNBQTZCO2FBRTlDeXZDLGtCQUFrQnp2QztNQUFXLE9BQVhBLDJCQUFtRDthQUdyRTB2QyxxQkFBcUIxdkMsTUFBTTNyQixHQUFJLFlBQUpBLEVBQUksUUFBc0I7YUFDckRzN0QscUJBQXFCM3ZDLGFBQVcsT0FBWEEsU0FBNEI7YUFJakQ0dkMsU0FBU3o3RCxHQUNYLE9BRFdBLDJCQUNvQzthQWU3QzA3RCxrQkFBa0I3dkMsTUFBTS9hO01BQzFCLGFBRDBCQTtNQUMxQjtRQUNFLFFBRmtCK2EsV0FBTS9hLFFBVjFCLFVBRDhCQztRQUM5QjtVQUNVLElBQUovUSxFQUFJLFNBRm9CK1E7VUFFcEIsV0FBSi9RO1VBQUksV0FTVTZyQjtVQVRWLGdCQVNVQTtRQWZwQjtpQkFpQm1EO2FBR2pEOHZDLGtCQUFrQjl2QyxhQUFXLE9BQVhBLFFBQThCO2FBRWhEK3ZDLGNBQWMvdkMsTUFBTTdyQjtNQUN0QixjQURzQkE7TUFDdEI7UUFDVSxJQUFKOFEsSUFBSSxTQUZZOVE7UUFFWixXQUFKOFE7UUFBSTtTQUVKK3FEO1VBSlVod0M7O1lBV1gsTUFBUSxNQVhHQTtRQVlzQix5QkFadEJBLE1BSVZnd0M7aUJBVWtDO2FBTXRDQztVQUFtQkMsZ0JBQVFDOzZCQUFSRCxVQUFRQzthQU8zQkMsZUFBZUM7TUFDWCw0QkFEV0EsVUFDWCx5QkFFWTthQUVoQkMsY0FBY3R3QyxhQUFXLE9BQVhBLFFBQTBCO2FBRXhDdXdDLHFCQUFxQnZ3QztVQUFPa3dDLGdCQUFRQztNQUN0QyxjQUR1Qm53QyxNQUFPa3dDO01BRTlCLGtCQUZ1Qmx3QyxNQUFlbXdDO01BRXRDO2FBR0VLLGdCQUFnQnh3QyxNQUFPbXdDLFdBQVlEO01BQ3JDLGdCQUR5QkMsV0FBWUQsUUFFL0Isd0JBREZHO01BQ0Usa0JBSUosNEJBTmdCcndDLE1BQ2Rxd0M7TUFBSixJQUVRM3dEO01BQ2tCLHlEQURsQkEsS0FHNkI7YUFFbkMrd0QscUJBQXFCendDLE1BQU9td0MsV0FBWUQ7TUFDMUMsZ0JBRDhCQyxXQUFZRCxRQUVwQyx3QkFERkc7TUFDRSxzQkFJSixxQkFOcUJyd0MsTUFDbkJxd0MsV0FLaUM7YUFFbkNLLGdCQUFnQjF3QyxhQUM4QixVQUQ5QkEsa0JBQzBEO2FBRTFFMndDLG1CQUFtQjN3QyxNQUFNd0s7TUFDWixJQUFYNmxDLFNBQVcsZ0JBRE1yd0M7TUFFTSw0QkFGTkEsTUFFTSxXQUZBd0ssT0FDdkI2bEMsVUFDd0M7YUFHMUNPLCtCQUErQjV3QztVQUtoQi9iLFdBREF0VSxXQURDd3JCLFdBREY5RixXQURDeGhCO01BRGdCbXNCLFlBQ2hCbnNCO01BRGdCbXNCLFlBRWpCM0s7TUFGaUIySyxZQUdmN0U7TUFIZTZFLFlBSWhCcndCO01BSmdCcXdCLFlBS2hCL2I7O2FBUWY0c0QsK0JBQStCN3dDO01BQVcsVUFBWEEsa0RBTWxDO2FBSUc4d0MsK0JBQWtDOXdDLE1BQU1uc0IsRUFBRXdoQjtNQUM1QyxZQUQwQ3hoQixFQUMxQyxZQUQ0Q3doQixFQUM1QyxRQUFpRDthQUUvQzA3QywrQkFBa0Mvd0M7TUFDcEMsVUFEb0NBLG9CQUNLO2FBSXZDZ3hDLGdCQUFnQmh4QztNQUFXLGtCQUFYQSxxQkFBd0M7SUFHM0MsSUFBYml4QyxXQUFhO2FBV2JDLGVBVm1CbHhDLE1BQU03ckI7TWhEbDRCOUIsSWdEazRCOEI4UTtNQUMzQjtxQkFEMkJBO1FBQzNCO1VBQ0EsUUFGMkJBO1lBSXpCLFdBSm1CK2EsVUFEbkJpeEM7WUFLQSxRQUp5QmhzRDs7VUFFWCxrQkFGSythLFVBRG5CaXhDLGFBQ3lCaHNEO29CQU14QjtJQVBZLFNBZWJrc0QsNkJBQTZCbnhDLE1BQU0xb0I7TUFDZDs7K0JoRGo1QjFCLE9nQjZES0ssaUJnQ20xQm1DTDtNQUNkLDRCQUNVLHFCQUZJQSxHQUVJO01BQ2pCLDJCaERuNUIzQixPZ0Q4M0JLMDVELGdCQWtCNkJoeEM7TUFJUiwyQmhEcDVCMUIsT2dENDRCS2t4QyxlQUk2Qmx4QztNQUtSLDJCaERyNUIxQixPZ0Q0NEJLa3hDLGVBSTZCbHhDO01BS1IsUUFBb0I7SUFwQjVCLFNBNEJib3hDO01BQTJCO1lBQ2hCLzhELFdBQVcsc0JBQVhBO01BQ04sYUFBRTtJQTlCTSxTQStCYmc5RDtNQUE0QjtZQUNqQmg5RCxXQUFZLHNCQUFaQTtNQUNOLGFBQUU7SUFqQ00sU0FtQ2JpOUQsZ0NoRHA2Qkw7SWdEaTRCa0IsU0FvQ2JDLGlDaERyNkJMO0lnRGk0QmtCLFNBd0NiQyxrQkFBa0IzOUQsRUFBRXdoQixFQUFFOEYsRUFBRXhyQixFQUFFc1U7TUFFYixvQ0FsNEJYdWxEO01BcTRCSixJQUZJa0ksUUFEQUQ7TUFBVyxJQUlYRSxXQUFhO01BQ2pCLHNCQURJQTtNQUVKLFVBTElELFNBR0FDO01BSlcsSUFjRyxpQkFERCxpQkFEQztNQURFO2NBUGhCQTtjQU9nQjs7Ozs7Ozs7Ozs7OztjbkNsMUJWeDhEOztjbUNxMEJVdEI7Y0FBRXdoQjtjQUFFOEY7Y0FBRXhyQjtjQUFFc1U7OztjQVoxQm10RDtjQUdBQztjQUlBQztjQUNBQztjQU1FRSxTQXNDSDtJQWhGYyxTQW9GYkcsMkJBQTJCQztNQUM3QjtlQUQ2QkEsNERBTVI7SUExRk4sU0ErRmJDLGVBQWV0NkQsT0FBTzZFO01BQ3hCLG9CaERqK0JIO01nRGkrQkcsb0JoRGorQkg7TWdEaStCYTtPQUFOMDFEO1FBQU0sa0JBRE92NkQsT0FBTzZFLHFCaERoK0IzQjtNZ0RrK0J5Qix5QmhEbCtCekIsT2dEODNCSzIwRCxnQkFtR0VlO01BRWlCLHlCaERuK0J4QixPZ0Q0NEJLYixlQXFGRWE7TUFHaUIseUJoRHArQnhCLE9nRDQ0QktiLGVBcUZFYTtNQUdpQixPQUhqQkEsR0FJRDtJQXBHWSxTQXdHYkMseUJBQXlCMTZEO01BQzNCLHFCQUFnRCxxQkFEckJBLEdBQzZCO01BQXpDOztpQmhEMStCbEIsT2dCNkRLSyxpQmdDNDZCeUJMO29CQUM4QjtJQXpHMUMsU0E2R2IyNkQsb0JBQW9CdDhEO01BQ3RCLG9CaEQvK0JIO01nRCsrQmtCOztpQmhELytCbEIsT3dDb0tLdzdCLGNRMDBCb0J4N0I7b0JBQ3dCO0lBOUcvQixJQW9IYnU4RDtJQXBIYSxTQXFIYkMsc0JBQW9CLGdCQURwQkQsZUFDZ0Q7SUFHdkM7O0tBSU8sdUNoQ2grQmhCejdEO0tnQ2krQmdCLHVDaENoK0JoQkM7S2dDaStCZ0Isa0NBTmhCMDdEO0lBTWdCLFNBT2hCSSx1QkFBdUIxNUQsSUFBSWk1RDtNQUM3QixlQUQ2QkEsT0FFckIsSUFBSjE5RCxFQUFJLFNBRmlCeUUsS0FHekIsTUFIeUJBLEtBR3pCLE9BREl6RSxDQUVIO0lBWGlCLFNBZWhCbytEO01BQXlCLDhCQXJCekJMLE9BTUFHLGNBZW9FO0lBZnBELFNBeUNoQkcsbUNBQ0YsWUFBaUM7SUExQ2YsU0E0Q2hCQyw2QkFBNkJDLEtBQy9CLG1CQUFrQztJQTdDaEIsU0ErQ2hCQywyQkFBMkJELEtBQzdCLFdBRDZCQSxPQUNRO0lBaERuQixTQWtEaEJFLDZCQUE2QkY7TUFDbkIsSUFBUkcsTUFBUSwyQkFEbUJIO01BRS9CLDZCQUYrQkE7TUFFL0IsT0FESUcsS0FFQztJQXJEYSxTQXVEaEJDLHlCQUF5QkosSUFBSUs7TUFDL0IsWUFEK0JBLEtBQUpMLFFBQzNCLFFBQW9FO0lBeERsRCxTQTBEaEJNLCtCQUFvQ047TUFZOUIsU0FBSi8rRCxFQVBvQlEsRUFBRTFFLEVBQUV3RSxHQUNrQixnQ0FOUnkrRCxPQU1RLE1BRHRCditELEVBQUUxRSxFQUFFd0U7TUFRcEIsU0FBSmtoQixRQVhGLGdDQUZvQ3U5QztNQWM5QixTQUFKejNDLFFBVkYsZ0NBSm9DeTNDO01BZTlCLFNBQUpqakUsRUFSb0J3RSxHQUN0QixnQ0FSb0N5K0QsT0FPZHorRDtNQVNoQixTQUFKOFAsRUFQb0I5UCxHQUN0QixnQ0FWb0N5K0QsT0FTZHorRDtNQU9oQix5QkFKSk4sRUFDQXdoQixFQUNBOEYsRUFDQXhyQixFQUNBc1UsRUFDdUI7SUFTYixTQUFaa3ZELGdCaERubENMLE9nRGlwQks5RSxhQTRXQWdFO0lBdUZZLFNBQVplLGdCaERwbENMLE9nRGtwQks5RSxhQTJXQStEO0lBd0ZhLFNBQWJnQixpQmhEcmxDTCxPZ0RvcEJLOUUsY0F5V0E4RDtJQXlGYyxTQUFkaUIsa0JoRHRsQ0wsT2dEcXBCSzlFLGVBd1dBNkQ7SUEwRlcsU0FBWGtCLGVoRHZsQ0wsT2dEc3BCSzlFLFlBdVdBNEQ7SUEyRlksU0FBWm1CLGdCaER4bENMLE9nRDhnQks5RyxhQStlQTJGO0lBNEZXLFNBQVhvQixlaER6bENMLE9nRGdqQks1RyxZQTZjQXdGO0lBNkZZLFNBQVpxQixnQmhEMWxDTCxPZ0RpakJLNUcsYUE0Y0F1RjtJQThGWSxTQUFac0IsZ0JoRDNsQ0wsT2dEMmhCS2hILGFBa2VBMEY7SUErRmEsU0FBYnVCLGlCaEQ1bENMLE9nRHVpQktoSCxjQXNkQXlGO0lBZ0dXLFNBQVh3QixvQmhEN2xDTCxPZ0R3bkJLaEcsWUFxWUF3RTtJQWlHZSxTQUFmeUIscUJoRDlsQ0wsT2dENG5CSy9GLGdCQWlZQXNFO0lBa0djLFNBQWQwQixvQmhEL2xDTCxPZ0QrbkJLL0YsZUE4WEFxRTtJQW1HWSxTQUFaMkIsa0JoRGhtQ0wsT2dEbW9CSy9GLGFBMFhBb0U7SUFvR2MsU0FBZDRCLG9CaERqbUNMLE9nRHNvQksvRixlQXVYQW1FO0lBcUdhLFNBQWI2QixtQmhEbG1DTCxPZ0Q0b0JLOUYsY0FpWEFpRTtJQXNHYSxTQUFiOEIsaUJoRG5tQ0wsT2dEeW9CS2hHLGNBb1hBa0U7SUF1R2MsU0FBZCtCO01oRHBtQ0wsT2dEbXNCS3JGLGVBMFRBc0Q7SUF3R1ksU0FBWmdDLGdCaERybUNMLE9nRDhzQktwRixhQStTQW9EO0lBeUdjLFNBQWRpQyxrQmhEdG1DTCxPZ0Q2c0JLdEYsZUFnVEFxRDtJQTBHZ0IsU0FBaEJrQyxvQmhEdm1DTCxPZ0R3cUJLM0YsaUJBcVZBeUQ7SUEyR2MsU0FBZG1DLGtCaER4bUNMLE9nRG1xQks3RixlQTBWQTBEO0lBNEdnQixTQUFoQm9DO01oRHptQ0wsT2dEaXFCSy9GLGlCQTRWQTJEO0lBNkdtQixTQUFuQnFDO01oRDFtQ0wsT2dEOHFCSzdGLG9CQStVQXdEO0lBK0dZLFNBQVpzQyxnQmhENW1DTCxPZ0RrdEJLekYsYUEyU0FtRDtJQWdIYSxTQUFidUMsaUJoRDdtQ0wsT2dEMnRCS3pGLGNBa1NBa0Q7SUFpSGUsU0FBZndDO01oRDltQ0wsT2dEc3VCS3pGLGdCQXVSQWlEO0lBbUhVLFNBQVZ5QyxjaERobkNMLE9nRCt1Qkt4RixXQThRQStDO0lBb0hZLFNBQVowQyxnQmhEam5DTCxPZ0Q2dUJLMUYsYUFnUkFnRDtJQXNIYSxTQUFiMkMsaUJoRG5uQ0wsT2dEZ3lCS2pGLGNBNk5Bc0M7SUF1SGEsU0FBYjRDLGlCaERwbkNMLE9nRDYvQks1QztJQXlIaUIsU0FBakI2QztNaER0bkNMLE9nRHl4QktyRixrQkFvT0F3QztJQTBIaUIsU0FBakI4QyxxQmhEdm5DTCxPZ0Q2L0JLOUM7SUE0SGUsU0FBZitDO01oRHpuQ0wsT2dEdTBCSzVFLGdCQXNMQTZCO0lBNkhvQixTQUFwQmdEO01oRDFuQ0wsT2dEKzBCSzVFLHFCQThLQTRCO0lBOEhlLFNBQWZpRCxtQmhEM25DTCxPZ0R1MUJLNUUsZ0JBc0tBMkI7SUErSGtCLFNBQWxCa0Q7TWhENW5DTCxPZ0QwMUJLNUUsbUJBbUtBMEI7SUFpSWdCLFNBQWhCbUQsb0JoRDluQ0wsT2dENHZCS2pHLGlCQWlRQThDO0lBa0lnQixTQUFoQm9ELG9CaEQvbkNMLE9nRDYvQktwRDtJQW1JaUIsU0FBakJxRDtNaERob0NMLE9nRGl3QktqRyxrQkE0UEE0QztJQXFJb0IsU0FBcEJzRDtNaERsb0NMLE9nRG93QktqRyxxQkF5UEEyQztJQXNJb0IsU0FBcEJ1RCx3QmhEbm9DTCxPZ0Q2L0JLdkQ7SUF5SUYsU0FERXdEO01oRHJvQ0wsT2dEZzVCSzFFLDZCQTZHQWtCO0lBNElGLFNBREV5RDtNaER4b0NMLE9nRCsxQktsRiwrQkE4SkF5QjtJQThJRixTQURFMEQ7TWhEMW9DTCxPZ0Q0MkJLbEYsK0JBaUpBd0I7SUFpSkYsU0FERTJEO01oRDdvQ0wsT2dEczNCS2xGLCtCQXVJQXVCO0lBbUpGLFNBREU0RDtNaEQvb0NMLE9nRHkzQktsRiwrQkFvSUFzQjtJQXNKRixTQURFNkQ7TWhEbHBDTCxPZ0Rva0JLN0ksK0JBeWJBZ0Y7SUF3SkYsU0FERThEO01oRHBwQ0wsT2dENGpCSy9JLCtCQWljQWlGO0lBMEpGLFNBREUrRDtNaER0cENMLE9nRG1qQktySixrQkEwY0FzRjtJQTRKRixTQURFZ0UscUJoRHhwQ0wsT2dENi9CS2hFO0lBOEpGLFNBREVpRSxvQmhEMXBDTCxPZ0RvakJLdEosaUJBeWNBcUY7SUFnS0YsU0FERWtFLG9CaEQ1cENMLE9nRDYvQktsRTtJQWtLRixTQURFbUUsZWhEOXBDTCxPZ0R1akJLckosWUFzY0FrRjtJQWtLRixTQU1Nb0UsY0FBZ0J0MkMsSUFBdUJ1MkMsS0FBSzNFO1VBQTVCNEU7O2lCQUFTLFFBQVRBLGdCQUFTdjJDLGFBQVR3MkMsT0F2ZHBCM0g7UUF1ZHNEOzs7Z0JBR2pENEg7WUFDTCxXQUoyQ0gsS0FBSzNFO1lBS2hELFdBTG9CNkUsT0FBNEI3RTtZQUtoRCxhQUxvQjZFLDRCQUdmQzs7VUFERSxrQkFGb0NILEtBQUszRTtRQUMxQztJQVBSLFNBdUJFZ0YsYUFBZTUyQyxJQUF1QnUyQyxLQUFLM0UsSUFBSWlGO01BQ2pELEdBRGlCNzJDLElBQVMsUUFBVEEsY0FBU0MsYUFBVHcyQyxPQXhlZjNIO01BeWVJLHVCQUQyQytIO01BQzNDO1lBRVNDLGlCQUFIajZEO1FBQ1YsV0FKc0MwNUQsS0FBSzNFLElBR2pDLzBEO1lBWDJCMEUsSUFXeEJ1MUQ7UUFWZjtVQUFNLHFCQURpQ3YxRDtVQUNqQztnQkFFU0UsZUFBSDdOO1lBQ1YsV0FJZTZpRSxPQUE0QjdFO1lBSDNDLFdBR3NDMkUsS0FBSzNFLElBTGpDaCtEO2dCQUgyQjJOLElBR3hCRTs7VUFERjtNQVFBLFFBR3lCO0lBNUJ0QyxTQStCRXMxRCxjQUFjbkYsSUFBSTE5RDtNQUNwQiw4QkFEb0JBLEdBQ3BCO2VBR0lnSTtRQUNGLGdCQUxjMDFELElBS00sTUFMRjE5RCxFQUVoQmlJLFFBQ0FDLFdBREFEO1FBR0Y7a0JBRkVDO1FBRUYsUUFDMkI7O1dBSHpCQSxhQUZBN0U7VUFRSSwwQkFUWXJELEVBR2hCa0k7VUFNSTtZQUVGLFNBQ0EsaUJBWlV3MUQ7OzRCQWNWLFNBQVUsZUFkQUEsWUFpQkw7O1FBRVgsU0FqQkl6MUQsWUFEQTVFO1FBa0JKLFlBQXFCLGNBQVE7SUFsRDdCLFNBb0RFeS9ELGdCQUFrQmgzQyxJQUF1QnUyQyxLQUFLM0U7TWhEbnRDbkQsR2dEbXRDdUI1eEM7T0FBTyxRQUFQQSxZQUFPQzs7V0FBUDNZLDBCQUFtQixRQUFFO01BQWQsVUFFakIsSUFBTDFULFdBQUssa0JBRmlDMmlFLEtBQUszRSxJQUUzQ2grRDtNQURHLGtCQURZMFQsS0FBNEJzcUQ7SUFwRGhELFNBd0RFcUYsZ0JBQWlCdnVELEdBQUlDLE1BQU1pcEQ7TWhEdnRDaEMsbUJnRHd0Q1csSUFBTGgrRCxXQUFLLGtCQURXOFUsR0FBVWtwRCxJQUMxQmgrRDtNQUNRLElBQUw4STtNQUFLLGtCQUZZaU0sTUFBTWlwRCxJQUV2QmwxRDtJQTFETixTQTRERXc2RCxnQkFBaUIvNkQsS0FBTUMsTUFBTXcxRDtNaEQzdENsQyxtQmdENHRDb0IsSUFBTDk3RCxXQUFLLGtCQURFcUcsS0FBWXkxRCxJQUNuQjk3RDtNQUNNLElBQUxqQztNQUFLLGtCQUZPdUksTUFBTXcxRCxJQUVsQi85RDtJQTlEYixTQWtFRXNqRSxZQUFZOS9ELE9BQU8rL0Q7TUFDWCxxQkFDQSx3QkFETnorRDtNQUVKLFdBSGN0QixPQUVWdTZELElBRmlCd0Y7TUFJckIsZUFGSXhGO01BRE0sSUFJTnI2RCxJQUpBb0I7TUFJTSxZQUFOcEIsSUFFQyxNQU5Eb0IsTUFJQXBCLGFBQ1ksU0FMWm9CLElBTTJCO0lBekUvQixTQXNGRTArRCxzQkFBc0J6RixJQUFJLytEO01BQWEsVUFBYkE7T0FBYSxPQUFiQTtnQkFDRyxvQkFEUCsrRDtnQkFFTyxvQkFGUEE7Z0JBSU8sc0JBSlBBO2dCQUtPLHdCQUxQQTtnQkFNTyx3QkFOUEE7Z0JBUU8scUJBUlBBO2lCQVNPLHFCQVRQQTs7T0FBaUIsT0FBYi8rRDs7Y0FHVG8rQixPQUhTcCtCLGNBR2hCc2hDLE1BSGdCdGhDO2lCQWxqQjFCKzdELGVBa2pCc0JnRCxJQUdaejlCLE1BQU9sRDtnQkFJWTs7Y0FHbEJyNkIsRUFWZS9EO1VBVUcsY0FWUCsrRDtVQVVPLHFCQVZQQSxJQVVYaDdELEdBQTREO0lBaEd6RSxTQXNHTTBnRSxhQUFXMUYsSUFBSTl2RDtNaERyd0N4QjtNZ0Rxd0M4QixVQUFOQTtPQTBCUzs7T0ExQkgsT0FBTkE7O2NBU0lwTyxFQVRKb08sT0FTQ2dCLEVBVERoQjtVQVVuQixhQVZlOHZELElBU0s5dUQ7VUFDcEIsNkJBVmU4dUQsSUFTUWwrRDs7bUJBVEpvTzs7WUFhbkIsSUFEb0NDO1lBQ3BDLGFBYmU2dkQ7WUFjYztxQkFkZEEsa0JBY2MsWUFkekIwRixhQVlnQ3YxRDtjQUdBQztVQUNwQyxhQWhCZTR2RDtVQWlCSztvQ0FBbUIsWUFqQm5DMEYsYUFlZ0N0MUQ7V0FFaEI7O2lDQWpCTDR2RCxJQWlCVnhtQixPQUFRbXNCOzttQkFqQk16MUQ7Ozs7a0JBQytDMkMsSUFEL0MzQyxPQUN1Q3VxQyxhQUFsQnZEOzs7NkJBa0JqQjUwQyxFQW5CSjROLE9BbUJDK21DOzs7bUJBbkJEL21DOzs7O2tCQUs2QzJNLElBTDdDM00sT0FLcUNxb0QsZUFBbEI5Zjs7Ozs2QkFnQmpCenpDLEVBckJGa0wsT0FxQkRzb0M7OzttQkFyQkN0b0M7Ozs7a0JBQytDMkMsSUFEL0MzQyxPQUN1Q3VxQyxhQUFsQnZEOzs7NkJBa0JqQjUwQyxFQW5CSjROLE9BbUJDK21DOzs7bUJBbkJEL21DOzs7Ozs7a0JBSzZDMk0sSUFMN0MzTSxPQUtxQ3FvRCxlQUFsQjlmOzs7OzJCQWdCakJ6ekMsRUFyQkZrTCxPQXFCRHNvQzs7O2NBRUptTSxJQXZCS3owQyxPQXVCUndvQyxJQXZCUXhvQztVQXVCUyxhQXZCYjh2RCxJQXVCSnRuQjtVQUFpQixrQkFBZGlNLElBdkJDcWI7O2NBd0JMNEYsSUF4QlMxMUQsT0F3QlMsYUF4QmI4dkQsSUF3Qkw0RixLQUFrQixzQkF4QmI1Rjs7Y0F5QktyeUQsSUF6QkR1QyxPQXlCRjIxRCxJQXpCRTMxRDtVQXlCUyxhQXpCYjh2RCxJQXlCRTZGO1VBQVcsbUJBQVJsNEQ7TXhDOXdCaEI7ZXdDd3ZCSixhQUhlcXlELElBQ3lCOW9CLFlBbnBCeEMya0IsaUJBa3BCZW1FLElBQzJDdmxCLEtBQVE1bkM7O1NBTWxFLGFBUGVtdEQsSUFLdUJ2bkI7Z0JBdnBCdENvakIsaUJBa3BCZW1FLElBS3lDekgsT0FHaEIsU0FId0IxN0M7ZUFlcEMsYUFwQmJtakQsSUFtQksvb0IsS0FDUSx1QkFwQmIrb0IsSUFtQlExOUQ7Z0JBR0ssYUF0QmIwOUQsSUFxQkd4bkIsS0FDVSxxQkF0QmJ3bkIsSUFxQk1oN0QsR0FLUztJQWhJaEMsU0FzSU04Z0UsYUFBVzlGLElBQUk5dkQ7TWhEcnlDeEI7TWdEcXlDOEIsVUFBTkE7T0E2QlM7O09BN0JILE9BQU5BOztjQVlJcE8sRUFaSm9PLE9BWUNnQixFQVpEaEI7VUFhbkIsYUFiZTh2RCxJQVlLOXVEO1VBQ3BCLDZCQWJlOHVELElBWVFsK0Q7O21CQVpKb087O1lBZ0JuQixJQURvQ0M7WUFDcEMsYUFoQmU2dkQ7WUFpQmM7cUJBakJkQSxrQkFpQmMsWUFqQnpCOEYsYUFlZ0MzMUQ7Y0FHQUM7VUFDcEMsYUFuQmU0dkQ7VUFvQks7b0NBQW1CLFlBcEJuQzhGLGFBa0JnQzExRDtXQUVoQjs7aUNBcEJMNHZELElBb0JWeG1CLE9BQVFtc0I7O21CQXBCTXoxRDs7OztrQkFDK0MyQyxJQUQvQzNDLE9BQ3VDdXFDLGFBQWxCdkQ7Ozs2QkFxQmpCNTBDLEVBdEJKNE4sT0FzQkMrbUM7OzttQkF0QkQvbUM7Ozs7a0JBSzZDMk0sSUFMN0MzTSxPQUtxQ3FvRCxlQUFsQjlmOzs7OzZCQW1CakJ6ekMsRUF4QkZrTCxPQXdCRHNvQzs7O21CQXhCQ3RvQzs7OztrQkFDK0MyQyxJQUQvQzNDLE9BQ3VDdXFDLGFBQWxCdkQ7Ozs2QkFxQmpCNTBDLEVBdEJKNE4sT0FzQkMrbUM7OzttQkF0QkQvbUM7Ozs7OztrQkFLNkMyTSxJQUw3QzNNLE9BS3FDcW9ELGVBQWxCOWY7Ozs7MkJBbUJqQnp6QyxFQXhCRmtMLE9Bd0JEc29DOzs7bUJBeEJDdG9DOzs7O2tCQVNzQzAwQyxJQVR0QzEwQyxPQVM4QjYxRCxlQUFsQnJ0QjtjQUMvQixhQVZlc25CLElBU2dCdG5CO3FCQTNyQi9CbWpCLGlCQWtyQmVtRSxJQVNrQytGLE9BRVQsV0FGaUJuaEI7Y0FpQjNDRCxJQTFCS3owQztVQTBCUyxhQTFCYjh2RDtVQTBCbUQsdUJBMUJuREEsSUEwQm1ELFdBQXBEcmI7O2NBQ0ppaEIsSUEzQlMxMUQsT0EyQlMsYUEzQmI4dkQsSUEyQkw0RixLQUFrQixzQkEzQmI1Rjs7Y0E0QktyeUQsSUE1QkR1QyxPQTRCRjIxRCxJQTVCRTMxRDtVQTRCUyxhQTVCYjh2RCxJQTRCRTZGO1VBQVcsbUJBQVJsNEQ7TXhDanpCaEI7ZXdDd3hCSixhQUhlcXlELElBQ3lCOW9CLFlBbnJCeEMya0IsaUJBa3JCZW1FLElBQzJDdmxCLEtBQVE1bkM7O1NBTWxFLGFBUGVtdEQsSUFLdUJ2bkI7Z0JBdnJCdENvakIsaUJBa3JCZW1FLElBS3lDekgsT0FHaEIsU0FId0IxN0M7ZUFrQnBDLGFBdkJibWpELElBc0JLL29CLEtBQ1EsdUJBdkJiK29CLElBc0JRMTlEO2dCQUdLLGFBekJiMDlELElBd0JHeG5CLEtBQ1UscUJBekJid25CLElBd0JNaDdELEdBS1M7SUFuS2hDLFNBMktFZ2hFLFdBQVNudEMsRUFBRW1uQztVQUFhdjlCO2E1Q2lLcEJxVTt3QjRDL0pDNW1DLEtBQU8sYUFGRDh2RCxJQUVOOXZELEtBQU8sa0JBRkgyb0IsRUFBRW1uQyxJQUUwQjs7ZUFGYnY5QjtJQTNLMUIsU0FnTEV3akMsWUFBVXB0QyxFQUFFbW5DO01oRC8wQ2pCLElnRCswQzhCdjlCLG9CNUMyYXJCdVYsYTRDM2FNbmYsRUFBRW1uQyxJQUFhdjlCO0lBaEwzQixTQW1MRXlqQyxXQUFTbEc7VUFBY3Y5QjthNUN3YW5CdVYsNEJKMXZEVCxlZ0RrMUM0QnZWO0lBbkx6QixTQXNMRTBqQyxVQUFRbkc7TUFBTSxvQmhEcjFDbkI7TWdEcTFDbUIsc0JoRHIxQ25CLE9nRDAwQ0tnRyxnQkFXUWhHLFVBQXlCO0lBdExuQyxTQXVMRW9HLFNBQU8zakMsS0FBTSw0QkF6VmI2OUIsZUF5Vk83OUIsSUFBK0I7SUF2THhDLFNBd0xFNGpDLFVBQVE1akMsS0FBTSw0QkF6VmQ4OUIsZUF5VlE5OUIsSUFBK0I7SUF4THpDLFNBMExFNmpDLFNBQVN6dEM7VUFBVzRKO2E1Q2tKaEJxVTt3QjRDaEpDNW1DO2lCQUFPOzBCQUZIMm9CLFdBRVVtbkMsS0FBTyxvQkFBUEEsSUFBZDl2RCxJQUF1QyxFQUFDOztlQUZ6QnV5QjtJQTFMdEIsU0ErTEU4akMsUUFBUTlqQyxLQUFNLHlCQUFjN2tDLEdBQUssT0FBTEEsQ0FBTSxFQUExQjZrQyxJQUErQjtJQS9MekMsU0EwUUUrakMsUUF6RVMzdEM7TUFDSCxJQURjNEosYUFDZCxvQkFDRSx3QkFETjcrQjtNQUNNLFNBQ044OEIsSUFBRXh3QjtRQUNKLGFBRkU4dkQsSUFDRTl2RDtRQUVGLGtCQUxPMm9CLEVBS1AsdUJBSkFqMUIsRUFDQW84RCxLQUc4QjtNQUh4QixtQkFDTnQvQixNQUhrQitCO0lBak10QixTQTBNRWdrQyxVQUFRaGtDLEtBQU0sZUFsMUNkKzBCLEtBazFDUS8wQixJQUFxQjtJQTFNL0IsU0E0TUVpa0MsVUFBVTd0QztNQUNKLElBRGU0SixhQUNmLG9CQUNFLHdCQURONytCO01BQ00sU0FDTjg4QixJQUFFeHdCO1FBQ0osYUFGRTh2RCxJQUNFOXZEO1FBRUYsa0JBTFEyb0IsRUFLUix1QkFKQWoxQixFQUNBbzhELEtBRzhCO01BSHhCLG1CQUNOdC9CLE1BSG1CK0I7SUE1TXZCLFNBcU5Fa2tDLFNBQVNsa0MsS0FBTSxpQkE3MUNmKzBCLEtBNjFDUy8wQixJQUFzQjtJQXJOakMsU0F5TkVta0M7TUFDRixlQTVYRXRHLGlCQTRYRixzQkEzWEVDLGdCQTRYNkI7SUFFeEIsUUFKTHFHO0lBSUssU0FTTEMsK0JBQXNDNTRDLE1BQ2pDbnNCLEVBQVN3aEIsRUFBVzhGLEVBQVV4ckI7TUFDckMsK0JBRndDcXdCLE1BQ2pDbnNCLEVBQVN3aEI7TUFDaEIsWUFEMkI4RjtNQUMzQixZQURxQ3hyQjtNQUNyQyxRQUV3QjtJQWJqQixTQWdCTGtwRSwrQkFBc0M3NEM7TUFDeEMsVUFEd0NBLHdDQUVHO0lBSzNDLFNBREU4NEM7TWhEbDVDTCxPZ0RxNENLRiwrQkF4WUF2RztJQTJaRixTQURFMEc7TWhEdjVDTCxPZ0Q0NENLRiwrQkEvWUF4RztJQTJaRixTQVVFMkcsVUFBUXJqRTtNQUNBLElBRFc2K0IsYUFDWCx3QkFEQTcrQjtNQUNBLFNBQ05pMUIsRUFBRTNvQixLQUFNLGFBRFI4dkQsSUFDRTl2RCxLQUFNLHNCQURSOHZELE1BQ29EO01BRDlDLG1CQUNObm5DLElBRmlCNEo7SUFWckIsU0ErQkV5a0MsK0JBQStCajVDO1VBSVpzdEMsYUFEREMsYUFEQUMsYUFEREM7ZUFLZnlMLFVBQVVybEUsRUFBRWdKO1FoRDc3Q25CLDRCZ0Q2N0NnRCxJQUFMeEksV0FBSyxrQkFBL0JSLEVBQTBCUTtRQUFnQixPQUF4Q3dJO01BQ1UsMkJoRDk3QzdCLE9nRDY3Q09xOEQsVUFMZXpMO01BT1EsMkJoRC83QzlCLE9nRDY3Q095TCxVQUpnQjFMO01BTU87TUFDQSwyQmhEaDhDOUIsT2dENjdDTzBMLFVBSGdCM0w7TUFLTztNQUVDLDJCaERqOEMvQixPZ0Q2N0NPMkwsVUFGaUI1TDtNQU1PO0lBekM1QixTQTJDRTZMLCtCQUErQjNrQztNQUN0QixJQUFQNGtDLEtBQU8sK0JBRHNCNWtDO01BQ3RCLFNBQ1A2a0MsY0FBY2hsRSxHQUFJLGtCQURsQitrRSxzQkFDYy9rRSxHQUFzQztNQUQ3QyxTQUVQaWxFLGVBQWVqbEUsR0FBSSxrQkFGbkIra0Usc0JBRWUva0UsR0FBdUM7TUFGL0MsU0FHUGtsRSxlQUFlbGxFLEdBQUksa0JBSG5CK2tFLHNCQUdlL2tFLEdBQXVDO01BSC9DLFNBSVBtbEUsZ0JBQWdCbmxFLEdBQUksa0JBSnBCK2tFLHNCQUlnQi9rRSxHQUF3QztNQUpqRCxVQUNQZ2xFLGNBQ0FDLGVBQ0FDLGVBQ0FDLGdCQUM0RDtJQUdoRSxTQURFQztNaEQzOENMLE9nRHU3Q0tSLCtCQTFiQTVHO0lBaWRGLFNBREVxSDtNaEQ3OENMLE9nRG04Q0tQLCtCQXRjQTlHO0lBaWRGOzs7T0F4ekJFNUQ7T0FpY0E4RTtPQXprQkE3RztPQTBrQkE4RztPQXZjQW5GO09Ba2NBOEU7T0FqY0E3RTtPQWtjQThFO09BaGNBN0U7T0FpY0E4RTtPQWhjQTdFO09BaWNBOEU7T0ExZEF2RjtPQWtlQStGO09BL2RBOUY7T0FnZUErRjtPQXZlQWxHO09BcWVBZ0c7T0ExZEE1RjtPQTZkQStGO09BMWRBOUY7T0EyZEErRjtPQXJkQTdGO09Bc2RBOEY7T0F6ZEEvRjtPQTBkQWdHO09BdFpBbkY7T0F5WkFzRjtPQXhaQXJGO09BdVpBb0Y7T0FsYUF0RjtPQWlhQXFGO09BOWFBdEY7T0FkQUY7T0ErYkEyRjtPQXpiQTFGO09BNGJBNkY7T0F2Y0EvRjtPQXFjQTZGO09BdmNBOUY7T0F3Y0ErRjtPQXpVQTFFO09BbVZBaUY7T0FuVEExRTtPQW9UQTJFO09BM1ZBcEY7T0E2VkFxRjtPQXhWQXBGO09BeVZBcUY7T0E1VEEvRTtPQVlBSTtPQWtUQTRFO09BMVNBM0U7T0EyU0E0RTtPQWhTQTFFO09Ba1NBNEU7T0FyU0E3RTtPQW9TQTRFO09BL1hBL0Y7T0FrWUFpRztPQS9YQWhHO09BZ1lBaUc7T0E5WEFoRztPQStYQWlHO09BOWFBeEc7T0EwWkF5RjtPQWpaQXhGO09Ba1pBeUY7T0E5WEF0RjtPQWlZQXdGO09BbllBekY7T0FvWUEwRjtPQTNZQTNGO09Bd1lBeUY7T0ExV0FuRjtPQThYQWlHO09BN1hBaEc7T0E4WEFpRzs7T0F4bUJBako7T0Fna0JBZ0g7T0FwakJBL0c7T0FxakJBZ0g7T0FyaUJBekc7T0F1bUJBcUo7T0EzbUJBeko7T0FtbUJBcUo7T0FsbUJBcEo7T0FzbUJBc0o7T0FybUJBcko7T0FtbUJBb0o7T0FsbUJBbko7T0FzbUJBcUo7T0E1UUFwRjtPQXFQQTBFO09BL1FBL0U7T0F1UkFrRjtPQXBSQWpGO09Bc1JBa0Y7T0FoVEFyRjtPQXlTQWtGO09BNVJBakY7T0E4UkFrRjtPQXRrQkExSTtPQThrQkE2STtPQXRsQkE5STtPQXdsQkErSTtPQTNLQW5FO09Bb0JBSztPQUNBQztPQWhCQUw7T0FXQUc7T0FNQUc7T0FlQUU7T0E5Q0FYO09BWEFGO09BbUZBYztPQUdBQztPQUdBRTtPQUdBQztPQUtBRTtPQUdBRTtPQTRHSXVEO09BaUJKTTtPQVFBRztPQXFCQUM7T0FJQUM7T0FJQUM7T0EwSEFhO09BQ0FDO09BQ0FDO09Ba0JBSTtPQVdBRTtPQXRCQUo7T0FaQUw7T0FSQUY7T0FlQU07T0FWQUw7T0EwRkFPO09BOURBRTtPQXVEQU87T0FPQVQ7T0F2QkFPO09BS0FDO09BbEJBSDtPQU9BQztPQTUxQkFoTTtPQXlpQkE0RztPQXhpQkEzRztPQXlpQkE0RztPQTZWQXVGO09Bb0JBUTtPQVJBTjtPQVVBTztJQUNGO1FDdnlDSUM7YUFLQUMsVUFBVUM7TUFDWjtRQUNVLElBQUo5aUUsRUFBSSxXQUZFOGlFO1FBRUYsUUFBSjlpRTtRQUFJO2dCQUZFOGlFO1FBRUYsVUFBSjlpRSxFQUlhLFFBTlA4aUU7ZUFFTjlpRTs7OztVQU9KLFFBZEE0aUUsVUFjQSwyQkFkQUE7bUJBa0JDO2FBR0RHLFVBQVVELElBQ1osT0FEWUEsWUFHUCxVQUhPQSxHQUdLO2FBUWZFLGtCQUFrQkY7TUFDWixJQUFKOWlFLEVBQUksVUFEWThpRSxJQUNaLEdBRFlBLE1BRUYsa0JBQ2xCLE9BRkk5aUUsQ0FFSDthQUdDaWpFLGFBQWFILElBQ1IsVUFEUUEsSUFDUixPQURRQSxLQUVOO2FBS1BJLG1CQUFtQkosSUFBSyxhQUFMQSxTQUF5QjthQUU1Q0ssY0FBY0w7TUFDaEIsU0FEZ0JBO01BQ2hCOzs7eUJBQ3NCO1FBQ00sSUFBZjc0QztRQUFlLE9BQWZBLE1BRThCO2FBR3pDbTVDLFdBQVdOLElBQ2IsT0FEYUEseUJBR1E7YUFLbkJPLFlBQVlQLElBQUssYUFBTEEsTUFBb0M7YUFFaERRLHdCQUF3QlIsSUFBSyxrQkFBb0M7YUF5U25FUyxhQXZTUVQ7TUFDUixpQkFEUUEsTUFFRSxhQUROVTtNQUVKLFFBRklBO01BRUosUUFIUVY7TUFHUixPQURJbjJDLEdBR0Q7YUFLRDgyQyxVQUFVbG1DLE1BQU11bEMsSUFDbEIsd0JBRGtCQSxJQUNsQixPQURZdmxDLEtBRVA7YUFHSG1tQyxZQUFZbm1DLE1BQU11bEMsSUFBSyxpQkFBWHZsQyxjQUFNdWxDLEdBQTZCO2FBRS9DYSxXQUFXcG1DLE1BQU11bEMsR0FBRzlpRTtNQUN0QixTQURtQjhpRSxNQUFHOWlFLEdBQ3RCLG1CQURhdTlCLE1BQU11bEMsR0FFQztRQUdsQmM7YUFFQUMsU0FBT0MsTUFBTXg1RDtNQVFHOztjQW5HaEJzNEQ7Ozs7O2NBMkZhdDREO2NBUUcsU0FWaEJzNUQ7Y0FFT0UsTUFVVjthQUdHQyxjQUFZem1FO01BQ2Qsc0NBRGNBO01BQ2QsU0FFSWdOO1FBQ0YsR0FGRTNKLE9BREEvSCxLQUdnQjtRQUNWLElBQUpvSCxFQUFJLGdCQUxJMUMsRUFDVjFFO1FBSU07ZUFBSm9ILENBRUg7TUFOSCxrQkFFSXNLLEtBS21COztJQUdMLFNBQWhCMDVELHNCakQxUlAsT2lEa1FPSDtJQXdCZ0IsSUFxRGRsakU7SUFyRGMsU0E4Q2hCc2pFLGtCQUFrQjVpRTtNQUFLLHNCQUFMQSxJQUFLLGlCQUFxQztJQTlDNUMsU0FrRGhCNmlFLGtCQUFrQjdpRSxJQUFNLGlCQUFpQjtJQWxEekIsU0FvRGhCOGlFLFFBQVFDLGNBQWNOLE1BQU16aUU7TUFFOUI7ZUFJSWlKO1FBQ0YsR0FKRTFSLE9BQ0EyaEIsUUFHOEIsSUFBSnZhLEVBQUksZUFMOUIrQixJQUNBbkosTUFJOEIsY0FBSm9IO1FBQzVCLEdBSEVxa0UsT0FHVztRQUNKLGVBVG1CaGpFLEdBRTFCVSxNQURBcEI7UUFRTyxhQUxQNFo7a0JBQ0E4cEQsV0FLaUIsV0FWWEQsY0FBb0IvaUU7a0JBRzFCekksU0FTRSxlQVZGbUosT0FZQztNQVpMLGdCQUZ3QitoRSxNQU1wQng1RCxLQVNhO0lBc0JqQixJQUlFZzZELE1BSkYsUUF2Q0VKLDRCbEMvU0Z6a0U7SWtDc1ZBLFNBTUU4a0UsYUFBYUMsUUFHYnY2QztNQUZGLHdCQUVFQTtRQUNTLElBQUw1b0IsR0FBSyxXQUpJbWpFLFFBR2J2NkM7ZUE5Q0FrNkMsUUFOQUYscUJBb0RBaDZDLE1BQ0k1b0I7TUFGRyxPQUpQaWpFLEtBTytDO0lBR3JDLFNBR1ZHLGdCakRwWVAsT2lEeVhPRixhbEMxVkZyakU7SWtDbVdnQixTQUdkd2pFLG9CakRyWVAsT2lEeVhPSCxhbEMzVkZwakU7SWtDb1dnQixTQUtkd2pFLGVBQWF0akUsSWpEdllwQixPaUQ4VU84aUUsUUFGQUQscUJBMkRhN2lFLE9BQzBCO0lBTnpCLFNBU2R1akUsU0FBUzlCO01BQ1gsU0FEV0E7TUFDWDtPQUlpQzs7UUFKakMsa0JBRUUsSUFEYXpoRSxXQUNiLDZCQURhQTtRQUVhLElBQVB3akU7UUFBTyw2QkFBUEEsTUFDYztJQWRuQixJQWlDWkM7SUFqQ1ksU0FnQ2RDLGFBRUdYLGNBQWMvaUU7TUFDbEI7UUFBSSxjQURjQSxHQURmeWpFOzs7O1VBS0MsSUFERWhDLEdBQ0YsUUFKQXNCLGlCQUFjL2lFO1VBSWQsZ0JBSmNBLEdBR1p5aEUsSUFKSGdDO1VBS0MsT0FERWhDO1FBM0JQLFdBOEJLO0lBSWlCLFNBQXBCa0M7TWpEOWFQLE9pRGthT0QsYUF0RkFiO0lBa0dvQjthQWN0QmUsVUFBVTNuRSxHQUFJLHNCQUFKQSxFQUEwQjtJQWRkLFNBZ0J0QjRuRSxpQkFBaUJsbEU7TUFDVCwwQ0FEU0EsR0FDdUM7SUFqQmxDLFNBb0J0Qm1sRSxpQkFBaUJDO01BRWpCLDBDQUZpQkEsU0FLTjtJQXpCVyxTQW9DdEJDO01BQ0YsZ0RBQXdEO0lBckNoQyxTQXdDdEJDO01BQ0YsZ0RBQXFEO0lBekM3QixTQWdEdEJDLG1CQUFtQnZsRSxFQUFFd2xFO01qRDlkMUIsT2lENGJLUCxVQStCRix5QkFHcUJqbEUsRUFBRXdsRSxJQUNnQjtJQWpEZixTQWtGdEJDLGdCQUFnQjNDLEdBQUc5aUU7TUFDWixJQUFMd2xFLEdBQUssa0JBRFMxQztNQUNULE9BQUwwQyxPQURpQnhsRSxFQUVOLHdCQUZHOGlFLElBR2xCLG1CQUhxQjlpRSxFQUNqQndsRSxHQUVtQjtJQXJGQyxTQTRFbEJFLFdBV1U1QyxHQVBkanJEO01BSEYsVUFHRUE7UUFRTyxJQUFMMnRELEdBQUssa0JBRE8xQztRQUNQLGNBQUwwQztpQkFFTSx3QkFITTFDO3dCQUNaMEM7b0JBR00sd0JBSk0xQyxJQUlOLGdCQUpNQTttQkFLVCxzQkFKSDBDO2dCQVJGM3REO09BM0JGO1NBQVEsZ0JBa0NRaXJELElBakNULFNBaUNTQTtTQWpDVDtXQUF1QixTQUQxQjlpRTtXQUMwQjs7OztXekM0Q3hCLGF5Q3pDRix3QkE4Qlk4aUU7V0E3QlA7O01Bc0JGLHVCQU9TQSxHQVBkanJELElBQXlCO0lBaEZILFNBaUd0Qjh0RCxXQUFXN0MsSUFBd0IsdUJBQW5CLGFBQUxBLE1BQTRCO0lBakdqQixTQXFHdEI4QyxXQUFXOUM7TUFDUCxJQUdKeGxFLEVBSEksYUFET3dsRTtNQUNQLDRCQUdKeGxFOztpQkFBZSxtQ0FBZkE7O2dCQUF3RDtJQXpHbEMsU0FzSHRCdW9FO01BQTZCOzs7aUJBQ3RCO2lCQUNBO2lCQUNBO2lCQUNBO2lCQUNBOztpQkFDTTs7TUFDUiw2QkFBWTtJQTdISyxTQW1JdEJDLGtCQUFrQnppQixLQUFLeWY7TUFDekIsT0FEb0J6ZjttQkFDaEIxMkIsSUFNZ0IsV0FBTyxhQVBGbTJDO21CQUNyQm4yQyxJQUlnQixXQUFPLGFBTEZtMkM7bUJBQ3JCbjJDLElBR2dCLFdBQU8sYUFKRm0yQzttQkFDckJuMkMsSUFLZ0IsV0FBTyxhQU5GbTJDO29CQUNyQm4yQyxJQUUrQixhQUhWbTJDO01BRzJCLElBS2hENWpFLEVBTGdELHNCQUZoRHl0QjtNQVFRLFNBRFJ6dEIsWUFDUSxnQkFSUnl0QjtPQVFxQyxhQVJyQ0EsTUFPQXp0QjtNQUM0QixPQVI1Qnl0QixHQVE2RDtJQTVJekMsU0FvSnRCbzVDLFlBQVlqRCxJQUF3Qyw0QkFBbkIsYUFBckJBLElBQXdDO0lBcEo5QixTQXVMbEJrRCx3QkFBd0J6b0MsTUFBTXVsQztNakRybUJ2QyxJaURxbUJpQ3B5QjtNQUM5QjtpQkFEOEJBLFFBQ1osT0FEWUE7UUFFdEIsSUFHTjF3QyxFQUhNLFVBRjRCOGlFO1FBR2pDLEdBSGlDQSxNQUdaLE9BSE1weUI7UUFJOUIsU0FDRTF3Qzs7WUFJWSx3QkFUZ0Iwd0MsUUFBTW95QixJQUFOcHlCOztrQkFLNUIxd0M7V0FDWSx1QkFOZ0Iwd0MsUUFBTW95QixHQUtsQzlpRSxHQUw0QjB3QztRQVd2QixPQVh1QkEsUUFXbEI7SUFsTVksU0FvUXRCdTFCLDBCQS9Ed0Ixb0MsTUFBTXVsQztNQUNoQyxTQUQwQnZsQyxNQUNSO01BQ1YsSUFBSnY5QixFQUFJLGtCQUZ3QjhpRTtNQUV4QixPQUFKOWlFLGFBTVEsMENBTlJBO01BQUksSUFHRjB3QyxRQUFRLFdBTFluVCxNQUFNdWxDLEdBRTVCOWlFO01BR1UsK0JBQVIwd0MsUUFMMEJveUIsR0FRb0M7SUE3TTVDLFNBa090Qm9ELGdCQUFnQkMsTUFBTUMsT0FBTzNSLFFBQU1xTztNQUdyQyxTQUgrQnJPLFFBR2I7TUFDVixJQUFKNThDLElBQUksa0JBSjZCaXJEO01BS2xDLGNBTHFCc0QsT0FJcEJ2dUQ7UUFFVSx1QkFOaUI0OEMsUUFBTXFPLEdBSWpDanJELEtBbkJnQjBsQjtRQUNsQjttQkFEa0JBLE1BQ0EsT0FEQUE7VUFFVixJQUdOdjlCLEVBSE0sVUFhMkI4aUU7VUFaaEMsR0FZZ0NBLE1BWlgsT0FITnZsQztVQUtULGNBVWE2b0MsT0FWcEJwbUU7WUFDWSx1QkFOSXU5QixNQWVpQnVsQyxHQVZqQzlpRSxHQUxnQnU5QjtvQkFLaEJ2OUI7WUFJWSx3QkFUSXU5QixNQWVpQnVsQyxJQWZqQnZsQztVQVdYLE9BWFdBO01Bd0JSLDBDQUxSMWxCLElBSmNzdUQsT0FTeUQ7SUEzT25ELFNBOE90QkcsdUJBQWtCLCtCQUVSO0lBR1EsU0FBbEJDO01qRGpxQkwsT2lEZ3BCS0wsMkJBWUFJO0lBS2tCLFNBRWxCRSxzQkFBaUIsK0JBRVA7SUFHTyxTQUFqQkM7TWpEeHFCTCxPaURncEJLUCwwQkFtQkFNO0lBS2lCLFNBRWpCRTtNQUFnQjs7Ozs7TXpDMUpaLG1CeUM0Sk07SUFHYSxTQUF2QkM7TWpEL3FCTCxPaURncEJLVCxnQ0EwQkFRO0lBS3VCLFNBS3ZCRSxVQUFVcnBDLE1BQU11bEM7TUFDVix3QkFEVUEsSUFDVixTQUFKOWlFO01BQUk7O2dCQUVDLGtCQUhHdTlCLE1BQU11bEMsR0FDZDlpRTs7aUJBR0ssa0JBSkd1OUIsTUFBTXVsQyxHQUNkOWlFO01BSUcsT0FMS3U5QixLQUtBO0lBVmEsU0FhdkJzcEMsK0JBQW1DdHBDLE1BQU11bEM7TUFDL0IsSUFBUnB5QixRQUFRLFVBRHlCblQsTUFBTXVsQztNQUMvQixpQ0FBUnB5QixRQUR1Q295QixHQUVUO0lBZlQsU0EwQ3ZCZ0Usb0JBQW9CempCLEtBQUtySixRQUFNOG9CO01BQ2pDLE9BRHNCemY7ZUFFSix1QkFGU3JKLFFBQU04b0I7ZUFHZixzQ0FIUzlvQixRQUFNOG9COztTQUpyQixzQkFJZTlvQixRQUFNOG9CLElBbkIzQixvQkFtQjJCQTtTQW5CM0IsVUFDSjlpRTtXQUNZLElBQVJ1OUIsTUFBUSxXQUhNbVQsUUFvQmFveUIsR0FsQi9COWlFO1dBQ1ksU0FBUnU5QixNQUNjLE9BRGRBO1dBQVEsSUFFUjFsQixJQUFJLFVBZXVCaXJEO1dBZDVCLEdBYzRCQSxNQWRQLE9BSHBCdmxDO1dBQVE7V0FJWixTQUZJMWxCOztjQUlvQixpQ0FOcEIwbEIsTUFpQjJCdWxDLEdBZjNCanJELEtBZTJCaXJEO3dCQWYzQmpyRDs7Ozs7MEJBS3FCLGtDQVByQjBsQixNQWlCMkJ1bEMsR0FmM0JqckQsS0FlMkJpckQ7V3pDek0zQjtvQnlDNkxnQyxnQ0FMaEN2bEMsTUFpQjJCdWxDLEdBZjNCanJELEtBZTJCaXJEO29CQVR4Qix3QkFSSHZsQyxNQWlCMkJ1bEM7U0FSMUIsaUNBWmFweUIsUUFvQmFveUI7ZUFLZixzQkFMUzlvQixRQUFNOG9CO2VBTWYsaUNBTlM5b0IsUUFBTThvQjtnQkFPZiw0QkFQUzlvQixRQUFNOG9CLElBT2M7SUFqRHRCLFNBdUR2QmlFLHFCQUFxQnhwQyxNQUFNdWxDO01BQzdCLFNBRHVCdmxDLE1BQ0wsT0FES0E7TUFFZixJQUdOdjlCLEVBSE0sVUFGcUI4aUU7TUFHMUIsT0FIMEJBO2VBQU52bEM7bUJBS3JCdjlCO2lCQUxxQnU5QjtpQkFNRyxtQ0FOSEEsTUFBTXVsQyxHQUszQjlpRSxHQUwyQjhpRSxHQU9qQjtJQTlEYSxTQWtFdkJrRSxtQkFBbUJ6cEMsTUFBTXVsQztNQUMzQixTQURxQnZsQyxNQUNILE9BREdBO01BRWIsSUFBSnY5QixFQUFJLFVBRm1COGlFO01BR3hCLEdBSHdCQSxNQUdILE9BSEh2bEM7Z0JBRWpCdjlCLGVBS0csT0FQY3U5QjtNQU1nQixpREFOaEJBLE1BQU11bEMsR0FFdkI5aUUsR0FGdUI4aUUsR0FPZjtJQXpFYSxTQW9IdkJtRSxXQUFXanRCLFFBQU1rdEIsVUFBVXBFO01BbkNqQjt1QkFtQ0M5b0IsUUFBZ0I4b0I7T0FuQ2pCLGdDQUFSdmxDLE1BbUN5QnVsQztlQUN6QnB5QixRQUNjLFVBRGRBLFFBRGV3MkI7TUFuQ1AsSUFzQ1JsbkUsRUFBSSxVQUhxQjhpRTtNQUkxQixHQUowQkEsTUFJTCxVQUhwQnB5QixRQURldzJCO01BS25CLFVBRklsbkU7UUFJVTs0QkFOVjB3QyxRQUR5Qm95QixHQUd6QjlpRTtTQUtjLGtCQURaeTBELFFBUGF5UztTQVNnQjtVQUY3QnpTOztXQUNBMFMsY0FDNkIscUJBRDdCQSxZQVJ1QnJFOzs7UUFVM0IsNkJBREl1RCxRQVR1QnZELElBUXZCcUU7TUFJSiw2QkFYRXoyQixRQUR5Qm95QixJQUFWb0UsVUFZcUI7SUFoSWYsU0FtSXZCRSw4QkFBOEI3cEMsTUFBTXVsQyxHQUFHL3dELE1BQU12VztNQUMvQyxTQUFJZ1ksVUFBVXhUO1FBQ1osWUFEWUEsZUFHVixhQUhVQSxxQkFJSjtNQUpWO2lDQUQrQ3hFO09BQy9DLFdBRGdDK2hDO09BQ2hDLEtBS0k1OEI7T0FMSjs7WUFPQS9IO1FBQ0U7VUFBUSxnQkFUNEJrcUUsSUFVbEIsZUFBVSxnQkFWaUJ0bkUsSUFRL0M1QztVQUVLLGFBRENvSCxZQUNxQyxXQVZGK1I7VUFVVSxTQUgvQzIrQixXQUlpQixXQVhvQjMrQjtVQVk5Qix3QkFMUDIrQixXQVBrQ295QixHQVNoQzlpRTtVQUFJLFNBRFZwSDs7O01BTUEsT0FQSTgzQyxVQU9FO0lBakptQixTQW9KdkIyMkIsZUFBZTlwQyxNQUFNMnBDLFVBQVVwRTtNQUNqQyxlQURpQnZsQyxVQUNqQixhQUFnQixhQURpQnVsQztNQUNPLFFBQU07TUFBOUM7T0FDWSxrQkFGS3ZsQyxNQUFnQnVsQztPQUVyQixXQUFScHlCO09BQVEsYUFDSSxhQUhpQm95QjtNQUdPLFFBQU07TUFGOUMsSUFHTSxZQUoyQkE7TUFJM0IsU0FDSjlpRTs7OztZQTZCWTtnQ0FoQ1Ywd0MsUUFGNkJveUIsR0FLL0I5aUU7YUE2QlksV0FBUmc2QzthQUFRLGFBQ0ksYUFuQ2U4b0I7WUFtQ1MsUUFBTTtZQUFnQjtxQkFEMUQ5b0IsUUFsQzJCOG9CLEdBN1cvQndDOzs7O2tCQWtYQXRsRTtVQUNZOzhCQUpWMHdDLFFBRjZCb3lCLEdBSy9COWlFO1dBQ1ksV0FBUnFtRTtXQUFRLGFBQ0ksYUFQZXZEO1VBT1MsUUFBTTtVQURsQztXQUVSd0U7WUFBUSw4QkFGUmpCLFFBTjJCdkQsR0E3Vy9Cd0M7VUFzWGdCLFNBRFpnQyxhQUNZLGFBVGV4RTtZQVVYLG9CQVZXQSxJQVVYOzs7OztnQkFBZHlFLGlCQUZGRCxRQUlPLHFCQUpQQSxRQVIyQnhFO1lBYWIsU0FIWnlFLGFBR1ksYUFiYXpFO2NBY1QsSUFDZGpyRCxJQURjLFVBZFNpckQ7Y0FjVCxVQUNkanJEO2dCQUNZLHVCQU5kMHZELFFBVnlCekUsR0FldkJqckQ7Z0JBRWdCLFNBRFoydkQsYUFDWSxhQWpCTzFFO2tCQWtCZixzQkFsQmVBOztvQkFxQkg7dUNBTGhCMEUsUUFoQlNOO3FCQWdCVE87Ozt1QkFLSU4sY0FDaUIscUJBRGpCQSxZQXJCZXJFOzs7O29DQWdCbkIyRTtrQkFFSSxJQUZKQzs7O2dCQUFRLElBRlpDLFFBRUlEOzttQkFGSkMsUUFKRko7Y0FlYyxTQVhaSSxhQVdZLGFBekJXN0U7Z0JBMEJuQixJQUNKaHJELElBREksVUExQm1CZ3JEOzBCQTJCdkJockQsbUJBSUssT0FqQkw2dkQ7Z0JBWUk7aUJBRVEsbUJBZFpBLFFBZHVCN0UsR0EyQnZCaHJEO2lCQUNZLFdBQVI4dkQ7aUJBQVEsYUFDSSxhQTdCTzlFO2dCQTZCaUIsUUFBTTtnQkFBZ0Isc0NBRDFEOEUsUUE1Qm1COUU7Y0F5Qm1CLE9BWDFDNkU7WUFEd0MsT0FIMUNKO1VBRHdDLE9BRDFDRDtrQkFISnRuRTtNekN4VEk7UXlDeVZROzRCQXBDVjB3QyxRQUY2Qm95QixHQUsvQjlpRTtTQWlDWSxXQUFSeTBEO1NBQVEsYUFDSSxhQXZDZXFPO1FBdUNTLFFBQU07UUFBZ0I7aUJBRDFEck8sUUF0QzJCcU8sR0E3Vy9Cd0M7TUFzWkssdUJBQWdCO0lBN0xFLFNBZ012QnVDLHFCQUFxQnRxQyxNQUFNMnBDLFVBQVVwRTtNQUN2QyxlQUR1QnZsQyxVQUN2QixhQUFnQixhQUR1QnVsQztNQUNDLFFBQU07TUFBOUM7T0FDWSxnQ0FGV3ZsQyxNQUFnQnVsQztPQUUzQixXQUFScHlCO09BQVEsYUFDSSxhQUh1Qm95QjtNQUdDLFFBQU07TUFGOUMsSUFHUSxZQUorQkEsSUFJL0IsU0FBSjlpRTtNQUFJOztVQUdNOzhCQUxWMHdDLFFBRm1Db3lCLEdBSW5DOWlFO1dBTWMsa0JBSFpnNkMsUUFQdUJrdEI7V0FhTCxxQ0FIbEJDLFlBVmlDckU7V0FhZixXQUhsQnFFLGNBR0FXO1dBQWtCLFFBTmxCOXRCLFVBU0ErdEI7VUFIa0IsMEJBS2xCdFQsUUFsQmlDcU87O2tDQXFCckMsMEJBbkJFcHlCLFFBRm1Db3lCO01Bc0JoQyxtQkFBWTtJQXROTSxTQXlOdkJrRixnQkFBZ0J6cUMsTUFBTTJwQyxVQUFVcEU7TUFDbEMsZUFEa0J2bEMsVUFDbEIsYUFBZ0IsYUFEa0J1bEM7TUFDTSxRQUFNO01BQTlDO09BQ1ksa0JBRk12bEMsTUFBZ0J1bEM7T0FFdEIsV0FBUnB5QjtPQUFRLGFBQ0ksYUFIa0JveUI7TUFHTSxRQUFNO01BRjlDLElBSUU5aUUsRUFESSxVQUo0QjhpRTtNQUk1QixTQUNKOWlFOztVQWlDWTs4QkFwQ1Ywd0MsUUFGOEJveUIsR0FLaEM5aUU7V0FpQ1ksV0FBUmc2QztXQUFRLGFBQ0ksYUF2Q2dCOG9CO1VBdUNRLFFBQU07VUFBWSw0QkFEdEQ5b0IsUUF0Q2tCa3RCLFVBQVVwRTs7Z0JBS2hDOWlFO1NBQ1k7NkJBSlYwd0MsUUFGOEJveUIsR0FLaEM5aUU7VUFDWSxXQUFSeTBEO1VBQVEsYUFDSSxhQVBnQnFPO1NBT1EsUUFBTTtTQURsQyxJQUdWanJELElBREksVUFSMEJpckQ7bUJBUzlCanJEO1VBMEJBLDRCQTdCRTQ4QyxRQU5rQnlTLFVBQVVwRTtTQU1wQjtVQUlFLG1CQUpWck8sUUFONEJxTyxHQVM5QmpyRDtVQUNZLFdBQVJ3dUQ7VUFBUSxhQUNJLGFBWGN2RDtTQVdVLFFBQU07U0FMcEM7VUFNRSw2QkFGUnVELFFBVjBCdkQ7VUFZbEIsV0FBUndFO1VBQVEsYUFDSSxhQWJjeEU7U0FhVSxRQUFNO1NBUHBDLElBUVEsY0FkWUEsSUFjWixTQUNkaHJEO1NBRGM7O1lBRUYsdUJBSlp3dkQsUUFaMEJ4RSxHQWUxQmhyRDtZQUVnQixTQURaeXZELGFBQ1ksYUFqQlV6RTtjQWtCbEIsb0JBbEJrQkE7O2dCQXFCTjttQ0FMaEJ5RSxRQWhCWUw7aUJBZ0JaTzs7O21CQUtJTixjQUNpQixxQkFEakJBLFlBckJrQnJFOzs7O2dDQWdCdEIyRTtjQUVJLElBRkpEOzs7WUFBUSxJQUFSRTs7OztpREFKSko7U0FOTSxJQVFOSyxpQkFXSyxhQVRERDtTQVVRLFNBWlpDLGFBWVksYUExQmM3RTtXQTJCdEIsSUFDSi9xRCxJQURJLFVBM0JzQitxRDtxQkE0QjFCL3FELG1CQUlLLE9BbEJMNHZEO1dBYUk7WUFFUSxtQkFmWkEsUUFkMEI3RSxHQTRCMUIvcUQ7WUFDWSxXQUFSNnZEO1lBQVEsYUFDSSxhQTlCVTlFO1dBOEJjLFFBQU07V0FBZ0Isc0NBRDFEOEUsUUE3QnNCOUU7U0EwQmdCLE9BWjFDNkU7TUErQkQsbUJBQVk7SUF0UU0sU0ErUXZCTSxZQUFZQyxJQUNEM3FDLE1BRFd1bEM7TWpEOTdCM0IsSWlEKzdCZ0JweUI7TUFDWDtpQkFEV0EsUUFDTyxPQURQQTtRQUVILElBQUoxd0MsRUFBSSxVQUhjOGlFO1FBSW5CLEdBSm1CQSxNQUlFLE9BSGJweUI7UUFJVCxHQUxVdzNCO1VBTUssSUFBUnJ3RCxJQU5HcXdEO1VBTUssR0FIYmxvRSxNQUdLNlgsSUFBa0IsaUJBTGhCNjRCLFFBRFdveUI7VUFNTCxJQUNFLG1CQU5ScHlCLFFBRFdveUIsR0FHbEI5aUUsR0FGTzB3Qzs7UUFFSCxJQU1KLEtBTkExd0M7UUFNQTs7OztRekN2YkEsWXlDd2I4QixPQVR2QjB3QztRQUVILElBUVEsbUJBVkxBLFFBRFdveUIsR0FHbEI5aUUsR0FGTzB3QztpQkFXSDtJQTNSZSxTQStSdkJ5M0IsVUFBVTVxQyxNQUFNdWxDO01BSVcsa0JBSmpCdmxDLE1BQU11bEMsR0FJVyxrQkFKWEEsSUFJMEM7SUFuU25DLFNBZ1V2QnNGLDBCQUNFbHpEO01BQUosYUFBSUEsMENBVWlCO0lBM1VJLFNBMFZ2Qm16RCxnQkFBZ0JqRCxRQUFRN25DLE1BQU11bEM7TUFDaEMsU0FEMEJ2bEMsTUFDUix3QkFEQTZuQztNQUVWLElBQUpwbEUsRUFBSSxVQUZ3QjhpRTtNQUc3QixPQUg2QkEsTUE3akI5QixtQ0E2akJnQnNDLFVBRWRwbEUsQ0FFSDtJQUc0QixTQUEzQnNvRTtNakRoaENMLE9pRHlnQ0tEO0lBUTZCLFNBQTdCRTtNakRqaENMLE9pRHlnQ0tGO0lBUTZCLFNBRTdCRyxvQkFBb0JqckMsTUFBTXVsQztNQUN0QixnQ0FEZ0J2bEMsTUFBTXVsQztNQUN0QixTQW5Ea0IyRjs7Ozs7O2NBaUV0Qjs7O2tCQUNVLGdCQWhCZ0IzRixJQWdCaEIsS0FBSjlpRTtrQkFBSTs7OztrQnpDbmhCTixnQnlDbWhCRUEsRUFHRyxpQkFISEEsRUFHcUI7ZUFDbEI7ZUFDQTtlQXhDSiwrQkFId0I4VDtlQUV4QixvQ0FGcUJEOztzQkFDeEJnRTt5QkFNSixZQU5JQTs7d0JBS0EsbUNBTndCaEUsR0FBR0M7cUJBbHdCM0I2dkQsV0F3eEJrQnBtQyxjQUFNdWxDOzs7Ozs7OztrQkFsREoyRjtXQXVEdEI7OztlQUNVLElBRU56b0UsRUFGTSxVQU5nQjhpRTtlQU1oQixXQUVOOWlFLGFBQ0ssaUJBRExBLElBQ3VCO1lBRWxCO1lBQ0E7WUE1REg7c0JBRmdCeW9FLDJCQUFHRzs7Y0FBR0M7Ozs7bUJBQzFCN29FLDJCQVFKLFlBUklBOztxQkFNQSxtQ0FQb0J5b0UsR0FBR0csS0FBR0M7a0JBdHVCMUJsRixXQXd4QmtCcG1DLGNBQU11bEM7O2lCQWxESjJGO016Q2pkbEI7O1F5Q3FjaUIsVUFZQ0E7Ozs7Ozs7Ozs7OztlQXR1QnBCOUUsV0F3eEJrQnBtQyxNQUFNdWxDO01Bd0IxQix3QkExRXNCMkYsR0EwRUo7SUExQlcsU0E4QjdCSyxlQUVpQnZyQyxNQUZJdWxDO01BRXZCLFNBWUlpRyxVQUFVeHJDO1FBQ04sSUFFSnY5QixFQUZJLHlCQURNdTlCLE1BZFN1bEM7UUFlZixjQUVKOWlFLEVBRFEsWUFGRXU5QixNQWRTdWxDLElBaUJkLHNCQUFMOWlFLEVBQThCO01BZDFCLElBRUpBLEVBRkksa0JBSGU4aUU7TUFHZixVQUVKOWlFO1FBRGtCOzZCQUZIdTlCLE1BRkl1bEM7U0FRZiw2QkFETXB5QixRQVBTb3lCO1FBUWYsY0FHSmpyRDtpQkFEVSw4QkFBcUIsWUFIckI2NEIsUUFQU295QjtpQkFZVCxxQkFMQXB5QixRQVBTb3lCLEdBV25CanJEO01BTkssNkJBQUw3WCxFQWNZO0lBakRlLFNBcUQ3QmdwRSxpQkFFaUJ6ckMsTUFGTXVsQztNQUV6QixTQUtJbUcsb0JBQVUxckM7UWpEN2tDakIsSWlENmtDaUJtVDtRQUNaO1VBQU0sSUFHSjF3QyxFQUhJLDJCQURNMHdDLFFBUFdveUI7VUFRakIsVUFHSjlpRSxFQUZRLG1CQUZFMHdDLFFBUFdveUI7b0JBV3JCOWlFO1lBRHVCO2lDQUhiMHdDLFFBUFdveUI7YUFjakIsaUNBRFc5b0IsUUFiTThvQjtZQWNqQjtjQUVnQixxQkFITDlvQixRQWJNOG9CO2NBZ0JEOzt1QkFRcEJvRzs7O2NBVHFCO21DQUZObHZCLFFBYk04b0I7ZUFvQmpCLG1DQURTdUQsUUFuQlF2RDtjQW9CakI7Z0JBQ2dCLHFCQUZQdUQsUUFuQlF2RDtnQkFxQkQ7O3lCQUdwQm9HOztjQVRxQixJQU9OLG1CQUhGN0MsUUFuQlF2RCxPQU9YcHlCOztZQUdhLElBT1IsNEJBSkFzSixRQWJNOG9CLElBT1hweUI7O1VBQ04sSUFHVyxtQkFKTEEsUUFQV295QixHQVdyQjlpRSxHQUpVMHdDO21CQUlxQztNQVRuRCxTQXNCSXc0QixvQkFBWTNyQztRakQ5bENuQixJaUQ4bENtQm1UO1FBQ2Q7VUFBTSxxQ0FEUUEsUUF4QlNveUI7VUF5QmpCO1lBQ2Usd0JBRlBweUIsUUF4QlNveUIsSUF3QlRweUI7VUFHUDs7bUJBcEJMdTRCLHNCQWlCWXY0Qjt3Q0FqQlp1NEIsZUFpQll2NEIsVUFHUTtNQXpCeEIsU0FLSXE0QixVQUFVeHJDLE9qRDdrQ2pCLHVCaUQ2a0NPMHJDLGNBQVUxckM7TUFKTixJQUVKdjlCLEVBRkksa0JBSGlCOGlFO01BR2pCLGNBRUo5aUU7ZUFEa0Isc0JBRkh1OUIsTUFGTXVsQztlQUtoQixzQkFBTDlpRSxFQXdCWTtJQWxGZSxTQW9HN0JtcEUsdUJBQXVCN3NFLFNBQVM4c0UsV0FBVzdyQyxNQUFNdWxDO01BQ25ELFNBQVF1RyxXQUFXendFLEVBQUVzdkU7UWpEdG5DeEIsSWlEc25Dc0Ivb0U7UUFDakI7VUFBUSxnQkFGeUMyakUsSUFFekMsU0FEUzNqRTtVQUNUO1lBQ1EsYUFIaUMyakU7WUFHakM7YUFDYix3QkFKb0J4bUUsU0FFbkIwRCxHQUVELFVBRkNBLE1BRGVrb0U7Ozs7O1VBS2pCO1lBQVEsV3BDdmhDRjlwRSxRb0NpaEN5QzBrRSxHQUU3QzlpRSxHQUlNLFFBTE9iO3NCQU1PO01BTjFCLEdBRGtDaXFFO1FBV2hDLElBREtwcEUsRUFWMkJvcEU7UUFXaEMsV0FYMkM3ckMsTUFVdEN2OUI7UUFDTCxhQVhpRDhpRTtRQVkxQztVQUNJLElBQUwwQyxHQUFLLFVBYnNDMUM7VUFhdEMsT0FITjlpRSxNQUdDd2xFLEdBRUMsd0JBZjBDMUMsSUFnQjFDLG1CQU5GOWlFLEVBR0N3bEU7UUFKRTt3QkFUbUNqb0MsU0FnQmI7SUFwSEQsU0F3SDdCK3JDLGdCQUFnQnhHLEdBSWhCcmxFO01qRDdvQ0wsR2lENm9DS0E7V0FIYUgsRUFHYkc7OzRCQUFLLE1BQUxBLE1BSGFILEVBR2JHO01BRlEsSUFBSjdFLEVBQUksV0FGUWtxRTtNQUdOLDBDQURObHFFLEVBRFMwRTtJQXpIZ0IsU0FnSTdCaXNFLFlBQVl6RyxHQUFHcm1FO01BQ2pCLE9BRGlCQTtlQUVDLE9BRkpxbUUsYUFHSSxrQkFISkEsWUFJSyxPQUpMQSxNQUk0QjtJQXBJWCxTQXdJN0IwRyxpQkFBaUJsc0M7TUFBVSxHQUFWQSxTQUVILElBQVRDLE1BRllELFdBRUgsT0FBVEMsTUFERyxPcEN0akNBbi9CLE9vQ3VqQ1c7SUExSVUsU0E2STdCcXJFLDBCQUEwQkM7TUFDNUIsU0FENEJBLE9BQ0s7TUFDckI7b0NBRmdCQTtPQUdoQixvQkFETmx1RTtPQUVVLGNBRlZBLE1BQ00sc0JBRE5BO01BRVUsVUFEVjBzRSxJQUNBbndCLFFBQ1E7SUFsSmlCLFNBNEp6QjR4Qiw4QkFHSjkxQyxFQUFFNEo7TWpEaHJDUCxJaURnckNPK0M7TUFBTztpQkFBUEE7UUFxQ2tDLGtCQXJDcEMzTTs7UUFBUyxPQUFQMk07aUJBS2tDLFVBTGxDQTtpQkFNa0MsVUFObENBO2lCQU9rQyxVQVBsQ0E7aUJBUWtDLFVBUmxDQTtpQkFTa0MsVUFUbENBO2lCQVVrQyxVQVZsQ0E7aUJBV2tDLFVBWGxDQTtpQkFZa0MsVUFabENBO2lCQWFrQyxVQWJsQ0E7aUJBY2tDLFdBZGxDQTtrQkFpQmtDLFdBakJsQ0E7a0JBa0JrQyxXQWxCbENBO2tCQW1Ca0MsV0FuQmxDQTtrQkFnQ2tDLFdBaENsQ0E7O1dBa0MyQixJQURMMW5DLEtBakN0QjBuQyxTQWlDZTlrQyxNQWpDZjhrQyxTQWtDMkIsZUFBVyxLQUR2QjlrQztXQUNZOztvQkFNN0JrdUUsc0NBeENBLzFDLE9BaUN3Qi82Qjs7b0JBT3hCOHdFLCtCQXhDQS8xQyxPQWlDd0IvNkI7a0JBbEJZLFdBZmxDMG5DO2tCQWdCa0MsV0FoQmxDQTtrQkEwQmtDLFdBMUJsQ0E7Ozs7YUE0QnNCO2NBRG9Cem5DLE9BM0IxQ3luQzs7Y0EyQmdDNk87Y0FDVixrQkFEVUEsT0FBVXQyQztjQTNCMUN5bkM7O1dBOEJzQjtZQURvQnhuQyxPQTdCMUN3bkM7O1lBNkJnQ3FQO1lBQ1Ysa0JBRFVBLE9BQVU3MkM7WUE3QjFDd25DOzs7V0FFRixJQURPd0wsU0FETHhMO1dBRUYsZ0JBQUlxcEM7YUFDRixTQUFJQyxNQUFNQztlQUFlLGtCQUgzQmwyQyxLQUVJZzJDLE9BQ1FFLGNBQThDO2FBQXhELDJCQUFJRCxNQUZDOTlCLFNBRzZCO2tCQWtCQSxXQXRCbEN4TDtrQkF1QmtDLFdBdkJsQ0E7a0JBd0JrQyxXQXhCbENBOztlQW1Da0J2bkMsT0FuQ2xCdW5DLFNBbUNhNWpDLElBbkNiNGpDO1dBeUVXLFVBdENFNWpDO1lBc0NGLE9BdENFQTt5QkFuQ2I0akMsTUFtQ2tCdm5DO3lCQW5DbEJ1bkMsTUFtQ2tCdm5DOztlQXdDcEIsZ0JBQUk0d0U7aUJBQ0YsU0FBSUMsTUFBTUM7bUJBQWUsa0JBNUUzQmwyQyxLQTJFSWcyQyxPQUNRRSxjQUE4QztpQkFBeEQsMkJBQUlELE1BekNjN3dFLE9BMENXOzBCQTdFN0J1bkMsTUFtQ2tCdm5DOztZQXNDUCxPQXRDRTJEO3lCQW5DYjRqQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7O2VBc0RlLElBQVYyQyxRQXREVmdCO2VBc0RvQjs7d0JBakRuQ2d0RTtvQ0F4Q0EvMUMsRUF5RnlCajRCLFFBdERMM0M7O3dCQUtwQjJ3RSwrQkF4Q0EvMUMsRUF5RnlCajRCLFFBdERMM0M7MEJBbkNsQnVuQyxNQW1Da0J2bkM7MEJBbkNsQnVuQyxNQW1Da0J2bkM7a0JBZmdCLFdBcEJsQ3VuQywrQkFxQ3VDO0lBcE1aLFNBdU03Qm9wQyxvQ0FHQS8xQyxFQUFFbjRCLE1BQU0raEM7TWpEM3RDYixJaUQydENPN2hDO01BQWE7aUJBQWJBO1NBcUI2Qjs7a0JBbkUzQit0RSxnQ0E4Q0o5MUMsRUFBUTRKO3VDQTlDSmtzQyx5QkE4Q0o5MUMsRUFBUTRKOztRQUFPLE9BQWI3aEM7aUJBUzZCLFlBVDdCQTtpQkFVNkIsWUFWN0JBO2lCQVc2QixZQVg3QkE7aUJBWTZCLFlBWjdCQTtpQkFhNkIsWUFiN0JBO2lCQWM2QixZQWQ3QkE7aUJBZTZCLFlBZjdCQTtpQkFnQjZCLFlBaEI3QkE7aUJBb0I2QixZQXBCN0JBOztXQXVCTztZQURrQjlDLEtBdEJ6QjhDO1lBc0JvQjFCLElBdEJwQjBCO1lBc0JlbkMsSUF0QmZtQztZQXVCTyxTQUFNLEtBREVuQyxLQUFLUztZQUVNLHNCQUR4QlgsR0FEdUJUO1lBdEJ6QjhDOztrQkFpQjZCLGFBakI3QkE7a0JBa0I2QixhQWxCN0JBO2tCQW1CNkIsYUFuQjdCQTs7V0FFRixJQURVb3dDLFNBRFJwd0M7V0FFRixnQkFBSWl1RTthQUNGLFNBQUlDLE1BQU1DO2VBQWUsa0JBSDNCbDJDLEtBRUlnMkMsT0FDUUUsY0FBOEM7YUFBeEQsaUNBQUlELE1BRkk5OUIsU0FERnZPLElBSXNDOztXQUU5QyxJQURrQndPLFdBTGhCcndDO1dBTUYsZ0JBQUlpdUU7YUFDRixTQUFJQyxNQUFNQztlQUFlLGtCQVAzQmwyQyxLQU1JZzJDLE9BQ1FFLGNBQThDO2FBQXhELGlDQUFJRCxNQUZZNzlCLFdBTFZ4TyxJQVFzQyxFQWdCUTtJQWxPekIsU0E0SnpCdXNDLG9CQUdKbjJDLEVBQUU0SjtNakRockNQLHVCaUQ2cUNTa3NDLHdCQUdKOTFDLEVBQUU0SjtJQS9KMkIsU0F1TTdCMnNDLDBCQUdBdjJDLEVBQUVuNEIsTUFBTStoQztNakQzdENiLHVCaUR3dENLbXNDLDhCQUdBLzFDLEVBQUVuNEIsTUFBTStoQztJQTFNcUIsU0FxUXpCNHNDLFdBR0p2SCxHQUFHcmxDLElBQUk2c0M7TWpEenhDWixJaUR5eENROXBDO01BQWU7aUJBQWZBO1FBd0pIOztRQXhKa0IsT0FBZkE7O1dBRUgsSUFESzFuQyxLQURGMG5DO1dBRUssWUFGUnNpQztXQUVBLElBQ0k5aUUsRUFBSSxXQUhSOGlFO1dBSVMsVUFETDlpRSxFQUNLLFdBSlQ4aUUsR0FDS2hxRSxLQURFd3hFOztXQU1QLElBRFV2eEUsT0FMUHluQztXQU1LLGlCQU5Sc2lDO1dBTUEsSUFDSWpyRCxJQUFJLFdBUFJpckQ7V0FRUyxVQURManJELElBQ0ssV0FSVGlyRCxHQUtVL3BFLE9BTEh1eEU7O29CQUFKOXBDOzs7O2VBV1k7Z0JBRDBCdm5DO2dCQUFaZ0Q7Z0JBQ2QsZ0NBRGNBO2dCQUNkOzs7MEJBQ05zaEMsWUFBUXVsQzttQkFBSyxzQkFEbEJvRixLQUNLM3FDLE1BQVF1bEMsR0FBb0M7Z0JBRHRDLGFBQU50bkUsSUFEZ0N2QztlQUMxQjt3QkFYZjZwRSxHQWFJMEgsU0FiR0YsZUFZSEMsT0FweEJKaEg7Ozs7O2tCQXV4QjBEcnFFOztrQkFBWGdvQztrQkFDM0N3cEM7NEJBQUtudEMsWUFBUXVsQyxJQUFLLHdCQUFidmxDLE1BQVF1bEMsR0FBb0M7aUJBQ25DOzBCQWpCbEJBOzBCQWlCa0IsV0FGNkI1aEMsTUFBV2hvQzswQkFmbkRveEU7OzswQkFnQkhJOzBCQXh4QkpuSDs7Z0JBMnhCMERwcUU7O2dCQUFYeXZDO2dCQUMzQytoQzswQkFBS3B0QyxZQUFRdWxDLElBQUssd0JBQWJ2bEMsTUFBUXVsQyxHQUFvQztlQUNuQzt3QkFyQmxCQTt3QkFxQmtCLFdBRjZCbDZCLE1BQVd6dkM7d0JBbkJuRG14RTs7O3dCQW9CSEs7d0JBNXhCSnBIOzs7WUEreEJhdnFFLE9BdkJWd25DO1lBd0JDMXlCLGNBQUt5dkIsWUFBUXVsQyxJQUFLLHFCQUFidmxDLE1BQVF1bEMsR0FBOEI7a0JBcUkvQzJILGVBN0pBM0gsR0F1QmE5cEUsT0F2Qk5zeEUsZUF3Qkh4OEQsS0FoeUJKeTFEOzs7WUFteUJrQm5xRSxPQTNCZm9uQztZQTJCVWxtQyxJQTNCVmttQztZQTRCQ29xQyxnQkFBS3J0QyxZQUFRdWxDLElBQUssd0JBQWJ2bEMsTUFBUXVsQyxHQUE4QjtrQkFpSS9DMkgsZUE3SkEzSCxHQTJCa0IxcEUsT0EzQlhreEUsUUEyQk1od0UsTUFDVHN3RSxPQXB5QkpySDs7V0F1eUJRO1lBRGVscUUsT0E5QnBCbW5DO1lBOEJjaG1DLEtBOUJkZ21DO1lBOEJTam1DLE1BOUJUaW1DO1lBOEJFOWxDLE1BOUJGOGxDO1lBK0JLLGdDQUEyQixjQUQ5QjlsQztZQUNHO3NCQUNDNmlDLFlBQVF1bEM7ZUFBSywyQkF6dkJaemYsS0F5dkJEOWxCLE1BQVF1bEMsR0FBbUM7V0FDUDtvQkFqQzdDQTtvQkE4QnVCenBFO29CQTlCaEJpeEU7b0JBOEJLL3ZFO29CQUFLQztvQkFFYnF3RTs2QkF6dkJXL0g7c0JBQThDLDBCQUEzQixrQkFBeEJ6ZixLQUFLeWY7O1dBNHZCUDtZQURpQnhwRSxPQWxDdEJrbkM7WUFrQ2dCN2xDLE9BbENoQjZsQztZQWtDVy9sQyxNQWxDWCtsQztZQWtDSTNsQyxRQWxDSjJsQztZQW1DSyxrQ0FBMkIsY0FENUIzbEM7WUFDQztzQkFDQzBpQyxZQUFRdWxDO2VBQUssMkJBeHVCVmdJLE9Bd3VCSHZ0QyxNQUFRdWxDLEdBQW1DO1dBQ1A7b0JBckM3Q0E7b0JBa0N5QnhwRTtvQkFsQ2xCZ3hFO29CQWtDTzd2RTtvQkFBS0U7b0JBRWZvd0U7NkJBeHVCYWpJO3NCQUFnRCwwQkFBM0Isa0JBQTFCZ0ksT0FBS2hJOztXQTJ1QlQ7WUFEcUJ0cEUsT0F0QzFCZ25DO1lBc0NvQjFsQyxPQXRDcEIwbEM7WUFzQ2U1bEMsTUF0Q2Y0bEM7WUFzQ1F4bEMsUUF0Q1J3bEM7WUF1Q0ssa0NBQTJCLGNBRHhCeGxDO1lBQ0g7c0JBQ0N1aUMsWUFBUXVsQztlQUFLLDJCQTd1Qk5rSSxPQTZ1QlB6dEMsTUFBUXVsQyxHQUFtQztXQUNQO29CQXpDN0NBO29CQXNDNkJ0cEU7b0JBdEN0Qjh3RTtvQkFzQ1cxdkU7b0JBQUtFO29CQUVuQm13RTs2QkE3dUJpQm5JO3NCQUFvRCwwQkFBM0Isa0JBQTlCa0ksT0FBS2xJOztXQWd2QmI7WUFEaUJwcEUsT0ExQ3RCOG1DO1lBMENnQnZsQyxPQTFDaEJ1bEM7WUEwQ1d6bEMsTUExQ1h5bEM7WUEwQ0lybEMsUUExQ0pxbEM7WUEyQ0ssa0NBQTJCLGNBRDVCcmxDO1lBQ0M7c0JBQ0NvaUMsWUFBUXVsQztlQUFLLDJCQS91QlZvSSxPQSt1QkgzdEMsTUFBUXVsQyxHQUFtQztXQUNQO29CQTdDN0NBO29CQTBDeUJwcEU7b0JBMUNsQjR3RTtvQkEwQ092dkU7b0JBQUtFO29CQUVma3dFOzZCQS91QmFySTtzQkFBZ0QsNEJBQTNCLGtCQUExQm9JLE9BQUtwSTs7a0JBbXNCZHRpQzs7O2tCQThDMEM1bUMsUUE5QzFDNG1DLFNBOENvQytMLE9BOUNwQy9MLFNBOEMrQm5sQyxNQTlDL0JtbEM7cUJBNkpIaXFDO3VCQTdKQTNIO3VCQThDNkNscEU7dUJBOUN0QzB3RTt1QkE4QzJCanZFO3VCQUFLa3hDO3VCQS9idkN5N0I7dUJBdFVBakM7OztrQkEwd0I0Q2xzRSxRQW5EekMybUMsU0FtRG1Da00sT0FuRG5DbE0sU0FtRDhCamxDLE1BbkQ5QmlsQztxQkE2SkhpcUM7dUJBN0pBM0gsR0FtRDRDanBFLFFBbkRyQ3l3RSxRQW1EMEIvdUUsTUFBS214QyxPQXpnQnRDMjZCLGVBalFBdEI7O2tCQXd3QmtCcHNFLFFBakRmNm1DLFNBaURTcGxDLE9BakRUb2xDLFNBaURJdGxDLE1BakRKc2xDO3FCQTZKSGlxQzt1QkE3SkEzSCxHQWlEa0JucEUsUUFqRFgyd0UsUUFpREFwdkUsTUFBS0UsT0F2aUJaNnJFLFdBak9BbEI7OztZQTR3Qldqc0UsUUFyRFIwbUM7WUFxREc3a0MsTUFyREg2a0M7WUFzREM0cUM7aUNBQVN0STtlQXZPUDtvQ0F1T09BO2dCQXZPUDt5QkFLSjlpRTs7K0JBQ0EsVUFDRSx5QkFGRkE7ZUFHSixxQkFQSXVtQixFQXNPV3U4QyxHQUFpQjtrQkF1RzlCMkgsZUE3SkEzSCxHQXFEV2hwRSxRQXJESnd3RSxRQXFERDN1RSxRQUNGeXZFLE9BNXpCSnhGOztXQTYwQkEsSUFETTlwRSxRQXRFSDBrQztXQXVFQSxnQkF2RUhzaUMsU0FBR3RpQyxNQXNFRzFrQztXQUVEOztlQUVnQkMsUUExRWxCeWtDLFNBMEVhVCxNQTFFYlM7V0EyRUgsc0JqRHAyQ0wsT2lEMGZTa2xDLFdBK3hCSjVDLFVBMEVnQi9pQztlQTFFYlMsTUEwRWtCemtDOzs7ZUFHRkMsUUE3RWhCd2tDLFNBNkVXL2tDLElBN0VYK2tDO1dBOEVILFdBOUVBc2lDLEdBNkVjcm5FO2VBN0VYK2tDLE1BNkVnQnhrQzs7O2VBSVNFLFFBakZ6QnNrQyxTQWlGa0I5a0MsTUFqRmxCOGtDLFNBaUZTbEQsUUFqRlRrRDtXQWtGSyxpQkFBaUIsaUJBRGJsRCxTQWpGWndsQztXQW1GUSxJQUFKeGxFLEVBQUksYUFuRlJ3bEU7V0FtRlE7YUFFRixnQ0FGRnhsRSxFQUZpQjVCLE9BR2pCc3RDOzs7O2FBRWtCLGVBRmxCQSxNQUVrQixVQUFQcmdDO1dBRUosVUFKUHFnQyxNQUlPLFdBeEZYODVCLEdBaUY0QjVtRSxRQWpGckJvdUU7O2VBeUZ1Qmx1RSxRQXpGM0Jva0MsU0F5Rm9CNWtDLFFBekZwQjRrQyxTQXlGVzlDLFVBekZYOEM7V0EwRkssaUJBQWlCLGlCQURYOUMsV0F6RmRvbEM7V0EyRlEsSUFBSmoxRCxJQUFJLGFBM0ZSaTFEO1dBMkZRO2FBR2M7MENBSGxCajFEO2NBR2tCO2NBQ0MsNEJBSm5CQTtjQUltQjtjQWNuQixrQkFkWW04QixNQWNLLFVBQVcsS0FwQlRwdUM7Y0FtQm5CLGlCQWRZZ3VDLE1BY0ksVUFuQkdodUM7Y0FHZDR0QztjQUFMSjs7O21DQW9CSjthQUZzQjs7NkJBQVArWDtjQWxCTjNYO2NBQUxKO1dBcUJFO3NCQXJCRkEsTUFEQXY3QjttQkFzQkUsV0FqSE5pMUQsR0FpSG9CLFdBckJYdDVCLE1BSHFCcHRDLFNBekZ2Qmt1RTtrQkF5RFA7a0JBRUE7O1dBNEU0QjtZQURJanVFLFFBdEk3Qm1rQztZQXNJYTdvQyxlQXRJYjZvQztZQXVJeUIsOEJBRFo3b0M7V0FDaEIsc0JqRGg2Q0wsT2lEMGZTK3RFLFdBK3hCSjVDO1dBdUk0QixJQXZJekJ0aUMsTUFzSTZCbmtDOzs7b0JBdEk3Qm1rQzs7aUJBeUkwQ2hrQyxRQXpJMUNna0MseUJBeUkrQnNLO2FBQ2xDLFdBMUlBZzRCO2FBMEltQixXQTFJbkJBO2FBMkljLHNCQUZvQmg0QixNQUFXdHVDLFNBekkxQ2drQzs7ZUE0STBDOWpDLFFBNUkxQzhqQyx5QkE0SStCOEs7V0FDbEMsV0E3SUF3M0I7V0E2SW1CLFdBN0luQkE7V0E4SWMsc0JBRm9CeDNCLE9BQVc1dUMsU0E1STFDOGpDOzs7V0ErREgsSUFET3dMLFNBOURKeEw7V0ErREgsR0EvRE84cEM7YUFpRUs7Y0FESVAsYUFoRVRPO2NBZ0VDVCxPQWhFRFM7Y0FpRUssYUFESlQsT0FoRVIvRzthQWtFYSxVQURMcmxFLEVBQ0ssV0FsRWJxbEUsR0E4RE85MkIsU0FFUys5QjtXQUlaOztvQkFwRUR2cEM7O2FBb0hZO2NBRGlEM2pDO2NBQVp3dUU7Y0FBMUJsdUMsV0FuSHZCcUQ7Y0FvSFksa0NBRHFDNnFDO2NBQ3JDOztjQUNIO2FBQ1osdUJBSDBCbHVDLGNBQ3RCbXVDLE9BQ0E1NkIsUUFySEpveUI7YUFvSGUsSUFHUCxpQkF2SFJBLElBdUhRLGVBSENuaUMsTUFEdUQ5akM7YUFNdkQsVUFGTDB1RSxJQUVLLFdBekhUekksR0F3SEkwSSxXQXhIR2xCO1dBMkhLO1lBRHdCM3RFLFFBMUhqQzZqQztZQTBIdUJsa0MsU0ExSHZCa2tDO1lBMkhTO1dBQ1osdUJBRjBCbGtDLFdBQ3RCaWhDLE1BM0hKdWxDO1dBMkhZLElBRVIzeUMsSUFBSSxhQTdIUjJ5QztXQThIUyxVQURMM3lDLElBQ0ssV0E5SFQyeUMsR0EwSG9Dbm1FLFFBMUg3QjJ0RTs7V0FnSUs7WUFEZW4zQixRQS9IeEIzUztZQStIZS9qQyxRQS9IZitqQztZQWdJUyxrQkFoSVpzaUMsR0ErSGtCcm1FO1dBRUwsVUFEVHU2QixNQUNTLFdBakliOHJDLEdBK0gyQjN2QixRQS9IcEJtM0I7O1dBbUlQLFlBbklHOXBDLFNBbUlLLHNCQW5JUnNpQztXQW9JUyxVQURMaHJELElBQ0ssV0FwSVRnckQsR0FrSWUxdkIsUUFsSVJrM0I7O1dBaUpxQjtZQURSbUIsUUFoSmpCanJDO1lBZ0pZNWpDLElBaEpaNGpDO1lBaUp5Qix1Q0FEYjVqQyxJQUFLNnVFO1lBQ1E7WUFDaEIsbUJBbEpaM0ksR0FpSnFCaDNCLE9BakpkdytCO1dBa0pLLFlBQ1ksSUFBYm9CLG9CQUFhLE9BQWJBO1dBQ0Y7a0JBdkZULG1EQTJGRztJQWhhMEIsU0FxYTdCakIsZUFNQTNILEdBQUdybEMsSUFBSTZzQyxRQUFRaHdFLElBQUlFLEtBQUtzVCxLQUFLNmtEO01BQVMsVUFBdkJyNEQ7a0JBQUlFO1VBd0JuQixHQXhCbUJBLEtBd0JuQjtVQXRCUSxXQUZnQnNULEtwQ3gxQ2hCMVAsZ0JvQ3cxQ1Iwa0U7VUFHUSxJQUFKcmxFLEVBQUksV0FIcUJrMUQsTUFBN0JtUTtVQUlTLFVBRExybEUsRUFDSyxXQUpUcWxFLEdBQUdybEMsSUFBSTZzQztRQU1QLElBRDBCcCtELEVBTFAxUjtRQU1YLFdBTmdCc1QsS3BDeDFDaEIxUCxRb0M2MUNrQjhOLEVBTDFCNDJEO1FBTUEsSUFDSW5zRCxJQUFJLFdBUHFCZzhDLE1BQTdCbVE7UUFRUyxVQURMbnNELElBQ0ssV0FSVG1zRCxHQUFHcmxDLElBQUk2c0M7O1FBQStCLFNBQXZCaHdFOzs7c0JBQUlFO2NBb0JuQixHQXBCbUJBLEtBb0JuQjtjQVZRLFdBVmdCc1QsVXBDeDFDaEIxUCxRb0N3MUNSMGtFO2NBV1EsSUFBSjNpQixJQUFJLFdBWHFCd1MsTUFBN0JtUTtjQVlTLFVBREwzaUIsSUFDSyxXQVpUMmlCLEdBQUdybEMsSUFBSTZzQztnQkFheUNyNEIsSUFiN0J6M0M7WUFjWCxXQWRnQnNULFVBYXdCbWtDLElBYmhENndCO1lBZVEsSUFBSnhpQixJQUFJLFdBZnFCcVMsTUFBN0JtUTtZQWdCUyxVQURMeGlCLElBQ0ssV0FoQlR3aUIsR0FBR3JsQyxJQUFJNnNDO1VBa0JQO1FBSUEsK0NBRTBDO0lBbmNiLFNBMGM3QnFCLE9BQU83SSxHQUFHOEk7VUFBaUJwd0UsYUFBTGlpQztlQUNoQm91QyxNQUNGL3VFLEVBQUVnbUQ7WUFBRm5ELE1BQUVtc0I7UUFBUTthQUFSQTtZQUNpQjthQUFaN3VFLEVBREw2dUU7YUFDRXJ1RSxFQURGcXVFO2FBQ2lCLGVBRG5CbnNCLElBQ0lsaUQ7YUFESmtpRDthQUFFbXNCLE9BQ0s3dUU7O1VBQ0YsT0FGTDBpRCxJQUVNO2VBRVI5ckIsRUFBRXkyQyxRQUFReHRFO1FBQ1osWUFQT2dtRTtRQU9QO1VBQ2UsdUJBUlJBLEdBQWVybEMsSUFNbEI2c0M7Y0FHQXlCOzs7Ozs7Ozs7Ozs7Ozs7OzthQUNpQnBqRSxJQURqQm9qRTs7Y0FFQTtnQkFBWSxJQURLcGpFLElBQ0Usa0JBQWtCLGNBWGRuTjs7VXpDMzhCdkIsMEJ5Q285QkF1d0U7OzBCQUlhLElBQVJqcEIsYUFBUSxhQVBMaG1ELEVBT0hnbUQ7UUFDTSxJQUFQaXBCO1FBQU8sa0JBZExILEdBQUg5SSxHQWNDaUosSUFBZ0I7YUE1VHBCL0Isb0JBb1RGbjJDLEVBTm9CNEo7SUExY08sU0ErZDdCdXVDLE9BQU9sSixHQUFHcmxDLEtBQU0sY0FBVHFsQyxHQXZXUHdHLGdCQXVXVTdyQyxJQUFvQztJQS9kakIsU0FpZTdCd3VDLFFBQVEzdUUsRUFBRXN1RSxHQUFHbnVDLEtBQWMsNEJBQW5CbmdDLEdBQUVzdUUsR0FBR251QyxJQUE2QztJQWplN0IsU0FrZTdCeXVDLE9BQU81dUUsRUFBRW1nQztNQUFjLDRCQUFoQm5nQyxHQTFXUGdzRSxnQkEwV1M3ckMsSUFBMEQ7SUFsZXRDLFNBb2U3QjB1QyxNQUFNMXVDLEtBQU0sY0E5bkNWNm1DLE1Ba3hCRmdGLGdCQTRXTTdyQyxJQUErQztJQXBleEIsU0F5ZTdCMnVDLGNBR0V0SixHQUFHdUosT0FBT3Z2RTtNQUNKLGlCcEMxNUNBc0IsUW9DeTVDTjBrRTtNQUVRLElBQU50bkUsSUFBTSxhQUZSc25FO01BRVE7UUFFSixpQ0FGRnRuRSxJQUZDNndFLFFBR0Q1dUM7Ozs7UUFFa0IsZUFGbEJBLElBRWtCLFVBQVA5MEI7TUFDZixrQkFOWTdMLEVBR1IyZ0MsSUFHRTtJQWxmdUIsU0FxZjdCNnVDLGNBR0VodkUsRUFBRSt1RSxPQUFPdnZFO01BQW1CLG1DQUE1QlEsR0FBRSt1RSxPQUFPdnZFLEVBQW9EO0lBeGZsQyxTQTJmN0J5dkUsbUJBQW1CanZFLEVBQUVtZ0M7TUFDdkIsY0FBd0RoZ0MsR0FBSyxPQUFMQSxDQUFNO01BQWhELGdDQUFRLGNBRERILFlBQUVtZ0MsU0FDd0M7SUE1ZmhDLFNBK2Y3Qit1QyxVQUFVbHZFO01BQ1osY0FBcUNHLEdBQUssT0FBTEEsQ0FBTTtNQUFwQyxvQ0FBUSxJQURISCxzQkFDZ0M7SUFoZ0JiLFNBb2dCN0JtdkUsUUFBUXByRSxHQUFHdXFFLEdBQUdudUMsS0FBYyxnQ0FBcEJwOEIsSUFBR3VxRSxHQUFHbnVDLElBQW9EO0lBcGdCckMsU0FxZ0I3Qml2QyxPQUFPcnJFLEdBQUdvOEI7TUFBYSxnQ0FBaEJwOEIsSUE3WVBpb0UsZ0JBNllVN3JDLElBQWdFO0lBcmdCN0M7Ozs7UUExcEIzQjZtQztRQWFBRztRQUNBQztRQU1BRTtRQVBBSDtRQUNBQztRQXRIQVg7UUFXQUM7UUE2R0FXO1FBMUxBMUI7UUFPQUM7UUFFQUM7UUFpS0FtQjs7T0F5bkNGMEg7T0FHQUU7T0FFQUM7T0ExQkFSO09BdUJBTTtPQVFBRztPQVlBRTtPQU1BQztPQUlBQztPQU1BRTtPQURBRDtJQXBnQjZCO2FDNS9CN0JFLFNBQVM1c0UsS0FBSy9DLEdBQ2hCLGlDQURXK0MsS0FBSy9DLEVBQ3NCO2FBRXBDNHZFLG1CQUFtQjdzRSxLQUNqQjBzQjtNQUNVLElBQVZ4a0IsS0FBVSxhQURWd2tCO01BRUosaUNBSHFCMXNCLEtBRWpCa0ksS0FDMEI7MkJBTjVCMGtFLFNBR0FDOztvQkNBS2xrRSxHQUNVLElBQWJta0UsSUFBYSxVQUNqQixzQkFESUEsSUFDSTtRQVlOQyx3QkFVQUMsc0JBT0FDO2lDQWVvQjF2RTtNQUN0QiwwQ0FEc0JBLFdBQ3RCOztZQUNBMUU7UUFDRTtVQUFnQyx5QkFIWjBFLEVBRXRCMUU7VUFDa0MsaUJBRjlCb0o7VUFFOEIsU0FEbENwSjs7O01BSUEsVUFMSW9KO01BQUosSUFPSWlyRSxpQkFQQWpyRTtNQVNKLE9BRklpckUsR0FFSzthQUsyQkMsV0FBU3p2RSxFQUFLQyxHQUFJLDJCQUFURCxFQUFLQyxFQUFlO3lDQUE3Qnd2RTthQUlBQyxXQUFTMXZFLEVBQUtDLEdBQUksMkJBQVRELEVBQUtDLEVBQWU7SUFnQ3hDO3VDQWhDV3l2RTtLQUdEQzs7S0FnQmpDQyxvQkFyREFMO0tBK0RBTTtLQUd1QjthQUluQkUsU0FBU3B3RSxHQUNmLFdBRGVBLEVBRWYsVUFGZUEsNkJBRU87SUFORyxTQVF2QnF3RSxVQUFVQztNQUNaOztXQURZQTtPQUdFLHdCQURWL3NFLHFCQVZGNHNFO01BWUYsaUJBRElJLGdCQURBaHRFO01BREosV0FJc0IsU0FIbEJBO01BR0osaUJBRklndEU7TUFGSixJQUlBLEtBSElodEUsWUFHSjs7WUFDQS9IO1FBQXdCO1VBQXlCO2lCQUFqREE7V0FBaUQsc0JBTnJDODBFLFdBTVo5MEU7VUFBd0IsaUJBSHBCKzBFO1VBRzZDLFNBQWpELzBFOzs7TUFDQSxVQXhGRW0wRSxvQkFvRkVZLHVDQVcwQjtJQXRCTCxTQXdCdkJDLFNBQU9DLE1BQU1DO01BQ2YsYUFEU0Qsb0JBQ1QsS0FBSUUsV0FEV0Q7TUFDZjtRQUVpQixJQUFYRSxTQUFXLGVBSEZGLFNBeEJiUDtRQTRCQSxPQUpPTSxXQUdIRyxXQUZGRDtRQUdGLFdBRElDO1FBQVc7OztNQWxCakIsV0FxQkU7SUE5QnVCO2FBNEN2QkcsV0FBV0M7TUFDYixJQUFJbGQsTUFEU2tkO01BRWIsU0FGYUEsTUFDVGxkO01BQ0osT0FESUEsS0FFQztJQS9Db0IsU0FpRHZCbWQsaUJBQWlCRCxNQUFNcnVFO01BQ3pCO1FBQ0UsOEJBRnVCQSxLQUFOcXVFOzs7O1VBSUwsSUFBUkUsTUFBUSxXQUpLRjtVQUtRLCtCQUxGcnVFLEtBSW5CdXVFLE1BSmFGO1VBTVMsOEJBRnRCRSxRQUphRjtVQU1TLE9BRnRCRTtRQVJOLFdBV087SUF4RGtCLFNBMER2QkMsa0JBQWtCSCxNQUFNSTtNQUNoQiw0Qm5EcExiLE9tRDBLS0gsaUJBU2tCRCxhQUFNSSxNQUNjO0lBM0RmLFNBNkR2QkMsV0FBV0wsTUFBTUUsTUFBTUk7TUFDekI7TUFDRywyQkFGZ0JKLE1BQU5GO2dCQTVCYixTQTRCYUEsTUFBTUU7Z0JBM0JuQixpQkEyQmFGLFNBQU1FOztnQkFBTUk7O2dCQUFaTixpQkFBTUUsTUFBTUksU0FBWk4sWUFLaUQ7SUFsRXJDLFNBb0V2Qk8sV0FBV1AsTUFBTUU7TUFDbkI7UUFBSSxlQURlQSxNQUFORjs7OztTQUVLLHdCQUZMQSxTQUFNRTttQkFFb0I7SUF0RWQsU0F3RXZCTSxVQUFRQyxLQUNWLGFBRFVBLE1BQ3FCLFVBRHJCQSxJQUNzQztJQXpFdkIsU0EyRXZCQyxPQUFPVixNQUFNVyxLQUFLQyxXQUFXQztNQUNwQjt3QkFESUY7T0FFRSx1QkFGR0M7T0FHRix3QkFIYUM7T0FJVjs7eUJuRHhNeEIsT21EMEtLWixpQkEwQk9ELGFBRUxlO09BR2tCOzt5Qm5Eek16QixPbUQwS0tkLGlCQTBCT0QsYUFHTGdCO01BRWtCOzs7VUFMYmhCLG9DQUlMaUIsZUFIQUg7T0FES2Q7TUFDRSxJQUlXLGtCQUxiQTtNQUthLGNBT2JtQixJQUFJMW5FLEtBQUsybkU7UUFDVCxXQURBRCxJQVhMTCxRQVk0QixtQkFEdkJLLElBQUkxbkUsS0FBSzJuRSxZQUNnRDtNQUZoRTs7TUFNRjtpQkFDT0csSUFBSXJCO1VBQ0ssaUNBRFRxQixJQUFJckIsTUFIUG1CO1VBSVksU0FIWkM7VUFHWTtZQUdELDZCQUpKcEIsTUFsQkZGOzs7OztVQXFCRCxpQ0FIR0U7VUFHSCxRQUVXO1FBcEJmYztRQUVBRTtNQW9CSjtpQkFDT0ssSUFBSXJCO1VBQ0ssaUNBRFRxQixJQUFJckIsTUFYUG1CO1VBYWEsaUNBRk5uQixRQVZQb0I7VUFZYSxRQUE4QjtRQTFCM0NQO1FBRUFFO01BcUJKLFdBVklJO01BVUosV0FUSUM7TUFMRixJQWNGLFlBekJTdEI7TUFpQ047OztpQkFDT3VCLElBQWtCQztVQUF2QixJQUFPTCxJQUFGSSxPQUNDLFdBRENKLElBOUJSRixnQkE4QndCTyxNQUFsQkQsSUFBa0JDLEdBQ2dDOzs7TUFGekQsUUFJSTtJQWhIa0IsU0FrSHZCQyxNQUFNekI7TUFFTjtnQkFGTUE7T0FFTjs7Ozs7O01BRXVCLGNBSmpCQTtNQU1MOzs7aUJBQ085d0UsRUFBRU47VUFBZ0IsNkJBQWhCQSxFQVBKb3hFO1VBT29CLDBCQUFoQnB4RSxPQUFGTSxFQUE0QztRQU5Wd3lFO1FBQXdCZjtNQUtqRSxXQUxFVTtNQUtGLFdBTFdDO01BQ1osU0FGTXRCO01BWUw7OztpQkFDT3VCLElBQWtCQztVQUF2QixJQUFPTCxJQUFGSSxPQUNDLFdBRENKLElBWjRDUCxZQVk1QlksTUFBbEJELElBQWtCQyxHQUM0Qjs7UUFiaENHO01BV3JCLFFBSW9CO0lBbElFLFNBb0l2QkMsU0FBUzVCO01BQ1gsSUFBSWxkLE1BRE9rZCxTQUNYLFdBQUlsZCxjQUFKLE9BQUlBLEtBRUM7SUF2SW9CLFNBeUl2QitlLGFBQWE3QixNQUFNcnVFO01BQ3JCO1FBQUksNkJBRGlCQSxLQUFOcXVFOzs7O1VBR0QsSUFBUmxkLE1BQVEsU0FIQ2tkO1VBSVYsd0JBSmdCcnVFO1dBSWMsOEJBSmRBLEtBR2ZteEQsTUFIU2tkO1VBS2IsT0FGSWxkO1FBUE4sV0FTTztJQTlJa0IsU0FnSnZCZ2YsU0FBU3JCLEtBQ1Isa0JBRFFBLGNBQzRCO0lBakpkLFNBbUp2QnNCLHNCQUFzQi9CLE1BQU1nQyxNQUFNQztNQUN4Qjt3QkFEa0JEO09BQ2xCLE9BQVJFO09BQVEsTUFEd0JEO09BRzFCLG1CQURORSxTQUFnQ0M7T0FDMUIsS0FETkQ7T0FDTTs7WUFDVnB4RTtRQUNFO1VBQVc7OzZCQUxXaXZFLE1BS1ksaUJBSmhDa0MsUUFHSm54RTtVQUNFLGlCQUZFZ0QsSUFDSmhEO1VBQ2EsU0FEYkE7OztNQUhZLElBTVosS0FMb0NxeEUsY0FLcEM7OztRQUNFO1VBQWtCO2dCQURwQjUzRSxJQUxJMjNFO1dBTWdCLGtCQVJJbkMsTUFRZSxpQkFSSGlDLEtBT3BDejNFO1VBQ0UsaUJBTEV1SjtVQUtnQixTQURwQnZKOzs7TUFHQSxPQVBJdUosR0FPRDtJQTdKc0IsU0ErSnZCc3VFLGFBQWFyQyxNQUFNcnVFO01BQ3JCO1FBQUksNkJBRGlCQSxLQUFOcXVFOzs7OEJBQ2lDO21CQUFZO0lBaEtuQyxTQWtLdkJzQyxjQUFjdEMsTUFBTUk7TUFDWiw0Qm5ENVJiLE9tRHdSS2lDLGFBR2NyQyxhQUFNSSxNQUNjO0lBbktYLFNBcUt2Qm1DLGdCQUFnQnZDLE1BQU10eEUsR0FDeEIsY0FEd0JBLEVBQU5zeEUsVUFDbEIsUUFBMkM7SUF0S2xCLFNBbUx2QndDLGFBQWFDO01BQ2YsU0FEZUEsZUFDbUI7TUFFdkI7c0NBSElBO09BSUgsZ0JBRFJDO01BRUo7aUJBQ09sNEUsRUFBRSsyRTtVQUNMLElBQUlKLEtBREQzMkU7VUFFdUIsK0JBRnJCKzJFLElBQ0RKLElBSEpuQjtVQUswQiw4QkFGdEJtQixNQUhKbkI7VUFLMEIsUUFBd0M7UUFUdkR5QztNQUtmLE9BREl6QyxLQU9DO0lBOUxvQixTQWdNdkIyQyxXQUFXM0M7TUFDYixxQkExSkVGLG9CQXlKV0U7TUFFUyxlQUZUQTtNQUdXO2VBSFhBO3FCQUdXLGlCQUhYQSx1Q0FHa0Q7SUFuTXRDLFNBcU12QjRDLFNBQVNDLElBQUlaLEtBQUtyQixXQUFXQyxrQkFBK0I5NUM7VUFBTHBLLGFBQVZtbUQ7TUFDL0MsT0FEV0QsSUFBSVosS0FBS3JCLFdBQVdDO01BQy9CLElBQ0k5aEUsS0FGMERnb0IsSUFHaEQsV0FIaUMrN0MsUUFBcENELElBQThDbG1ELEtBR2YsV0FIS21tRCxRQUFwQ0Q7TUFJWCxNQUpXQTtNQUNYO09BR0E7T0FNSyxjQVYwQmhDO09BUTVCOzs7b0JBQ09rQyxJQUEyQixrQkFUMUJGLElBUzBCLGlCQVQxQkEsSUFTREUsSUFBK0Q7O09BRmxDLGNBUHhCZDtNQU1aOzttQkFKQ2xqRTs7aUJBS00scUJuRHJVYixPbUR3UktzakUsYUFzQ1NROztJQXJNYyxTQWlOdkJHLFdBQVdDLFVBQVVDO01BQ1gsdUJBRENELFdBRUUsb0JBRlFDLFdBQ25CbEQ7TUFFSixXQUZJQTtNQUdILHFCQUZHbUQsWUFGbUJELFdBRW5CQyxXQUVxRDtJQXJOaEMsU0EwTnZCQyxpQkFBaUJILFVBQVVDLFdBQVdHO01BQzVCLHVCQURPSixXQUVKLG9CQUZjQyxXQUN6QmxEO01BRUosV0FGSUE7TUFFSixnQkFINkJrRDtNQUc3QixnQkFESUM7TUFDSixRQUUrQjtJQS9OTixTQWlPdkJHLFlBQVlDO01BQ2QsU0FBSUMsYUFBaUIsb0NBRFBELElBQzZDO01BQTNELFVBQUlDLG9CQUN1QztJQW5PbEIsU0F1T3ZCQyxjQUFjekQ7TUFFTixJQUFOdG1FLElBQU0sbUJBRk1zbUU7TUFJaEIsU0FKZ0JBO01BS1Isc0JBSEp0bUUsSUFHZ0I7SUE1T0ssU0E4T3ZCZ3FFLGtCQUFrQkMsTUFBTTNEO01BQzFCLEdBRG9CMkQsTUFDYSxPQURiQTtNQUdSLElBQU5qcUUsSUFBTSxtQkFIY3NtRTtNQUt4QixTQUx3QkE7TUFNaEIsc0JBSEp0bUUsSUFJSDtJQXJQc0IsU0F1UG5Ca3FFLE9BQU9scUU7TW5EaFhoQjs7O2NtRG1YUTVJLGFBQUhwQztVQUFRLFdBQVJBLEVBSFdnTDtzQkFHUjVJOztRQURLO0lBelBlLFNBNFB2Qit5RSxpQkFBaUJucUUsSUFBSXNtRTtNQUN2QixVQUR1QkEsU0FDdkIsV0FBSThEO01BQUosWUFFRSxPQUhpQnBxRSxJQUNmb3FFLFdBRWM7SUEvUE8sU0FpUXZCQyxxQkFBcUJKLE1BQU1qcUUsSUFBSXNtRTtNQUNqQyxHQUR1QjJELE1BQ1UsT0FESmpxRTtNQUNhLElBQ3BDb3FFLE1BRjJCOUQ7TUFDUyxTQUNwQzhELE1BQ2dCLE9BSE9wcUUsSUFFdkJvcUU7TUFDZ0MsT0FIVHBxRSxHQUsxQjtJQXRRc0IsU0F3UXZCc3FFLCtCQUFtQ0wsTUFBTTNEO01BQzNDLEdBRHFDMkQsTUFDSixPQURJQTtNQUV6QixJQUFOanFFLElBQU0sY0FGK0JzbUU7TUFHekMsaUJBREl0bUUsSUFGcUNzbUU7TUFHekMsT0FESXRtRSxHQUdIO0lBN1FzQixTQXdTdkJ1cUUsV0FFSzk3RDtNQUZNLEdBRU5BLE1BQVUsT0FBVkEsU0FESSw2QkFDaUI7SUExU0gsU0ErU3ZCKzdELFdBQVdsMUUsRUFBRW0xRSxLQUFLN21EO01BQ3BCLHVCQUFJdnBCLEtBQUo7WUFEYS9FO1lBR2J4RTtRQUNFO21CQUZFcUU7VUFFZSwyQkFKSnMxRSxLQUdmMzVFO1VBQ0UsU0FERkE7YUFIYXdFLE1BR2J4RTs7TUFGQSxTQUNJcUU7TUFsQmtCLEdBZ0JGeXVCLFFBZEgsd0JBZWJ2cEI7TUFoQk8sNkJBc0JSO0lBdFRzQixTQTJVdkJxd0UsY0FBY0MsS0FuQklGO01Bb0JkLElBcEJtQkcsU0FvQm5CLFdBRFVEO01BQ1YsR0FwQm1CQztRQXNCdkIsUUF0QmtCSCx3QkFBRjM1RSxNQUFPOHlCOztRQUN6QjtrQkFEa0I5eUI7WUFFUix5QkFGVTI1RSxLQUFGMzVFLFVBR0UrNUUsU0FIS2puRDtZQUl2QjtjQXZCVSxHQXNCUWluRDttQ0FEaEJ4MEI7a0JBR00sSUFMZXkwQixTQUtmLFdBRlVEO2tCQUVWLEdBTGVDO29CQVFqQixRQVJVaDZFLGdCQUFPOHlCO2tCQU1WO2dCQW5CRixHQWdCT2luRDtrQkFkSCxTQWNHQTs7a0JBZEgsSUFYQzMxRSxLQXdCZG1oRDtrQkF4QmtCLEdBeUJGdzBCO29CQXZCSCxjQUZDMzFFLFNBYWhCczFFLFdBU2dCMTVFLFVBQUUyNUUsS0F0QkZ2MUU7a0JBQ1A7Z0JBU0E7Y0FOQTtVQW1CRyxPQURXMHVCO01Bd0J2QixrQkF4QmtCNm1ELDZCQW1CSkUsS0FLOEI7SUFoVnJCLFNBbVl2QkksVUFBVXpFO01BQ0osaUJBRElBO01BR3NCOzs7U0FGOUJoeEU7OztnQkFFOEIsaUJBSHRCZ3hFLDBDQUNSaHhFO1lBQ0E4USxJQUVVLFdBSkZrZ0U7TTNDb0JOLGtCMkNsQkZsZ0UsSUFEQTlRO01BS0osaUJBTllneEUsU0FFUmxnRTtNQUlKLE9BSklBLEdBS0g7SUExWXdCLFNBOGR2QjRrRSxZQUFZMUUsTUFBTVQ7TUFDcEIsUUFEb0JBLG1CQUNwQjs7V0F4RG9CLzBFLE9Bd0RoQitIO1VBRUY7Z0JBMURrQi9IO1dBMEROLHVCQUhNKzBFO1dBdERwQjs7Y0FBYzt1QkFETS8wRTtjQUNRLHdCQXNEUiswRSx1QkF0RGdCO1dBQzlCO29CQW1ESm9GOzs7Y0FsRHdCOztlQXVEUUMsTUE3SWxCLFNBQUp2MUUsR25EN2NmLGdCbUQ2YzRCcUssS0FBUSxPQUFyQnJLLENBQXNCLEdBQXRCQTs7O2NBdUZVOztlQXNEWXUxRSxNQTVJbEIsU0FBTjUxRSxHbkQ5Y2IsZ0JtRDhjNEIwSyxLQUFPLE9BQVBBLFFBQWYxSyxFQUE0QyxHQUE1Q0E7OztjQXVGWTs7ZUFBa0I7ZUFxRE40MUU7Z0JBMUlsQyxTQURVbHRFLEVBQUUxSSxHbkQvY2YsZ0JtRGdkWTBLLEtBQ1AsT0FET0EsUUFEQ2hDLE9BQUUxSSxFQUVtRDtrQkFGckQwSSxFQUFFb0k7OztjQXVGVTs7ZUFvRFk4a0U7Z0JBeElsQixTQUFMNTFFO21CbkRsZGQsZ0JtRGtkNEIwSyxLQUFPLGtCQUFQQSxXQUFkMUssR0FBYzBLLElBQXFCO2tCQUFuQ3FHOzs7Y0FxRlc7O2VBbURZNmtFO2dCQXZJbEIsU0FBTjUxRSxHbkRuZGIsZ0JtRG1kNEIwSyxJQUFJckssR0FBSyxRQUF4QkwsS0FBbUJLLEVBQUssUUFBd0I7a0JBQWhEdzFFOzs7Y0FxRlk7O2VBQWtCO2VBa0RORDtnQkF0SWhCLFNBQU5sMkUsRUFBRVcsR25EcGRqQixnQm1Eb2Q4QnFLLEtBQVEsa0JBQXZCaEwsRUFBRVcsRUFBd0I7a0JBQTFCWCxFQUFFNlo7OztjQXFGUTs7ZUFBa0I7ZUFpRE5xOEQ7Z0JBckloQixTQUFSbDJFLEVBQUVNO21CbkRyZGYsZ0JtRHFkOEIwSyxLQUFPLGtCQUF4QmhMLEVBQWlCZ0wsUUFBZjFLLEdBQWdEO2tCQUFsRHVpRCxJQUFFdXpCOzs7Y0FzRkE7O2VBQW1CO2VBQWtCO2VBK0NmRjtnQkFuSWxDLFNBRFVsMkUsRUFBRWdKLEVBQUUxSTttQm5EdGRqQixnQm1EdWRZMEs7cUJBQ1Asa0JBRlFoTCxFQUNEZ0wsUUFER2hDLE9BQUUxSSxHQUVxRDtrQkFGekR3aUQsSUFBRWwvQixJQUFFeXlEOzs7Y0F1RlE7O2VBQWtCO2VBNkNOSDtnQkFqSWhCLFNBQVBsMkUsRUFBRU07bUJuRHpkaEIsZ0JtRHlkOEIwSztxQkFBUyxrQkFBekJoTCxFQUF5QixXQUFUZ0wsV0FBZDFLLEdBQWMwSyxLQUF5QjtrQkFBekNnNEMsSUFBRXN6Qjs7O2NBc0ZEOztlQUFrQjtlQUFrQjtlQTJDZEo7Z0JBaElSLFNBQVJsMkUsRUFBRVcsRUFBRUM7bUJuRDFkekIsZ0JtRDBkc0NvSyxLQUFRLGtCQUF6QmhMLEVBQUVXLEVBQUVDLEVBQTBCO2tCQUE5QnVpRCxJQUFFRSxJQUFFemlEOzs7Y0F3RlY7O2VBQWtCO2VBQWtCO2VBd0NkczFFO2dCQS9IUixTQUFWbDJFLEVBQUVXLEVBQUVMO21CbkQzZHZCLGdCbUQyZHNDMEssS0FBTyxrQkFBMUJoTCxFQUFFVyxFQUFpQnFLLFFBQWYxSyxHQUFrRDtrQkFBdERvakQsSUFBRUYsSUFBRSt5Qjs7O2NBMEZSOztlQUFrQjtlQUFrQjtlQUFtQjtlQXFDakNMO2dCQTFIbEMsU0FEZ0JsMkUsRUFBRVcsRUFBRXFJLEVBQUUxSTttQm5EL2R6QixnQm1EZ2VZMEs7cUJBQ1Asa0JBRmNoTCxFQUFFVyxFQUNUcUssUUFEV2hDLE9BQUUxSSxHQUUrQztrQkFGckRzakQsSUFBRTR5QixJQUFFbGpELElBQUVtakQ7OztjQXlGVjs7ZUFBa0I7ZUFBa0I7ZUFrQ2RQO2dCQTlIVCxTQUFSbDJFLEVBQUVXLEVBQUVMO21CbkQ1ZHhCLGdCbUQ0ZHFDMEs7cUJBQVcsa0JBQTVCaEwsRUFBRVcsRUFBMEIsV0FBWHFLLFdBQWIxSyxHQUFhMEssS0FBMkI7a0JBQTVDNjRDLElBQUU2eUIsSUFBRUM7OztjQStGVDs7ZUFBa0I7ZUFBa0I7ZUErQmRUO2dCQTdIVixTQUFSbDJFLEVBQUVNLEVBQUVLO21CbkQ3ZHZCLGdCbUQ2ZG9DcUssS0FBTyxrQkFBeEJoTCxFQUFpQmdMLFFBQWYxSyxHQUFFSyxFQUFnRDtrQkFBcERtakQsSUFBRTh5QixJQUFFQzs7O2NBaUdSOztlQUFrQjtlQUFtQjtlQUFrQjtlQTRCakNYO2dCQXZIbEMsU0FEZ0JsMkUsRUFBRWdKLEVBQUUxSSxFQUFFSzttQm5EbGV6QixnQm1EbWVZcUs7cUJBQ1Asa0JBRmNoTCxFQUNQZ0wsUUFEU2hDLE9BQUUxSSxHQUFFSyxFQUUrQztrQkFGckRtMkUsSUFBRUMsSUFBRUMsS0FBRUM7OztjQStGVjs7ZUFBa0I7ZUFBa0I7ZUF5QmRmO2dCQTVIVCxTQUFSbDJFLEVBQUVNLEVBQUVLO21CbkQ5ZHhCLGdCbUQ4ZHFDcUs7cUJBQVMsa0JBQTFCaEwsRUFBMEIsV0FBVGdMLFdBQWYxSyxHQUFlMEssS0FBYnJLLEVBQXdDO2tCQUE1Q3UyRSxJQUFFQyxLQUFFQzs7O2NBc0dUOztlQUFrQjtlQXNCSWxCO2dCQXJIWCxTQUFONTFFLEVBQUVLO21CbkRyZXRCLGdCbURxZW1DcUs7cUJBQU8sa0JBQVBBLFdBQWYxSyxHQUFlMEssSUFBYnJLLEVBQStDO2tCQUFqRDAyRSxLQUFFQzs7O2NBaUdQOztlQUFrQjtlQW9CSXBCO2dCQW5IbEMsU0FEZTUxRSxFQUFFbXBCO21CbkR0ZXBCLGdCbUR1ZVl6ZTtxQkFBTyxrQkFBUEEsV0FETTFLLEdBQ04wSyxZQURReWUsR0FDaUQ7a0JBRG5EOHRELEtBQUU5dEQ7OztjQWtHTDs7ZUFBa0I7ZUFBa0I7ZUFrQmR5c0Q7Z0JBakhsQyxTQURlNTFFLEVBQUUwSSxFQUFFeWdCO21CbkR4ZXRCLGdCbUR5ZVl6ZTtxQkFBTyxrQkFBUEEsV0FETTFLLEdBQ04wSyxZQURRaEMsT0FBRXlnQixHQUVnRDtrQkFGcEQrdEQsS0FBRUMsSUFBRTVnRDs7O2NBbUdQOztlQUFrQjtlQWVJcS9DO2dCQTlHbEMsU0FEZ0I1MUUsRUFBRW1wQjttQm5EM2VyQixnQm1ENGVZemU7cUJBQWlDLG9CQUFqQ0EsV0FEU3llLEdBQ1R6ZTtxQkFBaUMsa0JBQWpDQSxXQURPMUssR0FDUDBLLFNBQWlEO2tCQUQxQzBzRSxLQUFFaGdEOzs7Y0FrR04sZ0JBQWtCO2NBQXlCLFVBVXpDNDVDO2NBVkY7ZUFhc0I0RTtnQkE1R2xDLFNBRGF6c0QsRUFBRTlvQjttQm5EN2VsQixnQm1EOGVZcUs7cUJBQU8seUNBRERySyxFQUFGOG9CLEtBQUU5b0IsRUFDeUM7a0JBRDNDZzNFLElBQUVDOzs7Y0FrR0gsZ0JBQWtCO2NBQXdCLFVBUXhDdEc7Y0FSRjtlQVdzQjRFO2dCQTFHbEMsU0FEV3pzRCxFQUFFbnBCO21CbkQvZWhCLGdCbURnZlkwSztxQkFDUCxTQURPQSxRQURJMUs7cUJBRVgsOENBRlNtcEIsVUFHbUI7a0JBSG5Cb3VELElBQUVDOzs7Y0FrR0QsZ0JBQWtCLFlBQWtCO2NBQzdCLFVBS0x4RztjQU5GO2VBU3NCNEU7Z0JBdEdsQyxTQURXenNELEVBQUV6Z0IsRUFBRTFJO21CbkRuZmxCLGdCbURvZlkwSztxQkFDUCxTQURPQSxRQURJaEMsT0FBRTFJO3FCQUViLDhDQUZTbXBCLFVBS3FCO2tCQUxyQnN1RCxJQUFFQyxJQUFFQzs7O2NBaUdILGdCQUFrQjtjQUF5QixVQUd6QzNHO2NBSEY7ZUFNc0I0RTtnQkFoR2xDLFNBRFl6c0QsRUFBRW5wQjttQm5EemZqQixnQm1EMGZZMEs7cUJBQ0csb0JBREhBLFdBREsxSyxHQUNMMEs7cUJBQ0csOENBRkF5ZSxVQUU2QztrQkFGN0N5dUQsSUFBRUM7O2VBaUdvQmpDLE1BTGhDRDtVQU1BLFdBSlkzRSxNQUdSRSxNQUE0QjBFO1VBQ2hDOztRQTFEWSxTQTREVjtJQXBlcUIsU0EyZXZCa0M7TUFDRixVQS9lRTVILGVBeUNBVyxnQkFDQUMsa0JBc2N1RDtJQTdlaEM7Ozs7T0E0Q3ZCQztPQTZGQThCO09BVUFFO09BWUFNO09BR0FDO09BakhBckM7T0FTQUU7T0FVQUk7T0FQQUY7T0FpYUFxRTtPQW5aQWhFO09BdUNBZTtPQW1EQWM7T0FsTEF0RDtPQWdNQXVEO09BYUFHO09BS0FDO09BWUFJO09BU0FJO09BT0FFOztPQU1BRztPQU9BQztPQWNBRztPQUtBRTtPQU9BQztPQW1FQUk7T0E5WkExRjtPQThqQkFvSTtJQTNldUI7OzthQ3RFdkJDLGVBQWV4RCxJQUFJeUQ7TUFDckI7Y0FEcUJBO09BRVYsc0JBRFA1c0U7T0FDTyxLQURQQTtPQUNPOztZQUNYNVA7UUFDRTtVQUEwQixJQWhDSTA4RSxNQWdDSixpQkFKUEYsUUFHckJ4OEU7VUE5QkEsVUFEZ0MwOEU7V0FDaEMsT0FEZ0NBOztjQUkzQjs7eUJBMkJMMThFOzJCQTNCYTZzRCxHQUFJaG9EO29CQUNtQixJQUF6QjgzRSxLQUxVRixTQStCckJ6OEU7b0JBMUJvQyxHQUR2QjZzRCxPQUNGOHZCLEtBRUYsb0NBcUJRNUQ7b0JBbkJSLGtCQUpFNEQsS0FETTkzRSxFQUtIO3lCQUxEZ29EO2VBQVIsUUEyQkw3c0Q7ZUE5Qkl1VSxLQUdTczRDOzs7Y0FRUixJQUFRdm1EO2NBT1I7Z0JBUFFBOztpQkFBUixTQUFRQSxFQW1CYnRHO29CcER0REg7c0JvRHFDNkIsSUFBYmlkLElBZFF3L0QsU0ErQnJCejhFO3NCQWpCMEIsR0FGYnNHLE1BRUEyVyxJQUVGLG9DQVlNODdEO3NCQWRTLFNBSWYsYUFKRTk3RDtzQkFJRjsrQkFKRUE7NENoQ1ZYeE0saUJnQ1VXd007bUJBRkEzVyxFQW1CYnRHO2NBbkJLLElBWER1VSxLQVdTak87O3lCQVhUaU8sS0FvQlUsWUFPR3drRTs7V0EzQmpCLFNBRGdDMkQ7WUF1QjNCLFVBdkIyQkEsU0FDNUJub0UsS0FzQlUsZUFLR3drRSxJQU5ONkQ7O1lBRUksTUF4QmlCRixTQUM1Qm5vRSxLQXVCTW5RO1VBRVYsU0FLQXBFLEtBOUJJdVU7VUErQndCLFNBRDVCdlU7OztNQUdBLE9BbENxQnk4RSxJQWtDakI7YUFFRkksU0FBUzlELElBQUkyRDtNQUNmLFVBRGVBO1FBR1osSUFETUUsTUFGTUYsU0FHWixzQkFIUTNELElBRUY2RDtNQUVGLCtDQUFpRDthQWlCdERFLGlCQUFpQk4sUUFBTTFzRSxFQUFFdEw7TXBEaEY5QixTb0RpRlcsYUFEbUJBLE1BQVJnNEUsc0JBQVFoNEU7UUFFM0IsU0FGbUJnNEUsMkJBRW5COzs7VUFDRTtZQUErQixRQUhOaDRFLE1BRTNCeEUsR0FDdUIsdUJBSEp3OEUsUUFFbkJ4OEU7WUFoQkEsVUFEOEIwOEU7YUFDOUIsU0FEOEJBOzt3QkFPbkIsYUFQeUJwbkU7aUJBUXhCLE9BT2F4RixNQUV6QjlQLEdBUkdzVTtpQkFDRTswQkFERkEsS0FUaUNnQixRQVNqQ2hCO21CQUNFLFNBREZBOzs7OztlNUNzY0c7O2M0QzVjSCxNQWNIdFUsS0FqQm9Dc1Y7O2FBQ3BDLFNBRDhCb25FO2VBYTNCLElBRE1FLE1BWnFCRixTQWFKLGlCQURqQkUsTUFHZ0I5c0UsTUFFekI5UCxHQWpCb0NzVjtZQWtCSCxTQURqQ3RWOzs7O21DQUVJO2FBRUZnOUUsV0FBV04sTUFBTTVzRSxFQUFFdEw7TUFDckIsVUFEYWs0RTtRQUdWLElBRE1FLE1BRklGLFNBR1Ysd0JBRE1FLE1BRlU5c0UsRUFBRXRMO01BSWQsK0NBQW1EOzJCQS9CeERxNEUsU0EyQkFHOztJQzFEaUI7O2VBQWpCQztLQUFpQjthQUtqQkc7TUFBa0IsWUFMbEJILGVBS2tCLHNCQUFxQztJQUx0QyxTQU9qQkksTUFBTWoyRTtNQUNSLHdCQU5FODFFLGNBQ0FDO1FBTWdCLElBQVpHLFVBQVksc0JBTmhCSDtRQU9BLEtBUkFELFlBT0lJLFlBTkpIO1FBT0EsWUFESUc7TUFJTixlQVhFSixVQUNBQyxVQUlNLzFFO01BTVI7Y0FDVztJQWRRLFNBZ0JqQm0yRTtNQUNNLElBQUo3NEUsRUFBSSxXQWZOdzRFLFlBQ0FDO01BY00sWUFqQk5GO01BaUJNLE9BQUp2NEUsQ0FBcUU7SUFqQnRELFNBcUJqQjg0RSxXQUFXQztNQUNHLElBQVpDLFVBQVk7TUFDaEI7aUJBQWVoNUUsR0FBSyxvQ0FEaEJnNUUsVUFDV2g1RSxRQUFvQztRQUZ0Qys0RTtNQUViLFNBQ0lFLGlCQUFpQnJ1RTtRQUNuQjtVQUFJLHNDQUhGb3VFLFVBRWlCcHVFOzs7Z0NBRUosVUFGSUE7VUFERCxXQUdLO01BSHpCLFNBSUlzdUUsaUJBQWlCeDJFO1FBQ1gsSUFBSjFDLEVBQUksU0FEVzBDO1FBQ1g7VUFDSixzQ0FQRnMyRSxVQU1FaDVFOzs7Z0NBRStCLHlDQUYvQkE7VUFISixXQUs4RDtNQVBoRSxTQXNJSW01RSxRQVdtQjErQztRckRwTTFCO1FxRDBMSztVQUFNLGlCQVVlQTtVQVZmOzs7OztnQkFDUSxLQVNPQTtnQkFKZixtQkFJZUE7Z0JBSmY7d0NBQ1EsS0FHT0EsTUFIK0IsUUFHL0JBO2tCQUZULEtBRVNBOztnQkFEZDs7O2dCQVBPLEtBUU9BO2dCQUNyQjtrQkFBTSxtQkFEZUE7a0JBQ2Y7O29DQUNRLEtBRk9BLE1BRVA7b0NBQ0EsS0FIT0E7b0JBSVQsS0FKU0E7O2tCQUtkO1lBWkssS0FPU0E7O1VBTmQsZ0JBQW9CO01BM0k3QixTQTJHSTIrQyxPQUFRMytDO1FBQ0osaUJBRElBO1FBQ0o7Ozs7OztzQkFDUSxLQUZKQSxNQUVJO3NCQUNBLEtBSEpBLE1BR0k7c0JBQ0EsS0FKSkEsTUFJSTs7OzthQUVWLEtBTk1BO2FBT00sbUJBUE5BO2FBT007OztpQkFFUixLQVRFQTtpQkFVVSxtQkFWVkE7aUJBVVU7OztxQkFFUixLQVpGQTtxQkFZRTs7Ozs7Ozs7OztpQkFJRzthQUVKO1VBRUMsS0FwQkZBO1VBb0JFO1FBQ0wsZUFBb0I7TUFoSTdCLFNBaUZJNCtDLGtCQUFtQjUrQztRQUNyQjtVQUFNLGlCQURlQTtVQUNmOzt3Q0FFRixLQUhpQkEsTUFHcUI7VUFDUyxrQ0FBZixpQkFBaUI7TUFyRnZELFNBNEVJNitDLGNBQWU3K0M7UUFDWCxpQkFEV0E7UUFDWDs7O1U3Q2daRjtZNkM5WUEsS0FIYUEsTUFHeUIscUNBSHpCQTtRQUlWLHlCQUpVQSxLQUljO01BaEZqQyxTQTRESTgrQyxPQWMwQnY1RTtRQWI1QjtVQUFNLGlCQWFzQkE7VUFidEI7Ozs7O2M3Q2dhRixhNkMxWkEsS0FPd0JBLEdBUGMsK0JBT2RBOzs7Z0JBVHhCLEtBU3dCQTtnQkFUYztnQkFLMUM7a0JBQU0sbUJBSXNCQTtrQkFKdEI7OztrREFFRixLQUV3QkEsR0FGYzs7O3VCQUV0QyxLQUF3QkEsR0FBYywrQkFBZEE7a0JBQ3VCLGtDQUFmOzZCQVpoQyxLQVd3QkEsR0FYYztVQUtLLGdDQUFmLGlCQUFpQjtNQXBFbkQsU0ErQ0l3NUUsT0FBUS8rQztRQUNWO1VBQU0saUJBRElBO1VBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZN0M2YUYsYTZDemFBLEtBTE1BLE1BS2dDO1VBQzlCLDJCQUFrQixnQkFBZ0I7TUFyRGhELFNBc0RJZy9DLFdBSU16NUU7UUFIRixpQkFHRUE7UUFIRjs7O1lBRUYsS0FDSUEsR0FBYyxnQkFBaUIsVUFBVywwQkFBMUNBO1FBQ2lCO1FBQWlCO3NCQURsQ0EsRUFDcUQ7TUEzRC9ELFNBeUNJdStCLE1BQU85RDtRQUNUO1VBQU0saUJBREdBO1VBQ0g7Ozs7Ozs7Ozs7Ozs7WTdDbWJGLGE2Q2hiQSxLQUpLQSxNQUlpQztVQUM5QiwyQkFBa0IsZ0JBQWdCO01BOUNoRCxTQVNRaS9DLHFCQXlGRWovQztRQXhGUjtVQUFNLGlCQXdGRUE7VUF4RkY7Ozs7Ozs7Ozs7Ozs7b0JBeUJGLEtBK0RJQTtvQkE5RGM7b0JBbUR0QjtzQkFBTSxtQkFXRUE7c0JBWEY7O3dDQUNTLEtBVVBBLG1CQVZPOzswQkFFWCxLQVFJQTswQkFSSjs0QkFFTSxJQURGbGdCLElBQ0UsT0FNRmtnQjs7O2tEQUxrQjs7OzBCQUVKLE1BSmRsZ0I7O3dCQUtJLEtBRUprZ0I7d0JBRjBDOztzQkFDM0M7O29CQXhFSCxLQXlFSUE7b0JBekVKO3NCQTBFRSxtQkFERUE7c0JBQ0YsYUFPQztzQkFQRDs7d0JBRUYsS0FISUE7d0JBR0o7MEJBQ1UsZ0JBSk5BOzs7Z0RBS2dCOzBCQUdqQjs0QkFoRkMvM0I7O3dCQStFSSxLQVBKKzNCLFVBeEVBLzNCOzs7NENBRWtCOztvQkFFVixtQkFvRVIrM0I7O3NCQW5FVyxLQW1FWEEsTUFuRVcsYUFMWC8zQjtvQkFNRzs7b0JBTUcsS0E0RE4rM0I7b0JBNURNOzs2QkEyRlprL0Msd0JBL0JNbC9DO2tEQStCTmsvQyxpQkEvQk1sL0M7MkJBN0RNLEtBNkROQSxNQTdETSxrQkE2RE5BOzs7Ozs7MkJBdEZKLEtBc0ZJQTs7Ozs7Ozs7Ozs7b0JBNUVKLEtBNEVJQSxNQTNFYyxnQkFBaUIsMEJBMkUvQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1k3QzJYSjtxQjZDdGJRLEtBMkRKQSxNQTNENkI7O2VBekJqQyxLQW9GSUEsTUFuRmMsZ0JBQWlCLHlCQW1GL0JBOztlQS9FSixLQStFSUEsTUE5RWMsZ0JBQWlCLDBCQThFL0JBO1VBMURELFNBQUk7TUF4Q2IsU0FpSUlrL0Msc0JBQWVsL0M7UUFDWCxpQkFEV0E7O1VBR2IsS0FIYUE7VUFHeUIsUUFIekJBO1VBR3lCO2lEQTNIcENpL0MsdUJBd0hXai9DO3dDQXhIWGkvQyxnQkF3SFdqL0M7UUFJTCwrQkFBc0I7TUFySXBDLFNBU1FtL0MsV0F5RkVuL0MsTXJEckpiLHVCcUQ0RFdpL0MsZUF5RkVqL0M7TUFsR1YsZ0JBd0pJMzJCO1FBQVMscUJBQWlCNDFCLE9BQVUsa0JBQXBDNTFCLE1BQW9ELEVBQUM7SUEvS3RDLHFCQXFCakJnMUU7SUFyQmlCO0lDc0VGO010RGxHcEIsSXNEb0lTdnFCLHlCdERwSVQ7ZXNEc0lTdGpELE9BQVM2Z0IsSUFBcUM0aUM7UUFDaEQsR0FEVzVpQztTQUFTLFFBQVRBLGNBQVNDOzthQUFUNGlDLE9BQVM7WUFQQXh1RDtRQUNwQjtVQUNLLE1BSzJDdXVELGdCQVA1QnZ1RDtZQUdmLFFBSGVBO2FBT1R3dUQ7V0FFZTs4QkFKeEJKO1lBSXdCLGtCQUp4QkEscUJsQ3pHSnhpRCxpQmtDeUdJd2lEO1lBSUUvQyxLQUFzQjs7ZUFBdEJBO1VBQzhDLDJCQVY5QnJyRCxLQVNoQnFyRCxLQVRnQnJyRCxHQVVrRDtlQUVwRXEzQixNQUFNMVE7UUFDUjtnQkFEUUEsZ0JBQ1IsS0FDSXpqQixZQURKOztjQUVBL0g7VUFDRTs2QkFKTXdyQixLQUdSeHJCO1lBQ0UsU0FERkE7OztnQkFFSTtlQUVGMmdDLE1BQU1uVjtRQUNSLElBQUl6akIsSUFESXlqQjtRQUNSLE9BQUl6akIsUUFESXlqQjtpQkFHTixNQUhNQTtrQ0FNSSxlQU5KQSxVQU9MO2VBRURpckMsS0FBS2xpRDtRQUFJLFNBQUpBLFFBQUksS0FBSkEsUUFBb0IsWUFBcEJBO1FBQW9CLFVBQXBCQSx1QkFBdUM7ZUFFNUNxaEQsVUFBVXBxQyxFQUFFK3lELE1BQ2QsT0FEY0EsUUFBRi95RCx3QkFDdUI7ZUFFakNnekQsTUFBTWh6RDtRQUNSLFNBQVFtcEM7VXREaktmO1VzRGlLMkI7O2tDQUdMejBELGdCQUFIa0g7Y0FBa0IsbUJBQWxCQTtvQkFHTWpILGtCQUFIOGU7Z0JBQ0ssZUFETEEsSUFDSyxVQURGOWU7Y0FGWixPQUxFcXJCOzBCQUlPdHJCOztZQURULFNBSzZCO1FBUG5DLE1BRFFzckIsS0FDUixLQVNJbFAscUJBVEo7O2NBVUF0YztVQUNFO1lBQVMsbUJBQVUsaUJBRmpCc2MsRUFDSnRjO1lBQ0UsaUJBRkVzYyxFQUNKdGM7WUFDVyxTQURYQTs7O2dCQUVJO2VBc0JGNGdDLE9BQU9wVjtRQUNULFVBRFNBLEtBQ1QsTUFBSXdvQyxpQkFBSixNQUNJUztRQUVKLE1BSlNqcEM7UUFDVDtTQUdBLEtBREkwb0M7U0FDSixXQUZJTyxvQkFGS2pwQztRQUtxRDtVQUNoRCxJQUFSeW9DLE1BQVEsZUFIVkM7VUFHVSxPQUFSRDtVQUFROzs7Y0FFWTtvQkFFSC96RCxjQUFOcTZCLGNBQU5na0Q7Z0JBQ0gsY0FEZXIrRTtnQkFFSjtnQ0FaVnNyQixFQVVFK3lEO2lCQUc4QixRQUg5QkEsS0FBTWhrRCxLQUd3QixpQkFQbkMwNUIsTUFNTUk7Z0JBQ0osaUJBUEZKLE1BTU1JO2dCQUNKO2NBSk8sUUFJdUM7V0FQeEMsS0FKVkk7V0FJVTs7Z0JBUVp6MEQ7WUFDRTs0QkFBYyxpQkFkZGcwRCxNQWFGaDBEO2NBQ0UsU0FERkE7OztVQVJZOzs7UUF4Q00sV0FtRGpCO2VBRUQ4MUIsSUFBSXRLLEVBQUUrNUIsSUFBSXQyQztRQUNEOzhCQURMdWMsS0FBRSs1QjtTQUVBLFlBRkYvNUIsRUFDRit5RDtTQUVZLDBCQUhSaDVCLElBQUl0MkM7U0FJdUIsVUFIL0JzdkUsS0FFQUcsVUFDK0IsaUJBSjdCbHpELEtBRUZ4ckI7UUFHSixpQkFMTXdyQixLQUVGeHJCLFlBRUE2MUQ7UUFDSixPQUxNcnFDO1FBQ0ssU0FETEE7UUFLTixZQUUyQyxPQVByQ0EsT0FPNkM7ZUFFakRzTCxPQUFPdEwsRUFBRSs1QjtRQUNBLElBQVBnNUIsS0FBTyxnQkFERi95RCxLQUFFKzVCO1FBQ0EsU0FDSG81QjtVdERqT2Y7VXNEaU8rQjs7a0JBRWZDLGNBQU9sdEUsZ0JBQUh0SztpQkFIVG0zRSxTQUdLSztnQkFDUywwQkFETHgzRSxFQUpGbStDO2dCQUtPO3lCQUNELE9BTlIvNUIsYUFNUSxPQUZEOVo7eUJBR2MsVUFIckJrdEUsR0FBSXgzRSxFQUdpQixjQUhkc0s7MEJBT04sT0FYRDhaLHlCQUlPOVo7a0JBVUZnaUQsa0JBQUZ6MEM7Y0FBdUIsVUFWMUIyL0QsR0FVRzMvRCxJQUF1QixjQUFyQnkwQztZQVhELFNBV3lDO1FBQzlDO3FCQWZDbG9DLEVBQ0wreUQ7U0FlVSxtQkFBYyxpQkFoQm5CL3lELEtBZUx4ckI7UUFDSixpQkFoQlN3ckIsS0FlTHhyQjtRQUNKLFFBQXNDO2VBMEJwQ3dULEtBQUtnWSxFQUFFKzVCO1FBQ0U7OEJBREovNUIsS0FBRSs1QjtTQUdrQixlQUhwQi81QixFQXBCWSt5RDtTQXVCRCx5QkFIWC95RDs7OztnQkFqQkFvekQsWUFBTzErRSxjQUFIa0g7ZUFIUW0zRSxTQUdaSztjQUNTLDBCQURMeDNFLEVBaUJGbStDO2NBaEJPOztpQkFFSSw0QkFIVG4rQztpQkFHUyxZQUtBLElBQUxrVixhQUFLLE9BQUxBO2lCQUxLLFVBSE5wYzs7OztZQWVWLDJCQURTNGM7O1VBZlQsZ0JBcUJ5QztlQXNCM0M4YixTQUFTcE4sRUFBRSs1QjtRQUNGOzhCQURBLzVCLEtBQUUrNUI7U0FHa0IsZUFIcEIvNUIsRUFwQlkreUQ7U0F1QkQseUJBSFgveUQ7Ozs7Z0JBakJKb3pELFlBQU8xK0UsY0FBSGtIO2VBSFltM0UsU0FHaEJLO2NBQ1MsMEJBREx4M0UsRUFpQkVtK0M7Y0FoQkc7O2lCQUVJLElBS1ZqcEMsRUFMVSxnQkFIVGxWO2lCQUdTLEdBS1ZrVixFQUFlLE9BQWZBO2lCQUxVLFVBSE5wYzs7OztZQWVWLDJCQURTNGM7O1VBZlQsU0FxQjZDO2VBRS9DdTVDLFNBQVM3cUMsRUFBRSs1QjtRQUNGLElBQVBnNUIsS0FBTyxnQkFEQS95RCxLQUFFKzVCO1FBQ0YsU0FDSCtRO1V0RHpTZjtVc0R5U2dDOztrQkFFbEJzb0IsY0FBTzErRSxnQkFBSGtIO2lCQUhQbTNFLFNBR0dLO2dCQUNTLDBCQURMeDNFLEVBSkVtK0M7Z0JBS0c7O21CQUNXLDRCQUZoQm4rQzttQkFFZ0I7cUJBR1AsSUFBTGtWLGFBQVEsVUFBUkEsRUFBUSxlQUxUcGM7bUJBRWEsWUFGYkE7Ozs7Y0FZViwrQkFEUzBtQjs7WUFaRixTQWFZO1FBQ0EsbUJBakJaNEUsRUFDUCt5RDtRQWdCVyx1Q0FqQkoveUQscUJBaUI2QjtlQUd0QytxQyxRQUFRL3FDLEVBQUUrNUIsSUFBSXQyQztRQUNMLElBQVBzdkUsS0FBTyxnQkFERC95RCxLQUFFKzVCO1FBQ0QsU0FDSHM1QjtVdEQ3VGY7VXNENlRnQzs7a0JBRWhCRCxjQUFPbHRFLGdCQUFIdEs7aUJBSFRtM0UsU0FHS0s7Z0JBQ1MsMEJBREx4M0UsRUFKRG0rQztnQkFLTSxzQkFERjd6QztnQkFFQyx1QkFGSnRLLEVBSkRtK0MsSUFBSXQyQztjQVNNLCtCQUFUMlg7O1lBTkEsZ0JBTTRCO1FBRWpDLGdCQVhFNEUsRUFDTit5RCxNQVdJLG1CQVpFL3lELEtBV054ckI7UUFDSTtVQUVOLHdCQUZFc0c7Ozs7WUFJYyxJQUFabzRFLFVBQVksZ0JBaEJObjVCLElBQUl0MkM7WUFpQmQsaUJBakJRdWMsS0FXTnhyQixlQVZBdStFLEtBZUVHLFVBSkZwNEU7WUFLRixPQWpCUWtsQjtZQWdCUSxTQWhCUkE7WUFpQlIsWUFFMkMsT0FuQm5DQTtVQWxCZSxXQXFDNEI7ZUFFbkRxTCxJQUFJckwsRUFBRSs1QjtRQUNHOzhCQURMLzVCLEtBQUUrNUI7U0FXYyxlQVhoQi81QixFQUNGK3lEO1NBVVUseUJBWFIveUQ7O1FBRWtCOztnQkFHakJvekQsWUFBTzErRSxjQUFIa0g7ZUFBSnczRSxPQUpITDtjQUtZLDBCQURMbjNFLEVBTEhtK0M7Y0FNUSxvQkFERnJsRDtjQUVDO1lBR1UsMkJBQVQ0Yzs7VUFOWixTQU9tQztlQUVyQ3ZFLE9BQUtyVSxFQUFFc25CO1FBQ1QsUUFEU0EsS0FDVCxLQVFJMUMsdUJBUko7O2NBU0E5b0I7O1VBQ0U7WUFBVSw2QkFGUjhvQixJQUNKOW9CO1lBVG9COztnQkFJRjtpQkFESEU7aUJBQUhrSDtpQkFDTSxzQkFETkE7aUJBQ21CLHdCQURuQkE7OztzQkFHU2tWLGFBQVIyZSxXQUFhLFdBUG5CLzJCLEVBT00rMkIsRUFBUTNlO2dCQUZILFVBREhwYzs7dUJBTWZGOzs7O1FBckJ3QixRQXVCcEI7ZUFFRnNOLEtBQUtwSixFQUFFc25CLEVBQUVqWDtRQUNYLFFBRFNpWCxLQUNULFVBRFdqWCxNQUNYLEtBVUl1VSx1QkFWSjs7Y0FZQTlvQjs7VUFDRTs7a0JBRkVvVDthQUVnQixxQkFIaEIwVixJQUVKOW9CO2FBWmtCZ0c7YUFBRW9EO1lBQ2xCO2lCQURnQnBEO2dCQUtXO2lCQURkOUYsS0FKRzhGO2lCQUlOb0IsRUFKTXBCO2lCQUtXLHNCQURqQm9CO2lCQUM4Qix3QkFEOUJBOzs7c0JBR1drVixhQUFSMmUsV0FQSzN4QixPQU9RLFdBUnJCcEYsRUFRUSsyQixFQUFRM2UsRUFQSGxUOztnQjlDb0tsQixrQjhDcEtrQkU7Z0JBS1MsSUFMWHRELEVBSUg5RixLQUpLa0o7O2NBV2hCZ0ssWUFYZ0JoSzt1QkFZcEJwSjs7OztRQUdBLE9BSklvVCxTQUlDO2VBRUgwaEQsbUJBQW1CNXdELEVBQUVzbkI7UUFDdkIsU0FBUW1wQztVdEQ5WGY7VXNEOFgyQjs7Y0FJUjtlQURJejBEO2VBQUhrSDtlQUFKdzNFO2VBQ0csc0JBREN4M0U7ZUFDWSx3QkFEWkE7O2dCQUtHLElBREtrVixhQUFSMmUsV0FDRyxtQkFUSy8yQixFQVFSKzJCLEVBQVEzZTtnQkFDTDtrQkFJRixJQURHd2lFO2tCQUNILGdCQVREMTNFLEVBSUE2ekIsRUFJSTZqRDtrQkFFUyxVQVZqQkYsR0FBSXgzRSxFQVVhLFVBVlZsSDtnQkFLQSxZQUxBQTs7Y0FDSixZQURJQTs7WUFEVixTQVdtQztRQWJ6QyxNQUR1QnNyQixLQUN2QixLQWVJbFAscUJBZko7O2NBZ0JBdGM7VUFDRTtZQUFTLG1CQUFVLGlCQUZqQnNjLEVBQ0p0YztZQUNFLGlCQUZFc2MsRUFDSnRjO1lBQ1csU0FEWEE7OztnQkFFSTtlQUVGNFAsT0FBTzRiLEdBQUksT0FBSkEsSUFBVTtlQUVieXBDOzs7O1lBRWdCOzs7O3FCQUFUcnVDOztVQURGO2VBR1RzdUMsTUFBTTFwQztRQUNSO2NBRFFBO1NBQ1I7U0FDRTs7cUJBQXFCbUMsRUFBRTNuQixHQUFlLGFBQWpCMm5CLEVBQWlCLGdCQUFmM25CLEdBQWtDO1NBQy9DLHFCQUZSbXZEO1NBRVEsS0FISjNwQztRQUlSO21CQUNPeGxCO1lBQ007K0JBRE5BO2FBRVcsc0JBSmRvdkQsTUFHSzl1RDtZQUNKLGlCQUpEOHVELE1BR0s5dUQ7WUFDSixRQUEwQjs7UUFIL0IsVUFKUWtsQixxQkFDSjJwQyxJQUVBQyxNQVN3QjtlQUV0QjJwQjs7OztnQkFFTzcrRSxnQkFBSGtIO1lBQWMsbUJBQWRBO2NBQ04sZ0RBRFNsSDtZQUVTLCtCQUFUMG1COztVQUhGO2VBS1RvNEQsWUFBWXh6RDtRQUNkOztjQURjQTtTQUNkO1NBRUU7O3FCQUNPbUMsRUFBRTNuQixHQUFlLGFBQWpCMm5CLEVBQWlCLHNCQUFmM25CLEdBQXdDO1NBRXZDLHFCQUpSbXZEO1NBSVEsS0FORTNwQztRQU9kO21CQUNPeGxCO1lBQ00sSUFBSk0sRUFBSSxzQkFETk47WUFDTSxVQVJUNjJDLFVBUUt2MkM7WUFBSSxTQUVLLGlCQUxkOHVELE1BR0s5dUQ7WUFFSixpQkFMRDh1RCxNQUdLOXVEO1lBRUosUUFBMEI7O1FBSi9CLFVBTkl1MkMsUUFEVXJ4QixnQkFFVjJwQyxJQUlBQyxNQVV3QjtlQUUxQm44QyxPQUFPbVg7UUFHVCxJQUFJa2xDLFNBSEtsbEM7UUFHVCxTQUVRM1EsSUFBSXpmLEVBQUV1MUQ7Y0FBRmh2RCxNQUFFaXZEO1VBQVU7ZUFBVkE7Y0FNSTtlQURGOWpELEtBTEY4akQ7ZUFLRHB1RCxFQUxDb3VEO2VBTUksc0JBRExwdUQ7ZUFDa0Isd0JBRGxCQTs7b0JBR1ltekIsZ0JBQVZnckI7Z0JBQ29COzJCQURwQkEsSUFBVWhyQjt1Q3REM2NoQyxPc0RtY2U5YSxJQUFJbFosSUFLSW1MO2NBQ0UsSUFOSjhqRCxPQUtFOWpEOztZQUhWLEdBRk1uTCxRQUZSK3VELG9CQUtPO1lBQ1M7cUNBTmhCQSxTQUVRL3VEO2FBSVEsSUFKUkE7O2FBQUVpdkQ7cUJBVUw7UUFaVDs4QnREamNQLE9zRG1jZS8xQyxvQkFZRztlQUVUaTJDLFlBQVkvbkM7UUFBZ0IsZ0JBQWhCQTtRQUFnQixvQnREamRyQztRc0RpZHFDLHNCdERqZHJDLE9zQm1DUzdiLHNCZ0M4YXNDO2VBRXRDNmpELGNBQWNob0M7UUFBZ0IsZ0JBQWhCQTtRQUFnQixvQnREbmR2QztRc0RtZHVDLHNCdERuZHZDLE9zQm1DUzdiLHNCZ0NnYndDO2VBRXhDNm5CLFFBQVF2SixJQUFJcHdCO1FBQ2Q7O21CQUFTLHFDQURDb3dCLElBQ0s2SyxFQUFFNzJCLEVBQWtCO2lCQURyQnBFLEVBQ3VCO2VBRW5DdzJELFlBQVlwbUMsSUFBSXB3QjtRQUNsQjs7bUJBQVMseUNBREtvd0IsSUFDQzZLLEVBQUU3MkIsRUFBc0I7aUJBRHJCcEUsRUFDdUI7ZUFFdkM0NUIsT0FBTzU1QixHQUNDLElBQU5vd0IsSUFBTSxhQUNWLFlBRElBLElBREtwd0IsR0FFVCxPQURJb3dCLEdBRUQ7O2NBeFZEemdCO2NBS0F1c0I7Y0FPQXlFO2NBU0E4MUI7Y0EyREEzZ0M7Y0FTQWdCO2NBMENBdGpCO2NBeUJBb2xCO2NBS0F5OUI7Y0FvQkFFO2NBcUJBMS9CO2NBYUF0ZTtjQWdDQXU4QztjQWxCQXhuRDtjQXVDQXNDO2NBTUFzbEQ7Y0FzQ0FqOEM7Y0FtQkF5OEM7Y0FFQUM7Y0FFQWg4QjtjQUdBNjhCO2NBR0E1OEI7Y0EzVEE0a0Q7Y0E0UUFRO0lBMVVXLFNBK1liQyxnQkFBd0IsMkJBQWU7SUEvWTFCLFNBK2JUQyxVQTlDS2x1RSxHQUFtQyx5QkFBbkNBLElBQXVEO0lBalpuRCxTQWtaYm11RSxlQUFjbnVFLEdBQW1DLHlCQUFuQ0EsSUFBNEQ7SUFsWjdELFNBbVpib3VFLFVBQVNwdUUsRUFBY2lxQixHQUFlLHlCQUE3QmpxQixJQUFjaXFCLEVBQThDO0lBblp4RCxTQW9aYm9rRCxZQUFXcnVFLEdBQXNCLHlCQUF0QkEsSUFBMEM7SUFwWnhDLFNBcVpic3VFLFlBQVd0dUUsR0FBc0IseUJBQXRCQSxJQUEwQztJQXJaeEMsU0F1WmJ1dUUsV0FBVW5oRSxHQUFlRixJQUMzQix5QkFEWUUsS0FBZUYsT0FDQTtJQXhaWixTQTBaYnNoRSxXQUFVeHVFLEdBQW1DLHlCQUFuQ0EsRUFBc0Q7SUExWm5ELFNBMlpieXVFLGNBQWV6dUUsR0FBbUMsMEJBQW5DQSxFQUEyRDtJQTNaN0QsU0E0WmIwdUUsU0FBVTF1RSxFQUFjc0wsR0FBZSwwQkFBN0J0TCxFQUFjc0wsRUFBNkM7SUE1WnhELFNBNlpicWpFLFdBQVkzdUUsR0FBc0IsMEJBQXRCQSxFQUF5QztJQTdaeEMsU0E4WmI0dUUsV0FBWTV1RSxHQUFzQiwwQkFBdEJBLEVBQXlDO0lBOVp4QyxTQStaYjZ1RSxVQUFXemhFLEdBQWNGLElBQXNCLDBCQUFwQ0UsR0FBY0YsR0FBNEM7SUEvWnhELFNBaWFiNGhFLE9BQUt2NkIsSUFBSWhyQjtNQUNELElBQU53bEQsSUFBTSxZQUNWLFNBRElBLElBRE94bEQsTUFHWCxVQUZJd2xELElBREd4NkIsS0FHUCxPQUZJdzZCLEdBR0Q7SUFyYVksU0F1YWJDLE1BQU1ELElBQUl4NkI7TUFDTixvQkFERXc2QjtNQUNGLFVBRVEsSUFBUDlrRCxXQUFPLE9BQVBBLE1BSEtzcUIsSUFHYyxXQUhsQnc2QjtNQUVFLFFBRU07SUEzYUQ7ZUFpYlRwd0UsT0FBT3NyQixFQUFFM2U7UUFDSCxJQUFKbFYsRUFBSSxZQUNSLFNBRElBLEVBRE9rVixHQUdYLFVBRklsVixFQURLNnpCLEdBR1QsT0FGSTd6QixDQUdIO1VBQ0NnVjtlQUNBN08sTUFBTW5HLEVBQUU2ekI7UUFHSixvQkFIRTd6QjtRQUdGLFVBR0YsSUFERzA3QixhQUNBLHVCQU5HN0gsRUFLSDZIO1FBREcsUUFFMEQ7ZUFHbEVtOUMsYUFBYTc0RSxFQUFFNnpCLEVBQUUzZTtRQUNuQixXQURlbFYsR0FFZixVQUZlQSxFQUFFNnpCLEdBRWpCLGdCQUZlN3pCLEVBQUlrVixFQUdQOzs7Z0JBbEJWM007Z0JBS0F5TTtnQkFDQTdPO2dCQTdCSml5RTtnQkFxQ0lOO2dCQUNBZTtnQkEzQ0pYO0lBclphO010RGxHcEIsSXNENmlCYS94RTtlQUNBNk8sS0FBTTh6QyxLQUFZcnJELEdBQUksdUJBQUpBLEVBQVk7OytCQUQ5QjBJLE1BQ0E2TztPQXZoQlY4ZjtPQUNBeUU7T0FDQTgxQjtPQUNBM2dDO09BQ0FnQjtPQUNBdGpCO09BQ0FvbEI7T0FDQXk5QjtPQUNBRTtPQUNBMS9CO09BQ0FydkI7T0FFQXN0RDtPQUVBeG5EO09BRUFzQztPQUNBc2xEO09BQ0FqOEM7T0FFQXk4QztPQUVBQztPQUVBaDhCO09BQ0E2OEI7T0FFQWdvQjtPQUNBUTs7ZUE2Zk1ydkUsT0FBTyttRCxJQUFLLDRCQUFMQSxHQUE0QjtlQUNuQzk4QixPQUFPNTVCO1FBQ0MsSUFBTm93QixJQUFNLFdBQ1YsV0FuZ0JKb21DLFlBa2dCUXBtQyxJQURLcHdCLEdBRVQsT0FESW93QixHQUVEOztjQUpEemdCO2NBemhCTnVzQjtjQUNBeUU7Y0FDQTgxQjtjQUNBM2dDO2NBQ0FnQjtjQUNBdGpCO2NBQ0FvbEI7Y0FDQXk5QjtjQUNBRTtjQUNBMS9CO2NBQ0FydkI7Y0FFQXN0RDtjQUVBeG5EO2NBRUFzQztjQUNBc2xEO2NBQ0FqOEM7Y0FFQXk4QztjQUVBQztjQUVBaDhCO2NBQ0E2OEI7Y0FpZ0JNNThCO2NBL2ZONGtEO2NBQ0FRO0lBK0NpQixTQXlkWGtCLGNBQVUsWUFBTTtJQXpkTCxTQTBkWEMsTUFBSW42RSxFQUFFaTFCLEVBQUUzZSxHQUFJLFNBQVJ0VyxLQUFhLGlCQUFYaTFCLEVBQUUzZSxTQUFTLFFBQWlCO0lBMWR2QixTQTRkWDhqRSxTQUFTbmxELEVBQUUvdEI7TUFDUCxvQkFET0E7TUFDUCxVQUNRLElBQVBySSxXQUFPLEdBQVBBLE1BRklvMkIsRUFFYTtNQUNqQixRQUFLO0lBL2RDLFNBaWVYb2xELFNBQU9yNkUsRUFBRWkxQjtVQUNFMzBCLEVBREpOLEtBQ01zTTtNQUNiO1dBRFdoTTtjQUdUa2xCLEVBSFNsbEIsS0FHSjBLLEVBSEkxSztVQUdHLFlBSkwyMEIsRUFJUHpQLElBQWlDLGtCQUh0QmxaLElBR050QixHQUE0QjtjQUh4QmlNLFNBQUUxSyxTQUdYaVosRUFIV2xaLEtBQUZoTSxNQUFFZ007O1FBRUwsU0FJQTtJQXhlRyxTQTBlWGd1RSxPQUFLdDZFLEVBQUVpMUI7TUFDVDtZQURPajFCO09BQ0QsOEJ0RDdrQmIsT3NEOGpCU282RSxTQWNPbmxEO01BQ0gsVUFDTSxJQUFML3RCLFdBQUssa0JBQUxBO01BQ0csUUFBSTtJQTdlRCxTQStlWHF6RSxTQUFPdjZFLEdBQUksZ0JBQUpBLEtBQWtCO0lBL2VkLFNBZ2ZYdzZFLFFBQU14NkUsR0FBSSxpQkFBTztJQWhmTixTQXlmYnk2RSxnQkFBNkIsMkJBQWU7SUF6Zi9CLFNBMmZiQyxTQUFVMXZFLEdBQXlDLHlCQUF6Q0EsSUFBNkQ7SUEzZjFELFNBNGZiMnZFLGNBQWUzdkUsR0FDVCx5QkFEU0EsSUFDZ0I7SUE3ZmxCLFNBOGZiNHZFLFNBQVU1dkUsRUFBbUJpcUIsR0FDL0IseUJBRFlqcUIsSUFBbUJpcUIsRUFDQTtJQS9maEIsU0FnZ0JiNGxELFdBQVk3dkUsR0FBMkIseUJBQTNCQSxJQUErQztJQWhnQjlDLFNBaWdCYjh2RSxXQUFZOXZFLEdBQTJCLHlCQUEzQkEsSUFBK0M7SUFqZ0I5QyxTQW1nQmIrdkUsU0FBVS92RSxHQUF5Qyx5QkFBekNBLElBQTZEO0lBbmdCMUQsU0FvZ0JiZ3dFLGNBQWVod0UsR0FDVCx5QkFEU0EsSUFDZ0I7SUFyZ0JsQixTQXNnQmJpd0UsU0FBVWp3RSxFQUFtQmlxQixHQUMvQix5QkFEWWpxQixJQUFtQmlxQixFQUNBO0lBdmdCaEIsU0F3Z0JiaW1ELFdBQVlsd0UsR0FBMkIseUJBQTNCQSxJQUErQztJQXhnQjlDLFNBeWdCYm13RSxXQUFZbndFLEdBQTJCLHlCQUEzQkEsSUFBK0M7SUF6Z0I5QyxTQTRnQmJvd0UsVUFBV2hqRSxHQUFpQkYsSUFDOUIseUJBRGFFLEtBQWlCRixPQUNIO0lBN2dCWixTQThnQmJtakUsVUFBV2pqRSxHQUFpQkYsSUFDOUIseUJBRGFFLEtBQWlCRixPQUNIO0lBL2dCWixTQWdoQmJvakUsV0FBWWxqRSxHQUFtQkYsSUFDakMseUJBRGNFLEtBQW1CRixPQUNOO0lBamhCWixTQW1oQmJxakUsV0FBVXZ3RSxHQUF3Qyx5QkFBeENBLEVBQTJEO0lBbmhCeEQsU0FvaEJid3dFLGdCQUFleHdFLEdBQ1QsMEJBRFNBLEVBQ2U7SUFyaEJqQixTQXNoQmJ5d0UsV0FBVXp3RSxFQUFtQnNMLEdBQy9CLDBCQURZdEwsRUFBbUJzTCxFQUNEO0lBdmhCZixTQXdoQmJvbEUsYUFBWTF3RSxHQUEyQiwwQkFBM0JBLEVBQThDO0lBeGhCN0MsU0F5aEJiMndFLGFBQVkzd0UsR0FBMkIsMEJBQTNCQSxFQUE4QztJQXpoQjdDLFNBMGhCYjR3RSxZQUFXeGpFLEdBQWdCRixJQUF3QiwwQkFBeENFLEdBQWdCRixHQUE4QztJQTFoQjVELFNBNGhCYjJqRSxPQUFLQyxLQUFLQyxLQUFLeG5EO01BQ1AsSUFBTndsRCxJQUFNO01BQ1YsV0FESUEsSUFEYXhsRDtNQUdqQixTQUZJd2xELElBREcrQjtNQUlQLFNBSEkvQixJQURRZ0M7TUFJWixPQUhJaEMsR0FLRDtJQWxpQlksU0FvaUJiaUMsUUFBTWpDLElBQUkrQixLQUFLQztNQUNYLG1CQURFaEM7TUFDRjtRQUVRLElBQVA5a0Q7UUFBTyxHQUFQQSxNQUhLNm1EO1VBSUkscUJBSlIvQjtVQUlRO1lBRUUsSUFBUGo5QyxlQUFPLE9BQVBBLFFBTk1pL0MsS0FNYyxXQU52QmhDO1VBS007UUFJRjtNQVBGLFFBT007SUE3aUJEO2VBcWpCVHB3RSxhQUFlMk07UUFDVCxJQURLMDVDLFlBQUhGLFlBQ0Y7UUFDUixXQURJMXVELEVBRGFrVjtRQUdqQixTQUZJbFYsRUFETTB1RDtRQUdLLFNBRlgxdUQsRUFEUzR1RDtRQUdFLE9BRlg1dUQ7ZUFJRmdWLEtBQUs4ekM7UUFDVztTQURGOEY7U0FBSEY7U0FDSyxzQkFEWDVGLEtBQVM4RjtRQUNoQix3QkFETzlGLEtBQU00RjtlQUVYdm9ELE1BQU1uRztRQUNGLElBRFE0dUQsWUFBSEYsWUFDTCxlQURFMXVELEdBQ1UsaUJBRFZBOztjQUdTNjZFLGdCQUFWQztVQUNtQixHQUFuQixpQkFKSXBzQixHQUdKb3NCLFNBQ21CLGlCQUpabHNCLEdBR0dpc0IsTUFFUjtVQUF3QjtRQUhUO2VBS3RCanlFLFFBQVE1STtRQUNKLG1CQURJQSxHQUNRLGlCQURSQTs7Y0FHTzR1RCxjQUFWRiw0QkFBVUU7UUFETyxRQUNlO2VBQ3JDaXFCLGFBQWE3NEUsUUFBVWtWO1lBQUowNUMsWUFBSEY7UUFDbEIsYUFEZTF1RDtRQUVmLFNBRmVBLEVBQUcwdUQ7UUFFSCxTQUZBMXVELEVBQU00dUQ7UUFFTixrQkFGQTV1RCxFQUFVa1Y7ZUFJdkJsTSxVQUFVaEo7UUFBSSxvQkFBSkEsR0FBSSxZQWxFbEIrNUUsV0FrRWMvNUUsT0FBZ0M7O2tCQXRCMUN1SSxPQUtBeU0sS0FFQTdPLE1BekNKZzBFLFdBZ0RJdnhFLFFBSUFpd0UsYUFJQTd2RTtJQTNrQlM7TXREbEdwQixJc0QyckJlN0M7ZUFDQTZPLEtBQU04ekMsS0FBWXJyRCxHQUFJLHdCQUFKQSxFQUFhO1VBTi9Cb1Asc0JBS0ExRyxNQUNBNk87ZUFMQW1PLE9BQU0ybEMsS0FBWXJyRCxHQUFJLHdCQUFKQSxFQUFhOzsrQkFEL0JvUCxRQUNBc1c7T0FocUJaMlI7T0FDQXlFO09BQ0E4MUI7T0FDQTNnQztPQUNBZ0I7T0FDQXRqQjtPQUNBb2xCO09BQ0F5OUI7T0FDQUU7T0FDQTEvQjtPQUNBcnZCO09BRUFzdEQ7T0FFQXhuRDtPQUVBc0M7T0FDQXNsRDtPQUNBajhDO09BRUF5OEM7T0FFQUM7T0FFQWg4QjtPQUNBNjhCO09BRUFnb0I7T0FDQVE7O2VBMm9CTXJ2RSxPQUFPK21ELElBQUssNEJBQUxBLEdBQTRCO2VBQ25DOThCLE9BQU81NUI7UUFDQyxJQUFOb3dCLElBQU0sV0FDVixXQWpwQkpvbUMsWUFncEJRcG1DLElBREtwd0IsR0FFVCxPQURJb3dCLEdBRUQ7O2NBSkR6Z0I7Y0F2cUJOdXNCO2NBQ0F5RTtjQUNBODFCO2NBQ0EzZ0M7Y0FDQWdCO2NBQ0F0akI7Y0FDQW9sQjtjQUNBeTlCO2NBQ0FFO2NBQ0ExL0I7Y0FDQXJ2QjtjQUVBc3REO2NBRUF4bkQ7Y0FFQXNDO2NBQ0FzbEQ7Y0FDQWo4QztjQUVBeThDO2NBRUFDO2NBRUFoOEI7Y0FDQTY4QjtjQStvQk01OEI7Y0E3b0JONGtEO2NBQ0FRO0lBK0NpQixTQXVtQlhtRCxjQUFVLFlBQU07SUF2bUJMLFNBd21CWEMsTUFBSXA4RSxFQUFFOHZELEdBQUdFLEdBQUcxNUM7TUFBSSxTQUFadFcsS0FBaUIsaUJBQWY4dkQsR0FBR0UsR0FBRzE1QyxTQUFTLFFBQXFCO0lBeG1CL0IsU0EwbUJYK2xFLFVBQVV2c0IsR0FBR0UsR0FBRzlvRDtNQUNaLG1CQURZQSxHQUNBLGlCQURBQTs7WUFFRnFSLGNBQVRDLHNCQUZLczNDLE1BRUl2M0MsT0FGRHkzQyxHQUVpQztNQUN6QyxRQUFLO0lBN21CQyxTQSttQlhzc0IsU0FBT3Q4RSxFQUFFOHZELEdBQUdFO1VBQ0QxdkQsRUFESk4sS0FDTXNNO01BQ2I7V0FEV2hNO2NBR1RrbEIsRUFIU2xsQixLQUdKMEssRUFISTFLO1VBR0csYUFKTHd2RCxHQUFHRSxHQUlWeHFDLElBQXNDLGtCQUgzQmxaLElBR050QixHQUFpQztjQUg3QmlNLFNBQUUxSyxTQUdYaVosRUFIV2xaLEtBQUZoTSxNQUFFZ007O1FBRUwsU0FJQTtJQXRuQkcsU0F3bkJYaXdFLE9BQUt2OEUsRUFBRTh2RCxHQUFHRTtNQUNaO1lBRE9od0Q7T0FDRCw4QnREM3RCYixPc0Q0c0JTcThFLFVBY092c0IsR0FBR0U7TUFDTixVQUNNLElBQUw5b0QsV0FBSyxrQkFBTEE7TUFDRyxRQUFJO0lBM25CRCxTQTZuQlhzMUUsU0FBT3g4RSxHQUFJLGdCQUFKQSxLQUFrQjtJQTduQmQsU0E4bkJYeThFLFFBQU16OEUsR0FBSSxpQkFBTztJQTluQk4sU0F1b0JiMDhFLFNBQU9sK0UsR0FBZ0IseUJBQWhCQSxFQUErQjtJQXZvQnpCLFNBd29CYm0rRSxTQUFRMW5ELEdBQXFCLHlCQUFyQkEsRUFBb0M7SUF4b0IvQixTQTBvQmIybkQsVUFBUzV4RSxFQUFjeE0sR0FBNkIseUJBQTNDd00sRUFBY3hNLEVBQWlEO0lBMW9CM0QsU0Eyb0JicStFLGVBQWM3eEUsRUFBY3hNLEdBQ3RCLHlCQURRd00sRUFBY3hNLEVBQ0c7SUE1b0JsQixTQTZvQmJzK0UsVUFBUzl4RSxFQUFjeE0sRUFBUXkyQixHQUNqQyx5QkFEV2pxQixFQUFjeE0sRUFBUXkyQixFQUNGO0lBOW9CaEIsU0Erb0JiOG5ELFlBQVcveEUsRUFBY3hNLEdBQWdCLHlCQUE5QndNLEVBQWN4TSxFQUFvQztJQS9vQmhELFNBZ3BCYncrRSxZQUFXaHlFLEVBQWN4TSxHQUFnQix5QkFBOUJ3TSxFQUFjeE0sRUFBb0M7SUFocEJoRCxTQWtwQmJ5K0UsV0FBVTdrRSxHQUFlOU4sR0FBUzROLEdBQWUzTixHQUFTaks7TUFDNUQseUJBRFk4WCxHQUFlOU4sR0FBUzROLEdBQWUzTixHQUFTakssRUFDL0I7SUFucEJkLFNBcXBCYjQ4RSxXQUFVbHlFLEdBQW1DLHlCQUFuQ0EsRUFBc0Q7SUFycEJuRCxTQXNwQmJteUUsZ0JBQWVueUUsR0FBbUMsMEJBQW5DQSxFQUEyRDtJQXRwQjdELFNBdXBCYm95RSxXQUFVcHlFLEVBQWNzTCxHQUFlLDBCQUE3QnRMLEVBQWNzTCxFQUE2QztJQXZwQnhELFNBd3BCYittRSxhQUFZcnlFLEdBQXNCLDBCQUF0QkEsRUFBeUM7SUF4cEJ4QyxTQXlwQmJzeUUsYUFBWXR5RSxHQUFzQiwwQkFBdEJBLEVBQXlDO0lBenBCeEMsU0EwcEJidXlFLFlBQVdubEUsR0FBY0YsSUFBc0IsMEJBQXBDRSxHQUFjRixHQUE0QztJQTFwQnhELFNBNHBCYnNsRSxPQUFLN0osS0FBS3AvQztNQUNaLE1BRE9vL0MsZ0JBRUcsYUFETnJ6RTtNQUVKLFdBREl5NUUsSUFGUXhsRDtNQUNaLElBRUEsS0FGSWowQixVQUVKOztZQUNBdEc7UUFBc0I7b0JBRmxCKy9FLElBRUovL0UsRUFBb0MsaUJBSjdCMjVFLEtBSVAzNUU7VUFBc0IsU0FBdEJBOzs7TUFDQSxPQUhJKy9FLEdBR0Q7SUFqcUJZLFNBbXFCYjBELFFBQU0xRCxJQUFJcEc7TUFDSixJQUFKcnpFLEVBQUksU0FEQXk1RTtNQUNBO1dBQUp6NUUsTUFEUXF6RSxnQkFHcUI7UUFDL0IsU0FIRXJ6RSxVQUdGOzs7VUFDRTtZQUFNLG9CQUxGeTVFLElBSU4vL0U7WUFDUSxXQUNJO1lBREosSUFFQ2k3QjtZQUFZLEdBQVpBLE1BQVksaUJBUFgwK0MsS0FJVjM1RSxVQUljO1lBSE4sU0FEUkE7OztpQkFNQSxXQVZNKy9FOzs7MERBV0ssb0JBQUk7SUE5cUJGO2VBb3JCVHB3RSxPQUFPc3JCLEVBQUUzZTtRQUNILElBQUpsVixFQUFJLFNBREM2ekI7UUFFVCxXQURJN3pCLEVBRE9rVjtRQUNILElBQ1IsS0FGUzJlLHFCQUVUOztjQUNBajdCO1VBQ0U7c0JBSEVvSCxFQUVKcEgsRUFDYyxpQkFKTGk3QixFQUdUajdCO1lBQ0UsU0FERkE7OztRQUdBLE9BTElvSCxDQUtIO2VBQ0NnVixLQUFLOHpDLEtBQUtqMUI7UUFDWixpQkFEWUEscUJBQ1o7O2NBQ0FqN0I7VUFDRTtxQkFGRXdyQixLQUVlLHNCQUhQeVAsRUFFWmo3QjtZQUNPLHdCQUhBa3dEO1lBR0wsU0FERmx3RDs7O1FBR0EsT0FKSXdyQixJQUlGO2VBQ0FqZSxNQUtzQm5HLEVBQUY2ekI7UUFKdEIsUUFJc0JBLGFBSFgsZUFHYTd6QjtRQUhiLEdBRFBXLFFBQ0FhLE1BQ2dCO1FBRnBCLElBSUUsSUFKRWIsWUFJc0IvSDtRQUN0QjtrQkFEc0JBO1lBR2Qsb0JBSFlvSCxFQUFFcEg7WUFHZDtjQUdGLGdCQUFXLHNCQU5DaTdCLEVBQUlqN0I7Y0FNYix3QkFEQTBqRixLQUVFLFFBUFcxakY7Y0FRWDtZQUpDO1VBSEUsU0FTTztlQUV2QmdRLFFBQVE1STtRQUNBLElBQU5XLElBQU0sU0FEQVg7UUFDQSxTQUFOVyxJQUNZO1FBRE4sVUFHRixVQUpFWDtRQUlGO1VBR0YsZ0JBU1EsaUJBZlZXLElBS0s0N0UsSUFVSyxJQWZWNTdFLFlBTWlCL0g7VUFDYjtvQkFEYUE7Y0FHTCxzQkFWTm9ILEVBT1dwSDtjQUdMO2dCQUdGLElBREcwakY7Z0JBQ0gsaUJBTktqOEUsRUFBRXpILFlBS0owakY7Z0JBQ0gsUUFOTzFqRjs7Y0FJRDtZQUhFLFVBREh5SDtRQUZQLFFBWVE7ZUFDbEJ3NEUsYUFBYTc0RSxFQUFFNnpCLEVBQUUzZTtRQUNuQixhQURlbFY7UUFDZixTQURpQjZ6QixxQkFDakI7O2NBQ0FqN0I7VUFDRTtzQkFIYW9ILEVBRWZwSCxFQUNjLGlCQUhHaTdCLEVBRWpCajdCO1lBQ0UsU0FERkE7OztRQUdBLGtCQUxlb0gsRUFBSWtWLEVBS1A7ZUFDVmxNLFVBQVVoSjtRQUdILGlCQUhHQSxXQUNJcEg7UUFDZDttQkFEY0E7VUFDZDs7O1lBQVUscUJBRkFvSCxFQUNJcEg7WUFDSixhQURJdUc7WUFDSjtVQURaLFlBRXNCOztrQkF6RHBCb0osT0FPQXlNLEtBTUE3TyxNQTVDSjIxRSxXQTZESWx6RSxRQWtCQWl3RSxhQU1BN3ZFO0lBMXVCUztNdERsR3BCLElzRHMxQmE3QztlQUNBNk8sS0FBTTh6QyxLQUFZcnJELEdBQUksdUJBQUpBLEVBQVk7OytCQUQ5QjBJLE1BQ0E2TztPQWgwQlY4ZjtPQUNBeUU7T0FDQTgxQjtPQUNBM2dDO09BQ0FnQjtPQUNBdGpCO09BQ0FvbEI7T0FDQXk5QjtPQUNBRTtPQUNBMS9CO09BQ0FydkI7T0FFQXN0RDtPQUVBeG5EO09BRUFzQztPQUNBc2xEO09BQ0FqOEM7T0FFQXk4QztPQUVBQztPQUVBaDhCO09BQ0E2OEI7T0FFQWdvQjtPQUNBUTs7ZUFzeUJNcnZFLE9BQU8rbUQsSUFBSyw0QkFBTEEsR0FBNEI7ZUFDbkM5OEIsT0FBTzU1QjtRQUNDLElBQU5vd0IsSUFBTSxXQUNWLFdBNXlCSm9tQyxZQTJ5QlFwbUMsSUFES3B3QixHQUVULE9BRElvd0IsR0FFRDs7Y0FKRHpnQjtjQWwwQk51c0I7Y0FDQXlFO2NBQ0E4MUI7Y0FDQTNnQztjQUNBZ0I7Y0FDQXRqQjtjQUNBb2xCO2NBQ0F5OUI7Y0FDQUU7Y0FDQTEvQjtjQUNBcnZCO2NBRUFzdEQ7Y0FFQXhuRDtjQUVBc0M7Y0FDQXNsRDtjQUNBajhDO2NBRUF5OEM7Y0FFQUM7Y0FFQWg4QjtjQUNBNjhCO2NBMHlCTTU4QjtjQXh5Qk40a0Q7Y0FDQVE7SUErQ2lCLFNBa3dCWDRFLGNBQVUsWUFBTTtJQWx3QkwsU0Ftd0JYQyxNQUFJNzlFLEVBQUVpMUIsRUFBRTNlLEdBQUksU0FBUnRXLEtBQWEsaUJBQVhpMUIsRUFBRTNlLFNBQVMsUUFBaUI7SUFud0J2QixTQXF3Qlh3bkUsWUFBVTdvRCxFQUFFL3RCO01BQ2Q7UUFDSyxZQUZTQSxPQUFGK3RCLGFBRXlCO1FBQ25DLFNBSFVBLHFCQUdWOzs7VUFDRTtZQUFNLG9CQUpJL3RCLEVBR1psTjtZQUNRO2NBQ1EsSUFBUDZFO2NBQVksR0FBWkEsTUFBWSxpQkFMWG8yQixFQUdWajdCOzs7O1k5QzFWQSxjOEM2VlM7O1FBSFQ7OzswREFNVyxvQkFBSztJQTl3QkwsU0FneEJYK2pGLFNBQU8vOUUsRUFBRWkxQjtVQUNFMzBCLEVBREpOLEtBQ01zTTtNQUNiO1dBRFdoTTtjQUdUa2xCLEVBSFNsbEIsS0FHSjBLLEVBSEkxSztVQUdHLGVBSkwyMEIsRUFJUHpQLElBQWtDLGtCQUh2QmxaLElBR050QixHQUE2QjtjQUh6QmlNLFNBQUUxSyxTQUdYaVosRUFIV2xaLEtBQUZoTSxNQUFFZ007O1FBRUwsU0FJQTtJQXZ4QkcsU0F5eEJYMHhFLE9BQUtoK0UsRUFBRWkxQjtNQUNUO1lBRE9qMUI7T0FDRCw4QnRENTNCYixPc0R1MkJTODlFLFlBb0JPN29EO01BQ0gsVUFDTSxJQUFML3RCLFdBQUssa0JBQUxBO01BQ0csUUFBSTtJQTV4QkQsU0E4eEJYKzJFLFVBQU9qK0UsR0FBSSxnQkFBSkEsS0FBa0I7SUE5eEJkLFNBK3hCWGsrRSxRQUFNbCtFLEdBQUksaUJBQU87SUEveEJOOzs7O1FBK1liaTVFO1FBZ0RJQztRQTdDSkM7UUFDQUM7UUFDQUM7UUFDQUM7UUFFQUM7UUFHQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFFQUM7UUFNQUU7OztXQWtERUUsT0FDQUMsTUFPQUUsU0FTQUMsT0FLQUMsU0FDQUM7O1FBU0ZDO1FBRUFDO1FBQ0FDO1FBRUFDO1FBRUFDO1FBQ0FDO1FBRUFDO1FBQ0FDO1FBRUFDO1FBRUFDO1FBQ0FDO1FBR0FDO1FBRUFDO1FBRUFDO1FBR0FDO1FBQ0FDO1FBRUFDO1FBRUFDO1FBQ0FDO1FBQ0FDO1FBRUFDO1FBUUFHOzs7V0FtRUVHLE9BQ0FDLE1BT0FFLFNBU0FDLE9BS0FDLFNBQ0FDOztRQVNGQztRQUdBRTtRQUNBQztRQUVBQztRQUVBQztRQUNBQztRQUVBQztRQUdBQztRQUNBQztRQUNBQztRQUNBQztRQUNBQztRQUNBQztRQUVBQztRQU9BQzs7O1dBK0ZFRyxPQUNBQyxNQWFBRSxTQVNBQyxPQUtBQyxVQUNBQzs7O1V0RGo0QlQ7O0lzRGtHb0I7YWhEOURmQyxpQkFBaUJDLFdBQVdsbEYsaUJBQWlCaUk7TUFVNUMscUJBVjRDQSxjQVcxQyxPQVh5QmpJO01BWXpCLDhCQVowQ2lJLGNBQzlCM0M7TUFDZjtnQkFEZUE7VUFFUCxjQUhTNC9FLFdBQTRCajlFLEtBQzlCM0MsSUFFZ0IsUUFGaEJBO1VBR1YsTUFIVUEsVUFJSitRLElBSkkvUTtVQUtmO29CQURXK1E7Y0FFSCxjQVBTNnVFLFdBQTRCajlFLEtBS2xDb087ZUFFb0IsYUFQY3BPLEtBS2xDb08sYUFBRWpDLElBQUZpQztjQUdOLFFBSE1BOztZQUNHLGFBTitCcE8sT0FLaENtTTtRQUhDLGFBRitCbk0sVUFZVDthQU1wQ2s5RSxnQkFBZ0JELFdBQVdsbEYsaUJBQWlCaUk7TUFjM0MscUJBZDJDQSxjQWV6QyxPQWZ3QmpJO01BZ0J4Qiw4QkFoQnlDaUksY0FDekIzQztNQUNuQjtnQkFEbUJBO1VBRVgsY0FIUTQvRSxXQUE0Qmo5RSxLQUN6QjNDLElBRVksUUFGWkE7Y0FJWitRLElBSlkvUTtVQUtuQjtvQkFETytRO2NBRUMsY0FQUTZ1RSxXQUE0Qmo5RSxLQUtyQ29PO29CQUlZK2tFLElBSlova0U7Z0JBS1A7MEJBRG1CK2tFO29CQUVYLGNBWFE4SixXQUE0Qmo5RSxLQVN6Qm16RTtzQkFFWSxRQUZaQTtvQkFHZCxhQVp1Q256RSxPQVN6Qm16RTtrQkFDTCxhQVY4Qm56RTtjQVF2QyxRQUhFb087O1lBQ08sT0FOYXJXO1FBRWIsYUFGOEJpSSxVQWdCSjthQTBCdENpOUUsV0FBVzEvRSxFQUFFMUUsR0FBSSw4QkFBTjBFLEVBQUUxRSxNQUFlO2FBQzVCc2tGLFlBQVk5L0U7TUFBSTtrQ0FBSkE7T0FBSSxxQkFBdUIsZ0JBQTNCQTtpQkFBdUM7YUFDbkQrL0UsWUFBWS8vRTtNQUNkLHFCQURjQTtNQUNkOztvQ0FEY0E7c0JBRTZCLHFCQUFoQixNQUZiQTtRQUVxQzs7cUNBRnJDQTt1QkFHNkIscUJBQWhCLE1BSGJBOzs7OztNQUdzQyxXQUFDO2FBQ25EZ2dGLGFBQWFyOUUsS0FBS3M5RSxNQUNwQixtQkFEb0JBLEtBQUx0OUUsS0FDbUI7YUFFaEN1OUUsZ0JBQWlCbmpFLE9BQU84dEM7TUFDMUI7bUNBRG1COXRDO09BQ25CLDRCQUQwQjh0QztNQUMxQixHQUFJaHVDLFNBQWlDc2pFO1FBRTNCLElBQUp0Z0YsRUFBSSxNQUhnQmdyRCxTQUNXczFCLFFBQWpDdGpFO1FBR0MseUJBRENoZCxFQUhha2Q7b0JBS1YsTUFMaUI4dEMsV0FDV3MxQixRQUFqQ3RqRTs7TUFRRixRQUFJOztNQUdGOzs7OztJQUNNLFNBNkpSdWpFLE1BblF1QmxnRjtNQUMzQiw0QkFEMkJBLEdBRW5CLFdBREo0QjtNQUVKLFNBRElOO01BREosSUFFQSxLQUZJTSxVQUVKOztZQUNBdEc7UUFDRTtVQUFHLDBCQUxzQjBFLEVBSTNCMUU7V0FFTyxXQUpIZ0csRUFGWTNHOztXQU9ULFNBTEgyRyxFQUtzQixnQkFQQ3RCLEVBSTNCMUU7VUFHK0IsU0FIL0JBOzs7TUFLQSxTQVBJZ0c7TUFPSixnQkFQSUE7SUFvR1EsU0E4SlI2K0UsY0E3SmNyeEQsSUFBSzNzQixNQUFPQyxPQUFRQyxPQUFPbWpEO01BQzNDLEdBRG9DbmpEO09BSVE7VUFKUkE7UUFJVyxnQkFKWEEsT0FBUkQsZ0JBTXFCLFVBQVEsTUFGbEI1Qzs7OztTQUpYNEM7T0FHZ0IsUUFIaEJBLGVBR2dCLFlBQU8sTUFBWmlnRDs7O01BQXJDO1NBSG1CbGdEO09BRXVCLFFBRnZCQSxjQUV1QixZQUFPLE1BQVptZ0Q7OztNQUNyQyxTQURBO01BREYsNEJBQWtCLE1BMkpoQjQ5QixTQTVKY3B4RCxJQUEyQjAyQixhQU1zQjtJQUNwRCxTQUFYNDZCO01OOUhQLE9Nb0NLWCxpQkE0REVDLFdBSEFsbEY7SUFrQ1UsU0FBVjZsRjtNTi9IUCxPTXNES1YsZ0JBMENFRCxXQUhBbGxGO0lBa0NVOzs7T0FuQ1ZEO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FnbEY7T0FDQUU7T0FDQUM7T0FJQUM7T0FHQUU7O09BMEtBRTtPQUNBQztPQXRKQUM7T0FDQUM7SUFBVSxTQVFWQyxhQUFXdGdGLEVBQUUxRTtNQUFZLHNCQUFkMEUsRUFBRTFFLEdBQVksWUFBSm9IO01BQUk7Ozt1QkFBSkE7aUJBQTJDO0lBUnRELFNBU1Y2OUUsY0FBWXpnRjtNQUNkO2tDQURjQTtPQUNkLHFCQUF3QixnQkFEVkE7Ozs7OEJBRWEsZ0JBRmJBOzs7OytCQUdhLGdCQUhiQTs7Ozs7aUJBRzBCO0lBWjVCLFNBYVYwZ0YsY0FBWTFnRjtNQUNkLHVCQURjQTtNQUNkOztvQ0FEY0E7c0JBRTZCLHFCQUFoQixNQUZiQTtRQUVxQzs7c0NBRnJDQTt3QkFHNkIscUJBQWhCLE1BSGJBO1VBR3NDOzt3Q0FIdENBOzBCQUk2QixxQkFBaEIsTUFKYkE7WUFJc0M7O3lDQUp0Q0E7MkJBSzZCLHFCQUFoQixNQUxiQTs7Ozs7Ozs7O01BS3VDLFdBQUM7SUFsQjFDLFNBbUJWMmdGLGVBQWFoK0UsS0FBS3M5RTtNQUNyQiwrQkFEcUJBLFNBQ3JCLHNCQURnQnQ5RTtNQUNoQjtPQUNTOzs7V0FGT0E7K0RBQUtzOUU7O1FBSU8sdUJBSlBBO2FBSUksa0JBQXhCLGtCQUZJLy9FOzs7TUFQSixXQVN1RDtJQXZCM0MsU0F5QlYwZ0Ysa0JBQWlCN2pFLE9BQU84dEM7TUFDMUI7bUNBRG1COXRDO09BQ25CLDRCQUQwQjh0QztNQUMxQixHQUFJaHVDLFNBQWlDc2pFO1FBRTNCO2lCQUhnQnQxQixTQUNXczFCLFFBQWpDdGpFO1NBRzRCLHVCQUpiRTtRQUlVLHlCQUF4QixrQkFEQ2xkO29CQUVHLE1BTGlCZ3JELFdBQ1dzMUIsUUFBakN0akU7O01BUUYsUUFBSTtJQWxDTTtNQXNDUixtQ0FERmdrRTs7Ozs7YUFFQUMsUUFBTTVnRjtNQUNSLDRCQURRQSxHQUVBLFdBREo0QjtNQUVKLFNBRElOO01BQ0osU0FpQkl1L0UsT0FBTy9nRjtRQUFJO2NBQUpBO2NBQUk4UDtVQUFtQjtxQkFsQjlCdE87WUFrQjhCLFNBQW5Cc087ZUFBSjlQLE1BQUk4UDs7UUFuQmYsUUFtQjhEO01BakI5RCxTQUNRa3hFLGVBQUt4bEY7UU4xS2xCLElNMEtrQnVHO1FBQ1g7YUFEV0EsUUFIVEQsRUFJWSxnQkFIWk47VUFJSSxJQUdKb0IsRUFISSxnQkFOQTFDLEVBSUs2QjtVQUVMLFVBR0phO1lBRlE7OztxQkFHUnErRSx1QkFOU2wvRTswQ0FNVGsvRSxnQkFOU2wvRTtvQkFLVGE7WUFEUTs7O3FCQUVScStFLHVCQU5TbC9FOzBDQU1Uay9FLGdCQU5TbC9FO1VBS0QsU0FQUlAsRUFPQW9CO1VBSEksSUFHSSxJQUxDYjttQkFLK0I7TUFONUMsU0FPSWsvRSxnQkFBUWpoRixFQUFFeEU7WUFBRnNWLE1BQUUvTztRQUNaO2FBRFlBLFFBVFZELEdBV0EsU0FWQU4sTUFVQSxjQUZRc1A7VUFLRiwwQkFmRjVRLEVBVU02QjtVQUtKO1lBQ0ksWUFORitPO1lBTWtCLFNBZDFCdFA7WUFjMEIsU0FOaEJPO1lBTWdCO21EQVp0QmkvRTs7O1lBYU0sUUFQQWovRSxZQU9BLElBUEYrTyxvQkFBRS9PO1VBUUEsT0FSRitPO1VBUUU7aURBZE5rd0UsaUJBTU1qL0U7d0NBTk5pL0UsVUFNTWovRSxNQVNUO01BaEJMLFNBQ1FxaUQsS0FBSzVvRCxHTjFLbEIsdUJNMEthd2xGLFNBQUt4bEY7TUFrQmI7c0JBcEJJZ0csRUFxQmE7YUFnQ2YwL0UsbUJBQW1CeGhGO01BQ1EsS0FBMUIsV0FEa0JBLFdBQ1EsV0FEUkE7T0FHYixrQkFIYUEsTUFJWixnQkFKWUE7TUFFVixtREFGVUEsR0FNbEI7YUFJRHloRixnQkFBY255RCxJQUFLM3NCLE1BQU9DLE9BQVFDLE9BQU9takQ7TUFDM0MsR0FEb0NuakQ7T0FTQTtVQVRBQTtRQVNHO29CQVRIQSxPQUFSRDs7V0FXYSxZQUFRLG1CQUhWNUM7Ozs7O1NBUlg0QztPQU9nQixRQVBoQkEsZUFPZ0IsWUFBTyxtQkFBWmlnRDs7OztTQVBsQmxnRDtPQU11QixRQU52QkEsY0FNdUIsWUFBTyxtQkFBWm1nRDs7O01BRDNCOzBCQUFtQixNQXRFN0JzK0IsUUFpRXlDcDdCO09BcEJuQyxXQUFSLHNCQURZeGxEOztNQUVaO2lCQUNPMEM7VU5yTlo7VU1zTlMsU0FER0E7Ozs7Ozs7Ozs7Ozs7VUUyVEgsaUJGeFRJLFNBTEpwQixNQUtJLFNBTEpBLEVBRUdvQixJQUtDLFNBUEpwQixFQUVHb0IsRUFLb0I7UUFSZjFDO01BMEJBLHVCQXhCWixTQURJc0I7TUF1QkYseURBSGN3dEIsWUFhZjthQU9Db3lELGVBQWVsaEY7TUFMakIsb0NBS2lCQTtNQUxqQjtRQUlrQywwQkFDakJBO1FBTEQ7Ozs7UUFJa0IsSUVzUjlCLG1DRnRSdUMsZ0JBQzFCQTs7OztRQUVPLGVBRlBBLElBRVosc0JBRllBO1FBRVgsZ0JBRldBO01BR1osa0JBSFlBLEVBR0w7YUFDVm1oRixVQUFRbmhGO01BQ1U7NEJBRFZBO09BQ1U7O09BQ1Ysb0JBMUhSc2dGLGFBSEF6bEYsbUJBNEhVdW1GO01BQ0YsV0FETEMsTUFDREMsSUFDTzthQUNUQyxXQUFTdmhGO01BQ1UseUJBRFZBLEdBQ1U7OEJBN0huQnNnRixhQUhBemxGLG1CQWdJV3VtRixLQUNvQzs7OztPQWxJL0N4bUY7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQXVsRjtPQUNBQztPQUlBQztPQU1BQztPQU1BQztPQVlBQztPQUVBQztPQWlFQUs7T0E0QkFNO09BSkFKO0lBc0JXLFNBQVhLO01OclJQLE9Nb0NLL0IsaUJBbUdFYSxhQW1JQXJsRjtJQVlVLFNBQVZ3bUY7TU50UlAsT01zREs5QixnQkFpRkVXLGFBbUlBcmxGO0lBWVU7OztPQWJWRDtPQUNBQztPQUNBQztPQUNBQztPQXJJQW1sRjtPQUNBQztPQUlBQztPQU1BQztPQU1BQzs7T0EySEFSO09BQ0FDO09BQ0FxQjtPQUNBQztLQUFVOzs7O0tBN01kQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUdBQztLQUNBQzthQXlNRUMsU0FBT25DLFFBQVExMUI7TUFDakIsSUFBSS9vRCxFQUFKLHNCQURTeStFO01BRUcsU0FEUnorRSxPQUNRLGFBRkh5K0UsUUFDTHorRTtPQUdXLFdBSk55K0UsUUFJTSxJQXpOZndCLFVBcU5pQmwzQjtNQUdaLFdBSEkwMUIsUUFBUTExQixTQUlnQjthQUUvQjgzQixZQUFZaGdGLEtBQUtzOUU7TUFDaEIsc0JBRFd0OUUsS0FBS3M5RTtlQUVkO2lCQUZTdDlFOztpQkFFVCxzQkFGU0EsUUFFVCxzQkFGY3M5RTtlQUdkLHFDQUFrQzthQUVyQzJDLGNBQWNqZ0Y7TUFDaEIsOEJBRGdCQSxjQU1HeWE7TUFDakI7UUFBWSxRQURLQSxTQUNMLGFBUEV6YSxLQU1HeWE7VUFFVCwwQkFSTXphLEtBTUd5YTtZQUVXLFFBRlhBLFlBTEY1aEI7WUFDZjtjQUFZLFFBREdBLE9BQ0gsYUFGRW1ILEtBQ0NuSDtnQkFFUCwwQkFITW1ILEtBQ0NuSDtrQkFFYSxRQUZiQTtnQkFHViw2QkFKU21ILFFBTUd5YTtjQUprQjtVQU85QixRQUhZQTs7UUFDa0IsU0FJRjthQUVqQ3lsRSxVQUFVbGdGO01BQ0osSUFBSmIsRUFBSSxjQURJYTtNQUNKLGFBQUpiLFVBQ2tCLE1BRlZhLEtBRVUsc0JBRlZBLFFBQ1JiLFFBQzREO2FBRTlEZ2hGLGVBQWVuZ0Y7TUFDVCxJQUFKYixFQUFJLGNBRFNhO01BQ1QsYUFBSmI7ZUFDVTtlQUNULE1BSFlhLE9BR1osc0JBSFlBLFFBQ2JiLE1BRTJDO2FBRTdDaWhGLGlCQUFpQnBnRjtNQUNYLElBQUpiLEVBQUksY0FEV2E7TUFDWCxhQUFKYixFQURlYSxLQUVLLE1BRkxBLE9BRUssc0JBRkxBLFFBQ2ZiLE1BQzhEO1FBS2hFa2hGLDJCTnpVTDthTTJVS0MsZUFBZUMsU0FBU3RtRSxPQUFPRztNQUNqQzt5QkFIRWltRTtPQUdGO3FCQUhFQSx1QmM5U0EvMkUsaUJkOFNBKzJFO09BR1E7TUFDTSxnQkFGQ0UsU0FFRCx5QkFGVXRtRSxPQUN0QnVtRSxJQUQ2QnBtRSxRQUU0QjtRQUczRHFtRSx5QkE5UEZmO2FBZ1FFZ0Isa0JBQWtCbmpGLEdBQUksMkJBQUpBLEVBQUksUUFBMEI7YUFDaERvakYseUJBQXVCLE9BSHZCRix3QkFHNkM7YUFFN0NHLFVBQVl2M0QsSUFBbUNwUCxPQUFPRztNQUN4RCxHQURjaVA7T0FBVyxRQUFYQSxnQkFBV0M7O1dBQVhpM0QsU0FMWkU7TUFNRixTQUFRSSxTQUFTbmtGO1FOdFZwQixJTXNWb0I0OUM7UUFDZjtVQUFXLElBQVB0NkMsS0FBTyxlQUZDdWdGLFNBQW1DdG1FLE9BQU9HO1VBRTNDO1lBRTRELHVCQUEzRCxjQUZScGE7Z0JBSUMrRjs7O2NBQ0gsV0FOYXUwQyxVQU1XLE1BRHJCdjBDO2NBQ2tDLGNBTnhCdTBDOztrQkFLVnYwQyxHQUN3RDtNQU4vRCxrQkFPYTthQUVYZzdFLGVBQWlCMTNELGNBQ21DcFAsT0FBT0c7TUFDN0QsR0FGbUJpUCxJQUFPLFFBQVBBLFlBQU9DLGFBQVB4cEI7TUFFbkIsUUFGaUQsa0JBQVJtaEYsTUFBUUQsZUFBUkM7TUFFekM7T0FEOEIsa0JBQVhWLFNBQVdXOztXQUFYWCxTQWhCakJFO01BaUJGLFNBQVFJLFNBQVNua0Y7UU5qV3BCLElNaVdvQjQ5QztRQUNmO1VBQVcsSUFBUHQ2QyxLQUFPLGVBRk11Z0YsU0FBbUN0bUUsT0FBT0c7VUFFaEQ7WUFHUixZQUhDcGEsS0FHRCx3QkFOY0YsUUFBc0JtaEYsTUFHbkNqaEY7O2dCQUlDK0Y7OztjQUNILFdBTmF1MEMsVUFNVyxNQURyQnYwQztjQUNrQyxjQU54QnUwQzs7a0JBS1Z2MEMsR0FDd0Q7TUFOL0Qsa0JBT2E7Ozs7T0E5UmJtNUU7T0FDQUM7T0FDQUM7T0FxTkVXO09Bbk5GVDtPQUNBQztPQUNBQztPQXVORVE7T0F0TkZQO09Bd09FUztPQVNBRTtPQUxBRDtPQXRPRk47T0FDQUM7T0FmQWI7T0E0UUUyQjtPQVVBRztPQVpBSjtPQURBRDtPQWhRRmhCO09BQ0FDO09BQ0FDOzthQzVERXVCLE1BQUl6akYsRUFBRUMsR0FBVyxZQUFiRCxPQUFFQyxLQUFGRCxPQUFFQyxLQUE0QzthQUVsRHlqRixNQUFJMWpGLEVBQUVDLEdBQVcsWUFBYkQsT0FBRUMsS0FBRkQsT0FBRUMsS0FBNEM7YUFFbEQwakYsSUFBSTNqRixHQUFjLGNBQWRBLFlBQWtDO2FBRXRDNGpGLEtBQUs1akYsR0FBeUIsWUFBekJBLFlBQStCO2FBRXBDNmpGLElBQUk3akYsRUFBRUM7TUFBdUIsWUFBekJELE9BQUVDLE9BQUZELE9BQUVDLEtBQUZELE9BQUVDLE9BQUZELE9BQUVDLEtBQ3lDO2FBRS9DNmpGLElBQUk5akYsRUFBRUM7TUFDSyxHQUFrQixTQUR2QkEsU0FDSyxTQURMQTtRQUVFLE1BRkZBLFlBR0UsRUFIRkEsT0FFRlQsSUFGRVM7UUFJb0IsYUFKdEJELE9BRUFSLElBRkFRLFFBR0F5WCxHQUhBelgsT0FFQVIsSUFGQVEsUUFHQXlYO01BSUksUUFQRnhYLFlBUUUsSUFSRkEsT0FPRjJ4QixNQVBFM3hCO01BU29CLGFBRnRCMnhCLE1BUEE1eEIsZUFRQWlrQixLQURBMk4sTUFQQTV4QixlQVFBaWtCLElBRTZCO2FBRWpDOC9ELElBQUkvakYsR0FBSSxXQTFCUjlFLE1BMEJJOEUsRUFBYTthQUVqQmdrRixNQUFNaGtGLEdBQWdCLE9BQWhCQSx5QkFBZ0M7YUFFdENpa0YsS0FBS2prRjtNQUVXLGVBRlhBLE1BRWtDLFdBRmxDQTtNQUVrQyxHQUFyQ1IsUUFDWSxPQURXckU7TUFFdEIsR0FGc0JBLFFBRU4sT0FGakJxRTtNQUdDLEdBSHNCckUsS0FBdkJxRSxHQUlNLElBQUowcEIsRUFKcUIvdEIsSUFBdkJxRSxFQUlnQixPQUpoQkEsSUFJd0MsZUFBdEMwcEI7TUFKWSxJQU1aZzdELElBTkYxa0YsSUFBdUJyRTtNQU1QLE9BTk9BLElBTWlCLGVBQXRDK29GLFVBQXNDO2FBRTFDdDFELElBQUk1dUIsR0FBVSxrQkFBVkEsVUFBbUI7YUFFdkJta0YsTUFBTXhrRixFQUFFaUQsR0FBZ0IsWUFBTCxTQUFYQSxLQUFGakQsRUFBOEIsU0FBNUJpRCxLQUFGakQsRUFBMEM7YUFFaER5a0YsS0FBS3BrRjtNUGpFVixHT2lFVUEseUJBQzBCO01BRWIsZUFIYkEsTUFHb0MsV0FIcENBO01BR29DLEdBQWQ3RSxLQUF2QnFFO09BR1E7VUFIZXJFLElBQXZCcUU7UUFDQStxQyxFQUdBLFVBSkEvcUMsS0FJb0Qsc0JBQUYsZUFEOUMwcEI7O09BR0k7WUFOUjFwQixJQUF1QnJFO1FBQ3ZCb3ZDLEVBTUEsVUFQdUJwdkMsS0FPMkIsaUJBRDlDK29GLE1BQzRDLGVBRDVDQTtNQUdSLFNBWktsa0YsS0FhMkIsWUFUNUJ1cUMsUUFKQ3ZxQyxPQUlEdXFDO01BRGMsSUFDZDg1QyxVQUpDcmtGLEtBSUR1cUM7TUFVZ0Isa0JBWE9wdkMsSUFDdkJvdkMsTUFXSDthQUVEKzVDLElBQUl0a0Y7TUFDTSxJQUFScUksRUFBUSxTQUROckksTUFDcUIsWUFBdkJxSSxJQUFnQyxTQUQ5QnJJLE1BQ0ZxSSxJQUFvRCxTQURsRHJJLE1BQ3dEO2FBRTVEdWtGLElBQUl2a0Y7TUFBb0Msb0JBQXBDQSxXQUF1QixxQkFBUixLQUFmQSxTQUErQzthQUVuRHdrRixJQUFJeGtGLEVBQUVDLEdBQVEsZUFBUkEsRUFBZSxJQUFqQkQsSUFBeUI7Ozs7T0FuRTdCL0U7T0FDQUM7T0FDQUM7T0FNQXdvRjtPQUVBQztPQU5BSDtPQUVBQztPQU1BRztPQWVBRTtPQVpBRDtPQThCQU07T0FoQkFKO09BRUFDO09BVUFyMUQ7T0FFQXUxRDtPQW1CQUc7T0FHQUM7T0FFQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09POURBeHNFOzs7T0FFQUU7T0FFQW5XO09BSUFEO09BSUFxVztPQVFBRztPQWVBTTs7T0FQQS9XO09BRUkwVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLeUNJSmtzRTtLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBdC9CO2FBRUF1L0I7O2VBQ1c7ZUFDQTtlQUNJO2VBQ0U7ZUFDRDtlQUNFO2VBQ1Q7ZUFDQTtlQUNGO2VBQ007Z0JBQ0E7Z0JBQ0E7Z0JBQ0wsU0FBQztRQUtUQyxXQUNBQzthQVdNQyxNQUFNcFUsSUFBSXFVLElBQUlwbUYsRUFBRXFtRixJQUFJeGxGO01BQzFCLEdBRHNCd2xGLFFBQU5EO09BQ2UsMkJBRG5CclUsSUFBSXFVLElBQzJCLFdBRHZCcG1GLEVBQUpvbUY7TUFFTywwQkFGR3ZsRixJQUFKd2xGLHNCQUVqQjtNQUFrQjtZQUFsQmoyRTtRQUNFOzJCQUhTZzJFLElBQU1DLGdCQUVqQmoyRTtVQUVFLE1BSksyaEUsSUFBSXFVLElBQUlwbUYsRUFBRXFtRixZQUFJeGxGO1VBSW5CLFNBRkZ1UDs7O2NBR0k7YUFDSGsyRSxNQUFNdlUsSUFBSXFVLElBQUlwbUYsRUFBRXFtRixJQUFJeGxGO01BQzFCLFFBRHNCd2xGO1FBRUosMEJBRlF4bEYsSUFBSndsRixjQUVqQjtRQUFhO2NBQWJqMkU7VUFDRTs2QkFIU2cyRSxJQUFNQyxnQkFFakJqMkU7WUFFRSxNQUpLMmhFLElBQUlxVSxJQUFJcG1GLEVBQUVxbUYsWUFBSXhsRjtZQUluQixTQUZGdVA7Ozs7TUFEVywyQkFESjJoRSxJQUFJcVUsSUFDWSxXQURScG1GLEVBQUpvbUYsS0FLUDthQUNQRyxPQUFjbm5DLEtBQU1vbkMsT0FBbUJDLEtBQUt6bUY7TUFDcEMsdUJBRE1vL0MsS0FBTW9uQyxPQUFtQkMsTUFDL0IsS0FEK0JBO01BQy9CLGFBR1JDO2VBSEUzVTtlQURrQnlVO2tCQUtJLE1BSnRCelUsSUFJZ0MsZUFEbEMyVSxRQUo0QzFtRixFQUk1QzBtRixhQUp1Q0QsTUFDckMxVTtrQkFHZ0IsTUFIaEJBLElBRzBCLGVBQTVCMlUsUUFKNEMxbUYsSUFBTHltRixNQUNyQzFVLElBS3lCO2FBSTNCMFUsS0FBS2xqRjtNQUNDLHVCQUREQSxHQUVDLGlCQURKakQsS0FDSSxLQURKQSxVQUNJOztZQUNSeEU7UUFBb0I7VUFBUyw2QkFIdEJ5SCxFQUdQekg7VUFBb0IsaUJBRGhCc2MsRUFDSnRjO1VBQTZCLFNBQTdCQTs7O01BQ0EsT0FGSXNjLENBRUg7YUFPQ3V1RSxjQUFjNVU7TUFDa0IsZ0NBQXlCLEtBRDNDQTtNQUNoQixtQ0FBb0IsYUFESkEsV0FDc0Q7YUFvQnBFNlUsU0FBT3huQyxLQUFLb25DLFFBQ2Qsc0JBRFNwbkMsS0FBS29uQyxXQUNrQjthQUM5QkssTUFBSTlVLEtBQU0sbUNBQU5BLFFBQTJCO2FBQy9CK1UsTUFBSS9VO01BQU07NEJ2RGhLakIsMkJ1RGdLV0EsZUFBMkI7YUFPL0JnVixnQkFBY2hWO01BQXlCLHVDQUF6QkEsS0FBbUM7YUFLakRpVixTQUFTNW5DLEtBQUtvbkMsT0FBT3RtRjtNQUNmLElBQUpxRCxFQUFJLFNBREc2N0MsS0FBS29uQyxRQUVoQixpQkFESWpqRixHQURtQnJELEdBRXZCLE9BRElxRCxDQUVIO2FBTUMwakYsU0FBTzduQyxLQUFLb25DLE9BQU9VO01BQ3JCLHNCQURTOW5DLEtBQUtvbkMsVUFBT1UsS0FDYzthQWFqQ0MsZ0JBQWNwVjtNQUNrQix1QkFEbEJBO01BQ2hCLG1DQUFvQixhQURKQSxXQUMyQjthQUd6Q3FWLE1BQWdCN2pGLEVBQTBCakQ7TUFDdEMsaUNBRFlpRDtNQUNaLGFBRWUsY0FISEEsS0FBMEJqRCxJQUU3QixjQUZHaUQsS0FBMEJqRCxHQUc0QjthQU90RSttRixPQUFjam9DLEtBQU1vbkMsT0FBbUJVLElBQUlsbkY7TUFDbkMsSUFISyt4RSxJQUdMLFNBRE0zeUIsS0FBTW9uQyxPQUFtQlU7TUFDL0IsR0FEWVY7UUFEdEI7Y0FDeUNVO2NBRHpDN2tGO1VBQW9COzBCQURMMHZFLElBQ2YxdkUsSUFBcUMsV0FDUXJDLEVBRDdDcUM7WUFBb0IsU0FBcEJBO2VBQ3lDNmtGLFFBRHpDN2tGOztlQURlMHZFO01BR0wsSUFKVixLQUd5Q21WLFlBSHpDOzs7UUFBeUI7d0JBQ1ZuVixJQURmajJFLEVBQTBDLFdBR0drRSxFQUg3Q2xFO1VBQXlCLFNBQXpCQTs7O2FBQ2VpMkUsR0FNZ0M7YUFDN0N1VixTQUFrQmxvQyxLQUFNb25DLE9BQWtCbndEO01BQ25DO21CQURXK29CLEtBQU1vbkMsT0FBa0Jud0Q7T0FDbkMsSUFEaUJtd0Q7T0FPMUIsS0FQNENud0Q7T0FPNUM7OztRQUFzQzt3QkFObENreEQsR0FNSnpyRixJQUxJOEgsUUFLMEQsaUJBUGxCeXlCLEtBTzVDdjZCO1VBQXNDLFNBQXRDQTs7O01BQ0EsT0FQSXlyRixFQU9GO2FBS0FDLFVBQU9wb0MsS0FBS29uQyxPQUFPaUIsS0FBS0M7TUFDMUIsc0JBRFN0b0MsS0FBS29uQyxVQUFPaUIsS0FBS0MsTUFDZ0I7YUFleENDLGdCQUFjNVY7TUFDK0IsdUJBRC9CQSxLQUNrQixtQkFEbEJBO01BQ2hCOzJDQUFvQixhQURKQSxpQkFDeUM7YUFPdkQ2VixXQUFXcmtGLEVBQUVqRCxHQUFJLHFCQUFOaUQsS0FBRWpELEdBQStCO2FBQzVDdW5GLFlBQVl0a0YsRUFBRWpELEdBQUkscUJBQU5pRCxLQUFFakQsR0FBZ0M7YUFlOUN3bkYsT0FBYzFvQyxLQUFNb25DLE9BQW1CaUIsS0FBS0MsS0FBSzFuRjtNQUN6QyxJQVBLK3hFLElBT0wsVUFETTN5QixLQUFNb25DLE9BQW1CaUIsS0FBS0M7TUFDcEMsR0FEWWxCO1FBTHRCO2NBSzhDa0I7Y0FMOUN4akQ7VUFDRTs7a0JBSXVDdWpEO2tCQUp2Q3BsRjtjQUNFOzhCQUhXMHZFLElBRWIxdkUsSUFERjZoQyxJQUV1QixXQUc0QmxrQyxFQUpqRHFDLElBREY2aEM7Z0JBRUksU0FERjdoQzttQkFJdUNvbEYsU0FKdkNwbEY7O3FCQURGNmhDO2VBSzhDd2pELFNBTDlDeGpEOztlQURlNnRDO01BT0wsSUFaVixLQVd5QzBWLGFBWHpDOzs7UUFDRTttQkFVNENDLGFBVjVDOzs7WUFDRTs0QkFHVzNWLElBTGZqMkUsRUFDRXNVLEVBQ3FCLFdBUzRCcFEsRUFYbkRsRSxFQUNFc1U7Y0FDRSxTQURGQTs7O21CQURGdFU7OzthQUtlaTJFLEdBVXNDO2FBQ25EZ1csV0FBa0Izb0MsS0FBTW9uQyxPQUFrQm53RDtNQUM1QztZQUQ0Q0E7T0FDNUMsV0FBSW94RCxPQUM0QyxpQkFGSnB4RDtPQUduQyxhQUhXK29CLEtBQU1vbkMsT0FDdEJpQixLQUNBQztPQUNLLElBSGlCbEI7T0FTMUIsS0FSSWlCO09BUUo7OztRQUNFO1VBQVUsSUFBTk8sSUFBTSxpQkFWZ0MzeEQsS0FTNUN2NkI7VUFDWSxHQUFOa3NGLG1CQVJGTjtXQVVBO1VBRlEsSUFFcUQsS0FWN0RBLGFBVTZEOztnQkFDL0R0M0U7WUFDRTs7Z0JBWEFtM0UsR0FNSnpyRixJQUxJOEgsUUFTRndNLElBVEV4TSxRQVVrQyxpQkFKaENva0YsSUFHSjUzRTtjQUNFLFNBREZBOzs7VUFIVSxTQURadFU7OztNQVFBLE9BZEl5ckYsRUFjRjthQUtBVSxVQUFPN29DLEtBQUtvbkMsT0FBT2lCLEtBQUtDLEtBQUtRO01BQy9CLHNCQURTOW9DLEtBQUtvbkMsVUFBT2lCLEtBQUtDLEtBQUtRLE1BQ2lCO2FBaUI5Q0MsZ0JBQWNwVztNQUM0QztrQ0FENUNBO09BQytCLG1CQUQvQkE7T0FDa0IsbUJBRGxCQTtNQUNoQjs7NkNBQW9CLGFBREpBO29CQUNzRDthQU9wRXFXLGFBQWE3a0YsRUFBRWpELEVBQUVtcEIsR0FBSSxxQkFBUmxtQixLQUFFakQsRUFBRW1wQixHQUFrQzthQUNuRDQrRCxjQUFjOWtGLEVBQUVqRCxFQUFFbXBCLEdBQUkscUJBQVJsbUIsS0FBRWpELEVBQUVtcEIsR0FBbUM7YUFDckQ2K0QsYUFBYS9rRixFQUFFakQsR0FBSSxxQkFBTmlELEtBQUVqRCxHQUErQjthQUM5Q2lvRixjQUFjaGxGLEVBQUVqRCxHQUFJLHFCQUFOaUQsS0FBRWpELEdBQWdDO2FBbUJoRGtvRixPQUFjcHBDLEtBQU1vbkMsT0FBbUJpQixLQUFLQyxLQUFLUSxLQUFLbG9GO01BQzlDLElBVEsreEUsSUFTTCxVQURNM3lCLEtBQU1vbkMsT0FBbUJpQixLQUFLQyxLQUFLUTtNQUN6QyxHQURZMUI7UUFQdEI7Y0FPbUQwQjtjQVBuRHRwRDtVQUNFOztrQkFNNEM4b0Q7a0JBTjVDeGpEO2NBQ0U7O3NCQUtxQ3VqRDtzQkFMckNwbEY7a0JBQ0U7a0NBSlMwdkUsSUFHWDF2RSxJQURGNmhDLElBREZ0RixJQUcyQixXQUk2QjUrQixFQUxwRHFDLElBREY2aEMsSUFERnRGO29CQUdNLFNBREZ2OEI7dUJBS3FDb2xGLFNBTHJDcGxGOzt5QkFERjZoQzttQkFNNEN3akQsU0FONUN4akQ7O3FCQURGdEY7ZUFPbURzcEQsU0FQbkR0cEQ7O2VBRGVtekM7TUFTTCxJQWhCVixLQWV5QzBWLGFBZnpDOzs7UUFDRTttQkFjNENDLGFBZDVDOzs7WUFDRTt1QkFhK0NRLGFBYi9DOzs7Z0JBQ0U7Z0NBSVNuVyxJQVBmajJFLEVBQ0VzVSxFQUNFMm1CLEVBQ3VCLFdBWTZCLzJCLEVBZnhEbEUsRUFDRXNVLEVBQ0UybUI7a0JBQ0UsU0FERkE7Ozt1QkFERjNtQjs7O21CQURGdFU7OzthQU9laTJFLEdBWTJDO2FBQ3hEMFcsV0FBa0JycEMsS0FBTW9uQyxPQUFrQm53RDtNQUM1QztZQUQ0Q0E7T0FDNUMsV0FBSW94RCxPQUM0QyxpQkFGSnB4RDtPQUc1QztjQURJcXhEOztVQUNvRCxpQkFBUixpQkFISnJ4RDtPQUluQyxhQUpXK29CLEtBQU1vbkMsT0FDdEJpQixLQUNBQyxLQUNBUTtPQUNLLElBSmlCMUI7T0FVMUIsS0FUSWlCO09BU0o7OztRQUNFO1VBQVUsSUFBTk8sSUFBTSxpQkFYZ0MzeEQsS0FVNUN2NkI7VUFDWSxHQUFOa3NGLG1CQVRGTjtXQVdBO1VBRlEsSUFFK0MsS0FYdkRBLGFBV3VEOztnQkFDekR0M0U7WUFDRTtjQUFVLElBQU5pMkUsSUFBTSxpQkFKUjJCLElBR0o1M0U7Y0FDWSxHQUFOaTJFLG1CQVpKNkI7ZUFjRTtjQUZRLElBRStDLEtBZHpEQSxhQWN5RDs7b0JBQ3pEbnhEO2dCQUNFOztvQkFmRnd3RDtvQkFNSnpyRixJQUxJOEg7b0JBU0Z3TSxJQVRFeE07b0JBYUFtekIsSUFiQW56QjtvQkFjOEMsaUJBSjFDeWlGLElBR0p0dkQ7a0JBQ0UsU0FERkE7OztjQUhVLFNBRFozbUI7OztVQUhVLFNBRFp0VTs7O01BYUEsT0FuQkl5ckYsRUFtQkY7YUFXRm1CLG1CQUFtQm5sRjtNQUNsQiw4QkFEa0JBOztlQUVoQiwyQ0FBeUM7YUFDNUNvbEYsbUJBQW1CcGxGO01BQ2xCLDhCQURrQkE7O2VBRWhCLDJDQUF5QzthQUM1Q3FsRixtQkFBbUJybEY7TUFDbEIsOEJBRGtCQTs7ZUFFaEIsMkNBQXlDO2FBQzVDc2xGLG1CQUFtQnRsRjtNQUNsQiw4QkFEa0JBOztlQUVoQiwyQ0FBeUM7YUFLNUN1bEYsVUFBVXZsRixHQUFJLHVCQUFKQSxNQUFrQjthQUM1QndsRixVQUFVeGxGLEVBQUVra0YsTUFBTyx1QkFBVGxrRixLQUFFa2tGLE1BQXlCO2FBQ3JDdUIsVUFBVXpsRixFQUFFa2tGLEtBQUtDLE1BQU8sdUJBQWRua0YsS0FBRWtrRixLQUFLQyxNQUE4QjthQUMvQ3VCLFVBQVUxbEYsRUFBRWtrRixLQUFLQyxLQUFLUTtNQUFPLHVCQUFuQjNrRixLQUFFa2tGLEtBQUtDLEtBQUtRLE1BQW1DOzs7O09BclZ6RDlDO09BQ0FDO09BU0FTO09BQ0FDO09BVEFUO09BQ0FDO09BQ0FDO09BQ0FDO09BR0FHO09BRkFGO09BQ0FDO09BRUFFO09BR0FwL0I7T0FFQXUvQjtPQWtCQUM7T0FDQUM7VUF1QkVLLE9BVUFFLEtBV0FFOztRQXFCQUM7UUFlQUk7O1FBTEFEO1FBUkFGO1FBQ0FDO1FBWUFFOztRQVNBQztRQTRCQUk7O1FBZEFGO1FBSUFDO1FBZUFFOztRQWFBRTtRQXdDQU07O1FBeEJBSDtRQVFBQztRQUNBQztRQW9CQUU7O1FBc0JBRTtRQWdEQU87O1FBOUJBTDtRQVFBQztRQUNBQztRQUNBQztRQUNBQztRQXdCQUU7T0FrQ0ZDO09BR0FDO09BR0FDO09BR0FDOztPQU9BQztPQUNBQztPQUNBQztPQUNBQzs7YXhDOVdBQyxVQUFVQyxRQUFRM29GLEVBQUVSO01BQ2IsSUFBTHVFLEdBQUssV0FERzRrRixRQUFRM29GO01BQ1gscUJBRUksa0JBSFNSLEVBQ2xCdUUsR0FFYTtNQUZSLCtCQUN1QixxQkFENUJBLEdBQ29ELE9BQ3RDO2FBRWhCNmtGLGNBQWM1b0YsRUFBRVIsR0FDbEIsaUJBVkVxRSxXQVNjN0QsRUFBRVIsRUFDYzthQUU5QnFwRixlQUFlN29GLEVBQUVSLEdBQ25CLGlCQVpFb0UsWUFXZTVELEVBQUVSLEVBQ1M7YUFFMUJzcEYsY0FBY3huRSxNQUFNOWUsS0FBS3hDLEVBQUVSO01BQ25CLGdDZjlDYixPZWdDS21FLFdBYWMyZCxNQUFNOWUsWUFBS3hDLEVBQUVSLEVBQ2dCO1FBRTNDdXBGLFlBQ0F2c0QsV0FDQXdzRDthQUlBQyxhQUFXbGxGO01BQ2I7UUFBTSxJQUNKckIsRUFESSxtQkFET3FCOzs7Z0NBR2M7UUFEcEI7Z0JBQUxyQixFQUM2QjthQUU3QndtRixhQUFXbmxGO01BQ2I7UUFBTSxJQUNKakUsRUFESSxtQkFET2lFOzs7Z0NBR2M7UUFEcEI7Z0JBQUxqRSxFQUM2QjthQUU3QnFwRixhQUFXcGxGO01BQ2I7UUFBTSxJQUNKL0QsRUFESSxXQURPK0Q7OztnQ0FHYztRQURwQjtnQkFBTC9ELEVBQzZCO2FBSTdCb3BGLGVBQWFybEYsR0FBR1UsSUFBSSszQixJQUFJbjVCO01BQzFCO1FBQU0sYUFEU1UsR0FBR1UsSUFBSSszQixJQUFJbjVCLEtBRWxCOzs7Z0NBQ21CO21CQUFJO2FBRTdCZ21GLHNCQUFvQnRsRixHQUFHVjtNQUN6QjtRQUFNLElBQ0pyRCxFQURJLG9CQURnQitELEdBQUdWOzs7Z0NBR0U7UUFEcEI7Z0JBQUxyRCxFQUM2QjthQUk3QnNwRixVQUFVdmxGLEdBQUdVLElBQUlyQixJQUFJQztVQUNWWSxNQURNYixJQUNGYyxNQURNYjtNQUVyQjtpQkFEZWE7VUFHTCxJQUFKdkUsRUFBSSxNQUpBb0UsR0FBR1UsSUFDRlIsTUFBSUM7VUFHTCxTQUFKdkU7WUFJRjttQkFQV3VFLFFBR1R2RTthQUlGLE1BUE9zRSxRQUdMdEU7YUFIS3NFO2FBQUlDOztlQUFKRCxRQURNYixRQVdEO2FBY2hCbW1GLE9BQU85a0YsSUFBSXJCLElBQUl0RDtNQUNqQixJQUFJdUQsSUFBSixxQkFEU29CO01BQ1QsSUFEYXJCLE1BQUl0RCxVQUNidUQsSUFDbUIsT0FGZG9CO01BQ1QsSUFHTTZZLFdBSEZqYTs7V0FHRWlhLGNBSk9sYSxNQUFJdEQ7VUFNYixrQkFGRXdkO1FBSUo7bUJBSklBO1NBSUo7VUFBSWtzRTs7WUFST3BtRjs7Y0FlUDtTQUdKLDBCQVRJcW1GO1FBVUosS0FuQk9obEYsTUFrQkg4WSxVQWxCT25hO1FBbUJYLE9BREltYSxRQUdIO2FBRURtc0UsVUFBVTNsRjtNQUNaLElBQUk0bEY7TUFBSjtRQUdrQzs2QkFKdEI1bEY7U0FJUiwwQkFKUUE7U0FFUjJxRDs7Ozs7TUFESjtPQU9BLG9CQU5JQSwwQkFEQWk3QjtPQVFKO1FBRElDO09BT0osc0JBTklDO09BT1EsZ0JBaEJBOWxGLEdBZVJVLE1BTkFvbEY7TUFPUSxHQUFSQyxRQVBBRCxlQVNGLGtCQUhFcGxGLE1BQ0FxbEY7TUFHQztRQUNHLElBSUpwbkYsRUFKSSxtQkFwQklxQjs7O2dDQXVCTiw0QkFSRlU7UUFXRTtlQUFReS9DLEtBQUt6L0MsSUFBSXJCO1lBQUoybUYsVUFBSTlsRjtRQUNmO1VBQVU7d0JBREM4bEYsTUFBSTlsRixNQXpCbkIwbEY7V0EwQmMseUJBRENLLFNBQUkvbEY7V0FLUCxZQS9CSkYsR0EwQk9pbUYsTUFBSS9sRixNQUVYZ21GO1VBR0ksR0FBSnRxRixJQUhBc3FGLElBS0Ysa0JBUFNELFFBQUkvbEYsUUFLWHRFO1VBSk0sSUFRUixNQVRhc0UsUUFFWGdtRixRQUZPRixZQUFJOWxGO21CQVNPO01BRWQsSUFBTjhsRixNQUFNLE9BdEJadGxGLElBQ0FxbEY7TUFzQkUsZUFESUMsTUFyQk5ELE1BUUFwbkY7TUFjRSxZQURJcW5GLE1BckJORCxjQXdCRDs7OztPQTlJRDNuRjtPQUNBMEI7T0FDQUQ7T0FDQUQ7T0FPQWlsRjtPQUdBQztPQUdBQztPQUdBQztPQUNBdnNEO09BQ0F3c0Q7T0FDQS9oRjtPQUNBbkM7T0FFQW1rRjtPQUtBQztPQUtBQztPQUtBcmxGO09BRUFzbEY7T0FLQUM7T0F1REFLO09BMENBMWlGOzthQzFJQWtqRixZQUFVdkIsUUFBUTNvRixFQUFFUjtNQUNiLElBQUx5RCxHQUFLLFdBREcwbEYsUUFBUTNvRjtNQUNYLHFCQUVJLGtCQUhTUixFQUNsQnlELEdBRWE7TUFGUiwrQkFDdUIsbUJBRDVCQSxHQUNxRCxPQUN2QzthQUVoQmtuRixnQkFBY25xRixFQUFFUixHQUNsQixtQkFWRW9ELFNBU2M1QyxFQUFFUixFQUNlO2FBRS9CNHFGLGlCQUFlcHFGLEVBQUVSLEdBQ25CLG1CQVpFbUQsVUFXZTNDLEVBQUVSLEVBQ1U7YUFFM0I2cUYsZ0JBQWMvb0UsTUFBTTllLEtBQUt4QyxFQUFFUjtNQUNuQixrQ2hCL0NiLE9nQmlDSzhDLFNBYWNnZixNQUFNOWUsWUFBS3hDLEVBQUVSLEVBQ2lCOztLQUU1QzhxRjtLQUNBQztLQUNBQzs7O09BdEJBcG9GO09BQ0FDO09BQ0FPO09BQ0FEO09BQ0FMO09BT0E2bkY7T0FHQUM7T0FHQUM7T0FHQUM7T0FDQUM7T0FDQUM7T0FDQS9tRjtPQUNBQztPQUNBc0U7T0FDQW5GO09BQ0FrRjtPQUNBRDtPQUNBNUU7T0FDQUY7T0FDQUc7T0FDQUc7T0FDQW1FOzs7O1VoQjlETDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S3dEQ0tnakY7S0FFQUM7O0tBSUFDO0tBeUJBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzthQXZCQUM7TUFBd0I7ZUFDWjtlQUNBO2VBQ0E7ZUFDRjtlQUNGO2dCQUNBLGdCQUFNO2FBRWRDO01BQXVCO2VBQ1g7ZUFDQTtlQUNBO2VBQ0Y7ZUFDRjtnQkFDQSw0QkFBa0I7Ozs7T0F0QjFCTDtPQUVBQztPQUlBQztPQUVBRTtPQVFBQztPQWVBRjs7VURoQ0w7Ozs7Ozs7SUNBQTs7Ozs7Ozs7Ozs7Ozs7OzttQkNDWUcsS0FBTyxNQUFNQSxHQUF2QjtJRERGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ0FBO3lCQ0NVQyx1QkFBdUJBLGtCQUFtQkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUREcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUNDQ0EsV0RERCw2QkNDQ0MsS0RERCxJQ0NDQztJREREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1Q0NDQ0MsdUJEREQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JDQ0NDLE1EREQ7Ozs7Ozs7Ozs7eUJDQ0NBLE1EREQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFoQkMsYUFBNkM7WUFDbkQsb0JBRkg7bUJBRkFFLGlCQUFNUixjQUt3QjtTQU5yQztTQUFGO1NBREY7U0FESTtTQUFKO1NBRko7U0FEQTs7O21CQTFCV0E7WUFDSCx3Q0FER0E7WUFDSDtjQUVLOzs7OztlQUNVLHVCQURRTTtjQUNSLE9BQUpPO2VBR2lCOzJDQUhqQkE7Z0JBR1M7d0JBQVQsc0JBSnNCRixjQUFuQkM7Ozt3QkFBSFAsSUFDQVEsV0FJWTtZQUNYOzhCQVBUO2FBUUE7MEJBQ087WUFGRSxJQUdHLGdCQUF3QiwrQkFBbENEO1lBQWtDLGFBWnBDWixnQkFZb0Q7U0FiM0Q7OztZQWVVO2VBQWdCWTthQVNlO3FEQVRmQTttQkFTUjs7O1lBVFI7YUFNRDthQURBLG1DQUxPRTthQUlQO2FBREksMkJBSFVEO2FBR2Q7cURBUUE7d0JBWFI7U0FoQkw7U0FEQTtTQUhzQztTQUFKO1NBQTFCO1NBRko7U0FGSjtTQUhZO1NBQUo7U0FEQTtTQUZKO1NBRko7U0FGZ0M7U0FBSjtTQUFwQjtTQUFKO1NBRko7U0FGSjtTQW1Fc0I7U0FBc0I7O3VCQUEzQztlQXdESUU7TUFERyxRQW9CRztJQTNMQyxTQTZMWkM7TUFHRTs7T0FBc0U7YUFGdEVDO2dCQU1GO2dCQUNBO2dCQUNBO2dCQUMyQztrQkFBOUIsMkJBMU9idEIsc0JBbUNBUTtnQkF1TTJDO2VBVHpDYyxJQVVVO0lBR2QsMENBaENFYjtJQWlDRiw2Q0FmRVk7SUFlRjs7VURsUUg7Ozs7Ozs7SUNBQTs7OztJQ2tCUzs7O1VEbEJUIiwic291cmNlc0NvbnRlbnQiOltudWxsLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZmZzZXRcbnZhciBjYW1sX2ludDY0X29mZnNldCA9IE1hdGgucG93KDIsIC0yNCk7XG5cbi8vUHJvdmlkZXM6IE1sSW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBNbEludDY0IChsbyxtaSxoaSkge1xuICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9IG1pICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSBoaSAmIDB4ZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfalwiXG5NbEludDY0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyx0aGlzLm1pLHRoaXMuaGkpO1xufVxuXG5NbEludDY0LnByb3RvdHlwZS51Y29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIGlmICh0aGlzLmhpID4geC5oaSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmhpIDwgeC5oaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+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+PiAxNikgJiAweGZmZmYpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9sbzMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2xvMzIodil7IHJldHVybiB2LmxvMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGkzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oaTMyKHYpeyByZXR1cm4gdi5oaTMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGFbN10gPDwgMCB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVs0XSA8PCAwIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzFdIDw8IDAgfCAoYVswXSA8PCA4KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2J5dGVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2J5dGVzKHgpIHsgcmV0dXJuIHgudG9BcnJheSgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oYXNoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hhc2godil7XG4gIHJldHVybiAodi5sbzMyKCkpIF4gKHYuaGkzMigpKVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTQgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQW4gT0NhbWwgc3RyaW5nIGlzIGFuIG9iamVjdCB3aXRoIHRocmVlIGZpZWxkczpcbi8vIC0gdGFnICd0J1xuLy8gLSBsZW5ndGggJ2wnXG4vLyAtIGNvbnRlbnRzICdjJ1xuLy9cbi8vIFRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYSBKYXZhU2NyaXB0IGFycmF5IG9yXG4vLyBhIEphdmFTY3JpcHQgc3RyaW5nLiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nIGNhbiBiZSBsZXNzIHRoYW4gdGhlXG4vLyBsZW5ndGggb2YgdGhlIE9DYW1sIHN0cmluZy4gSW4gdGhpcyBjYXNlLCByZW1haW5pbmcgYnl0ZXMgYXJlXG4vLyBhc3N1bWVkIHRvIGJlIHplcm9lcy4gQXJyYXlzIGFyZSBtdXRhYmxlIGJ1dCBjb25zdW1lcyBtb3JlIG1lbW9yeVxuLy8gdGhhbiBzdHJpbmdzLiBBIGNvbW1vbiBwYXR0ZXJuIGlzIHRvIHN0YXJ0IGZyb20gYW4gZW1wdHkgc3RyaW5nIGFuZFxuLy8gcHJvZ3Jlc3NpdmVseSBmaWxsIGl0IGZyb20gdGhlIHN0YXJ0LiBQYXJ0aWFsIHN0cmluZ3MgbWFrZXMgaXRcbi8vIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzIGVmZmljaWVudGx5LlxuLy9cbi8vIFdoZW4gY29udmVydGluZyB0byBhbmQgZnJvbSBVVEYtMTYsIHdlIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGVcbi8vIHN0cmluZyBpcyBjb21wb3NlZCBvbmx5IG9mIEFTQ0lJIGNoYXJhY3RlcnMgKGluIHdoaWNoIGNhc2UsIG5vXG4vLyBjb252ZXJzaW9uIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCkgb3Igbm90LlxuLy9cbi8vIFRoZSBzdHJpbmcgdGFnIGNhbiB0aHVzIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4vLyAgIGZ1bGwgc3RyaW5nICAgICBCWVRFIHwgVU5LTk9XTjogICAgICAwXG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgQVNDSUk6ICAgICAgICA5XG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgTk9UX0FTQ0lJOiAgICA4XG4vLyAgIHN0cmluZyBwcmVmaXggICBQQVJUSUFMOiAgICAgICAgICAgICAyXG4vLyAgIGFycmF5ICAgICAgICAgICBBUlJBWTogICAgICAgICAgICAgICA0XG4vL1xuLy8gT25lIGNhbiB1c2UgYml0IG1hc2tpbmcgdG8gZGlzY3JpbWluYXRlIHRoZXNlIGRpZmZlcmVudCBjYXNlczpcbi8vICAga25vd25fZW5jb2RpbmcoeCkgPSB4Jjhcbi8vICAgaXNfYXNjaWkoeCkgPSAgICAgICB4JjFcbi8vICAga2luZCh4KSA9ICAgICAgICAgICB4JjZcblxuLy9Qcm92aWRlczogY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX3N0cl9yZXBlYXQobiwgcykge1xuICBpZihuID09IDApIHJldHVybiBcIlwiO1xuICBpZiAocy5yZXBlYXQpIHtyZXR1cm4gcy5yZXBlYXQobik7fSAvLyBFQ01Bc2NyaXB0IDYgYW5kIEZpcmVmb3ggMjQrXG4gIHZhciByID0gXCJcIiwgbCA9IDA7XG4gIGZvcig7Oykge1xuICAgIGlmIChuICYgMSkgciArPSBzO1xuICAgIG4gPj49IDE7XG4gICAgaWYgKG4gPT0gMCkgcmV0dXJuIHI7XG4gICAgcyArPSBzO1xuICAgIGwrKztcbiAgICBpZiAobCA9PSA5KSB7XG4gICAgICBzLnNsaWNlKDAsMSk7IC8vIGZsYXR0ZW4gdGhlIHN0cmluZ1xuICAgICAgLy8gdGhlbiwgdGhlIGZsYXR0ZW5pbmcgb2YgdGhlIHdob2xlIHN0cmluZyB3aWxsIGJlIGZhc3RlcixcbiAgICAgIC8vIGFzIGl0IHdpbGwgYmUgY29tcG9zZWQgb2YgbGFyZ2VyIHBpZWNlc1xuICAgIH1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChhLCBpLCBsZW4pIHtcbiAgdmFyIGYgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICBpZiAoaSA9PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkgKG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsbGVuLT0xMDI0KVxuICAgIHMgKz0gZi5hcHBseSAobnVsbCwgYS5zbGljZShpLGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0Zjhfb2ZfdXRmMTZcbmZ1bmN0aW9uIGNhbWxfdXRmOF9vZl91dGYxNihzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gYiwgYywgZCwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4YzAgfCAoYyA+PiA2KSk7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4ZDgwMCB8fCBjID49IDB4ZGZmZikge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZTAgfCAoYyA+PiAxMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPj0gMHhkYmZmIHx8IGkgKyAxID09IGwgfHxcbiAgICAgICAgICAgICAgIChkID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgZCA+IDB4ZGZmZikge1xuICAgICAgLy8gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBwYWlyLCByZXBsYWNlZCBieSBcXHVmZmZkIChyZXBsYWNlbWVudCBjaGFyYWN0ZXIpXG4gICAgICB0ICs9IFwiXFx4ZWZcXHhiZlxceGJkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGMgPSAoYyA8PCAxMCkgKyBkIC0gMHgzNWZkYzAwO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjAgfCAoYyA+PiAxOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiAxMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH1cbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gY2FtbF91dGYxNl9vZl91dGY4KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBcIlwiLCBjLCBjMSwgYzIsIHYsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjMSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYzEgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMxID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIHYgPSAxO1xuICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICBjID0gYzIgKyAoYzEgPDwgNik7XG4gICAgICBpZiAoYzEgPCAweGUwKSB7XG4gICAgICAgIHYgPSBjIC0gMHgzMDgwO1xuICAgICAgICBpZiAodiA8IDB4ODApIHYgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IDI7XG4gICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICAgICAgYyA9IGMyICsgKGMgPDwgNik7XG4gICAgICAgICAgaWYgKGMxIDwgMHhmMCkge1xuICAgICAgICAgICAgdiA9IGMgLSAweGUyMDgwO1xuICAgICAgICAgICAgaWYgKCh2IDwgMHg4MDApIHx8ICgodiA+PSAweGQ3ZmYpICYmICh2IDwgMHhlMDAwKSkpIHYgPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ID0gMztcbiAgICAgICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpICYmXG4gICAgICAgICAgICAgICAgKGMxIDwgMHhmNSkpIHtcbiAgICAgICAgICAgICAgdiA9IGMyIC0gMHgzYzgyMDgwICsgKGMgPDwgNik7XG4gICAgICAgICAgICAgIGlmICh2IDwgMHgxMDAwMCB8fCB2ID4gMHgxMGZmZmYpIHYgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodiA8IDQpIHsgLy8gSW52YWxpZCBzZXF1ZW5jZVxuICAgICAgaSAtPSB2O1xuICAgICAgdCArPSBcIlxcdWZmZmRcIjtcbiAgICB9IGVsc2UgaWYgKHYgPiAweGZmZmYpXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhkN2MwICsgKHYgPj4gMTApLCAweGRjMDAgKyAodiAmIDB4M0ZGKSlcbiAgICBlbHNlXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodik7XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBqc29vX2lzX2FzY2lpIChzKSB7XG4gIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZ2V0cyBiZXR0ZXIgYXQgYXJvdW5kIHRoaXMgcG9pbnQgZm9yIGFsbCBicm93c2Vyc1xuICBpZiAocy5sZW5ndGggPCAyNCkge1xuICAgIC8vIFNwaWRlcm1vbmtleSBnZXRzIG11Y2ggc2xvd2VyIHdoZW4gcy5sZW5ndGggPj0gMjQgKG9uIDY0IGJpdCBhcmNocylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIGlmIChzLmNoYXJDb2RlQXQoaSkgPiAxMjcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlXG4gICAgcmV0dXJuICEvW15cXHgwMC1cXHg3Zl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBpZiAoaSA+PSBzLmMubGVuZ3RoKSByZXR1cm4gMDtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgY2FzZSA0OiAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBzLmNbaV1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSB7XG4gICAgaWYgKGkgPT0gcy5jLmxlbmd0aCkge1xuICAgICAgcy5jICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgaWYgKGkgKyAxID09IHMubCkgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKTtcbiAgfVxuICBzLmNbaV0gPSBjO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDcpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhGRiAmIGkxNiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQxNlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiNCA9IDB4RkYgJiBpMzIgPj4gMjQsXG4gICAgICBiMyA9IDB4RkYgJiBpMzIgPj4gMTYsXG4gICAgICBiMiA9IDB4RkYgJiBpMzIgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkzMjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDIsIGIzKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMywgYjQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDMyXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQzMlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCl7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGk2NCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyA3IC0gaiwgYVtqXSk7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQ2NFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcgKHMpIHtcbiAgdmFyIHRhZyA9IDkgLyogQllURVMgfCBBU0NJSSAqLztcbiAgaWYgKCFqc29vX2lzX2FzY2lpKHMpKVxuICAgIHRhZyA9IDggLyogQllURVMgfCBOT1RfQVNDSUkgKi8sIHMgPSBjYW1sX3V0Zjhfb2ZfdXRmMTYocyk7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0YWcsIHMsIHMubGVuZ3RoKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEJ5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIE1sQnl0ZXMgKHRhZywgY29udGVudHMsIGxlbmd0aCkge1xuICB0aGlzLnQ9dGFnOyB0aGlzLmM9Y29udGVudHM7IHRoaXMubD1sZW5ndGg7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCl7XG4gIHN3aXRjaCAodGhpcy50KSB7XG4gIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICBkZWZhdWx0OlxuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXModGhpcyk7XG4gIGNhc2UgMDogLypCWVRFUyB8IFVOS09XTiovXG4gICAgaWYgKGpzb29faXNfYXNjaWkodGhpcy5jKSkge1xuICAgICAgdGhpcy50ID0gOTsgLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgfVxuICAgIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICBjYXNlIDg6IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIH1cbn07XG5NbEJ5dGVzLnByb3RvdHlwZS50b1V0ZjE2ID0gZnVuY3Rpb24gKCl7XG4gIHZhciByID0gdGhpcy50b1N0cmluZygpO1xuICBpZih0aGlzLnQgPT0gOSkgcmV0dXJuIHJcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChyKTtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKCl7XG4gIHZhciBjb250ZW50ID0gdGhpcy50ID09IDQgPyB0aGlzLmMuc2xpY2UoKSA6IHRoaXMuYztcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCxjb250ZW50LHRoaXMubCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzIChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEJZVEVTICovXG4gIGlmIChzLnQgPT0gMiAvKiBQQVJUSUFMICovKVxuICAgIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgJ1xcMCcpXG4gIGVsc2VcbiAgICBzLmMgPSBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKHMuYywgMCwgcy5jLmxlbmd0aCk7XG4gIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocykge1xuICAvKiBBc3N1bWVzIG5vdCBBUlJBWSAqL1xuICBpZihnbG9iYWxUaGlzLlVpbnQ4QXJyYXkpIHtcbiAgICB2YXIgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQ4QXJyYXkocy5sKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYSA9IG5ldyBBcnJheShzLmwpO1xuICB9XG4gIHZhciBiID0gcy5jLCBsID0gYi5sZW5ndGgsIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGIuY2hhckNvZGVBdChpKTtcbiAgZm9yIChsID0gcy5sOyBpIDwgbDsgaSsrKSBhW2ldID0gMDtcbiAgcy5jID0gYTtcbiAgcy50ID0gNDsgLyogQVJSQVkgKi9cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2ZfYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX2J5dGVzIChzKSB7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIGwgPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICB2YXIgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgaWYobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCeXRlcy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsMCxhLmxlbmd0aCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5IChhKSB7XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LGEsYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8tMTooczEuYyA+IHMyLmMpPzE6MDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA9PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDw9IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzdGhhbiBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsczEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMyLHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmlsbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfZmlsbF9ieXRlcyhzLCBpLCBsLCBjKSB7XG4gIGlmIChsID4gMCkge1xuICAgIGlmIChpID09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGwgPj0gcy5jLmxlbmd0aCkpKSB7XG4gICAgICBpZiAoYyA9PSAwKSB7XG4gICAgICAgIHMuYyA9IFwiXCI7XG4gICAgICAgIHMudCA9IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMuYyA9IGNhbWxfc3RyX3JlcGVhdCAobCwgU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gICAgICAgIHMudCA9IChsID09IHMubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgICAgIGZvciAobCArPSBpOyBpIDwgbDsgaSsrKSBzLmNbaV0gPSBjO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9maWxsX2J5dGVzXG52YXIgY2FtbF9maWxsX3N0cmluZyA9IGNhbWxfZmlsbF9ieXRlc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JsaXRfYnl0ZXMoczEsIGkxLCBzMiwgaTIsIGxlbikge1xuICBpZiAobGVuID09IDApIHJldHVybiAwO1xuICBpZiAoKGkyID09IDApICYmXG4gICAgICAobGVuID49IHMyLmwgfHwgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpKSB7XG4gICAgczIuYyA9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2UgaWYgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09IHMyLmMubGVuZ3RoKSB7XG4gICAgczIuYyArPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIHtcbiAgICBpZiAoczIudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsIGMyID0gczIuYztcbiAgICBpZiAoczEudCA9PSA0IC8qIEFSUkFZICovKSB7XG4gICAgICBpZiAoaTIgPD0gaTEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGwgPSBNYXRoLm1pbiAobGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzIgW2kyICsgaV0gPSBjMS5jaGFyQ29kZUF0KGkxICsgaSk7XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2JsaXRfc3RyaW5nKGEsYixjLGQsZSkge1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcoYSksYixjLGQsZSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKSB7IHJldHVybiBzLmwgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ191bnNhZmVfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIHMubGVuZ3RoXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmUgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8tMTooczEgPiBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPD0gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0Zjhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykge1xuICBpZihqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBzO1xuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocylcbiAgZWxzZSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3V0Zjhfb2ZfdXRmMTYocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7IHJldHVybiBuZXcgTWxCeXRlcygwLHMscy5sZW5ndGgpOyB9XG5cblxuLy8gVGhlIHNlY3Rpb24gYmVsb3cgc2hvdWxkIGJlIHVzZWQgd2hlbiB1c2UtanMtc3RyaW5nPWZhbHNlXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsaSxjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19lcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgeyByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIHMuYyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocyl7XG4gIHJldHVybiBzLnRvVXRmMTYoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfYnl0ZXMocykge1xuICByZXR1cm4gKHMgaW5zdGFuY2VvZiBNbEJ5dGVzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHMuY1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuICh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiAmJiAhL1teXFx4MDAtXFx4ZmZdLy50ZXN0KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfaXNfbWxfYnl0ZXMocyk7XG59XG5cbi8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGRlcHJlY2F0ZWRcblxuLy9Qcm92aWRlczogY2FtbF9qc190b19ieXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9qc190b19ieXRlX3N0cmluZyhzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX25ld19zdHJpbmcgKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF90b19qc19zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF90b19qc19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc190b19zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3RvX3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1JhaXNlIGV4Y2VwdGlvblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2NvbnN0YW50IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfY29uc3RhbnQgKHRhZykgeyB0aHJvdyB0YWc7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmV0dXJuX2V4bl9jb25zdGFudCAodGFnKSB7IHJldHVybiB0YWc7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZyAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBhcmcpIHsgdGhyb3cgWzAsIHRhZywgYXJnXTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncyAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZ3MgKHRhZywgYXJncykgeyB0aHJvdyBbMCwgdGFnXS5jb25jYXQoYXJncyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZyAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX2FyZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX3N0cmluZyAodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG1zZykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhaWx3aXRoIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmFpbHdpdGggKG1zZykge1xuICBpZighY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlKVxuICAgIGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZT1bMjQ4LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJGYWlsdXJlXCIpLC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfaW52YWxpZF9hcmd1bWVudCAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkVuZF9vZl9maWxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5EaXZpc2lvbl9ieV96ZXJvKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgaWYoZi5mdW4pXG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZi5mdW4sIGFyZ3MpO1xuICAvL0ZJWE1FLCBjYW4gaGFwcGVuIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzXG4gIGlmKHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmO1xuICB2YXIgbiA9IGYubGVuZ3RoIHwgMDtcbiAgaWYobiA9PT0gMCkgcmV0dXJuIGYuYXBwbHkobnVsbCxhcmdzKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aCB8IDA7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW4gfCAwO1xuICBpZiAoZCA9PSAwKVxuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICBlbHNlIGlmIChkIDwgMCkge1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuYXBwbHkobnVsbCxhcmdzLnNsaWNlKDAsbikpLGFyZ3Muc2xpY2UobikpO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKXtcbiAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3MubGVuZ3RoK2V4dHJhX2FyZ3MpO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkgbmFyZ3NbYXJncy5sZW5ndGgraV0gPSBhcmd1bWVudHNbaV07XG4gICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZXNcbnZhciBjYW1sX25hbWVkX3ZhbHVlcyA9IHt9O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIChjb25zdCxjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLHYpIHtcbiAgY2FtbF9uYW1lZF92YWx1ZXNbY2FtbF9qc2J5dGVzX29mX3N0cmluZyhubSldID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG5mdW5jdGlvbiBjYW1sX25hbWVkX3ZhbHVlKG5tKSB7XG4gIHJldHVybiBjYW1sX25hbWVkX3ZhbHVlc1tubV1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9nbG9iYWxfZGF0YVxudmFyIGNhbWxfZ2xvYmFsX2RhdGEgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfZ2xvYmFsIChjb25zdCwgc2hhbGxvdywgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYobmFtZV9vcHQgJiYgZ2xvYmFsVGhpcy50b3BsZXZlbFJlbG9jKVxuICAgIG4gPSBnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MobmFtZV9vcHQpO1xuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmKG5hbWVfb3B0KSBjYW1sX2dsb2JhbF9kYXRhW25hbWVfb3B0XSA9IHY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2dsb2JhbF9kYXRhIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZ2V0X2dsb2JhbF9kYXRhICgpIHsgcmV0dXJuIGNhbWxfZ2xvYmFsX2RhdGE7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykgeyByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRm9ybWF0XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZm9ybWF0XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZm9ybWF0IChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID1cbiAgICAgIHsganVzdGlmeTonKycsIHNpZ25zdHlsZTonLScsIGZpbGxlcjonICcsIGFsdGVybmF0ZTpmYWxzZSxcbiAgICAgICAgYmFzZTowLCBzaWduZWRjb252OmZhbHNlLCB3aWR0aDowLCB1cHBlcmNhc2U6ZmFsc2UsXG4gICAgICAgIHNpZ246MSwgcHJlYzotMSwgY29udjonZicgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBjID0gZm10LmNoYXJBdChpKTtcbiAgICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlICctJzpcbiAgICAgIGYuanVzdGlmeSA9ICctJzsgYnJlYWs7XG4gICAgY2FzZSAnKyc6IGNhc2UgJyAnOlxuICAgICAgZi5zaWduc3R5bGUgPSBjOyBicmVhaztcbiAgICBjYXNlICcwJzpcbiAgICAgIGYuZmlsbGVyID0gJzAnOyBicmVhaztcbiAgICBjYXNlICcjJzpcbiAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOlxuICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgZi53aWR0aCA9IDA7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYud2lkdGggPSBmLndpZHRoICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJy4nOlxuICAgICAgZi5wcmVjID0gMDtcbiAgICAgIGkrKztcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi5wcmVjID0gZi5wcmVjICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICBjYXNlICdkJzogY2FzZSAnaSc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgJ3UnOlxuICAgICAgZi5iYXNlID0gMTA7IGJyZWFrO1xuICAgIGNhc2UgJ3gnOlxuICAgICAgZi5iYXNlID0gMTY7IGJyZWFrO1xuICAgIGNhc2UgJ1gnOlxuICAgICAgZi5iYXNlID0gMTY7IGYudXBwZXJjYXNlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnbyc6XG4gICAgICBmLmJhc2UgPSA4OyBicmVhaztcbiAgICBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi5jb252ID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnRSc6IGNhc2UgJ0YnOiBjYXNlICdHJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgIGYuY29udiA9IGMudG9Mb3dlckNhc2UgKCk7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCByYXdidWZmZXIpIHtcbiAgaWYgKGYudXBwZXJjYXNlKSByYXdidWZmZXIgPSByYXdidWZmZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGxlbiA9IHJhd2J1ZmZlci5sZW5ndGg7XG4gIC8qIEFkanVzdCBsZW4gdG8gcmVmbGVjdCBhZGRpdGlvbmFsIGNoYXJzIChzaWduLCBldGMpICovXG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgKGYuc2lnbiA8IDAgfHwgZi5zaWduc3R5bGUgIT0gJy0nKSkgbGVuKys7XG4gIGlmIChmLmFsdGVybmF0ZSkge1xuICAgIGlmIChmLmJhc2UgPT0gOCkgbGVuICs9IDE7XG4gICAgaWYgKGYuYmFzZSA9PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcgJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICBpZiAoZi5zaWduZWRjb252KSB7XG4gICAgaWYgKGYuc2lnbiA8IDApIGJ1ZmZlciArPSAnLSc7XG4gICAgZWxzZSBpZiAoZi5zaWduc3R5bGUgIT0gJy0nKSBidWZmZXIgKz0gZi5zaWduc3R5bGU7XG4gIH1cbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSA4KSBidWZmZXIgKz0gJzAnO1xuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDE2KSBidWZmZXIgKz0gXCIweFwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnMCcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcwJztcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnLScpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2Zsb29yX2xvZzJcbnZhciBsb2cyX29rID0gTWF0aC5sb2cyICYmIE1hdGgubG9nMigxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNykgPT0gMTAyMFxuZnVuY3Rpb24ganNvb19mbG9vcl9sb2cyKHgpIHtcbiAgaWYobG9nMl9vaykgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5sb2cyKHgpKVxuICB2YXIgaSA9IDA7XG4gIGlmICh4ID09IDApIHJldHVybiAtSW5maW5pdHk7XG4gIGlmKHg+PTEpIHt3aGlsZSAoeD49Mikge3gvPTI7IGkrK30gfVxuICBlbHNlIHt3aGlsZSAoeCA8IDEpIHt4Kj0yOyBpLS19IH07XG4gIHJldHVybiBpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMiwgY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAoeCkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDEsIDAsIDB4N2ZmMCk7XG4gICAgaWYgKHggPiAwKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4N2ZmMClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHhmZmYwKVxuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MHg4MDAwOih4Pj0wKT8wOjB4ODAwMDtcbiAgaWYgKHNpZ24pIHggPSAteDtcbiAgLy8gSW50NjQuYml0c19vZl9mbG9hdCAxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNyA9IDB4N2ZiMDAwMDAwMDAwMDAwMExcbiAgLy8gdXNpbmcgTWF0aC5MT0cyRSpNYXRoLmxvZyh4KSBpbiBwbGFjZSBvZiBNYXRoLmxvZzIgcmVzdWx0IGluIHByZWNpc2lvbiBsb3N0XG4gIHZhciBleHAgPSBqc29vX2Zsb29yX2xvZzIoeCkgKyAxMDIzO1xuICBpZiAoZXhwIDw9IDApIHtcbiAgICBleHAgPSAwO1xuICAgIHggLz0gTWF0aC5wb3coMiwtMTAyNik7XG4gIH0gZWxzZSB7XG4gICAgeCAvPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgICBpZiAoeCA8IDE2KSB7XG4gICAgICB4ICo9IDI7IGV4cCAtPTE7IH1cbiAgICBpZiAoZXhwID09IDApIHtcbiAgICAgIHggLz0gMjsgfVxuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwyNCk7XG4gIHZhciByMyA9IHh8MDtcbiAgeCA9ICh4IC0gcjMpICogaztcbiAgdmFyIHIyID0geHwwO1xuICB4ID0gKHggLSByMikgKiBrO1xuICB2YXIgcjEgPSB4fDA7XG4gIHIzID0gKHIzICYweGYpIHwgc2lnbiB8IGV4cCA8PCA0O1xuICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkocjEsIHIyLCByMyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IGdsb2JhbFRoaXMuRmxvYXQzMkFycmF5KDEpO1xuICBmbG9hdDMyYVswXSA9IHg7XG4gIHZhciBpbnQzMmEgPSBuZXcgZ2xvYmFsVGhpcy5JbnQzMkFycmF5KGZsb2F0MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBpbnQzMmFbMF0gfCAwO1xufVxuXG4vL0ZQIGxpdGVyYWxzIGNhbiBiZSB3cml0dGVuIHVzaW5nIHRoZSBoZXhhZGVjaW1hbFxuLy9ub3RhdGlvbiAweDxtYW50aXNzYSBpbiBoZXg+cDxleHBvbmVudD4gZnJvbSBJU08gQzk5LlxuLy9odHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtaGV4ZmxvYXQvYmxvYi9tYXN0ZXIvaGV4ZmxvYXQuanNcbi8vUHJvdmlkZXM6IGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCAoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSkgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKFwibmFuXCIpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoKHggPiAwKT9cImluZmluaXR5XCI6XCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8xOih4Pj0wKT8wOjE7XG4gIGlmKHNpZ24pIHggPSAteDtcbiAgdmFyIGV4cCA9IDA7XG4gIGlmICh4ID09IDApIHsgfVxuICBlbHNlIGlmICh4IDwgMSkge1xuICAgIHdoaWxlICh4IDwgMSAmJiBleHAgPiAtMTAyMikgIHsgeCAqPSAyOyBleHAtLSB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikgeyB4IC89IDI7IGV4cCsrIH1cbiAgfVxuICB2YXIgZXhwX3NpZ24gPSBleHAgPCAwID8gJycgOiAnKyc7XG4gIHZhciBzaWduX3N0ciA9ICcnO1xuICBpZiAoc2lnbikgc2lnbl9zdHIgPSAnLSdcbiAgZWxzZSB7XG4gICAgc3dpdGNoKHN0eWxlKXtcbiAgICBjYXNlIDQzIC8qICcrJyAqLzogc2lnbl9zdHIgPSAnKyc7IGJyZWFrO1xuICAgIGNhc2UgMzIgLyogJyAnICovOiBzaWduX3N0ciA9ICcgJzsgYnJlYWs7XG4gICAgZGVmYXVsdDogYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwcmVjID49IDAgJiYgcHJlYyA8IDEzKSB7XG4gICAgLyogSWYgYSBwcmVjaXNpb24gaXMgZ2l2ZW4sIGFuZCBpcyBzbWFsbCwgcm91bmQgbWFudGlzc2EgYWNjb3JkaW5nbHkgKi9cbiAgICB2YXIgY3N0ID0gTWF0aC5wb3coMixwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmKHByZWMgPj0gMCl7XG4gICAgdmFyIGlkeCA9IHhfc3RyLmluZGV4T2YoJy4nKTtcbiAgICBpZihpZHg8MCkge1xuICAgICAgeF9zdHIgKz0gJy4nICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsICcwJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHgrMStwcmVjO1xuICAgICAgaWYoeF9zdHIubGVuZ3RoIDwgc2l6ZSlcbiAgICAgICAgeF9zdHIgKz0gY2FtbF9zdHJfcmVwZWF0KHNpemUgLSB4X3N0ci5sZW5ndGgsICcwJyk7XG4gICAgICBlbHNlXG4gICAgICAgIHhfc3RyID0geF9zdHIuc3Vic3RyKDAsc2l6ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoc2lnbl9zdHIgKyAnMHgnICsgeF9zdHIgKyAncCcgKyBleHBfc2lnbiArIGV4cC50b1N0cmluZygxMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgbG8gPSB4LmxvO1xuICB2YXIgbWkgPSB4Lm1pO1xuICB2YXIgaGkgPSB4LmhpO1xuICB2YXIgZXhwID0gKGhpICYgMHg3ZmZmKSA+PiA0O1xuICBpZiAoZXhwID09IDIwNDcpIHtcbiAgICBpZiAoKGxvfG1pfChoaSYweGYpKSA9PSAwKVxuICAgICAgcmV0dXJuIChoaSAmIDB4ODAwMCk/KC1JbmZpbml0eSk6SW5maW5pdHk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsLTI0KTtcbiAgdmFyIHJlcyA9IChsbyprK21pKSprKyhoaSYweGYpO1xuICBpZiAoZXhwID4gMCkge1xuICAgIHJlcyArPSAxNjtcbiAgICByZXMgKj0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gIH0gZWxzZVxuICAgIHJlcyAqPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgaWYgKGhpICYgMHg4MDAwKSByZXMgPSAtIHJlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9zdWIsY2FtbF9pbnQ2NF9vZl9pbnQzMlxuZnVuY3Rpb24gY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgKHgseSkge1xuICBpZihpc05hTih4KSB8fCBpc05hTih5KSkgcmV0dXJuIE5hTjtcbiAgaWYoeD09eSkgcmV0dXJuIHk7XG4gIGlmKHg9PTApe1xuICAgIGlmKHkgPCAwKVxuICAgICAgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpXG4gIH1cbiAgdmFyIGJpdHMgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoeCk7XG4gIHZhciBvbmUgPSBjYW1sX2ludDY0X29mX2ludDMyKDEpO1xuICBpZiAoKHg8eSkgPT0gKHg+MCkpXG4gICAgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSlcbiAgZWxzZVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X3N1YihiaXRzLCBvbmUpXG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCl7XG4gIHJldHVybiBNYXRoLnRydW5jKHgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgaW50MzJhID0gbmV3IGdsb2JhbFRoaXMuSW50MzJBcnJheSgxKTtcbiAgaW50MzJhWzBdID0geDtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IGdsb2JhbFRoaXMuRmxvYXQzMkFycmF5KGludDMyYS5idWZmZXIpO1xuICByZXR1cm4gZmxvYXQzMmFbMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2xhc3NpZnlfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2xhc3NpZnlfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIGlmIChNYXRoLmFicyh4KSA+PSAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgcmV0dXJuIDA7XG4gICAgaWYgKHggIT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgcmV0dXJuIGlzTmFOKHgpPzQ6Mztcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbW9kZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tb2RmX2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICB2YXIgbmVnID0gKDEveCkgPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IgKHgpO1xuICAgIHZhciBmID0geCAtIGk7XG4gICAgaWYgKG5lZykgeyBpID0gLWk7IGYgPSAtZjsgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKGlzTmFOICh4KSkgcmV0dXJuIFswLCBOYU4sIE5hTl07XG4gIHJldHVybiBbMCwgMS94LCB4XTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbGRleHBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbGRleHBfZmxvYXQgKHgsZXhwKSB7XG4gIGV4cCB8PSAwO1xuICBpZiAoZXhwID4gMTAyMykge1xuICAgIGV4cCAtPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgaWYgKGV4cCA+IDEwMjMpIHsgIC8vIGluIGNhc2UgeCBpcyBzdWJub3JtYWxcbiAgICAgIGV4cCAtPSAxMDIzO1xuICAgICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4cCA8IC0xMDIzKSB7XG4gICAgZXhwICs9IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAtMTAyMyk7XG4gIH1cbiAgeCAqPSBNYXRoLnBvdygyLCBleHApO1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZnJleHBfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9mcmV4cF9mbG9hdCAoeCkge1xuICBpZiAoKHggPT0gMCkgfHwgIWlzRmluaXRlKHgpKSByZXR1cm4gWzAsIHgsIDBdO1xuICB2YXIgbmVnID0geCA8IDA7XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywganNvb19mbG9vcl9sb2cyKHgpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwtZXhwKTtcbiAgd2hpbGUgKHggPCAwLjUpIHtcbiAgICB4ICo9IDI7XG4gICAgZXhwLS07XG4gIH1cbiAgd2hpbGUgKHggPj0gMSkge1xuICAgIHggKj0gMC41O1xuICAgIGV4cCsrO1xuICB9XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUgKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHJldHVybiAwO1xuICBpZiAoeCA8IHkpIHJldHVybiAtMTtcbiAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgaWYgKHggPT09IHgpIHJldHVybiAxO1xuICBpZiAoeSA9PT0geSkgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb3B5c2lnbl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3B5c2lnbl9mbG9hdCAoeCwgeSkge1xuICBpZiAoeSA9PSAwKSB5ID0gMSAvIHk7XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgcmV0dXJuICh5IDwgMCk/KC14KTp4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NpZ25iaXRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2lnbmJpdF9mbG9hdCh4KSB7XG4gIGlmICh4ID09IDApIHggPSAxIC8geDtcbiAgcmV0dXJuICh4IDwgMCk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4cG0xX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cG0xX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmV4cG0xKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2V4cDJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLnBvdygyLCB4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxcF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxcF9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzFwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzIoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaHlwb3RfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaHlwb3RfZmxvYXQgKHgsIHkpIHsgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMTBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMTBfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgubG9nMTAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYWNvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYWNvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYWNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXNpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXNpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF90YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXRhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXRhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcm91bmRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfcm91bmRfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNicnQoeCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9IDEuMCAtICgoKChhNSAqIHQgKyBhNCkgKiB0ICsgYTMpICogdCArIGEyKSAqIHQgKyBhMSkgKiB0ICogTWF0aC5leHAoLXggKiB4KTtcblxuICByZXR1cm4gc2lnbiAqIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmY19mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9lcmZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfZXJmY19mbG9hdCh4KSB7XG4gIHJldHVybiAxIC0gY2FtbF9lcmZfZmxvYXQoeCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5IChhLCBiKSB7XG4gICAgdmFyIGF0ID0gU1BMSVQgKiBhO1xuICAgIHZhciBhaGkgPSBhdCAtIChhdCAtIGEpO1xuICAgIHZhciBhbG8gPSBhIC0gYWhpO1xuICAgIHZhciBidCA9IFNQTElUICogYjtcbiAgICB2YXIgYmhpID0gYnQgLSAoYnQgLSBiKTtcbiAgICB2YXIgYmxvID0gYiAtIGJoaTtcbiAgICB2YXIgcCA9IGEgKiBiO1xuICAgIHZhciBlID0gKChhaGkgKiBiaGkgLSBwKSArIGFoaSAqIGJsbyArIGFsbyAqIGJoaSkgKyBhbG8gKiBibG87XG4gICAgcmV0dXJuIHtcbiAgICAgIHA6IHAsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSAoYSAtIChzIC0gdikpICsgKGIgLSB2KTtcbiAgICByZXR1cm4ge1xuICAgICAgczogcyxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkanVzdCAoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4ID8geCAqICgxICsgKHggPCAwID8gLTEgOiArMSkgKiAoeSA8IDAgPyAtMSA6ICsxKSAqIEVQU0lMT04pIDogeDtcbiAgfTtcblxuICBpZiAoeCA9PT0gMCB8fCB4ICE9PSB4IHx8IHggPT09ICsxIC8gMCB8fCB4ID09PSAtMSAvIDAgfHxcbiAgICAgIHkgPT09IDAgfHwgeSAhPT0geSB8fCB5ID09PSArMSAvIDAgfHwgeSA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICsgejtcbiAgfVxuICBpZiAoeiA9PT0gMCkge1xuICAgIHJldHVybiB4ICogeTtcbiAgfVxuICBpZiAoeiAhPT0geiB8fCB6ID09PSArMSAvIDAgfHwgeiA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiBNYXRoLmFicyh4cyAqIHlzKSAqIDQgLyBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cbiAgaWYgKE1hdGguYWJzKHpzKSA8IE1hdGguYWJzKHhzICogeXMpICogRVBTSUxPTiAvIDQgKiBFUFNJTE9OIC8gNCkge1xuICAgIHpzID0gKHogPCAwID8gLTEgOiArMSkgKiBNSU5fVkFMVUU7XG4gIH1cblxuICB2YXIgeHkgPSBtdWx0aXBseSh4cywgeXMpO1xuICB2YXIgcyA9IGFkZCh4eS5wLCB6cyk7XG4gIHZhciB1ID0gYWRkKHh5LmUsIHMuZSk7XG4gIHZhciBpID0gYWRkKHMucywgdS5zKTtcblxuICB2YXIgZiA9IGkucyArIGFkanVzdChpLmUsIHUuZSk7XG4gIGlmIChmID09PSAwKSB7XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICB2YXIgZnMgPSBmICogc2NhbGU7XG4gIGlmIChNYXRoLmFicyhmcykgPiBNSU5fVkFMVUUpIHtcbiAgICByZXR1cm4gZnM7XG4gIH1cblxuICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdhcyBleHRyYSByb3VuZGluZyBmb3IgYSBkZW5vcm1hbGl6ZWQgdmFsdWUuXG4gIHJldHVybiBmcyArIGFkanVzdChmIC0gZnMgLyBzY2FsZSwgaS5lKSAqIHNjYWxlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2Zsb2F0IChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LGRwKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpIDwgMS4wKSB7XG4gICAgICByZXR1cm4geC50b0ZpeGVkKGRwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGUgPSBwYXJzZUludCh4LnRvU3RyaW5nKCkuc3BsaXQoJysnKVsxXSk7XG4gICAgICBpZiAoZSA+IDIwKSB7XG4gICAgICAgIGUgLT0gMjA7XG4gICAgICAgIHggLz0gTWF0aC5wb3coMTAsZSk7XG4gICAgICAgIHggKz0gKG5ldyBBcnJheShlKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIGlmKGRwID4gMCkge1xuICAgICAgICAgIHggPSB4ICsgJy4nICsgKG5ldyBBcnJheShkcCsxKSkuam9pbignMCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgICAgZWxzZSByZXR1cm4geC50b0ZpeGVkKGRwKVxuICAgIH1cbiAgfVxuICB2YXIgcywgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIHZhciBwcmVjID0gKGYucHJlYyA8IDApPzY6Zi5wcmVjO1xuICBpZiAoeCA8IDAgfHwgKHggPT0gMCAmJiAxL3ggPT0gLUluZmluaXR5KSkgeyBmLnNpZ24gPSAtMTsgeCA9IC14OyB9XG4gIGlmIChpc05hTih4KSkgeyBzID0gXCJuYW5cIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZSBpZiAoIWlzRmluaXRlKHgpKSB7IHMgPSBcImluZlwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlXG4gICAgc3dpdGNoIChmLmNvbnYpIHtcbiAgICBjYXNlICdlJzpcbiAgICAgIHZhciBzID0geC50b0V4cG9uZW50aWFsKHByZWMpO1xuICAgICAgLy8gZXhwb25lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IHR3byBkaWdpdHNcbiAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2YnOlxuICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7IGJyZWFrO1xuICAgIGNhc2UgJ2cnOlxuICAgICAgcHJlYyA9IHByZWM/cHJlYzoxO1xuICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICB2YXIgaiA9IHMuaW5kZXhPZignZScpO1xuICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgIGlmIChleHAgPCAtNCB8fCB4ID49IDFlMjEgfHwgeC50b0ZpeGVkKDApLmxlbmd0aCA+IHByZWMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICB2YXIgaSA9IGogLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgaSA9IHMubGVuZ3RoO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgaWYgKGV4cCA8IDApIHsgcCAtPSBleHAgKyAxOyBzID0geC50b0ZpeGVkKHApOyB9XG4gICAgICAgIGVsc2Ugd2hpbGUgKHMgPSB4LnRvRml4ZWQocCksIHMubGVuZ3RoID4gcHJlYyArIDEpIHAtLTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgICAgdmFyIGkgPSBzLmxlbmd0aCAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpXG4gIHJlcyA9ICtzO1xuICBpZiAoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLFwiXCIpO1xuICByZXMgPSArcztcbiAgaWYgKCgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSB8fCAvXlsrLV0/bmFuJC9pLnRlc3QocykpIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8vaS5leGVjKHMpO1xuICAvLyAgICAgICAgICAxICAgICAgICAyICAgICAgICAgICAgIDMgICAgICAgICAgIDVcbiAgaWYobSl7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCcnKTtcbiAgICB2YXIgbWFudGlzc2EgPSBwYXJzZUludChtWzFdICsgbVsyXSArIG0zLCAxNik7XG4gICAgdmFyIGV4cG9uZW50ID0gKG1bNV18MCkgLSA0Km0zLmxlbmd0aDtcbiAgICByZXMgPSBtYW50aXNzYSAqIE1hdGgucG93KDIsIGV4cG9uZW50KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmKC9eXFwrP2luZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBJbmZpbml0eTtcbiAgaWYoL14taW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIC1JbmZpbml0eTtcbiAgY2FtbF9mYWlsd2l0aChcImZsb2F0X29mX3N0cmluZ1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zLm5vZGUgIT09ICd1bmRlZmluZWQnKVxufVxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIGZhbHNlXG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbE5vZGVGaWxlLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV93aXRoX2FyZ3Ncbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIE1sTm9kZURldmljZShyb290KSB7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLnJvb3QgPSByb290O1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLHttb2RlOm1vZGV9KTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucm1kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5yZWFkZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNEaXJlY3RvcnkoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGIgPSB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICAgIHRoaXMuZnMudW5saW5rU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gYjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZiwgcmFpc2VfdW5peCkge1xuICB2YXIgY29uc3RzID0gcmVxdWlyZSgnY29uc3RhbnRzJyk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGtleSBpbiBmKXtcbiAgICBzd2l0Y2goa2V5KXtcbiAgICBjYXNlIFwicmRvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1JET05MWTsgYnJlYWs7XG4gICAgY2FzZSBcIndyb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19XUk9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJhcHBlbmRcIiAgOlxuICAgICAgcmVzIHw9IGNvbnN0cy5PX1dST05MWSB8IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjcmVhdGVcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0NSRUFUOyAgICBicmVhaztcbiAgICBjYXNlIFwidHJ1bmNhdGVcIiA6IHJlcyB8PSBjb25zdHMuT19UUlVOQzsgICAgYnJlYWs7XG4gICAgY2FzZSBcImV4Y2xcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fRVhDTDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJiaW5hcnlcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTsgICBicmVhaztcbiAgICBjYXNlIFwidGV4dFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19URVhUOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm5vbmJsb2NrXCIgOiByZXMgfD0gY29uc3RzLk9fTk9OQkxPQ0s7IGJyZWFrO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHZhciBmZCA9IHRoaXMuZnMub3BlblN5bmModGhpcy5ubShuYW1lKSwgcmVzKTtcbiAgICByZXR1cm4gbmV3IE1sTm9kZUZpbGUoZmQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVuYW1lID0gZnVuY3Rpb24obywgbiwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubHN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3ltbGluayA9IGZ1bmN0aW9uKHRvX2RpciwgdGFyZ2V0LCBwYXRoLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5zeW1saW5rU3luYyh0aGlzLm5tKHRhcmdldCksIHRoaXMubm0ocGF0aCksIHRvX2RpciA/ICdkaXInIDogJ2ZpbGUnKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZWFkbGluayA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgbGluayA9IHRoaXMuZnMucmVhZGxpbmtTeW5jKHRoaXMubm0obmFtZSksICd1dGY4Jyk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGxpbmspO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJhaXNlX25vZGVqc19lcnJvciA9IGZ1bmN0aW9uKGVyciwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpIHtcbiAgICB2YXIgYXJncyA9IG1ha2VfdW5peF9lcnJfYXJncyhlcnIuY29kZSwgZXJyLnN5c2NhbGwsIGVyci5wYXRoLCBlcnIuZXJybm8pO1xuICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0c19mcm9tX2pzID0gZnVuY3Rpb24oanNfc3RhdHMpIHtcbiAgLyogPT09VW5peC5maWxlX2tpbmQ9PT1cbiAgICogdHlwZSBmaWxlX2tpbmQgPVxuICAgKiAgICAgU19SRUcgICAgICAgICAgICAgICAgICAgICAgICgqKiBSZWd1bGFyIGZpbGUgKilcbiAgICogICB8IFNfRElSICAgICAgICAgICAgICAgICAgICAgICAoKiogRGlyZWN0b3J5ICopXG4gICAqICAgfCBTX0NIUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIENoYXJhY3RlciBkZXZpY2UgKilcbiAgICogICB8IFNfQkxLICAgICAgICAgICAgICAgICAgICAgICAoKiogQmxvY2sgZGV2aWNlICopXG4gICAqICAgfCBTX0xOSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFN5bWJvbGljIGxpbmsgKilcbiAgICogICB8IFNfRklGTyAgICAgICAgICAgICAgICAgICAgICAoKiogTmFtZWQgcGlwZSAqKVxuICAgKiAgIHwgU19TT0NLICAgICAgICAgICAgICAgICAgICAgICgqKiBTb2NrZXQgKilcbiAgICovXG4gIHZhciBmaWxlX2tpbmQ7XG4gIGlmIChqc19zdGF0cy5pc0ZpbGUoKSkge1xuICAgIGZpbGVfa2luZCA9IDA7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVfa2luZCA9IDE7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDI7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNCbG9ja0RldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMztcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgZmlsZV9raW5kID0gNDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0ZJRk8oKSkge1xuICAgIGZpbGVfa2luZCA9IDU7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTb2NrZXQoKSkge1xuICAgIGZpbGVfa2luZCA9IDY7XG4gIH1cbiAgLyogPT09VW5peC5zdGF0cz09PVxuICAgKiB0eXBlIHN0YXRzID1cbiAgICogIHsgc3RfZGV2IDogaW50OyAgICAgICAgICAgICAgICgqKiBEZXZpY2UgbnVtYmVyICopXG4gICAqICAgIHN0X2lubyA6IGludDsgICAgICAgICAgICAgICAoKiogSW5vZGUgbnVtYmVyICopXG4gICAqICAgIHN0X2tpbmQgOiBmaWxlX2tpbmQ7ICAgICAgICAoKiogS2luZCBvZiB0aGUgZmlsZSAqKVxuICAgKiAgICBzdF9wZXJtIDogZmlsZV9wZXJtOyAgICAgICAgKCoqIEFjY2VzcyByaWdodHMgKilcbiAgICogICAgc3RfbmxpbmsgOiBpbnQ7ICAgICAgICAgICAgICgqKiBOdW1iZXIgb2YgbGlua3MgKilcbiAgICogICAgc3RfdWlkIDogaW50OyAgICAgICAgICAgICAgICgqKiBVc2VyIGlkIG9mIHRoZSBvd25lciAqKVxuICAgKiAgICBzdF9naWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAgKilcbiAgICogICAgc3RfcmRldiA6IGludDsgICAgICAgICAgICAgICgqKiBEZXZpY2UgSUQgKGlmIHNwZWNpYWwgZmlsZSkgKilcbiAgICogICAgc3Rfc2l6ZSA6IGludDsgICAgICAgICAgICAgICgqKiBTaXplIGluIGJ5dGVzICopXG4gICAqICAgIHN0X2F0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBhY2Nlc3MgdGltZSAqKVxuICAgKiAgICBzdF9tdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUgKilcbiAgICogICAgc3RfY3RpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IHN0YXR1cyBjaGFuZ2UgdGltZSAqKVxuICAgKiAgfVxuICAgKi9cbiAgcmV0dXJuIEJMT0NLKFxuICAgIDAsXG4gICAganNfc3RhdHMuZGV2LFxuICAgIGpzX3N0YXRzLmlubyxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAganNfc3RhdHMuc2l6ZSxcbiAgICBqc19zdGF0cy5hdGltZU1zLFxuICAgIGpzX3N0YXRzLm10aW1lTXMsXG4gICAganNfc3RhdHMuY3RpbWVNc1xuICApO1xufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKCkge1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sTm9kZUZpbGUoZmQpe1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5mZCA9IGZkO1xufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuXG5NbE5vZGVGaWxlLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5mdHJ1bmNhdGVTeW5jKHRoaXMuZmQsbGVufDApXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKS5zaXplO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZpbGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHZhciBhID0gY2FtbF9hcnJheV9vZl9zdHJpbmcoYnVmKTtcbiAgaWYoISAoYSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuVWludDhBcnJheSkpXG4gICAgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQ4QXJyYXkoYSk7XG4gIHZhciBidWZmZXIgPSBnbG9iYWxUaGlzLkJ1ZmZlci5mcm9tKGEpO1xuICB0cnkge1xuICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZmZlciwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5NbE5vZGVGaWxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHZhciBhID0gY2FtbF9hcnJheV9vZl9ieXRlcyhidWYpO1xuICBpZighIChhIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5VaW50OEFycmF5KSlcbiAgICBhID0gbmV3IGdsb2JhbFRoaXMuVWludDhBcnJheShhKTtcbiAgdmFyIGJ1ZmZlciA9IGdsb2JhbFRoaXMuQnVmZmVyLmZyb20oYSk7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBidWZmZXIsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgY2FtbF9ieXRlc19zZXQoYnVmLGJ1Zl9vZmZzZXQgKyBpLGJ1ZmZlcltidWZfb2Zmc2V0K2ldKTtcbiAgfVxuICByZXR1cm4gMFxufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUucmVhZF9vbmUgPSBmdW5jdGlvbihvZmZzZXQpe1xuICB2YXIgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQ4QXJyYXkoMSk7XG4gIHZhciBidWZmZXIgPSBnbG9iYWxUaGlzLkJ1ZmZlci5mcm9tKGEpO1xuICB0cnkge1xuICAgIHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYnVmZmVyLCAwLCAxLCBvZmZzZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclswXTtcbn1cbk1sTm9kZUZpbGUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmNsb3NlU3luYyh0aGlzLmZkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cbk1sTm9kZUZpbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRmlsZTtcblxuLy9Qcm92aWRlczogTWxOb2RlRmlsZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRmlsZSgpe1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBEdW1teSBmaWxlc3lzdGVtXG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSl7XG4gIHJldHVybiAobmFtZS5zbGljZSgtMSkgIT09IFwiL1wiKSA/IChuYW1lICsgXCIvXCIpIDogbmFtZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9IGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csJy8nKTtcbmVsc2VcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSAgXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKXtcbiAgdmFyIHggPSBwYXRoX2lzX2Fic29sdXRlKHBhdGgpO1xuICBpZiAoIXgpIHJldHVybjtcbiAgcmV0dXJuIHhbMF0gKyBcIi9cIn1cblxuLy9Qcm92aWRlczogY2FtbF9yb290XG4vL1JlcXVpcmVzOiBjYW1sX2dldF9yb290LCBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX2ZhaWx3aXRoXG52YXIgY2FtbF9yb290ID0gY2FtbF9nZXRfcm9vdChjYW1sX2N1cnJlbnRfZGlyKSB8fCBjYW1sX2ZhaWx3aXRoKFwidW5hYmxlIHRvIGNvbXB1dGUgY2FtbF9yb290XCIpO1xuXG5cbi8vUHJvdmlkZXM6IE1sRmlsZVxuZnVuY3Rpb24gTWxGaWxlKCl7ICB9XG5cbi8vUHJvdmlkZXM6IHBhdGhfaXNfYWJzb2x1dGVcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKSB7XG4gIGZ1bmN0aW9uIHBvc2l4KHBhdGgpIHtcbiAgICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykgcmV0dXJuIFtcIlwiLCBwYXRoLnN1YnN0cmluZygxKV07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gd2luMzIocGF0aCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IzZmNjMjQ1ZmIyNTUzOTkwOWVmMWQ1ZWFhMDFkYmY5MmUxNjg2MzMvbGliL3BhdGguanMjTDU2XG4gICAgdmFyIHNwbGl0RGV2aWNlUmUgPSAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8ICcnO1xuICAgIHZhciBpc1VuYyA9IEJvb2xlYW4oZGV2aWNlICYmIGRldmljZS5jaGFyQXQoMSkgIT09ICc6Jyk7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChCb29sZWFuKHJlc3VsdFsyXSB8fCBpc1VuYykpIHtcbiAgICAgIHZhciByb290ID0gKHJlc3VsdFsxXSB8fCAnJyk7XG4gICAgICB2YXIgc2VwID0gKHJlc3VsdFsyXSB8fCAnJyk7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc3Vic3RyaW5nKHJvb3QubGVuZ3RoICsgc2VwLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZihmc19ub2RlX3N1cHBvcnRlZCAoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHdpbjMyIDogcG9zaXg7XG4gIH1cbiAgZWxzZSByZXR1cm4gcG9zaXhcbn1cbnZhciBwYXRoX2lzX2Fic29sdXRlID0gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9wYXRoXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3BhdGggKG5hbWUpIHtcbiAgbmFtZT1jYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgaWYoICFwYXRoX2lzX2Fic29sdXRlKG5hbWUpIClcbiAgICBuYW1lID0gY2FtbF9jdXJyZW50X2RpciArIG5hbWU7XG4gIHZhciBjb21wMCA9IHBhdGhfaXNfYWJzb2x1dGUobmFtZSk7XG4gIHZhciBjb21wID0gY29tcDBbMV0uc3BsaXQoXCIvXCIpO1xuICB2YXIgbmNvbXAgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpPGNvbXAubGVuZ3RoOyBpKyspe1xuICAgIHN3aXRjaChjb21wW2ldKXtcbiAgICBjYXNlIFwiLi5cIjogaWYobmNvbXAubGVuZ3RoPjEpIG5jb21wLnBvcCgpOyBicmVhaztcbiAgICBjYXNlIFwiLlwiOiBicmVhaztcbiAgICBkZWZhdWx0OiBuY29tcC5wdXNoKGNvbXBbaV0pO2JyZWFrXG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn0gZWxzZSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoY2FtbF9yb290KX0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOlwiL3N0YXRpYy9cIiwgZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKX0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9saXN0X21vdW50X3BvaW50KCl7XG4gIHZhciBwcmV2ID0gMFxuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKyl7XG4gICAgdmFyIG9sZCA9IHByZXY7XG4gICAgcHJldiA9IFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF1cbiAgfVxuICByZXR1cm4gcHJldjtcbn1cblxuLy9Qcm92aWRlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9nZXRfcm9vdCwgTWxOb2RlRGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gcGF0aC5qb2luKFwiL1wiKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpO1xuICB2YXIgcmVzO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZihuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09IDBcbiAgICAgICAmJiAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKSlcbiAgICAgIHJlcyA9IHtwYXRoOm0ucGF0aCxkZXZpY2U6bS5kZXZpY2UscmVzdDpuYW1lLnN1YnN0cmluZyhtLnBhdGgubGVuZ3RoLG5hbWUubGVuZ3RoKX07XG4gIH1cbiAgaWYoICFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdCAmJiByb290Lm1hdGNoKC9eW2EtekEtWl06XFwvJC8pKXtcbiAgICAgIHZhciBtID0ge3BhdGg6cm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShyb290KX07XG4gICAgICBqc29vX21vdW50X3BvaW50LnB1c2gobSk7XG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICAgIH1cbiAgfVxuICBpZiggcmVzICkgcmV0dXJuIHJlcztcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJubyBkZXZpY2UgZm91bmQgZm9yIFwiICsgbmFtZV9zbGFzaCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW91bnRfYXV0b2xvYWRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfbW91bnRfYXV0b2xvYWQobmFtZSxmKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6bmFtZSxkZXZpY2U6bmV3IE1sRmFrZURldmljZShuYW1lLGYpfSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5tb3VudFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9tYWtlX3BhdGgsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdW5tb3VudChuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICB2YXIgaWR4ID0gLTE7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCA9PSBuYW1lKSBpZHggPSBpO1xuICBpZihpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LDEpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRjd2Rcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGN3ZCgpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9jdXJyZW50X2Rpcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2gsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX2NoZGlyKGRpcikge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRpcik7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgaWYocm9vdC5yZXN0KSBjYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChyb290LnBhdGggKyByb290LnJlc3QpO1xuICAgIGVsc2UgY2FtbF9jdXJyZW50X2RpciA9IHJvb3QucGF0aDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGRpcikpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfYV9kaXIobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmlsZV9leGlzdHNcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19maWxlX2V4aXN0cyAobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9hX2RpciwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLnJlYWRkaXIocm9vdC5yZXN0KTtcbiAgdmFyIGwgPSBuZXcgQXJyYXkoYS5sZW5ndGggKyAxKTtcbiAgbFswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8YS5sZW5ndGg7aSsrKVxuICAgIGxbaSsxXSA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYVtpXSk7XG4gIHJldHVybiBsO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW1vdmVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgb2sgPSByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0KTtcbiAgaWYob2sgPT0gMCkgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiBhPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVuYW1lKG8sbil7XG4gIHZhciBvX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShvKTtcbiAgdmFyIG5fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG4pO1xuICBpZihvX3Jvb3QuZGV2aWNlICE9IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZighb19yb290LmRldmljZS5yZW5hbWUpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm8gaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfc3lzX21rZGlyKG5hbWUsIHBlcm0pe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QscGVybSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vdF9hX2RpclxuZnVuY3Rpb24gY2FtbF9zeXNfcm1kaXIobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKHZmZCwga2luZCwgbGF5b3V0LCBzaGFyZWQsIGRpbXMsIHBvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW3ZmZF07XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2JhX21hcF9maWxlIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZVxuLy9SZXF1aXJlczogY2FtbF9iYV9tYXBfZmlsZVxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZShhcmd2LGFyZ24pe1xuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLGFyZ3ZbMV0sYXJndlsyXSxhcmd2WzNdLGFyZ3ZbNF0sYXJndls1XSk7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlX2V4dGVybihuYW1lLGNvbnRlbnQpe1xuICBpZihnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUpXG4gICAgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCk7XG4gIGVsc2Uge1xuICAgIGlmKCFnbG9iYWxUaGlzLmNhbWxfZnNfdG1wKSBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gICAgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcC5wdXNoKHtuYW1lOm5hbWUsY29udGVudDpjb250ZW50fSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnNfaW5pdFxuLy9SZXF1aXJlczoganNvb19jcmVhdGVfZmlsZVxuZnVuY3Rpb24gY2FtbF9mc19pbml0ICgpe1xuICB2YXIgdG1wPWdsb2JhbFRoaXMuY2FtbF9mc190bXBcbiAgaWYodG1wKXtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgaSsrKXtcbiAgICAgIGpzb29fY3JlYXRlX2ZpbGUodG1wW2ldLm5hbWUsdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYoISByb290LmRldmljZS5yZWdpc3RlcikgY2FtbF9mYWlsd2l0aChcImNhbm5vdCByZWdpc3RlciBmaWxlXCIpO1xuICByb290LmRldmljZS5yZWdpc3Rlcihyb290LnJlc3QsY29udGVudCk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciBuYW1lID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlYWRfZmlsZV9jb250ZW50XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWFkX2ZpbGVfY29udGVudCAobmFtZSkge1xuICB2YXIgbmFtZSA9ICh0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiKT9jYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpOm5hbWU7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCx7cmRvbmx5OjF9KTtcbiAgICB2YXIgbGVuICA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiAgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgIGZpbGUucmVhZCgwLGJ1ZiwwLGxlbik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2J5dGVzKGJ1ZilcbiAgfVxuICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbn1cbiIsIi8vUHJvdmlkZXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiB1bml4X2dldHRpbWVvZmRheSAoKSB7XG4gIHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMDtcbn1cblxuLy9Qcm92aWRlczogdW5peF90aW1lXG4vL1JlcXVpcmVzOiB1bml4X2dldHRpbWVvZmRheVxuZnVuY3Rpb24gdW5peF90aW1lICgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IodW5peF9nZXR0aW1lb2ZkYXkgKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2dtdGltZVxuZnVuY3Rpb24gdW5peF9nbXRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRVVENTZWNvbmRzKCksIGQuZ2V0VVRDTWludXRlcygpLCBkLmdldFVUQ0hvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RhdGUoKSwgZC5nZXRVVENNb250aCgpLCBkLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXRVVENEYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgZmFsc2UgfCAwIC8qIGZvciBVVEMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGlzIGZhbHNlICovKVxufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2xvY2FsdGltZVxuZnVuY3Rpb24gdW5peF9sb2NhbHRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoamFuLmdldFRpbWV6b25lT2Zmc2V0KCksIGp1bC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgcmV0dXJuIEJMT0NLKDAsIGQuZ2V0U2Vjb25kcygpLCBkLmdldE1pbnV0ZXMoKSwgZC5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgZC5nZXREYXRlKCksIGQuZ2V0TW9udGgoKSwgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF5KCksIGRveSxcbiAgICAgICAgICAgICAgIChkLmdldFRpbWV6b25lT2Zmc2V0KCkgPCBzdGRUaW1lem9uZU9mZnNldCkgfCAwIC8qIGRheWxpZ2h0IHNhdmluZ3MgdGltZSAgZmllbGQuICovKVxufVxuXG4vL1Byb3ZpZGVzOiB1bml4X21rdGltZVxuLy9SZXF1aXJlczogdW5peF9sb2NhbHRpbWVcbmZ1bmN0aW9uIHVuaXhfbWt0aW1lKHRtKXtcbiAgdmFyIGQgPSAobmV3IERhdGUodG1bNl0rMTkwMCx0bVs1XSx0bVs0XSx0bVszXSx0bVsyXSx0bVsxXSkpLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IHVuaXhfbG9jYWx0aW1lKHQpO1xuICByZXR1cm4gQkxPQ0soMCx0LHRtMik7XG59XG5cbi8vUHJvdmlkZXM6IHdpbl9zdGFydHVwIGNvbnN0XG5mdW5jdGlvbiB3aW5fc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IHdpbl9jbGVhbnVwIGNvbnN0XG5mdW5jdGlvbiB3aW5fY2xlYW51cCgpIHt9XG5cbi8vUHJvdmlkZXM6IHdpbl9oYW5kbGVfZmQgY29uc3RcbmZ1bmN0aW9uIHdpbl9oYW5kbGVfZmQoeCkge3JldHVybiB4O31cblxuLy9Qcm92aWRlczogdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiB1bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuICAgIHJldHVybiB0dHkuaXNhdHR5KGZpbGVEZXNjcmlwdG9yKT8xOjA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLCBcIkVBQ0NFU1wiLCBcIkVBR0FJTlwiLCBcIkVCQURGXCIsIFwiRUJVU1lcIiwgXCJFQ0hJTERcIiwgXCJFREVBRExLXCIsIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLCBcIkVGQVVMVFwiLCBcIkVGQklHXCIsIFwiRUlOVFJcIiwgXCJFSU5WQUxcIiwgXCJFSU9cIiwgXCJFSVNESVJcIiwgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIiwgXCJFTkFNRVRPT0xPTkdcIiwgXCJFTkZJTEVcIiwgXCJFTk9ERVZcIiwgXCJFTk9FTlRcIiwgXCJFTk9FWEVDXCIsIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsIFwiRU5PU1BDXCIsIFwiRU5PU1lTXCIsIFwiRU5PVERJUlwiLCBcIkVOT1RFTVBUWVwiLCBcIkVOT1RUWVwiLCBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIiwgXCJFUElQRVwiLCBcIkVSQU5HRVwiLCBcIkVST0ZTXCIsIFwiRVNQSVBFXCIsIFwiRVNSQ0hcIiwgXCJFWERFVlwiLCBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIiwgXCJFQUxSRUFEWVwiLCBcIkVOT1RTT0NLXCIsIFwiRURFU1RBRERSUkVRXCIsIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsIFwiRU5PUFJPVE9PUFRcIiwgXCJFUFJPVE9OT1NVUFBPUlRcIiwgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsIFwiRVBGTk9TVVBQT1JUXCIsIFwiRUFGTk9TVVBQT1JUXCIsIFwiRUFERFJJTlVTRVwiLCBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLCBcIkVORVRVTlJFQUNIXCIsIFwiRU5FVFJFU0VUXCIsIFwiRUNPTk5BQk9SVEVEXCIsIFwiRUNPTk5SRVNFVFwiLCBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsIFwiRU5PVENPTk5cIiwgXCJFU0hVVERPV05cIiwgXCJFVE9PTUFOWVJFRlNcIiwgXCJFVElNRURPVVRcIiwgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIiwgXCJFSE9TVFVOUkVBQ0hcIiwgXCJFTE9PUFwiLCBcIkVPVkVSRkxPV1wiXG5dO1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5XG4gICAgfVxuICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIHZhcmlhbnRzLCBmYWxsYmFjayB0byBFVU5LTk9XTkVSUihpbnQpXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIGVycm5vKTtcbiAgfVxuICB2YXIgYXJncyA9IFtcbiAgICB2YXJpYW50LFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHN5c2NhbGwgfHwgXCJcIiksXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aCB8fCBcIlwiKVxuICBdO1xuICByZXR1cm4gYXJncztcbn1cblxuLy9Qcm92aWRlczogdW5peF9zdGF0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF9zdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcInVuaXhfc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5zdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF9zdGF0XzY0XG4vL1JlcXVpcmVzOiB1bml4X3N0YXRcbnZhciB1bml4X3N0YXRfNjQgPSB1bml4X3N0YXQ7XG5cbi8vUHJvdmlkZXM6IHVuaXhfbHN0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiB1bml4X2xzdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5sc3RhdCkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogdW5peF9sc3RhdFxudmFyIHVuaXhfbHN0YXRfNjQgPSB1bml4X2xzdGF0O1xuXG4vL1Byb3ZpZGVzOiB1bml4X21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwidW5peF9ta2Rpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiB1bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X3JtZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF9zeW1saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF9zeW1saW5rKHRvX2Rpciwgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYoc3JjX3Jvb3QuZGV2aWNlICE9IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwidW5peF9zeW1saW5rOiBjYW5ub3Qgc3ltbGluayBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtc1wiKTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2Uuc3ltbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmsodG9fZGlyLCBzcmNfcm9vdC5yZXN0LCBkc3Rfcm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X3JlYWRsaW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwidW5peF9yZWFkbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5yZWFkbGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfdW5saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF91bmxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnVubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2dldHVpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbmZ1bmN0aW9uIHVuaXhfZ2V0dWlkKHVuaXQpIHtcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQpe1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKCk7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF9nZXRwd3VpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbmZ1bmN0aW9uIHVuaXhfZ2V0cHd1aWQodW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpXG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiB1bml4X2hhc19zeW1saW5rKHVuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCk/MTowXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIFN5c1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvciAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5TeXNfZXJyb3IsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdCAoY29kZSkge1xuICB2YXIgZyA9IGdsb2JhbFRoaXM7XG4gIGlmKGcucXVpdCkgZy5xdWl0KGNvZGUpO1xuICAvL25vZGVqc1xuICBpZihnLnByb2Nlc3MgJiYgZy5wcm9jZXNzLmV4aXQpXG4gICAgZy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKXtcbiAgc3dpdGNoKGV4blsyXSkge1xuICBjYXNlIC04OiAvLyBNYXRjaF9mYWlsdXJlXG4gIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICBjYXNlIC0xMjogLy8gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcbiAgICByZXR1cm4gMTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihleG4pe1xuICB2YXIgciA9IFwiXCI7XG4gIGlmKGV4blswXSA9PSAwKSB7XG4gICAgciArPSBleG5bMV1bMV07XG4gICAgaWYoZXhuLmxlbmd0aCA9PSAzICYmIGV4blsyXVswXSA9PSAwICYmIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKSkge1xuXG4gICAgICB2YXIgYnVja2V0ID0gZXhuWzJdO1xuICAgICAgdmFyIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXJ0ID0gMlxuICAgICAgdmFyIGJ1Y2tldCA9IGV4bjtcbiAgICB9XG4gICAgciArPSBcIihcIjtcbiAgICBmb3IodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkgKyspe1xuICAgICAgaWYoaSA+IHN0YXJ0KSByKz1cIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXVxuICAgICAgaWYodHlwZW9mIHYgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcis9IHYudG9TdHJpbmcoKTtcbiAgICAgIGVsc2UgaWYodiBpbnN0YW5jZW9mIE1sQnl0ZXMpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHR5cGVvZiB2ID09IFwic3RyaW5nXCIpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCJcbiAgfSBlbHNlIGlmIChleG5bMF0gPT0gMjQ4KXtcbiAgICByICs9IGV4blsxXVxuICB9XG4gIHJldHVybiByXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX2Zvcm1hdF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycil7XG4gIGlmKGVyciBpbnN0YW5jZW9mIEFycmF5ICYmIChlcnJbMF0gPT0gMCB8fCBlcnJbMF0gPT0gMjQ4KSkge1xuICAgIHZhciBoYW5kbGVyID0gY2FtbF9uYW1lZF92YWx1ZShcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIik7XG4gICAgaWYoaGFuZGxlcikgaGFuZGxlcihlcnIsZmFsc2UpO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIG1zZyA9IGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgdmFyIGF0X2V4aXQgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIpO1xuICAgICAgaWYoYXRfZXhpdCkgeyBhdF9leGl0KDApIH1cbiAgICAgIGdsb2JhbFRoaXMuY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cgKyBcIlxcblwiKTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9zdGF0aWNfZW52XG5mdW5jdGlvbiBjYW1sX3NldF9zdGF0aWNfZW52KGssdil7XG4gIGlmKCFnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudilcbiAgICBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudiA9IHt9XG4gIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W2tdID0gdjtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKSB7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgdmFyIG4gPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgLy9ub2RlanMgZW52XG4gIGlmKGcucHJvY2Vzc1xuICAgICAmJiBnLnByb2Nlc3MuZW52XG4gICAgICYmIGcucHJvY2Vzcy5lbnZbbl0gIT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhnLnByb2Nlc3MuZW52W25dKTtcbiAgaWYoZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZcbiAgICAgJiYgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl0pXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W25dKVxuICBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdW5zYWZlX2dldGVudlxuLy9SZXF1aXJlczogY2FtbF9zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52KG5hbWUpe1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIGNhbWxfYXJndiA9ICgoZnVuY3Rpb24gKCkge1xuICB2YXIgZyA9IGdsb2JhbFRoaXM7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdXG5cbiAgaWYoZy5wcm9jZXNzXG4gICAgICYmIGcucHJvY2Vzcy5hcmd2XG4gICAgICYmIGcucHJvY2Vzcy5hcmd2Lmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgYXJndiA9IGcucHJvY2Vzcy5hcmd2XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspXG4gICAgYXJnczIucHVzaChjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhhcmdzW2ldKSk7XG4gIHJldHVybiBhcmdzMjtcbn0pKCkpXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbnZhciBjYW1sX2V4ZWN1dGFibGVfbmFtZSA9IGNhbWxfYXJndlsxXVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfYXJndiAoYSkge1xuICByZXR1cm4gWzAsIGNhbWxfYXJndlsxXSwgY2FtbF9hcmd2XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19hcmd2IChhKSB7XG4gIHJldHVybiBjYW1sX2FyZ3Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21vZGlmeV9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX21vZGlmeV9hcmd2KGFyZyl7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShhKXtcbiAgcmV0dXJuIGNhbWxfZXhlY3V0YWJsZV9uYW1lXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgdmFyIGNtZCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGNtZCk7XG4gIGlmICh0eXBlb2YgcmVxdWlyZSAhPSBcInVuZGVmaW5lZFwiXG4gICAgICAmJiByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJylcbiAgICAgICYmIHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjU3luYykge1xuICAgIHRyeSB7cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNTeW5jKGNtZCx7c3RkaW86ICdpbmhlcml0J30pOyByZXR1cm4gMH1cbiAgICBjYXRjaCAoZSkge3JldHVybiAxfVxuICB9XG4gIGVsc2UgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpICogMC4wMDE7XG5mdW5jdGlvbiBjYW1sX3N5c190aW1lICgpIHtcbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHJldHVybiBub3cgKiAwLjAwMSAtIGNhbWxfaW5pdGlhbF90aW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW5cbi8vUmVxdWlyZXM6IGNhbWxfc3lzX3RpbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlbihiKSB7XG4gIHJldHVybiBjYW1sX3N5c190aW1lKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JhbmRvbV9zZWVkIG11dGFibGVcbi8vVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhbiBhcnJheSBzaW5jZSBPQ2FtbCA0LjAuLi5cbmZ1bmN0aW9uIGNhbWxfc3lzX3JhbmRvbV9zZWVkICgpIHtcbiAgaWYoZ2xvYmFsVGhpcy5jcnlwdG8pIHtcbiAgICBpZih0eXBlb2YgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09PSAnZnVuY3Rpb24nKXtcbiAgICAgIC8vIFdlYmJyb3dzZXJzXG4gICAgICB2YXIgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQzMkFycmF5KDEpO1xuICAgICAgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGEpO1xuICAgICAgcmV0dXJuIFswLGFbMF1dO1xuICAgIH0gZWxzZSBpZihnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcyA9PT0gJ2Z1bmN0aW9uJyl7XG4gICAgICAvLyBOb2RlanNcbiAgICAgIHZhciBidWZmID0gZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tQnl0ZXMoNCk7XG4gICAgICB2YXIgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQzMkFycmF5KGJ1ZmYpO1xuICAgICAgcmV0dXJuIFswLGFbMF1dO1xuICAgIH1cbiAgfVxuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3deMHhmZmZmZmZmZipNYXRoLnJhbmRvbSgpO1xuICByZXR1cm4gWzAseF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gKCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfaW50X3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSBjb25zdFxuLy8gbWF4X2ludCAvIDQgc28gdGhhdCB0aGUgZm9sbG93aW5nIGRvZXMgbm90IG92ZXJmbG93XG4vL2xldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMTs7XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplICgpIHsgcmV0dXJuICgweDdGRkZGRkZGLzQpIHwgMDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4IGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCAoKSB7IHJldHVybiBvc190eXBlID09IFwiVW5peFwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJXaW4zMlwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIkN5Z3dpblwiID8gMSA6IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbnZhciBvc190eXBlID0gKGdsb2JhbFRoaXMucHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtICYmXG4gICAgICAgICAgICAgICBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gPT0gXCJ3aW4zMlwiKSA/IFwiQ3lnd2luXCIgOiBcIlVuaXhcIjtcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG9zX3R5cGUpLCAzMiwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzYXR0eVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNhdHR5KF9jaGFuKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfdmFyaWFudFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3ZhcmlhbnQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3BhcmFtZXRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyKCl7cmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IHVuaXhfaW5ldF9hZGRyX29mX3N0cmluZ1xuZnVuY3Rpb24gdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nICgpIHtyZXR1cm4gMDt9XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MgKGJvb2wpIHtcbiAgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gYm9vbDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkIChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9ydW50aW1lX3dhcm5pbmdzO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfZW5hYmxlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZShfY2hhbm5lbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiU3BhY2V0aW1lIHByb2ZpbGluZyBvbmx5IHdvcmtzIGZvciBuYXRpdmUgY29kZVwiKTtcbn1cblxuLy9BbHdheXNcbi8vUmVxdWlyZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgZyA9IGdsb2JhbFRoaXM7XG4gIGlmKGcucHJvY2VzcyAmJiBnLnByb2Nlc3Mub24pIHtcbiAgICBnLnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZnVuY3Rpb24gKGVyciwgb3JpZ2luKSB7XG4gICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgZy5wcm9jZXNzLmV4aXQgKDIpO1xuICAgIH0pXG4gIH1cbiAgZWxzZSBpZihnLmFkZEV2ZW50TGlzdGVuZXIpe1xuICAgIGcuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbihldmVudCl7XG4gICAgICBpZihldmVudC5lcnJvcil7XG4gICAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGV2ZW50LmVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpO1xuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBjYW1sX2NyZWF0ZV9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9hcnJheSwgY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfYnl0ZXNfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzXG5mdW5jdGlvbiBNbEZha2VEZXZpY2UgKHJvb3QsIGYpIHtcbiAgdGhpcy5jb250ZW50PXt9O1xuICB0aGlzLnJvb3QgPSByb290O1xuICB0aGlzLmxvb2t1cEZ1biA9IGY7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jcmVhdGVfZGlyX2lmX25lZWRlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNvbXAgPSBuYW1lLnNwbGl0KFwiL1wiKTtcbiAgdmFyIHJlcyA9IFwiXCI7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKyl7XG4gICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICBpZih0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgdGhpcy5jb250ZW50W3Jlc10gPSBTeW1ib2woXCJkaXJlY3RvcnlcIik7XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuc2xhc2ggPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpP25hbWU6KG5hbWUgKyBcIi9cIik7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYoIXRoaXMuY29udGVudFtuYW1lXSAmJiB0aGlzLmxvb2t1cEZ1bikge1xuICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucm9vdCksIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSkpO1xuICAgIGlmKHJlcyAhPT0gMCkge1xuICAgICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICAgIHRoaXMuY29udGVudFtuYW1lXT1uZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICB9XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICAvLyBUaGUgcm9vdCBvZiB0aGUgZGV2aWNlIGV4aXN0c1xuICBpZihuYW1lID09IFwiXCIpIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGRpcmVjdG9yeSBleGlzdHNcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0pIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihuYW1lLG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICBpZih0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFRVhJU1RcIiwgXCJta2RpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBGaWxlIGV4aXN0c1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICBwYXJlbnQgPSAocGFyZW50ICYmIHBhcmVudFsxXSkgfHwgJyc7XG4gIGlmKCF0aGlzLmV4aXN0cyhwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQodGhpcy5zbGFzaChuYW1lKSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIGlmKG4ubWF0Y2gocikpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RFTVBUWVwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIjogRGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICB9XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIHZhciBzZWVuID0ge31cbiAgdmFyIGEgPSBbXTtcbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIHZhciBtID0gbi5tYXRjaChyKTtcbiAgICBpZihtICYmICFzZWVuW21bMV1dKSB7c2VlblttWzFdXSA9IHRydWU7IGEucHVzaChtWzFdKX1cbiAgfVxuICByZXR1cm4gYTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuaXNfZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICBpZihuYW1lID09IFwiXCIpICByZXR1cm4gdHJ1ZTtcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVfc2xhc2hdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgb2sgPSB0aGlzLmNvbnRlbnRbbmFtZV0/dHJ1ZTpmYWxzZTtcbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lXTtcbiAgcmV0dXJuIG9rO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIHZhciBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgICByZXR1cm4gZmlsZTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUgKHRoaXMubm0obmFtZSkpO1xuICB9XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVnaXN0ZXI9IGZ1bmN0aW9uIChuYW1lLGNvbnRlbnQpe1xuICB2YXIgZmlsZTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVdKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICBpZihjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjb250ZW50KTtcbiAgaWYoY2FtbF9pc19tbF9zdHJpbmcoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgZWxzZSBpZihjb250ZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICBlbHNlIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQudG9TdHJpbmcpIHtcbiAgICB2YXIgYnl0ZXMgPSBjYW1sX2J5dGVzX29mX3N0cmluZyhjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjb250ZW50LnRvU3RyaW5nKCkpKTtcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoYnl0ZXMpO1xuICB9XG4gIGlmKGZpbGUpe1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gZmlsZTtcbiAgfVxuICBlbHNlIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2JsaXRfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2dldFxuZnVuY3Rpb24gTWxGYWtlRmlsZShjb250ZW50KXtcbiAgdGhpcy5kYXRhID0gY29udGVudDtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sRmFrZUZpbGUucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdmFyIG9sZCA9IHRoaXMuZGF0YTtcbiAgdGhpcy5kYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICBjYW1sX2JsaXRfYnl0ZXMob2xkLCAwLCB0aGlzLmRhdGEsIDAsIGxlbik7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aCh0aGlzLmRhdGEpO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgdmFyIG5ld19zdHIgPSBjYW1sX2NyZWF0ZV9ieXRlcyhvZmZzZXQgKyBsZW4pO1xuICAgIHZhciBvbGRfZGF0YSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGRfZGF0YSwgMCwgdGhpcy5kYXRhLCAwLCBjbGVuKTtcbiAgfVxuICBjYW1sX2JsaXRfc3RyaW5nKGJ1ZiwgcG9zLCB0aGlzLmRhdGEsIG9mZnNldCwgbGVuKTtcbiAgcmV0dXJuIDBcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgYnVmLCBwb3MsIGxlbik7XG4gIHJldHVybiAwXG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5yZWFkX29uZSA9IGZ1bmN0aW9uKG9mZnNldCl7XG4gIHJldHVybiBjYW1sX2J5dGVzX2dldCh0aGlzLmRhdGEsIG9mZnNldCk7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCl7XG5cbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRmlsZVxuIiwiLy9Qcm92aWRlczogaW5pdGlhbGl6ZV9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogc2VyaWFsaXplX25hdCwgZGVzZXJpYWxpemVfbmF0LCBjYW1sX2hhc2hfbmF0XG5mdW5jdGlvbiBpbml0aWFsaXplX25hdCgpIHtcbiAgY2FtbF9jdXN0b21fb3BzW1wiX25hdFwiXSA9XG4gICAgeyBkZXNlcmlhbGl6ZSA6IGRlc2VyaWFsaXplX25hdCxcbiAgICAgIHNlcmlhbGl6ZSA6IHNlcmlhbGl6ZV9uYXQsXG4gICAgICBoYXNoIDogY2FtbF9oYXNoX25hdFxuICAgIH1cbn1cblxuLy9Qcm92aWRlczogTWxOYXRcbmZ1bmN0aW9uIE1sTmF0KHgpe1xuICB0aGlzLmRhdGEgPSBuZXcgZ2xvYmFsVGhpcy5JbnQzMkFycmF5KHgpO1xuICAvLyBsZW5ndGhfbmF0IGlzbid0IGV4dGVybmFsLCBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhlIE9iai5zaXplXG4gIC8vIHdvcmsgb3V0IHJpZ2h0LiBUaGUgKzIgdG8gYXJyYXkgbGVuZ3RoIHNlZW1zIHRvIHdvcmsuXG4gIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCArIDJcbn1cblxuTWxOYXQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfbmF0XCI7XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY2FtbF9oYXNoX25hdCh4KSB7XG4gIHZhciBsZW4gPSBudW1fZGlnaXRzX25hdCh4LCAwLCB4LmRhdGEubGVuZ3RoKTtcbiAgdmFyIGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHguZGF0YVtpXSk7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cblxuLy9Qcm92aWRlczogbmF0X29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gbmF0X29mX2FycmF5KGwpe1xuICByZXR1cm4gbmV3IE1sTmF0KGwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjcmVhdGVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gY3JlYXRlX25hdChzaXplKSB7XG4gIHZhciBhcnIgPSBuZXcgTWxOYXQoc2l6ZSk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICBhcnIuZGF0YVtpXSA9IC0xO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8vUHJvdmlkZXM6IHNldF90b196ZXJvX25hdFxuZnVuY3Rpb24gc2V0X3RvX3plcm9fbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbmF0LmRhdGFbb2ZzK2ldID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogYmxpdF9uYXRcbmZ1bmN0aW9uIGJsaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIsIGxlbikge1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBuYXQxLmRhdGFbb2ZzMStpXSA9IG5hdDIuZGF0YVtvZnMyK2ldO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXRfZGlnaXRfbmF0XG5mdW5jdGlvbiBzZXRfZGlnaXRfbmF0KG5hdCwgb2ZzLCBkaWdpdCkge1xuICBuYXQuZGF0YVtvZnNdID0gZGlnaXQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBudGhfZGlnaXRfbmF0XG5mdW5jdGlvbiBudGhfZGlnaXRfbmF0KG5hdCwgb2ZzKSB7XG4gIHJldHVybiBuYXQuZGF0YVtvZnNdO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXRfZGlnaXRfbmF0X25hdGl2ZVxuZnVuY3Rpb24gc2V0X2RpZ2l0X25hdF9uYXRpdmUobmF0LCBvZnMsIGRpZ2l0KSB7XG4gIG5hdC5kYXRhW29mc10gPSBkaWdpdDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IG50aF9kaWdpdF9uYXRfbmF0aXZlXG5mdW5jdGlvbiBudGhfZGlnaXRfbmF0X25hdGl2ZShuYXQsIG9mcykge1xuICByZXR1cm4gbmF0LmRhdGFbb2ZzXTtcbn1cblxuLy9Qcm92aWRlczogbnVtX2RpZ2l0c19uYXRcbmZ1bmN0aW9uIG51bV9kaWdpdHNfbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZihuYXQuZGF0YVtvZnMraV0gIT0gMCkgcmV0dXJuIGkrMTtcbiAgfVxuICByZXR1cm4gMTsgLy8gMCBjb3VudHMgYXMgMSBkaWdpdFxufVxuXG4vL1Byb3ZpZGVzOiBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXRcbmZ1bmN0aW9uIG51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdChuYXQsIG9mcykge1xuICB2YXIgYSA9IG5hdC5kYXRhW29mc107XG4gIHZhciBiID0gMDtcbiAgaWYoYSAmIDB4RkZGRjAwMDApIHsgYiArPTE2OyBhID4+Pj0xNjsgfVxuICBpZihhICYgMHhGRjAwKSAgICAgeyBiICs9IDg7IGEgPj4+PSA4OyB9XG4gIGlmKGEgJiAweEYwKSAgICAgICB7IGIgKz0gNDsgYSA+Pj49IDQ7IH1cbiAgaWYoYSAmIDEyKSAgICAgICAgIHsgYiArPSAyOyBhID4+Pj0gMjsgfVxuICBpZihhICYgMikgICAgICAgICAgeyBiICs9IDE7IGEgPj4+PSAxOyB9XG4gIGlmKGEgJiAxKSAgICAgICAgICB7IGIgKz0gMTsgfVxuICByZXR1cm4gMzIgLSBiO1xufVxuXG4vL1Byb3ZpZGVzOiBpc19kaWdpdF9pbnRcbmZ1bmN0aW9uIGlzX2RpZ2l0X2ludChuYXQsIG9mcykge1xuICBpZiAobmF0LmRhdGFbb2ZzXSA+PSAwKSByZXR1cm4gMVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfemVyb1xuZnVuY3Rpb24gaXNfZGlnaXRfemVybyhuYXQsIG9mcykge1xuICBpZihuYXQuZGF0YVtvZnNdID09IDApIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfb2RkXG5mdW5jdGlvbiBpc19kaWdpdF9vZGQobmF0LCBvZnMpIHtcbiAgaWYobmF0LmRhdGFbb2ZzXSAmIDEpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaW5jcl9uYXRcbmZ1bmN0aW9uIGluY3JfbmF0KG5hdCwgb2ZzLCBsZW4sIGNhcnJ5X2luKSB7XG4gIHZhciBjYXJyeSA9IGNhcnJ5X2luO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgeCA9IChuYXQuZGF0YVtvZnMraV0gPj4+IDApICsgY2Fycnk7XG4gICAgbmF0LmRhdGFbb2ZzK2ldID0gKHggfCAwKTtcbiAgICBpZih4ID09ICh4ID4+PiAwKSkge1xuICAgICAgY2FycnkgPSAwO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhcnJ5ID0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyBsZW4xID49IGxlbjJcbi8vUHJvdmlkZXM6IGFkZF9uYXRcbi8vUmVxdWlyZXM6IGluY3JfbmF0XG5mdW5jdGlvbiBhZGRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIGNhcnJ5X2luKSB7XG4gIHZhciBjYXJyeSA9IGNhcnJ5X2luO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0MS5kYXRhW29mczEraV0gPj4+IDApICsgKG5hdDIuZGF0YVtvZnMyK2ldID4+PiAwKSArIGNhcnJ5O1xuICAgIG5hdDEuZGF0YVtvZnMxK2ldID0geFxuICAgIGlmKHggPT0gKHggPj4+IDApKSB7XG4gICAgICBjYXJyeSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhcnJ5ID0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluY3JfbmF0KG5hdDEsIG9mczErbGVuMiwgbGVuMS1sZW4yLCBjYXJyeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBsZW1lbnRfbmF0XG5mdW5jdGlvbiBjb21wbGVtZW50X25hdChuYXQsIG9mcywgbGVuKSB7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW29mcytpXSA9ICgtMSA+Pj4gMCkgLSAobmF0LmRhdGFbb2ZzK2ldID4+PiAwKTtcbiAgfVxufVxuXG4vLyBvY2FtbCBmbGlwcyBjYXJyeV9pblxuLy9Qcm92aWRlczogZGVjcl9uYXRcbmZ1bmN0aW9uIGRlY3JfbmF0KG5hdCwgb2ZzLCBsZW4sIGNhcnJ5X2luKSB7XG4gIHZhciBib3Jyb3cgPSAoY2FycnlfaW4gPT0gMSkgPyAwIDogMTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0LmRhdGFbb2ZzK2ldID4+PjApIC0gYm9ycm93O1xuICAgIG5hdC5kYXRhW29mcytpXSA9IHg7XG4gICAgaWYgKHggPj0gMCkge1xuICAgICAgYm9ycm93ID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3Jyb3cgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gKGJvcnJvdyA9PSAxKSA/IDAgOiAxO1xufVxuXG4vLyBvY2FtbCBmbGlwcyBjYXJyeV9pblxuLy8gbGVuMSA+PSBsZW4yXG4vL1Byb3ZpZGVzOiBzdWJfbmF0XG4vL1JlcXVpcmVzOiBkZWNyX25hdFxuZnVuY3Rpb24gc3ViX25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBjYXJyeV9pbikge1xuICB2YXIgYm9ycm93ID0gKGNhcnJ5X2luID09IDEpID8gMCA6IDE7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW4yOyBpKyspIHtcbiAgICB2YXIgeCA9IChuYXQxLmRhdGFbb2ZzMStpXSA+Pj4gMCkgLSAobmF0Mi5kYXRhW29mczIraV0gPj4+IDApIC0gYm9ycm93O1xuICAgIG5hdDEuZGF0YVtvZnMxK2ldID0geDtcbiAgICBpZiAoeCA+PSAwKSB7XG4gICAgICBib3Jyb3cgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3Jyb3cgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVjcl9uYXQobmF0MSwgb2ZzMStsZW4yLCBsZW4xLWxlbjIsIChib3Jyb3c9PTEpPzA6MSk7XG59XG5cbi8vIG5hdDEgKz0gbmF0MiAqIG5hdDNbb2ZzM11cbi8vIGxlbjEgPj0gbGVuMlxuLy9Qcm92aWRlczogbXVsdF9kaWdpdF9uYXRcbi8vUmVxdWlyZXM6IGFkZF9uYXQsIG5hdF9vZl9hcnJheVxuZnVuY3Rpb24gbXVsdF9kaWdpdF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgbmF0Mywgb2ZzMykge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgYSA9IChuYXQzLmRhdGFbb2ZzM10gPj4+IDApO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHgxID0gKG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwKSArIChuYXQyLmRhdGFbb2ZzMitpXSA+Pj4gMCkgKiAoYSAmIDB4MDAwMEZGRkYpICsgY2Fycnk7XG4gICAgdmFyIHgyID0gKG5hdDIuZGF0YVtvZnMyK2ldID4+PiAwKSAqIChhID4+PiAxNik7XG4gICAgY2FycnkgPSBNYXRoLmZsb29yKHgyLzY1NTM2KTtcbiAgICB2YXIgeDMgPSB4MSArICh4MiAlIDY1NTM2KSAqIDY1NTM2O1xuICAgIG5hdDEuZGF0YVtvZnMxK2ldID0geDM7XG4gICAgY2FycnkgKz0gTWF0aC5mbG9vcih4My80Mjk0OTY3Mjk2KTtcbiAgfVxuXG4gIGlmKGxlbjIgPCBsZW4xICYmIGNhcnJ5KSB7XG4gICAgcmV0dXJuIGFkZF9uYXQobmF0MSwgb2ZzMStsZW4yLCBsZW4xLWxlbjIsIG5hdF9vZl9hcnJheShbY2FycnldKSwgMCwgMSwgMCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9XG59XG5cbi8vIG5hdDEgKz0gbmF0MiAqIG5hdDNcbi8vIGxlbjEgPj0gbGVuMiArIGxlbjMuXG4vL1Byb3ZpZGVzOiBtdWx0X25hdFxuLy9SZXF1aXJlczogbXVsdF9kaWdpdF9uYXRcbmZ1bmN0aW9uIG11bHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIG5hdDMsIG9mczMsIGxlbjMpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjM7IGkrKykge1xuICAgIGNhcnJ5ICs9IG11bHRfZGlnaXRfbmF0KG5hdDEsIG9mczEraSwgbGVuMS1pLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQzLCBvZnMzK2kpO1xuICB9XG4gIHJldHVybiBjYXJyeTtcbn1cblxuLy8gbmF0MSA9IDIgKiBuYXQxICsgbmF0MiAqIG5hdDJcbi8vIGxlbjEgPj0gMiAqIGxlbjJcbi8vUHJvdmlkZXM6IHNxdWFyZV9uYXRcbi8vUmVxdWlyZXM6IG11bHRfbmF0LCBhZGRfbmF0XG5mdW5jdGlvbiBzcXVhcmVfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgY2FycnkgKz0gYWRkX25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQxLCBvZnMxLCBsZW4xLCAwKTtcbiAgY2FycnkgKz0gbXVsdF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgbmF0Miwgb2ZzMiwgbGVuMik7XG4gIHJldHVybiBjYXJyeTtcbn1cblxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X2xlZnRfbmF0XG5mdW5jdGlvbiBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBuYml0cykge1xuICBpZihuYml0cyA9PSAwKSB7XG4gICAgbmF0Mi5kYXRhW29mczJdID0gMDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICB2YXIgd3JhcCA9IDA7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW4xOyBpKyspIHtcbiAgICB2YXIgYSA9IChuYXQxLmRhdGFbb2ZzMStpXSA+Pj4gMCk7XG4gICAgbmF0MS5kYXRhW29mczEraV0gPSAoYSA8PCBuYml0cykgfCB3cmFwO1xuICAgIHdyYXAgPSBhID4+PiAoMzIgLSBuYml0cyk7XG4gIH1cbiAgbmF0Mi5kYXRhW29mczJdID0gd3JhcDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vIEFzc3VtaW5nIGMgPiBhLCByZXR1cm5zIFtxdW90aWVudCwgcmVtYWluZGVyXSBvZiAoYTw8MzIgKyBiKS9jXG4vL1Byb3ZpZGVzOiBkaXZfaGVscGVyXG5mdW5jdGlvbiBkaXZfaGVscGVyKGEsIGIsIGMpIHtcbiAgdmFyIHggPSBhICogNjU1MzYgKyAoYj4+PjE2KTtcbiAgdmFyIHkgPSBNYXRoLmZsb29yKHgvYykgKiA2NTUzNjtcbiAgdmFyIHogPSAoeCAlIGMpICogNjU1MzY7XG4gIHZhciB3ID0geiArIChiICYgMHgwMDAwRkZGRik7XG4gIHJldHVybiBbeSArIE1hdGguZmxvb3Iody9jKSwgdyAlIGNdO1xufVxuXG4vLyBuYXQxW29mczErbGVuXSA8IG5hdDJbb2ZzMl1cbi8vUHJvdmlkZXM6IGRpdl9kaWdpdF9uYXRcbi8vUmVxdWlyZXM6IGRpdl9oZWxwZXJcbmZ1bmN0aW9uIGRpdl9kaWdpdF9uYXQobmF0cSwgb2ZzcSwgbmF0ciwgb2ZzciwgbmF0MSwgb2ZzMSwgbGVuLCBuYXQyLCBvZnMyKSB7XG4gIHZhciByZW0gPSAobmF0MS5kYXRhW29mczErbGVuLTFdID4+PjApO1xuICAvLyBuYXRxW29mc3ErbGVuLTFdIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVybyAoZHVlIHRvIHRoZSBNU0QgcmVxdWlyZW1lbnQpLFxuICAvLyBhbmQgc2hvdWxkIG5vdCBiZSB3cml0dGVuIHRvLlxuICBmb3IodmFyIGkgPSBsZW4tMjsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgeCA9IGRpdl9oZWxwZXIocmVtLCAobmF0MS5kYXRhW29mczEraV0gPj4+IDApLCAobmF0Mi5kYXRhW29mczJdID4+PiAwKSk7XG4gICAgbmF0cS5kYXRhW29mc3EraV0gPSB4WzBdO1xuICAgIHJlbSA9IHhbMV07XG4gIH1cbiAgbmF0ci5kYXRhW29mc3JdID0gcmVtO1xuICByZXR1cm4gMDtcbn1cblxuLy8gbmF0MVtuYXQyOl0gOj0gbmF0MSAvIG5hdDJcbi8vIG5hdDFbOm5hdDJdIDo9IG5hdDEgJSBuYXQyXG4vLyBsZW4xID4gbGVuMiwgbmF0MltvZnMyK2xlbjItMV0gPiBuYXQxW29mczErbGVuMS0xXVxuLy9Qcm92aWRlczogZGl2X25hdFxuLy9SZXF1aXJlczogZGl2X2RpZ2l0X25hdCwgZGl2X2hlbHBlciwgbnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0LCBzaGlmdF9sZWZ0X25hdCwgc2hpZnRfcmlnaHRfbmF0LCBjcmVhdGVfbmF0LCBzZXRfdG9femVyb19uYXQsIG11bHRfZGlnaXRfbmF0LCBzdWJfbmF0LCBjb21wYXJlX25hdCwgbmF0X29mX2FycmF5XG5mdW5jdGlvbiBkaXZfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIpIHtcbiAgaWYobGVuMiA9PSAxKSB7XG4gICAgZGl2X2RpZ2l0X25hdChuYXQxLCBvZnMxKzEsIG5hdDEsIG9mczEsIG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIpO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHMgPSBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQobmF0Miwgb2ZzMitsZW4yLTEpO1xuICBzaGlmdF9sZWZ0X25hdChuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7XG4gIHNoaWZ0X2xlZnRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdF9vZl9hcnJheShbMF0pLCAwLCBzKTtcblxuICB2YXIgZCA9IChuYXQyLmRhdGFbb2ZzMitsZW4yLTFdID4+PiAwKSArIDE7XG4gIHZhciBhID0gY3JlYXRlX25hdChsZW4yKzEpO1xuICBmb3IgKHZhciBpID0gbGVuMSAtIDE7IGkgPj0gbGVuMjsgaS0tKSB7XG4gICAgLy8gRGVjZW50IGxvd2VyIGJvdW5kIG9uIHF1b1xuICAgIHZhciBxdW8gPSBkID09IDQyOTQ5NjcyOTYgPyAobmF0MS5kYXRhW29mczEraV0gPj4+IDApIDogZGl2X2hlbHBlcigobmF0MS5kYXRhW29mczEraV0gPj4+IDApLCAobmF0MS5kYXRhW29mczEraS0xXSA+Pj4wKSwgZClbMF07XG4gICAgc2V0X3RvX3plcm9fbmF0KGEsIDAsIGxlbjIrMSk7XG4gICAgbXVsdF9kaWdpdF9uYXQoYSwgMCwgbGVuMisxLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoW3F1b10pLCAwKTtcbiAgICBzdWJfbmF0KG5hdDEsIG9mczEraS1sZW4yLCBsZW4yKzEsIGEsIDAsIGxlbjIrMSwgMSk7XG5cbiAgICB3aGlsZSAobmF0MS5kYXRhW29mczEraV0gIT0gMCB8fCBjb21wYXJlX25hdChuYXQxLCBvZnMxK2ktbGVuMiwgbGVuMiwgbmF0Miwgb2ZzMiwgbGVuMikgPj0gMCkge1xuICAgICAgcXVvID0gcXVvICsgMTtcbiAgICAgIHN1Yl9uYXQobmF0MSwgb2ZzMStpLWxlbjIsIGxlbjIrMSwgbmF0Miwgb2ZzMiwgbGVuMiwgMSk7XG4gICAgfVxuXG4gICAgbmF0MS5kYXRhW29mczEraV0gPSBxdW87XG4gIH1cblxuICBzaGlmdF9yaWdodF9uYXQobmF0MSwgb2ZzMSwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpOyAvLyBzaGlmdCByZW1haW5kZXJcbiAgc2hpZnRfcmlnaHRfbmF0KG5hdDIsIG9mczIsIGxlbjIsIG5hdF9vZl9hcnJheShbMF0pLCAwLCBzKTsgLy8gcmVzdG9yZVxuICByZXR1cm4gMDtcbn1cblxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X3JpZ2h0X25hdFxuZnVuY3Rpb24gc2hpZnRfcmlnaHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIG5iaXRzKSB7XG4gIGlmKG5iaXRzID09IDApIHtcbiAgICBuYXQyLmRhdGFbb2ZzMl0gPSAwO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciB3cmFwID0gMDtcbiAgZm9yKHZhciBpID0gbGVuMS0xOyBpID49IDA7IGktLSkge1xuICAgIHZhciBhID0gbmF0MS5kYXRhW29mczEraV0gPj4+IDA7XG4gICAgbmF0MS5kYXRhW29mczEraV0gPSAoYSA+Pj4gbmJpdHMpIHwgd3JhcDtcbiAgICB3cmFwID0gYSA8PCAoMzIgLSBuYml0cyk7XG4gIH1cbiAgbmF0Mi5kYXRhW29mczJdID0gd3JhcDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgaWYobmF0MS5kYXRhW29mczFdID4gbmF0Mi5kYXRhW29mczJdKSByZXR1cm4gMTtcbiAgaWYobmF0MS5kYXRhW29mczFdIDwgbmF0Mi5kYXRhW29mczJdKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjb21wYXJlX25hdFxuLy9SZXF1aXJlczogbnVtX2RpZ2l0c19uYXRcbmZ1bmN0aW9uIGNvbXBhcmVfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIpIHtcbiAgdmFyIGEgPSBudW1fZGlnaXRzX25hdChuYXQxLCBvZnMxLCBsZW4xKTtcbiAgdmFyIGIgPSBudW1fZGlnaXRzX25hdChuYXQyLCBvZnMyLCBsZW4yKTtcbiAgaWYoYSA+IGIpIHJldHVybiAxO1xuICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICBmb3IodmFyIGkgPSBsZW4xIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoKG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwKSA+IChuYXQyLmRhdGFbb2ZzMitpXSA+Pj4gMCkpIHJldHVybiAxO1xuICAgIGlmICgobmF0MS5kYXRhW29mczEraV0gPj4+IDApIDwgKG5hdDIuZGF0YVtvZnMyK2ldID4+PiAwKSkgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjb21wYXJlX25hdF9yZWFsXG4vL1JlcXVpcmVzOiBjb21wYXJlX25hdFxuZnVuY3Rpb24gY29tcGFyZV9uYXRfcmVhbChuYXQxLG5hdDIpe1xuICByZXR1cm4gY29tcGFyZV9uYXQobmF0MSwwLG5hdDEuZGF0YS5sZW5ndGgsbmF0MiwwLG5hdDIuZGF0YS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBsYW5kX2RpZ2l0X25hdFxuZnVuY3Rpb24gbGFuZF9kaWdpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMikge1xuICBuYXQxLmRhdGFbb2ZzMV0gJj0gbmF0Mi5kYXRhW29mczJdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbG9yX2RpZ2l0X25hdFxuZnVuY3Rpb24gbG9yX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSB8PSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBseG9yX2RpZ2l0X25hdFxuZnVuY3Rpb24gbHhvcl9kaWdpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMikge1xuICBuYXQxLmRhdGFbb2ZzMV0gXj0gbmF0Mi5kYXRhW29mczJdO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBzZXJpYWxpemVfbmF0XG5mdW5jdGlvbiBzZXJpYWxpemVfbmF0KHdyaXRlciwgbmF0LCBzeil7XG4gIHZhciBsZW4gPSBuYXQuZGF0YS5sZW5ndGg7XG4gIHdyaXRlci53cml0ZSgzMiwgbGVuKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICB3cml0ZXIud3JpdGUoMzIsIG5hdC5kYXRhW2ldKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHN6WzFdID0gbGVuICogODtcbn1cblxuLy9Qcm92aWRlczogZGVzZXJpYWxpemVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gZGVzZXJpYWxpemVfbmF0KHJlYWRlciwgc3ope1xuICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIG5hdCA9IG5ldyBNbE5hdChsZW4pO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgIG5hdC5kYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHJldHVybiBuYXQ7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSHVnbyBIZXV6YXJkXG5cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlXG52YXIgY2FtbF9ncl9zdGF0ZTtcblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfZ2V0KCkge1xuICBpZihjYW1sX2dyX3N0YXRlKSB7XG4gICAgcmV0dXJuIGNhbWxfZ3Jfc3RhdGU7XG4gIH1cbiAgdGhyb3cgWzAsY2FtbF9uYW1lZF92YWx1ZShcIkdyYXBoaWNzLkdyYXBoaWNfZmFpbHVyZVwiKSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIk5vdCBpbml0aWFsaXplZFwiKV1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlLGNhbWxfZ3Jfc3RhdGVfaW5pdFxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9zZXQoY3R4KSB7XG4gIGNhbWxfZ3Jfc3RhdGU9Y3R4O1xuICBjYW1sX2dyX3N0YXRlX2luaXQoKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9vcGVuX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fZ3JhcGgoaW5mbyl7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgdmFyIGluZm8gPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhpbmZvKTtcbiAgZnVuY3Rpb24gZ2V0KG5hbWUpe1xuICAgIHZhciByZXMgPSBpbmZvLm1hdGNoKFwiKF58LCkgKlwiK25hbWUrXCIgKj0gKihbYS16QS1aMC05X10rKSAqKCx8JClcIik7XG4gICAgaWYocmVzKSByZXR1cm4gcmVzWzJdO1xuICB9XG4gIHZhciBzcGVjcyA9IFtdO1xuICBpZighKGluZm89PVwiXCIpKSBzcGVjcy5wdXNoKGluZm8pO1xuICB2YXIgdGFyZ2V0ID0gZ2V0KFwidGFyZ2V0XCIpO1xuICBpZighdGFyZ2V0KSB0YXJnZXQ9XCJcIjtcbiAgdmFyIHN0YXR1cyA9IGdldChcInN0YXR1c1wiKTtcbiAgaWYoIXN0YXR1cykgc3BlY3MucHVzaChcInN0YXR1cz0xXCIpXG5cbiAgdmFyIHcgPSBnZXQoXCJ3aWR0aFwiKTtcbiAgdyA9IHc/cGFyc2VJbnQodyk6MjAwO1xuICBzcGVjcy5wdXNoKFwid2lkdGg9XCIrdyk7XG5cbiAgdmFyIGggPSBnZXQoXCJoZWlnaHRcIik7XG4gIGggPSBoP3BhcnNlSW50KGgpOjIwMDtcbiAgc3BlY3MucHVzaChcImhlaWdodD1cIitoKTtcblxuICB2YXIgd2luID0gZy5vcGVuKFwiYWJvdXQ6YmxhbmtcIix0YXJnZXQsc3BlY3Muam9pbihcIixcIikpO1xuICBpZighd2luKSB7Y2FtbF9mYWlsd2l0aChcIkdyYXBoaWNzLm9wZW5fZ3JhcGg6IGNhbm5vdCBvcGVuIHRoZSB3aW5kb3dcIil9XG4gIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gIHZhciBjYW52YXMgPSBkb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY2FudmFzLndpZHRoID0gdztcbiAgY2FudmFzLmhlaWdodCA9IGg7XG4gIHZhciBjdHggPSBjYW1sX2dyX3N0YXRlX2NyZWF0ZShjYW52YXMsdyxoKTtcbiAgY3R4LnNldF90aXRsZSA9IGZ1bmN0aW9uICh0aXRsZSkge1xuICAgIGRvYy50aXRsZSA9IHRpdGxlO1xuICB9O1xuICBjYW1sX2dyX3N0YXRlX3NldChjdHgpO1xuICB2YXIgYm9keSA9IGRvYy5ib2R5O1xuICBib2R5LnN0eWxlLm1hcmdpbiA9IFwiMHB4XCI7XG4gIGJvZHkuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfaW5pdFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zZXRfY29sb3IsY2FtbF9ncl9tb3ZldG8sY2FtbF9ncl9yZXNpemVfd2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF9saW5lX3dpZHRoLGNhbWxfZ3Jfc2V0X3RleHRfc2l6ZSxjYW1sX2dyX3NldF9mb250XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGVcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfaW5pdCgpe1xuICBjYW1sX2dyX21vdmV0byhjYW1sX2dyX3N0YXRlLngsY2FtbF9ncl9zdGF0ZS55KTtcbiAgY2FtbF9ncl9yZXNpemVfd2luZG93KGNhbWxfZ3Jfc3RhdGUud2lkdGgsY2FtbF9ncl9zdGF0ZS5oZWlnaHQpO1xuICBjYW1sX2dyX3NldF9saW5lX3dpZHRoKGNhbWxfZ3Jfc3RhdGUubGluZV93aWR0aCk7XG4gIGNhbWxfZ3Jfc2V0X3RleHRfc2l6ZShjYW1sX2dyX3N0YXRlLnRleHRfc2l6ZSk7XG4gIGNhbWxfZ3Jfc2V0X2ZvbnQoY2FtbF9ncl9zdGF0ZS5mb250KTtcbiAgY2FtbF9ncl9zZXRfY29sb3IoY2FtbF9ncl9zdGF0ZS5jb2xvcik7XG4gIGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZShjYW1sX2dyX3N0YXRlLnRpdGxlKTtcbiAgLy9jYW1sX2dyX3Jlc2l6ZV93aW5kb3cgbWlnaHQgcmVzZXQgc29tZSBjYW52YXMnIHByb3BlcnRpZXNcbiAgY2FtbF9ncl9zdGF0ZS5jb250ZXh0LnRleHRCYXNlbGluZSA9ICdib3R0b20nO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9jcmVhdGUoY2FudmFzLHcsaCl7XG4gIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgIGNhbnZhcyA6IGNhbnZhcyxcbiAgICB4IDogMCxcbiAgICB5IDogMCxcbiAgICB3aWR0aCA6IHcsXG4gICAgaGVpZ2h0IDogaCxcbiAgICBsaW5lX3dpZHRoIDogMSxcbiAgICBmb250IDogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImZpeGVkXCIpLFxuICAgIHRleHRfc2l6ZSA6IDI2LFxuICAgIGNvbG9yIDogMHgwMDAwMDAsXG4gICAgdGl0bGUgOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpXG4gIH07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZG9jX29mX3N0YXRlXG5mdW5jdGlvbiBjYW1sX2dyX2RvY19vZl9zdGF0ZShzdGF0ZSkge1xuICBpZihzdGF0ZS5jYW52YXMub3duZXJEb2N1bWVudClcbiAgICByZXR1cm4gc3RhdGUuY2FudmFzLm93bmVyRG9jdW1lbnQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2VfZ3JhcGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX2dyYXBoKCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jYW52YXMud2lkdGggPSAwO1xuICBzLmNhbnZhcy5oZWlnaHQgPSAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZShuYW1lKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLnRpdGxlID0gbmFtZTtcbiAgdmFyIGpzbmFtZSA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZihzLnNldF90aXRsZSkgcy5zZXRfdGl0bGUoanNuYW1lKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVzaXplX3dpbmRvd1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyh3LGgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KClcbiAgcy53aWR0aCA9IHc7XG4gIHMuaGVpZ2h0ID0gaDtcbiAgcy5jYW52YXMud2lkdGggPSB3O1xuICBzLmNhbnZhcy5oZWlnaHQgPSBoO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jbGVhcl9ncmFwaFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfY2xlYXJfZ3JhcGgoKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNhbnZhcy53aWR0aCA9IHMud2lkdGg7XG4gIHMuY2FudmFzLmhlaWdodCA9IHMuaGVpZ2h0O1xuICAvLyAgcy5jb250ZXh0LnN0cm9rZVJlY3QgKDAuLCAwLiwgcy53aWR0aCwgcy5oZWlnaHQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zaXplX3hcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NpemVfeCgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLndpZHRoO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaXplX3lcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NpemVfeSgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmhlaWdodDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2NvbG9yKGNvbG9yKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBmdW5jdGlvbiBjb252ZXJ0KG51bWJlcikge1xuICAgIHZhciBzdHIgPSAnJyArIG51bWJlci50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCAyKSBzdHIgPSAnMCcgKyBzdHI7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICB2YXJcbiAgciA9IChjb2xvciA+PiAxNikgJiAweGZmLFxuICBnID0gKGNvbG9yID4+IDgpICAmIDB4ZmYsXG4gIGIgPSAoY29sb3IgPj4gMCkgICYgMHhmZjtcbiAgcy5jb2xvcj1jb2xvcjtcbiAgdmFyIGNfc3RyID0gJyMnICsgY29udmVydChyKSArIGNvbnZlcnQoZykgKyBjb252ZXJ0KGIpO1xuICBzLmNvbnRleHQuZmlsbFN0eWxlID0gICBjX3N0cjtcbiAgcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gY19zdHI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9wbG90XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9wbG90KHgseSl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIGltPXMuY29udGV4dC5jcmVhdGVJbWFnZURhdGEoMSwxKTtcbiAgdmFyIGQgPSBpbS5kYXRhO1xuICB2YXIgY29sb3IgPSBzLmNvbG9yO1xuICBkWzBdID0gKGNvbG9yID4+IDE2KSAmIDB4ZmY7IC8vclxuICBkWzFdID0gKGNvbG9yID4+IDgpICAmIDB4ZmYsIC8vZ1xuICBkWzJdID0gKGNvbG9yID4+IDApICAmIDB4ZmY7IC8vYlxuICBkWzNdID0gMHhGRjsgLy9hXG4gIHMueD14O1xuICBzLnk9eTtcbiAgcy5jb250ZXh0LnB1dEltYWdlRGF0YShpbSx4LHMuaGVpZ2h0IC0geSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3BvaW50X2NvbG9yXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9wb2ludF9jb2xvcih4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBpbT1zLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKHgscy5oZWlnaHQgLSB5LDEsMSk7XG4gIHZhciBkID0gaW0uZGF0YTtcbiAgcmV0dXJuIChkWzBdIDw8IDE2KSArIChkWzFdIDw8IDgpICsgZFsyXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbW92ZXRvXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9tb3ZldG8oeCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLng9eDtcbiAgcy55PXk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2N1cnJlbnRfeFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfY3VycmVudF94KCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueFxufVxuLy9Qcm92aWRlczogY2FtbF9ncl9jdXJyZW50X3lcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2N1cnJlbnRfeSgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLnlcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbGluZXRvXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9saW5ldG8oeCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIHMuY29udGV4dC5tb3ZlVG8ocy54LHMuaGVpZ2h0IC0gcy55KTtcbiAgcy5jb250ZXh0LmxpbmVUbyh4LHMuaGVpZ2h0IC0geSk7XG4gIHMuY29udGV4dC5zdHJva2UoKTtcbiAgcy54PXg7XG4gIHMueT15O1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19yZWN0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X3JlY3QoeCx5LHcsaCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LnN0cm9rZVJlY3QoeCxzLmhlaWdodCAtIHksdywtaCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2FyY19hdXhcbmZ1bmN0aW9uIGNhbWxfZ3JfYXJjX2F1eChjdHgsY3gsY3kscnkscngsYTEsYTIpe1xuICB3aGlsZShhMT5hMikgYTIrPTM2MDtcbiAgYTEgLz0gMTgwO1xuICBhMiAvPSAxODA7XG4gIHZhciByb3QgPSAwLHhQb3MseVBvcyx4UG9zX3ByZXYseVBvc19wcmV2O1xuICB2YXIgc3BhY2UgPSAyO1xuICB2YXIgbnVtID0gKCgoYTIgLSBhMSkgKiBNYXRoLlBJICogKChyeCtyeSkvMikpIC8gc3BhY2UpIHwgMDtcbiAgdmFyIGRlbHRhID0gKGEyIC0gYTEpICogTWF0aC5QSSAvIG51bTtcbiAgdmFyIGkgPSBhMSAqIE1hdGguUEk7XG4gIGZvciAodmFyIGo9MDtqPD1udW07aisrKXtcbiAgICB4UG9zID0gY3ggLSAocnggKiBNYXRoLnNpbihpKSkgKiBNYXRoLnNpbihyb3QgKiBNYXRoLlBJKSArIChyeSAqIE1hdGguY29zKGkpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHhQb3MgPSB4UG9zLnRvRml4ZWQoMik7XG4gICAgeVBvcyA9IGN5ICsgKHJ5ICogTWF0aC5jb3MoaSkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgKyAocnggKiBNYXRoLnNpbihpKSkgKiBNYXRoLmNvcyhyb3QgKiBNYXRoLlBJKTtcbiAgICB5UG9zID0geVBvcy50b0ZpeGVkKDIpO1xuICAgIGlmIChqPT0wKSB7XG4gICAgICBjdHgubW92ZVRvKHhQb3MsIHlQb3MpO1xuICAgIH0gZWxzZSBpZiAoeFBvc19wcmV2IT14UG9zIHx8IHlQb3NfcHJldiE9eVBvcyl7XG4gICAgICBjdHgubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgIH1cbiAgICB4UG9zX3ByZXY9eFBvcztcbiAgICB5UG9zX3ByZXY9eVBvcztcbiAgICBpLT0gZGVsdGE7Ly9jY3dcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RyYXdfYXJjXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldCwgY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfYXJjKHgseSxyeCxyeSxhMSxhMil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjYW1sX2dyX2FyY19hdXgocy5jb250ZXh0LHgscy5oZWlnaHQgLSB5LHJ4LHJ5LGExLGEyKTtcbiAgcy5jb250ZXh0LnN0cm9rZSgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfbGluZV93aWR0aFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgodyl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5saW5lX3dpZHRoID0gdztcbiAgcy5jb250ZXh0LmxpbmVXaWR0aCA9IHdcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9yZWN0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX3JlY3QoeCx5LHcsaCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmZpbGxSZWN0KHgscy5oZWlnaHQgLSB5LHcsLWgpO1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9wb2x5XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX3BvbHkoYXIpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgcy5jb250ZXh0Lm1vdmVUbyhhclsxXVsxXSxzLmhlaWdodCAtIGFyWzFdWzJdKTtcbiAgZm9yKHZhciBpID0gMjsgaSA8IGFyLmxlbmd0aDsgaSsrKVxuICAgIHMuY29udGV4dC5saW5lVG8oYXJbaV1bMV0scy5oZWlnaHQgLSBhcltpXVsyXSk7XG4gIHMuY29udGV4dC5saW5lVG8oYXJbMV1bMV0scy5oZWlnaHQgLSBhclsxXVsyXSk7XG4gIHMuY29udGV4dC5maWxsKCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfYXJjXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldCwgY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2ZpbGxfYXJjKHgseSxyeCxyeSxhMSxhMil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjYW1sX2dyX2FyY19hdXgocy5jb250ZXh0LHgscy5oZWlnaHQgLSB5LHJ4LHJ5LGExLGEyKTtcbiAgcy5jb250ZXh0LmZpbGwoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyKHN0cil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIG0gPSBzLmNvbnRleHQubWVhc3VyZVRleHQoc3RyKTtcbiAgdmFyIGR4ID0gbS53aWR0aDtcbiAgcy5jb250ZXh0LmZpbGxUZXh0KHN0cixzLngscy5oZWlnaHQgLSBzLnkpO1xuICBzLnggKz0gZHggfCAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19jaGFyKGMpe1xuICBjYW1sX2dyX2RyYXdfc3RyKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ncl9kcmF3X3N0clxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19zdHJpbmcoc3RyKXtcbiAgY2FtbF9ncl9kcmF3X3N0cihjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzdHIpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X2ZvbnRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfZm9udChmKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmZvbnQgPSBmO1xuICBzLmNvbnRleHQuZm9udCA9IHMudGV4dF9zaXplICsgXCJweCBcIiArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMuZm9udCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF90ZXh0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfdGV4dF9zaXplKHNpemUpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMudGV4dF9zaXplID0gc2l6ZTtcbiAgcy5jb250ZXh0LmZvbnQgPSBzLnRleHRfc2l6ZSArIFwicHggXCIgKyBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzLmZvbnQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl90ZXh0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl90ZXh0X3NpemUodHh0KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgdyA9IHMuY29udGV4dC5tZWFzdXJlVGV4dChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyh0eHQpKS53aWR0aDtcbiAgcmV0dXJuIFswLHcscy50ZXh0X3NpemVdO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbWFrZV9pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfbWFrZV9pbWFnZShhcnIpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBoID0gYXJyLmxlbmd0aCAtIDEgO1xuICB2YXIgdyA9IGFyclsxXS5sZW5ndGggLSAxO1xuICB2YXIgaW0gPSBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHcsaCk7XG4gIGZvcih2YXIgaT0wO2k8aDtpKyspe1xuICAgIGZvcih2YXIgaj0wO2o8dztqKyspe1xuICAgICAgdmFyIGMgPSBhcnJbaSsxXVtqKzFdO1xuICAgICAgdmFyIG8gPSBpKih3KjQpICsgKGogKiA0KTtcbiAgICAgIGlmKGMgPT0gLTEpIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAwO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IDA7XG4gICAgICAgIGltLmRhdGFbbyArIDJdID0gMDtcbiAgICAgICAgaW0uZGF0YVtvICsgM10gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSBjID4+IDE2ICYgMHhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgMV0gPSBjID4+ICA4ICYgMHhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgMl0gPSBjID4+ICAwICYgMFhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgM10gPSAweGZmO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaW1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHVtcF9pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHVtcF9pbWFnZShpbSl7XG4gIHZhciBkYXRhID0gWzBdXG4gIGZvcih2YXIgaT0wOyBpPGltLmhlaWdodDtpKyspe1xuICAgIGRhdGFbaSsxXSA9IFswXVxuICAgIGZvcih2YXIgaj0wOyBqPGltLndpZHRoO2orKyl7XG4gICAgICB2YXIgbyA9IGkqKGltLndpZHRoKjQpICsgKGogKiA0KSxcbiAgICAgICAgICByID0gaW0uZGF0YVtvKzBdLFxuICAgICAgICAgIGcgPSBpbS5kYXRhW28rMV0sXG4gICAgICAgICAgYiA9IGltLmRhdGFbbysyXTtcbiAgICAgIGRhdGFbaSsxXVtqKzFdID0gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiXG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RyYXdfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfaW1hZ2UoaW0seCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBpZighaW0uaW1hZ2UpIHtcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSBzLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBzLmhlaWdodDtcbiAgICBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLnB1dEltYWdlRGF0YShpbSwwLDApO1xuICAgIHZhciBpbWFnZSA9IG5ldyBnbG9iYWxUaGlzLkltYWdlKCk7XG4gICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcy5jb250ZXh0LmRyYXdJbWFnZShpbWFnZSx4LHMuaGVpZ2h0IC0gaW0uaGVpZ2h0IC0geSk7XG4gICAgICBpbS5pbWFnZSA9IGltYWdlO1xuICAgIH1cbiAgICBpbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpO1xuICB9IGVsc2Uge1xuICAgIHMuY29udGV4dC5kcmF3SW1hZ2UoaW0uaW1hZ2UseCxzLmhlaWdodCAtIGltLmhlaWdodCAtIHkpO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9jcmVhdGVfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2NyZWF0ZV9pbWFnZSh4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHgseSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2JsaXRfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2JsaXRfaW1hZ2UoaW0seCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW0yID0gcy5jb250ZXh0LmdldEltYWdlRGF0YSh4LHMuaGVpZ2h0IC0gaW0uaGVpZ2h0IC0geSxpbS53aWR0aCxpbS5oZWlnaHQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltMi5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgaW0uZGF0YVtpXSA9IGltMi5kYXRhW2ldO1xuICAgIGltLmRhdGFbaSsxXSA9IGltMi5kYXRhW2krMV07XG4gICAgaW0uZGF0YVtpKzJdID0gaW0yLmRhdGFbaSsyXTtcbiAgICBpbS5kYXRhW2krM10gPSBpbTIuZGF0YVtpKzNdO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19oYW5kbGVyXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX2hhbmRsZXIoKXtyZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2lnaW9fc2lnbmFsXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX3NpZ25hbCgpe3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9ncl93YWl0X2V2ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dhaXRfZXZlbnQoX2V2bCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX3dhaXRfZXZlbnQgbm90IEltcGxlbWVudGVkOiB1c2UgR3JhcGhpY3NfanMgaW5zdGVhZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zeW5jaHJvbml6ZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9zeW5jaHJvbml6ZSAoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX3N5bmNocm9uaXplIG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVtZW1iZXJfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9yZW1lbWJlcl9tb2RlICgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2Rpc3BsYXlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9kaXNwbGF5X21vZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Rpc3BsYXlfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2luZG93X2lkXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dpbmRvd19pZChhKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX3dpbmRvd19pZCBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfb3Blbl9zdWJ3aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3Jfb3Blbl9zdWJ3aW5kb3coYSxiLGMsZCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl9vcGVuX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyhhKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogICAgICAgICAweDgwLFxuICBQUkVGSVhfU01BTExfSU5UOiAgICAgICAgICAgMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogICAgICAgIDB4MjAsXG4gIENPREVfSU5UODogICAgICAgICAgICAgICAgICAweDAwLFxuICBDT0RFX0lOVDE2OiAgICAgICAgICAgICAgICAgMHgwMSxcbiAgQ09ERV9JTlQzMjogICAgICAgICAgICAgICAgIDB4MDIsXG4gIENPREVfSU5UNjQ6ICAgICAgICAgICAgICAgICAweDAzLFxuICBDT0RFX1NIQVJFRDg6ICAgICAgICAgICAgICAgMHgwNCxcbiAgQ09ERV9TSEFSRUQxNjogICAgICAgICAgICAgIDB4MDUsXG4gIENPREVfU0hBUkVEMzI6ICAgICAgICAgICAgICAweDA2LFxuICBDT0RFX0JMT0NLMzI6ICAgICAgICAgICAgICAgMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAgICAgICAgICAgICAgIDB4MTMsXG4gIENPREVfU1RSSU5HODogICAgICAgICAgICAgICAweDA5LFxuICBDT0RFX1NUUklORzMyOiAgICAgICAgICAgICAgMHgwQSxcbiAgQ09ERV9ET1VCTEVfQklHOiAgICAgICAgICAgIDB4MEIsXG4gIENPREVfRE9VQkxFX0xJVFRMRTogICAgICAgICAweDBDLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAgICAgMHgwRCxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTogIDB4MEUsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfQklHOiAgICAweDBGLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTogMHgwNyxcbiAgQ09ERV9DT0RFUE9JTlRFUjogICAgICAgICAgIDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAgICAgICAgICAweDExLFxuICBDT0RFX0NVU1RPTTogICAgICAgICAgICAgICAgMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAgICAgICAgICAgIDB4MTgsXG4gIENPREVfQ1VTVE9NX0ZJWEVEOiAgICAgICAgICAweDE5XG59XG5cblxuLy9Qcm92aWRlczogTWxTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIE1sU3RyaW5nUmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7IHRoaXMuaSA9IGk7IH1cbk1sU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0ID4+IDE2KSB8IHMuY2hhckNvZGVBdChpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnMuc3Vic3RyaW5nKGksIGkgKyBsZW4pKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBCaWdTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBCaWdTdHJpbmdSZWFkZXIgKGJzLCBpKSB7IHRoaXMucyA9IGJzOyB0aGlzLmkgPSBpOyB9XG5CaWdTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCA4KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgMjQgPj4gMTYpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAgICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMykgICAgICAgICApID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB2YXIgYXJyID0gbmV3IEFycmF5KGxlbilcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspe1xuICAgICAgYXJyW2pdID0gY2FtbF9iYV9nZXRfMSh0aGlzLnMsIGkraik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGFycik7XG4gIH1cbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9ieXRlcyAoYSkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIChjYW1sX2ludDY0X29mX2J5dGVzIChhKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXJcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAocywgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciwgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSwgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzICh0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X21hcnNoYWwod3JpdGVyLCB2LCBzaXplcykge1xuICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgd3JpdGVyLndyaXRlICg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4OyBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzaXplWzBdID0gNDtcbiAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzd2l0Y2ggKHJlYWRlci5yZWFkOHUgKCkpIHtcbiAgY2FzZSAxOlxuICAgIHNpemVbMF0gPSA0O1xuICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgY2FzZSAyOlxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICBkZWZhdWx0OiBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbmF0aXZlIGludGVnZXJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3VubWFyc2hhbCwgY2FtbF9pbnQ2NF9tYXJzaGFsLCBjYW1sX2ludDY0X2NvbXBhcmUsIGNhbWxfaW50NjRfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9pbnQzMl91bm1hcnNoYWwsIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9iYV9zZXJpYWxpemUsIGNhbWxfYmFfZGVzZXJpYWxpemUsIGNhbWxfYmFfY29tcGFyZSwgY2FtbF9iYV9oYXNoXG52YXIgY2FtbF9jdXN0b21fb3BzID1cbiAgICB7XCJfalwiOiB7XG4gICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgICAgc2VyaWFsaXplICA6IGNhbWxfaW50NjRfbWFyc2hhbCxcbiAgICAgIGZpeGVkX2xlbmd0aCA6IDgsXG4gICAgICBjb21wYXJlIDogY2FtbF9pbnQ2NF9jb21wYXJlLFxuICAgICAgaGFzaCA6IGNhbWxfaW50NjRfaGFzaFxuICAgIH0sXG4gICAgIFwiX2lcIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQzMl91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfblwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyYXlcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycmF5XCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH0sXG4gICAgIFwiX2JpZ2FycjAyXCI6e1xuICAgICAgIGRlc2VyaWFsaXplIDogKGZ1bmN0aW9uIChyZWFkZXIsIHN6KSB7cmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUgKHJlYWRlcixzeixcIl9iaWdhcnIwMlwiKX0pLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9XG4gICAgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKSB7XG4gIHZhciBfbWFnaWMgPSByZWFkZXIucmVhZDMydSAoKVxuICB2YXIgX2Jsb2NrX2xlbiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSAobnVtX29iamVjdHMgPiAwKT9bXTpudWxsO1xuICB2YXIgb2JqX2NvdW50ZXIgPSAwO1xuICBmdW5jdGlvbiBpbnRlcm5fcmVjICgpIHtcbiAgICB2YXIgY29kZSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweEY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlXG4gICAgICAgIHJldHVybiAoY29kZSAmIDB4M0YpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyAqLykge1xuICAgICAgICB2YXIgbGVuID0gY29kZSAmIDB4MUY7XG4gICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2goY29kZSkge1xuICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQ4cyAoKTtcbiAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDE2cyAoKTtcbiAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW50ZWdlciB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyIC0gb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDE2dSAoKTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlciAtIG9mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIgLSBvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICB2YXIgaGVhZGVyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4RkY7XG4gICAgICAgICAgdmFyIHNpemUgPSBoZWFkZXIgPj4gMTA7XG4gICAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEzOiAvL2NzdC5DT0RFX0JMT0NLNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwOTogLy9jc3QuQ09ERV9TVFJJTkc4OlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQTogLy9jc3QuQ09ERV9TVFJJTkczMjpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBDOiAvL2NzdC5DT0RFX0RPVUJMRV9MSVRUTEU6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0W2ldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBFOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEQ6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwNzogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEY6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgIGNhc2UgMHgxMTogLy9jc3QuQ09ERV9JTkZJWFBPSU5URVI6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MTI6IC8vY3N0LkNPREVfQ1VTVE9NOlxuICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgY2FzZSAweDE5OiAvL2NzdC5DT0RFX0NVU1RPTV9GSVhFRDpcbiAgICAgICAgICB2YXIgYywgcyA9IFwiXCI7XG4gICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSAoKSkgIT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW3NdO1xuICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgIGlmKCFvcHMpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHVua25vd24gY3VzdG9tIGJsb2NrIGlkZW50aWZpZXJcIik7XG4gICAgICAgICAgc3dpdGNoKGNvZGUpe1xuICAgICAgICAgIGNhc2UgMHgxMjogLy8gY3N0LkNPREVfQ1VTVE9NIChkZXByZWNhdGVkKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgIGlmKCFvcHMuZml4ZWRfbGVuZ3RoKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGV4cGVjdGVkIGEgZml4ZWQtc2l6ZSBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gb3BzLmZpeGVkX2xlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxODogLy8gY3N0LkNPREVfQ1VTVE9NX0xFTlxuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgICAgLy8gU2tpcCBzaXplNjRcbiAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgICAgICAgICB2YXIgc2l6ZSA9IFswXTtcbiAgICAgICAgICB2YXIgdiA9IG9wcy5kZXNlcmlhbGl6ZShyZWFkZXIsIHNpemUpO1xuICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gc2l6ZVswXSlcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbmNvcnJlY3QgbGVuZ3RoIG9mIHNlcmlhbGl6ZWQgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjICgpO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIHZhciBzaXplID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgZCA9IHYubGVuZ3RoO1xuICAgIGlmIChkIDwgc2l6ZSkgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICB2W2RdID0gaW50ZXJuX3JlYyAoKTtcbiAgfVxuICBpZiAodHlwZW9mIG9mcyE9XCJudW1iZXJcIikgb2ZzWzBdID0gcmVhZGVyLmk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChzLCBvZnMpIHtcbiAgZnVuY3Rpb24gZ2V0MzIocyxpKSB7XG4gICAgcmV0dXJuIChjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSkgPDwgMjQpIHxcbiAgICAgIChjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDEpIDw8IDE2KSB8XG4gICAgICAoY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkgKyAyKSA8PCA4KSB8XG4gICAgICBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDMpO1xuICB9XG4gIGlmIChnZXQzMihzLCBvZnMpICE9ICgweDg0OTVBNkJFfDApKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLmRhdGFfc2l6ZTogYmFkIG9iamVjdFwiKTtcbiAgcmV0dXJuIChnZXQzMihzLCBvZnMgKyA0KSk7XG59XG5cbi8vUHJvdmlkZXM6IE1sT2JqZWN0VGFibGVcbnZhciBNbE9iamVjdFRhYmxlO1xuaWYgKHR5cGVvZiBnbG9iYWxUaGlzLldlYWtNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvKiBwb2x5ZmlsbCAodXNpbmcgbGluZWFyIHNlYXJjaCkgKi9cbiAgICBmdW5jdGlvbiBOYWl2ZUxvb2t1cChvYmpzKSB7IHRoaXMub2JqcyA9IG9ianM7IH1cbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMub2Jqc1tpXSA9PT0gdikgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfTtcbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGhlcmUuIFtNbE9iamVjdFRhYmxlLnN0b3JlXSB3aWxsIHB1c2ggdG8gW3RoaXMub2Jqc10gZGlyZWN0bHkuXG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IE5haXZlTG9va3VwKHRoaXMub2Jqcyk7XG4gICAgfTtcbiAgfSgpO1xufVxuZWxzZSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKTtcbiAgfTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUuc3RvcmUgPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMubG9va3VwLnNldCh2LCB0aGlzLm9ianMubGVuZ3RoKTtcbiAgdGhpcy5vYmpzLnB1c2godik7XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnJlY2FsbCA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGkgPSB0aGlzLmxvb2t1cC5nZXQodik7XG4gIHJldHVybiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgID8gdW5kZWZpbmVkIDogdGhpcy5vYmpzLmxlbmd0aCAtIGk7ICAgLyogaW5kZXggaXMgcmVsYXRpdmUgKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGVcbi8vVmVyc2lvbjogPj0gNC4wOFxudmFyIGNhbWxfbGVnYWN5X2N1c3RvbV9jb2RlID0gZmFsc2VcblxuLy9Qcm92aWRlczogY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGVcbi8vVmVyc2lvbjogPCA0LjA4XG52YXIgY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGUgPSB0cnVlXG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfbGVnYWN5X2N1c3RvbV9jb2RlLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG52YXIgY2FtbF9vdXRwdXRfdmFsID0gZnVuY3Rpb24gKCl7XG4gIGZ1bmN0aW9uIFdyaXRlciAoKSB7IHRoaXMuY2h1bmsgPSBbXTsgfVxuICBXcml0ZXIucHJvdG90eXBlID0ge1xuICAgIGNodW5rX2lkeDoyMCwgYmxvY2tfbGVuOjAsIG9ial9jb3VudGVyOjAsIHNpemVfMzI6MCwgc2l6ZV82NDowLFxuICAgIHdyaXRlOmZ1bmN0aW9uIChzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfYXQ6ZnVuY3Rpb24gKHBvcywgc2l6ZSwgdmFsdWUpIHtcbiAgICAgIHZhciBwb3MgPSBwb3M7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1twb3MrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfY29kZTpmdW5jdGlvbiAoc2l6ZSwgY29kZSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSBjb2RlO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfc2hhcmVkOmZ1bmN0aW9uIChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAoMSA8PCA4KSkgdGhpcy53cml0ZV9jb2RlKDgsIDB4MDQgLypjc3QuQ09ERV9TSEFSRUQ4Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIGlmIChvZmZzZXQgPCAoMSA8PCAxNikpIHRoaXMud3JpdGVfY29kZSgxNiwgMHgwNSAvKmNzdC5DT0RFX1NIQVJFRDE2Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIHRoaXMud3JpdGVfY29kZSgzMiwgMHgwNiAvKmNzdC5DT0RFX1NIQVJFRDMyKi8sIG9mZnNldCk7XG4gICAgfSxcbiAgICBwb3M6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaHVua19pZHggfSxcbiAgICBmaW5hbGl6ZTpmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlICgzMiwgMHg4NDk1QTZCRSk7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5ibG9ja19sZW4pO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV8zMik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzY0KTtcbiAgICAgIHJldHVybiB0aGlzLmNodW5rO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKHYsIGZsYWdzKSB7XG4gICAgZmxhZ3MgPSBjYW1sX2xpc3RfdG9fanNfYXJyYXkoZmxhZ3MpO1xuXG4gICAgdmFyIG5vX3NoYXJpbmcgPSAoZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSksXG4gICAgICAgIGNsb3N1cmVzID0gIChmbGFncy5pbmRleE9mKDEgLypNYXJzaGFsLkNsb3N1cmVzKi8pICE9PSAtMSk7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBnbG9iYWxUaGlzLmNvbnNvbGUud2FybihcImluIGNhbWxfb3V0cHV0X3ZhbDogZmxhZyBNYXJzaGFsLkNsb3N1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXG4gICAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIgKCk7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGludGVybl9vYmpfdGFibGUgPSBub19zaGFyaW5nID8gbnVsbCA6IG5ldyBNbE9iamVjdFRhYmxlKCk7XG5cbiAgICBmdW5jdGlvbiBtZW1vKHYpIHtcbiAgICAgIGlmIChub19zaGFyaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YXIgZXhpc3Rpbmdfb2Zmc2V0ID0gaW50ZXJuX29ial90YWJsZS5yZWNhbGwodik7XG4gICAgICBpZiAoZXhpc3Rpbmdfb2Zmc2V0KSB7IHdyaXRlci53cml0ZV9zaGFyZWQoZXhpc3Rpbmdfb2Zmc2V0KTsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGVsc2UgeyBpbnRlcm5fb2JqX3RhYmxlLnN0b3JlKHYpOyByZXR1cm4gZmFsc2U7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlcm5fcmVjICh2KSB7XG4gICAgICBpZiAodi5jYW1sX2N1c3RvbSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbmFtZSA9IHYuY2FtbF9jdXN0b207XG4gICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbbmFtZV07XG4gICAgICAgIHZhciBzel8zMl82NCA9IFswLDBdO1xuICAgICAgICBpZighb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZihjYW1sX2xlZ2FjeV9jdXN0b21fY29kZSkge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxMiAvKmNzdC5DT0RFX0NVU1RPTSovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgIH0gZWxzZSBpZihvcHMuZml4ZWRfbGVuZ3RoID09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE4IC8qY3N0LkNPREVfQ1VTVE9NX0xFTiovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBoZWFkZXJfcG9zID0gd3JpdGVyLnBvcyAoKTtcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zLCAzMiwgc3pfMzJfNjRbMF0pO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgNCwgMzIsIDApOyAvLyB6ZXJvXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA4LCAzMiwgc3pfMzJfNjRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBvbGRfcG9zID0gd3JpdGVyLnBvcygpO1xuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgaWYgKG9wcy5maXhlZF9sZW5ndGggIT0gd3JpdGVyLnBvcygpIC0gb2xkX3BvcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGluY29ycmVjdCBmaXhlZCBzaXplcyBzcGVjaWZpZWQgYnkgXCIgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAyICsgKChzel8zMl82NFswXSArIDMpID4+IDIpO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAyICsgKChzel8zMl82NFsxXSArIDcpID4+IDMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICAgIGlmICh2WzBdID09IDI1MSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChBYnN0cmFjdClcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSAmJiBtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIGlmICh2WzBdIDwgMTYgJiYgdi5sZW5ndGggLSAxIDwgOClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8gKyB2WzBdICsgKCh2Lmxlbmd0aCAtIDEpPDw0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwOCAvKmNzdC5DT0RFX0JMT0NLMzIqLywgKCh2Lmxlbmd0aC0xKSA8PCAxMCkgfCB2WzBdKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gdi5sZW5ndGg7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IHYubGVuZ3RoO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxKSBzdGFjay5wdXNoICh2LCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgICBpZighKGNhbWxfaXNfbWxfYnl0ZXMoY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKSkpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogW0J5dGVzLnRdIGNhbm5vdCBzYWZlbHkgYmUgbWFyc2hhbGVkIHdpdGggWy0tZW5hYmxlIHVzZS1qcy1zdHJpbmddXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT0gKHZ8MCkpe1xuICAgICAgICAgIHZhciB0eXBlX29mX3YgPSB0eXBlb2YgdjtcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIElmIGEgZmxvYXQgaGFwcGVucyB0byBiZSBhbiBpbnRlZ2VyIGl0IGlzIHNlcmlhbGl6ZWQgYXMgYW4gaW50ZWdlclxuICAgICAgICAgIC8vIChKc19vZl9vY2FtbCBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB0eXBlIG9mIGFuIGludGVnZXIgbnVtYmVyIGlzXG4gICAgICAgICAgLy8gZmxvYXQgb3IgaW50ZWdlci4pIFRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNyYXNoZXMgd2hlblxuICAgICAgICAgIC8vIHVubWFyc2hhbGxpbmcgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bnRpbWUuIEl0IHNlZW1zIGJldHRlciB0b1xuICAgICAgICAgIC8vIHN5c3RlbWF0aWNhbGx5IGZhaWwgb24gbWFyc2hhbGxpbmcuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyAgICAgICAgICBpZih0eXBlX29mX3YgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoXCIrdHlwZV9vZl92K1wiKVwiKTtcbiAgICAgICAgICAvLyAgICAgICAgICB2YXIgdCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHYpKTtcbiAgICAgICAgICAvLyAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MEIgLypjc3QuQ09ERV9ET1VCTEVfQklHKi8pO1xuICAgICAgICAgIC8vICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGk8ODsgaSsrKXt3cml0ZXIud3JpdGUoOCx0W2ldKX1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID49IDAgJiYgdiA8IDB4NDApIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDBYNDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAoMSA8PCA3KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDAgLypjc3QuQ09ERV9JTlQ4Ki8sIHYpO1xuICAgICAgICAgIGVsc2UgaWYgKHYgPj0gLSgxIDw8IDE1KSAmJiB2IDwgKDEgPDwgMTUpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMTYsIDB4MDEgLypjc3QuQ09ERV9JTlQxNiovLCB2KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwMiAvKmNzdC5DT0RFX0lOVDMyKi8sIHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGV4dGVybl9yZWMgKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIHZhciB2ID0gc3RhY2sucG9wICgpO1xuICAgICAgaWYgKGkgKyAxIDwgdi5sZW5ndGgpIHN0YWNrLnB1c2ggKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWMgKHZbaV0pO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgd3JpdGVyLm9ial9jb3VudGVyID0gaW50ZXJuX29ial90YWJsZS5vYmpzLmxlbmd0aDtcbiAgICB3cml0ZXIuZmluYWxpemUoKTtcbiAgICByZXR1cm4gd3JpdGVyLmNodW5rO1xuICB9XG59ICgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfYmxpdF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyIChzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKTtcbiAgaWYgKHQubGVuZ3RoID4gbGVuKSBjYW1sX2ZhaWx3aXRoIChcIk1hcnNoYWwudG9fYnVmZmVyOiBidWZmZXIgb3ZlcmZsb3dcIik7XG4gIGNhbWxfYmxpdF9ieXRlcyh0LCAwLCBzLCBvZnMsIHQubGVuZ3RoKTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIElvXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3N5c19jbG9zZShmZCkge1xuICBkZWxldGUgY2FtbF9nbG9iYWxfZGF0YS5mZHNbZmRdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdGRfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfc3RkX291dHB1dChjaGFuaWQscyl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgc3RyID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKTtcbiAgdmFyIHNsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyKTtcbiAgY2hhbi5maWxlLndyaXRlKGNoYW4ub2Zmc2V0LCBzdHIsIDAsIHNsZW4pO1xuICBjaGFuLm9mZnNldCArPSBzbGVuO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2xvYmFsX2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IGpzX3ByaW50X3N0ZGVyciwganNfcHJpbnRfc3Rkb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0ZF9vdXRwdXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2ludGVybmFsKGlkeCxvdXRwdXQsZmlsZSxmbGFncykge1xuICBpZihjYW1sX2dsb2JhbF9kYXRhLmZkcyA9PT0gdW5kZWZpbmVkKSBjYW1sX2dsb2JhbF9kYXRhLmZkcyA9IG5ldyBBcnJheSgpO1xuICBmbGFncz1mbGFncz9mbGFnczp7fTtcbiAgdmFyIGluZm8gPSB7fTtcbiAgaW5mby5maWxlID0gZmlsZTtcbiAgaW5mby5vZmZzZXQgPSBmbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowO1xuICBpbmZvLmZsYWdzID0gZmxhZ3M7XG4gIGluZm8ub3V0cHV0ID0gb3V0cHV0O1xuICBjYW1sX2dsb2JhbF9kYXRhLmZkc1tpZHhdID0gaW5mbztcbiAgaWYoIWNhbWxfZ2xvYmFsX2RhdGEuZmRfbGFzdF9pZHggfHwgaWR4ID4gY2FtbF9nbG9iYWxfZGF0YS5mZF9sYXN0X2lkeClcbiAgICBjYW1sX2dsb2JhbF9kYXRhLmZkX2xhc3RfaWR4ID0gaWR4O1xuICByZXR1cm4gaWR4O1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbiAobmFtZSwgZmxhZ3MsIF9wZXJtcykge1xuICB2YXIgZiA9IHt9O1xuICB3aGlsZShmbGFncyl7XG4gICAgc3dpdGNoKGZsYWdzWzFdKXtcbiAgICBjYXNlIDA6IGYucmRvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDE6IGYud3Jvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDI6IGYuYXBwZW5kID0gMTticmVhaztcbiAgICBjYXNlIDM6IGYuY3JlYXRlID0gMTticmVhaztcbiAgICBjYXNlIDQ6IGYudHJ1bmNhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNTogZi5leGNsID0gMTsgYnJlYWs7XG4gICAgY2FzZSA2OiBmLmJpbmFyeSA9IDE7YnJlYWs7XG4gICAgY2FzZSA3OiBmLnRleHQgPSAxO2JyZWFrO1xuICAgIGNhc2UgODogZi5ub25ibG9jayA9IDE7YnJlYWs7XG4gICAgfVxuICAgIGZsYWdzPWZsYWdzWzJdO1xuICB9XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCxmKTtcbiAgdmFyIGlkeCA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRfbGFzdF9pZHg/Y2FtbF9nbG9iYWxfZGF0YS5mZF9sYXN0X2lkeDowO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCAoaWR4KzEsY2FtbF9zdGRfb3V0cHV0LGZpbGUsZik7XG59XG5jYW1sX3N5c19vcGVuX2ludGVybmFsKDAsY2FtbF9zdGRfb3V0cHV0LCBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSkpOyAvL3N0ZGluXG5jYW1sX3N5c19vcGVuX2ludGVybmFsKDEsanNfcHJpbnRfc3Rkb3V0LCBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSkpOyAvL3N0ZG91dFxuY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCgyLGpzX3ByaW50X3N0ZGVyciwgbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpKTsgLy9zdGRlcnJcblxuXG4vLyBvY2FtbCBDaGFubmVsc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX25hbWVcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZSgpIHtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xudmFyIGNhbWxfbWxfY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCAoKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBjID0gMDsgYyA8IGNhbWxfbWxfY2hhbm5lbHMubGVuZ3RoOyBjKyspe1xuICAgIGlmKGNhbWxfbWxfY2hhbm5lbHNbY10gJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vcGVuZWQgJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vdXQpXG4gICAgICBsPVswLGNhbWxfbWxfY2hhbm5lbHNbY10uZmQsbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX2dsb2JhbF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IChmZCkge1xuICB2YXIgZGF0YSA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2ZkXTtcbiAgaWYoZGF0YS5mbGFncy5yZG9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgcmVhZG9ubHlcIik7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZGF0YS5maWxlLFxuICAgIG9mZnNldDpkYXRhLm9mZnNldCxcbiAgICBmZDpmZCxcbiAgICBvcGVuZWQ6dHJ1ZSxcbiAgICBvdXQ6dHJ1ZSxcbiAgICBidWZmZXI6XCJcIlxuICB9O1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5uZWwuZmRdPWNoYW5uZWw7XG4gIHJldHVybiBjaGFubmVsLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N5c19vcGVuLGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luIChmZCkgIHtcbiAgdmFyIGRhdGEgPSBjYW1sX2dsb2JhbF9kYXRhLmZkc1tmZF07XG4gIGlmKGRhdGEuZmxhZ3Mud3Jvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHdyaXRlb25seVwiKTtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIGlmKGZkID09IDAgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSl7XG4gICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICByZWZpbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZnMucmVhZEZpbGVTeW5jKDAsICd1dGY4JykpfTtcbiAgfVxuICB2YXIgY2hhbm5lbCA9IHtcbiAgICBmaWxlOmRhdGEuZmlsZSxcbiAgICBvZmZzZXQ6ZGF0YS5vZmZzZXQsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICByZWZpbGw6cmVmaWxsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3Jcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yKGNoYW5pZCl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5mZDtcbn1cblxuLy9Qcm92aWRlczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG4vL1JlcXVpcmVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxudmFyIHdpbl9maWxlZGVzY3Jfb2ZfY2hhbm5lbCA9IGNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZShjaGFuaWQsbW9kZSl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgZGF0YSA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2NoYW4uZmRdO1xuICBkYXRhLmZsYWdzLnRleHQgPSAhbW9kZVxuICBkYXRhLmZsYWdzLmJpbmFyeSA9IG1vZGVcbiAgcmV0dXJuIDA7XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2VcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gIGNoYW4uZmlsZS5jbG9zZSgpO1xuICBjYW1sX3N5c19jbG9zZShjaGFuLmZkKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5sZW5ndGgoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemVfNjQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjaGFuLmZpbGUubGVuZ3RoICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0KGNoYW5pZCxmKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjYW1sX2dsb2JhbF9kYXRhLmZkc1tjaGFuLmZkXS5vdXRwdXQgPSBmO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsKGNoYW5pZCxmKSB7XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5yZWZpbGwgPSBmO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9yZWZpbGxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9tbF9yZWZpbGxfaW5wdXQgKGNoYW4pIHtcbiAgdmFyIHN0ciA9IGNoYW4ucmVmaWxsKCk7XG4gIHZhciBzdHJfbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHN0cik7XG4gIGlmIChzdHJfbGVuID09IDApIGNoYW4ucmVmaWxsID0gbnVsbDtcbiAgY2hhbi5maWxlLndyaXRlKGNoYW4uZmlsZS5sZW5ndGgoKSwgc3RyLCAwLCBzdHJfbGVuKTtcbiAgcmV0dXJuIHN0cl9sZW47XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfbWF5X3JlZmlsbF9pbnB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfbWF5X3JlZmlsbF9pbnB1dCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZiAoY2hhbi5yZWZpbGwgPT0gbnVsbCkgcmV0dXJuO1xuICBpZiAoY2hhbi5maWxlLmxlbmd0aCgpICE9IGNoYW4ub2Zmc2V0KSByZXR1cm47XG4gIGNhbWxfbWxfcmVmaWxsX2lucHV0IChjaGFuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQgKGNoYW5pZCwgcywgaSwgbCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgdmFyIGwyID0gY2hhbi5maWxlLmxlbmd0aCgpIC0gY2hhbi5vZmZzZXQ7XG4gIGlmIChsMiA9PSAwICYmIGNoYW4ucmVmaWxsICE9IG51bGwpIGwyID0gY2FtbF9tbF9yZWZpbGxfaW5wdXQoY2hhbik7XG4gIGlmIChsMiA8IGwpIGwgPSBsMjtcbiAgY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsIHMsIGksIGwpO1xuICBjaGFuLm9mZnNldCArPSBsO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZSAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuXG4gIHZhciBidWYgPSBjYW1sX2NyZWF0ZV9ieXRlcyg4KTtcbiAgY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsYnVmLDAsOCk7XG5cbiAgLy8gSGVhZGVyIGlzIDIwIGJ5dGVzXG4gIHZhciBsZW4gPSBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChidWYsIDApICsgMjA7XG5cbiAgdmFyIGJ1ZiA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbik7XG4gIGNoYW4uZmlsZS5yZWFkKGNoYW4ub2Zmc2V0LGJ1ZiwwLGxlbik7XG5cbiAgdmFyIG9mZnNldCA9IFswXTtcbiAgdmFyIHJlcyA9IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhidWYsIG9mZnNldCk7XG4gIGNoYW4ub2Zmc2V0ID0gY2hhbi5vZmZzZXQgKyBvZmZzZXRbMF07XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2NoYXIgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0KGNoYW5pZCk7XG4gIGlmIChjaGFuLm9mZnNldCA+PSBjaGFuLmZpbGUubGVuZ3RoKCkpXG4gICAgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICB2YXIgcmVzID0gY2hhbi5maWxlLnJlYWRfb25lKGNoYW4ub2Zmc2V0KTtcbiAgY2hhbi5vZmZzZXQrKztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfcmVmaWxsX2lucHV0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgZmlsZSA9IGNoYW4uZmlsZTtcbiAgd2hpbGUgKChjaGFuLm9mZnNldCArIDMpID49IGZpbGUubGVuZ3RoKCkpIHtcbiAgICB2YXIgbCA9IGNhbWxfbWxfcmVmaWxsX2lucHV0KGNoYW4pO1xuICAgIGlmIChsID09IDApIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfVxuICB2YXIgbyA9IGNoYW4ub2Zmc2V0O1xuICB2YXIgciA9KGZpbGUucmVhZF9vbmUobyAgKSA8PCAyNClcbiAgICAgIHwgIChmaWxlLnJlYWRfb25lKG8rMSkgPDwgMTYpXG4gICAgICB8ICAoZmlsZS5yZWFkX29uZShvKzIpIDw8IDgpXG4gICAgICB8ICAoZmlsZS5yZWFkX29uZShvKzMpKTtcbiAgY2hhbi5vZmZzZXQrPTQ7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW4oY2hhbmlkLHBvcyl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJJbGxlZ2FsIHNlZWtcIik7XG4gIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0LCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luXzY0KGNoYW5pZCxwb3Mpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYgKGNoYW4ucmVmaWxsICE9IG51bGwpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiSWxsZWdhbCBzZWVrXCIpO1xuICBjaGFuLm9mZnNldCA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbihjaGFuaWQpIHtyZXR1cm4gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLm9mZnNldH1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luXzY0KGNoYW5pZCkge3JldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5vZmZzZXQpfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X3NjYW5fbGluZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X3NjYW5fbGluZShjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0KGNoYW5pZCk7XG4gIHZhciBwID0gY2hhbi5vZmZzZXQ7XG4gIHZhciBsZW4gPSBjaGFuLmZpbGUubGVuZ3RoKCk7XG4gIGlmKHAgPj0gbGVuKSB7IHJldHVybiAwO31cbiAgd2hpbGUodHJ1ZSkge1xuICAgIGlmKHAgPj0gbGVuKSByZXR1cm4gLSAocCAtIGNoYW4ub2Zmc2V0KTtcbiAgICBpZihjaGFuLmZpbGUucmVhZF9vbmUocCkgPT0gMTApIHJldHVybiBwIC0gY2hhbi5vZmZzZXQgKyAxO1xuICAgIHArKztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2ZsdXNoXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9mbHVzaCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBmbHVzaCBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBpZighY2hhbi5idWZmZXIgfHwgY2hhbi5idWZmZXIgPT0gXCJcIikgcmV0dXJuIDA7XG4gIGlmKGNoYW4uZmRcbiAgICAgJiYgY2FtbF9nbG9iYWxfZGF0YS5mZHNbY2hhbi5mZF1cbiAgICAgJiYgY2FtbF9nbG9iYWxfZGF0YS5mZHNbY2hhbi5mZF0ub3V0cHV0KSB7XG4gICAgdmFyIG91dHB1dCA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2NoYW4uZmRdLm91dHB1dDtcbiAgICBzd2l0Y2gob3V0cHV0Lmxlbmd0aCl7XG4gICAgY2FzZSAyOiBvdXRwdXQoY2hhbmlkLGNoYW4uYnVmZmVyKTticmVhaztcbiAgICBkZWZhdWx0OiBvdXRwdXQoY2hhbi5idWZmZXIpXG4gICAgfTtcbiAgfVxuICBjaGFuLmJ1ZmZlciA9IFwiXCI7XG4gIHJldHVybiAwO1xufVxuXG4vL291dHB1dCB0byBvdXRfY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCxjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9ieXRlcyhjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmKCEgY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IG91dHB1dCB0byBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICB2YXIgYnl0ZXM7XG4gIGlmKG9mZnNldCA9PSAwICYmIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKGJ1ZmZlcikgPT0gbGVuKVxuICAgIGJ5dGVzID0gYnVmZmVyO1xuICBlbHNlIHtcbiAgICBieXRlcyA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbik7XG4gICAgY2FtbF9ibGl0X2J5dGVzKGJ1ZmZlcixvZmZzZXQsYnl0ZXMsMCxsZW4pO1xuICB9XG4gIHZhciBzdHJpbmcgPSBjYW1sX3N0cmluZ19vZl9ieXRlcyhieXRlcyk7XG4gIHZhciBqc3N0cmluZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoc3RyaW5nKTtcbiAgdmFyIGlkID0ganNzdHJpbmcubGFzdEluZGV4T2YoXCJcXG5cIik7XG4gIGlmKGlkIDwgMClcbiAgICBjaGFuLmJ1ZmZlcis9anNzdHJpbmc7XG4gIGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyKz1qc3N0cmluZy5zdWJzdHIoMCxpZCsxKTtcbiAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIGNoYW4uYnVmZmVyICs9IGpzc3RyaW5nLnN1YnN0cihpZCsxKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXQoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxjYW1sX2J5dGVzX29mX3N0cmluZyhidWZmZXIpLG9mZnNldCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfY2hhciAoY2hhbmlkLGMpIHtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZywgY2FtbF9tbF9vdXRwdXQsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZSAoY2hhbmlkLHYsZmxhZ3MpIHtcbiAgdmFyIHMgPSBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcodiwgZmxhZ3MpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXQoY2hhbmlkLHBvcyl7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLm9mZnNldCA9IHBvcztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLHBvcyl7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLm9mZnNldCA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0KGNoYW5pZCkge1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0XzY0KGNoYW5pZCkge1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0IChjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2ludCAoY2hhbmlkLGkpIHtcbiAgdmFyIGFyciA9IFsoaT4+MjQpICYgMHhGRiwoaT4+MTYpICYgMHhGRiwoaT4+OCkgJiAweEZGLGkgJiAweEZGIF07XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCw0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjKSB7IHJldHVybiAxIH1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYnVmZmVyZWRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2J1ZmZlcmVkKGMsdikgeyByZXR1cm4gMCB9XG4iLCJcblxuLy9Qcm92aWRlczogY2FtbF9nY19taW5vclxuZnVuY3Rpb24gY2FtbF9nY19taW5vcigpeyByZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfbWFqb3JcbmZ1bmN0aW9uIGNhbWxfZ2NfbWFqb3IoKXsgcmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2djX2Z1bGxfbWFqb3JcbmZ1bmN0aW9uIGNhbWxfZ2NfZnVsbF9tYWpvcigpeyByZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfY29tcGFjdGlvblxuZnVuY3Rpb24gY2FtbF9nY19jb21wYWN0aW9uKCl7IHJldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9nY19jb3VudGVyc1xuZnVuY3Rpb24gY2FtbF9nY19jb3VudGVycygpIHsgcmV0dXJuIFsyNTQsMCwwLDBdIH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfcXVpY2tfc3RhdFxuZnVuY3Rpb24gY2FtbF9nY19xdWlja19zdGF0KCl7XG4gIHJldHVybiBbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXVxufVxuLy9Qcm92aWRlczogY2FtbF9nY19zdGF0XG5mdW5jdGlvbiBjYW1sX2djX3N0YXQoKSB7XG4gIHJldHVybiBbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX3NldFxuZnVuY3Rpb24gY2FtbF9nY19zZXQoX2NvbnRyb2wpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfZ2V0XG5mdW5jdGlvbiBjYW1sX2djX2dldCgpe1xuICByZXR1cm4gWzAsMCwwLDAsMCwwLDAsMCwwXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2Zfc2V0XG5mdW5jdGlvbiBjYW1sX21lbXByb2Zfc2V0KF9jb250cm9sKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlZ2lzdGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZpbmFsX3JlZ2lzdGVyICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9maW5hbF9yZWxlYXNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZpbmFsX3JlbGVhc2UgKCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2Zfc3RhcnRcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9zdGFydChyYXRlLHN0YWNrX3NpemUsdHJhY2tlcil7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2Zfc3RvcFxuZnVuY3Rpb24gY2FtbF9tZW1wcm9mX3N0b3AodW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ldmVudGxvZ19yZXN1bWVcbmZ1bmN0aW9uIGNhbWxfZXZlbnRsb2dfcmVzdW1lKHVuaXQpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9ldmVudGxvZ19wYXVzZVxuZnVuY3Rpb24gY2FtbF9ldmVudGxvZ19wYXVzZSh1bml0KSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFxuZnVuY3Rpb24gY2FtbF9nY19odWdlX2ZhbGxiYWNrX2NvdW50KHVuaXQpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9nY19tYWpvcl9zbGljZVxuZnVuY3Rpb24gY2FtbF9nY19tYWpvcl9zbGljZSh3b3JrKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfbWlub3Jfd29yZHNcbmZ1bmN0aW9uIGNhbWxfZ2NfbWlub3Jfd29yZHModW5pdCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9taW5vcl9mcmVlXG5mdW5jdGlvbiBjYW1sX2dldF9taW5vcl9mcmVlKHVuaXQpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfbWFqb3JfYnVja2V0XG5mdW5jdGlvbiBjYW1sX2dldF9tYWpvcl9idWNrZXQobikgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9tYWpvcl9jcmVkaXRcbmZ1bmN0aW9uIGNhbWxfZ2V0X21ham9yX2NyZWRpdChuKSB7IHJldHVybiAwOyB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCl7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSA3OiBjYXNlIDEwOiBjYXNlIDExOiByZXR1cm4gMjtcbiAgZGVmYXVsdDogcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKXtcbiAgdmFyIGcgPSBnbG9iYWxUaGlzO1xuICB2YXIgdmlldztcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDA6ICB2aWV3ID0gZy5GbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDE6ICB2aWV3ID0gZy5GbG9hdDY0QXJyYXk7IGJyZWFrO1xuICBjYXNlIDI6ICB2aWV3ID0gZy5JbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDM6ICB2aWV3ID0gZy5VaW50OEFycmF5OyBicmVhaztcbiAgY2FzZSA0OiAgdmlldyA9IGcuSW50MTZBcnJheTsgYnJlYWs7XG4gIGNhc2UgNTogIHZpZXcgPSBnLlVpbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA2OiAgdmlldyA9IGcuSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgNzogIHZpZXcgPSBnLkludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDg6ICB2aWV3ID0gZy5JbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA5OiAgdmlldyA9IGcuSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTA6IHZpZXcgPSBnLkZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTE6IHZpZXcgPSBnLkZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTI6IHZpZXcgPSBnLlVpbnQ4QXJyYXk7IGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPCA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycmF5XCJcblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA+PSA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycjAyXCJcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG5mdW5jdGlvbiBNbF9CaWdhcnJheSAoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcblxuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IGNhbWxfYmFfY3VzdG9tX25hbWU7XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHZhciBvZnMgPSAwO1xuICBpZih0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgaWYgKCEgKGFyZyBpbnN0YW5jZW9mIEFycmF5KSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiYmlnYXJyYXkuanM6IGludmFsaWQgb2Zmc2V0XCIpO1xuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBhcmcubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgaWYodGhpcy5sYXlvdXQgPT0gMCAvKiBjX2xheW91dCAqLykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMCB8fCBhcmdbaV0gPj0gdGhpcy5kaW1zW2ldKVxuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIGFyZ1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuZGltcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGFyZ1tpXSA8IDEgfHwgYXJnW2ldID4gdGhpcy5kaW1zW2ldKXtcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgfVxuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyAoYXJnW2ldIC0gMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvZnM7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgbCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGggPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLGgpO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIHIgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gWzI1NCwgciwgaV07XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdXG4gIH1cbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IHZbMV07XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IHZbMl07XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwXG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGEgPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgaWYoYSA9PSBiKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGEgOiBiO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciBpbSA9IHZbMV07XG4gICAgdmFyIHJlID0gdlsyXTtcbiAgICBpZihpbSA9PSByZSl7XG4gICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gaW0gOiByZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhLmZpbGwodik7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIChiLCB0b3RhbCkge1xuICBpZiAodGhpcy5sYXlvdXQgIT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9IGIua2luZCkge1xuICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICB2YXIgazIgPSAgICBiLmtpbmQgfCAoYi5sYXlvdXQgPDwgOCk7XG4gICAgcmV0dXJuIGsyIC0gazE7XG4gIH1cbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYi5kaW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBiLmRpbXMubGVuZ3RoIC0gdGhpcy5kaW1zLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAodGhpcy5kaW1zW2ldICE9IGIuZGltc1tpXSlcbiAgICAgIHJldHVybiAodGhpcy5kaW1zW2ldIDwgYi5kaW1zW2ldKSA/IC0xIDogMTtcbiAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gIGNhc2UgMTA6XG4gIGNhc2UgMTE6XG4gICAgLy8gRmxvYXRzXG4gICAgdmFyIHgsIHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHggPSB0aGlzLmRhdGFbaV07XG4gICAgICB5ID0gYi5kYXRhW2ldO1xuICAgICAgaWYgKHggPCB5KVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoeCA+IHkpXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKHggIT0geSkge1xuICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICBpZiAoeCA9PSB4KSByZXR1cm4gMTtcbiAgICAgICAgaWYgKHkgPT0geSkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKz0yKSB7XG4gICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA8IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPiBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPCAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApID4gKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAyOlxuICBjYXNlIDM6XG4gIGNhc2UgNDpcbiAgY2FzZSA1OlxuICBjYXNlIDY6XG4gIGNhc2UgODpcbiAgY2FzZSA5OlxuICBjYXNlIDEyOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldIDwgYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5X2NfMV8xXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgICA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlID0gbmV3IE1sX0JpZ2FycmF5KClcbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIGlmKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpe1xuICAgIGlmKChhcmcgaW5zdGFuY2VvZiBBcnJheSkgJiYgYXJnLmxlbmd0aCA9PSAxKVxuICAgICAgYXJnID0gYXJnWzBdO1xuICAgIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiTWxfQmlnYXJyYXlfY18xXzEub2Zmc2V0XCIpO1xuICB9XG4gIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pXG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJnO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICByZXR1cm4gdGhpcy5kYXRhW29mc107XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgdGhpcy5kYXRhW29mc10gPSB2O1xuICByZXR1cm4gMFxufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHRoaXMuZGF0YS5maWxsKHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLGIsdG90YWwpe1xuICByZXR1cm4gYS5jb21wYXJlKGIsdG90YWwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIE1sX0JpZ2FycmF5X2NfMV8xLCBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpe1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmKGNhbWxfYmFfZ2V0X3NpemUoZGltcykgKiBzaXplX3Blcl9lbGVtZW50ICE9IGRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwibGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggZGltc1wiKTtcbiAgfVxuICBpZihsYXlvdXQgPT0gMCAmJiAvLyBjX2xheW91dFxuICAgICBkaW1zLmxlbmd0aCA9PSAxICYmIC8vIEFycmF5MVxuICAgICBzaXplX3Blcl9lbGVtZW50ID09IDEpIC8vIDEtdG8tMSBtYXBwaW5nXG4gICAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5KGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG5cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGUoa2luZCwgbGF5b3V0LCBkaW1zX21sKSB7XG4gIHZhciBkaW1zID0gY2FtbF9qc19mcm9tX2FycmF5KGRpbXNfbWwpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBjYW1sX2JhX2dldF9zaXplKGRpbXMpKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NoYW5nZV9sYXlvdXRcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9jaGFuZ2VfbGF5b3V0KGJhLCBsYXlvdXQpIHtcbiAgaWYoYmEubGF5b3V0ID09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2JhLmRpbXMubGVuZ3RoIC0gaSAtIDFdO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGxheW91dCwgbmV3X2RpbXMsIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZChiYSkge1xuICByZXR1cm4gYmEua2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9sYXlvdXRcbmZ1bmN0aW9uIGNhbWxfYmFfbGF5b3V0KGJhKSB7XG4gIHJldHVybiBiYS5sYXlvdXQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbnVtX2RpbXNcbmZ1bmN0aW9uIGNhbWxfYmFfbnVtX2RpbXMoYmEpIHtcbiAgcmV0dXJuIGJhLmRpbXMubGVuZ3RoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2RpbShiYSwgaSkge1xuICBpZiAoaSA8IDAgfHwgaSA+PSBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5kaW1cIik7XG4gIHJldHVybiBiYS5kaW1zW2ldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMShiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8yXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMihiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8zXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMyhiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X2dlbmVyaWMoYmEsIGkpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpO1xuICByZXR1cm4gYmEuZ2V0KG9mcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MTYoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiAoYjEgfCAoYjIgPDwgOCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDMyKGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICByZXR1cm4gKCAoYjEgPDwgMCkgIHxcbiAgICAgICAgICAgKGIyIDw8IDgpICB8XG4gICAgICAgICAgIChiMyA8PCAxNikgfFxuICAgICAgICAgICAoYjQgPDwgMjQpICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0NjQoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHZhciBiNSA9IGJhLmdldChvZnMrNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMrNSk7XG4gIHZhciBiNyA9IGJhLmdldChvZnMrNik7XG4gIHZhciBiOCA9IGJhLmdldChvZnMrNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCxiNyxiNixiNSxiNCxiMyxiMixiMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8xKGJhLCBpMCkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChpMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8yXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8yKGJhLCBpMCwgaTEpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8zXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8zKGJhLCBpMCwgaTEsIGkyKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX3NldF9nZW5lcmljKGJhLCBpLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MTYoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDMyKGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMiwgKHYgPj4+IDE2KSAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzMsICh2ID4+PiAyNCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0NjQoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciB2ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcytpLCB2WzctaV0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8xXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8xKGJhLCBpMCwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGkwKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMV0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzMoYmEsIGkwLCBpMSwgaTIsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9IHNyYy5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZHN0LmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKGRzdC5kaW1zW2ldICE9IHNyYy5kaW1zW2ldKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBkc3QuZGF0YS5zZXQoc3JjLmRhdGEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zdWJcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3N1YihiYSwgb2ZzLCBsZW4pIHtcbiAgdmFyIGNoYW5nZWRfZGltO1xuICB2YXIgbXVsID0gMTtcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAoYmEuZGltcy5sZW5ndGggLSAxKTsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IGJhLmRpbXMubGVuZ3RoIC0gMTtcbiAgICBvZnMgPSBvZnMgLSAxO1xuICB9XG4gIGlmIChvZnMgPCAwIHx8IGxlbiA8IDAgfHwgKG9mcyArIGxlbikgPiBiYS5kaW1zW2NoYW5nZWRfZGltXSl7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc3ViOiBiYWQgc3ViLWFycmF5XCIpO1xuICB9XG4gIHZhciBuZXdfZGltcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2ldO1xuICBuZXdfZGltc1tjaGFuZ2VkX2RpbV0gPSBsZW47XG4gIG11bCAqPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIG11bCwgKG9mcyArIGxlbikgKiBtdWwpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zbGljZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zbGljZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbnVtX2luZHMgPSB2aW5kLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gW107XG4gIHZhciBzdWJfZGltcyA9IFtdO1xuICB2YXIgb2ZzO1xuXG4gIGlmIChudW1faW5kcyA+IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnNsaWNlOiB0b28gbWFueSBpbmRpY2VzXCIpO1xuXG4gIC8vIENvbXB1dGUgb2Zmc2V0IGFuZCBjaGVjayBib3VuZHNcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSB2aW5kW2ldO1xuICAgIGZvciAoOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMDtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UobnVtX2luZHMpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2JhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMgKyBpXSA9IHZpbmRbaV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBzaXplX3Blcl9lbGVtZW50LCAob2ZzICsgc2l6ZSkgKiBzaXplX3Blcl9lbGVtZW50KTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIHN1Yl9kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfcmVzaGFwZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuZnVuY3Rpb24gY2FtbF9iYV9yZXNoYXBlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBuZXdfZGltID0gW107XG4gIHZhciBudW1fZGltcyA9IHZpbmQubGVuZ3RoO1xuXG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICB9XG4gIHZhciBudW1fZWx0cyA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgIG5ld19kaW1baV0gPSB2aW5kW2ldO1xuICAgIGlmIChuZXdfZGltW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBudW1fZWx0cyA9IG51bV9lbHRzICogbmV3X2RpbVtpXTtcbiAgfVxuXG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgLy8gQ2hlY2sgdGhhdCBzaXplcyBhZ3JlZVxuICBpZiAobnVtX2VsdHMgIT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgKGJhLmtpbmQgfCAoYmEubGF5b3V0IDw8IDgpKSk7XG4gIGlmKGJhLmNhbWxfY3VzdG9tID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKGJhLmRpbXNbaV0gPCAweGZmZmYpXG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGltc1tpXSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCAweGZmZmYpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIDApO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB3cml0ZXIud3JpdGUoMzIsYmEuZGltc1tpXSlcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgd3JpdGVyLndyaXRlKDgsMCk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoYmEuZ2V0KGkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGogPSBiYS5nZXQoaSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzJdKSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGNvbXBsZXggPSBiYS5nZXQoaSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMV0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzJdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgbmFtZSl7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmXG4gIHZhciBsYXlvdXQgPSAodGFnID4+IDgpICYgMTtcbiAgdmFyIGRpbXMgPSBbXVxuICBpZihuYW1lID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZV9kaW0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgaWYoc2l6ZV9kaW0gPT0gMHhmZmZmKXtcbiAgICAgICAgdmFyIHNpemVfZGltX2hpID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgdmFyIHNpemVfZGltX2xvID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgaWYoc2l6ZV9kaW1faGkgIT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSBkaW1zLnB1c2gocmVhZGVyLnJlYWQzMnUoKSk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSk7XG4gIHZhciBiYSA9IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHZhciBzaXh0eSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICBpZihzaXh0eSkgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjYW5ub3QgcmVhZCBiaWdhcnJheSB3aXRoIDY0LWJpdCBPQ2FtbCBpbnRzXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW50NjQgPSBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xuICAgICAgYmEuc2V0KGksaW50NjQpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVha1xuICB9XG4gIHN6WzBdID0gKDQgKyBudW1fZGltcykgKiA0O1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vRGVwcmVjYXRlZFxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfZnJvbVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2Zyb20oZGF0YTEsIGRhdGEyLCBqc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKXtcbiAgaWYoZGF0YTIgfHwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSA9PSAyKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiKTtcbiAgfVxuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YTEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2hhc2ggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX2hhc2goYmEpe1xuICB2YXIgbnVtX2VsdHMgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICB2YXIgaCA9IDA7XG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMjU2KSBudW1fZWx0cyA9IDI1NjtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgNCA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCA4KSB8IChiYS5kYXRhW2krMl0gPDwgMTYpIHwgKGJhLmRhdGFbaSszXSA8PCAyNCk7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgdyA9IDA7XG4gICAgc3dpdGNoIChudW1fZWx0cyAmIDMpIHtcbiAgICBjYXNlIDM6IHcgID0gYmEuZGF0YVtpKzJdIDw8IDE2OyAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMjogdyB8PSBiYS5kYXRhW2krMV0gPDwgODsgICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAxOiB3IHw9IGJhLmRhdGFbaSswXTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDIgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTIpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgMTYpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPSAwKVxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIG51bV9lbHRzICo9IDJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYmEpe1xuICByZXR1cm4gYmEuZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGcgPSBnbG9iYWxUaGlzO1xuICB2YXIga2luZDtcbiAgaWYgKHRhIGluc3RhbmNlb2YgZy5GbG9hdDMyQXJyYXkpIGtpbmQgPSAwO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBnLkludDhBcnJheSkga2luZCA9IDI7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgZy5VaW50OEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBnLkludDE2QXJyYXkpIGtpbmQgPSA0O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuVWludDE2QXJyYXkpIGtpbmQgPSA1O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgZy5VaW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5OiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICByZXR1cm4ga2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZCA9IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIGxpYnJhcnlcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBKc2xpYlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3B1cmVfZXhwciBjb25zdFxuZnVuY3Rpb24gY2FtbF9qc19wdXJlX2V4cHIgKGYpIHsgcmV0dXJuIGYoKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3NldCAobXV0YWJsZSwgY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobyxmLHYpIHsgb1tmXT12O3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9qc19nZXQgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19nZXQobyxmKSB7IHJldHVybiBvW2ZdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2RlbGV0ZSAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2RlbGV0ZShvLGYpIHsgZGVsZXRlIG9bZl07IHJldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2luc3RhbmNlb2YgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfaW5zdGFuY2VvZihvLGMpIHsgcmV0dXJuIChvIGluc3RhbmNlb2YgYykgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3R5cGVvZiAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3R5cGVvZihvKSB7IHJldHVybiB0eXBlb2YgbzsgfVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlKHJlcyAmJiByZXMuam9vX3RyYW1wKXtcbiAgICByZXMgPSByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncyk7XG4gICAgYysrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lX3JldHVyblxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lX3JldHVybihmLGFyZ3MpIHtcbiAgcmV0dXJuIHtqb29fdHJhbXA6Zixqb29fYXJnczphcmdzfTtcbn1cblxuLy9Qcm92aWRlczoganNfcHJpbnRfc3Rkb3V0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24ganNfcHJpbnRfc3Rkb3V0KHMpIHtcbiAgdmFyIHMgPSBjYW1sX3V0ZjE2X29mX3V0Zjgocyk7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgaWYgKGcucHJvY2VzcyAmJiBnLnByb2Nlc3Muc3Rkb3V0ICYmIGcucHJvY2Vzcy5zdGRvdXQud3JpdGUpIHtcbiAgICBnLnByb2Nlc3Muc3Rkb3V0LndyaXRlKHMpXG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgIC8vIGFzIGNvbnNvbGUgbG9nZ2luZyBkaXNwbGF5IGEgbmV3bGluZSBhdCB0aGUgZW5kXG4gICAgaWYocy5jaGFyQ29kZUF0KHMubGVuZ3RoIC0gMSkgPT0gMTApXG4gICAgICBzID0gcy5zdWJzdHIoMCxzLmxlbmd0aCAtIDEgKTtcbiAgICB2YXIgdiA9IGcuY29uc29sZTtcbiAgICB2ICAmJiB2LmxvZyAmJiB2LmxvZyhzKTtcbiAgfVxufVxuLy9Qcm92aWRlczoganNfcHJpbnRfc3RkZXJyIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24ganNfcHJpbnRfc3RkZXJyKHMpIHtcbiAgdmFyIHMgPSBjYW1sX3V0ZjE2X29mX3V0Zjgocyk7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgaWYgKGcucHJvY2VzcyAmJiBnLnByb2Nlc3Muc3Rkb3V0ICYmIGcucHJvY2Vzcy5zdGRvdXQud3JpdGUpIHtcbiAgICBnLnByb2Nlc3Muc3RkZXJyLndyaXRlKHMpXG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgIC8vIGFzIGNvbnNvbGUgbG9nZ2luZyBkaXNwbGF5IGEgbmV3bGluZSBhdCB0aGUgZW5kXG4gICAgaWYocy5jaGFyQ29kZUF0KHMubGVuZ3RoIC0gMSkgPT0gMTApXG4gICAgICBzID0gcy5zdWJzdHIoMCxzLmxlbmd0aCAtIDEgKTtcbiAgICB2YXIgdiA9IGcuY29uc29sZTtcbiAgICB2ICYmIHYuZXJyb3IgJiYgdi5lcnJvcihzKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2pzXG5mdW5jdGlvbiBjYW1sX2lzX2pzKCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93cmFwX2V4Y2VwdGlvbiBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfcmV0dXJuX2V4bl9jb25zdGFudFxuZnVuY3Rpb24gY2FtbF93cmFwX2V4Y2VwdGlvbihlKSB7XG4gIGlmKGUgaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIGU7XG4gIC8vU3RhY2tfb3ZlcmZsb3c6IGNocm9tZSwgc2FmYXJpXG4gIGlmKGdsb2JhbFRoaXMuUmFuZ2VFcnJvclxuICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICYmIGUubWVzc2FnZVxuICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL21heGltdW0gY2FsbCBzdGFjay9pKSlcbiAgICByZXR1cm4gY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3cpO1xuICAvL1N0YWNrX292ZXJmbG93OiBmaXJlZm94XG4gIGlmKGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5JbnRlcm5hbEVycm9yXG4gICAgICYmIGUubWVzc2FnZVxuICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKSlcbiAgICByZXR1cm4gY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3cpO1xuICAvL1dyYXAgRXJyb3IgaW4gSnMuRXJyb3IgZXhjZXB0aW9uXG4gIGlmKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgIHJldHVybiBbMCxjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSxlXTtcbiAgLy9mYWxsYmFjazogd3JhcHBlZCBpbiBGYWlsdXJlXG4gIHJldHVybiBbMCxjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKFN0cmluZyhlKSldO1xufVxuXG4vLyBFeHBlcmltZW50YWxcbi8vUHJvdmlkZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZShleG4sIGZvcmNlKSB7XG4gIC8vbmV2ZXIgcmVyYWlzZSBmb3IgY29uc3RhbnQgZXhuXG4gIGlmKCFleG4uanNfZXJyb3IgfHwgZm9yY2UgfHwgZXhuWzBdID09IDI0OCkgZXhuLmpzX2Vycm9yID0gbmV3IGdsb2JhbFRoaXMuRXJyb3IoXCJKcyBleGNlcHRpb24gY29udGFpbmluZyBiYWNrdHJhY2VcIik7XG4gIHJldHVybiBleG47XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmKGV4bi5qc19lcnJvcikgeyByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07IH1cbiAgcmV0dXJuIDA7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7IHJldHVybiAhIXg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Jvb2woeCkgeyByZXR1cm4gK3g7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9mbG9hdCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19mbG9hdCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYXJyYXkoYSkge1xuICByZXR1cm4gYS5zbGljZSgxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYXJyYXkoYSkge1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYlswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8bGVuO2krKykgYltpKzFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkoYSl7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBpPWEubGVuZ3RoIC0gMTsgaT49MDsgaS0tKXtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLGUsbF07XG4gIH1cbiAgcmV0dXJuIGxcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfbGlzdF90b19qc19hcnJheShsKXtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yKDsgbCAhPT0gMDsgbCA9IGxbMl0pIHtcbiAgICBhLnB1c2gobFsxXSk7XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdmFyIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczoganNfcHJpbnRfc3RkZXJyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmKCF4Lm1hdGNoKC9eW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKFxcLlthLXpBLVpfJF1bYS16QS1aXyQwLTldKikqJC8pKXtcbiAgICBqc19wcmludF9zdGRlcnIoXCJjYW1sX2pzX3ZhcjogXFxcIlwiICsgeCArIFwiXFxcIiBpcyBub3QgYSB2YWxpZCBKYXZhU2NyaXB0IHZhcmlhYmxlLiBjb250aW51aW5nIC4uXCIpO1xuICAgIC8vZ2xvYmFsVGhpcy5jb25zb2xlLmVycm9yKFwiSnMuVW5zYWZlLmV2YWxfc3RyaW5nXCIpXG4gIH1cbiAgcmV0dXJuIGV2YWwoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykgeyByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bl9jYWxsIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19mdW5fY2FsbChmLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gZigpO1xuICBjYXNlIDI6IHJldHVybiBmIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gZiAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX29qc19uZXdfYXJyIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9vanNfbmV3X2FycihjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAwOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjIChhWzBdKTtcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBhKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihsZW4gPiAwKXtcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIFt1bmRlZmluZWRdKTtcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgW2FyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihuID09IGFyaXR5ICYmIGYubGVuZ3RoID09IGFyaXR5KSByZXR1cm4gZi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5KTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZixhcmdzKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsW3RoaXMsYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5ICsgMSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTsgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V2YWxfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V2YWxfc3RyaW5nIChzKSB7cmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19leHByIChjb25zdClcbi8vUmVxdWlyZXM6IGpzX3ByaW50X3N0ZGVyclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGpzX3ByaW50X3N0ZGVycihcImNhbWxfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBqc19wcmludF9zdGRlcnJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3B1cmVfanNfZXhwciAocyl7XG4gIGpzX3ByaW50X3N0ZGVycihcImNhbWxfcHVyZV9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfb2JqZWN0IChvYmplY3RfbGl0ZXJhbClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX29iamVjdCAoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RpdmUgQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAqL1xuLyogIGVuIEF1dG9tYXRpcXVlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCAgICAqL1xuLyogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aXRoICAgICAqL1xuLyogIHRoZSBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIC4uL0xJQ0VOU0UuICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKiAkSWQ6IHBhcnNpbmcuYyA4OTgzIDIwMDgtMDgtMDYgMDk6Mzg6MjVaIHhsZXJveSAkICovXG5cbi8qIFRoZSBQREEgYXV0b21hdG9uIGZvciBwYXJzZXJzIGdlbmVyYXRlZCBieSBjYW1seWFjYyAqL1xuXG4vKiBUaGUgcHVzaGRvd24gYXV0b21hdGEgKi9cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfbGV4X2FycmF5XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2VuZ2luZSh0YWJsZXMsIGVudiwgY21kLCBhcmcpXG57XG4gIHZhciBFUlJDT0RFID0gMjU2O1xuXG4gIC8vdmFyIFNUQVJUID0gMDtcbiAgLy92YXIgVE9LRU5fUkVBRCA9IDE7XG4gIC8vdmFyIFNUQUNLU19HUk9XTl8xID0gMjtcbiAgLy92YXIgU1RBQ0tTX0dST1dOXzIgPSAzO1xuICAvL3ZhciBTRU1BTlRJQ19BQ1RJT05fQ09NUFVURUQgPSA0O1xuICAvL3ZhciBFUlJPUl9ERVRFQ1RFRCA9IDU7XG4gIHZhciBsb29wID0gNjtcbiAgdmFyIHRlc3RzaGlmdCA9IDc7XG4gIHZhciBzaGlmdCA9IDg7XG4gIHZhciBzaGlmdF9yZWNvdmVyID0gOTtcbiAgdmFyIHJlZHVjZSA9IDEwO1xuXG4gIHZhciBSRUFEX1RPS0VOID0gMDtcbiAgdmFyIFJBSVNFX1BBUlNFX0VSUk9SID0gMTtcbiAgdmFyIEdST1dfU1RBQ0tTXzEgPSAyO1xuICB2YXIgR1JPV19TVEFDS1NfMiA9IDM7XG4gIHZhciBDT01QVVRFX1NFTUFOVElDX0FDVElPTiA9IDQ7XG4gIHZhciBDQUxMX0VSUk9SX0ZVTkNUSU9OID0gNTtcblxuICB2YXIgZW52X3Nfc3RhY2sgPSAxO1xuICB2YXIgZW52X3Zfc3RhY2sgPSAyO1xuICB2YXIgZW52X3N5bWJfc3RhcnRfc3RhY2sgPSAzO1xuICB2YXIgZW52X3N5bWJfZW5kX3N0YWNrID0gNDtcbiAgdmFyIGVudl9zdGFja3NpemUgPSA1O1xuICB2YXIgZW52X3N0YWNrYmFzZSA9IDY7XG4gIHZhciBlbnZfY3Vycl9jaGFyID0gNztcbiAgdmFyIGVudl9sdmFsID0gODtcbiAgdmFyIGVudl9zeW1iX3N0YXJ0ID0gOTtcbiAgdmFyIGVudl9zeW1iX2VuZCA9IDEwO1xuICB2YXIgZW52X2FzcCA9IDExO1xuICB2YXIgZW52X3J1bGVfbGVuID0gMTI7XG4gIHZhciBlbnZfcnVsZV9udW1iZXIgPSAxMztcbiAgdmFyIGVudl9zcCA9IDE0O1xuICB2YXIgZW52X3N0YXRlID0gMTU7XG4gIHZhciBlbnZfZXJyZmxhZyA9IDE2O1xuXG4gIC8vIHZhciBfdGJsX2FjdGlvbnMgPSAxO1xuICB2YXIgdGJsX3RyYW5zbF9jb25zdCA9IDI7XG4gIHZhciB0YmxfdHJhbnNsX2Jsb2NrID0gMztcbiAgdmFyIHRibF9saHMgPSA0O1xuICB2YXIgdGJsX2xlbiA9IDU7XG4gIHZhciB0YmxfZGVmcmVkID0gNjtcbiAgdmFyIHRibF9kZ290byA9IDc7XG4gIHZhciB0Ymxfc2luZGV4ID0gODtcbiAgdmFyIHRibF9yaW5kZXggPSA5O1xuICB2YXIgdGJsX2dpbmRleCA9IDEwO1xuICB2YXIgdGJsX3RhYmxlc2l6ZSA9IDExO1xuICB2YXIgdGJsX3RhYmxlID0gMTI7XG4gIHZhciB0YmxfY2hlY2sgPSAxMztcbiAgLy8gdmFyIF90YmxfZXJyb3JfZnVuY3Rpb24gPSAxNDtcbiAgLy8gdmFyIF90YmxfbmFtZXNfY29uc3QgPSAxNTtcbiAgLy8gdmFyIF90YmxfbmFtZXNfYmxvY2sgPSAxNjtcblxuICBpZiAoIXRhYmxlcy5kZ290bykge1xuICAgIHRhYmxlcy5kZWZyZWQgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9kZWZyZWRdKTtcbiAgICB0YWJsZXMuc2luZGV4ID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0Ymxfc2luZGV4XSk7XG4gICAgdGFibGVzLmNoZWNrICA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX2NoZWNrXSk7XG4gICAgdGFibGVzLnJpbmRleCA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX3JpbmRleF0pO1xuICAgIHRhYmxlcy50YWJsZSAgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF90YWJsZV0pO1xuICAgIHRhYmxlcy5sZW4gICAgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9sZW5dKTtcbiAgICB0YWJsZXMubGhzICAgID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0YmxfbGhzXSk7XG4gICAgdGFibGVzLmdpbmRleCA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX2dpbmRleF0pO1xuICAgIHRhYmxlcy5kZ290byAgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9kZ290b10pO1xuICB9XG5cbiAgdmFyIHJlcyA9IDAsIG4sIG4xLCBuMiwgc3RhdGUxO1xuXG4gIC8vIFJFU1RPUkVcbiAgdmFyIHNwID0gZW52W2Vudl9zcF07XG4gIHZhciBzdGF0ZSA9IGVudltlbnZfc3RhdGVdO1xuICB2YXIgZXJyZmxhZyA9IGVudltlbnZfZXJyZmxhZ107XG5cbiAgZXhpdDpmb3IgKDs7KSB7XG4gICAgc3dpdGNoKGNtZCkge1xuICAgIGNhc2UgMDovL1NUQVJUOlxuICAgICAgc3RhdGUgPSAwO1xuICAgICAgZXJyZmxhZyA9IDA7XG4gICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgIGNhc2UgNjovL2xvb3A6XG4gICAgICBuID0gdGFibGVzLmRlZnJlZFtzdGF0ZV07XG4gICAgICBpZiAobiAhPSAwKSB7IGNtZCA9IHJlZHVjZTsgYnJlYWs7IH1cbiAgICAgIGlmIChlbnZbZW52X2N1cnJfY2hhcl0gPj0gMCkgeyBjbWQgPSB0ZXN0c2hpZnQ7IGJyZWFrOyB9XG4gICAgICByZXMgPSBSRUFEX1RPS0VOO1xuICAgICAgYnJlYWsgZXhpdDtcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBsZXhlciBhbmQgdXBkYXRlcyAqL1xuICAgICAgLyogc3ltYl9zdGFydCBhbmQgc3ltYl9lbmQgKi9cbiAgICBjYXNlIDE6Ly9UT0tFTl9SRUFEOlxuICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIGVudltlbnZfY3Vycl9jaGFyXSA9IHRhYmxlc1t0YmxfdHJhbnNsX2Jsb2NrXVthcmdbMF0gKyAxXTtcbiAgICAgICAgZW52W2Vudl9sdmFsXSA9IGFyZ1sxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudltlbnZfY3Vycl9jaGFyXSA9IHRhYmxlc1t0YmxfdHJhbnNsX2NvbnN0XVthcmcgKyAxXTtcbiAgICAgICAgZW52W2Vudl9sdmFsXSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgIGNhc2UgNzovL3Rlc3RzaGlmdDpcbiAgICAgIG4xID0gdGFibGVzLnNpbmRleFtzdGF0ZV07XG4gICAgICBuMiA9IG4xICsgZW52W2Vudl9jdXJyX2NoYXJdO1xuICAgICAgaWYgKG4xICE9IDAgJiYgbjIgPj0gMCAmJiBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09IGVudltlbnZfY3Vycl9jaGFyXSkge1xuICAgICAgICBjbWQgPSBzaGlmdDsgYnJlYWs7XG4gICAgICB9XG4gICAgICBuMSA9IHRhYmxlcy5yaW5kZXhbc3RhdGVdO1xuICAgICAgbjIgPSBuMSArIGVudltlbnZfY3Vycl9jaGFyXTtcbiAgICAgIGlmIChuMSAhPSAwICYmIG4yID49IDAgJiYgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PSBlbnZbZW52X2N1cnJfY2hhcl0pIHtcbiAgICAgICAgbiA9IHRhYmxlcy50YWJsZVtuMl07XG4gICAgICAgIGNtZCA9IHJlZHVjZTsgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoZXJyZmxhZyA8PSAwKSB7XG4gICAgICAgIHJlcyA9IENBTExfRVJST1JfRlVOQ1RJT047XG4gICAgICAgIGJyZWFrIGV4aXQ7XG4gICAgICB9XG4gICAgICAvLyBGYWxsIHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBlcnJvciBmdW5jdGlvbiAqL1xuICAgIGNhc2UgNTovL0VSUk9SX0RFVEVDVEVEOlxuICAgICAgaWYgKGVycmZsYWcgPCAzKSB7XG4gICAgICAgIGVycmZsYWcgPSAzO1xuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgc3RhdGUxID0gZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdO1xuICAgICAgICAgIG4xID0gdGFibGVzLnNpbmRleFtzdGF0ZTFdO1xuICAgICAgICAgIG4yID0gbjEgKyBFUlJDT0RFO1xuICAgICAgICAgIGlmIChuMSAhPSAwICYmIG4yID49IDAgJiYgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT0gRVJSQ09ERSkge1xuICAgICAgICAgICAgY21kID0gc2hpZnRfcmVjb3ZlcjsgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzcCA8PSBlbnZbZW52X3N0YWNrYmFzZV0pIHJldHVybiBSQUlTRV9QQVJTRV9FUlJPUjtcbiAgICAgICAgICAgIC8qIFRoZSBNTCBjb2RlIHJhaXNlcyBQYXJzZV9lcnJvciAqL1xuICAgICAgICAgICAgc3AtLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlbnZbZW52X2N1cnJfY2hhcl0gPT0gMCkgcmV0dXJuIFJBSVNFX1BBUlNFX0VSUk9SO1xuICAgICAgICAvKiBUaGUgTUwgY29kZSByYWlzZXMgUGFyc2VfZXJyb3IgKi9cbiAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gLTE7XG4gICAgICAgIGNtZCA9IGxvb3A7IGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgY2FzZSA4Oi8vc2hpZnQ6XG4gICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSAtMTtcbiAgICAgIGlmIChlcnJmbGFnID4gMCkgZXJyZmxhZy0tO1xuICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgY2FzZSA5Oi8vc2hpZnRfcmVjb3ZlcjpcbiAgICAgIHN0YXRlID0gdGFibGVzLnRhYmxlW24yXTtcbiAgICAgIHNwKys7XG4gICAgICBpZiAoc3AgPj0gZW52W2Vudl9zdGFja3NpemVdKSB7XG4gICAgICAgIHJlcyA9IEdST1dfU1RBQ0tTXzE7XG4gICAgICAgIGJyZWFrIGV4aXQ7XG4gICAgICB9XG4gICAgICAvLyBGYWxsIHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIHJlc2l6ZXMgdGhlIHN0YWNrcyAqL1xuICAgIGNhc2UgMjovL1NUQUNLU19HUk9XTl8xOlxuICAgICAgZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdID0gc3RhdGU7XG4gICAgICBlbnZbZW52X3Zfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X2x2YWxdO1xuICAgICAgZW52W2Vudl9zeW1iX3N0YXJ0X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX3N0YXJ0XTtcbiAgICAgIGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kXTtcbiAgICAgIGNtZCA9IGxvb3A7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTA6Ly9yZWR1Y2U6XG4gICAgICB2YXIgbSA9IHRhYmxlcy5sZW5bbl07XG4gICAgICBlbnZbZW52X2FzcF0gPSBzcDtcbiAgICAgIGVudltlbnZfcnVsZV9udW1iZXJdID0gbjtcbiAgICAgIGVudltlbnZfcnVsZV9sZW5dID0gbTtcbiAgICAgIHNwID0gc3AgLSBtICsgMTtcbiAgICAgIG0gPSB0YWJsZXMubGhzW25dO1xuICAgICAgc3RhdGUxID0gZW52W2Vudl9zX3N0YWNrXVtzcF07XG4gICAgICBuMSA9IHRhYmxlcy5naW5kZXhbbV07XG4gICAgICBuMiA9IG4xICsgc3RhdGUxO1xuICAgICAgaWYgKG4xICE9IDAgJiYgbjIgPj0gMCAmJiBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09IHN0YXRlMSlcbiAgICAgICAgc3RhdGUgPSB0YWJsZXMudGFibGVbbjJdO1xuICAgICAgZWxzZVxuICAgICAgICBzdGF0ZSA9IHRhYmxlcy5kZ290b1ttXTtcbiAgICAgIGlmIChzcCA+PSBlbnZbZW52X3N0YWNrc2l6ZV0pIHtcbiAgICAgICAgcmVzID0gR1JPV19TVEFDS1NfMjtcbiAgICAgICAgYnJlYWsgZXhpdDtcbiAgICAgIH1cbiAgICAgIC8vIEZhbGwgdGhyb3VnaFxuICAgICAgLyogVGhlIE1MIGNvZGUgcmVzaXplcyB0aGUgc3RhY2tzICovXG4gICAgY2FzZSAzOi8vU1RBQ0tTX0dST1dOXzI6XG4gICAgICByZXMgPSBDT01QVVRFX1NFTUFOVElDX0FDVElPTjtcbiAgICAgIGJyZWFrIGV4aXQ7XG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgc2VtYW50aWMgYWN0aW9uICovXG4gICAgY2FzZSA0Oi8vU0VNQU5USUNfQUNUSU9OX0NPTVBVVEVEOlxuICAgICAgZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdID0gc3RhdGU7XG4gICAgICBlbnZbZW52X3Zfc3RhY2tdW3NwICsgMV0gPSBhcmc7XG4gICAgICB2YXIgYXNwID0gZW52W2Vudl9hc3BdO1xuICAgICAgZW52W2Vudl9zeW1iX2VuZF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW2FzcCArIDFdO1xuICAgICAgaWYgKHNwID4gYXNwKSB7XG4gICAgICAgIC8qIFRoaXMgaXMgYW4gZXBzaWxvbiBwcm9kdWN0aW9uLiBUYWtlIHN5bWJfc3RhcnQgZXF1YWwgdG8gc3ltYl9lbmQuICovXG4gICAgICAgIGVudltlbnZfc3ltYl9zdGFydF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW2FzcCArIDFdO1xuICAgICAgfVxuICAgICAgY21kID0gbG9vcDsgYnJlYWs7XG4gICAgICAvKiBTaG91bGQgbm90IGhhcHBlbiAqL1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgfVxuICB9XG4gIC8vIFNBVkVcbiAgZW52W2Vudl9zcF0gPSBzcDtcbiAgZW52W2Vudl9zdGF0ZV0gPSBzdGF0ZTtcbiAgZW52W2Vudl9lcnJmbGFnXSA9IGVycmZsYWc7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3BhcnNlcl90cmFjZSBjb25zdFxuLy9EdW1teSBmdW5jdGlvbiFcbmZ1bmN0aW9uIGNhbWxfc2V0X3BhcnNlcl90cmFjZSgpIHsgcmV0dXJuIDA7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2ludCBjb25zdCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcsIGNhbWxfc3RyX3JlcGVhdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfaW50KGZtdCwgaSkge1xuICBpZiAoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpID09IFwiJWRcIikgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIitpKTtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoaSA8IDApIHsgaWYgKGYuc2lnbmVkY29udikgeyBmLnNpZ24gPSAtMTsgaSA9IC1pOyB9IGVsc2UgaSA+Pj49IDA7IH1cbiAgdmFyIHMgPSBpLnRvU3RyaW5nKGYuYmFzZSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0IChuLCAnMCcpICsgcztcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocykge1xuICB2YXIgaSA9IDAsIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSwgYmFzZSA9IDEwLCBzaWduID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKSkge1xuICAgIGNhc2UgNDU6IGkrKzsgc2lnbiA9IC0xOyBicmVhaztcbiAgICBjYXNlIDQzOiBpKys7IHNpZ24gPSAxOyBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGkgKyAxIDwgbGVuICYmIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkgPT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgIGNhc2UgMTIwOiBjYXNlIDg4OiBiYXNlID0gMTY7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTE6IGNhc2UgNzk6IGJhc2UgPSAgODsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlICA5ODogY2FzZSA2NjogYmFzZSA9ICAyOyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTE3OiBjYXNlIDg1OiBpICs9IDI7IGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIFtpLCBzaWduLCBiYXNlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9kaWdpdFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9kaWdpdChjKSB7XG4gIGlmIChjID49IDQ4ICYmIGMgPD0gNTcpICByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSAgcmV0dXJuIGMgLSA1NTtcbiAgaWYgKGMgPj0gOTcgJiYgYyA8PSAxMjIpIHJldHVybiBjIC0gODc7XG4gIHJldHVybiAtMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX3BhcnNlX2RpZ2l0LCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2ludF9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIHRocmVzaG9sZCA9IC0xID4+PiAwO1xuICB2YXIgYyA9IChpIDwgbGVuKT9jYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpOjA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKztpPGxlbjtpKyspIHtcbiAgICBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgICBpZiAoYyA9PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgcmVzID0gYmFzZSAqIHJlcyArIGQ7XG4gICAgaWYgKHJlcyA+IHRocmVzaG9sZCkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmICgoYmFzZSA9PSAxMCkgJiYgKChyZXMgfCAwKSAhPSByZXMpKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbXVsKGEsYil7XG4gIHJldHVybiBNYXRoLmltdWwoYSxiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kaXZcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfZGl2KHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4gKHgveSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb2Rcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfbW9kKHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4geCV5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Jzd2FwMTZcbmZ1bmN0aW9uIGNhbWxfYnN3YXAxNih4KSB7XG4gIHJldHVybiAoKCgoeCAmIDB4MDBGRikgPDwgOCkgfFxuICAgICAgICAgICAoKHggJiAweEZGMDApID4+IDgpKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwXG5mdW5jdGlvbiBjYW1sX2ludDMyX2Jzd2FwKHgpIHtcbiAgcmV0dXJuICgoKHggJiAweDAwMDAwMEZGKSA8PCAyNCkgfFxuICAgICAgICAgICgoeCAmIDB4MDAwMEZGMDApIDw8IDgpIHxcbiAgICAgICAgICAoKHggJiAweDAwRkYwMDAwKSA+Pj4gOCkgfFxuICAgICAgICAgICgoeCAmIDB4RkYwMDAwMDApID4+PiAyNCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9ic3dhcFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9ic3dhcCh4KSB7XG4gIHZhciB5ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh4KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW3lbN10sIHlbNl0sIHlbNV0sIHlbNF0sIHlbM10sIHlbMl0sIHlbMV0sIHlbMF1dKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSGFzaHRibFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfdW5pdl9wYXJhbSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaGFzaF91bml2X3BhcmFtIChjb3VudCwgbGltaXQsIG9iaikge1xuICB2YXIgaGFzaF9hY2N1ID0gMDtcbiAgZnVuY3Rpb24gaGFzaF9hdXggKG9iaikge1xuICAgIGxpbWl0IC0tO1xuICAgIGlmIChjb3VudCA8IDAgfHwgbGltaXQgPCAwKSByZXR1cm47XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5ICYmIG9ialswXSA9PT0gKG9ialswXXwwKSkge1xuICAgICAgc3dpdGNoIChvYmpbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9ialsyXSkgfCAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIGxpbWl0Kys7IGhhc2hfYXV4KG9iaik7IGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIG9ialswXSkgfCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gb2JqLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIGhhc2hfYXV4IChvYmpbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhvYmopKSB7XG4gICAgICBjb3VudCAtLTtcbiAgICAgIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KG9iaik7XG4gICAgICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuXHRmb3IgKHZhciBiID0gY29udGVudCwgbCA9IGIubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICAgIH0gZWxzZSB7IC8qIEFSUkFZICovXG4gICAgICAgIGZvciAodmFyIGEgPSBjb250ZW50LCBsID0gYS5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGFbaV0pIHwgMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKG9iaikpIHtcbiAgICAgIHZhciBqc2J5dGVzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhvYmopO1xuICAgICAgZm9yICh2YXIgYiA9IGpzYnl0ZXMsIGwgPSBqc2J5dGVzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZm9yICh2YXIgYiA9IG9iaiwgbCA9IG9iai5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gKG9ianwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgY291bnQgLS07XG4gICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBvYmopIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gK29iaikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGNvdW50LS07XG4gICAgICB2YXIgcCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAob2JqKSk7XG4gICAgICBmb3IgKHZhciBpID0gNzsgaSA+PSAwOyBpLS0pIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIHBbaV0pIHwgMDtcbiAgICB9IGVsc2UgaWYob2JqICYmIG9iai5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaCA9IGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gob2JqKSB8IDA7XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIGgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaGFzaF9hdXggKG9iaik7XG4gIHJldHVybiBoYXNoX2FjY3UgJiAweDNGRkZGRkZGO1xufVxuXG4vL2Z1bmN0aW9uIFJPVEwzMih4LG4pIHsgcmV0dXJuICgoeCA8PCBuKSB8ICh4ID4+PiAoMzItbikpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludChoLGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTF8MCk7XG4gIGQgPSAoKGQgPDwgMTUpIHwgKGQgPj4+ICgzMi0xNSkpKTsgLy8gUk9UTDMyKGQsIDE1KTtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4MWI4NzM1OTMpO1xuICBoIF49IGQ7XG4gIGggPSAoKGggPDwgMTMpIHwgKGggPj4+ICgzMi0xMykpKTsgICAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpfDApICsgKDB4ZTY1NDZiNjR8MCkpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsIChoLCAweDg1ZWJjYTZifDApO1xuICBoIF49IGggPj4+IDEzO1xuICBoID0gY2FtbF9tdWwgKGgsIDB4YzJiMmFlMzV8MCk7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaGFzaF9taXhfaW50NjRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQgKGgsIHYwKSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2ludDY0KGgsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAodjApKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NCAoaCwgdikge1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9sbzMyKHYpKTtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfaGkzMih2KSk7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHMuY2hhckNvZGVBdChpKVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgOClcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzIpIDw8IDE2KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMykgPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHMuY2hhckNvZGVBdChpKzEpIDw8IDg7XG4gIGNhc2UgMTpcbiAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldXG4gICAgICB8IChzW2krMV0gPDwgOClcbiAgICAgIHwgKHNbaSsyXSA8PCAxNilcbiAgICAgIHwgKHNbaSszXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHNbaSsyXSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHNbaSsxXSA8PCA4O1xuICBjYXNlIDE6IHcgfD0gc1tpXTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjb250ZW50KVxuICBlbHNlIC8qIEFSUkFZICovXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGNvbnRlbnQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLCB2KSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZyh2KSk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9mbG9hdCwgY2FtbF9oYXNoX21peF9zdHJpbmcsIGNhbWxfaGFzaF9taXhfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2hhc2ggKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07IHJkID0gMDsgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2ICYmIHYuY2FtbF9jdXN0b20pe1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoaCA9IGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKHYpO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQgKGgsIGhoKTtcbiAgICAgICAgbnVtIC0tO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdlswXSA9PT0gKHZbMF18MCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgIG51bS0tO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIHF1ZXVlWy0tcmRdID0gdlsxXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgdGFnID0gKCh2Lmxlbmd0aCAtIDEpIDw8IDEwKSB8IHZbMF07XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICBmb3IgKGkgPSAxLCBsZW4gPSB2Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWYgKHdyID49IHN6KSBicmVhaztcbiAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9ieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfanNieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHYgPT09ICh2fDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdit2KzEpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSArdikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsdik7XG4gICAgICBudW0tLTtcbiAgICB9XG4gIH1cbiAgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzRkZGRkZGRjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSl7XG4gIGlmICh0eXBlb2YgYSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpIHJldHVybiAyNTI7IC8vIHN0cmluZ190YWdcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoYSkpIHJldHVybiAxMjUyOyAvLyBvY2FtbCBzdHJpbmcgKGlmIGRpZmZlcmVudCBmcm9tIGJ5dGVzKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgQXJyYXkgJiYgYVswXSA9PT0gKGFbMF0+Pj4wKSAmJiBhWzBdIDw9IDI1NSkge1xuICAgIC8vIExvb2sgbGlrZSBhbiBvY2FtbCBibG9ja1xuICAgIHZhciB0YWcgPSBhWzBdIHwgMDtcbiAgICAvLyBpZ25vcmUgZG91YmxlX2FycmF5X3RhZyBiZWNhdXNlIHdlIGNhbm5vdCBhY2N1cmF0ZWx5IHNldFxuICAgIC8vIHRoaXMgdGFnIHdoZW4gd2UgY3JlYXRlIGFuIGFycmF5IG9mIGZsb2F0LlxuICAgIHJldHVybiAodGFnID09IDI1NCk/MDp0YWdcbiAgfVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKSByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBOdW1iZXIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChhICYmIGEuY2FtbF9jdXN0b20pIHJldHVybiAxMjU1OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAoYSAmJiBhLmNvbXBhcmUpIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcInN5bWJvbFwiKSByZXR1cm4gMTI1MTtcbiAgcmV0dXJuIDEwMDE7IC8vb3V0X29mX2hlYXBfdGFnXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSl7XG4gIHJldHVybiBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20obnVtLCBjdXN0b20sIHN3YXAsIHRvdGFsKSB7XG4gIHZhciBjb21wID0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGN1c3RvbSk7XG4gIGlmKGNvbXApIHtcbiAgICB2YXIgeCA9IChzd2FwID4gMCk/Y29tcChjdXN0b20sbnVtLHRvdGFsKTpjb21wKG51bSxjdXN0b20sdG90YWwpO1xuICAgIGlmKHRvdGFsICYmIHggIT0geCkgcmV0dXJuIHN3YXA7IC8vIHRvdGFsICYmIG5hblxuICAgIGlmKCt4ICE9ICt4KSByZXR1cm4gK3g7IC8vIG5hblxuICAgIGlmKCh4IHwgMCkgIT0gMCkgcmV0dXJuICh4IHwgMCk7IC8vICFuYW5cbiAgfVxuICByZXR1cm4gc3dhcFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsIChjb25zdCwgY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnRfY29tcGFyZSwgY2FtbF9zdHJpbmdfY29tcGFyZSwgY2FtbF9ieXRlc19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbSwgY2FtbF9jb21wYXJlX3ZhbF90YWdcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvcig7Oykge1xuICAgIGlmICghKHRvdGFsICYmIGEgPT09IGIpKSB7XG4gICAgICB2YXIgdGFnX2EgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19hID09IDI1MCkgeyBhID0gYVsxXTsgY29udGludWUgfVxuXG4gICAgICB2YXIgdGFnX2IgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhiKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19iID09IDI1MCkgeyBiID0gYlsxXTsgY29udGludWUgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmKHRhZ19hICE9PSB0YWdfYikge1xuICAgICAgICBpZih0YWdfYSA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2IgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdfYiA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2EgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0YWdfYSA8IHRhZ19iKT8tMToxO1xuICAgICAgfVxuICAgICAgc3dpdGNoKHRhZ19hKXtcbiAgICAgICAgLy8gMjQ2OiBMYXp5X3RhZyBoYW5kbGVkIGJlbGxvd1xuICAgICAgY2FzZSAyNDc6IC8vIENsb3N1cmVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjQ4OiAvLyBPYmplY3RcbiAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pO1xuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0OTogLy8gSW5maXhcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTA6IC8vIEZvcndhcmQgdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTE6IC8vQWJzdHJhY3RcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUyOiAvLyBPQ2FtbCBieXRlc1xuICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgIHZhciB4ID0gY2FtbF9ieXRlc19jb21wYXJlKGEsIGIpO1xuICAgICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUzOiAvLyBEb3VibGVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5X3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX2FycmF5X3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1NTogLy8gQ3VzdG9tX3RhZ1xuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI0NzogLy8gRnVuY3Rpb25cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTU6IC8vIEN1c3RvbVxuICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgaWYoY29tcCAhPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYikpe1xuICAgICAgICAgIHJldHVybiAoYS5jYW1sX2N1c3RvbTxiLmNhbWxfY3VzdG9tKT8tMToxO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFjb21wKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICB2YXIgeCA9IGNvbXAoYSxiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgdmFyIHggPSBhLmNvbXBhcmUoYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCkgeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMDogLy8gTnVtYmVyXG4gICAgICAgIGEgPSArYTtcbiAgICAgICAgYiA9ICtiO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAxOiAvLyBUaGUgcmVzdFxuICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAvLyAxLiBKYXZhU2NyaXB0IHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAyLiBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvL1xuICAgICAgICAvLyAoMykgd2lsbCByYWlzZSBhIFtUeXBlRXJyb3JdXG4gICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgLy8gKDIpIGFuZCAoMyksIGFmdGVyIGV2ZW50dWFsIGNvZXJjaW9uXG4gICAgICAgIC8vIC0gaWYgYSBhbmQgYiBhcmUgc3RyaW5ncywgYXBwbHkgbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uXG4gICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAvLyAgIGFuZCBhcHBseSBzdGFuZGFyZCBjb21wYXJpc29uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEV4Y2VwdGlvbjogYCE9YCB3aWxsIG5vdCBjb2VyY2UvY29udmVydCBpZiBib3RoIGEgYW5kIGIgYXJlIG9iamVjdHNcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhiKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyMDogLy8gamF2YXNjcmlwdCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICB2YXIgYiA9IGIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDY6IC8vIExhenlfdGFnXG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5XG4gICAgICBkZWZhdWx0OiAvLyBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiAoYS5sZW5ndGggPCBiLmxlbmd0aCk/LTE6MTtcbiAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmUgKGEsIGIpIHsgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRydWUpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9jb21wYXJlIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfaW50X2NvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGEgPCBiKSByZXR1cm4gKC0xKTsgaWYgKGEgPT0gYikgcmV0dXJuIDA7IHJldHVybiAxO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA9PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX25vdGVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSAhPSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVyZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID49IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcnRoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID4gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzdGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8IDApOyB9XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWI6IGNvZGUgc3BlY2lmaWMgdG8gSnNfb2Zfb2NhbWxcblxuLy9Qcm92aWRlczogY2FtbF9qc19vbl9pZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9qc19vbl9pZSAoKSB7XG4gIHZhciB1YSA9XG4gICAgICBnbG9iYWxUaGlzLm5hdmlnYXRvcj9nbG9iYWxUaGlzLm5hdmlnYXRvci51c2VyQWdlbnQ6XCJcIjtcbiAgcmV0dXJuIHVhLmluZGV4T2YoXCJNU0lFXCIpICE9IC0xICYmIHVhLmluZGV4T2YoXCJPcGVyYVwiKSAhPSAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2h0bWxfZXNjYXBlIGNvbnN0IChjb25zdClcbnZhciBjYW1sX2pzX3JlZ2V4cHMgPSB7IGFtcDovJi9nLCBsdDovPC9nLCBxdW90Oi9cXFwiL2csIGFsbDovWyY8XFxcIl0vIH07XG5mdW5jdGlvbiBjYW1sX2pzX2h0bWxfZXNjYXBlIChzKSB7XG4gIGlmICghY2FtbF9qc19yZWdleHBzLmFsbC50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIHMucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMuYW1wLCBcIiZhbXA7XCIpXG4gICAgLnJlcGxhY2UoY2FtbF9qc19yZWdleHBzLmx0LCBcIiZsdDtcIilcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMucXVvdCwgXCImcXVvdDtcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaHRtbF9lbnRpdGllc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VudGl0aWVzKHMpIHtcbiAgdmFyIGVudGl0eSA9IC9eJiM/WzAtOWEtekEtWl0rOyQvXG4gIGlmKHMubWF0Y2goZW50aXR5KSlcbiAge1xuICAgIHZhciBzdHIsIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgdGVtcC5pbm5lckhUTUw9IHM7XG4gICAgc3RyPSB0ZW1wLnRleHRDb250ZW50IHx8IHRlbXAuaW5uZXJUZXh0O1xuICAgIHRlbXA9bnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGVsc2Uge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJJbnZhbGlkIGVudGl0eSBcIiArIHMpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0X2NvbnNvbGUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0X2NvbnNvbGUgKCkge1xuICB2YXIgYyA9IGdsb2JhbFRoaXMuY29uc29sZT9nbG9iYWxUaGlzLmNvbnNvbGU6e307XG4gIHZhciBtID0gW1wibG9nXCIsIFwiZGVidWdcIiwgXCJpbmZvXCIsIFwid2FyblwiLCBcImVycm9yXCIsIFwiYXNzZXJ0XCIsIFwiZGlyXCIsIFwiZGlyeG1sXCIsXG4gICAgICAgICAgIFwidHJhY2VcIiwgXCJncm91cFwiLCBcImdyb3VwQ29sbGFwc2VkXCIsIFwiZ3JvdXBFbmRcIiwgXCJ0aW1lXCIsIFwidGltZUVuZFwiXTtcbiAgZnVuY3Rpb24gZiAoKSB7fVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIGlmICghY1ttW2ldXSkgY1ttW2ldXT1mO1xuICByZXR1cm4gYztcbn1cblxuLy9Qcm92aWRlczogY2FtbF94bWxodHRwcmVxdWVzdF9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF94bWxodHRwcmVxdWVzdF9jcmVhdGUodW5pdCl7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgaWYodHlwZW9mIGcuWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdHJ5IHsgcmV0dXJuIG5ldyBnLlhNTEh0dHBSZXF1ZXN0IH0gY2F0Y2ggKGUpIHsgfTtcbiAgfVxuICBpZih0eXBlb2YgZy5hY3RpdmVYT2JqZWN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRyeSB7IHJldHVybiBuZXcgZy5hY3RpdmVYT2JqZWN0KFwiTXN4bWwyLlhNTEhUVFBcIikgfSBjYXRjaChlKXsgfTtcbiAgICB0cnkgeyByZXR1cm4gbmV3IGcuYWN0aXZlWE9iamVjdChcIk1zeG1sMy5YTUxIVFRQXCIpIH0gY2F0Y2goZSl7IH07XG4gICAgdHJ5IHsgcmV0dXJuIG5ldyBnLmFjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MSFRUUFwiKSB9IGNhdGNoKGUpeyB9O1xuICB9XG4gIGNhbWxfZmFpbHdpdGgoXCJDYW5ub3QgY3JlYXRlIGEgWE1MSHR0cFJlcXVlc3RcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29mX2V4Y2VwdGlvbihleG4pIHtcbiAgaWYoZXhuLmpzX2Vycm9yKSB7IHJldHVybiBleG4uanNfZXJyb3I7IH1cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkgKHgsIHkpIHtcbiAgaWYoIHR5cGVvZiB5PT09XCJmdW5jdGlvblwiICkgeyB4LmZ1biA9IHk7IHJldHVybiAwOyB9XG4gIGlmKCB5LmZ1biApIHsgeC5mdW4gPSB5LmZ1bjsgcmV0dXJuIDA7IH1cbiAgdmFyIGkgPSB5Lmxlbmd0aDsgd2hpbGUgKGktLSkgeFtpXSA9IHlbaV07IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19ibG9jayBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9pc19ibG9jayAoeCkgeyByZXR1cm4gKyh4IGluc3RhbmNlb2YgQXJyYXkpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdGFnICh4KSB7XG4gIGlmICgoeCBpbnN0YW5jZW9mIEFycmF5KSAmJiB4WzBdID09ICh4WzBdID4+PiAwKSlcbiAgICByZXR1cm4geFswXVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmICgoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fCB0eXBlb2YgeCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIDI0N1xuICBlbHNlIGlmICh4ICYmIHguY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDI1NVxuICBlbHNlXG4gICAgcmV0dXJuIDEwMDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3RhZyAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfdGFnICh4LCB0YWcpIHsgeFswXSA9IHRhZzsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2Jsb2NrIGNvbnN0IChjb25zdCxjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2Jsb2NrICh0YWcsIHNpemUpIHtcbiAgdmFyIG8gPSBuZXcgQXJyYXkoc2l6ZSsxKTtcbiAgb1swXT10YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSB0YWc7XG4gIGZvcih2YXIgaSA9IDE7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2R1cCBtdXRhYmxlIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCAoeCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdHJ1bmNhdGUgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX29ial90cnVuY2F0ZSAoeCwgcykge1xuICBpZiAoczw9MCB8fCBzICsgMSA+IHgubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJPYmoudHJ1bmNhdGVcIik7XG4gIGlmICh4Lmxlbmd0aCAhPSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkIChiLHYpIHtcbiAgYlswXT0yNTA7XG4gIGJbMV09djtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkICh2KSB7IHJldHVybiBbMjUwLCB2XTsgfVxuXG4vLy8vLy8vLy8vLy8vIENhbWxpbnRlcm5hbE9PXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIGNvbnN0XG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAob2ZzID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycmF5IGlzIG5vdCBzcGFyc2VcbiAgICBmb3IgKHZhciBpID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoOyBpIDwgY2FjaGVpZDsgaSsrKVxuICAgICAgY2FtbF9tZXRob2RfY2FjaGVbaV0gPSAwO1xuICB9IGVsc2UgaWYgKG1ldGhzW29mc10gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgLSAxXTtcbiAgfVxuICB2YXIgbGkgPSAzLCBoaSA9IG1ldGhzWzFdICogMiArIDEsIG1pO1xuICB3aGlsZSAobGkgPCBoaSkge1xuICAgIG1pID0gKChsaStoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSsxXSkgaGkgPSBtaS0yO1xuICAgIGVsc2UgbGkgPSBtaTtcbiAgfVxuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IGxpICsgMTtcbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gKHRhZyA9PSBtZXRoc1tsaSsxXSA/IG1ldGhzW2xpXSA6IDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29vX2xhc3RfaWRcbnZhciBjYW1sX29vX2xhc3RfaWQgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9vb19pZFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX3NldF9vb19pZCAoYikge1xuICBiWzJdPWNhbWxfb29fbGFzdF9pZCsrO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mcmVzaF9vb19pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX2ZyZXNoX29vX2lkKCkge1xuICByZXR1cm4gY2FtbF9vb19sYXN0X2lkKys7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfcmF3X2ZpZWxkKG8saSkgeyByZXR1cm4gb1tpKzFdIH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3Jhd19maWVsZChvLGksdikgeyByZXR1cm4gb1tpKzFdID0gdiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKG8pIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfYWRkX29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9vYmpfYWRkX29mZnNldCh2LG9mZnNldCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiT2JqLmFkZF9vZmZzZXQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbn1cbiIsIi8vLy8vLy8vLyBCSUdTVFJJTkdcblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9iaWdzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2JpZ3N0cmluZyhoLCBicykge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCxicy5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlciBtdXRhYmxlXG5mdW5jdGlvbiBiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyKGJzKSB7XG4gIHJldHVybiBicy5kYXRhLmJ1ZmZlclxufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5KGJzKSB7XG4gIHJldHVybiBicy5kYXRhXG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ19vZl9hcnJheV9idWZmZXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyKGFiKSB7XG4gIHZhciB0YSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQ4QXJyYXkoYWIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKDEyLCAwLCBbdGEubGVuZ3RoXSwgdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXkoYmEpIHtcbiAgdmFyIHRhID0gbmV3IGdsb2JhbFRoaXMuVWludDhBcnJheShiYS5idWZmZXIsIGJhLmJ5dGVPZmZzZXQsIGJhLmxlbmd0aCAqIGJhLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSgxMiwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfbWVtY21wXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19tZW1jbXAoczEsIHBvczEsIHMyLCBwb3MyLCBsZW4pe1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGEgPSBjYW1sX2JhX2dldF8xKHMxLHBvczEgKyBpKTtcbiAgICB2YXIgYiA9IGNhbWxfYmFfZ2V0XzEoczIscG9zMiArIGkpO1xuICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYShiYTEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKXtcbiAgaWYoMTIgIT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYoMTIgIT0gYmEyLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYobGVuID09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMSA9IGJhMS5vZmZzZXQocG9zMSk7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYob2ZzMSArIGxlbiA+IGJhMS5kYXRhLmxlbmd0aCl7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpe1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zdWJhcnJheShvZnMxLG9mczErbGVuKTtcbiAgYmEyLmRhdGEuc2V0KHNsaWNlLHBvczIpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYShzdHIxLCBwb3MxLCBiYTIsIHBvczIsIGxlbil7XG4gIGlmKDEyICE9IGJhMi5raW5kKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZihsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYocG9zMSArIGxlbiA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzdHIxKSkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICBpZihvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIHZhciBzbGljZSA9IGNhbWxfYXJyYXlfb2Zfc3RyaW5nKHN0cjEpLnNsaWNlKHBvczEscG9zMSArIGxlbik7XG4gIGJhMi5kYXRhLnNldChzbGljZSxvZnMyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfYmxpdF9ieXRlc190b19iYVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9ieXRlc190b19iYShzdHIxLCBwb3MxLCBiYTIsIHBvczIsIGxlbil7XG4gIGlmKDEyICE9IGJhMi5raW5kKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZihsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYocG9zMSArIGxlbiA+IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHN0cjEpKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF9hcnJheV9vZl9ieXRlcyhzdHIxKS5zbGljZShwb3MxLHBvczEgKyBsZW4pO1xuICBiYTIuZGF0YS5zZXQoc2xpY2Usb2ZzMik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlcyhiYTEsIHBvczEsIGJ5dGVzMiwgcG9zMiwgbGVuKXtcbiAgaWYoMTIgIT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmKGxlbiA9PSAwKSByZXR1cm4gMDtcbiAgdmFyIG9mczEgPSBiYTEub2Zmc2V0KHBvczEpO1xuICBpZihvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKXtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYocG9zMiArIGxlbiA+IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKGJ5dGVzMikpe1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zbGljZShvZnMxLCBvZnMxK2xlbik7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KHNsaWNlKSwgMCwgYnl0ZXMyLCBwb3MyLCBsZW4pO1xuICByZXR1cm4gMFxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGgoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdCAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoZXhuLCBidCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgKCkgeyByZXR1cm4gWzBdOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3QoKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogbGV4aW5nLmMgNjA0NSAyMDA0LTAxLTAxIDE2OjQyOjQzWiBkb2xpZ2V6ICQgKi9cblxuLyogVGhlIHRhYmxlLWRyaXZlbiBhdXRvbWF0b24gZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleC4gKi9cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGV4X2FycmF5KHMpIHtcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHZhciBsID0gcy5sZW5ndGggLyAyO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgYVtpXSA9IChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNiA+PiAxNjtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXksIGNhbWxfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlLTE7XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiBOZXcgbGV4ZXIgZW5naW5lLCB3aXRoIG1lbW9yeSBvZiBwb3NpdGlvbnMgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IGN1cnJfcG9zO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl90YWcocywgaSwgbWVtKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm4gO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gLTE7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9uZXdfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X21lbSA9IDEwO1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG4gIHZhciBsZXhfYmFzZV9jb2RlID0gNjtcbiAgdmFyIGxleF9iYWNrdHJrX2NvZGUgPSA3O1xuICB2YXIgbGV4X2RlZmF1bHRfY29kZSA9IDg7XG4gIHZhciBsZXhfdHJhbnNfY29kZSA9IDk7XG4gIHZhciBsZXhfY2hlY2tfY29kZSA9IDEwO1xuICB2YXIgbGV4X2NvZGUgPSAxMTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuICBpZiAoIXRibC5sZXhfZGVmYXVsdF9jb2RlKSB7XG4gICAgdGJsLmxleF9iYXNlX2NvZGUgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtfY29kZV0pO1xuICAgIHRibC5sZXhfY2hlY2tfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tfY29kZV0pO1xuICAgIHRibC5sZXhfdHJhbnNfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNfY29kZV0pO1xuICAgIHRibC5sZXhfZGVmYXVsdF9jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF9jb2RlXSk7XG4gIH1cbiAgaWYgKHRibC5sZXhfY29kZSA9PSBudWxsKSB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZS0xO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYWNrdHJrX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgdmFyIHBzdGF0ZSA9IHN0YXRlIDtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIElmIHNvbWUgdHJhbnNpdGlvbiwgZ2V0IGFuZCBwZXJmb3JtIG1lbW9yeSBtb3ZlcyAqL1xuICAgICAgdmFyIGJhc2VfY29kZSA9IHRibC5sZXhfYmFzZV9jb2RlW3BzdGF0ZV0sIHBjX29mZjtcbiAgICAgIGlmICh0YmwubGV4X2NoZWNrX2NvZGVbYmFzZV9jb2RlICsgY10gPT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbVxuICAgICAgKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0sIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YiAoYSwgaSwgbGVuKSB7XG4gIHZhciBhMiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGEyWzBdPTA7XG4gIGZvcih2YXIgaTIgPSAxLCBpMT0gaSsxOyBpMiA8PSBsZW47IGkyKyssaTErKyApe1xuICAgIGEyW2kyXT1hW2kxXTtcbiAgfVxuICByZXR1cm4gYTI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYXBwZW5kIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICB2YXIgbDEgPSBhMS5sZW5ndGgsIGwyID0gYTIubGVuZ3RoO1xuICB2YXIgbCA9IGwxK2wyLTFcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsaiA9IDE7XG4gIGZvcig7aTxsMTtpKyspIGFbaV09YTFbaV07XG4gIGZvcig7aTxsO2krKyxqKyspIGFbaV09YTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NvbmNhdCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2NvbmNhdChsKSB7XG4gIHZhciBhID0gWzBdO1xuICB3aGlsZSAobCAhPT0gMCkge1xuICAgIHZhciBiID0gbFsxXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGIubGVuZ3RoOyBpKyspIGEucHVzaChiW2ldKTtcbiAgICBsID0gbFsyXTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vLy8vLy8vLy8vLy8gUGVydmFzaXZlXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3NldCAobXV0YWJsZSwgY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9zZXQgKGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYXJyYXlbaW5kZXgrMV09bmV3dmFsOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcnJheVtpbmRleCsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KXtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICBhcnJheVtvZnMraSsxXSA9IHY7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2hlY2tfYm91bmQgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfY2hlY2tfYm91bmQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoaW5kZXggPj4+IDAgPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfdmVjdCAobGVuLCBpbml0KSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0wO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9mbG9hdF92ZWN0IGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV9mbG9hdF92ZWN0KGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIFdlYWsgQVBJLCBidXQgd2l0aG91dCB0aGUgd2VhayBzZW1hbnRpY3NcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbnZhciBjYW1sX2VwaGVfa2V5X29mZnNldCA9IDNcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG52YXIgY2FtbF9lcGhlX2RhdGFfb2Zmc2V0ID0gMlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dlYWtfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfa2V5X29mZnNldCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3dlYWtfY3JlYXRlIChuKSB7XG4gIGlmIChuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuY3JlYXRlXCIpO1xuICB2YXIgeCA9IFsyNTEsXCJjYW1sX2VwaGVfbGlzdF9oZWFkXCJdO1xuICB4Lmxlbmd0aCA9IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgbjtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19zZXQoeCwgaSwgdikge1xuICBpZihpIDwgMCB8fCBjYW1sX2VwaGVfa2V5X29mZnNldCArIGkgPj0geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuc2V0XCIpO1xuICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSB2O1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19nZXQoeCwgaSkge1xuICBpZihpIDwgMCB8fCBjYW1sX2VwaGVfa2V5X29mZnNldCArIGkgPj0geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuZ2V0X2tleVwiKTtcbiAgcmV0dXJuICh4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaSBdPT09dW5kZWZpbmVkKT8wOnhbY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19nZXRfY29weVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2dldCxjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9vYmpfZHVwLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19nZXRfY29weSh4LCBpKSB7XG4gIGlmKGkgPCAwIHx8IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaSA+PSB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiV2Vhay5nZXRfY29weVwiKTtcbiAgdmFyIHkgPSBjYW1sX3dlYWtfZ2V0KHgsIGkpO1xuICBpZiAoeSA9PT0gMCkgcmV0dXJuIHk7XG4gIHZhciB6ID0geVsxXTtcbiAgaWYgKHogaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIFswLCBjYW1sX29ial9kdXAoeildO1xuICByZXR1cm4geTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93ZWFrX2NoZWNrIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX3dlYWtfY2hlY2soeCwgaSkge1xuICBpZih4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0hPT11bmRlZmluZWQgJiYgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldICE9PTApXG4gICAgcmV0dXJuIDE7XG4gIGVsc2VcbiAgICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93ZWFrX2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfd2Vha19ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgLy8gbWludXMgb25lIGJlY2F1c2UgY2FtbF9hcnJheV9ibGl0IHdvcmtzIG9uIG9jYW1sIGFycmF5XG4gIGNhbWxfYXJyYXlfYmxpdChhMSwgY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpMSAtIDEsXG4gICAgICAgICAgICAgICAgICBhMiwgY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpMiAtIDEsXG4gICAgICAgICAgICAgICAgICBsZW4pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2NyZWF0ZVxudmFyIGNhbWxfZXBoZV9jcmVhdGUgPSBjYW1sX3dlYWtfY3JlYXRlXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9ibGl0X2tleVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2JsaXRcbnZhciBjYW1sX2VwaGVfYmxpdF9rZXkgPSBjYW1sX3dlYWtfYmxpdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2tleVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2dldFxudmFyIGNhbWxfZXBoZV9nZXRfa2V5ID0gY2FtbF93ZWFrX2dldFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XG4vL1JlcXVpcmVzOiBjYW1sX3dlYWtfZ2V0X2NvcHlcbnZhciBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5ID0gY2FtbF93ZWFrX2dldF9jb3B5XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9jaGVja19rZXlcbi8vUmVxdWlyZXM6IGNhbWxfd2Vha19jaGVja1xudmFyIGNhbWxfZXBoZV9jaGVja19rZXkgPSBjYW1sX3dlYWtfY2hlY2tcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3NldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfd2Vha19zZXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9zZXRfa2V5KHgsIGksIHYpIHtcbiAgcmV0dXJuIGNhbWxfd2Vha19zZXQoeCwgaSwgWzAsIHZdKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfdW5zZXRfa2V5XG4vL1JlcXVpcmVzOiBjYW1sX3dlYWtfc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfdW5zZXRfa2V5KHgsIGkpIHtcbiAgcmV0dXJuIGNhbWxfd2Vha19zZXQoeCwgaSwgMClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2JsaXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfYmxpdF9kYXRhKHNyYywgZHN0KXtcbiAgZHN0W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBzcmNbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfZ2V0X2RhdGEoeCl7XG4gIGlmKHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiAwO1xuICBlbHNlXG4gICAgcmV0dXJuIFswLCB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF1dO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFfY29weVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX29ial9kdXBcbmZ1bmN0aW9uIGNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5KHgpe1xuICBpZih4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gMDtcbiAgZWxzZVxuICAgIHJldHVybiBbMCwgY2FtbF9vYmpfZHVwKHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldFxuZnVuY3Rpb24gY2FtbF9lcGhlX3NldF9kYXRhKHgsIGRhdGEpe1xuICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBkYXRhO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3Vuc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldFxuZnVuY3Rpb24gY2FtbF9lcGhlX3Vuc2V0X2RhdGEoeCwgZGF0YSl7XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IHVuZGVmaW5lZDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9jaGVja19kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9jaGVja19kYXRhKHgpe1xuICBpZih4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gMDtcbiAgZWxzZVxuICAgIHJldHVybiAxO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfY2hhblxuLy9SZXF1aXJlczogY2FtbF9tZDVfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9hcnJheSxjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWQ1X2NoYW4oY2hhbmlkLGxlbil7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgY2hhbl9sZW4gPSBjaGFuLmZpbGUubGVuZ3RoKCk7XG4gIGlmKGxlbjwwKSBsZW4gPSBjaGFuX2xlbiAtIGNoYW4ub2Zmc2V0O1xuICBpZihjaGFuLm9mZnNldCArIGxlbiA+IGNoYW5fbGVuKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciBidWYgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCxidWYsMCxsZW4pO1xuICByZXR1cm4gY2FtbF9tZDVfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2J5dGVzKGJ1ZiksMCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX21kNV9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tZDVfc3RyaW5nKHMsIG9mcywgbGVuKSB7XG4gIHJldHVybiBjYW1sX21kNV9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhzKSxvZnMsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbnZhciBjYW1sX21kNV9ieXRlcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gYWRkICh4LCB5KSB7IHJldHVybiAoeCArIHkpIHwgMDsgfVxuICBmdW5jdGlvbiB4eChxLGEsYix4LHMsdCkge1xuICAgIGEgPSBhZGQoYWRkKGEsIHEpLCBhZGQoeCwgdCkpO1xuICAgIHJldHVybiBhZGQoKGEgPDwgcykgfCAoYSA+Pj4gKDMyIC0gcykpLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBmZihhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBoaChhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpOyB9XG4gIGZ1bmN0aW9uIGlpKGEsYixjLGQseCxzLHQpIHsgcmV0dXJuIHh4KGMgXiAoYiB8ICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTsgfVxuXG4gIGZ1bmN0aW9uIG1kNShidWZmZXIsIGxlbmd0aCkge1xuICAgIHZhciBpID0gbGVuZ3RoO1xuICAgIGJ1ZmZlcltpID4+IDJdIHw9IDB4ODAgPDwgKDggKiAoaSAmIDMpKTtcbiAgICBmb3IgKGkgPSAoaSAmIH4weDMpICsgODsoaSAmIDB4M0YpIDwgNjAgO2kgKz0gNClcbiAgICAgIGJ1ZmZlclsoaSA+PiAyKSAtIDFdID0gMDtcbiAgICBidWZmZXJbKGkgPj4gMikgLTFdID0gbGVuZ3RoIDw8IDM7XG4gICAgYnVmZmVyW2kgPj4gMl0gPSAobGVuZ3RoID4+IDI5KSAmIDB4MUZGRkZGRkY7XG5cbiAgICB2YXIgdyA9IFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2XTtcblxuICAgIGZvcihpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICAgIHZhciBhID0gd1swXSwgYiA9IHdbMV0sIGMgPSB3WzJdLCBkID0gd1szXTtcblxuICAgICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyAwXSwgNywgMHhENzZBQTQ3OCk7XG4gICAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyW2krIDFdLCAxMiwgMHhFOEM3Qjc1Nik7XG4gICAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyW2krIDJdLCAxNywgMHgyNDIwNzBEQik7XG4gICAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyW2krIDNdLCAyMiwgMHhDMUJEQ0VFRSk7XG4gICAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyW2krIDRdLCA3LCAweEY1N0MwRkFGKTtcbiAgICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbaSsgNV0sIDEyLCAweDQ3ODdDNjJBKTtcbiAgICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbaSsgNl0sIDE3LCAweEE4MzA0NjEzKTtcbiAgICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbaSsgN10sIDIyLCAweEZENDY5NTAxKTtcbiAgICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbaSsgOF0sIDcsIDB4Njk4MDk4RDgpO1xuICAgICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyA5XSwgMTIsIDB4OEI0NEY3QUYpO1xuICAgICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzEwXSwgMTcsIDB4RkZGRjVCQjEpO1xuICAgICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzExXSwgMjIsIDB4ODk1Q0Q3QkUpO1xuICAgICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKzEyXSwgNywgMHg2QjkwMTEyMik7XG4gICAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyW2krMTNdLCAxMiwgMHhGRDk4NzE5Myk7XG4gICAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyW2krMTRdLCAxNywgMHhBNjc5NDM4RSk7XG4gICAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyW2krMTVdLCAyMiwgMHg0OUI0MDgyMSk7XG5cbiAgICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbaSsgMV0sIDUsIDB4RjYxRTI1NjIpO1xuICAgICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyA2XSwgOSwgMHhDMDQwQjM0MCk7XG4gICAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyW2krMTFdLCAxNCwgMHgyNjVFNUE1MSk7XG4gICAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyW2krIDBdLCAyMCwgMHhFOUI2QzdBQSk7XG4gICAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyW2krIDVdLCA1LCAweEQ2MkYxMDVEKTtcbiAgICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbaSsxMF0sIDksIDB4MDI0NDE0NTMpO1xuICAgICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzE1XSwgMTQsIDB4RDhBMUU2ODEpO1xuICAgICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyA0XSwgMjAsIDB4RTdEM0ZCQzgpO1xuICAgICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA5XSwgNSwgMHgyMUUxQ0RFNik7XG4gICAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyW2krMTRdLCA5LCAweEMzMzcwN0Q2KTtcbiAgICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbaSsgM10sIDE0LCAweEY0RDUwRDg3KTtcbiAgICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbaSsgOF0sIDIwLCAweDQ1NUExNEVEKTtcbiAgICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbaSsxM10sIDUsIDB4QTlFM0U5MDUpO1xuICAgICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyAyXSwgOSwgMHhGQ0VGQTNGOCk7XG4gICAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyW2krIDddLCAxNCwgMHg2NzZGMDJEOSk7XG4gICAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyW2krMTJdLCAyMCwgMHg4RDJBNEM4QSk7XG5cbiAgICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbaSsgNV0sIDQsIDB4RkZGQTM5NDIpO1xuICAgICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyA4XSwgMTEsIDB4ODc3MUY2ODEpO1xuICAgICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzExXSwgMTYsIDB4NkQ5RDYxMjIpO1xuICAgICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzE0XSwgMjMsIDB4RkRFNTM4MEMpO1xuICAgICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyAxXSwgNCwgMHhBNEJFRUE0NCk7XG4gICAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyW2krIDRdLCAxMSwgMHg0QkRFQ0ZBOSk7XG4gICAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyW2krIDddLCAxNiwgMHhGNkJCNEI2MCk7XG4gICAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyW2krMTBdLCAyMywgMHhCRUJGQkM3MCk7XG4gICAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyW2krMTNdLCA0LCAweDI4OUI3RUM2KTtcbiAgICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbaSsgMF0sIDExLCAweEVBQTEyN0ZBKTtcbiAgICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbaSsgM10sIDE2LCAweEQ0RUYzMDg1KTtcbiAgICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbaSsgNl0sIDIzLCAweDA0ODgxRDA1KTtcbiAgICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbaSsgOV0sIDQsIDB4RDlENEQwMzkpO1xuICAgICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKzEyXSwgMTEsIDB4RTZEQjk5RTUpO1xuICAgICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzE1XSwgMTYsIDB4MUZBMjdDRjgpO1xuICAgICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyAyXSwgMjMsIDB4QzRBQzU2NjUpO1xuXG4gICAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyW2krIDBdLCA2LCAweEY0MjkyMjQ0KTtcbiAgICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbaSsgN10sIDEwLCAweDQzMkFGRjk3KTtcbiAgICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbaSsxNF0sIDE1LCAweEFCOTQyM0E3KTtcbiAgICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbaSsgNV0sIDIxLCAweEZDOTNBMDM5KTtcbiAgICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbaSsxMl0sIDYsIDB4NjU1QjU5QzMpO1xuICAgICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyAzXSwgMTAsIDB4OEYwQ0NDOTIpO1xuICAgICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzEwXSwgMTUsIDB4RkZFRkY0N0QpO1xuICAgICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyAxXSwgMjEsIDB4ODU4NDVERDEpO1xuICAgICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA4XSwgNiwgMHg2RkE4N0U0Rik7XG4gICAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyW2krMTVdLCAxMCwgMHhGRTJDRTZFMCk7XG4gICAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyW2krIDZdLCAxNSwgMHhBMzAxNDMxNCk7XG4gICAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyW2krMTNdLCAyMSwgMHg0RTA4MTFBMSk7XG4gICAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyW2krIDRdLCA2LCAweEY3NTM3RTgyKTtcbiAgICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbaSsxMV0sIDEwLCAweEJEM0FGMjM1KTtcbiAgICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbaSsgMl0sIDE1LCAweDJBRDdEMkJCKTtcbiAgICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbaSsgOV0sIDIxLCAweEVCODZEMzkxKTtcblxuICAgICAgd1swXSA9IGFkZChhLCB3WzBdKTtcbiAgICAgIHdbMV0gPSBhZGQoYiwgd1sxXSk7XG4gICAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgICAgd1szXSA9IGFkZChkLCB3WzNdKTtcbiAgICB9XG5cbiAgICB2YXIgdCA9IG5ldyBBcnJheSgxNik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKylcbiAgICAgICAgdFtpICogNCArIGpdID0gKHdbaV0gPj4gKDggKiBqKSkgJiAweEZGO1xuICAgIHJldHVybiB0O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzLCBvZnMsIGxlbikge1xuICAgIC8vIEZJWDogbWF5YmUgd2Ugc2hvdWxkIHBlcmZvcm0gdGhlIGNvbXB1dGF0aW9uIGJ5IGNodW5rIG9mIDY0IGJ5dGVzXG4gICAgLy8gYXMgaW4gaHR0cDovL3d3dy5teWVyc2RhaWx5Lm9yZy9qb3NlcGgvamF2YXNjcmlwdC9tZDUuanNcbiAgICB2YXIgYnVmID0gW107XG4gICAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQocyk7XG4gICAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpe1xuICAgICAgdmFyIGIgPSBjb250ZW50O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrPTQpIHtcbiAgICAgICAgdmFyIGogPSBpICsgb2ZzO1xuICAgICAgICBidWZbaT4+Ml0gPVxuICAgICAgICAgIGIuY2hhckNvZGVBdChqKSB8IChiLmNoYXJDb2RlQXQoaisxKSA8PCA4KSB8XG4gICAgICAgICAgKGIuY2hhckNvZGVBdChqKzIpIDw8IDE2KSB8IChiLmNoYXJDb2RlQXQoaiszKSA8PCAyNCk7XG4gICAgICB9XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBidWZbaT4+Ml0gfD0gYi5jaGFyQ29kZUF0KGkgKyBvZnMpIDw8ICg4ICogKGkgJiAzKSk7XG4gICAgfSBlbHNlIHsgLyogQVJSQVkgKi9cbiAgICAgIHZhciBhID0gY29udGVudDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKz00KSB7XG4gICAgICAgIHZhciBqID0gaSArIG9mcztcbiAgICAgICAgYnVmW2k+PjJdID0gYVtqXSB8IChhW2orMV0gPDwgOCkgfCAoYVtqKzJdIDw8IDE2KSB8IChhW2orM10gPDwgMjQpO1xuICAgICAgfVxuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykgYnVmW2k+PjJdIHw9IGFbaSArIG9mc10gPDwgKDggKiAoaSAmIDMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KG1kNShidWYsIGxlbikpO1xuICB9XG59ICgpO1xuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDIwIC0gSHVnbyBIZXV6YXJkXG4vLyBDb3B5cmlnaHQgKEMpIDIwMjAgLSBTaGFjaGFyIEl0emhha3lcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9ibG9iLzQuMDcvb3RoZXJsaWJzL3N0ci9zdHJzdHVicy5jXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanNjb3EvanNjb3EvYmxvYi92OC4xMS9jb3EtanMvanNfc3R1Yi9zdHIuanNcblxuLy9Qcm92aWRlczogcmVfbWF0Y2hcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2dldFxuXG52YXIgcmVfbWF0Y2ggPSBmdW5jdGlvbigpe1xuICB2YXIgcmVfd29yZF9sZXR0ZXJzID0gW1xuICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgIC8qIDB4MDAtMHgxRjogbm9uZSAqL1xuICAgIDB4MDAsIDB4MDAsIDB4RkYsIDB4MDMsICAgICAgIC8qIDB4MjAtMHgzRjogZGlnaXRzIDAtOSAqL1xuICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4ODcsICAgICAgIC8qIDB4NDAtMHg1RjogQSB0byBaLCBfICovXG4gICAgMHhGRSwgMHhGRiwgMHhGRiwgMHgwNywgICAgICAgLyogMHg2MC0weDdGOiBhIHRvIHogKi9cbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAvKiAweDgwLTB4OUY6IG5vbmUgKi9cbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAvKiAweEEwLTB4QkY6IG5vbmUgKi9cbiAgICAweEZGLCAweEZGLCAweDdGLCAweEZGLCAgICAgICAvKiAweEMwLTB4REY6IExhdGluLTEgYWNjZW50ZWQgdXBwZXJjYXNlICovXG4gICAgMHhGRiwgMHhGRiwgMHg3RiwgMHhGRiAgICAgICAgLyogMHhFMC0weEZGOiBMYXRpbi0xIGFjY2VudGVkIGxvd2VyY2FzZSAqL1xuICBdO1xuXG4gIHZhciBvcGNvZGVzID0ge1xuICAgIENIQVI6IDAsIENIQVJOT1JNOiAxLCBTVFJJTkc6IDIsIFNUUklOR05PUk06IDMsIENIQVJDTEFTUzogNCxcbiAgICBCT0w6IDUsIEVPTDogNiwgV09SREJPVU5EQVJZOiA3LFxuICAgIEJFR0dST1VQOiA4LCBFTkRHUk9VUDogOSwgUkVGR1JPVVA6IDEwLFxuICAgIEFDQ0VQVDogMTEsXG4gICAgU0lNUExFT1BUOiAxMiwgU0lNUExFU1RBUjogMTMsIFNJTVBMRVBMVVM6IDE0LFxuICAgIEdPVE86IDE1LCBQVVNIQkFDSzogMTYsIFNFVE1BUks6IDE3LFxuICAgIENIRUNLUFJPR1JFU1M6IDE4XG4gIH07XG5cbiAgZnVuY3Rpb24gaXNfd29yZF9sZXR0ZXIoYykge1xuICAgIHJldHVybiAocmVfd29yZF9sZXR0ZXJzWyAgKGMgPj4gMyldID4+IChjICYgNykpICYgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluX2JpdHNldChzLGkpIHtcbiAgICByZXR1cm4gKGNhbWxfc3RyaW5nX2dldChzLChpID4+IDMpKSA+PiAoaSAmIDcpKSAmIDE7XG4gIH1cblxuICBmdW5jdGlvbiByZV9tYXRjaF9pbXBsKHJlLCBzLCBwb3MsIHBhcnRpYWwpIHtcblxuICAgIHZhciBwcm9nICAgICAgICAgID0gY2FtbF9qc19mcm9tX2FycmF5KHJlWzFdKSxcbiAgICAgICAgY3Bvb2wgICAgICAgICA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsyXSksXG4gICAgICAgIG5vcm10YWJsZSAgICAgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHJlWzNdKSxcbiAgICAgICAgbnVtZ3JvdXBzICAgICA9IHJlWzRdIHwgMCxcbiAgICAgICAgbnVtcmVnaXN0ZXJzICA9IHJlWzVdIHwgMCxcbiAgICAgICAgc3RhcnRjaGFycyAgICA9IHJlWzZdIHwgMDtcblxuICAgIHZhciBzID0gY2FtbF9hcnJheV9vZl9zdHJpbmcocyk7XG5cbiAgICB2YXIgcGMgPSAwLFxuICAgICAgICBxdWl0ID0gZmFsc2UsXG4gICAgICAgIHN0YWNrID0gW10sXG4gICAgICAgIGdyb3VwcyA9IG5ldyBBcnJheShudW1ncm91cHMpLFxuICAgICAgICByZV9yZWdpc3RlciA9IG5ldyBBcnJheShudW1yZWdpc3RlcnMpO1xuXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKyl7XG4gICAgICBncm91cHNbaV0gPSB7c3RhcnQ6IC0xLCBlbmQ6LTF9XG4gICAgfVxuICAgIGdyb3Vwc1swXS5zdGFydCA9IHBvcztcblxuICAgIHZhciBiYWNrdHJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIHZhciBpdGVtID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGlmIChpdGVtLnVuZG8pIHtcbiAgICAgICAgICBpdGVtLnVuZG8ub2JqW2l0ZW0udW5kby5wcm9wXSA9IGl0ZW0udW5kby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGl0ZW0ucG9zKSB7XG4gICAgICAgICAgcGMgPSBpdGVtLnBvcy5wYztcbiAgICAgICAgICBwb3MgPSBpdGVtLnBvcy50eHQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWl0ID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIHB1c2ggPSBmdW5jdGlvbihpdGVtKSB7IHN0YWNrLnB1c2goaXRlbSk7IH07XG5cbiAgICB2YXIgYWNjZXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ3JvdXBzWzBdLmVuZCA9IHBvcztcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoMSArIGdyb3Vwcy5sZW5ndGgqMik7XG4gICAgICByZXN1bHRbMF0gPSAwOyAvLyB0YWdcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZyA9IGdyb3Vwc1tpXTtcbiAgICAgICAgaWYoZy5zdGFydCA8IDAgfHwgZy5lbmQgPCAwKSB7XG4gICAgICAgICAgZy5zdGFydCA9IGcuZW5kID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WzIqaSArIDEgXSA9IGcuc3RhcnQ7XG4gICAgICAgIHJlc3VsdFsyKmkgKyAxICsgMSBdID0gZy5lbmQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH07XG5cbiAgICB2YXIgcHJlZml4X21hdGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYocGFydGlhbCkgcmV0dXJuIGFjY2VwdCAoKTtcbiAgICAgIGVsc2UgYmFja3RyYWNrICgpO1xuICAgIH1cblxuICAgIC8qIE1haW4gREZBIGludGVycHJldGVyIGxvb3AgKi9cbiAgICB3aGlsZSAoIXF1aXQpIHtcbiAgICAgIHZhciBvcCA9IHByb2dbcGNdICYgMHhmZixcbiAgICAgICAgICBzYXJnID0gcHJvZ1twY10gPj4gOCxcbiAgICAgICAgICB1YXJnID0gc2FyZyAmIDB4ZmYsXG4gICAgICAgICAgYyA9IHNbcG9zXSxcbiAgICAgICAgICBncm91cDtcblxuICAgICAgcGMrKztcblxuICAgICAgc3dpdGNoIChvcCkge1xuICAgICAgY2FzZSBvcGNvZGVzLkNIQVI6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGMgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSTk9STTpcbiAgICAgICAgaWYocG9zID09PSBzLmxlbmd0aCkge3ByZWZpeF9tYXRjaCAoKTsgYnJlYWt9O1xuICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5TVFJJTkc6XG4gICAgICAgIGZvciAodmFyIGFyZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoY3Bvb2xbdWFyZ10pLCBpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgICBpZiAoYyA9PT0gYXJnLmNoYXJDb2RlQXQoaSkpXG4gICAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgICAgZWxzZSB7IGJhY2t0cmFjaygpOyBicmVhazsgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNUUklOR05PUk06XG4gICAgICAgIGZvciAodmFyIGFyZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoY3Bvb2xbdWFyZ10pLCBpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IGFyZy5jaGFyQ29kZUF0KGkpKVxuICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIGVsc2UgeyBiYWNrdHJhY2soKTsgYnJlYWs7IH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSQ0xBU1M6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5CT0w6XG4gICAgICAgIGlmKHBvcyA+IDAgJiYgc1twb3MgLSAxXSAhPSAxMCAvKiBcXG4gKi8pIHtiYWNrdHJhY2soKX1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuRU9MOlxuICAgICAgICBpZihwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT0gMTAgLyogXFxuICovKSB7YmFja3RyYWNrKCl9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLldPUkRCT1VOREFSWTpcbiAgICAgICAgaWYocG9zID09IDApIHtcbiAgICAgICAgICBpZihwb3MgPT09IHMubGVuZ3RoKSB7cHJlZml4X21hdGNoICgpOyBicmVha307XG4gICAgICAgICAgaWYoaXNfd29yZF9sZXR0ZXIoc1swXSkpIGJyZWFrO1xuICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICBpZihpc193b3JkX2xldHRlcihzW3BvcyAtIDFdKSkgYnJlYWs7XG4gICAgICAgICAgYmFja3RyYWNrICgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmKGlzX3dvcmRfbGV0dGVyKHNbcG9zIC0gMV0pICE9IGlzX3dvcmRfbGV0dGVyKHNbcG9zXSkpIGJyZWFrO1xuICAgICAgICAgIGJhY2t0cmFjayAoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5CRUdHUk9VUDpcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgIHB1c2goe3VuZG86IHtvYmo6Z3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICBwcm9wOidzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZ3JvdXAuc3RhcnR9fSk7XG4gICAgICAgIGdyb3VwLnN0YXJ0ID0gcG9zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5FTkRHUk9VUDpcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgIHB1c2goe3VuZG86IHtvYmo6IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgcHJvcDonZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBncm91cC5lbmR9fSk7XG4gICAgICAgIGdyb3VwLmVuZCA9IHBvcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuUkVGR1JPVVA6XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICBpZihncm91cC5zdGFydCA8IDAgfHwgZ3JvdXAuZW5kIDwgMCkge2JhY2t0cmFjayAoKTsgYnJlYWt9XG4gICAgICAgIGZvciAodmFyIGkgPSBncm91cC5zdGFydDsgaSA8IGdyb3VwLmVuZDsgaSsrKXtcbiAgICAgICAgICBpZihwb3MgPT09IHMubGVuZ3RoKSB7cHJlZml4X21hdGNoICgpOyBicmVha307XG4gICAgICAgICAgaWYoc1tpXSAhPSBzW3Bvc10pIHtiYWNrdHJhY2sgKCk7IGJyZWFrfVxuICAgICAgICAgIHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNJTVBMRU9QVDpcbiAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVTVEFSOlxuICAgICAgICB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSlcbiAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNJTVBMRVBMVVM6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgICAgfSB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBiYWNrdHJhY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuQUNDRVBUOlxuICAgICAgICByZXR1cm4gYWNjZXB0KCk7XG4gICAgICBjYXNlIG9wY29kZXMuR09UTzpcbiAgICAgICAgcGMgPSBwYyArIHNhcmc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlBVU0hCQUNLOlxuICAgICAgICBwdXNoKHtwb3M6IHtwYzogcGMgKyBzYXJnLCB0eHQ6IHBvc319KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuU0VUTUFSSzpcbiAgICAgICAgcHVzaCh7dW5kbzoge29iajpyZV9yZWdpc3RlcixcbiAgICAgICAgICAgICAgICAgICAgIHByb3A6IHVhcmcsXG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVfcmVnaXN0ZXJbdWFyZ119fSk7XG4gICAgICAgIHJlX3JlZ2lzdGVyW3VhcmddID0gcG9zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEVDS1BST0dSRVNTOlxuICAgICAgICBpZiAocmVfcmVnaXN0ZXJbdWFyZ10gPT09IHBvcykgYmFja3RyYWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBieXRlY29kZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gcmVfbWF0Y2hfaW1wbDtcbn0oKTtcblxuXG4vL1Byb3ZpZGVzOiByZV9zZWFyY2hfZm9yd2FyZFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zZWFyY2hfZm9yd2FyZChyZSwgcywgcG9zKSB7XG4gIGlmKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfZm9yd2FyZFwiKVxuICB3aGlsZSAocG9zIDw9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkge1xuICAgIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgIHBvcysrO1xuICB9XG5cbiAgcmV0dXJuIFswXTsgIC8qIFt8fF0gOiBpbnQgYXJyYXkgKi9cbn1cblxuLy9Qcm92aWRlczogcmVfc2VhcmNoX2JhY2t3YXJkXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIHJlX3NlYXJjaF9iYWNrd2FyZChyZSwgcywgcG9zKSB7XG4gIGlmKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfYmFja3dhcmRcIilcbiAgd2hpbGUgKHBvcyA+PSAwKSB7XG4gICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgcG9zLS07XG4gIH1cblxuICByZXR1cm4gWzBdOyAgLyogW3x8XSA6IGludCBhcnJheSAqL1xufVxuXG5cbi8vUHJvdmlkZXM6IHJlX3N0cmluZ19tYXRjaFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zdHJpbmdfbWF0Y2gocmUscyxwb3Mpe1xuICBpZihwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIuc3RyaW5nX21hdGNoXCIpXG4gIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgZWxzZSByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiByZV9wYXJ0aWFsX21hdGNoXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIHJlX3BhcnRpYWxfbWF0Y2gocmUscyxwb3Mpe1xuICBpZihwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIucGFydGlhbF9tYXRjaFwiKVxuICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMSk7XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIGVsc2UgcmV0dXJuIFswXTtcbn1cblxuLy9Qcm92aWRlczogcmVfcmVwbGFjZW1lbnRfdGV4dFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9hcnJheV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vIGV4dGVybmFsIHJlX3JlcGxhY2VtZW50X3RleHQ6IHN0cmluZyAtPiBpbnQgYXJyYXkgLT4gc3RyaW5nIC0+IHN0cmluZ1xuZnVuY3Rpb24gcmVfcmVwbGFjZW1lbnRfdGV4dChyZXBsLGdyb3VwcyxvcmlnKSB7XG4gIHZhciByZXBsID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhyZXBsKTtcbiAgdmFyIGxlbiA9IHJlcGwubGVuZ3RoO1xuICB2YXIgb3JpZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob3JpZyk7XG4gIHZhciByZXMgPSBcIlwiOyAvL3Jlc3VsdFxuICB2YXIgbiA9IDA7IC8vIGN1cnJlbnQgcG9zaXRpb25cbiAgdmFyIGN1cjsgLy9jdXJyZW50IGNoYXJcbiAgdmFyIHN0YXJ0LCBlbmQsIGM7XG4gIHdoaWxlKG4gPCBsZW4pe1xuICAgIGN1ciA9IHJlcGwuY2hhckF0KG4rKyk7XG4gICAgaWYoY3VyICE9ICdcXFxcJyl7XG4gICAgICByZXMgKz0gY3VyO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKG4gPT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiU3RyLnJlcGxhY2U6IGlsbGVnYWwgYmFja3NsYXNoIHNlcXVlbmNlXCIpO1xuICAgICAgY3VyID0gcmVwbC5jaGFyQXQobisrKTtcbiAgICAgIHN3aXRjaChjdXIpe1xuICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgIHJlcyArPSBjdXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOlxuICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgICBjID0gK2N1cjtcbiAgICAgICAgaWYgKGMqMiA+PSBncm91cHMubGVuZ3RoIC0gMSApXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIgKTtcbiAgICAgICAgc3RhcnQgPSBjYW1sX2FycmF5X2dldChncm91cHMsYyoyKTtcbiAgICAgICAgZW5kID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjKjIgKzEpO1xuICAgICAgICBpZiAoc3RhcnQgPT0gLTEpXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIpO1xuICAgICAgICByZXMrPW9yaWcuc2xpY2Uoc3RhcnQsZW5kKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXMgKz0gKCdcXFxcJyAgKyBjdXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhyZXMpOyB9XG4iLCIvL1RoZSBmb2xsb3dpbmcgYXJlIGRlZmluZWQgaW4gQ3N0cnVjdFxuLy9UaGVyZSBhcmUganVzdCBwcm92aWRlZCBoZXJlIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnNcblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2JpZ3N0cmluZ190b19iaWdzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vV2Vha2RlZlxudmFyIGNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fYmlnc3RyaW5nID0gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYVxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2JpZ3N0cmluZ190b19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vV2Vha2RlZlxudmFyIGNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fc3RyaW5nID0gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlc1xuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ190b19iaWdzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhXG4vL1dlYWtkZWZcbnZhciBjYW1sX2JsaXRfc3RyaW5nX3RvX2JpZ3N0cmluZyA9IGNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERhbmllbCBDLiBCdWVuemxpICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcblxubGV0IGVycl9ub19wcmVkID0gXCJVKzAwMDAgaGFzIG5vIHByZWRlY2Vzc29yXCJcbmxldCBlcnJfbm9fc3VjYyA9IFwiVSsxMEZGRkYgaGFzIG5vIHN1Y2Nlc3NvclwiXG5sZXQgZXJyX25vdF9zdiBpID0gZm9ybWF0X2ludCBcIiVYXCIgaSBeIFwiIGlzIG5vdCBhbiBVbmljb2RlIHNjYWxhciB2YWx1ZVwiXG5sZXQgZXJyX25vdF9sYXRpbjEgdSA9IFwiVStcIiBeIGZvcm1hdF9pbnQgXCIlMDRYXCIgdSBeIFwiIGlzIG5vdCBhIGxhdGluMSBjaGFyYWN0ZXJcIlxuXG50eXBlIHQgPSBpbnRcblxubGV0IG1pbiA9IDB4MDAwMFxubGV0IG1heCA9IDB4MTBGRkZGXG5sZXQgbG9fYm91bmQgPSAweEQ3RkZcbmxldCBoaV9ib3VuZCA9IDB4RTAwMFxuXG5sZXQgYm9tID0gMHhGRUZGXG5sZXQgcmVwID0gMHhGRkZEXG5cbmxldCBzdWNjIHUgPVxuICBpZiB1ID0gbG9fYm91bmQgdGhlbiBoaV9ib3VuZCBlbHNlXG4gIGlmIHUgPSBtYXggdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fc3VjYyBlbHNlXG4gIHUgKyAxXG5cbmxldCBwcmVkIHUgPVxuICBpZiB1ID0gaGlfYm91bmQgdGhlbiBsb19ib3VuZCBlbHNlXG4gIGlmIHUgPSBtaW4gdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fcHJlZCBlbHNlXG4gIHUgLSAxXG5cbmxldCBpc192YWxpZCBpID0gKG1pbiA8PSBpICYmIGkgPD0gbG9fYm91bmQpIHx8IChoaV9ib3VuZCA8PSBpICYmIGkgPD0gbWF4KVxubGV0IG9mX2ludCBpID0gaWYgaXNfdmFsaWQgaSB0aGVuIGkgZWxzZSBpbnZhbGlkX2FyZyAoZXJyX25vdF9zdiBpKVxuZXh0ZXJuYWwgdW5zYWZlX29mX2ludCA6IGludCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdG9faW50IDogdCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19jaGFyIHUgPSB1IDwgMjU2XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCB0b19jaGFyIHUgPVxuICBpZiB1ID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgKGVycl9ub3RfbGF0aW4xIHUpIGVsc2VcbiAgQ2hhci51bnNhZmVfY2hyIHVcblxubGV0IHVuc2FmZV90b19jaGFyID0gQ2hhci51bnNhZmVfY2hyXG5cbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBoYXNoID0gdG9faW50XG5cbigqIFVURiBjb2RlY3MgdG9vbHMgKilcblxudHlwZSB1dGZfZGVjb2RlID0gaW50XG4oKiBUaGlzIGlzIGFuIGludCBbMHhEVVVVVVVVXSBkZWNvbXBvc2VkIGFzIGZvbGxvd3M6XG4gICAtIFtEXSBpcyBmb3VyIGJpdHMgZm9yIGRlY29kZSBpbmZvcm1hdGlvbiwgdGhlIGhpZ2hlc3QgYml0IGlzIHNldCBpZiB0aGVcbiAgICAgZGVjb2RlIGlzIHZhbGlkLiBUaGUgdGhyZWUgbG93ZXIgYml0cyBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG4gICAgIGZyb20gdGhlIHNvdXJjZSB0aGF0IHdlcmUgY29uc3VtZWQgYnkgdGhlIGRlY29kZS5cbiAgIC0gW1VVVVVVVV0gaXMgdGhlIGRlY29kZWQgVW5pY29kZSBjaGFyYWN0ZXIgb3IgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnRcbiAgICAgY2hhcmFjdGVyIFUrRkZGRCBpZiBmb3IgaW52YWxpZCBkZWNvZGVzLiAqKVxuXG5sZXQgdmFsaWRfYml0ID0gMjdcbmxldCBkZWNvZGVfYml0cyA9IDI0XG5cbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2lzX3ZhbGlkIGQgPSAoZCBsc3IgdmFsaWRfYml0KSA9IDFcbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2xlbmd0aCBkID0gKGQgbHNyIGRlY29kZV9iaXRzKSBsYW5kIDBiMTExXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV91Y2hhciBkID0gdW5zYWZlX29mX2ludCAoZCBsYW5kIDB4RkZGRkZGKVxubGV0W0BpbmxpbmVdIHV0Zl9kZWNvZGUgbiB1ID0gKCg4IGxvciBuKSBsc2wgZGVjb2RlX2JpdHMpIGxvciAodG9faW50IHUpXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV9pbnZhbGlkIG4gPSAobiBsc2wgZGVjb2RlX2JpdHMpIGxvciByZXBcblxubGV0IHV0Zl84X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+IDFcbnwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDNcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgdXRmXzE2X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0ludDY0XTogNjQtYml0IGludGVnZXJzICopXG5cbmV4dGVybmFsIG5lZyA6IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfbmVnXCJcbmV4dGVybmFsIGFkZCA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfYWRkXCJcbmV4dGVybmFsIHN1YiA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfc3ViXCJcbmV4dGVybmFsIG11bCA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfbXVsXCJcbmV4dGVybmFsIGRpdiA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfZGl2XCJcbmV4dGVybmFsIHJlbSA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfbW9kXCJcbmV4dGVybmFsIGxvZ2FuZCA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfYW5kXCJcbmV4dGVybmFsIGxvZ29yIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9vclwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X3hvclwiXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0IDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfYXNyXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQ2NCAtPiBpbnQgLT4gaW50NjQgPSBcIiVpbnQ2NF9sc3JcIlxuZXh0ZXJuYWwgb2ZfaW50IDogaW50IC0+IGludDY0ID0gXCIlaW50NjRfb2ZfaW50XCJcbmV4dGVybmFsIHRvX2ludCA6IGludDY0IC0+IGludCA9IFwiJWludDY0X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X29mX2Zsb2F0XCIgXCJjYW1sX2ludDY0X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF90b19mbG9hdFwiIFwiY2FtbF9pbnQ2NF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyIDogaW50MzIgLT4gaW50NjQgPSBcIiVpbnQ2NF9vZl9pbnQzMlwiXG5leHRlcm5hbCB0b19pbnQzMiA6IGludDY0IC0+IGludDMyID0gXCIlaW50NjRfdG9faW50MzJcIlxuZXh0ZXJuYWwgb2ZfbmF0aXZlaW50IDogbmF0aXZlaW50IC0+IGludDY0ID0gXCIlaW50NjRfb2ZfbmF0aXZlaW50XCJcbmV4dGVybmFsIHRvX25hdGl2ZWludCA6IGludDY0IC0+IG5hdGl2ZWludCA9IFwiJWludDY0X3RvX25hdGl2ZWludFwiXG5cbmxldCB6ZXJvID0gMExcbmxldCBvbmUgPSAxTFxubGV0IG1pbnVzX29uZSA9IC0xTFxubGV0IHN1Y2MgbiA9IGFkZCBuIDFMXG5sZXQgcHJlZCBuID0gc3ViIG4gMUxcbmxldCBhYnMgbiA9IGlmIG4gPj0gMEwgdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBtaW5faW50ID0gMHg4MDAwMDAwMDAwMDAwMDAwTFxubGV0IG1heF9pbnQgPSAweDdGRkZGRkZGRkZGRkZGRkZMXG5sZXQgbG9nbm90IG4gPSBsb2d4b3IgbiAoLTFMKVxuXG5sZXQgdW5zaWduZWRfdG9faW50ID1cbiAgbGV0IG1heF9pbnQgPSBvZl9pbnQgU3RkbGliLm1heF9pbnQgaW5cbiAgZnVuIG4gLT5cbiAgICBpZiBjb21wYXJlIHplcm8gbiA8PSAwICYmIGNvbXBhcmUgbiBtYXhfaW50IDw9IDAgdGhlblxuICAgICAgU29tZSAodG9faW50IG4pXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5leHRlcm5hbCBmb3JtYXQgOiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0ID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cbmxldCBvZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBleHBvc2UgYSBub24tcmFpc2luZyBwcmltaXRpdmUgZGlyZWN0bHkuICopXG4gIHRyeSBTb21lIChvZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5cblxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50NjRfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbnR5cGUgdCA9IGludDY0XG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuKCogVW5zaWduZWQgZGl2aXNpb24gZnJvbSBzaWduZWQgZGl2aXNpb24gb2YgdGhlIHNhbWVcbiAgIGJpdG5lc3MuIFNlZSBXYXJyZW4gSnIuLCBIZW5yeSBTLiAoMjAxMykuIEhhY2tlcidzIERlbGlnaHQgKDIgZWQuKSwgU2VjIDktMy5cbiopXG5sZXQgdW5zaWduZWRfZGl2IG4gZCA9XG4gIGlmIGQgPCB6ZXJvIHRoZW5cbiAgICBpZiB1bnNpZ25lZF9jb21wYXJlIG4gZCA8IDAgdGhlbiB6ZXJvIGVsc2Ugb25lXG4gIGVsc2VcbiAgICBsZXQgcSA9IHNoaWZ0X2xlZnQgKGRpdiAoc2hpZnRfcmlnaHRfbG9naWNhbCBuIDEpIGQpIDEgaW5cbiAgICBsZXQgciA9IHN1YiBuIChtdWwgcSBkKSBpblxuICAgIGlmIHVuc2lnbmVkX2NvbXBhcmUgciBkID49IDAgdGhlbiBzdWNjIHEgZWxzZSBxXG5cbmxldCB1bnNpZ25lZF9yZW0gbiBkID1cbiAgc3ViIG4gKG11bCAodW5zaWduZWRfZGl2IG4gZCkgZClcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogVGhlIHJ1bi10aW1lIGxpYnJhcnkgZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleCAqKVxuXG50eXBlIHBvc2l0aW9uID0ge1xuICBwb3NfZm5hbWUgOiBzdHJpbmc7XG4gIHBvc19sbnVtIDogaW50O1xuICBwb3NfYm9sIDogaW50O1xuICBwb3NfY251bSA6IGludDtcbn1cblxubGV0IGR1bW15X3BvcyA9IHtcbiAgcG9zX2ZuYW1lID0gXCJcIjtcbiAgcG9zX2xudW0gPSAwO1xuICBwb3NfYm9sID0gMDtcbiAgcG9zX2NudW0gPSAtMTtcbn1cblxudHlwZSBsZXhidWYgPVxuICB7IHJlZmlsbF9idWZmIDogbGV4YnVmIC0+IHVuaXQ7XG4gICAgbXV0YWJsZSBsZXhfYnVmZmVyIDogYnl0ZXM7XG4gICAgbXV0YWJsZSBsZXhfYnVmZmVyX2xlbiA6IGludDtcbiAgICBtdXRhYmxlIGxleF9hYnNfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X3N0YXJ0X3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9jdXJyX3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9sYXN0X3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9sYXN0X2FjdGlvbiA6IGludDtcbiAgICBtdXRhYmxlIGxleF9lb2ZfcmVhY2hlZCA6IGJvb2w7XG4gICAgbXV0YWJsZSBsZXhfbWVtIDogaW50IGFycmF5O1xuICAgIG11dGFibGUgbGV4X3N0YXJ0X3AgOiBwb3NpdGlvbjtcbiAgICBtdXRhYmxlIGxleF9jdXJyX3AgOiBwb3NpdGlvbjtcbiAgfVxuXG50eXBlIGxleF90YWJsZXMgPVxuICB7IGxleF9iYXNlOiBzdHJpbmc7XG4gICAgbGV4X2JhY2t0cms6IHN0cmluZztcbiAgICBsZXhfZGVmYXVsdDogc3RyaW5nO1xuICAgIGxleF90cmFuczogc3RyaW5nO1xuICAgIGxleF9jaGVjazogc3RyaW5nO1xuICAgIGxleF9iYXNlX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2JhY2t0cmtfY29kZSA6IHN0cmluZztcbiAgICBsZXhfZGVmYXVsdF9jb2RlIDogc3RyaW5nO1xuICAgIGxleF90cmFuc19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9jaGVja19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9jb2RlOiBzdHJpbmc7fVxuXG5leHRlcm5hbCBjX2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnQgPSBcImNhbWxfbGV4X2VuZ2luZVwiXG5leHRlcm5hbCBjX25ld19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbmV3X2xleF9lbmdpbmVcIlxuXG5sZXQgZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5cbmxldCBuZXdfZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICBsZXQgcmVzdWx0ID0gY19uZXdfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgaWYgcmVzdWx0ID49IDAgJiYgYnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zIHRoZW4gYmVnaW5cbiAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgZW5kO1xuICByZXN1bHRcblxubGV0IGxleF9yZWZpbGwgcmVhZF9mdW4gYXV4X2J1ZmZlciBsZXhidWYgPVxuICBsZXQgcmVhZCA9XG4gICAgcmVhZF9mdW4gYXV4X2J1ZmZlciAoQnl0ZXMubGVuZ3RoIGF1eF9idWZmZXIpIGluXG4gIGxldCBuID1cbiAgICBpZiByZWFkID4gMFxuICAgIHRoZW4gcmVhZFxuICAgIGVsc2UgKGxleGJ1Zi5sZXhfZW9mX3JlYWNoZWQgPC0gdHJ1ZTsgMCkgaW5cbiAgKCogQ3VycmVudCBzdGF0ZSBvZiB0aGUgYnVmZmVyOlxuICAgICAgICA8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0+XG4gICAgICAgIHwgIGp1bmsgfCAgICAgIHZhbGlkIGRhdGEgICAgIHwgICBqdW5rICAgIHxcbiAgICAgICAgXiAgICAgICBeICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXlxuICAgICAgICAwICAgIHN0YXJ0X3BvcyAgICAgICAgICAgICBidWZmZXJfZW5kICAgIEJ5dGVzLmxlbmd0aCBidWZmZXJcbiAgKilcbiAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuICsgbiA+IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlciB0aGVuIGJlZ2luXG4gICAgKCogVGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKilcbiAgICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcyArIG5cbiAgICAgICA8PSBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXJcbiAgICB0aGVuIGJlZ2luXG4gICAgICAoKiBCdXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGlmIHdlIHJlY2xhaW0gdGhlIGp1bmsgYXQgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgb2YgdGhlIGJ1ZmZlciAqKVxuICAgICAgQnl0ZXMuYmxpdCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3Bvc1xuICAgICAgICAgICAgICAgICAgbGV4YnVmLmxleF9idWZmZXIgMFxuICAgICAgICAgICAgICAgICAgKGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zKVxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAoKiBXZSBtdXN0IGdyb3cgdGhlIGJ1ZmZlci4gIERvdWJsaW5nIGl0cyBzaXplIHdpbGwgcHJvdmlkZSBlbm91Z2hcbiAgICAgICAgIHNwYWNlIHNpbmNlIG4gPD0gU3RyaW5nLmxlbmd0aCBhdXhfYnVmZmVyIDw9IFN0cmluZy5sZW5ndGggYnVmZmVyLlxuICAgICAgICAgV2F0Y2ggb3V0IGZvciBzdHJpbmcgbGVuZ3RoIG92ZXJmbG93LCB0aG91Z2guICopXG4gICAgICBsZXQgbmV3bGVuID1cbiAgICAgICAgSW50Lm1pbiAoMiAqIEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlcikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcyArIG4gPiBuZXdsZW5cbiAgICAgIHRoZW4gZmFpbHdpdGggXCJMZXhpbmcubGV4X3JlZmlsbDogY2Fubm90IGdyb3cgYnVmZmVyXCI7XG4gICAgICBsZXQgbmV3YnVmID0gQnl0ZXMuY3JlYXRlIG5ld2xlbiBpblxuICAgICAgKCogQ29weSB0aGUgdmFsaWQgZGF0YSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBuZXdidWYgMFxuICAgICAgICAgICAgICAgICAgKGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zKTtcbiAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDwtIG5ld2J1ZlxuICAgIGVuZDtcbiAgICAoKiBSZWFsbG9jYXRpb24gb3Igbm90LCB3ZSBoYXZlIHNoaWZ0ZWQgdGhlIGRhdGEgbGVmdCBieVxuICAgICAgIHN0YXJ0X3BvcyBjaGFyYWN0ZXJzOyB1cGRhdGUgdGhlIHBvc2l0aW9ucyAqKVxuICAgIGxldCBzID0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgICBsZXhidWYubGV4X2Fic19wb3MgPC0gbGV4YnVmLmxleF9hYnNfcG9zICsgcztcbiAgICBsZXhidWYubGV4X2N1cnJfcG9zIDwtIGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIDwtIDA7XG4gICAgbGV4YnVmLmxleF9sYXN0X3BvcyA8LSBsZXhidWYubGV4X2xhc3RfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gcyA7XG4gICAgbGV0IHQgPSBsZXhidWYubGV4X21lbSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggdC0xIGRvXG4gICAgICBsZXQgdiA9IHQuKGkpIGluXG4gICAgICBpZiB2ID49IDAgdGhlblxuICAgICAgICB0LihpKSA8LSB2LXNcbiAgICBkb25lXG4gIGVuZDtcbiAgKCogVGhlcmUgaXMgbm93IGVub3VnaCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKilcbiAgQnl0ZXMuYmxpdCBhdXhfYnVmZmVyIDAgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9idWZmZXJfbGVuIG47XG4gIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuXG5cbmxldCB6ZXJvX3BvcyA9IHtcbiAgcG9zX2ZuYW1lID0gXCJcIjtcbiAgcG9zX2xudW0gPSAxO1xuICBwb3NfYm9sID0gMDtcbiAgcG9zX2NudW0gPSAwO1xufVxuXG5sZXQgZnJvbV9mdW5jdGlvbiA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgZiA9XG4gIHsgcmVmaWxsX2J1ZmYgPSBsZXhfcmVmaWxsIGYgKEJ5dGVzLmNyZWF0ZSA1MTIpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5jcmVhdGUgMTAyNDtcbiAgICBsZXhfYnVmZmVyX2xlbiA9IDA7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IGZhbHNlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgZnJvbV9jaGFubmVsID93aXRoX3Bvc2l0aW9ucyBpYyA9XG4gIGZyb21fZnVuY3Rpb24gP3dpdGhfcG9zaXRpb25zIChmdW4gYnVmIG4gLT4gaW5wdXQgaWMgYnVmIDAgbilcblxubGV0IGZyb21fc3RyaW5nID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBzID1cbiAgeyByZWZpbGxfYnVmZiA9IChmdW4gbGV4YnVmIC0+IGxleGJ1Zi5sZXhfZW9mX3JlYWNoZWQgPC0gdHJ1ZSk7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLm9mX3N0cmluZyBzOyAoKiBoYXZlIHRvIG1ha2UgYSBjb3B5IGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHVuc2FmZS1zdHJpbmcgbW9kZSAqKVxuICAgIGxleF9idWZmZXJfbGVuID0gU3RyaW5nLmxlbmd0aCBzO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSB0cnVlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgc2V0X3Bvc2l0aW9uIGxleGJ1ZiBwb3NpdGlvbiA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wICA8LSB7cG9zaXRpb24gd2l0aCBwb3NfZm5hbWUgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfZm5hbWV9O1xuICBsZXhidWYubGV4X2Fic19wb3MgPC0gcG9zaXRpb24ucG9zX2NudW1cblxubGV0IHNldF9maWxlbmFtZSBsZXhidWYgZm5hbWUgPVxuICBsZXhidWYubGV4X2N1cnJfcCA8LSB7bGV4YnVmLmxleF9jdXJyX3Agd2l0aCBwb3NfZm5hbWUgPSBmbmFtZX1cblxubGV0IHdpdGhfcG9zaXRpb25zIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3Bvc1xuXG5sZXQgbGV4ZW1lIGxleGJ1ZiA9XG4gIGxldCBsZW4gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3BvcyBsZW5cblxubGV0IHN1Yl9sZXhlbWUgbGV4YnVmIGkxIGkyID1cbiAgbGV0IGxlbiA9IGkyLWkxIGluXG4gIEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuXG5cbmxldCBzdWJfbGV4ZW1lX29wdCBsZXhidWYgaTEgaTIgPVxuICBpZiBpMSA+PSAwIHRoZW4gYmVnaW5cbiAgICBsZXQgbGVuID0gaTItaTEgaW5cbiAgICBTb21lIChCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGkxIGxlbilcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICBOb25lXG4gIGVuZFxuXG5sZXQgc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiBpID0gQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGlcblxubGV0IHN1Yl9sZXhlbWVfY2hhcl9vcHQgbGV4YnVmIGkgPVxuICBpZiBpID49IDAgdGhlblxuICAgIFNvbWUgKEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciBpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5cbmxldCBsZXhlbWVfY2hhciBsZXhidWYgaSA9XG4gIEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciAobGV4YnVmLmxleF9zdGFydF9wb3MgKyBpKVxuXG5sZXQgbGV4ZW1lX3N0YXJ0IGxleGJ1ZiA9IGxleGJ1Zi5sZXhfc3RhcnRfcC5wb3NfY251bVxubGV0IGxleGVtZV9lbmQgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AucG9zX2NudW1cblxubGV0IGxleGVtZV9zdGFydF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfc3RhcnRfcFxubGV0IGxleGVtZV9lbmRfcCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcFxuXG5sZXQgbmV3X2xpbmUgbGV4YnVmID1cbiAgbGV0IGxjcCA9IGxleGJ1Zi5sZXhfY3Vycl9wIGluXG4gIGlmIGxjcCAhPSBkdW1teV9wb3MgdGhlblxuICAgIGxleGJ1Zi5sZXhfY3Vycl9wIDwtXG4gICAgICB7IGxjcCB3aXRoXG4gICAgICAgIHBvc19sbnVtID0gbGNwLnBvc19sbnVtICsgMTtcbiAgICAgICAgcG9zX2JvbCA9IGxjcC5wb3NfY251bTtcbiAgICAgIH1cblxuXG5cbigqIERpc2NhcmQgZGF0YSBsZWZ0IGluIGxleGVyIGJ1ZmZlci4gKilcblxubGV0IGZsdXNoX2lucHV0IGxiID1cbiAgbGIubGV4X2N1cnJfcG9zIDwtIDA7XG4gIGxiLmxleF9hYnNfcG9zIDwtIDA7XG4gIGxldCBsY3AgPSBsYi5sZXhfY3Vycl9wIGluXG4gIGlmIGxjcCAhPSBkdW1teV9wb3MgdGhlblxuICAgIGxiLmxleF9jdXJyX3AgPC0ge3plcm9fcG9zIHdpdGggcG9zX2ZuYW1lID0gbGNwLnBvc19mbmFtZX07XG4gIGxiLmxleF9idWZmZXJfbGVuIDwtIDA7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+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+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSBBdG9taWMubWFrZSBbXVxuXG5sZXQgbG9jZm10ID0gZm9ybWF0X29mX3N0cmluZyBcIkZpbGUgXFxcIiVzXFxcIiwgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZDogJXNcIlxuXG5sZXQgZmllbGQgeCBpID1cbiAgbGV0IGYgPSBPYmouZmllbGQgeCBpIGluXG4gIGlmIG5vdCAoT2JqLmlzX2Jsb2NrIGYpIHRoZW5cbiAgICBzcHJpbnRmIFwiJWRcIiAoT2JqLm1hZ2ljIGYgOiBpbnQpICAgICAgICAgICAoKiBjYW4gYWxzbyBiZSBhIGNoYXIgKilcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouc3RyaW5nX3RhZyB0aGVuXG4gICAgc3ByaW50ZiBcIiVTXCIgKE9iai5tYWdpYyBmIDogc3RyaW5nKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5kb3VibGVfdGFnIHRoZW5cbiAgICBzdHJpbmdfb2ZfZmxvYXQgKE9iai5tYWdpYyBmIDogZmxvYXQpXG4gIGVsc2VcbiAgICBcIl9cIlxuXG5sZXQgcmVjIG90aGVyX2ZpZWxkcyB4IGkgPVxuICBpZiBpID49IE9iai5zaXplIHggdGhlbiBcIlwiXG4gIGVsc2Ugc3ByaW50ZiBcIiwgJXMlc1wiIChmaWVsZCB4IGkpIChvdGhlcl9maWVsZHMgeCAoaSsxKSlcblxubGV0IGZpZWxkcyB4ID1cbiAgbWF0Y2ggT2JqLnNpemUgeCB3aXRoXG4gIHwgMCAtPiBcIlwiXG4gIHwgMSAtPiBcIlwiXG4gIHwgMiAtPiBzcHJpbnRmIFwiKCVzKVwiIChmaWVsZCB4IDEpXG4gIHwgXyAtPiBzcHJpbnRmIFwiKCVzJXMpXCIgKGZpZWxkIHggMSkgKG90aGVyX2ZpZWxkcyB4IDIpXG5cbmxldCB1c2VfcHJpbnRlcnMgeCA9XG4gIGxldCByZWMgY29udiA9IGZ1bmN0aW9uXG4gICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICAobWF0Y2ggaGQgeCB3aXRoXG4gICAgICAgICB8IE5vbmUgfCBleGNlcHRpb24gXyAtPiBjb252IHRsXG4gICAgICAgICB8IFNvbWUgcyAtPiBTb21lIHMpXG4gICAgfCBbXSAtPiBOb25lIGluXG4gIGNvbnYgKEF0b21pYy5nZXQgcHJpbnRlcnMpXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgICAgIGlmIE9iai50YWcgeCA8PiAwIHRoZW5cbiAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIHggMCkgOiBzdHJpbmcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9XG4gICAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAgICAgY29uc3RydWN0b3IgXiAoZmllbGRzIHgpXG5cbmxldCB0b19zdHJpbmcgZSA9XG4gIG1hdGNoIHVzZV9wcmludGVycyBlIHdpdGhcbiAgfCBTb21lIHMgLT4gc1xuICB8IE5vbmUgLT4gdG9fc3RyaW5nX2RlZmF1bHQgZVxuXG5sZXQgcHJpbnQgZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGZsdXNoIHN0ZGVycjtcbiAgICByYWlzZSB4XG5cbmxldCBjYXRjaCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBmbHVzaCBzdGRvdXQ7XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGV4aXQgMlxuXG50eXBlIHJhd19iYWNrdHJhY2Vfc2xvdFxudHlwZSByYXdfYmFja3RyYWNlX2VudHJ5ID0gcHJpdmF0ZSBpbnRcbnR5cGUgcmF3X2JhY2t0cmFjZSA9IHJhd19iYWNrdHJhY2VfZW50cnkgYXJyYXlcblxubGV0IHJhd19iYWNrdHJhY2VfZW50cmllcyBidCA9IGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlOlxuICB1bml0IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlXCJcblxuZXh0ZXJuYWwgcmFpc2Vfd2l0aF9iYWNrdHJhY2U6IGV4biAtPiByYXdfYmFja3RyYWNlIC0+ICdhXG4gID0gXCIlcmFpc2Vfd2l0aF9iYWNrdHJhY2VcIlxuXG50eXBlIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgICA6IGJvb2w7XG4gICAgICBmaWxlbmFtZSAgICA6IHN0cmluZztcbiAgICAgIGxpbmVfbnVtYmVyIDogaW50O1xuICAgICAgc3RhcnRfY2hhciAgOiBpbnQ7XG4gICAgICBlbmRfY2hhciAgICA6IGludDtcbiAgICAgIGlzX2lubGluZSAgIDogYm9vbDtcbiAgICAgIGRlZm5hbWUgICAgIDogc3RyaW5nO1xuICAgIH1cbiAgfCBVbmtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlIDogYm9vbFxuICAgIH1cblxuKCogdG8gYXZvaWQgd2FybmluZyAqKVxubGV0IF8gPSBbS25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlOyBmaWxlbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW5saW5lID0gZmFsc2U7IGRlZm5hbWUgPSBcIlwiIH07XG4gICAgICAgICBVbmtub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZSB9XVxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IGJhY2t0cmFjZV9zbG90ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlOlxuICByYXdfYmFja3RyYWNlIC0+IGJhY2t0cmFjZV9zbG90IGFycmF5ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZVwiXG5cbmxldCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQgPVxuICB0cnkgU29tZSAoY29udmVydF9yYXdfYmFja3RyYWNlIGJ0KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgcG9zIHNsb3QgPVxuICBsZXQgaW5mbyBpc19yYWlzZSA9XG4gICAgaWYgaXNfcmFpc2UgdGhlblxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGF0XCIgZWxzZSBcIlJlLXJhaXNlZCBhdFwiXG4gICAgZWxzZVxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb24gYXRcIiBlbHNlIFwiQ2FsbGVkIGZyb21cIlxuICBpblxuICBtYXRjaCBzbG90IHdpdGhcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGlmIGwuaXNfcmFpc2UgdGhlblxuICAgICAgICAoKiBjb21waWxlci1pbnNlcnRlZCByZS1yYWlzZSwgc2tpcHBlZCAqKSBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIFNvbWUgKHNwcmludGYgXCIlcyB1bmtub3duIGxvY2F0aW9uXCIgKGluZm8gZmFsc2UpKVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIFNvbWUgKHNwcmludGYgXCIlcyAlcyBpbiBmaWxlIFxcXCIlc1xcXCIlcywgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZFwiXG4gICAgICAgICAgICAgIChpbmZvIGwuaXNfcmFpc2UpIGwuZGVmbmFtZSBsLmZpbGVuYW1lXG4gICAgICAgICAgICAgIChpZiBsLmlzX2lubGluZSB0aGVuIFwiIChpbmxpbmVkKVwiIGVsc2UgXCJcIilcbiAgICAgICAgICAgICAgbC5saW5lX251bWJlciBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5saW5lX251bWJlcjtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9jaGFyO1xuICAgIH1cblxubGV0IGJhY2t0cmFjZV9zbG90X2RlZm5hbWUgPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gX1xuICB8IEtub3duX2xvY2F0aW9uIHsgZGVmbmFtZSA9IFwiXCIgfSAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBTb21lIGwuZGVmbmFtZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzIHJhd19iYWNrdHJhY2UgPVxuICAoKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBTb21lIGlzXG4gICAgIHJldHVybmVkIG9ubHkgaWYgYSBwYXJ0IG9mIHRoZSB0cmFjZSBpcyB1c2FibGUuIFRoaXMgZ2l2ZXMgdXNcbiAgICAgYSBiaXQgbW9yZSB3b3JrIHRoYW4ganVzdCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UsIGJ1dCBpdCBtYWtlcyB0aGVcbiAgICAgQVBJIG1vcmUgdXNlci1mcmllbmRseSAtLSBvdGhlcndpc2UgbW9zdCB1c2VycyB3b3VsZCBoYXZlIHRvXG4gICAgIHJlaW1wbGVtZW50IHRoZSBcIlByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBzb3JyeVwiIGxvZ2ljXG4gICAgIHRoZW1zZWx2ZXMuICopXG4gIG1hdGNoIGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSBiYWNrdHJhY2UgLT5cbiAgICAgIGxldCB1c2FibGVfc2xvdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG4gICAgICAgIHwgS25vd25fbG9jYXRpb24gXyAtPiB0cnVlIGluXG4gICAgICBsZXQgcmVjIGV4aXN0c191c2FibGUgPSBmdW5jdGlvblxuICAgICAgICB8ICgtMSkgLT4gZmFsc2VcbiAgICAgICAgfCBpIC0+IHVzYWJsZV9zbG90IGJhY2t0cmFjZS4oaSkgfHwgZXhpc3RzX3VzYWJsZSAoaSAtIDEpIGluXG4gICAgICBpZiBleGlzdHNfdXNhYmxlIChBcnJheS5sZW5ndGggYmFja3RyYWNlIC0gMSlcbiAgICAgIHRoZW4gU29tZSBiYWNrdHJhY2VcbiAgICAgIGVsc2UgTm9uZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSBlbnRyeSA9XG4gIGJhY2t0cmFjZV9zbG90cyBbfCBlbnRyeSB8XVxuXG5tb2R1bGUgU2xvdCA9IHN0cnVjdFxuICB0eXBlIHQgPSBiYWNrdHJhY2Vfc2xvdFxuICBsZXQgZm9ybWF0ID0gZm9ybWF0X2JhY2t0cmFjZV9zbG90XG4gIGxldCBpc19yYWlzZSA9IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlXG4gIGxldCBpc19pbmxpbmUgPSBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmVcbiAgbGV0IGxvY2F0aW9uID0gYmFja3RyYWNlX3Nsb3RfbG9jYXRpb25cbiAgbGV0IG5hbWUgPSBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lXG5lbmRcblxubGV0IHJhd19iYWNrdHJhY2VfbGVuZ3RoIGJ0ID0gQXJyYXkubGVuZ3RoIGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX3Nsb3QgOlxuICByYXdfYmFja3RyYWNlIC0+IGludCAtPiByYXdfYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCBvcHRpb25cbiAgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcIlxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDpcbiAgIHJldHVybnMgdGhlICpzdHJpbmcqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IGdldF9iYWNrdHJhY2UgKCkgPSByYXdfYmFja3RyYWNlX3RvX3N0cmluZyAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmV4dGVybmFsIHJlY29yZF9iYWNrdHJhY2U6IGJvb2wgLT4gdW5pdCA9IFwiY2FtbF9yZWNvcmRfYmFja3RyYWNlXCJcbmV4dGVybmFsIGJhY2t0cmFjZV9zdGF0dXM6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXCJcblxubGV0IHJlYyByZWdpc3Rlcl9wcmludGVyIGZuID1cbiAgbGV0IG9sZF9wcmludGVycyA9IEF0b21pYy5nZXQgcHJpbnRlcnMgaW5cbiAgbGV0IG5ld19wcmludGVycyA9IGZuIDo6IG9sZF9wcmludGVycyBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcHJpbnRlcnMgb2xkX3ByaW50ZXJzIG5ld19wcmludGVycyBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIHJlZ2lzdGVyX3ByaW50ZXIgZm5cblxuZXh0ZXJuYWwgZ2V0X2NhbGxzdGFjazogaW50IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrXCJcblxubGV0IGV4bl9zbG90IHggPVxuICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgaWYgT2JqLnRhZyB4ID0gMCB0aGVuIE9iai5maWVsZCB4IDAgZWxzZSB4XG5cbmxldCBleG5fc2xvdF9pZCB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAxKSA6IGludClcblxubGV0IGV4bl9zbG90X25hbWUgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMCkgOiBzdHJpbmcpXG5cbmV4dGVybmFsIGdldF9kZWJ1Z19pbmZvX3N0YXR1cyA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzXCJcblxuKCogRGVzY3JpcHRpb25zIGZvciBlcnJvcnMgaW4gc3RhcnR1cC5oLiBTZWUgYWxzbyBiYWNrdHJhY2UuYyAqKVxubGV0IGVycm9ycyA9IFt8IFwiXCI7XG4gICgqIEZJTEVfTk9UX0ZPVU5EICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBub3QgZm91bmQpXCI7XG4gICgqIEJBRF9CWVRFQ09ERSAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0KVwiO1xuICAoKiBXUk9OR19NQUdJQyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgaGFzIHdyb25nIG1hZ2ljIG51bWJlcilcIjtcbiAgKCogTk9fRkRTICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBjYW5ub3QgYmUgb3BlbmVkO1xcbiBcXFxuICAgICAgLS0gdG9vIG1hbnkgb3BlbiBmaWxlcy4gVHJ5IHJ1bm5pbmcgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MilcIlxufF1cblxubGV0IGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2UgPVxuICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgbGV0IHN0YXR1cyA9IGdldF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSBpblxuICBpZiBzdGF0dXMgPCAwIHRoZW5cbiAgICBwcmVycl9lbmRsaW5lIGVycm9ycy4oYWJzIHN0YXR1cyk7XG4gIGZsdXNoIHN0ZGVyclxuXG5sZXQgdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgPSByZWYgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlclxuXG5sZXQgc2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGZuID0gdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgOj0gZm5cblxubGV0IGVtcHR5X2JhY2t0cmFjZSA6IHJhd19iYWNrdHJhY2UgPSBbfCB8XVxuXG5sZXQgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpID1cbiAgdHJ5XG4gICAgZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgd2l0aCBfICgqIE91dF9vZl9tZW1vcnk/ICopIC0+XG4gICAgZW1wdHlfYmFja3RyYWNlXG5cbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgKCogR2V0IHRoZSBiYWNrdHJhY2Ugbm93LCBpbiBjYXNlIG9uZSBvZiB0aGUgW2F0X2V4aXRdIGZ1bmN0aW9uXG4gICAgICAgZGVzdHJveXMgaXQuICopXG4gICAgbGV0IHJhd19iYWNrdHJhY2UgPVxuICAgICAgaWYgZGVidWdnZXJfaW5fdXNlICgqIFNhbWUgdGVzdCBhcyBpbiBbcnVudGltZS9wcmludGV4Yy5jXSAqKSB0aGVuXG4gICAgICAgIGVtcHR5X2JhY2t0cmFjZVxuICAgICAgZWxzZVxuICAgICAgICB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgICBpblxuICAgICh0cnkgU3RkbGliLmRvX2F0X2V4aXQgKCkgd2l0aCBfIC0+ICgpKTtcbiAgICB0cnlcbiAgICAgICF1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZVxuICAgIHdpdGggZXhuJyAtPlxuICAgICAgbGV0IHJhd19iYWNrdHJhY2UnID0gdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3IgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXI6IGV4Y2VwdGlvbiAlc1xcblwiXG4gICAgICAgICh0b19zdHJpbmcgZXhuJyk7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlJztcbiAgICAgIGZsdXNoIHN0ZGVyclxuICB3aXRoXG4gICAgfCBPdXRfb2ZfbWVtb3J5IC0+XG4gICAgICAgIHByZXJyX2VuZGxpbmVcbiAgICAgICAgICBcIkZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5IGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyXCJcblxuKCogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgW2NhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXSBpblxuICAgW3J1bnRpbWUvcHJpbnRleGMuY10gd2hpY2ggZXhwZWN0cyBubyBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24gZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2VcbiAgd2l0aCBfIC0+XG4gICAgKCogVGhlcmUgaXMgbm90IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKilcbiAgICAoKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCJcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgWGF2aWVyIExlcm95IGFuZCBEYW1pZW4gRG9saWdleiwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmxldCBnZW5lcmljX3F1b3RlIHF1b3RlcXVvdGUgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAobCArIDIwKSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYiAnXFwnJztcbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgaWYgcy5baV0gPSAnXFwnJ1xuICAgIHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBxdW90ZXF1b3RlXG4gICAgZWxzZSBCdWZmZXIuYWRkX2NoYXIgYiAgcy5baV1cbiAgZG9uZTtcbiAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcJyc7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbigqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgT3BlbiBHcm91cCBzcGVjaWZpY2F0aW9uIGZvdW5kIGhlcmU6XG4gIFtbMV1dIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9iYXNlbmFtZS5odG1sXG4gIEluIHN0ZXAgMSBvZiBbWzFdXSwgd2UgY2hvb3NlIHRvIHJldHVybiBcIi5cIiBmb3IgZW1wdHkgaW5wdXQuXG4gICAgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgT0NhbWwpXG4gIEluIHN0ZXAgMiwgd2UgY2hvb3NlIHRvIHByb2Nlc3MgXCIvL1wiIG5vcm1hbGx5LlxuICBTdGVwIDYgaXMgbm90IGltcGxlbWVudGVkOiB3ZSBjb25zaWRlciB0aGF0IHRoZSBbc3VmZml4XSBvcGVyYW5kIGlzXG4gICAgYWx3YXlzIGFic2VudC4gIFN1ZmZpeGVzIGFyZSBoYW5kbGVkIGJ5IFtjaG9wX3N1ZmZpeF0gYW5kIFtjaG9wX2V4dGVuc2lvbl0uXG4qKVxubGV0IGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIG5hbWUgPVxuICBsZXQgcmVjIGZpbmRfZW5kIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBmaW5kX2VuZCAobiAtIDEpXG4gICAgZWxzZSBmaW5kX2JlZyBuIChuICsgMSlcbiAgYW5kIGZpbmRfYmVnIG4gcCA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCBwXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIFN0cmluZy5zdWIgbmFtZSAobiArIDEpIChwIC0gbiAtIDEpXG4gICAgZWxzZSBmaW5kX2JlZyAobiAtIDEpIHBcbiAgaW5cbiAgaWYgbmFtZSA9IFwiXCJcbiAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gIGVsc2UgZmluZF9lbmQgKFN0cmluZy5sZW5ndGggbmFtZSAtIDEpXG5cbigqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgT3BlbiBHcm91cCBzcGVjaWZpY2F0aW9uIGZvdW5kIGhlcmU6XG4gIFtbMl1dIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9kaXJuYW1lLmh0bWxcbiAgSW4gc3RlcCA2IG9mIFtbMl1dLCB3ZSBjaG9vc2UgdG8gcHJvY2VzcyBcIi8vXCIgbm9ybWFsbHkuXG4qKVxubGV0IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWUgbmFtZSA9XG4gIGxldCByZWMgdHJhaWxpbmdfc2VwIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiB0cmFpbGluZ19zZXAgKG4gLSAxKVxuICAgIGVsc2UgYmFzZSBuXG4gIGFuZCBiYXNlIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gY3VycmVudF9kaXJfbmFtZVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBpbnRlcm1lZGlhdGVfc2VwIG5cbiAgICBlbHNlIGJhc2UgKG4gLSAxKVxuICBhbmQgaW50ZXJtZWRpYXRlX3NlcCBuID1cbiAgICBpZiBuIDwgMCB0aGVuIFN0cmluZy5zdWIgbmFtZSAwIDFcbiAgICBlbHNlIGlmIGlzX2Rpcl9zZXAgbmFtZSBuIHRoZW4gaW50ZXJtZWRpYXRlX3NlcCAobiAtIDEpXG4gICAgZWxzZSBTdHJpbmcuc3ViIG5hbWUgMCAobiArIDEpXG4gIGluXG4gIGlmIG5hbWUgPSBcIlwiXG4gIHRoZW4gY3VycmVudF9kaXJfbmFtZVxuICBlbHNlIHRyYWlsaW5nX3NlcCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxubW9kdWxlIHR5cGUgU1lTREVQUyA9IHNpZ1xuICB2YWwgbnVsbCA6IHN0cmluZ1xuICB2YWwgY3VycmVudF9kaXJfbmFtZSA6IHN0cmluZ1xuICB2YWwgcGFyZW50X2Rpcl9uYW1lIDogc3RyaW5nXG4gIHZhbCBkaXJfc2VwIDogc3RyaW5nXG4gIHZhbCBpc19kaXJfc2VwIDogc3RyaW5nIC0+IGludCAtPiBib29sXG4gIHZhbCBpc19yZWxhdGl2ZSA6IHN0cmluZyAtPiBib29sXG4gIHZhbCBpc19pbXBsaWNpdCA6IHN0cmluZyAtPiBib29sXG4gIHZhbCBjaGVja19zdWZmaXggOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGNob3Bfc3VmZml4X29wdCA6IHN1ZmZpeDpzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb25cbiAgdmFsIHRlbXBfZGlyX25hbWUgOiBzdHJpbmdcbiAgdmFsIHF1b3RlIDogc3RyaW5nIC0+IHN0cmluZ1xuICB2YWwgcXVvdGVfY29tbWFuZCA6XG4gICAgc3RyaW5nIC0+ID9zdGRpbjogc3RyaW5nIC0+ID9zdGRvdXQ6IHN0cmluZyAtPiA/c3RkZXJyOiBzdHJpbmdcbiAgICAgICAgICAgLT4gc3RyaW5nIGxpc3QgLT4gc3RyaW5nXG4gIHZhbCBiYXNlbmFtZSA6IHN0cmluZyAtPiBzdHJpbmdcbiAgdmFsIGRpcm5hbWUgOiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubW9kdWxlIFVuaXggOiBTWVNERVBTID0gc3RydWN0XG4gIGxldCBudWxsID0gXCIvZGV2L251bGxcIlxuICBsZXQgY3VycmVudF9kaXJfbmFtZSA9IFwiLlwiXG4gIGxldCBwYXJlbnRfZGlyX25hbWUgPSBcIi4uXCJcbiAgbGV0IGRpcl9zZXAgPSBcIi9cIlxuICBsZXQgaXNfZGlyX3NlcCBzIGkgPSBzLltpXSA9ICcvJ1xuICBsZXQgaXNfcmVsYXRpdmUgbiA9IFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJy8nXG4gIGxldCBpc19pbXBsaWNpdCBuID1cbiAgICBpc19yZWxhdGl2ZSBuXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uL1wiKVxuICBsZXQgY2hlY2tfc3VmZml4IG5hbWUgc3VmZiA9XG4gICAgU3RyaW5nLmVuZHNfd2l0aCB+c3VmZml4OnN1ZmYgbmFtZVxuXG4gIGxldCBjaG9wX3N1ZmZpeF9vcHQgfnN1ZmZpeCBmaWxlbmFtZSA9XG4gICAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzdWZmaXggYW5kIGxlbl9mID0gU3RyaW5nLmxlbmd0aCBmaWxlbmFtZSBpblxuICAgIGlmIGxlbl9mID49IGxlbl9zIHRoZW5cbiAgICAgIGxldCByID0gU3RyaW5nLnN1YiBmaWxlbmFtZSAobGVuX2YgLSBsZW5fcykgbGVuX3MgaW5cbiAgICAgIGlmIHIgPSBzdWZmaXggdGhlblxuICAgICAgICBTb21lIChTdHJpbmcuc3ViIGZpbGVuYW1lIDAgKGxlbl9mIC0gbGVuX3MpKVxuICAgICAgZWxzZVxuICAgICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG4gIGxldCB0ZW1wX2Rpcl9uYW1lID1cbiAgICB0cnkgU3lzLmdldGVudiBcIlRNUERJUlwiIHdpdGggTm90X2ZvdW5kIC0+IFwiL3RtcFwiXG4gIGxldCBxdW90ZSA9IGdlbmVyaWNfcXVvdGUgXCInXFxcXCcnXCJcbiAgbGV0IHF1b3RlX2NvbW1hbmQgY21kID9zdGRpbiA/c3Rkb3V0ID9zdGRlcnIgYXJncyA9XG4gICAgU3RyaW5nLmNvbmNhdCBcIiBcIiAoTGlzdC5tYXAgcXVvdGUgKGNtZCA6OiBhcmdzKSlcbiAgICBeIChtYXRjaCBzdGRpbiAgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPFwiIF4gcXVvdGUgZilcbiAgICBeIChtYXRjaCBzdGRvdXQgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPlwiIF4gcXVvdGUgZilcbiAgICBeIChtYXRjaCBzdGRlcnIgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gaWYgc3RkZXJyID0gc3Rkb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIFwiIDI+JjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcIiAyPlwiIF4gcXVvdGUgZilcbiAgbGV0IGJhc2VuYW1lID0gZ2VuZXJpY19iYXNlbmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbiAgbGV0IGRpcm5hbWUgPSBnZW5lcmljX2Rpcm5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lXG5lbmRcblxubW9kdWxlIFdpbjMyIDogU1lTREVQUyA9IHN0cnVjdFxuICBsZXQgbnVsbCA9IFwiTlVMXCJcbiAgbGV0IGN1cnJlbnRfZGlyX25hbWUgPSBcIi5cIlxuICBsZXQgcGFyZW50X2Rpcl9uYW1lID0gXCIuLlwiXG4gIGxldCBkaXJfc2VwID0gXCJcXFxcXCJcbiAgbGV0IGlzX2Rpcl9zZXAgcyBpID0gbGV0IGMgPSBzLltpXSBpbiBjID0gJy8nIHx8IGMgPSAnXFxcXCcgfHwgYyA9ICc6J1xuICBsZXQgaXNfcmVsYXRpdmUgbiA9XG4gICAgKFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJy8nKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAxIHx8IG4uWzBdIDw+ICdcXFxcJylcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBuLlsxXSA8PiAnOicpXG4gIGxldCBpc19pbXBsaWNpdCBuID1cbiAgICBpc19yZWxhdGl2ZSBuXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi5cXFxcXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uL1wiKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAzIHx8IFN0cmluZy5zdWIgbiAwIDMgPD4gXCIuLlxcXFxcIilcbiAgbGV0IGNoZWNrX3N1ZmZpeCBuYW1lIHN1ZmYgPVxuICAgU3RyaW5nLmxlbmd0aCBuYW1lID49IFN0cmluZy5sZW5ndGggc3VmZiAmJlxuICAgKGxldCBzID0gU3RyaW5nLnN1YiBuYW1lIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBTdHJpbmcubGVuZ3RoIHN1ZmYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0cmluZy5sZW5ndGggc3VmZikgaW5cbiAgICBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHMgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHN1ZmYpXG5cbiAgbGV0IGNob3Bfc3VmZml4X29wdCB+c3VmZml4IGZpbGVuYW1lID1cbiAgICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHN1ZmZpeCBhbmQgbGVuX2YgPSBTdHJpbmcubGVuZ3RoIGZpbGVuYW1lIGluXG4gICAgaWYgbGVuX2YgPj0gbGVuX3MgdGhlblxuICAgICAgbGV0IHIgPSBTdHJpbmcuc3ViIGZpbGVuYW1lIChsZW5fZiAtIGxlbl9zKSBsZW5fcyBpblxuICAgICAgaWYgU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSByID0gU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSBzdWZmaXggdGhlblxuICAgICAgICBTb21lIChTdHJpbmcuc3ViIGZpbGVuYW1lIDAgKGxlbl9mIC0gbGVuX3MpKVxuICAgICAgZWxzZVxuICAgICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5cbiAgbGV0IHRlbXBfZGlyX25hbWUgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiVEVNUFwiIHdpdGggTm90X2ZvdW5kIC0+IFwiLlwiXG4gIGxldCBxdW90ZSBzID1cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAobCArIDIwKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJztcbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJyBlbHNlXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICdcXFwiJyAtPiBsb29wX2JzIDAgaTtcbiAgICAgIHwgJ1xcXFwnIC0+IGxvb3BfYnMgMCBpO1xuICAgICAgfCBjICAgIC0+IEJ1ZmZlci5hZGRfY2hhciBiIGM7IGxvb3AgKGkrMSk7XG4gICAgYW5kIGxvb3BfYnMgbiBpID1cbiAgICAgIGlmIGkgPSBsIHRoZW4gYmVnaW5cbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInO1xuICAgICAgICBhZGRfYnMgbjtcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICAgfCAnXFxcIicgLT4gYWRkX2JzICgyKm4rMSk7IEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJzsgbG9vcCAoaSsxKTtcbiAgICAgICAgfCAnXFxcXCcgLT4gbG9vcF9icyAobisxKSAoaSsxKTtcbiAgICAgICAgfCBfICAgIC0+IGFkZF9icyBuOyBsb29wIGlcbiAgICAgIGVuZFxuICAgIGFuZCBhZGRfYnMgbiA9IGZvciBfaiA9IDEgdG8gbiBkbyBCdWZmZXIuYWRkX2NoYXIgYiAnXFxcXCc7IGRvbmVcbiAgICBpblxuICAgIGxvb3AgMDtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuKCpcblF1b3RpbmcgY29tbWFuZHMgZm9yIGV4ZWN1dGlvbiBieSBjbWQuZXhlIGlzIGRpZmZpY3VsdC5cbjEtIEVhY2ggYXJndW1lbnQgaXMgZmlyc3QgcXVvdGVkIHVzaW5nIHRoZSBcInF1b3RlXCIgZnVuY3Rpb24gYWJvdmUsIHRvXG4gICBwcm90ZWN0IGl0IGFnYWluc3QgdGhlIHByb2Nlc3NpbmcgcGVyZm9ybWVkIGJ5IHRoZSBDIHJ1bnRpbWUgc3lzdGVtLFxuICAgdGhlbiBjbWQuZXhlJ3Mgc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIHdpdGggJ14nLCB1c2luZ1xuICAgdGhlIFwicXVvdGVfY21kXCIgZnVuY3Rpb24gYmVsb3cuICBGb3IgbW9yZSBkZXRhaWxzLCBzZWVcbiAgIGh0dHBzOi8vYmxvZ3MubXNkbi5taWNyb3NvZnQuY29tL3R3aXN0eWxpdHRsZXBhc3NhZ2VzYWxsYWxpa2UvMjAxMS8wNC8yM1xuMi0gVGhlIGNvbW1hbmQgYW5kIHRoZSByZWRpcmVjdGlvbiBmaWxlcywgaWYgYW55LCBtdXN0IGJlIGRvdWJsZS1xdW90ZWRcbiAgIGluIGNhc2UgdGhleSBjb250YWluIHNwYWNlcy4gIFRoaXMgcXVvdGluZyBpcyBpbnRlcnByZXRlZCBieSBjbWQuZXhlLFxuICAgbm90IGJ5IHRoZSBDIHJ1bnRpbWUgc3lzdGVtLCBoZW5jZSB0aGUgXCJxdW90ZVwiIGZ1bmN0aW9uIGFib3ZlXG4gICBjYW5ub3QgYmUgdXNlZC4gIFRoZSB0d28gY2hhcmFjdGVycyB3ZSBkb24ndCBrbm93IGhvdyB0byBxdW90ZVxuICAgaW5zaWRlIGEgZG91YmxlLXF1b3RlZCBjbWQuZXhlIHN0cmluZyBhcmUgZG91YmxlLXF1b3RlIGFuZCBwZXJjZW50LlxuICAgV2UganVzdCBmYWlsIGlmIHRoZSBjb21tYW5kIG5hbWUgb3IgdGhlIHJlZGlyZWN0aW9uIGZpbGUgbmFtZXNcbiAgIGNvbnRhaW4gYSBkb3VibGUgcXVvdGUgKG5vdCBhbGxvd2VkIGluIFdpbmRvd3MgZmlsZSBuYW1lcywgYW55d2F5KVxuICAgb3IgYSBwZXJjZW50LiAgU2VlIGZ1bmN0aW9uIFwicXVvdGVfY21kX2ZpbGVuYW1lXCIgYmVsb3cuXG4zLSBUaGUgd2hvbGUgc3RyaW5nIHBhc3NlZCB0byBTeXMuY29tbWFuZCBpcyB0aGVuIGVuY2xvc2VkIGluIGRvdWJsZVxuICAgcXVvdGVzLCB3aGljaCBhcmUgaW1tZWRpYXRlbHkgc3RyaXBwZWQgYnkgY21kLmV4ZS4gIE90aGVyd2lzZSxcbiAgIHNvbWUgb2YgdGhlIGRvdWJsZSBxdW90ZXMgZnJvbSBzdGVwIDIgYWJvdmUgY2FuIGJlIG1pc3BhcnNlZC5cbiAgIFNlZSBlLmcuIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85OTY1MTQxXG4qKVxuICBsZXQgcXVvdGVfY21kIHMgPVxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzICsgMjApIGluXG4gICAgU3RyaW5nLml0ZXJcbiAgICAgIChmdW4gYyAtPlxuICAgICAgICBtYXRjaCBjIHdpdGhcbiAgICAgICAgfCAnKCcgfCAnKScgfCAnIScgfCAnXicgfCAnJScgfCAnXFxcIicgfCAnPCcgfCAnPicgfCAnJicgfCAnfCcgLT5cbiAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBiICdeJzsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBiIGMpXG4gICAgICBzO1xuICAgIEJ1ZmZlci5jb250ZW50cyBiXG4gIGxldCBxdW90ZV9jbWRfZmlsZW5hbWUgZiA9XG4gICAgaWYgU3RyaW5nLmNvbnRhaW5zIGYgJ1xcXCInIHx8IFN0cmluZy5jb250YWlucyBmICclJyB0aGVuXG4gICAgICBmYWlsd2l0aCAoXCJGaWxlbmFtZS5xdW90ZV9jb21tYW5kOiBiYWQgZmlsZSBuYW1lIFwiIF4gZilcbiAgICBlbHNlIGlmIFN0cmluZy5jb250YWlucyBmICcgJyB0aGVuXG4gICAgICBcIlxcXCJcIiBeIGYgXiBcIlxcXCJcIlxuICAgIGVsc2VcbiAgICAgIGZcbiAgKCogUmVkaXJlY3Rpb25zIGluIGNtZC5leGU6IHNlZSBodHRwczovL3NzNjQuY29tL250L3N5bnRheC1yZWRpcmVjdGlvbi5odG1sXG4gICAgIGFuZCBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wcmV2aW91cy12ZXJzaW9ucy93aW5kb3dzL2l0LXByby93aW5kb3dzLXhwL2JiNDkwOTgyKHY9dGVjaG5ldC4xMClcbiAgKilcbiAgbGV0IHF1b3RlX2NvbW1hbmQgY21kID9zdGRpbiA/c3Rkb3V0ID9zdGRlcnIgYXJncyA9XG4gICAgU3RyaW5nLmNvbmNhdCBcIlwiIFtcbiAgICAgIFwiXFxcIlwiO1xuICAgICAgcXVvdGVfY21kX2ZpbGVuYW1lIGNtZDtcbiAgICAgIFwiIFwiO1xuICAgICAgcXVvdGVfY21kIChTdHJpbmcuY29uY2F0IFwiIFwiIChMaXN0Lm1hcCBxdW90ZSBhcmdzKSk7XG4gICAgICAobWF0Y2ggc3RkaW4gIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+IFwiIDxcIiBeIHF1b3RlX2NtZF9maWxlbmFtZSBmKTtcbiAgICAgIChtYXRjaCBzdGRvdXQgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPlwiIF4gcXVvdGVfY21kX2ZpbGVuYW1lIGYpO1xuICAgICAgKG1hdGNoIHN0ZGVyciB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN0ZGVyciA9IHN0ZG91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gXCIgMj4mMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcIiAyPlwiIF4gcXVvdGVfY21kX2ZpbGVuYW1lIGYpO1xuICAgICAgXCJcXFwiXCJcbiAgICBdXG4gIGxldCBoYXNfZHJpdmUgcyA9XG4gICAgbGV0IGlzX2xldHRlciA9IGZ1bmN0aW9uXG4gICAgICB8ICdBJyAuLiAnWicgfCAnYScgLi4gJ3onIC0+IHRydWVcbiAgICAgIHwgXyAtPiBmYWxzZVxuICAgIGluXG4gICAgU3RyaW5nLmxlbmd0aCBzID49IDIgJiYgaXNfbGV0dGVyIHMuWzBdICYmIHMuWzFdID0gJzonXG4gIGxldCBkcml2ZV9hbmRfcGF0aCBzID1cbiAgICBpZiBoYXNfZHJpdmUgc1xuICAgIHRoZW4gKFN0cmluZy5zdWIgcyAwIDIsIFN0cmluZy5zdWIgcyAyIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICBlbHNlIChcIlwiLCBzKVxuICBsZXQgZGlybmFtZSBzID1cbiAgICBsZXQgKGRyaXZlLCBwYXRoKSA9IGRyaXZlX2FuZF9wYXRoIHMgaW5cbiAgICBsZXQgZGlyID0gZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZSBwYXRoIGluXG4gICAgZHJpdmUgXiBkaXJcbiAgbGV0IGJhc2VuYW1lIHMgPVxuICAgIGxldCAoX2RyaXZlLCBwYXRoKSA9IGRyaXZlX2FuZF9wYXRoIHMgaW5cbiAgICBnZW5lcmljX2Jhc2VuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZSBwYXRoXG5lbmRcblxubW9kdWxlIEN5Z3dpbiA6IFNZU0RFUFMgPSBzdHJ1Y3RcbiAgbGV0IG51bGwgPSBcIi9kZXYvbnVsbFwiXG4gIGxldCBjdXJyZW50X2Rpcl9uYW1lID0gXCIuXCJcbiAgbGV0IHBhcmVudF9kaXJfbmFtZSA9IFwiLi5cIlxuICBsZXQgZGlyX3NlcCA9IFwiL1wiXG4gIGxldCBpc19kaXJfc2VwID0gV2luMzIuaXNfZGlyX3NlcFxuICBsZXQgaXNfcmVsYXRpdmUgPSBXaW4zMi5pc19yZWxhdGl2ZVxuICBsZXQgaXNfaW1wbGljaXQgPSBXaW4zMi5pc19pbXBsaWNpdFxuICBsZXQgY2hlY2tfc3VmZml4ID0gV2luMzIuY2hlY2tfc3VmZml4XG4gIGxldCBjaG9wX3N1ZmZpeF9vcHQgPSBXaW4zMi5jaG9wX3N1ZmZpeF9vcHRcbiAgbGV0IHRlbXBfZGlyX25hbWUgPSBVbml4LnRlbXBfZGlyX25hbWVcbiAgbGV0IHF1b3RlID0gVW5peC5xdW90ZVxuICBsZXQgcXVvdGVfY29tbWFuZCA9IFVuaXgucXVvdGVfY29tbWFuZFxuICBsZXQgYmFzZW5hbWUgPSBnZW5lcmljX2Jhc2VuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuICBsZXQgZGlybmFtZSA9IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbmVuZFxuXG5tb2R1bGUgU3lzZGVwcyA9XG4gICh2YWwgKG1hdGNoIFN5cy5vc190eXBlIHdpdGhcbiAgICAgICB8IFwiV2luMzJcIiAtPiAobW9kdWxlIFdpbjMyOiBTWVNERVBTKVxuICAgICAgIHwgXCJDeWd3aW5cIiAtPiAobW9kdWxlIEN5Z3dpbjogU1lTREVQUylcbiAgICAgICB8IF8gLT4gKG1vZHVsZSBVbml4OiBTWVNERVBTKSkpXG5cbmluY2x1ZGUgU3lzZGVwc1xuXG5sZXQgY29uY2F0IGRpcm5hbWUgZmlsZW5hbWUgPVxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggZGlybmFtZSBpblxuICBpZiBsID0gMCB8fCBpc19kaXJfc2VwIGRpcm5hbWUgKGwtMSlcbiAgdGhlbiBkaXJuYW1lIF4gZmlsZW5hbWVcbiAgZWxzZSBkaXJuYW1lIF4gZGlyX3NlcCBeIGZpbGVuYW1lXG5cbmxldCBjaG9wX3N1ZmZpeCBuYW1lIHN1ZmYgPVxuICBpZiBjaGVja19zdWZmaXggbmFtZSBzdWZmXG4gIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgKFN0cmluZy5sZW5ndGggbmFtZSAtIFN0cmluZy5sZW5ndGggc3VmZilcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkZpbGVuYW1lLmNob3Bfc3VmZml4XCJcblxubGV0IGV4dGVuc2lvbl9sZW4gbmFtZSA9XG4gIGxldCByZWMgY2hlY2sgaTAgaSA9XG4gICAgaWYgaSA8IDAgfHwgaXNfZGlyX3NlcCBuYW1lIGkgdGhlbiAwXG4gICAgZWxzZSBpZiBuYW1lLltpXSA9ICcuJyB0aGVuIGNoZWNrIGkwIChpIC0gMSlcbiAgICBlbHNlIFN0cmluZy5sZW5ndGggbmFtZSAtIGkwXG4gIGluXG4gIGxldCByZWMgc2VhcmNoX2RvdCBpID1cbiAgICBpZiBpIDwgMCB8fCBpc19kaXJfc2VwIG5hbWUgaSB0aGVuIDBcbiAgICBlbHNlIGlmIG5hbWUuW2ldID0gJy4nIHRoZW4gY2hlY2sgaSAoaSAtIDEpXG4gICAgZWxzZSBzZWFyY2hfZG90IChpIC0gMSlcbiAgaW5cbiAgc2VhcmNoX2RvdCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxubGV0IGV4dGVuc2lvbiBuYW1lID1cbiAgbGV0IGwgPSBleHRlbnNpb25fbGVuIG5hbWUgaW5cbiAgaWYgbCA9IDAgdGhlbiBcIlwiIGVsc2UgU3RyaW5nLnN1YiBuYW1lIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBsKSBsXG5cbmxldCBjaG9wX2V4dGVuc2lvbiBuYW1lID1cbiAgbGV0IGwgPSBleHRlbnNpb25fbGVuIG5hbWUgaW5cbiAgaWYgbCA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZpbGVuYW1lLmNob3BfZXh0ZW5zaW9uXCJcbiAgZWxzZSBTdHJpbmcuc3ViIG5hbWUgMCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gbClcblxubGV0IHJlbW92ZV9leHRlbnNpb24gbmFtZSA9XG4gIGxldCBsID0gZXh0ZW5zaW9uX2xlbiBuYW1lIGluXG4gIGlmIGwgPSAwIHRoZW4gbmFtZSBlbHNlIFN0cmluZy5zdWIgbmFtZSAwIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBsKVxuXG5leHRlcm5hbCBvcGVuX2Rlc2M6IHN0cmluZyAtPiBvcGVuX2ZsYWcgbGlzdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX3N5c19vcGVuXCJcbmV4dGVybmFsIGNsb3NlX2Rlc2M6IGludCAtPiB1bml0ID0gXCJjYW1sX3N5c19jbG9zZVwiXG5cbmxldCBwcm5nID0gbGF6eShSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQgKCkpXG5cbmxldCB0ZW1wX2ZpbGVfbmFtZSB0ZW1wX2RpciBwcmVmaXggc3VmZml4ID1cbiAgbGV0IHJuZCA9IChSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSkgbGFuZCAweEZGRkZGRiBpblxuICBjb25jYXQgdGVtcF9kaXIgKFByaW50Zi5zcHJpbnRmIFwiJXMlMDZ4JXNcIiBwcmVmaXggcm5kIHN1ZmZpeClcblxuXG5sZXQgY3VycmVudF90ZW1wX2Rpcl9uYW1lID0gcmVmIHRlbXBfZGlyX25hbWVcblxubGV0IHNldF90ZW1wX2Rpcl9uYW1lIHMgPSBjdXJyZW50X3RlbXBfZGlyX25hbWUgOj0gc1xubGV0IGdldF90ZW1wX2Rpcl9uYW1lICgpID0gIWN1cnJlbnRfdGVtcF9kaXJfbmFtZVxuXG5sZXQgdGVtcF9maWxlID8odGVtcF9kaXIgPSAhY3VycmVudF90ZW1wX2Rpcl9uYW1lKSBwcmVmaXggc3VmZml4ID1cbiAgbGV0IHJlYyB0cnlfbmFtZSBjb3VudGVyID1cbiAgICBsZXQgbmFtZSA9IHRlbXBfZmlsZV9uYW1lIHRlbXBfZGlyIHByZWZpeCBzdWZmaXggaW5cbiAgICB0cnlcbiAgICAgIGNsb3NlX2Rlc2Mob3Blbl9kZXNjIG5hbWUgW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX2V4Y2xdIDBvNjAwKTtcbiAgICAgIG5hbWVcbiAgICB3aXRoIFN5c19lcnJvciBfIGFzIGUgLT5cbiAgICAgIGlmIGNvdW50ZXIgPj0gMTAwMCB0aGVuIHJhaXNlIGUgZWxzZSB0cnlfbmFtZSAoY291bnRlciArIDEpXG4gIGluIHRyeV9uYW1lIDBcblxubGV0IG9wZW5fdGVtcF9maWxlID8obW9kZSA9IFtPcGVuX3RleHRdKSA/KHBlcm1zID0gMG82MDApXG4gICAgICAgICAgICAgICAgICAgPyh0ZW1wX2RpciA9ICFjdXJyZW50X3RlbXBfZGlyX25hbWUpIHByZWZpeCBzdWZmaXggPVxuICBsZXQgcmVjIHRyeV9uYW1lIGNvdW50ZXIgPVxuICAgIGxldCBuYW1lID0gdGVtcF9maWxlX25hbWUgdGVtcF9kaXIgcHJlZml4IHN1ZmZpeCBpblxuICAgIHRyeVxuICAgICAgKG5hbWUsXG4gICAgICAgb3Blbl9vdXRfZ2VuIChPcGVuX3dyb25seTo6T3Blbl9jcmVhdDo6T3Blbl9leGNsOjptb2RlKSBwZXJtcyBuYW1lKVxuICAgIHdpdGggU3lzX2Vycm9yIF8gYXMgZSAtPlxuICAgICAgaWYgY291bnRlciA+PSAxMDAwIHRoZW4gcmFpc2UgZSBlbHNlIHRyeV9uYW1lIChjb3VudGVyICsgMSlcbiAgaW4gdHJ5X25hbWUgMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDb21wbGV4IG51bWJlcnMgKilcblxudHlwZSB0ID0geyByZTogZmxvYXQ7IGltOiBmbG9hdCB9XG5cbmxldCB6ZXJvID0geyByZSA9IDAuMDsgaW0gPSAwLjAgfVxubGV0IG9uZSA9IHsgcmUgPSAxLjA7IGltID0gMC4wIH1cbmxldCBpID0geyByZSA9IDAuMDsgaW0gPSAxLjAgfVxuXG5sZXQgYWRkIHggeSA9IHsgcmUgPSB4LnJlICsuIHkucmU7IGltID0geC5pbSArLiB5LmltIH1cblxubGV0IHN1YiB4IHkgPSB7IHJlID0geC5yZSAtLiB5LnJlOyBpbSA9IHguaW0gLS4geS5pbSB9XG5cbmxldCBuZWcgeCA9IHsgcmUgPSAtLiB4LnJlOyBpbSA9IC0uIHguaW0gfVxuXG5sZXQgY29uaiB4ID0geyByZSA9IHgucmU7IGltID0gLS4geC5pbSB9XG5cbmxldCBtdWwgeCB5ID0geyByZSA9IHgucmUgKi4geS5yZSAtLiB4LmltICouIHkuaW07XG4gICAgICAgICAgICAgICAgaW0gPSB4LnJlICouIHkuaW0gKy4geC5pbSAqLiB5LnJlIH1cblxubGV0IGRpdiB4IHkgPVxuICBpZiBhYnNfZmxvYXQgeS5yZSA+PSBhYnNfZmxvYXQgeS5pbSB0aGVuXG4gICAgbGV0IHIgPSB5LmltIC8uIHkucmUgaW5cbiAgICBsZXQgZCA9IHkucmUgKy4gciAqLiB5LmltIGluXG4gICAgeyByZSA9ICh4LnJlICsuIHIgKi4geC5pbSkgLy4gZDtcbiAgICAgIGltID0gKHguaW0gLS4gciAqLiB4LnJlKSAvLiBkIH1cbiAgZWxzZVxuICAgIGxldCByID0geS5yZSAvLiB5LmltIGluXG4gICAgbGV0IGQgPSB5LmltICsuIHIgKi4geS5yZSBpblxuICAgIHsgcmUgPSAociAqLiB4LnJlICsuIHguaW0pIC8uIGQ7XG4gICAgICBpbSA9IChyICouIHguaW0gLS4geC5yZSkgLy4gZCB9XG5cbmxldCBpbnYgeCA9IGRpdiBvbmUgeFxuXG5sZXQgbm9ybTIgeCA9IHgucmUgKi4geC5yZSArLiB4LmltICouIHguaW1cblxubGV0IG5vcm0geCA9XG4gICgqIFdhdGNoIG91dCBmb3Igb3ZlcmZsb3cgaW4gY29tcHV0aW5nIHJlXjIgKyBpbV4yICopXG4gIGxldCByID0gYWJzX2Zsb2F0IHgucmUgYW5kIGkgPSBhYnNfZmxvYXQgeC5pbSBpblxuICBpZiByID0gMC4wIHRoZW4gaVxuICBlbHNlIGlmIGkgPSAwLjAgdGhlbiByXG4gIGVsc2UgaWYgciA+PSBpIHRoZW5cbiAgICBsZXQgcSA9IGkgLy4gciBpbiByICouIHNxcnQoMS4wICsuIHEgKi4gcSlcbiAgZWxzZVxuICAgIGxldCBxID0gciAvLiBpIGluIGkgKi4gc3FydCgxLjAgKy4gcSAqLiBxKVxuXG5sZXQgYXJnIHggPSBhdGFuMiB4LmltIHgucmVcblxubGV0IHBvbGFyIG4gYSA9IHsgcmUgPSBjb3MgYSAqLiBuOyBpbSA9IHNpbiBhICouIG4gfVxuXG5sZXQgc3FydCB4ID1cbiAgaWYgeC5yZSA9IDAuMCAmJiB4LmltID0gMC4wIHRoZW4geyByZSA9IDAuMDsgaW0gPSAwLjAgfVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBhYnNfZmxvYXQgeC5yZSBhbmQgaSA9IGFic19mbG9hdCB4LmltIGluXG4gICAgbGV0IHcgPVxuICAgICAgaWYgciA+PSBpIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IHEgPSBpIC8uIHIgaW5cbiAgICAgICAgc3FydChyKSAqLiBzcXJ0KDAuNSAqLiAoMS4wICsuIHNxcnQoMS4wICsuIHEgKi4gcSkpKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IHEgPSByIC8uIGkgaW5cbiAgICAgICAgc3FydChpKSAqLiBzcXJ0KDAuNSAqLiAocSArLiBzcXJ0KDEuMCArLiBxICouIHEpKSlcbiAgICAgIGVuZCBpblxuICAgIGlmIHgucmUgPj0gMC4wXG4gICAgdGhlbiB7IHJlID0gdzsgIGltID0gMC41ICouIHguaW0gLy4gdyB9XG4gICAgZWxzZSB7IHJlID0gMC41ICouIGkgLy4gdzsgIGltID0gaWYgeC5pbSA+PSAwLjAgdGhlbiB3IGVsc2UgLS4gdyB9XG4gIGVuZFxuXG5sZXQgZXhwIHggPVxuICBsZXQgZSA9IGV4cCB4LnJlIGluIHsgcmUgPSBlICouIGNvcyB4LmltOyBpbSA9IGUgKi4gc2luIHguaW0gfVxuXG5sZXQgbG9nIHggPSB7IHJlID0gbG9nIChub3JtIHgpOyBpbSA9IGF0YW4yIHguaW0geC5yZSB9XG5cbmxldCBwb3cgeCB5ID0gZXhwIChtdWwgeSAobG9nIHgpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQYWRkaW5nIHBvc2l0aW9uLiAqKVxudHlwZSBwYWR0eSA9XG4gIHwgTGVmdCAgICgqIFRleHQgaXMgbGVmdCBqdXN0aWZpZWQgKCctJyBvcHRpb24pLiAgICAgICAgICAgICAgICopXG4gIHwgUmlnaHQgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIChubyAnLScgb3B0aW9uKS4gICAgICAgICAgICopXG4gIHwgWmVyb3MgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIGJ5IHplcm9zIChzZWUgJzAnIG9wdGlvbikuICopXG5cbigqKiopXG5cbigqIEludGVnZXIgY29udmVyc2lvbi4gKilcbnR5cGUgaW50X2NvbnYgPVxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkICAgICAgICAoKiAgJWQgfCAlK2QgfCAlIGQgICopXG4gIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2kgICAgICAgICgqICAlaSB8ICUraSB8ICUgaSAgKilcbiAgfCBJbnRfeCB8IEludF9DeCAgICAgICAgICAgICAgICAgKCogICV4IHwgJSN4ICAgICAgICAqKVxuICB8IEludF9YIHwgSW50X0NYICAgICAgICAgICAgICAgICAoKiAgJVggfCAlI1ggICAgICAgICopXG4gIHwgSW50X28gfCBJbnRfQ28gICAgICAgICAgICAgICAgICgqICAlbyB8ICUjbyAgICAgICAgKilcbiAgfCBJbnRfdSAgICAgICAgICAgICAgICAgICAgICAgICAgKCogICV1ICAgICAgICAgICAgICAqKVxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAgICAgICAoKiAgJSNkIHwgJSNpIHwgJSN1ICopXG5cbigqIEZsb2F0IGNvbnZlcnNpb24uICopXG50eXBlIGZsb2F0X2ZsYWdfY29udiA9XG4gIHwgRmxvYXRfZmxhZ18gICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19wICAgICAgICAgICAgICAgICAgICgqICUrW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcyAgICAgICAgICAgICAgICAgICAoKiAlIFtmZUVnR0ZoSF0gKilcbnR5cGUgZmxvYXRfa2luZF9jb252ID1cbiAgfCBGbG9hdF9mICAgICAgICAgICAgICAgICAgICAgICAgKCogICVmIHwgJStmIHwgJSBmICAqKVxuICB8IEZsb2F0X2UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWUgfCAlK2UgfCAlIGUgICopXG4gIHwgRmxvYXRfRSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRSB8ICUrRSB8ICUgRSAgKilcbiAgfCBGbG9hdF9nICAgICAgICAgICAgICAgICAgICAgICAgKCogICVnIHwgJStnIHwgJSBnICAqKVxuICB8IEZsb2F0X0cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUcgfCAlK0cgfCAlIEcgICopXG4gIHwgRmxvYXRfRiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRiB8ICUrRiB8ICUgRiAgKilcbiAgfCBGbG9hdF9oICAgICAgICAgICAgICAgICAgICAgICAgKCogICVoIHwgJStoIHwgJSBoICAqKVxuICB8IEZsb2F0X0ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUggfCAlK0ggfCAlIEggICopXG4gIHwgRmxvYXRfQ0YgICAgICAgICAgICAgICAgICAgICAgICgqICAlI0Z8ICUrI0Z8ICUgI0YgKilcbnR5cGUgZmxvYXRfY29udiA9IGZsb2F0X2ZsYWdfY29udiAqIGZsb2F0X2tpbmRfY29udlxuXG4oKioqKVxuXG4oKiBDaGFyIHNldHMgKHNlZSAlWy4uLl0pIGFyZSBiaXRtYXBzIGltcGxlbWVudGVkIGFzIDMyLWNoYXIgc3RyaW5ncy4gKilcbnR5cGUgY2hhcl9zZXQgPSBzdHJpbmdcblxuKCoqKilcblxuKCogQ291bnRlciB1c2VkIGluIFNjYW5mLiAqKVxudHlwZSBjb3VudGVyID1cbiAgfCBMaW5lX2NvdW50ZXIgICAgICgqICAlbCAgICAgICopXG4gIHwgQ2hhcl9jb3VudGVyICAgICAoKiAgJW4gICAgICAqKVxuICB8IFRva2VuX2NvdW50ZXIgICAgKCogICVOLCAlTCAgKilcblxuKCoqKilcblxuKCogUGFkZGluZyBvZiBzdHJpbmdzIGFuZCBudW1iZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwYWRkaW5nID1cbiAgKCogTm8gcGFkZGluZyAoZXg6IFwiJWRcIikgKilcbiAgfCBOb19wYWRkaW5nICA6ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogTGl0ZXJhbCBwYWRkaW5nIChleDogXCIlOGRcIikgKilcbiAgfCBMaXRfcGFkZGluZyA6IHBhZHR5ICogaW50IC0+ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogUGFkZGluZyBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpkXCIpICopXG4gIHwgQXJnX3BhZGRpbmcgOiBwYWR0eSAtPiAoaW50IC0+ICdhLCAnYSkgcGFkZGluZ1xuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9kLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHBhZGRpbmcgb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcGFkX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogUHJlY2lzaW9uIG9mIGZsb2F0cyBhbmQgJzAnLXBhZGRpbmcgb2YgaW50ZWdlcnMuICopXG50eXBlICgnYSwgJ2IpIHByZWNpc2lvbiA9XG4gICgqIE5vIHByZWNpc2lvbiAoZXg6IFwiJWZcIikgKilcbiAgfCBOb19wcmVjaXNpb24gOiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogTGl0ZXJhbCBwcmVjaXNpb24gKGV4OiBcIiUuM2ZcIikgKilcbiAgfCBMaXRfcHJlY2lzaW9uIDogaW50IC0+ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBQcmVjaXNpb24gYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikgKilcbiAgfCBBcmdfcHJlY2lzaW9uIDogKGludCAtPiAnYSwgJ2EpIHByZWNpc2lvblxuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9mLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHByZWNpc2lvbiBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwcmVjX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogc2VlIHRoZSBDdXN0b20gZm9ybWF0IGNvbWJpbmF0b3IgKilcbnR5cGUgKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSA9XG4gIHwgQ3VzdG9tX3plcm8gOiAoJ2EsIHN0cmluZywgJ2EpIGN1c3RvbV9hcml0eVxuICB8IEN1c3RvbV9zdWNjIDogKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSAtPlxuICAgICgnYSwgJ3ggLT4gJ2IsICd4IC0+ICdjKSBjdXN0b21fYXJpdHlcblxuKCoqKilcblxuKCogICAgICAgIFJlbGF0aW9uYWwgZm9ybWF0IHR5cGVzXG5cbkluIHRoZSBmaXJzdCBmb3JtYXQrZ2FkdHMgaW1wbGVtZW50YXRpb24sIHRoZSB0eXBlIGZvciAlKC4uJSkgaW4gdGhlXG5mbXQgR0FEVCB3YXMgYXMgZm9sbG93czpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqICgnZDEsICdxMSwgJ2QyLCAncTIpIHJlYWRlcl9uYl91bmlmaWVyICpcbiAgICAoJ3gsICdiLCAnYywgJ2QxLCAncTEsICd1KSBmbXR0eSAqXG4gICAgKCd1LCAnYiwgJ2MsICdxMSwgJ2UxLCAnZikgZm10IC0+XG4gICAgICAoKCd4LCAnYiwgJ2MsICdkMiwgJ3EyLCAndSkgZm9ybWF0NiAtPiAneCwgJ2IsICdjLCAnZDEsICdlMSwgJ2YpIGZtdFxuXG5Ob3RpY2UgdGhhdCB0aGUgJ3UgcGFyYW1ldGVyIGluICdmIHBvc2l0aW9uIGluIHRoZSBmb3JtYXQgYXJndW1lbnRcbigoJ3gsIC4uLCAndSkgZm9ybWF0NiAtPiAuLikgaXMgZXF1YWwgdG8gdGhlICd1IHBhcmFtZXRlciBpbiAnYVxucG9zaXRpb24gaW4gdGhlIGZvcm1hdCB0YWlsICgoJ3UsIC4uLCAnZikgZm10KS4gVGhpcyBtZWFucyB0aGF0IHRoZVxudHlwZSBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHBhcmFtZXRlciBkZXBlbmRzIG9mIHdoZXJlIHRoZSAlKC4uLiUpXG5hcmUgaW4gdGhlIGZvcm1hdCBzdHJpbmc6XG5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKVwiXG4gIC0gOiAodW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gdW5pdFxuICA9IDxmdW4+XG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSklZFwiXG4gIC0gOiAoaW50IC0+IHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgaW50IC0+IHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiBpbnQgLT4gdW5pdFxuICA9IDxmdW4+XG5cbk9uIHRoZSBjb250cmFyeSwgdGhlIGxlZ2FjeSB0eXBlciBnaXZlcyBhIGNsZXZlciB0eXBlIHRoYXQgZG9lcyBub3RcbmRlcGVuZCBvbiB0aGUgcG9zaXRpb24gb2YgJSguLiUpIGluIHRoZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZSxcbiUoJSkgd2lsbCBoYXZlIHRoZSBwb2x5bW9ycGhpYyB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKTogaXQgY2FuXG5iZSBjb25jYXRlbmF0ZWQgdG8gYW55IGZvcm1hdCB0eXBlLCBhbmQgb25seSBlbmZvcmNlcyB0aGUgY29uc3RyYWludFxudGhhdCBpdHMgJ2EgYW5kICdmIHBhcmFtZXRlcnMgYXJlIGVxdWFsIChubyBmb3JtYXQgYXJndW1lbnRzKSBhbmQgJ2RcbmFuZCAnZSBhcmUgZXF1YWwgKG5vIHJlYWRlciBhcmd1bWVudCkuXG5cblRoZSB3ZWFrZW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgdHlwZSBpbiB0aGUgR0FEVCB2ZXJzaW9uIGJyb2tlIHVzZXJcbmNvZGUgKGluIGZhY3QgaXQgZXNzZW50aWFsbHkgbWFkZSAlKC4uLiUpIHVudXNhYmxlIGV4Y2VwdCBhdCB0aGUgbGFzdFxucG9zaXRpb24gb2YgYSBmb3JtYXQpLiBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIHdvdWxkIG5vdCB3b3JrXG5hbnltb3JlOlxuXG4gIGZ1biBzZXAgLT5cbiAgICBGb3JtYXQucHJpbnRmIFwiZm9vJSglKWJhciUoJSliYXpcIiBzZXAgc2VwXG5cbkFzIHRoZSB0eXBlLWNoZWNrZXIgd291bGQgcmVxdWlyZSB0d28gKmluY29tcGF0aWJsZSogdHlwZXMgZm9yIHRoZSAlKCUpXG5pbiBkaWZmZXJlbnQgcG9zaXRpb25zLlxuXG5UaGUgc29sdXRpb24gdG8gcmVnYWluIGEgZ2VuZXJhbCB0eXBlIGZvciAlKC4uJSkgaXMgdG8gZ2VuZXJhbGl6ZSB0aGlzXG50ZWNobmlxdWUsIG5vdCBvbmx5IG9uIHRoZSAnZCwgJ2UgcGFyYW1ldGVycywgYnV0IG9uIGFsbCBzaXhcbnBhcmFtZXRlcnMgb2YgYSBmb3JtYXQ6IHdlIGludHJvZHVjZSBhIFwicmVsYXRpb25hbFwiIHR5cGVcbiAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbndob3NlIHZhbHVlcyBhcmUgcHJvb2ZzIHRoYXQgKCdhMSwgLi4sICdmMSkgYW5kICgnYTIsIC4uLCAnZjIpIG1vcmFsbHlcbmNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZm9ybWF0IHR5cGU6ICdhMSBpcyBvYnRhaW5lZCBmcm9tICdmMSwnYjEsJ2MxXG5pbiB0aGUgZXhhY3Qgc2FtZSB3YXkgdGhhdCAnYTIgaXMgb2J0YWluZWQgZnJvbSAnZjIsJ2IyLCdjMiwgZXRjLlxuXG5Gb3IgZXhhbXBsZSwgdGhlIHJlbGF0aW9uIGJldHdlZW4gdHdvIGZvcm1hdCB0eXBlcyBiZWdpbm5pbmcgd2l0aCBhIENoYXJcbnBhcmFtZXRlciBpcyBhcyBmb2xsb3dzOlxuXG58IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuSW4gdGhlIGdlbmVyYWwgY2FzZSwgdGhlIHRlcm0gc3RydWN0dXJlIG9mIGZtdHR5X3JlbCBpcyAoYWxtb3N0WzFdKVxuaXNvbW9ycGhpYyB0byB0aGUgZm10dHkgb2YgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uOiBldmVyeVxuY29uc3RydWN0b3IgaXMgcmUtcmVhZCB3aXRoIGEgYmluYXJ5LCByZWxhdGlvbmFsIHR5cGUsIGluc3RlYWQgb2YgdGhlXG5wcmV2aW91cyB1bmFyeSB0eXBpbmcuIGZtdHR5IGNhbiB0aGVuIGJlIHJlLWRlZmluZWQgYXMgdGhlIGRpYWdvbmFsIG9mXG5mbXR0eV9yZWw6XG5cbiAgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcblxuT25jZSB3ZSBoYXZlIHRoaXMgZm10dHlfcmVsIHR5cGUgaW4gcGxhY2UsIHdlIGNhbiBnaXZlIHRoZSBtb3JlXG5nZW5lcmFsIHR5cGUgdG8gJSguLi4lKTpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbldlIGFjY2VwdCBhbnkgZm9ybWF0ICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NikgKHRoaXMgaXNcbmNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGZvcm1hdCksIGJ1dCBhbHNvXG5yZXF1aXJlIGEgcHJvb2YgdGhhdCB0aGlzIGZvcm1hdCBpcyBpbiByZWxhdGlvbiB0byBhbm90aGVyIGZvcm1hdCB0aGF0XG5pcyBjb25jYXRlbmFibGUgdG8gdGhlIGZvcm1hdCB0YWlsLiBXaGVuIGV4ZWN1dGluZyBhICUoLi4uJSkgZm9ybWF0XG4oaW4gY2FtbGludGVybmFsRm9ybWF0Lm1sOm1ha2VfcHJpbnRmIG9yIHNjYW5mLm1sOm1ha2Vfc2NhbmYpLCB3ZVxudHJhbnN0eXBlIHRoZSBmb3JtYXQgYWxvbmcgdGhpcyByZWxhdGlvbiB1c2luZyB0aGUgJ3JlY2FzdCcgZnVuY3Rpb25cbnRvIHRyYW5zcG9zZSBiZXR3ZWVuIHJlbGF0ZWQgZm9ybWF0IHR5cGVzLlxuXG4gIHZhbCByZWNhc3QgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSkgZm10XG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXRcblxuTk9URSBbMV06IHRoZSB0eXBpbmcgb2YgRm9ybWF0X3N1YnN0X3R5IHJlcXVpcmVzIG5vdCBvbmUgZm9ybWF0IHR5cGUsIGJ1dFxudHdvLCBvbmUgdG8gZXN0YWJsaXNoIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdCBhcmd1bWVudCBhbmQgdGhlXG5maXJzdCBzaXggcGFyYW1ldGVycywgYW5kIHRoZSBvdGhlciBmb3IgdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0XG5hcmd1bWVudCBhbmQgdGhlIGxhc3Qgc2l4IHBhcmFtZXRlcnMuXG5cbnwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5XaGVuIHdlIGdlbmVyYXRlIGEgZm9ybWF0IEFTVCwgd2UgZ2VuZXJhdGUgZXhhY3RseSB0aGUgc2FtZSB3aXRuZXNzXG5mb3IgYm90aCByZWxhdGlvbnMsIGFuZCB0aGUgd2l0bmVzcy1jb252ZXJzaW9uIGZ1bmN0aW9ucyBpblxuY2FtbGludGVybmFsRm9ybWF0IGRvIHJlbHkgb24gdGhpcyBpbnZhcmlhbnQuIEZvciBleGFtcGxlLCB0aGVcbmZ1bmN0aW9uIHRoYXQgcHJvdmVzIHRoYXQgdGhlIHJlbGF0aW9uIGlzIHRyYW5zaXRpdmVcblxuICB2YWwgdHJhbnMgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMixcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuXG5kb2VzIGFzc3VtZSB0aGF0IHRoZSB0d28gaW5wdXRzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSB0ZXJtIHN0cnVjdHVyZVxuKGFuZCBpcyBvbmx5IGV2ZXJ5IHVzZWQgZm9yIGFyZ3VtZW50IHdpdG5lc3NlcyBvZiB0aGVcbkZvcm1hdF9zdWJzdF90eSBjb25zdHJ1Y3RvcikuXG4qKVxuXG4oKiBUeXBlIG9mIGEgYmxvY2sgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBibG9ja190eXBlID1cbiAgfCBQcF9oYm94ICAgKCogSG9yaXpvbnRhbCBibG9jayBubyBsaW5lIGJyZWFraW5nICopXG4gIHwgUHBfdmJveCAgICgqIFZlcnRpY2FsIGJsb2NrIGVhY2ggYnJlYWsgbGVhZHMgdG8gYSBuZXcgbGluZSAqKVxuICB8IFBwX2h2Ym94ICAoKiBIb3Jpem9udGFsLXZlcnRpY2FsIGJsb2NrOiBzYW1lIGFzIHZib3gsIGV4Y2VwdCBpZiB0aGlzIGJsb2NrXG4gICAgICAgICAgICAgICAgIGlzIHNtYWxsIGVub3VnaCB0byBmaXQgb24gYSBzaW5nbGUgbGluZSAqKVxuICB8IFBwX2hvdmJveCAoKiBIb3Jpem9udGFsIG9yIFZlcnRpY2FsIGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jayAqKVxuICB8IFBwX2JveCAgICAoKiBIb3Jpem9udGFsIG9yIEluZGVudCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2ssIG9yXG4gICAgICAgICAgICAgICAgIHdoZW4gaXQgbGVhZHMgdG8gYSBuZXcgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSAqKVxuICB8IFBwX2ZpdHMgICAoKiBJbnRlcm5hbCB1c2FnZTogd2hlbiBhIGJsb2NrIGZpdHMgb24gYSBzaW5nbGUgbGluZSAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBmb3JtYXR0aW5nX2xpdCA9XG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBdICAgKilcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQH0gICAqKVxuICB8IEJyZWFrIG9mIHN0cmluZyAqIGludCAqIGludCAgICAgICAgICAoKiBALCB8IEAgIHwgQDsgfCBAOzw+ICopXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA/ICAgKilcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFxcbiAgKilcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQC4gICAqKVxuICB8IE1hZ2ljX3NpemUgb2Ygc3RyaW5nICogaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPG4+ICopXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBAICAgKilcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQCUlICAqKVxuICB8IFNjYW5faW5kaWMgb2YgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAWCAgICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlbiA9XG4gIHwgT3Blbl90YWcgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEB7ICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cbiAgfCBPcGVuX2JveCA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQFsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCB0eXBlIGVsZW1lbnRzLiAqKVxuKCogSW4gcGFydGljdWxhciB1c2VkIHRvIHJlcHJlc2VudCAlKC4uLiUpIGFuZCAley4uLiV9IGNvbnRlbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5hbmQgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCA9XG4gIHwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgU3RyaW5nX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoc3RyaW5nIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgc3RyaW5nIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQzMl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQzMiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDMyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IE5hdGl2ZWludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbmQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKG5hdGl2ZWludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIG5hdGl2ZWludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQ2NF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQ2NCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDY0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEZsb2F0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGZsb2F0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgZmxvYXQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQm9vbF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVCICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoYm9vbCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGJvb2wgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBGb3JtYXRfYXJnX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG4gIHwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnMuICopXG4gIHwgQWxwaGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAneCAtPiAnYzEpIC0+ICd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAneCAtPiAnYzIpIC0+ICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFRoZXRhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ2MxKSAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ2MyKSAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBBbnlfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFVzZWQgZm9yIGN1c3RvbSBmb3JtYXRzICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IFJlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBFbmRfb2ZfZm10dHkgOlxuICAgICAgKCdmMSwgJ2IxLCAnYzEsICdkMSwgJ2QxLCAnZjEsXG4gICAgICAgJ2YyLCAnYjIsICdjMiwgJ2QyLCAnZDIsICdmMikgZm10dHlfcmVsXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IGVsZW1lbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgPVxuICB8IENoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVDICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFN0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVTICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDMyIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgTmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5bZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBuYXRpdmVpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDY0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgICAgIGZsb2F0X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBmbG9hdCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEJvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbYkJdICopXG4gICAgICAoJ3gsIGJvb2wgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbHVzaCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlISAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBhYmMgKilcbiAgICAgIHN0cmluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENoYXJfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIHggKilcbiAgICAgIGNoYXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IEZvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBBbHBoYSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICd4IC0+ICdjKSAtPiAneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBUaGV0YSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICdjKSAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3I6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgIGZvcm1hdHRpbmdfbGl0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0dGluZ19nZW4gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UxLCAnZjEpIGZvcm1hdHRpbmdfZ2VuICpcbiAgICAgICgnZjEsICdiLCAnYywgJ2UxLCAnZTIsICdmMikgZm10IC0+ICgnYTEsICdiLCAnYywgJ2QxLCAnZTIsICdmMikgZm10XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCAtPiAnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoc3RyaW5nIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChpbnQgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJTBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJZ25vcmVkX3BhcmFtIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGlnbm9yZWQgKiAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBDdXN0b20gcHJpbnRpbmcgZm9ybWF0IChQUiM2NDUyLCBHUFIjMTQwKVxuXG4gICAgIFdlIGluY2x1ZGUgYSB0eXBlIEN1c3RvbSBvZiBcImN1c3RvbSBjb252ZXJ0ZXJzXCIsIHdoZXJlIGFuXG4gICAgIGFyYml0cmFyeSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IG9uZSBvciBtb3JlXG4gICAgIGFyZ3VtZW50cy4gVGhlcmUgaXMgbm8gc3ludGF4IGZvciBjdXN0b20gY29udmVydGVycywgaXQgaXMgb25seVxuICAgICBpbnRlbmRlZCBmb3IgY3VzdG9tIHByb2Nlc3NvcnMgdGhhdCB3aXNoIHRvIHJlbHkgb24gdGhlXG4gICAgIHN0ZGxpYi1kZWZpbmVkIGZvcm1hdCBHQURUcy5cblxuICAgICBGb3IgaW5zdGFuY2UgYSBwcmUtcHJvY2Vzc29yIGNvdWxkIGNob29zZSB0byBpbnRlcnByZXQgc3RyaW5nc1xuICAgICBwcmVmaXhlZCB3aXRoIFtcIiFcIl0gYXMgZm9ybWF0IHN0cmluZ3Mgd2hlcmUgWyV7eyAuLi4gfX1dIGlzXG4gICAgIGEgc3BlY2lhbCBmb3JtIHRvIHBhc3MgYSB0b19zdHJpbmcgZnVuY3Rpb24sIHNvIHRoYXQgb25lIGNvdWxkXG4gICAgIHdyaXRlOlxuXG4gICAgIHtbXG4gICAgICAgdHlwZSB0ID0geyB4IDogaW50OyB5IDogaW50IH1cblxuICAgICAgIGxldCBzdHJpbmdfb2ZfdCB0ID0gUHJpbnRmLnNwcmludGYgXCJ7IHggPSAlZDsgeSA9ICVkIH1cIiB0LnggdC55XG5cbiAgICAgICBQcmludGYucHJpbnRmICFcInQgPSAle3tzdHJpbmdfb2ZfdH19XCIgeyB4ID0gNDI7IHkgPSA0MiB9XG4gICAgIF19XG4gICopXG4gIHwgQ3VzdG9tIDpcbiAgICAgICgnYSwgJ3gsICd5KSBjdXN0b21fYXJpdHkgKiAodW5pdCAtPiAneCkgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogZW5kIG9mIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gKilcbiAgfCBFbmRfb2ZfZm9ybWF0IDpcbiAgICAgICAgKCdmLCAnYiwgJ2MsICdlLCAnZSwgJ2YpIGZtdFxuXG4oKioqKVxuXG4oKiBUeXBlIGZvciBpZ25vcmVkIHBhcmFtZXRlcnMgKHNlZSBcIiVfXCIpLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkID1cbiAgfCBJZ25vcmVkX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9DICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfcyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfUyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9sZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9uZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9MZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9mICopXG4gICAgICBwYWRfb3B0aW9uICogcHJlY19vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Jvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0IgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3suLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9yZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICopXG4gICAgICAoJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0IC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXzBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPVxuICBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAqIHN0cmluZ1xuXG5sZXQgcmVjIGVyYXNlX3JlbCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAoYSwgYiwgYywgZCwgZSwgZixcbiAgIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIF90eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGUgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0IHR5cGVzLiAqKVxuKCogVXNlZCBieTpcbiAgICogcmVhZGVyX25iX3VuaWZpZXJfb2ZfZm10dHkgdG8gY291bnQgcmVhZGVycyBpbiBhbiBmbXR0eSxcbiAgICogU2NhbmYudGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyB0byBleHRyYWN0IHJlYWRlcnMgaW5zaWRlICUoLi4uJSksXG4gICAqIENhbWxpbnRlcm5hbEZvcm1hdC5mbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCB0byBleHRyYWN0IGZvcm1hdCB0eXBlLiAqKVxuXG4oKlxubGV0IHJlYyBjb25jYXRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdHR5ID1cbiopXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAgICAgIGcxIGoxIGcyIGoyXG4gIC5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGQxLCBhMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGQyLCBhMikgZm10dHlfcmVsIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZTEsIGYxLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZTIsIGYyKSBmbXR0eV9yZWwgPVxuZnVuIGZtdHR5MSBmbXR0eTIgLT4gbWF0Y2ggZm10dHkxIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEVuZF9vZl9mbXR0eSAtPiBmbXR0eTJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXRzLiAqKVxubGV0IHJlYyBjb25jYXRfZm10IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdCA9XG5mdW4gZm10MSBmbXQyIC0+IG1hdGNoIGZtdDEgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIFN0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIENhbWxfc3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDY0IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBDaGFyIChyZXN0KSAtPlxuICAgIENoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgQ2FtbF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgQm9vbCAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgQWxwaGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBUaGV0YSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBDdXN0b20gKGFyaXR5LCBmLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBSZWFkZXIgcmVzdCAtPlxuICAgIFJlYWRlciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIEZsdXNoIChjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nX2xpdGVyYWwgKHN0ciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgQ2hhcl9saXRlcmFsICAgKGNociwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmcgICAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgKHJlc3QpIC0+XG4gICAgU2Nhbl9uZXh0X2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBJZ25vcmVkX3BhcmFtIChpZ24sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBmbXQyXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBHYWJyaWVsIFNjaGVyZXIsIHByb2pldCBQYXJ0b3V0LCBJTlJJQSBQYXJpcy1TYWNsYXkgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENhbWxpbnRlcm5hbEF0b21pYyBpcyBhIGRlcGVuZGVuY3kgb2YgU3RkbGliLCBzbyBpdCBpcyBjb21waWxlZCB3aXRoXG4gICAtbm9wZXJ2YXNpdmVzLiAqKVxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFdlIGFyZSBub3QgcmV1c2luZyAoJ2EgcmVmKSBkaXJlY3RseSB0byBtYWtlIGl0IGVhc2llciB0byByZWFzb25cbiAgIGFib3V0IGF0b21pY2l0eSBpZiB3ZSB3aXNoIHRvOiBldmVuIGluIGEgc2VxdWVudGlhbCBpbXBsZW1lbnRhdGlvbixcbiAgIHNpZ25hbHMgYW5kIG90aGVyIGFzeW5jaHJvbm91cyBjYWxsYmFja3MgbWlnaHQgYnJlYWsgYXRvbWljaXR5LiAqKVxudHlwZSAnYSB0ID0ge211dGFibGUgdjogJ2F9XG5cbmxldCBtYWtlIHYgPSB7dn1cbmxldCBnZXQgciA9IHIudlxubGV0IHNldCByIHYgPSByLnYgPC0gdlxuXG4oKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgc2V0IHRvIG5ldmVyIGJlIGlubGluZWQ6IEZsYW1iZGEgaXNcbiAgIGFsbG93ZWQgdG8gbW92ZSBzdXJyb3VuZGluZyBjb2RlIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbixcbiAgIGluY2x1ZGluZyBhbGxvY2F0aW9ucy4gKilcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGV4Y2hhbmdlIHIgdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSB2O1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXRbQGlubGluZSBuZXZlcl0gY29tcGFyZV9hbmRfc2V0IHIgc2VlbiB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgaWYgY3VyID09IHNlZW4gdGhlbiAoXG4gICAgci52IDwtIHY7XG4gICAgKCogRU5EIEFUT01JQyAqKVxuICAgIHRydWVcbiAgKSBlbHNlXG4gICAgZmFsc2VcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGZldGNoX2FuZF9hZGQgciBuID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIChjdXIgKyBuKTtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0IGluY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByIDEpXG5sZXQgZGVjciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgKC0xKSlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXhjZXB0aW9ucyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gICgqIGZvciBydW50aW1lL2ZhaWxfbmF0LmMgKilcbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmFycmF5X2JvdW5kX2Vycm9yXCJcbiAgICAoSW52YWxpZF9hcmd1bWVudCBcImluZGV4IG91dCBvZiBib3VuZHNcIilcblxuZXh0ZXJuYWwgcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZVwiXG5leHRlcm5hbCByYWlzZV9ub3RyYWNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2Vfbm90cmFjZVwiXG5cbmxldCBmYWlsd2l0aCBzID0gcmFpc2UoRmFpbHVyZSBzKVxubGV0IGludmFsaWRfYXJnIHMgPSByYWlzZShJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbmV4Y2VwdGlvbiBFeGl0XG5leGNlcHRpb24gTWF0Y2hfZmFpbHVyZSA9IE1hdGNoX2ZhaWx1cmVcbmV4Y2VwdGlvbiBBc3NlcnRfZmFpbHVyZSA9IEFzc2VydF9mYWlsdXJlXG5leGNlcHRpb24gSW52YWxpZF9hcmd1bWVudCA9IEludmFsaWRfYXJndW1lbnRcbmV4Y2VwdGlvbiBGYWlsdXJlID0gRmFpbHVyZVxuZXhjZXB0aW9uIE5vdF9mb3VuZCA9IE5vdF9mb3VuZFxuZXhjZXB0aW9uIE91dF9vZl9tZW1vcnkgPSBPdXRfb2ZfbWVtb3J5XG5leGNlcHRpb24gU3RhY2tfb3ZlcmZsb3cgPSBTdGFja19vdmVyZmxvd1xuZXhjZXB0aW9uIFN5c19lcnJvciA9IFN5c19lcnJvclxuZXhjZXB0aW9uIEVuZF9vZl9maWxlID0gRW5kX29mX2ZpbGVcbmV4Y2VwdGlvbiBEaXZpc2lvbl9ieV96ZXJvID0gRGl2aXNpb25fYnlfemVyb1xuZXhjZXB0aW9uIFN5c19ibG9ja2VkX2lvID0gU3lzX2Jsb2NrZWRfaW9cbmV4Y2VwdGlvbiBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSA9IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG5cbigqIENvbXBvc2l0aW9uIG9wZXJhdG9ycyAqKVxuXG5leHRlcm5hbCAoIHw+ICkgOiAnYSAtPiAoJ2EgLT4gJ2IpIC0+ICdiID0gXCIlcmV2YXBwbHlcIlxuZXh0ZXJuYWwgKCBAQCApIDogKCdhIC0+ICdiKSAtPiAnYSAtPiAnYiA9IFwiJWFwcGx5XCJcblxuKCogRGVidWdnaW5nICopXG5cbmV4dGVybmFsIF9fTE9DX18gOiBzdHJpbmcgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fRklMRV9fIDogc3RyaW5nID0gXCIlbG9jX0ZJTEVcIlxuZXh0ZXJuYWwgX19MSU5FX18gOiBpbnQgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX01PRFVMRV9fIDogc3RyaW5nID0gXCIlbG9jX01PRFVMRVwiXG5leHRlcm5hbCBfX1BPU19fIDogc3RyaW5nICogaW50ICogaW50ICogaW50ID0gXCIlbG9jX1BPU1wiXG5leHRlcm5hbCBfX0ZVTkNUSU9OX18gOiBzdHJpbmcgPSBcIiVsb2NfRlVOQ1RJT05cIlxuXG5leHRlcm5hbCBfX0xPQ19PRl9fIDogJ2EgLT4gc3RyaW5nICogJ2EgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fTElORV9PRl9fIDogJ2EgLT4gaW50ICogJ2EgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX1BPU19PRl9fIDogJ2EgLT4gKHN0cmluZyAqIGludCAqIGludCAqIGludCkgKiAnYSA9IFwiJWxvY19QT1NcIlxuXG4oKiBDb21wYXJpc29ucyAqKVxuXG5leHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5leHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuZXh0ZXJuYWwgKCA8ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5leHRlcm5hbCAoID49ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcbmV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxubGV0IG1pbiB4IHkgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCAhPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxXCJcblxuKCogQm9vbGVhbiBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggb3IgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbmV4dGVybmFsICggfHwgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcblxuKCogSW50ZWdlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0gKSA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgKCB+KyApIDogaW50IC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCAoIC0gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsICggKiApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgKCAvICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCAoIG1vZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcblxuZXh0ZXJuYWwgKCBsYW5kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCAoIGxvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCAoIGx4b3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcblxubGV0IGxub3QgeCA9IHggbHhvciAoLTEpXG5cbmV4dGVybmFsICggbHNsICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCAoIGxzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxuZXh0ZXJuYWwgKCBhc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcblxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5cbigqIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LS4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgKCB+Ky4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgKCArLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCAoIC0uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsICggKi4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgKCAvLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCAoICoqICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxcCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzFwX2Zsb2F0XCIgXCJjYW1sX2xvZzFwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Npbl9mbG9hdFwiIFwic2luXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5oX2Zsb2F0XCIgXCJzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbmhfZmxvYXRcIiBcImNhbWxfYXNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc3FydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NxcnRfZmxvYXRcIiBcInNxcnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuaF9mbG9hdFwiIFwiY2FtbF9hdGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnNfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcbmV4dGVybmFsIGNvcHlzaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG5leHRlcm5hbCBmbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgaW50X29mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBmbG9hdF9vZl9iaXRzIDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1wiIFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzX3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxubGV0IGluZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5lZ19pbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHhGRl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuYW4gPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDFMXG5sZXQgbWF4X2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0VGX0ZGX0ZGX0ZGX0ZGX0ZGX0ZGTFxubGV0IG1pbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgwMF8xMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBlcHNpbG9uX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDNDX0IwXzAwXzAwXzAwXzAwXzAwXzAwTFxuXG50eXBlIGZwY2xhc3MgPVxuICAgIEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuZXh0ZXJuYWwgY2xhc3NpZnlfZmxvYXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gZnBjbGFzcyA9XG4gIFwiY2FtbF9jbGFzc2lmeV9mbG9hdFwiIFwiY2FtbF9jbGFzc2lmeV9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cblxuKCogU3RyaW5nIGFuZCBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGVzIFN0cmluZyBhbmQgQnl0ZXMgKilcblxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2xlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19jcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHN0cmluZ19ibGl0IDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgKCBeICkgczEgczIgPVxuICBsZXQgbDEgPSBzdHJpbmdfbGVuZ3RoIHMxIGFuZCBsMiA9IHN0cmluZ19sZW5ndGggczIgaW5cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgKGwxICsgbDIpIGluXG4gIHN0cmluZ19ibGl0IHMxIDAgcyAwIGwxO1xuICBzdHJpbmdfYmxpdCBzMiAwIHMgbDEgbDI7XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBDaGFyICopXG5cbmV4dGVybmFsIGludF9vZl9jaGFyIDogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hhcl9vZl9pbnQgOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcbmxldCBjaGFyX29mX2ludCBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiY2hhcl9vZl9pbnRcIiBlbHNlIHVuc2FmZV9jaGFyX29mX2ludCBuXG5cbigqIFVuaXQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogUGFpciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGZzdCA6ICdhICogJ2IgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgc25kIDogJ2EgKiAnYiAtPiAnYiA9IFwiJWZpZWxkMVwiXG5cbigqIFJlZmVyZW5jZXMgKilcblxudHlwZSAnYSByZWYgPSB7IG11dGFibGUgY29udGVudHMgOiAnYSB9XG5leHRlcm5hbCByZWYgOiAnYSAtPiAnYSByZWYgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCAoIDo9ICkgOiAnYSByZWYgLT4gJ2EgLT4gdW5pdCA9IFwiJXNldGZpZWxkMFwiXG5leHRlcm5hbCBpbmNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlaW5jclwiXG5leHRlcm5hbCBkZWNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlZGVjclwiXG5cbigqIFJlc3VsdCB0eXBlICopXG5cbnR5cGUgKCdhLCdiKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdiXG5cbigqIFN0cmluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQgOiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5cbmxldCBzdHJpbmdfb2ZfYm9vbCBiID1cbiAgaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG5sZXQgYm9vbF9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBfIC0+IGludmFsaWRfYXJnIFwiYm9vbF9vZl9zdHJpbmdcIlxuXG5sZXQgYm9vbF9vZl9zdHJpbmdfb3B0ID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiBTb21lIHRydWVcbiAgfCBcImZhbHNlXCIgLT4gU29tZSBmYWxzZVxuICB8IF8gLT4gTm9uZVxuXG5sZXQgc3RyaW5nX29mX2ludCBuID1cbiAgZm9ybWF0X2ludCBcIiVkXCIgblxuXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcblxubGV0IGludF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgc3RyaW5nX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5cbmxldCB2YWxpZF9mbG9hdF9sZXhlbSBzID1cbiAgbGV0IGwgPSBzdHJpbmdfbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPj0gbCB0aGVuIHMgXiBcIi5cIiBlbHNlXG4gICAgbWF0Y2ggc3RyaW5nX2dldCBzIGkgd2l0aFxuICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBsb29wIChpICsgMSlcbiAgICB8IF8gLT4gc1xuICBpblxuICBsb29wIDBcblxubGV0IHN0cmluZ19vZl9mbG9hdCBmID0gdmFsaWRfZmxvYXRfbGV4ZW0gKGZvcm1hdF9mbG9hdCBcIiUuMTJnXCIgZilcblxuZXh0ZXJuYWwgZmxvYXRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5cbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChmbG9hdF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgTGlzdCAqKVxuXG5sZXQgcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgaGQgOjogdGwgLT4gaGQgOjogKHRsIEAgbDIpXG5cbigqIEkvTyBvcGVyYXRpb25zICopXG5cbnR5cGUgaW5fY2hhbm5lbFxudHlwZSBvdXRfY2hhbm5lbFxuXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDogaW50IC0+IG91dF9jaGFubmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcIlxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX2luIDogaW50IC0+IGluX2NoYW5uZWwgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXCJcblxubGV0IHN0ZGluID0gb3Blbl9kZXNjcmlwdG9yX2luIDBcbmxldCBzdGRvdXQgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDFcbmxldCBzdGRlcnIgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDJcblxuKCogR2VuZXJhbCBvdXRwdXQgZnVuY3Rpb25zICopXG5cbnR5cGUgb3Blbl9mbGFnID1cbiAgICBPcGVuX3Jkb25seSB8IE9wZW5fd3Jvbmx5IHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0IHwgT3Blbl90cnVuYyB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5IHwgT3Blbl90ZXh0IHwgT3Blbl9ub25ibG9ja1xuXG5leHRlcm5hbCBvcGVuX2Rlc2MgOiBzdHJpbmcgLT4gb3Blbl9mbGFnIGxpc3QgLT4gaW50IC0+IGludCA9IFwiY2FtbF9zeXNfb3BlblwiXG5cbmV4dGVybmFsIHNldF9vdXRfY2hhbm5lbF9uYW1lOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5fb3V0X2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX291dChvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9vdXRfY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9vdXQgbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fdGV4dF0gMG82NjYgbmFtZVxuXG5sZXQgb3Blbl9vdXRfYmluIG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX2JpbmFyeV0gMG82NjYgbmFtZVxuXG5leHRlcm5hbCBmbHVzaCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfZmx1c2hcIlxuXG5leHRlcm5hbCBvdXRfY2hhbm5lbHNfbGlzdCA6IHVuaXQgLT4gb3V0X2NoYW5uZWwgbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3RcIlxuXG5sZXQgZmx1c2hfYWxsICgpID1cbiAgbGV0IHJlYyBpdGVyID0gZnVuY3Rpb25cbiAgICAgIFtdIC0+ICgpXG4gICAgfCBhOjpsIC0+XG4gICAgICAgIGJlZ2luIHRyeVxuICAgICAgICAgICAgZmx1c2ggYVxuICAgICAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAgICAgKCkgKCogaWdub3JlIGNoYW5uZWxzIGNsb3NlZCBkdXJpbmcgYSBwcmVjZWRpbmcgZmx1c2guICopXG4gICAgICAgIGVuZDtcbiAgICAgICAgaXRlciBsXG4gIGluIGl0ZXIgKG91dF9jaGFubmVsc19saXN0ICgpKVxuXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0IDogb3V0X2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dF9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0X3N0cmluZyA6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dFwiXG5cbmV4dGVybmFsIG91dHB1dF9jaGFyIDogb3V0X2NoYW5uZWwgLT4gY2hhciAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcblxubGV0IG91dHB1dF9ieXRlcyBvYyBzID1cbiAgdW5zYWZlX291dHB1dCBvYyBzIDAgKGJ5dGVzX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0X3N0cmluZyBvYyBzID1cbiAgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyAwIChzdHJpbmdfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXQgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXQgb2MgcyBvZnMgbGVuXG5cbmxldCBvdXRwdXRfc3Vic3RyaW5nIG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBzdHJpbmdfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dF9zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgb2ZzIGxlblxuXG5leHRlcm5hbCBvdXRwdXRfYnl0ZSA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcbmV4dGVybmFsIG91dHB1dF9iaW5hcnlfaW50IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2ludFwiXG5cbmV4dGVybmFsIG1hcnNoYWxfdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIC0+IHVuaXQgbGlzdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX291dHB1dF92YWx1ZVwiXG5sZXQgb3V0cHV0X3ZhbHVlIGNoYW4gdiA9IG1hcnNoYWxfdG9fY2hhbm5lbCBjaGFuIHYgW11cblxuZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dFwiXG5leHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19vdXRcIlxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9vdXRfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2Vfb3V0IG9jID0gZmx1c2ggb2M7IGNsb3NlX291dF9jaGFubmVsIG9jXG5sZXQgY2xvc2Vfb3V0X25vZXJyIG9jID1cbiAgKHRyeSBmbHVzaCBvYyB3aXRoIF8gLT4gKCkpO1xuICAodHJ5IGNsb3NlX291dF9jaGFubmVsIG9jIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9vdXQgOiBvdXRfY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogR2VuZXJhbCBpbnB1dCBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgc2V0X2luX2NoYW5uZWxfbmFtZTogaW5fY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5faW5fZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3JfaW4ob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfaW5fY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9pbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX3RleHRdIDAgbmFtZVxuXG5sZXQgb3Blbl9pbl9iaW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl9iaW5hcnldIDAgbmFtZVxuXG5leHRlcm5hbCBpbnB1dF9jaGFyIDogaW5fY2hhbm5lbCAtPiBjaGFyID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuXG5leHRlcm5hbCB1bnNhZmVfaW5wdXQgOiBpbl9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfaW5wdXRcIlxuXG5sZXQgaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dFwiXG4gIGVsc2UgdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVjIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiAoKSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuIGluXG4gICAgaWYgciA9IDBcbiAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgKG9mcyArIHIpIChsZW4gLSByKVxuICBlbmRcblxubGV0IHJlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcInJlYWxseV9pbnB1dFwiXG4gIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgbGVuIGluXG4gIHJlYWxseV9pbnB1dCBpYyBzIDAgbGVuO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuZXh0ZXJuYWwgaW5wdXRfc2Nhbl9saW5lIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXCJcblxubGV0IGlucHV0X2xpbmUgY2hhbiA9XG4gIGxldCByZWMgYnVpbGRfcmVzdWx0IGJ1ZiBwb3MgPSBmdW5jdGlvblxuICAgIFtdIC0+IGJ1ZlxuICB8IGhkIDo6IHRsIC0+XG4gICAgICBsZXQgbGVuID0gYnl0ZXNfbGVuZ3RoIGhkIGluXG4gICAgICBieXRlc19ibGl0IGhkIDAgYnVmIChwb3MgLSBsZW4pIGxlbjtcbiAgICAgIGJ1aWxkX3Jlc3VsdCBidWYgKHBvcyAtIGxlbikgdGwgaW5cbiAgbGV0IHJlYyBzY2FuIGFjY3UgbGVuID1cbiAgICBsZXQgbiA9IGlucHV0X3NjYW5fbGluZSBjaGFuIGluXG4gICAgaWYgbiA9IDAgdGhlbiBiZWdpbiAgICAgICAgICAgICAgICAgICAoKiBuID0gMDogd2UgYXJlIGF0IEVPRiAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICB8IF8gIC0+IGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIGFjY3VcbiAgICBlbmQgZWxzZSBpZiBuID4gMCB0aGVuIGJlZ2luICAgICAgICAgICgqIG4gPiAwOiBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlciAqKVxuICAgICAgbGV0IHJlcyA9IGJ5dGVzX2NyZWF0ZSAobiAtIDEpIGluXG4gICAgICBpZ25vcmUgKHVuc2FmZV9pbnB1dCBjaGFuIHJlcyAwIChuIC0gMSkpO1xuICAgICAgaWdub3JlIChpbnB1dF9jaGFyIGNoYW4pOyAgICAgICAgICAgKCogc2tpcCB0aGUgbmV3bGluZSAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJlc1xuICAgICAgfCAgXyAtPiBsZXQgbGVuID0gbGVuICsgbiAtIDEgaW5cbiAgICAgICAgICAgICAgYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gKHJlcyA6OiBhY2N1KVxuICAgIGVuZCBlbHNlIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgKCogbiA8IDA6IG5ld2xpbmUgbm90IGZvdW5kICopXG4gICAgICBsZXQgYmVnID0gYnl0ZXNfY3JlYXRlICgtbikgaW5cbiAgICAgIGlnbm9yZSh1bnNhZmVfaW5wdXQgY2hhbiBiZWcgMCAoLW4pKTtcbiAgICAgIHNjYW4gKGJlZyA6OiBhY2N1KSAobGVuIC0gbilcbiAgICBlbmRcbiAgaW4gYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyAoc2NhbiBbXSAwKVxuXG5leHRlcm5hbCBpbnB1dF9ieXRlIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5leHRlcm5hbCBpbnB1dF9iaW5hcnlfaW50IDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfaW50XCJcbmV4dGVybmFsIGlucHV0X3ZhbHVlIDogaW5fY2hhbm5lbCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZVwiXG5leHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXCJcbmV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19pblwiXG5leHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9pbiA6IGluX2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9pbl9ub2VyciBpYyA9ICh0cnkgY2xvc2VfaW4gaWMgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX2luIDogaW5fY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIG91dHB1dCAqKVxuXG5sZXQgcHJpbnRfY2hhciBjID0gb3V0cHV0X2NoYXIgc3Rkb3V0IGNcbmxldCBwcmludF9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IHNcbmxldCBwcmludF9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZG91dCBzXG5sZXQgcHJpbnRfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByaW50X2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJpbnRfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRvdXQgczsgb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcbmxldCBwcmludF9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBlcnJvciAqKVxuXG5sZXQgcHJlcnJfY2hhciBjID0gb3V0cHV0X2NoYXIgc3RkZXJyIGNcbmxldCBwcmVycl9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIHNcbmxldCBwcmVycl9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZGVyciBzXG5sZXQgcHJlcnJfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByZXJyX2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJlcnJfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRlcnIgczsgb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcbmxldCBwcmVycl9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcblxuKCogSW5wdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGlucHV0ICopXG5cbmxldCByZWFkX2xpbmUgKCkgPSBmbHVzaCBzdGRvdXQ7IGlucHV0X2xpbmUgc3RkaW5cbmxldCByZWFkX2ludCAoKSA9IGludF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9pbnRfb3B0ICgpID0gaW50X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdCAoKSA9IGZsb2F0X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0X29wdCAoKSA9IGZsb2F0X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5cbigqIE9wZXJhdGlvbnMgb24gbGFyZ2UgZmlsZXMgKilcblxubW9kdWxlIExhcmdlRmlsZSA9XG4gIHN0cnVjdFxuICAgIGV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dF82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19vdXRfNjRcIlxuICAgIGV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludDY0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gICAgZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXzY0XCJcbiAgICBleHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19pbl82NFwiXG4gICAgZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gIGVuZFxuXG4oKiBGb3JtYXRzICopXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDZcbiAgID0gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG4gICA9IEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZtdFxuICAgICAgICAgICAgICAgKiBzdHJpbmdcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIGZvcm1hdDQgPSAoJ2EsICdiLCAnYywgJ2MsICdjLCAnZCkgZm9ybWF0NlxuXG50eXBlICgnYSwgJ2IsICdjKSBmb3JtYXQgPSAoJ2EsICdiLCAnYywgJ2MpIGZvcm1hdDRcblxubGV0IHN0cmluZ19vZl9mb3JtYXQgKEZvcm1hdCAoX2ZtdCwgc3RyKSkgPSBzdHJcblxuZXh0ZXJuYWwgZm9ybWF0X29mX3N0cmluZyA6XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9IFwiJWlkZW50aXR5XCJcblxubGV0ICggXl4gKSAoRm9ybWF0IChmbXQxLCBzdHIxKSkgKEZvcm1hdCAoZm10Miwgc3RyMikpID1cbiAgRm9ybWF0IChDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuY29uY2F0X2ZtdCBmbXQxIGZtdDIsXG4gICAgICAgICAgc3RyMSBeIFwiJSxcIiBeIHN0cjIpXG5cbigqIE1pc2NlbGxhbmVvdXMgKilcblxuZXh0ZXJuYWwgc3lzX2V4aXQgOiBpbnQgLT4gJ2EgPSBcImNhbWxfc3lzX2V4aXRcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IENhbWxpbnRlcm5hbEF0b21pYy5tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gIGxldCBtb2R1bGUgQXRvbWljID0gQ2FtbGludGVybmFsQXRvbWljIGluXG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gQXRvbWljLm1ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2F0X2V4aXQgKCkgPSAoQ2FtbGludGVybmFsQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uKSAoKVxuXG5sZXQgZXhpdCByZXRjb2RlID1cbiAgZG9fYXRfZXhpdCAoKTtcbiAgc3lzX2V4aXQgcmV0Y29kZVxuXG5sZXQgXyA9IHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIgZG9fYXRfZXhpdFxuXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBuYWtlZF9wb2ludGVyc19jaGVja2VkIDogdW5pdCAtPiBib29sXG4gID0gXCJjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkXCJcbmxldCAoKSA9IGlmIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgKCkgdGhlbiBhdF9leGl0IG1ham9yXG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICA9IEFyZ1xubW9kdWxlIEFycmF5ICAgICAgICA9IEFycmF5XG5tb2R1bGUgQXJyYXlMYWJlbHMgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgPSBBdG9taWNcbm1vZHVsZSBCaWdhcnJheSAgICAgPSBCaWdhcnJheVxubW9kdWxlIEJvb2wgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgPSBCdWZmZXJcbm1vZHVsZSBCeXRlcyAgICAgICAgPSBCeXRlc1xubW9kdWxlIEJ5dGVzTGFiZWxzICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgID0gQ2FsbGJhY2tcbm1vZHVsZSBDaGFyICAgICAgICAgPSBDaGFyXG5tb2R1bGUgQ29tcGxleCAgICAgID0gQ29tcGxleFxubW9kdWxlIERpZ2VzdCAgICAgICA9IERpZ2VzdFxubW9kdWxlIEVpdGhlciAgICAgICA9IEVpdGhlclxubW9kdWxlIEVwaGVtZXJvbiAgICA9IEVwaGVtZXJvblxubW9kdWxlIEZpbGVuYW1lICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgID0gRmxvYXRcbm1vZHVsZSBGb3JtYXQgICAgICAgPSBGb3JtYXRcbm1vZHVsZSBGdW4gICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgPSBHY1xubW9kdWxlIEdlbmxleCAgICAgICA9IEdlbmxleFxubW9kdWxlIEhhc2h0YmwgICAgICA9IEhhc2h0Ymxcbm1vZHVsZSBJbl9jaGFubmVsICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgID0gSW50XG5tb2R1bGUgSW50MzIgICAgICAgID0gSW50MzJcbm1vZHVsZSBJbnQ2NCAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICA9IExhenlcbm1vZHVsZSBMZXhpbmcgICAgICAgPSBMZXhpbmdcbm1vZHVsZSBMaXN0ICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgID0gTGlzdExhYmVsc1xubW9kdWxlIE1hcCAgICAgICAgICA9IE1hcFxubW9kdWxlIE1hcnNoYWwgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgPSBNb3JlTGFiZWxzXG5tb2R1bGUgTmF0aXZlaW50ICAgID0gTmF0aXZlaW50XG5tb2R1bGUgT2JqICAgICAgICAgID0gT2JqXG5tb2R1bGUgT28gICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgPSBPcHRpb25cbm1vZHVsZSBPdXRfY2hhbm5lbCAgPSBPdXRfY2hhbm5lbFxubW9kdWxlIFBhcnNpbmcgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQZXJ2YXNpdmVzICAgPSBQZXJ2YXNpdmVzXG5tb2R1bGUgUHJpbnRleGMgICAgID0gUHJpbnRleGNcbm1vZHVsZSBQcmludGYgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgPSBRdWV1ZVxubW9kdWxlIFJhbmRvbSAgICAgICA9IFJhbmRvbVxubW9kdWxlIFJlc3VsdCAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICA9IFNjYW5mXG5tb2R1bGUgU2VxICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgID0gU2V0XG5tb2R1bGUgU3RhY2sgICAgICAgID0gU3RhY2tcbm1vZHVsZSBTdGRMYWJlbHMgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJlYW0gICAgICAgPSBTdHJlYW1cbm1vZHVsZSBTdHJpbmcgICAgICAgPSBTdHJpbmdcbm1vZHVsZSBTdHJpbmdMYWJlbHMgPSBTdHJpbmdMYWJlbHNcbm1vZHVsZSBTeXMgICAgICAgICAgPSBTeXNcbm1vZHVsZSBVY2hhciAgICAgICAgPSBVY2hhclxubW9kdWxlIFVuaXQgICAgICAgICA9IFVuaXRcbm1vZHVsZSBXZWFrICAgICAgICAgPSBXZWFrXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICBKZXJlbWllIERpbWlubywgSmFuZSBTdHJlZXQgRXVyb3BlICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE3IEphbmUgU3RyZWV0IEdyb3VwIExMQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqKiBAZGVwcmVjYXRlZCBVc2UgeyFTdGRsaWJ9ICopXG5cbmV4dGVybmFsIHJhaXNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2VcIlxuZXh0ZXJuYWwgcmFpc2Vfbm90cmFjZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlX25vdHJhY2VcIlxubGV0IGludmFsaWRfYXJnID0gaW52YWxpZF9hcmdcbmxldCBmYWlsd2l0aCA9IGZhaWx3aXRoXG5leGNlcHRpb24gRXhpdFxuZXh0ZXJuYWwgKCA9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuZXh0ZXJuYWwgKCA8PiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcbmV4dGVybmFsICggPCApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcbmV4dGVybmFsICggPiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJ0aGFuXCJcbmV4dGVybmFsICggPD0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzZXF1YWxcIlxuZXh0ZXJuYWwgKCA+PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJlcXVhbFwiXG5leHRlcm5hbCBjb21wYXJlIDogJ2EgLT4gJ2EgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5sZXQgbWluID0gbWluXG5sZXQgbWF4ID0gbWF4XG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCAhPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxXCJcbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbiAgW0BAb2NhbWwuZGVwcmVjYXRlZCBcIlVzZSAoJiYpIGluc3RlYWQuXCJdXG5leHRlcm5hbCAoIHx8ICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5leHRlcm5hbCAoIG9yICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG4gIFtAQG9jYW1sLmRlcHJlY2F0ZWQgXCJVc2UgKHx8KSBpbnN0ZWFkLlwiXVxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5leHRlcm5hbCAoIHw+ICkgOiAnYSAtPiAoJ2EgLT4gJ2IpIC0+ICdiID0gXCIlcmV2YXBwbHlcIlxuZXh0ZXJuYWwgKCBAQCApIDogKCdhIC0+ICdiKSAtPiAnYSAtPiAnYiA9IFwiJWFwcGx5XCJcbmV4dGVybmFsICggfi0gKSA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgKCB+KyApIDogaW50IC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCAoIC0gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsICggKiApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgKCAvICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCAoIG1vZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxubGV0IGFicyA9IGFic1xubGV0IG1heF9pbnQgPSBtYXhfaW50XG5sZXQgbWluX2ludCA9IG1pbl9pbnRcbmV4dGVybmFsICggbGFuZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgKCBsb3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlb3JpbnRcIlxuZXh0ZXJuYWwgKCBseG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5sZXQgbG5vdCA9IGxub3RcbmV4dGVybmFsICggbHNsICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCAoIGxzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxuZXh0ZXJuYWwgKCBhc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsICggfi0uICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJW5lZ2Zsb2F0XCJcbmV4dGVybmFsICggfisuICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsICggKy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWRkZmxvYXRcIlxuZXh0ZXJuYWwgKCAtLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVzdWJmbG9hdFwiXG5leHRlcm5hbCAoICouICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJW11bGZsb2F0XCJcbmV4dGVybmFsICggLy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlZGl2ZmxvYXRcIlxuZXh0ZXJuYWwgKCAqKiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBfZmxvYXRcIiBcImV4cFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luaF9mbG9hdFwiIFwic2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnNfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcbmV4dGVybmFsIGNvcHlzaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG5leHRlcm5hbCBmbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgaW50X29mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5sZXQgaW5maW5pdHkgPSBpbmZpbml0eVxubGV0IG5lZ19pbmZpbml0eSA9IG5lZ19pbmZpbml0eVxubGV0IG5hbiA9IG5hblxubGV0IG1heF9mbG9hdCA9IG1heF9mbG9hdFxubGV0IG1pbl9mbG9hdCA9IG1pbl9mbG9hdFxubGV0IGVwc2lsb25fZmxvYXQgPSBlcHNpbG9uX2Zsb2F0XG50eXBlIG5vbnJlYyBmcGNsYXNzID0gZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxubGV0ICggXiApID0gKCBeIClcbmV4dGVybmFsIGludF9vZl9jaGFyIDogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5sZXQgY2hhcl9vZl9pbnQgPSBjaGFyX29mX2ludFxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5sZXQgc3RyaW5nX29mX2Jvb2wgPSBzdHJpbmdfb2ZfYm9vbFxubGV0IGJvb2xfb2Zfc3RyaW5nID0gYm9vbF9vZl9zdHJpbmdcbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBib29sX29mX3N0cmluZ19vcHRcbmxldCBzdHJpbmdfb2ZfaW50ID0gc3RyaW5nX29mX2ludFxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgaW50X29mX3N0cmluZ19vcHQgPSBpbnRfb2Zfc3RyaW5nX29wdFxubGV0IHN0cmluZ19vZl9mbG9hdCA9IHN0cmluZ19vZl9mbG9hdFxuZXh0ZXJuYWwgZmxvYXRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5sZXQgZmxvYXRfb2Zfc3RyaW5nX29wdCA9IGZsb2F0X29mX3N0cmluZ19vcHRcbmV4dGVybmFsIGZzdCA6ICdhICogJ2IgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgc25kIDogJ2EgKiAnYiAtPiAnYiA9IFwiJWZpZWxkMVwiXG5sZXQgKCBAICkgID0gKCBAIClcbnR5cGUgbm9ucmVjIGluX2NoYW5uZWwgPSBpbl9jaGFubmVsXG50eXBlIG5vbnJlYyBvdXRfY2hhbm5lbCA9IG91dF9jaGFubmVsXG5sZXQgc3RkaW4gPSBzdGRpblxubGV0IHN0ZG91dCA9IHN0ZG91dFxubGV0IHN0ZGVyciA9IHN0ZGVyclxubGV0IHByaW50X2NoYXIgPSBwcmludF9jaGFyXG5sZXQgcHJpbnRfc3RyaW5nID0gcHJpbnRfc3RyaW5nXG5sZXQgcHJpbnRfYnl0ZXMgPSBwcmludF9ieXRlc1xubGV0IHByaW50X2ludCA9IHByaW50X2ludFxubGV0IHByaW50X2Zsb2F0ID0gcHJpbnRfZmxvYXRcbmxldCBwcmludF9lbmRsaW5lID0gcHJpbnRfZW5kbGluZVxubGV0IHByaW50X25ld2xpbmUgPSBwcmludF9uZXdsaW5lXG5sZXQgcHJlcnJfY2hhciA9IHByZXJyX2NoYXJcbmxldCBwcmVycl9zdHJpbmcgPSBwcmVycl9zdHJpbmdcbmxldCBwcmVycl9ieXRlcyA9IHByZXJyX2J5dGVzXG5sZXQgcHJlcnJfaW50ID0gcHJlcnJfaW50XG5sZXQgcHJlcnJfZmxvYXQgPSBwcmVycl9mbG9hdFxubGV0IHByZXJyX2VuZGxpbmUgPSBwcmVycl9lbmRsaW5lXG5sZXQgcHJlcnJfbmV3bGluZSA9IHByZXJyX25ld2xpbmVcbmxldCByZWFkX2xpbmUgPSByZWFkX2xpbmVcbmxldCByZWFkX2ludCA9IHJlYWRfaW50XG5sZXQgcmVhZF9pbnRfb3B0ID0gcmVhZF9pbnRfb3B0XG5sZXQgcmVhZF9mbG9hdCA9IHJlYWRfZmxvYXRcbmxldCByZWFkX2Zsb2F0X29wdCA9IHJlYWRfZmxvYXRfb3B0XG50eXBlIG5vbnJlYyBvcGVuX2ZsYWcgPSBvcGVuX2ZsYWcgPVxuICAgIE9wZW5fcmRvbmx5XG4gIHwgT3Blbl93cm9ubHlcbiAgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXRcbiAgfCBPcGVuX3RydW5jXG4gIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnlcbiAgfCBPcGVuX3RleHRcbiAgfCBPcGVuX25vbmJsb2NrXG5sZXQgb3Blbl9vdXQgPSBvcGVuX291dFxubGV0IG9wZW5fb3V0X2JpbiA9IG9wZW5fb3V0X2JpblxubGV0IG9wZW5fb3V0X2dlbiA9IG9wZW5fb3V0X2dlblxubGV0IGZsdXNoID0gZmx1c2hcbmxldCBmbHVzaF9hbGwgPSBmbHVzaF9hbGxcbmxldCBvdXRwdXRfY2hhciA9IG91dHB1dF9jaGFyXG5sZXQgb3V0cHV0X3N0cmluZyA9IG91dHB1dF9zdHJpbmdcbmxldCBvdXRwdXRfYnl0ZXMgPSBvdXRwdXRfYnl0ZXNcbmxldCBvdXRwdXQgPSBvdXRwdXRcbmxldCBvdXRwdXRfc3Vic3RyaW5nID0gb3V0cHV0X3N1YnN0cmluZ1xubGV0IG91dHB1dF9ieXRlID0gb3V0cHV0X2J5dGVcbmxldCBvdXRwdXRfYmluYXJ5X2ludCA9IG91dHB1dF9iaW5hcnlfaW50XG5sZXQgb3V0cHV0X3ZhbHVlID0gb3V0cHV0X3ZhbHVlXG5sZXQgc2Vla19vdXQgPSBzZWVrX291dFxubGV0IHBvc19vdXQgPSBwb3Nfb3V0XG5sZXQgb3V0X2NoYW5uZWxfbGVuZ3RoID0gb3V0X2NoYW5uZWxfbGVuZ3RoXG5sZXQgY2xvc2Vfb3V0ID0gY2xvc2Vfb3V0XG5sZXQgY2xvc2Vfb3V0X25vZXJyID0gY2xvc2Vfb3V0X25vZXJyXG5sZXQgc2V0X2JpbmFyeV9tb2RlX291dCA9IHNldF9iaW5hcnlfbW9kZV9vdXRcbmxldCBvcGVuX2luID0gb3Blbl9pblxubGV0IG9wZW5faW5fYmluID0gb3Blbl9pbl9iaW5cbmxldCBvcGVuX2luX2dlbiA9IG9wZW5faW5fZ2VuXG5sZXQgaW5wdXRfY2hhciA9IGlucHV0X2NoYXJcbmxldCBpbnB1dF9saW5lID0gaW5wdXRfbGluZVxubGV0IGlucHV0ID0gaW5wdXRcbmxldCByZWFsbHlfaW5wdXQgPSByZWFsbHlfaW5wdXRcbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nID0gcmVhbGx5X2lucHV0X3N0cmluZ1xubGV0IGlucHV0X2J5dGUgPSBpbnB1dF9ieXRlXG5sZXQgaW5wdXRfYmluYXJ5X2ludCA9IGlucHV0X2JpbmFyeV9pbnRcbmxldCBpbnB1dF92YWx1ZSA9IGlucHV0X3ZhbHVlXG5sZXQgc2Vla19pbiA9IHNlZWtfaW5cbmxldCBwb3NfaW4gPSBwb3NfaW5cbmxldCBpbl9jaGFubmVsX2xlbmd0aCA9IGluX2NoYW5uZWxfbGVuZ3RoXG5sZXQgY2xvc2VfaW4gPSBjbG9zZV9pblxubGV0IGNsb3NlX2luX25vZXJyID0gY2xvc2VfaW5fbm9lcnJcbmxldCBzZXRfYmluYXJ5X21vZGVfaW4gPSBzZXRfYmluYXJ5X21vZGVfaW5cbm1vZHVsZSBMYXJnZUZpbGUgPSBMYXJnZUZpbGVcbnR5cGUgbm9ucmVjICdhIHJlZiA9ICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcbnR5cGUgbm9ucmVjICgnYSwnYikgcmVzdWx0ID0gKCdhLCdiKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdiXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG50eXBlICgnYSwgJ2IsICdjLCAnZCkgZm9ybWF0NCA9ICgnYSwgJ2IsICdjLCAnYywgJ2MsICdkKSBmb3JtYXQ2XG50eXBlICgnYSwgJ2IsICdjKSBmb3JtYXQgPSAoJ2EsICdiLCAnYywgJ2MpIGZvcm1hdDRcbmxldCBzdHJpbmdfb2ZfZm9ybWF0ID0gc3RyaW5nX29mX2Zvcm1hdFxuZXh0ZXJuYWwgZm9ybWF0X29mX3N0cmluZyA6XG4gICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID0gXCIlaWRlbnRpdHlcIlxubGV0ICggXl4gKSA9ICggXl4gKVxubGV0IGV4aXQgPSBleGl0XG5sZXQgYXRfZXhpdCA9IGF0X2V4aXRcbmxldCB2YWxpZF9mbG9hdF9sZXhlbSA9IHZhbGlkX2Zsb2F0X2xleGVtXG5sZXQgZG9fYXRfZXhpdCA9IGRvX2F0X2V4aXRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgTmljb2xhcyBPamVkYSBCYXIsIExleGlGaSAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXh0ZXJuYWwgbmVnIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCBhZGQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsIHN1YiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgbXVsIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCBkaXYgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsIHJlbSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZm1hIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZm1hX2Zsb2F0XCIgXCJjYW1sX2ZtYVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnMgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcblxubGV0IHplcm8gPSAwLlxubGV0IG9uZSA9IDEuXG5sZXQgbWludXNfb25lID0gLTEuXG5sZXQgaW5maW5pdHkgPSBTdGRsaWIuaW5maW5pdHlcbmxldCBuZWdfaW5maW5pdHkgPSBTdGRsaWIubmVnX2luZmluaXR5XG5sZXQgbmFuID0gU3RkbGliLm5hblxubGV0IGlzX2Zpbml0ZSAoeDogZmxvYXQpID0geCAtLiB4ID0gMC5cbmxldCBpc19pbmZpbml0ZSAoeDogZmxvYXQpID0gMS4gLy4geCA9IDAuXG5sZXQgaXNfbmFuICh4OiBmbG9hdCkgPSB4IDw+IHhcblxubGV0IHBpID0gMHgxLjkyMWZiNTQ0NDJkMThwKzFcbmxldCBtYXhfZmxvYXQgPSBTdGRsaWIubWF4X2Zsb2F0XG5sZXQgbWluX2Zsb2F0ID0gU3RkbGliLm1pbl9mbG9hdFxubGV0IGVwc2lsb24gPSBTdGRsaWIuZXBzaWxvbl9mbG9hdFxuZXh0ZXJuYWwgb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0b19pbnQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdF9vZl9zdHJpbmdcIlxubGV0IG9mX3N0cmluZ19vcHQgPSBTdGRsaWIuZmxvYXRfb2Zfc3RyaW5nX29wdFxubGV0IHRvX3N0cmluZyA9IFN0ZGxpYi5zdHJpbmdfb2ZfZmxvYXRcbnR5cGUgZnBjbGFzcyA9IFN0ZGxpYi5mcGNsYXNzID1cbiAgICBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cbmV4dGVybmFsIGNsYXNzaWZ5X2Zsb2F0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGZwY2xhc3MgPVxuICBcImNhbWxfY2xhc3NpZnlfZmxvYXRcIiBcImNhbWxfY2xhc3NpZnlfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBwb3cgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNxcnQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zcXJ0X2Zsb2F0XCIgXCJzcXJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNicnQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jYnJ0X2Zsb2F0XCIgXCJjYW1sX2NicnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwMiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cDJfZmxvYXRcIiBcImNhbWxfZXhwMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cyIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMl9mbG9hdFwiIFwiY2FtbF9sb2cyXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMXAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxcF9mbG9hdFwiIFwiY2FtbF9sb2cxcFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5fZmxvYXRcIiBcInNpblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luaF9mbG9hdFwiIFwic2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbmhfZmxvYXRcIiBcImNhbWxfYXNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuaF9mbG9hdFwiIFwiY2FtbF9hdGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBlcmYgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9lcmZfZmxvYXRcIiBcImNhbWxfZXJmXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGVyZmMgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9lcmZjX2Zsb2F0XCIgXCJjYW1sX2VyZmNcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdHJ1bmMgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90cnVuY19mbG9hdFwiIFwiY2FtbF90cnVuY1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCByb3VuZCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3JvdW5kX2Zsb2F0XCIgXCJjYW1sX3JvdW5kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbltAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbmxldCBpc19pbnRlZ2VyIHggPSB4ID0gdHJ1bmMgeCAmJiBpc19maW5pdGUgeFxuXG5leHRlcm5hbCBuZXh0X2FmdGVyIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgPSBcImNhbWxfbmV4dGFmdGVyX2Zsb2F0XCIgXCJjYW1sX25leHRhZnRlclwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbmxldCBzdWNjIHggPSBuZXh0X2FmdGVyIHggaW5maW5pdHlcbmxldCBwcmVkIHggPSBuZXh0X2FmdGVyIHggbmVnX2luZmluaXR5XG5cbmV4dGVybmFsIGNvcHlfc2lnbiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICAgICA9IFwiY2FtbF9jb3B5c2lnbl9mbG9hdFwiIFwiY2FtbF9jb3B5c2lnblwiXG4gICAgICAgICAgICAgICAgICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2lnbl9iaXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gYm9vbFxuICA9IFwiY2FtbF9zaWduYml0X2Zsb2F0XCIgXCJjYW1sX3NpZ25iaXRcIiBbQEBub2FsbG9jXVxuXG5leHRlcm5hbCBmcmV4cCA6IGZsb2F0IC0+IGZsb2F0ICogaW50ID0gXCJjYW1sX2ZyZXhwX2Zsb2F0XCJcbmV4dGVybmFsIGxkZXhwIDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IChpbnQgW0B1bnRhZ2dlZF0pIC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9sZGV4cF9mbG9hdFwiIFwiY2FtbF9sZGV4cF9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZGYgOiBmbG9hdCAtPiBmbG9hdCAqIGZsb2F0ID0gXCJjYW1sX21vZGZfZmxvYXRcIlxudHlwZSB0ID0gZmxvYXRcbmV4dGVybmFsIGNvbXBhcmUgOiBmbG9hdCAtPiBmbG9hdCAtPiBpbnQgPSBcIiVjb21wYXJlXCJcbmxldCBlcXVhbCB4IHkgPSBjb21wYXJlIHggeSA9IDBcblxubGV0W0BpbmxpbmVdIG1pbiAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geSB0aGVuIHkgZWxzZSB4XG4gIGVsc2UgaWYgaXNfbmFuIHggdGhlbiB4IGVsc2UgeVxuXG5sZXRbQGlubGluZV0gbWF4ICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB4IHRoZW4geCBlbHNlIHlcbiAgZWxzZSBpZiBpc19uYW4geSB0aGVuIHkgZWxzZSB4XG5cbmxldFtAaW5saW5lXSBtaW5fbWF4ICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIGlzX25hbiB4IHx8IGlzX25hbiB5IHRoZW4gKG5hbiwgbmFuKVxuICBlbHNlIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlbiAoeCwgeSkgZWxzZSAoeSwgeClcblxubGV0W0BpbmxpbmVdIG1pbl9udW0gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHggdGhlbiB5IGVsc2UgeFxuICBlbHNlIGlmIGlzX25hbiB5IHRoZW4geCBlbHNlIHlcblxubGV0W0BpbmxpbmVdIG1heF9udW0gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHkgdGhlbiB4IGVsc2UgeVxuICBlbHNlIGlmIGlzX25hbiB4IHRoZW4geSBlbHNlIHhcblxubGV0W0BpbmxpbmVdIG1pbl9tYXhfbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIGlzX25hbiB4IHRoZW4gKHkseSlcbiAgZWxzZSBpZiBpc19uYW4geSB0aGVuICh4LHgpXG4gIGVsc2UgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuICh4LHkpIGVsc2UgKHkseClcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOiBpbnQgLT4gaW50IC0+IGludCAtPiBmbG9hdCAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcblxubW9kdWxlIEFycmF5ID0gc3RydWN0XG5cbiAgdHlwZSB0ID0gZmxvYXRhcnJheVxuXG4gIGV4dGVybmFsIGxlbmd0aCA6IHQgLT4gaW50ID0gXCIlZmxvYXRhcnJheV9sZW5ndGhcIlxuICBleHRlcm5hbCBnZXQgOiB0IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9nZXRcIlxuICBleHRlcm5hbCBzZXQgOiB0IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV9zYWZlX3NldFwiXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldCA6IHQgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldCA6IHQgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuXG4gIGxldCB1bnNhZmVfZmlsbCBhIG9mcyBsZW4gdiA9XG4gICAgZm9yIGkgPSBvZnMgdG8gb2ZzICsgbGVuIC0gMSBkbyB1bnNhZmVfc2V0IGEgaSB2IGRvbmVcblxuICBleHRlcm5hbCB1bnNhZmVfYmxpdDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPVxuICAgIFwiY2FtbF9mbG9hdGFycmF5X2JsaXRcIiBbQEBub2FsbG9jXVxuXG4gIGxldCBjaGVjayBhIG9mcyBsZW4gbXNnID1cbiAgICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzICsgbGVuIDwgMCB8fCBvZnMgKyBsZW4gPiBsZW5ndGggYSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBsZXQgbWFrZSBuIHYgPVxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbiBpblxuICAgIHVuc2FmZV9maWxsIHJlc3VsdCAwIG4gdjtcbiAgICByZXN1bHRcblxuICBsZXQgaW5pdCBsIGYgPVxuICAgIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5pbml0XCJcbiAgICBlbHNlXG4gICAgICBsZXQgcmVzID0gY3JlYXRlIGwgaW5cbiAgICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICAgICBkb25lO1xuICAgICAgcmVzXG5cbiAgbGV0IGFwcGVuZCBhMSBhMiA9XG4gICAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gICAgbGV0IGwyID0gbGVuZ3RoIGEyIGluXG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgICB1bnNhZmVfYmxpdCBhMSAwIHJlc3VsdCAwIGwxO1xuICAgIHVuc2FmZV9ibGl0IGEyIDAgcmVzdWx0IGwxIGwyO1xuICAgIHJlc3VsdFxuXG4gICgqIG5leHQgMyBmdW5jdGlvbnM6IG1vZGlmaWVkIGNvcHkgb2YgY29kZSBmcm9tIHN0cmluZy5tbCAqKVxuICBsZXQgZW5zdXJlX2dlICh4OmludCkgeSA9XG4gICAgaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuY29uY2F0XCJcblxuICBsZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIGFjYykgYWNjKSB0bFxuXG4gIGxldCBjb25jYXQgbCA9XG4gICAgbGV0IGxlbiA9IHN1bV9sZW5ndGhzIDAgbCBpblxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGwgaSA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IChpID0gbGVuKVxuICAgICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICBsZXQgaGxlbiA9IGxlbmd0aCBoZCBpblxuICAgICAgICB1bnNhZmVfYmxpdCBoZCAwIHJlc3VsdCBpIGhsZW47XG4gICAgICAgIGxvb3AgdGwgKGkgKyBobGVuKVxuICAgIGluXG4gICAgbG9vcCBsIDA7XG4gICAgcmVzdWx0XG5cbiAgbGV0IHN1YiBhIG9mcyBsZW4gPVxuICAgIGNoZWNrIGEgb2ZzIGxlbiBcIkZsb2F0LkFycmF5LnN1YlwiO1xuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgYSBvZnMgcmVzdWx0IDAgbGVuO1xuICAgIHJlc3VsdFxuXG4gIGxldCBjb3B5IGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIGwgaW5cbiAgICB1bnNhZmVfYmxpdCBhIDAgcmVzdWx0IDAgbDtcbiAgICByZXN1bHRcblxuICBsZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gICAgY2hlY2sgYSBvZnMgbGVuIFwiRmxvYXQuQXJyYXkuZmlsbFwiO1xuICAgIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbiAgbGV0IGJsaXQgc3JjIHNvZnMgZHN0IGRvZnMgbGVuID1cbiAgICBjaGVjayBzcmMgc29mcyBsZW4gXCJGbG9hdC5hcnJheS5ibGl0XCI7XG4gICAgY2hlY2sgZHN0IGRvZnMgbGVuIFwiRmxvYXQuYXJyYXkuYmxpdFwiO1xuICAgIHVuc2FmZV9ibGl0IHNyYyBzb2ZzIGRzdCBkb2ZzIGxlblxuXG4gIGxldCB0b19saXN0IGEgPVxuICAgIExpc3QuaW5pdCAobGVuZ3RoIGEpICh1bnNhZmVfZ2V0IGEpXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgICBsZXQgcmVjIGZpbGwgaSBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiByZXN1bHRcbiAgICAgIHwgaCA6OiB0IC0+IHVuc2FmZV9zZXQgcmVzdWx0IGkgaDsgZmlsbCAoaSArIDEpIHRcbiAgICBpblxuICAgIGZpbGwgMCBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBpdGVyIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlcjIgZiBhIGIgPVxuICAgIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgICBlbHNlXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxuICBsZXQgbWFwIGYgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbiAgbGV0IG1hcDIgZiBhIGIgPVxuICAgIGxldCBsYSA9IGxlbmd0aCBhIGluXG4gICAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgICBpZiBsYSA8PiBsYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5Lm1hcDI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSBpblxuICAgICAgZm9yIGkgPSAwIHRvIGxhIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkpXG4gICAgICBkb25lO1xuICAgICAgclxuICAgIGVuZFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlcmkgZiBhID1cbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxuICBsZXQgbWFwaSBmIGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICAgIGxldCByID0gcmVmIHggaW5cbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICAgIGRvbmU7XG4gICAgIXJcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICAgIGxldCByID0gcmVmIHggaW5cbiAgICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgICBkb25lO1xuICAgICFyXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBleGlzdHMgcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgICBlbHNlIGxvb3AgKGkgKyAxKSBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZm9yX2FsbCBwIGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gbG9vcCAoaSArIDEpXG4gICAgICBlbHNlIGZhbHNlIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBtZW0geCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgICBlbHNlIGxvb3AgKGkgKyAxKVxuICAgIGluXG4gICAgbG9vcCAwXG5cbiAgKCogbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCwgYnV0IHNsaWdodGx5IGRpZmZlcmVudCAqKVxuICBsZXQgbWVtX2llZWUgeCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgICAgZWxzZSBpZiB4ID0gKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgZXhjZXB0aW9uIEJvdHRvbSBvZiBpbnRcbiAgbGV0IHNvcnQgY21wIGEgPVxuICAgIGxldCBtYXhzb24gbCBpID1cbiAgICAgIGxldCBpMzEgPSBpK2kraSsxIGluXG4gICAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICAgIGlmIGkzMSsyIDwgbCB0aGVuIGJlZ2luXG4gICAgICAgIGlmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwIHRoZW4geCA6PSBpMzErMTtcbiAgICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAgICF4XG4gICAgICBlbmQgZWxzZVxuICAgICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgICAgdGhlbiBpMzErMVxuICAgICAgICBlbHNlIGlmIGkzMSA8IGwgdGhlbiBpMzEgZWxzZSByYWlzZSAoQm90dG9tIGkpXG4gICAgaW5cbiAgICBsZXQgcmVjIHRyaWNrbGVkb3duIGwgaSBlID1cbiAgICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgICAgICB0cmlja2xlZG93biBsIGogZTtcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIHNldCBhIGkgZTtcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCB0cmlja2xlIGwgaSBlID0gdHJ5IHRyaWNrbGVkb3duIGwgaSBlIHdpdGggQm90dG9tIGkgLT4gc2V0IGEgaSBlIGluXG4gICAgbGV0IHJlYyBidWJibGVkb3duIGwgaSA9XG4gICAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgICAgYnViYmxlZG93biBsIGpcbiAgICBpblxuICAgIGxldCBidWJibGUgbCBpID0gdHJ5IGJ1YmJsZWRvd24gbCBpIHdpdGggQm90dG9tIGkgLT4gaSBpblxuICAgIGxldCByZWMgdHJpY2tsZXVwIGkgZSA9XG4gICAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICAgIGFzc2VydCAoaSA8PiBmYXRoZXIpO1xuICAgICAgaWYgY21wIChnZXQgYSBmYXRoZXIpIGUgPCAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgICAgaWYgZmF0aGVyID4gMCB0aGVuIHRyaWNrbGV1cCBmYXRoZXIgZSBlbHNlIHNldCBhIDAgZTtcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIHNldCBhIGkgZTtcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBmb3IgaSA9IChsICsgMSkgLyAzIC0gMSBkb3dudG8gMCBkbyB0cmlja2xlIGwgaSAoZ2V0IGEgaSk7IGRvbmU7XG4gICAgZm9yIGkgPSBsIC0gMSBkb3dudG8gMiBkb1xuICAgICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIDApO1xuICAgICAgdHJpY2tsZXVwIChidWJibGUgaSAwKSBlO1xuICAgIGRvbmU7XG4gICAgaWYgbCA+IDEgdGhlbiAobGV0IGUgPSAoZ2V0IGEgMSkgaW4gc2V0IGEgMSAoZ2V0IGEgMCk7IHNldCBhIDAgZSlcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwsIGV4Y2VwdCBmb3IgdGhlIGNhbGwgdG8gW2NyZWF0ZV0gKilcbiAgbGV0IGN1dG9mZiA9IDVcbiAgbGV0IHN0YWJsZV9zb3J0IGNtcCBhID1cbiAgICBsZXQgbWVyZ2Ugc3JjMW9mcyBzcmMxbGVuIHNyYzIgc3JjMm9mcyBzcmMybGVuIGRzdCBkc3RvZnMgPVxuICAgICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICAgIGxldCByZWMgbG9vcCBpMSBzMSBpMiBzMiBkID1cbiAgICAgICAgaWYgY21wIHMxIHMyIDw9IDAgdGhlbiBiZWdpblxuICAgICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgICBsZXQgaTEgPSBpMSArIDEgaW5cbiAgICAgICAgICBpZiBpMSA8IHNyYzFyIHRoZW5cbiAgICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYmxpdCBzcmMyIGkyIGRzdCAoZCArIDEpIChzcmMyciAtIGkyKVxuICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgIHNldCBkc3QgZCBzMjtcbiAgICAgICAgICBsZXQgaTIgPSBpMiArIDEgaW5cbiAgICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICAgIGxvb3AgaTEgczEgaTIgKGdldCBzcmMyIGkyKSAoZCArIDEpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgICBlbmRcbiAgICAgIGluIGxvb3Agc3JjMW9mcyAoZ2V0IGEgc3JjMW9mcykgc3JjMm9mcyAoZ2V0IHNyYzIgc3JjMm9mcykgZHN0b2ZzO1xuICAgIGluXG4gICAgbGV0IGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgICAgbGV0IGogPSByZWYgKGRzdG9mcyArIGkgLSAxKSBpblxuICAgICAgICB3aGlsZSAoIWogPj0gZHN0b2ZzICYmIGNtcCAoZ2V0IGRzdCAhaikgZSA+IDApIGRvXG4gICAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgICAgZGVjciBqO1xuICAgICAgICBkb25lO1xuICAgICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgICBkb25lO1xuICAgIGluXG4gICAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICAgIGlmIGxlbiA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBsMSA9IGxlbiAvIDIgaW5cbiAgICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgICAgc29ydHRvIChzcmNvZnMgKyBsMSkgZHN0IChkc3RvZnMgKyBsMSkgbDI7XG4gICAgICAgIHNvcnR0byBzcmNvZnMgYSAoc3Jjb2ZzICsgbDIpIGwxO1xuICAgICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgICBlbmQ7XG4gICAgaW5cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgaWYgbCA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIDAgYSAwIGwgZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbCAvIDIgaW5cbiAgICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgICAgbGV0IHQgPSBjcmVhdGUgbDIgaW5cbiAgICAgIHNvcnR0byBsMSB0IDAgbDI7XG4gICAgICBzb3J0dG8gMCBhIGwyIGwxO1xuICAgICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgICBlbmRcblxuICBsZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IHRvX3NlcSBhID1cbiAgICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAgIGlmIGkgPCBsZW5ndGggYVxuICAgICAgdGhlblxuICAgICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgICBlbHNlIFNlcS5OaWxcbiAgICBpblxuICAgIGF1eCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCB0b19zZXFpIGEgPVxuICAgIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgICB0aGVuXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gICAgICBlbHNlIFNlcS5OaWxcbiAgICBpblxuICAgIGF1eCAwXG5cbiAgKCogbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgb2ZfcmV2X2xpc3QgbCA9XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBsZW4gaW5cbiAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgIFtdIC0+IGFcbiAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpLTEpIHRsXG4gICAgaW5cbiAgICBmaWxsIChsZW4tMSkgbFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgb2Zfc2VxIGkgPVxuICAgIGxldCBsID0gU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gaSBpblxuICAgIG9mX3Jldl9saXN0IGxcblxuXG4gIGxldCBtYXBfdG9fYXJyYXkgZiBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgaWYgbCA9IDAgdGhlbiBbfCB8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IEFycmF5Lm1ha2UgbCAoZiAodW5zYWZlX2dldCBhIDApKSBpblxuICAgICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICAgIEFycmF5LnVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgICBkb25lO1xuICAgICAgclxuICAgIGVuZFxuXG4gIGxldCBtYXBfZnJvbV9hcnJheSBmIGEgPVxuICAgIGxldCBsID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiAoQXJyYXkudW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuXG5lbmRcblxubW9kdWxlIEFycmF5TGFiZWxzID0gQXJyYXlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICBUaGlzIGlzIGEgbGFnZ2VkLUZpYm9uYWNjaSBGKDU1LCAyNCwgKykgd2l0aCBhIG1vZGlmaWVkIGFkZGl0aW9uXG4gICBmdW5jdGlvbiB0byBlbmhhbmNlIHRoZSBtaXhpbmcgb2YgYml0cy5cbiAgIElmIHdlIHVzZSBub3JtYWwgYWRkaXRpb24sIHRoZSBsb3ctb3JkZXIgYml0IGZhaWxzIHRlc3RzIDEgYW5kIDdcbiAgIG9mIHRoZSBEaWVoYXJkIHRlc3Qgc3VpdGUsIGFuZCBiaXRzIDEgYW5kIDIgYWxzbyBmYWlsIHRlc3QgNy5cbiAgIElmIHdlIHVzZSBtdWx0aXBsaWNhdGlvbiBhcyBzdWdnZXN0ZWQgYnkgTWFyc2FnbGlhLCBpdCBkb2Vzbid0IGZhcmVcbiAgIG11Y2ggYmV0dGVyLlxuICAgQnkgbWl4aW5nIHRoZSBiaXRzIG9mIG9uZSBvZiB0aGUgbnVtYmVycyBiZWZvcmUgYWRkaXRpb24gKFhPUiB0aGVcbiAgIDUgaGlnaC1vcmRlciBiaXRzIGludG8gdGhlIGxvdy1vcmRlciBiaXRzKSwgd2UgZ2V0IGEgZ2VuZXJhdG9yIHRoYXRcbiAgIHBhc3NlcyBhbGwgdGhlIERpZWhhcmQgdGVzdHMuXG4qKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgdHlwZSB0ID0geyBzdCA6IGludCBhcnJheTsgbXV0YWJsZSBpZHggOiBpbnQgfVxuXG4gIGxldCBuZXdfc3RhdGUgKCkgPSB7IHN0ID0gQXJyYXkubWFrZSA1NSAwOyBpZHggPSAwIH1cbiAgbGV0IGFzc2lnbiBzdDEgc3QyID1cbiAgICBBcnJheS5ibGl0IHN0Mi5zdCAwIHN0MS5zdCAwIDU1O1xuICAgIHN0MS5pZHggPC0gc3QyLmlkeFxuXG5cbiAgbGV0IGZ1bGxfaW5pdCBzIHNlZWQgPVxuICAgIGxldCBjb21iaW5lIGFjY3UgeCA9IERpZ2VzdC5zdHJpbmcgKGFjY3UgXiBJbnQudG9fc3RyaW5nIHgpIGluXG4gICAgbGV0IGV4dHJhY3QgZCA9XG4gICAgICBDaGFyLmNvZGUgZC5bMF0gKyAoQ2hhci5jb2RlIGQuWzFdIGxzbCA4KSArIChDaGFyLmNvZGUgZC5bMl0gbHNsIDE2KVxuICAgICAgKyAoQ2hhci5jb2RlIGQuWzNdIGxzbCAyNClcbiAgICBpblxuICAgIGxldCBzZWVkID0gaWYgQXJyYXkubGVuZ3RoIHNlZWQgPSAwIHRoZW4gW3wgMCB8XSBlbHNlIHNlZWQgaW5cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0IGRvXG4gICAgICBzLnN0LihpKSA8LSBpO1xuICAgIGRvbmU7XG4gICAgbGV0IGFjY3UgPSByZWYgXCJ4XCIgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgKyBJbnQubWF4IDU1IGwgZG9cbiAgICAgIGxldCBqID0gaSBtb2QgNTUgaW5cbiAgICAgIGxldCBrID0gaSBtb2QgbCBpblxuICAgICAgYWNjdSA6PSBjb21iaW5lICFhY2N1IHNlZWQuKGspO1xuICAgICAgcy5zdC4oaikgPC0gKHMuc3QuKGopIGx4b3IgZXh0cmFjdCAhYWNjdSkgbGFuZCAweDNGRkZGRkZGOyAgKCogUFIjNTU3NSAqKVxuICAgIGRvbmU7XG4gICAgcy5pZHggPC0gMFxuXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGZ1bGxfaW5pdCByZXN1bHQgc2VlZDtcbiAgICByZXN1bHRcblxuXG4gIGxldCBtYWtlX3NlbGZfaW5pdCAoKSA9IG1ha2UgKHJhbmRvbV9zZWVkICgpKVxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBhc3NpZ24gcmVzdWx0IHM7XG4gICAgcmVzdWx0XG5cblxuICAoKiBSZXR1cm5zIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMTA3Mzc0MTgyNCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBzLmlkeCA8LSAocy5pZHggKyAxKSBtb2QgNTU7XG4gICAgbGV0IGN1cnZhbCA9IHMuc3QuKHMuaWR4KSBpblxuICAgIGxldCBuZXd2YWwgPSBzLnN0Ligocy5pZHggKyAyNCkgbW9kIDU1KVxuICAgICAgICAgICAgICAgICArIChjdXJ2YWwgbHhvciAoKGN1cnZhbCBsc3IgMjUpIGxhbmQgMHgxRikpIGluXG4gICAgbGV0IG5ld3ZhbDMwID0gbmV3dmFsIGxhbmQgMHgzRkZGRkZGRiBpbiAgKCogUFIjNTU3NSAqKVxuICAgIHMuc3QuKHMuaWR4KSA8LSBuZXd2YWwzMDtcbiAgICBuZXd2YWwzMFxuXG5cbiAgbGV0IHJlYyBpbnRhdXggcyBuID1cbiAgICBsZXQgciA9IGJpdHMgcyBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gMHgzRkZGRkZGRiAtIG4gKyAxIHRoZW4gaW50YXV4IHMgbiBlbHNlIHZcblxuICBsZXQgaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB8fCBib3VuZCA8PSAwXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRcIlxuICAgIGVsc2UgaW50YXV4IHMgYm91bmRcblxuICBsZXQgcmVjIGludDYzYXV4IHMgbiA9XG4gICAgbGV0IG1heF9pbnRfMzIgPSAoMSBsc2wgMzApICsgMHgzRkZGRkZGRiBpbiAoKiAweDdGRkZGRkZGICopXG4gICAgbGV0IGIxID0gYml0cyBzIGluXG4gICAgbGV0IGIyID0gYml0cyBzIGluXG4gICAgbGV0IChyLCBtYXhfaW50KSA9XG4gICAgICBpZiBuIDw9IG1heF9pbnRfMzIgdGhlblxuICAgICAgICAoKiAzMSByYW5kb20gYml0cyBvbiBib3RoIDY0LWJpdCBPQ2FtbCBhbmQgSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDE1IGJpdHMgb2YgYjEgYW5kIDE2IGJpdHMgb2YgYjIuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKChiMiBsYW5kIDB4M0ZGRkMwMDApIGxzbCAxKSBsb3IgKGIxIGxzciAxNSkpXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnRfMzIpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBiMyA9IGJpdHMgcyBpblxuICAgICAgICAoKiA2MiByYW5kb20gYml0cyBvbiA2NC1iaXQgT0NhbWw7IHVucmVhY2hhYmxlIG9uIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAyMCBiaXRzIG9mIGIxIGFuZCAyMSBiaXRzIG9mIGIyIGFuZCBiMy4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKChiMyBsYW5kIDB4M0ZGRkZFMDApIGxzbCAxMikgbG9yIChiMiBsc3IgOSkpIGxzbCAyMClcbiAgICAgICAgICAgIGxvciAoYjEgbHNyIDEwKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50KVxuICAgIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiBtYXhfaW50IC0gbiArIDEgdGhlbiBpbnQ2M2F1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGZ1bGxfaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uZnVsbF9pbnRcIlxuICAgIGVsc2UgaWYgYm91bmQgPiAweDNGRkZGRkZGIHRoZW5cbiAgICAgIGludDYzYXV4IHMgYm91bmRcbiAgICBlbHNlXG4gICAgICBpbnRhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQzMmF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDMyLm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDMyLnNoaWZ0X2xlZnQgKEludDMyLm9mX2ludCAoYml0cyBzIGxhbmQgMSkpIDMwIGluXG4gICAgbGV0IHIgPSBJbnQzMi5sb2dvciBiMSBiMiBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgIGlmIEludDMyLnN1YiByIHYgPiBJbnQzMi5hZGQgKEludDMyLnN1YiBJbnQzMi5tYXhfaW50IG4pIDFsXG4gICAgdGhlbiBpbnQzMmF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50MzIgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDMyXCJcbiAgICBlbHNlIGludDMyYXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQ2NC5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcykpIDMwIGluXG4gICAgbGV0IGIzID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMgbGFuZCA3KSkgNjAgaW5cbiAgICBsZXQgciA9IEludDY0LmxvZ29yIGIxIChJbnQ2NC5sb2dvciBiMiBiMykgaW5cbiAgICBsZXQgdiA9IEludDY0LnJlbSByIG4gaW5cbiAgICBpZiBJbnQ2NC5zdWIgciB2ID4gSW50NjQuYWRkIChJbnQ2NC5zdWIgSW50NjQubWF4X2ludCBuKSAxTFxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cblxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cblxuICAoKiBSZXR1cm5zIGEgZmxvYXQgMCA8PSB4IDw9IDEgd2l0aCBhdCBtb3N0IDYwIGJpdHMgb2YgcHJlY2lzaW9uLiAqKVxuICBsZXQgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IHNjYWxlID0gMTA3Mzc0MTgyNC4wICAoKiAyXjMwICopXG4gICAgYW5kIHIxID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgYW5kIHIyID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgaW4gKHIxIC8uIHNjYWxlICsuIHIyKSAvLiBzY2FsZVxuXG5cbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgbGV0IGJvb2wgcyA9IChiaXRzIHMgbGFuZCAxID0gMClcblxuICBsZXQgYml0czMyIHMgPVxuICAgIGxldCBiMSA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIEludDMyLihsb2dvciBiMSAoc2hpZnRfbGVmdCBiMiAxNikpXG5cbiAgbGV0IGJpdHM2NCBzID1cbiAgICBsZXQgYjEgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIzID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOCkgaW4gICgqIDIyIGJpdHMgKilcbiAgICBJbnQ2NC4obG9nb3IgYjEgKGxvZ29yIChzaGlmdF9sZWZ0IGIyIDIxKSAoc2hpZnRfbGVmdCBiMyA0MikpKVxuXG4gIGxldCBuYXRpdmViaXRzID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGJpdHMzMiBzKVxuICAgIGVsc2UgZnVuIHMgLT4gSW50NjQudG9fbmF0aXZlaW50IChiaXRzNjQgcylcblxuZW5kXG5cbigqIFRoaXMgaXMgdGhlIHN0YXRlIHlvdSBnZXQgd2l0aCBbaW5pdCAyNzE4MjgxOF0gYW5kIHRoZW4gYXBwbHlpbmdcbiAgIHRoZSBcImxhbmQgMHgzRkZGRkZGRlwiIGZpbHRlciB0byB0aGVtLiAgU2VlICM1NTc1LCAjNTc5MywgIzU5NzcuICopXG5sZXQgZGVmYXVsdCA9IHtcbiAgU3RhdGUuc3QgPSBbfFxuICAgICAgMHgzYWUyNTIyYjsgMHgxZDhkNDYzNDsgMHgxNWI0ZmFkMDsgMHgxOGIxNGFjZTsgMHgxMmY4YTNjNDsgMHgzYjA4NmM0NztcbiAgICAgIDB4MTZkNDY3ZDY7IDB4MTAxZDkxYzc7IDB4MzIxZGYxNzc7IDB4MDE3NmMxOTM7IDB4MWZmNzJiZjE7IDB4MWU4ODkxMDk7XG4gICAgICAweDBiNDY0YjE4OyAweDJiODZiOTdjOyAweDA4OTFkYTQ4OyAweDAzMTM3NDYzOyAweDA4NWFjNWExOyAweDE1ZDYxZjJmO1xuICAgICAgMHgzYmNlZDM1OTsgMHgyOWMxYzEzMjsgMHgzYTg2NzY2ZTsgMHgzNjZkOGM4NjsgMHgxZjViNjIyMjsgMHgzY2UxYjU5ZjtcbiAgICAgIDB4MmViZjc4ZTE7IDB4MjdjZDFiODY7IDB4MjU4ZjNkYzM7IDB4Mzg5YTgxOTQ7IDB4MDJlNGM0NGM7IDB4MThjNDNmN2Q7XG4gICAgICAweDBmNmU1MzRmOyAweDFlN2RmMzU5OyAweDA1NWQwYjdlOyAweDEwZTg0ZTdlOyAweDEyNjE5OGU0OyAweDBlNzcyMmNiO1xuICAgICAgMHgxY2JlZGUyODsgMHgzMzkxYjk2NDsgMHgzZDQwZTkyYTsgMHgwYzU5OTMzZDsgMHgwYjhjZDBiNzsgMHgyNGVmZmYxYztcbiAgICAgIDB4MjgwM2ZkYWE7IDB4MDhlYmM3MmU7IDB4MGY1MjJlMzI7IDB4MDUzOThlZGM7IDB4MjE0NGEwNGM7IDB4MGFlZjNjYmQ7XG4gICAgICAweDAxYWQ0NzE5OyAweDM1YjkzY2Q2OyAweDJhNTU5ZDRmOyAweDFlNmZkNzY4OyAweDI2ZTI3ZjM2OyAweDE4NmYxOGMzO1xuICAgICAgMHgyZmJmOTY3YTtcbiAgICB8XTtcbiAgU3RhdGUuaWR4ID0gMDtcbn1cblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIGRlZmF1bHRcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgZGVmYXVsdCBib3VuZFxubGV0IGZ1bGxfaW50IGJvdW5kID0gU3RhdGUuZnVsbF9pbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgZGVmYXVsdCBib3VuZFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCBkZWZhdWx0IGJvdW5kXG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCBkZWZhdWx0IHNjYWxlXG5sZXQgYm9vbCAoKSA9IFN0YXRlLmJvb2wgZGVmYXVsdFxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiBkZWZhdWx0XG5sZXQgYml0czY0ICgpID0gU3RhdGUuYml0czY0IGRlZmF1bHRcbmxldCBuYXRpdmViaXRzICgpID0gU3RhdGUubmF0aXZlYml0cyBkZWZhdWx0XG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IHNlZWRcbmxldCBpbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IGRlZmF1bHRcbmxldCBzZXRfc3RhdGUgcyA9IFN0YXRlLmFzc2lnbiBkZWZhdWx0IHNcblxuKCoqKioqKioqKioqKioqKioqKioqXG5cbigqIFRlc3QgZnVuY3Rpb25zLiAgTm90IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LlxuICAgVGhlIFtjaGlzcXVhcmVdIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBuID4gMTByLlxuICAgSXQgcmV0dXJucyBhIHRyaXBsZSAobG93LCBhY3R1YWwsIGhpZ2gpLlxuICAgSWYgbG93IDw9IGFjdHVhbCA8PSBoaWdoLCB0aGUgW2ddIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCxcbiAgIG90aGVyd2lzZSBpdCBmYWlsZWQuXG5cbiAgU29tZSByZXN1bHRzOlxuXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDUwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI5OTc5MjY0MzsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAxNDE0MjEzNjsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMjQ7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAwOyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMjQ7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDE0MTQyMTM2OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMjk5NzkyNjQzOyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbi0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTk3LjUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4OS43NDAwMDAwMDAwMDUyMzg3LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDQ4NTguNTc4NjQzNzYyNjksIDUwNDUuNSwgNTE0MS40MjEzNTYyMzczMSlcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9XG4oOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTQ0LjgwNTk5OTk5OTk4MjMwNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDE5LjE5NzQ0MDAwMDAwMzU1LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU5LjMxNzc2MDAwMDAwNTM2LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDM5Ljk4NDYzOTk5OTk5NTEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU0LjM4MjA3OTk5OTk5NTc3LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDkwLjA5NjAwMDAwMDAwNSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDc2Ljc4NzIwMDAwMDAwNjEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjE3NjAwMDAwMDAwNjc1MjEsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4yMTYwMDAwMDAwMDAzNDkyLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODAuNjIyMDAwMDAwMDAzMDI2OCwgMTIwLilcblxuKilcblxuKCogUmV0dXJuIHRoZSBzdW0gb2YgdGhlIHNxdWFyZXMgb2YgdltpMCxpMVsgKilcbmxldCByZWMgc3Vtc3EgdiBpMCBpMSA9XG4gIGlmIGkwID49IGkxIHRoZW4gMC4wXG4gIGVsc2UgaWYgaTEgPSBpMCArIDEgdGhlbiBTdGRsaWIuZmxvYXQgdi4oaTApICouIFN0ZGxpYi5mbG9hdCB2LihpMClcbiAgZWxzZSBzdW1zcSB2IGkwICgoaTAraTEpLzIpICsuIHN1bXNxIHYgKChpMCtpMSkvMikgaTFcblxuXG5sZXQgY2hpc3F1YXJlIGcgbiByID1cbiAgaWYgbiA8PSAxMCAqIHIgdGhlbiBpbnZhbGlkX2FyZyBcImNoaXNxdWFyZVwiO1xuICBsZXQgZiA9IEFycmF5Lm1ha2UgciAwIGluXG4gIGZvciBpID0gMSB0byBuIGRvXG4gICAgbGV0IHQgPSBnIHIgaW5cbiAgICBmLih0KSA8LSBmLih0KSArIDFcbiAgZG9uZTtcbiAgbGV0IHQgPSBzdW1zcSBmIDAgclxuICBhbmQgciA9IFN0ZGxpYi5mbG9hdCByXG4gIGFuZCBuID0gU3RkbGliLmZsb2F0IG4gaW5cbiAgbGV0IHNyID0gMi4wICouIHNxcnQgciBpblxuICAociAtLiBzciwgICAociAqLiB0IC8uIG4pIC0uIG4sICAgciArLiBzcilcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIGxpbmVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbSBudW1iZXJzLlxuKilcbmxldCBzdCA9IHJlZiAwXG5sZXQgaW5pdF9kaWZmIHIgPSBzdCA6PSBpbnQgclxubGV0IGRpZmYgciA9XG4gIGxldCB4MSA9ICFzdFxuICBhbmQgeDIgPSBpbnQgclxuICBpblxuICBzdCA6PSB4MjtcbiAgaWYgeDEgPj0geDIgdGhlblxuICAgIHgxIC0geDJcbiAgZWxzZVxuICAgIHIgKyB4MSAtIHgyXG5cblxubGV0IHN0MSA9IHJlZiAwXG5hbmQgc3QyID0gcmVmIDBcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIHF1YWRyYXRpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbVxuICAgbnVtYmVycy5cbiopXG5sZXQgaW5pdF9kaWZmMiByID0gc3QxIDo9IGludCByOyBzdDIgOj0gaW50IHJcbmxldCBkaWZmMiByID1cbiAgbGV0IHgxID0gIXN0MVxuICBhbmQgeDIgPSAhc3QyXG4gIGFuZCB4MyA9IGludCByXG4gIGluXG4gIHN0MSA6PSB4MjtcbiAgc3QyIDo9IHgzO1xuICAoeDMgLSB4MiAtIHgyICsgeDEgKyAyKnIpIG1vZCByXG5cblxuKioqKioqKioqKioqKioqKioqKiopXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBsaXN0cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGxpc3QgPSBbXSB8ICg6Oikgb2YgJ2EgKiAnYSBsaXN0XG5cbigqIExpc3Qgb3BlcmF0aW9ucyAqKVxuXG5sZXQgcmVjIGxlbmd0aF9hdXggbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBsZW5cbiAgfCBfOjpsIC0+IGxlbmd0aF9hdXggKGxlbiArIDEpIGxcblxubGV0IGxlbmd0aCBsID0gbGVuZ3RoX2F1eCAwIGxcblxubGV0IGNvbnMgYSBsID0gYTo6bFxuXG5sZXQgaGQgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwiaGRcIlxuICB8IGE6Ol8gLT4gYVxuXG5sZXQgdGwgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwidGxcIlxuICB8IF86OmwgLT4gbFxuXG5sZXQgbnRoIGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmYWlsd2l0aCBcIm50aFwiXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgbnRoX29wdCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIFNvbWUgYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgYXBwZW5kID0gKEApXG5cbmxldCByZWMgcmV2X2FwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGEgOjogbCAtPiByZXZfYXBwZW5kIGwgKGEgOjogbDIpXG5cbmxldCByZXYgbCA9IHJldl9hcHBlbmQgbCBbXVxuXG5sZXQgcmVjIGluaXRfdGFpbHJlY19hdXggYWNjIGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gYWNjXG4gIGVsc2UgaW5pdF90YWlscmVjX2F1eCAoZiBpIDo6IGFjYykgKGkrMSkgbiBmXG5cbmxldCByZWMgaW5pdF9hdXggaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBbXVxuICBlbHNlXG4gICAgbGV0IHIgPSBmIGkgaW5cbiAgICByIDo6IGluaXRfYXV4IChpKzEpIG4gZlxuXG5sZXQgcmV2X2luaXRfdGhyZXNob2xkID1cbiAgbWF0Y2ggU3lzLmJhY2tlbmRfdHlwZSB3aXRoXG4gIHwgU3lzLk5hdGl2ZSB8IFN5cy5CeXRlY29kZSAtPiAxMF8wMDBcbiAgKCogV2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUgc3RhY2ssIGJldHRlciBiZSBzYWZlIGFuZCBhc3N1bWUgaXQnc1xuICAgICBzbWFsbC4gKilcbiAgfCBTeXMuT3RoZXIgXyAtPiA1MFxuXG5sZXQgaW5pdCBsZW4gZiA9XG4gIGlmIGxlbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QuaW5pdFwiIGVsc2VcbiAgaWYgbGVuID4gcmV2X2luaXRfdGhyZXNob2xkIHRoZW4gcmV2IChpbml0X3RhaWxyZWNfYXV4IFtdIDAgbGVuIGYpXG4gIGVsc2UgaW5pdF9hdXggMCBsZW4gZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgYSBpbiByIDo6IG1hcCBmIGxcblxubGV0IHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBpIGEgaW4gciA6OiBtYXBpIChpICsgMSkgZiBsXG5cbmxldCBtYXBpIGYgbCA9IG1hcGkgMCBmIGxcblxubGV0IHJldl9tYXAgZiBsID1cbiAgbGV0IHJlYyBybWFwX2YgYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1XG4gICAgfCBhOjpsIC0+IHJtYXBfZiAoZiBhIDo6IGFjY3UpIGxcbiAgaW5cbiAgcm1hcF9mIFtdIGxcblxuXG5sZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgYTsgaXRlciBmIGxcblxubGV0IHJlYyBpdGVyaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGkgYTsgaXRlcmkgKGkgKyAxKSBmIGxcblxubGV0IGl0ZXJpIGYgbCA9IGl0ZXJpIDAgZiBsXG5cbmxldCByZWMgZm9sZF9sZWZ0IGYgYWNjdSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZm9sZF9sZWZ0IGYgKGYgYWNjdSBhKSBsXG5cbmxldCByZWMgZm9sZF9yaWdodCBmIGwgYWNjdSA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGYgYSAoZm9sZF9yaWdodCBmIGwgYWNjdSlcblxubGV0IHJlYyBtYXAyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGxldCByID0gZiBhMSBhMiBpbiByIDo6IG1hcDIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QubWFwMlwiXG5cbmxldCByZXZfbWFwMiBmIGwxIGwyID1cbiAgbGV0IHJlYyBybWFwMl9mIGFjY3UgbDEgbDIgPVxuICAgIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICB8IChbXSwgW10pIC0+IGFjY3VcbiAgICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcm1hcDJfZiAoZiBhMSBhMiA6OiBhY2N1KSBsMSBsMlxuICAgIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5yZXZfbWFwMlwiXG4gIGluXG4gIHJtYXAyX2YgW10gbDEgbDJcblxuXG5sZXQgcmVjIGl0ZXIyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gKClcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTI7IGl0ZXIyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lml0ZXIyXCJcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmb2xkX2xlZnQyIGYgKGYgYWNjdSBhMSBhMikgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfbGVmdDJcIlxuXG5sZXQgcmVjIGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyIChmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UpXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX3JpZ2h0MlwiXG5cbmxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiB0cnVlXG4gIHwgYTo6bCAtPiBwIGEgJiYgZm9yX2FsbCBwIGxcblxubGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IHAgYSB8fCBleGlzdHMgcCBsXG5cbmxldCByZWMgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiB0cnVlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyICYmIGZvcl9hbGwyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvcl9hbGwyXCJcblxubGV0IHJlYyBleGlzdHMyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gZmFsc2VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgfHwgZXhpc3RzMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5leGlzdHMyXCJcblxubGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW0geCBsXG5cbmxldCByZWMgbWVtcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gYSA9PSB4IHx8IG1lbXEgeCBsXG5cbmxldCByZWMgYXNzb2MgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gYiBlbHNlIGFzc29jIHggbFxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gU29tZSBiIGVsc2UgYXNzb2Nfb3B0IHggbFxuXG5sZXQgcmVjIGFzc3EgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gYiBlbHNlIGFzc3EgeCBsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIFNvbWUgYiBlbHNlIGFzc3Ffb3B0IHggbFxuXG5sZXQgcmVjIG1lbV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW1fYXNzb2MgeCBsXG5cbmxldCByZWMgbWVtX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBhID09IHggfHwgbWVtX2Fzc3EgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPlxuICAgICAgaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc29jIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPiBpZiBhID09IHggdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzcSB4IGxcblxubGV0IHJlYyBmaW5kIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiB4IGVsc2UgZmluZCBwIGxcblxubGV0IHJlYyBmaW5kX29wdCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmRfb3B0IHAgbFxuXG5sZXQgcmVjIGZpbmRfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiB4IHdpdGhcbiAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT4gcmVzdWx0XG4gICAgICAgfCBOb25lIC0+IGZpbmRfbWFwIGYgbFxuICAgICBlbmRcblxubGV0IGZpbmRfYWxsIHAgPVxuICBsZXQgcmVjIGZpbmQgYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY3VcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gZmluZCAoeCA6OiBhY2N1KSBsIGVsc2UgZmluZCBhY2N1IGwgaW5cbiAgZmluZCBbXVxuXG5sZXQgZmlsdGVyID0gZmluZF9hbGxcblxubGV0IGZpbHRlcmkgcCBsID1cbiAgbGV0IHJlYyBhdXggaSBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2NcbiAgfCB4OjpsIC0+IGF1eCAoaSArIDEpIChpZiBwIGkgeCB0aGVuIHg6OmFjYyBlbHNlIGFjYykgbFxuICBpblxuICBhdXggMCBbXSBsXG5cbmxldCBmaWx0ZXJfbWFwIGYgPVxuICBsZXQgcmVjIGF1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGF1eCBhY2N1IGxcbiAgICAgICAgfCBTb21lIHYgLT4gYXV4ICh2IDo6IGFjY3UpIGxcbiAgaW5cbiAgYXV4IFtdXG5cbmxldCBjb25jYXRfbWFwIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2NcbiAgICB8IHggOjogbCAtPlxuICAgICAgIGxldCB4cyA9IGYgeCBpblxuICAgICAgIGF1eCBmIChyZXZfYXBwZW5kIHhzIGFjYykgbFxuICBpbiBhdXggZiBbXSBsXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjdSBsID1cbiAgbGV0IHJlYyBhdXggYWNjdSBsX2FjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdSwgcmV2IGxfYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIGxldCBhY2N1LCB4ID0gZiBhY2N1IHggaW5cbiAgICAgICAgYXV4IGFjY3UgKHggOjogbF9hY2N1KSBsIGluXG4gIGF1eCBhY2N1IFtdIGxcblxubGV0IHBhcnRpdGlvbiBwIGwgPVxuICBsZXQgcmVjIHBhcnQgeWVzIG5vID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IHllcywgcmV2IG5vKVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBwYXJ0ICh4IDo6IHllcykgbm8gbCBlbHNlIHBhcnQgeWVzICh4IDo6IG5vKSBsIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcCBwIGwgPVxuICBsZXQgcmVjIHBhcnQgbGVmdCByaWdodCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiBsZWZ0LCByZXYgcmlnaHQpXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIHAgeCB3aXRoXG4gICAgICAgfCBFaXRoZXIuTGVmdCB2IC0+IHBhcnQgKHYgOjogbGVmdCkgcmlnaHQgbFxuICAgICAgIHwgRWl0aGVyLlJpZ2h0IHYgLT4gcGFydCBsZWZ0ICh2IDo6IHJpZ2h0KSBsXG4gICAgIGVuZFxuICBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHJlYyBzcGxpdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKFtdLCBbXSlcbiAgfCAoeCx5KTo6bCAtPlxuICAgICAgbGV0IChyeCwgcnkpID0gc3BsaXQgbCBpbiAoeDo6cngsIHk6OnJ5KVxuXG5sZXQgcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IChhMSwgYTIpIDo6IGNvbWJpbmUgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmNvbWJpbmVcIlxuXG4oKiogc29ydGluZyAqKVxuXG5sZXQgcmVjIG1lcmdlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIGwyIC0+IGwyXG4gIHwgbDEsIFtdIC0+IGwxXG4gIHwgaDEgOjogdDEsIGgyIDo6IHQyIC0+XG4gICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgdGhlbiBoMSA6OiBtZXJnZSBjbXAgdDEgbDJcbiAgICAgIGVsc2UgaDIgOjogbWVyZ2UgY21wIGwxIHQyXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA8PSAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyIDw9IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyID4gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHNvcnQgPSBzdGFibGVfc29ydFxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqIE5vdGU6IG9uIGEgbGlzdCBvZiBsZW5ndGggYmV0d2VlbiBhYm91dCAxMDAwMDAgKGRlcGVuZGluZyBvbiB0aGUgbWlub3JcbiAgIGhlYXAgc2l6ZSBhbmQgdGhlIHR5cGUgb2YgdGhlIGxpc3QpIGFuZCBTeXMubWF4X2FycmF5X3NpemUsIGl0IGlzXG4gICBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSBmb2xsb3dpbmcsIGJ1dCBpdCBtaWdodCBhbHNvIHVzZSBtb3JlIG1lbW9yeVxuICAgYmVjYXVzZSB0aGUgYXJndW1lbnQgbGlzdCBjYW5ub3QgYmUgZGVhbGxvY2F0ZWQgaW5jcmVtZW50YWxseS5cblxuICAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhpcyBjb2RlIG9yIGluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2Ygb2JqX3RydW5jYXRlLlxuXG5leHRlcm5hbCBvYmpfdHJ1bmNhdGUgOiAnYSBhcnJheSAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuXG5sZXQgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhID1cbiAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgYWNjdSBuIHAgPVxuICAgIGlmIHAgPD0gMCB0aGVuIGFjY3UgZWxzZSBiZWdpblxuICAgICAgaWYgcCA9IG4gdGhlbiBiZWdpblxuICAgICAgICBvYmpfdHJ1bmNhdGUgYSBwO1xuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIChuLTEwMDApIChwLTEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIG4gKHAtMSlcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpblxuICBsb29wIFtdIChsLTEwMDApIGxcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBBcnJheS5zdGFibGVfc29ydCBjbXAgYTtcbiAgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhXG5cbiopXG5cblxuKCoqIHNvcnRpbmcgKyByZW1vdmluZyBkdXBsaWNhdGVzICopXG5cbmxldCBzb3J0X3VuaXEgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2UgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPCAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlX3JldiB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXywgW10gLT4gMVxuICB8IF8gOjogbDEsIF8gOjogbDIgLT4gY29tcGFyZV9sZW5ndGhzIGwxIGwyXG47O1xuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT5cbiAgICBpZiBuID0gMCB0aGVuIDAgZWxzZVxuICAgICAgaWYgbiA+IDAgdGhlbiAtMSBlbHNlIDFcbiAgfCBfIDo6IGwgLT5cbiAgICBpZiBuIDw9IDAgdGhlbiAxIGVsc2VcbiAgICAgIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCAobi0xKVxuOztcblxuKCoqIHsxIENvbXBhcmlzb259ICopXG5cbigqIE5vdGU6IHdlIGFyZSAqbm90KiBzaG9ydGN1dHRpbmcgdGhlIGxpc3QgYnkgdXNpbmdcbiAgIFtMaXN0LmNvbXBhcmVfbGVuZ3Roc10gZmlyc3Q7IHRoaXMgbWF5IGJlIHNsb3dlciBvbiBsb25nIGxpc3RzXG4gICBpbW1lZGlhdGVseSBzdGFydCB3aXRoIGRpc3RpbmN0IGVsZW1lbnRzLiBJdCBpcyBhbHNvIGluY29ycmVjdCBmb3JcbiAgIFtjb21wYXJlXSBiZWxvdywgYW5kIGl0IGlzIGJldHRlciAocHJpbmNpcGxlIG9mIGxlYXN0IHN1cnByaXNlKSB0b1xuICAgdXNlIHRoZSBzYW1lIGFwcHJvYWNoIGZvciBib3RoIGZ1bmN0aW9ucy4gKilcbmxldCByZWMgZXF1YWwgZXEgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF86Ol8gfCBfOjpfLCBbXSAtPiBmYWxzZVxuICB8IGExOjpsMSwgYTI6OmwyIC0+IGVxIGExIGEyICYmIGVxdWFsIGVxIGwxIGwyXG5cbmxldCByZWMgY29tcGFyZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF86Ol8gLT4gLTFcbiAgfCBfOjpfLCBbXSAtPiAxXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT5cbiAgICBsZXQgYyA9IGNtcCBhMSBhMiBpblxuICAgIGlmIGMgPD4gMCB0aGVuIGNcbiAgICBlbHNlIGNvbXBhcmUgY21wIGwxIGwyXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgbCA9XG4gIGxldCByZWMgYXV4IGwgKCkgPSBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNlcS5OaWxcbiAgICB8IHggOjogdGFpbCAtPiBTZXEuQ29ucyAoeCwgYXV4IHRhaWwpXG4gIGluXG4gIGF1eCBsXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IHJlYyBkaXJlY3QgZGVwdGggc2VxIDogXyBsaXN0ID1cbiAgICBpZiBkZXB0aD0wXG4gICAgdGhlblxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gc2VxXG4gICAgICB8PiByZXYgKCogdGFpbHJlYyAqKVxuICAgIGVsc2UgbWF0Y2ggc2VxKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCBuZXh0KSAtPiB4IDo6IGRpcmVjdCAoZGVwdGgtMSkgbmV4dFxuICBpblxuICBkaXJlY3QgNTAwIHNlcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbl9jaGFubmVsXG5cbnR5cGUgb3Blbl9mbGFnID0gU3RkbGliLm9wZW5fZmxhZyA9XG4gIHwgT3Blbl9yZG9ubHlcbiAgfCBPcGVuX3dyb25seVxuICB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdFxuICB8IE9wZW5fdHJ1bmNcbiAgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeVxuICB8IE9wZW5fdGV4dFxuICB8IE9wZW5fbm9uYmxvY2tcblxubGV0IHN0ZGluID0gU3RkbGliLnN0ZGluXG5sZXQgb3Blbl9iaW4gPSBTdGRsaWIub3Blbl9pbl9iaW5cbmxldCBvcGVuX3RleHQgPSBTdGRsaWIub3Blbl9pblxubGV0IG9wZW5fZ2VuID0gU3RkbGliLm9wZW5faW5fZ2VuXG5cbmxldCB3aXRoX29wZW4gb3BlbmZ1biBzIGYgPVxuICBsZXQgaWMgPSBvcGVuZnVuIHMgaW5cbiAgRnVuLnByb3RlY3QgfmZpbmFsbHk6KGZ1biAoKSAtPiBTdGRsaWIuY2xvc2VfaW5fbm9lcnIgaWMpXG4gICAgKGZ1biAoKSAtPiBmIGljKVxuXG5sZXQgd2l0aF9vcGVuX2JpbiBzIGYgPVxuICB3aXRoX29wZW4gU3RkbGliLm9wZW5faW5fYmluIHMgZlxuXG5sZXQgd2l0aF9vcGVuX3RleHQgcyBmID1cbiAgd2l0aF9vcGVuIFN0ZGxpYi5vcGVuX2luIHMgZlxuXG5sZXQgd2l0aF9vcGVuX2dlbiBmbGFncyBwZXJtIHMgZiA9XG4gIHdpdGhfb3BlbiAoU3RkbGliLm9wZW5faW5fZ2VuIGZsYWdzIHBlcm0pIHMgZlxuXG5sZXQgc2VlayA9IFN0ZGxpYi5MYXJnZUZpbGUuc2Vla19pblxubGV0IHBvcyA9IFN0ZGxpYi5MYXJnZUZpbGUucG9zX2luXG5sZXQgbGVuZ3RoID0gU3RkbGliLkxhcmdlRmlsZS5pbl9jaGFubmVsX2xlbmd0aFxubGV0IGNsb3NlID0gU3RkbGliLmNsb3NlX2luXG5sZXQgY2xvc2Vfbm9lcnIgPSBTdGRsaWIuY2xvc2VfaW5fbm9lcnJcblxubGV0IGlucHV0X2NoYXIgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfY2hhciBpYyB3aXRoXG4gIHwgYyAtPiBTb21lIGNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gTm9uZVxuXG5sZXQgaW5wdXRfYnl0ZSBpYyA9XG4gIG1hdGNoIFN0ZGxpYi5pbnB1dF9ieXRlIGljIHdpdGhcbiAgfCBuIC0+IFNvbWUgblxuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbmxldCBpbnB1dF9saW5lIGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2xpbmUgaWMgd2l0aFxuICB8IHMgLT4gU29tZSBzXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IGlucHV0ID0gU3RkbGliLmlucHV0XG5cbmxldCByZWFsbHlfaW5wdXQgaWMgYnVmIHBvcyBsZW4gPVxuICBtYXRjaCBTdGRsaWIucmVhbGx5X2lucHV0IGljIGJ1ZiBwb3MgbGVuIHdpdGhcbiAgfCAoKSAtPiBTb21lICgpXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbWF0Y2ggU3RkbGliLnJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuIHdpdGhcbiAgfCBzIC0+IFNvbWUgc1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbigqIFJlYWQgdXAgdG8gW2xlbl0gYnl0ZXMgaW50byBbYnVmXSwgc3RhcnRpbmcgYXQgW29mc10uIFJldHVybiB0b3RhbCBieXRlc1xuICAgcmVhZC4gKilcbmxldCByZWFkX3VwdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3Agb2ZzIGxlbiA9XG4gICAgaWYgbGVuID0gMCB0aGVuIG9mc1xuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gU3RkbGliLmlucHV0IGljIGJ1ZiBvZnMgbGVuIGluXG4gICAgICBpZiByID0gMCB0aGVuXG4gICAgICAgIG9mc1xuICAgICAgZWxzZVxuICAgICAgICBsb29wIChvZnMgKyByKSAobGVuIC0gcilcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBvZnMgbGVuIC0gb2ZzXG5cbigqIEJlc3QgZWZmb3J0IGF0dGVtcHQgdG8gcmV0dXJuIGEgYnVmZmVyIHdpdGggPj0gKG9mcyArIG4pIGJ5dGVzIG9mIHN0b3JhZ2UsXG4gICBhbmQgc3VjaCB0aGF0IGl0IGNvaW5jaWRlcyB3aXRoIFtidWZdIGF0IGluZGljZXMgPCBbb2ZzXS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBpcyBlcXVhbCB0byBbYnVmXSBpdHNlbGYgaWYgaXQgYWxyZWFkeSBoYXMgc3VmZmljaWVudFxuICAgZnJlZSBzcGFjZS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBtYXkgaGF2ZSAqZmV3ZXIqIHRoYW4gW29mcyArIG5dIGJ5dGVzIG9mIHN0b3JhZ2UgaWYgdGhpc1xuICAgbnVtYmVyIGlzID4gW1N5cy5tYXhfc3RyaW5nX2xlbmd0aF0uIEhvd2V2ZXIgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsXG4gICAqYWx3YXlzKiBoYXZlID4gW29mc10gYnl0ZXMgb2Ygc3RvcmFnZS4gSW4gdGhlIGxpbWl0aW5nIGNhc2Ugd2hlbiBbb2ZzID0gbGVuXG4gICA9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aF0gKHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlc2l6ZSB0aGUgYnVmZmVyIGF0XG4gICBhbGwpLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxuXG5sZXQgZW5zdXJlIGJ1ZiBvZnMgbiA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmIGluXG4gIGlmIGxlbiA+PSBvZnMgKyBuIHRoZW4gYnVmXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgbmV3X2xlbiA9IHJlZiBsZW4gaW5cbiAgICB3aGlsZSAhbmV3X2xlbiA8IG9mcyArIG4gZG9cbiAgICAgIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuICsgMVxuICAgIGRvbmU7XG4gICAgbGV0IG5ld19sZW4gPSAhbmV3X2xlbiBpblxuICAgIGxldCBuZXdfbGVuID1cbiAgICAgIGlmIG5ld19sZW4gPD0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgbmV3X2xlblxuICAgICAgZWxzZSBpZiBvZnMgPCBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgZmFpbHdpdGggXCJJbl9jaGFubmVsLmlucHV0X2FsbDogY2hhbm5lbCBjb250ZW50IFxcXG4gICAgICAgICAgICAgICAgICBpcyBsYXJnZXIgdGhhbiBtYXhpbXVtIHN0cmluZyBsZW5ndGhcIlxuICAgIGluXG4gICAgbGV0IG5ld19idWYgPSBCeXRlcy5jcmVhdGUgbmV3X2xlbiBpblxuICAgIEJ5dGVzLmJsaXQgYnVmIDAgbmV3X2J1ZiAwIG9mcztcbiAgICBuZXdfYnVmXG4gIGVuZFxuXG5sZXQgaW5wdXRfYWxsIGljID1cbiAgbGV0IGNodW5rX3NpemUgPSA2NTUzNiBpbiAoKiBJT19CVUZGRVJfU0laRSAqKVxuICBsZXQgaW5pdGlhbF9zaXplID1cbiAgICB0cnlcbiAgICAgIFN0ZGxpYi5pbl9jaGFubmVsX2xlbmd0aCBpYyAtIFN0ZGxpYi5wb3NfaW4gaWNcbiAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAtMVxuICBpblxuICBsZXQgaW5pdGlhbF9zaXplID0gaWYgaW5pdGlhbF9zaXplIDwgMCB0aGVuIGNodW5rX3NpemUgZWxzZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IGluaXRpYWxfc2l6ZSA9XG4gICAgaWYgaW5pdGlhbF9zaXplIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICBpbml0aWFsX3NpemVcbiAgICBlbHNlXG4gICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IG5yZWFkID0gcmVhZF91cHRvIGljIGJ1ZiAwIGluaXRpYWxfc2l6ZSBpblxuICBpZiBucmVhZCA8IGluaXRpYWxfc2l6ZSB0aGVuICgqIEVPRiByZWFjaGVkLCBidWZmZXIgcGFydGlhbGx5IGZpbGxlZCAqKVxuICAgIEJ5dGVzLnN1Yl9zdHJpbmcgYnVmIDAgbnJlYWRcbiAgZWxzZSBiZWdpbiAoKiBucmVhZCA9IGluaXRpYWxfc2l6ZSwgbWF5YmUgRU9GIHJlYWNoZWQgKilcbiAgICBtYXRjaCBTdGRsaWIuaW5wdXRfY2hhciBpYyB3aXRoXG4gICAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT5cbiAgICAgICAgKCogRU9GIHJlYWNoZWQsIGJ1ZmZlciBpcyBjb21wbGV0ZWx5IGZpbGxlZCAqKVxuICAgICAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICAgIHwgYyAtPlxuICAgICAgICAoKiBFT0Ygbm90IHJlYWNoZWQgKilcbiAgICAgICAgbGV0IHJlYyBsb29wIGJ1ZiBvZnMgPVxuICAgICAgICAgIGxldCBidWYgPSBlbnN1cmUgYnVmIG9mcyBjaHVua19zaXplIGluXG4gICAgICAgICAgbGV0IHJlbSA9IEJ5dGVzLmxlbmd0aCBidWYgLSBvZnMgaW5cbiAgICAgICAgICAoKiBbcmVtXSBjYW4gYmUgPCBbY2h1bmtfc2l6ZV0gaWYgYnVmZmVyIHNpemUgY2xvc2UgdG9cbiAgICAgICAgICAgICBbU3lzLm1heF9zdHJpbmdfbGVuZ3RoXSAqKVxuICAgICAgICAgIGxldCByID0gcmVhZF91cHRvIGljIGJ1ZiBvZnMgcmVtIGluXG4gICAgICAgICAgaWYgciA8IHJlbSB0aGVuICgqIEVPRiByZWFjaGVkICopXG4gICAgICAgICAgICBCeXRlcy5zdWJfc3RyaW5nIGJ1ZiAwIChvZnMgKyByKVxuICAgICAgICAgIGVsc2UgKCogciA9IHJlbSAqKVxuICAgICAgICAgICAgbG9vcCBidWYgKG9mcyArIHJlbSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGJ1ZiA9IGVuc3VyZSBidWYgbnJlYWQgKGNodW5rX3NpemUgKyAxKSBpblxuICAgICAgICBCeXRlcy5zZXQgYnVmIG5yZWFkIGM7XG4gICAgICAgIGxvb3AgYnVmIChucmVhZCArIDEpXG4gIGVuZFxuXG5sZXQgc2V0X2JpbmFyeV9tb2RlID0gU3RkbGliLnNldF9iaW5hcnlfbW9kZV9pblxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBvdXRfY2hhbm5lbFxuXG50eXBlIG9wZW5fZmxhZyA9IFN0ZGxpYi5vcGVuX2ZsYWcgPVxuICB8IE9wZW5fcmRvbmx5XG4gIHwgT3Blbl93cm9ubHlcbiAgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXRcbiAgfCBPcGVuX3RydW5jXG4gIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnlcbiAgfCBPcGVuX3RleHRcbiAgfCBPcGVuX25vbmJsb2NrXG5cbmxldCBzdGRvdXQgPSBTdGRsaWIuc3Rkb3V0XG5sZXQgc3RkZXJyID0gU3RkbGliLnN0ZGVyclxubGV0IG9wZW5fYmluID0gU3RkbGliLm9wZW5fb3V0X2JpblxubGV0IG9wZW5fdGV4dCA9IFN0ZGxpYi5vcGVuX291dFxubGV0IG9wZW5fZ2VuID0gU3RkbGliLm9wZW5fb3V0X2dlblxuXG5sZXQgd2l0aF9vcGVuIG9wZW5mdW4gcyBmID1cbiAgbGV0IG9jID0gb3BlbmZ1biBzIGluXG4gIEZ1bi5wcm90ZWN0IH5maW5hbGx5OihmdW4gKCkgLT4gU3RkbGliLmNsb3NlX291dF9ub2VyciBvYylcbiAgICAoZnVuICgpIC0+IGYgb2MpXG5cbmxldCB3aXRoX29wZW5fYmluIHMgZiA9XG4gIHdpdGhfb3BlbiBTdGRsaWIub3Blbl9vdXRfYmluIHMgZlxuXG5sZXQgd2l0aF9vcGVuX3RleHQgcyBmID1cbiAgd2l0aF9vcGVuIFN0ZGxpYi5vcGVuX291dCBzIGZcblxubGV0IHdpdGhfb3Blbl9nZW4gZmxhZ3MgcGVybSBzIGYgPVxuICB3aXRoX29wZW4gKFN0ZGxpYi5vcGVuX291dF9nZW4gZmxhZ3MgcGVybSkgcyBmXG5cbmxldCBzZWVrID0gU3RkbGliLkxhcmdlRmlsZS5zZWVrX291dFxubGV0IHBvcyA9IFN0ZGxpYi5MYXJnZUZpbGUucG9zX291dFxubGV0IGxlbmd0aCA9IFN0ZGxpYi5MYXJnZUZpbGUub3V0X2NoYW5uZWxfbGVuZ3RoXG5sZXQgY2xvc2UgPSBTdGRsaWIuY2xvc2Vfb3V0XG5sZXQgY2xvc2Vfbm9lcnIgPSBTdGRsaWIuY2xvc2Vfb3V0X25vZXJyXG5sZXQgZmx1c2ggPSBTdGRsaWIuZmx1c2hcbmxldCBmbHVzaF9hbGwgPSBTdGRsaWIuZmx1c2hfYWxsXG5sZXQgb3V0cHV0X2NoYXIgPSBTdGRsaWIub3V0cHV0X2NoYXJcbmxldCBvdXRwdXRfYnl0ZSA9IFN0ZGxpYi5vdXRwdXRfYnl0ZVxubGV0IG91dHB1dF9zdHJpbmcgPSBTdGRsaWIub3V0cHV0X3N0cmluZ1xubGV0IG91dHB1dF9ieXRlcyA9IFN0ZGxpYi5vdXRwdXRfYnl0ZXNcbmxldCBvdXRwdXQgPSBTdGRsaWIub3V0cHV0XG5sZXQgb3V0cHV0X3N1YnN0cmluZyA9IFN0ZGxpYi5vdXRwdXRfc3Vic3RyaW5nXG5sZXQgc2V0X2JpbmFyeV9tb2RlID0gU3RkbGliLnNldF9iaW5hcnlfbW9kZV9vdXRcblxuZXh0ZXJuYWwgc2V0X2J1ZmZlcmVkIDogdCAtPiBib29sIC0+IHVuaXQgPSBcImNhbWxfbWxfc2V0X2J1ZmZlcmVkXCJcblxuZXh0ZXJuYWwgaXNfYnVmZmVyZWQgOiB0IC0+IGJvb2wgPSBcImNhbWxfbWxfaXNfYnVmZmVyZWRcIlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICBHYWJyaWVsIFNjaGVyZXIsIHByb2pldCBQYXJzaWZhbCwgSU5SSUEgU2FjbGF5ICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICgnYSwgJ2IpIHQgPSBMZWZ0IG9mICdhIHwgUmlnaHQgb2YgJ2JcblxubGV0IGxlZnQgdiA9IExlZnQgdlxubGV0IHJpZ2h0IHYgPSBSaWdodCB2XG5cbmxldCBpc19sZWZ0ID0gZnVuY3Rpb25cbnwgTGVmdCBfIC0+IHRydWVcbnwgUmlnaHQgXyAtPiBmYWxzZVxuXG5sZXQgaXNfcmlnaHQgPSBmdW5jdGlvblxufCBMZWZ0IF8gLT4gZmFsc2VcbnwgUmlnaHQgXyAtPiB0cnVlXG5cbmxldCBmaW5kX2xlZnQgPSBmdW5jdGlvblxufCBMZWZ0IHYgLT4gU29tZSB2XG58IFJpZ2h0IF8gLT4gTm9uZVxuXG5sZXQgZmluZF9yaWdodCA9IGZ1bmN0aW9uXG58IExlZnQgXyAtPiBOb25lXG58IFJpZ2h0IHYgLT4gU29tZSB2XG5cbmxldCBtYXBfbGVmdCBmID0gZnVuY3Rpb25cbnwgTGVmdCB2IC0+IExlZnQgKGYgdilcbnwgUmlnaHQgXyBhcyBlIC0+IGVcblxubGV0IG1hcF9yaWdodCBmID0gZnVuY3Rpb25cbnwgTGVmdCBfIGFzIGUgLT4gZVxufCBSaWdodCB2IC0+IFJpZ2h0IChmIHYpXG5cbmxldCBtYXAgfmxlZnQgfnJpZ2h0ID0gZnVuY3Rpb25cbnwgTGVmdCB2IC0+IExlZnQgKGxlZnQgdilcbnwgUmlnaHQgdiAtPiBSaWdodCAocmlnaHQgdilcblxubGV0IGZvbGQgfmxlZnQgfnJpZ2h0ID0gZnVuY3Rpb25cbnwgTGVmdCB2IC0+IGxlZnQgdlxufCBSaWdodCB2IC0+IHJpZ2h0IHZcblxubGV0IGl0ZXIgPSBmb2xkXG5cbmxldCBmb3JfYWxsID0gZm9sZFxuXG5sZXQgZXF1YWwgfmxlZnQgfnJpZ2h0IGUxIGUyID0gbWF0Y2ggZTEsIGUyIHdpdGhcbnwgTGVmdCB2MSwgTGVmdCB2MiAtPiBsZWZ0IHYxIHYyXG58IFJpZ2h0IHYxLCBSaWdodCB2MiAtPiByaWdodCB2MSB2MlxufCBMZWZ0IF8sIFJpZ2h0IF8gfCBSaWdodCBfLCBMZWZ0IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfmxlZnQgfnJpZ2h0IGUxIGUyID0gbWF0Y2ggZTEsIGUyIHdpdGhcbnwgTGVmdCB2MSwgTGVmdCB2MiAtPiBsZWZ0IHYxIHYyXG58IFJpZ2h0IHYxLCBSaWdodCB2MiAtPiByaWdodCB2MSB2MlxufCBMZWZ0IF8sIFJpZ2h0IF8gLT4gKC0xKVxufCBSaWdodCBfLCBMZWZ0IF8gLT4gMVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW05hdGl2ZWludF06IHByb2Nlc3Nvci1uYXRpdmUgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X25lZ1wiXG5leHRlcm5hbCBhZGQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FkZFwiXG5leHRlcm5hbCBzdWI6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X3N1YlwiXG5leHRlcm5hbCBtdWw6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X211bFwiXG5leHRlcm5hbCBkaXY6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2RpdlwiXG5leHRlcm5hbCByZW06IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X21vZFwiXG5leHRlcm5hbCBsb2dhbmQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FuZFwiXG5leHRlcm5hbCBsb2dvcjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0OiBuYXRpdmVpbnQgLT4gaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNyXCJcbmV4dGVybmFsIG9mX2ludDogaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50OiBuYXRpdmVpbnQgLT4gaW50ID0gXCIlbmF0aXZlaW50X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IG5hdGl2ZWludFxuICA9IFwiY2FtbF9uYXRpdmVpbnRfb2ZfZmxvYXRcIiBcImNhbWxfbmF0aXZlaW50X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBuYXRpdmVpbnQgLT4gZmxvYXRcbiAgPSBcImNhbWxfbmF0aXZlaW50X3RvX2Zsb2F0XCIgXCJjYW1sX25hdGl2ZWludF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyOiBpbnQzMiAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzI6IG5hdGl2ZWludCAtPiBpbnQzMiA9IFwiJW5hdGl2ZWludF90b19pbnQzMlwiXG5cbmxldCB6ZXJvID0gMG5cbmxldCBvbmUgPSAxblxubGV0IG1pbnVzX29uZSA9IC0xblxubGV0IHN1Y2MgbiA9IGFkZCBuIDFuXG5sZXQgcHJlZCBuID0gc3ViIG4gMW5cbmxldCBhYnMgbiA9IGlmIG4gPj0gMG4gdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBzaXplID0gU3lzLndvcmRfc2l6ZVxubGV0IG1pbl9pbnQgPSBzaGlmdF9sZWZ0IDFuIChzaXplIC0gMSlcbmxldCBtYXhfaW50ID0gc3ViIG1pbl9pbnQgMW5cbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMW4pXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICBmdW4gbiAtPlxuICAgIGlmIGNvbXBhcmUgemVybyBuIDw9IDAgJiYgY29tcGFyZSBuIG1heF9pbnQgPD0gMCB0aGVuXG4gICAgICBTb21lICh0b19pbnQgbilcbiAgICBlbHNlXG4gICAgICBOb25lXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxubGV0IHRvX3N0cmluZyBuID0gZm9ybWF0IFwiJWRcIiBuXG5cbmV4dGVybmFsIG9mX3N0cmluZzogc3RyaW5nIC0+IG5hdGl2ZWludCA9IFwiY2FtbF9uYXRpdmVpbnRfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IGV4cG9zZSBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZSBkaXJlY3RseS4gKilcbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbnR5cGUgdCA9IG5hdGl2ZWludFxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IGNvbXBhcmUgeCB5ID0gMFxuXG5sZXQgdW5zaWduZWRfY29tcGFyZSBuIG0gPVxuICBjb21wYXJlIChzdWIgbiBtaW5faW50KSAoc3ViIG0gbWluX2ludClcblxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbigqIFVuc2lnbmVkIGRpdmlzaW9uIGZyb20gc2lnbmVkIGRpdmlzaW9uIG9mIHRoZSBzYW1lXG4gICBiaXRuZXNzLiBTZWUgV2FycmVuIEpyLiwgSGVucnkgUy4gKDIwMTMpLiBIYWNrZXIncyBEZWxpZ2h0ICgyIGVkLiksIFNlYyA5LTMuXG4qKVxubGV0IHVuc2lnbmVkX2RpdiBuIGQgPVxuICBpZiBkIDwgemVybyB0aGVuXG4gICAgaWYgdW5zaWduZWRfY29tcGFyZSBuIGQgPCAwIHRoZW4gemVybyBlbHNlIG9uZVxuICBlbHNlXG4gICAgbGV0IHEgPSBzaGlmdF9sZWZ0IChkaXYgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgbiAxKSBkKSAxIGluXG4gICAgbGV0IHIgPSBzdWIgbiAobXVsIHEgZCkgaW5cbiAgICBpZiB1bnNpZ25lZF9jb21wYXJlIHIgZCA+PSAwIHRoZW4gc3VjYyBxIGVsc2UgcVxuXG5sZXQgdW5zaWduZWRfcmVtIG4gZCA9XG4gIHN1YiBuIChtdWwgKHVuc2lnbmVkX2RpdiBuIGQpIGQpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE9wZXJhdGlvbnMgb24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIG9mIHZhbHVlcyAqKVxuXG50eXBlIHRcblxudHlwZSByYXdfZGF0YSA9IG5hdGl2ZWludFxuXG5leHRlcm5hbCByZXByIDogJ2EgLT4gdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG9iaiA6IHQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBtYWdpYyA6ICdhIC0+ICdiID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgaXNfaW50IDogdCAtPiBib29sID0gXCIlb2JqX2lzX2ludFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBpc19ibG9jayBhID0gbm90IChpc19pbnQgYSlcbmV4dGVybmFsIHRhZyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial90YWdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2V0X3RhZyA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3NldF90YWdcIlxuZXh0ZXJuYWwgc2l6ZSA6IHQgLT4gaW50ID0gXCIlb2JqX3NpemVcIlxuZXh0ZXJuYWwgcmVhY2hhYmxlX3dvcmRzIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1wiXG5leHRlcm5hbCBmaWVsZCA6IHQgLT4gaW50IC0+IHQgPSBcIiVvYmpfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X2ZpZWxkIDogdCAtPiBpbnQgLT4gdCAtPiB1bml0ID0gXCIlb2JqX3NldF9maWVsZFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfZ2V0XCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfc2V0IDpcbiAgICBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfc2V0XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGRvdWJsZV9maWVsZCB4IGkgPSBmbG9hdGFycmF5X2dldCAob2JqIHggOiBmbG9hdGFycmF5KSBpXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBzZXRfZG91YmxlX2ZpZWxkIHggaSB2ID1cbiAgZmxvYXRhcnJheV9zZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaSB2XG5leHRlcm5hbCByYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSA9IFwiY2FtbF9vYmpfcmF3X2ZpZWxkXCJcbmV4dGVybmFsIHNldF9yYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9vYmpfc2V0X3Jhd19maWVsZFwiXG5cbmV4dGVybmFsIG5ld19ibG9jayA6IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9vYmpfYmxvY2tcIlxuZXh0ZXJuYWwgZHVwIDogdCAtPiB0ID0gXCJjYW1sX29ial9kdXBcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5leHRlcm5hbCBhZGRfb2Zmc2V0IDogdCAtPiBJbnQzMi50IC0+IHQgPSBcImNhbWxfb2JqX2FkZF9vZmZzZXRcIlxuZXh0ZXJuYWwgd2l0aF90YWcgOiBpbnQgLT4gdCAtPiB0ID0gXCJjYW1sX29ial93aXRoX3RhZ1wiXG5cbmxldCBmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMFxubGV0IGxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDI0NVxuXG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcbmxldCBmaW5hbF90YWcgPSBjdXN0b21fdGFnXG5cblxubGV0IGludF90YWcgPSAxMDAwXG5sZXQgb3V0X29mX2hlYXBfdGFnID0gMTAwMVxubGV0IHVuYWxpZ25lZF90YWcgPSAxMDAyXG5cbm1vZHVsZSBDbG9zdXJlID0gc3RydWN0XG4gIHR5cGUgaW5mbyA9IHtcbiAgICBhcml0eTogaW50O1xuICAgIHN0YXJ0X2VudjogaW50O1xuICB9XG5cbiAgbGV0IGluZm9fb2ZfcmF3IChpbmZvIDogbmF0aXZlaW50KSA9XG4gICAgbGV0IG9wZW4gTmF0aXZlaW50IGluXG4gICAgbGV0IGFyaXR5ID1cbiAgICAgICgqIHNpZ25lZDogbmVnYXRpdmUgZm9yIHR1cGxlZCBmdW5jdGlvbnMgKilcbiAgICAgIGlmIFN5cy53b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyA1NilcbiAgICAgIGVsc2VcbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDI0KVxuICAgIGluXG4gICAgbGV0IHN0YXJ0X2VudiA9XG4gICAgICAoKiBzdGFydF9lbnYgaXMgdW5zaWduZWQsIGJ1dCB3ZSBrbm93IGl0IGNhbiBhbHdheXMgZml0IGFuIE9DYW1sXG4gICAgICAgICBpbnRlZ2VyIHNvIHdlIHVzZSBbdG9faW50XSBpbnN0ZWFkIG9mIFt1bnNpZ25lZF90b19pbnRdLiAqKVxuICAgICAgdG9faW50IChzaGlmdF9yaWdodF9sb2dpY2FsIChzaGlmdF9sZWZ0IGluZm8gOCkgOSkgaW5cbiAgICB7IGFyaXR5OyBzdGFydF9lbnYgfVxuXG4gICgqIG5vdGU6IHdlIGV4cGVjdCBhIGNsb3N1cmUsIG5vdCBhbiBpbmZpeCBwb2ludGVyICopXG4gIGxldCBpbmZvIChvYmogOiB0KSA9XG4gICAgYXNzZXJ0ICh0YWcgb2JqID0gY2xvc3VyZV90YWcpO1xuICAgIGluZm9fb2ZfcmF3IChyYXdfZmllbGQgb2JqIDEpXG5lbmRcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbmxldCBleHRlbnNpb25fY29uc3RydWN0b3IgPSBFeHRlbnNpb25fY29uc3RydWN0b3Iub2ZfdmFsXG5sZXQgZXh0ZW5zaW9uX25hbWUgPSBFeHRlbnNpb25fY29uc3RydWN0b3IubmFtZVxubGV0IGV4dGVuc2lvbl9pZCA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5pZFxuXG5tb2R1bGUgRXBoZW1lcm9uID0gc3RydWN0XG4gIHR5cGUgb2JqX3QgPSB0XG5cbiAgdHlwZSB0ICgqKiBlcGhlbWVyb24gKilcblxuICAgKCoqIFRvIGNoYW5nZSBpbiBzeW5jIHdpdGggd2Vhay5oICopXG4gIGxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcbiAgbGV0IG1heF9lcGhlX2xlbmd0aCA9IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9lcGhlX2NyZWF0ZVwiOztcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudCwgZXhjZXB0IHdoZW4gYWZsXG4gICBpbnN0cnVtZW50YXRpb24gaXMgdHVybmVkIG9uLiAqKVxuXG5sZXQgZm9yY2UgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gICgqIFVzaW5nIFtTeXMub3BhcXVlX2lkZW50aXR5XSBwcmV2ZW50cyB0d28gcG90ZW50aWFsIHByb2JsZW1zOlxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBoYXZlIEZvcndhcmRfdGFnLCB0aGVuIGl0cyB0YWcgY291bGQgaGF2ZVxuICAgICAgIGNoYW5nZWQgZHVyaW5nIEdDLCBzbyB0aGF0IGluZm9ybWF0aW9uIG11c3QgYmUgZm9yZ290dGVuIChzZWUgR1BSIzcxM1xuICAgICAgIGFuZCBpc3N1ZSAjNzMwMSlcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgaW1tdXRhYmxlLCB0aGVuIGlmIHRoZSBjb21waWxlclxuICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBsYXN0IGJyYW5jaCBpcyBub3QgdGFrZW4gaXQgd2lsbCBpc3N1ZSBhXG4gICAgICAgd2FybmluZyA1OSAobW9kaWZpY2F0aW9uIG9mIGFuIGltbXV0YWJsZSB2YWx1ZSkgKilcbiAgbGV0IGx6diA9IFN5cy5vcGFxdWVfaWRlbnRpdHkgbHp2IGluXG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfbGF6eV9ibG9jayBsenZcblxuXG5sZXQgZm9yY2VfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0xhenldOiBkZWZlcnJlZCBjb21wdXRhdGlvbnMgKilcblxuXG4oKlxuICAgV0FSTklORzogc29tZSBwdXJwbGUgbWFnaWMgaXMgZ29pbmcgb24gaGVyZS4gIERvIG5vdCB0YWtlIHRoaXMgZmlsZVxuICAgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcHJvZ3JhbSBpbiBPQ2FtbC5cbiopXG5cblxuKCogV2UgbWFrZSB1c2Ugb2YgdHdvIHNwZWNpYWwgdGFncyBwcm92aWRlZCBieSB0aGUgcnVudGltZTpcbiAgIFtsYXp5X3RhZ10gYW5kIFtmb3J3YXJkX3RhZ10uXG5cbiAgIEEgdmFsdWUgb2YgdHlwZSBbJ2EgTGF6eS50XSBjYW4gYmUgb25lIG9mIHRocmVlIHRoaW5nczpcbiAgIDEuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtsYXp5X3RhZ10uICBJdHMgZmllbGQgaXMgYSBjbG9zdXJlIG9mXG4gICAgICB0eXBlIFt1bml0IC0+ICdhXSB0aGF0IGNvbXB1dGVzIHRoZSB2YWx1ZS5cbiAgIDIuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtmb3J3YXJkX3RhZ10uICBJdHMgZmllbGQgaXMgdGhlIHZhbHVlXG4gICAgICBvZiB0eXBlIFsnYV0gdGhhdCB3YXMgY29tcHV0ZWQuXG4gICAzLiBBbnl0aGluZyBlbHNlIGV4Y2VwdCBhIGZsb2F0LiAgVGhpcyBoYXMgdHlwZSBbJ2FdIGFuZCBpcyB0aGUgdmFsdWVcbiAgICAgIHRoYXQgd2FzIGNvbXB1dGVkLlxuICAgRXhjZXB0aW9ucyBhcmUgc3RvcmVkIGluIGZvcm1hdCAoMSkuXG4gICBUaGUgR0Mgd2lsbCBtYWdpY2FsbHkgY2hhbmdlIHRoaW5ncyBmcm9tICgyKSB0byAoMykgYWNjb3JkaW5nIHRvIGl0c1xuICAgZmFuY3kuXG5cbiAgIElmIE9DYW1sIHdhcyBjb25maWd1cmVkIHdpdGggdGhlIC1mbGF0LWZsb2F0LWFycmF5IG9wdGlvbiAod2hpY2ggaXNcbiAgIGN1cnJlbnRseSB0aGUgZGVmYXVsdCksIHRoZSBmb2xsb3dpbmcgaXMgYWxzbyB0cnVlOlxuICAgV2UgY2Fubm90IHVzZSByZXByZXNlbnRhdGlvbiAoMykgZm9yIGEgW2Zsb2F0IExhenkudF0gYmVjYXVzZVxuICAgW2NhbWxfbWFrZV9hcnJheV0gYXNzdW1lcyB0aGF0IG9ubHkgYSBbZmxvYXRdIHZhbHVlIGNhbiBoYXZlIHRhZ1xuICAgW0RvdWJsZV90YWddLlxuXG4gICBXZSBoYXZlIHRvIHVzZSB0aGUgYnVpbHQtaW4gdHlwZSBjb25zdHJ1Y3RvciBbbGF6eV90XSB0b1xuICAgbGV0IHRoZSBjb21waWxlciBpbXBsZW1lbnQgdGhlIHNwZWNpYWwgdHlwaW5nIGFuZCBjb21waWxhdGlvblxuICAgcnVsZXMgZm9yIHRoZSBbbGF6eV0ga2V5d29yZC5cbiopXG5cbnR5cGUgJ2EgdCA9ICdhIENhbWxpbnRlcm5hbExhenkudFxuXG5leGNlcHRpb24gVW5kZWZpbmVkID0gQ2FtbGludGVybmFsTGF6eS5VbmRlZmluZWRcblxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcblxuZXh0ZXJuYWwgZm9yY2UgOiAnYSB0IC0+ICdhID0gXCIlbGF6eV9mb3JjZVwiXG5cblxubGV0IGZvcmNlX3ZhbCA9IENhbWxpbnRlcm5hbExhenkuZm9yY2VfdmFsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8IHQgPSBPYmouZG91YmxlX3RhZyB0aGVuIGJlZ2luXG4gICAgbWFrZV9mb3J3YXJkIHZcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICAoT2JqLm1hZ2ljIHYgOiAnYXJnIHQpXG4gIGVuZFxuXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBsYXp5X2Zyb21fZnVuID0gZnJvbV9mdW5cblxubGV0IGxhenlfZnJvbV92YWwgPSBmcm9tX3ZhbFxuXG5sZXQgbGF6eV9pc192YWwgPSBpc192YWxcblxuXG5sZXQgbWFwIGYgeCA9XG4gIGxhenkgKGYgKGZvcmNlIHgpKVxuXG5sZXQgbWFwX3ZhbCBmIHggPVxuICBpZiBpc192YWwgeFxuICB0aGVuIGxhenlfZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFNpbW9uIENydWFuZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW1NlcV06IGZ1bmN0aW9uYWwgaXRlcmF0b3JzICopXG5cbnR5cGUgKydhIG5vZGUgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgJ2EgKiAnYSB0XG5cbmFuZCAnYSB0ID0gdW5pdCAtPiAnYSBub2RlXG5cbmxldCBlbXB0eSAoKSA9IE5pbFxuXG5sZXQgcmV0dXJuIHggKCkgPSBDb25zICh4LCBlbXB0eSlcblxubGV0IGNvbnMgeCBuZXh0ICgpID0gQ29ucyAoeCwgbmV4dClcblxubGV0IHJlYyBhcHBlbmQgc2VxMSBzZXEyICgpID1cbiAgbWF0Y2ggc2VxMSgpIHdpdGhcbiAgfCBOaWwgLT4gc2VxMigpXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT4gQ29ucyAoeCwgYXBwZW5kIG5leHQgc2VxMilcblxubGV0IHJlYyBtYXAgZiBzZXEgKCkgPSBtYXRjaCBzZXEoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+IENvbnMgKGYgeCwgbWFwIGYgbmV4dClcblxubGV0IHJlYyBmaWx0ZXJfbWFwIGYgc2VxICgpID0gbWF0Y2ggc2VxKCkgd2l0aFxuICB8IE5pbCAtPiBOaWxcbiAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBuZXh0ICgpXG4gICAgICAgIHwgU29tZSB5IC0+IENvbnMgKHksIGZpbHRlcl9tYXAgZiBuZXh0KVxuXG5sZXQgcmVjIGZpbHRlciBmIHNlcSAoKSA9IG1hdGNoIHNlcSgpIHdpdGhcbiAgfCBOaWwgLT4gTmlsXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICAgIGlmIGYgeFxuICAgICAgdGhlbiBDb25zICh4LCBmaWx0ZXIgZiBuZXh0KVxuICAgICAgZWxzZSBmaWx0ZXIgZiBuZXh0ICgpXG5cbmxldCByZWMgY29uY2F0IHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgIGFwcGVuZCB4IChjb25jYXQgbmV4dCkgKClcblxubGV0IHJlYyBmbGF0X21hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgYXBwZW5kIChmIHgpIChmbGF0X21hcCBmIG5leHQpICgpXG5cbmxldCBjb25jYXRfbWFwID0gZmxhdF9tYXBcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2Mgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICAgIGZvbGRfbGVmdCBmIGFjYyBuZXh0XG5cbmxldCByZWMgaXRlciBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGYgeDtcbiAgICAgICAgaXRlciBmIG5leHRcblxubGV0IHJlYyB1bmZvbGQgZiB1ICgpID1cbiAgbWF0Y2ggZiB1IHdpdGhcbiAgfCBOb25lIC0+IE5pbFxuICB8IFNvbWUgKHgsIHUnKSAtPiBDb25zICh4LCB1bmZvbGQgZiB1JylcblxubGV0IGlzX2VtcHR5IHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoXywgXykgLT5cbiAgICAgIGZhbHNlXG5cbmxldCB1bmNvbnMgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIFNvbWUgKHgsIHhzKVxuICB8IE5pbCAtPlxuICAgICAgTm9uZVxuXG5cblxubGV0IHJlYyBsZW5ndGhfYXV4IGFjY3UgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zIChfLCB4cykgLT5cbiAgICAgIGxlbmd0aF9hdXggKGFjY3UgKyAxKSB4c1xuXG5sZXRbQGlubGluZV0gbGVuZ3RoIHhzID1cbiAgbGVuZ3RoX2F1eCAwIHhzXG5cbmxldCByZWMgaXRlcmlfYXV4IGYgaSB4cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGYgaSB4O1xuICAgICAgaXRlcmlfYXV4IGYgKGkrMSkgeHNcblxubGV0W0BpbmxpbmVdIGl0ZXJpIGYgeHMgPVxuICBpdGVyaV9hdXggZiAwIHhzXG5cbmxldCByZWMgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IGkgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGkgeCBpblxuICAgICAgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IChpKzEpIHhzXG5cbmxldFtAaW5saW5lXSBmb2xkX2xlZnRpIGYgYWNjdSB4cyA9XG4gIGZvbGRfbGVmdGlfYXV4IGYgYWNjdSAwIHhzXG5cbmxldCByZWMgZm9yX2FsbCBwIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggJiYgZm9yX2FsbCBwIHhzXG5cbmxldCByZWMgZXhpc3RzIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggfHwgZXhpc3RzIHAgeHNcblxubGV0IHJlYyBmaW5kIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmQgcCB4c1xuXG5sZXQgcmVjIGZpbmRfbWFwIGYgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBmaW5kX21hcCBmIHhzXG4gICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT5cbiAgICAgICAgICByZXN1bHRcblxuKCogW2l0ZXIyXSwgW2ZvbGRfbGVmdDJdLCBbZm9yX2FsbDJdLCBbZXhpc3RzMl0sIFttYXAyXSwgW3ppcF0gd29yayBhbHNvIGluXG4gICB0aGUgY2FzZSB3aGVyZSB0aGUgdHdvIHNlcXVlbmNlcyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzLiBUaGV5IHN0b3AgYXMgc29vblxuICAgYXMgb25lIHNlcXVlbmNlIGlzIGV4aGF1c3RlZC4gVGhlaXIgYmVoYXZpb3IgaXMgc2xpZ2h0bHkgYXN5bW1ldHJpYzogd2hlblxuICAgW3hzXSBpcyBlbXB0eSwgdGhleSBkbyBub3QgZm9yY2UgW3lzXTsgaG93ZXZlciwgd2hlbiBbeXNdIGlzIGVtcHR5LCBbeHNdIGlzXG4gICBmb3JjZWQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGFwcGxpY2F0aW9uIFt4cygpXSB0dXJucyBvdXRcbiAgIHRvIGJlIHVzZWxlc3MuICopXG5cbmxldCByZWMgaXRlcjIgZiB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIHlzKCkgd2l0aFxuICAgICAgfCBOaWwgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBmIHggeTtcbiAgICAgICAgICBpdGVyMiBmIHhzIHlzXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgeHMgeXMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIHlzKCkgd2l0aFxuICAgICAgfCBOaWwgLT5cbiAgICAgICAgICBhY2N1XG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGxldCBhY2N1ID0gZiBhY2N1IHggeSBpblxuICAgICAgICAgIGZvbGRfbGVmdDIgZiBhY2N1IHhzIHlzXG5cbmxldCByZWMgZm9yX2FsbDIgZiB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgdHJ1ZVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgICAgZiB4IHkgJiYgZm9yX2FsbDIgZiB4cyB5c1xuXG5sZXQgcmVjIGV4aXN0czIgZiB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIHlzKCkgd2l0aFxuICAgICAgfCBOaWwgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBmIHggeSB8fCBleGlzdHMyIGYgeHMgeXNcblxubGV0IHJlYyBlcXVhbCBlcSB4cyB5cyA9XG4gIG1hdGNoIHhzKCksIHlzKCkgd2l0aFxuICB8IE5pbCwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpLCBDb25zICh5LCB5cykgLT5cbiAgICAgIGVxIHggeSAmJiBlcXVhbCBlcSB4cyB5c1xuICB8IE5pbCwgQ29ucyAoXywgXylcbiAgfCBDb25zIChfLCBfKSwgTmlsIC0+XG4gICAgICBmYWxzZVxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gIHwgTmlsLCBOaWwgLT5cbiAgICAgIDBcbiAgfCBDb25zICh4LCB4cyksIENvbnMgKHksIHlzKSAtPlxuICAgICAgbGV0IGMgPSBjbXAgeCB5IGluXG4gICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2UgY29tcGFyZSBjbXAgeHMgeXNcbiAgfCBOaWwsIENvbnMgKF8sIF8pIC0+XG4gICAgICAtMVxuICB8IENvbnMgKF8sIF8pLCBOaWwgLT5cbiAgICAgICsxXG5cblxuXG4oKiBbaW5pdF9hdXggZiBpIGpdIGlzIHRoZSBzZXF1ZW5jZSBbZiBpLCAuLi4sIGYgKGotMSldLiAqKVxuXG5sZXQgcmVjIGluaXRfYXV4IGYgaSBqICgpID1cbiAgaWYgaSA8IGogdGhlbiBiZWdpblxuICAgIENvbnMgKGYgaSwgaW5pdF9hdXggZiAoaSArIDEpIGopXG4gIGVuZFxuICBlbHNlXG4gICAgTmlsXG5cbmxldCBpbml0IG4gZiA9XG4gIGlmIG4gPCAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlNlcS5pbml0XCJcbiAgZWxzZVxuICAgIGluaXRfYXV4IGYgMCBuXG5cbmxldCByZWMgcmVwZWF0IHggKCkgPVxuICBDb25zICh4LCByZXBlYXQgeClcblxubGV0IHJlYyBmb3JldmVyIGYgKCkgPVxuICBDb25zIChmKCksIGZvcmV2ZXIgZilcblxuKCogVGhpcyBwcmVsaW1pbmFyeSBkZWZpbml0aW9uIG9mIFtjeWNsZV0gcmVxdWlyZXMgdGhlIHNlcXVlbmNlIFt4c11cbiAgIHRvIGJlIG5vbmVtcHR5LiBBcHBseWluZyBpdCB0byBhbiBlbXB0eSBzZXF1ZW5jZSB3b3VsZCBwcm9kdWNlIGFcbiAgIHNlcXVlbmNlIHRoYXQgZGl2ZXJnZXMgd2hlbiBpdCBpcyBmb3JjZWQuICopXG5cbmxldCByZWMgY3ljbGVfbm9uZW1wdHkgeHMgKCkgPVxuICBhcHBlbmQgeHMgKGN5Y2xlX25vbmVtcHR5IHhzKSAoKVxuXG4oKiBbY3ljbGUgeHNdIGNoZWNrcyB3aGV0aGVyIFt4c10gaXMgZW1wdHkgYW5kLCBpZiBzbywgcmV0dXJucyBhbiBlbXB0eVxuICAgc2VxdWVuY2UuIE90aGVyd2lzZSwgW2N5Y2xlIHhzXSBwcm9kdWNlcyBvbmUgY29weSBvZiBbeHNdIGZvbGxvd2VkXG4gICB3aXRoIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZSBbY3ljbGVfbm9uZW1wdHkgeHNdLiBUaHVzLCB0aGUgbm9uZW1wdGluZXNzXG4gICBjaGVjayBpcyBwZXJmb3JtZWQganVzdCBvbmNlLiAqKVxuXG5sZXQgY3ljbGUgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzJykgLT5cbiAgICAgIENvbnMgKHgsIGFwcGVuZCB4cycgKGN5Y2xlX25vbmVtcHR5IHhzKSlcblxuKCogW2l0ZXJhdGUxIGYgeF0gaXMgdGhlIHNlcXVlbmNlIFtmIHgsIGYgKGYgeCksIC4uLl0uXG4gICBJdCBpcyBlcXVpdmFsZW50IHRvIFt0YWlsIChpdGVyYXRlIGYgeCldLlxuICAgW2l0ZXJhdGUxXSBpcyB1c2VkIGFzIGEgYnVpbGRpbmcgYmxvY2sgaW4gdGhlIGRlZmluaXRpb24gb2YgW2l0ZXJhdGVdLiAqKVxuXG5sZXQgcmVjIGl0ZXJhdGUxIGYgeCAoKSA9XG4gIGxldCB5ID0gZiB4IGluXG4gIENvbnMgKHksIGl0ZXJhdGUxIGYgeSlcblxuKCogW2l0ZXJhdGUgZiB4XSBpcyB0aGUgc2VxdWVuY2UgW3gsIGYgeCwgLi4uXS4gKilcblxuKCogVGhlIHJlYXNvbiB3aHkgd2UgZ2l2ZSB0aGlzIHNsaWdodGx5IGluZGlyZWN0IGRlZmluaXRpb24gb2YgW2l0ZXJhdGVdLFxuICAgYXMgb3Bwb3NlZCB0byB0aGUgbW9yZSBuYWl2ZSBkZWZpbml0aW9uIHRoYXQgbWF5IGNvbWUgdG8gbWluZCwgaXMgdGhhdFxuICAgd2UgYXJlIGNhcmVmdWwgdG8gYXZvaWQgZXZhbHVhdGluZyBbZiB4XSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGNhbGwgaXNcbiAgIGFjdHVhbGx5IG5lY2Vzc2FyeS4gVGhlIG5haXZlIGRlZmluaXRpb24gKG5vdCBzaG93biBoZXJlKSBjb21wdXRlcyB0aGVcbiAgIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgc2VxdWVuY2UsIFtmIHhdLCB3aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBpc1xuICAgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiAqKVxuXG5sZXQgaXRlcmF0ZSBmIHggPVxuICBjb25zIHggKGl0ZXJhdGUxIGYgeClcblxuXG5cbmxldCByZWMgbWFwaV9hdXggZiBpIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIENvbnMgKGYgaSB4LCBtYXBpX2F1eCBmIChpKzEpIHhzKVxuXG5sZXRbQGlubGluZV0gbWFwaSBmIHhzID1cbiAgbWFwaV9hdXggZiAwIHhzXG5cbigqIFt0YWlsX3NjYW4gZiBzIHhzXSBpcyBlcXVpdmFsZW50IHRvIFt0YWlsIChzY2FuIGYgcyB4cyldLlxuICAgW3RhaWxfc2Nhbl0gaXMgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrIGluIHRoZSBkZWZpbml0aW9uIG9mIFtzY2FuXS4gKilcblxuKCogVGhpcyBzbGlnaHRseSBpbmRpcmVjdCBkZWZpbml0aW9uIG9mIFtzY2FuXSBpcyBtZWFudCB0byBhdm9pZCBjb21wdXRpbmdcbiAgIGVsZW1lbnRzIHRvbyBlYXJseTsgc2VlIHRoZSBhYm92ZSBjb21tZW50IGFib3V0IFtpdGVyYXRlMV0gYW5kIFtpdGVyYXRlXS4gKilcblxubGV0IHJlYyB0YWlsX3NjYW4gZiBzIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGxldCBzID0gZiBzIHggaW5cbiAgICAgIENvbnMgKHMsIHRhaWxfc2NhbiBmIHMgeHMpXG5cbmxldCBzY2FuIGYgcyB4cyA9XG4gIGNvbnMgcyAodGFpbF9zY2FuIGYgcyB4cylcblxuKCogW3Rha2VdIGlzIGRlZmluZWQgaW4gc3VjaCBhIHdheSB0aGF0IFt0YWtlIDAgeHNdIHJldHVybnMgW2VtcHR5XVxuICAgaW1tZWRpYXRlbHksIHdpdGhvdXQgYWxsb2NhdGluZyBhbnkgbWVtb3J5LiAqKVxuXG5sZXQgcmVjIHRha2VfYXV4IG4geHMgPVxuICBpZiBuID0gMCB0aGVuXG4gICAgZW1wdHlcbiAgZWxzZVxuICAgIGZ1biAoKSAtPlxuICAgICAgbWF0Y2ggeHMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIE5pbFxuICAgICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgICBDb25zICh4LCB0YWtlX2F1eCAobi0xKSB4cylcblxubGV0IHRha2UgbiB4cyA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJTZXEudGFrZVwiO1xuICB0YWtlX2F1eCBuIHhzXG5cbigqIFtmb3JjZV9kcm9wIG4geHNdIGlzIGVxdWl2YWxlbnQgdG8gW2Ryb3AgbiB4cyAoKV0uXG4gICBbZm9yY2VfZHJvcCBuIHhzXSByZXF1aXJlcyBbbiA+IDBdLlxuICAgW2ZvcmNlX2Ryb3BdIGlzIHVzZWQgYXMgYSBidWlsZGluZyBibG9jayBpbiB0aGUgZGVmaW5pdGlvbiBvZiBbZHJvcF0uICopXG5cbmxldCByZWMgZm9yY2VfZHJvcCBuIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zIChfLCB4cykgLT5cbiAgICAgIGxldCBuID0gbiAtIDEgaW5cbiAgICAgIGlmIG4gPSAwIHRoZW5cbiAgICAgICAgeHMoKVxuICAgICAgZWxzZVxuICAgICAgICBmb3JjZV9kcm9wIG4geHNcblxuKCogW2Ryb3BdIGlzIGRlZmluZWQgaW4gc3VjaCBhIHdheSB0aGF0IFtkcm9wIDAgeHNdIHJldHVybnMgW3hzXSBpbW1lZGlhdGVseSxcbiAgIHdpdGhvdXQgYWxsb2NhdGluZyBhbnkgbWVtb3J5LiAqKVxuXG5sZXQgZHJvcCBuIHhzID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlNlcS5kcm9wXCJcbiAgZWxzZSBpZiBuID0gMCB0aGVuXG4gICAgeHNcbiAgZWxzZVxuICAgIGZ1biAoKSAtPlxuICAgICAgZm9yY2VfZHJvcCBuIHhzXG5cbmxldCByZWMgdGFrZV93aGlsZSBwIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGlmIHAgeCB0aGVuIENvbnMgKHgsIHRha2Vfd2hpbGUgcCB4cykgZWxzZSBOaWxcblxubGV0IHJlYyBkcm9wX3doaWxlIHAgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSBhcyBub2RlIC0+XG4gICAgICBpZiBwIHggdGhlbiBkcm9wX3doaWxlIHAgeHMgKCkgZWxzZSBub2RlXG5cbmxldCByZWMgZ3JvdXAgZXEgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoY29ucyB4ICh0YWtlX3doaWxlIChlcSB4KSB4cyksIGdyb3VwIGVxIChkcm9wX3doaWxlIChlcSB4KSB4cykpXG5cbmV4Y2VwdGlvbiBGb3JjZWRfdHdpY2VcblxubW9kdWxlIFN1c3BlbnNpb24gPSBzdHJ1Y3RcblxuICB0eXBlICdhIHN1c3BlbnNpb24gPVxuICAgIHVuaXQgLT4gJ2FcblxuICAoKiBDb252ZXJzaW9ucy4gKilcblxuICBsZXQgdG9fbGF6eSA6ICdhIHN1c3BlbnNpb24gLT4gJ2EgTGF6eS50ID1cbiAgICBMYXp5LmZyb21fZnVuXG4gICAgKCogZnVuIHMgLT4gbGF6eSAocygpKSAqKVxuXG4gIGxldCBmcm9tX2xhenkgKHMgOiAnYSBMYXp5LnQpIDogJ2Egc3VzcGVuc2lvbiA9XG4gICAgZnVuICgpIC0+IExhenkuZm9yY2Ugc1xuXG4gICgqIFttZW1vaXplXSB0dXJucyBhbiBhcmJpdHJhcnkgc3VzcGVuc2lvbiBpbnRvIGEgcGVyc2lzdGVudCBzdXNwZW5zaW9uLiAqKVxuXG4gIGxldCBtZW1vaXplIChzIDogJ2Egc3VzcGVuc2lvbikgOiAnYSBzdXNwZW5zaW9uID1cbiAgICBmcm9tX2xhenkgKHRvX2xhenkgcylcblxuICAoKiBbZmFpbHVyZV0gaXMgYSBzdXNwZW5zaW9uIHRoYXQgZmFpbHMgd2hlbiBmb3JjZWQuICopXG5cbiAgbGV0IGZhaWx1cmUgOiBfIHN1c3BlbnNpb24gPVxuICAgIGZ1biAoKSAtPlxuICAgICAgKCogQSBzdXNwZW5zaW9uIGNyZWF0ZWQgYnkgW29uY2VdIGhhcyBiZWVuIGZvcmNlZCB0d2ljZS4gKilcbiAgICAgIHJhaXNlIEZvcmNlZF90d2ljZVxuXG4gICgqIElmIFtmXSBpcyBhIHN1c3BlbnNpb24sIHRoZW4gW29uY2UgZl0gaXMgYSBzdXNwZW5zaW9uIHRoYXQgY2FuIGJlIGZvcmNlZFxuICAgICBhdCBtb3N0IG9uY2UuIElmIGl0IGlzIGZvcmNlZCBtb3JlIHRoYW4gb25jZSwgdGhlbiBbRm9yY2VkX3R3aWNlXSBpc1xuICAgICByYWlzZWQuICopXG5cbiAgbGV0IG9uY2UgKGYgOiAnYSBzdXNwZW5zaW9uKSA6ICdhIHN1c3BlbnNpb24gPVxuICAgIGxldCBhY3Rpb24gPSBDYW1saW50ZXJuYWxBdG9taWMubWFrZSBmIGluXG4gICAgZnVuICgpIC0+XG4gICAgICAoKiBHZXQgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBzdG9yZWQgaW4gW2FjdGlvbl0sIGFuZCB3cml0ZSB0aGVcbiAgICAgICAgIGZ1bmN0aW9uIFtmYWlsdXJlXSBpbiBpdHMgcGxhY2UsIHNvIHRoZSBuZXh0IGFjY2VzcyB3aWxsIHJlc3VsdFxuICAgICAgICAgaW4gYSBjYWxsIHRvIFtmYWlsdXJlKCldLiAqKVxuICAgICAgbGV0IGYgPSBDYW1saW50ZXJuYWxBdG9taWMuZXhjaGFuZ2UgYWN0aW9uIGZhaWx1cmUgaW5cbiAgICAgIGYoKVxuXG5lbmQgKCogU3VzcGVuc2lvbiAqKVxuXG5sZXQgcmVjIG1lbW9pemUgeHMgPVxuICBTdXNwZW5zaW9uLm1lbW9pemUgKGZ1biAoKSAtPlxuICAgIG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5pbFxuICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgIENvbnMgKHgsIG1lbW9pemUgeHMpXG4gIClcblxubGV0IHJlYyBvbmNlIHhzID1cbiAgU3VzcGVuc2lvbi5vbmNlIChmdW4gKCkgLT5cbiAgICBtYXRjaCB4cygpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOaWxcbiAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICBDb25zICh4LCBvbmNlIHhzKVxuICApXG5cblxubGV0IHJlYyB6aXAgeHMgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIE5pbFxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBDb25zICgoeCwgeSksIHppcCB4cyB5cylcblxubGV0IHJlYyBtYXAyIGYgeHMgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIE5pbFxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBDb25zIChmIHggeSwgbWFwMiBmIHhzIHlzKVxuXG5sZXQgcmVjIGludGVybGVhdmUgeHMgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIHlzKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIENvbnMgKHgsIGludGVybGVhdmUgeXMgeHMpXG5cbigqIFtzb3J0ZWRfbWVyZ2UxbCBjbXAgeCB4cyB5c10gaXMgZXF1aXZhbGVudCB0b1xuICAgICBbc29ydGVkX21lcmdlIGNtcCAoY29ucyB4IHhzKSB5c10uXG5cbiAgIFtzb3J0ZWRfbWVyZ2UxciBjbXAgeHMgeSB5c10gaXMgZXF1aXZhbGVudCB0b1xuICAgICBbc29ydGVkX21lcmdlIGNtcCB4cyAoY29ucyB5IHlzKV0uXG5cbiAgIFtzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXNdIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgW3NvcnRlZF9tZXJnZSBjbXAgKGNvbnMgeCB4cykgKGNvbnMgeSB5cyldLlxuXG4gICBUaGVzZSB0aHJlZSBmdW5jdGlvbnMgYXJlIHVzZWQgYXMgYnVpbGRpbmcgYmxvY2tzIGluIHRoZSBkZWZpbml0aW9uXG4gICBvZiBbc29ydGVkX21lcmdlXS4gKilcblxubGV0IHJlYyBzb3J0ZWRfbWVyZ2UxbCBjbXAgeCB4cyB5cyAoKSA9XG4gIG1hdGNoIHlzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgQ29ucyAoeCwgeHMpXG4gIHwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICBzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXNcblxuYW5kIHNvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBDb25zICh5LCB5cylcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5hbmQgc29ydGVkX21lcmdlMSBjbXAgeCB4cyB5IHlzID1cbiAgaWYgY21wIHggeSA8PSAwIHRoZW5cbiAgICBDb25zICh4LCBzb3J0ZWRfbWVyZ2UxciBjbXAgeHMgeSB5cylcbiAgZWxzZVxuICAgIENvbnMgKHksIHNvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzKVxuXG5sZXQgc29ydGVkX21lcmdlIGNtcCB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCksIHlzKCkgd2l0aFxuICAgIHwgTmlsLCBOaWwgLT5cbiAgICAgICAgTmlsXG4gICAgfCBOaWwsIGNcbiAgICB8IGMsIE5pbCAtPlxuICAgICAgICBjXG4gICAgfCBDb25zICh4LCB4cyksIENvbnMgKHksIHlzKSAtPlxuICAgICAgICBzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXNcblxuXG5sZXQgcmVjIG1hcF9mc3QgeHlzICgpID1cbiAgbWF0Y2ggeHlzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoKHgsIF8pLCB4eXMpIC0+XG4gICAgICBDb25zICh4LCBtYXBfZnN0IHh5cylcblxubGV0IHJlYyBtYXBfc25kIHh5cyAoKSA9XG4gIG1hdGNoIHh5cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKChfLCB5KSwgeHlzKSAtPlxuICAgICAgQ29ucyAoeSwgbWFwX3NuZCB4eXMpXG5cbmxldCB1bnppcCB4eXMgPVxuICBtYXBfZnN0IHh5cywgbWFwX3NuZCB4eXNcblxubGV0IHNwbGl0ID1cbiAgdW56aXBcblxuKCogW2ZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzXSBpcyBlcXVpdmFsZW50IHRvXG4gICBbZmlsdGVyX21hcCBFaXRoZXIuZmluZF9sZWZ0IChtYXAgZiB4cyldLiAqKVxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVpdGhlci5MZWZ0IHkgLT5cbiAgICAgICAgICBDb25zICh5LCBmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAgZiB4cylcbiAgICAgIHwgRWl0aGVyLlJpZ2h0IF8gLT5cbiAgICAgICAgICBmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAgZiB4cyAoKVxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfZmluZF9yaWdodF9tYXAgZiB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBFaXRoZXIuTGVmdCBfIC0+XG4gICAgICAgICAgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzICgpXG4gICAgICB8IEVpdGhlci5SaWdodCB6IC0+XG4gICAgICAgICAgQ29ucyAoeiwgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzKVxuXG5sZXQgcGFydGl0aW9uX21hcCBmIHhzID1cbiAgZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHMsXG4gIGZpbHRlcl9tYXBfZmluZF9yaWdodF9tYXAgZiB4c1xuXG5sZXQgcGFydGl0aW9uIHAgeHMgPVxuICBmaWx0ZXIgcCB4cywgZmlsdGVyIChmdW4geCAtPiBub3QgKHAgeCkpIHhzXG5cbigqIElmIFt4c3NdIGlzIGEgbWF0cml4IChhIHNlcXVlbmNlIG9mIHJvd3MpLCB0aGVuIFtwZWVsIHhzc10gaXMgYSBwYWlyIG9mXG4gICB0aGUgZmlyc3QgY29sdW1uIChhIHNlcXVlbmNlIG9mIGVsZW1lbnRzKSBhbmQgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGVcbiAgIG1hdHJpeCAoYSBzZXF1ZW5jZSBvZiBzaG9ydGVyIHJvd3MpLiBUaGVzZSB0d28gc2VxdWVuY2VzIGhhdmUgdGhlIHNhbWVcbiAgIGxlbmd0aC4gVGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBbeHNzXSBhcmUgbm90IHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWVcbiAgIGxlbmd0aC4gQW4gZW1wdHkgcm93IGlzIGlnbm9yZWQuICopXG5cbigqIEJlY2F1c2UgW3BlZWxdIHVzZXMgW3VuemlwXSwgaXRzIGFyZ3VtZW50IG11c3QgYmUgcGVyc2lzdGVudC4gVGhlIHNhbWVcbiAgIHJlbWFyayBhcHBsaWVzIHRvIFt0cmFuc3Bvc2VdLCBbZGlhZ29uYWxzXSwgW3Byb2R1Y3RdLCBldGMuICopXG5cbmxldCBwZWVsIHhzcyA9XG4gIHVuemlwIChmaWx0ZXJfbWFwIHVuY29ucyB4c3MpXG5cbmxldCByZWMgdHJhbnNwb3NlIHhzcyAoKSA9XG4gIGxldCBoZWFkcywgdGFpbHMgPSBwZWVsIHhzcyBpblxuICBpZiBpc19lbXB0eSBoZWFkcyB0aGVuIGJlZ2luXG4gICAgYXNzZXJ0IChpc19lbXB0eSB0YWlscyk7XG4gICAgTmlsXG4gIGVuZFxuICBlbHNlXG4gICAgQ29ucyAoaGVhZHMsIHRyYW5zcG9zZSB0YWlscylcblxuKCogVGhlIGludGVybmFsIGZ1bmN0aW9uIFtkaWFnb25hbHNdIHRha2VzIGFuIGV4dHJhIGFyZ3VtZW50LCBbcmVtYWluZGVyc10sXG4gICB3aGljaCBjb250YWlucyB0aGUgcmVtYWluZGVycyBvZiB0aGUgcm93cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuXG4gICBkaXNjb3ZlcmVkLiAqKVxuXG5sZXQgcmVjIGRpYWdvbmFscyByZW1haW5kZXJzIHhzcyAoKSA9XG4gIG1hdGNoIHhzcygpIHdpdGhcbiAgfCBDb25zICh4cywgeHNzKSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggeHMoKSB3aXRoXG4gICAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICAgICgqIFdlIGRpc2NvdmVyIGEgbmV3IG5vbmVtcHR5IHJvdyBbeCA6OiB4c10uIFRodXMsIHRoZSBuZXh0IGRpYWdvbmFsXG4gICAgICAgICAgICAgaXMgW3ggOjogaGVhZHNdOiB0aGlzIGRpYWdvbmFsIGJlZ2lucyB3aXRoIFt4XSBhbmQgY29udGludWVzIHdpdGhcbiAgICAgICAgICAgICB0aGUgZmlyc3QgZWxlbWVudCBvZiBldmVyeSByb3cgaW4gW3JlbWFpbmRlcnNdLiBJbiB0aGUgcmVjdXJzaXZlXG4gICAgICAgICAgICAgY2FsbCwgdGhlIGFyZ3VtZW50IFtyZW1haW5kZXJzXSBpcyBpbnN0YW50aWF0ZWQgd2l0aCBbeHMgOjpcbiAgICAgICAgICAgICB0YWlsc10sIHdoaWNoIG1lYW5zIHRoYXQgd2UgaGF2ZSBvbmUgbW9yZSByZW1haW5pbmcgcm93LCBbeHNdLFxuICAgICAgICAgICAgIGFuZCB0aGF0IHdlIGtlZXAgdGhlIHRhaWxzIG9mIHRoZSBwcmUtZXhpc3RpbmcgcmVtYWluaW5nIHJvd3MuICopXG4gICAgICAgICAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgcmVtYWluZGVycyBpblxuICAgICAgICAgIENvbnMgKGNvbnMgeCBoZWFkcywgZGlhZ29uYWxzIChjb25zIHhzIHRhaWxzKSB4c3MpXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgICgqIFdlIGRpc2NvdmVyIGEgbmV3IGVtcHR5IHJvdy4gSW4gdGhpcyBjYXNlLCB0aGUgbmV3IGRpYWdvbmFsIGlzXG4gICAgICAgICAgICAganVzdCBbaGVhZHNdLCBhbmQgW3JlbWFpbmRlcnNdIGlzIGluc3RhbnRpYXRlZCB3aXRoIGp1c3QgW3RhaWxzXSxcbiAgICAgICAgICAgICBhcyB3ZSBkbyBub3QgaGF2ZSBvbmUgbW9yZSByZW1haW5pbmcgcm93LiAqKVxuICAgICAgICAgIGxldCBoZWFkcywgdGFpbHMgPSBwZWVsIHJlbWFpbmRlcnMgaW5cbiAgICAgICAgICBDb25zIChoZWFkcywgZGlhZ29uYWxzIHRhaWxzIHhzcylcbiAgICAgIGVuZFxuICB8IE5pbCAtPlxuICAgICAgKCogVGhlcmUgYXJlIG5vIG1vcmUgcm93cyB0byBiZSBkaXNjb3ZlcmVkLiBUaGVyZSByZW1haW5zIHRvIGV4aGF1c3RcbiAgICAgICAgIHRoZSByZW1haW5pbmcgcm93cy4gKilcbiAgICAgIHRyYW5zcG9zZSByZW1haW5kZXJzICgpXG5cbigqIElmIFt4c3NdIGlzIGEgbWF0cml4IChhIHNlcXVlbmNlIG9mIHJvd3MpLCB0aGVuIFtkaWFnb25hbHMgeHNzXSBpc1xuICAgdGhlIHNlcXVlbmNlIG9mIGl0cyBkaWFnb25hbHMuXG5cbiAgIFRoZSBmaXJzdCBkaWFnb25hbCBjb250YWlucyBqdXN0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZVxuICAgZmlyc3Qgcm93LiBUaGUgc2Vjb25kIGRpYWdvbmFsIGNvbnRhaW5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZVxuICAgc2Vjb25kIHJvdyBhbmQgdGhlIHNlY29uZCBlbGVtZW50IG9mIHRoZSBmaXJzdCByb3c7IGFuZCBzbyBvbi5cbiAgIFRoaXMga2luZCBvZiBkaWFnb25hbCBpcyBpbiBmYWN0IHNvbWV0aW1lcyBrbm93biBhcyBhbiBhbnRpZGlhZ29uYWwuXG5cbiAgIC0gRXZlcnkgZGlhZ29uYWwgaXMgYSBmaW5pdGUgc2VxdWVuY2UuXG4gICAtIFRoZSByb3dzIG9mIHRoZSBtYXRyaXggW3hzc10gYXJlIG5vdCByZXF1aXJlZCB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aC5cbiAgIC0gVGhlIG1hdHJpeCBbeHNzXSBpcyBub3QgcmVxdWlyZWQgdG8gYmUgZmluaXRlIChpbiBlaXRoZXIgZGlyZWN0aW9uKS5cbiAgIC0gVGhlIG1hdHJpeCBbeHNzXSBtdXN0IGJlIHBlcnNpc3RlbnQuICopXG5cbmxldCBkaWFnb25hbHMgeHNzID1cbiAgZGlhZ29uYWxzIGVtcHR5IHhzc1xuXG5sZXQgbWFwX3Byb2R1Y3QgZiB4cyB5cyA9XG4gIGNvbmNhdCAoZGlhZ29uYWxzIChcbiAgICBtYXAgKGZ1biB4IC0+XG4gICAgICBtYXAgKGZ1biB5IC0+XG4gICAgICAgIGYgeCB5XG4gICAgICApIHlzXG4gICAgKSB4c1xuICApKVxuXG5sZXQgcHJvZHVjdCB4cyB5cyA9XG4gIG1hcF9wcm9kdWN0IChmdW4geCB5IC0+ICh4LCB5KSkgeHMgeXNcblxubGV0IG9mX2Rpc3BlbnNlciBpdCA9XG4gIGxldCByZWMgYyAoKSA9XG4gICAgbWF0Y2ggaXQoKSB3aXRoXG4gICAgfCBOb25lIC0+XG4gICAgICAgIE5pbFxuICAgIHwgU29tZSB4IC0+XG4gICAgICAgIENvbnMgKHgsIGMpXG4gIGluXG4gIGNcblxubGV0IHRvX2Rpc3BlbnNlciB4cyA9XG4gIGxldCBzID0gcmVmIHhzIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICghcykoKSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgICAgTm9uZVxuICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgIHMgOj0geHM7XG4gICAgICAgIFNvbWUgeFxuXG5cblxubGV0IHJlYyBpbnRzIGkgKCkgPVxuICBDb25zIChpLCBpbnRzIChpICsgMSkpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9IE5vbmUgfCBTb21lIG9mICdhXG5cbmxldCBub25lID0gTm9uZVxubGV0IHNvbWUgdiA9IFNvbWUgdlxubGV0IHZhbHVlIG8gfmRlZmF1bHQgPSBtYXRjaCBvIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IGRlZmF1bHRcbmxldCBnZXQgPSBmdW5jdGlvbiBTb21lIHYgLT4gdiB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJvcHRpb24gaXMgTm9uZVwiXG5sZXQgYmluZCBvIGYgPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IGYgdlxubGV0IGpvaW4gPSBmdW5jdGlvbiBTb21lIG8gLT4gbyB8IE5vbmUgLT4gTm9uZVxubGV0IG1hcCBmIG8gPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IFNvbWUgKGYgdilcbmxldCBmb2xkIH5ub25lIH5zb21lID0gZnVuY3Rpb24gU29tZSB2IC0+IHNvbWUgdiB8IE5vbmUgLT4gbm9uZVxubGV0IGl0ZXIgZiA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBmIHYgfCBOb25lIC0+ICgpXG5sZXQgaXNfbm9uZSA9IGZ1bmN0aW9uIE5vbmUgLT4gdHJ1ZSB8IFNvbWUgXyAtPiBmYWxzZVxubGV0IGlzX3NvbWUgPSBmdW5jdGlvbiBOb25lIC0+IGZhbHNlIHwgU29tZSBfIC0+IHRydWVcblxubGV0IGVxdWFsIGVxIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBlcSB2MCB2MVxufCBOb25lLCBOb25lIC0+IHRydWVcbnwgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSBjbXAgbzAgbzEgPSBtYXRjaCBvMCwgbzEgd2l0aFxufCBTb21lIHYwLCBTb21lIHYxIC0+IGNtcCB2MCB2MVxufCBOb25lLCBOb25lIC0+IDBcbnwgTm9uZSwgU29tZSBfIC0+IC0xXG58IFNvbWUgXywgTm9uZSAtPiAxXG5cbmxldCB0b19yZXN1bHQgfm5vbmUgPSBmdW5jdGlvbiBOb25lIC0+IEVycm9yIG5vbmUgfCBTb21lIHYgLT4gT2sgdlxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBOb25lIC0+IFtdIHwgU29tZSB2IC0+IFt2XVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE5vbmUgLT4gU2VxLmVtcHR5IHwgU29tZSB2IC0+IFNlcS5yZXR1cm4gdlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICgnYSwgJ2UpIHQgPSAoJ2EsICdlKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdlXG5cbmxldCBvayB2ID0gT2sgdlxubGV0IGVycm9yIGUgPSBFcnJvciBlXG5sZXQgdmFsdWUgciB+ZGVmYXVsdCA9IG1hdGNoIHIgd2l0aCBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGRlZmF1bHRcbmxldCBnZXRfb2sgPSBmdW5jdGlvbiBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIEVycm9yIF9cIlxubGV0IGdldF9lcnJvciA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gZSB8IE9rIF8gLT4gaW52YWxpZF9hcmcgXCJyZXN1bHQgaXMgT2sgX1wiXG5sZXQgYmluZCByIGYgPSBtYXRjaCByIHdpdGggT2sgdiAtPiBmIHYgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IGpvaW4gPSBmdW5jdGlvbiBPayByIC0+IHIgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcCBmID0gZnVuY3Rpb24gT2sgdiAtPiBPayAoZiB2KSB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgbWFwX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IEVycm9yIChmIGUpIHwgT2sgXyBhcyB2IC0+IHZcbmxldCBmb2xkIH5vayB+ZXJyb3IgPSBmdW5jdGlvbiBPayB2IC0+IG9rIHYgfCBFcnJvciBlIC0+IGVycm9yIGVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBPayB2IC0+IGYgdiB8IEVycm9yIF8gLT4gKClcbmxldCBpdGVyX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGYgZSB8IE9rIF8gLT4gKClcbmxldCBpc19vayA9IGZ1bmN0aW9uIE9rIF8gLT4gdHJ1ZSB8IEVycm9yIF8gLT4gZmFsc2VcbmxldCBpc19lcnJvciA9IGZ1bmN0aW9uIEVycm9yIF8gLT4gdHJ1ZSB8IE9rIF8gLT4gZmFsc2VcblxubGV0IGVxdWFsIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IF8sIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfm9rIH5lcnJvciByMCByMSA9IG1hdGNoIHIwLCByMSB3aXRoXG58IE9rIHYwLCBPayB2MSAtPiBvayB2MCB2MVxufCBFcnJvciBlMCwgRXJyb3IgZTEgLT4gZXJyb3IgZTAgZTFcbnwgT2sgXywgRXJyb3IgXyAtPiAtMVxufCBFcnJvciBfLCBPayBfIC0+IDFcblxubGV0IHRvX29wdGlvbiA9IGZ1bmN0aW9uIE9rIHYgLT4gU29tZSB2IHwgRXJyb3IgXyAtPiBOb25lXG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIE9rIHYgLT4gW3ZdIHwgRXJyb3IgXyAtPiBbXVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE9rIHYgLT4gU2VxLnJldHVybiB2IHwgRXJyb3IgXyAtPiBTZXEuZW1wdHlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSB0ID0gYm9vbCA9IGZhbHNlIHwgdHJ1ZVxuXG5leHRlcm5hbCBub3QgOiBib29sIC0+IGJvb2wgPSBcIiVib29sbm90XCJcbmV4dGVybmFsICggJiYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoIHx8ICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5sZXQgZXF1YWwgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGJvb2wgLT4gYm9vbCAtPiBpbnQgPSBTdGRsaWIuY29tcGFyZVxuZXh0ZXJuYWwgdG9faW50IDogYm9vbCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5sZXQgdG9fZmxvYXQgPSBmdW5jdGlvbiBmYWxzZSAtPiAwLiB8IHRydWUgLT4gMS5cblxuKCpcbmxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxufCBcImZhbHNlXCIgLT4gU29tZSBmYWxzZVxufCBcInRydWVcIiAtPiBTb21lIHRydWVcbnwgXyAtPiBOb25lXG4qKVxuXG5sZXQgdG9fc3RyaW5nID0gZnVuY3Rpb24gZmFsc2UgLT4gXCJmYWxzZVwiIHwgdHJ1ZSAtPiBcInRydWVcIlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJ1xuICB8ICdcXDE5MicgLi4gJ1xcMjE0J1xuICB8ICdcXDIxNicgLi4gJ1xcMjIyJyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6J1xuICB8ICdcXDIyNCcgLi4gJ1xcMjQ2J1xuICB8ICdcXDI0OCcgLi4gJ1xcMjU0JyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgfCBjIC0+IGNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIGNvcHkgcyBlbHNlIGJlZ2luXG4gICAgbGV0IHMnID0gY3JlYXRlICFuIGluXG4gICAgbiA6PSAwO1xuICAgIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICAgIGJlZ2luIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgKCdcXFwiJyB8ICdcXFxcJykgYXMgYyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ24nXG4gICAgICB8ICdcXHQnIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAndCdcbiAgICAgIHwgJ1xccicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdyJ1xuICAgICAgfCAnXFxiJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ2InXG4gICAgICB8ICgnICcgLi4gJ34nKSBhcyBjIC0+IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCBjIC0+XG4gICAgICAgICAgbGV0IGEgPSBjaGFyX2NvZGUgYyBpblxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIC8gMTAwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIChhIC8gMTApIG1vZCAxMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIG1vZCAxMCkpO1xuICAgICAgZW5kO1xuICAgICAgaW5jciBuXG4gICAgZG9uZTtcbiAgICBzJ1xuICBlbmRcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgbG93ZXJjYXNlIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2Ugc1xuXG5sZXQgY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlIHNcbmxldCB1bmNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZSBzXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBsZXQgYnVmID0gcmVmIChtYWtlIDI1NiAnXFwwMDAnKSBpblxuICBsZXQgcmVzaXplICgpID1cbiAgICAoKiByZXNpemUgKilcbiAgICBsZXQgbmV3X2xlbiA9IEludC5taW4gKDIgKiBsZW5ndGggIWJ1ZikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgaWYgbGVuZ3RoICFidWYgPSBuZXdfbGVuIHRoZW4gZmFpbHdpdGggXCJCeXRlcy5vZl9zZXE6IGNhbm5vdCBncm93IGJ5dGVzXCI7XG4gICAgbGV0IG5ld19idWYgPSBtYWtlIG5ld19sZW4gJ1xcMDAwJyBpblxuICAgIGJsaXQgIWJ1ZiAwIG5ld19idWYgMCAhbjtcbiAgICBidWYgOj0gbmV3X2J1ZlxuICBpblxuICBTZXEuaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgIGlmICFuID0gbGVuZ3RoICFidWYgdGhlbiByZXNpemUoKTtcbiAgICAgICBzZXQgIWJ1ZiAhbiBjO1xuICAgICAgIGluY3IgbilcbiAgICBpO1xuICBzdWIgIWJ1ZiAwICFuXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbigqIFRoZSBnZXRfIGZ1bmN0aW9ucyBhcmUgYWxsIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5cbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2dVwiXG5leHRlcm5hbCBnZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfYnl0ZXNfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9ieXRlc19nZXQ2NFwiXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHNldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgc2V0X2ludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNlwiXG5leHRlcm5hbCBzZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJcIlxuZXh0ZXJuYWwgc2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfYmUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcbiAgZWxzZSBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcblxubGV0IGdldF9pbnQ4IGIgaSA9XG4gICgoZ2V0X3VpbnQ4IGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSA4KSkgYXNyIChTeXMuaW50X3NpemUgLSA4KVxuXG5sZXQgZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF91aW50MTZfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X2ludDE2X25lIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9uZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2xlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9sZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2JlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9iZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDMyX2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQzMl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2UgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHhcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2JlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeCBlbHNlXG4gIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG5cbmxldCBzZXRfaW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDE2X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfdWludDggPSBzZXRfaW50OFxubGV0IHNldF91aW50MTZfbmUgPSBzZXRfaW50MTZfbmVcbmxldCBzZXRfdWludDE2X2JlID0gc2V0X2ludDE2X2JlXG5sZXQgc2V0X3VpbnQxNl9sZSA9IHNldF9pbnQxNl9sZVxuXG4oKiBVVEYgY29kZWNzIGFuZCB2YWxpZGF0aW9ucyAqKVxuXG5sZXQgZGVjX2ludmFsaWQgPSBVY2hhci51dGZfZGVjb2RlX2ludmFsaWRcbmxldFtAaW5saW5lXSBkZWNfcmV0IG4gdSA9IFVjaGFyLnV0Zl9kZWNvZGUgbiAoVWNoYXIudW5zYWZlX29mX2ludCB1KVxuXG4oKiBJbiBjYXNlIG9mIGRlY29kaW5nIGVycm9yLCBpZiB3ZSBlcnJvciBvbiB0aGUgZmlyc3QgYnl0ZSwgd2VcbiAgIGNvbnN1bWUgdGhlIGJ5dGUsIG90aGVyd2lzZSB3ZSBjb25zdW1lIHRoZSBbbl0gYnl0ZXMgcHJlY2VlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBHYWxsaXVtLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFN0cmluZyBvcGVyYXRpb25zLCBiYXNlZCBvbiBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIGJ5dGVzLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgY29weSBzID1cbiAgQi5jb3B5IChib3MgcykgfD4gYnRzXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGZpbGwgPVxuICBCLmZpbGxcbmxldCBibGl0ID1cbiAgQi5ibGl0X3N0cmluZ1xuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IFwiXCJcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluIGJ0cyBAQFxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKEIuY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgPSAoIF4gKVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlciBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyaSBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxubGV0IG1hcCBmIHMgPVxuICBCLm1hcCBmIChib3MgcykgfD4gYnRzXG5sZXQgbWFwaSBmIHMgPVxuICBCLm1hcGkgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IGZvbGRfcmlnaHQgZiB4IGEgPVxuICBCLmZvbGRfcmlnaHQgZiAoYm9zIHgpIGFcbmxldCBmb2xkX2xlZnQgZiBhIHggPVxuICBCLmZvbGRfbGVmdCBmIGEgKGJvcyB4KVxubGV0IGV4aXN0cyBmIHMgPVxuICBCLmV4aXN0cyBmIChib3MgcylcbmxldCBmb3JfYWxsIGYgcyA9XG4gIEIuZm9yX2FsbCBmIChib3MgcylcblxuKCogQmV3YXJlOiB3ZSBjYW5ub3QgdXNlIEIudHJpbSBvciBCLmVzY2FwZSBiZWNhdXNlIHRoZXkgYWx3YXlzIG1ha2UgYVxuICAgY29weSwgYnV0IFN0cmluZy5tbGkgc3BlbGxzIG91dCBzb21lIGNhc2VzIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZFxuICAgdG8gbWFrZSBhIGNvcHkuICopXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgaWYgcyA9IFwiXCIgdGhlbiBzXG4gIGVsc2UgaWYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAwKSB8fCBpc19zcGFjZSAodW5zYWZlX2dldCBzIChsZW5ndGggcyAtIDEpKVxuICAgIHRoZW4gYnRzIChCLnRyaW0gKGJvcyBzKSlcbiAgZWxzZSBzXG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgcmVjIGVzY2FwZV9pZl9uZWVkZWQgcyBuIGkgPVxuICAgIGlmIGkgPj0gbiB0aGVuIHMgZWxzZVxuICAgICAgbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFwwMDAnLi4nXFwwMzEnIHwgJ1xcMTI3Jy4uICdcXDI1NScgLT5cbiAgICAgICAgICBidHMgKEIuZXNjYXBlZCAoYm9zIHMpKVxuICAgICAgfCBfIC0+IGVzY2FwZV9pZl9uZWVkZWQgcyBuIChpKzEpXG4gIGluXG4gIGVzY2FwZV9pZl9uZWVkZWQgcyAobGVuZ3RoIHMpIDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICAgIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPVxuICBCLnVwcGVyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID1cbiAgQi5sb3dlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIudW5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPVxuICBCLnVwcGVyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZSBzID1cbiAgQi5sb3dlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplIHMgPVxuICBCLmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemUgcyA9XG4gIEIudW5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zdHJpbmdfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBib3MgcyB8PiBCLnRvX3NlcVxuXG5sZXQgdG9fc2VxaSBzID0gYm9zIHMgfD4gQi50b19zZXFpXG5cbmxldCBvZl9zZXEgZyA9IEIub2Zfc2VxIGcgfD4gYnRzXG5cbigqIFVURiBkZWNvZGVycyBhbmQgdmFsaWRhdG9ycyAqKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl84X3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl84IHMgPSBCLmlzX3ZhbGlkX3V0Zl84IChib3MgcylcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZiZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZiZSBzID0gQi5pc192YWxpZF91dGZfMTZiZSAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2bGVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2bGUgKGJvcyBzKVxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCBnZXRfdWludDggOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX3N0cmluZ19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9zdHJpbmdfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfc3RyaW5nX2dldDY0XCJcblxubGV0IGdldF9pbnQ4IHMgaSA9IEIuZ2V0X2ludDggKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9sZSBzIGkgPSBCLmdldF91aW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9iZSBzIGkgPSBCLmdldF91aW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X25lIHMgaSA9IEIuZ2V0X2ludDE2X25lIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9sZSBzIGkgPSBCLmdldF9pbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfYmUgcyBpID0gQi5nZXRfaW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2xlIHMgaSA9IEIuZ2V0X2ludDMyX2xlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9iZSBzIGkgPSBCLmdldF9pbnQzMl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfbGUgcyBpID0gQi5nZXRfaW50NjRfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2JlIHMgaSA9IEIuZ2V0X2ludDY0X2JlIChib3MgcykgaVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSB1bml0ID0gKClcblxubGV0IGVxdWFsICgpICgpID0gdHJ1ZVxubGV0IGNvbXBhcmUgKCkgKCkgPSAwXG5sZXQgdG9fc3RyaW5nICgpID0gXCIoKVwiXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgZXh0ZXJuX2ZsYWdzID1cbiAgICBOb19zaGFyaW5nXG4gIHwgQ2xvc3VyZXNcbiAgfCBDb21wYXRfMzJcbigqIG5vdGU6IHRoaXMgdHlwZSBkZWZpbml0aW9uIGlzIHVzZWQgaW4gJ3J1bnRpbWUvZGVidWdnZXIuYycgKilcblxuZXh0ZXJuYWwgdG9fY2hhbm5lbDogb3V0X2NoYW5uZWwgLT4gJ2EgLT4gZXh0ZXJuX2ZsYWdzIGxpc3QgLT4gdW5pdFxuICAgID0gXCJjYW1sX291dHB1dF92YWx1ZVwiXG5leHRlcm5hbCB0b19ieXRlczogJ2EgLT4gZXh0ZXJuX2ZsYWdzIGxpc3QgLT4gYnl0ZXNcbiAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXNcIlxuZXh0ZXJuYWwgdG9fc3RyaW5nOiAnYSAtPiBleHRlcm5fZmxhZ3MgbGlzdCAtPiBzdHJpbmdcbiAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nXCJcbmV4dGVybmFsIHRvX2J1ZmZlcl91bnNhZmU6XG4gICAgICBieXRlcyAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGV4dGVybl9mbGFncyBsaXN0IC0+IGludFxuICAgID0gXCJjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXJcIlxuXG5sZXQgdG9fYnVmZmVyIGJ1ZmYgb2ZzIGxlbiB2IGZsYWdzID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IEJ5dGVzLmxlbmd0aCBidWZmIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJNYXJzaGFsLnRvX2J1ZmZlcjogc3Vic3RyaW5nIG91dCBvZiBib3VuZHNcIlxuICBlbHNlIHRvX2J1ZmZlcl91bnNhZmUgYnVmZiBvZnMgbGVuIHYgZmxhZ3NcblxuKCogVGhlIGZ1bmN0aW9ucyBiZWxvdyB1c2UgYnl0ZSBzZXF1ZW5jZXMgYXMgaW5wdXQsIG5ldmVyIHVzaW5nIGFueVxuICAgbXV0YXRpb24uIEl0IG1ha2VzIHNlbnNlIHRvIHVzZSBub24tbXV0YXRlZCBbYnl0ZXNdIHJhdGhlciB0aGFuXG4gICBbc3RyaW5nXSwgYmVjYXVzZSB3ZSByZWFsbHkgd29yayB3aXRoIHNlcXVlbmNlcyBvZiBieXRlcywgbm90XG4gICBhIHRleHQgcmVwcmVzZW50YXRpb24uXG4qKVxuXG5leHRlcm5hbCBmcm9tX2NoYW5uZWw6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgZnJvbV9ieXRlc191bnNhZmU6IGJ5dGVzIC0+IGludCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzXCJcbmV4dGVybmFsIGRhdGFfc2l6ZV91bnNhZmU6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcImNhbWxfbWFyc2hhbF9kYXRhX3NpemVcIlxuXG5sZXQgaGVhZGVyX3NpemUgPSAyMFxubGV0IGRhdGFfc2l6ZSBidWZmIG9mcyA9XG4gIGlmIG9mcyA8IDAgfHwgb2ZzID4gQnl0ZXMubGVuZ3RoIGJ1ZmYgLSBoZWFkZXJfc2l6ZVxuICB0aGVuIGludmFsaWRfYXJnIFwiTWFyc2hhbC5kYXRhX3NpemVcIlxuICBlbHNlIGRhdGFfc2l6ZV91bnNhZmUgYnVmZiBvZnNcbmxldCB0b3RhbF9zaXplIGJ1ZmYgb2ZzID0gaGVhZGVyX3NpemUgKyBkYXRhX3NpemUgYnVmZiBvZnNcblxubGV0IGZyb21fYnl0ZXMgYnVmZiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+IEJ5dGVzLmxlbmd0aCBidWZmIC0gaGVhZGVyX3NpemVcbiAgdGhlbiBpbnZhbGlkX2FyZyBcIk1hcnNoYWwuZnJvbV9ieXRlc1wiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgbGVuID0gZGF0YV9zaXplX3Vuc2FmZSBidWZmIG9mcyBpblxuICAgIGlmIG9mcyA+IEJ5dGVzLmxlbmd0aCBidWZmIC0gKGhlYWRlcl9zaXplICsgbGVuKVxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJNYXJzaGFsLmZyb21fYnl0ZXNcIlxuICAgIGVsc2UgZnJvbV9ieXRlc191bnNhZmUgYnVmZiBvZnNcbiAgZW5kXG5cbmxldCBmcm9tX3N0cmluZyBidWZmIG9mcyA9XG4gICgqIEJ5dGVzLnVuc2FmZV9vZl9zdHJpbmcgaXMgc2FmZSBoZXJlLCBhcyB0aGUgcHJvZHVjZWQgYnl0ZVxuICAgICBzZXF1ZW5jZSBpcyBuZXZlciBtdXRhdGVkICopXG4gIGZyb21fYnl0ZXMgKEJ5dGVzLnVuc2FmZV9vZl9zdHJpbmcgYnVmZikgb2ZzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBhcnJheXMuICopXG50eXBlICdhIHQgPSAnYSBhcnJheVxuXG4oKiBBcnJheSBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGxlbmd0aCA6ICdhIGFycmF5IC0+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+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtJbnQzMl06IDMyLWJpdCBpbnRlZ2VycyAqKVxuXG5leHRlcm5hbCBuZWcgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX25lZ1wiXG5leHRlcm5hbCBhZGQgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX2FkZFwiXG5leHRlcm5hbCBzdWIgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX3N1YlwiXG5leHRlcm5hbCBtdWwgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX211bFwiXG5leHRlcm5hbCBkaXYgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX2RpdlwiXG5leHRlcm5hbCByZW0gOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX21vZFwiXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX2FuZFwiXG5leHRlcm5hbCBsb2dvciA6IGludDMyIC0+IGludDMyIC0+IGludDMyID0gXCIlaW50MzJfb3JcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2xzbFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2FzclwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50MzIgLT4gaW50IC0+IGludDMyID0gXCIlaW50MzJfbHNyXCJcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBpbnQzMiA9IFwiJWludDMyX29mX2ludFwiXG5leHRlcm5hbCB0b19pbnQgOiBpbnQzMiAtPiBpbnQgPSBcIiVpbnQzMl90b19pbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQzMlxuICA9IFwiY2FtbF9pbnQzMl9vZl9mbG9hdFwiIFwiY2FtbF9pbnQzMl9vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50MzIgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50MzJfdG9fZmxvYXRcIiBcImNhbWxfaW50MzJfdG9fZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBiaXRzX29mX2Zsb2F0IDogZmxvYXQgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfYml0c19vZl9mbG9hdFwiIFwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvYXRfb2ZfYml0cyA6IGludDMyIC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNcIiBcImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0c191bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cblxubGV0IHplcm8gPSAwbFxubGV0IG9uZSA9IDFsXG5sZXQgbWludXNfb25lID0gLTFsXG5sZXQgc3VjYyBuID0gYWRkIG4gMWxcbmxldCBwcmVkIG4gPSBzdWIgbiAxbFxubGV0IGFicyBuID0gaWYgbiA+PSAwbCB0aGVuIG4gZWxzZSBuZWcgblxubGV0IG1pbl9pbnQgPSAweDgwMDAwMDAwbFxubGV0IG1heF9pbnQgPSAweDdGRkZGRkZGbFxubGV0IGxvZ25vdCBuID0gbG9neG9yIG4gKC0xbClcblxubGV0IHVuc2lnbmVkX3RvX2ludCA9XG4gIG1hdGNoIFN5cy53b3JkX3NpemUgd2l0aFxuICB8IDMyIC0+XG4gICAgICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICAgICAgZnVuIG4gLT5cbiAgICAgICAgaWYgY29tcGFyZSB6ZXJvIG4gPD0gMCAmJiBjb21wYXJlIG4gbWF4X2ludCA8PSAwIHRoZW5cbiAgICAgICAgICBTb21lICh0b19pbnQgbilcbiAgICAgICAgZWxzZVxuICAgICAgICAgIE5vbmVcbiAgfCA2NCAtPlxuICAgICAgKCogU28gdGhhdCBpdCBjb21waWxlcyBpbiAzMi1iaXQgKilcbiAgICAgIGxldCBtYXNrID0gMHhGRkZGIGxzbCAxNiBsb3IgMHhGRkZGIGluXG4gICAgICBmdW4gbiAtPiBTb21lICh0b19pbnQgbiBsYW5kIG1hc2spXG4gIHwgXyAtPlxuICAgICAgYXNzZXJ0IGZhbHNlXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmcgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmxldCB0b19zdHJpbmcgbiA9IGZvcm1hdCBcIiVkXCIgblxuXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzIgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IGV4cG9zZSBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZSBkaXJlY3RseS4gKilcbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbnR5cGUgdCA9IGludDMyXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuKCogVW5zaWduZWQgZGl2aXNpb24gZnJvbSBzaWduZWQgZGl2aXNpb24gb2YgdGhlIHNhbWVcbiAgIGJpdG5lc3MuIFNlZSBXYXJyZW4gSnIuLCBIZW5yeSBTLiAoMjAxMykuIEhhY2tlcidzIERlbGlnaHQgKDIgZWQuKSwgU2VjIDktMy5cbiopXG5sZXQgdW5zaWduZWRfZGl2IG4gZCA9XG4gIGlmIGQgPCB6ZXJvIHRoZW5cbiAgICBpZiB1bnNpZ25lZF9jb21wYXJlIG4gZCA8IDAgdGhlbiB6ZXJvIGVsc2Ugb25lXG4gIGVsc2VcbiAgICBsZXQgcSA9IHNoaWZ0X2xlZnQgKGRpdiAoc2hpZnRfcmlnaHRfbG9naWNhbCBuIDEpIGQpIDEgaW5cbiAgICBsZXQgciA9IHN1YiBuIChtdWwgcSBkKSBpblxuICAgIGlmIHVuc2lnbmVkX2NvbXBhcmUgciBkID49IDAgdGhlbiBzdWNjIHEgZWxzZSBxXG5cbmxldCB1bnNpZ25lZF9yZW0gbiBkID1cbiAgc3ViIG4gKG11bCAodW5zaWduZWRfZGl2IG4gZCkgZClcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogVGhlIHBhcnNpbmcgZW5naW5lICopXG5cbm9wZW4gTGV4aW5nXG5cbigqIEludGVybmFsIGludGVyZmFjZSB0byB0aGUgcGFyc2luZyBlbmdpbmUgKilcblxudHlwZSBwYXJzZXJfZW52ID1cbiAgeyBtdXRhYmxlIHNfc3RhY2sgOiBpbnQgYXJyYXk7ICAgICAgICAoKiBTdGF0ZXMgKilcbiAgICBtdXRhYmxlIHZfc3RhY2sgOiBPYmoudCBhcnJheTsgICAgICAoKiBTZW1hbnRpYyBhdHRyaWJ1dGVzICopXG4gICAgbXV0YWJsZSBzeW1iX3N0YXJ0X3N0YWNrIDogcG9zaXRpb24gYXJyYXk7ICgqIFN0YXJ0IHBvc2l0aW9ucyAqKVxuICAgIG11dGFibGUgc3ltYl9lbmRfc3RhY2sgOiBwb3NpdGlvbiBhcnJheTsgICAoKiBFbmQgcG9zaXRpb25zICopXG4gICAgbXV0YWJsZSBzdGFja3NpemUgOiBpbnQ7ICAgICAgICAgICAgKCogU2l6ZSBvZiB0aGUgc3RhY2tzICopXG4gICAgbXV0YWJsZSBzdGFja2Jhc2UgOiBpbnQ7ICAgICAgICAgICAgKCogQmFzZSBzcCBmb3IgY3VycmVudCBwYXJzZSAqKVxuICAgIG11dGFibGUgY3Vycl9jaGFyIDogaW50OyAgICAgICAgICAgICgqIExhc3QgdG9rZW4gcmVhZCAqKVxuICAgIG11dGFibGUgbHZhbCA6IE9iai50OyAgICAgICAgICAgICAgICgqIEl0cyBzZW1hbnRpYyBhdHRyaWJ1dGUgKilcbiAgICBtdXRhYmxlIHN5bWJfc3RhcnQgOiBwb3NpdGlvbjsgICAgICAoKiBTdGFydCBwb3MuIG9mIHRoZSBjdXJyZW50IHN5bWJvbCopXG4gICAgbXV0YWJsZSBzeW1iX2VuZCA6IHBvc2l0aW9uOyAgICAgICAgKCogRW5kIHBvcy4gb2YgdGhlIGN1cnJlbnQgc3ltYm9sICopXG4gICAgbXV0YWJsZSBhc3AgOiBpbnQ7ICAgICAgICAgICAgICAgICAgKCogVGhlIHN0YWNrIHBvaW50ZXIgZm9yIGF0dHJpYnV0ZXMgKilcbiAgICBtdXRhYmxlIHJ1bGVfbGVuIDogaW50OyAgICAgICAgICAgICAoKiBOdW1iZXIgb2YgcmhzIGl0ZW1zIGluIHRoZSBydWxlICopXG4gICAgbXV0YWJsZSBydWxlX251bWJlciA6IGludDsgICAgICAgICAgKCogUnVsZSBudW1iZXIgdG8gcmVkdWNlIGJ5ICopXG4gICAgbXV0YWJsZSBzcCA6IGludDsgICAgICAgICAgICAgICAgICAgKCogU2F2ZWQgc3AgZm9yIHBhcnNlX2VuZ2luZSAqKVxuICAgIG11dGFibGUgc3RhdGUgOiBpbnQ7ICAgICAgICAgICAgICAgICgqIFNhdmVkIHN0YXRlIGZvciBwYXJzZV9lbmdpbmUgKilcbiAgICBtdXRhYmxlIGVycmZsYWcgOiBpbnQgfSAgICAgICAgICAgICAoKiBTYXZlZCBlcnJvciBmbGFnIGZvciBwYXJzZV9lbmdpbmUgKilcbltAQHdhcm5pbmcgXCItdW51c2VkLWZpZWxkXCJdXG5cbnR5cGUgcGFyc2VfdGFibGVzID1cbiAgeyBhY3Rpb25zIDogKHBhcnNlcl9lbnYgLT4gT2JqLnQpIGFycmF5O1xuICAgIHRyYW5zbF9jb25zdCA6IGludCBhcnJheTtcbiAgICB0cmFuc2xfYmxvY2sgOiBpbnQgYXJyYXk7XG4gICAgbGhzIDogc3RyaW5nO1xuICAgIGxlbiA6IHN0cmluZztcbiAgICBkZWZyZWQgOiBzdHJpbmc7XG4gICAgZGdvdG8gOiBzdHJpbmc7XG4gICAgc2luZGV4IDogc3RyaW5nO1xuICAgIHJpbmRleCA6IHN0cmluZztcbiAgICBnaW5kZXggOiBzdHJpbmc7XG4gICAgdGFibGVzaXplIDogaW50O1xuICAgIHRhYmxlIDogc3RyaW5nO1xuICAgIGNoZWNrIDogc3RyaW5nO1xuICAgIGVycm9yX2Z1bmN0aW9uIDogc3RyaW5nIC0+IHVuaXQ7XG4gICAgbmFtZXNfY29uc3QgOiBzdHJpbmc7XG4gICAgbmFtZXNfYmxvY2sgOiBzdHJpbmcgfVxuXG5leGNlcHRpb24gWVlleGl0IG9mIE9iai50XG5leGNlcHRpb24gUGFyc2VfZXJyb3JcblxudHlwZSBwYXJzZXJfaW5wdXQgPVxuICAgIFN0YXJ0XG4gIHwgVG9rZW5fcmVhZFxuICB8IFN0YWNrc19ncm93bl8xXG4gIHwgU3RhY2tzX2dyb3duXzJcbiAgfCBTZW1hbnRpY19hY3Rpb25fY29tcHV0ZWRcbiAgfCBFcnJvcl9kZXRlY3RlZFxuXG50eXBlIHBhcnNlcl9vdXRwdXQgPVxuICAgIFJlYWRfdG9rZW5cbiAgfCBSYWlzZV9wYXJzZV9lcnJvclxuICB8IEdyb3dfc3RhY2tzXzFcbiAgfCBHcm93X3N0YWNrc18yXG4gIHwgQ29tcHV0ZV9zZW1hbnRpY19hY3Rpb25cbiAgfCBDYWxsX2Vycm9yX2Z1bmN0aW9uXG5cbigqIHRvIGF2b2lkIHdhcm5pbmdzICopXG5sZXQgXyA9IFtSZWFkX3Rva2VuOyBSYWlzZV9wYXJzZV9lcnJvcjsgR3Jvd19zdGFja3NfMTsgR3Jvd19zdGFja3NfMjtcbiAgICAgICAgIENvbXB1dGVfc2VtYW50aWNfYWN0aW9uOyBDYWxsX2Vycm9yX2Z1bmN0aW9uXVxuXG5leHRlcm5hbCBwYXJzZV9lbmdpbmUgOlxuICAgIHBhcnNlX3RhYmxlcyAtPiBwYXJzZXJfZW52IC0+IHBhcnNlcl9pbnB1dCAtPiBPYmoudCAtPiBwYXJzZXJfb3V0cHV0XG4gICAgPSBcImNhbWxfcGFyc2VfZW5naW5lXCJcblxuZXh0ZXJuYWwgc2V0X3RyYWNlOiBib29sIC0+IGJvb2xcbiAgICA9IFwiY2FtbF9zZXRfcGFyc2VyX3RyYWNlXCJcblxubGV0IGVudiA9XG4gIHsgc19zdGFjayA9IEFycmF5Lm1ha2UgMTAwIDA7XG4gICAgdl9zdGFjayA9IEFycmF5Lm1ha2UgMTAwIChPYmoucmVwciAoKSk7XG4gICAgc3ltYl9zdGFydF9zdGFjayA9IEFycmF5Lm1ha2UgMTAwIGR1bW15X3BvcztcbiAgICBzeW1iX2VuZF9zdGFjayA9IEFycmF5Lm1ha2UgMTAwIGR1bW15X3BvcztcbiAgICBzdGFja3NpemUgPSAxMDA7XG4gICAgc3RhY2tiYXNlID0gMDtcbiAgICBjdXJyX2NoYXIgPSAwO1xuICAgIGx2YWwgPSBPYmoucmVwciAoKTtcbiAgICBzeW1iX3N0YXJ0ID0gZHVtbXlfcG9zO1xuICAgIHN5bWJfZW5kID0gZHVtbXlfcG9zO1xuICAgIGFzcCA9IDA7XG4gICAgcnVsZV9sZW4gPSAwO1xuICAgIHJ1bGVfbnVtYmVyID0gMDtcbiAgICBzcCA9IDA7XG4gICAgc3RhdGUgPSAwO1xuICAgIGVycmZsYWcgPSAwIH1cblxubGV0IGdyb3dfc3RhY2tzKCkgPVxuICBsZXQgb2xkc2l6ZSA9IGVudi5zdGFja3NpemUgaW5cbiAgbGV0IG5ld3NpemUgPSBvbGRzaXplICogMiBpblxuICBsZXQgbmV3X3MgPSBBcnJheS5tYWtlIG5ld3NpemUgMFxuICBhbmQgbmV3X3YgPSBBcnJheS5tYWtlIG5ld3NpemUgKE9iai5yZXByICgpKVxuICBhbmQgbmV3X3N0YXJ0ID0gQXJyYXkubWFrZSBuZXdzaXplIGR1bW15X3Bvc1xuICBhbmQgbmV3X2VuZCA9IEFycmF5Lm1ha2UgbmV3c2l6ZSBkdW1teV9wb3MgaW5cbiAgICBBcnJheS5ibGl0IGVudi5zX3N0YWNrIDAgbmV3X3MgMCBvbGRzaXplO1xuICAgIGVudi5zX3N0YWNrIDwtIG5ld19zO1xuICAgIEFycmF5LmJsaXQgZW52LnZfc3RhY2sgMCBuZXdfdiAwIG9sZHNpemU7XG4gICAgZW52LnZfc3RhY2sgPC0gbmV3X3Y7XG4gICAgQXJyYXkuYmxpdCBlbnYuc3ltYl9zdGFydF9zdGFjayAwIG5ld19zdGFydCAwIG9sZHNpemU7XG4gICAgZW52LnN5bWJfc3RhcnRfc3RhY2sgPC0gbmV3X3N0YXJ0O1xuICAgIEFycmF5LmJsaXQgZW52LnN5bWJfZW5kX3N0YWNrIDAgbmV3X2VuZCAwIG9sZHNpemU7XG4gICAgZW52LnN5bWJfZW5kX3N0YWNrIDwtIG5ld19lbmQ7XG4gICAgZW52LnN0YWNrc2l6ZSA8LSBuZXdzaXplXG5cbmxldCBjbGVhcl9wYXJzZXIoKSA9XG4gIEFycmF5LmZpbGwgZW52LnZfc3RhY2sgMCBlbnYuc3RhY2tzaXplIChPYmoucmVwciAoKSk7XG4gIGVudi5sdmFsIDwtIE9iai5yZXByICgpXG5cbmxldCBjdXJyZW50X2xvb2thaGVhZF9mdW4gPSByZWYgKGZ1biAoXyA6IE9iai50KSAtPiBmYWxzZSlcblxubGV0IHl5cGFyc2UgdGFibGVzIHN0YXJ0IGxleGVyIGxleGJ1ZiA9XG4gIGxldCByZWMgbG9vcCBjbWQgYXJnID1cbiAgICBtYXRjaCBwYXJzZV9lbmdpbmUgdGFibGVzIGVudiBjbWQgYXJnIHdpdGhcbiAgICAgIFJlYWRfdG9rZW4gLT5cbiAgICAgICAgbGV0IHQgPSBPYmoucmVwcihsZXhlciBsZXhidWYpIGluXG4gICAgICAgIGVudi5zeW1iX3N0YXJ0IDwtIGxleGJ1Zi5sZXhfc3RhcnRfcDtcbiAgICAgICAgZW52LnN5bWJfZW5kIDwtIGxleGJ1Zi5sZXhfY3Vycl9wO1xuICAgICAgICBsb29wIFRva2VuX3JlYWQgdFxuICAgIHwgUmFpc2VfcGFyc2VfZXJyb3IgLT5cbiAgICAgICAgcmFpc2UgUGFyc2VfZXJyb3JcbiAgICB8IENvbXB1dGVfc2VtYW50aWNfYWN0aW9uIC0+XG4gICAgICAgIGxldCAoYWN0aW9uLCB2YWx1ZSkgPVxuICAgICAgICAgIHRyeVxuICAgICAgICAgICAgKFNlbWFudGljX2FjdGlvbl9jb21wdXRlZCwgdGFibGVzLmFjdGlvbnMuKGVudi5ydWxlX251bWJlcikgZW52KVxuICAgICAgICAgIHdpdGggUGFyc2VfZXJyb3IgLT5cbiAgICAgICAgICAgIChFcnJvcl9kZXRlY3RlZCwgT2JqLnJlcHIgKCkpIGluXG4gICAgICAgIGxvb3AgYWN0aW9uIHZhbHVlXG4gICAgfCBHcm93X3N0YWNrc18xIC0+XG4gICAgICAgIGdyb3dfc3RhY2tzKCk7IGxvb3AgU3RhY2tzX2dyb3duXzEgKE9iai5yZXByICgpKVxuICAgIHwgR3Jvd19zdGFja3NfMiAtPlxuICAgICAgICBncm93X3N0YWNrcygpOyBsb29wIFN0YWNrc19ncm93bl8yIChPYmoucmVwciAoKSlcbiAgICB8IENhbGxfZXJyb3JfZnVuY3Rpb24gLT5cbiAgICAgICAgdGFibGVzLmVycm9yX2Z1bmN0aW9uIFwic3ludGF4IGVycm9yXCI7XG4gICAgICAgIGxvb3AgRXJyb3JfZGV0ZWN0ZWQgKE9iai5yZXByICgpKSBpblxuICBsZXQgaW5pdF9hc3AgPSBlbnYuYXNwXG4gIGFuZCBpbml0X3NwID0gZW52LnNwXG4gIGFuZCBpbml0X3N0YWNrYmFzZSA9IGVudi5zdGFja2Jhc2VcbiAgYW5kIGluaXRfc3RhdGUgPSBlbnYuc3RhdGVcbiAgYW5kIGluaXRfY3Vycl9jaGFyID0gZW52LmN1cnJfY2hhclxuICBhbmQgaW5pdF9sdmFsID0gZW52Lmx2YWxcbiAgYW5kIGluaXRfZXJyZmxhZyA9IGVudi5lcnJmbGFnIGluXG4gIGVudi5zdGFja2Jhc2UgPC0gZW52LnNwICsgMTtcbiAgZW52LmN1cnJfY2hhciA8LSBzdGFydDtcbiAgZW52LnN5bWJfZW5kIDwtIGxleGJ1Zi5sZXhfY3Vycl9wO1xuICB0cnlcbiAgICBsb29wIFN0YXJ0IChPYmoucmVwciAoKSlcbiAgd2l0aCBleG4gLT5cbiAgICBsZXQgY3Vycl9jaGFyID0gZW52LmN1cnJfY2hhciBpblxuICAgIGVudi5hc3AgPC0gaW5pdF9hc3A7XG4gICAgZW52LnNwIDwtIGluaXRfc3A7XG4gICAgZW52LnN0YWNrYmFzZSA8LSBpbml0X3N0YWNrYmFzZTtcbiAgICBlbnYuc3RhdGUgPC0gaW5pdF9zdGF0ZTtcbiAgICBlbnYuY3Vycl9jaGFyIDwtIGluaXRfY3Vycl9jaGFyO1xuICAgIGVudi5sdmFsIDwtIGluaXRfbHZhbDtcbiAgICBlbnYuZXJyZmxhZyA8LSBpbml0X2VycmZsYWc7XG4gICAgbWF0Y2ggZXhuIHdpdGhcbiAgICAgIFlZZXhpdCB2IC0+XG4gICAgICAgIE9iai5tYWdpYyB2XG4gICAgfCBfIC0+XG4gICAgICAgIGN1cnJlbnRfbG9va2FoZWFkX2Z1biA6PVxuICAgICAgICAgIChmdW4gdG9rIC0+XG4gICAgICAgICAgICBpZiBPYmouaXNfYmxvY2sgdG9rXG4gICAgICAgICAgICB0aGVuIHRhYmxlcy50cmFuc2xfYmxvY2suKE9iai50YWcgdG9rKSA9IGN1cnJfY2hhclxuICAgICAgICAgICAgZWxzZSB0YWJsZXMudHJhbnNsX2NvbnN0LihPYmoubWFnaWMgdG9rKSA9IGN1cnJfY2hhcik7XG4gICAgICAgIHJhaXNlIGV4blxuXG5sZXQgcGVla192YWwgZW52IG4gPVxuICBPYmoubWFnaWMgZW52LnZfc3RhY2suKGVudi5hc3AgLSBuKVxuXG5sZXQgc3ltYm9sX3N0YXJ0X3BvcyAoKSA9XG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpIDw9IDAgdGhlbiBlbnYuc3ltYl9lbmRfc3RhY2suKGVudi5hc3ApXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHN0ID0gZW52LnN5bWJfc3RhcnRfc3RhY2suKGVudi5hc3AgLSBpICsgMSkgaW5cbiAgICAgIGxldCBlbiA9IGVudi5zeW1iX2VuZF9zdGFjay4oZW52LmFzcCAtIGkgKyAxKSBpblxuICAgICAgaWYgc3QgPD4gZW4gdGhlbiBzdCBlbHNlIGxvb3AgKGkgLSAxKVxuICAgIGVuZFxuICBpblxuICBsb29wIGVudi5ydWxlX2xlblxuXG5sZXQgc3ltYm9sX2VuZF9wb3MgKCkgPSBlbnYuc3ltYl9lbmRfc3RhY2suKGVudi5hc3ApXG5sZXQgcmhzX3N0YXJ0X3BvcyBuID0gZW52LnN5bWJfc3RhcnRfc3RhY2suKGVudi5hc3AgLSAoZW52LnJ1bGVfbGVuIC0gbikpXG5sZXQgcmhzX2VuZF9wb3MgbiA9IGVudi5zeW1iX2VuZF9zdGFjay4oZW52LmFzcCAtIChlbnYucnVsZV9sZW4gLSBuKSlcblxubGV0IHN5bWJvbF9zdGFydCAoKSA9IChzeW1ib2xfc3RhcnRfcG9zICgpKS5wb3NfY251bVxubGV0IHN5bWJvbF9lbmQgKCkgPSAoc3ltYm9sX2VuZF9wb3MgKCkpLnBvc19jbnVtXG5sZXQgcmhzX3N0YXJ0IG4gPSAocmhzX3N0YXJ0X3BvcyBuKS5wb3NfY251bVxubGV0IHJoc19lbmQgbiA9IChyaHNfZW5kX3BvcyBuKS5wb3NfY251bVxuXG5sZXQgaXNfY3VycmVudF9sb29rYWhlYWQgdG9rID1cbiAgKCFjdXJyZW50X2xvb2thaGVhZF9mdW4pKE9iai5yZXByIHRvaylcblxubGV0IHBhcnNlX2Vycm9yIChfIDogc3RyaW5nKSA9ICgpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFNldHMgb3ZlciBvcmRlcmVkIHR5cGVzICopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGVsdFxuICAgIHR5cGUgdFxuICAgIHZhbCBlbXB0eTogdFxuICAgIHZhbCBpc19lbXB0eTogdCAtPiBib29sXG4gICAgdmFsIG1lbTogZWx0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgc2luZ2xldG9uOiBlbHQgLT4gdFxuICAgIHZhbCByZW1vdmU6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgdW5pb246IHQgLT4gdCAtPiB0XG4gICAgdmFsIGludGVyOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBkaXNqb2ludDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZGlmZjogdCAtPiB0IC0+IHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc3Vic2V0OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoZWx0IC0+IHVuaXQpIC0+IHQgLT4gdW5pdFxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBmb3JfYWxsOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGVsdCAtPiBlbHQgb3B0aW9uKSAtPiB0IC0+IHRcbiAgICB2YWwgcGFydGl0aW9uOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdCAqIHRcbiAgICB2YWwgY2FyZGluYWw6IHQgLT4gaW50XG4gICAgdmFsIGVsZW1lbnRzOiB0IC0+IGVsdCBsaXN0XG4gICAgdmFsIG1pbl9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1pbl9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgbWF4X2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWF4X2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBjaG9vc2U6IHQgLT4gZWx0XG4gICAgdmFsIGNob29zZV9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgb2ZfbGlzdDogZWx0IGxpc3QgLT4gdFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGVsdCAtPiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID1cbiAgc3RydWN0XG4gICAgdHlwZSBlbHQgPSBPcmQudFxuICAgIHR5cGUgdCA9IEVtcHR5IHwgTm9kZSBvZiB7bDp0OyB2OmVsdDsgcjp0OyBoOmludH1cblxuICAgICgqIFNldHMgYXJlIHJlcHJlc2VudGVkIGJ5IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyAodGhlIGhlaWdodHMgb2YgdGhlXG4gICAgICAgY2hpbGRyZW4gZGlmZmVyIGJ5IGF0IG1vc3QgMiAqKVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgKCogQ3JlYXRlcyBhIG5ldyBub2RlIHdpdGggbGVmdCBzb24gbCwgdmFsdWUgdiBhbmQgcmlnaHQgc29uIHIuXG4gICAgICAgV2UgbXVzdCBoYXZlIGFsbCBlbGVtZW50cyBvZiBsIDwgdiA8IGFsbCBlbGVtZW50cyBvZiByLlxuICAgICAgIGwgYW5kIHIgbXVzdCBiZSBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGhlaWdodCBmb3IgYmV0dGVyIHNwZWVkLiAqKVxuXG4gICAgbGV0IGNyZWF0ZSBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSwgYnV0IHBlcmZvcm1zIG9uZSBzdGVwIG9mIHJlYmFsYW5jaW5nIGlmIG5lY2Vzc2FyeS5cbiAgICAgICBBc3N1bWVzIGwgYW5kIHIgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDMuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBjcmVhdGUgZm9yIGJldHRlciBzcGVlZCBpbiB0aGUgbW9zdCBmcmVxdWVudCBjYXNlXG4gICAgICAgd2hlcmUgbm8gcmViYWxhbmNpbmcgaXMgcmVxdWlyZWQuICopXG5cbiAgICBsZXQgYmFsIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiAoY3JlYXRlIGxyIHYgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBscmwpIGxydiAoY3JlYXRlIGxyciB2IHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsKSBydiByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmxsKSBybHYgKGNyZWF0ZSBybHIgcnYgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogSW5zZXJ0aW9uIG9mIG9uZSBlbGVtZW50ICopXG5cbiAgICBsZXQgcmVjIGFkZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHQgZWxzZVxuICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0IGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IGFkZCB4IHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0IGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHNpbmdsZXRvbiB4ID0gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cblxuICAgICgqIEJld2FyZTogdGhvc2UgdHdvIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgYWRkZWQgdiBpcyAqc3RyaWN0bHkqXG4gICAgICAgc21hbGxlciAob3IgYmlnZ2VyKSB0aGFuIGFsbCB0aGUgcHJlc2VudCBlbGVtZW50cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBlbGVtZW50LlxuICAgICAgIEluZGVlZCwgdGhleSBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgXCJqb2luXCIgb3BlcmF0aW9uIHdoaWNoXG4gICAgICAgcmVzcGVjdHMgdGhpcyBwcmVjb25kaXRpb24uXG4gICAgKilcblxuICAgIGxldCByZWMgYWRkX21pbl9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fZWxlbWVudCB4IGwpIHYgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCBsIHYgKGFkZF9tYXhfZWxlbWVudCB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiByID1cbiAgICAgIG1hdGNoIChsLCByKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gYWRkX21pbl9lbGVtZW50IHYgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfZWxlbWVudCB2IGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgcj1scjsgaD1saH0sIE5vZGV7bD1ybDsgdj1ydjsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgKGpvaW4gbHIgdiByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IHJsKSBydiByciBlbHNlXG4gICAgICAgICAgY3JlYXRlIGwgdiByXG5cbiAgICAoKiBTbWFsbGVzdCBhbmQgZ3JlYXRlc3QgZWxlbWVudCBvZiBhIHNldCAqKVxuXG4gICAgbGV0IHJlYyBtaW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHQgbFxuXG4gICAgbGV0IHJlYyBtaW5fZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0X29wdCBsXG5cbiAgICBsZXQgcmVjIG1heF9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdCByXG5cbiAgICBsZXQgcmVjIG1heF9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHRfb3B0IHJcblxuICAgICgqIFJlbW92ZSB0aGUgc21hbGxlc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2V0ICopXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQucmVtb3ZlX21pbl9lbHRcIlxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBiYWwgKHJlbW92ZV9taW5fZWx0IGwpIHYgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIEFzc3VtZSB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLiAqKVxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gYmFsIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGpvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIFNwbGl0dGluZy4gIHNwbGl0IHggcyByZXR1cm5zIGEgdHJpcGxlIChsLCBwcmVzZW50LCByKSB3aGVyZVxuICAgICAgICAtIGwgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlIDwgeFxuICAgICAgICAtIHIgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlID4geFxuICAgICAgICAtIHByZXNlbnQgaXMgZmFsc2UgaWYgcyBjb250YWlucyBubyBlbGVtZW50IGVxdWFsIHRvIHgsXG4gICAgICAgICAgb3IgdHJ1ZSBpZiBzIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8geC4gKilcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBmYWxzZSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIHRydWUsIHIpXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgKGxsLCBwcmVzLCBybCkgPSBzcGxpdCB4IGwgaW4gKGxsLCBwcmVzLCBqb2luIHJsIHYgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGxyLCBwcmVzLCBycilcblxuICAgICgqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXQgb3BlcmF0aW9ucyAqKVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluXG4gICAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgcnIgPSByZW1vdmUgeCByIGluXG4gICAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHJlYyB1bmlvbiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdDIpIC0+IHQyXG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjE7IGg9aDF9LCBOb2Rle2w9bDI7IHY9djI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGlmIGgyID0gMSB0aGVuIGFkZCB2MiBzMSBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDIsIF8sIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MSAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBoMSA9IDEgdGhlbiBhZGQgdjEgczIgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwxLCBfLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjIgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIGludGVyIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAoXywgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChpbnRlciBsMSBsMikgKGludGVyIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoaW50ZXIgbDEgbDIpIHYxIChpbnRlciByMSByMilcblxuICAgICgqIFNhbWUgYXMgc3BsaXQsIGJ1dCBjb21wdXRlIHRoZSBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlc1xuICAgICAgIG9ubHkgaWYgdGhlIHBpdm90IGVsZW1lbnQgaXMgbm90IGluIHRoZSBzZXQuICBUaGUgcmlnaHQgc3VidHJlZVxuICAgICAgIGlzIGNvbXB1dGVkIG9uIGRlbWFuZC4gKilcblxuICAgIHR5cGUgc3BsaXRfYmlzID1cbiAgICAgIHwgRm91bmRcbiAgICAgIHwgTm90Rm91bmQgb2YgdCAqICh1bml0IC0+IHQpXG5cbiAgICBsZXQgcmVjIHNwbGl0X2JpcyB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb3RGb3VuZCAoRW1wdHksIChmdW4gKCkgLT4gRW1wdHkpKVxuICAgICAgfCBOb2Rle2w7IHY7IHI7IF99IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIEZvdW5kXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCBsIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxsLCBybCkgLT4gTm90Rm91bmQgKGxsLCAoZnVuICgpIC0+IGpvaW4gKHJsICgpKSB2IHIpKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IHIgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobHIsIHJyKSAtPiBOb3RGb3VuZCAoam9pbiBsIHYgbHIsIHJyKVxuXG4gICAgbGV0IHJlYyBkaXNqb2ludCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgfCAoXywgRW1wdHkpIC0+IHRydWVcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIGlmIHMxID09IHMyIHRoZW4gZmFsc2VcbiAgICAgICAgICBlbHNlIG1hdGNoIHNwbGl0X2JpcyB2MSB0MiB3aXRoXG4gICAgICAgICAgICAgIE5vdEZvdW5kKGwyLCByMikgLT4gZGlzam9pbnQgbDEgbDIgJiYgZGlzam9pbnQgcjEgKHIyICgpKVxuICAgICAgICAgICAgfCBGb3VuZCAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBkaWZmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGRpZmYgbDEgbDIpIHYxIChkaWZmIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChkaWZmIGwxIGwyKSAoZGlmZiByMSByMilcblxuICAgIHR5cGUgZW51bWVyYXRpb24gPSBFbmQgfCBNb3JlIG9mIGVsdCAqIHQgKiBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gY29uc19lbnVtIGwgKE1vcmUodiwgciwgZSkpXG5cbiAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICB8IChfLCBFbmQpIC0+IDFcbiAgICAgIHwgKE1vcmUodjEsIHIxLCBlMSksIE1vcmUodjIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPD4gMFxuICAgICAgICAgIHRoZW4gY1xuICAgICAgICAgIGVsc2UgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcblxuICAgIGxldCBjb21wYXJlIHMxIHMyID1cbiAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gczEgRW5kKSAoY29uc19lbnVtIHMyIEVuZClcblxuICAgIGxldCBlcXVhbCBzMSBzMiA9XG4gICAgICBjb21wYXJlIHMxIHMyID0gMFxuXG4gICAgbGV0IHJlYyBzdWJzZXQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICBFbXB0eSwgXyAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgXywgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsPWwxOyB2PXYxOyByPXIxfSwgKE5vZGUge2w9bDI7IHY9djI7IHI9cjJ9IGFzIHQyKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgbDEgbDIgJiYgc3Vic2V0IHIxIHIyXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9bDE7IHY9djE7IHI9RW1wdHk7IGg9MH0pIGwyICYmIHN1YnNldCByMSB0MlxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1FbXB0eTsgdj12MTsgcj1yMTsgaD0wfSkgcjIgJiYgc3Vic2V0IGwxIHQyXG5cbiAgICBsZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gaXRlciBmIGw7IGYgdjsgaXRlciBmIHJcblxuICAgIGxldCByZWMgZm9sZCBmIHMgYWNjdSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGZvbGQgZiByIChmIHYgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2ICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0pIGFzIHQgLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHYgdGhlblxuICAgICAgICAgICAgaWYgbD09bCcgJiYgcj09cicgdGhlbiB0IGVsc2Ugam9pbiBsJyB2IHInXG4gICAgICAgICAgZWxzZSBjb25jYXQgbCcgcidcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgKGx0LCBsZikgPSBwYXJ0aXRpb24gcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IChydCwgcmYpID0gcGFydGl0aW9uIHAgciBpblxuICAgICAgICAgIGlmIHB2XG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IHJ0LCBjb25jYXQgbGYgcmYpXG4gICAgICAgICAgZWxzZSAoY29uY2F0IGx0IHJ0LCBqb2luIGxmIHYgcmYpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2Rle2w7IHJ9IC0+IGNhcmRpbmFsIGwgKyAxICsgY2FyZGluYWwgclxuXG4gICAgbGV0IHJlYyBlbGVtZW50c19hdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBlbGVtZW50c19hdXggKHYgOjogZWxlbWVudHNfYXV4IGFjY3UgcikgbFxuXG4gICAgbGV0IGVsZW1lbnRzIHMgPVxuICAgICAgZWxlbWVudHNfYXV4IFtdIHNcblxuICAgIGxldCBjaG9vc2UgPSBtaW5fZWx0XG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9lbHRfb3B0XG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHZcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIHZcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgdHJ5X2pvaW4gbCB2IHIgPVxuICAgICAgKCogW2pvaW4gbCB2IHJdIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIChlbGVtZW50cyBvZiBsIDwgdiA8XG4gICAgICAgICBlbGVtZW50cyBvZiByKTsgdXNlIFt0cnlfam9pbiBsIHYgcl0gd2hlbiB0aGlzIHByb3BlcnR5IG1heVxuICAgICAgICAgbm90IGhvbGQsIGJ1dCB5b3UgaG9wZSBpdCBkb2VzIGhvbGQgaW4gdGhlIGNvbW1vbiBjYXNlICopXG4gICAgICBpZiAobCA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIChtYXhfZWx0IGwpIHYgPCAwKVxuICAgICAgJiYgKHIgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSB2IChtaW5fZWx0IHIpIDwgMClcbiAgICAgIHRoZW4gam9pbiBsIHYgclxuICAgICAgZWxzZSB1bmlvbiBsIChhZGQgdiByKVxuXG4gICAgbGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gbWFwIGYgciBpblxuICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG5cbiAgICBsZXQgdHJ5X2NvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IHRyeV9qb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IGZpbHRlcl9tYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICBiZWdpbiBtYXRjaCB2JyB3aXRoXG4gICAgICAgICAgIHwgU29tZSB2JyAtPlxuICAgICAgICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgdHJ5X2NvbmNhdCBsJyByJ1xuICAgICAgICAgZW5kXG5cbiAgICBsZXQgb2Zfc29ydGVkX2xpc3QgbCA9XG4gICAgICBsZXQgcmVjIHN1YiBuIGwgPVxuICAgICAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICAgICAgfCAwLCBsIC0+IEVtcHR5LCBsXG4gICAgICAgIHwgMSwgeDAgOjogbCAtPiBOb2RlIHtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9LCBsXG4gICAgICAgIHwgMiwgeDAgOjogeDEgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTsgcj1FbXB0eTsgaD0yfSwgbFxuICAgICAgICB8IDMsIHgwIDo6IHgxIDo6IHgyIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7XG4gICAgICAgICAgICAgICAgIHI9Tm9kZXtsPUVtcHR5OyB2PXgyOyByPUVtcHR5OyBoPTF9OyBoPTJ9LCBsXG4gICAgICAgIHwgbiwgbCAtPlxuICAgICAgICAgIGxldCBubCA9IG4gLyAyIGluXG4gICAgICAgICAgbGV0IGxlZnQsIGwgPSBzdWIgbmwgbCBpblxuICAgICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBtaWQgOjogbCAtPlxuICAgICAgICAgICAgbGV0IHJpZ2h0LCBsID0gc3ViIChuIC0gbmwgLSAxKSBsIGluXG4gICAgICAgICAgICBjcmVhdGUgbGVmdCBtaWQgcmlnaHQsIGxcbiAgICAgIGluXG4gICAgICBmc3QgKHN1YiAoTGlzdC5sZW5ndGggbCkgbClcblxuICAgIGxldCBvZl9saXN0IGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGVtcHR5XG4gICAgICB8IFt4MF0gLT4gc2luZ2xldG9uIHgwXG4gICAgICB8IFt4MDsgeDFdIC0+IGFkZCB4MSAoc2luZ2xldG9uIHgwKVxuICAgICAgfCBbeDA7IHgxOyB4Ml0gLT4gYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4M10gLT4gYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4MzsgeDRdIC0+IGFkZCB4NCAoYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpKVxuICAgICAgfCBfIC0+IG9mX3NvcnRlZF9saXN0IChMaXN0LnNvcnRfdW5pcSBPcmQuY29tcGFyZSBsKVxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBzIHggLT4gYWRkIHggcykgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIGMgPSBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSBjIEVuZClcblxuICAgIGxldCByZWMgc25vY19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHNub2NfZW51bSByIChNb3JlKHYsIGwsIGUpKVxuXG4gICAgbGV0IHJlYyByZXZfc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3Jldl9zZXEgYyA9IHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSBjIEVuZClcblxuICAgIGxldCB0b19zZXFfZnJvbSBsb3cgcyA9XG4gICAgICBsZXQgcmVjIGF1eCBsb3cgcyBjID0gbWF0Y2ggcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gY1xuICAgICAgICB8IE5vZGUge2w7IHI7IHY7IF99IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBPcmQuY29tcGFyZSB2IGxvdyB3aXRoXG4gICAgICAgICAgICAgIHwgMCAtPiBNb3JlICh2LCByLCBjKVxuICAgICAgICAgICAgICB8IG4gd2hlbiBuPDAgLT4gYXV4IGxvdyByIGNcbiAgICAgICAgICAgICAgfCBfIC0+IGF1eCBsb3cgbCAoTW9yZSAodiwgciwgYykpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBzZXFfb2ZfZW51bV8gKGF1eCBsb3cgcyBFbmQpXG4gIGVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICErJ2EgdFxuICAgIHZhbCBlbXB0eTogJ2EgdFxuICAgIHZhbCBpc19lbXB0eTogJ2EgdCAtPiBib29sXG4gICAgdmFsIG1lbTogIGtleSAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgYWRkOiBrZXkgLT4gJ2EgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIHVwZGF0ZToga2V5IC0+ICgnYSBvcHRpb24gLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgc2luZ2xldG9uOiBrZXkgLT4gJ2EgLT4gJ2EgdFxuICAgIHZhbCByZW1vdmU6IGtleSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgbWVyZ2U6XG4gICAgICAgICAgKGtleSAtPiAnYSBvcHRpb24gLT4gJ2Igb3B0aW9uIC0+ICdjIG9wdGlvbikgLT4gJ2EgdCAtPiAnYiB0IC0+ICdjIHRcbiAgICB2YWwgdW5pb246IChrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBjb21wYXJlOiAoJ2EgLT4gJ2EgLT4gaW50KSAtPiAnYSB0IC0+ICdhIHQgLT4gaW50XG4gICAgdmFsIGVxdWFsOiAoJ2EgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBmb3JfYWxsOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGtleSAtPiAnYSAtPiAnYiBvcHRpb24pIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCBwYXJ0aXRpb246IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0ICogJ2EgdFxuICAgIHZhbCBjYXJkaW5hbDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgYmluZGluZ3M6ICdhIHQgLT4gKGtleSAqICdhKSBsaXN0XG4gICAgdmFsIG1pbl9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWluX2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIG1heF9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWF4X2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIGNob29zZTogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIGNob29zZV9vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgc3BsaXQ6IGtleSAtPiAnYSB0IC0+ICdhIHQgKiAnYSBvcHRpb24gKiAnYSB0XG4gICAgdmFsIGZpbmQ6IGtleSAtPiAnYSB0IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiBrZXkgLT4gJ2EgdCAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9maXJzdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IGtleSAqICdhXG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgZmluZF9sYXN0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4ga2V5ICogJ2FcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIG1hcDogKCdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgbWFwaTogKGtleSAtPiAnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9mcm9tIDoga2V5IC0+ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZShPcmQ6IE9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuXG4gICAgdHlwZSBrZXkgPSBPcmQudFxuXG4gICAgdHlwZSAnYSB0ID1cbiAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSBvZiB7bDonYSB0OyB2OmtleTsgZDonYTsgcjonYSB0OyBoOmludH1cblxuICAgIGxldCBoZWlnaHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGUge2h9IC0+IGhcblxuICAgIGxldCBjcmVhdGUgbCB4IGQgciA9XG4gICAgICBsZXQgaGwgPSBoZWlnaHQgbCBhbmQgaHIgPSBoZWlnaHQgciBpblxuICAgICAgTm9kZXtsOyB2PXg7IGQ7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgIGxldCBzaW5nbGV0b24geCBkID0gTm9kZXtsPUVtcHR5OyB2PXg7IGQ7IHI9RW1wdHk7IGg9MX1cblxuICAgIGxldCBiYWwgbCB4IGQgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgaWYgaGwgPiBociArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1sbDsgdj1sdjsgZD1sZDsgcj1scn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCBsbCA+PSBoZWlnaHQgbHIgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgbGwgbHYgbGQgKGNyZWF0ZSBsciB4IGQgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IGQ9bHJkOyByPWxycn0tPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbGwgbHYgbGQgbHJsKSBscnYgbHJkIChjcmVhdGUgbHJyIHggZCByKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBpZiBociA+IGhsICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIHIgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPXJsOyB2PXJ2OyBkPXJkOyByPXJyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IHJyID49IGhlaWdodCBybCB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgeCBkIHJsKSBydiByZCByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgZD1ybGQ7IHI9cmxyfSAtPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IGQgcmxsKSBybHYgcmxkIChjcmVhdGUgcmxyIHJ2IHJkIHJyKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZVxuICAgICAgICBOb2Rle2w7IHY9eDsgZDsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGFkZCB4IGRhdGEgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vZGV7bD1FbXB0eTsgdj14OyBkPWRhdGE7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gYXMgbSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgaWYgZCA9PSBkYXRhIHRoZW4gbSBlbHNlIE5vZGV7bDsgdj14OyBkPWRhdGE7IHI7IGh9XG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSBhZGQgeCBkYXRhIGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggZGF0YSByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyBmaW5kIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBkXG4gICAgICAgICAgZWxzZSBmaW5kIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3RfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2MCBkMCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3QgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYwIGQwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHQgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2MCBkMCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3QgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGQwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHQgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfb3B0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gU29tZSBkXG4gICAgICAgICAgZWxzZSBmaW5kX29wdCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGMgPSAwIHx8IG1lbSB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBtaW5fYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsPUVtcHR5OyB2OyBkfSAtPiAodiwgZClcbiAgICAgIHwgTm9kZSB7bH0gLT4gbWluX2JpbmRpbmcgbFxuXG4gICAgbGV0IHJlYyBtaW5fYmluZGluZ19vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHY7IGR9IC0+IFNvbWUgKHYsIGQpXG4gICAgICB8IE5vZGUge2x9LT4gbWluX2JpbmRpbmdfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7djsgZDsgcj1FbXB0eX0gLT4gKHYsIGQpXG4gICAgICB8IE5vZGUge3J9IC0+IG1heF9iaW5kaW5nIHJcblxuICAgIGxldCByZWMgbWF4X2JpbmRpbmdfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2RlIHt2OyBkOyByPUVtcHR5fSAtPiBTb21lICh2LCBkKVxuICAgICAgfCBOb2RlIHtyfSAtPiBtYXhfYmluZGluZ19vcHQgclxuXG4gICAgbGV0IHJlYyByZW1vdmVfbWluX2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gYmFsIChyZW1vdmVfbWluX2JpbmRpbmcgbCkgdiBkIHJcblxuICAgIGxldCBtZXJnZSB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+XG4gICAgICAgICAgbGV0ICh4LCBkKSA9IG1pbl9iaW5kaW5nIHQyIGluXG4gICAgICAgICAgYmFsIHQxIHggZCAocmVtb3ZlX21pbl9iaW5kaW5nIHQyKVxuXG4gICAgbGV0IHJlYyByZW1vdmUgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgKE5vZGUge2w7IHY7IGQ7IHJ9IGFzIG0pIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIG1lcmdlIGwgclxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gcmVtb3ZlIHggbCBpbiBpZiBsID09IGxsIHRoZW4gbSBlbHNlIGJhbCBsbCB2IGQgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW4gaWYgciA9PSByciB0aGVuIG0gZWxzZSBiYWwgbCB2IGQgcnJcblxuICAgIGxldCByZWMgdXBkYXRlIHggZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggZiBOb25lIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gRW1wdHlcbiAgICAgICAgICB8IFNvbWUgZGF0YSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgZD1kYXRhOyByPUVtcHR5OyBoPTF9XG4gICAgICAgICAgZW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IGFzIG0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIG1hdGNoIGYgKFNvbWUgZCkgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IG1lcmdlIGwgclxuICAgICAgICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICAgICAgICBpZiBkID09IGRhdGEgdGhlbiBtIGVsc2UgTm9kZXtsOyB2PXg7IGQ9ZGF0YTsgcjsgaH1cbiAgICAgICAgICBlbmQgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSB1cGRhdGUgeCBmIGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gdXBkYXRlIHggZiByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGl0ZXIgZiBsOyBmIHYgZDsgaXRlciBmIHJcblxuICAgIGxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IC0+XG4gICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgIGxldCBkJyA9IGYgZCBpblxuICAgICAgICAgIGxldCByJyA9IG1hcCBmIHIgaW5cbiAgICAgICAgICBOb2Rle2w9bCc7IHY7IGQ9ZCc7IHI9cic7IGh9XG5cbiAgICBsZXQgcmVjIG1hcGkgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gLT5cbiAgICAgICAgICBsZXQgbCcgPSBtYXBpIGYgbCBpblxuICAgICAgICAgIGxldCBkJyA9IGYgdiBkIGluXG4gICAgICAgICAgbGV0IHInID0gbWFwaSBmIHIgaW5cbiAgICAgICAgICBOb2Rle2w9bCc7IHY7IGQ9ZCc7IHI9cic7IGh9XG5cbiAgICBsZXQgcmVjIGZvbGQgZiBtIGFjY3UgPVxuICAgICAgbWF0Y2ggbSB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBmb2xkIGYgciAoZiB2IGQgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IHAgdiBkICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gcCB2IGQgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICAoKiBCZXdhcmU6IHRob3NlIHR3byBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlIGFkZGVkIGsgaXMgKnN0cmljdGx5KlxuICAgICAgIHNtYWxsZXIgKG9yIGJpZ2dlcikgdGhhbiBhbGwgdGhlIHByZXNlbnQga2V5cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBrZXkuXG5cbiAgICAgICBJbmRlZWQsIHRoZXkgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIFwiam9pblwiIG9wZXJhdGlvbiB3aGljaFxuICAgICAgIHJlc3BlY3RzIHRoaXMgcHJlY29uZGl0aW9uLlxuICAgICopXG5cbiAgICBsZXQgcmVjIGFkZF9taW5fYmluZGluZyBrIHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24gayB4XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9iaW5kaW5nIGsgeCBsKSB2IGQgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2JpbmRpbmcgayB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIGsgeFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICBiYWwgbCB2IGQgKGFkZF9tYXhfYmluZGluZyBrIHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IGQgciA9XG4gICAgICBtYXRjaCAobCwgcikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IGFkZF9taW5fYmluZGluZyB2IGQgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfYmluZGluZyB2IGQgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyBkPWxkOyByPWxyOyBoPWxofSxcbiAgICAgICAgIE5vZGV7bD1ybDsgdj1ydjsgZD1yZDsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgbGQgKGpvaW4gbHIgdiBkIHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgZCBybCkgcnYgcmQgcnIgZWxzZVxuICAgICAgICAgIGNyZWF0ZSBsIHYgZCByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+XG4gICAgICAgICAgbGV0ICh4LCBkKSA9IG1pbl9iaW5kaW5nIHQyIGluXG4gICAgICAgICAgam9pbiB0MSB4IGQgKHJlbW92ZV9taW5fYmluZGluZyB0MilcblxuICAgIGxldCBjb25jYXRfb3Jfam9pbiB0MSB2IGQgdDIgPVxuICAgICAgbWF0Y2ggZCB3aXRoXG4gICAgICB8IFNvbWUgZCAtPiBqb2luIHQxIHYgZCB0MlxuICAgICAgfCBOb25lIC0+IGNvbmNhdCB0MSB0MlxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIE5vbmUsIEVtcHR5KVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgU29tZSBkLCByKVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IChsbCwgcHJlcywgcmwpID0gc3BsaXQgeCBsIGluIChsbCwgcHJlcywgam9pbiBybCB2IGQgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGQgbHIsIHByZXMsIHJyKVxuXG4gICAgbGV0IHJlYyBtZXJnZSBmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGUge2w9bDE7IHY9djE7IGQ9ZDE7IHI9cjE7IGg9aDF9LCBfKSB3aGVuIGgxID49IGhlaWdodCBzMiAtPlxuICAgICAgICAgIGxldCAobDIsIGQyLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgIGNvbmNhdF9vcl9qb2luIChtZXJnZSBmIGwxIGwyKSB2MSAoZiB2MSAoU29tZSBkMSkgZDIpIChtZXJnZSBmIHIxIHIyKVxuICAgICAgfCAoXywgTm9kZSB7bD1sMjsgdj12MjsgZD1kMjsgcj1yMn0pIC0+XG4gICAgICAgICAgbGV0IChsMSwgZDEsIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgY29uY2F0X29yX2pvaW4gKG1lcmdlIGYgbDEgbDIpIHYyIChmIHYyIGQxIChTb21lIGQyKSkgKG1lcmdlIGYgcjEgcjIpXG4gICAgICB8IF8gLT5cbiAgICAgICAgICBhc3NlcnQgZmFsc2VcblxuICAgIGxldCByZWMgdW5pb24gZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICB8IChFbXB0eSwgcykgfCAocywgRW1wdHkpIC0+IHNcbiAgICAgIHwgKE5vZGUge2w9bDE7IHY9djE7IGQ9ZDE7IHI9cjE7IGg9aDF9LFxuICAgICAgICAgTm9kZSB7bD1sMjsgdj12MjsgZD1kMjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgbGV0IChsMiwgZDIsIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICBsZXQgbCA9IHVuaW9uIGYgbDEgbDIgYW5kIHIgPSB1bmlvbiBmIHIxIHIyIGluXG4gICAgICAgICAgICBtYXRjaCBkMiB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gam9pbiBsIHYxIGQxIHJcbiAgICAgICAgICAgIHwgU29tZSBkMiAtPiBjb25jYXRfb3Jfam9pbiBsIHYxIChmIHYxIGQxIGQyKSByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsMSwgZDEsIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICBsZXQgbCA9IHVuaW9uIGYgbDEgbDIgYW5kIHIgPSB1bmlvbiBmIHIxIHIyIGluXG4gICAgICAgICAgICBtYXRjaCBkMSB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gam9pbiBsIHYyIGQyIHJcbiAgICAgICAgICAgIHwgU29tZSBkMSAtPiBjb25jYXRfb3Jfam9pbiBsIHYyIChmIHYyIGQxIGQyKSByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gYXMgbSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdmQgPSBwIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdmQgdGhlbiBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIG0gZWxzZSBqb2luIGwnIHYgZCByJ1xuICAgICAgICAgIGVsc2UgY29uY2F0IGwnIHInXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbZl0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgbCcgPSBmaWx0ZXJfbWFwIGYgbCBpblxuICAgICAgICAgIGxldCBmdmQgPSBmIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICAgYmVnaW4gbWF0Y2ggZnZkIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBkJyAtPiBqb2luIGwnIHYgZCcgcidcbiAgICAgICAgICAgIHwgTm9uZSAtPiBjb25jYXQgbCcgcidcbiAgICAgICAgICBlbmRcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IChsdCwgbGYpID0gcGFydGl0aW9uIHAgbCBpblxuICAgICAgICAgIGxldCBwdmQgPSBwIHYgZCBpblxuICAgICAgICAgIGxldCAocnQsIHJmKSA9IHBhcnRpdGlvbiBwIHIgaW5cbiAgICAgICAgICBpZiBwdmRcbiAgICAgICAgICB0aGVuIChqb2luIGx0IHYgZCBydCwgY29uY2F0IGxmIHJmKVxuICAgICAgICAgIGVsc2UgKGNvbmNhdCBsdCBydCwgam9pbiBsZiB2IGQgcmYpXG5cbiAgICB0eXBlICdhIGVudW1lcmF0aW9uID0gRW5kIHwgTW9yZSBvZiBrZXkgKiAnYSAqICdhIHQgKiAnYSBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gbSBlID1cbiAgICAgIG1hdGNoIG0gd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IGNvbnNfZW51bSBsIChNb3JlKHYsIGQsIHIsIGUpKVxuXG4gICAgbGV0IGNvbXBhcmUgY21wIG0xIG0yID1cbiAgICAgIGxldCByZWMgY29tcGFyZV9hdXggZTEgZTIgPVxuICAgICAgICAgIG1hdGNoIChlMSwgZTIpIHdpdGhcbiAgICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgICAgfCAoRW5kLCBfKSAgLT4gLTFcbiAgICAgICAgfCAoXywgRW5kKSAtPiAxXG4gICAgICAgIHwgKE1vcmUodjEsIGQxLCByMSwgZTEpLCBNb3JlKHYyLCBkMiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgZDEgZDIgaW5cbiAgICAgICAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZVxuICAgICAgICAgICAgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcbiAgICAgIGluIGNvbXBhcmVfYXV4IChjb25zX2VudW0gbTEgRW5kKSAoY29uc19lbnVtIG0yIEVuZClcblxuICAgIGxldCBlcXVhbCBjbXAgbTEgbTIgPVxuICAgICAgbGV0IHJlYyBlcXVhbF9hdXggZTEgZTIgPVxuICAgICAgICAgIG1hdGNoIChlMSwgZTIpIHdpdGhcbiAgICAgICAgICAoRW5kLCBFbmQpIC0+IHRydWVcbiAgICAgICAgfCAoRW5kLCBfKSAgLT4gZmFsc2VcbiAgICAgICAgfCAoXywgRW5kKSAtPiBmYWxzZVxuICAgICAgICB8IChNb3JlKHYxLCBkMSwgcjEsIGUxKSwgTW9yZSh2MiwgZDIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgICBPcmQuY29tcGFyZSB2MSB2MiA9IDAgJiYgY21wIGQxIGQyICYmXG4gICAgICAgICAgICBlcXVhbF9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcbiAgICAgIGluIGVxdWFsX2F1eCAoY29uc19lbnVtIG0xIEVuZCkgKGNvbnNfZW51bSBtMiBFbmQpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtsOyByfSAtPiBjYXJkaW5hbCBsICsgMSArIGNhcmRpbmFsIHJcblxuICAgIGxldCByZWMgYmluZGluZ3NfYXV4IGFjY3UgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IGJpbmRpbmdzX2F1eCAoKHYsIGQpIDo6IGJpbmRpbmdzX2F1eCBhY2N1IHIpIGxcblxuICAgIGxldCBiaW5kaW5ncyBzID1cbiAgICAgIGJpbmRpbmdzX2F1eCBbXSBzXG5cbiAgICBsZXQgY2hvb3NlID0gbWluX2JpbmRpbmdcblxuICAgIGxldCBjaG9vc2Vfb3B0ID0gbWluX2JpbmRpbmdfb3B0XG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIG0gKGssdikgLT4gYWRkIGsgdiBtKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlIChrLHYsdCxyZXN0KSAtPiBTZXEuQ29ucyAoKGssdiksIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIG0gPVxuICAgICAgc2VxX29mX2VudW1fIChjb25zX2VudW0gbSBFbmQpXG5cbiAgICBsZXQgcmVjIHNub2NfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyBkOyByfSAtPiBzbm9jX2VudW0gciAoTW9yZSh2LCBkLCBsLCBlKSlcblxuICAgIGxldCByZWMgcmV2X3NlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKGssdix0LHJlc3QpIC0+XG4gICAgICAgICAgU2VxLkNvbnMgKChrLHYpLCByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19yZXZfc2VxIGMgPVxuICAgICAgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBtID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBtIGMgPSBtYXRjaCBtIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIGQsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCBkLCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBtIEVuZClcbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSB7IG11dGFibGUgYyA6ICdhIGxpc3Q7IG11dGFibGUgbGVuIDogaW50OyB9XG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG5sZXQgY3JlYXRlICgpID0geyBjID0gW107IGxlbiA9IDA7IH1cblxubGV0IGNsZWFyIHMgPSBzLmMgPC0gW107IHMubGVuIDwtIDBcblxubGV0IGNvcHkgcyA9IHsgYyA9IHMuYzsgbGVuID0gcy5sZW47IH1cblxubGV0IHB1c2ggeCBzID0gcy5jIDwtIHggOjogcy5jOyBzLmxlbiA8LSBzLmxlbiArIDFcblxubGV0IHBvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IGhkXG4gIHwgW10gICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCBwb3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgU29tZSBoZFxuICB8IFtdICAgICAtPiBOb25lXG5cbmxldCB0b3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gaGRcbiAgfCBbXSAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgdG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBTb21lIGhkXG4gIHwgW10gICAgLT4gTm9uZVxuXG5sZXQgaXNfZW1wdHkgcyA9IChzLmMgPSBbXSlcblxubGV0IGxlbmd0aCBzID0gcy5sZW5cblxubGV0IGl0ZXIgZiBzID0gTGlzdC5pdGVyIGYgcy5jXG5cbmxldCBmb2xkIGYgYWNjIHMgPSBMaXN0LmZvbGRfbGVmdCBmIGFjYyBzLmNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gTGlzdC50b19zZXEgcy5jXG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcyA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcyBnO1xuICBzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIERhbmllbCBkZSBSYXVnbGF1ZHJlLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIGNlbGwgb3B0aW9uXG5hbmQgJ2EgY2VsbCA9IHsgbXV0YWJsZSBjb3VudCA6IGludDsgbXV0YWJsZSBkYXRhIDogJ2EgZGF0YSB9XG5hbmQgJ2EgZGF0YSA9XG4gICAgU2VtcHR5XG4gIHwgU2NvbnMgb2YgJ2EgKiAnYSBkYXRhXG4gIHwgU2FwcCBvZiAnYSBkYXRhICogJ2EgZGF0YVxuICB8IFNsYXp5IG9mICdhIGRhdGEgTGF6eS50XG4gIHwgU2dlbiBvZiAnYSBnZW5cbiAgfCBTYnVmZmlvIDogYnVmZmlvIC0+IGNoYXIgZGF0YVxuYW5kICdhIGdlbiA9IHsgbXV0YWJsZSBjdXJyIDogJ2Egb3B0aW9uIG9wdGlvbjsgZnVuYyA6IGludCAtPiAnYSBvcHRpb24gfVxuYW5kIGJ1ZmZpbyA9XG4gIHsgaWMgOiBpbl9jaGFubmVsOyBidWZmIDogYnl0ZXM7IG11dGFibGUgbGVuIDogaW50OyBtdXRhYmxlIGluZCA6IGludCB9XG5cbmV4Y2VwdGlvbiBGYWlsdXJlXG5leGNlcHRpb24gRXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBjb3VudCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSB7IGNvdW50IH0gLT4gY291bnRcbmxldCBkYXRhID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFNlbXB0eVxuICB8IFNvbWUgeyBkYXRhIH0gLT4gZGF0YVxuXG5sZXQgZmlsbF9idWZmIGIgPVxuICBiLmxlbiA8LSBpbnB1dCBiLmljIGIuYnVmZiAwIChCeXRlcy5sZW5ndGggYi5idWZmKTsgYi5pbmQgPC0gMFxuXG5cbmxldCByZWMgZ2V0X2RhdGEgOiB0eXBlIHYuIGludCAtPiB2IGRhdGEgLT4gdiBkYXRhID0gZnVuIGNvdW50IGQgLT4gbWF0Y2ggZCB3aXRoXG4gKCogUmV0dXJucyBlaXRoZXIgU2VtcHR5IG9yIFNjb25zKGEsIF8pIGV2ZW4gd2hlbiBkIGlzIGEgZ2VuZXJhdG9yXG4gICAgb3IgYSBidWZmZXIuIEluIHRob3NlIGNhc2VzLCB0aGUgaXRlbSBhIGlzIHNlZW4gYXMgZXh0cmFjdGVkIGZyb21cbiB0aGUgZ2VuZXJhdG9yL2J1ZmZlci5cbiBUaGUgY291bnQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIGNhbGxpbmcgYFNnZW4tZnVuY3Rpb25zJy4gICopXG4gICBTZW1wdHkgfCBTY29ucyAoXywgXykgLT4gZFxuIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBjb3VudCBkMSB3aXRoXG4gICAgICAgU2NvbnMgKGEsIGQxMSkgLT4gU2NvbnMgKGEsIFNhcHAgKGQxMSwgZDIpKVxuICAgICB8IFNlbXB0eSAtPiBnZXRfZGF0YSBjb3VudCBkMlxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2dlbiB7Y3VyciA9IFNvbWUgTm9uZX0gLT4gU2VtcHR5XG4gfCBTZ2VuICh7Y3VyciA9IFNvbWUoU29tZSBhKX0gYXMgZykgLT5cbiAgICAgZy5jdXJyIDwtIE5vbmU7IFNjb25zKGEsIGQpXG4gfCBTZ2VuIGcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZy5mdW5jIGNvdW50IHdpdGhcbiAgICAgICBOb25lIC0+IGcuY3VyciA8LSBTb21lKE5vbmUpOyBTZW1wdHlcbiAgICAgfCBTb21lIGEgLT4gU2NvbnMoYSwgZClcbiAgICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICBlbmRcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gU2VtcHR5IGVsc2VcbiAgICAgICBsZXQgciA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kIGluXG4gICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgICAgYi5pbmQgPC0gc3VjYyBiLmluZDsgU2NvbnMociwgZClcbiB8IFNsYXp5IGYgLT4gZ2V0X2RhdGEgY291bnQgKExhenkuZm9yY2UgZilcblxuXG5sZXQgcmVjIHBlZWtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHYgb3B0aW9uID0gZnVuIHMgLT5cbiAoKiBjb25zdWx0IHRoZSBmaXJzdCBpdGVtIG9mIHMgKilcbiBtYXRjaCBzLmRhdGEgd2l0aFxuICAgU2VtcHR5IC0+IE5vbmVcbiB8IFNjb25zIChhLCBfKSAtPiBTb21lIGFcbiB8IFNhcHAgKF8sIF8pIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIHMuY291bnQgcy5kYXRhIHdpdGhcbiAgICAgICBTY29ucyhhLCBfKSBhcyBkIC0+IHMuZGF0YSA8LSBkOyBTb21lIGFcbiAgICAgfCBTZW1wdHkgLT4gTm9uZVxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2xhenkgZiAtPiBzLmRhdGEgPC0gKExhenkuZm9yY2UgZik7IHBlZWtfZGF0YSBzXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBhfSAtPiBhXG4gfCBTZ2VuIGcgLT4gbGV0IHggPSBnLmZ1bmMgcy5jb3VudCBpbiBnLmN1cnIgPC0gU29tZSB4OyB4XG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIGJlZ2luIHMuZGF0YSA8LSBTZW1wdHk7IE5vbmUgZW5kXG4gICAgIGVsc2UgU29tZSAoQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQpXG5cblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgcyAtPiBwZWVrX2RhdGEgc1xuXG5cbmxldCByZWMganVua19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdW5pdCA9IGZ1biBzIC0+XG4gIG1hdGNoIHMuZGF0YSB3aXRoXG4gICAgU2NvbnMgKF8sIGQpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IHMuZGF0YSA8LSBkXG4gIHwgU2dlbiAoe2N1cnIgPSBTb21lIF99IGFzIGcpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGcuY3VyciA8LSBOb25lXG4gIHwgU2J1ZmZpbyBiIC0+XG4gICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIHMuZGF0YSA8LSBTZW1wdHlcbiAgICAgIGVsc2UgKHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGIuaW5kIDwtIHN1Y2MgYi5pbmQpXG4gIHwgXyAtPlxuICAgICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgICBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgXyAtPiBqdW5rX2RhdGEgc1xuXG5cbmxldCBqdW5rID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBkYXRhIC0+IGp1bmtfZGF0YSBkYXRhXG5cbmxldCByZWMgbmdldF9kYXRhIG4gcyA9XG4gIGlmIG4gPD0gMCB0aGVuIFtdLCBzLmRhdGEsIDBcbiAgZWxzZVxuICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgIFNvbWUgYSAtPlxuICAgICAgICBqdW5rX2RhdGEgcztcbiAgICAgICAgbGV0IChhbCwgZCwgaykgPSBuZ2V0X2RhdGEgKHByZWQgbikgcyBpbiBhIDo6IGFsLCBTY29ucyAoYSwgZCksIHN1Y2Mga1xuICAgIHwgTm9uZSAtPiBbXSwgcy5kYXRhLCAwXG5cblxubGV0IG5wZWVrX2RhdGEgbiBzID1cbiAgbGV0IChhbCwgZCwgbGVuKSA9IG5nZXRfZGF0YSBuIHMgaW5cbiAgcy5jb3VudCA8LSAocy5jb3VudCAtIGxlbik7XG4gIHMuZGF0YSA8LSBkO1xuICBhbFxuXG5cbmxldCBucGVlayBuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSBkIC0+IG5wZWVrX2RhdGEgbiBkXG5cbmxldCBuZXh0IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgYSAtPiBqdW5rIHM7IGFcbiAgfCBOb25lIC0+IHJhaXNlIEZhaWx1cmVcblxuXG5sZXQgZW1wdHkgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBfIC0+IHJhaXNlIEZhaWx1cmVcbiAgfCBOb25lIC0+ICgpXG5cblxubGV0IGl0ZXIgZiBzdHJtID1cbiAgbGV0IHJlYyBkb19yZWMgKCkgPVxuICAgIG1hdGNoIHBlZWsgc3RybSB3aXRoXG4gICAgICBTb21lIGEgLT4ganVuayBzdHJtOyBpZ25vcmUoZiBhKTsgZG9fcmVjICgpXG4gICAgfCBOb25lIC0+ICgpXG4gIGluXG4gIGRvX3JlYyAoKVxuXG5cbigqIFN0cmVhbSBidWlsZGluZyBmdW5jdGlvbnMgKilcblxubGV0IGZyb20gZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNnZW4ge2N1cnIgPSBOb25lOyBmdW5jID0gZn19XG5cbmxldCBvZl9saXN0IGwgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBMaXN0LmZvbGRfcmlnaHQgKGZ1biB4IGwgLT4gU2NvbnMgKHgsIGwpKSBsIFNlbXB0eX1cblxuXG5sZXQgb2Zfc3RyaW5nIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgICgqIFdlIGNhbm5vdCB1c2UgdGhlIGluZGV4IHBhc3NlZCBieSB0aGUgW2Zyb21dIGZ1bmN0aW9uIGRpcmVjdGx5XG4gICAgICAgYmVjYXVzZSBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmVhbSBjb3VudCwgd2l0aCBhYnNvbHV0ZWx5IG5vXG4gICAgICAgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAgICAgIG9mIFtTdHJlYW0uaWNvbnMgJ2MnIChTdHJlYW0uZnJvbV9zdHJpbmcgXCJhYlwiKV0sIHRoZSBmaXJzdFxuICAgICAgIGFjY2VzcyB0byB0aGUgc3RyaW5nIHdpbGwgYmUgbWFkZSB3aXRoIGNvdW50IFsxXSBhbHJlYWR5LlxuICAgICopXG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgU3RyaW5nLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSBzLltjXSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2J5dGVzIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IEJ5dGVzLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSAoQnl0ZXMuZ2V0IHMgYykpXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9jaGFubmVsIGljID1cbiAgU29tZSB7Y291bnQgPSAwO1xuICAgICAgICBkYXRhID0gU2J1ZmZpbyB7aWMgPSBpYzsgYnVmZiA9IEJ5dGVzLmNyZWF0ZSA0MDk2OyBsZW4gPSAwOyBpbmQgPSAwfX1cblxuXG4oKiBTdHJlYW0gZXhwcmVzc2lvbnMgYnVpbGRlcnMgKilcblxubGV0IGlhcHAgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2FwcCAoZGF0YSBpLCBkYXRhIHMpfVxubGV0IGljb25zIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBkYXRhIHMpfVxubGV0IGlzaW5nIGkgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgU2VtcHR5KX1cblxubGV0IGxhcHAgZiBzID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2FwcCAoZGF0YSAoZiAoKSksIGRhdGEgcykpKX1cblxubGV0IGxjb25zIGYgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBkYXRhIHMpKSl9XG5sZXQgbHNpbmcgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBTZW1wdHkpKSl9XG5cbmxldCBzZW1wdHkgPSBOb25lXG5sZXQgc2xhenkgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KGRhdGEgKGYgKCkpKSl9XG5cbigqIEZvciBkZWJ1Z2dpbmcgdXNlICopXG5cbmxldCByZWMgZHVtcCA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiB0IC0+IHVuaXQgPSBmdW4gZiBzIC0+XG4gIHByaW50X3N0cmluZyBcIntjb3VudCA9IFwiO1xuICBwcmludF9pbnQgKGNvdW50IHMpO1xuICBwcmludF9zdHJpbmcgXCI7IGRhdGEgPSBcIjtcbiAgZHVtcF9kYXRhIGYgKGRhdGEgcyk7XG4gIHByaW50X3N0cmluZyBcIn1cIjtcbiAgcHJpbnRfbmV3bGluZSAoKVxuYW5kIGR1bXBfZGF0YSA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiBkYXRhIC0+IHVuaXQgPSBmdW4gZiAtPlxuICBmdW5jdGlvblxuICAgIFNlbXB0eSAtPiBwcmludF9zdHJpbmcgXCJTZW1wdHlcIlxuICB8IFNjb25zIChhLCBkKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2NvbnMgKFwiO1xuICAgICAgZiBhO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQ7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTYXBwIChcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQxO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQyO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2xhenkgXyAtPiBwcmludF9zdHJpbmcgXCJTbGF6eVwiXG4gIHwgU2dlbiBfIC0+IHByaW50X3N0cmluZyBcIlNnZW5cIlxuICB8IFNidWZmaW8gXyAtPiBwcmludF9zdHJpbmcgXCJTYnVmZmlvXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIFhhdmllciBMZXJveSBhbmQgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG5sZXQga2ZwcmludGYgayBvIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBvIGFjYzsgayBvKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGticHJpbnRmIGsgYiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IGJ1ZnB1dF9hY2MgYiBhY2M7IGsgYikgRW5kX29mX2FjYyBmbXRcbmxldCBpa2ZwcmludGYgayBvYyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIG9jIGZtdFxubGV0IGlrYnByaW50ZiA9IGlrZnByaW50ZlxuXG5sZXQgZnByaW50ZiBvYyBmbXQgPSBrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgYnByaW50ZiBiIGZtdCA9IGticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IGlmcHJpbnRmIG9jIGZtdCA9IGlrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgaWJwcmludGYgYiBmbXQgPSBpa2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3Rkb3V0IGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBzdGRlcnIgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGsnIGFjYyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBzdHJwdXRfYWNjIGJ1ZiBhY2M7XG4gICAgayAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXRcblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgKGZ1biBzIC0+IHMpIGZtdFxuXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUga2V5ID0gc3RyaW5nXG50eXBlIGRvYyA9IHN0cmluZ1xudHlwZSB1c2FnZV9tc2cgPSBzdHJpbmdcbnR5cGUgYW5vbl9mdW4gPSAoc3RyaW5nIC0+IHVuaXQpXG5cbnR5cGUgc3BlYyA9XG4gIHwgVW5pdCBvZiAodW5pdCAtPiB1bml0KSAgICAgKCogQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB1bml0IGFyZ3VtZW50ICopXG4gIHwgQm9vbCBvZiAoYm9vbCAtPiB1bml0KSAgICAgKCogQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCBhIGJvb2wgYXJndW1lbnQgKilcbiAgfCBTZXQgb2YgYm9vbCByZWYgICAgICAgICAgICAoKiBTZXQgdGhlIHJlZmVyZW5jZSB0byB0cnVlICopXG4gIHwgQ2xlYXIgb2YgYm9vbCByZWYgICAgICAgICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gZmFsc2UgKilcbiAgfCBTdHJpbmcgb2YgKHN0cmluZyAtPiB1bml0KSAoKiBDYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGEgc3RyaW5nIGFyZ3VtZW50ICopXG4gIHwgU2V0X3N0cmluZyBvZiBzdHJpbmcgcmVmICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIHN0cmluZyBhcmd1bWVudCAqKVxuICB8IEludCBvZiAoaW50IC0+IHVuaXQpICAgICAgICgqIENhbGwgdGhlIGZ1bmN0aW9uIHdpdGggYW4gaW50IGFyZ3VtZW50ICopXG4gIHwgU2V0X2ludCBvZiBpbnQgcmVmICAgICAgICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIGludCBhcmd1bWVudCAqKVxuICB8IEZsb2F0IG9mIChmbG9hdCAtPiB1bml0KSAgICgqIENhbGwgdGhlIGZ1bmN0aW9uIHdpdGggYSBmbG9hdCBhcmd1bWVudCAqKVxuICB8IFNldF9mbG9hdCBvZiBmbG9hdCByZWYgICAgICgqIFNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBmbG9hdCBhcmd1bWVudCAqKVxuICB8IFR1cGxlIG9mIHNwZWMgbGlzdCAgICAgICAgICgqIFRha2Ugc2V2ZXJhbCBhcmd1bWVudHMgYWNjb3JkaW5nIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMgbGlzdCAqKVxuICB8IFN5bWJvbCBvZiBzdHJpbmcgbGlzdCAqIChzdHJpbmcgLT4gdW5pdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUYWtlIG9uZSBvZiB0aGUgc3ltYm9scyBhcyBhcmd1bWVudCBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBzeW1ib2wuICopXG4gIHwgUmVzdCBvZiAoc3RyaW5nIC0+IHVuaXQpICAgKCogU3RvcCBpbnRlcnByZXRpbmcga2V5d29yZHMgYW5kIGNhbGwgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2l0aCBlYWNoIHJlbWFpbmluZyBhcmd1bWVudCAqKVxuICB8IFJlc3RfYWxsIG9mIChzdHJpbmcgbGlzdCAtPiB1bml0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFN0b3AgaW50ZXJwcmV0aW5nIGtleXdvcmRzIGFuZCBjYWxsIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpdGggYWxsIHJlbWFpbmluZyBhcmd1bWVudHMuICopXG4gIHwgRXhwYW5kIG9mIChzdHJpbmcgLT4gc3RyaW5nIGFycmF5KSAoKiBJZiB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyB0byBwcm9jZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgb2YgdGhlIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbXCItZm9vXCI7IFwiYXJnXCJdIEAgcmVzdF0gd2hlcmUgXCJmb29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVnaXN0ZXJlZCBhcyBbRXhwYW5kIGZdLCB0aGVuIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIFtmIFwiYXJnXCIgQCByZXN0XSBhcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZC4gT25seSBhbGxvd2VkIGluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNdLiAqKVxuXG5leGNlcHRpb24gQmFkIG9mIHN0cmluZ1xuZXhjZXB0aW9uIEhlbHAgb2Ygc3RyaW5nXG5cbnR5cGUgZXJyb3IgPVxuICB8IFVua25vd24gb2Ygc3RyaW5nXG4gIHwgV3Jvbmcgb2Ygc3RyaW5nICogc3RyaW5nICogc3RyaW5nICAoKiBvcHRpb24sIGFjdHVhbCwgZXhwZWN0ZWQgKilcbiAgfCBNaXNzaW5nIG9mIHN0cmluZ1xuICB8IE1lc3NhZ2Ugb2Ygc3RyaW5nXG5cbmV4Y2VwdGlvbiBTdG9wIG9mIGVycm9yICgqIHVzZWQgaW50ZXJuYWxseSAqKVxuXG5vcGVuIFByaW50ZlxuXG5sZXQgcmVjIGFzc29jMyB4IGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAoeTEsIHkyLCBfKSA6OiBfIHdoZW4geTEgPSB4IC0+IHkyXG4gIHwgXyA6OiB0IC0+IGFzc29jMyB4IHRcblxuXG5sZXQgc3BsaXQgcyA9XG4gIGxldCBpID0gU3RyaW5nLmluZGV4IHMgJz0nIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIChpKzEpIChsZW4tKGkrMSkpXG5cblxubGV0IG1ha2Vfc3ltbGlzdCBwcmVmaXggc2VwIHN1ZmZpeCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gXCI8bm9uZT5cIlxuICB8IGg6OnQgLT4gKExpc3QuZm9sZF9sZWZ0IChmdW4geCB5IC0+IHggXiBzZXAgXiB5KSAocHJlZml4IF4gaCkgdCkgXiBzdWZmaXhcblxuXG5sZXQgcHJpbnRfc3BlYyBidWYgKGtleSwgc3BlYywgZG9jKSA9XG4gIGlmIFN0cmluZy5sZW5ndGggZG9jID4gMCB0aGVuXG4gICAgbWF0Y2ggc3BlYyB3aXRoXG4gICAgfCBTeW1ib2wgKGwsIF8pIC0+XG4gICAgICAgIGJwcmludGYgYnVmIFwiICAlcyAlcyVzXFxuXCIga2V5IChtYWtlX3N5bWxpc3QgXCJ7XCIgXCJ8XCIgXCJ9XCIgbCkgZG9jXG4gICAgfCBfIC0+XG4gICAgICAgIGJwcmludGYgYnVmIFwiICAlcyAlc1xcblwiIGtleSBkb2NcblxuXG5sZXQgaGVscF9hY3Rpb24gKCkgPSByYWlzZSAoU3RvcCAoVW5rbm93biBcIi1oZWxwXCIpKVxuXG5sZXQgYWRkX2hlbHAgc3BlY2xpc3QgPVxuICBsZXQgYWRkMSA9XG4gICAgdHJ5IGlnbm9yZSAoYXNzb2MzIFwiLWhlbHBcIiBzcGVjbGlzdCk7IFtdXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgIFtcIi1oZWxwXCIsIFVuaXQgaGVscF9hY3Rpb24sIFwiIERpc3BsYXkgdGhpcyBsaXN0IG9mIG9wdGlvbnNcIl1cbiAgYW5kIGFkZDIgPVxuICAgIHRyeSBpZ25vcmUgKGFzc29jMyBcIi0taGVscFwiIHNwZWNsaXN0KTsgW11cbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgW1wiLS1oZWxwXCIsIFVuaXQgaGVscF9hY3Rpb24sIFwiIERpc3BsYXkgdGhpcyBsaXN0IG9mIG9wdGlvbnNcIl1cbiAgaW5cbiAgc3BlY2xpc3QgQCAoYWRkMSBAIGFkZDIpXG5cblxubGV0IHVzYWdlX2IgYnVmIHNwZWNsaXN0IGVycm1zZyA9XG4gIGJwcmludGYgYnVmIFwiJXNcXG5cIiBlcnJtc2c7XG4gIExpc3QuaXRlciAocHJpbnRfc3BlYyBidWYpIChhZGRfaGVscCBzcGVjbGlzdClcblxuXG5sZXQgdXNhZ2Vfc3RyaW5nIHNwZWNsaXN0IGVycm1zZyA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAyMDAgaW5cbiAgdXNhZ2VfYiBiIHNwZWNsaXN0IGVycm1zZztcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxuXG5sZXQgdXNhZ2Ugc3BlY2xpc3QgZXJybXNnID1cbiAgZXByaW50ZiBcIiVzXCIgKHVzYWdlX3N0cmluZyBzcGVjbGlzdCBlcnJtc2cpXG5cblxubGV0IGN1cnJlbnQgPSByZWYgMFxuXG5sZXQgYm9vbF9vZl9zdHJpbmdfb3B0IHggPVxuICB0cnkgU29tZSAoYm9vbF9vZl9zdHJpbmcgeClcbiAgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgeCA9XG4gIHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHgpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgeCA9XG4gIHRyeSBTb21lIChmbG9hdF9vZl9zdHJpbmcgeClcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNfYXV4IGFsbG93X2V4cGFuZCBjdXJyZW50IGFyZ3Ygc3BlY2xpc3QgYW5vbmZ1blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPVxuICBsZXQgaW5pdHBvcyA9ICFjdXJyZW50IGluXG4gIGxldCBjb252ZXJ0X2Vycm9yIGVycm9yID1cbiAgICAoKiBjb252ZXJ0IGFuIGludGVybmFsIGVycm9yIHRvIGEgQmFkL0hlbHAgZXhjZXB0aW9uXG4gICAgICAgKm9yKiBhZGQgdGhlIHByb2dyYW0gbmFtZSBhcyBhIHByZWZpeCBhbmQgdGhlIHVzYWdlIG1lc3NhZ2UgYXMgYSBzdWZmaXhcbiAgICAgICB0byBhbiB1c2VyLXJhaXNlZCBCYWQgZXhjZXB0aW9uLlxuICAgICopXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDIwMCBpblxuICAgIGxldCBwcm9nbmFtZSA9XG4gICAgICBpZiBpbml0cG9zIDwgKEFycmF5Lmxlbmd0aCAhYXJndikgdGhlbiAhYXJndi4oaW5pdHBvcykgZWxzZSBcIig/KVwiIGluXG4gICAgYmVnaW4gbWF0Y2ggZXJyb3Igd2l0aFxuICAgICAgfCBVbmtub3duIFwiLWhlbHBcIiAtPiAoKVxuICAgICAgfCBVbmtub3duIFwiLS1oZWxwXCIgLT4gKClcbiAgICAgIHwgVW5rbm93biBzIC0+XG4gICAgICAgICAgYnByaW50ZiBiIFwiJXM6IHVua25vd24gb3B0aW9uICclcycuXFxuXCIgcHJvZ25hbWUgc1xuICAgICAgfCBNaXNzaW5nIHMgLT5cbiAgICAgICAgICBicHJpbnRmIGIgXCIlczogb3B0aW9uICclcycgbmVlZHMgYW4gYXJndW1lbnQuXFxuXCIgcHJvZ25hbWUgc1xuICAgICAgfCBXcm9uZyAob3B0LCBhcmcsIGV4cGVjdGVkKSAtPlxuICAgICAgICAgIGJwcmludGYgYiBcIiVzOiB3cm9uZyBhcmd1bWVudCAnJXMnOyBvcHRpb24gJyVzJyBleHBlY3RzICVzLlxcblwiXG4gICAgICAgICAgICAgICAgICBwcm9nbmFtZSBhcmcgb3B0IGV4cGVjdGVkXG4gICAgICB8IE1lc3NhZ2UgcyAtPiAoKiB1c2VyIGVycm9yIG1lc3NhZ2UgKilcbiAgICAgICAgICBicHJpbnRmIGIgXCIlczogJXMuXFxuXCIgcHJvZ25hbWUgc1xuICAgIGVuZDtcbiAgICB1c2FnZV9iIGIgIXNwZWNsaXN0IGVycm1zZztcbiAgICBpZiBlcnJvciA9IFVua25vd24gXCItaGVscFwiIHx8IGVycm9yID0gVW5rbm93biBcIi0taGVscFwiXG4gICAgdGhlbiBIZWxwIChCdWZmZXIuY29udGVudHMgYilcbiAgICBlbHNlIEJhZCAoQnVmZmVyLmNvbnRlbnRzIGIpXG4gIGluXG4gIGluY3IgY3VycmVudDtcbiAgd2hpbGUgIWN1cnJlbnQgPCAoQXJyYXkubGVuZ3RoICFhcmd2KSBkb1xuICAgIGJlZ2luIHRyeVxuICAgICAgbGV0IHMgPSAhYXJndi4oIWN1cnJlbnQpIGluXG4gICAgICBpZiBTdHJpbmcubGVuZ3RoIHMgPj0gMSAmJiBzLlswXSA9ICctJyB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBhY3Rpb24sIGZvbGxvdyA9XG4gICAgICAgICAgdHJ5IGFzc29jMyBzICFzcGVjbGlzdCwgTm9uZVxuICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgdHJ5XG4gICAgICAgICAgICBsZXQga2V5d29yZCwgYXJnID0gc3BsaXQgcyBpblxuICAgICAgICAgICAgYXNzb2MzIGtleXdvcmQgIXNwZWNsaXN0LCBTb21lIGFyZ1xuICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChTdG9wIChVbmtub3duIHMpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgbm9fYXJnICgpID1cbiAgICAgICAgICBtYXRjaCBmb2xsb3cgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBhcmcgLT4gcmFpc2UgKFN0b3AgKFdyb25nIChzLCBhcmcsIFwibm8gYXJndW1lbnRcIikpKSBpblxuICAgICAgICBsZXQgZ2V0X2FyZyAoKSA9XG4gICAgICAgICAgbWF0Y2ggZm9sbG93IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgaWYgIWN1cnJlbnQgKyAxIDwgKEFycmF5Lmxlbmd0aCAhYXJndikgdGhlbiAhYXJndi4oIWN1cnJlbnQgKyAxKVxuICAgICAgICAgICAgICBlbHNlIHJhaXNlIChTdG9wIChNaXNzaW5nIHMpKVxuICAgICAgICAgIHwgU29tZSBhcmcgLT4gYXJnXG4gICAgICAgIGluXG4gICAgICAgIGxldCBjb25zdW1lX2FyZyAoKSA9XG4gICAgICAgICAgbWF0Y2ggZm9sbG93IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gaW5jciBjdXJyZW50XG4gICAgICAgICAgfCBTb21lIF8gLT4gKClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHJlYyB0cmVhdF9hY3Rpb24gPSBmdW5jdGlvblxuICAgICAgICB8IFVuaXQgZiAtPiBub19hcmcgKCk7IGYgKCk7XG4gICAgICAgIHwgQm9vbCBmIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggYm9vbF9vZl9zdHJpbmdfb3B0IGFyZyB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgKFN0b3AgKFdyb25nIChzLCBhcmcsIFwiYSBib29sZWFuXCIpKSlcbiAgICAgICAgICAgIHwgU29tZSBzIC0+IGYgc1xuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgU2V0IHIgLT4gbm9fYXJnICgpOyByIDo9IHRydWU7XG4gICAgICAgIHwgQ2xlYXIgciAtPiBub19hcmcgKCk7IHIgOj0gZmFsc2U7XG4gICAgICAgIHwgU3RyaW5nIGYgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBmIGFyZztcbiAgICAgICAgICAgIGNvbnN1bWVfYXJnICgpO1xuICAgICAgICB8IFN5bWJvbCAoc3ltYiwgZikgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBpZiBMaXN0Lm1lbSBhcmcgc3ltYiB0aGVuIGJlZ2luXG4gICAgICAgICAgICAgIGYgYXJnO1xuICAgICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcIm9uZSBvZjogXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKG1ha2Vfc3ltbGlzdCBcIlwiIFwiIFwiIFwiXCIgc3ltYikpKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgICB8IFNldF9zdHJpbmcgciAtPlxuICAgICAgICAgICAgciA6PSBnZXRfYXJnICgpO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgSW50IGYgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBpbnRfb2Zfc3RyaW5nX29wdCBhcmcgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcImFuIGludGVnZXJcIikpKVxuICAgICAgICAgICAgfCBTb21lIHggLT4gZiB4XG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgfCBTZXRfaW50IHIgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBpbnRfb2Zfc3RyaW5nX29wdCBhcmcgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcImFuIGludGVnZXJcIikpKVxuICAgICAgICAgICAgfCBTb21lIHggLT4gciA6PSB4XG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgfCBGbG9hdCBmIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBhcmcgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcImEgZmxvYXRcIikpKVxuICAgICAgICAgICAgfCBTb21lIHggLT4gZiB4XG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgfCBTZXRfZmxvYXQgciAtPlxuICAgICAgICAgICAgbGV0IGFyZyA9IGdldF9hcmcgKCkgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIGZsb2F0X29mX3N0cmluZ19vcHQgYXJnIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJhIGZsb2F0XCIpKSlcbiAgICAgICAgICAgIHwgU29tZSB4IC0+IHIgOj0geFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgVHVwbGUgc3BlY3MgLT5cbiAgICAgICAgICAgIG5vX2FyZyAoKTtcbiAgICAgICAgICAgIExpc3QuaXRlciB0cmVhdF9hY3Rpb24gc3BlY3M7XG4gICAgICAgIHwgUmVzdCBmIC0+XG4gICAgICAgICAgICBub19hcmcgKCk7XG4gICAgICAgICAgICB3aGlsZSAhY3VycmVudCA8IChBcnJheS5sZW5ndGggIWFyZ3YpIC0gMSBkb1xuICAgICAgICAgICAgICBmICFhcmd2LighY3VycmVudCArIDEpO1xuICAgICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgICAgIGRvbmU7XG4gICAgICAgIHwgUmVzdF9hbGwgZiAtPlxuICAgICAgICAgICAgbm9fYXJnICgpO1xuICAgICAgICAgICAgbGV0IGFjYyA9IHJlZiBbXSBpblxuICAgICAgICAgICAgd2hpbGUgIWN1cnJlbnQgPCBBcnJheS5sZW5ndGggIWFyZ3YgLSAxIGRvXG4gICAgICAgICAgICAgIGFjYyA6PSAhYXJndi4oIWN1cnJlbnQgKyAxKSA6OiAhYWNjO1xuICAgICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICBmIChMaXN0LnJldiAhYWNjKVxuICAgICAgICB8IEV4cGFuZCBmIC0+XG4gICAgICAgICAgICBpZiBub3QgYWxsb3dfZXhwYW5kIHRoZW5cbiAgICAgICAgICAgICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJBcmcuRXhwYW5kIGlzIGlzIG9ubHkgYWxsb3dlZCB3aXRoIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcucGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNcIik7XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgbGV0IG5ld2FyZyA9IGYgYXJnIGluXG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgICAgIGxldCBiZWZvcmUgPSBBcnJheS5zdWIgIWFyZ3YgMCAoIWN1cnJlbnQgKyAxKVxuICAgICAgICAgICAgYW5kIGFmdGVyID1cbiAgICAgICAgICAgICAgQXJyYXkuc3ViICFhcmd2ICghY3VycmVudCArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAoKEFycmF5Lmxlbmd0aCAhYXJndikgLSAhY3VycmVudCAtIDEpIGluXG4gICAgICAgICAgICBhcmd2Oj0gQXJyYXkuY29uY2F0IFtiZWZvcmU7bmV3YXJnO2FmdGVyXTtcbiAgICAgICAgaW5cbiAgICAgICAgdHJlYXRfYWN0aW9uIGFjdGlvbiBlbmRcbiAgICAgIGVsc2UgYW5vbmZ1biBzXG4gICAgd2l0aCB8IEJhZCBtIC0+IHJhaXNlIChjb252ZXJ0X2Vycm9yIChNZXNzYWdlIG0pKTtcbiAgICAgICAgIHwgU3RvcCBlIC0+IHJhaXNlIChjb252ZXJ0X2Vycm9yIGUpO1xuICAgIGVuZDtcbiAgICBpbmNyIGN1cnJlbnRcbiAgZG9uZVxuXG5sZXQgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWMgY3VycmVudCBhcmd2IHNwZWNsaXN0IGFub25mdW4gZXJybXNnID1cbiAgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNfYXV4IHRydWUgY3VycmVudCBhcmd2IHNwZWNsaXN0IGFub25mdW4gZXJybXNnXG5cbmxldCBwYXJzZV9hcmd2X2R5bmFtaWMgPyhjdXJyZW50PWN1cnJlbnQpIGFyZ3Ygc3BlY2xpc3QgYW5vbmZ1biBlcnJtc2cgPVxuICBwYXJzZV9hbmRfZXhwYW5kX2FyZ3ZfZHluYW1pY19hdXggZmFsc2UgY3VycmVudCAocmVmIGFyZ3YpIHNwZWNsaXN0IGFub25mdW5cbiAgICBlcnJtc2dcblxuXG5sZXQgcGFyc2VfYXJndiA/KGN1cnJlbnQ9Y3VycmVudCkgYXJndiBzcGVjbGlzdCBhbm9uZnVuIGVycm1zZyA9XG4gIHBhcnNlX2FyZ3ZfZHluYW1pYyB+Y3VycmVudDpjdXJyZW50IGFyZ3YgKHJlZiBzcGVjbGlzdCkgYW5vbmZ1biBlcnJtc2dcblxuXG5sZXQgcGFyc2UgbCBmIG1zZyA9XG4gIHRyeVxuICAgIHBhcnNlX2FyZ3YgU3lzLmFyZ3YgbCBmIG1zZ1xuICB3aXRoXG4gIHwgQmFkIG1zZyAtPiBlcHJpbnRmIFwiJXNcIiBtc2c7IGV4aXQgMlxuICB8IEhlbHAgbXNnIC0+IHByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDBcblxuXG5sZXQgcGFyc2VfZHluYW1pYyBsIGYgbXNnID1cbiAgdHJ5XG4gICAgcGFyc2VfYXJndl9keW5hbWljIFN5cy5hcmd2IGwgZiBtc2dcbiAgd2l0aFxuICB8IEJhZCBtc2cgLT4gZXByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDJcbiAgfCBIZWxwIG1zZyAtPiBwcmludGYgXCIlc1wiIG1zZzsgZXhpdCAwXG5cbmxldCBwYXJzZV9leHBhbmQgbCBmIG1zZyA9XG4gIHRyeVxuICAgIGxldCBhcmd2ID0gcmVmIFN5cy5hcmd2IGluXG4gICAgbGV0IHNwZWMgPSByZWYgbCBpblxuICAgIGxldCBjdXJyZW50ID0gcmVmICghY3VycmVudCkgaW5cbiAgICBwYXJzZV9hbmRfZXhwYW5kX2FyZ3ZfZHluYW1pYyBjdXJyZW50IGFyZ3Ygc3BlYyBmIG1zZ1xuICB3aXRoXG4gIHwgQmFkIG1zZyAtPiBlcHJpbnRmIFwiJXNcIiBtc2c7IGV4aXQgMlxuICB8IEhlbHAgbXNnIC0+IHByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDBcblxuXG5sZXQgc2Vjb25kX3dvcmQgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIG4gPVxuICAgIGlmIG4gPj0gbGVuIHRoZW4gbGVuXG4gICAgZWxzZSBpZiBzLltuXSA9ICcgJyB0aGVuIGxvb3AgKG4rMSlcbiAgICBlbHNlIG5cbiAgaW5cbiAgbWF0Y2ggU3RyaW5nLmluZGV4IHMgJ1xcdCcgd2l0aFxuICB8IG4gLT4gbG9vcCAobisxKVxuICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT5cbiAgICAgIGJlZ2luIG1hdGNoIFN0cmluZy5pbmRleCBzICcgJyB3aXRoXG4gICAgICB8IG4gLT4gbG9vcCAobisxKVxuICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGxlblxuICAgICAgZW5kXG5cblxubGV0IG1heF9hcmdfbGVuIGN1ciAoa3dkLCBzcGVjLCBkb2MpID1cbiAgbWF0Y2ggc3BlYyB3aXRoXG4gIHwgU3ltYm9sIF8gLT4gSW50Lm1heCBjdXIgKFN0cmluZy5sZW5ndGgga3dkKVxuICB8IF8gLT4gSW50Lm1heCBjdXIgKFN0cmluZy5sZW5ndGgga3dkICsgc2Vjb25kX3dvcmQgZG9jKVxuXG5cbmxldCByZXBsYWNlX2xlYWRpbmdfdGFiIHMgPVxuICBsZXQgc2VlbiA9IHJlZiBmYWxzZSBpblxuICBTdHJpbmcubWFwIChmdW5jdGlvbiAnXFx0JyB3aGVuIG5vdCAhc2VlbiAtPiBzZWVuIDo9IHRydWU7ICcgJyB8IGMgLT4gYykgc1xuXG5sZXQgYWRkX3BhZGRpbmcgbGVuIGtzZCA9XG4gIG1hdGNoIGtzZCB3aXRoXG4gIHwgKF8sIF8sIFwiXCIpIC0+XG4gICAgICAoKiBEbyBub3QgcGFkIHVuZG9jdW1lbnRlZCBvcHRpb25zLCBzbyB0aGF0IHRoZXkgc3RpbGwgZG9uJ3Qgc2hvdyB1cCB3aGVuXG4gICAgICAgKiBydW4gdGhyb3VnaCBbdXNhZ2VdIG9yIFtwYXJzZV0uICopXG4gICAgICBrc2RcbiAgfCAoa3dkLCAoU3ltYm9sIF8gYXMgc3BlYyksIG1zZykgLT5cbiAgICAgIGxldCBjdXRjb2wgPSBzZWNvbmRfd29yZCBtc2cgaW5cbiAgICAgIGxldCBzcGFjZXMgPSBTdHJpbmcubWFrZSAoKEludC5tYXggMCAobGVuIC0gY3V0Y29sKSkgKyAzKSAnICcgaW5cbiAgICAgIChrd2QsIHNwZWMsIFwiXFxuXCIgXiBzcGFjZXMgXiByZXBsYWNlX2xlYWRpbmdfdGFiIG1zZylcbiAgfCAoa3dkLCBzcGVjLCBtc2cpIC0+XG4gICAgICBsZXQgY3V0Y29sID0gc2Vjb25kX3dvcmQgbXNnIGluXG4gICAgICBsZXQga3dkX2xlbiA9IFN0cmluZy5sZW5ndGgga3dkIGluXG4gICAgICBsZXQgZGlmZiA9IGxlbiAtIGt3ZF9sZW4gLSBjdXRjb2wgaW5cbiAgICAgIGlmIGRpZmYgPD0gMCB0aGVuXG4gICAgICAgIChrd2QsIHNwZWMsIHJlcGxhY2VfbGVhZGluZ190YWIgbXNnKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgc3BhY2VzID0gU3RyaW5nLm1ha2UgZGlmZiAnICcgaW5cbiAgICAgICAgbGV0IHByZWZpeCA9IFN0cmluZy5zdWIgKHJlcGxhY2VfbGVhZGluZ190YWIgbXNnKSAwIGN1dGNvbCBpblxuICAgICAgICBsZXQgc3VmZml4ID0gU3RyaW5nLnN1YiBtc2cgY3V0Y29sIChTdHJpbmcubGVuZ3RoIG1zZyAtIGN1dGNvbCkgaW5cbiAgICAgICAgKGt3ZCwgc3BlYywgcHJlZml4IF4gc3BhY2VzIF4gc3VmZml4KVxuXG5cbmxldCBhbGlnbiA/KGxpbWl0PW1heF9pbnQpIHNwZWNsaXN0ID1cbiAgbGV0IGNvbXBsZXRlZCA9IGFkZF9oZWxwIHNwZWNsaXN0IGluXG4gIGxldCBsZW4gPSBMaXN0LmZvbGRfbGVmdCBtYXhfYXJnX2xlbiAwIGNvbXBsZXRlZCBpblxuICBsZXQgbGVuID0gSW50Lm1pbiBsZW4gbGltaXQgaW5cbiAgTGlzdC5tYXAgKGFkZF9wYWRkaW5nIGxlbikgY29tcGxldGVkXG5cbmxldCB0cmltX2NyIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGlmIGxlbiA+IDAgJiYgU3RyaW5nLmdldCBzIChsZW4gLSAxKSA9ICdcXHInIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgMCAobGVuIC0gMSlcbiAgZWxzZVxuICAgIHNcblxubGV0IHJlYWRfYXV4IHRyaW0gc2VwIGZpbGUgPVxuICBsZXQgaWMgPSBvcGVuX2luX2JpbiBmaWxlIGluXG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDIwMCBpblxuICBsZXQgd29yZHMgPSByZWYgW10gaW5cbiAgbGV0IHN0YXNoICgpID1cbiAgICBsZXQgd29yZCA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgICBsZXQgd29yZCA9IGlmIHRyaW0gdGhlbiB0cmltX2NyIHdvcmQgZWxzZSB3b3JkIGluXG4gICAgd29yZHMgOj0gd29yZCA6OiAhd29yZHM7XG4gICAgQnVmZmVyLmNsZWFyIGJ1ZlxuICBpblxuICBiZWdpblxuICAgIHRyeSB3aGlsZSB0cnVlIGRvXG4gICAgICAgIGxldCBjID0gaW5wdXRfY2hhciBpYyBpblxuICAgICAgICBpZiBjID0gc2VwIHRoZW4gc3Rhc2ggKCkgZWxzZSBCdWZmZXIuYWRkX2NoYXIgYnVmIGNcbiAgICAgIGRvbmVcbiAgICB3aXRoIEVuZF9vZl9maWxlIC0+ICgpXG4gIGVuZDtcbiAgaWYgQnVmZmVyLmxlbmd0aCBidWYgPiAwIHRoZW4gc3Rhc2ggKCk7XG4gIGNsb3NlX2luIGljO1xuICBBcnJheS5vZl9saXN0IChMaXN0LnJldiAhd29yZHMpXG5cbmxldCByZWFkX2FyZyA9IHJlYWRfYXV4IHRydWUgJ1xcbidcblxubGV0IHJlYWRfYXJnMCA9IHJlYWRfYXV4IGZhbHNlICdcXHgwMCdcblxubGV0IHdyaXRlX2F1eCBzZXAgZmlsZSBhcmdzID1cbiAgbGV0IG9jID0gb3Blbl9vdXRfYmluIGZpbGUgaW5cbiAgQXJyYXkuaXRlciAoZnVuIHMgLT4gZnByaW50ZiBvYyBcIiVzJWNcIiBzIHNlcCkgYXJncztcbiAgY2xvc2Vfb3V0IG9jXG5cbmxldCB3cml0ZV9hcmcgPSB3cml0ZV9hdXggJ1xcbidcblxubGV0IHdyaXRlX2FyZzAgPSB3cml0ZV9hdXggJ1xceDAwJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBpZCA6ICdhIC0+ICdhID0gXCIlaWRlbnRpdHlcIlxubGV0IGNvbnN0IGMgXyA9IGNcbmxldCBmbGlwIGYgeCB5ID0gZiB5IHhcbmxldCBuZWdhdGUgcCB2ID0gbm90IChwIHYpXG5cbmV4Y2VwdGlvbiBGaW5hbGx5X3JhaXNlZCBvZiBleG5cblxubGV0ICgpID0gUHJpbnRleGMucmVnaXN0ZXJfcHJpbnRlciBAQCBmdW5jdGlvblxufCBGaW5hbGx5X3JhaXNlZCBleG4gLT4gU29tZSAoXCJGdW4uRmluYWxseV9yYWlzZWQ6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4bilcbnwgXyAtPiBOb25lXG5cbmxldCBwcm90ZWN0IH4oZmluYWxseSA6IHVuaXQgLT4gdW5pdCkgd29yayA9XG4gIGxldCBmaW5hbGx5X25vX2V4biAoKSA9XG4gICAgdHJ5IGZpbmFsbHkgKCkgd2l0aCBlIC0+XG4gICAgICBsZXQgYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2UgKEZpbmFsbHlfcmFpc2VkIGUpIGJ0XG4gIGluXG4gIG1hdGNoIHdvcmsgKCkgd2l0aFxuICB8IHJlc3VsdCAtPiBmaW5hbGx5X25vX2V4biAoKSA7IHJlc3VsdFxuICB8IGV4Y2VwdGlvbiB3b3JrX2V4biAtPlxuICAgICAgbGV0IHdvcmtfYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZmluYWxseV9ub19leG4gKCkgO1xuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2Ugd29ya19leG4gd29ya19idFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICBKYWNxdWVzLUhlbnJpIEpvdXJkYW4sIHByb2pldCBHYWxsaXVtLCBJTlJJQSBQYXJpcyAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5Ni0yMDE2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgICAqKVxuKCogICAgIGV0IGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHN0YXQgPSB7XG4gIG1pbm9yX3dvcmRzIDogZmxvYXQ7XG4gIHByb21vdGVkX3dvcmRzIDogZmxvYXQ7XG4gIG1ham9yX3dvcmRzIDogZmxvYXQ7XG4gIG1pbm9yX2NvbGxlY3Rpb25zIDogaW50O1xuICBtYWpvcl9jb2xsZWN0aW9ucyA6IGludDtcbiAgaGVhcF93b3JkcyA6IGludDtcbiAgaGVhcF9jaHVua3MgOiBpbnQ7XG4gIGxpdmVfd29yZHMgOiBpbnQ7XG4gIGxpdmVfYmxvY2tzIDogaW50O1xuICBmcmVlX3dvcmRzIDogaW50O1xuICBmcmVlX2Jsb2NrcyA6IGludDtcbiAgbGFyZ2VzdF9mcmVlIDogaW50O1xuICBmcmFnbWVudHMgOiBpbnQ7XG4gIGNvbXBhY3Rpb25zIDogaW50O1xuICB0b3BfaGVhcF93b3JkcyA6IGludDtcbiAgc3RhY2tfc2l6ZSA6IGludDtcbiAgZm9yY2VkX21ham9yX2NvbGxlY3Rpb25zOiBpbnQ7XG59XG5cbnR5cGUgY29udHJvbCA9IHtcbiAgbXV0YWJsZSBtaW5vcl9oZWFwX3NpemUgOiBpbnQ7XG4gIG11dGFibGUgbWFqb3JfaGVhcF9pbmNyZW1lbnQgOiBpbnQ7XG4gIG11dGFibGUgc3BhY2Vfb3ZlcmhlYWQgOiBpbnQ7XG4gIG11dGFibGUgdmVyYm9zZSA6IGludDtcbiAgbXV0YWJsZSBtYXhfb3ZlcmhlYWQgOiBpbnQ7XG4gIG11dGFibGUgc3RhY2tfbGltaXQgOiBpbnQ7XG4gIG11dGFibGUgYWxsb2NhdGlvbl9wb2xpY3kgOiBpbnQ7XG4gIHdpbmRvd19zaXplIDogaW50O1xuICBjdXN0b21fbWFqb3JfcmF0aW8gOiBpbnQ7XG4gIGN1c3RvbV9taW5vcl9yYXRpbyA6IGludDtcbiAgY3VzdG9tX21pbm9yX21heF9zaXplIDogaW50O1xufVxuXG5leHRlcm5hbCBzdGF0IDogdW5pdCAtPiBzdGF0ID0gXCJjYW1sX2djX3N0YXRcIlxuZXh0ZXJuYWwgcXVpY2tfc3RhdCA6IHVuaXQgLT4gc3RhdCA9IFwiY2FtbF9nY19xdWlja19zdGF0XCJcbmV4dGVybmFsIGNvdW50ZXJzIDogdW5pdCAtPiAoZmxvYXQgKiBmbG9hdCAqIGZsb2F0KSA9IFwiY2FtbF9nY19jb3VudGVyc1wiXG5leHRlcm5hbCBtaW5vcl93b3JkcyA6IHVuaXQgLT4gKGZsb2F0IFtAdW5ib3hlZF0pXG4gID0gXCJjYW1sX2djX21pbm9yX3dvcmRzXCIgXCJjYW1sX2djX21pbm9yX3dvcmRzX3VuYm94ZWRcIlxuZXh0ZXJuYWwgZ2V0IDogdW5pdCAtPiBjb250cm9sID0gXCJjYW1sX2djX2dldFwiXG5leHRlcm5hbCBzZXQgOiBjb250cm9sIC0+IHVuaXQgPSBcImNhbWxfZ2Nfc2V0XCJcbmV4dGVybmFsIG1pbm9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX21pbm9yXCJcbmV4dGVybmFsIG1ham9yX3NsaWNlIDogaW50IC0+IGludCA9IFwiY2FtbF9nY19tYWpvcl9zbGljZVwiXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBmdWxsX21ham9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX2Z1bGxfbWFqb3JcIlxuZXh0ZXJuYWwgY29tcGFjdCA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19jb21wYWN0aW9uXCJcbmV4dGVybmFsIGdldF9taW5vcl9mcmVlIDogdW5pdCAtPiBpbnQgPSBcImNhbWxfZ2V0X21pbm9yX2ZyZWVcIlxuZXh0ZXJuYWwgZ2V0X2J1Y2tldCA6IGludCAtPiBpbnQgPSBcImNhbWxfZ2V0X21ham9yX2J1Y2tldFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBnZXRfY3JlZGl0IDogdW5pdCAtPiBpbnQgPSBcImNhbWxfZ2V0X21ham9yX2NyZWRpdFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBodWdlX2ZhbGxiYWNrX2NvdW50IDogdW5pdCAtPiBpbnQgPSBcImNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFwiXG5leHRlcm5hbCBldmVudGxvZ19wYXVzZSA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9ldmVudGxvZ19wYXVzZVwiXG5leHRlcm5hbCBldmVudGxvZ19yZXN1bWUgOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfZXZlbnRsb2dfcmVzdW1lXCJcblxub3BlbiBQcmludGZcblxubGV0IHByaW50X3N0YXQgYyA9XG4gIGxldCBzdCA9IHN0YXQgKCkgaW5cbiAgZnByaW50ZiBjIFwibWlub3JfY29sbGVjdGlvbnM6ICAgICAgJWRcXG5cIiBzdC5taW5vcl9jb2xsZWN0aW9ucztcbiAgZnByaW50ZiBjIFwibWFqb3JfY29sbGVjdGlvbnM6ICAgICAgJWRcXG5cIiBzdC5tYWpvcl9jb2xsZWN0aW9ucztcbiAgZnByaW50ZiBjIFwiY29tcGFjdGlvbnM6ICAgICAgICAgICAgJWRcXG5cIiBzdC5jb21wYWN0aW9ucztcbiAgZnByaW50ZiBjIFwiZm9yY2VkX21ham9yX2NvbGxlY3Rpb25zOiAlZFxcblwiIHN0LmZvcmNlZF9tYWpvcl9jb2xsZWN0aW9ucztcbiAgZnByaW50ZiBjIFwiXFxuXCI7XG4gIGxldCBsMSA9IFN0cmluZy5sZW5ndGggKHNwcmludGYgXCIlLjBmXCIgc3QubWlub3Jfd29yZHMpIGluXG4gIGZwcmludGYgYyBcIm1pbm9yX3dvcmRzOiAgICAlKi4wZlxcblwiIGwxIHN0Lm1pbm9yX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJwcm9tb3RlZF93b3JkczogJSouMGZcXG5cIiBsMSBzdC5wcm9tb3RlZF93b3JkcztcbiAgZnByaW50ZiBjIFwibWFqb3Jfd29yZHM6ICAgICUqLjBmXFxuXCIgbDEgc3QubWFqb3Jfd29yZHM7XG4gIGZwcmludGYgYyBcIlxcblwiO1xuICBsZXQgbDIgPSBTdHJpbmcubGVuZ3RoIChzcHJpbnRmIFwiJWRcIiBzdC50b3BfaGVhcF93b3JkcykgaW5cbiAgZnByaW50ZiBjIFwidG9wX2hlYXBfd29yZHM6ICUqZFxcblwiIGwyIHN0LnRvcF9oZWFwX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJoZWFwX3dvcmRzOiAgICAgJSpkXFxuXCIgbDIgc3QuaGVhcF93b3JkcztcbiAgZnByaW50ZiBjIFwibGl2ZV93b3JkczogICAgICUqZFxcblwiIGwyIHN0LmxpdmVfd29yZHM7XG4gIGZwcmludGYgYyBcImZyZWVfd29yZHM6ICAgICAlKmRcXG5cIiBsMiBzdC5mcmVlX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJsYXJnZXN0X2ZyZWU6ICAgJSpkXFxuXCIgbDIgc3QubGFyZ2VzdF9mcmVlO1xuICBmcHJpbnRmIGMgXCJmcmFnbWVudHM6ICAgICAgJSpkXFxuXCIgbDIgc3QuZnJhZ21lbnRzO1xuICBmcHJpbnRmIGMgXCJcXG5cIjtcbiAgZnByaW50ZiBjIFwibGl2ZV9ibG9ja3M6ICVkXFxuXCIgc3QubGl2ZV9ibG9ja3M7XG4gIGZwcmludGYgYyBcImZyZWVfYmxvY2tzOiAlZFxcblwiIHN0LmZyZWVfYmxvY2tzO1xuICBmcHJpbnRmIGMgXCJoZWFwX2NodW5rczogJWRcXG5cIiBzdC5oZWFwX2NodW5rc1xuXG5cbmxldCBhbGxvY2F0ZWRfYnl0ZXMgKCkgPVxuICBsZXQgKG1pLCBwcm8sIG1hKSA9IGNvdW50ZXJzICgpIGluXG4gIChtaSArLiBtYSAtLiBwcm8pICouIGZsb2F0X29mX2ludCAoU3lzLndvcmRfc2l6ZSAvIDgpXG5cblxuZXh0ZXJuYWwgZmluYWxpc2UgOiAoJ2EgLT4gdW5pdCkgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9maW5hbF9yZWdpc3RlclwiXG5leHRlcm5hbCBmaW5hbGlzZV9sYXN0IDogKHVuaXQgLT4gdW5pdCkgLT4gJ2EgLT4gdW5pdCA9XG4gIFwiY2FtbF9maW5hbF9yZWdpc3Rlcl9jYWxsZWRfd2l0aG91dF92YWx1ZVwiXG5leHRlcm5hbCBmaW5hbGlzZV9yZWxlYXNlIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2ZpbmFsX3JlbGVhc2VcIlxuXG5cbnR5cGUgYWxhcm0gPSBib29sIHJlZlxudHlwZSBhbGFybV9yZWMgPSB7YWN0aXZlIDogYWxhcm07IGYgOiB1bml0IC0+IHVuaXR9XG5cbmxldCByZWMgY2FsbF9hbGFybSBhcmVjID1cbiAgaWYgIShhcmVjLmFjdGl2ZSkgdGhlbiBiZWdpblxuICAgIGZpbmFsaXNlIGNhbGxfYWxhcm0gYXJlYztcbiAgICBhcmVjLmYgKCk7XG4gIGVuZFxuXG5cbmxldCBjcmVhdGVfYWxhcm0gZiA9XG4gIGxldCBhcmVjID0geyBhY3RpdmUgPSByZWYgdHJ1ZTsgZiA9IGYgfSBpblxuICBmaW5hbGlzZSBjYWxsX2FsYXJtIGFyZWM7XG4gIGFyZWMuYWN0aXZlXG5cblxubGV0IGRlbGV0ZV9hbGFybSBhID0gYSA6PSBmYWxzZVxuXG5tb2R1bGUgTWVtcHJvZiA9XG4gIHN0cnVjdFxuICAgIHR5cGUgYWxsb2NhdGlvbl9zb3VyY2UgPSBOb3JtYWwgfCBNYXJzaGFsIHwgQ3VzdG9tXG4gICAgdHlwZSBhbGxvY2F0aW9uID1cbiAgICAgIHsgbl9zYW1wbGVzIDogaW50O1xuICAgICAgICBzaXplIDogaW50O1xuICAgICAgICBzb3VyY2UgOiBhbGxvY2F0aW9uX3NvdXJjZTtcbiAgICAgICAgY2FsbHN0YWNrIDogUHJpbnRleGMucmF3X2JhY2t0cmFjZSB9XG5cbiAgICB0eXBlICgnbWlub3IsICdtYWpvcikgdHJhY2tlciA9IHtcbiAgICAgIGFsbG9jX21pbm9yOiBhbGxvY2F0aW9uIC0+ICdtaW5vciBvcHRpb247XG4gICAgICBhbGxvY19tYWpvcjogYWxsb2NhdGlvbiAtPiAnbWFqb3Igb3B0aW9uO1xuICAgICAgcHJvbW90ZTogJ21pbm9yIC0+ICdtYWpvciBvcHRpb247XG4gICAgICBkZWFsbG9jX21pbm9yOiAnbWlub3IgLT4gdW5pdDtcbiAgICAgIGRlYWxsb2NfbWFqb3I6ICdtYWpvciAtPiB1bml0O1xuICAgIH1cblxuICAgIGxldCBudWxsX3RyYWNrZXIgPSB7XG4gICAgICBhbGxvY19taW5vciA9IChmdW4gXyAtPiBOb25lKTtcbiAgICAgIGFsbG9jX21ham9yID0gKGZ1biBfIC0+IE5vbmUpO1xuICAgICAgcHJvbW90ZSA9IChmdW4gXyAtPiBOb25lKTtcbiAgICAgIGRlYWxsb2NfbWlub3IgPSAoZnVuIF8gLT4gKCkpO1xuICAgICAgZGVhbGxvY19tYWpvciA9IChmdW4gXyAtPiAoKSk7XG4gICAgfVxuXG4gICAgZXh0ZXJuYWwgY19zdGFydCA6XG4gICAgICBmbG9hdCAtPiBpbnQgLT4gKCdtaW5vciwgJ21ham9yKSB0cmFja2VyIC0+IHVuaXRcbiAgICAgID0gXCJjYW1sX21lbXByb2Zfc3RhcnRcIlxuXG4gICAgbGV0IHN0YXJ0XG4gICAgICB+c2FtcGxpbmdfcmF0ZVxuICAgICAgPyhjYWxsc3RhY2tfc2l6ZSA9IG1heF9pbnQpXG4gICAgICB0cmFja2VyID1cbiAgICAgIGNfc3RhcnQgc2FtcGxpbmdfcmF0ZSBjYWxsc3RhY2tfc2l6ZSB0cmFja2VyXG5cbiAgICBleHRlcm5hbCBzdG9wIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX21lbXByb2Zfc3RvcFwiXG4gIGVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNZXNzYWdlIGRpZ2VzdCAoTUQ1KSAqKVxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxubGV0IGVxdWFsID0gU3RyaW5nLmVxdWFsXG5cbmV4dGVybmFsIHVuc2FmZV9zdHJpbmc6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X3N0cmluZ1wiXG5leHRlcm5hbCBjaGFubmVsOiBpbl9jaGFubmVsIC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9jaGFuXCJcblxubGV0IHN0cmluZyBzdHIgPVxuICB1bnNhZmVfc3RyaW5nIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxubGV0IGJ5dGVzIGIgPSBzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYilcblxubGV0IHN1YnN0cmluZyBzdHIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnN1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX3N0cmluZyBzdHIgb2ZzIGxlblxuXG5sZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID0gc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxubGV0IGZpbGUgZmlsZW5hbWUgPVxuICBsZXQgaWMgPSBvcGVuX2luX2JpbiBmaWxlbmFtZSBpblxuICBtYXRjaCBjaGFubmVsIGljICgtMSkgd2l0aFxuICAgIHwgZCAtPiBjbG9zZV9pbiBpYzsgZFxuICAgIHwgZXhjZXB0aW9uIGUgLT4gY2xvc2VfaW4gaWM7IHJhaXNlIGVcblxubGV0IG91dHB1dCBjaGFuIGRpZ2VzdCA9XG4gIG91dHB1dF9zdHJpbmcgY2hhbiBkaWdlc3RcblxubGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gMTZcblxubGV0IGNoYXJfaGV4IG4gPVxuICBDaGFyLnVuc2FmZV9jaHIgKG4gKyBpZiBuIDwgMTAgdGhlbiBDaGFyLmNvZGUgJzAnIGVsc2UgKENoYXIuY29kZSAnYScgLSAxMCkpXG5cbmxldCB0b19oZXggZCA9XG4gIGlmIFN0cmluZy5sZW5ndGggZCA8PiAxNiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDMyIGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIGxldCB4ID0gQ2hhci5jb2RlIGQuW2ldIGluXG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMikgKGNoYXJfaGV4ICh4IGxzciA0KSk7XG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMisxKSAoY2hhcl9oZXggKHggbGFuZCAweDBmKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG5cbmxldCBmcm9tX2hleCBzID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IDMyIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuZnJvbV9oZXhcIjtcbiAgbGV0IGRpZ2l0IGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJzAnLi4nOScgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnQScuLidGJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnQScgKyAxMFxuICAgIHwgJ2EnLi4nZicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ2EnICsgMTBcbiAgICB8IF8gLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJEaWdlc3QuZnJvbV9oZXhcIilcbiAgaW5cbiAgbGV0IGJ5dGUgaSA9IGRpZ2l0IHMuW2ldIGxzbCA0ICsgZGlnaXQgcy5baSsxXSBpblxuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDE2IGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIEJ5dGVzLnNldCByZXN1bHQgaSAoQ2hhci5jaHIgKGJ5dGUgKDIgKiBpKSkpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBIYXNoIHRhYmxlcyAqKVxuXG4oKiBXZSBkbyBkeW5hbWljIGhhc2hpbmcsIGFuZCByZXNpemUgdGhlIHRhYmxlIGFuZCByZWhhc2ggdGhlIGVsZW1lbnRzXG4gICB3aGVuIGJ1Y2tldHMgYmVjb21lIHRvbyBsb25nLiAqKVxuXG50eXBlICgnYSwgJ2IpIHQgPVxuICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgbXV0YWJsZSBkYXRhOiAoJ2EsICdiKSBidWNrZXRsaXN0IGFycmF5OyAgKCogdGhlIGJ1Y2tldHMgKilcbiAgICBzZWVkOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogZm9yIHJhbmRvbWl6YXRpb24gKilcbiAgICBtdXRhYmxlIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgfVxuXG5hbmQgKCdhLCAnYikgYnVja2V0bGlzdCA9XG4gICAgRW1wdHlcbiAgfCBDb25zIG9mIHsgbXV0YWJsZSBrZXk6ICdhO1xuICAgICAgICAgICAgICBtdXRhYmxlIGRhdGE6ICdiO1xuICAgICAgICAgICAgICBtdXRhYmxlIG5leHQ6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgfVxuXG4oKiBUaGUgc2lnbiBvZiBpbml0aWFsX3NpemUgZW5jb2RlcyB0aGUgZmFjdCB0aGF0IGEgdHJhdmVyc2FsIGlzXG4gICBvbmdvaW5nIG9yIG5vdC5cblxuICAgVGhpcyBkaXNhYmxlcyB0aGUgZWZmaWNpZW50IGluIHBsYWNlIGltcGxlbWVudGF0aW9uIG9mIHJlc2l6aW5nLlxuKilcblxubGV0IG9uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgfHwgaC5pbml0aWFsX3NpemUgPCAwXG5cbmxldCBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBoLmluaXRpYWxfc2l6ZSA8LSAtIGguaW5pdGlhbF9zaXplXG5cbigqIFRvIHBpY2sgcmFuZG9tIHNlZWRzIGlmIHJlcXVlc3RlZCAqKVxuXG5sZXQgcmFuZG9taXplZF9kZWZhdWx0ID1cbiAgbGV0IHBhcmFtcyA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJPQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT5cbiAgICB0cnkgU3lzLmdldGVudiBcIkNBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+IFwiXCIgaW5cbiAgU3RyaW5nLmNvbnRhaW5zIHBhcmFtcyAnUidcblxubGV0IHJhbmRvbWl6ZWQgPSByZWYgcmFuZG9taXplZF9kZWZhdWx0XG5cbmxldCByYW5kb21pemUgKCkgPSByYW5kb21pemVkIDo9IHRydWVcbmxldCBpc19yYW5kb21pemVkICgpID0gIXJhbmRvbWl6ZWRcblxubGV0IHBybmcgPSBsYXp5IChSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQoKSlcblxuKCogRnVuY3Rpb25zIHdoaWNoIGFwcGVhciBiZWZvcmUgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIG11c3QgZWl0aGVyIGJlXG4gICBpbmRlcGVuZGVudCBvZiB0aGUgaGFzaCBmdW5jdGlvbiBvciB0YWtlIGl0IGFzIGEgcGFyYW1ldGVyIChzZWUgIzIyMDIgYW5kXG4gICBjb2RlIGJlbG93IHRoZSBmdW5jdG9yIGRlZmluaXRpb25zLiAqKVxuXG4oKiBDcmVhdGluZyBhIGZyZXNoLCBlbXB0eSB0YWJsZSAqKVxuXG5sZXQgcmVjIHBvd2VyXzJfYWJvdmUgeCBuID1cbiAgaWYgeCA+PSBuIHRoZW4geFxuICBlbHNlIGlmIHggKiAyID4gU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiB4XG4gIGVsc2UgcG93ZXJfMl9hYm92ZSAoeCAqIDIpIG5cblxubGV0IGNyZWF0ZSA/KHJhbmRvbSA9ICFyYW5kb21pemVkKSBpbml0aWFsX3NpemUgPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgaW5pdGlhbF9zaXplIGluXG4gIGxldCBzZWVkID0gaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZykgZWxzZSAwIGluXG4gIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxubGV0IGNsZWFyIGggPVxuICBpZiBoLnNpemUgPiAwIHRoZW4gYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBBcnJheS5maWxsIGguZGF0YSAwIChBcnJheS5sZW5ndGggaC5kYXRhKSBFbXB0eVxuICBlbmRcblxubGV0IHJlc2V0IGggPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgICB8fCBsZW4gPSBhYnMgaC5pbml0aWFsX3NpemUgdGhlblxuICAgIGNsZWFyIGhcbiAgZWxzZSBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIChhYnMgaC5pbml0aWFsX3NpemUpIEVtcHR5XG4gIGVuZFxuXG5sZXQgY29weV9idWNrZXRsaXN0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBFbXB0eVxuICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGxldCByZWMgbG9vcCBwcmVjID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgfCBDb25zIHByZWMgLT4gIHByZWMubmV4dCA8LSByXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBsb29wIHIgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgbG9vcCByIG5leHQ7XG4gICAgICByXG5cbmxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkubWFwIGNvcHlfYnVja2V0bGlzdCBoLmRhdGEgfVxuXG5sZXQgbGVuZ3RoIGggPSBoLnNpemVcblxubGV0IGluc2VydF9hbGxfYnVja2V0cyBpbmRleGZ1biBpbnBsYWNlIG9kYXRhIG5kYXRhID1cbiAgbGV0IG5zaXplID0gQXJyYXkubGVuZ3RoIG5kYXRhIGluXG4gIGxldCBuZGF0YV90YWlsID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT4gKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gYXMgY2VsbCAtPlxuICAgICAgICBsZXQgY2VsbCA9XG4gICAgICAgICAgaWYgaW5wbGFjZSB0aGVuIGNlbGxcbiAgICAgICAgICBlbHNlIENvbnMge2tleTsgZGF0YTsgbmV4dCA9IEVtcHR5fVxuICAgICAgICBpblxuICAgICAgICBsZXQgbmlkeCA9IGluZGV4ZnVuIGtleSBpblxuICAgICAgICBiZWdpbiBtYXRjaCBuZGF0YV90YWlsLihuaWR4KSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gbmRhdGEuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBjZWxsO1xuICAgICAgICBlbmQ7XG4gICAgICAgIG5kYXRhX3RhaWwuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIGluc2VydF9idWNrZXQgbmV4dFxuICBpblxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIG9kYXRhIC0gMSBkb1xuICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gIGRvbmU7XG4gIGlmIGlucGxhY2UgdGhlblxuICAgIGZvciBpID0gMCB0byBuc2l6ZSAtIDEgZG9cbiAgICAgIG1hdGNoIG5kYXRhX3RhaWwuKGkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBFbXB0eVxuICAgIGRvbmVcblxubGV0IHJlc2l6ZSBpbmRleGZ1biBoID1cbiAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICBsZXQgbnNpemUgPSBvc2l6ZSAqIDIgaW5cbiAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgIGxldCBpbnBsYWNlID0gbm90IChvbmdvaW5nX3RyYXZlcnNhbCBoKSBpblxuICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgICAgKCogc28gdGhhdCBpbmRleGZ1biBzZWVzIHRoZSBuZXcgYnVja2V0IGNvdW50ICopXG4gICAgaW5zZXJ0X2FsbF9idWNrZXRzIChpbmRleGZ1biBoKSBpbnBsYWNlIG9kYXRhIG5kYXRhXG4gIGVuZFxuXG5sZXQgaXRlciBmIGggPVxuICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICAoKVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGYga2V5IGRhdGE7IGRvX2J1Y2tldCBuZXh0IGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IHJlYyBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIEVtcHR5XG4gICAgICBlbmRcbiAgfCAoQ29ucyAoe2tleTsgZGF0YTsgbmV4dH0gYXMgYykpIGFzIHNsb3QgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGYga2V5IGRhdGEgd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjIG5leHRcbiAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIHNsb3RcbiAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gc2xvdFxuICAgICAgICAgIGVuZDtcbiAgICAgICAgICBjLmRhdGEgPC0gZGF0YTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHNsb3QgbmV4dFxuICAgICAgZW5kXG5cbmxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgRW1wdHkgaC5kYXRhLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoXG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgZm9sZCBmIGggaW5pdCA9XG4gIGxldCByZWMgZG9fYnVja2V0IGIgYWNjdSA9XG4gICAgbWF0Y2ggYiB3aXRoXG4gICAgICBFbXB0eSAtPlxuICAgICAgICBhY2N1XG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZG9fYnVja2V0IG5leHQgKGYga2V5IGRhdGEgYWNjdSkgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgIWFjY3VcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbnR5cGUgc3RhdGlzdGljcyA9IHtcbiAgbnVtX2JpbmRpbmdzOiBpbnQ7XG4gIG51bV9idWNrZXRzOiBpbnQ7XG4gIG1heF9idWNrZXRfbGVuZ3RoOiBpbnQ7XG4gIGJ1Y2tldF9oaXN0b2dyYW06IGludCBhcnJheVxufVxuXG5sZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYWNjdVxuICB8IENvbnN7bmV4dH0gLT4gYnVja2V0X2xlbmd0aCAoYWNjdSArIDEpIG5leHRcblxubGV0IHN0YXRzIGggPVxuICBsZXQgbWJsID1cbiAgICBBcnJheS5mb2xkX2xlZnQgKGZ1biBtIGIgLT4gSW50Lm1heCBtIChidWNrZXRfbGVuZ3RoIDAgYikpIDAgaC5kYXRhIGluXG4gIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4gYiAtPlxuICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgaC5kYXRhO1xuICB7IG51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSB0YmwgPVxuICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICB8IEVtcHR5IC0+XG4gICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgaW5cbiAgYXV4IDAgRW1wdHlcblxubGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbmxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbigqIEZ1bmN0b3JpYWwgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiBpbnQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlOiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5OiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZTogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQ6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICEnYSB0XG4gICAgdmFsIGNyZWF0ZSA6ID9yYW5kb206Ym9vbCAtPiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5IDogJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGFkZCA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlIDogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kIDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2FsbCA6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyIDogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQgOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGxlbmd0aCA6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlU2VlZGVkKEg6IFNlZWRlZEhhc2hlZFR5cGUpOiAoU2VlZGVkUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIHR5cGUga2V5ID0gSC50XG4gICAgdHlwZSAnYSBoYXNodGJsID0gKGtleSwgJ2EpIHRcbiAgICB0eXBlICdhIHQgPSAnYSBoYXNodGJsXG4gICAgbGV0IGNyZWF0ZSA9IGNyZWF0ZVxuICAgIGxldCBjbGVhciA9IGNsZWFyXG4gICAgbGV0IHJlc2V0ID0gcmVzZXRcbiAgICBsZXQgY29weSA9IGNvcHlcblxuICAgIGxldCBrZXlfaW5kZXggaCBrZXkgPVxuICAgICAgKEguaGFzaCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcblxuICAgIGxldCBhZGQgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gICAgICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG4gICAgbGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgKClcbiAgICAgIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbiAgICBsZXQgcmVtb3ZlIGgga2V5ID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG4gICAgbGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxuICAgIGxldCBmaW5kIGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG4gICAgbGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxuICAgIGxldCBmaW5kX2FsbCBoIGtleSA9XG4gICAgICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBbXVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhPWQ7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gZCA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxuICAgIGxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gICAgICBlbmRcblxuICAgIGxldCBtZW0gaCBrZXkgPVxuICAgICAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgICAgIEguZXF1YWwgayBrZXkgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICAgIGxldCBpdGVyID0gaXRlclxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgPSBmaWx0ZXJfbWFwX2lucGxhY2VcbiAgICBsZXQgZm9sZCA9IGZvbGRcbiAgICBsZXQgbGVuZ3RoID0gbGVuZ3RoXG4gICAgbGV0IHN0YXRzID0gc3RhdHNcbiAgICBsZXQgdG9fc2VxID0gdG9fc2VxXG4gICAgbGV0IHRvX3NlcV9rZXlzID0gdG9fc2VxX2tleXNcbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyA9IHRvX3NlcV92YWx1ZXNcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKEg6IEhhc2hlZFR5cGUpOiAoUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgICAgdHlwZSB0ID0gSC50XG4gICAgICAgIGxldCBlcXVhbCA9IEguZXF1YWxcbiAgICAgICAgbGV0IGhhc2ggKF9zZWVkOiBpbnQpIHggPSBILmhhc2ggeFxuICAgICAgZW5kKVxuICAgIGxldCBjcmVhdGUgc3ogPSBjcmVhdGUgfnJhbmRvbTpmYWxzZSBzelxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuICBlbmRcblxuKCogUG9seW1vcnBoaWMgaGFzaCBmdW5jdGlvbi1iYXNlZCB0YWJsZXMgKilcbigqIENvZGUgaW5jbHVkZWQgYmVsb3cgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIHRvIGd1YXJkIGFnYWluc3QgYWNjaWRlbnRhbFxuICAgdXNlIC0gc2VlICMyMjAyICopXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxuXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxubGV0IGhhc2hfcGFyYW0gbjEgbjIgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIG4xIG4yIDAgeFxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcblxubGV0IGtleV9pbmRleCBoIGtleSA9XG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0XG4gIHRoZW4gKHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkhhc2h0Ymw6IHVuc3VwcG9ydGVkIGhhc2ggdGFibGUgZm9ybWF0XCJcblxubGV0IGFkZCBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG5sZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgKClcbiAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiBiZWdpblxuICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICBlbmRcbiAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG5sZXQgcmVtb3ZlIGgga2V5ID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxubGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxubGV0IGZpbmQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbmxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxubGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiBOb25lXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxubGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIFtdXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGRhdGEgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgdHJ1ZVxuICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG5sZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICBlbmRcblxubGV0IG1lbSBoIGtleSA9XG4gIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgIGNvbXBhcmUgayBrZXkgPSAwIHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgYWRkX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxubGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgdGJsXG5cbmxldCByZWJ1aWxkID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGggPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKVxuICAgIGVsc2UgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLnNlZWRcbiAgICBlbHNlIDAgaW5cbiAgbGV0IGgnID0ge1xuICAgIHNpemUgPSBoLnNpemU7XG4gICAgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eTtcbiAgICBzZWVkID0gc2VlZDtcbiAgICBpbml0aWFsX3NpemUgPSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguaW5pdGlhbF9zaXplIGVsc2Ugc1xuICB9IGluXG4gIGluc2VydF9hbGxfYnVja2V0cyAoa2V5X2luZGV4IGgnKSBmYWxzZSBoLmRhdGEgaCcuZGF0YTtcbiAgaCdcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCoqIFdlYWsgYXJyYXkgb3BlcmF0aW9ucyAqKVxuXG50eXBlICEnYSB0XG5cbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiAnYSB0ID0gXCJjYW1sX3dlYWtfY3JlYXRlXCJcblxubGV0IGNyZWF0ZSBsID1cbiAgaWYgbm90ICgwIDw9IGwgJiYgbCA8PSBPYmouRXBoZW1lcm9uLm1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgIGludmFsaWRfYXJnKFwiV2Vhay5jcmVhdGVcIik7XG4gIGNyZWF0ZSBsXG5cbigqKiBudW1iZXIgb2YgYWRkaXRpb25hbCB2YWx1ZXMgaW4gYSB3ZWFrIHBvaW50ZXIgKilcbmxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcblxubGV0IGxlbmd0aCB4ID0gT2JqLnNpemUoT2JqLnJlcHIgeCkgLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG5sZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gIGlmIG5vdCAoMCA8PSBvICYmIG8gPCBsZW5ndGggZSkgdGhlblxuICAgIGludmFsaWRfYXJnKG1zZylcblxuZXh0ZXJuYWwgc2V0JyA6ICdhIHQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbmV4dGVybmFsIHVuc2V0IDogJ2EgdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2tleVwiXG5sZXQgc2V0IGUgbyB4ID1cbiAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiV2Vhay5zZXRcIjtcbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiB1bnNldCBlIG9cbiAgfCBTb21lIHggLT4gc2V0JyBlIG8geFxuXG5leHRlcm5hbCBnZXQgOiAnYSB0IC0+IGludCAtPiAnYSBvcHRpb24gPSBcImNhbWxfd2Vha19nZXRcIlxubGV0IGdldCBlIG8gPVxuICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJXZWFrLmdldFwiO1xuICBnZXQgZSBvXG5cbmV4dGVybmFsIGdldF9jb3B5IDogJ2EgdCAtPiBpbnQgLT4gJ2Egb3B0aW9uID0gXCJjYW1sX3dlYWtfZ2V0X2NvcHlcIlxubGV0IGdldF9jb3B5IGUgbyA9XG4gIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIldlYWsuZ2V0X2NvcHlcIjtcbiAgZ2V0X2NvcHkgZSBvXG5cbmV4dGVybmFsIGNoZWNrIDogJ2EgdCAtPiBpbnQgLT4gYm9vbCA9IFwiY2FtbF93ZWFrX2NoZWNrXCJcbmxldCBjaGVjayBlIG8gPVxuICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJXZWFrLmNoZWNrXCI7XG4gIGNoZWNrIGUgb1xuXG5leHRlcm5hbCBibGl0IDogJ2EgdCAtPiBpbnQgLT4gJ2EgdCAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfd2Vha19ibGl0XCJcblxuKCogYmxpdDogc3JjIHNyY29mZiBkc3QgZHN0b2ZmIGxlbiAqKVxubGV0IGJsaXQgZTEgbzEgZTIgbzIgbCA9XG4gIGlmIGwgPCAwIHx8IG8xIDwgMCB8fCBvMSA+IGxlbmd0aCBlMSAtIGxcbiAgICAgfHwgbzIgPCAwIHx8IG8yID4gbGVuZ3RoIGUyIC0gbFxuICB0aGVuIGludmFsaWRfYXJnIFwiV2Vhay5ibGl0XCJcbiAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0IGUxIG8xIGUyIG8yIGxcblxubGV0IGZpbGwgYXIgb2ZzIGxlbiB4ID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhciAtIGxlblxuICB0aGVuIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiV2Vhay5maWxsXCIpXG4gIGVsc2UgYmVnaW5cbiAgICBmb3IgaSA9IG9mcyB0byAob2ZzICsgbGVuIC0gMSkgZG9cbiAgICAgIHNldCBhciBpIHhcbiAgICBkb25lXG4gIGVuZFxuXG5cbigqKiBXZWFrIGhhc2ggdGFibGVzICopXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSBkYXRhXG4gIHR5cGUgdFxuICB2YWwgY3JlYXRlIDogaW50IC0+IHRcbiAgdmFsIGNsZWFyIDogdCAtPiB1bml0XG4gIHZhbCBtZXJnZSA6IHQgLT4gZGF0YSAtPiBkYXRhXG4gIHZhbCBhZGQgOiB0IC0+IGRhdGEgLT4gdW5pdFxuICB2YWwgcmVtb3ZlIDogdCAtPiBkYXRhIC0+IHVuaXRcbiAgdmFsIGZpbmQgOiB0IC0+IGRhdGEgLT4gZGF0YVxuICB2YWwgZmluZF9vcHQgOiB0IC0+IGRhdGEgLT4gZGF0YSBvcHRpb25cbiAgdmFsIGZpbmRfYWxsIDogdCAtPiBkYXRhIC0+IGRhdGEgbGlzdFxuICB2YWwgbWVtIDogdCAtPiBkYXRhIC0+IGJvb2xcbiAgdmFsIGl0ZXIgOiAoZGF0YSAtPiB1bml0KSAtPiB0IC0+IHVuaXRcbiAgdmFsIGZvbGQgOiAoZGF0YSAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICB2YWwgY291bnQgOiB0IC0+IGludFxuICB2YWwgc3RhdHMgOiB0IC0+IGludCAqIGludCAqIGludCAqIGludCAqIGludCAqIGludFxuZW5kXG5cbm1vZHVsZSBNYWtlIChIIDogSGFzaHRibC5IYXNoZWRUeXBlKSA6IChTIHdpdGggdHlwZSBkYXRhID0gSC50KSA9IHN0cnVjdFxuXG4gIHR5cGUgJ2Egd2Vha190ID0gJ2EgdFxuICBsZXQgd2Vha19jcmVhdGUgPSBjcmVhdGVcbiAgbGV0IGVtcHR5YnVja2V0ID0gd2Vha19jcmVhdGUgMFxuXG4gIHR5cGUgZGF0YSA9IEgudFxuXG4gIHR5cGUgdCA9IHtcbiAgICBtdXRhYmxlIHRhYmxlIDogZGF0YSB3ZWFrX3QgYXJyYXk7XG4gICAgbXV0YWJsZSBoYXNoZXMgOiBpbnQgYXJyYXkgYXJyYXk7XG4gICAgbXV0YWJsZSBsaW1pdCA6IGludDsgICAgICAgICAgICAgICAoKiBidWNrZXQgc2l6ZSBsaW1pdCAqKVxuICAgIG11dGFibGUgb3ZlcnNpemUgOiBpbnQ7ICAgICAgICAgICAgKCogbnVtYmVyIG9mIG92ZXJzaXplIGJ1Y2tldHMgKilcbiAgICBtdXRhYmxlIHJvdmVyIDogaW50OyAgICAgICAgICAgICAgICgqIGZvciBpbnRlcm5hbCBib29ra2VlcGluZyAqKVxuICB9XG5cbiAgbGV0IGdldF9pbmRleCB0IGggPSAoaCBsYW5kIG1heF9pbnQpIG1vZCAoQXJyYXkubGVuZ3RoIHQudGFibGUpXG5cbiAgbGV0IGxpbWl0ID0gN1xuICBsZXQgb3Zlcl9saW1pdCA9IDJcblxuICBsZXQgY3JlYXRlIHN6ID1cbiAgICBsZXQgc3ogPSBpZiBzeiA8IDcgdGhlbiA3IGVsc2Ugc3ogaW5cbiAgICBsZXQgc3ogPSBpZiBzeiA+IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gU3lzLm1heF9hcnJheV9sZW5ndGggZWxzZSBzeiBpblxuICAgIHtcbiAgICAgIHRhYmxlID0gQXJyYXkubWFrZSBzeiBlbXB0eWJ1Y2tldDtcbiAgICAgIGhhc2hlcyA9IEFycmF5Lm1ha2Ugc3ogW3wgfF07XG4gICAgICBsaW1pdCA9IGxpbWl0O1xuICAgICAgb3ZlcnNpemUgPSAwO1xuICAgICAgcm92ZXIgPSAwO1xuICAgIH1cblxuICBsZXQgY2xlYXIgdCA9XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCB0LnRhYmxlIC0gMSBkb1xuICAgICAgdC50YWJsZS4oaSkgPC0gZW1wdHlidWNrZXQ7XG4gICAgICB0Lmhhc2hlcy4oaSkgPC0gW3wgfF07XG4gICAgZG9uZTtcbiAgICB0LmxpbWl0IDwtIGxpbWl0O1xuICAgIHQub3ZlcnNpemUgPC0gMFxuXG5cbiAgbGV0IGZvbGQgZiB0IGluaXQgPVxuICAgIGxldCByZWMgZm9sZF9idWNrZXQgaSBiIGFjY3UgPVxuICAgICAgaWYgaSA+PSBsZW5ndGggYiB0aGVuIGFjY3UgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgICB8IFNvbWUgdiAtPiBmb2xkX2J1Y2tldCAoaSsxKSBiIChmIHYgYWNjdSlcbiAgICAgIHwgTm9uZSAtPiBmb2xkX2J1Y2tldCAoaSsxKSBiIGFjY3VcbiAgICBpblxuICAgIEFycmF5LmZvbGRfcmlnaHQgKGZvbGRfYnVja2V0IDApIHQudGFibGUgaW5pdFxuXG5cbiAgbGV0IGl0ZXIgZiB0ID1cbiAgICBsZXQgcmVjIGl0ZXJfYnVja2V0IGkgYiA9XG4gICAgICBpZiBpID49IGxlbmd0aCBiIHRoZW4gKCkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgICB8IFNvbWUgdiAtPiBmIHY7IGl0ZXJfYnVja2V0IChpKzEpIGJcbiAgICAgIHwgTm9uZSAtPiBpdGVyX2J1Y2tldCAoaSsxKSBiXG4gICAgaW5cbiAgICBBcnJheS5pdGVyIChpdGVyX2J1Y2tldCAwKSB0LnRhYmxlXG5cblxuICBsZXQgaXRlcl93ZWFrIGYgdCA9XG4gICAgbGV0IHJlYyBpdGVyX2J1Y2tldCBpIGogYiA9XG4gICAgICBpZiBpID49IGxlbmd0aCBiIHRoZW4gKCkgZWxzZVxuICAgICAgbWF0Y2ggY2hlY2sgYiBpIHdpdGhcbiAgICAgIHwgdHJ1ZSAtPiBmIGIgdC5oYXNoZXMuKGopIGk7IGl0ZXJfYnVja2V0IChpKzEpIGogYlxuICAgICAgfCBmYWxzZSAtPiBpdGVyX2J1Y2tldCAoaSsxKSBqIGJcbiAgICBpblxuICAgIEFycmF5Lml0ZXJpIChpdGVyX2J1Y2tldCAwKSB0LnRhYmxlXG5cblxuICBsZXQgcmVjIGNvdW50X2J1Y2tldCBpIGIgYWNjdSA9XG4gICAgaWYgaSA+PSBsZW5ndGggYiB0aGVuIGFjY3UgZWxzZVxuICAgIGNvdW50X2J1Y2tldCAoaSsxKSBiIChhY2N1ICsgKGlmIGNoZWNrIGIgaSB0aGVuIDEgZWxzZSAwKSlcblxuXG4gIGxldCBjb3VudCB0ID1cbiAgICBBcnJheS5mb2xkX3JpZ2h0IChjb3VudF9idWNrZXQgMCkgdC50YWJsZSAwXG5cblxuICBsZXQgbmV4dF9zeiBuID0gSW50Lm1pbiAoMyAqIG4gLyAyICsgMykgU3lzLm1heF9hcnJheV9sZW5ndGhcbiAgbGV0IHByZXZfc3ogbiA9ICgobiAtIDMpICogMiArIDIpIC8gM1xuXG4gIGxldCB0ZXN0X3Nocmlua19idWNrZXQgdCA9XG4gICAgbGV0IGJ1Y2tldCA9IHQudGFibGUuKHQucm92ZXIpIGluXG4gICAgbGV0IGhidWNrZXQgPSB0Lmhhc2hlcy4odC5yb3ZlcikgaW5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIGJ1Y2tldCBpblxuICAgIGxldCBwcmV2X2xlbiA9IHByZXZfc3ogbGVuIGluXG4gICAgbGV0IGxpdmUgPSBjb3VudF9idWNrZXQgMCBidWNrZXQgMCBpblxuICAgIGlmIGxpdmUgPD0gcHJldl9sZW4gdGhlbiBiZWdpblxuICAgICAgbGV0IHJlYyBsb29wIGkgaiA9XG4gICAgICAgIGlmIGogPj0gcHJldl9sZW4gdGhlbiBiZWdpblxuICAgICAgICAgIGlmIGNoZWNrIGJ1Y2tldCBpIHRoZW4gbG9vcCAoaSArIDEpIGpcbiAgICAgICAgICBlbHNlIGlmIGNoZWNrIGJ1Y2tldCBqIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGJsaXQgYnVja2V0IGogYnVja2V0IGkgMTtcbiAgICAgICAgICAgIGhidWNrZXQuKGkpIDwtIGhidWNrZXQuKGopO1xuICAgICAgICAgICAgbG9vcCAoaSArIDEpIChqIC0gMSk7XG4gICAgICAgICAgZW5kIGVsc2UgbG9vcCBpIChqIC0gMSk7XG4gICAgICAgIGVuZDtcbiAgICAgIGluXG4gICAgICBsb29wIDAgKGxlbmd0aCBidWNrZXQgLSAxKTtcbiAgICAgIGlmIHByZXZfbGVuID0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHQudGFibGUuKHQucm92ZXIpIDwtIGVtcHR5YnVja2V0O1xuICAgICAgICB0Lmhhc2hlcy4odC5yb3ZlcikgPC0gW3wgfF07XG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsZXQgbmV3YnVja2V0ID0gd2Vha19jcmVhdGUgcHJldl9sZW4gaW5cbiAgICAgICAgYmxpdCBidWNrZXQgMCBuZXdidWNrZXQgMCBwcmV2X2xlbjtcbiAgICAgICAgdC50YWJsZS4odC5yb3ZlcikgPC0gbmV3YnVja2V0O1xuICAgICAgICB0Lmhhc2hlcy4odC5yb3ZlcikgPC0gQXJyYXkuc3ViIGhidWNrZXQgMCBwcmV2X2xlblxuICAgICAgZW5kO1xuICAgICAgaWYgbGVuID4gdC5saW1pdCAmJiBwcmV2X2xlbiA8PSB0LmxpbWl0IHRoZW4gdC5vdmVyc2l6ZSA8LSB0Lm92ZXJzaXplIC0gMTtcbiAgICBlbmQ7XG4gICAgdC5yb3ZlciA8LSAodC5yb3ZlciArIDEpIG1vZCAoQXJyYXkubGVuZ3RoIHQudGFibGUpXG5cblxuICBsZXQgcmVjIHJlc2l6ZSB0ID1cbiAgICBsZXQgb2xkbGVuID0gQXJyYXkubGVuZ3RoIHQudGFibGUgaW5cbiAgICBsZXQgbmV3bGVuID0gbmV4dF9zeiBvbGRsZW4gaW5cbiAgICBpZiBuZXdsZW4gPiBvbGRsZW4gdGhlbiBiZWdpblxuICAgICAgbGV0IG5ld3QgPSBjcmVhdGUgbmV3bGVuIGluXG4gICAgICBsZXQgYWRkX3dlYWsgb2Igb2ggb2kgPVxuICAgICAgICBsZXQgc2V0dGVyIG5iIG5pIF8gPSBibGl0IG9iIG9pIG5iIG5pIDEgaW5cbiAgICAgICAgbGV0IGggPSBvaC4ob2kpIGluXG4gICAgICAgIGFkZF9hdXggbmV3dCBzZXR0ZXIgTm9uZSBoIChnZXRfaW5kZXggbmV3dCBoKTtcbiAgICAgIGluXG4gICAgICBpdGVyX3dlYWsgYWRkX3dlYWsgdDtcbiAgICAgIHQudGFibGUgPC0gbmV3dC50YWJsZTtcbiAgICAgIHQuaGFzaGVzIDwtIG5ld3QuaGFzaGVzO1xuICAgICAgdC5saW1pdCA8LSBuZXd0LmxpbWl0O1xuICAgICAgdC5vdmVyc2l6ZSA8LSBuZXd0Lm92ZXJzaXplO1xuICAgICAgdC5yb3ZlciA8LSB0LnJvdmVyIG1vZCBBcnJheS5sZW5ndGggbmV3dC50YWJsZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgdC5saW1pdCA8LSBtYXhfaW50OyAgICAgICAgICAgICAoKiBtYXhpbXVtIHNpemUgYWxyZWFkeSByZWFjaGVkICopXG4gICAgICB0Lm92ZXJzaXplIDwtIDA7XG4gICAgZW5kXG5cbiAgYW5kIGFkZF9hdXggdCBzZXR0ZXIgZCBoIGluZGV4ID1cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBuZXdzeiA9XG4gICAgICAgICAgSW50Lm1pbiAoMyAqIHN6IC8gMiArIDMpIChTeXMubWF4X2FycmF5X2xlbmd0aCAtIGFkZGl0aW9uYWxfdmFsdWVzKVxuICAgICAgICBpblxuICAgICAgICBpZiBuZXdzeiA8PSBzeiB0aGVuIGZhaWx3aXRoIFwiV2Vhay5NYWtlOiBoYXNoIGJ1Y2tldCBjYW5ub3QgZ3JvdyBtb3JlXCI7XG4gICAgICAgIGxldCBuZXdidWNrZXQgPSB3ZWFrX2NyZWF0ZSBuZXdzeiBpblxuICAgICAgICBsZXQgbmV3aGFzaGVzID0gQXJyYXkubWFrZSBuZXdzeiAwIGluXG4gICAgICAgIGJsaXQgYnVja2V0IDAgbmV3YnVja2V0IDAgc3o7XG4gICAgICAgIEFycmF5LmJsaXQgaGFzaGVzIDAgbmV3aGFzaGVzIDAgc3o7XG4gICAgICAgIHNldHRlciBuZXdidWNrZXQgc3ogZDtcbiAgICAgICAgbmV3aGFzaGVzLihzeikgPC0gaDtcbiAgICAgICAgdC50YWJsZS4oaW5kZXgpIDwtIG5ld2J1Y2tldDtcbiAgICAgICAgdC5oYXNoZXMuKGluZGV4KSA8LSBuZXdoYXNoZXM7XG4gICAgICAgIGlmIHN6IDw9IHQubGltaXQgJiYgbmV3c3ogPiB0LmxpbWl0IHRoZW4gYmVnaW5cbiAgICAgICAgICB0Lm92ZXJzaXplIDwtIHQub3ZlcnNpemUgKyAxO1xuICAgICAgICAgIGZvciBfaSA9IDAgdG8gb3Zlcl9saW1pdCBkbyB0ZXN0X3Nocmlua19idWNrZXQgdCBkb25lO1xuICAgICAgICBlbmQ7XG4gICAgICAgIGlmIHQub3ZlcnNpemUgPiBBcnJheS5sZW5ndGggdC50YWJsZSAvIG92ZXJfbGltaXQgdGhlbiByZXNpemUgdDtcbiAgICAgIGVuZCBlbHNlIGlmIGNoZWNrIGJ1Y2tldCBpIHRoZW4gYmVnaW5cbiAgICAgICAgbG9vcCAoaSArIDEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXR0ZXIgYnVja2V0IGkgZDtcbiAgICAgICAgaGFzaGVzLihpKSA8LSBoO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbG9vcCAwXG5cblxuICBsZXQgYWRkIHQgZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGFkZF9hdXggdCBzZXQgKFNvbWUgZCkgaCAoZ2V0X2luZGV4IHQgaClcblxuXG4gIGxldCBmaW5kX29yIHQgZCBpZm5vdGZvdW5kID1cbiAgICBsZXQgaCA9IEguaGFzaCBkIGluXG4gICAgbGV0IGluZGV4ID0gZ2V0X2luZGV4IHQgaCBpblxuICAgIGxldCBidWNrZXQgPSB0LnRhYmxlLihpbmRleCkgaW5cbiAgICBsZXQgaGFzaGVzID0gdC5oYXNoZXMuKGluZGV4KSBpblxuICAgIGxldCBzeiA9IGxlbmd0aCBidWNrZXQgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID49IHN6IHRoZW4gaWZub3Rmb3VuZCBoIGluZGV4XG4gICAgICBlbHNlIGlmIGggPSBoYXNoZXMuKGkpIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggZ2V0X2NvcHkgYnVja2V0IGkgd2l0aFxuICAgICAgICB8IFNvbWUgdiB3aGVuIEguZXF1YWwgdiBkXG4gICAgICAgICAgIC0+IGJlZ2luIG1hdGNoIGdldCBidWNrZXQgaSB3aXRoXG4gICAgICAgICAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgICAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgICAgICAgICBlbmRcbiAgICAgICAgfCBfIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgZW5kIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuXG4gIGxldCBtZXJnZSB0IGQgPVxuICAgIGZpbmRfb3IgdCBkIChmdW4gaCBpbmRleCAtPiBhZGRfYXV4IHQgc2V0IChTb21lIGQpIGggaW5kZXg7IGQpXG5cblxuICBsZXQgZmluZCB0IGQgPSBmaW5kX29yIHQgZCAoZnVuIF9oIF9pbmRleCAtPiByYWlzZSBOb3RfZm91bmQpXG5cbiAgbGV0IGZpbmRfb3B0IHQgZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIE5vbmVcbiAgICAgIGVsc2UgaWYgaCA9IGhhc2hlcy4oaSkgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBnZXRfY29weSBidWNrZXQgaSB3aXRoXG4gICAgICAgIHwgU29tZSB2IHdoZW4gSC5lcXVhbCB2IGRcbiAgICAgICAgICAgLT4gYmVnaW4gbWF0Y2ggZ2V0IGJ1Y2tldCBpIHdpdGhcbiAgICAgICAgICAgICAgfCBTb21lIF8gYXMgdiAtPiB2XG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBsb29wIChpICsgMSlcbiAgICAgICAgICAgICAgZW5kXG4gICAgICAgIHwgXyAtPiBsb29wIChpICsgMSlcbiAgICAgIGVuZCBlbHNlIGxvb3AgKGkgKyAxKVxuICAgIGluXG4gICAgbG9vcCAwXG5cblxuICBsZXQgZmluZF9zaGFkb3cgdCBkIGlmZm91bmQgaWZub3Rmb3VuZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIGlmbm90Zm91bmRcbiAgICAgIGVsc2UgaWYgaCA9IGhhc2hlcy4oaSkgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBnZXRfY29weSBidWNrZXQgaSB3aXRoXG4gICAgICAgIHwgU29tZSB2IHdoZW4gSC5lcXVhbCB2IGQgLT4gaWZmb3VuZCBidWNrZXQgaVxuICAgICAgICB8IF8gLT4gbG9vcCAoaSArIDEpXG4gICAgICBlbmQgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG5cbiAgbGV0IHJlbW92ZSB0IGQgPSBmaW5kX3NoYWRvdyB0IGQgKGZ1biB3IGkgLT4gc2V0IHcgaSBOb25lKSAoKVxuXG5cbiAgbGV0IG1lbSB0IGQgPSBmaW5kX3NoYWRvdyB0IGQgKGZ1biBfdyBfaSAtPiB0cnVlKSBmYWxzZVxuXG5cbiAgbGV0IGZpbmRfYWxsIHQgZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgYWNjdSA9XG4gICAgICBpZiBpID49IHN6IHRoZW4gYWNjdVxuICAgICAgZWxzZSBpZiBoID0gaGFzaGVzLihpKSB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGdldF9jb3B5IGJ1Y2tldCBpIHdpdGhcbiAgICAgICAgfCBTb21lIHYgd2hlbiBILmVxdWFsIHYgZFxuICAgICAgICAgICAtPiBiZWdpbiBtYXRjaCBnZXQgYnVja2V0IGkgd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgdiAtPiBsb29wIChpICsgMSkgKHYgOjogYWNjdSlcbiAgICAgICAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKSBhY2N1XG4gICAgICAgICAgICAgIGVuZFxuICAgICAgICB8IF8gLT4gbG9vcCAoaSArIDEpIGFjY3VcbiAgICAgIGVuZCBlbHNlIGxvb3AgKGkgKyAxKSBhY2N1XG4gICAgaW5cbiAgICBsb29wIDAgW11cblxuXG4gIGxldCBzdGF0cyB0ID1cbiAgICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIHQudGFibGUgaW5cbiAgICBsZXQgbGVucyA9IEFycmF5Lm1hcCBsZW5ndGggdC50YWJsZSBpblxuICAgIEFycmF5LnNvcnQgY29tcGFyZSBsZW5zO1xuICAgIGxldCB0b3RsZW4gPSBBcnJheS5mb2xkX2xlZnQgKCArICkgMCBsZW5zIGluXG4gICAgKGxlbiwgY291bnQgdCwgdG90bGVuLCBsZW5zLigwKSwgbGVucy4obGVuLzIpLCBsZW5zLihsZW4tMSkpXG5cblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBQaWVycmUgV2VpcywgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEEgcHJldHR5LXByaW50aW5nIGZhY2lsaXR5IGFuZCBkZWZpbml0aW9uIG9mIGZvcm1hdHRlcnMgZm9yICdwYXJhbGxlbCdcbiAgIChpLmUuIHVucmVsYXRlZCBvciBpbmRlcGVuZGVudCkgcHJldHR5LXByaW50aW5nIG9uIG11bHRpcGxlIG91dCBjaGFubmVscy4gKilcblxuKCpcbiAgIFRoZSBwcmV0dHktcHJpbnRpbmcgZW5naW5lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy5cbiopXG5cbmxldCBpZCB4ID0geFxuXG4oKiBBIGRldm90ZWQgdHlwZSBmb3Igc2l6ZXMgdG8gYXZvaWQgY29uZnVzaW9uXG4gICBiZXR3ZWVuIHNpemVzIGFuZCBtZXJlIGludGVnZXJzLiAqKVxubW9kdWxlIFNpemUgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHRvX2ludCA6IHQgLT4gaW50XG4gIHZhbCBvZl9pbnQgOiBpbnQgLT4gdFxuICB2YWwgemVybyA6IHRcbiAgdmFsIHVua25vd24gOiB0XG4gIHZhbCBpc19rbm93biA6IHQgLT4gYm9vbFxuZW5kICA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgdG9faW50ID0gaWRcbiAgbGV0IG9mX2ludCA9IGlkXG4gIGxldCB6ZXJvID0gMFxuICBsZXQgdW5rbm93biA9IC0xXG4gIGxldCBpc19rbm93biBuID0gbiA+PSAwXG5lbmRcblxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRpbmcgYm94ZXMgZGVmaW5pdGlvbjpcbiAgIGEgcHJldHR5LXByaW50aW5nIGJveCBpcyBlaXRoZXJcbiAgIC0gaGJveDogaG9yaXpvbnRhbCBib3ggKG5vIGxpbmUgc3BsaXR0aW5nKVxuICAgLSB2Ym94OiB2ZXJ0aWNhbCBib3ggKGV2ZXJ5IGJyZWFrIGhpbnQgc3BsaXRzIHRoZSBsaW5lKVxuICAgLSBodmJveDogaG9yaXpvbnRhbC92ZXJ0aWNhbCBib3hcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIGJveCBpZiBpdCBmaXRzIG9uXG4gICAgICB0aGUgY3VycmVudCBsaW5lLCBvdGhlcndpc2UgdGhlIGJveCBiZWhhdmVzIGFzIGEgdmVydGljYWwgYm94KVxuICAgLSBob3Zib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3hcbiAgICAgKHRoZSBib3ggaXMgY29tcGFjdGluZyBtYXRlcmlhbCwgcHJpbnRpbmcgYXMgbXVjaCBtYXRlcmlhbCBhcyBwb3NzaWJsZVxuICAgICAgb24gZXZlcnkgbGluZXMpXG4gICAtIGJveDogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjb21wYWN0aW5nIGJveCB3aXRoIGVuaGFuY2VkIGJveCBzdHJ1Y3R1cmVcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGJveCBidXQgYnJlYWsgaGludHMgc3BsaXRcbiAgICAgIHRoZSBsaW5lIGlmIHNwbGl0dGluZyB3b3VsZCBtb3ZlIHRvIHRoZSBsZWZ0KVxuKilcbnR5cGUgYm94X3R5cGUgPSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHNcblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIHRva2VucyBkZWZpbml0aW9uOlxuICAgYXJlIGVpdGhlciB0ZXh0IHRvIHByaW50IG9yIHByZXR0eSBwcmludGluZ1xuICAgZWxlbWVudHMgdGhhdCBkcml2ZSBpbmRlbnRhdGlvbiBhbmQgbGluZSBzcGxpdHRpbmcuICopXG50eXBlIHBwX3Rva2VuID1cbiAgfCBQcF90ZXh0IG9mIHN0cmluZyAgICAgICAgICAoKiBub3JtYWwgdGV4dCAqKVxuICB8IFBwX2JyZWFrIG9mIHsgICAgICAgICAgICAgICgqIGNvbXBsZXRlIGJyZWFrICopXG4gICAgICBmaXRzOiBzdHJpbmcgKiBpbnQgKiBzdHJpbmc7ICAgKCogbGluZSBpcyBub3Qgc3BsaXQgKilcbiAgICAgIGJyZWFrczogc3RyaW5nICogaW50ICogc3RyaW5nOyAoKiBsaW5lIGlzIHNwbGl0ICopXG4gICAgfVxuICB8IFBwX3RicmVhayBvZiBpbnQgKiBpbnQgICAgICgqIGdvIHRvIG5leHQgdGFidWxhdGlvbiAqKVxuICB8IFBwX3N0YWIgICAgICAgICAgICAgICAgICAgICgqIHNldCBhIHRhYnVsYXRpb24gKilcbiAgfCBQcF9iZWdpbiBvZiBpbnQgKiBib3hfdHlwZSAoKiBiZWdpbm5pbmcgb2YgYSBib3ggKilcbiAgfCBQcF9lbmQgICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSBib3ggKilcbiAgfCBQcF90YmVnaW4gb2YgdGJveCAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX3RlbmQgICAgICAgICAgICAgICAgICAgICgqIGVuZCBvZiBhIHRhYnVsYXRpb24gYm94ICopXG4gIHwgUHBfbmV3bGluZSAgICAgICAgICAgICAgICAgKCogdG8gZm9yY2UgYSBuZXdsaW5lIGluc2lkZSBhIGJveCAqKVxuICB8IFBwX2lmX25ld2xpbmUgICAgICAgICAgICAgICgqIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIHRoaXMgdmVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgaGFzIGJlZW4gYnJva2VuICopXG4gIHwgUHBfb3Blbl90YWcgb2Ygc3RhZyAgICAgICAgICgqIG9wZW5pbmcgYSB0YWcgbmFtZSAqKVxuICB8IFBwX2Nsb3NlX3RhZyAgICAgICAgICAgICAgICgqIGNsb3NpbmcgdGhlIG1vc3QgcmVjZW50bHkgb3BlbiB0YWcgKilcblxuYW5kIHN0YWcgPSAuLlxuXG5hbmQgdGJveCA9IFBwX3Rib3ggb2YgaW50IGxpc3QgcmVmICAoKiBUYWJ1bGF0aW9uIGJveCAqKVxuXG50eXBlIHRhZyA9IHN0cmluZ1xudHlwZSBzdGFnICs9IFN0cmluZ190YWcgb2YgdGFnXG5cblxuKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlOlxuICAgcHJldHR5LXByaW50aW5nIG1hdGVyaWFsIGlzIG5vdCB3cml0dGVuIGluIHRoZSBvdXRwdXQgYXMgc29vbiBhcyBlbWl0dGVkO1xuICAgaW5zdGVhZCwgdGhlIG1hdGVyaWFsIGlzIHNpbXBseSByZWNvcmRlZCBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUsXG4gICB1bnRpbCB0aGUgZW5jbG9zaW5nIGJveCBoYXMgYSBrbm93biBjb21wdXRlZCBzaXplIGFuZCBwcm9wZXIgc3BsaXR0aW5nXG4gICBkZWNpc2lvbnMgY2FuIGJlIG1hZGUuXG5cbiAgIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBjb250YWlucyBmb3JtYXR0aW5nIGVsZW1lbnRzIHRvIGJlIHByaW50ZWQuXG4gICBFYWNoIGZvcm1hdHRpbmcgZWxlbWVudCBpcyBhIHR1cGxlIChzaXplLCB0b2tlbiwgbGVuZ3RoKSwgd2hlcmVcbiAgIC0gbGVuZ3RoIGlzIHRoZSBkZWNsYXJlZCBsZW5ndGggb2YgdGhlIHRva2VuLFxuICAgLSBzaXplIGlzIGVmZmVjdGl2ZSBzaXplIG9mIHRoZSB0b2tlbiB3aGVuIGl0IGlzIHByaW50ZWRcbiAgICAgKHNpemUgaXMgc2V0IHdoZW4gdGhlIHNpemUgb2YgdGhlIGJveCBpcyBrbm93biwgc28gdGhhdCBzaXplIG9mIGJyZWFrXG4gICAgICBoaW50cyBhcmUgZGVmaW5pdGl2ZSkuICopXG50eXBlIHBwX3F1ZXVlX2VsZW0gPSB7XG4gIG11dGFibGUgc2l6ZSA6IFNpemUudDtcbiAgdG9rZW4gOiBwcF90b2tlbjtcbiAgbGVuZ3RoIDogaW50O1xufVxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9xdWV1ZSA9IHBwX3F1ZXVlX2VsZW0gUXVldWUudFxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjazogc2Nhbm5pbmcgZWxlbWVudCBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9zY2FuX2VsZW0gPSB7XG4gIGxlZnRfdG90YWwgOiBpbnQ7ICgqIFZhbHVlIG9mIHBwX2xlZnRfdG90YWwgd2hlbiB0aGUgZWxlbWVudCB3YXMgZW5xdWV1ZWQuICopXG4gIHF1ZXVlX2VsZW0gOiBwcF9xdWV1ZV9lbGVtXG59XG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOlxuICAgdGhlIGZvcm1hdHRpbmcgc3RhY2sgY29udGFpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZVxuICAgYm94ZXM7IHRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrIGlzIHVzZWQgdG8gc3BsaXQgdGhlIGxpbmVzXG4gICB3aGlsZSBwcmludGluZyB0b2tlbnMuICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOiBmb3JtYXR0aW5nIHN0YWNrIGVsZW1lbnQgZGVmaW5pdGlvbi5cbiAgIEVhY2ggc3RhY2sgZWxlbWVudCBkZXNjcmliZXMgYSBwcmV0dHktcHJpbnRpbmcgYm94LiAqKVxudHlwZSBwcF9mb3JtYXRfZWxlbSA9IHsgYm94X3R5cGUgOiBib3hfdHlwZTsgd2lkdGggOiBpbnQgfVxuXG4oKiBUaGUgZm9ybWF0dGVyIGRlZmluaXRpb24uXG4gICBFYWNoIGZvcm1hdHRlciB2YWx1ZSBpcyBhIHByZXR0eS1wcmludGVyIGluc3RhbmNlIHdpdGggYWxsIGl0c1xuICAgbWFjaGluZXJ5LiAqKVxudHlwZSBmb3JtYXR0ZXIgPSB7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay4gKilcbiAgcHBfc2Nhbl9zdGFjayA6IHBwX3NjYW5fZWxlbSBTdGFjay50O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjay4gKilcbiAgcHBfZm9ybWF0X3N0YWNrIDogcHBfZm9ybWF0X2VsZW0gU3RhY2sudDtcbiAgcHBfdGJveF9zdGFjayA6IHRib3ggU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHNlbWFudGljcyB0YWcgc3RhY2suICopXG4gIHBwX3RhZ19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgcHBfbWFya19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgKCogVmFsdWUgb2YgcmlnaHQgbWFyZ2luLiAqKVxuICBtdXRhYmxlIHBwX21hcmdpbiA6IGludDtcbiAgKCogTWluaW1hbCBzcGFjZSBsZWZ0IGJlZm9yZSBtYXJnaW4sIHdoZW4gb3BlbmluZyBhIGJveC4gKilcbiAgbXV0YWJsZSBwcF9taW5fc3BhY2VfbGVmdCA6IGludDtcbiAgKCogTWF4aW11bSB2YWx1ZSBvZiBpbmRlbnRhdGlvbjpcbiAgICAgbm8gYm94IGNhbiBiZSBvcGVuZWQgZnVydGhlci4gKilcbiAgbXV0YWJsZSBwcF9tYXhfaW5kZW50IDogaW50O1xuICAoKiBTcGFjZSByZW1haW5pbmcgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbiAgbXV0YWJsZSBwcF9zcGFjZV9sZWZ0IDogaW50O1xuICAoKiBDdXJyZW50IHZhbHVlIG9mIGluZGVudGF0aW9uLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJlbnRfaW5kZW50IDogaW50O1xuICAoKiBUcnVlIHdoZW4gdGhlIGxpbmUgaGFzIGJlZW4gYnJva2VuIGJ5IHRoZSBwcmV0dHktcHJpbnRlci4gKilcbiAgbXV0YWJsZSBwcF9pc19uZXdfbGluZSA6IGJvb2w7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBhbHJlYWR5IHByaW50ZWQuICopXG4gIG11dGFibGUgcHBfbGVmdF90b3RhbCA6IGludDtcbiAgKCogVG90YWwgd2lkdGggb2YgdG9rZW5zIGV2ZXIgcHV0IGluIHF1ZXVlLiAqKVxuICBtdXRhYmxlIHBwX3JpZ2h0X3RvdGFsIDogaW50O1xuICAoKiBDdXJyZW50IG51bWJlciBvZiBvcGVuIGJveGVzLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJfZGVwdGggOiBpbnQ7XG4gICgqIE1heGltdW0gbnVtYmVyIG9mIGJveGVzIHdoaWNoIGNhbiBiZSBzaW11bHRhbmVvdXNseSBvcGVuLiAqKVxuICBtdXRhYmxlIHBwX21heF9ib3hlcyA6IGludDtcbiAgKCogRWxsaXBzaXMgc3RyaW5nLiAqKVxuICBtdXRhYmxlIHBwX2VsbGlwc2lzIDogc3RyaW5nO1xuICAoKiBPdXRwdXQgZnVuY3Rpb24uICopXG4gIG11dGFibGUgcHBfb3V0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQ7XG4gICgqIEZsdXNoaW5nIGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9mbHVzaCA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIG5ldyBsaW5lcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIGJyZWFrIGhpbnRzIHNwYWNlcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X2luZGVudCA6IGludCAtPiB1bml0O1xuICAoKiBBcmUgdGFncyBwcmludGVkID8gKilcbiAgbXV0YWJsZSBwcF9wcmludF90YWdzIDogYm9vbDtcbiAgKCogQXJlIHRhZ3MgbWFya2VkID8gKilcbiAgbXV0YWJsZSBwcF9tYXJrX3RhZ3MgOiBib29sO1xuICAoKiBGaW5kIG9wZW5pbmcgYW5kIGNsb3NpbmcgbWFya2VycyBvZiB0YWdzLiAqKVxuICBtdXRhYmxlIHBwX21hcmtfb3Blbl90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9tYXJrX2Nsb3NlX3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtdXRhYmxlIHBwX3ByaW50X29wZW5fdGFnIDogc3RhZyAtPiB1bml0O1xuICBtdXRhYmxlIHBwX3ByaW50X2Nsb3NlX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxuICBwcF9xdWV1ZSA6IHBwX3F1ZXVlO1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgc3BlY2lmaWMgdGFnIGhhbmRsaW5nIGZ1bmN0aW9ucy4gKilcbnR5cGUgZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fc3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgcHJpbnRfb3Blbl9zdGFnIDogc3RhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV9zdGFnIDogc3RhZyAtPiB1bml0O1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25zIHRvIG91dHB1dCBtYXRlcmlhbC4gKilcbnR5cGUgZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPSB7XG4gIG91dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICBvdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gIG91dF9uZXdsaW5lIDogdW5pdCAtPiB1bml0O1xuICBvdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gIG91dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbn1cblxuXG4oKlxuXG4gIEF1eGlsaWFyaWVzIGFuZCBiYXNpYyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEVudGVyIGEgdG9rZW4gaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2VucXVldWUgc3RhdGUgdG9rZW4gPVxuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBzdGF0ZS5wcF9yaWdodF90b3RhbCArIHRva2VuLmxlbmd0aDtcbiAgUXVldWUuYWRkIHRva2VuIHN0YXRlLnBwX3F1ZXVlXG5cblxubGV0IHBwX2NsZWFyX3F1ZXVlIHN0YXRlID1cbiAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSAxOyBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSAxO1xuICBRdWV1ZS5jbGVhciBzdGF0ZS5wcF9xdWV1ZVxuXG5cbigqIFBwX2luZmluaXR5OiBsYXJnZSB2YWx1ZSBmb3IgZGVmYXVsdCB0b2tlbnMgc2l6ZS5cblxuICAgUHBfaW5maW5pdHkgaXMgZG9jdW1lbnRlZCBhcyBiZWluZyBncmVhdGVyIHRoYW4gMWUxMDsgdG8gYXZvaWRcbiAgIGNvbmZ1c2lvbiBhYm91dCB0aGUgd29yZCAnZ3JlYXRlcicsIHdlIGNob29zZSBwcF9pbmZpbml0eSBncmVhdGVyXG4gICB0aGFuIDFlMTAgKyAxOyBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiB0ZXN0cyBpbiB0aGUgYWxnb3JpdGhtLFxuICAgcHBfaW5maW5pdHkgbXVzdCBiZSBldmVuIG9uZSBtb3JlIHRoYW4gMWUxMCArIDE7IGxldCdzIHN0YW5kIG9uIHRoZVxuICAgc2FmZSBzaWRlIGJ5IGNob29zaW5nIDEuZTEwKzEwLlxuXG4gICBQcF9pbmZpbml0eSBjb3VsZCBwcm9iYWJseSBiZSAxMDczNzQxODIzIHRoYXQgaXMgMl4zMCAtIDEsIHRoYXQgaXNcbiAgIHRoZSBtaW5pbWFsIHVwcGVyIGJvdW5kIGZvciBpbnRlZ2Vyczsgbm93IHRoYXQgbWF4X2ludCBpcyBkZWZpbmVkLFxuICAgdGhpcyBsaW1pdCBjb3VsZCBhbHNvIGJlIGRlZmluZWQgYXMgbWF4X2ludCAtIDEuXG5cbiAgIEhvd2V2ZXIsIGJlZm9yZSBzZXR0aW5nIHBwX2luZmluaXR5IHRvIHNvbWV0aGluZyBhcm91bmQgbWF4X2ludCwgd2VcbiAgIG11c3QgY2FyZWZ1bGx5IGRvdWJsZS1jaGVjayBhbGwgdGhlIGludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zXG4gICB0aGF0IGludm9sdmUgcHBfaW5maW5pdHksIHNpbmNlIGFueSBvdmVyZmxvdyB3b3VsZCB3cmVjayBoYXZvYyB0aGVcbiAgIHByZXR0eS1wcmludGluZyBhbGdvcml0aG0ncyBpbnZhcmlhbnRzLiBHaXZlbiB0aGF0IHRoaXMgYXJpdGhtZXRpY1xuICAgY29ycmVjdG5lc3MgY2hlY2sgaXMgZGlmZmljdWx0IGFuZCBlcnJvciBwcm9uZSBhbmQgZ2l2ZW4gdGhhdCAxZTEwXG4gICArIDEgaXMgaW4gcHJhY3RpY2UgbGFyZ2UgZW5vdWdoLCB0aGVyZSBpcyBubyBuZWVkIHRvIGF0dGVtcHQgdG8gc2V0XG4gICBwcF9pbmZpbml0eSB0byB0aGUgdGhlb3JldGljYWxseSBtYXhpbXVtIGxpbWl0LiBJdCBpcyBub3Qgd29ydGggdGhlXG4gICBidXJkZW4gISAqKVxubGV0IHBwX2luZmluaXR5ID0gMTAwMDAwMDAxMFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIGZvciB0aGUgZm9ybWF0dGVyLiAqKVxubGV0IHBwX291dHB1dF9zdHJpbmcgc3RhdGUgcyA9IHN0YXRlLnBwX291dF9zdHJpbmcgcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5hbmQgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZSAoKVxuYW5kIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9zcGFjZXMgblxuYW5kIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9pbmRlbnQgblxuXG4oKiBGb3JtYXQgYSB0ZXh0dWFsIHRva2VuICopXG5sZXQgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSB0ZXh0ID1cbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gc2l6ZTtcbiAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSB0ZXh0O1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSBmYWxzZVxuXG4oKiBGb3JtYXQgYSBzdHJpbmcgYnkgaXRzIGxlbmd0aCwgaWYgbm90IGVtcHR5ICopXG5sZXQgZm9ybWF0X3N0cmluZyBzdGF0ZSBzID1cbiAgaWYgcyA8PiBcIlwiIHRoZW4gZm9ybWF0X3BwX3RleHQgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG4oKiBUbyBmb3JtYXQgYSBicmVhaywgaW5kZW50aW5nIGEgbmV3IGxpbmUuICopXG5sZXQgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKGJlZm9yZSwgb2Zmc2V0LCBhZnRlcikgd2lkdGggPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX2lzX25ld19saW5lIDwtIHRydWU7XG4gIGxldCBpbmRlbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZnNldCBpblxuICAoKiBEb24ndCBpbmRlbnQgbW9yZSB0aGFuIHBwX21heF9pbmRlbnQuICopXG4gIGxldCByZWFsX2luZGVudCA9IEludC5taW4gc3RhdGUucHBfbWF4X2luZGVudCBpbmRlbnQgaW5cbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gcmVhbF9pbmRlbnQ7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBmb3JjZSBhIGxpbmUgYnJlYWsgaW5zaWRlIGEgYm94OiBubyBvZmZzZXQgaXMgYWRkZWQuICopXG5sZXQgYnJlYWtfbGluZSBzdGF0ZSB3aWR0aCA9IGJyZWFrX25ld19saW5lIHN0YXRlIChcIlwiLCAwLCBcIlwiKSB3aWR0aFxuXG4oKiBUbyBmb3JtYXQgYSBicmVhayB0aGF0IGZpdHMgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbmxldCBicmVha19zYW1lX2xpbmUgc3RhdGUgKGJlZm9yZSwgd2lkdGgsIGFmdGVyKSA9XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYmVmb3JlO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgLSB3aWR0aDtcbiAgcHBfb3V0cHV0X3NwYWNlcyBzdGF0ZSB3aWR0aDtcbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBhZnRlclxuXG5cbigqIFRvIGluZGVudCBubyBtb3JlIHRoYW4gcHBfbWF4X2luZGVudCwgaWYgb25lIHRyaWVzIHRvIG9wZW4gYSBib3hcbiAgIGJleW9uZCBwcF9tYXhfaW5kZW50LCB0aGVuIHRoZSBib3ggaXMgcmVqZWN0ZWQgb24gdGhlIGxlZnRcbiAgIGJ5IHNpbXVsYXRpbmcgYSBicmVhay4gKilcbmxldCBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGVcbiAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICBpZiB3aWR0aCA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlblxuICAgICAgbWF0Y2ggYm94X3R5cGUgd2l0aFxuICAgICAgfCBQcF9maXRzIHwgUHBfaGJveCAtPiAoKVxuICAgICAgfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuXG5cbigqIFRvIHNraXAgYSB0b2tlbiwgaWYgdGhlIHByZXZpb3VzIGxpbmUgaGFzIGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3NraXBfdG9rZW4gc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS50YWtlX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBwcmludF9pZl9uZXdsaW5lIG11c3QgaGF2ZSBiZWVuIHRoZSBsYXN0IHByaW50aW5nIGNvbW1hbmQgKilcbiAgfCBTb21lIHsgc2l6ZTsgbGVuZ3RoOyBfIH0gLT5cbiAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIHN0YXRlLnBwX2xlZnRfdG90YWwgLSBsZW5ndGg7XG4gICAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0ICsgU2l6ZS50b19pbnQgc2l6ZVxuXG5cbigqXG5cbiAgVGhlIG1haW4gcHJldHR5IHByaW50aW5nIGZ1bmN0aW9ucy5cblxuKilcblxuKCogRm9ybWF0dGluZyBhIHRva2VuIHdpdGggYSBnaXZlbiBzaXplLiAqKVxubGV0IGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplID0gZnVuY3Rpb25cblxuICB8IFBwX3RleHQgcyAtPlxuICAgIGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgc1xuXG4gIHwgUHBfYmVnaW4gKG9mZiwgdHkpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBpZiBpbnNlcnRpb25fcG9pbnQgPiBzdGF0ZS5wcF9tYXhfaW5kZW50IHRoZW5cbiAgICAgICgqIGNhbiBub3Qgb3BlbiBhIGJveCByaWdodCB0aGVyZS4gKilcbiAgICAgIGJlZ2luIHBwX2ZvcmNlX2JyZWFrX2xpbmUgc3RhdGUgZW5kO1xuICAgIGxldCB3aWR0aCA9IHN0YXRlLnBwX3NwYWNlX2xlZnQgLSBvZmYgaW5cbiAgICBsZXQgYm94X3R5cGUgPVxuICAgICAgbWF0Y2ggdHkgd2l0aFxuICAgICAgfCBQcF92Ym94IC0+IFBwX3Zib3hcbiAgICAgIHwgUHBfaGJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IHwgUHBfZml0cyAtPlxuICAgICAgICBpZiBzaXplID4gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuIHR5IGVsc2UgUHBfZml0cyBpblxuICAgIFN0YWNrLnB1c2ggeyBib3hfdHlwZTsgd2lkdGggfSBzdGF0ZS5wcF9mb3JtYXRfc3RhY2tcblxuICB8IFBwX2VuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHw+IGlnbm9yZVxuXG4gIHwgUHBfdGJlZ2luIChQcF90Ym94IF8gYXMgdGJveCkgLT5cbiAgICBTdGFjay5wdXNoIHRib3ggc3RhdGUucHBfdGJveF9zdGFja1xuXG4gIHwgUHBfdGVuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3N0YWIgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHJlYyBhZGRfdGFiIG4gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IFtuXVxuICAgICAgICB8IHggOjogbCBhcyBscyAtPiBpZiBuIDwgeCB0aGVuIG4gOjogbHMgZWxzZSB4IDo6IGFkZF90YWIgbiBsIGluXG4gICAgICB0YWJzIDo9IGFkZF90YWIgKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQpICF0YWJzXG4gICAgZW5kXG5cbiAgfCBQcF90YnJlYWsgKG4sIG9mZikgLT5cbiAgICBsZXQgaW5zZXJ0aW9uX3BvaW50ID0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gdGFidWxhdGlvbiBib3guICopXG4gICAgfCBTb21lIChQcF90Ym94IHRhYnMpIC0+XG4gICAgICBsZXQgdGFiID1cbiAgICAgICAgbWF0Y2ggIXRhYnMgd2l0aFxuICAgICAgICB8IFtdIC0+IGluc2VydGlvbl9wb2ludFxuICAgICAgICB8IGZpcnN0IDo6IF8gLT5cbiAgICAgICAgICBsZXQgcmVjIGZpbmQgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBoZWFkIDo6IHRhaWwgLT5cbiAgICAgICAgICAgICAgaWYgaGVhZCA+PSBpbnNlcnRpb25fcG9pbnQgdGhlbiBoZWFkIGVsc2UgZmluZCB0YWlsXG4gICAgICAgICAgICB8IFtdIC0+IGZpcnN0IGluXG4gICAgICAgICAgZmluZCAhdGFicyBpblxuICAgICAgbGV0IG9mZnNldCA9IHRhYiAtIGluc2VydGlvbl9wb2ludCBpblxuICAgICAgaWYgb2Zmc2V0ID49IDBcbiAgICAgIHRoZW4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIChcIlwiLCBvZmZzZXQgKyBuLCBcIlwiKVxuICAgICAgZWxzZSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgdGFiICsgb2ZmLCBcIlwiKSBzdGF0ZS5wcF9tYXJnaW5cbiAgICBlbmRcblxuICB8IFBwX25ld2xpbmUgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IHdpZHRoOyBffSAtPiBicmVha19saW5lIHN0YXRlIHdpZHRoXG4gICAgZW5kXG5cbiAgfCBQcF9pZl9uZXdsaW5lIC0+XG4gICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgIT0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgIHRoZW4gcHBfc2tpcF90b2tlbiBzdGF0ZVxuXG4gIHwgUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSAtPlxuICAgIGxldCBiZWZvcmUsIG9mZiwgXyA9IGJyZWFrcyBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiBib3guICopXG4gICAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICAgIGJlZ2luIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfaG92Ym94IC0+XG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgICAgZWxzZSBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF9ib3ggLT5cbiAgICAgICAgKCogSGF2ZSB0aGUgbGluZSBqdXN0IGJlZW4gYnJva2VuIGhlcmUgPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9pc19uZXdfbGluZSB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzIGVsc2VcbiAgICAgICAgaWYgc2l6ZSArIFN0cmluZy5sZW5ndGggYmVmb3JlID4gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoIGVsc2VcbiAgICAgICAgKCogYnJlYWsgdGhlIGxpbmUgaGVyZSBsZWFkcyB0byBuZXcgaW5kZW50YXRpb24gPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA+IHN0YXRlLnBwX21hcmdpbiAtIHdpZHRoICsgb2ZmXG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfaHZib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2ZpdHMgLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfdmJveCAtPiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgIHwgUHBfaGJveCAtPiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgZW5kXG4gICAgZW5kXG5cbiAgIHwgUHBfb3Blbl90YWcgdGFnX25hbWUgLT5cbiAgICAgbGV0IG1hcmtlciA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBtYXJrZXI7XG4gICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfbWFya19zdGFja1xuXG4gICB8IFBwX2Nsb3NlX3RhZyAtPlxuICAgICBiZWdpbiBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX21hcmtfc3RhY2sgd2l0aFxuICAgICB8IE5vbmUgLT4gKCkgKCogTm8gbW9yZSB0YWcgdG8gY2xvc2UuICopXG4gICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyB0YWdfbmFtZSBpblxuICAgICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyXG4gICAgIGVuZFxuXG5cbigqIFByaW50IGlmIHRva2VuIHNpemUgaXMga25vd24gZWxzZSBwcmludGluZyBpcyBkZWxheWVkLlxuICAgUHJpbnRpbmcgaXMgZGVsYXllZCB3aGVuIHRoZSB0ZXh0IHdhaXRpbmcgaW4gdGhlIHF1ZXVlIHJlcXVpcmVzXG4gICBtb3JlIHJvb20gdG8gZm9ybWF0IHRoYW4gZXhpc3RzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgcmVjIGFkdmFuY2VfbGVmdCBzdGF0ZSA9XG4gIG1hdGNoIFF1ZXVlLnBlZWtfb3B0IHN0YXRlLnBwX3F1ZXVlIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIE5vIHRva2VucyB0byBwcmludCAqKVxuICB8IFNvbWUgeyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gLT5cbiAgICBsZXQgcGVuZGluZ19jb3VudCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsIC0gc3RhdGUucHBfbGVmdF90b3RhbCBpblxuICAgIGlmIFNpemUuaXNfa25vd24gc2l6ZSB8fCBwZW5kaW5nX2NvdW50ID49IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiBiZWdpblxuICAgICAgUXVldWUudGFrZSBzdGF0ZS5wcF9xdWV1ZSB8PiBpZ25vcmU7ICgqIE5vdCBlbXB0eTogd2UgcGVlayBpbnRvIGl0ICopXG4gICAgICBsZXQgc2l6ZSA9IGlmIFNpemUuaXNfa25vd24gc2l6ZSB0aGVuIFNpemUudG9faW50IHNpemUgZWxzZSBwcF9pbmZpbml0eSBpblxuICAgICAgZm9ybWF0X3BwX3Rva2VuIHN0YXRlIHNpemUgdG9rZW47XG4gICAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIGxlbmd0aCArIHN0YXRlLnBwX2xlZnRfdG90YWw7XG4gICAgICAoYWR2YW5jZV9sZWZ0IFtAdGFpbGNhbGxdKSBzdGF0ZVxuICAgIGVuZFxuXG5cbigqIFRvIGVucXVldWUgYSB0b2tlbiA6IHRyeSB0byBhZHZhbmNlLiAqKVxubGV0IGVucXVldWVfYWR2YW5jZSBzdGF0ZSB0b2sgPSBwcF9lbnF1ZXVlIHN0YXRlIHRvazsgYWR2YW5jZV9sZWZ0IHN0YXRlXG5cblxuKCogVG8gZW5xdWV1ZSBzdHJpbmdzLiAqKVxubGV0IGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgcyA9XG4gIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemU7IHRva2VuID0gUHBfdGV4dCBzOyBsZW5ndGggPSBTaXplLnRvX2ludCBzaXplIH1cblxuXG5sZXQgZW5xdWV1ZV9zdHJpbmcgc3RhdGUgcyA9XG4gIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIChTaXplLm9mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSkgc1xuXG5cbigqIFJvdXRpbmVzIGZvciBzY2FuIHN0YWNrXG4gICBkZXRlcm1pbmUgc2l6ZSBvZiBib3hlcy4gKilcblxuKCogVGhlIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG5sZXQgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YWNrID1cbiAgU3RhY2suY2xlYXIgc3RhY2s7XG4gIGxldCBxdWV1ZV9lbGVtID0geyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX3RleHQgXCJcIjsgbGVuZ3RoID0gMCB9IGluXG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gLTE7IHF1ZXVlX2VsZW0gfSBzdGFja1xuXG4oKiBTZXR0aW5nIHRoZSBzaXplIG9mIGJveGVzIG9uIHNjYW4gc3RhY2s6XG4gICBpZiB0eSA9IHRydWUgdGhlbiBzaXplIG9mIGJyZWFrIGlzIHNldCBlbHNlIHNpemUgb2YgYm94IGlzIHNldDtcbiAgIGluIGVhY2ggY2FzZSBwcF9zY2FuX3N0YWNrIGlzIHBvcHBlZC5cblxuICAgTm90ZTpcbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gc2NhbiBzdGFjayBpcyBleGhhdXN0aXZlLCBzaW5jZSBzY2FuX3N0YWNrIGlzIG5ldmVyXG4gICBlbXB0eS5cbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gdG9rZW4gaW4gc2NhbiBzdGFjayBpcyBhbHNvIGV4aGF1c3RpdmUsXG4gICBzaW5jZSBzY2FuX3B1c2ggaXMgdXNlZCBvbiBicmVha3MgYW5kIG9wZW5pbmcgb2YgYm94ZXMuICopXG5sZXQgc2V0X3NpemUgc3RhdGUgdHkgPVxuICBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogc2Nhbl9zdGFjayBpcyBuZXZlciBlbXB0eS4gKilcbiAgfCBTb21lIHsgbGVmdF90b3RhbDsgcXVldWVfZWxlbSB9IC0+XG4gICAgbGV0IHNpemUgPSBTaXplLnRvX2ludCBxdWV1ZV9lbGVtLnNpemUgaW5cbiAgICAoKiB0ZXN0IGlmIHNjYW4gc3RhY2sgY29udGFpbnMgYW55IGRhdGEgdGhhdCBpcyBub3Qgb2Jzb2xldGUuICopXG4gICAgaWYgbGVmdF90b3RhbCA8IHN0YXRlLnBwX2xlZnRfdG90YWwgdGhlblxuICAgICAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2tcbiAgICBlbHNlXG4gICAgICBtYXRjaCBxdWV1ZV9lbGVtLnRva2VuIHdpdGhcbiAgICAgIHwgUHBfYnJlYWsgXyB8IFBwX3RicmVhayAoXywgXykgLT5cbiAgICAgICAgaWYgdHkgdGhlbiBiZWdpblxuICAgICAgICAgIHF1ZXVlX2VsZW0uc2l6ZSA8LSBTaXplLm9mX2ludCAoc3RhdGUucHBfcmlnaHRfdG90YWwgKyBzaXplKTtcbiAgICAgICAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgfD4gaWdub3JlXG4gICAgICAgIGVuZFxuICAgICAgfCBQcF9iZWdpbiAoXywgXykgLT5cbiAgICAgICAgaWYgbm90IHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfdGV4dCBfIHwgUHBfc3RhYiB8IFBwX3RiZWdpbiBfIHwgUHBfdGVuZCB8IFBwX2VuZFxuICAgICAgfCBQcF9uZXdsaW5lIHwgUHBfaWZfbmV3bGluZSB8IFBwX29wZW5fdGFnIF8gfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgICAgKCkgKCogc2Nhbl9wdXNoIGlzIG9ubHkgdXNlZCBmb3IgYnJlYWtzIGFuZCBib3hlcy4gKilcblxuXG4oKiBQdXNoIGEgdG9rZW4gb24gcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suXG4gICBJZiBiIGlzIHRydWUgc2V0X3NpemUgaXMgY2FsbGVkLiAqKVxubGV0IHNjYW5fcHVzaCBzdGF0ZSBiIHRva2VuID1cbiAgcHBfZW5xdWV1ZSBzdGF0ZSB0b2tlbjtcbiAgaWYgYiB0aGVuIHNldF9zaXplIHN0YXRlIHRydWU7XG4gIGxldCBlbGVtID0geyBsZWZ0X3RvdGFsID0gc3RhdGUucHBfcmlnaHRfdG90YWw7IHF1ZXVlX2VsZW0gPSB0b2tlbiB9IGluXG4gIFN0YWNrLnB1c2ggZWxlbSBzdGF0ZS5wcF9zY2FuX3N0YWNrXG5cblxuKCogVG8gb3BlbiBhIG5ldyBib3ggOlxuICAgdGhlIHVzZXIgbWF5IHNldCB0aGUgZGVwdGggYm91bmQgcHBfbWF4X2JveGVzXG4gICBhbnkgdGV4dCBuZXN0ZWQgZGVlcGVyIGlzIHByaW50ZWQgYXMgdGhlIGVsbGlwc2lzIHN0cmluZy4gKilcbmxldCBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IGJyX3R5ID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF9iZWdpbiAoaW5kZW50LCBicl90eSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSBmYWxzZSBlbGVtIGVsc2VcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nIHN0YXRlIHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVGhlIGJveCB3aGljaCBpcyBhbHdheXMgb3Blbi4gKilcbmxldCBwcF9vcGVuX3N5c19ib3ggc3RhdGUgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9ob3Zib3hcblxuKCogQ2xvc2UgYSBib3gsIHNldHRpbmcgc2l6ZXMgb2YgaXRzIHN1YiBib3hlcy4gKilcbmxldCBwcF9jbG9zZV9ib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgYmVnaW5cbiAgICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2VuZDsgbGVuZ3RoID0gMCB9O1xuICAgICAgc2V0X3NpemUgc3RhdGUgdHJ1ZTsgc2V0X3NpemUgc3RhdGUgZmFsc2VcbiAgICBlbmQ7XG4gICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMTtcbiAgZW5kXG5cblxuKCogT3BlbiBhIHRhZywgcHVzaGluZyBpdCBvbiB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX29wZW5fc3RhZyBzdGF0ZSB0YWdfbmFtZSA9XG4gIGlmIHN0YXRlLnBwX3ByaW50X3RhZ3MgdGhlblxuICBiZWdpblxuICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfdGFnX3N0YWNrO1xuICAgIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIHRhZ19uYW1lXG4gIGVuZDtcbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBsZXQgdG9rZW4gPSBQcF9vcGVuX3RhZyB0YWdfbmFtZSBpblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbjsgbGVuZ3RoID0gMCB9XG5cblxuKCogQ2xvc2UgYSB0YWcsIHBvcHBpbmcgaXQgZnJvbSB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9tYXJrX3RhZ3MgdGhlblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2Nsb3NlX3RhZzsgbGVuZ3RoID0gMCB9O1xuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgICBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3RhZ19zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIHRhZ19uYW1lXG5cbmxldCBwcF9vcGVuX3RhZyBzdGF0ZSBzID0gcHBfb3Blbl9zdGFnIHN0YXRlIChTdHJpbmdfdGFnIHMpXG5sZXQgcHBfY2xvc2VfdGFnIHN0YXRlICgpID0gcHBfY2xvc2Vfc3RhZyBzdGF0ZSAoKVxuXG5sZXQgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX3ByaW50X3RhZ3MgPC0gYlxubGV0IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX21hcmtfdGFncyA8LSBiXG5sZXQgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9wcmludF90YWdzXG5sZXQgcHBfZ2V0X21hcmtfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmtfdGFnc1xubGV0IHBwX3NldF90YWdzIHN0YXRlIGIgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiOyBwcF9zZXRfbWFya190YWdzIHN0YXRlIGJcblxuXG4oKiBIYW5kbGluZyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zOiBnZXQvc2V0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBtYXJrX29wZW5fc3RhZyA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnO1xuICBwcmludF9vcGVuX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZztcbiAgcHJpbnRfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZztcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl9zdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fc3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2Vfc3RhZyA9IHBjdDtcbiAgfSA9XG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gbW90O1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBtY3Q7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHBvdDtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHBjdFxuXG5cbigqIEluaXRpYWxpemUgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfcmluaXQgc3RhdGUgPVxuICBwcF9jbGVhcl9xdWV1ZSBzdGF0ZTtcbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX2Zvcm1hdF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGJveF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGFnX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9tYXJrX3N0YWNrO1xuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSAwO1xuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIDA7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luO1xuICBwcF9vcGVuX3N5c19ib3ggc3RhdGVcblxubGV0IGNsZWFyX3RhZ19zdGFjayBzdGF0ZSA9XG4gIFN0YWNrLml0ZXIgKGZ1biBfIC0+IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSkgc3RhdGUucHBfdGFnX3N0YWNrXG5cblxuKCogRmx1c2hpbmcgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG5sZXQgcHBfZmx1c2hfcXVldWUgc3RhdGUgYiA9XG4gIGNsZWFyX3RhZ19zdGFjayBzdGF0ZTtcbiAgd2hpbGUgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgZG9cbiAgICBwcF9jbG9zZV9ib3ggc3RhdGUgKClcbiAgZG9uZTtcbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gcHBfaW5maW5pdHk7XG4gIGFkdmFuY2VfbGVmdCBzdGF0ZTtcbiAgaWYgYiB0aGVuIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBwcF9yaW5pdCBzdGF0ZVxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gZm9ybWF0IHZhbHVlcyBhbmQgdXNlIGJveGVzLlxuXG4qKVxuXG4oKiBUbyBmb3JtYXQgYSBzdHJpbmcuICopXG5sZXQgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSBzaXplIHMgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzXG4gIHRoZW4gZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgc2l6ZSBzXG5cblxubGV0IHBwX3ByaW50X2FzIHN0YXRlIGlzaXplIHMgPVxuICBwcF9wcmludF9hc19zaXplIHN0YXRlIChTaXplLm9mX2ludCBpc2l6ZSkgc1xuXG5cbmxldCBwcF9wcmludF9zdHJpbmcgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxubGV0IHBwX3ByaW50X2J5dGVzIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoQnl0ZXMubGVuZ3RoIHMpIChCeXRlcy50b19zdHJpbmcgcylcblxuKCogVG8gZm9ybWF0IGFuIGludGVnZXIuICopXG5sZXQgcHBfcHJpbnRfaW50IHN0YXRlIGkgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKEludC50b19zdHJpbmcgaSlcblxuKCogVG8gZm9ybWF0IGEgZmxvYXQuICopXG5sZXQgcHBfcHJpbnRfZmxvYXQgc3RhdGUgZiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Zsb2F0IGYpXG5cbigqIFRvIGZvcm1hdCBhIGJvb2xlYW4uICopXG5sZXQgcHBfcHJpbnRfYm9vbCBzdGF0ZSBiID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfYm9vbCBiKVxuXG4oKiBUbyBmb3JtYXQgYSBjaGFyLiAqKVxubGV0IHBwX3ByaW50X2NoYXIgc3RhdGUgYyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIDEgKFN0cmluZy5tYWtlIDEgYylcblxuXG4oKiBPcGVuaW5nIGJveGVzLiAqKVxubGV0IHBwX29wZW5faGJveCBzdGF0ZSAoKSA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSAwIFBwX2hib3hcbmFuZCBwcF9vcGVuX3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF92Ym94XG5cbmFuZCBwcF9vcGVuX2h2Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaHZib3hcbmFuZCBwcF9vcGVuX2hvdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2hvdmJveFxuYW5kIHBwX29wZW5fYm94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfYm94XG5cblxuKCogUHJpbnRpbmcgcXVldWVkIHRleHQuXG5cbiAgIFtwcF9wcmludF9mbHVzaF0gcHJpbnRzIGFsbCBwZW5kaW5nIGl0ZW1zIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhbmRcbiAgIHRoZW4gZmx1c2hlcyB0aGUgbG93IGxldmVsIG91dHB1dCBkZXZpY2Ugb2YgdGhlIGZvcm1hdHRlciB0byBhY3R1YWxseVxuICAgZGlzcGxheSBwcmludGluZyBtYXRlcmlhbC5cblxuICAgW3BwX3ByaW50X25ld2xpbmVdIGJlaGF2ZXMgYXMgW3BwX3ByaW50X2ZsdXNoXSBhZnRlciBwcmludGluZyBhbiBhZGRpdGlvbmFsXG4gICBuZXcgbGluZS4gKilcbmxldCBwcF9wcmludF9uZXdsaW5lIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgdHJ1ZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5hbmQgcHBfcHJpbnRfZmx1c2ggc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSBmYWxzZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5cblxuKCogVG8gZ2V0IGEgbmV3bGluZSB3aGVuIG9uZSBkb2VzIG5vdCB3YW50IHRvIGNsb3NlIHRoZSBjdXJyZW50IGJveC4gKilcbmxldCBwcF9mb3JjZV9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBUbyBmb3JtYXQgc29tZXRoaW5nLCBvbmx5IGluIGNhc2UgdGhlIGxpbmUgaGFzIGp1c3QgYmVlbiBicm9rZW4uICopXG5sZXQgcHBfcHJpbnRfaWZfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZVxuICAgICAgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2lmX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIEdlbmVyYWxpemVkIGJyZWFrIGhpbnQgdGhhdCBhbGxvd3MgcHJpbnRpbmcgc3RyaW5ncyBiZWZvcmUvYWZ0ZXJcbiAgIHNhbWUtbGluZSBvZmZzZXQgKHdpZHRoKSBvciBuZXctbGluZSBvZmZzZXQgKilcbmxldCBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGUgfmZpdHMgfmJyZWFrcyA9XG4gIGxldCBiZWZvcmUsIHdpZHRoLCBhZnRlciA9IGZpdHMgaW5cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgdG9rZW4gPSBQcF9icmVhayB7IGZpdHM7IGJyZWFrcyB9IGluXG4gICAgbGV0IGxlbmd0aCA9IFN0cmluZy5sZW5ndGggYmVmb3JlICsgd2lkdGggKyBTdHJpbmcubGVuZ3RoIGFmdGVyIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuOyBsZW5ndGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuKCogUHJpbnRpbmcgYnJlYWsgaGludHM6XG4gICBBIGJyZWFrIGhpbnQgaW5kaWNhdGVzIHdoZXJlIGEgYm94IG1heSBiZSBicm9rZW4uXG4gICBJZiBsaW5lIGlzIGJyb2tlbiB0aGVuIG9mZnNldCBpcyBhZGRlZCB0byB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnRcbiAgIGJveCBlbHNlICh0aGUgdmFsdWUgb2YpIHdpZHRoIGJsYW5rcyBhcmUgcHJpbnRlZC4gKilcbmxldCBwcF9wcmludF9icmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGVcbiAgICB+Zml0czooXCJcIiwgd2lkdGgsIFwiXCIpIH5icmVha3M6KFwiXCIsIG9mZnNldCwgXCJcIilcblxuXG4oKiBQcmludCBhIHNwYWNlIDpcbiAgIGEgc3BhY2UgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIGEgc2luZ2xlIHNwYWNlIGlmIHRoZSBicmVhayBkb2VzIG5vdFxuICAgc3BsaXQgdGhlIGxpbmU7XG4gICBhIGN1dCBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgbm90aGluZyBpZiB0aGUgYnJlYWsgZG9lcyBub3Qgc3BsaXQgdGhlXG4gICBsaW5lLiAqKVxubGV0IHBwX3ByaW50X3NwYWNlIHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMSAwXG5hbmQgcHBfcHJpbnRfY3V0IHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMCAwXG5cblxuKCogVGFidWxhdGlvbiBib3hlcy4gKilcbmxldCBwcF9vcGVuX3Rib3ggc3RhdGUgKCkgPVxuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggKyAxO1xuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUuemVybyBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RiZWdpbiAoUHBfdGJveCAocmVmIFtdKSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCogQ2xvc2UgYSB0YWJ1bGF0aW9uIGJveC4gKilcbmxldCBwcF9jbG9zZV90Ym94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3RlbmQ7IGxlbmd0aCA9IDAgfSBpblxuICAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbTtcbiAgICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMVxuICBlbmRcblxuXG4oKiBQcmludCBhIHRhYnVsYXRpb24gYnJlYWsuICopXG5sZXQgcHBfcHJpbnRfdGJyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJyZWFrICh3aWR0aCwgb2Zmc2V0KTsgbGVuZ3RoID0gd2lkdGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuXG5sZXQgcHBfcHJpbnRfdGFiIHN0YXRlICgpID0gcHBfcHJpbnRfdGJyZWFrIHN0YXRlIDAgMFxuXG5sZXQgcHBfc2V0X3RhYiBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3N0YWI7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGNvbnRyb2wgdGhlIHByZXR0eS1wcmludGVyc1xuXG4qKVxuXG4oKiBTZXRfbWF4X2JveGVzLiAqKVxubGV0IHBwX3NldF9tYXhfYm94ZXMgc3RhdGUgbiA9IGlmIG4gPiAxIHRoZW4gc3RhdGUucHBfbWF4X2JveGVzIDwtIG5cblxuKCogVG8ga25vdyB0aGUgY3VycmVudCBtYXhpbXVtIG51bWJlciBvZiBib3hlcyBhbGxvd2VkLiAqKVxubGV0IHBwX2dldF9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxubGV0IHBwX292ZXJfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG4oKiBFbGxpcHNpcy4gKilcbmxldCBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSBzID0gc3RhdGUucHBfZWxsaXBzaXMgPC0gc1xuYW5kIHBwX2dldF9lbGxpcHNpc190ZXh0IHN0YXRlICgpID0gc3RhdGUucHBfZWxsaXBzaXNcblxuXG4oKiBUbyBzZXQgdGhlIG1hcmdpbiBvZiBwcmV0dHktcHJpbnRlci4gKilcbmxldCBwcF9saW1pdCBuID1cbiAgaWYgbiA8IHBwX2luZmluaXR5IHRoZW4gbiBlbHNlIHByZWQgcHBfaW5maW5pdHlcblxuXG4oKiBJbnRlcm5hbCBwcmV0dHktcHJpbnRlciBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0IDwtIG47XG4gICAgc3RhdGUucHBfbWF4X2luZGVudCA8LSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9yaW5pdCBzdGF0ZVxuXG5cbigqIEluaXRpYWxseSwgd2UgaGF2ZSA6XG4gICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQsIGFuZFxuICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbi4gKilcbmxldCBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuID1cbiAgaWYgbiA+IDEgdGhlblxuICAgIHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSAoc3RhdGUucHBfbWFyZ2luIC0gbilcblxuXG5sZXQgcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfaW5kZW50XG5cbmxldCBwcF9zZXRfbWFyZ2luIHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21hcmdpbiA8LSBuO1xuICAgIGxldCBuZXdfbWF4X2luZGVudCA9XG4gICAgICAoKiBUcnkgdG8gbWFpbnRhaW4gbWF4X2luZGVudCB0byBpdHMgYWN0dWFsIHZhbHVlLiAqKVxuICAgICAgaWYgc3RhdGUucHBfbWF4X2luZGVudCA8PSBzdGF0ZS5wcF9tYXJnaW5cbiAgICAgIHRoZW4gc3RhdGUucHBfbWF4X2luZGVudCBlbHNlXG4gICAgICAoKiBJZiBwb3NzaWJsZSBtYWludGFpbiBwcF9taW5fc3BhY2VfbGVmdCB0byBpdHMgYWN0dWFsIHZhbHVlLFxuICAgICAgICAgaWYgdGhpcyBsZWFkcyB0byBhIHRvbyBzbWFsbCBtYXhfaW5kZW50LCB0YWtlIGhhbGYgb2YgdGhlXG4gICAgICAgICBuZXcgbWFyZ2luLCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMS4gKilcbiAgICAgICBJbnQubWF4IChJbnQubWF4IChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdClcbiAgICAgICAgICAgICAgICAoc3RhdGUucHBfbWFyZ2luIC8gMikpIDEgaW5cbiAgICAoKiBSZWJ1aWxkIGludmFyaWFudHMuICopXG4gICAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbmV3X21heF9pbmRlbnRcblxuXG4oKiogR2VvbWV0cnkgZnVuY3Rpb25zIGFuZCB0eXBlcyAqKVxudHlwZSBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDppbnQ7IG1hcmdpbjogaW50fVxuXG5sZXQgdmFsaWRhdGVfZ2VvbWV0cnkge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBpZiBtYXhfaW5kZW50IDwgMiB0aGVuXG4gICAgRXJyb3IgXCJtYXhfaW5kZW50IDwgMlwiXG4gIGVsc2UgaWYgbWFyZ2luIDw9IG1heF9pbmRlbnQgdGhlblxuICAgIEVycm9yIFwibWFyZ2luIDw9IG1heF9pbmRlbnRcIlxuICBlbHNlIE9rICgpXG5cbmxldCBjaGVja19nZW9tZXRyeSBnZW9tZXRyeSA9XG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBPayAoKSAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmdpblxuXG5sZXQgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBwcF9zZXRfbWFyZ2luIHN0YXRlIG1hcmdpbjtcbiAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbWF4X2luZGVudDtcbiAgKClcblxubGV0IHBwX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgbXNnIC0+XG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgKFwiRm9ybWF0LnBwX3NldF9nZW9tZXRyeTogXCIgXiBtc2cpKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBfbXNnIC0+XG4gICAgICgpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpID1cbiAgeyBtYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0YXRlICgpOyBtYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgfVxuXG5sZXQgcHBfdXBkYXRlX2dlb21ldHJ5IHN0YXRlIHVwZGF0ZSA9XG4gIGxldCBnZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSBpblxuICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSAodXBkYXRlIGdlb21ldHJ5KVxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgIG91dF9zdHJpbmcgPSBmO1xuICAgICAgb3V0X2ZsdXNoID0gZztcbiAgICAgIG91dF9uZXdsaW5lID0gaDtcbiAgICAgIG91dF9zcGFjZXMgPSBpO1xuICAgICAgb3V0X2luZGVudCA9IGo7XG4gICAgfSA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjtcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGc7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGg7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gaTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBqXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUgKCkgPSB7XG4gIG91dF9zdHJpbmcgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nO1xuICBvdXRfZmx1c2ggPSBzdGF0ZS5wcF9vdXRfZmx1c2g7XG4gIG91dF9uZXdsaW5lID0gc3RhdGUucHBfb3V0X25ld2xpbmU7XG4gIG91dF9zcGFjZXMgPSBzdGF0ZS5wcF9vdXRfc3BhY2VzO1xuICBvdXRfaW5kZW50ID0gc3RhdGUucHBfb3V0X2luZGVudDtcbn1cblxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIHN0cmluZyBvdXRwdXQgYW5kIGZsdXNoIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmOyBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZ1xuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaClcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfbmV3bGluZSBzdGF0ZSAoKSA9IHN0YXRlLnBwX291dF9zdHJpbmcgXCJcXG5cIiAwICAxXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBzcGFjZXMuICopXG5sZXQgYmxhbmtfbGluZSA9IFN0cmluZy5tYWtlIDgwICcgJ1xubGV0IHJlYyBkaXNwbGF5X2JsYW5rcyBzdGF0ZSBuID1cbiAgaWYgbiA+IDAgdGhlblxuICBpZiBuIDw9IDgwIHRoZW4gc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgbiBlbHNlXG4gIGJlZ2luXG4gICAgc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgODA7XG4gICAgZGlzcGxheV9ibGFua3Mgc3RhdGUgKG4gLSA4MClcbiAgZW5kXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IGluZGVudGF0aW9uIG9mIG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X2luZGVudCA9IGRpc3BsYXlfYmxhbmtzXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucyBhcyBwcmludGluZyB0byBhIGdpdmVuXG4gICBbUGVydmFzaXZlLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0YXRlIG9jID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBvdXRwdXRfc3Vic3RyaW5nIG9jO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gKGZ1biAoKSAtPiBmbHVzaCBvYyk7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBzdGF0ZVxuXG4oKlxuXG4gIERlZmluaW5nIHNwZWNpZmljIGZvcm1hdHRlcnNcblxuKilcblxubGV0IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPFwiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5sZXQgZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPC9cIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxuXG5sZXQgZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyA9IGlnbm9yZVxubGV0IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnID0gaWdub3JlXG5cbigqIEJ1aWxkaW5nIGEgZm9ybWF0dGVyIGdpdmVuIGl0cyBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLlxuICAgT3RoZXIgZmllbGRzIGdldCByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWVzLiAqKVxubGV0IHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgaiA9XG4gICgqIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBmb3JtYXR0ZXIgY29udGFpbnMgYSBkdW1teSBib3guICopXG4gIGxldCBwcF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICBsZXQgc3lzX3RvayA9XG4gICAgeyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX2JlZ2luICgwLCBQcF9ob3Zib3gpOyBsZW5ndGggPSAwIH0gaW5cbiAgUXVldWUuYWRkIHN5c190b2sgcHBfcXVldWU7XG4gIGxldCBzY2FuX3N0YWNrID0gU3RhY2suY3JlYXRlICgpIGluXG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzY2FuX3N0YWNrO1xuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IDE7IHF1ZXVlX2VsZW0gPSBzeXNfdG9rIH0gc2Nhbl9zdGFjaztcbiAgbGV0IHBwX21hcmdpbiA9IDc4XG4gIGFuZCBwcF9taW5fc3BhY2VfbGVmdCA9IDEwIGluXG4gIHtcbiAgICBwcF9zY2FuX3N0YWNrID0gc2Nhbl9zdGFjaztcbiAgICBwcF9mb3JtYXRfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGJveF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90YWdfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFya19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJnaW4gPSBwcF9tYXJnaW47XG4gICAgcHBfbWluX3NwYWNlX2xlZnQgPSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbjtcbiAgICBwcF9jdXJyZW50X2luZGVudCA9IDA7XG4gICAgcHBfaXNfbmV3X2xpbmUgPSB0cnVlO1xuICAgIHBwX2xlZnRfdG90YWwgPSAxO1xuICAgIHBwX3JpZ2h0X3RvdGFsID0gMTtcbiAgICBwcF9jdXJyX2RlcHRoID0gMTtcbiAgICBwcF9tYXhfYm94ZXMgPSBtYXhfaW50O1xuICAgIHBwX2VsbGlwc2lzID0gXCIuXCI7XG4gICAgcHBfb3V0X3N0cmluZyA9IGY7XG4gICAgcHBfb3V0X2ZsdXNoID0gZztcbiAgICBwcF9vdXRfbmV3bGluZSA9IGg7XG4gICAgcHBfb3V0X3NwYWNlcyA9IGk7XG4gICAgcHBfb3V0X2luZGVudCA9IGo7XG4gICAgcHBfcHJpbnRfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfb3Blbl90YWcgPSBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWc7XG4gICAgcHBfbWFya19jbG9zZV90YWcgPSBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnO1xuICAgIHBwX3ByaW50X29wZW5fdGFnID0gZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZztcbiAgICBwcF9wcmludF9jbG9zZV90YWcgPSBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZztcbiAgICBwcF9xdWV1ZSA9IHBwX3F1ZXVlO1xuICB9XG5cblxuKCogQnVpbGQgYSBmb3JtYXR0ZXIgb3V0IG9mIGl0cyBvdXQgZnVuY3Rpb25zLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfZnVuY3Rpb25zIG91dF9mdW5zID1cbiAgcHBfbWFrZV9mb3JtYXR0ZXJcbiAgICBvdXRfZnVucy5vdXRfc3RyaW5nXG4gICAgb3V0X2Z1bnMub3V0X2ZsdXNoXG4gICAgb3V0X2Z1bnMub3V0X25ld2xpbmVcbiAgICBvdXRfZnVucy5vdXRfc3BhY2VzXG4gICAgb3V0X2Z1bnMub3V0X2luZGVudFxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd2l0aCBkZWZhdWx0IGZ1bmN0aW9ucyB0byBvdXRwdXQgc3BhY2VzLFxuICBpbmRlbnRhdGlvbiwgYW5kIG5ldyBsaW5lcy4gKilcbmxldCBtYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggPVxuICBsZXQgcHBmID0gcHBfbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoIGlnbm9yZSBpZ25vcmUgaWdub3JlIGluXG4gIHBwZi5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgcHBmO1xuICBwcGYucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBwcGY7XG4gIHBwZi5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHBwZjtcbiAgcHBmXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9jaGFubmVsIG9jID1cbiAgbWFrZV9mb3JtYXR0ZXIgKG91dHB1dF9zdWJzdHJpbmcgb2MpIChmdW4gKCkgLT4gZmx1c2ggb2MpXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW0J1ZmZlci50XSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgPVxuICBtYWtlX2Zvcm1hdHRlciAoQnVmZmVyLmFkZF9zdWJzdHJpbmcgYikgaWdub3JlXG5cblxuKCogQWxsb2NhdGluZyBidWZmZXIgZm9yIHByZXR0eS1wcmludGluZyBwdXJwb3Nlcy5cbiAgIERlZmF1bHQgYnVmZmVyIHNpemUgaXMgcHBfYnVmZmVyX3NpemUgb3IgNTEyLlxuKilcbmxldCBwcF9idWZmZXJfc2l6ZSA9IDUxMlxubGV0IHBwX21ha2VfYnVmZmVyICgpID0gQnVmZmVyLmNyZWF0ZSBwcF9idWZmZXJfc2l6ZVxuXG4oKiBUaGUgc3RhbmRhcmQgKHNoYXJlZCkgYnVmZmVyLiAqKVxubGV0IHN0ZGJ1ZiA9IHBwX21ha2VfYnVmZmVyICgpXG5cbigqIFByZWRlZmluZWQgZm9ybWF0dGVycyBzdGFuZGFyZCBmb3JtYXR0ZXIgdG8gcHJpbnRcbiAgIHRvIFtTdGRsaWIuc3Rkb3V0XSwgW1N0ZGxpYi5zdGRlcnJdLCBhbmQgeyFzdGRidWZ9LiAqKVxubGV0IHN0ZF9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZG91dFxuYW5kIGVycl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZGVyclxuYW5kIHN0cl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIHN0ZGJ1ZlxuXG5cbigqIFtmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGZdIGZsdXNoZXMgZm9ybWF0dGVyIFtwcGZdLFxuICAgdGhlbiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiBidWZmZXIgW2J1Zl0gdGhhdCBpcyByZXNldC5cbiAgIEZvcm1hdHRlciBbcHBmXSBpcyBzdXBwb3NlZCB0byBwcmludCB0byBidWZmZXIgW2J1Zl0sIG90aGVyd2lzZSB0aGlzXG4gICBmdW5jdGlvbiBpcyBub3QgcmVhbGx5IHVzZWZ1bC4gKilcbmxldCBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGYgPVxuICBwcF9mbHVzaF9xdWV1ZSBwcGYgZmFsc2U7XG4gIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICBCdWZmZXIucmVzZXQgYnVmO1xuICBzXG5cblxuKCogRmx1c2ggW3N0cl9mb3JtYXR0ZXJdIGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIFtzdGRidWZdLiAqKVxubGV0IGZsdXNoX3N0cl9mb3JtYXR0ZXIgKCkgPSBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIHN0ZGJ1ZiBzdHJfZm9ybWF0dGVyXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZ1xuKilcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nIGlzIHByZXR0eS1wcmludGluZyB3aXRoIG5vIGxvdyBsZXZlbCBvdXRwdXQuXG5cbiAgV2hlbiB1c2luZyBhIHN5bWJvbGljIGZvcm1hdHRlciwgYWxsIHJlZ3VsYXIgcHJldHR5LXByaW50aW5nIGFjdGl2aXRpZXNcbiAgb2NjdXIgYnV0IG91dHB1dCBtYXRlcmlhbCBpcyBzeW1ib2xpYyBhbmQgc3RvcmVkIGluIGEgYnVmZmVyIG9mIG91dHB1dFxuICBpdGVtcy4gQXQgdGhlIGVuZCBvZiBwcmV0dHktcHJpbnRpbmcsIGZsdXNoaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGFsbG93c1xuICBwb3N0LXByb2Nlc3Npbmcgb2Ygc3ltYm9saWMgb3V0cHV0IGJlZm9yZSBsb3cgbGV2ZWwgb3V0cHV0IG9wZXJhdGlvbnMuXG4qKVxuXG50eXBlIHN5bWJvbGljX291dHB1dF9pdGVtID1cbiAgfCBPdXRwdXRfZmx1c2hcbiAgfCBPdXRwdXRfbmV3bGluZVxuICB8IE91dHB1dF9zdHJpbmcgb2Ygc3RyaW5nXG4gIHwgT3V0cHV0X3NwYWNlcyBvZiBpbnRcbiAgfCBPdXRwdXRfaW5kZW50IG9mIGludFxuXG50eXBlIHN5bWJvbGljX291dHB1dF9idWZmZXIgPSB7XG4gIG11dGFibGUgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDogc3ltYm9saWNfb3V0cHV0X2l0ZW0gbGlzdDtcbn1cblxubGV0IG1ha2Vfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciAoKSA9XG4gIHsgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzID0gW10gfVxuXG5sZXQgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIFtdXG5cbmxldCBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBMaXN0LnJldiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBpdGVtcyA9IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiBpblxuICBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYjtcbiAgaXRlbXNcblxubGV0IGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgaXRlbSA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gaXRlbSA6OiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmb3JtYXR0ZXJfb2Zfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgc3ltYm9saWNfZmx1c2ggc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9mbHVzaFxuICBhbmQgc3ltYm9saWNfbmV3bGluZSBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X25ld2xpbmVcbiAgYW5kIHN5bWJvbGljX3N0cmluZyBzb2IgcyBpIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pKVxuICBhbmQgc3ltYm9saWNfc3BhY2VzIHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3BhY2VzIG4pXG4gIGFuZCBzeW1ib2xpY19pbmRlbnQgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9pbmRlbnQgbikgaW5cblxuICBsZXQgZiA9IHN5bWJvbGljX3N0cmluZyBzb2JcbiAgYW5kIGcgPSBzeW1ib2xpY19mbHVzaCBzb2JcbiAgYW5kIGggPSBzeW1ib2xpY19uZXdsaW5lIHNvYlxuICBhbmQgaSA9IHN5bWJvbGljX3NwYWNlcyBzb2JcbiAgYW5kIGogPSBzeW1ib2xpY19pbmRlbnQgc29iIGluXG4gIHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgalxuXG4oKlxuXG4gIEJhc2ljIGZ1bmN0aW9ucyBvbiB0aGUgJ3N0YW5kYXJkJyBmb3JtYXR0ZXJcbiAgKHRoZSBmb3JtYXR0ZXIgdGhhdCBwcmludHMgdG8gW1N0ZGxpYi5zdGRvdXRdKS5cblxuKilcblxubGV0IG9wZW5faGJveCA9IHBwX29wZW5faGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl92Ym94ID0gcHBfb3Blbl92Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2h2Ym94ID0gcHBfb3Blbl9odmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ob3Zib3ggPSBwcF9vcGVuX2hvdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ib3ggPSBwcF9vcGVuX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfYm94ID0gcHBfY2xvc2VfYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3RhZyA9IHBwX29wZW5fdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90YWcgPSBwcF9jbG9zZV90YWcgc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fc3RhZyA9IHBwX29wZW5fc3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2Vfc3RhZyA9IHBwX2Nsb3NlX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2FzID0gcHBfcHJpbnRfYXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3N0cmluZyA9IHBwX3ByaW50X3N0cmluZyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYnl0ZXMgPSBwcF9wcmludF9ieXRlcyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaW50ID0gcHBfcHJpbnRfaW50IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbG9hdCA9IHBwX3ByaW50X2Zsb2F0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jaGFyID0gcHBfcHJpbnRfY2hhciBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYm9vbCA9IHBwX3ByaW50X2Jvb2wgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2JyZWFrID0gcHBfcHJpbnRfYnJlYWsgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2N1dCA9IHBwX3ByaW50X2N1dCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfc3BhY2UgPSBwcF9wcmludF9zcGFjZSBzdGRfZm9ybWF0dGVyXG5hbmQgZm9yY2VfbmV3bGluZSA9IHBwX2ZvcmNlX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ZsdXNoID0gcHBfcHJpbnRfZmx1c2ggc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X25ld2xpbmUgPSBwcF9wcmludF9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9pZl9uZXdsaW5lID0gcHBfcHJpbnRfaWZfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBvcGVuX3Rib3ggPSBwcF9vcGVuX3Rib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3Rib3ggPSBwcF9jbG9zZV90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YnJlYWsgPSBwcF9wcmludF90YnJlYWsgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X3RhYiA9IHBwX3NldF90YWIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3RhYiA9IHBwX3ByaW50X3RhYiBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWFyZ2luID0gcHBfc2V0X21hcmdpbiBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21heF9pbmRlbnQgPSBwcF9zZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZ2VvbWV0cnkgPSBwcF9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHNhZmVfc2V0X2dlb21ldHJ5ID0gcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9nZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgdXBkYXRlX2dlb21ldHJ5ID0gcHBfdXBkYXRlX2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfYm94ZXMgPSBwcF9zZXRfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWF4X2JveGVzID0gcHBfZ2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgb3Zlcl9tYXhfYm94ZXMgPSBwcF9vdmVyX21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZWxsaXBzaXNfdGV4dCA9IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZWxsaXBzaXNfdGV4dCA9IHBwX2dldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3ByaW50X3RhZ3MgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X3ByaW50X3RhZ3MgPVxuICBwcF9nZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X21hcmtfdGFncyA9XG4gIHBwX3NldF9tYXJrX3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJrX3RhZ3MgPVxuICBwcF9nZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfdGFncyA9XG4gIHBwX3NldF90YWdzIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgKilcblxuKCogVG8gZm9ybWF0IGEgbGlzdCAqKVxubGV0IHJlYyBwcF9wcmludF9saXN0ID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKClcbiAgfCBbdl0gLT4gcHBfdiBwcGYgdlxuICB8IHYgOjogdnMgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfcHJpbnRfbGlzdCB+cHBfc2VwIHBwX3YgcHBmIHZzXG5cbigqIFRvIGZvcm1hdCBhIHNlcXVlbmNlICopXG5sZXQgcmVjIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiAoKVxuICB8IFNlcS5Db25zICh2LCBzZXEpIC0+XG4gICAgcHBfc2VwIHBwZiAoKTtcbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG5sZXQgcHBfcHJpbnRfc2VxID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxXG5cbigqIFRvIGZvcm1hdCBmcmVlLWZsb3dpbmcgdGV4dCAqKVxubGV0IHBwX3ByaW50X3RleHQgcHBmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsZWZ0ID0gcmVmIDAgaW5cbiAgbGV0IHJpZ2h0ID0gcmVmIDAgaW5cbiAgbGV0IGZsdXNoICgpID1cbiAgICBwcF9wcmludF9zdHJpbmcgcHBmIChTdHJpbmcuc3ViIHMgIWxlZnQgKCFyaWdodCAtICFsZWZ0KSk7XG4gICAgaW5jciByaWdodDsgbGVmdCA6PSAhcmlnaHQ7XG4gIGluXG4gIHdoaWxlICghcmlnaHQgPD4gbGVuKSBkb1xuICAgIG1hdGNoIHMuWyFyaWdodF0gd2l0aFxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBmbHVzaCAoKTtcbiAgICAgICAgcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGZsdXNoICgpOyBwcF9wcmludF9zcGFjZSBwcGYgKClcbiAgICAgICgqIHRoZXJlIGlzIG5vIHNwZWNpZmljIHN1cHBvcnQgZm9yICdcXHQnXG4gICAgICAgICBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgYSByaWdodCBzZW1hbnRpY3Mgd291bGQgYmUgKilcbiAgICAgIHwgXyAtPiBpbmNyIHJpZ2h0XG4gIGRvbmU7XG4gIGlmICFsZWZ0IDw+IGxlbiB0aGVuIGZsdXNoICgpXG5cbmxldCBwcF9wcmludF9vcHRpb24gPyhub25lID0gZnVuIF8gKCkgLT4gKCkpIHBwX3YgcHBmID0gZnVuY3Rpb25cbnwgTm9uZSAtPiBub25lIHBwZiAoKVxufCBTb21lIHYgLT4gcHBfdiBwcGYgdlxuXG5sZXQgcHBfcHJpbnRfcmVzdWx0IH5vayB+ZXJyb3IgcHBmID0gZnVuY3Rpb25cbnwgT2sgdiAtPiBvayBwcGYgdlxufCBFcnJvciBlIC0+IGVycm9yIHBwZiBlXG5cbmxldCBwcF9wcmludF9laXRoZXIgfmxlZnQgfnJpZ2h0IHBwZiA9IGZ1bmN0aW9uXG58IEVpdGhlci5MZWZ0IGwgLT4gbGVmdCBwcGYgbFxufCBFaXRoZXIuUmlnaHQgciAtPiByaWdodCBwcGYgclxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5sZXQgY29tcHV0ZV90YWcgb3V0cHV0IHRhZ19hY2MgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgb3V0cHV0IHBwZiB0YWdfYWNjO1xuICBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPCAyIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBlbHNlIEJ1ZmZlci5zdWIgYnVmIDEgKGxlbiAtIDIpXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICBEZWZpbmluZyBjb250aW51YXRpb25zIHRvIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgb2ZcbiAgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLlxuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogSW50ZXJwcmV0IGEgZm9ybWF0dGluZyBlbnRpdHkgb24gYSBmb3JtYXR0ZXIuICopXG5sZXQgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmbXRpbmdfbGl0ID0gbWF0Y2ggZm10aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9ib3ggcHBmICgpXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV90YWcgcHBmICgpXG4gIHwgQnJlYWsgKF8sIHdpZHRoLCBvZmZzZXQpICAtPiBwcF9wcmludF9icmVhayBwcGYgd2lkdGggb2Zmc2V0XG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9mbHVzaCBwcGYgKClcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgIC0+IHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9wcmludF9uZXdsaW5lIHBwZiAoKVxuICB8IE1hZ2ljX3NpemUgKF8sIF8pICAgICAgICAgLT4gKClcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICdAJ1xuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJyUnXG4gIHwgU2Nhbl9pbmRpYyBjICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCc7IHBwX3ByaW50X2NoYXIgcHBmIGNcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLm91dHB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIG91dHB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgZiBwcGY7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLmJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgc3RycHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZGVsYXkgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChmICgpKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIHN0cnB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiAoZiAoKSk7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKlxuXG4gIERlZmluaW5nIFtmcHJpbnRmXSBhbmQgdmFyaW91cyBmbGF2b3JzIG9mIFtmcHJpbnRmXS5cblxuKilcblxubGV0IGtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIHBwZiBhY2M7IGsgcHBmKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmFuZCBpa2ZwcmludGYgayBwcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBwcGYgZm10XG5cbmxldCBpZnByaW50ZiBfcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGlnbm9yZSAoKSBmbXRcblxubGV0IGZwcmludGYgcHBmID0ga2ZwcmludGYgaWdub3JlIHBwZlxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZF9mb3JtYXR0ZXIgZm10XG5sZXQgZXByaW50ZiBmbXQgPSBmcHJpbnRmIGVycl9mb3JtYXR0ZXIgZm10XG5cbmxldCBrZHByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBrIChmdW4gcHBmIC0+IG91dHB1dF9hY2MgcHBmIGFjYykpXG4gICAgRW5kX29mX2FjYyBmbXRcblxubGV0IGRwcmludGYgZm10ID0ga2RwcmludGYgKGZ1biBpIC0+IGkpIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIHN0cnB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgaWQgZm10XG5cbmxldCBrYXNwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIG91dHB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IGFzcHJpbnRmIGZtdCA9IGthc3ByaW50ZiBpZCBmbXRcblxuKCogRmx1c2hpbmcgc3RhbmRhcmQgZm9ybWF0dGVycyBhdCBlbmQgb2YgZXhlY3V0aW9uLiAqKVxuXG5sZXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyAoKSA9XG4gIHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXIgKCk7XG4gIHBwX3ByaW50X2ZsdXNoIGVycl9mb3JtYXR0ZXIgKClcblxubGV0ICgpID0gYXRfZXhpdCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzXG5cbigqXG5cbiAgRGVwcmVjYXRlZCBzdHVmZi5cblxuKilcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGVcbiAgICB+b3V0OmYgfmZsdXNoOmcgfm5ld2xpbmU6aCB+c3BhY2VzOmkgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGlcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoLFxuICAgc3RhdGUucHBfb3V0X25ld2xpbmUsIHN0YXRlLnBwX291dF9zcGFjZXMpXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHNldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5cbigqIERlcHJlY2F0ZWQgOiBlcnJvciBwcm9uZSBmdW5jdGlvbiwgZG8gbm90IHVzZSBpdC5cbiAgIFRoaXMgZnVuY3Rpb24gaXMgbmVpdGhlciBjb21wb3NpdGlvbmFsIG5vciBpbmNyZW1lbnRhbCwgc2luY2UgaXQgZmx1c2hlc1xuICAgdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGF0IGVhY2ggY2FsbC5cbiAgIFRvIGdldCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LCBkZWZpbmUgYSBmb3JtYXR0ZXIgb2YgeW91ciBvd24gd3JpdGluZyB0b1xuICAgdGhlIGJ1ZmZlciBhcmd1bWVudCwgYXMgaW5cbiAgIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGJcbiAgIHRoZW4gdXNlIHshZnByaW50ZiBwcGZ9IGFzIHVzdWFsLiAqKVxubGV0IGJwcmludGYgYiAoRm9ybWF0IChmbXQsIF8pIDogKCdhLCBmb3JtYXR0ZXIsIHVuaXQpIGZvcm1hdCkgPVxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9IG91dHB1dF9hY2MgcHBmIGFjYzsgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG4oKiBEZXByZWNhdGVkIDogYWxpYXMgZm9yIGtzcHJpbnRmLiAqKVxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuXG5cblxuKCogRGVwcmVjYXRlZCB0YWcgZnVuY3Rpb25zICopXG5cbnR5cGUgZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPSB7XG4gIG1hcmtfb3Blbl90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3RhZyA6IHRhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fdGFnIDogdGFnIC0+IHVuaXQ7XG4gIHByaW50X2Nsb3NlX3RhZyA6IHRhZyAtPiB1bml0O1xufVxuXG5cbmxldCBwcF9zZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3RhZyA9IG1jdDtcbiAgICAgcHJpbnRfb3Blbl90YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3RhZyA9IHBjdDtcbiAgIH0gPVxuICBsZXQgc3RyaW5naWZ5IGYgZSA9IGZ1bmN0aW9uIFN0cmluZ190YWcgcyAtPiBmIHMgfCBfIC0+IGUgaW5cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBzdHJpbmdpZnkgbW90IFwiXCI7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBtY3QgXCJcIjtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gc3RyaW5naWZ5IHBvdCAoKTtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBwY3QgKClcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBmbXQgKCkgPVxuICBsZXQgZnVucyA9IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgZm10ICgpIGluXG4gIGxldCBtYXJrX29wZW5fdGFnIHMgPSBmdW5zLm1hcmtfb3Blbl9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBtYXJrX2Nsb3NlX3RhZyBzID0gZnVucy5tYXJrX2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X29wZW5fdGFnIHMgPSBmdW5zLnByaW50X29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgcHJpbnRfY2xvc2VfdGFnIHMgPSBmdW5zLnByaW50X2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAge21hcmtfb3Blbl90YWc7IG1hcmtfY2xvc2VfdGFnOyBwcmludF9vcGVuX3RhZzsgcHJpbnRfY2xvc2VfdGFnfVxuXG5sZXQgc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogYWxpYXMgdG8gYXZvaWQgd2FybmluZyBmb3IgYW1iaWd1aXR5IGJldHdlZW5cbiAgIFN0ZGxpYi5mb3JtYXQ2XG4gICBhbmQgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDZcblxuICAgKHRoZSBmb3JtZXIgaXMgaW4gZmFjdCBhbiBhbGlhcyBmb3IgdGhlIGxhdHRlcixcbiAgICBidXQgdGhlIGFtYmlndWl0eSB3YXJuaW5nIGRvZXNuJ3QgY2FyZSlcbiopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIFN0ZGxpYi5mb3JtYXQ2XG5cblxuKCogVGhlIHJ1bi10aW1lIGxpYnJhcnkgZm9yIHNjYW5uZXJzLiAqKVxuXG4oKiBTY2FubmluZyBidWZmZXJzLiAqKVxubW9kdWxlIHR5cGUgU0NBTk5JTkcgPSBzaWdcblxuICB0eXBlIGluX2NoYW5uZWxcblxuICB0eXBlIHNjYW5idWYgPSBpbl9jaGFubmVsXG5cbiAgdHlwZSBmaWxlX25hbWUgPSBzdHJpbmdcblxuICB2YWwgc3RkaW4gOiBpbl9jaGFubmVsXG4gICgqIFRoZSBzY2FubmluZyBidWZmZXIgcmVhZGluZyBmcm9tIFtTdGRsaWIuc3RkaW5dLlxuICAgICBbc3RkaWJdIGlzIGVxdWl2YWxlbnQgdG8gW1NjYW5uaW5nLmZyb21fY2hhbm5lbCBTdGRsaWIuc3RkaW5dLiAqKVxuXG4gIHZhbCBzdGRpYiA6IGluX2NoYW5uZWxcbiAgKCogQW4gYWxpYXMgZm9yIFtTY2FuZi5zdGRpbl0sIHRoZSBzY2FubmluZyBidWZmZXIgcmVhZGluZyBmcm9tXG4gICAgIFtTdGRsaWIuc3RkaW5dLiAqKVxuXG4gIHZhbCBuZXh0X2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogW1NjYW5uaW5nLm5leHRfY2hhciBpYl0gYWR2YW5jZSB0aGUgc2Nhbm5pbmcgYnVmZmVyIGZvclxuICAgICBvbmUgY2hhcmFjdGVyLlxuICAgICBJZiBubyBtb3JlIGNoYXJhY3RlciBjYW4gYmUgcmVhZCwgc2V0cyBhIGVuZCBvZiBmaWxlIGNvbmRpdGlvbiBhbmRcbiAgICAgcmV0dXJucyAnXFwwMDAnLiAqKVxuXG4gIHZhbCBpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciA6IHNjYW5idWYgLT4gdW5pdFxuICAoKiBbU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWJdIG1hcmsgdGhlIGN1cnJlbnRfY2hhciBhcyBhbHJlYWR5XG4gICAgIHNjYW5uZWQuICopXG5cbiAgdmFsIHBlZWtfY2hhciA6IHNjYW5idWYgLT4gY2hhclxuICAoKiBbU2Nhbm5pbmcucGVla19jaGFyIGliXSByZXR1cm5zIHRoZSBjdXJyZW50IGNoYXIgYXZhaWxhYmxlIGluXG4gICAgIHRoZSBidWZmZXIgb3IgcmVhZHMgb25lIGlmIG5lY2Vzc2FyeSAod2hlbiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXNcbiAgICAgYWxyZWFkeSBzY2FubmVkKS5cbiAgICAgSWYgbm8gY2hhcmFjdGVyIGNhbiBiZSByZWFkLCBzZXRzIGFuIGVuZCBvZiBmaWxlIGNvbmRpdGlvbiBhbmRcbiAgICAgcmV0dXJucyAnXFwwMDAnLiAqKVxuXG4gIHZhbCBjaGVja2VkX3BlZWtfY2hhciA6IHNjYW5idWYgLT4gY2hhclxuICAoKiBTYW1lIGFzIFtTY2FubmluZy5wZWVrX2NoYXJdIGFib3ZlIGJ1dCBhbHdheXMgcmV0dXJucyBhIHZhbGlkIGNoYXIgb3JcbiAgICAgZmFpbHM6IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgbnVsbCBjaGFyIHdoZW4gdGhlIHJlYWRpbmcgbWV0aG9kIG9mIHRoZVxuICAgICBpbnB1dCBidWZmZXIgaGFzIHJlYWNoZWQgYW4gZW5kIG9mIGZpbGUsIHRoZSBmdW5jdGlvbiByYWlzZXMgZXhjZXB0aW9uXG4gICAgIFtFbmRfb2ZfZmlsZV0uICopXG5cbiAgdmFsIHN0b3JlX2NoYXIgOiBpbnQgLT4gc2NhbmJ1ZiAtPiBjaGFyIC0+IGludFxuICAoKiBbU2Nhbm5pbmcuc3RvcmVfY2hhciBsaW0gaWIgY10gYWRkcyBbY10gdG8gdGhlIHRva2VuIGJ1ZmZlclxuICAgICBvZiB0aGUgc2Nhbm5pbmcgYnVmZmVyIFtpYl0uIEl0IGFsc28gYWR2YW5jZXMgdGhlIHNjYW5uaW5nIGJ1ZmZlciBmb3JcbiAgICAgb25lIGNoYXJhY3RlciBhbmQgcmV0dXJucyBbbGltIC0gMV0sIGluZGljYXRpbmcgdGhlIG5ldyBsaW1pdCBmb3IgdGhlXG4gICAgIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4gKilcblxuICB2YWwgc2tpcF9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5za2lwX2NoYXIgbGltIGliXSBpZ25vcmVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci4gKilcblxuICB2YWwgaWdub3JlX2NoYXIgOiBpbnQgLT4gc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLmlnbm9yZV9jaGFyIGliIGxpbV0gaWdub3JlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYW5kXG4gICAgIGRlY3JlbWVudHMgdGhlIGxpbWl0LiAqKVxuXG4gIHZhbCB0b2tlbiA6IHNjYW5idWYgLT4gc3RyaW5nXG4gICgqIFtTY2FubmluZy50b2tlbiBpYl0gcmV0dXJucyB0aGUgc3RyaW5nIHN0b3JlZCBpbnRvIHRoZSB0b2tlblxuICAgICBidWZmZXIgb2YgdGhlIHNjYW5uaW5nIGJ1ZmZlcjogaXQgcmV0dXJucyB0aGUgdG9rZW4gbWF0Y2hlZCBieSB0aGVcbiAgICAgZm9ybWF0LiAqKVxuXG4gIHZhbCByZXNldF90b2tlbiA6IHNjYW5idWYgLT4gdW5pdFxuICAoKiBbU2Nhbm5pbmcucmVzZXRfdG9rZW4gaWJdIHJlc2V0cyB0aGUgdG9rZW4gYnVmZmVyIG9mXG4gICAgIHRoZSBnaXZlbiBzY2FubmluZyBidWZmZXIuICopXG5cbiAgdmFsIGNoYXJfY291bnQgOiBzY2FuYnVmIC0+IGludFxuICAoKiBbU2Nhbm5pbmcuY2hhcl9jb3VudCBpYl0gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbiAgICAgcmVhZCBzbyBmYXIgZnJvbSB0aGUgZ2l2ZW4gYnVmZmVyLiAqKVxuXG4gIHZhbCBsaW5lX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLmxpbmVfY291bnQgaWJdIHJldHVybnMgdGhlIG51bWJlciBvZiBuZXcgbGluZVxuICAgICBjaGFyYWN0ZXJzIHJlYWQgc28gZmFyIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgdG9rZW5fY291bnQgOiBzY2FuYnVmIC0+IGludFxuICAoKiBbU2Nhbm5pbmcudG9rZW5fY291bnQgaWJdIHJldHVybnMgdGhlIG51bWJlciBvZiB0b2tlbnMgcmVhZFxuICAgICBzbyBmYXIgZnJvbSBbaWJdLiAqKVxuXG4gIHZhbCBlb2YgOiBzY2FuYnVmIC0+IGJvb2xcbiAgKCogW1NjYW5uaW5nLmVvZiBpYl0gcmV0dXJucyB0aGUgZW5kIG9mIGlucHV0IGNvbmRpdGlvblxuICAgICBvZiB0aGUgZ2l2ZW4gYnVmZmVyLiAqKVxuXG4gIHZhbCBlbmRfb2ZfaW5wdXQgOiBzY2FuYnVmIC0+IGJvb2xcbiAgKCogW1NjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYl0gdGVzdHMgdGhlIGVuZCBvZiBpbnB1dCBjb25kaXRpb25cbiAgICAgb2YgdGhlIGdpdmVuIGJ1ZmZlciAoaWYgbm8gY2hhciBoYXMgZXZlciBiZWVuIHJlYWQsIGFuIGF0dGVtcHQgdG9cbiAgICAgcmVhZCBvbmUgaXMgcGVyZm9ybWVkKS4gKilcblxuICB2YWwgYmVnaW5uaW5nX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5iZWdpbm5pbmdfb2ZfaW5wdXQgaWJdIHRlc3RzIHRoZSBiZWdpbm5pbmcgb2YgaW5wdXRcbiAgICAgY29uZGl0aW9uIG9mIHRoZSBnaXZlbiBidWZmZXIuICopXG5cbiAgdmFsIG5hbWVfb2ZfaW5wdXQgOiBzY2FuYnVmIC0+IHN0cmluZ1xuICAoKiBbU2Nhbm5pbmcubmFtZV9vZl9pbnB1dCBpYl0gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2hhcmFjdGVyXG4gICAgIHNvdXJjZSBmb3IgaW5wdXQgYnVmZmVyIFtpYl0uICopXG5cbiAgdmFsIG9wZW5faW4gOiBmaWxlX25hbWUgLT4gaW5fY2hhbm5lbFxuICB2YWwgb3Blbl9pbl9iaW4gOiBmaWxlX25hbWUgLT4gaW5fY2hhbm5lbFxuICB2YWwgZnJvbV9maWxlIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZmlsZV9iaW4gOiBmaWxlX25hbWUgLT4gaW5fY2hhbm5lbFxuICB2YWwgZnJvbV9zdHJpbmcgOiBzdHJpbmcgLT4gaW5fY2hhbm5lbFxuICB2YWwgZnJvbV9mdW5jdGlvbiA6ICh1bml0IC0+IGNoYXIpIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fY2hhbm5lbCA6IFN0ZGxpYi5pbl9jaGFubmVsIC0+IGluX2NoYW5uZWxcblxuICB2YWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXRcblxuICB2YWwgbWVtb19mcm9tX2NoYW5uZWwgOiBTdGRsaWIuaW5fY2hhbm5lbCAtPiBpbl9jaGFubmVsXG4gICgqIE9ic29sZXRlLiAqKVxuXG5lbmRcblxuXG5tb2R1bGUgU2Nhbm5pbmcgOiBTQ0FOTklORyA9IHN0cnVjdFxuXG4gICgqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBzY2FuZi4gKilcblxuICB0eXBlIGZpbGVfbmFtZSA9IHN0cmluZ1xuXG4gIHR5cGUgaW5fY2hhbm5lbF9uYW1lID1cbiAgICB8IEZyb21fY2hhbm5lbCBvZiBTdGRsaWIuaW5fY2hhbm5lbFxuICAgIHwgRnJvbV9maWxlIG9mIGZpbGVfbmFtZSAqIFN0ZGxpYi5pbl9jaGFubmVsXG4gICAgfCBGcm9tX2Z1bmN0aW9uXG4gICAgfCBGcm9tX3N0cmluZ1xuXG5cbiAgdHlwZSBpbl9jaGFubmVsID0ge1xuICAgIG11dGFibGUgaWNfZW9mIDogYm9vbDtcbiAgICBtdXRhYmxlIGljX2N1cnJlbnRfY2hhciA6IGNoYXI7XG4gICAgbXV0YWJsZSBpY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgOiBib29sO1xuICAgIG11dGFibGUgaWNfY2hhcl9jb3VudCA6IGludDtcbiAgICBtdXRhYmxlIGljX2xpbmVfY291bnQgOiBpbnQ7XG4gICAgbXV0YWJsZSBpY190b2tlbl9jb3VudCA6IGludDtcbiAgICBpY19nZXRfbmV4dF9jaGFyIDogdW5pdCAtPiBjaGFyO1xuICAgIGljX3Rva2VuX2J1ZmZlciA6IEJ1ZmZlci50O1xuICAgIGljX2lucHV0X25hbWUgOiBpbl9jaGFubmVsX25hbWU7XG4gIH1cblxuXG4gIHR5cGUgc2NhbmJ1ZiA9IGluX2NoYW5uZWxcblxuICBsZXQgbnVsbF9jaGFyID0gJ1xcMDAwJ1xuXG4gICgqIFJlYWRzIGEgbmV3IGNoYXJhY3RlciBmcm9tIGlucHV0IGJ1ZmZlci5cbiAgICAgTmV4dF9jaGFyIG5ldmVyIGZhaWxzLCBldmVuIGluIGNhc2Ugb2YgZW5kIG9mIGlucHV0OlxuICAgICBpdCB0aGVuIHNpbXBseSBzZXRzIHRoZSBlbmQgb2YgZmlsZSBjb25kaXRpb24uICopXG4gIGxldCBuZXh0X2NoYXIgaWIgPVxuICAgIHRyeVxuICAgICAgbGV0IGMgPSBpYi5pY19nZXRfbmV4dF9jaGFyICgpIGluXG4gICAgICBpYi5pY19jdXJyZW50X2NoYXIgPC0gYztcbiAgICAgIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA8LSB0cnVlO1xuICAgICAgaWIuaWNfY2hhcl9jb3VudCA8LSBzdWNjIGliLmljX2NoYXJfY291bnQ7XG4gICAgICBpZiBjID0gJ1xcbicgdGhlbiBpYi5pY19saW5lX2NvdW50IDwtIHN1Y2MgaWIuaWNfbGluZV9jb3VudDtcbiAgICAgIGMgd2l0aFxuICAgIHwgRW5kX29mX2ZpbGUgLT5cbiAgICAgIGxldCBjID0gbnVsbF9jaGFyIGluXG4gICAgICBpYi5pY19jdXJyZW50X2NoYXIgPC0gYztcbiAgICAgIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA8LSBmYWxzZTtcbiAgICAgIGliLmljX2VvZiA8LSB0cnVlO1xuICAgICAgY1xuXG5cbiAgbGV0IHBlZWtfY2hhciBpYiA9XG4gICAgaWYgaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkXG4gICAgdGhlbiBpYi5pY19jdXJyZW50X2NoYXJcbiAgICBlbHNlIG5leHRfY2hhciBpYlxuXG5cbiAgKCogUmV0dXJucyBhIHZhbGlkIGN1cnJlbnQgY2hhciBmb3IgdGhlIGlucHV0IGJ1ZmZlci4gSW4gcGFydGljdWxhclxuICAgICBubyBpcnJlbGV2YW50IG51bGwgY2hhcmFjdGVyIChhcyBzZXQgYnkgW25leHRfY2hhcl0gaW4gY2FzZSBvZiBlbmRcbiAgICAgb2YgaW5wdXQpIGlzIHJldHVybmVkLCBzaW5jZSBbRW5kX29mX2ZpbGVdIGlzIHJhaXNlZCB3aGVuXG4gICAgIFtuZXh0X2NoYXJdIHNldHMgdGhlIGVuZCBvZiBmaWxlIGNvbmRpdGlvbiB3aGlsZSB0cnlpbmcgdG8gcmVhZCBhXG4gICAgIG5ldyBjaGFyYWN0ZXIuICopXG4gIGxldCBjaGVja2VkX3BlZWtfY2hhciBpYiA9XG4gICAgbGV0IGMgPSBwZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBpYi5pY19lb2YgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgICBjXG5cblxuICBsZXQgZW5kX29mX2lucHV0IGliID1cbiAgICBpZ25vcmUgKHBlZWtfY2hhciBpYik7XG4gICAgaWIuaWNfZW9mXG5cblxuICBsZXQgZW9mIGliID0gaWIuaWNfZW9mXG5cbiAgbGV0IGJlZ2lubmluZ19vZl9pbnB1dCBpYiA9IGliLmljX2NoYXJfY291bnQgPSAwXG5cbiAgbGV0IG5hbWVfb2ZfaW5wdXQgaWIgPVxuICAgIG1hdGNoIGliLmljX2lucHV0X25hbWUgd2l0aFxuICAgIHwgRnJvbV9jaGFubmVsIF9pYyAtPiBcInVubmFtZWQgU3RkbGliIGlucHV0IGNoYW5uZWxcIlxuICAgIHwgRnJvbV9maWxlIChmbmFtZSwgX2ljKSAtPiBmbmFtZVxuICAgIHwgRnJvbV9mdW5jdGlvbiAtPiBcInVubmFtZWQgZnVuY3Rpb25cIlxuICAgIHwgRnJvbV9zdHJpbmcgLT4gXCJ1bm5hbWVkIGNoYXJhY3RlciBzdHJpbmdcIlxuXG5cbiAgbGV0IGNoYXJfY291bnQgaWIgPVxuICAgIGlmIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZFxuICAgIHRoZW4gaWIuaWNfY2hhcl9jb3VudCAtIDFcbiAgICBlbHNlIGliLmljX2NoYXJfY291bnRcblxuXG4gIGxldCBsaW5lX2NvdW50IGliID0gaWIuaWNfbGluZV9jb3VudFxuXG4gIGxldCByZXNldF90b2tlbiBpYiA9IEJ1ZmZlci5yZXNldCBpYi5pY190b2tlbl9idWZmZXJcblxuICBsZXQgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWIgPSBpYi5pY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgPC0gZmFsc2VcblxuICBsZXQgdG9rZW4gaWIgPVxuICAgIGxldCB0b2tlbl9idWZmZXIgPSBpYi5pY190b2tlbl9idWZmZXIgaW5cbiAgICBsZXQgdG9rID0gQnVmZmVyLmNvbnRlbnRzIHRva2VuX2J1ZmZlciBpblxuICAgIEJ1ZmZlci5jbGVhciB0b2tlbl9idWZmZXI7XG4gICAgaWIuaWNfdG9rZW5fY291bnQgPC0gc3VjYyBpYi5pY190b2tlbl9jb3VudDtcbiAgICB0b2tcblxuXG4gIGxldCB0b2tlbl9jb3VudCBpYiA9IGliLmljX3Rva2VuX2NvdW50XG5cbiAgbGV0IHNraXBfY2hhciB3aWR0aCBpYiA9XG4gICAgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWI7XG4gICAgd2lkdGhcblxuXG4gIGxldCBpZ25vcmVfY2hhciB3aWR0aCBpYiA9IHNraXBfY2hhciAod2lkdGggLSAxKSBpYlxuXG4gIGxldCBzdG9yZV9jaGFyIHdpZHRoIGliIGMgPVxuICAgIEJ1ZmZlci5hZGRfY2hhciBpYi5pY190b2tlbl9idWZmZXIgYztcbiAgICBpZ25vcmVfY2hhciB3aWR0aCBpYlxuXG5cbiAgbGV0IGRlZmF1bHRfdG9rZW5fYnVmZmVyX3NpemUgPSAxMDI0XG5cbiAgbGV0IGNyZWF0ZSBpbmFtZSBuZXh0ID0ge1xuICAgIGljX2VvZiA9IGZhbHNlO1xuICAgIGljX2N1cnJlbnRfY2hhciA9IG51bGxfY2hhcjtcbiAgICBpY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgPSBmYWxzZTtcbiAgICBpY19jaGFyX2NvdW50ID0gMDtcbiAgICBpY19saW5lX2NvdW50ID0gMDtcbiAgICBpY190b2tlbl9jb3VudCA9IDA7XG4gICAgaWNfZ2V0X25leHRfY2hhciA9IG5leHQ7XG4gICAgaWNfdG9rZW5fYnVmZmVyID0gQnVmZmVyLmNyZWF0ZSBkZWZhdWx0X3Rva2VuX2J1ZmZlcl9zaXplO1xuICAgIGljX2lucHV0X25hbWUgPSBpbmFtZTtcbiAgfVxuXG5cbiAgbGV0IGZyb21fc3RyaW5nIHMgPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgbGV0IG5leHQgKCkgPVxuICAgICAgaWYgIWkgPj0gbGVuIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGUgZWxzZVxuICAgICAgbGV0IGMgPSBzLlshaV0gaW5cbiAgICAgIGluY3IgaTtcbiAgICAgIGMgaW5cbiAgICBjcmVhdGUgRnJvbV9zdHJpbmcgbmV4dFxuXG5cbiAgbGV0IGZyb21fZnVuY3Rpb24gPSBjcmVhdGUgRnJvbV9mdW5jdGlvblxuXG4gICgqIFNjYW5uaW5nIGZyb20gYW4gaW5wdXQgY2hhbm5lbC4gKilcblxuICAoKiBQb3NpdGlvbiBvZiB0aGUgcHJvYmxlbTpcblxuICAgICBXZSBjYW5ub3QgcHJldmVudCB0aGUgc2Nhbm5pbmcgbWVjaGFuaXNtIHRvIHVzZSBvbmUgbG9va2FoZWFkIGNoYXJhY3RlcixcbiAgICAgaWYgbmVlZGVkIGJ5IHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGZvcm1hdCBzdHJpbmcgc3BlY2lmaWNhdGlvbnMgKGUuZy4gYVxuICAgICB0cmFpbGluZyAnc2tpcCBzcGFjZScgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybWF0IHN0cmluZyk7IGluIHRoaXMgY2FzZSxcbiAgICAgdGhlIG1hbmRhdG9yeSBsb29rYWhlYWQgY2hhcmFjdGVyIGlzIGluZGVlZCByZWFkIGZyb20gdGhlIGlucHV0IGFuZCBub3RcbiAgICAgdXNlZCB0byByZXR1cm4gdGhlIHRva2VuIHJlYWQuIEl0IGlzIHRodXMgbWFuZGF0b3J5IHRvIGJlIGFibGUgdG8gc3RvcmVcbiAgICAgYW4gdW51c2VkIGxvb2thaGVhZCBjaGFyYWN0ZXIgc29tZXdoZXJlIHRvIGdldCBpdCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgIG9mIHRoZSBuZXh0IHNjYW4uXG5cbiAgICAgVG8gY2lyY3VtdmVudCB0aGlzIHByb2JsZW0sIGFsbCB0aGUgc2Nhbm5pbmcgZnVuY3Rpb25zIGdldCBhIGxvdyBsZXZlbFxuICAgICBpbnB1dCBidWZmZXIgYXJndW1lbnQgd2hlcmUgdGhleSBzdG9yZSB0aGUgbG9va2FoZWFkIGNoYXJhY3RlciB3aGVuXG4gICAgIG5lZWRlZDsgYWRkaXRpb25hbGx5LCB0aGUgaW5wdXQgYnVmZmVyIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBjaGFyYWN0ZXIgb2ZcbiAgICAgYSBzY2FubmVyLiBUaGUgW3NjYW5idWZdIGlucHV0IGJ1ZmZlcnMgYXJlIGRlZmluZWQgaW4gbW9kdWxlIHshU2Nhbm5pbmd9LlxuXG4gICAgIE5vdyB3ZSB1bmRlcnN0YW5kIHRoYXQgaXQgaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0aGF0IHJlbGF0ZWQgYW5kXG4gICAgIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gc2Nhbm5lcnMgaW5kZWVkIHJlYWQgZnJvbSB0aGUgc2FtZSBpbnB1dCBidWZmZXIuXG4gICAgIEluIGVmZmVjdCwgaWYgYSBzY2FubmVyIFtzY2FuMV0gaXMgcmVhZGluZyBmcm9tIFtpYjFdIGFuZCBzdG9yZXMgYW5cbiAgICAgdW51c2VkIGxvb2thaGVhZCBjaGFyYWN0ZXIgW2MxXSBpbnRvIGl0cyBpbnB1dCBidWZmZXIgW2liMV0sIHRoZW5cbiAgICAgYW5vdGhlciBzY2FubmVyIFtzY2FuMl0gbm90IHJlYWRpbmcgZnJvbSB0aGUgc2FtZSBidWZmZXIgW2liMV0gd2lsbCBtaXNzXG4gICAgIHRoZSBjaGFyYWN0ZXIgW2MxXSwgc2VlbWluZ2x5IHZhbmlzaGVkIGluIHRoZSBhaXIgZnJvbSB0aGUgcG9pbnQgb2Ygdmlld1xuICAgICBvZiBbc2NhbjJdLlxuXG4gICAgIFRoaXMgbWVjaGFuaXNtIHdvcmtzIHBlcmZlY3RseSB0byByZWFkIGZyb20gc3RyaW5ncywgZnJvbSBmaWxlcywgYW5kIGZyb21cbiAgICAgZnVuY3Rpb25zLCBzaW5jZSBpbiB0aG9zZSBjYXNlcywgYWxsb2NhdGluZyB0d28gYnVmZmVycyByZWFkaW5nIGZyb20gdGhlXG4gICAgIHNhbWUgc291cmNlIGlzIHVubmF0dXJhbC5cblxuICAgICBTdGlsbCwgdGhlcmUgaXMgYSBkaWZmaWN1bHR5IGluIHRoZSBjYXNlIG9mIHNjYW5uaW5nIGZyb20gYW4gaW5wdXRcbiAgICAgY2hhbm5lbC4gSW4gZWZmZWN0LCB3aGVuIHNjYW5uaW5nIGZyb20gYW4gaW5wdXQgY2hhbm5lbCBbaWNdLCB0aGlzIGNoYW5uZWxcbiAgICAgbWF5IG5vdCBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gd2l0aGluIHRoaXMgbGlicmFyeS4gSGVuY2UsIGl0IG1heSBiZVxuICAgICBzaGFyZWQgKHR3byBmdW5jdGlvbnMgb2YgdGhlIHVzZXIncyBwcm9ncmFtIG1heSBzdWNjZXNzaXZlbHkgcmVhZCBmcm9tXG4gICAgIFtpY10pLiBUaGlzIGlzIGhpZ2hseSBlcnJvciBwcm9uZSBzaW5jZSwgb25lIG9mIHRoZSBmdW5jdGlvbiBtYXkgc2VlayB0aGVcbiAgICAgaW5wdXQgY2hhbm5lbCwgd2hpbGUgdGhlIG90aGVyIGZ1bmN0aW9uIGhhcyBzdGlsbCBhbiB1bnVzZWQgbG9va2FoZWFkXG4gICAgIGNoYXJhY3RlciBpbiBpdHMgaW5wdXQgYnVmZmVyLiBJbiBjb25jbHVzaW9uLCB5b3Ugc2hvdWxkIG5ldmVyIG1peCBkaXJlY3RcbiAgICAgbG93IGxldmVsIHJlYWRpbmcgYW5kIGhpZ2ggbGV2ZWwgc2Nhbm5pbmcgZnJvbSB0aGUgc2FtZSBpbnB1dCBjaGFubmVsLlxuXG4gICopXG5cbiAgKCogUGVyZm9ybSBidWZmZXJpemVkIGlucHV0IHRvIGltcHJvdmUgZWZmaWNpZW5jeS4gKilcbiAgbGV0IGZpbGVfYnVmZmVyX3NpemUgPSByZWYgMTAyNFxuXG4gICgqIFRoZSBzY2FubmVyIGNsb3NlcyB0aGUgaW5wdXQgY2hhbm5lbCBhdCBlbmQgb2YgaW5wdXQuICopXG4gIGxldCBzY2FuX2Nsb3NlX2F0X2VuZCBpYyA9IFN0ZGxpYi5jbG9zZV9pbiBpYzsgcmFpc2UgRW5kX29mX2ZpbGVcblxuICAoKiBUaGUgc2Nhbm5lciBkb2VzIG5vdCBjbG9zZSB0aGUgaW5wdXQgY2hhbm5lbCBhdCBlbmQgb2YgaW5wdXQ6XG4gICAgIGl0IGp1c3QgcmFpc2VzIFtFbmRfb2ZfZmlsZV0uICopXG4gIGxldCBzY2FuX3JhaXNlX2F0X2VuZCBfaWMgPSByYWlzZSBFbmRfb2ZfZmlsZVxuXG4gIGxldCBmcm9tX2ljIHNjYW5fY2xvc2VfaWMgaW5hbWUgaWMgPVxuICAgIGxldCBsZW4gPSAhZmlsZV9idWZmZXJfc2l6ZSBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgbGVuIGluXG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCBsaW0gPSByZWYgMCBpblxuICAgIGxldCBlb2YgPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgbmV4dCAoKSA9XG4gICAgICBpZiAhaSA8ICFsaW0gdGhlbiBiZWdpbiBsZXQgYyA9IEJ5dGVzLmdldCBidWYgIWkgaW4gaW5jciBpOyBjIGVuZCBlbHNlXG4gICAgICBpZiAhZW9mIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGUgZWxzZSBiZWdpblxuICAgICAgICBsaW0gOj0gaW5wdXQgaWMgYnVmIDAgbGVuO1xuICAgICAgICBpZiAhbGltID0gMCB0aGVuIGJlZ2luIGVvZiA6PSB0cnVlOyBzY2FuX2Nsb3NlX2ljIGljIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgaSA6PSAxO1xuICAgICAgICAgIEJ5dGVzLmdldCBidWYgMFxuICAgICAgICBlbmRcbiAgICAgIGVuZCBpblxuICAgIGNyZWF0ZSBpbmFtZSBuZXh0XG5cblxuICBsZXQgZnJvbV9pY19jbG9zZV9hdF9lbmQgPSBmcm9tX2ljIHNjYW5fY2xvc2VfYXRfZW5kXG4gIGxldCBmcm9tX2ljX3JhaXNlX2F0X2VuZCA9IGZyb21faWMgc2Nhbl9yYWlzZV9hdF9lbmRcblxuICAoKiBUaGUgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXS5cbiAgICAgT25lIGNvdWxkIHRyeSB0byBkZWZpbmUgW3N0ZGliXSBhcyBhIHNjYW5uaW5nIGJ1ZmZlciByZWFkaW5nIGEgY2hhcmFjdGVyXG4gICAgIGF0IGEgdGltZSAobm8gYnVmZmVyaXphdGlvbiBhdCBhbGwpLCBidXQgdW5mb3J0dW5hdGVseSB0aGUgdG9wLWxldmVsXG4gICAgIGludGVyYWN0aW9uIHdvdWxkIGJlIHdyb25nLiBUaGlzIGlzIGR1ZSB0byBzb21lIGtpbmQgb2ZcbiAgICAgJ3JhY2UgY29uZGl0aW9uJyB3aGVuIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXSxcbiAgICAgc2luY2UgdGhlIGludGVyYWN0aXZlIGNvbXBpbGVyIGFuZCBbU2NhbmYuc2NhbmZdIHdpbGwgc2ltdWx0YW5lb3VzbHlcbiAgICAgcmVhZCB0aGUgbWF0ZXJpYWwgdGhleSBuZWVkIGZyb20gW1N0ZGxpYi5zdGRpbl07IHRoZW4sIGNvbmZ1c2lvblxuICAgICB3aWxsIHJlc3VsdCBmcm9tIHdoYXQgc2hvdWxkIGJlIHJlYWQgYnkgdGhlIHRvcC1sZXZlbCBhbmQgd2hhdCBzaG91bGQgYmVcbiAgICAgcmVhZCBieSBbU2NhbmYuc2NhbmZdLlxuICAgICBUaGlzIGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCBieSB0aGUgb25lIGNoYXJhY3RlciBsb29rYWhlYWQgdGhhdFxuICAgICBbU2NhbmYuc2NhbmZdIGlzIHNvbWV0aW1lcyBvYmxpZ2VkIHRvIG1haW50YWluOiB0aGUgbG9va2FoZWFkIGNoYXJhY3RlclxuICAgICB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgW1NjYW5mLnNjYW5mXSBlbnRyeSwgc2VlbWluZ2x5IGNvbWluZyBmcm9tXG4gICAgIG5vd2hlcmUuXG4gICAgIEFsc28gbm8gW0VuZF9vZl9maWxlXSBpcyByYWlzZWQgd2hlbiByZWFkaW5nIGZyb20gc3RkaW46IGlmIG5vdCBlbm91Z2hcbiAgICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gcmVhZCwgd2Ugc2ltcGx5IGFzayB0byByZWFkIG1vcmUuICopXG4gIGxldCBzdGRpbiA9XG4gICAgZnJvbV9pYyBzY2FuX3JhaXNlX2F0X2VuZFxuICAgICAgKEZyb21fZmlsZSAoXCItXCIsIFN0ZGxpYi5zdGRpbikpIFN0ZGxpYi5zdGRpblxuXG5cbiAgbGV0IHN0ZGliID0gc3RkaW5cblxuICBsZXQgb3Blbl9pbl9maWxlIG9wZW5faW4gZm5hbWUgPVxuICAgIG1hdGNoIGZuYW1lIHdpdGhcbiAgICB8IFwiLVwiIC0+IHN0ZGluXG4gICAgfCBmbmFtZSAtPlxuICAgICAgbGV0IGljID0gb3Blbl9pbiBmbmFtZSBpblxuICAgICAgZnJvbV9pY19jbG9zZV9hdF9lbmQgKEZyb21fZmlsZSAoZm5hbWUsIGljKSkgaWNcblxuXG4gIGxldCBvcGVuX2luID0gb3Blbl9pbl9maWxlIFN0ZGxpYi5vcGVuX2luXG4gIGxldCBvcGVuX2luX2JpbiA9IG9wZW5faW5fZmlsZSBTdGRsaWIub3Blbl9pbl9iaW5cblxuICBsZXQgZnJvbV9maWxlID0gb3Blbl9pblxuICBsZXQgZnJvbV9maWxlX2JpbiA9IG9wZW5faW5fYmluXG5cbiAgbGV0IGZyb21fY2hhbm5lbCBpYyA9XG4gICAgZnJvbV9pY19yYWlzZV9hdF9lbmQgKEZyb21fY2hhbm5lbCBpYykgaWNcblxuXG4gIGxldCBjbG9zZV9pbiBpYiA9XG4gICAgbWF0Y2ggaWIuaWNfaW5wdXRfbmFtZSB3aXRoXG4gICAgfCBGcm9tX2NoYW5uZWwgaWMgLT5cbiAgICAgIFN0ZGxpYi5jbG9zZV9pbiBpY1xuICAgIHwgRnJvbV9maWxlIChfZm5hbWUsIGljKSAtPiBTdGRsaWIuY2xvc2VfaW4gaWNcbiAgICB8IEZyb21fZnVuY3Rpb24gfCBGcm9tX3N0cmluZyAtPiAoKVxuXG5cbiAgKCpcbiAgICAgT2Jzb2xldGU6IGEgbWVtbyBbZnJvbV9jaGFubmVsXSB2ZXJzaW9uIHRvIGJ1aWxkIGEgW1NjYW5uaW5nLmluX2NoYW5uZWxdXG4gICAgIHNjYW5uaW5nIGJ1ZmZlciBvdXQgb2YgYSBbU3RkbGliLmluX2NoYW5uZWxdLlxuICAgICBUaGlzIGZ1bmN0aW9uIHdhcyB1c2VkIHRvIHRyeSB0byBwcmVzZXJ2ZSB0aGUgc2Nhbm5pbmdcbiAgICAgc2VtYW50aWNzIGZvciB0aGUgKG5vdyBvYnNvbGV0ZSkgZnVuY3Rpb24gW2ZzY2FuZl0uXG4gICAgIEdpdmVuIHRoYXQgYWxsIHNjYW5uZXIgbXVzdCByZWFkIGZyb20gYSBbU2Nhbm5pbmcuaW5fY2hhbm5lbF0gc2Nhbm5pbmdcbiAgICAgYnVmZmVyLCBbZnNjYW5mXSBtdXN0IHJlYWQgZnJvbSBvbmUhXG4gICAgIE1vcmUgcHJlY2lzZWx5LCBnaXZlbiBbaWNdLCBhbGwgc3VjY2Vzc2l2ZSBjYWxscyBbZnNjYW5mIGljXSBtdXN0IHJlYWRcbiAgICAgZnJvbSB0aGUgc2FtZSBzY2FubmluZyBidWZmZXIuXG4gICAgIFRoaXMgb2JsaWdlZCB0aGlzIGxpYnJhcnkgdG8gYWxsb2NhdGVkIHNjYW5uaW5nIGJ1ZmZlcnMgdGhhdCB3ZXJlXG4gICAgIG5vdCBwcm9wZXJseSBnYXJiYWdlIGNvbGxlY3RhYmxlLCBoZW5jZSBsZWFkaW5nIHRvIG1lbW9yeSBsZWFrcy5cbiAgICAgSWYgeW91IG5lZWQgdG8gcmVhZCBmcm9tIGEgW1N0ZGxpYi5pbl9jaGFubmVsXSBpbnB1dCBjaGFubmVsXG4gICAgIFtpY10sIHNpbXBseSBkZWZpbmUgYSBbU2Nhbm5pbmcuaW5fY2hhbm5lbF0gZm9ybWF0dGVkIGlucHV0IGNoYW5uZWwgYXMgaW5cbiAgICAgW2xldCBpYiA9IFNjYW5uaW5nLmZyb21fY2hhbm5lbCBpY10sIHRoZW4gdXNlIFtTY2FuZi5ic2NhbmYgaWJdIGFzIHVzdWFsLlxuICAqKVxuICBsZXQgbWVtb19mcm9tX2ljID1cbiAgICBsZXQgbWVtbyA9IHJlZiBbXSBpblxuICAgIChmdW4gc2Nhbl9jbG9zZV9pYyBpYyAtPlxuICAgICB0cnkgTGlzdC5hc3NxIGljICFtZW1vIHdpdGhcbiAgICAgfCBOb3RfZm91bmQgLT5cbiAgICAgICBsZXQgaWIgPVxuICAgICAgICAgZnJvbV9pYyBzY2FuX2Nsb3NlX2ljIChGcm9tX2NoYW5uZWwgaWMpIGljIGluXG4gICAgICAgbWVtbyA6PSAoaWMsIGliKSA6OiAhbWVtbztcbiAgICAgICBpYilcblxuXG4gICgqIE9ic29sZXRlOiBzZWUgeyFtZW1vX2Zyb21faWN9IGFib3ZlLiAqKVxuICBsZXQgbWVtb19mcm9tX2NoYW5uZWwgPSBtZW1vX2Zyb21faWMgc2Nhbl9yYWlzZV9hdF9lbmRcblxuZW5kXG5cblxuKCogRm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucy4gKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIHNjYW5uZXIgPVxuICAgICAoJ2EsIFNjYW5uaW5nLmluX2NoYW5uZWwsICdiLCAnYywgJ2EgLT4gJ2QsICdkKSBmb3JtYXQ2IC0+ICdjXG5cblxuKCogUmVwb3J0aW5nIGVycm9ycy4gKilcbmV4Y2VwdGlvbiBTY2FuX2ZhaWx1cmUgb2Ygc3RyaW5nXG5cbmxldCBiYWRfaW5wdXQgcyA9IHJhaXNlIChTY2FuX2ZhaWx1cmUgcylcblxubGV0IGJhZF9pbnB1dF9lc2NhcGUgYyA9XG4gIGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJpbGxlZ2FsIGVzY2FwZSBjaGFyYWN0ZXIgJUNcIiBjKVxuXG5cbmxldCBiYWRfdG9rZW5fbGVuZ3RoIG1lc3NhZ2UgPVxuICBiYWRfaW5wdXRcbiAgICAoUHJpbnRmLnNwcmludGZcbiAgICAgICBcInNjYW5uaW5nIG9mICVzIGZhaWxlZDogXFxcbiAgICAgICAgdGhlIHNwZWNpZmllZCBsZW5ndGggd2FzIHRvbyBzaG9ydCBmb3IgdG9rZW5cIlxuICAgICAgIG1lc3NhZ2UpXG5cblxubGV0IGJhZF9lbmRfb2ZfaW5wdXQgbWVzc2FnZSA9XG4gIGJhZF9pbnB1dFxuICAgIChQcmludGYuc3ByaW50ZlxuICAgICAgIFwic2Nhbm5pbmcgb2YgJXMgZmFpbGVkOiBcXFxuICAgICAgICBwcmVtYXR1cmUgZW5kIG9mIGZpbGUgb2NjdXJyZWQgYmVmb3JlIGVuZCBvZiB0b2tlblwiXG4gICAgICAgbWVzc2FnZSlcblxuXG5sZXQgYmFkX2Zsb2F0ICgpID1cbiAgYmFkX2lucHV0IFwibm8gZG90IG9yIGV4cG9uZW50IHBhcnQgZm91bmQgaW4gZmxvYXQgdG9rZW5cIlxuXG5cbmxldCBiYWRfaGV4X2Zsb2F0ICgpID1cbiAgYmFkX2lucHV0IFwibm90IGEgdmFsaWQgZmxvYXQgaW4gaGV4YWRlY2ltYWwgbm90YXRpb25cIlxuXG5cbmxldCBjaGFyYWN0ZXJfbWlzbWF0Y2hfZXJyIGMgY2kgPVxuICBQcmludGYuc3ByaW50ZiBcImxvb2tpbmcgZm9yICVDLCBmb3VuZCAlQ1wiIGMgY2lcblxuXG5sZXQgY2hhcmFjdGVyX21pc21hdGNoIGMgY2kgPVxuICBiYWRfaW5wdXQgKGNoYXJhY3Rlcl9taXNtYXRjaF9lcnIgYyBjaSlcblxuXG5sZXQgcmVjIHNraXBfd2hpdGVzIGliID1cbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgbm90IChTY2FubmluZy5lb2YgaWIpIHRoZW4gYmVnaW5cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICcgJyB8ICdcXHQnIHwgJ1xcbicgfCAnXFxyJyAtPlxuICAgICAgU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWI7IHNraXBfd2hpdGVzIGliXG4gICAgfCBfIC0+ICgpXG4gIGVuZFxuXG5cbigqIENoZWNraW5nIHRoYXQgW2NdIGlzIGluZGVlZCBpbiB0aGUgaW5wdXQsIHRoZW4gc2tpcHMgaXQuXG4gICBJbiB0aGlzIGNhc2UsIHRoZSBjaGFyYWN0ZXIgW2NdIGhhcyBiZWVuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHRoZVxuICAgZm9ybWF0IGFzIGJlaW5nIG1hbmRhdG9yeSBpbiB0aGUgaW5wdXQ7IGhlbmNlIHdlIHNob3VsZCBmYWlsIHdpdGhcbiAgIFtFbmRfb2ZfZmlsZV0gaW4gY2FzZSBvZiBlbmRfb2ZfaW5wdXQuXG4gICAoUmVtZW1iZXIgdGhhdCBbU2Nhbl9mYWlsdXJlXSBpcyByYWlzZWQgb25seSB3aGVuICh3ZSBjYW4gcHJvdmUgYnlcbiAgIGV2aWRlbmNlKSB0aGF0IHRoZSBpbnB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgZm9ybWF0IHN0cmluZyBnaXZlbi4gV2UgbXVzdFxuICAgdGh1cyBkaWZmZXJlbnRpYXRlIFtFbmRfb2ZfZmlsZV0gYXMgYW4gZXJyb3IgZHVlIHRvIGxhY2sgb2YgaW5wdXQsIGFuZFxuICAgW1NjYW5fZmFpbHVyZV0gd2hpY2ggaXMgZHVlIHRvIHByb3ZhYmx5IHdyb25nIGlucHV0LiBJIGFtIG5vdCBzdXJlIHRoaXMgaXNcbiAgIHdvcnRoIHRoZSBidXJkZW46IGl0IGlzIGNvbXBsZXggYW5kIHNvbWVob3cgc3VibGltaW5hbDsgc2hvdWxkIGJlIGNsZWFyZXJcbiAgIHRvIGZhaWwgd2l0aCBTY2FuX2ZhaWx1cmUgXCJOb3QgZW5vdWdoIGlucHV0IHRvIGNvbXBsZXRlIHNjYW5uaW5nXCIhKVxuXG4gICBUaGF0J3Mgd2h5LCB3YWl0aW5nIGZvciBhIGJldHRlciBzb2x1dGlvbiwgd2UgdXNlIGNoZWNrZWRfcGVla19jaGFyIGhlcmUuXG4gICBXZSBhcmUgYWxzbyBjYXJlZnVsIHRvIHRyZWF0IFwiXFxyXFxuXCIgaW4gdGhlIGlucHV0IGFzIGFuIGVuZCBvZiBsaW5lIG1hcmtlcjpcbiAgIGl0IGFsd2F5cyBtYXRjaGVzIGEgJ1xcbicgc3BlY2lmaWNhdGlvbiBpbiB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZy4gKilcbmxldCByZWMgY2hlY2tfY2hhciBpYiBjID1cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJyAnIC0+IHNraXBfd2hpdGVzIGliXG4gIHwgJ1xcbicgLT4gY2hlY2tfbmV3bGluZSBpYlxuICB8IGMgLT4gY2hlY2tfdGhpc19jaGFyIGliIGNcblxuYW5kIGNoZWNrX3RoaXNfY2hhciBpYiBjID1cbiAgbGV0IGNpID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgaWYgY2kgPSBjIHRoZW4gU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWIgZWxzZVxuICBjaGFyYWN0ZXJfbWlzbWF0Y2ggYyBjaVxuXG5hbmQgY2hlY2tfbmV3bGluZSBpYiA9XG4gIGxldCBjaSA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIG1hdGNoIGNpIHdpdGhcbiAgfCAnXFxuJyAtPiBTY2FubmluZy5pbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYlxuICB8ICdcXHInIC0+IFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliOyBjaGVja190aGlzX2NoYXIgaWIgJ1xcbidcbiAgfCBfIC0+IGNoYXJhY3Rlcl9taXNtYXRjaCAnXFxuJyBjaVxuXG5cbigqIEV4dHJhY3RpbmcgdG9rZW5zIGZyb20gdGhlIG91dHB1dCB0b2tlbiBidWZmZXIuICopXG5cbmxldCB0b2tlbl9jaGFyIGliID0gKFNjYW5uaW5nLnRva2VuIGliKS5bMF1cblxubGV0IHRva2VuX3N0cmluZyA9IFNjYW5uaW5nLnRva2VuXG5cbmxldCB0b2tlbl9ib29sIGliID1cbiAgbWF0Y2ggU2Nhbm5pbmcudG9rZW4gaWIgd2l0aFxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBzIC0+IGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJpbnZhbGlkIGJvb2xlYW4gJyVzJ1wiIHMpXG5cblxuKCogVGhlIHR5cGUgb2YgaW50ZWdlciBjb252ZXJzaW9ucy4gKilcbnR5cGUgaW50ZWdlcl9jb252ZXJzaW9uID1cbiAgfCBCX2NvbnZlcnNpb24gKCogVW5zaWduZWQgYmluYXJ5IGNvbnZlcnNpb24gKilcbiAgfCBEX2NvbnZlcnNpb24gKCogU2lnbmVkIGRlY2ltYWwgY29udmVyc2lvbiAqKVxuICB8IElfY29udmVyc2lvbiAoKiBTaWduZWQgaW50ZWdlciBjb252ZXJzaW9uICopXG4gIHwgT19jb252ZXJzaW9uICgqIFVuc2lnbmVkIG9jdGFsIGNvbnZlcnNpb24gKilcbiAgfCBVX2NvbnZlcnNpb24gKCogVW5zaWduZWQgZGVjaW1hbCBjb252ZXJzaW9uICopXG4gIHwgWF9jb252ZXJzaW9uICgqIFVuc2lnbmVkIGhleGFkZWNpbWFsIGNvbnZlcnNpb24gKilcblxuXG5sZXQgaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgPSBmdW5jdGlvblxuICB8ICdiJyAtPiBCX2NvbnZlcnNpb25cbiAgfCAnZCcgLT4gRF9jb252ZXJzaW9uXG4gIHwgJ2knIC0+IElfY29udmVyc2lvblxuICB8ICdvJyAtPiBPX2NvbnZlcnNpb25cbiAgfCAndScgLT4gVV9jb252ZXJzaW9uXG4gIHwgJ3gnIHwgJ1gnIC0+IFhfY29udmVyc2lvblxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cblxuKCogRXh0cmFjdCBhbiBpbnRlZ2VyIGxpdGVyYWwgdG9rZW4uXG4gICBTaW5jZSB0aGUgZnVuY3Rpb25zIFN0ZGxpYi4qaW50Kl9vZl9zdHJpbmcgZG8gbm90IGFjY2VwdCBhIGxlYWRpbmcgKyxcbiAgIHdlIHNraXAgaXQgaWYgbmVjZXNzYXJ5LiAqKVxubGV0IHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIgPVxuICBsZXQgdG9rID1cbiAgICBtYXRjaCBjb252IHdpdGhcbiAgICB8IERfY29udmVyc2lvbiB8IElfY29udmVyc2lvbiAtPiBTY2FubmluZy50b2tlbiBpYlxuICAgIHwgVV9jb252ZXJzaW9uIC0+IFwiMHVcIiBeIFNjYW5uaW5nLnRva2VuIGliXG4gICAgfCBPX2NvbnZlcnNpb24gLT4gXCIwb1wiIF4gU2Nhbm5pbmcudG9rZW4gaWJcbiAgICB8IFhfY29udmVyc2lvbiAtPiBcIjB4XCIgXiBTY2FubmluZy50b2tlbiBpYlxuICAgIHwgQl9jb252ZXJzaW9uIC0+IFwiMGJcIiBeIFNjYW5uaW5nLnRva2VuIGliIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCB0b2sgaW5cbiAgaWYgbCA9IDAgfHwgdG9rLlswXSA8PiAnKycgdGhlbiB0b2sgZWxzZSBTdHJpbmcuc3ViIHRvayAxIChsIC0gMSlcblxuXG4oKiBBbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBudW1iZXIgcmFpc2UgdGhlIGV4Y2VwdGlvblxuICAgRmFpbHVyZSB3aGVuIHRoZSBjb252ZXJzaW9uIGlzIG5vdCBwb3NzaWJsZS5cbiAgIFRoaXMgZXhjZXB0aW9uIGlzIHRoZW4gdHJhcHBlZCBpbiBba3NjYW5mXS4gKilcbmxldCB0b2tlbl9pbnQgY29udiBpYiA9IGludF9vZl9zdHJpbmcgKHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIpXG5cbmxldCB0b2tlbl9mbG9hdCBpYiA9IGZsb2F0X29mX3N0cmluZyAoU2Nhbm5pbmcudG9rZW4gaWIpXG5cbigqIFRvIHNjYW4gbmF0aXZlIGludHMsIGludDMyIGFuZCBpbnQ2NCBpbnRlZ2Vycy5cbiAgIFdlIGNhbm5vdCBhY2Nlc3MgdG8gY29udmVyc2lvbnMgdG8vZnJvbSBzdHJpbmdzIGZvciB0aG9zZSB0eXBlcyxcbiAgIE5hdGl2ZWludC5vZl9zdHJpbmcsIEludDMyLm9mX3N0cmluZywgYW5kIEludDY0Lm9mX3N0cmluZyxcbiAgIHNpbmNlIHRob3NlIG1vZHVsZXMgYXJlIG5vdCBhdmFpbGFibGUgdG8gW1NjYW5mXS5cbiAgIEhvd2V2ZXIsIHdlIGNhbiBiaW5kIGFuZCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgcHJpbWl0aXZlcyB0aGF0IGFyZVxuICAgYXZhaWxhYmxlIGluIHRoZSBydW50aW1lLiAqKVxuZXh0ZXJuYWwgbmF0aXZlaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBuYXRpdmVpbnRcbiAgPSBcImNhbWxfbmF0aXZlaW50X29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIGludDMyX29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQzMlxuICA9IFwiY2FtbF9pbnQzMl9vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCBpbnQ2NF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50NjRcbiAgPSBcImNhbWxfaW50NjRfb2Zfc3RyaW5nXCJcblxuXG5sZXQgdG9rZW5fbmF0aXZlaW50IGNvbnYgaWIgPSBuYXRpdmVpbnRfb2Zfc3RyaW5nICh0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliKVxubGV0IHRva2VuX2ludDMyIGNvbnYgaWIgPSBpbnQzMl9vZl9zdHJpbmcgKHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIpXG5sZXQgdG9rZW5faW50NjQgY29udiBpYiA9IGludDY0X29mX3N0cmluZyAodG9rZW5faW50X2xpdGVyYWwgY29udiBpYilcblxuKCogU2Nhbm5pbmcgbnVtYmVycy4gKilcblxuKCogRGlnaXRzIHNjYW5uaW5nIGZ1bmN0aW9ucyBzdXBwb3NlIHRoYXQgb25lIGNoYXJhY3RlciBoYXMgYmVlbiBjaGVja2VkIGFuZFxuICAgaXMgYXZhaWxhYmxlLCBzaW5jZSB0aGV5IHJldHVybiBhdCBlbmQgb2YgZmlsZSB3aXRoIHRoZSBjdXJyZW50bHkgZm91bmRcbiAgIHRva2VuIHNlbGVjdGVkLlxuXG4gICBQdXQgaXQgaW4gYW5vdGhlciB3YXksIHRoZSBkaWdpdHMgc2Nhbm5pbmcgZnVuY3Rpb25zIHNjYW4gZm9yIGEgcG9zc2libHlcbiAgIGVtcHR5IHNlcXVlbmNlIG9mIGRpZ2l0cywgKGhlbmNlLCBhIHN1Y2Nlc3NmdWwgc2Nhbm5pbmcgZnJvbSBvbmUgb2YgdGhvc2VcbiAgIGZ1bmN0aW9ucyBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZSB0b2tlbiBpcyBhIHdlbGwtZm9ybWVkIG51bWJlcjogdG8gZ2V0IGFcbiAgIHRydWUgbnVtYmVyLCBpdCBpcyBtYW5kYXRvcnkgdG8gY2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUgdmFsaWQgZGlnaXQgaXNcbiAgIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyBvbmUgb2YgdGhlIGRpZ2l0IHNjYW5uaW5nIGZ1bmN0aW9ucykuICopXG5cbigqIFRoZSBkZWNpbWFsIGNhc2UgaXMgdHJlYXRlZCBlc3BlY2lhbGx5IGZvciBvcHRpbWl6YXRpb24gcHVycG9zZXMuICopXG5sZXQgcmVjIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliXG4gIHwgJ18nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIgaW5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuICB8IF8gLT4gd2lkdGhcblxuXG5sZXQgc2Nhbl9kZWNpbWFsX2RpZ2l0X3BsdXMgd2lkdGggaWIgPVxuICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIFwiZGVjaW1hbCBkaWdpdHNcIiBlbHNlXG4gIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJzAnIC4uICc5JyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliXG4gIHwgYyAtPlxuICAgIGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJjaGFyYWN0ZXIgJUMgaXMgbm90IGEgZGVjaW1hbCBkaWdpdFwiIGMpXG5cblxuKCogVG8gc2NhbiBudW1iZXJzIGZyb20gb3RoZXIgYmFzZXMsIHdlIHVzZSBhIHByZWRpY2F0ZSBhcmd1bWVudCB0b1xuICAgc2NhbiBkaWdpdHMuICopXG5sZXQgc2Nhbl9kaWdpdF9zdGFyIGRpZ2l0cCB3aWR0aCBpYiA9XG4gIGxldCByZWMgc2Nhbl9kaWdpdHMgd2lkdGggaWIgPVxuICAgIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8IGMgd2hlbiBkaWdpdHAgYyAtPlxuICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICBzY2FuX2RpZ2l0cyB3aWR0aCBpYlxuICAgIHwgJ18nIC0+XG4gICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYiBpblxuICAgICAgc2Nhbl9kaWdpdHMgd2lkdGggaWJcbiAgICB8IF8gLT4gd2lkdGggaW5cbiAgc2Nhbl9kaWdpdHMgd2lkdGggaWJcblxuXG5sZXQgc2Nhbl9kaWdpdF9wbHVzIGJhc2lzIGRpZ2l0cCB3aWR0aCBpYiA9XG4gICgqIEVuc3VyZSB3ZSBoYXZlIGdvdCBlbm91Z2ggd2lkdGggbGVmdCxcbiAgICAgYW5kIHJlYWQgYXQgbGVhc3Qgb25lIGRpZ2l0LiAqKVxuICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIFwiZGlnaXRzXCIgZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIGlmIGRpZ2l0cCBjIHRoZW5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBzY2FuX2RpZ2l0X3N0YXIgZGlnaXRwIHdpZHRoIGliXG4gIGVsc2VcbiAgICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiY2hhcmFjdGVyICVDIGlzIG5vdCBhIHZhbGlkICVzIGRpZ2l0XCIgYyBiYXNpcylcblxuXG5sZXQgaXNfYmluYXJ5X2RpZ2l0ID0gZnVuY3Rpb25cbiAgfCAnMCcgLi4gJzEnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxubGV0IHNjYW5fYmluYXJ5X2ludCA9IHNjYW5fZGlnaXRfcGx1cyBcImJpbmFyeVwiIGlzX2JpbmFyeV9kaWdpdFxuXG5sZXQgaXNfb2N0YWxfZGlnaXQgPSBmdW5jdGlvblxuICB8ICcwJyAuLiAnNycgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuXG5sZXQgc2Nhbl9vY3RhbF9pbnQgPSBzY2FuX2RpZ2l0X3BsdXMgXCJvY3RhbFwiIGlzX29jdGFsX2RpZ2l0XG5cbmxldCBpc19oZXhhX2RpZ2l0ID0gZnVuY3Rpb25cbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuXG5sZXQgc2Nhbl9oZXhhZGVjaW1hbF9pbnQgPSBzY2FuX2RpZ2l0X3BsdXMgXCJoZXhhZGVjaW1hbFwiIGlzX2hleGFfZGlnaXRcblxuKCogU2NhbiBhIGRlY2ltYWwgaW50ZWdlci4gKilcbmxldCBzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50ID0gc2Nhbl9kZWNpbWFsX2RpZ2l0X3BsdXNcblxubGV0IHNjYW5fc2lnbiB3aWR0aCBpYiA9XG4gIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJysnIC0+IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgY1xuICB8ICctJyAtPiBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGNcbiAgfCBfIC0+IHdpZHRoXG5cblxubGV0IHNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWIgPVxuICBsZXQgd2lkdGggPSBzY2FuX3NpZ24gd2lkdGggaWIgaW5cbiAgc2Nhbl91bnNpZ25lZF9kZWNpbWFsX2ludCB3aWR0aCBpYlxuXG5cbigqIFNjYW4gYW4gdW5zaWduZWQgaW50ZWdlciB0aGF0IGNvdWxkIGJlIGdpdmVuIGluIGFueSAoY29tbW9uKSBiYXNpcy5cbiAgIElmIGRpZ2l0cyBhcmUgcHJlZml4ZWQgYnkgb25lIG9mIDB4LCAwWCwgMG8sIG9yIDBiLCB0aGUgbnVtYmVyIGlzXG4gICBhc3N1bWVkIHRvIGJlIHdyaXR0ZW4gcmVzcGVjdGl2ZWx5IGluIGhleGFkZWNpbWFsLCBoZXhhZGVjaW1hbCxcbiAgIG9jdGFsLCBvciBiaW5hcnkuICopXG5sZXQgc2Nhbl91bnNpZ25lZF9pbnQgd2lkdGggaWIgPVxuICBtYXRjaCBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiB3aXRoXG4gIHwgJzAnIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgYmVnaW4gbWF0Y2ggYyB3aXRoXG4gICAgfCAneCcgfCAnWCcgLT4gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaWJcbiAgICB8ICdvJyAtPiBzY2FuX29jdGFsX2ludCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICAgIHwgJ2InIC0+IHNjYW5fYmluYXJ5X2ludCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICAgIHwgXyAtPiBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYiBlbmRcbiAgfCBfIC0+IHNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcblxuXG5sZXQgc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9pbnQgd2lkdGggaWIgPVxuICBsZXQgd2lkdGggPSBzY2FuX3NpZ24gd2lkdGggaWIgaW5cbiAgc2Nhbl91bnNpZ25lZF9pbnQgd2lkdGggaWJcblxuXG5sZXQgc2Nhbl9pbnRfY29udmVyc2lvbiBjb252IHdpZHRoIGliID1cbiAgbWF0Y2ggY29udiB3aXRoXG4gIHwgQl9jb252ZXJzaW9uIC0+IHNjYW5fYmluYXJ5X2ludCB3aWR0aCBpYlxuICB8IERfY29udmVyc2lvbiAtPiBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG4gIHwgSV9jb252ZXJzaW9uIC0+IHNjYW5fb3B0aW9uYWxseV9zaWduZWRfaW50IHdpZHRoIGliXG4gIHwgT19jb252ZXJzaW9uIC0+IHNjYW5fb2N0YWxfaW50IHdpZHRoIGliXG4gIHwgVV9jb252ZXJzaW9uIC0+IHNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcbiAgfCBYX2NvbnZlcnNpb24gLT4gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgd2lkdGggaWJcblxuXG4oKiBTY2FubmluZyBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAqKVxuXG4oKiBGcmFjdGlvbmFsIHBhcnQgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSByZWR1Y2VkIHRvIDAgZGlnaXRzLiAqKVxubGV0IHNjYW5fZnJhY3Rpb25hbF9wYXJ0IHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGliXG4gIHwgXyAtPiB3aWR0aFxuXG5cbigqIEV4cCBwYXJ0IGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgcmVkdWNlZCB0byAwIGRpZ2l0cy4gKilcbmxldCBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWIgPVxuICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJ2UnIHwgJ0UnIGFzIGMgLT5cbiAgICBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGliXG4gIHwgXyAtPiB3aWR0aFxuXG5cbigqIFNjYW4gdGhlIGludGVnZXIgcGFydCBvZiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgKG5vdCB1c2luZyB0aGVcbiAgIE9DYW1sIGxleGljYWwgY29udmVudGlvbiBzaW5jZSB0aGUgaW50ZWdlciBwYXJ0IGNhbiBiZSBlbXB0eSk6XG4gICBhbiBvcHRpb25hbCBzaWduLCBmb2xsb3dlZCBieSBhIHBvc3NpYmx5IGVtcHR5IHNlcXVlbmNlIG9mIGRlY2ltYWxcbiAgIGRpZ2l0cyAoZS5nLiAtLjEpLiAqKVxubGV0IHNjYW5faW50ZWdlcl9wYXJ0IHdpZHRoIGliID1cbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliXG5cblxuKCpcbiAgIEZvciB0aGUgdGltZSBiZWluZyB3ZSBoYXZlIChhcyBmb3VuZCBpbiBzY2FuZi5tbGkpOlxuICAgdGhlIGZpZWxkIHdpZHRoIGlzIGNvbXBvc2VkIG9mIGFuIG9wdGlvbmFsIGludGVnZXIgbGl0ZXJhbFxuICAgaW5kaWNhdGluZyB0aGUgbWF4aW1hbCB3aWR0aCBvZiB0aGUgdG9rZW4gdG8gcmVhZC5cbiAgIFVuZm9ydHVuYXRlbHksIHRoZSB0eXBlLWNoZWNrZXIgbGV0IHRoZSB1c2VyIHdyaXRlIGFuIG9wdGlvbmFsIHByZWNpc2lvbixcbiAgIHNpbmNlIHRoaXMgaXMgdmFsaWQgZm9yIHByaW50ZiBmb3JtYXQgc3RyaW5ncy5cblxuICAgVGh1cywgdGhlIG5leHQgc3RlcCBmb3IgU2NhbmYgaXMgdG8gc3VwcG9ydCBhIGZ1bGwgd2lkdGggYW5kIHByZWNpc2lvblxuICAgaW5kaWNhdGlvbiwgbW9yZSBvciBsZXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmb3IgcHJpbnRmLCBwb3NzaWJseSBleHRlbmRlZFxuICAgdG8gdGhlIHNwZWNpZmljYXRpb24gb2YgYSBbbWF4LCBtaW5dIHJhbmdlIGZvciB0aGUgd2lkdGggb2YgdGhlIHRva2VuIHJlYWRcbiAgIGZvciBzdHJpbmdzLiBTb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHNwZWMgZm9yIHNjYW5mLm1saTpcblxuICAgVGhlIG9wdGlvbmFsIFt3aWR0aF0gaXMgYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBtYXhpbWFsXG4gICB3aWR0aCBvZiB0aGUgdG9rZW4gcmVhZC4gRm9yIGluc3RhbmNlLCBbJTZkXSByZWFkcyBhbiBpbnRlZ2VyLFxuICAgaGF2aW5nIGF0IG1vc3QgNiBjaGFyYWN0ZXJzLlxuXG4gICBUaGUgb3B0aW9uYWwgW3ByZWNpc2lvbl0gaXMgYSBkb3QgWy5dIGZvbGxvd2VkIGJ5IGFuIGludGVnZXI6XG5cbiAgIC0gaW4gdGhlIGZsb2F0aW5nIHBvaW50IG51bWJlciBjb252ZXJzaW9ucyAoWyVmXSwgWyVlXSwgWyVnXSwgWyVGXSwgWyVFXSxcbiAgIGFuZCBbJUZdIGNvbnZlcnNpb25zLCB0aGUgW3ByZWNpc2lvbl0gaW5kaWNhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZlxuICAgZGlnaXRzIHRoYXQgbWF5IGZvbGxvdyB0aGUgZGVjaW1hbCBwb2ludC4gRm9yIGluc3RhbmNlLCBbJS40Zl0gcmVhZHMgYVxuICAgW2Zsb2F0XSB3aXRoIGF0IG1vc3QgNCBmcmFjdGlvbmFsIGRpZ2l0cyxcblxuICAgLSBpbiB0aGUgc3RyaW5nIGNvbnZlcnNpb25zIChbJXNdLCBbJVNdLCBbJVxcWyByYW5nZSBcXF1dKSwgYW5kIGluIHRoZVxuICAgaW50ZWdlciBudW1iZXIgY29udmVyc2lvbnMgKFslaV0sIFslZF0sIFsldV0sIFsleF0sIFslb10sIGFuZCB0aGVpclxuICAgW2ludDMyXSwgW2ludDY0XSwgYW5kIFtuYXRpdmVfaW50XSBjb3JyZXNwb25kZW50KSwgdGhlIFtwcmVjaXNpb25dXG4gICBpbmRpY2F0ZXMgdGhlIHJlcXVpcmVkIG1pbmltdW0gd2lkdGggb2YgdGhlIHRva2VuIHJlYWQsXG5cbiAgIC0gb24gYWxsIG90aGVyIGNvbnZlcnNpb25zLCB0aGUgd2lkdGggYW5kIHByZWNpc2lvbiBzcGVjaWZ5IHRoZSBbbWF4LCBtaW5dXG4gICByYW5nZSBmb3IgdGhlIHdpZHRoIG9mIHRoZSB0b2tlbiByZWFkLlxuKilcbmxldCBzY2FuX2Zsb2F0IHdpZHRoIHByZWNpc2lvbiBpYiA9XG4gIGxldCB3aWR0aCA9IHNjYW5faW50ZWdlcl9wYXJ0IHdpZHRoIGliIGluXG4gIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoLCBwcmVjaXNpb24gZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCwgcHJlY2lzaW9uIGVsc2VcbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJy4nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgbGV0IHByZWNpc2lvbiA9IEludC5taW4gd2lkdGggcHJlY2lzaW9uIGluXG4gICAgbGV0IHdpZHRoID0gd2lkdGggLSAocHJlY2lzaW9uIC0gc2Nhbl9mcmFjdGlvbmFsX3BhcnQgcHJlY2lzaW9uIGliKSBpblxuICAgIHNjYW5fZXhwb25lbnRfcGFydCB3aWR0aCBpYiwgcHJlY2lzaW9uXG4gIHwgXyAtPlxuICAgIHNjYW5fZXhwb25lbnRfcGFydCB3aWR0aCBpYiwgcHJlY2lzaW9uXG5cblxubGV0IGNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIHdpZHRoIGliIGVycm9yIHN0ciA9XG4gIGxldCBsb3dlcmNhc2UgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnQScgLi4gJ1onIC0+XG4gICAgICBjaGFyX29mX2ludCAoaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdBJyArIGludF9vZl9jaGFyICdhJylcbiAgICB8IF8gLT4gYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHdpZHRoID0gcmVmIHdpZHRoIGluXG4gIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBsb3dlcmNhc2UgYyA8PiBsb3dlcmNhc2Ugc3RyLltpXSB0aGVuIGVycm9yICgpO1xuICAgIGlmICF3aWR0aCA9IDAgdGhlbiBlcnJvciAoKTtcbiAgICB3aWR0aCA6PSBTY2FubmluZy5zdG9yZV9jaGFyICF3aWR0aCBpYiBjO1xuICBkb25lO1xuICAhd2lkdGhcblxuXG5sZXQgc2Nhbl9oZXhfZmxvYXQgd2lkdGggcHJlY2lzaW9uIGliID1cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gIGxldCB3aWR0aCA9IHNjYW5fc2lnbiB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgfCAnMCcgYXMgYyAtPiAoXG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gICAgbGV0IHdpZHRoID0gY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmcgd2lkdGggaWIgYmFkX2hleF9mbG9hdCBcInhcIiBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICBsZXQgd2lkdGggPSBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICB8ICcuJyB8ICdwJyB8ICdQJyAtPiB3aWR0aFxuICAgICAgICB8IF8gLT4gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgd2lkdGggaWIgaW5cbiAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgIGxldCB3aWR0aCA9IG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgfCAnLicgYXMgYyAtPiAoXG4gICAgICAgICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgICAgIHwgJ3AnIHwgJ1AnIC0+IHdpZHRoXG4gICAgICAgICAgICAgIHwgXyAtPlxuICAgICAgICAgICAgICAgIGxldCBwcmVjaXNpb24gPSBJbnQubWluIHdpZHRoIHByZWNpc2lvbiBpblxuICAgICAgICAgICAgICAgIHdpZHRoIC0gKHByZWNpc2lvbiAtIHNjYW5faGV4YWRlY2ltYWxfaW50IHByZWNpc2lvbiBpYilcbiAgICAgICAgICApXG4gICAgICAgICAgfCBfIC0+IHdpZHRoIGluXG4gICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgICAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgICB8ICdwJyB8ICdQJyBhcyBjIC0+XG4gICAgICAgICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgICAgICAgICAgc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsX2ludCB3aWR0aCBpYlxuICAgICAgICAgIHwgXyAtPiB3aWR0aFxuICApXG4gIHwgJ24nIHwgJ04nIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICBjaGVja19jYXNlX2luc2Vuc2l0aXZlX3N0cmluZyB3aWR0aCBpYiBiYWRfaGV4X2Zsb2F0IFwiYW5cIlxuICB8ICdpJyB8ICdJJyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gICAgY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmcgd2lkdGggaWIgYmFkX2hleF9mbG9hdCBcIm5maW5pdHlcIlxuICB8IF8gLT4gYmFkX2hleF9mbG9hdCAoKVxuXG5cbmxldCBzY2FuX2NhbWxfZmxvYXRfcmVzdCB3aWR0aCBwcmVjaXNpb24gaWIgPVxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICBsZXQgd2lkdGggPSBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBtYXRjaCBjIHdpdGhcbiAgfCAnLicgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAoKiBUaGUgZWZmZWN0aXZlIHdpZHRoIGF2YWlsYWJsZSBmb3Igc2Nhbm5pbmcgdGhlIGZyYWN0aW9uYWwgcGFydCBpc1xuICAgICAgIHRoZSBtaW5pbXVtIG9mIGRlY2xhcmVkIHByZWNpc2lvbiBhbmQgd2lkdGggbGVmdC4gKilcbiAgICBsZXQgcHJlY2lzaW9uID0gSW50Lm1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAoKiBBZnRlciBzY2FubmluZyB0aGUgZnJhY3Rpb25hbCBwYXJ0IHdpdGggW3ByZWNpc2lvbl0gcHJvdmlzaW9uYWwgd2lkdGgsXG4gICAgICAgW3dpZHRoX3ByZWNpc2lvbl0gaXMgbGVmdC4gKilcbiAgICBsZXQgd2lkdGhfcHJlY2lzaW9uID0gc2Nhbl9mcmFjdGlvbmFsX3BhcnQgcHJlY2lzaW9uIGliIGluXG4gICAgKCogSGVuY2UsIHNjYW5uaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgdG9vayBleGFjdGx5XG4gICAgICAgW3ByZWNpc2lvbiAtIHdpZHRoX3ByZWNpc2lvbl0gY2hhcnMuICopXG4gICAgbGV0IGZyYWNfd2lkdGggPSBwcmVjaXNpb24gLSB3aWR0aF9wcmVjaXNpb24gaW5cbiAgICAoKiBBbmQgbmV3IHByb3Zpc2lvbmFsIHdpZHRoIGlzIFt3aWR0aCAtIHdpZHRoX3ByZWNpc2lvbi4gKilcbiAgICBsZXQgd2lkdGggPSB3aWR0aCAtIGZyYWNfd2lkdGggaW5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWJcbiAgfCAnZScgfCAnRScgLT5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWJcbiAgfCBfIC0+IGJhZF9mbG9hdCAoKVxuXG5cbmxldCBzY2FuX2NhbWxfZmxvYXQgd2lkdGggcHJlY2lzaW9uIGliID1cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gIHwgJzAnIGFzIGMgLT4gKFxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gICAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICB8ICd4JyB8ICdYJyBhcyBjIC0+IChcbiAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgICAgIGxldCB3aWR0aCA9IHNjYW5faGV4YWRlY2ltYWxfaW50IHdpZHRoIGliIGluXG4gICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICAgICAgbGV0IHdpZHRoID0gbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgfCAnLicgYXMgYyAtPiAoXG4gICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgICB8ICdwJyB8ICdQJyAtPiB3aWR0aFxuICAgICAgICAgICAgfCBfIC0+XG4gICAgICAgICAgICAgIGxldCBwcmVjaXNpb24gPSBJbnQubWluIHdpZHRoIHByZWNpc2lvbiBpblxuICAgICAgICAgICAgICB3aWR0aCAtIChwcmVjaXNpb24gLSBzY2FuX2hleGFkZWNpbWFsX2ludCBwcmVjaXNpb24gaWIpXG4gICAgICAgIClcbiAgICAgICAgfCAncCcgfCAnUCcgLT4gd2lkdGhcbiAgICAgICAgfCBfIC0+IGJhZF9mbG9hdCAoKSBpblxuICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgICAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgfCAncCcgfCAnUCcgYXMgYyAtPlxuICAgICAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgICAgICAgIHNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcbiAgICAgICAgfCBfIC0+IHdpZHRoXG4gICAgKVxuICAgIHwgXyAtPlxuICAgICAgc2Nhbl9jYW1sX2Zsb2F0X3Jlc3Qgd2lkdGggcHJlY2lzaW9uIGliXG4gIClcbiAgfCAnMScgLi4gJzknIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICAgIHNjYW5fY2FtbF9mbG9hdF9yZXN0IHdpZHRoIHByZWNpc2lvbiBpYlxuKCogU3BlY2lhbCBjYXNlIG9mIG5hbiBhbmQgaW5maW5pdHk6XG4gIHwgJ2knIC0+XG4gIHwgJ24nIC0+XG4qKVxuICB8IF8gLT4gYmFkX2Zsb2F0ICgpXG5cblxuKCogU2NhbiBhIHJlZ3VsYXIgc3RyaW5nOlxuICAgc3RvcHMgd2hlbiBlbmNvdW50ZXJpbmcgYSBzcGFjZSwgaWYgbm8gc2Nhbm5pbmcgaW5kaWNhdGlvbiBoYXMgYmVlbiBnaXZlbjtcbiAgIG90aGVyd2lzZSwgc3RvcHMgd2hlbiBlbmNvdW50ZXJpbmcgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHNjYW5uaW5nXG4gICBpbmRpY2F0aW9uIFtzdHBdLlxuICAgSXQgYWxzbyBzdG9wcyBhdCBlbmQgb2YgZmlsZSBvciB3aGVuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGhhc1xuICAgYmVlbiByZWFkLiAqKVxubGV0IHNjYW5fc3RyaW5nIHN0cCB3aWR0aCBpYiA9XG4gIGxldCByZWMgbG9vcCB3aWR0aCA9XG4gICAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICAgIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgbWF0Y2ggc3RwIHdpdGhcbiAgICAgIHwgU29tZSBjJyB3aGVuIGMgPSBjJyAtPiBTY2FubmluZy5za2lwX2NoYXIgd2lkdGggaWJcbiAgICAgIHwgU29tZSBfIC0+IGxvb3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYylcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICBtYXRjaCBjIHdpdGhcbiAgICAgICAgfCAnICcgfCAnXFx0JyB8ICdcXG4nIHwgJ1xccicgLT4gd2lkdGhcbiAgICAgICAgfCBfIC0+IGxvb3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaW5cbiAgbG9vcCB3aWR0aFxuXG5cbigqIFNjYW4gYSBjaGFyOiBwZWVrIHN0cmljdGx5IG9uZSBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0LCB3aGF0c29ldmVyLiAqKVxubGV0IHNjYW5fY2hhciB3aWR0aCBpYiA9XG4gICgqIFRoZSBjYXNlIHdpZHRoID0gMCBjb3VsZCBub3QgaGFwcGVuIGhlcmUsIHNpbmNlIGl0IGlzIHRlc3RlZCBiZWZvcmVcbiAgICAgY2FsbGluZyBzY2FuX2NoYXIsIGluIHRoZSBtYWluIHNjYW5uaW5nIGZ1bmN0aW9uLlxuICAgIGlmIHdpZHRoID0gMCB0aGVuIGJhZF90b2tlbl9sZW5ndGggXCJhIGNoYXJhY3RlclwiIGVsc2UgKilcbiAgU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiAoU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIpXG5cblxubGV0IGNoYXJfZm9yX2JhY2tzbGFzaCA9IGZ1bmN0aW9uXG4gIHwgJ24nIC0+ICdcXDAxMCdcbiAgfCAncicgLT4gJ1xcMDEzJ1xuICB8ICdiJyAtPiAnXFwwMDgnXG4gIHwgJ3QnIC0+ICdcXDAwOSdcbiAgfCBjIC0+IGNcblxuXG4oKiBUaGUgaW50ZWdlciB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYWNpYWwgdmFsdWUgb2YgYSB2YWxpZFxuICAgZGVjaW1hbCBkaWdpdCBjaGFyYWN0ZXIuICopXG5sZXQgZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMgPSBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnXG5cbmxldCBjaGFyX2Zvcl9kZWNpbWFsX2NvZGUgYzAgYzEgYzIgPVxuICBsZXQgYyA9XG4gICAgMTAwICogZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMwICtcbiAgICAgMTAgKiBkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYzEgK1xuICAgICAgICAgIGRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMiBpblxuICBpZiBjIDwgMCB8fCBjID4gMjU1IHRoZW5cbiAgICBiYWRfaW5wdXRcbiAgICAgIChQcmludGYuc3ByaW50ZlxuICAgICAgICAgXCJiYWQgY2hhcmFjdGVyIGRlY2ltYWwgZW5jb2RpbmcgXFxcXCVjJWMlY1wiIGMwIGMxIGMyKSBlbHNlXG4gIGNoYXJfb2ZfaW50IGNcblxuXG4oKiBUaGUgaW50ZWdlciB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYWNpYWwgdmFsdWUgb2YgYSB2YWxpZFxuICAgaGV4YWRlY2ltYWwgZGlnaXQgY2hhcmFjdGVyLiAqKVxubGV0IGhleGFkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYyA9XG4gIGxldCBkID0gaW50X29mX2NoYXIgYyBpblxuICAoKiBDb3VsZCBhbHNvIGJlOlxuICAgIGlmIGQgPD0gaW50X29mX2NoYXIgJzknIHRoZW4gZCAtIGludF9vZl9jaGFyICcwJyBlbHNlXG4gICAgaWYgZCA8PSBpbnRfb2ZfY2hhciAnRicgdGhlbiAxMCArIGQgLSBpbnRfb2ZfY2hhciAnQScgZWxzZVxuICAgIGlmIGQgPD0gaW50X29mX2NoYXIgJ2YnIHRoZW4gMTAgKyBkIC0gaW50X29mX2NoYXIgJ2EnIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICopXG4gIGlmIGQgPj0gaW50X29mX2NoYXIgJ2EnIHRoZW5cbiAgICBkIC0gODcgKCogMTAgKyBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ2EnICopIGVsc2VcbiAgaWYgZCA+PSBpbnRfb2ZfY2hhciAnQScgdGhlblxuICAgIGQgLSA1NSAgKCogMTAgKyBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICopIGVsc2VcbiAgICBkIC0gaW50X29mX2NoYXIgJzAnXG5cblxubGV0IGNoYXJfZm9yX2hleGFkZWNpbWFsX2NvZGUgYzEgYzIgPVxuICBsZXQgYyA9XG4gICAgMTYgKiBoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMxICtcbiAgICAgICAgIGhleGFkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYzIgaW5cbiAgaWYgYyA8IDAgfHwgYyA+IDI1NSB0aGVuXG4gICAgYmFkX2lucHV0XG4gICAgICAoUHJpbnRmLnNwcmludGYgXCJiYWQgY2hhcmFjdGVyIGhleGFkZWNpbWFsIGVuY29kaW5nIFxcXFwlYyVjXCIgYzEgYzIpIGVsc2VcbiAgY2hhcl9vZl9pbnQgY1xuXG5cbigqIENhbGxlZCBpbiBwYXJ0aWN1bGFyIHdoZW4gZW5jb3VudGVyaW5nICdcXFxcJyBhcyBzdGFydGVyIG9mIGEgY2hhci5cbiAgIFN0b3BzIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyAnXFwnJy4gKilcbmxldCBjaGVja19uZXh0X2NoYXIgbWVzc2FnZSB3aWR0aCBpYiA9XG4gIGlmIHdpZHRoID0gMCB0aGVuIGJhZF90b2tlbl9sZW5ndGggbWVzc2FnZSBlbHNlXG4gIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIGJhZF9lbmRfb2ZfaW5wdXQgbWVzc2FnZSBlbHNlXG4gIGNcblxuXG5sZXQgY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyID0gY2hlY2tfbmV4dF9jaGFyIFwiYSBDaGFyXCJcbmxldCBjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyA9IGNoZWNrX25leHRfY2hhciBcImEgU3RyaW5nXCJcblxubGV0IHNjYW5fYmFja3NsYXNoX2NoYXIgd2lkdGggaWIgPVxuICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX2NoYXIgd2lkdGggaWIgd2l0aFxuICB8ICdcXFxcJyB8ICdcXCcnIHwgJ1xcXCInIHwgJ24nIHwgJ3QnIHwgJ2InIHwgJ3InIGFzIGMgLT5cbiAgICBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIChjaGFyX2Zvcl9iYWNrc2xhc2ggYylcbiAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICBsZXQgZ2V0X2RpZ2l0ICgpID1cbiAgICAgIGxldCBjID0gU2Nhbm5pbmcubmV4dF9jaGFyIGliIGluXG4gICAgICBtYXRjaCBjIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+IGNcbiAgICAgIHwgYyAtPiBiYWRfaW5wdXRfZXNjYXBlIGMgaW5cbiAgICBsZXQgYzAgPSBjIGluXG4gICAgbGV0IGMxID0gZ2V0X2RpZ2l0ICgpIGluXG4gICAgbGV0IGMyID0gZ2V0X2RpZ2l0ICgpIGluXG4gICAgU2Nhbm5pbmcuc3RvcmVfY2hhciAod2lkdGggLSAyKSBpYiAoY2hhcl9mb3JfZGVjaW1hbF9jb2RlIGMwIGMxIGMyKVxuICB8ICd4JyAtPlxuICAgIGxldCBnZXRfZGlnaXQgKCkgPVxuICAgICAgbGV0IGMgPSBTY2FubmluZy5uZXh0X2NoYXIgaWIgaW5cbiAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIHwgJ0EnIC4uICdGJyB8ICdhJyAuLiAnZicgYXMgYyAtPiBjXG4gICAgICB8IGMgLT4gYmFkX2lucHV0X2VzY2FwZSBjIGluXG4gICAgbGV0IGMxID0gZ2V0X2RpZ2l0ICgpIGluXG4gICAgbGV0IGMyID0gZ2V0X2RpZ2l0ICgpIGluXG4gICAgU2Nhbm5pbmcuc3RvcmVfY2hhciAod2lkdGggLSAyKSBpYiAoY2hhcl9mb3JfaGV4YWRlY2ltYWxfY29kZSBjMSBjMilcbiAgfCBjIC0+XG4gICAgYmFkX2lucHV0X2VzY2FwZSBjXG5cblxuKCogU2NhbiBhIGNoYXJhY3RlciAoYW4gT0NhbWwgdG9rZW4pLiAqKVxubGV0IHNjYW5fY2FtbF9jaGFyIHdpZHRoIGliID1cblxuICBsZXQgcmVjIGZpbmRfc3RhcnQgd2lkdGggPVxuICAgIG1hdGNoIFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIHdpdGhcbiAgICB8ICdcXCcnIC0+IGZpbmRfY2hhciAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBjIC0+IGNoYXJhY3Rlcl9taXNtYXRjaCAnXFwnJyBjXG5cbiAgYW5kIGZpbmRfY2hhciB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXFxcJyAtPlxuICAgICAgZmluZF9zdG9wIChzY2FuX2JhY2tzbGFzaF9jaGFyIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYikgaWIpXG4gICAgfCBjIC0+XG4gICAgICBmaW5kX3N0b3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYylcblxuICBhbmQgZmluZF9zdG9wIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX2NoYXIgd2lkdGggaWIgd2l0aFxuICAgIHwgJ1xcJycgLT4gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWJcbiAgICB8IGMgLT4gY2hhcmFjdGVyX21pc21hdGNoICdcXCcnIGMgaW5cblxuICBmaW5kX3N0YXJ0IHdpZHRoXG5cblxuKCogU2NhbiBhIGRlbGltaXRlZCBzdHJpbmcgKGFuIE9DYW1sIHRva2VuKS4gKilcbmxldCBzY2FuX2NhbWxfc3RyaW5nIHdpZHRoIGliID1cblxuICBsZXQgcmVjIGZpbmRfc3RhcnQgd2lkdGggPVxuICAgIG1hdGNoIFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIHdpdGhcbiAgICB8ICdcXFwiJyAtPiBmaW5kX3N0b3AgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgYyAtPiBjaGFyYWN0ZXJfbWlzbWF0Y2ggJ1xcXCInIGNcblxuICBhbmQgZmluZF9zdG9wIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFxcIicgLT4gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWJcbiAgICB8ICdcXFxcJyAtPiBzY2FuX2JhY2tzbGFzaCAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBjIC0+IGZpbmRfc3RvcCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKVxuXG4gIGFuZCBzY2FuX2JhY2tzbGFzaCB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgd2lkdGggaWIgd2l0aFxuICAgIHwgJ1xccicgLT4gc2tpcF9uZXdsaW5lIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8ICdcXG4nIC0+IHNraXBfc3BhY2VzIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IF8gLT4gZmluZF9zdG9wIChzY2FuX2JhY2tzbGFzaF9jaGFyIHdpZHRoIGliKVxuXG4gIGFuZCBza2lwX25ld2xpbmUgd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXG4nIC0+IHNraXBfc3BhY2VzIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IF8gLT4gZmluZF9zdG9wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliICdcXHInKVxuXG4gIGFuZCBza2lwX3NwYWNlcyB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgd2lkdGggaWIgd2l0aFxuICAgIHwgJyAnIC0+IHNraXBfc3BhY2VzIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IF8gLT4gZmluZF9zdG9wIHdpZHRoIGluXG5cbiAgZmluZF9zdGFydCB3aWR0aFxuXG5cbigqIFNjYW4gYSBib29sZWFuIChhbiBPQ2FtbCB0b2tlbikuICopXG5sZXQgc2Nhbl9ib29sIGliID1cbiAgbGV0IGMgPSBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiBpblxuICBsZXQgbSA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAndCcgLT4gNFxuICAgIHwgJ2YnIC0+IDVcbiAgICB8IGMgLT5cbiAgICAgIGJhZF9pbnB1dFxuICAgICAgICAoUHJpbnRmLnNwcmludGYgXCJ0aGUgY2hhcmFjdGVyICVDIGNhbm5vdCBzdGFydCBhIGJvb2xlYW5cIiBjKSBpblxuICBzY2FuX3N0cmluZyBOb25lIG0gaWJcblxuXG4oKiBTY2FuIGEgc3RyaW5nIGNvbnRhaW5pbmcgZWxlbWVudHMgaW4gY2hhcl9zZXQgYW5kIHRlcm1pbmF0ZWQgYnkgc2Nhbl9pbmRpY1xuICAgaWYgcHJvdmlkZWQuICopXG5sZXQgc2Nhbl9jaGFyc19pbl9jaGFyX3NldCBjaGFyX3NldCBzY2FuX2luZGljIHdpZHRoIGliID1cbiAgbGV0IHJlYyBzY2FuX2NoYXJzIGkgc3RwID1cbiAgICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgIGlmIGkgPiAwICYmIG5vdCAoU2Nhbm5pbmcuZW9mIGliKSAmJlxuICAgICAgIGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgJiZcbiAgICAgICBpbnRfb2ZfY2hhciBjIDw+IHN0cCB0aGVuXG4gICAgICBsZXQgXyA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgbWF4X2ludCBpYiBjIGluXG4gICAgICBzY2FuX2NoYXJzIChpIC0gMSkgc3RwIGluXG4gIG1hdGNoIHNjYW5faW5kaWMgd2l0aFxuICB8IE5vbmUgLT4gc2Nhbl9jaGFycyB3aWR0aCAoLTEpO1xuICB8IFNvbWUgYyAtPlxuICAgIHNjYW5fY2hhcnMgd2lkdGggKGludF9vZl9jaGFyIGMpO1xuICAgIGlmIG5vdCAoU2Nhbm5pbmcuZW9mIGliKSB0aGVuXG4gICAgICBsZXQgY2kgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICAgIGlmIGMgPSBjaVxuICAgICAgdGhlbiBTY2FubmluZy5pbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYlxuICAgICAgZWxzZSBjaGFyYWN0ZXJfbWlzbWF0Y2ggYyBjaVxuXG5cbigqIFRoZSBnbG9iYWwgZXJyb3IgcmVwb3J0IGZ1bmN0aW9uIGZvciBbU2NhbmZdLiAqKVxubGV0IHNjYW5mX2JhZF9pbnB1dCBpYiA9IGZ1bmN0aW9uXG4gIHwgU2Nhbl9mYWlsdXJlIHMgfCBGYWlsdXJlIHMgLT5cbiAgICBsZXQgaSA9IFNjYW5uaW5nLmNoYXJfY291bnQgaWIgaW5cbiAgICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwic2NhbmY6IGJhZCBpbnB1dCBhdCBjaGFyIG51bWJlciAlaTogJXNcIiBpIHMpXG4gIHwgeCAtPiByYWlzZSB4XG5cblxuKCogR2V0IHRoZSBjb250ZW50IG9mIGEgY291bnRlciBmcm9tIGFuIGlucHV0IGJ1ZmZlci4gKilcbmxldCBnZXRfY291bnRlciBpYiBjb3VudGVyID1cbiAgbWF0Y2ggY291bnRlciB3aXRoXG4gIHwgTGluZV9jb3VudGVyIC0+IFNjYW5uaW5nLmxpbmVfY291bnQgaWJcbiAgfCBDaGFyX2NvdW50ZXIgLT4gU2Nhbm5pbmcuY2hhcl9jb3VudCBpYlxuICB8IFRva2VuX2NvdW50ZXIgLT4gU2Nhbm5pbmcudG9rZW5fY291bnQgaWJcblxuXG4oKiBDb21wdXRlIHRoZSB3aWR0aCBvZiBhIHBhZGRpbmcgb3B0aW9uIChzZWUgXCIlNDJ7XCIgYW5kIFwiJTEyMyhcIikuICopXG5sZXQgd2lkdGhfb2ZfcGFkX29wdCBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBtYXhfaW50XG4gIHwgU29tZSB3aWR0aCAtPiB3aWR0aFxuXG5cbmxldCBzdG9wcGVyX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZyA9XG4gIGlmIGZtdGluZyA9IEVzY2FwZWRfcGVyY2VudCB0aGVuICclJywgXCJcIiBlbHNlXG4gICAgbGV0IHN0ciA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmcgaW5cbiAgICBsZXQgc3RwID0gc3RyLlsxXSBpblxuICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgMiAoU3RyaW5nLmxlbmd0aCBzdHIgLSAyKSBpblxuICAgIHN0cCwgc3ViX3N0clxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBSZWFkZXIgbWFuYWdlbWVudCAqKVxuXG4oKiBBIGNhbGwgdG8gdGFrZV9mb3JtYXRfcmVhZGVycyBvbiBhIGZvcm1hdCBpcyBldmFsdWF0ZWQgaW50byBmdW5jdGlvbnNcbiAgIHRha2luZyByZWFkZXJzIGFzIGFyZ3VtZW50cyBhbmQgYWdncmVnYXRlIHRoZW0gaW50byBhbiBoZXRlcm9nZW5lb3VzIGxpc3QgKilcbigqIFdoZW4gYWxsIHJlYWRlcnMgYXJlIHRha2VuLCBmaW5hbGx5IHBhc3MgdGhlIGxpc3Qgb2YgdGhlIHJlYWRlcnMgdG8gdGhlXG4gICBjb250aW51YXRpb24gay4gKilcbmxldCByZWMgdGFrZV9mb3JtYXRfcmVhZGVycyA6IHR5cGUgYSBjIGQgZSBmIC5cbiAgICAoKGQsIGUpIGhldGVyX2xpc3QgLT4gZSkgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgIGQgPVxuZnVuIGsgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgUmVhZGVyIGZtdF9yZXN0IC0+XG4gICAgZnVuIHJlYWRlciAtPlxuICAgICAgbGV0IG5ld19rIHJlYWRlcnNfcmVzdCA9IGsgKENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSkgaW5cbiAgICAgIHRha2VfZm9ybWF0X3JlYWRlcnMgbmV3X2sgZm10X3Jlc3RcbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IENhbWxfY2hhciByZXN0ICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgU3RyaW5nIChfLCByZXN0KSAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBDYW1sX3N0cmluZyAoXywgcmVzdCkgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEludCAoXywgXywgXywgcmVzdCkgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgSW50MzIgKF8sIF8sIF8sIHJlc3QpICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBOYXRpdmVpbnQgKF8sIF8sIF8sIHJlc3QpICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEludDY0IChfLCBfLCBfLCByZXN0KSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgRmxvYXQgKF8sIF8sIF8sIHJlc3QpICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBCb29sIChfLCByZXN0KSAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEFscGhhIHJlc3QgICAgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBGbHVzaCByZXN0ICAgICAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBDdXN0b20gKF8sIF8sIHJlc3QpICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQsIF8pKSwgcmVzdCkgLT5cbiAgICAgIHRha2VfZm9ybWF0X3JlYWRlcnMgayAoY29uY2F0X2ZtdCBmbXQgcmVzdClcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10LCBfKSksIHJlc3QpIC0+XG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgKGNvbmNhdF9mbXQgZm10IHJlc3QpXG5cbiAgfCBGb3JtYXRfYXJnIChfLCBfLCByZXN0KSAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpICAgIC0+XG4gICAgIHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayAoZXJhc2VfcmVsIChzeW1tIGZtdHR5KSkgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgICAgICAgIC0+IHRha2VfaWdub3JlZF9mb3JtYXRfcmVhZGVycyBrIGlnbiByZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAgICAgICAtPiBrIE5pbFxuXG4oKiBUYWtlIHJlYWRlcnMgYXNzb2NpYXRlZCB0byBhbiBmbXR0eSBjb21pbmcgZnJvbSBhIEZvcm1hdF9zdWJzdCBcIiUoLi4uJSlcIi4gKilcbmFuZCB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIDogdHlwZSB4IHkgYSBjIGQgZSBmIC5cbiAgICAoKGQsIGUpIGhldGVyX2xpc3QgLT4gZSkgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIHgsIHkpIGZtdHR5IC0+XG4gICAgICAoeSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgeCwgZSwgZikgZm10IC0+IGQgPVxuZnVuIGsgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBSZWFkZXJfdHkgZm10X3Jlc3QgLT5cbiAgICBmdW4gcmVhZGVyIC0+XG4gICAgICBsZXQgbmV3X2sgcmVhZGVyc19yZXN0ID0gayAoQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpKSBpblxuICAgICAgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBuZXdfayBmbXRfcmVzdCBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBmbXRfcmVzdCAtPlxuICAgIGZ1biByZWFkZXIgLT5cbiAgICAgIGxldCBuZXdfayByZWFkZXJzX3Jlc3QgPSBrIChDb25zIChyZWFkZXIsIHJlYWRlcnNfcmVzdCkpIGluXG4gICAgICB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIG5ld19rIGZtdF9yZXN0IGZtdFxuICB8IENoYXJfdHkgcmVzdCAgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgSW50X3R5IHJlc3QgICAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEludDMyX3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEZsb2F0X3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgRm9ybWF0X2FyZ190eSAoXywgcmVzdCkgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBUYWtlIHJlYWRlcnMgYXNzb2NpYXRlZCB0byBhbiBpZ25vcmVkIHBhcmFtZXRlci4gKilcbmFuZCB0YWtlX2lnbm9yZWRfZm9ybWF0X3JlYWRlcnMgOiB0eXBlIHggeSBhIGMgZCBlIGYgLlxuICAgICgoZCwgZSkgaGV0ZXJfbGlzdCAtPiBlKSAtPiAoYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgZCwgeCwgeSkgaWdub3JlZCAtPlxuICAgICAgKHksIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIHgsIGUsIGYpIGZtdCAtPiBkID1cbmZ1biBrIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIGZ1biByZWFkZXIgLT5cbiAgICAgIGxldCBuZXdfayByZWFkZXJzX3Jlc3QgPSBrIChDb25zIChyZWFkZXIsIHJlYWRlcnNfcmVzdCkpIGluXG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIG5ld19rIGZtdFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIGZtdHR5IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHNjYW5uaW5nICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHNjYW5uaW5nIGZ1bmN0aW9uLiAqKVxuKCogU2NhbiBhIHN0cmVhbSBhY2NvcmRpbmcgdG8gYSBmb3JtYXQgYW5kIHJlYWRlcnMgb2J0YWluZWQgYnlcbiAgIHRha2VfZm9ybWF0X3JlYWRlcnMsIGFuZCBhZ2dyZWdhdGUgc2Nhbm5lZCB2YWx1ZXMgaW50byBhblxuICAgaGV0ZXJvZ2VuZW91cyBsaXN0LiAqKVxuKCogUmV0dXJuIHRoZSBoZXRlcm9nZW5lb3VzIGxpc3Qgb2Ygc2Nhbm5lZCB2YWx1ZXMuICopXG5sZXQgcmVjIG1ha2Vfc2NhbmYgOiB0eXBlIGEgYyBkIGUgZi5cbiAgICBTY2FubmluZy5pbl9jaGFubmVsIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChkLCBlKSBoZXRlcl9saXN0IC0+IChhLCBmKSBoZXRlcl9saXN0ID1cbmZ1biBpYiBmbXQgcmVhZGVycyAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IENoYXIgcmVzdCAtPlxuICAgIGxldCBfID0gc2Nhbl9jaGFyIDAgaWIgaW5cbiAgICBsZXQgYyA9IHRva2VuX2NoYXIgaWIgaW5cbiAgICBDb25zIChjLCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGxldCBfID0gc2Nhbl9jYW1sX2NoYXIgMCBpYiBpblxuICAgIGxldCBjID0gdG9rZW5fY2hhciBpYiBpblxuICAgIENvbnMgKGMsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuXG4gIHwgU3RyaW5nIChwYWQsIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSkgLT5cbiAgICBsZXQgc3RwLCBzdHIgPSBzdG9wcGVyX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9zdHJpbmcgKFNvbWUgc3RwKSB3aWR0aCBpYiBpblxuICAgIGxldCBzdHJfcmVzdCA9IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgc3RyX3Jlc3QgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW4gdG9rZW5fc3RyaW5nXG4gIHwgU3RyaW5nIChwYWQsIEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpKSAtPlxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX3N0cmluZyAoU29tZSAneycpIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgKGNvbmNhdF9mbXQgZm10JyByZXN0KSByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhblxuICAgICAgICAgICAgICAgICAgIHRva2VuX3N0cmluZ1xuICB8IFN0cmluZyAocGFkLCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9zdHJpbmcgKFNvbWUgJ1snKSB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW5cbiAgICAgICAgICAgICAgICAgICB0b2tlbl9zdHJpbmdcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9zdHJpbmcgTm9uZSB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW4gdG9rZW5fc3RyaW5nXG5cbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX2NhbWxfc3RyaW5nIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhbiB0b2tlbl9zdHJpbmdcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IGMgPSBpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciAoY2hhcl9vZl9pY29udiBpY29udikgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9pbnRfY29udmVyc2lvbiBjIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gKHRva2VuX2ludCBjKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCBjID0gaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpIGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5faW50X2NvbnZlcnNpb24gYyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuICh0b2tlbl9pbnQzMiBjKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgYyA9IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyIChjaGFyX29mX2ljb252IGljb252KSBpblxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX2ludF9jb252ZXJzaW9uIGMgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2NhbiAodG9rZW5fbmF0aXZlaW50IGMpXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IGMgPSBpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciAoY2hhcl9vZl9pY29udiBpY29udikgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9pbnRfY29udmVyc2lvbiBjIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gKHRva2VuX2ludDY0IGMpXG4gIHwgRmxvYXQgKChfLCAoRmxvYXRfRiB8IEZsb2F0X0NGKSksIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2Nhbl9jYW1sX2Zsb2F0IHRva2VuX2Zsb2F0XG4gIHwgRmxvYXQgKChfLCAoRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cpKSxcbiAgICAgICAgICAgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuX2Zsb2F0IHRva2VuX2Zsb2F0XG4gIHwgRmxvYXQgKChfLCAoRmxvYXRfaCB8IEZsb2F0X0gpKSwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuX2hleF9mbG9hdCB0b2tlbl9mbG9hdFxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBsZXQgc2NhbiBfIF8gaWIgPSBzY2FuX2Jvb2wgaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuIHRva2VuX2Jvb2xcbiAgfCBBbHBoYSBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiVhXFxcIlwiXG4gIHwgVGhldGEgXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIldFxcXCJcIlxuICB8IEN1c3RvbSBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiU/XFxcIiAoY3VzdG9tIGNvbnZlcnRlcilcIlxuICB8IFJlYWRlciBmbXRfcmVzdCAtPlxuICAgIGJlZ2luIG1hdGNoIHJlYWRlcnMgd2l0aFxuICAgIHwgQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpIC0+XG4gICAgICAgIGxldCB4ID0gcmVhZGVyIGliIGluXG4gICAgICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10X3Jlc3QgcmVhZGVyc19yZXN0KVxuICAgIHwgTmlsIC0+XG4gICAgICAgIGludmFsaWRfYXJnIFwic2NhbmY6IG1pc3NpbmcgcmVhZGVyXCJcbiAgICBlbmRcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgaWYgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnNcbiAgICBlbHNlIGJhZF9pbnB1dCBcImVuZCBvZiBpbnB1dCBub3QgZm91bmRcIlxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBTdHJpbmcuaXRlciAoY2hlY2tfY2hhciBpYikgc3RyO1xuICAgIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgY2hlY2tfY2hhciBpYiBjaHI7XG4gICAgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnNcblxuICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgIGxldCBfID0gc2Nhbl9jYW1sX3N0cmluZyAod2lkdGhfb2ZfcGFkX29wdCBwYWRfb3B0KSBpYiBpblxuICAgIGxldCBzID0gdG9rZW5fc3RyaW5nIGliIGluXG4gICAgbGV0IGZtdCA9XG4gICAgICB0cnkgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzIGZtdHR5XG4gICAgICB3aXRoIEZhaWx1cmUgbXNnIC0+IGJhZF9pbnB1dCBtc2dcbiAgICBpblxuICAgIENvbnMgKGZtdCwgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9zdHJpbmcgKHdpZHRoX29mX3BhZF9vcHQgcGFkX29wdCkgaWIgaW5cbiAgICBsZXQgcyA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBmbXQsIGZtdCcgPVxuICAgICAgdHJ5XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHMgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10JyA9IGZtdF9lYmJfb2Zfc3RyaW5nIHMgaW5cbiAgICAgICAgKCogVE9ETzogZmluZCBhIHdheSB0byBhdm9pZCByZXBhcnNpbmcgdHdpY2UgKilcblxuICAgICAgICAoKiBUT0RPOiB0aGVzZSB0eXBlLWNoZWNrcyBiZWxvdyAqY2FuKiBmYWlsIGJlY2F1c2Ugb2YgdHlwZVxuICAgICAgICAgICBhbWJpZ3VpdHkgaW4gcHJlc2VuY2Ugb2YgaWdub3JlZC1yZWFkZXJzOiBcIiVfciVkXCIgYW5kIFwiJWQlX3JcIlxuICAgICAgICAgICBhcmUgdHlwZWQgaW4gdGhlIHNhbWUgd2F5LlxuXG4gICAgICAgICAgICMgU2NhbmYuc3NjYW5mIFwiXFxcIiVfciVkXFxcIjNcIiBcIiUoJWQlX3IlKVwiIGlnbm9yZVxuICAgICAgICAgICAgIChmdW4gZm10IG4gLT4gc3RyaW5nX29mX2Zvcm1hdCBmbXQsIG4pXG4gICAgICAgICAgIEV4Y2VwdGlvbjogQ2FtbGludGVybmFsRm9ybWF0LlR5cGVfbWlzbWF0Y2guXG5cbiAgICAgICAgICAgV2Ugc2hvdWxkIHByb3Blcmx5IGNhdGNoIHRoaXMgZXhjZXB0aW9uLlxuICAgICAgICAqKVxuICAgICAgICB0eXBlX2Zvcm1hdCBmbXQgKGVyYXNlX3JlbCBmbXR0eSksXG4gICAgICAgIHR5cGVfZm9ybWF0IGZtdCcgKGVyYXNlX3JlbCAoc3ltbSBmbXR0eSkpXG4gICAgICB3aXRoIEZhaWx1cmUgbXNnIC0+IGJhZF9pbnB1dCBtc2dcbiAgICBpblxuICAgIENvbnMgKEZvcm1hdCAoZm10LCBzKSxcbiAgICAgICAgICBtYWtlX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVycylcblxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSkgLT5cbiAgICBsZXQgc3RwLCBzdHIgPSBzdG9wcGVyX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBsZXQgd2lkdGggPSB3aWR0aF9vZl9wYWRfb3B0IHdpZHRoX29wdCBpblxuICAgIHNjYW5fY2hhcnNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgKFNvbWUgc3RwKSB3aWR0aCBpYjtcbiAgICBsZXQgcyA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBzdHJfcmVzdCA9IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIGluXG4gICAgQ29ucyAocywgbWFrZV9zY2FuZiBpYiBzdHJfcmVzdCByZWFkZXJzKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgbGV0IHdpZHRoID0gd2lkdGhfb2ZfcGFkX29wdCB3aWR0aF9vcHQgaW5cbiAgICBzY2FuX2NoYXJzX2luX2NoYXJfc2V0IGNoYXJfc2V0IE5vbmUgd2lkdGggaWI7XG4gICAgbGV0IHMgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBDb25zIChzLCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIGxldCBjb3VudCA9IGdldF9jb3VudGVyIGliIGNvdW50ZXIgaW5cbiAgICBDb25zIChjb3VudCwgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgICBDb25zIChjLCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBTdHJpbmcuaXRlciAoY2hlY2tfY2hhciBpYikgKHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmb3JtYXR0aW5nX2xpdCk7XG4gICAgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnNcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGNoZWNrX2NoYXIgaWIgJ0AnOyBjaGVja19jaGFyIGliICd7JztcbiAgICBtYWtlX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVyc1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgY2hlY2tfY2hhciBpYiAnQCc7IGNoZWNrX2NoYXIgaWIgJ1snO1xuICAgIG1ha2Vfc2NhbmYgaWIgKGNvbmNhdF9mbXQgZm10JyByZXN0KSByZWFkZXJzXG5cbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgIGJlZ2luIG1hdGNoIG1ha2Vfc2NhbmYgaWIgZm10JyByZWFkZXJzIHdpdGhcbiAgICB8IENvbnMgKF8sIGFyZ19yZXN0KSAtPiBhcmdfcmVzdFxuICAgIHwgTmlsIC0+IGFzc2VydCBmYWxzZVxuICAgIGVuZFxuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIE5pbFxuXG4oKiBDYXNlIGFuYWx5c2lzIG9uIHBhZGRpbmcgYW5kIHByZWNpc2lvbi4gKilcbigqIFJlamVjdCBmb3JtYXRzIGNvbnRhaW5pbmcgXCIlKlwiIG9yIFwiJS4qXCIuICopXG4oKiBQYXNzIHBhZGRpbmcgYW5kIHByZWNpc2lvbiB0byB0aGUgZ2VuZXJpYyBzY2FubmVyIGBzY2FuJy4gKilcbmFuZCBwYWRfcHJlY19zY2FuZiA6IHR5cGUgYSBjIGQgZSBmIHggeSB6IHQgLlxuICAgIFNjYW5uaW5nLmluX2NoYW5uZWwgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICAgKGQsIGUpIGhldGVyX2xpc3QgLT4gKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+XG4gICAgICAoaW50IC0+IGludCAtPiBTY2FubmluZy5pbl9jaGFubmVsIC0+IHQpIC0+XG4gICAgICAoU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiB6KSAtPlxuICAgICAgKHgsIGYpIGhldGVyX2xpc3QgPVxuZnVuIGliIGZtdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gdG9rZW4gLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBsZXQgXyA9IHNjYW4gbWF4X2ludCBtYXhfaW50IGliIGluXG4gICAgbGV0IHggPSB0b2tlbiBpYiBpblxuICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10IHJlYWRlcnMpXG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgbGV0IF8gPSBzY2FuIG1heF9pbnQgcCBpYiBpblxuICAgIGxldCB4ID0gdG9rZW4gaWIgaW5cbiAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKVxuICB8IExpdF9wYWRkaW5nICgoUmlnaHQgfCBaZXJvcyksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBsZXQgXyA9IHNjYW4gdyBtYXhfaW50IGliIGluXG4gICAgbGV0IHggPSB0b2tlbiBpYiBpblxuICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10IHJlYWRlcnMpXG4gIHwgTGl0X3BhZGRpbmcgKChSaWdodCB8IFplcm9zKSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGxldCBfID0gc2NhbiB3IHAgaWIgaW5cbiAgICBsZXQgeCA9IHRva2VuIGliIGluXG4gICAgQ29ucyAoeCwgbWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycylcbiAgfCBMaXRfcGFkZGluZyAoTGVmdCwgXyksIF8gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJS1cXFwiXCJcbiAgfCBMaXRfcGFkZGluZyAoKFJpZ2h0IHwgWmVyb3MpLCBfKSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlKlxcXCJcIlxuICB8IEFyZ19wYWRkaW5nIF8sIF8gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJSpcXFwiXCJcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiUqXFxcIlwiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAoKiBEZWZpbmluZyBbc2NhbmZdIGFuZCB2YXJpb3VzIGZsYXZvcnMgb2YgW3NjYW5mXSAqKVxuXG50eXBlICdhIGtzY2FuZl9yZXN1bHQgPSBBcmdzIG9mICdhIHwgRXhjIG9mIGV4blxuXG5sZXQga3NjYW5mIGliIGVmIChGb3JtYXQgKGZtdCwgc3RyKSkgPVxuICBsZXQgcmVjIGFwcGx5IDogdHlwZSBhIGIgLiBhIC0+IChhLCBiKSBoZXRlcl9saXN0IC0+IGIgPVxuICAgIGZ1biBmIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBDb25zICh4LCByKSAtPiBhcHBseSAoZiB4KSByXG4gICAgfCBOaWwgLT4gZlxuICBpblxuICBsZXQgayByZWFkZXJzIGYgPVxuICAgIFNjYW5uaW5nLnJlc2V0X3Rva2VuIGliO1xuICAgIG1hdGNoIHRyeSBBcmdzIChtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKSB3aXRoXG4gICAgICB8IChTY2FuX2ZhaWx1cmUgXyB8IEZhaWx1cmUgXyB8IEVuZF9vZl9maWxlKSBhcyBleGMgLT4gRXhjIGV4Y1xuICAgICAgfCBJbnZhbGlkX2FyZ3VtZW50IG1zZyAtPlxuICAgICAgICBpbnZhbGlkX2FyZyAobXNnIF4gXCIgaW4gZm9ybWF0IFxcXCJcIiBeIFN0cmluZy5lc2NhcGVkIHN0ciBeIFwiXFxcIlwiKVxuICAgIHdpdGhcbiAgICAgIHwgQXJncyBhcmdzIC0+IGFwcGx5IGYgYXJnc1xuICAgICAgfCBFeGMgZXhjIC0+IGVmIGliIGV4Y1xuICBpblxuICB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG5cbigqKiopXG5cbmxldCBrYnNjYW5mID0ga3NjYW5mXG5sZXQgYnNjYW5mIGliIGZtdCA9IGtic2NhbmYgaWIgc2NhbmZfYmFkX2lucHV0IGZtdFxuXG5sZXQga3NzY2FuZiBzIGVmIGZtdCA9IGtic2NhbmYgKFNjYW5uaW5nLmZyb21fc3RyaW5nIHMpIGVmIGZtdFxubGV0IHNzY2FuZiBzIGZtdCA9IGtic2NhbmYgKFNjYW5uaW5nLmZyb21fc3RyaW5nIHMpIHNjYW5mX2JhZF9pbnB1dCBmbXRcblxubGV0IHNjYW5mIGZtdCA9IGtzY2FuZiBTY2FubmluZy5zdGRpYiBzY2FuZl9iYWRfaW5wdXQgZm10XG5cbigqKiopXG5cbigqIFNjYW5uaW5nIGZvcm1hdCBzdHJpbmdzLiAqKVxubGV0IGJzY2FuZl9mb3JtYXQgOlxuICBTY2FubmluZy5pbl9jaGFubmVsIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gICgoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAnZykgLT4gJ2cgPVxuICBmdW4gaWIgZm9ybWF0IGYgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9zdHJpbmcgbWF4X2ludCBpYiBpblxuICAgIGxldCBzdHIgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBsZXQgZm10JyA9XG4gICAgICB0cnkgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIGZvcm1hdFxuICAgICAgd2l0aCBGYWlsdXJlIG1zZyAtPiBiYWRfaW5wdXQgbXNnIGluXG4gICAgZiBmbXQnXG5cblxubGV0IHNzY2FuZl9mb3JtYXQgOlxuICBzdHJpbmcgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAgKCgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICdnKSAtPiAnZyA9XG4gIGZ1biBzIGZvcm1hdCBmIC0+IGJzY2FuZl9mb3JtYXQgKFNjYW5uaW5nLmZyb21fc3RyaW5nIHMpIGZvcm1hdCBmXG5cblxubGV0IGZvcm1hdF9mcm9tX3N0cmluZyBzIGZtdCA9XG4gIHNzY2FuZl9mb3JtYXQgKFwiXFxcIlwiIF4gU3RyaW5nLmVzY2FwZWQgcyBeIFwiXFxcIlwiKSBmbXQgKGZ1biB4IC0+IHgpXG5cblxubGV0IHVuZXNjYXBlZCBzID1cbiAgc3NjYW5mIChcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIikgXCIlUyUhXCIgKGZ1biB4IC0+IHgpXG5cblxuKCogRGVwcmVjYXRlZCAqKVxubGV0IGtmc2NhbmYgaWMgZWYgZm10ID0ga2JzY2FuZiAoU2Nhbm5pbmcubWVtb19mcm9tX2NoYW5uZWwgaWMpIGVmIGZtdFxubGV0IGZzY2FuZiBpYyBmbXQgPSBrc2NhbmYgKFNjYW5uaW5nLm1lbW9fZnJvbV9jaGFubmVsIGljKSBzY2FuZl9iYWRfaW5wdXQgZm10XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFJlZ2lzdGVyaW5nIE9DYW1sIHZhbHVlcyB3aXRoIHRoZSBDIHJ1bnRpbWUgZm9yIGxhdGVyIGNhbGxiYWNrcyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiBPYmoudCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCByZWdpc3RlciBuYW1lIHYgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBuYW1lIChPYmoucmVwciB2KVxuXG5sZXQgcmVnaXN0ZXJfZXhjZXB0aW9uIG5hbWUgKGV4biA6IGV4bikgPVxuICBsZXQgZXhuID0gT2JqLnJlcHIgZXhuIGluXG4gIGxldCBzbG90ID0gaWYgT2JqLnRhZyBleG4gPSBPYmoub2JqZWN0X3RhZyB0aGVuIGV4biBlbHNlIE9iai5maWVsZCBleG4gMCBpblxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBuYW1lIHNsb3RcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgIEplcm9tZSBWb3VpbGxvbiwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBPYmpcblxuKCoqKiogT2JqZWN0IHJlcHJlc2VudGF0aW9uICoqKiopXG5cbmV4dGVybmFsIHNldF9pZDogJ2EgLT4gJ2EgPSBcImNhbWxfc2V0X29vX2lkXCIgW0BAbm9hbGxvY11cblxuKCoqKiogT2JqZWN0IGNvcHkgKioqKilcblxubGV0IGNvcHkgbyA9XG4gIGxldCBvID0gKE9iai5vYmogKE9iai5kdXAgKE9iai5yZXByIG8pKSkgaW5cbiAgc2V0X2lkIG9cblxuKCoqKiogQ29tcHJlc3Npb24gb3B0aW9ucyAqKioqKVxuKCogUGFyYW1ldGVycyAqKVxudHlwZSBwYXJhbXMgPSB7XG4gICAgbXV0YWJsZSBjb21wYWN0X3RhYmxlIDogYm9vbDtcbiAgICBtdXRhYmxlIGNvcHlfcGFyZW50IDogYm9vbDtcbiAgICBtdXRhYmxlIGNsZWFuX3doZW5fY29weWluZyA6IGJvb2w7XG4gICAgbXV0YWJsZSByZXRyeV9jb3VudCA6IGludDtcbiAgICBtdXRhYmxlIGJ1Y2tldF9zbWFsbF9zaXplIDogaW50XG4gIH1cblxubGV0IHBhcmFtcyA9IHtcbiAgY29tcGFjdF90YWJsZSA9IHRydWU7XG4gIGNvcHlfcGFyZW50ID0gdHJ1ZTtcbiAgY2xlYW5fd2hlbl9jb3B5aW5nID0gdHJ1ZTtcbiAgcmV0cnlfY291bnQgPSAzO1xuICBidWNrZXRfc21hbGxfc2l6ZSA9IDE2XG59XG5cbigqKioqIFBhcmFtZXRlcnMgKioqKilcblxubGV0IGluaXRpYWxfb2JqZWN0X3NpemUgPSAyXG5cbigqKioqIEl0ZW1zICoqKiopXG5cbnR5cGUgaXRlbSA9IER1bW15QSB8IER1bW15QiB8IER1bW15QyBvZiBpbnRcbmxldCBfID0gW0R1bW15QTsgRHVtbXlCOyBEdW1teUMgMF0gKCogdG8gYXZvaWQgd2FybmluZ3MgKilcblxubGV0IGR1bW15X2l0ZW0gPSAobWFnaWMgKCkgOiBpdGVtKVxuXG4oKioqKiBUeXBlcyAqKioqKVxuXG50eXBlIHRhZ1xudHlwZSBsYWJlbCA9IGludFxudHlwZSBjbG9zdXJlID0gaXRlbVxudHlwZSB0ID0gRHVtbXlBIHwgRHVtbXlCIHwgRHVtbXlDIG9mIGludFxubGV0IF8gPSBbRHVtbXlBOyBEdW1teUI7IER1bW15QyAwXSAoKiB0byBhdm9pZCB3YXJuaW5ncyAqKVxuXG50eXBlIG9iaiA9IHQgYXJyYXlcbmV4dGVybmFsIHJldCA6IChvYmogLT4gJ2EpIC0+IGNsb3N1cmUgPSBcIiVpZGVudGl0eVwiXG5cbigqKioqIExhYmVscyAqKioqKVxuXG5sZXQgcHVibGljX21ldGhvZF9sYWJlbCBzIDogdGFnID1cbiAgbGV0IGFjY3UgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgIGFjY3UgOj0gMjIzICogIWFjY3UgKyBDaGFyLmNvZGUgcy5baV1cbiAgZG9uZTtcbiAgKCogcmVkdWNlIHRvIDMxIGJpdHMgKilcbiAgYWNjdSA6PSAhYWNjdSBsYW5kICgxIGxzbCAzMSAtIDEpO1xuICAoKiBtYWtlIGl0IHNpZ25lZCBmb3IgNjQgYml0cyBhcmNoaXRlY3R1cmVzICopXG4gIGxldCB0YWcgPSBpZiAhYWNjdSA+IDB4M0ZGRkZGRkYgdGhlbiAhYWNjdSAtICgxIGxzbCAzMSkgZWxzZSAhYWNjdSBpblxuICAoKiBQcmludGYuZXByaW50ZiBcIiVzID0gJWRcXG5cIiBzIHRhZzsgZmx1c2ggc3RkZXJyOyAqKVxuICBtYWdpYyB0YWdcblxuKCoqKiogU3BhcnNlIGFycmF5ICoqKiopXG5cbm1vZHVsZSBWYXJzID1cbiAgTWFwLk1ha2Uoc3RydWN0IHR5cGUgdCA9IHN0cmluZyBsZXQgY29tcGFyZSAoeDp0KSB5ID0gY29tcGFyZSB4IHkgZW5kKVxudHlwZSB2YXJzID0gaW50IFZhcnMudFxuXG5tb2R1bGUgTWV0aHMgPVxuICBNYXAuTWFrZShzdHJ1Y3QgdHlwZSB0ID0gc3RyaW5nIGxldCBjb21wYXJlICh4OnQpIHkgPSBjb21wYXJlIHggeSBlbmQpXG50eXBlIG1ldGhzID0gbGFiZWwgTWV0aHMudFxubW9kdWxlIExhYnMgPVxuICBNYXAuTWFrZShzdHJ1Y3QgdHlwZSB0ID0gbGFiZWwgbGV0IGNvbXBhcmUgKHg6dCkgeSA9IGNvbXBhcmUgeCB5IGVuZClcbnR5cGUgbGFicyA9IGJvb2wgTGFicy50XG5cbigqIFRoZSBjb21waWxlciBhc3N1bWVzIHRoYXQgdGhlIGZpcnN0IGZpZWxkIG9mIHRoaXMgc3RydWN0dXJlIGlzIFtzaXplXS4gKilcbnR5cGUgdGFibGUgPVxuIHsgbXV0YWJsZSBzaXplOiBpbnQ7XG4gICBtdXRhYmxlIG1ldGhvZHM6IGNsb3N1cmUgYXJyYXk7XG4gICBtdXRhYmxlIG1ldGhvZHNfYnlfbmFtZTogbWV0aHM7XG4gICBtdXRhYmxlIG1ldGhvZHNfYnlfbGFiZWw6IGxhYnM7XG4gICBtdXRhYmxlIHByZXZpb3VzX3N0YXRlczpcbiAgICAgKG1ldGhzICogbGFicyAqIChsYWJlbCAqIGl0ZW0pIGxpc3QgKiB2YXJzICpcbiAgICAgIGxhYmVsIGxpc3QgKiBzdHJpbmcgbGlzdCkgbGlzdDtcbiAgIG11dGFibGUgaGlkZGVuX21ldGhzOiAobGFiZWwgKiBpdGVtKSBsaXN0O1xuICAgbXV0YWJsZSB2YXJzOiB2YXJzO1xuICAgbXV0YWJsZSBpbml0aWFsaXplcnM6IChvYmogLT4gdW5pdCkgbGlzdCB9XG5cbmxldCBkdW1teV90YWJsZSA9XG4gIHsgbWV0aG9kcyA9IFt8IGR1bW15X2l0ZW0gfF07XG4gICAgbWV0aG9kc19ieV9uYW1lID0gTWV0aHMuZW1wdHk7XG4gICAgbWV0aG9kc19ieV9sYWJlbCA9IExhYnMuZW1wdHk7XG4gICAgcHJldmlvdXNfc3RhdGVzID0gW107XG4gICAgaGlkZGVuX21ldGhzID0gW107XG4gICAgdmFycyA9IFZhcnMuZW1wdHk7XG4gICAgaW5pdGlhbGl6ZXJzID0gW107XG4gICAgc2l6ZSA9IDAgfVxuXG5sZXQgdGFibGVfY291bnQgPSByZWYgMFxuXG4oKiBkdW1teV9tZXQgc2hvdWxkIGJlIGEgcG9pbnRlciwgc28gdXNlIGFuIGF0b20gKilcbmxldCBkdW1teV9tZXQgOiBpdGVtID0gb2JqIChPYmoubmV3X2Jsb2NrIDAgMClcbigqIGlmIGRlYnVnZ2luZyBpcyBuZWVkZWQsIHRoaXMgY291bGQgYmUgYSBnb29kIGlkZWE6ICopXG4oKiBsZXQgZHVtbXlfbWV0ICgpID0gZmFpbHdpdGggXCJVbmRlZmluZWQgbWV0aG9kXCIgKilcblxubGV0IHJlYyBmaXRfc2l6ZSBuID1cbiAgaWYgbiA8PSAyIHRoZW4gbiBlbHNlXG4gIGZpdF9zaXplICgobisxKS8yKSAqIDJcblxubGV0IG5ld190YWJsZSBwdWJfbGFiZWxzID1cbiAgaW5jciB0YWJsZV9jb3VudDtcbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBwdWJfbGFiZWxzIGluXG4gIGxldCBtZXRob2RzID0gQXJyYXkubWFrZSAobGVuKjIrMikgZHVtbXlfbWV0IGluXG4gIG1ldGhvZHMuKDApIDwtIG1hZ2ljIGxlbjtcbiAgbWV0aG9kcy4oMSkgPC0gbWFnaWMgKGZpdF9zaXplIGxlbiAqIFN5cy53b3JkX3NpemUgLyA4IC0gMSk7XG4gIGZvciBpID0gMCB0byBsZW4gLSAxIGRvIG1ldGhvZHMuKGkqMiszKSA8LSBtYWdpYyBwdWJfbGFiZWxzLihpKSBkb25lO1xuICB7IG1ldGhvZHMgPSBtZXRob2RzO1xuICAgIG1ldGhvZHNfYnlfbmFtZSA9IE1ldGhzLmVtcHR5O1xuICAgIG1ldGhvZHNfYnlfbGFiZWwgPSBMYWJzLmVtcHR5O1xuICAgIHByZXZpb3VzX3N0YXRlcyA9IFtdO1xuICAgIGhpZGRlbl9tZXRocyA9IFtdO1xuICAgIHZhcnMgPSBWYXJzLmVtcHR5O1xuICAgIGluaXRpYWxpemVycyA9IFtdO1xuICAgIHNpemUgPSBpbml0aWFsX29iamVjdF9zaXplIH1cblxubGV0IHJlc2l6ZSBhcnJheSBuZXdfc2l6ZSA9XG4gIGxldCBvbGRfc2l6ZSA9IEFycmF5Lmxlbmd0aCBhcnJheS5tZXRob2RzIGluXG4gIGlmIG5ld19zaXplID4gb2xkX3NpemUgdGhlbiBiZWdpblxuICAgIGxldCBuZXdfYnVjayA9IEFycmF5Lm1ha2UgbmV3X3NpemUgZHVtbXlfbWV0IGluXG4gICAgQXJyYXkuYmxpdCBhcnJheS5tZXRob2RzIDAgbmV3X2J1Y2sgMCBvbGRfc2l6ZTtcbiAgICBhcnJheS5tZXRob2RzIDwtIG5ld19idWNrXG4gZW5kXG5cbmxldCBwdXQgYXJyYXkgbGFiZWwgZWxlbWVudCA9XG4gIHJlc2l6ZSBhcnJheSAobGFiZWwgKyAxKTtcbiAgYXJyYXkubWV0aG9kcy4obGFiZWwpIDwtIGVsZW1lbnRcblxuKCoqKiogQ2xhc3NlcyAqKioqKVxuXG5sZXQgbWV0aG9kX2NvdW50ID0gcmVmIDBcbmxldCBpbnN0X3Zhcl9jb3VudCA9IHJlZiAwXG5cbigqIHR5cGUgdCAqKVxudHlwZSBtZXRoID0gaXRlbVxuXG5sZXQgbmV3X21ldGhvZCB0YWJsZSA9XG4gIGxldCBpbmRleCA9IEFycmF5Lmxlbmd0aCB0YWJsZS5tZXRob2RzIGluXG4gIHJlc2l6ZSB0YWJsZSAoaW5kZXggKyAxKTtcbiAgaW5kZXhcblxubGV0IGdldF9tZXRob2RfbGFiZWwgdGFibGUgbmFtZSA9XG4gIHRyeVxuICAgIE1ldGhzLmZpbmQgbmFtZSB0YWJsZS5tZXRob2RzX2J5X25hbWVcbiAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICBsZXQgbGFiZWwgPSBuZXdfbWV0aG9kIHRhYmxlIGluXG4gICAgdGFibGUubWV0aG9kc19ieV9uYW1lIDwtIE1ldGhzLmFkZCBuYW1lIGxhYmVsIHRhYmxlLm1ldGhvZHNfYnlfbmFtZTtcbiAgICB0YWJsZS5tZXRob2RzX2J5X2xhYmVsIDwtIExhYnMuYWRkIGxhYmVsIHRydWUgdGFibGUubWV0aG9kc19ieV9sYWJlbDtcbiAgICBsYWJlbFxuXG5sZXQgZ2V0X21ldGhvZF9sYWJlbHMgdGFibGUgbmFtZXMgPVxuICBBcnJheS5tYXAgKGdldF9tZXRob2RfbGFiZWwgdGFibGUpIG5hbWVzXG5cbmxldCBzZXRfbWV0aG9kIHRhYmxlIGxhYmVsIGVsZW1lbnQgPVxuICBpbmNyIG1ldGhvZF9jb3VudDtcbiAgaWYgTGFicy5maW5kIGxhYmVsIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwgdGhlblxuICAgIHB1dCB0YWJsZSBsYWJlbCBlbGVtZW50XG4gIGVsc2VcbiAgICB0YWJsZS5oaWRkZW5fbWV0aHMgPC0gKGxhYmVsLCBlbGVtZW50KSA6OiB0YWJsZS5oaWRkZW5fbWV0aHNcblxubGV0IGdldF9tZXRob2QgdGFibGUgbGFiZWwgPVxuICB0cnkgTGlzdC5hc3NvYyBsYWJlbCB0YWJsZS5oaWRkZW5fbWV0aHNcbiAgd2l0aCBOb3RfZm91bmQgLT4gdGFibGUubWV0aG9kcy4obGFiZWwpXG5cbmxldCB0b19saXN0IGFyciA9XG4gIGlmIGFyciA9PSBtYWdpYyAwIHRoZW4gW10gZWxzZSBBcnJheS50b19saXN0IGFyclxuXG5sZXQgbmFycm93IHRhYmxlIHZhcnMgdmlydF9tZXRocyBjb25jcl9tZXRocyA9XG4gIGxldCB2YXJzID0gdG9fbGlzdCB2YXJzXG4gIGFuZCB2aXJ0X21ldGhzID0gdG9fbGlzdCB2aXJ0X21ldGhzXG4gIGFuZCBjb25jcl9tZXRocyA9IHRvX2xpc3QgY29uY3JfbWV0aHMgaW5cbiAgbGV0IHZpcnRfbWV0aF9sYWJzID0gTGlzdC5tYXAgKGdldF9tZXRob2RfbGFiZWwgdGFibGUpIHZpcnRfbWV0aHMgaW5cbiAgbGV0IGNvbmNyX21ldGhfbGFicyA9IExpc3QubWFwIChnZXRfbWV0aG9kX2xhYmVsIHRhYmxlKSBjb25jcl9tZXRocyBpblxuICB0YWJsZS5wcmV2aW91c19zdGF0ZXMgPC1cbiAgICAgKHRhYmxlLm1ldGhvZHNfYnlfbmFtZSwgdGFibGUubWV0aG9kc19ieV9sYWJlbCwgdGFibGUuaGlkZGVuX21ldGhzLFxuICAgICAgdGFibGUudmFycywgdmlydF9tZXRoX2xhYnMsIHZhcnMpXG4gICAgIDo6IHRhYmxlLnByZXZpb3VzX3N0YXRlcztcbiAgdGFibGUudmFycyA8LVxuICAgIFZhcnMuZm9sZFxuICAgICAgKGZ1biBsYWIgaW5mbyB0dmFycyAtPlxuICAgICAgICBpZiBMaXN0Lm1lbSBsYWIgdmFycyB0aGVuIFZhcnMuYWRkIGxhYiBpbmZvIHR2YXJzIGVsc2UgdHZhcnMpXG4gICAgICB0YWJsZS52YXJzIFZhcnMuZW1wdHk7XG4gIGxldCBieV9uYW1lID0gcmVmIE1ldGhzLmVtcHR5IGluXG4gIGxldCBieV9sYWJlbCA9IHJlZiBMYWJzLmVtcHR5IGluXG4gIExpc3QuaXRlcjJcbiAgICAoZnVuIG1ldCBsYWJlbCAtPlxuICAgICAgIGJ5X25hbWUgOj0gTWV0aHMuYWRkIG1ldCBsYWJlbCAhYnlfbmFtZTtcbiAgICAgICBieV9sYWJlbCA6PVxuICAgICAgICAgIExhYnMuYWRkIGxhYmVsXG4gICAgICAgICAgICAodHJ5IExhYnMuZmluZCBsYWJlbCB0YWJsZS5tZXRob2RzX2J5X2xhYmVsIHdpdGggTm90X2ZvdW5kIC0+IHRydWUpXG4gICAgICAgICAgICAhYnlfbGFiZWwpXG4gICAgY29uY3JfbWV0aHMgY29uY3JfbWV0aF9sYWJzO1xuICBMaXN0Lml0ZXIyXG4gICAgKGZ1biBtZXQgbGFiZWwgLT5cbiAgICAgICBieV9uYW1lIDo9IE1ldGhzLmFkZCBtZXQgbGFiZWwgIWJ5X25hbWU7XG4gICAgICAgYnlfbGFiZWwgOj0gTGFicy5hZGQgbGFiZWwgZmFsc2UgIWJ5X2xhYmVsKVxuICAgIHZpcnRfbWV0aHMgdmlydF9tZXRoX2xhYnM7XG4gIHRhYmxlLm1ldGhvZHNfYnlfbmFtZSA8LSAhYnlfbmFtZTtcbiAgdGFibGUubWV0aG9kc19ieV9sYWJlbCA8LSAhYnlfbGFiZWw7XG4gIHRhYmxlLmhpZGRlbl9tZXRocyA8LVxuICAgICBMaXN0LmZvbGRfcmlnaHRcbiAgICAgICAoZnVuICgobGFiLCBfKSBhcyBtZXQpIGhtIC0+XG4gICAgICAgICAgaWYgTGlzdC5tZW0gbGFiIHZpcnRfbWV0aF9sYWJzIHRoZW4gaG0gZWxzZSBtZXQ6OmhtKVxuICAgICAgIHRhYmxlLmhpZGRlbl9tZXRoc1xuICAgICAgIFtdXG5cbmxldCB3aWRlbiB0YWJsZSA9XG4gIGxldCAoYnlfbmFtZSwgYnlfbGFiZWwsIHNhdmVkX2hpZGRlbl9tZXRocywgc2F2ZWRfdmFycywgdmlydF9tZXRocywgdmFycykgPVxuICAgIExpc3QuaGQgdGFibGUucHJldmlvdXNfc3RhdGVzXG4gIGluXG4gIHRhYmxlLnByZXZpb3VzX3N0YXRlcyA8LSBMaXN0LnRsIHRhYmxlLnByZXZpb3VzX3N0YXRlcztcbiAgdGFibGUudmFycyA8LVxuICAgICBMaXN0LmZvbGRfbGVmdFxuICAgICAgIChmdW4gcyB2IC0+IFZhcnMuYWRkIHYgKFZhcnMuZmluZCB2IHRhYmxlLnZhcnMpIHMpXG4gICAgICAgc2F2ZWRfdmFycyB2YXJzO1xuICB0YWJsZS5tZXRob2RzX2J5X25hbWUgPC0gYnlfbmFtZTtcbiAgdGFibGUubWV0aG9kc19ieV9sYWJlbCA8LSBieV9sYWJlbDtcbiAgdGFibGUuaGlkZGVuX21ldGhzIDwtXG4gICAgIExpc3QuZm9sZF9yaWdodFxuICAgICAgIChmdW4gKChsYWIsIF8pIGFzIG1ldCkgaG0gLT5cbiAgICAgICAgICBpZiBMaXN0Lm1lbSBsYWIgdmlydF9tZXRocyB0aGVuIGhtIGVsc2UgbWV0OjpobSlcbiAgICAgICB0YWJsZS5oaWRkZW5fbWV0aHNcbiAgICAgICBzYXZlZF9oaWRkZW5fbWV0aHNcblxubGV0IG5ld19zbG90IHRhYmxlID1cbiAgbGV0IGluZGV4ID0gdGFibGUuc2l6ZSBpblxuICB0YWJsZS5zaXplIDwtIGluZGV4ICsgMTtcbiAgaW5kZXhcblxubGV0IG5ld192YXJpYWJsZSB0YWJsZSBuYW1lID1cbiAgdHJ5IFZhcnMuZmluZCBuYW1lIHRhYmxlLnZhcnNcbiAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICBsZXQgaW5kZXggPSBuZXdfc2xvdCB0YWJsZSBpblxuICAgIGlmIG5hbWUgPD4gXCJcIiB0aGVuIHRhYmxlLnZhcnMgPC0gVmFycy5hZGQgbmFtZSBpbmRleCB0YWJsZS52YXJzO1xuICAgIGluZGV4XG5cbmxldCB0b19hcnJheSBhcnIgPVxuICBpZiBhcnIgPSBPYmoubWFnaWMgMCB0aGVuIFt8fF0gZWxzZSBhcnJcblxubGV0IG5ld19tZXRob2RzX3ZhcmlhYmxlcyB0YWJsZSBtZXRocyB2YWxzID1cbiAgbGV0IG1ldGhzID0gdG9fYXJyYXkgbWV0aHMgaW5cbiAgbGV0IG5tZXRocyA9IEFycmF5Lmxlbmd0aCBtZXRocyBhbmQgbnZhbHMgPSBBcnJheS5sZW5ndGggdmFscyBpblxuICBsZXQgcmVzID0gQXJyYXkubWFrZSAobm1ldGhzICsgbnZhbHMpIDAgaW5cbiAgZm9yIGkgPSAwIHRvIG5tZXRocyAtIDEgZG9cbiAgICByZXMuKGkpIDwtIGdldF9tZXRob2RfbGFiZWwgdGFibGUgbWV0aHMuKGkpXG4gIGRvbmU7XG4gIGZvciBpID0gMCB0byBudmFscyAtIDEgZG9cbiAgICByZXMuKGkrbm1ldGhzKSA8LSBuZXdfdmFyaWFibGUgdGFibGUgdmFscy4oaSlcbiAgZG9uZTtcbiAgcmVzXG5cbmxldCBnZXRfdmFyaWFibGUgdGFibGUgbmFtZSA9XG4gIHRyeSBWYXJzLmZpbmQgbmFtZSB0YWJsZS52YXJzIHdpdGggTm90X2ZvdW5kIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgZ2V0X3ZhcmlhYmxlcyB0YWJsZSBuYW1lcyA9XG4gIEFycmF5Lm1hcCAoZ2V0X3ZhcmlhYmxlIHRhYmxlKSBuYW1lc1xuXG5sZXQgYWRkX2luaXRpYWxpemVyIHRhYmxlIGYgPVxuICB0YWJsZS5pbml0aWFsaXplcnMgPC0gZjo6dGFibGUuaW5pdGlhbGl6ZXJzXG5cbigqXG5tb2R1bGUgS2V5cyA9XG4gIE1hcC5NYWtlKHN0cnVjdCB0eXBlIHQgPSB0YWcgYXJyYXkgbGV0IGNvbXBhcmUgKHg6dCkgeSA9IGNvbXBhcmUgeCB5IGVuZClcbmxldCBrZXlfbWFwID0gcmVmIEtleXMuZW1wdHlcbmxldCBnZXRfa2V5IHRhZ3MgOiBpdGVtID1cbiAgdHJ5IG1hZ2ljIChLZXlzLmZpbmQgdGFncyAha2V5X21hcCA6IHRhZyBhcnJheSlcbiAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICBrZXlfbWFwIDo9IEtleXMuYWRkIHRhZ3MgdGFncyAha2V5X21hcDtcbiAgICBtYWdpYyB0YWdzXG4qKVxuXG5sZXQgY3JlYXRlX3RhYmxlIHB1YmxpY19tZXRob2RzID1cbiAgaWYgcHVibGljX21ldGhvZHMgPT0gbWFnaWMgMCB0aGVuIG5ld190YWJsZSBbfHxdIGVsc2VcbiAgKCogW3B1YmxpY19tZXRob2RzXSBtdXN0IGJlIGluIGFzY2VuZGluZyBvcmRlciBmb3IgYnl0ZWNvZGUgKilcbiAgbGV0IHRhZ3MgPSBBcnJheS5tYXAgcHVibGljX21ldGhvZF9sYWJlbCBwdWJsaWNfbWV0aG9kcyBpblxuICBsZXQgdGFibGUgPSBuZXdfdGFibGUgdGFncyBpblxuICBBcnJheS5pdGVyaVxuICAgIChmdW4gaSBtZXQgLT5cbiAgICAgIGxldCBsYWIgPSBpKjIrMiBpblxuICAgICAgdGFibGUubWV0aG9kc19ieV9uYW1lICA8LSBNZXRocy5hZGQgbWV0IGxhYiB0YWJsZS5tZXRob2RzX2J5X25hbWU7XG4gICAgICB0YWJsZS5tZXRob2RzX2J5X2xhYmVsIDwtIExhYnMuYWRkIGxhYiB0cnVlIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwpXG4gICAgcHVibGljX21ldGhvZHM7XG4gIHRhYmxlXG5cbmxldCBpbml0X2NsYXNzIHRhYmxlID1cbiAgaW5zdF92YXJfY291bnQgOj0gIWluc3RfdmFyX2NvdW50ICsgdGFibGUuc2l6ZSAtIDE7XG4gIHRhYmxlLmluaXRpYWxpemVycyA8LSBMaXN0LnJldiB0YWJsZS5pbml0aWFsaXplcnM7XG4gIHJlc2l6ZSB0YWJsZSAoMyArIG1hZ2ljIHRhYmxlLm1ldGhvZHMuKDEpICogMTYgLyBTeXMud29yZF9zaXplKVxuXG5sZXQgaW5oZXJpdHMgY2xhIHZhbHMgdmlydF9tZXRocyBjb25jcl9tZXRocyAoXywgc3VwZXIsIF8sIGVudikgdG9wID1cbiAgbmFycm93IGNsYSB2YWxzIHZpcnRfbWV0aHMgY29uY3JfbWV0aHM7XG4gIGxldCBpbml0ID1cbiAgICBpZiB0b3AgdGhlbiBzdXBlciBjbGEgZW52IGVsc2UgT2JqLnJlcHIgKHN1cGVyIGNsYSkgaW5cbiAgd2lkZW4gY2xhO1xuICBBcnJheS5jb25jYXRcbiAgICBbW3wgcmVwciBpbml0IHxdO1xuICAgICBtYWdpYyAoQXJyYXkubWFwIChnZXRfdmFyaWFibGUgY2xhKSAodG9fYXJyYXkgdmFscykgOiBpbnQgYXJyYXkpO1xuICAgICBBcnJheS5tYXBcbiAgICAgICAoZnVuIG5tIC0+IHJlcHIgKGdldF9tZXRob2QgY2xhIChnZXRfbWV0aG9kX2xhYmVsIGNsYSBubSkgOiBjbG9zdXJlKSlcbiAgICAgICAodG9fYXJyYXkgY29uY3JfbWV0aHMpIF1cblxubGV0IG1ha2VfY2xhc3MgcHViX21ldGhzIGNsYXNzX2luaXQgPVxuICBsZXQgdGFibGUgPSBjcmVhdGVfdGFibGUgcHViX21ldGhzIGluXG4gIGxldCBlbnZfaW5pdCA9IGNsYXNzX2luaXQgdGFibGUgaW5cbiAgaW5pdF9jbGFzcyB0YWJsZTtcbiAgKGVudl9pbml0IChPYmoucmVwciAwKSwgY2xhc3NfaW5pdCwgZW52X2luaXQsIE9iai5yZXByIDApXG5cbnR5cGUgaW5pdF90YWJsZSA9IHsgbXV0YWJsZSBlbnZfaW5pdDogdDsgbXV0YWJsZSBjbGFzc19pbml0OiB0YWJsZSAtPiB0IH1cbltAQHdhcm5pbmcgXCItdW51c2VkLWZpZWxkXCJdXG5cbmxldCBtYWtlX2NsYXNzX3N0b3JlIHB1Yl9tZXRocyBjbGFzc19pbml0IGluaXRfdGFibGUgPVxuICBsZXQgdGFibGUgPSBjcmVhdGVfdGFibGUgcHViX21ldGhzIGluXG4gIGxldCBlbnZfaW5pdCA9IGNsYXNzX2luaXQgdGFibGUgaW5cbiAgaW5pdF9jbGFzcyB0YWJsZTtcbiAgaW5pdF90YWJsZS5jbGFzc19pbml0IDwtIGNsYXNzX2luaXQ7XG4gIGluaXRfdGFibGUuZW52X2luaXQgPC0gZW52X2luaXRcblxubGV0IGR1bW15X2NsYXNzIGxvYyA9XG4gIGxldCB1bmRlZiA9IGZ1biBfIC0+IHJhaXNlIChVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSBsb2MpIGluXG4gIChPYmoubWFnaWMgdW5kZWYsIHVuZGVmLCB1bmRlZiwgT2JqLnJlcHIgMClcblxuKCoqKiogT2JqZWN0cyAqKioqKVxuXG5sZXQgY3JlYXRlX29iamVjdCB0YWJsZSA9XG4gICgqIFhYWCBBcHBlbCBkZSBbb2JqX2Jsb2NrXSB8IENhbGwgdG8gW29ial9ibG9ja10gICopXG4gIGxldCBvYmogPSBPYmoubmV3X2Jsb2NrIE9iai5vYmplY3RfdGFnIHRhYmxlLnNpemUgaW5cbiAgKCogWFhYIEFwcGVsIGRlIFtjYW1sX21vZGlmeV0gfCBDYWxsIHRvIFtjYW1sX21vZGlmeV0gKilcbiAgT2JqLnNldF9maWVsZCBvYmogMCAoT2JqLnJlcHIgdGFibGUubWV0aG9kcyk7XG4gIE9iai5vYmogKHNldF9pZCBvYmopXG5cbmxldCBjcmVhdGVfb2JqZWN0X29wdCBvYmpfMCB0YWJsZSA9XG4gIGlmIChPYmoubWFnaWMgb2JqXzAgOiBib29sKSB0aGVuIG9ial8wIGVsc2UgYmVnaW5cbiAgICAoKiBYWFggQXBwZWwgZGUgW29ial9ibG9ja10gfCBDYWxsIHRvIFtvYmpfYmxvY2tdICAqKVxuICAgIGxldCBvYmogPSBPYmoubmV3X2Jsb2NrIE9iai5vYmplY3RfdGFnIHRhYmxlLnNpemUgaW5cbiAgICAoKiBYWFggQXBwZWwgZGUgW2NhbWxfbW9kaWZ5XSB8IENhbGwgdG8gW2NhbWxfbW9kaWZ5XSAqKVxuICAgIE9iai5zZXRfZmllbGQgb2JqIDAgKE9iai5yZXByIHRhYmxlLm1ldGhvZHMpO1xuICAgIE9iai5vYmogKHNldF9pZCBvYmopXG4gIGVuZFxuXG5sZXQgcmVjIGl0ZXJfZiBvYmogPVxuICBmdW5jdGlvblxuICAgIFtdICAgLT4gKClcbiAgfCBmOjpsIC0+IGYgb2JqOyBpdGVyX2Ygb2JqIGxcblxubGV0IHJ1bl9pbml0aWFsaXplcnMgb2JqIHRhYmxlID1cbiAgbGV0IGluaXRzID0gdGFibGUuaW5pdGlhbGl6ZXJzIGluXG4gIGlmIGluaXRzIDw+IFtdIHRoZW5cbiAgICBpdGVyX2Ygb2JqIGluaXRzXG5cbmxldCBydW5faW5pdGlhbGl6ZXJzX29wdCBvYmpfMCBvYmogdGFibGUgPVxuICBpZiAoT2JqLm1hZ2ljIG9ial8wIDogYm9vbCkgdGhlbiBvYmogZWxzZSBiZWdpblxuICAgIGxldCBpbml0cyA9IHRhYmxlLmluaXRpYWxpemVycyBpblxuICAgIGlmIGluaXRzIDw+IFtdIHRoZW4gaXRlcl9mIG9iaiBpbml0cztcbiAgICBvYmpcbiAgZW5kXG5cbmxldCBjcmVhdGVfb2JqZWN0X2FuZF9ydW5faW5pdGlhbGl6ZXJzIG9ial8wIHRhYmxlID1cbiAgaWYgKE9iai5tYWdpYyBvYmpfMCA6IGJvb2wpIHRoZW4gb2JqXzAgZWxzZSBiZWdpblxuICAgIGxldCBvYmogPSBjcmVhdGVfb2JqZWN0IHRhYmxlIGluXG4gICAgcnVuX2luaXRpYWxpemVycyBvYmogdGFibGU7XG4gICAgb2JqXG4gIGVuZFxuXG4oKiBFcXVpdmFsZW50IHByaW1pdGl2ZSBiZWxvd1xubGV0IHNlbmRzZWxmIG9iaiBsYWIgPVxuICAobWFnaWMgb2JqIDogKG9iaiAtPiB0KSBhcnJheSBhcnJheSkuKDApLihsYWIpIG9ialxuKilcbmV4dGVybmFsIHNlbmQgOiBvYmogLT4gdGFnIC0+ICdhID0gXCIlc2VuZFwiXG5leHRlcm5hbCBzZW5kY2FjaGUgOiBvYmogLT4gdGFnIC0+IHQgLT4gaW50IC0+ICdhID0gXCIlc2VuZGNhY2hlXCJcbmV4dGVybmFsIHNlbmRzZWxmIDogb2JqIC0+IGxhYmVsIC0+ICdhID0gXCIlc2VuZHNlbGZcIlxuZXh0ZXJuYWwgZ2V0X3B1YmxpY19tZXRob2QgOiBvYmogLT4gdGFnIC0+IGNsb3N1cmVcbiAgICA9IFwiY2FtbF9nZXRfcHVibGljX21ldGhvZFwiIFtAQG5vYWxsb2NdXG5cbigqKioqIHRhYmxlIGNvbGxlY3Rpb24gYWNjZXNzICoqKiopXG5cbnR5cGUgdGFibGVzID1cbiAgfCBFbXB0eVxuICB8IENvbnMgb2Yge2tleSA6IGNsb3N1cmU7IG11dGFibGUgZGF0YTogdGFibGVzOyBtdXRhYmxlIG5leHQ6IHRhYmxlc31cblxubGV0IHNldF9kYXRhIHRhYmxlcyB2ID0gbWF0Y2ggdGFibGVzIHdpdGhcbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMuZGF0YSA8LSB2XG5sZXQgc2V0X25leHQgdGFibGVzIHYgPSBtYXRjaCB0YWJsZXMgd2l0aFxuICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICB8IENvbnMgdGFibGVzIC0+IHRhYmxlcy5uZXh0IDwtIHZcbmxldCBnZXRfa2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMua2V5XG5sZXQgZ2V0X2RhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICB8IENvbnMgdGFibGVzIC0+IHRhYmxlcy5kYXRhXG5sZXQgZ2V0X25leHQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICB8IENvbnMgdGFibGVzIC0+IHRhYmxlcy5uZXh0XG5cbmxldCBidWlsZF9wYXRoIG4ga2V5cyB0YWJsZXMgPVxuICBsZXQgcmVzID0gQ29ucyB7a2V5ID0gT2JqLm1hZ2ljIDA7IGRhdGEgPSBFbXB0eTsgbmV4dCA9IEVtcHR5fSBpblxuICBsZXQgciA9IHJlZiByZXMgaW5cbiAgZm9yIGkgPSAwIHRvIG4gZG9cbiAgICByIDo9IENvbnMge2tleSA9IGtleXMuKGkpOyBkYXRhID0gIXI7IG5leHQgPSBFbXB0eX1cbiAgZG9uZTtcbiAgc2V0X2RhdGEgdGFibGVzICFyO1xuICByZXNcblxubGV0IHJlYyBsb29rdXBfa2V5cyBpIGtleXMgdGFibGVzID1cbiAgaWYgaSA8IDAgdGhlbiB0YWJsZXMgZWxzZVxuICBsZXQga2V5ID0ga2V5cy4oaSkgaW5cbiAgbGV0IHJlYyBsb29rdXBfa2V5ICh0YWJsZXM6dGFibGVzKSA9XG4gICAgaWYgZ2V0X2tleSB0YWJsZXMgPT0ga2V5IHRoZW5cbiAgICAgIG1hdGNoIGdldF9kYXRhIHRhYmxlcyB3aXRoXG4gICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBDb25zIF8gYXMgdGFibGVzX2RhdGEgLT5cbiAgICAgICAgICBsb29rdXBfa2V5cyAoaS0xKSBrZXlzIHRhYmxlc19kYXRhXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZ2V0X25leHQgdGFibGVzIHdpdGhcbiAgICAgIHwgQ29ucyBfIGFzIG5leHQgLT4gbG9va3VwX2tleSBuZXh0XG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgbGV0IG5leHQgOiB0YWJsZXMgPSBDb25zIHtrZXk7IGRhdGEgPSBFbXB0eTsgbmV4dCA9IEVtcHR5fSBpblxuICAgICAgICAgIHNldF9uZXh0IHRhYmxlcyBuZXh0O1xuICAgICAgICAgIGJ1aWxkX3BhdGggKGktMSkga2V5cyBuZXh0XG4gIGluXG4gIGxvb2t1cF9rZXkgdGFibGVzXG5cbmxldCBsb29rdXBfdGFibGVzIHJvb3Qga2V5cyA9XG4gIG1hdGNoIGdldF9kYXRhIHJvb3Qgd2l0aFxuICB8IENvbnMgXyBhcyByb290X2RhdGEgLT5cbiAgICBsb29rdXBfa2V5cyAoQXJyYXkubGVuZ3RoIGtleXMgLSAxKSBrZXlzIHJvb3RfZGF0YVxuICB8IEVtcHR5IC0+XG4gICAgYnVpbGRfcGF0aCAoQXJyYXkubGVuZ3RoIGtleXMgLSAxKSBrZXlzIHJvb3RcblxuKCoqKiogYnVpbHRpbiBtZXRob2RzICoqKiopXG5cbmxldCBnZXRfY29uc3QgeCA9IHJldCAoZnVuIF9vYmogLT4geClcbmxldCBnZXRfdmFyIG4gICA9IHJldCAoZnVuIG9iaiAtPiBBcnJheS51bnNhZmVfZ2V0IG9iaiBuKVxubGV0IGdldF9lbnYgZSBuID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgQXJyYXkudW5zYWZlX2dldCAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IG9iaiBlKSA6IG9iaikgbilcbmxldCBnZXRfbWV0aCBuICA9IHJldCAoZnVuIG9iaiAtPiBzZW5kc2VsZiBvYmogbilcbmxldCBzZXRfdmFyIG4gICA9IHJldCAoZnVuIG9iaiB4IC0+IEFycmF5LnVuc2FmZV9zZXQgb2JqIG4geClcbmxldCBhcHBfY29uc3QgZiB4ID0gcmV0IChmdW4gX29iaiAtPiBmIHgpXG5sZXQgYXBwX3ZhciBmIG4gICA9IHJldCAoZnVuIG9iaiAtPiBmIChBcnJheS51bnNhZmVfZ2V0IG9iaiBuKSlcbmxldCBhcHBfZW52IGYgZSBuID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgZiAoQXJyYXkudW5zYWZlX2dldCAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IG9iaiBlKSA6IG9iaikgbikpXG5sZXQgYXBwX21ldGggZiBuICA9IHJldCAoZnVuIG9iaiAtPiBmIChzZW5kc2VsZiBvYmogbikpXG5sZXQgYXBwX2NvbnN0X2NvbnN0IGYgeCB5ID0gcmV0IChmdW4gX29iaiAtPiBmIHggeSlcbmxldCBhcHBfY29uc3RfdmFyIGYgeCBuICAgPSByZXQgKGZ1biBvYmogLT4gZiB4IChBcnJheS51bnNhZmVfZ2V0IG9iaiBuKSlcbmxldCBhcHBfY29uc3RfbWV0aCBmIHggbiA9IHJldCAoZnVuIG9iaiAtPiBmIHggKHNlbmRzZWxmIG9iaiBuKSlcbmxldCBhcHBfdmFyX2NvbnN0IGYgbiB4ID0gcmV0IChmdW4gb2JqIC0+IGYgKEFycmF5LnVuc2FmZV9nZXQgb2JqIG4pIHgpXG5sZXQgYXBwX21ldGhfY29uc3QgZiBuIHggPSByZXQgKGZ1biBvYmogLT4gZiAoc2VuZHNlbGYgb2JqIG4pIHgpXG5sZXQgYXBwX2NvbnN0X2VudiBmIHggZSBuID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgZiB4IChBcnJheS51bnNhZmVfZ2V0IChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIGUpIDogb2JqKSBuKSlcbmxldCBhcHBfZW52X2NvbnN0IGYgZSBuIHggPVxuICByZXQgKGZ1biBvYmogLT5cbiAgICBmIChBcnJheS51bnNhZmVfZ2V0IChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIGUpIDogb2JqKSBuKSB4KVxubGV0IG1ldGhfYXBwX2NvbnN0IG4geCA9IHJldCAoZnVuIG9iaiAtPiAoc2VuZHNlbGYgb2JqIG4gOiBfIC0+IF8pIHgpXG5sZXQgbWV0aF9hcHBfdmFyIG4gbSA9XG4gIHJldCAoZnVuIG9iaiAtPiAoc2VuZHNlbGYgb2JqIG4gOiBfIC0+IF8pIChBcnJheS51bnNhZmVfZ2V0IG9iaiBtKSlcbmxldCBtZXRoX2FwcF9lbnYgbiBlIG0gPVxuICByZXQgKGZ1biBvYmogLT4gKHNlbmRzZWxmIG9iaiBuIDogXyAtPiBfKVxuICAgICAgKEFycmF5LnVuc2FmZV9nZXQgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogZSkgOiBvYmopIG0pKVxubGV0IG1ldGhfYXBwX21ldGggbiBtID1cbiAgcmV0IChmdW4gb2JqIC0+IChzZW5kc2VsZiBvYmogbiA6IF8gLT4gXykgKHNlbmRzZWxmIG9iaiBtKSlcbmxldCBzZW5kX2NvbnN0IG0geCBjID1cbiAgcmV0IChmdW4gb2JqIC0+IHNlbmRjYWNoZSB4IG0gKEFycmF5LnVuc2FmZV9nZXQgb2JqIDApIGMpXG5sZXQgc2VuZF92YXIgbSBuIGMgPVxuICByZXQgKGZ1biBvYmogLT5cbiAgICBzZW5kY2FjaGUgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogbikgOiBvYmopIG1cbiAgICAgIChBcnJheS51bnNhZmVfZ2V0IG9iaiAwKSBjKVxubGV0IHNlbmRfZW52IG0gZSBuIGMgPVxuICByZXQgKGZ1biBvYmogLT5cbiAgICBzZW5kY2FjaGVcbiAgICAgIChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXRcbiAgICAgICAgICAgICAgICAgICAgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogZSkgOiBvYmopIG4pIDogb2JqKVxuICAgICAgbSAoQXJyYXkudW5zYWZlX2dldCBvYmogMCkgYylcbmxldCBzZW5kX21ldGggbSBuIGMgPVxuICByZXQgKGZ1biBvYmogLT5cbiAgICBzZW5kY2FjaGUgKHNlbmRzZWxmIG9iaiBuKSBtIChBcnJheS51bnNhZmVfZ2V0IG9iaiAwKSBjKVxubGV0IG5ld19jYWNoZSB0YWJsZSA9XG4gIGxldCBuID0gbmV3X21ldGhvZCB0YWJsZSBpblxuICBsZXQgbiA9XG4gICAgaWYgbiBtb2QgMiA9IDAgfHwgbiA+IDIgKyBtYWdpYyB0YWJsZS5tZXRob2RzLigxKSAqIDE2IC8gU3lzLndvcmRfc2l6ZVxuICAgIHRoZW4gbiBlbHNlIG5ld19tZXRob2QgdGFibGVcbiAgaW5cbiAgdGFibGUubWV0aG9kcy4obikgPC0gT2JqLm1hZ2ljIDA7XG4gIG5cblxudHlwZSBpbXBsID1cbiAgICBHZXRDb25zdFxuICB8IEdldFZhclxuICB8IEdldEVudlxuICB8IEdldE1ldGhcbiAgfCBTZXRWYXJcbiAgfCBBcHBDb25zdFxuICB8IEFwcFZhclxuICB8IEFwcEVudlxuICB8IEFwcE1ldGhcbiAgfCBBcHBDb25zdENvbnN0XG4gIHwgQXBwQ29uc3RWYXJcbiAgfCBBcHBDb25zdEVudlxuICB8IEFwcENvbnN0TWV0aFxuICB8IEFwcFZhckNvbnN0XG4gIHwgQXBwRW52Q29uc3RcbiAgfCBBcHBNZXRoQ29uc3RcbiAgfCBNZXRoQXBwQ29uc3RcbiAgfCBNZXRoQXBwVmFyXG4gIHwgTWV0aEFwcEVudlxuICB8IE1ldGhBcHBNZXRoXG4gIHwgU2VuZENvbnN0XG4gIHwgU2VuZFZhclxuICB8IFNlbmRFbnZcbiAgfCBTZW5kTWV0aFxuICB8IENsb3N1cmUgb2YgY2xvc3VyZVxuXG5sZXQgbWV0aG9kX2ltcGwgdGFibGUgaSBhcnIgPVxuICBsZXQgbmV4dCAoKSA9IGluY3IgaTsgbWFnaWMgYXJyLighaSkgaW5cbiAgbWF0Y2ggbmV4dCgpIHdpdGhcbiAgICBHZXRDb25zdCAtPiBsZXQgeCA6IHQgPSBuZXh0KCkgaW4gZ2V0X2NvbnN0IHhcbiAgfCBHZXRWYXIgICAtPiBsZXQgbiA9IG5leHQoKSBpbiBnZXRfdmFyIG5cbiAgfCBHZXRFbnYgICAtPiBsZXQgZSA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpbiBnZXRfZW52IGUgblxuICB8IEdldE1ldGggIC0+IGxldCBuID0gbmV4dCgpIGluIGdldF9tZXRoIG5cbiAgfCBTZXRWYXIgICAtPiBsZXQgbiA9IG5leHQoKSBpbiBzZXRfdmFyIG5cbiAgfCBBcHBDb25zdCAtPiBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBhcHBfY29uc3QgZiB4XG4gIHwgQXBwVmFyICAgLT4gbGV0IGYgPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0ICgpIGluIGFwcF92YXIgZiBuXG4gIHwgQXBwRW52ICAgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluICBsZXQgZSA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgYXBwX2VudiBmIGUgblxuICB8IEFwcE1ldGggIC0+IGxldCBmID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCAoKSBpbiBhcHBfbWV0aCBmIG5cbiAgfCBBcHBDb25zdENvbnN0IC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBsZXQgeSA9IG5leHQoKSBpblxuICAgICAgYXBwX2NvbnN0X2NvbnN0IGYgeCB5XG4gIHwgQXBwQ29uc3RWYXIgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCgpIGluXG4gICAgICBhcHBfY29uc3RfdmFyIGYgeCBuXG4gIHwgQXBwQ29uc3RFbnYgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluIGxldCBlID0gbmV4dCAoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgYXBwX2NvbnN0X2VudiBmIHggZSBuXG4gIHwgQXBwQ29uc3RNZXRoIC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgYXBwX2NvbnN0X21ldGggZiB4IG5cbiAgfCBBcHBWYXJDb25zdCAtPlxuICAgICAgbGV0IGYgPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW5cbiAgICAgIGFwcF92YXJfY29uc3QgZiBuIHhcbiAgfCBBcHBFbnZDb25zdCAtPlxuICAgICAgbGV0IGYgPSBuZXh0KCkgaW4gbGV0IGUgPSBuZXh0ICgpIGluIGxldCBuID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluXG4gICAgICBhcHBfZW52X2NvbnN0IGYgZSBuIHhcbiAgfCBBcHBNZXRoQ29uc3QgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluXG4gICAgICBhcHBfbWV0aF9jb25zdCBmIG4geFxuICB8IE1ldGhBcHBDb25zdCAtPlxuICAgICAgbGV0IG4gPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW4gbWV0aF9hcHBfY29uc3QgbiB4XG4gIHwgTWV0aEFwcFZhciAtPlxuICAgICAgbGV0IG4gPSBuZXh0KCkgaW4gbGV0IG0gPSBuZXh0KCkgaW4gbWV0aF9hcHBfdmFyIG4gbVxuICB8IE1ldGhBcHBFbnYgLT5cbiAgICAgIGxldCBuID0gbmV4dCgpIGluIGxldCBlID0gbmV4dCgpIGluIGxldCBtID0gbmV4dCgpIGluXG4gICAgICBtZXRoX2FwcF9lbnYgbiBlIG1cbiAgfCBNZXRoQXBwTWV0aCAtPlxuICAgICAgbGV0IG4gPSBuZXh0KCkgaW4gbGV0IG0gPSBuZXh0KCkgaW4gbWV0aF9hcHBfbWV0aCBuIG1cbiAgfCBTZW5kQ29uc3QgLT5cbiAgICAgIGxldCBtID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluIHNlbmRfY29uc3QgbSB4IChuZXdfY2FjaGUgdGFibGUpXG4gIHwgU2VuZFZhciAtPlxuICAgICAgbGV0IG0gPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0ICgpIGluIHNlbmRfdmFyIG0gbiAobmV3X2NhY2hlIHRhYmxlKVxuICB8IFNlbmRFbnYgLT5cbiAgICAgIGxldCBtID0gbmV4dCgpIGluIGxldCBlID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCgpIGluXG4gICAgICBzZW5kX2VudiBtIGUgbiAobmV3X2NhY2hlIHRhYmxlKVxuICB8IFNlbmRNZXRoIC0+XG4gICAgICBsZXQgbSA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQgKCkgaW4gc2VuZF9tZXRoIG0gbiAobmV3X2NhY2hlIHRhYmxlKVxuICB8IENsb3N1cmUgXyBhcyBjbG8gLT4gbWFnaWMgY2xvXG5cbmxldCBzZXRfbWV0aG9kcyB0YWJsZSBtZXRob2RzID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBtZXRob2RzIGluIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW4gZG9cbiAgICBsZXQgbGFiZWwgPSBtZXRob2RzLighaSkgaW4gbGV0IGNsbyA9IG1ldGhvZF9pbXBsIHRhYmxlIGkgbWV0aG9kcyBpblxuICAgIHNldF9tZXRob2QgdGFibGUgbGFiZWwgY2xvO1xuICAgIGluY3IgaVxuICBkb25lXG5cbigqKioqIFN0YXRpc3RpY3MgKioqKilcblxudHlwZSBzdGF0cyA9XG4gIHsgY2xhc3NlczogaW50OyBtZXRob2RzOiBpbnQ7IGluc3RfdmFyczogaW50OyB9XG5cbmxldCBzdGF0cyAoKSA9XG4gIHsgY2xhc3NlcyA9ICF0YWJsZV9jb3VudDtcbiAgICBtZXRob2RzID0gIW1ldGhvZF9jb3VudDsgaW5zdF92YXJzID0gIWluc3RfdmFyX2NvdW50OyB9XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDA0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgc2hhcGUgPVxuICB8IEZ1bmN0aW9uXG4gIHwgTGF6eVxuICB8IENsYXNzXG4gIHwgTW9kdWxlIG9mIHNoYXBlIGFycmF5XG4gIHwgVmFsdWUgb2YgT2JqLnRcblxubGV0IHJlYyBpbml0X21vZF9maWVsZCBtb2R1IGkgbG9jIHNoYXBlID1cbiAgbGV0IGluaXQgPVxuICAgIG1hdGNoIHNoYXBlIHdpdGhcbiAgICB8IEZ1bmN0aW9uIC0+XG4gICAgICAgbGV0IHJlYyBmbiAoeCA6ICdhKSA9XG4gICAgICAgICBsZXQgZm4nIDogJ2EgLT4gJ2IgPSBPYmoub2JqIChPYmouZmllbGQgbW9kdSBpKSBpblxuICAgICAgICAgaWYgZm4gPT0gZm4nIHRoZW5cbiAgICAgICAgICAgcmFpc2UgKFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlIGxvYylcbiAgICAgICAgIGVsc2VcbiAgICAgICAgICAgZm4nIHggaW5cbiAgICAgICBPYmoucmVwciBmblxuICAgIHwgTGF6eSAtPlxuICAgICAgIGxldCByZWMgbCA9XG4gICAgICAgICBsYXp5IChcbiAgICAgICAgICAgbGV0IGwnID0gT2JqLm9iaiAoT2JqLmZpZWxkIG1vZHUgaSkgaW5cbiAgICAgICAgICAgaWYgbCA9PSBsJyB0aGVuXG4gICAgICAgICAgICAgcmFpc2UgKFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlIGxvYylcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIExhenkuZm9yY2UgbCcpIGluXG4gICAgICAgT2JqLnJlcHIgbFxuICAgIHwgQ2xhc3MgLT5cbiAgICAgICBPYmoucmVwciAoQ2FtbGludGVybmFsT08uZHVtbXlfY2xhc3MgbG9jKVxuICAgIHwgTW9kdWxlIGNvbXBzIC0+XG4gICAgICAgT2JqLnJlcHIgKGluaXRfbW9kX2Jsb2NrIGxvYyBjb21wcylcbiAgICB8IFZhbHVlIHYgLT4gdlxuICBpblxuICBPYmouc2V0X2ZpZWxkIG1vZHUgaSBpbml0XG5cbmFuZCBpbml0X21vZF9ibG9jayBsb2MgY29tcHMgPVxuICBsZXQgbGVuZ3RoID0gQXJyYXkubGVuZ3RoIGNvbXBzIGluXG4gIGxldCBtb2R1ID0gT2JqLm5ld19ibG9jayAwIGxlbmd0aCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIC0gMSBkb1xuICAgIGluaXRfbW9kX2ZpZWxkIG1vZHUgaSBsb2MgY29tcHMuKGkpXG4gIGRvbmU7XG4gIG1vZHVcblxubGV0IGluaXRfbW9kIGxvYyBzaGFwZSA9XG4gIG1hdGNoIHNoYXBlIHdpdGhcbiAgfCBNb2R1bGUgY29tcHMgLT5cbiAgICAgT2JqLnJlcHIgKGluaXRfbW9kX2Jsb2NrIGxvYyBjb21wcylcbiAgfCBfIC0+IGZhaWx3aXRoIFwiQ2FtbGludGVybmFsTW9kLmluaXRfbW9kOiBub3QgYSBtb2R1bGVcIlxuXG5sZXQgcmVjIHVwZGF0ZV9tb2RfZmllbGQgbW9kdSBpIHNoYXBlIG4gPVxuICBtYXRjaCBzaGFwZSB3aXRoXG4gIHwgRnVuY3Rpb24gfCBMYXp5IC0+XG4gICAgIE9iai5zZXRfZmllbGQgbW9kdSBpIG5cbiAgfCBWYWx1ZSBfIC0+XG4gICAgICgpICgqIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IHRoZXJlICopXG4gIHwgQ2xhc3MgLT5cbiAgICAgYXNzZXJ0IChPYmoudGFnIG4gPSAwICYmIE9iai5zaXplIG4gPSA0KTtcbiAgICAgbGV0IGNsID0gT2JqLmZpZWxkIG1vZHUgaSBpblxuICAgICBmb3IgaiA9IDAgdG8gMyBkb1xuICAgICAgIE9iai5zZXRfZmllbGQgY2wgaiAoT2JqLmZpZWxkIG4gailcbiAgICAgZG9uZVxuICB8IE1vZHVsZSBjb21wcyAtPlxuICAgICB1cGRhdGVfbW9kX2Jsb2NrIGNvbXBzIChPYmouZmllbGQgbW9kdSBpKSBuXG5cbmFuZCB1cGRhdGVfbW9kX2Jsb2NrIGNvbXBzIG8gbiA9XG4gIGFzc2VydCAoT2JqLnRhZyBuID0gMCAmJiBPYmouc2l6ZSBuID49IEFycmF5Lmxlbmd0aCBjb21wcyk7XG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggY29tcHMgLSAxIGRvXG4gICAgdXBkYXRlX21vZF9maWVsZCBvIGkgY29tcHMuKGkpIChPYmouZmllbGQgbiBpKVxuICBkb25lXG5cbmxldCB1cGRhdGVfbW9kIHNoYXBlIG8gbiA9XG4gIG1hdGNoIHNoYXBlIHdpdGhcbiAgfCBNb2R1bGUgY29tcHMgLT5cbiAgICAgdXBkYXRlX21vZF9ibG9jayBjb21wcyBvIG5cbiAgfCBfIC0+IGZhaWx3aXRoIFwiQ2FtbGludGVybmFsTW9kLnVwZGF0ZV9tb2Q6IG5vdCBhIG1vZHVsZVwiXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl0gKCogaWdub3JlIGRlcHJlY2F0aW9uIHdhcm5pbmcgYWJvdXQgbW9kdWxlIFN0cmVhbSAqKVxuXG50eXBlIHRva2VuID1cbiAgICBLd2Qgb2Ygc3RyaW5nXG4gIHwgSWRlbnQgb2Ygc3RyaW5nXG4gIHwgSW50IG9mIGludFxuICB8IEZsb2F0IG9mIGZsb2F0XG4gIHwgU3RyaW5nIG9mIHN0cmluZ1xuICB8IENoYXIgb2YgY2hhclxuXG4oKiBUaGUgc3RyaW5nIGJ1ZmZlcmluZyBtYWNoaW5lcnkgKilcblxubGV0IGluaXRpYWxfYnVmZmVyID0gQnl0ZXMuY3JlYXRlIDMyXG5cbmxldCBidWZmZXIgPSByZWYgaW5pdGlhbF9idWZmZXJcbmxldCBidWZwb3MgPSByZWYgMFxuXG5sZXQgcmVzZXRfYnVmZmVyICgpID0gYnVmZmVyIDo9IGluaXRpYWxfYnVmZmVyOyBidWZwb3MgOj0gMFxuXG5sZXQgc3RvcmUgYyA9XG4gIGlmICFidWZwb3MgPj0gQnl0ZXMubGVuZ3RoICFidWZmZXIgdGhlbiBiZWdpblxuICAgIGxldCBuZXdidWZmZXIgPSBCeXRlcy5jcmVhdGUgKDIgKiAhYnVmcG9zKSBpblxuICAgIEJ5dGVzLmJsaXQgIWJ1ZmZlciAwIG5ld2J1ZmZlciAwICFidWZwb3M7XG4gICAgYnVmZmVyIDo9IG5ld2J1ZmZlclxuICBlbmQ7XG4gIEJ5dGVzLnNldCAhYnVmZmVyICFidWZwb3MgYztcbiAgaW5jciBidWZwb3NcblxubGV0IGdldF9zdHJpbmcgKCkgPVxuICBsZXQgcyA9IEJ5dGVzLnN1Yl9zdHJpbmcgIWJ1ZmZlciAwICFidWZwb3MgaW4gYnVmZmVyIDo9IGluaXRpYWxfYnVmZmVyOyBzXG5cbigqIFRoZSBsZXhlciAqKVxuXG5sZXQgbWFrZV9sZXhlciBrZXl3b3JkcyA9XG4gIGxldCBrd2RfdGFibGUgPSBIYXNodGJsLmNyZWF0ZSAxNyBpblxuICBMaXN0Lml0ZXIgKGZ1biBzIC0+IEhhc2h0YmwuYWRkIGt3ZF90YWJsZSBzIChLd2QgcykpIGtleXdvcmRzO1xuICBsZXQgaWRlbnRfb3Jfa2V5d29yZCBpZCA9XG4gICAgdHJ5IEhhc2h0YmwuZmluZCBrd2RfdGFibGUgaWQgd2l0aFxuICAgICAgTm90X2ZvdW5kIC0+IElkZW50IGlkXG4gIGFuZCBrZXl3b3JkX29yX2Vycm9yIGMgPVxuICAgIGxldCBzID0gU3RyaW5nLm1ha2UgMSBjIGluXG4gICAgdHJ5IEhhc2h0YmwuZmluZCBrd2RfdGFibGUgcyB3aXRoXG4gICAgICBOb3RfZm91bmQgLT4gcmFpc2UgKFN0cmVhbS5FcnJvciAoXCJJbGxlZ2FsIGNoYXJhY3RlciBcIiBeIHMpKVxuICBpblxuICBsZXQgcmVjIG5leHRfdG9rZW4gKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZSAoJyAnIHwgJ1xcMDEwJyB8ICdcXDAxMycgfCAnXFwwMDknIHwgJ1xcMDI2JyB8ICdcXDAxMicpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXzsgbmV4dF90b2tlbiBzdHJtX19cbiAgICB8IFNvbWUgKCdBJy4uJ1onIHwgJ2EnLi4neicgfCAnXycgfCAnXFwxOTInLi4nXFwyNTUnIGFzIGMpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IHMgPSBzdHJtX18gaW4gcmVzZXRfYnVmZmVyICgpOyBzdG9yZSBjOyBpZGVudCBzXG4gICAgfCBTb21lXG4gICAgICAgICgnIScgfCAnJScgfCAnJicgfCAnJCcgfCAnIycgfCAnKycgfCAnLycgfCAnOicgfCAnPCcgfCAnPScgfCAnPicgfFxuICAgICAgICAgJz8nIHwgJ0AnIHwgJ1xcXFwnIHwgJ34nIHwgJ14nIHwgJ3wnIHwgJyonIGFzIGMpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IHMgPSBzdHJtX18gaW4gcmVzZXRfYnVmZmVyICgpOyBzdG9yZSBjOyBpZGVudDIgc1xuICAgIHwgU29tZSAoJzAnLi4nOScgYXMgYykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fO1xuICAgICAgICBsZXQgcyA9IHN0cm1fXyBpbiByZXNldF9idWZmZXIgKCk7IHN0b3JlIGM7IG51bWJlciBzXG4gICAgfCBTb21lICdcXCcnIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IGMgPVxuICAgICAgICAgIHRyeSBjaGFyIHN0cm1fXyB3aXRoXG4gICAgICAgICAgICBTdHJlYW0uRmFpbHVyZSAtPiByYWlzZSAoU3RyZWFtLkVycm9yIFwiXCIpXG4gICAgICAgIGluXG4gICAgICAgIGJlZ2luIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICAgICAgU29tZSAnXFwnJyAtPiBTdHJlYW0uanVuayBzdHJtX187IFNvbWUgKENoYXIgYylcbiAgICAgICAgfCBfIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgZW5kXG4gICAgfCBTb21lICdcXFwiJyAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187XG4gICAgICAgIGxldCBzID0gc3RybV9fIGluIHJlc2V0X2J1ZmZlciAoKTsgU29tZSAoU3RyaW5nIChzdHJpbmcgcykpXG4gICAgfCBTb21lICctJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG5lZ19udW1iZXIgc3RybV9fXG4gICAgfCBTb21lICcoJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG1heWJlX2NvbW1lbnQgc3RybV9fXG4gICAgfCBTb21lIGMgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyBTb21lIChrZXl3b3JkX29yX2Vycm9yIGMpXG4gICAgfCBfIC0+IE5vbmVcbiAgYW5kIGlkZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWVcbiAgICAgICAgKCdBJy4uJ1onIHwgJ2EnLi4neicgfCAnXFwxOTInLi4nXFwyNTUnIHwgJzAnLi4nOScgfCAnXycgfCAnXFwnJyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IGlkZW50IHNcbiAgICB8IF8gLT4gU29tZSAoaWRlbnRfb3Jfa2V5d29yZCAoZ2V0X3N0cmluZyAoKSkpXG4gIGFuZCBpZGVudDIgKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZVxuICAgICAgICAoJyEnIHwgJyUnIHwgJyYnIHwgJyQnIHwgJyMnIHwgJysnIHwgJy0nIHwgJy8nIHwgJzonIHwgJzwnIHwgJz0nIHxcbiAgICAgICAgICc+JyB8ICc/JyB8ICdAJyB8ICdcXFxcJyB8ICd+JyB8ICdeJyB8ICd8JyB8ICcqJyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IGlkZW50MiBzXG4gICAgfCBfIC0+IFNvbWUgKGlkZW50X29yX2tleXdvcmQgKGdldF9zdHJpbmcgKCkpKVxuICBhbmQgbmVnX251bWJlciAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnMCcuLic5JyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187XG4gICAgICAgIGxldCBzID0gc3RybV9fIGluIHJlc2V0X2J1ZmZlciAoKTsgc3RvcmUgJy0nOyBzdG9yZSBjOyBudW1iZXIgc1xuICAgIHwgXyAtPiBsZXQgcyA9IHN0cm1fXyBpbiByZXNldF9idWZmZXIgKCk7IHN0b3JlICctJzsgaWRlbnQyIHNcbiAgYW5kIG51bWJlciAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnMCcuLic5JyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IG51bWJlciBzXG4gICAgfCBTb21lICcuJyAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlICcuJzsgZGVjaW1hbF9wYXJ0IHNcbiAgICB8IFNvbWUgKCdlJyB8ICdFJykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fOyBsZXQgcyA9IHN0cm1fXyBpbiBzdG9yZSAnRSc7IGV4cG9uZW50X3BhcnQgc1xuICAgIHwgXyAtPiBTb21lIChJbnQgKGludF9vZl9zdHJpbmcgKGdldF9zdHJpbmcgKCkpKSlcbiAgYW5kIGRlY2ltYWxfcGFydCAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnMCcuLic5JyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IGRlY2ltYWxfcGFydCBzXG4gICAgfCBTb21lICgnZScgfCAnRScpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXzsgbGV0IHMgPSBzdHJtX18gaW4gc3RvcmUgJ0UnOyBleHBvbmVudF9wYXJ0IHNcbiAgICB8IF8gLT4gU29tZSAoRmxvYXQgKGZsb2F0X29mX3N0cmluZyAoZ2V0X3N0cmluZyAoKSkpKVxuICBhbmQgZXhwb25lbnRfcGFydCAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnKycgfCAnLScgYXMgYykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fOyBsZXQgcyA9IHN0cm1fXyBpbiBzdG9yZSBjOyBlbmRfZXhwb25lbnRfcGFydCBzXG4gICAgfCBfIC0+IGVuZF9leHBvbmVudF9wYXJ0IHN0cm1fX1xuICBhbmQgZW5kX2V4cG9uZW50X3BhcnQgKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZSAoJzAnLi4nOScgYXMgYykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fOyBsZXQgcyA9IHN0cm1fXyBpbiBzdG9yZSBjOyBlbmRfZXhwb25lbnRfcGFydCBzXG4gICAgfCBfIC0+IFNvbWUgKEZsb2F0IChmbG9hdF9vZl9zdHJpbmcgKGdldF9zdHJpbmcgKCkpKSlcbiAgYW5kIHN0cmluZyAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICdcXFwiJyAtPiBTdHJlYW0uanVuayBzdHJtX187IGdldF9zdHJpbmcgKClcbiAgICB8IFNvbWUgJ1xcXFwnIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IGMgPVxuICAgICAgICAgIHRyeSBlc2NhcGUgc3RybV9fIHdpdGhcbiAgICAgICAgICAgIFN0cmVhbS5GYWlsdXJlIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHMgPSBzdHJtX18gaW4gc3RvcmUgYzsgc3RyaW5nIHNcbiAgICB8IFNvbWUgYyAtPiBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IHN0cmluZyBzXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBjaGFyIChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJ1xcXFwnIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgYmVnaW4gdHJ5IGVzY2FwZSBzdHJtX18gd2l0aFxuICAgICAgICAgIFN0cmVhbS5GYWlsdXJlIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgZW5kXG4gICAgfCBTb21lIGMgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyBjXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBlc2NhcGUgKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZSAnbicgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyAnXFxuJ1xuICAgIHwgU29tZSAncicgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyAnXFxyJ1xuICAgIHwgU29tZSAndCcgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyAnXFx0J1xuICAgIHwgU29tZSAoJzAnLi4nOScgYXMgYzEpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgYmVnaW4gbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgICAgICBTb21lICgnMCcuLic5JyBhcyBjMikgLT5cbiAgICAgICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICAgICAgICAgIFNvbWUgKCcwJy4uJzknIGFzIGMzKSAtPlxuICAgICAgICAgICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgICAgICAgICBDaGFyLmNoclxuICAgICAgICAgICAgICAgICAgKChDaGFyLmNvZGUgYzEgLSA0OCkgKiAxMDAgKyAoQ2hhci5jb2RlIGMyIC0gNDgpICogMTAgK1xuICAgICAgICAgICAgICAgICAgICAgKENoYXIuY29kZSBjMyAtIDQ4KSlcbiAgICAgICAgICAgIHwgXyAtPiByYWlzZSAoU3RyZWFtLkVycm9yIFwiXCIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgfCBfIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgZW5kXG4gICAgfCBTb21lIGMgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyBjXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBtYXliZV9jb21tZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJyonIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXzsgbGV0IHMgPSBzdHJtX18gaW4gY29tbWVudCBzOyBuZXh0X3Rva2VuIHNcbiAgICB8IF8gLT4gU29tZSAoa2V5d29yZF9vcl9lcnJvciAnKCcpXG4gIGFuZCBjb21tZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJygnIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgbWF5YmVfbmVzdGVkX2NvbW1lbnQgc3RybV9fXG4gICAgfCBTb21lICcqJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG1heWJlX2VuZF9jb21tZW50IHN0cm1fX1xuICAgIHwgU29tZSBfIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgY29tbWVudCBzdHJtX19cbiAgICB8IF8gLT4gcmFpc2UgU3RyZWFtLkZhaWx1cmVcbiAgYW5kIG1heWJlX25lc3RlZF9jb21tZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJyonIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgbGV0IHMgPSBzdHJtX18gaW4gY29tbWVudCBzOyBjb21tZW50IHNcbiAgICB8IFNvbWUgXyAtPiBTdHJlYW0uanVuayBzdHJtX187IGNvbW1lbnQgc3RybV9fXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBtYXliZV9lbmRfY29tbWVudCAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICcpJyAtPiBTdHJlYW0uanVuayBzdHJtX187ICgpXG4gICAgfCBTb21lICcqJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG1heWJlX2VuZF9jb21tZW50IHN0cm1fX1xuICAgIHwgU29tZSBfIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgY29tbWVudCBzdHJtX19cbiAgICB8IF8gLT4gcmFpc2UgU3RyZWFtLkZhaWx1cmVcbiAgaW5cbiAgZnVuIGlucHV0IC0+IFN0cmVhbS5mcm9tIChmdW4gX2NvdW50IC0+IG5leHRfdG9rZW4gaW5wdXQpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPSBzaWdcblxuICB0eXBlIGtleVxuICB0eXBlICEnYSB0XG4gIHZhbCBjcmVhdGUgOiA/cmFuZG9tICgqdGh3YXJ0IHRvb2xzL3N5bmNfc3RkbGliX2RvY3MqKSA6IGJvb2wgLT4gaW50IC0+ICdhIHRcbiAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICB2YWwgY29weSA6ICdhIHQgLT4gJ2EgdFxuICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICB2YWwgcmVtb3ZlIDogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICB2YWwgZmluZCA6ICdhIHQgLT4ga2V5IC0+ICdhXG4gIHZhbCBmaW5kX29wdCA6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICB2YWwgZmluZF9hbGwgOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICB2YWwgaXRlciA6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgW0BAYWxlcnQgb2xkX2VwaGVtZXJvbl9hcGkgXCJUaGlzIGZ1bmN0aW9uIHdvbid0IGJlIGF2YWlsYWJsZSBpbiA1LjBcIl1cbiAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZSA6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgdmFsIHN0YXRzIDogJ2EgdCAtPiBIYXNodGJsLnN0YXRpc3RpY3NcbiAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgdmFsIGNsZWFuOiAnYSB0IC0+IHVuaXRcbiAgdmFsIHN0YXRzX2FsaXZlOiAnYSB0IC0+IEhhc2h0Ymwuc3RhdGlzdGljc1xuICAgICgqKiBzYW1lIGFzIHshc3RhdHN9IGJ1dCBvbmx5IGNvdW50IHRoZSBhbGl2ZSBiaW5kaW5ncyAqKVxuZW5kXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcblxuICB0eXBlIGtleVxuICB0eXBlICEnYSB0XG4gIHZhbCBjcmVhdGUgOiBpbnQgLT4gJ2EgdFxuICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gIHZhbCBjb3B5IDogJ2EgdCAtPiAnYSB0XG4gIHZhbCBhZGQgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gIHZhbCBmaW5kIDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgdmFsIGZpbmRfb3B0IDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gIHZhbCBmaW5kX2FsbCA6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gIHZhbCBpdGVyIDogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlIDogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCBmb2xkIDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCBsZW5ndGggOiAnYSB0IC0+IGludFxuICB2YWwgc3RhdHMgOiAnYSB0IC0+IEhhc2h0Ymwuc3RhdGlzdGljc1xuICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgW0BAYWxlcnQgb2xkX2VwaGVtZXJvbl9hcGkgXCJUaGlzIGZ1bmN0aW9uIHdvbid0IGJlIGF2YWlsYWJsZSBpbiA1LjBcIl1cbiAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICB2YWwgY2xlYW46ICdhIHQgLT4gdW5pdFxuICB2YWwgc3RhdHNfYWxpdmU6ICdhIHQgLT4gSGFzaHRibC5zdGF0aXN0aWNzXG4gICAgKCoqIHNhbWUgYXMgeyFzdGF0c30gYnV0IG9ubHkgY291bnQgdGhlIGFsaXZlIGJpbmRpbmdzICopXG5lbmRcblxubW9kdWxlIEdlbkhhc2hUYWJsZSA9IHN0cnVjdFxuXG4gIHR5cGUgZXF1YWwgPVxuICB8IEVUcnVlIHwgRUZhbHNlXG4gIHwgRURlYWQgKCoqIHRoZSBnYXJiYWdlIGNvbGxlY3RvciByZWNsYWltZWQgdGhlIGRhdGEgKilcblxuICBtb2R1bGUgTWFrZVNlZWRlZChIOiBzaWdcbiAgICB0eXBlIHRcbiAgICB0eXBlICdhIGNvbnRhaW5lclxuICAgIHZhbCBjcmVhdGU6IHQgLT4gJ2EgLT4gJ2EgY29udGFpbmVyXG4gICAgdmFsIGhhc2g6IGludCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogJ2EgY29udGFpbmVyIC0+IHQgLT4gZXF1YWxcbiAgICB2YWwgZ2V0X2RhdGE6ICdhIGNvbnRhaW5lciAtPiAnYSBvcHRpb25cbiAgICB2YWwgZ2V0X2tleTogJ2EgY29udGFpbmVyIC0+IHQgb3B0aW9uXG4gICAgdmFsIHNldF9rZXlfZGF0YTogJ2EgY29udGFpbmVyIC0+IHQgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBjaGVja19rZXk6ICdhIGNvbnRhaW5lciAtPiBib29sXG4gIGVuZCkgOiBTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnRcbiAgPSBzdHJ1Y3RcblxuICAgIHR5cGUgJ2EgdCA9XG4gICAgICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgICAgIG11dGFibGUgZGF0YTogJ2EgYnVja2V0bGlzdCBhcnJheTsgICgqIHRoZSBidWNrZXRzICopXG4gICAgICAgIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICgqIGZvciByYW5kb21pemF0aW9uICopXG4gICAgICAgIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICAgICAgfVxuXG4gICAgYW5kICdhIGJ1Y2tldGxpc3QgPVxuICAgIHwgRW1wdHlcbiAgICB8IENvbnMgb2YgaW50ICgqIGhhc2ggb2YgdGhlIGtleSAqKSAqICdhIEguY29udGFpbmVyICogJ2EgYnVja2V0bGlzdFxuXG4gICAgKCoqIHRoZSBoYXNoIG9mIHRoZSBrZXkgaXMga2VwdCBpbiBvcmRlciB0byB0ZXN0IHRoZSBlcXVhbGl0eSBvZiB0aGUgaGFzaFxuICAgICAgYmVmb3JlIHRoZSBrZXkuIFNhbWUgcmVhc29uIGFzIGZvciBXZWFrLk1ha2UgKilcblxuICAgIHR5cGUga2V5ID0gSC50XG5cbiAgICBsZXQgcmVjIHBvd2VyXzJfYWJvdmUgeCBuID1cbiAgICAgIGlmIHggPj0gbiB0aGVuIHhcbiAgICAgIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgICAgIGVsc2UgcG93ZXJfMl9hYm92ZSAoeCAqIDIpIG5cblxuICAgIGxldCBwcm5nID0gbGF6eSAoUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0KCkpXG5cbiAgICBsZXQgY3JlYXRlID8ocmFuZG9tID0gKEhhc2h0YmwuaXNfcmFuZG9taXplZCAoKSkpIGluaXRpYWxfc2l6ZSA9XG4gICAgICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgaW5pdGlhbF9zaXplIGluXG4gICAgICBsZXQgc2VlZCA9IGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpIGVsc2UgMCBpblxuICAgICAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG4gICAgbGV0IGNsZWFyIGggPVxuICAgICAgaC5zaXplIDwtIDA7XG4gICAgICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgZG9uZVxuXG4gICAgbGV0IHJlc2V0IGggPVxuICAgICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgICAgIGlmIGxlbiA9IGguaW5pdGlhbF9zaXplIHRoZW5cbiAgICAgICAgY2xlYXIgaFxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBoLnNpemUgPC0gMDtcbiAgICAgICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgaC5pbml0aWFsX3NpemUgRW1wdHlcbiAgICAgIGVuZFxuXG4gICAgbGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5jb3B5IGguZGF0YSB9XG5cbiAgICBsZXQga2V5X2luZGV4IGggaGtleSA9XG4gICAgICBoa2V5IGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGNsZWFuIGggPVxuICAgICAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgICBFbXB0eVxuICAgICAgICB8IENvbnMoXywgYywgcmVzdCkgd2hlbiBub3QgKEguY2hlY2tfa2V5IGMpIC0+XG4gICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgIGRvX2J1Y2tldCByZXN0XG4gICAgICAgIHwgQ29ucyhoa2V5LCBjLCByZXN0KSAtPlxuICAgICAgICAgICAgQ29ucyhoa2V5LCBjLCBkb19idWNrZXQgcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgICBkLihpKSA8LSBkb19idWNrZXQgZC4oaSlcbiAgICAgIGRvbmVcblxuICAgICgqKiByZXNpemUgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdG8gZG8gdGhlIGFjdHVhbCBjbGVhbmluZyBvZiBkZWFkIGtleXNcbiAgICAgICAgKHJlbW92ZSBkb2VzIGl0IGp1c3QgYmVjYXVzZSBpdCBjb3VsZCkuXG5cbiAgICAgICAgVGhlIGdvYWwgaXMgdG86XG5cbiAgICAgICAgLSBub3QgcmVzaXplIGluZmluaXRlbHkgd2hlbiB0aGUgYWN0dWFsIG51bWJlciBvZiBhbGl2ZSBrZXlzIGlzXG4gICAgICAgIGJvdW5kZWQgYnV0IGtleXMgYXJlIGNvbnRpbnVvdXNseSBhZGRlZC4gVGhhdCB3b3VsZCBoYXBwZW4gaWZcbiAgICAgICAgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmVzaXplLlxuICAgICAgICAtIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgZWFjaCBhZGRpdGlvbiwgdGhhdCB3b3VsZCBoYXBwZW4gaWYgdGhpc1xuICAgICAgICBmdW5jdGlvbiBkb24ndCByZXNpemUgZXZlbiB3aGVuIG9ubHkgb25lIGtleSBpcyBkZWFkLlxuXG4gICAgICAgIFNvIHRoZSBhbGdvcml0aG06XG4gICAgICAgIC0gY2xlYW4gdGhlIGtleXMgYmVmb3JlIHJlc2l6aW5nXG4gICAgICAgIC0gaWYgdGhlIG51bWJlciBvZiByZW1haW5pbmcga2V5cyBpcyBsZXNzIHRoYW4gaGFsZiB0aGUgc2l6ZSBvZiB0aGVcbiAgICAgICAgYXJyYXksIGRvbid0IHJlc2l6ZS5cbiAgICAgICAgLSBpZiBpdCBpcyBtb3JlLCByZXNpemUuXG5cbiAgICAgICAgVGhlIHNlY29uZCBwcm9ibGVtIHJlbWFpbnMgaWYgdGhlIHRhYmxlIHJlYWNoZXMgeyFTeXMubWF4X2FycmF5X2xlbmd0aH0uXG5cbiAgICAqKVxuICAgIGxldCByZXNpemUgaCA9XG4gICAgICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgICAgIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICAgICAgbGV0IG5zaXplID0gb3NpemUgKiAyIGluXG4gICAgICBjbGVhbiBoO1xuICAgICAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCAmJiBoLnNpemUgPj0gb3NpemUgbHNyIDEgdGhlbiBiZWdpblxuICAgICAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgKCogc28gdGhhdCBrZXlfaW5kZXggc2VlcyB0aGUgbmV3IGJ1Y2tldCBjb3VudCAqKVxuICAgICAgICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgICAgICB8IENvbnMoaGtleSwgZGF0YSwgcmVzdCkgLT5cbiAgICAgICAgICAgICAgaW5zZXJ0X2J1Y2tldCByZXN0OyAoKiBwcmVzZXJ2ZSBvcmlnaW5hbCBvcmRlciBvZiBlbGVtZW50cyAqKVxuICAgICAgICAgICAgICBsZXQgbmlkeCA9IGtleV9pbmRleCBoIGhrZXkgaW5cbiAgICAgICAgICAgICAgbmRhdGEuKG5pZHgpIDwtIENvbnMoaGtleSwgZGF0YSwgbmRhdGEuKG5pZHgpKSBpblxuICAgICAgICBmb3IgaSA9IDAgdG8gb3NpemUgLSAxIGRvXG4gICAgICAgICAgaW5zZXJ0X2J1Y2tldCBvZGF0YS4oaSlcbiAgICAgICAgZG9uZVxuICAgICAgZW5kXG5cbiAgICBsZXQgYWRkIGgga2V5IGluZm8gPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBoa2V5IGluXG4gICAgICBsZXQgY29udGFpbmVyID0gSC5jcmVhdGUga2V5IGluZm8gaW5cbiAgICAgIGxldCBidWNrZXQgPSBDb25zKGhrZXksIGNvbnRhaW5lciwgaC5kYXRhLihpKSkgaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGhcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgbGV0IHJlYyByZW1vdmVfYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiBFbXB0eVxuICAgICAgICB8IENvbnMoaGssIGMsIG5leHQpIHdoZW4gaGtleSA9IGhrIC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICAgIHwgRVRydWUgLT4gaC5zaXplIDwtIGguc2l6ZSAtIDE7IG5leHRcbiAgICAgICAgICAgIHwgRUZhbHNlIC0+IENvbnMoaGssIGMsIHJlbW92ZV9idWNrZXQgbmV4dClcbiAgICAgICAgICAgIHwgRURlYWQgLT5cbiAgICAgICAgICAgICAgICAoKiBUaGUgZGVhZCBrZXkgaXMgYXV0b21hdGljYWxseSByZW1vdmVkLiBJdCBpcyBhY2NlcHRhYmxlXG4gICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIGZ1bmN0aW9uIHNpbmNlIGl0IGFscmVhZHkgcmVtb3ZlcyBhIGJpbmRpbmcgKilcbiAgICAgICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgICAgICByZW1vdmVfYnVja2V0IG5leHRcbiAgICAgICAgICAgIGVuZFxuICAgICAgICB8IENvbnMoaGssYyxuZXh0KSAtPiBDb25zKGhrLCBjLCByZW1vdmVfYnVja2V0IG5leHQpIGluXG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGhrZXkgaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gcmVtb3ZlX2J1Y2tldCBoLmRhdGEuKGkpXG5cbiAgICAoKiogeyFmaW5kfSBkb24ndCByZW1vdmUgZGVhZCBrZXlzIGJlY2F1c2UgaXQgd291bGQgYmUgc3VycHJpc2luZyBmb3JcbiAgICAgICAgdGhlIHVzZXIgdGhhdCBhIHJlYWQtb25seSBmdW5jdGlvbiBtdXRhdGVzIHRoZSBzdGF0ZSAoZWcuIGNvbmN1cnJlbnRcbiAgICAgICAgYWNjZXNzKS4gU2FtZSBmb3IgeyFpdGVyfSwgeyFmb2xkfSwgeyFtZW19LlxuICAgICopXG4gICAgbGV0IHJlYyBmaW5kX3JlYyBrZXkgaGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnMoaGssIGMsIHJlc3QpIHdoZW4gaGtleSA9IGhrICAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIEguZXF1YWwgYyBrZXkgd2l0aFxuICAgICAgICAgIHwgRVRydWUgLT5cbiAgICAgICAgICAgICAgYmVnaW4gbWF0Y2ggSC5nZXRfZGF0YSBjIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgICAoKiBUaGlzIGNhc2UgaXMgbm90IGltcG9zc2libGUgYmVjYXVzZSB0aGUgZ2MgY2FuIHJ1biBiZXR3ZWVuXG4gICAgICAgICAgICAgICAgICAgICAgSC5lcXVhbCBhbmQgSC5nZXRfZGF0YSAqKVxuICAgICAgICAgICAgICAgICAgZmluZF9yZWMga2V5IGhrZXkgcmVzdFxuICAgICAgICAgICAgICB8IFNvbWUgZCAtPiBkXG4gICAgICAgICAgICAgIGVuZFxuICAgICAgICAgIHwgRUZhbHNlIC0+IGZpbmRfcmVjIGtleSBoa2V5IHJlc3RcbiAgICAgICAgICB8IEVEZWFkIC0+XG4gICAgICAgICAgICAgIGZpbmRfcmVjIGtleSBoa2V5IHJlc3RcbiAgICAgICAgICBlbmRcbiAgICAgIHwgQ29ucyhfLCBfLCByZXN0KSAtPlxuICAgICAgICAgIGZpbmRfcmVjIGtleSBoa2V5IHJlc3RcblxuICAgIGxldCBmaW5kIGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgICgqIFRPRE8gaW5saW5lIDMgaXRlcmF0aW9ucyAqKVxuICAgICAgZmluZF9yZWMga2V5IGhrZXkgKGguZGF0YS4oa2V5X2luZGV4IGggaGtleSkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgaGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBDb25zKGhrLCBjLCByZXN0KSB3aGVuIGhrZXkgPSBoayAgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICB8IEVUcnVlIC0+XG4gICAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgKCogVGhpcyBjYXNlIGlzIG5vdCBpbXBvc3NpYmxlIGJlY2F1c2UgdGhlIGdjIGNhbiBydW4gYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgIEguZXF1YWwgYW5kIEguZ2V0X2RhdGEgKilcbiAgICAgICAgICAgICAgICAgIGZpbmRfcmVjX29wdCBrZXkgaGtleSByZXN0XG4gICAgICAgICAgICAgIHwgU29tZSBfIGFzIGQgLT4gZFxuICAgICAgICAgICAgICBlbmRcbiAgICAgICAgICB8IEVGYWxzZSAtPiBmaW5kX3JlY19vcHQga2V5IGhrZXkgcmVzdFxuICAgICAgICAgIHwgRURlYWQgLT5cbiAgICAgICAgICAgICAgZmluZF9yZWNfb3B0IGtleSBoa2V5IHJlc3RcbiAgICAgICAgICBlbmRcbiAgICAgIHwgQ29ucyhfLCBfLCByZXN0KSAtPlxuICAgICAgICAgIGZpbmRfcmVjX29wdCBrZXkgaGtleSByZXN0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgKCogVE9ETyBpbmxpbmUgMyBpdGVyYXRpb25zICopXG4gICAgICBmaW5kX3JlY19vcHQga2V5IGhrZXkgKGguZGF0YS4oa2V5X2luZGV4IGggaGtleSkpXG5cbiAgICBsZXQgZmluZF9hbGwgaCBrZXkgPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IFtdXG4gICAgICB8IENvbnMoaGssIGMsIHJlc3QpIHdoZW4gaGtleSA9IGhrICAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIEguZXF1YWwgYyBrZXkgd2l0aFxuICAgICAgICAgIHwgRVRydWUgLT4gYmVnaW4gbWF0Y2ggSC5nZXRfZGF0YSBjIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgICBmaW5kX2luX2J1Y2tldCByZXN0XG4gICAgICAgICAgICAgIHwgU29tZSBkIC0+IGQ6OmZpbmRfaW5fYnVja2V0IHJlc3RcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIHwgRUZhbHNlIC0+IGZpbmRfaW5fYnVja2V0IHJlc3RcbiAgICAgICAgICB8IEVEZWFkIC0+XG4gICAgICAgICAgICAgIGZpbmRfaW5fYnVja2V0IHJlc3RcbiAgICAgICAgICBlbmRcbiAgICAgIHwgQ29ucyhfLCBfLCByZXN0KSAtPlxuICAgICAgICAgIGZpbmRfaW5fYnVja2V0IHJlc3QgaW5cbiAgICAgIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGggaGtleSlcblxuXG4gICAgbGV0IHJlcGxhY2UgaCBrZXkgaW5mbyA9XG4gICAgICBsZXQgaGtleSA9IEguaGFzaCBoLnNlZWQga2V5IGluXG4gICAgICBsZXQgcmVjIHJlcGxhY2VfYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgfCBDb25zKGhrLCBjLCBuZXh0KSB3aGVuIGhrZXkgPSBoayAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggSC5lcXVhbCBjIGtleSB3aXRoXG4gICAgICAgICAgICB8IEVUcnVlIC0+IEguc2V0X2tleV9kYXRhIGMga2V5IGluZm9cbiAgICAgICAgICAgIHwgRUZhbHNlIHwgRURlYWQgLT4gcmVwbGFjZV9idWNrZXQgbmV4dFxuICAgICAgICAgICAgZW5kXG4gICAgICAgIHwgQ29ucyhfLF8sbmV4dCkgLT4gcmVwbGFjZV9idWNrZXQgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGggaGtleSBpblxuICAgICAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gICAgICB0cnlcbiAgICAgICAgcmVwbGFjZV9idWNrZXQgbFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IEguY3JlYXRlIGtleSBpbmZvIGluXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29ucyhoa2V5LCBjb250YWluZXIsIGwpO1xuICAgICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBoXG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgQ29ucyhoaywgYywgcmVzdCkgd2hlbiBoayA9IGhrZXkgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICB8IEVUcnVlIC0+IHRydWVcbiAgICAgICAgICB8IEVGYWxzZSB8IEVEZWFkIC0+IG1lbV9pbl9idWNrZXQgcmVzdFxuICAgICAgICAgIGVuZFxuICAgICAgfCBDb25zKF9oaywgX2MsIHJlc3QpIC0+IG1lbV9pbl9idWNrZXQgcmVzdCBpblxuICAgICAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGhrZXkpXG5cbiAgICBsZXQgaXRlciBmIGggPVxuICAgICAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgICAoKVxuICAgICAgICB8IENvbnMoXywgYywgcmVzdCkgLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZ2V0X2tleSBjLCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiAoKVxuICAgICAgICAgICAgfCBTb21lIGssIFNvbWUgZCAtPiBmIGsgZFxuICAgICAgICAgICAgZW5kOyBkb19idWNrZXQgcmVzdCBpblxuICAgICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgICBkb25lXG5cbiAgICBsZXQgZm9sZCBmIGggaW5pdCA9XG4gICAgICBsZXQgcmVjIGRvX2J1Y2tldCBiIGFjY3UgPVxuICAgICAgICBtYXRjaCBiIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgICAgYWNjdVxuICAgICAgICB8IENvbnMoXywgYywgcmVzdCkgLT5cbiAgICAgICAgICAgIGxldCBhY2N1ID0gYmVnaW4gbWF0Y2ggSC5nZXRfa2V5IGMsIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gYWNjdVxuICAgICAgICAgICAgICB8IFNvbWUgaywgU29tZSBkIC0+IGYgayBkIGFjY3VcbiAgICAgICAgICAgIGVuZCBpblxuICAgICAgICAgICAgZG9fYnVja2V0IHJlc3QgYWNjdSAgaW5cbiAgICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgICBsZXQgYWNjdSA9IHJlZiBpbml0IGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgICBkb25lO1xuICAgICAgIWFjY3VcblxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgICAgIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICAgRW1wdHlcbiAgICAgICAgfCBDb25zKGhrLCBjLCByZXN0KSAtPlxuICAgICAgICAgICAgbWF0Y2ggSC5nZXRfa2V5IGMsIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+XG4gICAgICAgICAgICAgICAgZG9fYnVja2V0IHJlc3RcbiAgICAgICAgICAgIHwgU29tZSBrLCBTb21lIGQgLT5cbiAgICAgICAgICAgICAgICBtYXRjaCBmIGsgZCB3aXRoXG4gICAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgICAgIGRvX2J1Y2tldCByZXN0XG4gICAgICAgICAgICAgICAgfCBTb21lIG5ld19kIC0+XG4gICAgICAgICAgICAgICAgICAgIEguc2V0X2tleV9kYXRhIGMgayBuZXdfZDtcbiAgICAgICAgICAgICAgICAgICAgQ29ucyhoaywgYywgZG9fYnVja2V0IHJlc3QpXG4gICAgICBpblxuICAgICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgICAgZC4oaSkgPC0gZG9fYnVja2V0IGQuKGkpXG4gICAgICBkb25lXG5cbiAgICBsZXQgbGVuZ3RoIGggPSBoLnNpemVcblxuICAgIGxldCByZWMgYnVja2V0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBDb25zKF8sIF8sIHJlc3QpIC0+IGJ1Y2tldF9sZW5ndGggKGFjY3UgKyAxKSByZXN0XG5cbiAgICBsZXQgc3RhdHMgaCA9XG4gICAgICBsZXQgbWJsID1cbiAgICAgICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gbSBiIC0+IEludC5tYXggbSAoYnVja2V0X2xlbmd0aCAwIGIpKSAwIGguZGF0YSBpblxuICAgICAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICAgICAgQXJyYXkuaXRlclxuICAgICAgICAoZnVuIGIgLT5cbiAgICAgICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICAgICAgaC5kYXRhO1xuICAgICAgeyBIYXNodGJsLm51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICAgICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgICAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICAgICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuICAgIGxldCByZWMgYnVja2V0X2xlbmd0aF9hbGl2ZSBhY2N1ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBDb25zKF8sIGMsIHJlc3QpIHdoZW4gSC5jaGVja19rZXkgYyAtPlxuICAgICAgICAgIGJ1Y2tldF9sZW5ndGhfYWxpdmUgKGFjY3UgKyAxKSByZXN0XG4gICAgICB8IENvbnMoXywgXywgcmVzdCkgLT4gYnVja2V0X2xlbmd0aF9hbGl2ZSBhY2N1IHJlc3RcblxuICAgIGxldCBzdGF0c19hbGl2ZSBoID1cbiAgICAgIGxldCBzaXplID0gcmVmIDAgaW5cbiAgICAgIGxldCBtYmwgPVxuICAgICAgICBBcnJheS5mb2xkX2xlZnRcbiAgICAgICAgICAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGhfYWxpdmUgMCBiKSkgMCBoLmRhdGFcbiAgICAgIGluXG4gICAgICBsZXQgaGlzdG8gPSBBcnJheS5tYWtlIChtYmwgKyAxKSAwIGluXG4gICAgICBBcnJheS5pdGVyXG4gICAgICAgIChmdW4gYiAtPlxuICAgICAgICAgICBsZXQgbCA9IGJ1Y2tldF9sZW5ndGhfYWxpdmUgMCBiIGluXG4gICAgICAgICAgIHNpemUgOj0gIXNpemUgKyBsO1xuICAgICAgICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICAgICAgaC5kYXRhO1xuICAgICAgeyBIYXNodGJsLm51bV9iaW5kaW5ncyA9ICFzaXplO1xuICAgICAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgICAgIG1heF9idWNrZXRfbGVuZ3RoID0gbWJsO1xuICAgICAgICBidWNrZXRfaGlzdG9ncmFtID0gaGlzdG8gfVxuXG4gICAgbGV0IHRvX3NlcSB0YmwgPVxuICAgICAgKCogY2FwdHVyZSBjdXJyZW50IGFycmF5LCBzbyB0aGF0IGV2ZW4gaWYgdGhlIHRhYmxlIGlzIHJlc2l6ZWQgd2VcbiAgICAgICAgIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBzYW1lIGFycmF5ICopXG4gICAgICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAgICAgKCogc3RhdGU6IGluZGV4ICogbmV4dCBidWNrZXQgdG8gdHJhdmVyc2UgKilcbiAgICAgIGxldCByZWMgYXV4IGkgYnVjayAoKSA9IG1hdGNoIGJ1Y2sgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIHRibF9kYXRhXG4gICAgICAgICAgICB0aGVuIFNlcS5OaWxcbiAgICAgICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgICAgIHwgQ29ucyAoXywgYywgbmV4dCkgLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZ2V0X2tleSBjLCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IGF1eCBpIG5leHQgKClcbiAgICAgICAgICAgICAgfCBTb21lIGtleSwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgICAgICAgICBTZXEuQ29ucyAoKGtleSwgZGF0YSksIGF1eCBpIG5leHQpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBhdXggMCBFbXB0eVxuXG4gICAgbGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyBtID0gU2VxLm1hcCBzbmQgKHRvX3NlcSBtKVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICBlbmRcbmVuZFxuXG5tb2R1bGUgT2JqRXBoID0gT2JqLkVwaGVtZXJvblxuXG5sZXQgX29ial9vcHQgOiBPYmoudCBvcHRpb24gLT4gJ2Egb3B0aW9uID0gZnVuIHggLT5cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiB4XG4gIHwgU29tZSB2IC0+IFNvbWUgKE9iai5vYmogdilcblxuKCoqIFRoZSBwcmV2aW91cyBmdW5jdGlvbiBpcyB0eXBlZCBzbyB0aGlzIG9uZSBpcyBhbHNvIGNvcnJlY3QgKilcbmxldCBvYmpfb3B0IDogT2JqLnQgb3B0aW9uIC0+ICdhIG9wdGlvbiA9IGZ1biB4IC0+IE9iai5tYWdpYyB4XG5cblxubW9kdWxlIEsxID0gc3RydWN0XG4gIHR5cGUgKCdrLCdkKSB0ID0gT2JqRXBoLnRcblxuICBsZXQgY3JlYXRlICgpIDogKCdrLCdkKSB0ID0gT2JqRXBoLmNyZWF0ZSAxXG5cbiAgbGV0IGdldF9rZXkgKHQ6KCdrLCdkKSB0KSA6ICdrIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfa2V5IHQgMClcbiAgbGV0IGdldF9rZXlfY29weSAodDooJ2ssJ2QpIHQpIDogJ2sgb3B0aW9uID0gb2JqX29wdCAoT2JqRXBoLmdldF9rZXlfY29weSB0IDApXG4gIGxldCBzZXRfa2V5ICh0OignaywnZCkgdCkgKGs6J2spIDogdW5pdCA9IE9iakVwaC5zZXRfa2V5IHQgMCAoT2JqLnJlcHIgaylcbiAgbGV0IHVuc2V0X2tleSAodDooJ2ssJ2QpIHQpIDogdW5pdCA9IE9iakVwaC51bnNldF9rZXkgdCAwXG4gIGxldCBjaGVja19rZXkgKHQ6KCdrLCdkKSB0KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfa2V5IHQgMFxuXG4gIGxldCBibGl0X2tleSAodDE6KCdrLCdkKSB0KSAodDI6KCdrLCdkKSB0KTogdW5pdCA9XG4gICAgT2JqRXBoLmJsaXRfa2V5IHQxIDAgdDIgMCAxXG5cbiAgbGV0IGdldF9kYXRhICh0OignaywnZCkgdCkgOiAnZCBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGEgdClcbiAgbGV0IGdldF9kYXRhX2NvcHkgKHQ6KCdrLCdkKSB0KSA6ICdkIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfZGF0YV9jb3B5IHQpXG4gIGxldCBzZXRfZGF0YSAodDooJ2ssJ2QpIHQpIChkOidkKSA6IHVuaXQgPSBPYmpFcGguc2V0X2RhdGEgdCAoT2JqLnJlcHIgZClcbiAgbGV0IHVuc2V0X2RhdGEgKHQ6KCdrLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfZGF0YSB0XG4gIGxldCBjaGVja19kYXRhICh0OignaywnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2RhdGEgdFxuICBsZXQgYmxpdF9kYXRhICh0MTooXywnZCkgdCkgKHQyOihfLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGguYmxpdF9kYXRhIHQxIHQyXG5cbiAgbGV0IG1ha2Uga2V5IGRhdGEgPVxuICAgIGxldCBlcGggPSBjcmVhdGUgKCkgaW5cbiAgICBzZXRfZGF0YSBlcGggZGF0YTtcbiAgICBzZXRfa2V5IGVwaCBrZXk7XG4gICAgZXBoXG5cbiAgbGV0IHF1ZXJ5IGVwaCBrZXkgPVxuICAgIG1hdGNoIGdldF9rZXkgZXBoIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSBrIHdoZW4gayA9PSBrZXkgLT4gZ2V0X2RhdGEgZXBoXG4gICAgfCBTb21lIF8gLT4gTm9uZVxuXG4gIG1vZHVsZSBNYWtlU2VlZGVkIChIOkhhc2h0YmwuU2VlZGVkSGFzaGVkVHlwZSkgPVxuICAgIEdlbkhhc2hUYWJsZS5NYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgdHlwZSAnYSBjb250YWluZXIgPSAoSC50LCdhKSB0XG4gICAgICB0eXBlIHQgPSBILnRcbiAgICAgIGxldCBjcmVhdGUgayBkID1cbiAgICAgICAgbGV0IGMgPSBjcmVhdGUgKCkgaW5cbiAgICAgICAgc2V0X2RhdGEgYyBkO1xuICAgICAgICBzZXRfa2V5IGMgaztcbiAgICAgICAgY1xuICAgICAgbGV0IGhhc2ggPSBILmhhc2hcbiAgICAgIGxldCBlcXVhbCBjIGsgPVxuICAgICAgICAoKiB7IWdldF9rZXlfY29weX0gaXMgbm90IHVzZWQgYmVjYXVzZSB0aGUgZXF1YWxpdHkgb2YgdGhlIHVzZXIgY2FuIGJlXG4gICAgICAgICAgICB0aGUgcGh5c2ljYWwgZXF1YWxpdHkgKilcbiAgICAgICAgbWF0Y2ggZ2V0X2tleSBjIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IEdlbkhhc2hUYWJsZS5FRGVhZFxuICAgICAgICB8IFNvbWUgaycgLT5cbiAgICAgICAgICAgIGlmIEguZXF1YWwgayBrJyB0aGVuIEdlbkhhc2hUYWJsZS5FVHJ1ZSBlbHNlIEdlbkhhc2hUYWJsZS5FRmFsc2VcbiAgICAgIGxldCBnZXRfZGF0YSA9IGdldF9kYXRhXG4gICAgICBsZXQgZ2V0X2tleSA9IGdldF9rZXlcbiAgICAgIGxldCBzZXRfa2V5X2RhdGEgYyBrIGQgPVxuICAgICAgICB1bnNldF9kYXRhIGM7XG4gICAgICAgIHNldF9rZXkgYyBrO1xuICAgICAgICBzZXRfZGF0YSBjIGRcbiAgICAgIGxldCBjaGVja19rZXkgPSBjaGVja19rZXlcbiAgICBlbmQpXG5cbiAgbW9kdWxlIE1ha2UoSDogSGFzaHRibC5IYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbiAgbW9kdWxlIEJ1Y2tldCA9IHN0cnVjdFxuXG4gICAgdHlwZSBub25yZWMgKCdrLCAnZCkgdCA9ICgnaywgJ2QpIHQgbGlzdCByZWZcbiAgICBsZXQgazFfbWFrZSA9IG1ha2VcbiAgICBsZXQgbWFrZSAoKSA9IHJlZiBbXVxuICAgIGxldCBhZGQgYiBrIGQgPSBiIDo9IGsxX21ha2UgayBkIDo6ICFiXG5cbiAgICBsZXQgdGVzdF9rZXkgayBlID1cbiAgICAgIG1hdGNoIGdldF9rZXkgZSB3aXRoXG4gICAgICB8IFNvbWUgeCB3aGVuIHggPT0gayAtPiB0cnVlXG4gICAgICB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZW1vdmUgYiBrID1cbiAgICAgIGxldCByZWMgbG9vcCBsIGFjYyA9XG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgIHwgaCA6OiB0IHdoZW4gdGVzdF9rZXkgayBoIC0+IGIgOj0gTGlzdC5yZXZfYXBwZW5kIGFjYyB0XG4gICAgICAgIHwgaCA6OiB0IC0+IGxvb3AgdCAoaCA6OiBhY2MpXG4gICAgICBpblxuICAgICAgbG9vcCAhYiBbXVxuXG4gICAgbGV0IGZpbmQgYiBrID1cbiAgICAgIG1hdGNoIExpc3QuZmluZF9vcHQgKHRlc3Rfa2V5IGspICFiIHdpdGhcbiAgICAgIHwgU29tZSBlIC0+IGdldF9kYXRhIGVcbiAgICAgIHwgTm9uZSAtPiBOb25lXG5cbiAgICBsZXQgbGVuZ3RoIGIgPSBMaXN0Lmxlbmd0aCAhYlxuICAgIGxldCBjbGVhciBiID0gYiA6PSBbXVxuXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIEsyID0gc3RydWN0XG4gIHR5cGUgKCdrMSwgJ2syLCAnZCkgdCA9IE9iakVwaC50XG5cbiAgbGV0IGNyZWF0ZSAoKSA6ICgnazEsJ2syLCdkKSB0ID0gT2JqRXBoLmNyZWF0ZSAyXG5cbiAgbGV0IGdldF9rZXkxICh0OignazEsJ2syLCdkKSB0KSA6ICdrMSBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2tleSB0IDApXG4gIGxldCBnZXRfa2V5MV9jb3B5ICh0OignazEsJ2syLCdkKSB0KSA6ICdrMSBvcHRpb24gPVxuICAgIG9ial9vcHQgKE9iakVwaC5nZXRfa2V5X2NvcHkgdCAwKVxuICBsZXQgc2V0X2tleTEgKHQ6KCdrMSwnazIsJ2QpIHQpIChrOidrMSkgOiB1bml0ID1cbiAgICBPYmpFcGguc2V0X2tleSB0IDAgKE9iai5yZXByIGspXG4gIGxldCB1bnNldF9rZXkxICh0OignazEsJ2syLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfa2V5IHQgMFxuICBsZXQgY2hlY2tfa2V5MSAodDooJ2sxLCdrMiwnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2tleSB0IDBcblxuICBsZXQgZ2V0X2tleTIgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2syIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfa2V5IHQgMSlcbiAgbGV0IGdldF9rZXkyX2NvcHkgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2syIG9wdGlvbiA9XG4gICAgb2JqX29wdCAoT2JqRXBoLmdldF9rZXlfY29weSB0IDEpXG4gIGxldCBzZXRfa2V5MiAodDooJ2sxLCdrMiwnZCkgdCkgKGs6J2syKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfa2V5IHQgMSAoT2JqLnJlcHIgaylcbiAgbGV0IHVuc2V0X2tleTIgKHQ6KCdrMSwnazIsJ2QpIHQpIDogdW5pdCA9IE9iakVwaC51bnNldF9rZXkgdCAxXG4gIGxldCBjaGVja19rZXkyICh0OignazEsJ2syLCdkKSB0KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfa2V5IHQgMVxuXG5cbiAgbGV0IGJsaXRfa2V5MSAodDE6KCdrMSxfLF8pIHQpICh0MjooJ2sxLF8sXykgdCkgOiB1bml0ID1cbiAgICBPYmpFcGguYmxpdF9rZXkgdDEgMCB0MiAwIDFcbiAgbGV0IGJsaXRfa2V5MiAodDE6KF8sJ2syLF8pIHQpICh0MjooXywnazIsXykgdCkgOiB1bml0ID1cbiAgICBPYmpFcGguYmxpdF9rZXkgdDEgMSB0MiAxIDFcbiAgbGV0IGJsaXRfa2V5MTIgKHQxOignazEsJ2syLF8pIHQpICh0MjooJ2sxLCdrMixfKSB0KSA6IHVuaXQgPVxuICAgIE9iakVwaC5ibGl0X2tleSB0MSAwIHQyIDAgMlxuXG4gIGxldCBnZXRfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgOiAnZCBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGEgdClcbiAgbGV0IGdldF9kYXRhX2NvcHkgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2Qgb3B0aW9uID1cbiAgICBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGFfY29weSB0KVxuICBsZXQgc2V0X2RhdGEgKHQ6KCdrMSwnazIsJ2QpIHQpIChkOidkKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfZGF0YSB0IChPYmoucmVwciBkKVxuICBsZXQgdW5zZXRfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgOiB1bml0ID0gT2JqRXBoLnVuc2V0X2RhdGEgdFxuICBsZXQgY2hlY2tfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2RhdGEgdFxuICBsZXQgYmxpdF9kYXRhICh0MTooXyxfLCdkKSB0KSAodDI6KF8sXywnZCkgdCkgOiB1bml0ID0gT2JqRXBoLmJsaXRfZGF0YSB0MSB0MlxuXG4gIGxldCBtYWtlIGtleTEga2V5MiBkYXRhID1cbiAgICBsZXQgZXBoID0gY3JlYXRlICgpIGluXG4gICAgc2V0X2RhdGEgZXBoIGRhdGE7XG4gICAgc2V0X2tleTEgZXBoIGtleTE7XG4gICAgc2V0X2tleTIgZXBoIGtleTI7XG4gICAgaWdub3JlIChTeXMub3BhcXVlX2lkZW50aXR5IGtleTEpO1xuICAgIGVwaFxuXG4gIGxldCBxdWVyeSBlcGgga2V5MSBrZXkyID1cbiAgICBtYXRjaCBnZXRfa2V5MSBlcGggd2l0aFxuICAgIHwgTm9uZSAtPiBOb25lXG4gICAgfCBTb21lIGsgd2hlbiBrID09IGtleTEgLT5cbiAgICAgICAgYmVnaW4gbWF0Y2ggZ2V0X2tleTIgZXBoIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgICAgfCBTb21lIGsgd2hlbiBrID09IGtleTIgLT4gZ2V0X2RhdGEgZXBoXG4gICAgICAgIHwgU29tZSBfIC0+IE5vbmVcbiAgICAgICAgZW5kXG4gICAgfCBTb21lIF8gLT4gTm9uZVxuXG4gIG1vZHVsZSBNYWtlU2VlZGVkXG4gICAgICAoSDE6SGFzaHRibC5TZWVkZWRIYXNoZWRUeXBlKVxuICAgICAgKEgyOkhhc2h0YmwuU2VlZGVkSGFzaGVkVHlwZSkgPVxuICAgIEdlbkhhc2hUYWJsZS5NYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgdHlwZSAnYSBjb250YWluZXIgPSAoSDEudCxIMi50LCdhKSB0XG4gICAgICB0eXBlIHQgPSBIMS50ICogSDIudFxuICAgICAgbGV0IGNyZWF0ZSAoazEsazIpIGQgPVxuICAgICAgICBsZXQgYyA9IGNyZWF0ZSAoKSBpblxuICAgICAgICBzZXRfZGF0YSBjIGQ7XG4gICAgICAgIHNldF9rZXkxIGMgazE7IHNldF9rZXkyIGMgazI7XG4gICAgICAgIGNcbiAgICAgIGxldCBoYXNoIHNlZWQgKGsxLGsyKSA9XG4gICAgICAgIEgxLmhhc2ggc2VlZCBrMSArIEgyLmhhc2ggc2VlZCBrMiAqIDY1NTk5XG4gICAgICBsZXQgZXF1YWwgYyAoazEsazIpID1cbiAgICAgICAgbWF0Y2ggZ2V0X2tleTEgYywgZ2V0X2tleTIgYyB3aXRoXG4gICAgICAgIHwgTm9uZSwgXyB8IF8gLCBOb25lIC0+IEdlbkhhc2hUYWJsZS5FRGVhZFxuICAgICAgICB8IFNvbWUgazEnLCBTb21lIGsyJyAtPlxuICAgICAgICAgICAgaWYgSDEuZXF1YWwgazEgazEnICYmIEgyLmVxdWFsIGsyIGsyJ1xuICAgICAgICAgICAgdGhlbiBHZW5IYXNoVGFibGUuRVRydWUgZWxzZSBHZW5IYXNoVGFibGUuRUZhbHNlXG4gICAgICBsZXQgZ2V0X2RhdGEgPSBnZXRfZGF0YVxuICAgICAgbGV0IGdldF9rZXkgYyA9XG4gICAgICAgIG1hdGNoIGdldF9rZXkxIGMsIGdldF9rZXkyIGMgd2l0aFxuICAgICAgICB8IE5vbmUsIF8gfCBfICwgTm9uZSAtPiBOb25lXG4gICAgICAgIHwgU29tZSBrMScsIFNvbWUgazInIC0+IFNvbWUgKGsxJywgazInKVxuICAgICAgbGV0IHNldF9rZXlfZGF0YSBjIChrMSxrMikgZCA9XG4gICAgICAgIHVuc2V0X2RhdGEgYztcbiAgICAgICAgc2V0X2tleTEgYyBrMTsgc2V0X2tleTIgYyBrMjtcbiAgICAgICAgc2V0X2RhdGEgYyBkXG4gICAgICBsZXQgY2hlY2tfa2V5IGMgPSBjaGVja19rZXkxIGMgJiYgY2hlY2tfa2V5MiBjXG4gICAgZW5kKVxuXG4gIG1vZHVsZSBNYWtlKEgxOiBIYXNodGJsLkhhc2hlZFR5cGUpKEgyOiBIYXNodGJsLkhhc2hlZFR5cGUpOlxuICAgIChTIHdpdGggdHlwZSBrZXkgPSBIMS50ICogSDIudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWRcbiAgICAgICAgKHN0cnVjdFxuICAgICAgICAgIHR5cGUgdCA9IEgxLnRcbiAgICAgICAgICBsZXQgZXF1YWwgPSBIMS5lcXVhbFxuICAgICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSDEuaGFzaCB4XG4gICAgICAgIGVuZClcbiAgICAgICAgKHN0cnVjdFxuICAgICAgICAgIHR5cGUgdCA9IEgyLnRcbiAgICAgICAgICBsZXQgZXF1YWwgPSBIMi5lcXVhbFxuICAgICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSDIuaGFzaCB4XG4gICAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbiAgbW9kdWxlIEJ1Y2tldCA9IHN0cnVjdFxuXG4gICAgdHlwZSBub25yZWMgKCdrMSwgJ2syLCAnZCkgdCA9ICgnazEsICdrMiwgJ2QpIHQgbGlzdCByZWZcbiAgICBsZXQgazJfbWFrZSA9IG1ha2VcbiAgICBsZXQgbWFrZSAoKSA9IHJlZiBbXVxuICAgIGxldCBhZGQgYiBrMSBrMiBkID0gYiA6PSBrMl9tYWtlIGsxIGsyIGQgOjogIWJcblxuICAgIGxldCB0ZXN0X2tleXMgazEgazIgZSA9XG4gICAgICBtYXRjaCBnZXRfa2V5MSBlLCBnZXRfa2V5MiBlIHdpdGhcbiAgICAgIHwgU29tZSB4MSwgU29tZSB4MiB3aGVuIHgxID09IGsxICYmIHgyID09IGsyIC0+IHRydWVcbiAgICAgIHwgXyAtPiBmYWxzZVxuXG4gICAgbGV0IHJlbW92ZSBiIGsxIGsyID1cbiAgICAgIGxldCByZWMgbG9vcCBsIGFjYyA9XG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgIHwgaCA6OiB0IHdoZW4gdGVzdF9rZXlzIGsxIGsyIGggLT4gYiA6PSBMaXN0LnJldl9hcHBlbmQgYWNjIHRcbiAgICAgICAgfCBoIDo6IHQgLT4gbG9vcCB0IChoIDo6IGFjYylcbiAgICAgIGluXG4gICAgICBsb29wICFiIFtdXG5cbiAgICBsZXQgZmluZCBiIGsxIGsyID1cbiAgICAgIG1hdGNoIExpc3QuZmluZF9vcHQgKHRlc3Rfa2V5cyBrMSBrMikgIWIgd2l0aFxuICAgICAgfCBTb21lIGUgLT4gZ2V0X2RhdGEgZVxuICAgICAgfCBOb25lIC0+IE5vbmVcblxuICAgIGxldCBsZW5ndGggYiA9IExpc3QubGVuZ3RoICFiXG4gICAgbGV0IGNsZWFyIGIgPSBiIDo9IFtdXG5cbiAgZW5kXG5cbmVuZFxuXG5tb2R1bGUgS24gPSBzdHJ1Y3RcbiAgdHlwZSAoJ2ssJ2QpIHQgPSBPYmpFcGgudFxuXG4gIGxldCBjcmVhdGUgbiA6ICgnaywnZCkgdCA9IE9iakVwaC5jcmVhdGUgblxuICBsZXQgbGVuZ3RoIChrOignaywnZCkgdCkgOiBpbnQgPSBPYmpFcGgubGVuZ3RoIGtcblxuICBsZXQgZ2V0X2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiAnayBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2tleSB0IG4pXG4gIGxldCBnZXRfa2V5X2NvcHkgKHQ6KCdrLCdkKSB0KSAobjppbnQpIDogJ2sgb3B0aW9uID1cbiAgICBvYmpfb3B0IChPYmpFcGguZ2V0X2tleV9jb3B5IHQgbilcbiAgbGV0IHNldF9rZXkgKHQ6KCdrLCdkKSB0KSAobjppbnQpIChrOidrKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfa2V5IHQgbiAoT2JqLnJlcHIgaylcbiAgbGV0IHVuc2V0X2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiB1bml0ID0gT2JqRXBoLnVuc2V0X2tleSB0IG5cbiAgbGV0IGNoZWNrX2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2tleSB0IG5cblxuICBsZXQgYmxpdF9rZXkgKHQxOignaywnZCkgdCkgKG8xOmludCkgKHQyOignaywnZCkgdCkgKG8yOmludCkgKGw6aW50KSA6IHVuaXQgPVxuICAgIE9iakVwaC5ibGl0X2tleSB0MSBvMSB0MiBvMiBsXG5cbiAgbGV0IGdldF9kYXRhICh0OignaywnZCkgdCkgOiAnZCBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGEgdClcbiAgbGV0IGdldF9kYXRhX2NvcHkgKHQ6KCdrLCdkKSB0KSA6ICdkIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfZGF0YV9jb3B5IHQpXG4gIGxldCBzZXRfZGF0YSAodDooJ2ssJ2QpIHQpIChkOidkKSA6IHVuaXQgPSBPYmpFcGguc2V0X2RhdGEgdCAoT2JqLnJlcHIgZClcbiAgbGV0IHVuc2V0X2RhdGEgKHQ6KCdrLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfZGF0YSB0XG4gIGxldCBjaGVja19kYXRhICh0OignaywnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2RhdGEgdFxuICBsZXQgYmxpdF9kYXRhICh0MTooXywnZCkgdCkgKHQyOihfLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGguYmxpdF9kYXRhIHQxIHQyXG5cbiAgbGV0IG1ha2Uga2V5cyBkYXRhID1cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBrZXlzIGluXG4gICAgbGV0IGVwaCA9IGNyZWF0ZSBsIGluXG4gICAgc2V0X2RhdGEgZXBoIGRhdGE7XG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHNldF9rZXkgZXBoIGkga2V5cy4oaSkgZG9uZTtcbiAgICBlcGhcblxuICBsZXQgcXVlcnkgZXBoIGtleXMgPVxuICAgIGxldCBsID0gbGVuZ3RoIGVwaCBpblxuICAgIHRyeVxuICAgICAgaWYgbCA8PiBBcnJheS5sZW5ndGgga2V5cyB0aGVuIHJhaXNlIEV4aXQ7XG4gICAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZ2V0X2tleSBlcGggaSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiByYWlzZSBFeGl0XG4gICAgICAgIHwgU29tZSBrIHdoZW4gayA9PSBrZXlzLihpKSAtPiAoKVxuICAgICAgICB8IFNvbWUgXyAtPiByYWlzZSBFeGl0XG4gICAgICBkb25lO1xuICAgICAgZ2V0X2RhdGEgZXBoXG4gICAgd2l0aCBFeGl0IC0+IE5vbmVcblxuICBtb2R1bGUgTWFrZVNlZWRlZCAoSDpIYXNodGJsLlNlZWRlZEhhc2hlZFR5cGUpID1cbiAgICBHZW5IYXNoVGFibGUuTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgIHR5cGUgJ2EgY29udGFpbmVyID0gKEgudCwnYSkgdFxuICAgICAgdHlwZSB0ID0gSC50IGFycmF5XG4gICAgICBsZXQgY3JlYXRlIGsgZCA9XG4gICAgICAgIGxldCBjID0gY3JlYXRlIChBcnJheS5sZW5ndGggaykgaW5cbiAgICAgICAgc2V0X2RhdGEgYyBkO1xuICAgICAgICBmb3IgaT0wIHRvIEFycmF5Lmxlbmd0aCBrIC0xIGRvXG4gICAgICAgICAgc2V0X2tleSBjIGkgay4oaSk7XG4gICAgICAgIGRvbmU7XG4gICAgICAgIGNcbiAgICAgIGxldCBoYXNoIHNlZWQgayA9XG4gICAgICAgIGxldCBoID0gcmVmIDAgaW5cbiAgICAgICAgZm9yIGk9MCB0byBBcnJheS5sZW5ndGggayAtMSBkb1xuICAgICAgICAgIGggOj0gSC5oYXNoIHNlZWQgay4oaSkgKiA2NTU5OSArICFoO1xuICAgICAgICBkb25lO1xuICAgICAgICAhaFxuICAgICAgbGV0IGVxdWFsIGMgayA9XG4gICAgICAgIGxldCBsZW4gID0gQXJyYXkubGVuZ3RoIGsgaW5cbiAgICAgICAgbGV0IGxlbicgPSBsZW5ndGggYyBpblxuICAgICAgICBpZiBsZW4gIT0gbGVuJyB0aGVuIEdlbkhhc2hUYWJsZS5FRmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxldCByZWMgZXF1YWxfYXJyYXkgayBjIGkgPVxuICAgICAgICAgICAgaWYgaSA8IDAgdGhlbiBHZW5IYXNoVGFibGUuRVRydWVcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggZ2V0X2tleSBjIGkgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gR2VuSGFzaFRhYmxlLkVEZWFkXG4gICAgICAgICAgICAgIHwgU29tZSBraSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrLihpKSBraVxuICAgICAgICAgICAgICAgICAgdGhlbiBlcXVhbF9hcnJheSBrIGMgKGktMSlcbiAgICAgICAgICAgICAgICAgIGVsc2UgR2VuSGFzaFRhYmxlLkVGYWxzZVxuICAgICAgICAgIGluXG4gICAgICAgICAgZXF1YWxfYXJyYXkgayBjIChsZW4tMSlcbiAgICAgIGxldCBnZXRfZGF0YSA9IGdldF9kYXRhXG4gICAgICBsZXQgZ2V0X2tleSBjID1cbiAgICAgICAgbGV0IGxlbiA9IGxlbmd0aCBjIGluXG4gICAgICAgIGlmIGxlbiA9IDAgdGhlbiBTb21lIFt8fF1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIG1hdGNoIGdldF9rZXkgYyAwIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gTm9uZVxuICAgICAgICAgIHwgU29tZSBrMCAtPlxuICAgICAgICAgICAgICBsZXQgcmVjIGZpbGwgYSBpID1cbiAgICAgICAgICAgICAgICBpZiBpIDwgMSB0aGVuIFNvbWUgYVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIG1hdGNoIGdldF9rZXkgYyBpIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgTm9uZSAtPiBOb25lXG4gICAgICAgICAgICAgICAgICB8IFNvbWUga2kgLT5cbiAgICAgICAgICAgICAgICAgICAgICBhLihpKSA8LSBraTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsIGEgKGktMSlcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgbGV0IGEgPSBBcnJheS5tYWtlIGxlbiBrMCBpblxuICAgICAgICAgICAgICBmaWxsIGEgKGxlbi0xKVxuICAgICAgbGV0IHNldF9rZXlfZGF0YSBjIGsgZCA9XG4gICAgICAgIHVuc2V0X2RhdGEgYztcbiAgICAgICAgZm9yIGk9MCB0byBBcnJheS5sZW5ndGggayAtMSBkb1xuICAgICAgICAgIHNldF9rZXkgYyBpIGsuKGkpO1xuICAgICAgICBkb25lO1xuICAgICAgICBzZXRfZGF0YSBjIGRcbiAgICAgIGxldCBjaGVja19rZXkgYyA9XG4gICAgICAgIGxldCByZWMgY2hlY2sgYyBpID1cbiAgICAgICAgICBpIDwgMCB8fCAoY2hlY2tfa2V5IGMgaSAmJiBjaGVjayBjIChpLTEpKSBpblxuICAgICAgICBjaGVjayBjIChsZW5ndGggYyAtIDEpXG4gICAgZW5kKVxuXG4gIG1vZHVsZSBNYWtlKEg6IEhhc2h0YmwuSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQgYXJyYXkpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4gIG1vZHVsZSBCdWNrZXQgPSBzdHJ1Y3RcblxuICAgIHR5cGUgbm9ucmVjICgnaywgJ2QpIHQgPSAoJ2ssICdkKSB0IGxpc3QgcmVmXG4gICAgbGV0IGtuX21ha2UgPSBtYWtlXG4gICAgbGV0IG1ha2UgKCkgPSByZWYgW11cbiAgICBsZXQgYWRkIGIgayBkID0gYiA6PSBrbl9tYWtlIGsgZCA6OiAhYlxuXG4gICAgbGV0IHRlc3Rfa2V5cyBrIGUgPVxuICAgICAgdHJ5XG4gICAgICAgIGlmIGxlbmd0aCBlIDw+IEFycmF5Lmxlbmd0aCBrIHRoZW4gcmFpc2UgRXhpdDtcbiAgICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBrIC0gMSBkb1xuICAgICAgICAgIG1hdGNoIGdldF9rZXkgZSBpIHdpdGhcbiAgICAgICAgICB8IFNvbWUgeCB3aGVuIHggPT0gay4oaSkgLT4gKClcbiAgICAgICAgICB8IF8gLT4gcmFpc2UgRXhpdFxuICAgICAgICBkb25lO1xuICAgICAgICB0cnVlXG4gICAgICB3aXRoIEV4aXQgLT4gZmFsc2VcblxuICAgIGxldCByZW1vdmUgYiBrID1cbiAgICAgIGxldCByZWMgbG9vcCBsIGFjYyA9XG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgIHwgaCA6OiB0IHdoZW4gdGVzdF9rZXlzIGsgaCAtPiBiIDo9IExpc3QucmV2X2FwcGVuZCBhY2MgdFxuICAgICAgICB8IGggOjogdCAtPiBsb29wIHQgKGggOjogYWNjKVxuICAgICAgaW5cbiAgICAgIGxvb3AgIWIgW11cblxuICAgIGxldCBmaW5kIGIgayA9XG4gICAgICBtYXRjaCBMaXN0LmZpbmRfb3B0ICh0ZXN0X2tleXMgaykgIWIgd2l0aFxuICAgICAgfCBTb21lIGUgLT4gZ2V0X2RhdGEgZVxuICAgICAgfCBOb25lIC0+IE5vbmVcblxuICAgIGxldCBsZW5ndGggYiA9IExpc3QubGVuZ3RoICFiXG4gICAgbGV0IGNsZWFyIGIgPSBiIDo9IFtdXG5cbiAgZW5kXG5cbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIE1hbnVlbCBTZXJyYW5vIGV0IFhhdmllciBMZXJveSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0JpZ2FycmF5XTogbGFyZ2UsIG11bHRpLWRpbWVuc2lvbmFsLCBudW1lcmljYWwgYXJyYXlzICopXG5cbigqIFRoZXNlIHR5cGVzIGluIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRhYmxlcyBpblxuICAgLi4vdHlwaW5nL3R5cGVvcHQubWwgKilcblxudHlwZSBmbG9hdDMyX2VsdCA9IEZsb2F0MzJfZWx0XG50eXBlIGZsb2F0NjRfZWx0ID0gRmxvYXQ2NF9lbHRcbnR5cGUgaW50OF9zaWduZWRfZWx0ID0gSW50OF9zaWduZWRfZWx0XG50eXBlIGludDhfdW5zaWduZWRfZWx0ID0gSW50OF91bnNpZ25lZF9lbHRcbnR5cGUgaW50MTZfc2lnbmVkX2VsdCA9IEludDE2X3NpZ25lZF9lbHRcbnR5cGUgaW50MTZfdW5zaWduZWRfZWx0ID0gSW50MTZfdW5zaWduZWRfZWx0XG50eXBlIGludDMyX2VsdCA9IEludDMyX2VsdFxudHlwZSBpbnQ2NF9lbHQgPSBJbnQ2NF9lbHRcbnR5cGUgaW50X2VsdCA9IEludF9lbHRcbnR5cGUgbmF0aXZlaW50X2VsdCA9IE5hdGl2ZWludF9lbHRcbnR5cGUgY29tcGxleDMyX2VsdCA9IENvbXBsZXgzMl9lbHRcbnR5cGUgY29tcGxleDY0X2VsdCA9IENvbXBsZXg2NF9lbHRcblxudHlwZSAoJ2EsICdiKSBraW5kID1cbiAgICBGbG9hdDMyIDogKGZsb2F0LCBmbG9hdDMyX2VsdCkga2luZFxuICB8IEZsb2F0NjQgOiAoZmxvYXQsIGZsb2F0NjRfZWx0KSBraW5kXG4gIHwgSW50OF9zaWduZWQgOiAoaW50LCBpbnQ4X3NpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQ4X3Vuc2lnbmVkIDogKGludCwgaW50OF91bnNpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQxNl9zaWduZWQgOiAoaW50LCBpbnQxNl9zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50MTZfdW5zaWduZWQgOiAoaW50LCBpbnQxNl91bnNpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQzMiA6IChpbnQzMiwgaW50MzJfZWx0KSBraW5kXG4gIHwgSW50NjQgOiAoaW50NjQsIGludDY0X2VsdCkga2luZFxuICB8IEludCA6IChpbnQsIGludF9lbHQpIGtpbmRcbiAgfCBOYXRpdmVpbnQgOiAobmF0aXZlaW50LCBuYXRpdmVpbnRfZWx0KSBraW5kXG4gIHwgQ29tcGxleDMyIDogKENvbXBsZXgudCwgY29tcGxleDMyX2VsdCkga2luZFxuICB8IENvbXBsZXg2NCA6IChDb21wbGV4LnQsIGNvbXBsZXg2NF9lbHQpIGtpbmRcbiAgfCBDaGFyIDogKGNoYXIsIGludDhfdW5zaWduZWRfZWx0KSBraW5kXG5cbnR5cGUgY19sYXlvdXQgPSBDX2xheW91dF90eXBcbnR5cGUgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dF90eXAgKCoqKVxuXG50eXBlICdhIGxheW91dCA9XG4gICAgQ19sYXlvdXQ6IGNfbGF5b3V0IGxheW91dFxuICB8IEZvcnRyYW5fbGF5b3V0OiBmb3J0cmFuX2xheW91dCBsYXlvdXRcblxuKCogS2VlcCB0aG9zZSBjb25zdGFudHMgaW4gc3luYyB3aXRoIHRoZSBjYW1sX2JhX2tpbmQgZW51bWVyYXRpb25cbiAgIGluIGJpZ2FycmF5LmggKilcblxubGV0IGZsb2F0MzIgPSBGbG9hdDMyXG5sZXQgZmxvYXQ2NCA9IEZsb2F0NjRcbmxldCBpbnQ4X3NpZ25lZCA9IEludDhfc2lnbmVkXG5sZXQgaW50OF91bnNpZ25lZCA9IEludDhfdW5zaWduZWRcbmxldCBpbnQxNl9zaWduZWQgPSBJbnQxNl9zaWduZWRcbmxldCBpbnQxNl91bnNpZ25lZCA9IEludDE2X3Vuc2lnbmVkXG5sZXQgaW50MzIgPSBJbnQzMlxubGV0IGludDY0ID0gSW50NjRcbmxldCBpbnQgPSBJbnRcbmxldCBuYXRpdmVpbnQgPSBOYXRpdmVpbnRcbmxldCBjb21wbGV4MzIgPSBDb21wbGV4MzJcbmxldCBjb21wbGV4NjQgPSBDb21wbGV4NjRcbmxldCBjaGFyID0gQ2hhclxuXG5sZXQga2luZF9zaXplX2luX2J5dGVzIDogdHlwZSBhIGIuIChhLCBiKSBraW5kIC0+IGludCA9IGZ1bmN0aW9uXG4gIHwgRmxvYXQzMiAtPiA0XG4gIHwgRmxvYXQ2NCAtPiA4XG4gIHwgSW50OF9zaWduZWQgLT4gMVxuICB8IEludDhfdW5zaWduZWQgLT4gMVxuICB8IEludDE2X3NpZ25lZCAtPiAyXG4gIHwgSW50MTZfdW5zaWduZWQgLT4gMlxuICB8IEludDMyIC0+IDRcbiAgfCBJbnQ2NCAtPiA4XG4gIHwgSW50IC0+IFN5cy53b3JkX3NpemUgLyA4XG4gIHwgTmF0aXZlaW50IC0+IFN5cy53b3JkX3NpemUgLyA4XG4gIHwgQ29tcGxleDMyIC0+IDhcbiAgfCBDb21wbGV4NjQgLT4gMTZcbiAgfCBDaGFyIC0+IDFcblxuKCogS2VlcCB0aG9zZSBjb25zdGFudHMgaW4gc3luYyB3aXRoIHRoZSBjYW1sX2JhX2xheW91dCBlbnVtZXJhdGlvblxuICAgaW4gYmlnYXJyYXkuaCAqKVxuXG5sZXQgY19sYXlvdXQgPSBDX2xheW91dFxubGV0IGZvcnRyYW5fbGF5b3V0ID0gRm9ydHJhbl9sYXlvdXRcblxubW9kdWxlIEdlbmFycmF5ID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHRcbiAgZXh0ZXJuYWwgY3JlYXRlOiAoJ2EsICdiKSBraW5kIC0+ICdjIGxheW91dCAtPiBpbnQgYXJyYXkgLT4gKCdhLCAnYiwgJ2MpIHRcbiAgICAgPSBcImNhbWxfYmFfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgYXJyYXkgLT4gJ2FcbiAgICAgPSBcImNhbWxfYmFfZ2V0X2dlbmVyaWNcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCBhcnJheSAtPiAnYSAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX3NldF9nZW5lcmljXCJcblxuICBsZXQgcmVjIGNsb29wIGFyciBpZHggZiBjb2wgbWF4ID1cbiAgICBpZiBjb2wgPSBBcnJheS5sZW5ndGggaWR4IHRoZW4gc2V0IGFyciBpZHggKGYgaWR4KVxuICAgIGVsc2UgZm9yIGogPSAwIHRvIHByZWQgbWF4Lihjb2wpIGRvXG4gICAgICAgICAgIGlkeC4oY29sKSA8LSBqO1xuICAgICAgICAgICBjbG9vcCBhcnIgaWR4IGYgKHN1Y2MgY29sKSBtYXhcbiAgICAgICAgIGRvbmVcbiAgbGV0IHJlYyBmbG9vcCBhcnIgaWR4IGYgY29sIG1heCA9XG4gICAgaWYgY29sIDwgMCB0aGVuIHNldCBhcnIgaWR4IChmIGlkeClcbiAgICBlbHNlIGZvciBqID0gMSB0byBtYXguKGNvbCkgZG9cbiAgICAgICAgICAgaWR4Lihjb2wpIDwtIGo7XG4gICAgICAgICAgIGZsb29wIGFyciBpZHggZiAocHJlZCBjb2wpIG1heFxuICAgICAgICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltcyBmID1cbiAgICBsZXQgYXJyID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbXMgaW5cbiAgICBtYXRjaCBBcnJheS5sZW5ndGggZGltcywgbGF5b3V0IHdpdGhcbiAgICB8IDAsIF8gLT4gYXJyXG4gICAgfCBkbGVuLCBDX2xheW91dCAtPiBjbG9vcCBhcnIgKEFycmF5Lm1ha2UgZGxlbiAwKSBmIDAgZGltczsgYXJyXG4gICAgfCBkbGVuLCBGb3J0cmFuX2xheW91dCAtPiBmbG9vcCBhcnIgKEFycmF5Lm1ha2UgZGxlbiAxKSBmIChwcmVkIGRsZW4pIGRpbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJcblxuICBleHRlcm5hbCBudW1fZGltczogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCJjYW1sX2JhX251bV9kaW1zXCJcbiAgZXh0ZXJuYWwgbnRoX2RpbTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCA9IFwiY2FtbF9iYV9kaW1cIlxuICBsZXQgZGltcyBhID1cbiAgICBsZXQgbiA9IG51bV9kaW1zIGEgaW5cbiAgICBsZXQgZCA9IEFycmF5Lm1ha2UgbiAwIGluXG4gICAgZm9yIGkgPSAwIHRvIG4tMSBkbyBkLihpKSA8LSBudGhfZGltIGEgaSBkb25lO1xuICAgIGRcblxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKEFycmF5LmZvbGRfbGVmdCAoICogKSAxIChkaW1zIGFycikpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHNsaWNlX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCBhcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zbGljZVwiXG4gIGV4dGVybmFsIHNsaWNlX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgYXJyYXkgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc2xpY2VcIlxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuZW5kXG5cbm1vZHVsZSBBcnJheTAgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfHxdXG4gIGxldCBnZXQgYXJyID0gR2VuYXJyYXkuZ2V0IGFyciBbfHxdXG4gIGxldCBzZXQgYXJyID0gR2VuYXJyYXkuc2V0IGFyciBbfHxdXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID0ga2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycilcblxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuXG4gIGxldCBvZl92YWx1ZSBraW5kIGxheW91dCB2ID1cbiAgICBsZXQgYSA9IGNyZWF0ZSBraW5kIGxheW91dCBpblxuICAgIHNldCBhIHY7XG4gICAgYVxuICBsZXQgaW5pdCA9IG9mX3ZhbHVlXG5lbmRcblxubW9kdWxlIEFycmF5MSA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfGRpbXxdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMVwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVjYW1sX2JhX3NldF8xXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzFcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8xXCJcbiAgZXh0ZXJuYWwgZGltOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltIGFycilcblxuICBleHRlcm5hbCBzdWI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgJ2MpIHQgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlICh0eXBlIHQpIChhIDogKF8sIF8sIHQpIEdlbmFycmF5LnQpIG4gPVxuICAgIG1hdGNoIGxheW91dCBhIHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xufF0gOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdCA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcbiAgbGV0IGNfaW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbSBkbyB1bnNhZmVfc2V0IGFyciBpIChmIGkpIGRvbmVcbiAgbGV0IGZvcnRyYW5faW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMSB0byBkaW0gZG8gdW5zYWZlX3NldCBhcnIgaSAoZiBpKSBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW0gZiA9XG4gICAgbGV0IGFyciA9IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0gZjsgYXJyXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiBmb3J0cmFuX2luaXQgYXJyIGRpbSBmOyBhcnJcbiAgbGV0IG9mX2FycmF5ICh0eXBlIHQpIGtpbmQgKGxheW91dDogdCBsYXlvdXQpIGRhdGEgPVxuICAgIGxldCBiYSA9IGNyZWF0ZSBraW5kIGxheW91dCAoQXJyYXkubGVuZ3RoIGRhdGEpIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZGF0YSAtIDEgZG8gdW5zYWZlX3NldCBiYSAoaSArIG9mcykgZGF0YS4oaSkgZG9uZTtcbiAgICBiYVxuZW5kXG5cbm1vZHVsZSBBcnJheTIgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3xkaW0xOyBkaW0yfF1cbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMlwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlY2FtbF9iYV9zZXRfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2FcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9yZWZfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8yXCJcbiAgZXh0ZXJuYWwgZGltMTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGRpbTI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzJcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OlxuICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlX2xlZnQgYSBuID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bnxdXG4gIGxldCBzbGljZV9yaWdodCBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBmID1cbiAgICBmb3IgaSA9IDAgdG8gcHJlZCBkaW0xIGRvXG4gICAgICBmb3IgaiA9IDAgdG8gcHJlZCBkaW0yIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZiA9XG4gICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgIGZvciBpID0gMSB0byBkaW0xIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltMSBkaW0yIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNfaW5pdCBhcnIgZGltMSBkaW0yIGY7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBkaW0xIC0gMSBkb1xuICAgICAgbGV0IHJvdyA9IGRhdGEuKGkpIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggcm93IDw+IGRpbTIgdGhlblxuICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5Mi5vZl9hcnJheTogbm9uLXJlY3Rhbmd1bGFyIGRhdGFcIik7XG4gICAgICBmb3IgaiA9IDAgdG8gZGltMiAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIHJvdy4oailcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxubW9kdWxlIEFycmF5MyA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgZGltMyA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8ZGltMTsgZGltMjsgZGltM3xdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgPSBcIiVjYW1sX2JhX3JlZl8zXCJcbiAgZXh0ZXJuYWwgc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV9zZXRfM1wiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhXG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzNcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfc2V0XzNcIlxuICBleHRlcm5hbCBkaW0xOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwgZGltMjogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMlwiXG4gIGV4dGVybmFsIGRpbTM6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzNcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpICogKGRpbTMgYXJyKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDpcbiAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBsZXQgc2xpY2VfbGVmdF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bjsgbXxdXG4gIGxldCBzbGljZV9yaWdodF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG47IG18XVxuICBsZXQgc2xpY2VfbGVmdF8yIGEgbiA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG58XVxuICBsZXQgc2xpY2VfcmlnaHRfMiBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbTEgZG9cbiAgICAgIGZvciBqID0gMCB0byBwcmVkIGRpbTIgZG9cbiAgICAgICAgZm9yIGsgPSAwIHRvIHByZWQgZGltMyBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiBrIChmIGkgaiBrKVxuICAgICAgICBkb25lXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmID1cbiAgICBmb3IgayA9IDEgdG8gZGltMyBkb1xuICAgICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgICAgZm9yIGkgPSAxIHRvIGRpbTEgZG9cbiAgICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogayAoZiBpIGogaylcbiAgICAgICAgZG9uZVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGluaXQgKHR5cGUgdCkga2luZCAobGF5b3V0IDogdCBsYXlvdXQpIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgZGltMyA9IGlmIGRpbTIgPSAwIHRoZW4gMCBlbHNlIEFycmF5Lmxlbmd0aCBkYXRhLigwKS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBsZXQgb2ZzID1cbiAgICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgICAgIENfbGF5b3V0IC0+IDBcbiAgICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gMVxuICAgIGluXG4gICAgZm9yIGkgPSAwIHRvIGRpbTEgLSAxIGRvXG4gICAgICBsZXQgcm93ID0gZGF0YS4oaSkgaW5cbiAgICAgIGlmIEFycmF5Lmxlbmd0aCByb3cgPD4gZGltMiB0aGVuXG4gICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgIGZvciBqID0gMCB0byBkaW0yIC0gMSBkb1xuICAgICAgICBsZXQgY29sID0gcm93LihqKSBpblxuICAgICAgICBpZiBBcnJheS5sZW5ndGggY29sIDw+IGRpbTMgdGhlblxuICAgICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgICAgZm9yIGsgPSAwIHRvIGRpbTMgLSAxIGRvXG4gICAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIChrICsgb2ZzKSBjb2wuKGspXG4gICAgICAgIGRvbmVcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkwOiAoJ2EsICdiLCAnYykgQXJyYXkwLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkxOiAoJ2EsICdiLCAnYykgQXJyYXkxLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkyOiAoJ2EsICdiLCAnYykgQXJyYXkyLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkzOiAoJ2EsICdiLCAnYykgQXJyYXkzLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxubGV0IGFycmF5MF9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDAgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTBfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5MV9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDEgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTFfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5Ml9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDIgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTJfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5M19vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDMgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTNfb2ZfZ2VuYXJyYXlcIlxuXG5leHRlcm5hbCByZXNoYXBlOlxuICAgKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnQgLT4gaW50IGFycmF5IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiY2FtbF9iYV9yZXNoYXBlXCJcbmxldCByZXNoYXBlXzAgYSA9IHJlc2hhcGUgYSBbfHxdXG5sZXQgcmVzaGFwZV8xIGEgZGltMSA9IHJlc2hhcGUgYSBbfGRpbTF8XVxubGV0IHJlc2hhcGVfMiBhIGRpbTEgZGltMiA9IHJlc2hhcGUgYSBbfGRpbTE7ZGltMnxdXG5sZXQgcmVzaGFwZV8zIGEgZGltMSBkaW0yIGRpbTMgPSByZXNoYXBlIGEgW3xkaW0xO2RpbTI7ZGltM3xdXG5cbigqIEZvcmNlIGNhbWxfYmFfZ2V0X3sxLDIsMyxOfSB0byBiZSBsaW5rZWQgaW4sIHNpbmNlIHdlIGRvbid0IHJlZmVyXG4gICB0byB0aG9zZSBwcmltaXRpdmVzIGRpcmVjdGx5IGluIHRoaXMgZmlsZSAqKVxuXG5sZXQgXyA9XG4gIGxldCBfID0gR2VuYXJyYXkuZ2V0IGluXG4gIGxldCBfID0gQXJyYXkxLmdldCBpblxuICBsZXQgXyA9IEFycmF5Mi5nZXQgaW5cbiAgbGV0IF8gPSBBcnJheTMuZ2V0IGluXG4gICgpXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5leHRlcm5hbCBnZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfZ2V0XzFcIlxuZXh0ZXJuYWwgZ2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX2dldF8yXCJcbmV4dGVybmFsIGdldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9nZXRfM1wiXG5leHRlcm5hbCBzZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfc2V0XzFcIlxuZXh0ZXJuYWwgc2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX3NldF8yXCJcbmV4dGVybmFsIHNldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9zZXRfM1wiXG4iLCJsZXQgdGFyaWYgPSBcIjIwMjItMjAyM1wiXG5cbmxldCBkZXN0aW5hdGFpcmVzID0gXCJkdWJ1dmFsQGdtYWlsLmNvbSxncmFuZ2UuZ3V5QG91dGxvb2suZnJcIlxuXG50eXBlIHBpZWNlID0gQ2hhbWJyZTEgfCBDaGFtYnJlMiB8IENoYW1icmUzIHwgU2Vqb3VyIHwgU2RiMSB8IFNkYjJcblxubGV0IHBpZWNlcyA9IFsgQ2hhbWJyZTE7IENoYW1icmUyOyBDaGFtYnJlMzsgU2Vqb3VyOyBTZGIxOyBTZGIyIF1cblxubGV0IHNob3J0X3N0cmluZ19vZl9waWVjZSA9IGZ1bmN0aW9uXG4gIHwgQ2hhbWJyZTEgLT4gXCJjaDFcIlxuICB8IENoYW1icmUyIC0+IFwiY2gyXCJcbiAgfCBDaGFtYnJlMyAtPiBcImNoM1wiXG4gIHwgU2Vqb3VyIC0+IFwic2pcIlxuICB8IFNkYjEgLT4gXCJzZGIxXCJcbiAgfCBTZGIyIC0+IFwic2RiMlwiXG5cbmxldCBsb25nX3N0cmluZ19vZl9waWVjZSA9IGZ1bmN0aW9uXG4gIHwgQ2hhbWJyZTEgLT4gXCJDaGFtYnJlIDFcIlxuICB8IENoYW1icmUyIC0+IFwiQ2hhbWJyZSAyXCJcbiAgfCBDaGFtYnJlMyAtPiBcIkNoYW1icmUgM1wiXG4gIHwgU2Vqb3VyIC0+IFwiU8Opam91clwiXG4gIHwgU2RiMSAtPiBcIlNhbGxlIGRlIGJhaW5zIDFcIlxuICB8IFNkYjIgLT4gXCJTYWxsZSBkZSBiYWlucyAyXCJcblxudHlwZSBmb3Vybml0dXJlID0ge1xuICBuYW1lIDogc3RyaW5nO1xuICBkZXNpZ25hdGlvbiA6IHN0cmluZztcbiAgcHJpeCA6IGludDtcbiAgZGlzcG9uaWJpbGl0ZSA6IChwaWVjZSAqIGludCkgbGlzdDtcbn1cblxubGV0IGZvdXJuaXR1cmVzID1cbiAgW1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImRoODBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSA4MCBjbVwiO1xuICAgICAgcHJpeCA9IDQ7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJkaDkwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiRHJhcCBob3Vzc2UgOTAgY21cIjtcbiAgICAgIHByaXggPSA0O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUzLCA0KSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiZGgxNDBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSAxNDAgY21cIjtcbiAgICAgIHByaXggPSA3O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUyLCAxKTsgKFNlam91ciwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImRoYmJcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSBiw6liw6lcIjtcbiAgICAgIHByaXggPSAyO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiaGMxcFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkhvdXNzZSBkZSBjb3VldHRlIDEgcGxhY2VcIjtcbiAgICAgIHByaXggPSA3O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAyKTsgKENoYW1icmUzLCA0KSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiaGMycFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkhvdXNzZSBkZSBjb3VldHRlIDIgcGxhY2VzXCI7XG4gICAgICBwcml4ID0gMTA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTIsIDEpOyAoU2Vqb3VyLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiaGNiYlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkhvdXNzZSBkZSBjb3VldHRlIGLDqWLDqVwiO1xuICAgICAgcHJpeCA9IDM7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJsaXRiYlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkxpdCBiw6liw6lcIjtcbiAgICAgIHByaXggPSA4O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwicG04MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlByb3TDqGdlIG1hdGVsYXMgODAgY21cIjtcbiAgICAgIHByaXggPSAwO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAyKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwicG05MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlByb3TDqGdlIG1hdGVsYXMgOTAgY21cIjtcbiAgICAgIHByaXggPSAwO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUzLCA0KSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwicG0xNDBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJQcm90w6hnZSBtYXRlbGFzIDE0MCBjbVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTIsIDEpOyAoU2Vqb3VyLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwicG1iYlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlByb3TDqGdlIG1hdGVsYXMgYsOpYsOpXCI7XG4gICAgICBwcml4ID0gMDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMSwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcInRhaWVcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJUYWllIGTigJlvcmVpbGxlclwiO1xuICAgICAgcHJpeCA9IDE7XG4gICAgICBkaXNwb25pYmlsaXRlID1cbiAgICAgICAgWyAoQ2hhbWJyZTEsIDQpOyAoQ2hhbWJyZTIsIDQpOyAoQ2hhbWJyZTMsIDgpOyAoU2Vqb3VyLCA0KSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiZG91Y2hlXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiRHJhcCBkZSBkb3VjaGVcIjtcbiAgICAgIHByaXggPSAyO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDMpOyAoU2RiMiwgMykgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImdhbnRcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJHYW50IGRlIHRvaWxldHRlXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZGIxLCA0KTsgKFNkYjIsIDYpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJzZXJ2XCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiU2VydmlldHRlIGRlIHRvaWxldHRlXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZGIxLCA0KTsgKFNkYjIsIDYpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJpbnZcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJTZXJ2aWV0dGUgaW52aXTDqXNcIjtcbiAgICAgIHByaXggPSAxO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDEpOyAoU2RiMiwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcInRhcGlzXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiVGFwaXMgZGUgZG91Y2hlXCI7XG4gICAgICBwcml4ID0gMjtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZGIxLCAyKTsgKFNkYjIsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJtYWluc1wiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkVzc3VpZS1tYWluc1wiO1xuICAgICAgcHJpeCA9IDE7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2Vqb3VyLCAyKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidGFibGVcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJTZXJ2aWV0dGVzIGRlIHRhYmxlXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZWpvdXIsIDEwKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidG9yY2hvblwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlRvcmNob25zIMOgIHZhaXNzZWxsZVwiO1xuICAgICAgcHJpeCA9IDE7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2Vqb3VyLCAyKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwibWljcm9maWJyZVwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlRvcmNob25zIG1pY3JvZmlicmVcIjtcbiAgICAgIHByaXggPSAwO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDIpOyAoU2RiMiwgMik7IChTZWpvdXIsIDIpIF07XG4gICAgfTtcbiAgXVxuXG4iLG51bGwsbnVsbCwibW9kdWxlIElMID0gSW52ZW50YWlyZV9saW5nZVxuXG5sZXQgc2V0X3N0cmluZ19pbnB1dF9ieV9pZCBubSB2ID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLmlucHV0XG4gIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBpbnAgLT4gaW5wIyMudmFsdWUgOj0gSnNfb2Zfb2NhbWwuSnMuc3RyaW5nIHZcblxubGV0IHJlYWRfc3RyaW5nX2lucHV0X2J5X2lkIG5tID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLmlucHV0XG4gIHdpdGhcbiAgfCBOb25lIC0+IFwiXCJcbiAgfCBTb21lIGlucCAtPiBpbnAjIy52YWx1ZSB8PiBKc19vZl9vY2FtbC5Kcy50b19zdHJpbmdcblxubGV0IHplcm9faW50X2lucHV0X2J5X2lkIG5tID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLnNlbGVjdFxuICB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgaW5wIC0+IGlucCMjLnZhbHVlIDo9IDAgfD4gc3RyaW5nX29mX2ludCB8PiBKc19vZl9vY2FtbC5Kcy5zdHJpbmdcblxubGV0IHJlYWRfaW50X2lucHV0X2J5X2lkIG5tID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLnNlbGVjdFxuICB3aXRoXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSBpbnAgLT4gaW5wIyMudmFsdWUgfD4gSnNfb2Zfb2NhbWwuSnMudG9fc3RyaW5nIHw+IGludF9vZl9zdHJpbmdcblxubGV0IHNldF90ZF9ieV9pZCBubSB2ID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLnRkXG4gIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB0ZCAtPiB0ZCMjLmlubmVySFRNTCA6PSBKc19vZl9vY2FtbC5Kcy5zdHJpbmcgdlxuXG5sZXQgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmID1cbiAgbGV0IG9wZW4gSUwgaW5cbiAgZi5kaXNwb25pYmlsaXRlXG4gIHw+IExpc3QubWFwIChmdW4gKHAsIF8pIC0+IGYubmFtZSBeIFwiX1wiIF4gc2hvcnRfc3RyaW5nX29mX3BpZWNlIHApXG5cbmxldCBmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHVyZSBmID1cbiAgbGV0IG9wZW4gSUwgaW5cbiAgZi5kaXNwb25pYmlsaXRlXG4gIHw+IExpc3QubWFwIChmdW4gKHAsIF8pIC0+XG4gICAgICAgICAoZi5uYW1lIF4gXCJfXCIgXiBzaG9ydF9zdHJpbmdfb2ZfcGllY2UgcCwgbG9uZ19zdHJpbmdfb2ZfcGllY2UgcCkpXG5cbmxldCBhbGxfbmFtZXMgPSBJTC5mb3Vybml0dXJlcyB8PiBMaXN0Lm1hcCBmaWVsZF9pZF9ieV9mb3Vybml0dXJlIHw+IExpc3QuY29uY2F0XG5cbigqIE1ldHMgw6Agam91ciBsZSBjb3JwcyBkdSBtYWlsICopXG5sZXQgZW1haWxfYm9keSAoKSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSA1MDAgaW5cbiAgUHJpbnRmLmJwcmludGYgYlxuICAgIFwiLS0tLS0gUsOpc2VydmF0aW9uIGxpbmdlIER1YnV2YWwsIExlcyB0ZXJyYXNzZXMgZGVzIENob3NlYXV4LCBBcHBhcnRlbWVudCBcXFxuICAgICBCNiAtLS0tLSUlMEFcIjtcbiAgUHJpbnRmLmJwcmludGYgYiBcIkxvY2F0YWlyZSA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcIm5vbV9wcmVub21cIik7XG4gIFByaW50Zi5icHJpbnRmIGIgXCJEYXRlIGTigJlhcnJpdsOpZSA6ICVzJSUwQVwiXG4gICAgKHJlYWRfc3RyaW5nX2lucHV0X2J5X2lkIFwiYXJyaXZlZVwiKTtcbiAgUHJpbnRmLmJwcmludGYgYiBcIkRhdGUgZGUgZMOpcGFydCA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcImRlcGFydFwiKTtcbiAgTGlzdC5maWx0ZXJfbWFwXG4gICAgKGZ1biBmIC0+XG4gICAgICBmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHVyZSBmXG4gICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAoZnVuIChzLCBkZXRhaWwpIChmaWVsZF9pZCwgc2hvcnQpIC0+XG4gICAgICAgICAgICAgbGV0IHEgPSByZWFkX2ludF9pbnB1dF9ieV9pZCBmaWVsZF9pZCBpblxuICAgICAgICAgICAgICggcyArIHEsXG4gICAgICAgICAgICAgICBpZiBxID4gMCB0aGVuIChzaG9ydCBeIFwiIDogXCIgXiBzdHJpbmdfb2ZfaW50IHEpIDo6IGRldGFpbFxuICAgICAgICAgICAgICAgZWxzZSBkZXRhaWwgKSlcbiAgICAgICAgICAgKDAsIFtdKVxuICAgICAgfD4gZnVuY3Rpb25cbiAgICAgIHwgMCwgXyAtPiBOb25lXG4gICAgICB8IHEsIGRldGFpbCAtPiBTb21lIChmLmRlc2lnbmF0aW9uLCBxLCBkZXRhaWwpKVxuICAgIElMLmZvdXJuaXR1cmVzXG4gIHw+IExpc3QuaXRlciAoZnVuIChkZXNjciwgcSwgZGV0YWlsKSAtPlxuICAgICAgICAgUHJpbnRmLmJwcmludGYgYiBcIuKAlCAlZCAlcyVzJSUwQVwiIHEgZGVzY3JcbiAgICAgICAgICAgKCBtYXRjaCBkZXRhaWwgd2l0aFxuICAgICAgICAgICB8IFtdIC0+IFwiXCJcbiAgICAgICAgICAgfCBfIC0+IFByaW50Zi5zcHJpbnRmIFwiICglcylcIiAoU3RyaW5nLmNvbmNhdCBcIiwgXCIgZGV0YWlsKSApKTtcbiAgUHJpbnRmLmJwcmludGYgYiBcIiUlMEFUb3RhbCA6ICVkIOKCrCUlMEFcIlxuICAgIChMaXN0LmZvbGRfbGVmdFxuICAgICAgIChmdW4gdG90YWwgZiAtPlxuICAgICAgICAgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmXG4gICAgICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAgICAoZnVuIHMgZmllbGRfaWQgLT4gcyArIHJlYWRfaW50X2lucHV0X2J5X2lkIGZpZWxkX2lkKVxuICAgICAgICAgICAgICAwXG4gICAgICAgICB8PiAoICogKSBmLklMLnByaXggfD4gKCArICkgdG90YWwpXG4gICAgICAgMCBJTC5mb3Vybml0dXJlcyk7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbigqIE1ldHMgw6Agam91ciBsZSBjb3JwcyBkdSBtYWlsICopXG5sZXQgcmVzdW1lX2JvZHkgKCkgPVxuICBUeXhtbC5IdG1sLihcbiAgICBkaXZcbiAgICAgIFtcbiAgICAgICAgcFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGIgWyB0eHQgXCJMb2NhdGFpcmUgOiBcIjsgdHh0IChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcIm5vbV9wcmVub21cIikgXTtcbiAgICAgICAgICBdO1xuICAgICAgICBwXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYlxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdHh0IFwiRGF0ZSBk4oCZYXJyaXbDqWUgOiBcIjtcbiAgICAgICAgICAgICAgICB0eHQgKHJlYWRfc3RyaW5nX2lucHV0X2J5X2lkIFwiYXJyaXZlZVwiKTtcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICBdO1xuICAgICAgICBwXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYlxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdHh0IFwiRGF0ZSBkZSBkw6lwYXJ0IDogXCI7IHR4dCAocmVhZF9zdHJpbmdfaW5wdXRfYnlfaWQgXCJkZXBhcnRcIik7XG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgXTtcbiAgICAgICAgYnIgKCk7XG4gICAgICAgIHVsXG4gICAgICAgICAgKCBMaXN0LmZpbHRlcl9tYXBcbiAgICAgICAgICAgICAgKGZ1biBmIC0+XG4gICAgICAgICAgICAgICAgZmllbGRfaWRfYW5kX3BpZWNlX2J5X2ZvdXJuaXR1cmUgZlxuICAgICAgICAgICAgICAgIHw+IExpc3QuZm9sZF9sZWZ0XG4gICAgICAgICAgICAgICAgICAgICAoZnVuIChzLCBkZXRhaWwpIChmaWVsZF9pZCwgc2hvcnQpIC0+XG4gICAgICAgICAgICAgICAgICAgICAgIGxldCBxID0gcmVhZF9pbnRfaW5wdXRfYnlfaWQgZmllbGRfaWQgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgKCBzICsgcSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBxID4gMCB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvcnQgXiBcIiA6IFwiIF4gc3RyaW5nX29mX2ludCBxKSA6OiBkZXRhaWxcbiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRldGFpbCApKVxuICAgICAgICAgICAgICAgICAgICAgKDAsIFtdKVxuICAgICAgICAgICAgICAgIHw+IGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgfCAwLCBfIC0+IE5vbmVcbiAgICAgICAgICAgICAgICB8IHEsIGRldGFpbCAtPiBTb21lIChmLmRlc2lnbmF0aW9uLCBxLCBMaXN0LnJldiBkZXRhaWwpKVxuICAgICAgICAgICAgICBJTC5mb3Vybml0dXJlc1xuICAgICAgICAgIHw+IExpc3QubWFwIChmdW4gKGRlc2NyLCBxLCBkZXRhaWwpIC0+XG4gICAgICAgICAgICAgICAgIGxpXG4gICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgdHh0IChzdHJpbmdfb2ZfaW50IHEpO1xuICAgICAgICAgICAgICAgICAgICAgdHh0IFwiIFwiO1xuICAgICAgICAgICAgICAgICAgICAgdHh0IGRlc2NyO1xuICAgICAgICAgICAgICAgICAgICAgdHh0XG4gICAgICAgICAgICAgICAgICAgICAgICggbWF0Y2ggZGV0YWlsIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgICAgfCBbXSAtPiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgIHwgXyAtPiBQcmludGYuc3ByaW50ZiBcIiAoJXMpXCIgKFN0cmluZy5jb25jYXQgXCIsIFwiIGRldGFpbClcbiAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICBdKSApO1xuICAgICAgICBiciAoKTtcbiAgICAgICAgcFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGIgWyB0eHQgXCJUb3RhbCA6IFwiIF07XG4gICAgICAgICAgICB0eHRcbiAgICAgICAgICAgICAgKCBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAgICAgICAgKGZ1biB0b3RhbCBmIC0+XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkX2lkX2J5X2ZvdXJuaXR1cmUgZlxuICAgICAgICAgICAgICAgICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAgICAgICAgICAgICAgIChmdW4gcyBmaWVsZF9pZCAtPiBzICsgcmVhZF9pbnRfaW5wdXRfYnlfaWQgZmllbGRfaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICB8PiAoICogKSBmLklMLnByaXggfD4gKCArICkgdG90YWwpXG4gICAgICAgICAgICAgICAgICAwIElMLmZvdXJuaXR1cmVzXG4gICAgICAgICAgICAgIHw+IHN0cmluZ19vZl9pbnQgKTtcbiAgICAgICAgICAgIHR4dCBcIsKg4oKsXCI7XG4gICAgICAgICAgXTtcbiAgICAgIF0pXG4gIHw+IEZvcm1hdC5hc3ByaW50ZiBcIiVhXCIgKFR5eG1sLkh0bWwucHBfZWx0ICgpKVxuICB8PiBKc19vZl9vY2FtbC5Kcy5zdHJpbmdcblxuKCogUHJpbnRmLmJwcmludGYgYiBcIkxvY2F0YWlyZSA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcIm5vbV9wcmVub21cIik7XG4gKiBQcmludGYuYnByaW50ZiBiIFwiRGF0ZSBk4oCZYXJyaXbDqWUgOiAlcyUlMEFcIlxuICogICAocmVhZF9zdHJpbmdfaW5wdXRfYnlfaWQgXCJhcnJpdmVlXCIpO1xuICogUHJpbnRmLmJwcmludGYgYiBcIkRhdGUgZGUgZMOpcGFydCA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcImRlcGFydFwiKTtcbiAqIExpc3QuZmlsdGVyX21hcFxuICogICAoZnVuIGYgLT5cbiAqICAgICBmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHVyZSBmXG4gKiAgICAgfD4gTGlzdC5mb2xkX2xlZnRcbiAqICAgICAgICAgIChmdW4gKHMsIGRldGFpbCkgKGZpZWxkX2lkLCBzaG9ydCkgLT5cbiAqICAgICAgICAgICAgbGV0IHEgPSByZWFkX2ludF9pbnB1dF9ieV9pZCBmaWVsZF9pZCBpblxuICogICAgICAgICAgICAoIHMgKyBxLFxuICogICAgICAgICAgICAgIGlmIHEgPiAwIHRoZW4gKHNob3J0IF4gXCIgOiBcIiBeIHN0cmluZ19vZl9pbnQgcSkgOjogZGV0YWlsXG4gKiAgICAgICAgICAgICAgZWxzZSBkZXRhaWwgKSlcbiAqICAgICAgICAgICgwLCBbXSlcbiAqICAgICB8PiBmdW5jdGlvblxuICogICAgIHwgMCwgXyAtPiBOb25lXG4gKiAgICAgfCBxLCBkZXRhaWwgLT4gU29tZSAoZi5kZXNpZ25hdGlvbiwgcSwgZGV0YWlsKSlcbiAqICAgSUwuZm91cm5pdHVyZXNcbiAqIHw+IExpc3QuaXRlciAoZnVuIChkZXNjciwgcSwgZGV0YWlsKSAtPlxuICogICAgICAgIFByaW50Zi5icHJpbnRmIGIgXCLigJQgJWQgJXMlcyUlMEFcIiBxIGRlc2NyXG4gKiAgICAgICAgICAoIG1hdGNoIGRldGFpbCB3aXRoXG4gKiAgICAgICAgICB8IFtdIC0+IFwiXCJcbiAqICAgICAgICAgIHwgXyAtPiBQcmludGYuc3ByaW50ZiBcIiAoJXMpXCIgKFN0cmluZy5jb25jYXQgXCIsIFwiIGRldGFpbCkgKSk7XG4gKiBQcmludGYuYnByaW50ZiBiIFwiJSUwQVRvdGFsIDogJWQg4oKsJSUwQVwiXG4gKiAgIChMaXN0LmZvbGRfbGVmdFxuICogICAgICAoZnVuIHRvdGFsIGYgLT5cbiAqICAgICAgICBmaWVsZF9pZF9ieV9mb3Vybml0dXJlIGZcbiAqICAgICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICogICAgICAgICAgICAgKGZ1biBzIGZpZWxkX2lkIC0+IHMgKyByZWFkX2ludF9pbnB1dF9ieV9pZCBmaWVsZF9pZClcbiAqICAgICAgICAgICAgIDBcbiAqICAgICAgICB8PiAoICogKSBmLnByaXggfD4gKCArICkgdG90YWwpXG4gKiAgICAgIDAgSUwuZm91cm5pdHVyZXMpO1xuICogQnVmZmVyLmNvbnRlbnRzIGIgKilcblxubGV0IHVwZGF0ZV9tc2cgKCkgPVxuICBsZXQgKCkgPVxuICAgIG1hdGNoXG4gICAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2UgXCJiZW52b2lcIlxuICAgICAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5Db2VyY2VUby5hXG4gICAgd2l0aFxuICAgIHwgTm9uZSAtPiAoKVxuICAgIHwgU29tZSBhIC0+XG4gICAgICAgIGEjIy5ocmVmIDo9XG4gICAgICAgICAgSnNfb2Zfb2NhbWwuSnMuc3RyaW5nXG4gICAgICAgICAgICAoIFwibWFpbHRvOlwiIF4gSUwuZGVzdGluYXRhaXJlc1xuICAgICAgICAgICAgXiBcIj9zdWJqZWN0PVLDqXNlcnZhdGlvbiBsaW5nZSBEdWJ1dmFsJmJvZHk9XCIgXiBlbWFpbF9ib2R5ICgpIClcbiAgaW5cblxuICBtYXRjaFxuICAgIEpzX29mX29jYW1sLkRvbV9odG1sLmdldEVsZW1lbnRCeUlkX2NvZXJjZSBcInJlc3VtZVwiXG4gICAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5Db2VyY2VUby5kaXZcbiAgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHJlc3VtZSAtPiByZXN1bWUjIy5pbm5lckhUTUwgOj0gcmVzdW1lX2JvZHkgKClcblxuKCogUmUtY2FsY3VsICopXG5sZXQgY29tcHV0ZSAoKSA9XG4gIExpc3QuaXRlclxuICAgIChmdW4gZiAtPlxuICAgICAgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmXG4gICAgICB8PiBMaXN0LmZvbGRfbGVmdCAoZnVuIHMgZmllbGRfaWQgLT4gcyArIHJlYWRfaW50X2lucHV0X2J5X2lkIGZpZWxkX2lkKSAwXG4gICAgICB8PiBmdW4gcXRlIC0+XG4gICAgICBzZXRfdGRfYnlfaWQgZi5JTC5uYW1lICgocXRlICogZi5wcml4IHw+IHN0cmluZ19vZl9pbnQpIF4gXCLCoOKCrFwiKTtcbiAgICAgIHN0cmluZ19vZl9pbnQgcXRlIHw+IHNldF90ZF9ieV9pZCAoZi5JTC5uYW1lIF4gXCJfcXRlXCIpKVxuICAgIElMLmZvdXJuaXR1cmVzO1xuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gdG90YWwgZiAtPlxuICAgICAgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmXG4gICAgICB8PiBMaXN0LmZvbGRfbGVmdCAoZnVuIHMgZmllbGRfaWQgLT4gcyArIHJlYWRfaW50X2lucHV0X2J5X2lkIGZpZWxkX2lkKSAwXG4gICAgICB8PiAoICogKSBmLklMLnByaXggfD4gKCArICkgdG90YWwpXG4gICAgMCBJTC5mb3Vybml0dXJlc1xuICB8PiBzdHJpbmdfb2ZfaW50IHw+IEZ1bi5mbGlwICggXiApIFwiwqDigqxcIiB8PiBzZXRfdGRfYnlfaWQgXCJ0b3RhbFwiO1xuICB1cGRhdGVfbXNnICgpXG5cbmxldCByZXNldF9mb3JtICgpID1cbiAgbGV0IGRvaXQgPVxuICAgIEpzX29mX29jYW1sLkRvbV9odG1sLndpbmRvdyMjY29uZmlybVxuICAgICAgKEpzX29mX29jYW1sLkpzLnN0cmluZyBcIlLDqWluaXRpYWxpc2VyIGNvbXBsw6h0ZW1lbnQgbGUgZm9ybXVsYWlyZSA/XCIpXG4gICAgfD4gSnNfb2Zfb2NhbWwuSnMudG9fYm9vbFxuICBpblxuICBpZiBkb2l0IHRoZW4gKFxuICAgIHNldF9zdHJpbmdfaW5wdXRfYnlfaWQgXCJub21fcHJlbm9tXCIgXCJcIjtcbiAgICBzZXRfc3RyaW5nX2lucHV0X2J5X2lkIFwiYXJyaXZlZVwiIFwiXCI7XG4gICAgc2V0X3N0cmluZ19pbnB1dF9ieV9pZCBcImRlcGFydFwiIFwiXCI7XG4gICAgYWxsX25hbWVzIHw+IExpc3QuaXRlciB6ZXJvX2ludF9pbnB1dF9ieV9pZDtcbiAgICBjb21wdXRlICgpIClcblxubGV0IF8gPVxuICBKc19vZl9vY2FtbC5Kcy5leHBvcnQgXCJjb21wdXRlXCIgY29tcHV0ZTtcbiAgSnNfb2Zfb2NhbWwuSnMuZXhwb3J0IFwicmVzZXRfZm9ybVwiIHJlc2V0X2Zvcm1cbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRW5zdXJlIHRoYXQgW2F0X2V4aXRdIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJvZ3JhbSAqKVxuXG5sZXQgXyA9IGRvX2F0X2V4aXQoKVxuIl19
//]]>
</script>
<div>
<p><b>Tarifs de location du linge — SCI Dubuval — 2022-2023</b></p>
<br/>
<p>
<b>
Si nécessaire, complétez ce formulaire dès la réservation, puis
cliquez sur le bouton « Envoi par courriel » situé en bas de page
pour nous lenvoyer par courriel.
</b>
</p>
<p>Votre demande est modifiable jusquà 7 jours avant votre arrivée.
</p>
<p>
<b>
Le montant sera réglé directement à la Société Guy Grange le jour
de votre arrivée.
</b>
</p><br/>
<p>
<button type="button" onclick="reset_form()">Réinitialiser le formulaire
</button>
</p><br/>
<table>
<tr><td><b>Nom et prénom du locataire : </b></td>
<td><input id="nom_prenom" onchange="compute()"/></td>
</tr>
<tr><td><b>Date darrivée (aaaa-mm-jj) : </b></td>
<td><input id="arrivee" onchange="compute()"/></td>
</tr>
<tr><td><b>Date de départ (aaaa-mm-jj) : </b></td>
<td><input id="depart" onchange="compute()"/></td>
</tr>
</table>
</div>
<div><br/>
<table class="montablo">
<tr class="gras"><td></td><td>Prix unitaire</td><td>Chambre 1</td>
<td>Chambre 2</td><td>Chambre 3</td><td>Séjour</td>
<td>Salle de bains 1</td><td>Salle de bains 2</td><td>Quantités</td>
<td>Totaux</td>
</tr>
<tr><td class="gras">Drap housse 80 cm</td><td id="dh80_prix">4 €</td>
<td>
<select id="dh80_ch1" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
</select>
</td><td></td><td></td><td></td><td></td><td></td>
<td id="dh80_qte"></td><td id="dh80"></td>
</tr>
<tr><td class="gras">Drap housse 90 cm</td><td id="dh90_prix">4 €</td>
<td></td><td></td>
<td>
<select id="dh90_ch3" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
<option value="3">3</option><option value="4">4</option>
</select>
</td><td></td><td></td><td></td><td id="dh90_qte"></td>
<td id="dh90"></td>
</tr>
<tr><td class="gras">Drap housse 140 cm</td>
<td id="dh140_prix">7 €</td><td></td>
<td>
<select id="dh140_ch2" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
</select>
</td><td></td>
<td>
<select id="dh140_sj" onchange="compute()"><option value="0">0</option>
<option value="1">1</option>
</select>
</td><td></td><td></td><td id="dh140_qte"></td><td id="dh140"></td>
</tr>
<tr><td class="gras">Drap housse bébé</td><td id="dhbb_prix">2 €</td>
<td>
<select id="dhbb_ch1" onchange="compute()"><option value="0">0</option>
<option value="1">1</option>
</select>
</td><td></td><td></td><td></td><td></td><td></td>
<td id="dhbb_qte"></td><td id="dhbb"></td>
</tr>
<tr><td class="gras">Housse de couette 1 place</td>
<td id="hc1p_prix">7 €</td>
<td>
<select id="hc1p_ch1" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
</select>
</td><td></td>
<td>
<select id="hc1p_ch3" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
<option value="3">3</option><option value="4">4</option>
</select>
</td><td></td><td></td><td></td><td id="hc1p_qte"></td>
<td id="hc1p"></td>
</tr>
<tr><td class="gras">Housse de couette 2 places</td>
<td id="hc2p_prix">10 €</td><td></td>
<td>
<select id="hc2p_ch2" onchange="compute()"><option value="0">0</option>
<option value="1">1</option>
</select>
</td><td></td>
<td>
<select id="hc2p_sj" onchange="compute()"><option value="0">0</option>
<option value="1">1</option>
</select>
</td><td></td><td></td><td id="hc2p_qte"></td><td id="hc2p"></td>
</tr>
<tr><td class="gras">Housse de couette bébé</td>
<td id="hcbb_prix">3 €</td>
<td>
<select id="hcbb_ch1" onchange="compute()"><option value="0">0</option>
<option value="1">1</option>
</select>
</td><td></td><td></td><td></td><td></td><td></td>
<td id="hcbb_qte"></td><td id="hcbb"></td>
</tr>
<tr><td class="gras">Lit bébé</td><td id="litbb_prix">8 €</td>
<td>
<select id="litbb_ch1" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
</select>
</td><td></td><td></td><td></td><td></td><td></td>
<td id="litbb_qte"></td><td id="litbb"></td>
</tr>
<tr><td class="gras">Protège matelas 80 cm</td>
<td id="pm80_prix">0 €</td>
<td>
<select id="pm80_ch1" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
</select>
</td><td></td><td></td><td></td><td></td><td></td>
<td id="pm80_qte"></td><td id="pm80"></td>
</tr>
<tr><td class="gras">Protège matelas 90 cm</td>
<td id="pm90_prix">0 €</td><td></td><td></td>
<td>
<select id="pm90_ch3" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
<option value="3">3</option><option value="4">4</option>
</select>
</td><td></td><td></td><td></td><td id="pm90_qte"></td>
<td id="pm90"></td>
</tr>
<tr><td class="gras">Protège matelas 140 cm</td>
<td id="pm140_prix">0 €</td><td></td>
<td>
<select id="pm140_ch2" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
</select>
</td><td></td>
<td>
<select id="pm140_sj" onchange="compute()"><option value="0">0</option>
<option value="1">1</option>
</select>
</td><td></td><td></td><td id="pm140_qte"></td><td id="pm140"></td>
</tr>
<tr><td class="gras">Protège matelas bébé</td>
<td id="pmbb_prix">0 €</td>
<td>
<select id="pmbb_ch1" onchange="compute()"><option value="0">0</option>
<option value="1">1</option>
</select>
</td><td></td><td></td><td></td><td></td><td></td>
<td id="pmbb_qte"></td><td id="pmbb"></td>
</tr>
<tr><td class="gras">Taie doreiller</td><td id="taie_prix">1 €</td>
<td>
<select id="taie_ch1" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
<option value="3">3</option><option value="4">4</option>
</select>
</td>
<td>
<select id="taie_ch2" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
<option value="3">3</option><option value="4">4</option>
</select>
</td>
<td>
<select id="taie_ch3" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
<option value="3">3</option><option value="4">4</option>
<option value="5">5</option><option value="6">6</option>
<option value="7">7</option><option value="8">8</option>
</select>
</td>
<td>
<select id="taie_sj" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
<option value="3">3</option><option value="4">4</option>
</select>
</td><td></td><td></td><td id="taie_qte"></td><td id="taie"></td>
</tr>
<tr><td class="gras">Drap de douche</td><td id="douche_prix">2 €</td>
<td></td><td></td><td></td><td></td>
<td>
<select id="douche_sdb1" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option><option value="3">3</option>
</select>
</td>
<td>
<select id="douche_sdb2" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option><option value="3">3</option>
</select>
</td><td id="douche_qte"></td><td id="douche"></td>
</tr>
<tr><td class="gras">Gant de toilette</td><td id="gant_prix">1 €</td>
<td></td><td></td><td></td><td></td>
<td>
<select id="gant_sdb1" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option><option value="3">3</option>
<option value="4">4</option>
</select>
</td>
<td>
<select id="gant_sdb2" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option><option value="3">3</option>
<option value="4">4</option><option value="5">5</option>
<option value="6">6</option>
</select>
</td><td id="gant_qte"></td><td id="gant"></td>
</tr>
<tr><td class="gras">Serviette de toilette</td>
<td id="serv_prix">1 €</td><td></td><td></td><td></td><td></td>
<td>
<select id="serv_sdb1" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option><option value="3">3</option>
<option value="4">4</option>
</select>
</td>
<td>
<select id="serv_sdb2" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option><option value="3">3</option>
<option value="4">4</option><option value="5">5</option>
<option value="6">6</option>
</select>
</td><td id="serv_qte"></td><td id="serv"></td>
</tr>
<tr><td class="gras">Serviette invités</td><td id="inv_prix">1 €</td>
<td></td><td></td><td></td><td></td>
<td>
<select id="inv_sdb1" onchange="compute()"><option value="0">0</option>
<option value="1">1</option>
</select>
</td>
<td>
<select id="inv_sdb2" onchange="compute()"><option value="0">0</option>
<option value="1">1</option>
</select>
</td><td id="inv_qte"></td><td id="inv"></td>
</tr>
<tr><td class="gras">Tapis de douche</td><td id="tapis_prix">2 €</td>
<td></td><td></td><td></td><td></td>
<td>
<select id="tapis_sdb1" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option>
</select>
</td>
<td>
<select id="tapis_sdb2" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option>
</select>
</td><td id="tapis_qte"></td><td id="tapis"></td>
</tr>
<tr><td class="gras">Essuie-mains</td><td id="mains_prix">1 €</td>
<td></td><td></td><td></td>
<td>
<select id="mains_sj" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
</select>
</td><td></td><td></td><td id="mains_qte"></td><td id="mains"></td>
</tr>
<tr><td class="gras">Serviettes de table</td>
<td id="table_prix">1 €</td><td></td><td></td><td></td>
<td>
<select id="table_sj" onchange="compute()"><option value="0">0</option>
<option value="1">1</option><option value="2">2</option>
<option value="3">3</option><option value="4">4</option>
<option value="5">5</option><option value="6">6</option>
<option value="7">7</option><option value="8">8</option>
<option value="9">9</option><option value="10">10</option>
</select>
</td><td></td><td></td><td id="table_qte"></td><td id="table"></td>
</tr>
<tr><td class="gras">Torchons à vaisselle</td>
<td id="torchon_prix">1 €</td><td></td><td></td><td></td>
<td>
<select id="torchon_sj" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option>
</select>
</td><td></td><td></td><td id="torchon_qte"></td><td id="torchon"></td>
</tr>
<tr><td class="gras">Torchons microfibre</td>
<td id="microfibre_prix">0 €</td><td></td><td></td><td></td>
<td>
<select id="microfibre_sj" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option>
</select>
</td>
<td>
<select id="microfibre_sdb1" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option>
</select>
</td>
<td>
<select id="microfibre_sdb2" onchange="compute()">
<option value="0">0</option><option value="1">1</option>
<option value="2">2</option>
</select>
</td><td id="microfibre_qte"></td><td id="microfibre"></td>
</tr>
<tr><td class="gras">Totaux</td><td></td><td></td><td></td><td></td>
<td></td><td></td><td></td><td></td><td id="total"></td>
</tr>
<tr class="gras"><td></td><td>Prix unitaire</td><td>Chambre 1</td>
<td>Chambre 2</td><td>Chambre 3</td><td>Séjour</td>
<td>Salle de bains 1</td><td>Salle de bains 2</td><td>Quantités</td>
<td>Totaux</td>
</tr>
</table><br/>
<a id="benvoi"><button type="button">Envoi par courriel</button></a>
<p>
Si jamais le bouton denvoi par courriel ne fonctionne pas, vous pouvez
nous envoyer une copie du résumé ci-dessous :
</p><div id="resume"></div>
</div>
</body>